: HH potassium current
NEURON{
SUFFIX ipotassiumFS
: NONSPECIFIC_CURRENT i
USEION k READ ek WRITE ik
RANGE g,i
}
UNITS{
(mS) = (millisiemens)
(mV) = (millivolt)
(uA) = (microamp)
}
PARAMETER{
g = 9 (mS/cm2)
n_init = 0.1
}
ASSIGNED{
v (mV)
ek (mV)
ik (uA/cm2)
i (uA/cm2)
}
STATE {n}
BREAKPOINT{
SOLVE states METHOD cnexp
ik = gKTaper(g,t)*(v-ek)*n*n*n*n*0.001 : factor to convert to mA/cm2
: printf("time: %g, current: %g, voltage: %g, ek: %g \n", t, i, v, ek)
: printf("potassium: %g \t %g \t %g \n", t, ik, v)
}
INITIAL {
n = n_init
}
DERIVATIVE states{
n' = ((1-n)*alpha(v) - n*beta(v))/0.2
}
FUNCTION alpha(Vm (mV)) (/ms){
LOCAL x,y
UNITSOFF
x = (Vm + 34.0)/(-10)
if (x > 700){
: alpha = 0
x = 700
: printf("potassium alpha, time: %g, current: %g, voltage: %g \n", t, i, Vm)
}
if (fabs(x)>1e-6){
alpha = 0.1*x/(exp(x)-1)
}
else{
alpha = 0.1/(1+x/2.0+x*x/6.0)
}
UNITSON
}
FUNCTION beta(Vm (mV)) (/ms){
LOCAL x
UNITSOFF
x = -(Vm+44.0)/80.0
if (x>700){
x=700
: printf("potassium beta, time: %g, current: %g, voltage: %g \n", t, i, Vm)
}
beta = 0.125*exp(x)
UNITSON
}
FUNCTION gKTaper(gmin, t){
LOCAL gmax, tmin, tmax, x
gmax = 10.0 : gK before tapering
: tmin = 105000.0 : time start tapering
: tmax = 108000.0 : time end tapering
tmin = 480000.0
tmax = 483000.0
if (t < tmin){
x = gmax
}
else if(t>tmax){
x = gmin
}
else{
x = gmin + (gmax - gmin)*(tmax-t)/(tmax-tmin)
}
gKTaper = x
}