diff --git a/mechanisms/CMakeLists.txt b/mechanisms/CMakeLists.txt index 56fd7d91b384f7b699aacc69914b263030ed6151..a751dd25a97249bd71a3df5c67738059e96ae380 100644 --- a/mechanisms/CMakeLists.txt +++ b/mechanisms/CMakeLists.txt @@ -1,12 +1,5 @@ include(BuildModules.cmake) -# The list of library-provided mechanisms used to populate the default catalogue: -set(mechanisms pas hh expsyn exp2syn nernst test_kin1 test_kinlva test_ca nax kdrmt kamt) - -set(mod_srcdir "${CMAKE_CURRENT_SOURCE_DIR}/mod") - -# Generate mechanism implementations. - set(mech_dir "${CMAKE_CURRENT_BINARY_DIR}/generated") file(MAKE_DIRECTORY "${mech_dir}") @@ -15,37 +8,78 @@ if(ARB_WITH_EXTERNAL_MODCC) set(external_modcc MODCC ${modcc}) endif() +add_custom_target(build_all_mods) + +set(mech_sources "") + +# ALLEN +set(allen_mechanisms CaDynamics Ca_HVA Ca_LVA Ih Im Im_v2 K_P K_T Kd Kv2like Kv3_1 NaTa NaTs NaV Nap SK) +set(allen_mod_srcdir "${CMAKE_CURRENT_SOURCE_DIR}/allen") + build_modules( - ${mechanisms} - SOURCE_DIR "${mod_srcdir}" + ${allen_mechanisms} + SOURCE_DIR "${allen_mod_srcdir}" DEST_DIR "${mech_dir}" ${external_modcc} MODCC_FLAGS -t cpu -t gpu ${ARB_MODCC_FLAGS} GENERATES .hpp _cpu.cpp _gpu.cpp _gpu.cu - TARGET build_all_mods + TARGET build_catalogue_allen_mods) + +set(allen_catalogue_source ${CMAKE_CURRENT_BINARY_DIR}/allen_catalogue.cpp) +set(allen_catalogue_options -A arbor -I ${mech_dir} -o ${allen_catalogue_source} -B multicore -C allen) +if(ARB_WITH_GPU) + list(APPEND allen_catalogue_options -B gpu) +endif() + +add_custom_command( + OUTPUT ${allen_catalogue_source} + COMMAND ${CMAKE_CURRENT_SOURCE_DIR}/generate_catalogue ${allen_catalogue_options} ${allen_mechanisms} + DEPENDS generate_catalogue ) -# Generate source for default mechanism catalogue. +add_custom_target(allen_catalogue_cpp_target DEPENDS ${allen_catalogue_source}) +add_dependencies(build_catalogue_allen_mods allen_catalogue_cpp_target) +add_dependencies(build_all_mods build_catalogue_allen_mods) + +list(APPEND mech_sources ${allen_catalogue_source}) +foreach(mech ${allen_mechanisms}) + list(APPEND mech_sources ${mech_dir}/${mech}_cpu.cpp) + if(ARB_WITH_GPU) + list(APPEND mech_sources ${mech_dir}/${mech}_gpu.cpp) + list(APPEND mech_sources ${mech_dir}/${mech}_gpu.cu) + endif() +endforeach() + +# DEFAULT +set(default_mechanisms exp2syn expsyn hh kamt kdrmt nax nernst pas) +set(default_mod_srcdir "${CMAKE_CURRENT_SOURCE_DIR}/default") + +build_modules( + ${default_mechanisms} + SOURCE_DIR "${default_mod_srcdir}" + DEST_DIR "${mech_dir}" + ${external_modcc} + MODCC_FLAGS -t cpu -t gpu ${ARB_MODCC_FLAGS} + GENERATES .hpp _cpu.cpp _gpu.cpp _gpu.cu + TARGET build_catalogue_default_mods) -set(catsrc ${CMAKE_CURRENT_BINARY_DIR}/default_catalogue.cpp) -set(default_catalogue_options -A arbor -I ${mech_dir} -o ${catsrc} -B multicore) +set(default_catalogue_source ${CMAKE_CURRENT_BINARY_DIR}/default_catalogue.cpp) +set(default_catalogue_options -A arbor -I ${mech_dir} -o ${default_catalogue_source} -B multicore -C default) if(ARB_WITH_GPU) list(APPEND default_catalogue_options -B gpu) endif() add_custom_command( - OUTPUT ${catsrc} - COMMAND ${CMAKE_CURRENT_SOURCE_DIR}/generate_default_catalogue ${default_catalogue_options} ${mechanisms} - DEPENDS generate_default_catalogue -) - -add_custom_target(default_catalogue_cpp_target DEPENDS ${catsrc}) -add_dependencies(build_all_mods default_catalogue_cpp_target) + OUTPUT ${default_catalogue_source} + COMMAND ${CMAKE_CURRENT_SOURCE_DIR}/generate_catalogue ${default_catalogue_options} ${default_mechanisms} + DEPENDS generate_catalogue) -# Make libraries with the implementations of the mechanism kernels. +add_custom_target(default_catalogue_cpp_target DEPENDS ${default_catalogue_source}) +add_dependencies(build_catalogue_default_mods default_catalogue_cpp_target) +add_dependencies(build_all_mods build_catalogue_default_mods) -set(mech_sources ${catsrc}) -foreach(mech ${mechanisms}) +list(APPEND mech_sources ${default_catalogue_source}) +foreach(mech ${default_mechanisms}) list(APPEND mech_sources ${mech_dir}/${mech}_cpu.cpp) if(ARB_WITH_GPU) list(APPEND mech_sources ${mech_dir}/${mech}_gpu.cpp) @@ -53,8 +87,8 @@ foreach(mech ${mechanisms}) endif() endforeach() +# set(arbor_mechanism_sources ${mech_sources} PARENT_SCOPE) - if(ARB_WITH_CUDA_CLANG OR ARB_WITH_HIP_CLANG) set_source_files_properties(${arbor_mechanism_sources} PROPERTIES LANGUAGE CXX) endif() diff --git a/mechanisms/allen/CaDynamics.mod b/mechanisms/allen/CaDynamics.mod new file mode 100644 index 0000000000000000000000000000000000000000..f39e3c5800bdff94022bd286e6369b51a22b1bce --- /dev/null +++ b/mechanisms/allen/CaDynamics.mod @@ -0,0 +1,41 @@ +: Dynamics that track inside calcium concentration +: modified from Destexhe et al. 1994 + +NEURON { + SUFFIX CaDynamics + USEION ca READ ica WRITE cai + RANGE decay, gamma, minCai, depth + GLOBAL F +} + +UNITS { + (mV) = (millivolt) + (mA) = (milliamp) + (molar) = (1/liter) + (mM) = (millimolar) + (um) = (micron) +} + +PARAMETER { + F = 96485.3321233100184 (coulomb/mole) : Faraday's constant + gamma = 0.05 () : percent of free calcium (not buffered) + decay = 80 (ms) : rate of removal of calcium + depth = 0.1 (um) : depth of shell + minCai = 1e-4 (mM) +} + +INITIAL { + cai = minCai +} + +STATE { + cai (mM) +} + +BREAKPOINT { + SOLVE states METHOD cnexp +} + +DERIVATIVE states { + cai' = -10000*ica*gamma/(2*F*depth) - (cai - minCai)/decay +} diff --git a/mechanisms/allen/Ca_HVA.mod b/mechanisms/allen/Ca_HVA.mod new file mode 100644 index 0000000000000000000000000000000000000000..de855c8a4c8da0c75df26a260aacacb28504bdd0 --- /dev/null +++ b/mechanisms/allen/Ca_HVA.mod @@ -0,0 +1,58 @@ +: Reference: Reuveni, Friedman, Amitai, and Gutnick, J.Neurosci. 1993 + +NEURON { + SUFFIX Ca_HVA + USEION ca READ eca WRITE ica + RANGE gbar +} + +UNITS { + (S) = (siemens) + (mV) = (millivolt) + (mA) = (milliamp) +} + +PARAMETER { + gbar = 0.00001 (S/cm2) +} + +STATE { + m + h +} + +BREAKPOINT { + SOLVE states METHOD cnexp + ica = gbar*m*m*h*(v-eca) +} + +DERIVATIVE states { + LOCAL mAlpha, mBeta, hAlpha, hBeta, mRat, hRat + + mAlpha = 0.055*vtrap(-27 - v, 3.8) + mBeta = 0.94*exp((-75-v)/17) + mRat = mAlpha + mBeta + + hAlpha = 0.000457*exp((-13-v)/50) + hBeta = 0.0065/(exp((-v-15)/28)+1) + hRat = hAlpha + hBeta + + m' = mAlpha - m*mRat + h' = hAlpha - h*hRat +} + +INITIAL { + LOCAL mAlpha, mBeta, hAlpha, hBeta + + mAlpha = 0.055*vtrap(-27 - v, 3.8) + mBeta = 0.94*exp((-75 - v)/17) + m = mAlpha/(mAlpha + mBeta) + + hAlpha = 0.000457*exp((-13-v)/50) + hBeta = 0.0065/(exp((-v-15)/28) + 1) + h = hAlpha/(hAlpha + hBeta) +} + +FUNCTION vtrap(x, y) { : Traps for 0 in denominator of rate equations + vtrap = y*exprelr(x/y) +} diff --git a/mechanisms/allen/Ca_LVA.mod b/mechanisms/allen/Ca_LVA.mod new file mode 100644 index 0000000000000000000000000000000000000000..0d35ebd34991a2bec477b690402d182949b1574a --- /dev/null +++ b/mechanisms/allen/Ca_LVA.mod @@ -0,0 +1,54 @@ +: Comment: LVA ca channel. Note: mtau is an approximation from the plots +: Reference: Avery and Johnston 1996, tau from Randall 1997 +: Comment: shifted by -10 mv to correct for junction potential +: Comment: corrected rates using q10 = 2.3, target temperature 34, orginal 21 + +NEURON { + SUFFIX Ca_LVA + USEION ca READ eca WRITE ica + RANGE gbar +} + +UNITS { + (S) = (siemens) + (mV) = (millivolt) + (mA) = (milliamp) +} + +PARAMETER { + gbar = 0.00001 (S/cm2) + celsius +} + +ASSIGNED { + qt +} + +STATE { + m + h +} + +BREAKPOINT { + SOLVE states METHOD cnexp + ica = gbar*m*m*h*(v - eca) +} + +DERIVATIVE states { + LOCAL mInf, mRat, hInf, hRat + + mInf = 1/(1 + exp((v + 40)/-6)) + hInf = 1/(1 + exp((v + 90)/6.4)) + mRat = qt/(5 + 20/(1 + exp((v + 35)/5))) + hRat = qt/(20 + 50/(1 + exp((v + 50)/7))) + + m' = (mInf - m)*mRat + h' = (hInf - h)*hRat +} + +INITIAL { + qt = 2.3^((celsius-21)/10) + + m = 1/(1 + exp((v + 40)/-6)) + h = 1/(1 + exp((v + 90)/6.4)) +} diff --git a/mechanisms/allen/Ih.mod b/mechanisms/allen/Ih.mod new file mode 100644 index 0000000000000000000000000000000000000000..e21b8e75b788ab28aeda7d715fe7f440bb27b0b8 --- /dev/null +++ b/mechanisms/allen/Ih.mod @@ -0,0 +1,50 @@ +: Reference: Kole,Hallermann,and Stuart, J. Neurosci. 2006 + +NEURON { + SUFFIX Ih + NONSPECIFIC_CURRENT ihcn + RANGE gbar +} + +UNITS { + (S) = (siemens) + (mV) = (millivolt) + (mA) = (milliamp) +} + +PARAMETER { + gbar = 0.00001 (S/cm2) + ehcn = -45.0 (mV) +} + +STATE { + m +} + +BREAKPOINT { + SOLVE states METHOD cnexp + ihcn = gbar*m*(v-ehcn) +} + +DERIVATIVE states { + LOCAL mAlpha, mBeta, mRat + + mAlpha = 0.001*6.43*vtrap(v + 154.9, 11.9) + mBeta = 0.001*193*exp(v/33.1) + mRat = mAlpha + mBeta + + m' = mAlpha - m*mRat +} + +INITIAL { + LOCAL mAlpha, mBeta + + mAlpha = 0.001 * 6.43 * vtrap(v + 154.9, 11.9) + mBeta = 0.001*193*exp(v/33.1) + + m = mAlpha/(mAlpha + mBeta) +} + +FUNCTION vtrap(x, y) { : Traps for 0 in denominator of rate equations + vtrap = y*exprelr(x/y) +} diff --git a/mechanisms/allen/Im.mod b/mechanisms/allen/Im.mod new file mode 100644 index 0000000000000000000000000000000000000000..3ebe0d1aa688384537258fbc4db3643206420791 --- /dev/null +++ b/mechanisms/allen/Im.mod @@ -0,0 +1,58 @@ +: Reference: Adams et al. 1982 - M-currents and other potassium currents in bullfrog sympathetic neurones +: Comment: corrected rates using q10 = 2.3, target temperature 34, orginal 21 + +NEURON { + SUFFIX Im + USEION k READ ek WRITE ik + RANGE gbar, g, ik +} + +UNITS { + (S) = (siemens) + (mV) = (millivolt) + (mA) = (milliamp) +} + +PARAMETER { + gbar = 0.00001 (S/cm2) +} + +ASSIGNED { + v (mV) + g (S/cm2) + celsius (degC) + mInf + mTau + mAlpha + mBeta +} + +STATE { + m +} + +BREAKPOINT { + SOLVE states METHOD cnexp + g = gbar*m + ik = g*(v-ek) +} + +DERIVATIVE states { + rates(v) + m' = (mInf-m)/mTau +} + +INITIAL{ + rates(v) + m = mInf +} + +PROCEDURE rates(v){ + LOCAL qt + qt = 2.3^((celsius-21)/10) + + mAlpha = 3.3e-3*exp(2.5*0.04*(v - -35)) + mBeta = 3.3e-3*exp(-2.5*0.04*(v - -35)) + mInf = mAlpha/(mAlpha + mBeta) + mTau = (1/(mAlpha + mBeta))/qt +} diff --git a/mechanisms/allen/Im_v2.mod b/mechanisms/allen/Im_v2.mod new file mode 100644 index 0000000000000000000000000000000000000000..cc8c872d276e6fa63197d195549eab45624b99b2 --- /dev/null +++ b/mechanisms/allen/Im_v2.mod @@ -0,0 +1,54 @@ +: Based on Im model of Vervaeke et al. (2006) + +NEURON { + SUFFIX Im_v2 + USEION k READ ek WRITE ik + RANGE gbar, ik +} + +UNITS { + (S) = (siemens) + (mV) = (millivolt) + (mA) = (milliamp) +} + +PARAMETER { + celsius (degC) + gbar = 0.00001 (S/cm2) +} + +STATE { + m +} + +BREAKPOINT { + SOLVE states METHOD cnexp + ik = gbar*m*(v - ek) +} + +DERIVATIVE states { + LOCAL qt, mAlpha, mBeta, mInf, mRat, iab + + qt = 2.3^((celsius - 30)/10) + + mAlpha = 0.007 * exp(( 6 * 0.4 * (v + 48))/26.12) + mBeta = 0.007 * exp((-6 * (1 - 0.4) * (v + 48))/26.12) + + iab = 1/(mAlpha + mBeta) + + mInf = mAlpha*iab + mRat = qt/(15 + iab) + + m' = (mInf - m)*mRat +} + +INITIAL { + LOCAL qt, mAlpha, mBeta + qt = 2.3^((celsius - 30)/10) + + mAlpha = 0.007*exp(( 6 * 0.4 * (v + 48))/26.12) + mBeta = 0.007*exp((-6 * (1 - 0.4) * (v + 48))/26.12) + + m = mAlpha/(mAlpha + mBeta) +} + diff --git a/mechanisms/allen/K_P.mod b/mechanisms/allen/K_P.mod new file mode 100644 index 0000000000000000000000000000000000000000..0e20d5fdec544b1243fd46ebfe124994d1d82683 --- /dev/null +++ b/mechanisms/allen/K_P.mod @@ -0,0 +1,69 @@ +: Comment: The persistent component of the K current +: Reference: Voltage-gated K+ channels in layer 5 neocortical pyramidal neurones from young rats:subtypes and gradients,Korngreen and Sakmann, J. Physiology, 2000 + + +NEURON { + SUFFIX K_P + USEION k READ ek WRITE ik + RANGE gbar, g, ik +} + +UNITS { + (S) = (siemens) + (mV) = (millivolt) + (mA) = (milliamp) +} + +PARAMETER { + gbar = 0.00001 (S/cm2) + vshift = 0 (mV) + tauF = 1 +} + +ASSIGNED { + v (mV) + g (S/cm2) + celsius (degC) + mInf + mTau + hInf + hTau +} + +STATE { + m + h +} + +BREAKPOINT { + SOLVE states METHOD cnexp + g = gbar*m*m*h + ik = g*(v-ek) +} + +DERIVATIVE states { + rates(v) + m' = (mInf-m)/mTau + h' = (hInf-h)/hTau +} + +INITIAL{ + rates(v) + m = mInf + h = hInf +} + +PROCEDURE rates(v) { + LOCAL qt + qt = 2.3^((celsius-21)/10) + UNITSOFF + mInf = 1 / (1 + exp(-(v - (-14.3 + vshift)) / 14.6)) + if (v < -50 + vshift){ + mTau = tauF * (1.25+175.03*exp(-(v - vshift) * -0.026))/qt + } else { + mTau = tauF * (1.25+13*exp(-(v - vshift) * 0.026))/qt + } + hInf = 1/(1 + exp(-(v - (-54 + vshift))/-11)) + hTau = (360+(1010+24*(v - (-55 + vshift)))*exp(-((v - (-75 + vshift))/48)^2))/qt + UNITSON +} diff --git a/mechanisms/allen/K_T.mod b/mechanisms/allen/K_T.mod new file mode 100644 index 0000000000000000000000000000000000000000..ca867d4f9c71415f36c642c6954bcc655312cb97 --- /dev/null +++ b/mechanisms/allen/K_T.mod @@ -0,0 +1,52 @@ +: Comment: The transient component of the K current +: Reference: Voltage-gated K+ channels in layer 5 neocortical pyramidal neurones from young rats:subtypes and gradients +: Korngreen and Sakmann, J. Physiology, 2000 + +NEURON { + SUFFIX K_T + USEION k READ ek WRITE ik + RANGE gbar +} + +UNITS { + (S) = (siemens) + (mV) = (millivolt) + (mA) = (milliamp) +} + +PARAMETER { + gbar = 0.00001 (S/cm2) + vshift = 0 (mV) + mTauF = 1.0 + hTauF = 1.0 + celsius (degC) +} + +STATE { + m + h +} + +BREAKPOINT { + SOLVE states METHOD cnexp + ik = gbar*m*m*m*m*h*(v-ek) +} + +DERIVATIVE states { + LOCAL qt, mRat, hRat, hInf, mInf + + qt = 2.3^((celsius-21)/10) + + mInf = 1/(1 + exp(-(v + 47 - vshift)/29)) + hInf = 1/(1 + exp( (v + 66 - vshift)/10)) + mRat = qt/(0.34 + mTauF*0.92*exp(-((v + 71 - vshift)/59)^2)) + hRat = qt/(8 + hTauF*49 *exp(-((v + 73 - vshift)/23)^2)) + + m' = (mInf - m)*mRat + h' = (hInf - h)*hRat +} + +INITIAL{ + m = 1/(1 + exp(-(v + 47 - vshift)/29)) + h = 1/(1 + exp( (v + 66 - vshift)/10)) +} diff --git a/mechanisms/allen/Kd.mod b/mechanisms/allen/Kd.mod new file mode 100644 index 0000000000000000000000000000000000000000..cc0221da7b82549e451de990ebeb375f7f63e3d3 --- /dev/null +++ b/mechanisms/allen/Kd.mod @@ -0,0 +1,41 @@ +: Based on Kd model of Foust et al. (2011) + +NEURON { + SUFFIX Kd + USEION k READ ek WRITE ik + RANGE gbar, ik +} + +UNITS { + (S) = (siemens) + (mV) = (millivolt) + (mA) = (milliamp) +} + +PARAMETER { + gbar = 0.00001 (S/cm2) +} + +STATE { + m + h +} + +BREAKPOINT { + SOLVE states METHOD cnexp + ik = gbar*m*h*(v - ek) +} + +DERIVATIVE states { + LOCAL mInf, hInf + mInf = 1 - 1/(1 + exp((v + 43)/8)) + hInf = 1/(1 + exp((v + 67)/7.3)) + m' = (mInf - m) + h' = (hInf - h)/1500 +} + +INITIAL { + m = 1 - 1/(1 + exp((v + 43)/8)) + h = 1/(1 + exp((v + 67)/7.3)) +} + diff --git a/mechanisms/allen/Kv2like.mod b/mechanisms/allen/Kv2like.mod new file mode 100644 index 0000000000000000000000000000000000000000..a95a4177ad1a45ee3803e516babd67525af00ad5 --- /dev/null +++ b/mechanisms/allen/Kv2like.mod @@ -0,0 +1,69 @@ +: Kv2-like channel +: Adapted from model implemented in Keren et al. 2005 +: Adjusted parameters to be similar to guangxitoxin-sensitive current in mouse CA1 pyramids from Liu and Bean 2014 + +NEURON { + SUFFIX Kv2like + USEION k READ ek WRITE ik + RANGE gbar +} + +UNITS { + (S) = (siemens) + (mV) = (millivolt) + (mA) = (milliamp) +} + +PARAMETER { + celsius (degC) + gbar = 0.00001 (S/cm2) +} + +STATE { + m + h1 + h2 +} + +BREAKPOINT { + SOLVE states METHOD cnexp + ik = 0.5*gbar*m*m*(h1 + h2)*(v - ek) +} + +DERIVATIVE states { + LOCAL qt, mAlpha, mBeta, hInf, h1Rat, h2Rat, mRat + qt = 2.3^((celsius-21)/10) + + mAlpha = 0.12*vtrap(43 - v, 11) + mBeta = 0.02*exp(-(v + 1.27) / 120) + mRat = 0.4*qt*(mAlpha + mBeta) + + hInf = 1/(1 + exp((v + 58) / 11)) + h1Rat = qt/( 360 + (1010 + 23.7*(v + 54))*exp(-((v + 75) / 48)^2)) + h2Rat = qt/(2350 + 1380*exp(-0.011*v) - 210*exp(-0.03*v)) + + if (h2Rat < 0) { + h2Rat = 1e-3 + } + + m' = 0.4*qt*mAlpha - m*mRat + h1' = (hInf - h1)*h1Rat + h2' = (hInf - h2)*h2Rat +} + +INITIAL { + LOCAL hInf, mAlpha, mBeta + + mAlpha = 0.12*vtrap(43 - v, 11) + mBeta = 0.02*exp(-(v + 1.27) / 120) + + hInf = 1/(1 + exp((v + 58) / 11)) + + m = mAlpha/(mAlpha + mBeta) + h1 = hInf + h2 = hInf +} + +FUNCTION vtrap(x, y) { : Traps for 0 in denominator of rate equations + vtrap = y*exprelr(x/y) +} diff --git a/mechanisms/allen/Kv3_1.mod b/mechanisms/allen/Kv3_1.mod new file mode 100644 index 0000000000000000000000000000000000000000..a3258e260e05b538c3b321dd72c597f9e57b184a --- /dev/null +++ b/mechanisms/allen/Kv3_1.mod @@ -0,0 +1,39 @@ +: Comment: Kv3-like potassium current + +NEURON { + SUFFIX Kv3_1 + USEION k READ ek WRITE ik + RANGE gbar, ik +} + +UNITS { + (S) = (siemens) + (mV) = (millivolt) + (mA) = (milliamp) +} + +PARAMETER { + gbar = 0.00001 (S/cm2) + vshift = 0 (mV) +} + +STATE { + m +} + +BREAKPOINT { + SOLVE states METHOD cnexp + ik = gbar*m*(v - ek) +} + +DERIVATIVE states { + LOCAL mInf, mRat + mInf = 1/(1 + exp(-(v - 18.700 - vshift)/9.700)) + mRat = 0.25*(1 + exp(-(v + 46.560 - vshift)/44.140)) + + m' = (mInf - m)*mRat +} + +INITIAL { + m = 1/(1 + exp(-(v - 18.700 - vshift)/9.700)) +} diff --git a/mechanisms/allen/NaTa.mod b/mechanisms/allen/NaTa.mod new file mode 100644 index 0000000000000000000000000000000000000000..51b9a8ecb8a5e74b08feeec75a1bf4305e2af2a4 --- /dev/null +++ b/mechanisms/allen/NaTa.mod @@ -0,0 +1,93 @@ +: Reference: Colbert and Pan 2002 + +NEURON { + SUFFIX NaTa + USEION na READ ena WRITE ina + RANGE gbar, g, ina +} + +UNITS { + (S) = (siemens) + (mV) = (millivolt) + (mA) = (milliamp) +} + +PARAMETER { + gbar = 0.00001 (S/cm2) + + malphaF = 0.182 + mbetaF = 0.124 + mvhalf = -48 (mV) + mk = 6 (mV) + + halphaF = 0.015 + hbetaF = 0.015 + hvhalf = -69 (mV) + hk = 6 (mV) +} + +ASSIGNED { + v (mV) + g (S/cm2) + celsius (degC) + mInf + mTau + mAlpha + mBeta + hInf + hTau + hAlpha + hBeta +} + +STATE { + m + h +} + +BREAKPOINT { + SOLVE states METHOD cnexp + g = gbar*m*m*m*h + ina = g*(v-ena) +} + +DERIVATIVE states { + rates(v) + m' = (mInf-m)/mTau + h' = (hInf-h)/hTau +} + +INITIAL{ + rates(v) + m = mInf + h = hInf +} + +PROCEDURE rates(v){ + LOCAL qt + qt = 2.3^((celsius-23)/10) + + UNITSOFF + mAlpha = malphaF * vtrap(-(v - mvhalf), mk) + mBeta = mbetaF * vtrap((v - mvhalf), mk) + + mInf = mAlpha/(mAlpha + mBeta) + mTau = (1/(mAlpha + mBeta))/qt + + hAlpha = halphaF * vtrap(v - hvhalf, hk) : ng - adjusted this to match actual Colbert & Pan values for soma model + hBeta = hbetaF * vtrap(-(v - hvhalf), hk) : ng - adjusted this to match actual Colbert & Pan values for soma model + + hInf = hAlpha/(hAlpha + hBeta) + hTau = (1/(hAlpha + hBeta))/qt + UNITSON +} + +FUNCTION vtrap(x, y) { : Traps for 0 in denominator of rate equations + UNITSOFF + if (fabs(x / y) < 1e-6) { + vtrap = y * (1 - x / y / 2) + } else { + vtrap = x / (exp(x / y) - 1) + } + UNITSON +} diff --git a/mechanisms/allen/NaTs.mod b/mechanisms/allen/NaTs.mod new file mode 100644 index 0000000000000000000000000000000000000000..0c868b9a77bd00978b4c589ce504cbc23832696b --- /dev/null +++ b/mechanisms/allen/NaTs.mod @@ -0,0 +1,93 @@ +: Reference: Colbert and Pan 2002 + +NEURON { + SUFFIX NaTs + USEION na READ ena WRITE ina + RANGE gbar, g, ina +} + +UNITS { + (S) = (siemens) + (mV) = (millivolt) + (mA) = (milliamp) +} + +PARAMETER { + gbar = 0.00001 (S/cm2) + + malphaF = 0.182 + mbetaF = 0.124 + mvhalf = -40 (mV) + mk = 6 (mV) + + halphaF = 0.015 + hbetaF = 0.015 + hvhalf = -66 (mV) + hk = 6 (mV) +} + +ASSIGNED { + v (mV) + g (S/cm2) + celsius (degC) + mInf + mTau + mAlpha + mBeta + hInf + hTau + hAlpha + hBeta +} + +STATE { + m + h +} + +BREAKPOINT { + SOLVE states METHOD cnexp + g = gbar*m*m*m*h + ina = g*(v-ena) +} + +DERIVATIVE states { + rates(v) + m' = (mInf-m)/mTau + h' = (hInf-h)/hTau +} + +INITIAL{ + rates(v) + m = mInf + h = hInf +} + +PROCEDURE rates(v){ + LOCAL qt + qt = 2.3^((celsius-23)/10) + + UNITSOFF + mAlpha = malphaF * vtrap(-(v - mvhalf), mk) + mBeta = mbetaF * vtrap((v - mvhalf), mk) + + mInf = mAlpha/(mAlpha + mBeta) + mTau = (1/(mAlpha + mBeta))/qt + + hAlpha = halphaF * vtrap(v - hvhalf, hk) + hBeta = hbetaF * vtrap(-(v - hvhalf), hk) + + hInf = hAlpha/(hAlpha + hBeta) + hTau = (1/(hAlpha + hBeta))/qt + UNITSON +} + +FUNCTION vtrap(x, y) { : Traps for 0 in denominator of rate equations + UNITSOFF + if (fabs(x / y) < 1e-6) { + vtrap = y * (1 - x / y / 2) + } else { + vtrap = x / (exp(x / y) - 1) + } + UNITSON +} diff --git a/mechanisms/allen/NaV.mod b/mechanisms/allen/NaV.mod new file mode 100644 index 0000000000000000000000000000000000000000..c78f7e95b5a03834f8d251fdf14e4b5ae6f6f688 --- /dev/null +++ b/mechanisms/allen/NaV.mod @@ -0,0 +1,182 @@ +TITLE Mouse sodium current +: Kinetics of Carter et al. (2012) +: Based on 37 degC recordings from mouse hippocampal CA1 pyramids + +NEURON { + SUFFIX NaV + USEION na READ ena WRITE ina + RANGE gbar +} + +ASSIGNED { + qt +} + +UNITS { + (mV) = (millivolt) + (S) = (siemens) +} + +PARAMETER { + gbar = .015 (S/cm2) + celsius (degC) + + : kinetic parameters + Con = 0.01 (/ms) : closed -> inactivated transitions + Coff = 40 (/ms) : inactivated -> closed transitions + Oon = 8 (/ms) : open -> Ineg transition + Ooff = 0.05 (/ms) : Ineg -> open transition + alpha = 400 (/ms) + beta = 12 (/ms) + gamma = 250 (/ms) : opening + delta = 60 (/ms) : closing + + alfac = 2.51 + btfac = 5.32 + + : Vdep + x1 = 24 (mV) : Vdep of activation (alpha) + x2 = -24 (mV) : Vdep of deactivation (beta) +} + +STATE { + C1 FROM 0 TO 1 + C2 FROM 0 TO 1 + C3 FROM 0 TO 1 + C4 FROM 0 TO 1 + C5 FROM 0 TO 1 + I1 FROM 0 TO 1 + I2 FROM 0 TO 1 + I3 FROM 0 TO 1 + I4 FROM 0 TO 1 + I5 FROM 0 TO 1 + O FROM 0 TO 1 + I6 FROM 0 TO 1 +} + +BREAKPOINT { + SOLVE activation METHOD sparse + ina = gbar*O*(v - ena) +} + +INITIAL { + qt = 2.3^((celsius-37)/10) + SOLVE seqinitial +} + +KINETIC activation { + LOCAL f01, f02, f03, f04, f0O, f11, f12, f13, f14, fi1, fi2, fi3, fi4, fi5, fin, b01, b02, b03, b04, b0O, b11, b12, b13, b14, bi1, bi2, bi3, bi4, bi5, bin, ibtf + + ibtf = 1/btfac + + f04 = qt*alpha*exp(v/x1) + f03 = 2*f04 + f02 = 3*f04 + f01 = 4*f04 + f0O = qt*gamma + + f14 = alfac*f04 + f13 = 2*f14 + f12 = 3*f14 + f11 = 4*f14 + + fi1 = qt*Con + fi2 = fi1*alfac + fi3 = fi2*alfac + fi4 = fi3*alfac + fi5 = fi4*alfac + fin = qt*Oon + + b01 = qt*beta*exp(v/x2) + b02 = 2*b01 + b03 = 3*b01 + b04 = 4*b01 + b0O = qt*delta + + b11 = b01*ibtf + b12 = 2*b11 + b13 = 3*b11 + b14 = 4*b11 + + bi1 = qt*Coff + bi2 = bi1*ibtf + bi3 = bi2*ibtf + bi4 = bi3*ibtf + bi5 = bi4*ibtf + bin = qt*Ooff + + ~ C1 <-> C2 (f01, b01) + ~ C2 <-> C3 (f02, b02) + ~ C3 <-> C4 (f03, b03) + ~ C4 <-> C5 (f04, b04) + ~ C5 <-> O (f0O, b0O) + ~ O <-> I6 (fin, bin) + ~ I1 <-> I2 (f11, b11) + ~ I2 <-> I3 (f12, b12) + ~ I3 <-> I4 (f13, b13) + ~ I4 <-> I5 (f14, b14) + ~ I5 <-> I6 (f0O, b0O) + ~ C1 <-> I1 (fi1, bi1) + ~ C2 <-> I2 (fi2, bi2) + ~ C3 <-> I3 (fi3, bi3) + ~ C4 <-> I4 (fi4, bi4) + ~ C5 <-> I5 (fi5, bi5) + + CONSERVE C1 + C2 + C3 + C4 + C5 + O + I1 + I2 + I3 + I4 + I5 + I6 = 1 +} + +: sets initial equilibrium +LINEAR seqinitial { + LOCAL f01, f02, f03, f04, f11, f12, f13, f14, f0O, fi1, fi2, fi3, fi4, fi5, fin, b01, b02, b03, b04, b11, b12, b13, b14, b0O, bi1, bi2, bi3, bi4, bi5, bin, ibtf + + ibtf = 1/btfac + f04 = qt*alpha*exp(v/x1) + f03 = 2*f04 + f02 = 3*f04 + f01 = 4*f04 + f0O = qt*gamma + + f14 = alfac*f04 + f13 = 2*f14 + f12 = 3*f14 + f11 = 4*f14 + + fi1 = qt*Con + fi2 = fi1*alfac + fi3 = fi2*alfac + fi4 = fi3*alfac + fi5 = fi4*alfac + fin = qt*Oon + + b01 = qt*beta*exp(v/x2) + b02 = 2*b01 + b03 = 3*b01 + b04 = 4*b01 + b0O = qt*delta + + b11 = b01*ibtf + b12 = 2*b11 + b13 = 3*b11 + b14 = 4*b11 + + bi1 = qt*Coff + bi2 = bi1*ibtf + bi3 = bi2*ibtf + bi4 = bi3*ibtf + bi5 = bi4*ibtf + bin = qt*Ooff + + ~ I1*bi1 + C2*b01 - C1*( fi1 + f01) = 0 + ~ C1*f01 + I2*bi2 + C3*b02 - C2*(b01 + fi2 + f02) = 0 + ~ C2*f02 + I3*bi3 + C4*b03 - C3*(b02 + fi3 + f03) = 0 + ~ C3*f03 + I4*bi4 + C5*b04 - C4*(b03 + fi4 + f04) = 0 + ~ C4*f04 + I5*bi5 + O*b0O - C5*(b04 + fi5 + f0O) = 0 + ~ C5*f0O + I6*bin - O*(b0O + fin) = 0 + ~ C1*fi1 + I2*b11 - I1*( bi1 + f11) = 0 + ~ I1*f11 + C2*fi2 + I3*b12 - I2*(b11 + bi2 + f12) = 0 + ~ I2*f12 + C3*fi3 + I4*bi3 - I3*(b12 + bi3 + f13) = 0 + ~ I3*f13 + C4*fi4 + I5*b14 - I4*(b13 + bi4 + f14) = 0 + ~ I4*f14 + C5*fi5 + I6*b0O - I5*(b14 + bi5 + f0O) = 0 + + ~ C1 + C2 + C3 + C4 + C5 + O + I1 + I2 + I3 + I4 + I5 + I6 = 1 +} diff --git a/mechanisms/allen/Nap.mod b/mechanisms/allen/Nap.mod new file mode 100644 index 0000000000000000000000000000000000000000..5eac9d53ced960b2ed5426877062a7a85e833ad1 --- /dev/null +++ b/mechanisms/allen/Nap.mod @@ -0,0 +1,75 @@ +:Reference : Modeled according to kinetics derived from Magistretti & Alonso 1999 +:Comment: corrected rates using q10 = 2.3, target temperature 34, orginal 21 + +NEURON { + SUFFIX Nap + USEION na READ ena WRITE ina + RANGE gbar, g, ina +} + +UNITS { + (S) = (siemens) + (mV) = (millivolt) + (mA) = (milliamp) +} + +PARAMETER { + gbar = 0.00001 (S/cm2) +} + +ASSIGNED { + v (mV) + g (S/cm2) + celsius (degC) + mInf + hInf + hTau + hAlpha + hBeta +} + +STATE { + h +} + +BREAKPOINT { + SOLVE states METHOD cnexp + rates(v) + g = gbar*mInf*h + ina = g*(v-ena) +} + +DERIVATIVE states { + rates(v) + h' = (hInf-h)/hTau +} + +INITIAL{ + rates(v) + h = hInf +} + +PROCEDURE rates(v){ + LOCAL qt + qt = 2.3^((celsius-21)/10) + + UNITSOFF + mInf = 1.0/(1+exp((v- -52.6)/-4.6)) : assuming instantaneous activation as modeled by Magistretti and Alonso + + hInf = 1.0/(1+exp((v- -48.8)/10)) + hAlpha = 2.88e-6 * vtrap(v + 17, 4.63) + hBeta = 6.94e-6 * vtrap(-(v + 64.4), 2.63) + + hTau = (1/(hAlpha + hBeta))/qt + UNITSON +} + +FUNCTION vtrap(x, y) { : Traps for 0 in denominator of rate equations + UNITSOFF + if (fabs(x / y) < 1e-6) { + vtrap = y * (1 - x / y / 2) + } else { + vtrap = x / (exp(x / y) - 1) + } + UNITSON +} diff --git a/mechanisms/allen/SK.mod b/mechanisms/allen/SK.mod new file mode 100644 index 0000000000000000000000000000000000000000..d30c57e14bed05d01b90057e1c168512bc636a45 --- /dev/null +++ b/mechanisms/allen/SK.mod @@ -0,0 +1,55 @@ +: SK-type calcium-activated potassium current +: Reference : Kohler et al. 1996 + +NEURON { + SUFFIX SK + USEION k READ ek WRITE ik + USEION ca READ cai + RANGE gbar, ik +} + +UNITS { + (mV) = (millivolt) + (mA) = (milliamp) + (mM) = (milli/liter) +} + +PARAMETER { + gbar = .000001 (mho/cm2) + zTau = 1 (ms) +} + +ASSIGNED { + zInf + g (S/cm2) +} + +STATE { + z FROM 0 TO 1 +} + +BREAKPOINT { + SOLVE states METHOD cnexp + ik = gbar*z*(v - ek) +} + +DERIVATIVE states { + LOCAL l_ca + l_ca = cai + if(l_ca < 1e-7){ + l_ca = l_ca + 1e-07 + } + zInf = 1/(1 + (0.00043 / l_ca)^4.8) + + z' = (zInf - z) / zTau +} + +INITIAL { + LOCAL l_ca + l_ca = cai + if(l_ca < 1e-7) { + l_ca = l_ca + 1e-07 + } + + z = 1/(1 + (0.00043 / l_ca)^4.8) +} diff --git a/mechanisms/mod/exp2syn.mod b/mechanisms/default/exp2syn.mod similarity index 100% rename from mechanisms/mod/exp2syn.mod rename to mechanisms/default/exp2syn.mod diff --git a/mechanisms/mod/expsyn.mod b/mechanisms/default/expsyn.mod similarity index 100% rename from mechanisms/mod/expsyn.mod rename to mechanisms/default/expsyn.mod diff --git a/mechanisms/default/hh.mod b/mechanisms/default/hh.mod new file mode 100644 index 0000000000000000000000000000000000000000..aa73539d3d268336b6f3dc0a419c35f681f9e854 --- /dev/null +++ b/mechanisms/default/hh.mod @@ -0,0 +1,95 @@ +NEURON { + SUFFIX hh + USEION na READ ena WRITE ina + USEION k READ ek WRITE ik + NONSPECIFIC_CURRENT il + RANGE gnabar, gkbar, gl, el, gna, gk + GLOBAL minf, hinf, ninf, mtau, htau, ntau +} + +UNITS { + (mV) = (millivolt) + (S) = (siemens) +} + +PARAMETER { + gnabar = .12 (S/cm2) + gkbar = .036 (S/cm2) + gl = .0003 (S/cm2) + el = -54.3 (mV) + celsius (degC) +} + +STATE { + m h n +} + +ASSIGNED { + v (mV) + + gna (S/cm2) + gk (S/cm2) + minf + hinf + ninf + mtau (ms) + htau (ms) + ntau (ms) + q10 +} + +BREAKPOINT { + SOLVE states METHOD cnexp + gna = gnabar*m*m*m*h + ina = gna*(v - ena) + gk = gkbar*n*n*n*n + ik = gk*(v - ek) + il = gl*(v - el) +} + +INITIAL { + q10 = 3^((celsius - 6.3)/10) + rates(v) + m = minf + h = hinf + n = ninf +} + +DERIVATIVE states { + rates(v) + m' = (minf-m)/mtau + h' = (hinf-h)/htau + n' = (ninf-n)/ntau +} + +PROCEDURE rates(v) +{ + LOCAL alpha, beta, sum + + :"m" sodium activation system + alpha = .1 * vtrap(-(v+40),10) + beta = 4 * exp(-(v+65)/18) + sum = alpha + beta + mtau = 1/(q10*sum) + minf = alpha/sum + + :"h" sodium inactivation system + alpha = .07 * exp(-(v+65)/20) + beta = 1 / (exp(-(v+35)/10) + 1) + sum = alpha + beta + htau = 1/(q10*sum) + hinf = alpha/sum + + :"n" potassium activation system + alpha = .01*vtrap(-(v+55),10) + beta = .125*exp(-(v+65)/80) + sum = alpha + beta + ntau = 1/(q10*sum) + ninf = alpha/sum +} + +FUNCTION vtrap(x,y) { + : use built in exprelr(z) = z/(exp(z)-1), which handles the z=0 case correctly + vtrap = y*exprelr(x/y) +} + diff --git a/mechanisms/mod/kamt.mod b/mechanisms/default/kamt.mod similarity index 100% rename from mechanisms/mod/kamt.mod rename to mechanisms/default/kamt.mod diff --git a/mechanisms/mod/kdrmt.mod b/mechanisms/default/kdrmt.mod similarity index 100% rename from mechanisms/mod/kdrmt.mod rename to mechanisms/default/kdrmt.mod diff --git a/mechanisms/mod/nax.mod b/mechanisms/default/nax.mod similarity index 100% rename from mechanisms/mod/nax.mod rename to mechanisms/default/nax.mod diff --git a/mechanisms/mod/nernst.mod b/mechanisms/default/nernst.mod similarity index 100% rename from mechanisms/mod/nernst.mod rename to mechanisms/default/nernst.mod diff --git a/mechanisms/mod/pas.mod b/mechanisms/default/pas.mod similarity index 100% rename from mechanisms/mod/pas.mod rename to mechanisms/default/pas.mod diff --git a/mechanisms/generate_default_catalogue b/mechanisms/generate_catalogue similarity index 87% rename from mechanisms/generate_default_catalogue rename to mechanisms/generate_catalogue index 31bc974d0792574b74fd467839361b575b0b375c..fe821756e65b820e1b0a2f15de58858e1a68cb77 100755 --- a/mechanisms/generate_default_catalogue +++ b/mechanisms/generate_catalogue @@ -62,6 +62,12 @@ def parse_arguments(): metavar = 'BACKEND', help = 'register implementations for back-end %(metavar)s') + group.add_argument( + '-C', '--catalogue', + default = 'default', + dest = 'catalogue', + help = 'catalogue name, default "%(default)s"') + group.add_argument( '-o', '--output', default = [], @@ -77,7 +83,7 @@ def parse_arguments(): return vars(parser.parse_args()) -def generate(modpfx='', arbpfx='', modules=[], backends=[], **rest): +def generate(catalogue, modpfx='', arbpfx='', modules=[], backends=[], **rest): src = string.Template(\ r'''// Automatically generated by: // $cmdline @@ -88,7 +94,7 @@ $module_includes namespace arb { -mechanism_catalogue build_default_catalogue() { +mechanism_catalogue build_${catalogue}_catalogue() { mechanism_catalogue cat; $add_modules @@ -96,8 +102,8 @@ mechanism_catalogue build_default_catalogue() { return cat; } -const mechanism_catalogue& global_default_catalogue() { - static mechanism_catalogue cat = build_default_catalogue(); +const mechanism_catalogue& global_${catalogue}_catalogue() { + static mechanism_catalogue cat = build_${catalogue}_catalogue(); return cat; } @@ -110,8 +116,9 @@ const mechanism_catalogue& global_default_catalogue() { # headers are resolved. return src.safe_substitute(dict( - cmdline = " ".join(sys.argv), - arbpfx = arbpfx, + cmdline=" ".join(sys.argv), + arbpfx=arbpfx, + catalogue=catalogue, backend_includes = indent(0, # ['#include <{}backends/{}/fvm.hpp>'.format(arbpfx, b) for b in backends]), ['#include "backends/{}/fvm.hpp"'.format(b) for b in backends]), @@ -131,4 +138,3 @@ if args['output']: print(code, file = open(args['output'],'w')) else: print(code) - diff --git a/mechanisms/mod/hh.mod b/mechanisms/mod/hh.mod deleted file mode 100644 index a27c84390d1fd2c7babf893555165a589a834114..0000000000000000000000000000000000000000 --- a/mechanisms/mod/hh.mod +++ /dev/null @@ -1,92 +0,0 @@ -NEURON { - SUFFIX hh - USEION na READ ena WRITE ina - USEION k READ ek WRITE ik - NONSPECIFIC_CURRENT il - RANGE gnabar, gkbar, gl, el -} - -UNITS { - (mV) = (millivolt) - (S) = (siemens) -} - -PARAMETER { - gnabar = .12 (S/cm2) - gkbar = .036 (S/cm2) - gl = .0003 (S/cm2) - el = -54.3 (mV) - celsius -} - -STATE { - m h n -} - -ASSIGNED { - v (mV) - q10 -} - -BREAKPOINT { - SOLVE states METHOD cnexp - LOCAL gna, gk, n2, n_, m_ - n_ = n - n2 = n_*n_ - m_ = m - gna = gnabar*m_*m_*m_*h - ina = gna*(v - ena) - gk = gkbar*n2*n2 - ik = gk*(v - ek) - il = gl*(v - el) -} - -INITIAL { - q10 = 3^((celsius - 6.3)*0.1) - - LOCAL alpha, beta - - :"m" sodium activation system - alpha = exprelr(-(v+40)*0.1) - beta = 4 * exp(-(v+65)*0.05555555555555555) - m = alpha/(alpha + beta) - - :"h" sodium inactivation system - alpha = .07 * exp(-(v+65)*0.05) - beta = 1 / (exp(-(v+35)*0.1) + 1) - h = alpha/(alpha + beta) - - :"n" potassium activation system - alpha = .1*exprelr(-(v+55)*0.1) - beta = .125*exp(-(v+65)*0.0125) - n = alpha/(alpha + beta) -} - -DERIVATIVE states { - LOCAL alpha, beta, sum, minf, ninf, hinf, mrate, nrate, hrate - - :"m" sodium activation system - alpha = exprelr(-(v+40)*0.1) - beta = 4 * exp(-(v+65)*0.05555555555555555) - sum = alpha + beta - mrate = q10*sum - minf = alpha/sum - - :"h" sodium inactivation system - alpha = .07 * exp(-(v+65)*0.05) - beta = 1 / (exp(-(v+35)*0.1) + 1) - sum = alpha + beta - hrate = q10*sum - hinf = alpha/sum - - :"n" potassium activation system - alpha = .1*exprelr(-(v+55)*0.1) - beta = .125*exp(-(v+65)*0.0125) - sum = alpha + beta - nrate = q10*sum - ninf = alpha/sum - - m' = (minf-m)*mrate - h' = (hinf-h)*hrate - n' = (ninf-n)*nrate -} diff --git a/modcc/expression.cpp b/modcc/expression.cpp index 336acf91609bc385e2d34803dbd39218b9062241..51073654c49163b500a386279cf6f5a8bb5e87d1 100644 --- a/modcc/expression.cpp +++ b/modcc/expression.cpp @@ -609,6 +609,7 @@ void ProcedureExpression::semantic(scope_type::symbol_map &global_symbols) { switch (kind_) { case procedureKind::derivative: case procedureKind::kinetic: + case procedureKind::linear: case procedureKind::initial: case procedureKind::breakpoint: scp->in_api_context(true); diff --git a/test/unit/CMakeLists.txt b/test/unit/CMakeLists.txt index f914964ad32669b19af14639e333dca9cf6f2997..966ff9fdba5219813029e9d171c1b946a3436bbb 100644 --- a/test/unit/CMakeLists.txt +++ b/test/unit/CMakeLists.txt @@ -30,6 +30,9 @@ set(test_mechanisms write_eX read_cai_init write_cai_breakpoint + test_ca + test_kin1 + test_kinlva ) include(${PROJECT_SOURCE_DIR}/mechanisms/BuildModules.cmake) diff --git a/mechanisms/mod/test_ca.mod b/test/unit/mod/test_ca.mod similarity index 100% rename from mechanisms/mod/test_ca.mod rename to test/unit/mod/test_ca.mod diff --git a/mechanisms/mod/test_kin1.mod b/test/unit/mod/test_kin1.mod similarity index 100% rename from mechanisms/mod/test_kin1.mod rename to test/unit/mod/test_kin1.mod diff --git a/mechanisms/mod/test_kinlva.mod b/test/unit/mod/test_kinlva.mod similarity index 100% rename from mechanisms/mod/test_kinlva.mod rename to test/unit/mod/test_kinlva.mod diff --git a/test/unit/test_fvm_layout.cpp b/test/unit/test_fvm_layout.cpp index 68314cc312f079066883a33234e71ae90cc6a47b..4d4be869b9f96e9273367e4975e64b358d803f7c 100644 --- a/test/unit/test_fvm_layout.cpp +++ b/test/unit/test_fvm_layout.cpp @@ -732,7 +732,9 @@ TEST(fvm_layout, ion_weights) { {0.}, {0., 1./2, 0.}, {1./4, 0., 0.}, {0., 0., 0., 0., 0.}, {3./4, 0.} }; + mechanism_catalogue testcat = make_unit_test_catalogue(); cable_cell_global_properties gprop; + gprop.catalogue = &testcat; gprop.default_parameters = neuron_parameter_defaults; fvm_value_type cai = gprop.default_parameters.ion_data["ca"].init_int_concentration; diff --git a/test/unit/test_fvm_lowered.cpp b/test/unit/test_fvm_lowered.cpp index 62294e578d5cfbeb3e4e7a90acb91b609226d56e..09cfe347a1fb433b83c7f98dd22f6e959e222bea 100644 --- a/test/unit/test_fvm_lowered.cpp +++ b/test/unit/test_fvm_lowered.cpp @@ -447,6 +447,7 @@ TEST(fvm_lowered, derived_mechs) { } cable1d_recipe rec(cells); + rec.catalogue() = make_unit_test_catalogue(); rec.catalogue().derive("custom_kin1", "test_kin1", {{"tau", 20.0}}); cable_probe_total_ion_current_density where{mlocation{1, 0.3}}; @@ -806,6 +807,7 @@ TEST(fvm_lowered, weighted_write_ion) { c.paint(reg::branch(3), "test_ca"); cable1d_recipe rec(c); + rec.catalogue() = make_unit_test_catalogue(); rec.add_ion("ca", 2, con_int, con_ext, 0.0); std::vector<target_handle> targets; diff --git a/test/unit/unit_test_catalogue.cpp b/test/unit/unit_test_catalogue.cpp index aeb7f39de034aef4cf0c225ec87fa9d1633e4e54..2c2239860edfb2daa2a4bdf4f86819b77d2feafd 100644 --- a/test/unit/unit_test_catalogue.cpp +++ b/test/unit/unit_test_catalogue.cpp @@ -36,6 +36,9 @@ #include "mechanisms/write_eX.hpp" #include "mechanisms/read_cai_init.hpp" #include "mechanisms/write_cai_breakpoint.hpp" +#include "mechanisms/test_ca.hpp" +#include "mechanisms/test_kin1.hpp" +#include "mechanisms/test_kinlva.hpp" #include "../gtest.h" @@ -55,6 +58,9 @@ using namespace arb; mechanism_catalogue make_unit_test_catalogue(const mechanism_catalogue& from) { mechanism_catalogue cat(from); + ADD_MECH(cat, test_ca) + ADD_MECH(cat, test_kin1) + ADD_MECH(cat, test_kinlva) ADD_MECH(cat, ca_linear) ADD_MECH(cat, celsius_test) ADD_MECH(cat, diam_test)