Spike propagation in dendrites with stochastic ion channels (Diba et al. 2006)

 Download zip file 
Help downloading and running models
Accession:125385
"We investigate the effects of the stochastic nature of ion channels on the faithfulness, precision and reproducibility of electrical signal transmission in weakly active, dendritic membrane under in vitro conditions. ... We numerically simulate the effects of stochastic ion channels on the forward and backward propagation of dendritic spikes in Monte-Carlo simulations on a reconstructed layer 5 pyramidal neuron. We report that in most instances there is little variation in timing or amplitude for a single BPAP, while variable backpropagation can occur for trains of action potentials. Additionally, we find that the generation and forward propagation of dendritic Ca2+ spikes are susceptible to channel variability. This indicates limitations on computations that depend on the precise timing of Ca2+ spikes."
Reference:
1 . Diba K, Koch C, Segev I (2006) Spike propagation in dendrites with stochastic ion channels. J Comput Neurosci 20:77-84 [PubMed]
Model Information (Click on a link to find other models with that property)
Model Type: Channel/Receptor;
Brain Region(s)/Organism: Neocortex;
Cell Type(s):
Channel(s):
Gap Junctions:
Receptor(s):
Gene(s):
Transmitter(s):
Simulation Environment: NEURON;
Model Concept(s): Active Dendrites; Action Potentials;
Implementer(s): Diba, Kamran [diba at andromeda.rutgers.edu];
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}
  }
}

Loading data, please wait...