TITLE K channel which is both voltage and Ca++ dependent : fast activation/ slow inactivation : Yiota Poirazi, 3/2/01 NEURON { SUFFIX vkca USEION k READ ek WRITE ik USEION ca READ cai RANGE gk, gbar, m, h, c, c_inf RANGE inf, fac, tau } UNITS { (mA) = (milliamp) (mV) = (millivolt) (molar) = (1/liter) (mM) = (millimolar) } INDEPENDENT {t FROM 0 TO 1 WITH 1 (ms)} PARAMETER { v (mV) celsius = 34 (degC) dt (ms) gbar = 0 (mho/cm2) ek = -80 (mV) cai (mM) cac = 0.025 (mM) gk } STATE { m h c } ASSIGNED { ik inf[3] fac[3] tau[3] c_inf } BREAKPOINT { SOLVE states gk = gbar*m*m*m*h*c*c ik = gk*(v - ek) } INITIAL { h = 1 m = 0 c = 0 states() gk = gbar*m*m*m*h*c*c ik = gk*(v - ek) } PROCEDURE calcg() { mhn(v*1(/mV), cai) m = m + fac[0]*(inf[0] - m) h = h + fac[1]*(inf[1] - h) c = c + fac[2]*(inf[2] - c) } PROCEDURE evaluate_fct(v(mV),cai(mM)) { LOCAL car car = (cai/cac)^2 c_inf = 1 :car / ( 1 + car ) } PROCEDURE states() { : exact when v held constant calcg() VERBATIM return 0; ENDVERBATIM } FUNCTION varss(v, i) { if (i==0) { varss = 1 / (1 + exp((v+60)/(-1))) : activation } else if (i==1) { varss = 1 / (1 + exp((v+57)/(0.5))) : inactivation } } FUNCTION vartau(v, i) { if (i==0) { vartau = 2 } else if (i==1) { vartau = 45 } else if (i==2) { : if (v < -55) { : vartau = 10 : } else { vartau = 2 : } } } PROCEDURE mhn(v, cai) {LOCAL a, b :rest = -70 : TABLE inf, fac DEPEND dt, celsius FROM -100 TO 100 WITH 200 FROM i=0 TO 1 { if (cai < 0.001 || cai > 0.2) { : inf[i] = 1 } else { inf[i] = varss(v,i) } tau[i] = vartau(v,i) fac[i] = (1 - exp(-dt/tau[i])) } evaluate_fct(v,cai) inf[2] = c_inf tau[2] = vartau(v,2) fac[2] = (1 - exp(-dt/tau[2])) }