Learning NMODL
Posted: Fri Mar 30, 2007 1:41 pm
Hello,
I've been trying to develop simple variants on HH sodium and potassium currents in NMODL. My current are based off the examples given in the NMODL tutorial. They compile and insert fine but when I add them to a 1 segment neuron I find no activity in the v, ek, or ena. Here is my code for the sodium current:
NEURON {
SUFFIX na
USEION na READ ena WRITE ina
RANGE gnabar, ena, ina
}
UNITS {
(S) = (siemens)
(mV) = (millivolts)
(mA) = (milliamp)
}
PARAMETER {
gnabar = 28e-9 (S/cm2)
}
ASSIGNED {
v (mV)
ena (mV)
ina (mA/cm2)
gna (S/cm2)
}
STATE { m n }
BREAKPOINT {
SOLVE states METHOD cnexp
gna = gnabar * m^4 *(1-n)
ina = gna * (v-ena)
}
INITIAL {
n = nalpha(v)/(nalpha(v)+nbeta(v))
m = malpha(v)/(malpha(v)+mbeta(v))
}
DERIVATIVE states {
m' = (1-m)*malpha(v) - m*mbeta(v)
n' = (1-n)*nalpha(v) - n*nbeta(v)
}
FUNCTION malpha (Vm (mV)) (/ms) {
UNITSOFF
malpha = (1/(2*0.01))*exp((Vm+34)/10)
UNITSON
}
FUNCTION mbeta (Vm (mV)) (/ms) {
UNITSOFF
mbeta = (1/(2*0.01))*exp(-(Vm+34)/10)
UNITSON
}
FUNCTION nalpha (Vm (mV)) (/ms) {
UNITSOFF
nalpha = (1/(2*10))*exp((Vm+29)/8)
UNITSON
}
FUNCTION nbeta (Vm (mV)) (/ms) {
UNITSOFF
nbeta = (1/(2*10))*exp(-(Vm+29)/8)
UNITSON
}
and here is the potassium current
NEURON {
SUFFIX kd
USEION k READ ek WRITE ik
RANGE gkbar, ek, ik
}
UNITS {
(S) = (siemens)
(mV) = (millivolts)
(mA) = (milliamp)
}
PARAMETER {
gkbar = 11.2e-9 (S/cm2)
}
ASSIGNED {
v (mV)
ek (mV)
ik (mA/cm2)
gk (S/cm2)
}
STATE { n }
BREAKPOINT {
SOLVE states METHOD cnexp
gk = gkbar * n^4
ik = gk * (v-ek)
}
INITIAL {
n = nalpha(v)/(nalpha(v)+nbeta(v))
}
DERIVATIVE states {
n' = (1-n)*nalpha(v) - n*nbeta(v)
}
FUNCTION nalpha (Vm (mV)) (/ms) {
UNITSOFF
nalpha = (1/(2*10))*exp((Vm+29)/8)
UNITSON
}
FUNCTION nbeta (Vm (mV)) (/ms) {
UNITSOFF
nbeta = (1/(2*10))*exp(-(Vm+29)/8)
UNITSON
}
Any help would be greatly appreciated. Thanks!
I've been trying to develop simple variants on HH sodium and potassium currents in NMODL. My current are based off the examples given in the NMODL tutorial. They compile and insert fine but when I add them to a 1 segment neuron I find no activity in the v, ek, or ena. Here is my code for the sodium current:
NEURON {
SUFFIX na
USEION na READ ena WRITE ina
RANGE gnabar, ena, ina
}
UNITS {
(S) = (siemens)
(mV) = (millivolts)
(mA) = (milliamp)
}
PARAMETER {
gnabar = 28e-9 (S/cm2)
}
ASSIGNED {
v (mV)
ena (mV)
ina (mA/cm2)
gna (S/cm2)
}
STATE { m n }
BREAKPOINT {
SOLVE states METHOD cnexp
gna = gnabar * m^4 *(1-n)
ina = gna * (v-ena)
}
INITIAL {
n = nalpha(v)/(nalpha(v)+nbeta(v))
m = malpha(v)/(malpha(v)+mbeta(v))
}
DERIVATIVE states {
m' = (1-m)*malpha(v) - m*mbeta(v)
n' = (1-n)*nalpha(v) - n*nbeta(v)
}
FUNCTION malpha (Vm (mV)) (/ms) {
UNITSOFF
malpha = (1/(2*0.01))*exp((Vm+34)/10)
UNITSON
}
FUNCTION mbeta (Vm (mV)) (/ms) {
UNITSOFF
mbeta = (1/(2*0.01))*exp(-(Vm+34)/10)
UNITSON
}
FUNCTION nalpha (Vm (mV)) (/ms) {
UNITSOFF
nalpha = (1/(2*10))*exp((Vm+29)/8)
UNITSON
}
FUNCTION nbeta (Vm (mV)) (/ms) {
UNITSOFF
nbeta = (1/(2*10))*exp(-(Vm+29)/8)
UNITSON
}
and here is the potassium current
NEURON {
SUFFIX kd
USEION k READ ek WRITE ik
RANGE gkbar, ek, ik
}
UNITS {
(S) = (siemens)
(mV) = (millivolts)
(mA) = (milliamp)
}
PARAMETER {
gkbar = 11.2e-9 (S/cm2)
}
ASSIGNED {
v (mV)
ek (mV)
ik (mA/cm2)
gk (S/cm2)
}
STATE { n }
BREAKPOINT {
SOLVE states METHOD cnexp
gk = gkbar * n^4
ik = gk * (v-ek)
}
INITIAL {
n = nalpha(v)/(nalpha(v)+nbeta(v))
}
DERIVATIVE states {
n' = (1-n)*nalpha(v) - n*nbeta(v)
}
FUNCTION nalpha (Vm (mV)) (/ms) {
UNITSOFF
nalpha = (1/(2*10))*exp((Vm+29)/8)
UNITSON
}
FUNCTION nbeta (Vm (mV)) (/ms) {
UNITSOFF
nbeta = (1/(2*10))*exp(-(Vm+29)/8)
UNITSON
}
Any help would be greatly appreciated. Thanks!