TITLE HH channel
: Mel-modified Hodgkin - Huxley conductances (after Ojvind et al.)
NEURON {
SUFFIX hh3
USEION na READ ena WRITE ina
USEION k READ ek WRITE ik
NONSPECIFIC_CURRENT il
RANGE gnabar, gkbar, gl, el
RANGE gna,gk
GLOBAL inf
}
UNITS {
(mA) = (milliamp)
(mV) = (millivolt)
}
INDEPENDENT {t FROM 0 TO 1 WITH 1 (ms)}
PARAMETER {
v (mV)
celsius = 37 (degC)
dt (ms)
: gnabar=.20 (mho/cm2)
: gkbar=.12 (mho/cm2)
: gl=.0001 (mho/cm2)
gnabar=0 (mho/cm2)
gkbar=0(mho/cm2)
gl=0 (mho/cm2)
ena = 40 (mV)
ek = -100 (mV)
el = -70.0 (mV) : steady state at v = -65 mV
}
STATE {
m h n
}
ASSIGNED {
ina (mA/cm2)
ik (mA/cm2)
il (mA/cm2)
inf[3]
gna
gk
}
LOCAL fac[3]
BREAKPOINT {
SOLVE states
gna = gnabar*m*m*h
ina = gna*(v - ena)
gk = gkbar*n*n
ik = gk*(v - ek)
il = gl*(v - el)
}
INITIAL {
mhn(v*1(/mV))
m = inf[0]
h = inf[1]
n = inf[2]
}
PROCEDURE states() { : exact when v held constant
mhn(v*1(/mV))
m = m + fac[0]*(inf[0] - m)
h = h + fac[1]*(inf[1] - h)
n = n + fac[2]*(inf[2] - n)
VERBATIM
return 0;
ENDVERBATIM
}
UNITSOFF
FUNCTION expM1(x,y) {
if (fabs(x/y) < 1e-6) {
expM1 = y*(1 - x/2)
}else{
expM1 = x/(exp(x/y) - 1)
}
}
FUNCTION varss(v, i) {
if (i==0) {
varss = 1 / (1 + exp((v + 40)/(-3))) :Na activation
}
else if (i==1) {
varss = 1 / (1 + exp((v + 45)/(3))) :Na inactivation
}
else {
:varss = 0
varss = 1 / (1 + exp((v + 40)/(-3))) :K activation
}
}
FUNCTION vartau(i) {
if (i==0) {
vartau = 0.05 :Na activation tau
}
else if (i==1) {
vartau = 0.5 :Na inactivation tau
}
else {
vartau = 2 :K activation
}
}
PROCEDURE mhn(v) {LOCAL a, b, tau :rest = -70
TABLE inf, fac DEPEND dt, celsius FROM -100 TO 100 WITH 200
FROM i=0 TO 2 {
tau = vartau(i)
inf[i] = varss(v,i)
fac[i] = (1 - exp(-dt/tau))
}
}
UNITSON