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 Stochastic version of K-A channel from Klee Ficker and Heinemann 
: modified to account for Dax A Current --- M.Migliore Jun 1997
: modified to be used with cvode  M.Migliore 2001
: modified to be stochastic by K. Diba (changed original as little as possible)
  

UNITS {
    (mA) = (milliamp)
    (mV) = (millivolt)
 :   (pS) = (picosiemens)
 :   (um) = (micron)
}

PARAMETER {
    v       (mV)
    dt      (ms)
    area
    celsius     (degC)
    
    gamma =  10 (pS) : single channel conductance
    eta   =  8  (1/um2) : channel density 
    deterministic = 0   : if non-zero, use deterministic variables  
        
        vhalfn=11   (mV)
        vhalfl=-56   (mV)
        a0l=0.05      (/ms)
        a0n=0.05    (/ms)
        zetan=-1.5    (1)
        zetal=3    (1)
        gmn=0.55   (1)
        gml=1   (1)
    lmin=2  (mS)
    nmin=0.1  (mS)
    pw=-1    (1)
    tq=-40
    qq=5
    q10=5
    qtl=1
    ek                                    
    vmin = -120 (mV)    : range to construct tables for
    vmax = 100  (mV)
    DONT_VECTORIZE          : required declaration
}


NEURON {
    SUFFIX ska
    USEION k READ ek WRITE ik
    RANGE N, eta, gamma, gka, deterministic,reff
    GLOBAL P_an, P_bn, P_al, P_bl
    GLOBAL ninf, linf, ltau, ntau, lmin
    GLOBAL vmin, vmax, q10
    GLOBAL DONT_VECTORIZE   : prevent vectorization to agree with RNG.mod
}

STATE {
    n l  : deterministic state
    N0L0 N1L0 N0L1 N1L1 : states
    n0l0_n1l0 n0l0_n0l1 : transitions
    n1l0_n1l1 n1l0_n0l0
    n0l1_n1l1 n0l1_n0l0
    n1l1_n0l1 n1l1_n1l0
}

ASSIGNED {
    ik (mA/cm2)
        ninf
        linf      
        ltau  (ms)
        ntau   (ms)
        gka  (pS/um2)  
            an      (/ms)
    bn      (/ms)     al      (/ms)
    bl      (/ms)     reff    (pS/um2)

    N 
    scale_dens (pS/um2) 
    P_an     : probability of one channel making alpha n transition
    P_bn     : probability of one channel making beta n transition
    P_al     : probability of one channel making alpha l transition
    P_bl     : probability of one channel making beta l transition

}

INITIAL {
    rates(v)
    n=ninf
    l=linf
    scale_dens = gamma/area
    reff = eta*gamma
    N = floor(eta*area + 0.5)
    
    N1L1 = floor(n* l* N + 0.5)
    N1L0 = floor(n* (1-l)* N + 0.5)
    N0L1 = floor((1-n)* l* N + 0.5)
    N0L0 = N - N1L1 - N1L0 - N0L1  : put rest into non-conducting state
    
    n0l0_n1l0 = 0
    n0l0_n0l1 = 0
    n1l0_n1l1 = 0
    n1l0_n0l0 = 0
    n0l1_n1l1 = 0
    n0l1_n0l0 = 0
    n1l1_n0l1 = 0
    n1l1_n1l0 = 0
}


BREAKPOINT {
    SOLVE states 
    if (deterministic) { 
        if (deterministic-1){   
      gka = n * l * reff     
      } else {                                    
      gka = floor(n*l * N + 0.5) * scale_dens}
    } else{                                           
      gka = strap(N1L1) * scale_dens
    }
    ik = gka*(v-ek)*(1e-4)
}


: ----------------------------------------------------------------
: states - compute state variables
PROCEDURE states() {

VERBATIM
    extern double BnlDev_RNG();
ENDVERBATIM
        
    rates(v)

    : deterministic versions of state variables
    : integrated by relaxing toward the steady state value
    n = n + (1 - exp(-dt/ntau)) * (ninf-n)
    l = l + (1 - exp(-dt/ltau)) * (linf-l)
    
    P_an = strap(an*dt)
    P_bn = strap(bn*dt)
    
    : check that will represent probabilities when used
    ChkProb( P_an)
    ChkProb( P_bn)
    
    : n gate transitions
    
    n0l0_n1l0 = BnlDev_RNG(P_an, N0L0)    
    n0l1_n1l1 = BnlDev_RNG(P_an, N0L1)
    n1l1_n0l1 = BnlDev_RNG(P_bn, N1L1)
    n1l0_n0l0 = BnlDev_RNG(P_bn, N1L0)

    : new numbers in each state after the n gate transitions
    N0L0 = N0L0 - n0l0_n1l0 + n1l0_n0l0
    N1L0 = N1L0 - n1l0_n0l0 + n0l0_n1l0
    
    N0L1 = N0L1 - n0l1_n1l1 + n1l1_n0l1
    N1L1 = N1L1 - n1l1_n0l1 + n0l1_n1l1

    : probabilities of making l gate transitions
    P_al = strap(al*dt)
    P_bl  = strap(bl*dt)
    
    ChkProb(P_al)
    ChkProb(P_bl)
    
    : number making l gate transitions

    n0l0_n0l1 = BnlDev_RNG(P_al,N0L0-n0l0_n1l0)
    n1l0_n1l1 = BnlDev_RNG(P_al,N1L0-n1l0_n0l0)
    n0l1_n0l0 = BnlDev_RNG(P_bl,N0L1-n0l1_n1l1)
    n1l1_n1l0 = BnlDev_RNG(P_bl,N1L1-n1l1_n0l1)

    N0L0 = N0L0 - n0l0_n0l1  + n0l1_n0l0
    N1L0 = N1L0 - n1l0_n1l1  + n1l1_n1l0
    
    N0L1 = N0L1 - n0l1_n0l0  + n0l0_n0l1
    N1L1 = N1L1 - n1l1_n1l0  + n1l0_n1l1
 }

FUNCTION alpn(v(mV)) {
LOCAL zeta
  zeta=zetan+pw/(1+exp((v-tq)/qq))
  alpn = exp(1.e-3*zeta*(v-vhalfn)*9.648e4/(8.315*(273.16+celsius))) 
}

FUNCTION betn(v(mV)) {
LOCAL zeta
  zeta=zetan+pw/(1+exp((v-tq)/qq))
  betn = exp(1.e-3*zeta*gmn*(v-vhalfn)*9.648e4/(8.315*(273.16+celsius))) 
}

FUNCTION alpl(v(mV)) {
  alpl = exp(1.e-3*zetal*(v-vhalfl)*9.648e4/(8.315*(273.16+celsius))) 
}

FUNCTION betl(v(mV)) {
  betl = exp(1.e-3*zetal*gml*(v-vhalfl)*9.648e4/(8.315*(273.16+celsius))) 
}    
PROCEDURE rates(v(mV)) { :callable from hoc
        LOCAL a,qt    
        TABLE ntau, ltau, ninf, linf,al,bl,an,bn
        DEPEND q10, celsius, a0n, nmin, lmin,qtl
        FROM vmin TO vmax WITH 199
         
        qt=q10^((celsius-24)/10)
        a = alpn(v)
        ninf = 1/(1 + a)
        ntau = betn(v)/(qt*a0n*(1+a))
    if (ntau<nmin) {ntau=nmin}
        a = alpl(v)
        linf = 1/(1+ a)
    ltau = 0.26*(v+50)/qtl
    if (ltau<lmin/qtl) {ltau=lmin/qtl}   
    al = linf/ltau
    bl = 1/ltau - al
    an = ninf/ntau
    bn = 1/ntau - an
}

: ----------------------------------------------------------------
: sign trap - trap for negative values and replace with zero
FUNCTION strap(x) {
    if (x < 0) {
        strap = 0
VERBATIM
        fprintf (stderr,"skaprox.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, "skaprox.mod:ChkProb: argument not a probability.\n");
ENDVERBATIM
  }
}



Loading data, please wait...