add flake

This commit is contained in:
Conál Paxton 2026-02-09 15:26:37 -05:00
commit 66dcb51e86
27 changed files with 1727 additions and 0 deletions

39
flake.nix Normal file
View File

@ -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
'';
};
};
}

72
mech/Ca.mod Normal file
View File

@ -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
}

37
mech/CaDynamics_E2.mod Normal file
View File

@ -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
}

View File

@ -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
}

72
mech/Ca_HVA.mod Normal file
View File

@ -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
}

72
mech/Ca_HVA_soma.mod Normal file
View File

@ -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
}

69
mech/Ca_LVAst.mod Normal file
View File

@ -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
}

69
mech/Ca_LVAst_soma.mod Normal file
View File

@ -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
}

61
mech/Ih.mod Normal file
View File

@ -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
}

62
mech/Im.mod Normal file
View File

@ -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
}

74
mech/K_Pst.mod Normal file
View File

@ -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
}

69
mech/K_Tst.mod Normal file
View File

@ -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
}

80
mech/NaTa_t.mod Normal file
View File

@ -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
}

80
mech/NaTa_t_myel.mod Normal file
View File

@ -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
}

80
mech/NaTa_t_nor.mod Normal file
View File

@ -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
}

80
mech/NaTs2_t.mod Normal file
View File

@ -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
}

80
mech/NaTs2_t_apic.mod Normal file
View File

@ -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
}

80
mech/NaTs2_t_soma.mod Normal file
View File

@ -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
}

86
mech/Nap_Et2.mod Normal file
View File

@ -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
}

57
mech/SK_E2.mod Normal file
View File

@ -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
}

57
mech/SK_E2_soma.mod Normal file
View File

@ -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
}

55
mech/SKv3_1.mod Normal file
View File

@ -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
}

55
mech/SKv3_1_apic.mod Normal file
View File

@ -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
}

55
mech/SKv3_1_soma.mod Normal file
View File

@ -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
}

113
mech/hhqt.mod Normal file
View File

@ -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

BIN
mech/libnrnmech.so Normal file

Binary file not shown.

36
mech/xtra.mod Normal file
View File

@ -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
}