TITLE HH k channel channel
: Hodgkin - Huxley A channel


NEURON {
	SUFFIX A
	USEION k READ ek WRITE ik
	RANGE gIAbar, ik
	GLOBAL minf, hinf, cfunc, h1tau, h2tau
}

UNITS {
	(mA) = (milliamp)
	(mV) = (millivolt)
}

PARAMETER {
	gIAbar=.00026 (mho/cm2) <0,1e9>
	ek = -77 (mV) :suggested, default set by NEURON
}

STATE {
	m h1 h2 c
}

ASSIGNED {
	v (mV)
	celsius (degC) : 16
	ik (mA/cm2)
	minf
    hinf
    h1tau (ms)
    h2tau (ms)
    cfunc (mV)
}

INITIAL {
    rate(v*1(/mV))
	m = minf
    h1 = hinf
    h2 = hinf
    c = cfunc
}

BREAKPOINT {
	SOLVE states METHOD cnexp
    ik = gIAbar*m*(c*h1+(1-c)*h2)*(v - ek)
}

DERIVATIVE states {	: exact when v held constant
	rate(v*1(/mV))
	m' = (minf - m)/1
    h1' = (hinf - h1)/h1tau
    h2' = (hinf - h2)/h2tau
}

UNITSOFF
FUNCTION m_inf(v(mV)) {
    m_inf = 1/(1+exp(-( v + 10 ) / 7))
}

FUNCTION h_inf(v(mV)) {
    h_inf = 0.83 * (1/(1+exp(( v + 40.5 ) / 2))) + 0.17
}

FUNCTION h1_tau(v(mV)) { :phi=0.039
    h1_tau = 1/(25 - 20/(1 + exp(-( v + 35 ) / 6)))
}

LOCAL tmp1, tmp2

FUNCTION h2_tau(v(mV)) { :phi=0.039
    tmp1 = (((v+17)*(v+17)) / 4) + 26 
    tmp2 = 100
    if(tmp1<tmp2){
        h2_tau = tmp1
    }else{
        h2_tau = tmp2
    }
}

FUNCTION c_func(v(mV)) {
    c = 1/(1+exp(-( v + 45 ) / 15))
}

PROCEDURE rate(v(mV)) {
	TABLE minf,hinf,h1tau,h2tau,c FROM -100 TO 100 WITH 200
		h1tau = h1_tau(v)
        h2tau = h2_tau(v)
        minf = m_inf(v)
        hinf = h_inf(v)
        cfunc = c_func(v)
}
UNITSON