TITLE KAHP channel Traub

UNITS {
    (mA) = (milliamp)
    (mV) = (millivolt)
    (S) = (siemens)
    (mS) = (millisiemens)
	(molar) = (1/liter)
	(uM)    = (micromolar)
}

NEURON {
    THREADSAFE
    : note - every variable accessible in NEURON will be having the suffix _gKahp
    
    SUFFIX gKahp
    USEION ca READ cai
    USEION k READ ek WRITE ik
    RANGE gmax, g, i, q_inf, tau_q
    : GLOBAL q_inf, tau_q
}

PARAMETER {
    gmax=0.0008 (mho/cm2)  : value at soma
    beta_q = 0.001
}

STATE {
    q
}

ASSIGNED {
    g		(S/cm2)
    ek		(mV)
    ik		(mA/cm2)
    q_inf	(1)
    tau_q	(ms)
    i		(mA/cm2)
    cai		(uM)
}

BREAKPOINT {
    SOLVE states METHOD cnexp
    g = gmax*q
    i = g*(v-ek)
    ik = i
}

INITIAL {
    	rates(cai)
    	q = q_inf
}

FUNCTION alpha_q(cai) {
    alpha_q = 0.2e-4*cai
    if ( alpha_q > 0.01) {
	alpha_q = 0.01
    }
}

DERIVATIVE states {  
    rates(cai)
    q' = (q_inf - q)/tau_q
}

PROCEDURE rates(cai) { :callable from hoc
    LOCAL alpha, beta
    TABLE q_inf, tau_q  : DEPEND vhalfn, vhalfl, tlmax, tnmax
    FROM 0 TO 500 WITH 2000
    
    alpha = alpha_q(cai)
    beta = beta_q
    tau_q = 1/(alpha + beta)     
    q_inf = alpha*tau_q
}