TITLE
:Includes changes made by Andreas Schaefer
:HVA Ca current
:Based on Reuveni, Friedman, Amitai and Gutnick (1993) J. Neurosci. 13:
:4609-4621.
INDEPENDENT {t FROM 0 TO 1 WITH 1 (ms)}
NEURON {
SUFFIX ssca
USEION ca READ eca WRITE ica
RANGE gca, gamma, eta, deterministic
RANGE reff, N, inactF, actF
GLOBAL minf, mtau, hinf, htau
GLOBAL vmin, vmax, tadj
GLOBAL P_am, P_bm, P_ah, P_bh, wflag, vshift
GLOBAL DONT_VECTORIZE : prevent vectorization to agree with RNG.mod
}
UNITS {
(mA) = (milliamp)
(mV) = (millivolt)
(pS) = (picosiemens)
(um) = (micron)
FARADAY = (faraday) (coulomb)
R = (k-mole) (joule/degC)
PI = (pi) (1)
}
PARAMETER {
v (mV)
dt (ms)
area
inactF = 3
actF = 1
gamma = 20 (pS)
eta = .005 (1/um2) :
vshift = 0 (mV) : voltage shift (affects all)
cao = 2.5 (mM) : external ca concentration
cai (mM) celsius (degC)
vmin = -120 (mV)
vmax = 100 (mV)
DONT_VECTORIZE : required declaration
deterministic = 0 : if non-zero, use deterministic variables
}
STATE { m h : deterministic variables
m0h0 m0h1 m1h0 m1h1 m2h0 m2h1 : states
m0h0_m1h0 m1h0_m2h0 m0h1_m1h1 m1h1_m2h1
m2h0_m1h0 m1h0_m0h0 m2h1_m1h1 m1h1_m0h1
m0h0_m0h1 m0h1_m0h0 m1h0_m1h1 m1h1_m1h0 m2h0_m2h1 m2h1_m2h0
}
ASSIGNED {
ica (mA/cm2)
gca (pS/um2)
eca (mV)
minf
hinf
mtau (ms)
htau (ms)
tadj
am (/ms)
bm (/ms)
ah (/ms)
bh (/ms)
N
reff (pS/um2)
scale_dens (pS/um2)
P_am : probability of one channel making am transition
P_bm
P_ah
P_bh
wflag
}
INITIAL {
rates(v+vshift)
m = minf
h = hinf
wflag = 1 : only give a warning once!
scale_dens = gamma/area
N = floor(eta*area + 0.5) : round to nearest number of channels
reff = eta*gamma
m1h0 = floor(2*m*(1-m)*(1-h)*N + 0.5)
m2h0 = floor(m*m*(1-h)*N + 0.5)
m0h1 = floor((1-m)*(1-m)*h*N + 0.5)
m1h1 = floor(2*m*(1-m)*h*N + 0.5)
m2h1 = floor(m*m*h*N + 0.5)
: put tbe rest of tbe channels in the non-conducting & inactivated state
m0h0 = N - (m1h0 + m2h0 + m0h1 + m1h1 + m2h1)
m0h0_m1h0=0
m1h0_m2h0=0
m0h1_m1h1=0
m1h1_m2h1=0
m2h0_m1h0=0
m1h0_m0h0=0
m2h1_m1h1=0
m1h1_m0h1=0
m0h0_m0h1=0
m0h1_m0h0=0
m1h0_m1h1=0
m1h1_m1h0=0
m2h0_m2h1=0
m2h1_m2h0=0
}
BREAKPOINT {
SOLVE states
if (deterministic) {
if (deterministic-1){
gca = m*m*h*tadj*reff
} else {
gca = floor(m*m*h* N + 0.5) * scale_dens *tadj}
} else{
gca = strap(m2h1) * scale_dens *tadj
}
ica = (1e-4) * gca * (v - eca)
}
PROCEDURE states() {
VERBATIM
extern double BnlDev_RNG();
ENDVERBATIM
rates(v+vshift)
: deterministic versions of state variables
: integrated by relaxing toward the steady state value
m = m + (1 - exp(-dt/mtau)) * (minf-m)
h = h + (1 - exp(-dt/htau)) * (hinf-h)
P_am = strap(am*dt)
P_bm = strap(bm*dt)
: cbeck that will represent probabilities when used
ChkProb( 2.0 * P_am)
ChkProb( 2.0 * P_bm)
ChkProb( P_bm/(1.0-P_am) )
: m gate transitions
m0h0_m1h0 = BnlDev_RNG(2.0*P_am,m0h0)
m1h0_m2h0 = BnlDev_RNG(P_am,m1h0)
m1h0_m0h0 = BnlDev_RNG(P_bm/(1.0-P_am), m1h0 - m1h0_m2h0)
m2h0_m1h0 = BnlDev_RNG(2.0*P_bm, m2h0)
m0h1_m1h1 = BnlDev_RNG(2.0*P_am, m0h1)
m1h1_m2h1 = BnlDev_RNG(P_am, m1h1)
m1h1_m0h1 = BnlDev_RNG(P_bm/(1.0-P_am), m1h1 - m1h1_m2h1)
m2h1_m1h1 = BnlDev_RNG(2.0*P_bm, m2h1)
: new numbers in each state after the a gate transitions
m0h0 = m0h0 - m0h0_m1h0 + m1h0_m0h0
m1h0 = m1h0 - m1h0_m2h0 - m1h0_m0h0 + m2h0_m1h0 + m0h0_m1h0
m2h0 = m2h0 - m2h0_m1h0 + m1h0_m2h0
m0h1 = m0h1 - m0h1_m1h1 + m1h1_m0h1
m1h1 = m1h1 - m1h1_m2h1 - m1h1_m0h1 + m2h1_m1h1 + m0h1_m1h1
m2h1 = m2h1 - m2h1_m1h1 + m1h1_m2h1
: probabilities of making h gate transitions
P_ah = strap(ah*dt)
P_bh = strap(bh*dt)
ChkProb(P_ah)
ChkProb(P_bh)
: number making h gate transitions
m0h0_m0h1 = BnlDev_RNG(P_ah,m0h0)
m0h1_m0h0 = BnlDev_RNG(P_bh,m0h1)
m1h0_m1h1 = BnlDev_RNG(P_ah,m1h0)
m1h1_m1h0 = BnlDev_RNG(P_bh,m1h1)
m2h0_m2h1 = BnlDev_RNG(P_ah,m2h0)
m2h1_m2h0 = BnlDev_RNG(P_bh,m2h1)
m0h0 = m0h0 - m0h0_m0h1 + m0h1_m0h0
m1h0 = m1h0 - m1h0_m1h1 + m1h1_m1h0
m2h0 = m2h0 - m2h0_m2h1 + m2h1_m2h0
m0h1 = m0h1 - m0h1_m0h0 + m0h0_m0h1
m1h1 = m1h1 - m1h1_m1h0 + m1h0_m1h1
m2h1 = m2h1 - m2h1_m2h0 + m2h0_m2h1
}
PROCEDURE rates(vm(mV)) {
TABLE minf, hinf, mtau, htau, am, bm, ah, bh, tadj
DEPEND celsius, actF, inactF
FROM -120 TO 100 WITH 199
UNITSOFF
tadj = 2.3^((celsius - 23)/10)
am = 0.055*(-27 - vm)/(exp((-27-vm)/3.8) - 1)/actF
bm = 0.94*exp((-75-vm)/17)/actF
am = am*tadj
bm = bm*tadj
mtau = 1/(am+bm)
minf = am/(am+bm)
:"h" inactivation
ah = 0.000457*exp((-13-vm)/50)/inactF
bh = 0.0065/(exp((-vm-15)/28) + 1)/inactF
ah = ah*tadj
bh = bh*tadj
htau = 1/(ah+bh)
hinf = ah/(ah+bh)
}
UNITSON
: ----------------------------------------------------------------
: sign trap - trap negative numbers and replace with zero
FUNCTION strap(x) {
if (x < 0) {
strap = 0
VERBATIM
fprintf (stderr,"sca.mod:strap: negative value for state");
ENDVERBATIM
} else {
strap = x
}
}
: ----------------------------------------------------------------
: ChkProb - Check that number represents a probability
PROCEDURE ChkProb(p) {
if (p < 0.0 || p > 1.0) {
if (wflag){
VERBATIM
fprintf(stderr, "sca.mod:ChkProb: argument not a probability.\n");
ENDVERBATIM
wflag =0}
}
}