TITLE McCormick and Huguenard low threshold calcium current INDEPENDENT {t FROM 0 TO 1 WITH 1 (ms)} NEURON { SUFFIX tcit NONSPECIFIC_CURRENT it RANGE pcatbar, m_inf, tau_m, h_inf, tau_h, qm, qh RANGE depth, cainf, taur } UNITS { (molar) = (1/liter) (mM) = (millimolar) (mV) = (millivolt) (mA) = (milliamp) (um) = (micron) FARADAY = (faraday) (coulomb) R = (k-mole) (joule/degC) } PARAMETER { v (mV) celsius (degC) pcatbar = 0.0000138 (cm/s) cao = 2 (mM) qm = 2.5 qh = 2.5 depth = .1 (um) taur = 5 (ms) cainf = 2.4e-4 (mM) vshift = 3 (mV) } STATE { m h cai (mM) } ASSIGNED { it (mA/cm2) m_inf tau_m (ms) h_inf tau_h (ms) phi_m phi_h drive_channel (mM/ms) } BREAKPOINT { SOLVE state METHOD euler it = pcatbar * m*m*h * ghk(v, cai, cao) } DERIVATIVE state { evaluate_fct(v) m' = (m_inf - m) / tau_m h' = (h_inf - h) / tau_h cai' = drive_channel + (cainf-cai)/taur } UNITSOFF INITIAL { phi_m = qm ^ ((celsius-23.5)/10) phi_h = qh ^ ((celsius-23.5)/10) evaluate_fct(v) m = m_inf h = h_inf cai = cainf } PROCEDURE evaluate_fct(v(mV)) { drive_channel = - (10000) * it / (2 * FARADAY * depth) if (drive_channel <= 0.) { drive_channel = 0. } : cannot pump inward : m_inf = 1.0 / ( 1 + Exp(-(v+vshift+55)/6.2) ) : MB changed 57 ---> 52 to shift m_inf toward right m_inf = 1.0 / ( 1 + Exp(-(v+vshift+65)/6.2) ) : ORIG m_inf = 1.0 / ( 1 + Exp(-(v+vshift+57)/6.2) ) : h_inf = 1.0 / ( 1 + Exp((v+vshift+76)/4.0) ) : MB changed 81 --> 76 to shift h_inf toward right h_inf = 1.0 / ( 1 + Exp((v+vshift+81)/4.0) ) tau_m = ( 0.612 + 1.0 / ( Exp(-(v+vshift+132)/16.7) + Exp((v+vshift+16.8)/18.2) ) ) / phi_m if( v < -80) { tau_h = Exp((v+vshift+467)/66.6) / phi_h } else { tau_h = 1.6147 * ( 28 + Exp(-(v+vshift+22)/10.5) ) / phi_h : 1.6147 entered by MB on 3/26/08 to make Tau_h curves match at -80. } } FUNCTION ghk(v(mV), ci(mM), co(mM)) (.001 coul/cm3) { LOCAL z, eci, eco z = (1e-3)*2*FARADAY*v/(R*(celsius+273.15)) eco = co*efun(z) eci = ci*efun(-z) :high cao charge moves inward :negative potential charge moves inward ghk = (.001)*2*FARADAY*(eci - eco) } FUNCTION efun(z) { if (fabs(z) < 1e-4) { efun = 1 - z/2 }else{ efun = z/(Exp(z) - 1) } } FUNCTION Exp(x) { if (x < -100) { :Exp = 0 }else{ if (x > 700) { Exp = exp(700) }else{ Exp = exp(x) } } } UNITSON