TITLE skca.mod COMMENT ---------------------------------------------------------------- Stochastic version of kca.mod Calcium-dependent potassium channel Based on Pennefather (1990) -- sympathetic ganglion cells taken from Reuveni et al (1993) -- neocortical cells Author: Zach Mainen, Salk Institute, 1995, zach@salk.edu 19 May 2002 Kamran Diba. Changed gamma and deterministic from GLOBAL to RANGE. ---------------------------------------------------------------- ENDCOMMENT INDEPENDENT {t FROM 0 TO 1 WITH 1 (ms)} NEURON { SUFFIX skca USEION k READ ek WRITE ik USEION ca READ cai RANGE gk, gamma, eta, N, deterministic,reff GLOBAL P_a,P_b, ninf, ntau,a,b GLOBAL Ra, Rb, caix GLOBAL vmin, vmax, q10, temp, tadj GLOBAL DONT_VECTORIZE : prevent vectorization to agree with RNG.mod } UNITS { (mA) = (milliamp) (mV) = (millivolt) (pS) = (picosiemens) (um) = (micron) } PARAMETER { v (mV) dt (ms) area gamma = 180 (pS) : 0.03 mho/cm2 eta = 0.0556 (1/um2) cai (mM) caix = 1 Ra = 0.01 (/ms) : max act rate Rb = 0.02 (/ms) : max deact rate celsius (degC) temp = 23 (degC) : original temp q10 = 2.3 : temperature sensitivity deterministic = 0 : if non-zero, will use deterministic version vmin = -120 (mV) : range to construct tables for vmax = 100 (mV) DONT_VECTORIZE : required declaration } ASSIGNED { a (/ms) b (/ms) ik (mA/cm2) gk (pS/um2) ek (mV) ninf : steady-state value ntau (ms) : time constant for relaxation tadj N reff (pS/um2) scale_dens (pS/um2) P_a : probability of one channel making alpha transition P_b : probability of one channel making beta transition } STATE { n : state variable of deterministic description N0 N1 : N states populations n0_n1 n1_n0 : number of channels moving from one state to the other } : ---------------------------------------------------------------- : initialization INITIAL { rates(cai) n = ninf scale_dens = gamma/area reff = eta*gamma N = floor(eta*area + 0.5) N1 = floor(n * N + 0.5) N0 = N-N1 : any round off into non-conducting state n0_n1 = 0 n1_n0 = 0 } : ---------------------------------------------------------------- : Breakpoint for each integration step BREAKPOINT { SOLVE states if (deterministic) { if (deterministic-1){ gk = n *reff * tadj } else { gk = floor(n* N + 0.5) * scale_dens *tadj} } else{ gk = strap(N1) * scale_dens * tadj } ik = (1e-4) * gk * (v - ek) } : ---------------------------------------------------------------- : states - updates number of channels in each state PROCEDURE states() { VERBATIM extern double BnlDev_RNG(); ENDVERBATIM rates(cai) : deterministic versions of state variables : integrated by relaxing toward steady-state n = n + (1 - exp(-dt/ntau)) * (ninf-n) P_a = strap(a*dt) P_b = strap(b*dt) : check that will represent probabilities when used ChkProb( P_a) ChkProb( P_b) : transitions : if (deterministic) { : n0_n1 = P_a*N0 : n1_n0 = P_b*N1 : } : else{ n0_n1 = BnlDev_RNG(P_a, N0) n1_n0 = BnlDev_RNG(P_b, N1) : } : move the channels N0 = strap(N0 - n0_n1 + n1_n0) N1 = N - N0 } PROCEDURE rates(cai(mM)) { tadj = q10^((celsius - temp)/10) a = Ra * cai^caix a = a * tadj b = Rb b = b * tadj ntau = 1/(a+b) ninf = a/(a+b) } : ---------------------------------------------------------------- : sign trap - trap for negative values and replace with zero FUNCTION strap(x) { if (x < 0) { strap = 0 VERBATIM fprintf (stderr,"skca.mod:strap: negative state"); ENDVERBATIM } else { strap = x } } : ---------------------------------------------------------------- : ChkProb - Check that number represents a probability PROCEDURE ChkProb(p) { if (p < 0.0 || p > 1.0) { VERBATIM fprintf(stderr, "skca.mod:ChkProb: argument not a probability.\n"); ENDVERBATIM } }