INDEPENDENT {t FROM 0 TO 1 WITH 1 (ms)} UNITS { (mM) = (milli/liter) (mA) = (milliamp) (um) = (micron) (mol) = (1) PI = (pi) (1) FARADAY = (faraday) (coulomb) } NEURON { SUFFIX capump USEION ca READ cao, cai WRITE cai, ica GLOBAL k1, k2, k3, k4 } STATE { pump (mol/cm2) pumpca (mol/cm2) cai (mM) } PARAMETER { cao = 10 (mM) diam = 2 (um) k1 = 5e8 (/mM-s) k2 = .25e6 (/s) k3 = .5e3 (/s) k4 = 5e0 (/mM-s) } CONSTANT { volo = 1 (liter) } ASSIGNED { ica (mA/cm2) ipump (mA/cm2) voli (um3) area1 (um2) c1 (1+8 um5/ms) c2 (1-10 um2/ms) c3 (1-10 um2/ms) c4 (1+8 um5/ms) } BREAKPOINT { if (t == 0) {parms()} SOLVE pmp METHOD sparse ica = ipump } KINETIC pmp { COMPARTMENT voli {cai} COMPARTMENT (1e10)*area1 {pump pumpca} COMPARTMENT volo*(1e15) {cao} ~ cai + pump <-> pumpca (c1,c2) ~ pumpca <-> pump + cao (c3,c4) : note that forward flux here is the outward flux ipump = (1e-4)*2*FARADAY*(f_flux - b_flux)/area1 } INITIAL { : since cai is a state it is set to 0 be default : thus make sure it is set properly to the external ion value VERBATIM cai = _ion_cai; ENDVERBATIM } PROCEDURE parms() { :cylindrical coordinates; actually vol and area1/unit length voli = PI*(diam/2)^2 * 1(um) area1 = 2*PI*(diam/2) * 1(um) c1 = (1e7)*area1 * k1 c2 = (1e7)*area1 * k2 c3 = (1e7)*area1 * k3 c4 = (1e7)*area1 * k4 } FUNCTION ss() (mM) { : set states to their steady state values SOLVE pmp STEADYSTATE sparse ss = cai COMMENT This is probably confusing. First of all this function can only be called from HOC when the proper data has been set up with the setdata_capump(x) function. Second, only pump_capump and pumpca_capump states are properly set. The calculation of cai cannot be seen by hoc since hoc looks at the ionic species value and this function does not know that pointer so it does not connect the internal version of cai with the location that hoc looks at. Thus we return the value of the internal version of cai and this can be used at the hoc level to initialize cai if desired. ENDCOMMENT }