diff --git a/mechanisms/mod/hh.mod b/mechanisms/mod/hh.mod index 8f380f83a1014061c00628d04991d450c94da0d5..a27c84390d1fd2c7babf893555165a589a834114 100644 --- a/mechanisms/mod/hh.mod +++ b/mechanisms/mod/hh.mod @@ -3,8 +3,7 @@ NEURON { USEION na READ ena WRITE ina USEION k READ ek WRITE ik NONSPECIFIC_CURRENT il - RANGE gnabar, gkbar, gl, el, gna, gk - GLOBAL minf, hinf, ninf, mtau, htau, ntau + RANGE gnabar, gkbar, gl, el } UNITS { @@ -26,70 +25,68 @@ STATE { ASSIGNED { v (mV) - - gna (S/cm2) - gk (S/cm2) - minf - hinf - ninf - mtau (ms) - htau (ms) - ntau (ms) q10 } BREAKPOINT { SOLVE states METHOD cnexp - gna = gnabar*m*m*m*h + LOCAL gna, gk, n2, n_, m_ + n_ = n + n2 = n_*n_ + m_ = m + gna = gnabar*m_*m_*m_*h ina = gna*(v - ena) - gk = gkbar*n*n*n*n + gk = gkbar*n2*n2 ik = gk*(v - ek) il = gl*(v - el) } INITIAL { - q10 = 3^((celsius - 6.3)/10) - rates(v) - m = minf - h = hinf - n = ninf -} + q10 = 3^((celsius - 6.3)*0.1) -DERIVATIVE states { - rates(v) - m' = (minf-m)/mtau - h' = (hinf-h)/htau - n' = (ninf-n)/ntau + LOCAL alpha, beta + + :"m" sodium activation system + alpha = exprelr(-(v+40)*0.1) + beta = 4 * exp(-(v+65)*0.05555555555555555) + m = alpha/(alpha + beta) + + :"h" sodium inactivation system + alpha = .07 * exp(-(v+65)*0.05) + beta = 1 / (exp(-(v+35)*0.1) + 1) + h = alpha/(alpha + beta) + + :"n" potassium activation system + alpha = .1*exprelr(-(v+55)*0.1) + beta = .125*exp(-(v+65)*0.0125) + n = alpha/(alpha + beta) } -PROCEDURE rates(v) -{ - LOCAL alpha, beta, sum +DERIVATIVE states { + LOCAL alpha, beta, sum, minf, ninf, hinf, mrate, nrate, hrate :"m" sodium activation system - alpha = .1 * vtrap(-(v+40),10) - beta = 4 * exp(-(v+65)/18) + alpha = exprelr(-(v+40)*0.1) + beta = 4 * exp(-(v+65)*0.05555555555555555) sum = alpha + beta - mtau = 1/(q10*sum) + mrate = q10*sum minf = alpha/sum :"h" sodium inactivation system - alpha = .07 * exp(-(v+65)/20) - beta = 1 / (exp(-(v+35)/10) + 1) + alpha = .07 * exp(-(v+65)*0.05) + beta = 1 / (exp(-(v+35)*0.1) + 1) sum = alpha + beta - htau = 1/(q10*sum) + hrate = q10*sum hinf = alpha/sum :"n" potassium activation system - alpha = .01*vtrap(-(v+55),10) - beta = .125*exp(-(v+65)/80) + alpha = .1*exprelr(-(v+55)*0.1) + beta = .125*exp(-(v+65)*0.0125) sum = alpha + beta - ntau = 1/(q10*sum) + nrate = q10*sum ninf = alpha/sum -} -FUNCTION vtrap(x,y) { - : use built in exprelr(z) = z/(exp(z)-1), which handles the z=0 case correctly - vtrap = y*exprelr(x/y) + m' = (minf-m)*mrate + h' = (hinf-h)*hrate + n' = (ninf-n)*nrate } -