From 66dcb51e864ca6bfb8e51277889f9335eed70013 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Con=C3=A1l=20Paxton?= Date: Mon, 9 Feb 2026 15:26:37 -0500 Subject: [PATCH] add flake --- flake.nix | 39 +++++++++++++ mech/Ca.mod | 72 +++++++++++++++++++++++ mech/CaDynamics_E2.mod | 37 ++++++++++++ mech/CaDynamics_E2_soma.mod | 37 ++++++++++++ mech/Ca_HVA.mod | 72 +++++++++++++++++++++++ mech/Ca_HVA_soma.mod | 72 +++++++++++++++++++++++ mech/Ca_LVAst.mod | 69 ++++++++++++++++++++++ mech/Ca_LVAst_soma.mod | 69 ++++++++++++++++++++++ mech/Ih.mod | 61 +++++++++++++++++++ mech/Im.mod | 62 ++++++++++++++++++++ mech/K_Pst.mod | 74 +++++++++++++++++++++++ mech/K_Tst.mod | 69 ++++++++++++++++++++++ mech/NaTa_t.mod | 80 +++++++++++++++++++++++++ mech/NaTa_t_myel.mod | 80 +++++++++++++++++++++++++ mech/NaTa_t_nor.mod | 80 +++++++++++++++++++++++++ mech/NaTs2_t.mod | 80 +++++++++++++++++++++++++ mech/NaTs2_t_apic.mod | 80 +++++++++++++++++++++++++ mech/NaTs2_t_soma.mod | 80 +++++++++++++++++++++++++ mech/Nap_Et2.mod | 86 +++++++++++++++++++++++++++ mech/SK_E2.mod | 57 ++++++++++++++++++ mech/SK_E2_soma.mod | 57 ++++++++++++++++++ mech/SKv3_1.mod | 55 ++++++++++++++++++ mech/SKv3_1_apic.mod | 55 ++++++++++++++++++ mech/SKv3_1_soma.mod | 55 ++++++++++++++++++ mech/hhqt.mod | 113 ++++++++++++++++++++++++++++++++++++ mech/libnrnmech.so | Bin 0 -> 31840 bytes mech/xtra.mod | 36 ++++++++++++ 27 files changed, 1727 insertions(+) create mode 100644 flake.nix create mode 100644 mech/Ca.mod create mode 100644 mech/CaDynamics_E2.mod create mode 100644 mech/CaDynamics_E2_soma.mod create mode 100644 mech/Ca_HVA.mod create mode 100644 mech/Ca_HVA_soma.mod create mode 100644 mech/Ca_LVAst.mod create mode 100644 mech/Ca_LVAst_soma.mod create mode 100644 mech/Ih.mod create mode 100644 mech/Im.mod create mode 100644 mech/K_Pst.mod create mode 100644 mech/K_Tst.mod create mode 100644 mech/NaTa_t.mod create mode 100644 mech/NaTa_t_myel.mod create mode 100644 mech/NaTa_t_nor.mod create mode 100644 mech/NaTs2_t.mod create mode 100644 mech/NaTs2_t_apic.mod create mode 100644 mech/NaTs2_t_soma.mod create mode 100644 mech/Nap_Et2.mod create mode 100644 mech/SK_E2.mod create mode 100644 mech/SK_E2_soma.mod create mode 100644 mech/SKv3_1.mod create mode 100644 mech/SKv3_1_apic.mod create mode 100644 mech/SKv3_1_soma.mod create mode 100644 mech/hhqt.mod create mode 100644 mech/libnrnmech.so create mode 100644 mech/xtra.mod 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 0000000000000000000000000000000000000000..a573ffc3b1b8f3920f655b1ee3a31c2376730c8e GIT binary patch literal 31840 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 literal 0 HcmV?d00001 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 +} +