: HH TEA-sensitive Purkinje potassium current (including channel noise)
: Created: 7th October 2011 - Daniele Linaro
NEURON {
SUFFIX kpkj_cn
USEION k READ ek WRITE ik
RANGE gkbar, ik
GLOBAL minf, hinf, mtau, htau
: channel noise - start
RANGE gk, gamma_k
RANGE Nk, one_over_Nk
RANGE seed
: channel noise - end
}
UNITS {
(mV) = (millivolt)
(mA) = (milliamp)
: channel noise - start
(S) = (siemens)
(pS) = (picosiemens)
(um) = (micrometer)
: channel noise - end
}
PARAMETER {
gkbar = .004 (mho/cm2)
mivh = -24 (mV)
mik = 15.4 (1)
mty0 = .00012851
mtvh1 = 100.7 (mV)
mtk1 = 12.9 (1)
mtvh2 = -56.0 (mV)
mtk2 = -23.1 (1)
hiy0 = .31
hiA = .78
hivh = -5.802 (mV)
hik = 11.2 (1)
ek (mV)
: channel noise - start
gamma_k = 10 (pS)
seed = 5061983 (1)
: channel noise - end
}
ASSIGNED {
v (mV)
ik (mA/cm2)
minf
mtau (ms)
hinf
htau (ms)
: channel noise - start
gk (S/cm2)
Nk (1)
one_over_Nk (1)
dt (ms)
area (um2)
tau1_kpkj (ms) tau2_kpkj (ms) tau3_kpkj (ms) tau4_kpkj (ms) tau5_kpkj (ms) tau6_kpkj (ms) tau7_kpkj (ms)
sigma1_kpkj (ms2) sigma2_kpkj (ms2) sigma3_kpkj (ms2) sigma4_kpkj (ms2) sigma5_kpkj (ms2) sigma6_kpkj (ms2) sigma7_kpkj (ms2)
mu1_kpkj mu2_kpkj mu3_kpkj mu4_kpkj mu5_kpkj mu6_kpkj mu7_kpkj
noise1_kpkj noise2_kpkj noise3_kpkj noise4_kpkj noise5_kpkj noise6_kpkj noise7_kpkj
: channel noise - end
}
STATE {
m h
: channel noise - start
z1_kpkj z2_kpkj z3_kpkj z4_kpkj z5_kpkj z6_kpkj z7_kpkj
: channel noise - end
}
INITIAL {
rates(v)
m = minf
h = hinf
: channel noise - start
Nk = ceil(((1e-8)*area)*(gkbar)/((1e-12)*gamma_k))
one_over_Nk = 1.0 / Nk
printf("kpkj>> the number of channels is %.0f.\n", Nk)
z1_kpkj = 0.0
z2_kpkj = 0.0
z3_kpkj = 0.0
z4_kpkj = 0.0
z5_kpkj = 0.0
z6_kpkj = 0.0
z7_kpkj = 0.0
set_seed(seed)
: channel noise - end
}
BREAKPOINT {
SOLVE states
gk = gkbar * (m*m*m*h + z1_kpkj+z2_kpkj+z3_kpkj+z4_kpkj+z5_kpkj+z6_kpkj+z7_kpkj)
if (gk < 0) {
gk = 0
}
else if (gk > gkbar) {
gk = gkbar
}
ik = gk * (v - ek)
}
PROCEDURE states() {
rates(v)
m = m + dt * (minf - m) / mtau
h = h + dt * (hinf - h) / htau
: channel noise - start
z1_kpkj = z1_kpkj*mu1_kpkj + noise1_kpkj
z2_kpkj = z2_kpkj*mu2_kpkj + noise2_kpkj
z3_kpkj = z3_kpkj*mu3_kpkj + noise3_kpkj
z4_kpkj = z4_kpkj*mu4_kpkj + noise4_kpkj
z5_kpkj = z5_kpkj*mu5_kpkj + noise5_kpkj
z6_kpkj = z6_kpkj*mu6_kpkj + noise6_kpkj
z7_kpkj = z7_kpkj*mu7_kpkj + noise7_kpkj
: channel noise - end
}
PROCEDURE rates( Vm (mV)) {
LOCAL lv,m3inf,one_minus_m,one_minus_h
lv = Vm + 11 : Account for Junction Potential
minf = 1.0 / (1+exp(-(lv-mivh)/mik))
mtau = 1000 * mtau_func(lv)
hinf = hiy0 + hiA/(1+exp((lv-hivh)/hik))
htau = 1000 * htau_func(lv)
: weird check that shouldn't be necessary, but at times it is...
if (minf < 0) {
minf = 0.
} else if (minf > 1) {
minf = 1.
}
if (hinf < 0) {
hinf = 0.
} else if (hinf > 1) {
hinf = 1.
}
: channel noise - start
m3inf = minf*minf*minf
one_minus_m = 1. - minf
one_minus_h = 1. - hinf
tau1_kpkj = htau
tau2_kpkj = mtau
tau3_kpkj = 0.5*mtau
tau4_kpkj = 0.3333333*mtau
tau5_kpkj = mtau*htau/(mtau+htau)
tau6_kpkj = mtau*htau/(mtau+2*htau)
tau7_kpkj = mtau*htau/(mtau+3*htau)
sigma1_kpkj = one_over_Nk * m3inf*m3inf*hinf * one_minus_h
sigma2_kpkj = one_over_Nk * 3*m3inf*minf*minf*hinf*hinf * one_minus_m
sigma3_kpkj = one_over_Nk * 3*m3inf*minf*hinf*hinf * one_minus_m*one_minus_m
sigma4_kpkj = one_over_Nk * m3inf*hinf*hinf * one_minus_m*one_minus_m*one_minus_m
sigma5_kpkj = one_over_Nk * 3*m3inf*minf*minf*hinf * one_minus_m*one_minus_h
sigma6_kpkj = one_over_Nk * 3*m3inf*minf*hinf * one_minus_m*one_minus_m*one_minus_h
sigma7_kpkj = one_over_Nk * m3inf*hinf * one_minus_m*one_minus_m*one_minus_m*one_minus_h
mu1_kpkj = exp(-dt/tau1_kpkj)
mu2_kpkj = exp(-dt/tau2_kpkj)
mu3_kpkj = exp(-dt/tau3_kpkj)
mu4_kpkj = exp(-dt/tau4_kpkj)
mu5_kpkj = exp(-dt/tau5_kpkj)
mu6_kpkj = exp(-dt/tau6_kpkj)
mu7_kpkj = exp(-dt/tau7_kpkj)
noise1_kpkj = sqrt(sigma1_kpkj * (1-mu1_kpkj*mu1_kpkj)) * normrand(0,1)
noise2_kpkj = sqrt(sigma2_kpkj * (1-mu2_kpkj*mu2_kpkj)) * normrand(0,1)
noise3_kpkj = sqrt(sigma3_kpkj * (1-mu3_kpkj*mu3_kpkj)) * normrand(0,1)
noise4_kpkj = sqrt(sigma4_kpkj * (1-mu4_kpkj*mu4_kpkj)) * normrand(0,1)
noise5_kpkj = sqrt(sigma5_kpkj * (1-mu5_kpkj*mu5_kpkj)) * normrand(0,1)
noise6_kpkj = sqrt(sigma6_kpkj * (1-mu6_kpkj*mu6_kpkj)) * normrand(0,1)
noise7_kpkj = sqrt(sigma7_kpkj * (1-mu7_kpkj*mu7_kpkj)) * normrand(0,1)
: channel noise - end
}
FUNCTION mtau_func (Vm (mV)) (ms) {
if (Vm < -35) {
mtau_func = 3*(3.4225e-5+.00498*exp(Vm/28.29))
} else {
mtau_func = (mty0 + 1/(exp((Vm+mtvh1)/mtk1) + exp((Vm+mtvh2)/mtk2)))
}
}
FUNCTION htau_func(Vm (mV)) (ms) {
if (Vm > 0) {
htau_func = .0012+.0023*exp(-.141*Vm)
} else {
htau_func = 1.2202e-05 + .012 * exp(-((Vm+56.3)/49.6)^2)
}
}