commit 66dcb51e864ca6bfb8e51277889f9335eed70013 Author: ConĂ¡l Paxton Date: Mon Feb 9 15:26:37 2026 -0500 add flake diff --git a/flake.nix b/flake.nix new file mode 100644 index 0000000..d436c5b --- /dev/null +++ b/flake.nix @@ -0,0 +1,39 @@ +{ + description = "NEURON with custom mechanisms"; + + inputs = { + nixpkgs.url = "github:NixOS/nixpkgs"; + }; + + outputs = { self, nixpkgs }: + let + system = "x86_64-linux"; + pkgs = import nixpkgs { inherit system; }; + python = pkgs.python3.withPackages (ps: with ps; [ + numpy + pandas + scipy + ]); + in { + devShells.${system}.default = pkgs.mkShell { + packages = [ + pkgs.neuron + python + ]; + + + + shellHook = '' + export MECH_DIR=$PWD/mech + export NRN_NMODL_PATH=$MECH_DIR + + if [ ! -f "$MECH_DIR/x86_64/.libs/libnrnmech.so" ]; then + echo "Compiling NEURON mechanisms..." + nrnivmodl $MECH_DIR + fi + + export NRNMECH_LIB_PATH=$MECH_DIR/x86_64/.libs/libnrnmech.so + ''; + }; + }; +} diff --git a/mech/Ca.mod b/mech/Ca.mod new file mode 100644 index 0000000..7a55bc2 --- /dev/null +++ b/mech/Ca.mod @@ -0,0 +1,72 @@ +:Comment : +:Reference : : Reuveni, Friedman, Amitai, and Gutnick, J.Neurosci. 1993 + +NEURON { + SUFFIX Ca + USEION ca READ eca WRITE ica + RANGE gCabar, gCa, ica +} + +UNITS { + (S) = (siemens) + (mV) = (millivolt) + (mA) = (milliamp) +} + +PARAMETER { + gCabar = 0.00001 (S/cm2) +} + +ASSIGNED { + v (mV) + eca (mV) + ica (mA/cm2) + gCa (S/cm2) + mInf + mTau + mAlpha + mBeta + hInf + hTau + hAlpha + hBeta +} + +STATE { + m + h +} + +BREAKPOINT { + SOLVE states METHOD cnexp + gCa = gCabar*m*m*h + ica = gCa*(v-eca) +} + +DERIVATIVE states { + rates() + m' = (mInf-m)/mTau + h' = (hInf-h)/hTau +} + +INITIAL{ + rates() + m = mInf + h = hInf +} + +PROCEDURE rates(){ + UNITSOFF + if((v == -27) ){ + v = v+0.0001 + } + mAlpha = (0.055*(-27-v))/(exp((-27-v)/3.8) - 1) + mBeta = (0.94*exp((-75-v)/17)) + mInf = mAlpha/(mAlpha + mBeta) + mTau = 1/(mAlpha + mBeta) + hAlpha = (0.000457*exp((-13-v)/50)) + hBeta = (0.0065/(exp((-v-15)/28)+1)) + hInf = hAlpha/(hAlpha + hBeta) + hTau = 1/(hAlpha + hBeta) + UNITSON +} diff --git a/mech/CaDynamics_E2.mod b/mech/CaDynamics_E2.mod new file mode 100644 index 0000000..8dfcb71 --- /dev/null +++ b/mech/CaDynamics_E2.mod @@ -0,0 +1,37 @@ +:Comment : L6 +: Dynamics that track inside calcium concentration +: modified from Destexhe et al. 1994 + +NEURON { + SUFFIX CaDynamics_E2 + USEION ca READ ica WRITE cai + RANGE decay, gamma, minCai, depth +} + +UNITS { + (mV) = (millivolt) + (mA) = (milliamp) + FARADAY = (faraday) (coulombs) + (molar) = (1/liter) + (mM) = (millimolar) + (um) = (micron) +} + +PARAMETER { + gamma = 0.001734 : percent of free calcium (not buffered) + decay = 103.091390 (ms) : rate of removal of calcium + depth = 0.1 (um) : depth of shell + minCai = 1e-4 (mM) +} + +ASSIGNED {ica (mA/cm2)} + +STATE { + cai (mM) + } + +BREAKPOINT { SOLVE states METHOD cnexp } + +DERIVATIVE states { + cai' = -(10000)*(ica*gamma/(2*FARADAY*depth)) - (cai - minCai)/decay +} diff --git a/mech/CaDynamics_E2_soma.mod b/mech/CaDynamics_E2_soma.mod new file mode 100644 index 0000000..b5244a6 --- /dev/null +++ b/mech/CaDynamics_E2_soma.mod @@ -0,0 +1,37 @@ +:Comment : L6 +: Dynamics that track inside calcium concentration +: modified from Destexhe et al. 1994 + +NEURON { + SUFFIX CaDynamics_E2_soma + USEION ca READ ica WRITE cai + RANGE decay, gamma, minCai, depth +} + +UNITS { + (mV) = (millivolt) + (mA) = (milliamp) + FARADAY = (faraday) (coulombs) + (molar) = (1/liter) + (mM) = (millimolar) + (um) = (micron) +} + +PARAMETER { + gamma = 0.000996 : percent of free calcium (not buffered) + decay = 873.498863 (ms) : rate of removal of calcium + depth = 0.1 (um) : depth of shell + minCai = 1e-4 (mM) +} + +ASSIGNED {ica (mA/cm2)} + +STATE { + cai (mM) + } + +BREAKPOINT { SOLVE states METHOD cnexp } + +DERIVATIVE states { + cai' = -(10000)*(ica*gamma/(2*FARADAY*depth)) - (cai - minCai)/decay +} diff --git a/mech/Ca_HVA.mod b/mech/Ca_HVA.mod new file mode 100644 index 0000000..425c042 --- /dev/null +++ b/mech/Ca_HVA.mod @@ -0,0 +1,72 @@ +:Comment : L6 +:Reference : : Reuveni, Friedman, Amitai, and Gutnick, J.Neurosci. 1993 + +NEURON { + SUFFIX Ca_HVA + USEION ca READ eca WRITE ica + RANGE gCa_HVAbar, gCa_HVA, ica +} + +UNITS { + (S) = (siemens) + (mV) = (millivolt) + (mA) = (milliamp) +} + +PARAMETER { + gCa_HVAbar = 0.000684 (S/cm2) +} + +ASSIGNED { + v (mV) + eca (mV) + ica (mA/cm2) + gCa (S/cm2) + mInf + mTau + mAlpha + mBeta + hInf + hTau + hAlpha + hBeta +} + +STATE { + m + h +} + +BREAKPOINT { + SOLVE states METHOD cnexp + gCa = gCa_HVAbar*m*m*h + ica = gCa*(v-eca) +} + +DERIVATIVE states { + rates() + m' = (mInf-m)/mTau + h' = (hInf-h)/hTau +} + +INITIAL{ + rates() + m = mInf + h = hInf +} + +PROCEDURE rates(){ + UNITSOFF + if((v == -27) ){ + v = v+0.0001 + } + mAlpha = (0.055*(-27-v))/(exp((-27-v)/3.8) - 1) + mBeta = (0.94*exp((-75-v)/17)) + mInf = mAlpha/(mAlpha + mBeta) + mTau = 1/(mAlpha + mBeta) + hAlpha = (0.000457*exp((-13-v)/50)) + hBeta = (0.0065/(exp((-v-15)/28)+1)) + hInf = hAlpha/(hAlpha + hBeta) + hTau = 1/(hAlpha + hBeta) + UNITSON +} diff --git a/mech/Ca_HVA_soma.mod b/mech/Ca_HVA_soma.mod new file mode 100644 index 0000000..f786246 --- /dev/null +++ b/mech/Ca_HVA_soma.mod @@ -0,0 +1,72 @@ +:Comment : L6 +:Reference : : Reuveni, Friedman, Amitai, and Gutnick, J.Neurosci. 1993 + +NEURON { + SUFFIX Ca_HVA_soma + USEION ca READ eca WRITE ica + RANGE gCa_HVAbar, gCa_HVA, ica +} + +UNITS { + (S) = (siemens) + (mV) = (millivolt) + (mA) = (milliamp) +} + +PARAMETER { + gCa_HVAbar = 0.000459 (S/cm2) +} + +ASSIGNED { + v (mV) + eca (mV) + ica (mA/cm2) + gCa (S/cm2) + mInf + mTau + mAlpha + mBeta + hInf + hTau + hAlpha + hBeta +} + +STATE { + m + h +} + +BREAKPOINT { + SOLVE states METHOD cnexp + gCa = gCa_HVAbar*m*m*h + ica = gCa*(v-eca) +} + +DERIVATIVE states { + rates() + m' = (mInf-m)/mTau + h' = (hInf-h)/hTau +} + +INITIAL{ + rates() + m = mInf + h = hInf +} + +PROCEDURE rates(){ + UNITSOFF + if((v == -27) ){ + v = v+0.0001 + } + mAlpha = (0.055*(-27-v))/(exp((-27-v)/3.8) - 1) + mBeta = (0.94*exp((-75-v)/17)) + mInf = mAlpha/(mAlpha + mBeta) + mTau = 1/(mAlpha + mBeta) + hAlpha = (0.000457*exp((-13-v)/50)) + hBeta = (0.0065/(exp((-v-15)/28)+1)) + hInf = hAlpha/(hAlpha + hBeta) + hTau = 1/(hAlpha + hBeta) + UNITSON +} diff --git a/mech/Ca_LVAst.mod b/mech/Ca_LVAst.mod new file mode 100644 index 0000000..538df19 --- /dev/null +++ b/mech/Ca_LVAst.mod @@ -0,0 +1,69 @@ +:Comment : L6 +: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 35, orginal 21 +: **Modified to use 'celsius' for temperature to correct rates by Aman Aberra** +NEURON { + SUFFIX Ca_LVAst + USEION ca READ eca WRITE ica + RANGE gCa_LVAstbar, gCa_LVAst, ica, celsius +} + +UNITS { + (S) = (siemens) + (mV) = (millivolt) + (mA) = (milliamp) +} + +PARAMETER { + gCa_LVAstbar = 0.000007 (S/cm2) + celsius = 35 +} + +ASSIGNED { + v (mV) + eca (mV) + ica (mA/cm2) + gCa_LVAst (S/cm2) + mInf + mTau + hInf + hTau +} + +STATE { + m + h +} + +BREAKPOINT { + SOLVE states METHOD cnexp + gCa_LVAst = gCa_LVAstbar*m*m*h + ica = gCa_LVAst*(v-eca) +} + +DERIVATIVE states { + rates() + m' = (mInf-m)/mTau + h' = (hInf-h)/hTau +} + +INITIAL{ + rates() + m = mInf + h = hInf +} + +PROCEDURE rates(){ + LOCAL qt + qt = 2.3^((celsius-21)/10) + UNITSOFF + v = v + 10 + mInf = 1.0000/(1+ exp((v - -30.000)/-6)) + mTau = (5.0000 + 20.0000/(1+exp((v - -25.000)/5)))/qt + hInf = 1.0000/(1+ exp((v - -80.000)/6.4)) + hTau = (20.0000 + 50.0000/(1+exp((v - -40.000)/7)))/qt + v = v - 10 + UNITSON +} diff --git a/mech/Ca_LVAst_soma.mod b/mech/Ca_LVAst_soma.mod new file mode 100644 index 0000000..49336fd --- /dev/null +++ b/mech/Ca_LVAst_soma.mod @@ -0,0 +1,69 @@ +:Comment : L6 +: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 35, orginal 21 +: **Modified to use 'celsius' for temperature to correct rates by Aman Aberra** +NEURON { + SUFFIX Ca_LVAst_soma + USEION ca READ eca WRITE ica + RANGE gCa_LVAstbar, gCa_LVAst, ica, celsius +} + +UNITS { + (S) = (siemens) + (mV) = (millivolt) + (mA) = (milliamp) +} + +PARAMETER { + gCa_LVAstbar = 0.005592 (S/cm2) + celsius = 35 +} + +ASSIGNED { + v (mV) + eca (mV) + ica (mA/cm2) + gCa_LVAst (S/cm2) + mInf + mTau + hInf + hTau +} + +STATE { + m + h +} + +BREAKPOINT { + SOLVE states METHOD cnexp + gCa_LVAst = gCa_LVAstbar*m*m*h + ica = gCa_LVAst*(v-eca) +} + +DERIVATIVE states { + rates() + m' = (mInf-m)/mTau + h' = (hInf-h)/hTau +} + +INITIAL{ + rates() + m = mInf + h = hInf +} + +PROCEDURE rates(){ + LOCAL qt + qt = 2.3^((celsius-21)/10) + UNITSOFF + v = v + 10 + mInf = 1.0000/(1+ exp((v - -30.000)/-6)) + mTau = (5.0000 + 20.0000/(1+exp((v - -25.000)/5)))/qt + hInf = 1.0000/(1+ exp((v - -80.000)/6.4)) + hTau = (20.0000 + 50.0000/(1+exp((v - -40.000)/7)))/qt + v = v - 10 + UNITSON +} diff --git a/mech/Ih.mod b/mech/Ih.mod new file mode 100644 index 0000000..b442b0b --- /dev/null +++ b/mech/Ih.mod @@ -0,0 +1,61 @@ +:Comment : L6 +:Reference : : Kole,Hallermann,and Stuart, J. Neurosci. 2006 + +NEURON { + SUFFIX Ih + NONSPECIFIC_CURRENT ihcn + RANGE gIhbar, gIh, ihcn +} + +UNITS { + (S) = (siemens) + (mV) = (millivolt) + (mA) = (milliamp) +} + +PARAMETER { + gIhbar = 0.00008 (S/cm2) + ehcn = -45.0 (mV) +} + +ASSIGNED { + v (mV) + ihcn (mA/cm2) + gIh (S/cm2) + mInf + mTau + mAlpha + mBeta +} + +STATE { + m +} + +BREAKPOINT { + SOLVE states METHOD cnexp + gIh = gIhbar*m + ihcn = gIh*(v-ehcn) +} + +DERIVATIVE states { + rates() + m' = (mInf-m)/mTau +} + +INITIAL{ + rates() + m = mInf +} + +PROCEDURE rates(){ + UNITSOFF + if(v == -154.9){ + v = v + 0.0001 + } + mAlpha = 0.001*6.43*(v+154.9)/(exp((v+154.9)/11.9)-1) + mBeta = 0.001*193*exp(v/33.1) + mInf = mAlpha/(mAlpha + mBeta) + mTau = 1/(mAlpha + mBeta) + UNITSON +} diff --git a/mech/Im.mod b/mech/Im.mod new file mode 100644 index 0000000..d3cfa7d --- /dev/null +++ b/mech/Im.mod @@ -0,0 +1,62 @@ +:Comment : L6 +: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 +: **Modified to use 'celsius' for temperature to correct rates by Aman Aberra** +NEURON { + SUFFIX Im + USEION k READ ek WRITE ik + RANGE gImbar, gIm, ik, celsius +} + +UNITS { + (S) = (siemens) + (mV) = (millivolt) + (mA) = (milliamp) +} + +PARAMETER { + gImbar = 0.001000 (S/cm2) + celsius = 35 +} + +ASSIGNED { + v (mV) + ek (mV) + ik (mA/cm2) + gIm (S/cm2) + mInf + mTau + mAlpha + mBeta +} + +STATE { + m +} + +BREAKPOINT { + SOLVE states METHOD cnexp + gIm = gImbar*m + ik = gIm*(v-ek) +} + +DERIVATIVE states { + rates() + m' = (mInf-m)/mTau +} + +INITIAL{ + rates() + m = mInf +} + +PROCEDURE rates(){ + LOCAL qt + qt = 2.3^((celsius-21)/10) + UNITSOFF + 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 + UNITSON +} diff --git a/mech/K_Pst.mod b/mech/K_Pst.mod new file mode 100644 index 0000000..fb95455 --- /dev/null +++ b/mech/K_Pst.mod @@ -0,0 +1,74 @@ +:Comment : L6 +: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 +:Comment : shifted -10 mv to correct for junction potential +:Comment: corrected rates using q10 = 2.3, target temperature 35, orginal 21 +: **Modified to use 'celsius' for temperature to correct rates by Aman Aberra** + +NEURON { + SUFFIX K_Pst + USEION k READ ek WRITE ik + RANGE gK_Pstbar, gK_Pst, ik, celsius +} + +UNITS { + (S) = (siemens) + (mV) = (millivolt) + (mA) = (milliamp) +} + +PARAMETER { + gK_Pstbar = 0.957198 (S/cm2) + celsius = 35 +} + +ASSIGNED { + v (mV) + ek (mV) + ik (mA/cm2) + gK_Pst (S/cm2) + mInf + mTau + hInf + hTau +} + +STATE { + m + h +} + +BREAKPOINT { + SOLVE states METHOD cnexp + gK_Pst = gK_Pstbar*m*m*h + ik = gK_Pst*(v-ek) +} + +DERIVATIVE states { + rates() + m' = (mInf-m)/mTau + h' = (hInf-h)/hTau +} + +INITIAL{ + rates() + m = mInf + h = hInf +} + +PROCEDURE rates(){ + LOCAL qt + qt = 2.3^((celsius-21)/10) + UNITSOFF + v = v + 10 + mInf = (1/(1 + exp(-(v+1)/12))) + if(v<-50){ + mTau = (1.25+175.03*exp(-v * -0.026))/qt + }else{ + mTau = ((1.25+13*exp(-v*0.026)))/qt + } + hInf = 1/(1 + exp(-(v+54)/-11)) + hTau = (360+(1010+24*(v+55))*exp(-((v+75)/48)^2))/qt + v = v - 10 + UNITSON +} diff --git a/mech/K_Tst.mod b/mech/K_Tst.mod new file mode 100644 index 0000000..fb2be3f --- /dev/null +++ b/mech/K_Tst.mod @@ -0,0 +1,69 @@ +:Comment : L6 +: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 +:Comment : shifted -10 mv to correct for junction potential +:Comment: corrected rates using q10 = 2.3, target temperature 35, orginal 21 +: **Modified to use 'celsius' for temperature to correct rates by Aman Aberra** +NEURON { + SUFFIX K_Tst + USEION k READ ek WRITE ik + RANGE gK_Tstbar, gK_Tst, ik, celsius +} + +UNITS { + (S) = (siemens) + (mV) = (millivolt) + (mA) = (milliamp) +} + +PARAMETER { + gK_Tstbar = 0.029456 (S/cm2) + celsius = 35 +} + +ASSIGNED { + v (mV) + ek (mV) + ik (mA/cm2) + gK_Tst (S/cm2) + mInf + mTau + hInf + hTau +} + +STATE { + m + h +} + +BREAKPOINT { + SOLVE states METHOD cnexp + gK_Tst = gK_Tstbar*(m^4)*h + ik = gK_Tst*(v-ek) +} + +DERIVATIVE states { + rates() + m' = (mInf-m)/mTau + h' = (hInf-h)/hTau +} + +INITIAL{ + rates() + m = mInf + h = hInf +} + +PROCEDURE rates(){ + LOCAL qt + qt = 2.3^((celsius-21)/10) + UNITSOFF + v = v + 10 + mInf = 1/(1 + exp(-(v+0)/19)) + mTau = (0.34+0.92*exp(-((v+71)/59)^2))/qt + hInf = 1/(1 + exp(-(v+66)/-10)) + hTau = (8+49*exp(-((v+73)/23)^2))/qt + v = v - 10 + UNITSON +} diff --git a/mech/NaTa_t.mod b/mech/NaTa_t.mod new file mode 100644 index 0000000..049e639 --- /dev/null +++ b/mech/NaTa_t.mod @@ -0,0 +1,80 @@ +:Comment : L6 +:Reference :Colbert and Pan 2002 +: **Modified to use 'celsius' for temperature to correct rates by Aman Aberra** +NEURON { + SUFFIX NaTa_t + USEION na READ ena WRITE ina + RANGE gNaTa_tbar, gNaTa_t, ina, celsius +} + +UNITS { + (S) = (siemens) + (mV) = (millivolt) + (mA) = (milliamp) +} + +PARAMETER { + gNaTa_tbar = 3.288755 (S/cm2) + celsius = 35 +} + +ASSIGNED { + v (mV) + ena (mV) + ina (mA/cm2) + gNaTa_t (S/cm2) + mInf + mTau + mAlpha + mBeta + hInf + hTau + hAlpha + hBeta +} + +STATE { + m + h +} + +BREAKPOINT { + SOLVE states METHOD cnexp + gNaTa_t = gNaTa_tbar*m*m*m*h + ina = gNaTa_t*(v-ena) +} + +DERIVATIVE states { + rates() + m' = (mInf-m)/mTau + h' = (hInf-h)/hTau +} + +INITIAL{ + rates() + m = mInf + h = hInf +} + +PROCEDURE rates(){ + LOCAL qt + qt = 2.3^((celsius-21)/10) + UNITSOFF + if(v == -38){ + v = v+0.0001 + } + mAlpha = (0.182 * (v- -38))/(1-(exp(-(v- -38)/6))) + mBeta = (0.124 * (-v -38))/(1-(exp(-(-v -38)/6))) + mTau = (1/(mAlpha + mBeta))/qt + mInf = mAlpha/(mAlpha + mBeta) + + if(v == -66){ + v = v + 0.0001 + } + + hAlpha = (-0.015 * (v- -66))/(1-(exp((v- -66)/6))) + hBeta = (-0.015 * (-v -66))/(1-(exp((-v -66)/6))) + hTau = (1/(hAlpha + hBeta))/qt + hInf = hAlpha/(hAlpha + hBeta) + UNITSON +} \ No newline at end of file diff --git a/mech/NaTa_t_myel.mod b/mech/NaTa_t_myel.mod new file mode 100644 index 0000000..dcf12c4 --- /dev/null +++ b/mech/NaTa_t_myel.mod @@ -0,0 +1,80 @@ +:Comment : L6 +:Reference :Colbert and Pan 2002 +: **Modified to use 'celsius' for temperature to correct rates by Aman Aberra** +NEURON { + SUFFIX NaTa_t_myel + USEION na READ ena WRITE ina + RANGE gNaTa_tbar, gNaTa_t, ina, celsius +} + +UNITS { + (S) = (siemens) + (mV) = (millivolt) + (mA) = (milliamp) +} + +PARAMETER { + gNaTa_tbar = 6.577510 (S/cm2) + celsius = 35 +} + +ASSIGNED { + v (mV) + ena (mV) + ina (mA/cm2) + gNaTa_t (S/cm2) + mInf + mTau + mAlpha + mBeta + hInf + hTau + hAlpha + hBeta +} + +STATE { + m + h +} + +BREAKPOINT { + SOLVE states METHOD cnexp + gNaTa_t = gNaTa_tbar*m*m*m*h + ina = gNaTa_t*(v-ena) +} + +DERIVATIVE states { + rates() + m' = (mInf-m)/mTau + h' = (hInf-h)/hTau +} + +INITIAL{ + rates() + m = mInf + h = hInf +} + +PROCEDURE rates(){ + LOCAL qt + qt = 2.3^((celsius-21)/10) + UNITSOFF + if(v == -38){ + v = v+0.0001 + } + mAlpha = (0.182 * (v- -38))/(1-(exp(-(v- -38)/6))) + mBeta = (0.124 * (-v -38))/(1-(exp(-(-v -38)/6))) + mTau = (1/(mAlpha + mBeta))/qt + mInf = mAlpha/(mAlpha + mBeta) + + if(v == -66){ + v = v + 0.0001 + } + + hAlpha = (-0.015 * (v- -66))/(1-(exp((v- -66)/6))) + hBeta = (-0.015 * (-v -66))/(1-(exp((-v -66)/6))) + hTau = (1/(hAlpha + hBeta))/qt + hInf = hAlpha/(hAlpha + hBeta) + UNITSON +} \ No newline at end of file diff --git a/mech/NaTa_t_nor.mod b/mech/NaTa_t_nor.mod new file mode 100644 index 0000000..e456b08 --- /dev/null +++ b/mech/NaTa_t_nor.mod @@ -0,0 +1,80 @@ +:Comment : L6 +:Reference :Colbert and Pan 2002 +: **Modified to use 'celsius' for temperature to correct rates by Aman Aberra** +NEURON { + SUFFIX NaTa_t_nor + USEION na READ ena WRITE ina + RANGE gNaTa_tbar, gNaTa_t, ina, celsius +} + +UNITS { + (S) = (siemens) + (mV) = (millivolt) + (mA) = (milliamp) +} + +PARAMETER { + gNaTa_tbar = 6.577510 (S/cm2) + celsius = 35 +} + +ASSIGNED { + v (mV) + ena (mV) + ina (mA/cm2) + gNaTa_t (S/cm2) + mInf + mTau + mAlpha + mBeta + hInf + hTau + hAlpha + hBeta +} + +STATE { + m + h +} + +BREAKPOINT { + SOLVE states METHOD cnexp + gNaTa_t = gNaTa_tbar*m*m*m*h + ina = gNaTa_t*(v-ena) +} + +DERIVATIVE states { + rates() + m' = (mInf-m)/mTau + h' = (hInf-h)/hTau +} + +INITIAL{ + rates() + m = mInf + h = hInf +} + +PROCEDURE rates(){ + LOCAL qt + qt = 2.3^((celsius-21)/10) + UNITSOFF + if(v == -38){ + v = v+0.0001 + } + mAlpha = (0.182 * (v- -38))/(1-(exp(-(v- -38)/6))) + mBeta = (0.124 * (-v -38))/(1-(exp(-(-v -38)/6))) + mTau = (1/(mAlpha + mBeta))/qt + mInf = mAlpha/(mAlpha + mBeta) + + if(v == -66){ + v = v + 0.0001 + } + + hAlpha = (-0.015 * (v- -66))/(1-(exp((v- -66)/6))) + hBeta = (-0.015 * (-v -66))/(1-(exp((-v -66)/6))) + hTau = (1/(hAlpha + hBeta))/qt + hInf = hAlpha/(hAlpha + hBeta) + UNITSON +} \ No newline at end of file diff --git a/mech/NaTs2_t.mod b/mech/NaTs2_t.mod new file mode 100644 index 0000000..7dd1b41 --- /dev/null +++ b/mech/NaTs2_t.mod @@ -0,0 +1,80 @@ +:Comment : L6 +:Reference :Colbert and Pan 2002 +:comment: took the NaTa and shifted both activation/inactivation by 6 mv +: **Modified to use 'celsius' for temperature to correct rates by Aman Aberra** +NEURON { + SUFFIX NaTs2_t + USEION na READ ena WRITE ina + RANGE gNaTs2_tbar, gNaTs2_t, ina, celsius +} + +UNITS { + (S) = (siemens) + (mV) = (millivolt) + (mA) = (milliamp) +} + +PARAMETER { + gNaTs2_tbar = 0.00001 (S/cm2) + celsius = 35 +} + +ASSIGNED { + v (mV) + ena (mV) + ina (mA/cm2) + gNaTs2_t (S/cm2) + mInf + mTau + mAlpha + mBeta + hInf + hTau + hAlpha + hBeta +} + +STATE { + m + h +} + +BREAKPOINT { + SOLVE states METHOD cnexp + gNaTs2_t = gNaTs2_tbar*m*m*m*h + ina = gNaTs2_t*(v-ena) +} + +DERIVATIVE states { + rates() + m' = (mInf-m)/mTau + h' = (hInf-h)/hTau +} + +INITIAL{ + rates() + m = mInf + h = hInf +} + +PROCEDURE rates(){ + LOCAL qt + qt = 2.3^((celsius-21)/10) + UNITSOFF + if(v == -32){ + v = v+0.0001 + } + mAlpha = (0.182 * (v- -32))/(1-(exp(-(v- -32)/6))) + mBeta = (0.124 * (-v -32))/(1-(exp(-(-v -32)/6))) + mInf = mAlpha/(mAlpha + mBeta) + mTau = (1/(mAlpha + mBeta))/qt + + if(v == -60){ + v = v + 0.0001 + } + hAlpha = (-0.015 * (v- -60))/(1-(exp((v- -60)/6))) + hBeta = (-0.015 * (-v -60))/(1-(exp((-v -60)/6))) + hInf = hAlpha/(hAlpha + hBeta) + hTau = (1/(hAlpha + hBeta))/qt + UNITSON +} \ No newline at end of file diff --git a/mech/NaTs2_t_apic.mod b/mech/NaTs2_t_apic.mod new file mode 100644 index 0000000..e6a67d1 --- /dev/null +++ b/mech/NaTs2_t_apic.mod @@ -0,0 +1,80 @@ +:Comment : L6 +:Reference :Colbert and Pan 2002 +:comment: took the NaTa and shifted both activation/inactivation by 6 mv +: **Modified to use 'celsius' for temperature to correct rates by Aman Aberra** +NEURON { + SUFFIX NaTs2_t_apic + USEION na READ ena WRITE ina + RANGE gNaTs2_tbar, gNaTs2_t, ina, celsius +} + +UNITS { + (S) = (siemens) + (mV) = (millivolt) + (mA) = (milliamp) +} + +PARAMETER { + gNaTs2_tbar = 0.025690 (S/cm2) + celsius = 35 +} + +ASSIGNED { + v (mV) + ena (mV) + ina (mA/cm2) + gNaTs2_t (S/cm2) + mInf + mTau + mAlpha + mBeta + hInf + hTau + hAlpha + hBeta +} + +STATE { + m + h +} + +BREAKPOINT { + SOLVE states METHOD cnexp + gNaTs2_t = gNaTs2_tbar*m*m*m*h + ina = gNaTs2_t*(v-ena) +} + +DERIVATIVE states { + rates() + m' = (mInf-m)/mTau + h' = (hInf-h)/hTau +} + +INITIAL{ + rates() + m = mInf + h = hInf +} + +PROCEDURE rates(){ + LOCAL qt + qt = 2.3^((celsius-21)/10) + UNITSOFF + if(v == -32){ + v = v+0.0001 + } + mAlpha = (0.182 * (v- -32))/(1-(exp(-(v- -32)/6))) + mBeta = (0.124 * (-v -32))/(1-(exp(-(-v -32)/6))) + mInf = mAlpha/(mAlpha + mBeta) + mTau = (1/(mAlpha + mBeta))/qt + + if(v == -60){ + v = v + 0.0001 + } + hAlpha = (-0.015 * (v- -60))/(1-(exp((v- -60)/6))) + hBeta = (-0.015 * (-v -60))/(1-(exp((-v -60)/6))) + hInf = hAlpha/(hAlpha + hBeta) + hTau = (1/(hAlpha + hBeta))/qt + UNITSON +} \ No newline at end of file diff --git a/mech/NaTs2_t_soma.mod b/mech/NaTs2_t_soma.mod new file mode 100644 index 0000000..52e4906 --- /dev/null +++ b/mech/NaTs2_t_soma.mod @@ -0,0 +1,80 @@ +:Comment : L6 +:Reference :Colbert and Pan 2002 +:comment: took the NaTa and shifted both activation/inactivation by 6 mv +: **Modified to use 'celsius' for temperature to correct rates by Aman Aberra** +NEURON { + SUFFIX NaTs2_t_soma + USEION na READ ena WRITE ina + RANGE gNaTs2_tbar, gNaTs2_t, ina, celsius +} + +UNITS { + (S) = (siemens) + (mV) = (millivolt) + (mA) = (milliamp) +} + +PARAMETER { + gNaTs2_tbar = 0.976885 (S/cm2) + celsius = 35 +} + +ASSIGNED { + v (mV) + ena (mV) + ina (mA/cm2) + gNaTs2_t (S/cm2) + mInf + mTau + mAlpha + mBeta + hInf + hTau + hAlpha + hBeta +} + +STATE { + m + h +} + +BREAKPOINT { + SOLVE states METHOD cnexp + gNaTs2_t = gNaTs2_tbar*m*m*m*h + ina = gNaTs2_t*(v-ena) +} + +DERIVATIVE states { + rates() + m' = (mInf-m)/mTau + h' = (hInf-h)/hTau +} + +INITIAL{ + rates() + m = mInf + h = hInf +} + +PROCEDURE rates(){ + LOCAL qt + qt = 2.3^((celsius-21)/10) + UNITSOFF + if(v == -32){ + v = v+0.0001 + } + mAlpha = (0.182 * (v- -32))/(1-(exp(-(v- -32)/6))) + mBeta = (0.124 * (-v -32))/(1-(exp(-(-v -32)/6))) + mInf = mAlpha/(mAlpha + mBeta) + mTau = (1/(mAlpha + mBeta))/qt + + if(v == -60){ + v = v + 0.0001 + } + hAlpha = (-0.015 * (v- -60))/(1-(exp((v- -60)/6))) + hBeta = (-0.015 * (-v -60))/(1-(exp((-v -60)/6))) + hInf = hAlpha/(hAlpha + hBeta) + hTau = (1/(hAlpha + hBeta))/qt + UNITSON +} \ No newline at end of file diff --git a/mech/Nap_Et2.mod b/mech/Nap_Et2.mod new file mode 100644 index 0000000..ca61e6b --- /dev/null +++ b/mech/Nap_Et2.mod @@ -0,0 +1,86 @@ +:Comment : L6 +:Comment : mtau deduced from text (said to be 6 times faster than for NaTa) +:Comment : so I used the equations from NaT and multiplied by 6 +:Reference : Modeled according to kinetics derived from Magistretti & Alonso 1999 +:Comment: corrected rates using q10 = 2.3, target temperature 35, orginal 21 +: **Modified to use 'celsius' for temperature to correct rates by Aman Aberra** +NEURON { + SUFFIX Nap_Et2 + USEION na READ ena WRITE ina + RANGE gNap_Et2bar, gNap_Et2, ina, celsius +} + +UNITS { + (S) = (siemens) + (mV) = (millivolt) + (mA) = (milliamp) +} + +PARAMETER { + gNap_Et2bar = 0.000671 (S/cm2) + celsius = 35 +} + +ASSIGNED { + v (mV) + ena (mV) + ina (mA/cm2) + gNap_Et2 (S/cm2) + mInf + mTau + mAlpha + mBeta + hInf + hTau + hAlpha + hBeta +} + +STATE { + m + h +} + +BREAKPOINT { + SOLVE states METHOD cnexp + gNap_Et2 = gNap_Et2bar*m*m*m*h + ina = gNap_Et2*(v-ena) +} + +DERIVATIVE states { + rates() + m' = (mInf-m)/mTau + h' = (hInf-h)/hTau +} + +INITIAL{ + rates() + m = mInf + h = hInf +} + +PROCEDURE rates(){ + LOCAL qt + qt = 2.3^((celsius-21)/10) + UNITSOFF + mInf = 1.0/(1+exp((v- -52.6)/-4.6)) + if(v == -38){ + v = v+0.0001 + } + mAlpha = (0.182 * (v- -38))/(1-(exp(-(v- -38)/6))) + mBeta = (0.124 * (-v -38))/(1-(exp(-(-v -38)/6))) + mTau = 6*(1/(mAlpha + mBeta))/qt + + if(v == -17){ + v = v + 0.0001 + } + if(v == -64.4){ + v = v+0.0001 + } + + hInf = 1.0/(1+exp((v- -48.8)/10)) + hAlpha = -2.88e-6 * (v + 17) / (1 - exp((v + 17)/4.63)) + hBeta = 6.94e-6 * (v + 64.4) / (1 - exp(-(v + 64.4)/2.63)) + hTau = (1/(hAlpha + hBeta))/qt + UNITSON +} \ No newline at end of file diff --git a/mech/SK_E2.mod b/mech/SK_E2.mod new file mode 100644 index 0000000..a011636 --- /dev/null +++ b/mech/SK_E2.mod @@ -0,0 +1,57 @@ +:Comment : L6 +: SK-type calcium-activated potassium current +: Reference : Kohler et al. 1996 + +NEURON { + SUFFIX SK_E2 + USEION k READ ek WRITE ik + USEION ca READ cai + RANGE gSK_E2bar, gSK_E2, ik +} + +UNITS { + (mV) = (millivolt) + (mA) = (milliamp) + (mM) = (milli/liter) +} + +PARAMETER { + v (mV) + gSK_E2bar = 0.098377 (mho/cm2) + zTau = 1 (ms) + ek (mV) + cai (mM) +} + +ASSIGNED { + zInf + ik (mA/cm2) + gSK_E2 (S/cm2) +} + +STATE { + z FROM 0 TO 1 +} + +BREAKPOINT { + SOLVE states METHOD cnexp + gSK_E2 = gSK_E2bar * z + ik = gSK_E2 * (v - ek) +} + +DERIVATIVE states { + rates(cai) + z' = (zInf - z) / zTau +} + +PROCEDURE rates(ca(mM)) { + if(ca < 1e-7){ + ca = ca + 1e-07 + } + zInf = 1/(1 + (0.00043 / ca)^4.8) +} + +INITIAL { + rates(cai) + z = zInf +} diff --git a/mech/SK_E2_soma.mod b/mech/SK_E2_soma.mod new file mode 100644 index 0000000..8dd96a5 --- /dev/null +++ b/mech/SK_E2_soma.mod @@ -0,0 +1,57 @@ +:Comment : L6 +: SK-type calcium-activated potassium current +: Reference : Kohler et al. 1996 + +NEURON { + SUFFIX SK_E2_soma + USEION k READ ek WRITE ik + USEION ca READ cai + RANGE gSK_E2bar, gSK_E2, ik +} + +UNITS { + (mV) = (millivolt) + (mA) = (milliamp) + (mM) = (milli/liter) +} + +PARAMETER { + v (mV) + gSK_E2bar = 0.003869 (mho/cm2) + zTau = 1 (ms) + ek (mV) + cai (mM) +} + +ASSIGNED { + zInf + ik (mA/cm2) + gSK_E2 (S/cm2) +} + +STATE { + z FROM 0 TO 1 +} + +BREAKPOINT { + SOLVE states METHOD cnexp + gSK_E2 = gSK_E2bar * z + ik = gSK_E2 * (v - ek) +} + +DERIVATIVE states { + rates(cai) + z' = (zInf - z) / zTau +} + +PROCEDURE rates(ca(mM)) { + if(ca < 1e-7){ + ca = ca + 1e-07 + } + zInf = 1/(1 + (0.00043 / ca)^4.8) +} + +INITIAL { + rates(cai) + z = zInf +} diff --git a/mech/SKv3_1.mod b/mech/SKv3_1.mod new file mode 100644 index 0000000..d5b345e --- /dev/null +++ b/mech/SKv3_1.mod @@ -0,0 +1,55 @@ +:Comment : L6 +:Reference : : Characterization of a Shaw-related potassium channel family in rat brain, The EMBO Journal, vol.11, no.7,2473-2486 (1992) + +NEURON { + SUFFIX SKv3_1 + USEION k READ ek WRITE ik + RANGE gSKv3_1bar, gSKv3_1, ik +} + +UNITS { + (S) = (siemens) + (mV) = (millivolt) + (mA) = (milliamp) +} + +PARAMETER { + gSKv3_1bar = 1.936176 (S/cm2) +} + +ASSIGNED { + v (mV) + ek (mV) + ik (mA/cm2) + gSKv3_1 (S/cm2) + mInf + mTau +} + +STATE { + m +} + +BREAKPOINT { + SOLVE states METHOD cnexp + gSKv3_1 = gSKv3_1bar*m + ik = gSKv3_1*(v-ek) +} + +DERIVATIVE states { + rates() + m' = (mInf-m)/mTau +} + +INITIAL{ + rates() + m = mInf +} + +PROCEDURE rates(){ + UNITSOFF + mInf = 1/(1+exp(((v -(18.700))/(-9.700)))) + mTau = 0.2*20.000/(1+exp(((v -(-46.560))/(-44.140)))) + UNITSON +} + diff --git a/mech/SKv3_1_apic.mod b/mech/SKv3_1_apic.mod new file mode 100644 index 0000000..dbf11cf --- /dev/null +++ b/mech/SKv3_1_apic.mod @@ -0,0 +1,55 @@ +:Comment : L6 +:Reference : : Characterization of a Shaw-related potassium channel family in rat brain, The EMBO Journal, vol.11, no.7,2473-2486 (1992) + +NEURON { + SUFFIX SKv3_1_apic + USEION k READ ek WRITE ik + RANGE gSKv3_1bar, gSKv3_1, ik +} + +UNITS { + (S) = (siemens) + (mV) = (millivolt) + (mA) = (milliamp) +} + +PARAMETER { + gSKv3_1bar = 0.039763 (S/cm2) +} + +ASSIGNED { + v (mV) + ek (mV) + ik (mA/cm2) + gSKv3_1 (S/cm2) + mInf + mTau +} + +STATE { + m +} + +BREAKPOINT { + SOLVE states METHOD cnexp + gSKv3_1 = gSKv3_1bar*m + ik = gSKv3_1*(v-ek) +} + +DERIVATIVE states { + rates() + m' = (mInf-m)/mTau +} + +INITIAL{ + rates() + m = mInf +} + +PROCEDURE rates(){ + UNITSOFF + mInf = 1/(1+exp(((v -(18.700))/(-9.700)))) + mTau = 0.2*20.000/(1+exp(((v -(-46.560))/(-44.140)))) + UNITSON +} + diff --git a/mech/SKv3_1_soma.mod b/mech/SKv3_1_soma.mod new file mode 100644 index 0000000..4523bb9 --- /dev/null +++ b/mech/SKv3_1_soma.mod @@ -0,0 +1,55 @@ +:Comment : L6 +:Reference : : Characterization of a Shaw-related potassium channel family in rat brain, The EMBO Journal, vol.11, no.7,2473-2486 (1992) + +NEURON { + SUFFIX SKv3_1_soma + USEION k READ ek WRITE ik + RANGE gSKv3_1bar, gSKv3_1, ik +} + +UNITS { + (S) = (siemens) + (mV) = (millivolt) + (mA) = (milliamp) +} + +PARAMETER { + gSKv3_1bar = 0.072929 (S/cm2) +} + +ASSIGNED { + v (mV) + ek (mV) + ik (mA/cm2) + gSKv3_1 (S/cm2) + mInf + mTau +} + +STATE { + m +} + +BREAKPOINT { + SOLVE states METHOD cnexp + gSKv3_1 = gSKv3_1bar*m + ik = gSKv3_1*(v-ek) +} + +DERIVATIVE states { + rates() + m' = (mInf-m)/mTau +} + +INITIAL{ + rates() + m = mInf +} + +PROCEDURE rates(){ + UNITSOFF + mInf = 1/(1+exp(((v -(18.700))/(-9.700)))) + mTau = 0.2*20.000/(1+exp(((v -(-46.560))/(-44.140)))) + UNITSON +} + diff --git a/mech/hhqt.mod b/mech/hhqt.mod new file mode 100644 index 0000000..d7eb2e8 --- /dev/null +++ b/mech/hhqt.mod @@ -0,0 +1,113 @@ +COMMENT + This is the original Hodgkin-Huxley treatment for the set of sodium, + potassium, and leakage channels found in the squid giant axon membrane. + ("A quantitative description of membrane current and its application + conduction and excitation in nerve" J.Physiol. (Lond.) 117:500-544 (1952).) + Membrane voltage is in absolute mV and has been reversed in polarity + from the original HH convention and shifted to reflect a resting potential + of -65 mV. + Remember to set a squid-appropriate temperature + (e.g. in HOC: "celsius=6.3" or in Python: "h.celsius=6.3"). + See squid.hoc for an example of a simulation using this model. + SW Jaslove 6 March, 1992 +ENDCOMMENT + +NEURON { + SUFFIX hhqt + USEION na READ ena WRITE ina + USEION k READ ek WRITE ik + NONSPECIFIC_CURRENT il + RANGE gnabar, gkbar, gl, el, gna, gk, celsius +} + +UNITS { + (mA) = (milliamp) + (mV) = (millivolt) + (S) = (siemens) +} + +PARAMETER { + gnabar = .12 (S/cm2) <0,1e9> + gkbar = .036 (S/cm2) <0,1e9> + gl = .0003 (S/cm2) <0,1e9> + el = -54.3 (mV) + celsius = 29 (degC) +} + +ASSIGNED { + v (mV) + ena (mV) + ek (mV) + gna (S/cm2) + gk (S/cm2) + ina (mA/cm2) + ik (mA/cm2) + il (mA/cm2) + minf hinf ninf + mtau (ms) htau (ms) ntau (ms) +} + +STATE { + m h n +} + +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) +} + +DERIVATIVE states { + rates(v) + m' = (minf-m)/mtau + h' = (hinf-h)/htau + n' = (ninf-n)/ntau +} + +INITIAL { + rates(v) + m = minf + h = hinf + n = ninf +} + +PROCEDURE rates(v(mV)) { :Computes rate and other constants at current v. + :Call once from HOC to initialize inf at resting v. + LOCAL alpha, beta, sum, q10 + q10 = 3^((celsius - 6.3)/10) + +UNITSOFF + :"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) { :Traps for 0 in denominator of rate eqns. + if (fabs(x/y) < 1e-6) { + vtrap = y*(1 - x/y/2) + }else{ + vtrap = x/(exp(x/y) - 1) + } +} + +UNITSON diff --git a/mech/libnrnmech.so b/mech/libnrnmech.so new file mode 100644 index 0000000..a573ffc Binary files /dev/null and b/mech/libnrnmech.so differ diff --git a/mech/xtra.mod b/mech/xtra.mod new file mode 100644 index 0000000..6fc62b8 --- /dev/null +++ b/mech/xtra.mod @@ -0,0 +1,36 @@ +: $Id: xtra.mod,v 1.4 2014/08/18 23:15:25 ted Exp ted $ +: 2018/05/20 Modified by Aman Aberra + +NEURON { + SUFFIX xtra + RANGE es : (es = max amplitude of the potential) + RANGE x, y, z, type, order + GLOBAL stim : (stim = normalized waveform) + POINTER ex +} + +PARAMETER { + es = 0 (mV) + x = 0 (1) : spatial coords + y = 0 (1) + z = 0 (1) + type = 0 (1) : numbering system for morphological category of section - unassigned is 0 + order = 0 (1) : order of branch/collateral. +} + +ASSIGNED { + v (millivolts) + ex (millivolts) + stim (unitless) + area (micron2) +} + +INITIAL { + ex = stim*es +} + + +BEFORE BREAKPOINT { : before each cy' = f(y,t) setup + ex = stim*es +} +