AP back-prop. explains threshold variability and rapid rise (McCormick et al. 2007, Yu et al. 2008)

 Download zip file   Auto-launch 
Help downloading and running models
This simple axon-soma model explained how the rapid rising phase in the somatic spike is derived from the propagated axon initiated spike, and how the somatic spike threshold variance is affected by spike propagation.
1 . McCormick DA, Shu Y, Yu Y (2007) Hodgkin and Huxley model still standing? Nature 445:E1-E2 [PubMed]
2 . Yu Y, Shu Y, McCormick DA (2008) Cortical action potential backpropagation explains spike threshold variability and rapid-onset kinetics. J Neurosci 28:7260-72 [PubMed]
Model Information (Click on a link to find other models with that property)
Model Type: Neuron or other electrically excitable cell; Axon;
Brain Region(s)/Organism: Neocortex;
Cell Type(s): Neocortex V1 pyramidal corticothalamic L6 cell; Neocortex V1 pyramidal intratelencephalic L2-6 cell;
Channel(s): I Na,t; I L high threshold; I T low threshold; I A; I K; I M; I h; I K,Ca; I_AHP;
Gap Junctions:
Receptor(s): GabaA; NMDA;
Simulation Environment: NEURON;
Model Concept(s): Action Potential Initiation; Detailed Neuronal Models;
Search NeuronDB for information about:  Neocortex V1 pyramidal corticothalamic L6 cell; Neocortex V1 pyramidal intratelencephalic L2-6 cell; GabaA; NMDA; I Na,t; I L high threshold; I T low threshold; I A; I K; I M; I h; I K,Ca; I_AHP;
ca.mod *
cad.mod *
caL3d.mod *
gabaa5.mod *
Gfluct.mod *
ia.mod *
iahp.mod *
iahp2.mod *
im.mod *
kca.mod *
km.mod *
kv.mod *
na.mod *
NMDA_Mg.mod *
nmda5.mod *
release.mod *

Sodium channel, Hodgkin-Huxley style kinetics.  

Kinetics were fit to data from Huguenard et al. (1988) and Hamill et
al. (1991)

qi is not well constrained by the data, since there are no points
between -80 and -55.  So this was fixed at 5 while the thi1,thi2,Rg,Rd
were optimized using a simplex least square proc

voltage dependencies are shifted approximately from the best
fit to give higher threshold

Author: Zach Mainen, Salk Institute, 1994, zach@salk.edu

26 Ago 2002 Modification of original channel to allow 
variable time step and to correct an initialization error.
Done by Michael Hines(michael.hines@yale.e) and 
Ruggero Scorcioni(rscorcio@gmu.edu) at EU Advance Course 
in Computational Neuroscience. Obidos, Portugal

11 Jan 2007 Fixed glitch in trap where (v/th) was where (v-th)/q is. 
(thanks Ronald van Elburg!)

20110202 made threadsafe by Ted Carnevale
20120514 replaced vtrap0 with efun, which is a better approximation
         in the vicinity of a singularity

Special comment:

This mechanism was designed to be run at a single operating 
temperature--37 deg C--which can be specified by the hoc 
assignment statement
celsius = 37
This mechanism is not intended to be used at other temperatures, 
or to investigate the effects of temperature changes.

Zach Mainen created this particular model by adapting conductances 
from lower temperature to run at higher temperature, and found it 
necessary to reduce the temperature sensitivity of spike amplitude 
and time course.  He accomplished this by increasing the net ionic 
conductance through the heuristic of changing the standard HH 
  g = gbar*product_of_gating_variables
  g = tadj*gbar*product_of_gating_variables
  tadj = q10^((celsius - temp)/10)
  temp is the "reference temperature" (at which the gating variable
    time constants were originally determined)
  celsius is the "operating temperature"

Users should note that this is equivalent to changing the channel 
density from gbar at the "reference temperature" temp (the 
temperature at which the at which the gating variable time 
constants were originally determined) to tadj*gbar at the 
"operating temperature" celsius.

	RANGE m, h, gna, gbar
	GLOBAL tha, thi1, thi2, qa, qi, qinf, thinf
	RANGE minf, hinf, mtau, htau
	GLOBAL Ra, Rb, Rd, Rg
	GLOBAL q10, temp, tadj, vmin, vmax, vshift

	(mA) = (milliamp)
	(mV) = (millivolt)
	(pS) = (picosiemens)
	(um) = (micron)

	gbar = 1000   	(pS/um2)	: 0.12 mho/cm2
	vshift = -10	(mV)		: voltage shift (affects all)
	tha  = -35	(mV)		: v 1/2 for act		(-42)
	qa   = 9	(mV)		: act slope		
	Ra   = 0.182	(/ms)		: open (v)		
	Rb   = 0.124	(/ms)		: close (v)		

	thi1  = -50	(mV)		: v 1/2 for inact 	
	thi2  = -75	(mV)		: v 1/2 for inact 	
	qi   = 5	(mV)	        : inact tau slope
	thinf  = -65	(mV)		: inact inf slope	
	qinf  = 6.2	(mV)		: inact inf slope
	Rg   = 0.0091	(/ms)		: inact (v)	
	Rd   = 0.024	(/ms)		: inact recov (v) 

	temp = 23	(degC)		: original temp 
	q10  = 2.3			: temperature sensitivity

:	dt		(ms)
	vmin = -120	(mV)
	vmax = 100	(mV)

	v 		(mV)
	celsius		(degC)
	ina 		(mA/cm2)
	gna		(pS/um2)
	ena		(mV)
	minf 		hinf
	mtau (ms)	htau (ms)
STATE { m h }

    tadj = q10^((celsius - temp)/(10 (degC))) : make all threads calculate tadj at initialization

	m = minf
	h = hinf

        SOLVE states METHOD cnexp
        gna = tadj*gbar*m*m*m*h
	ina = (1e-4) * gna * (v - ena)

: LOCAL mexp, hexp 

DERIVATIVE states {   :Computes state variables m, h, and n 
        trates(v+vshift)      :             at the current v and dt.
        m' =  (minf-m)/mtau
        h' =  (hinf-h)/htau

PROCEDURE trates(v (mV)) {  
    TABLE minf,  hinf, mtau, htau
    DEPEND celsius, temp, Ra, Rb, Rd, Rg, tha, thi1, thi2, qa, qi, qinf
    FROM vmin TO vmax WITH 199

	rates(v): not consistently executed from here if usetable == 1

:        tinc = -dt * tadj

:        mexp = 1 - exp(tinc/mtau)
:        hexp = 1 - exp(tinc/htau)

: efun() is a better approx than trap0 in vicinity of singularity--

PROCEDURE rates(vm (mV)) {  
    LOCAL  a, b

:    a = trap0(vm,tha,Ra,qa)
    a = Ra * qa * efun((tha - vm)/qa)

:   b = trap0(-vm,-tha,Rb,qa)
    b = Rb * qa * efun((vm - tha)/qa)

    tadj = q10^((celsius - temp)/10)

	mtau = 1/tadj/(a+b)
	minf = a/(a+b)

    :"h" inactivation 

:    a = trap0(vm,thi1,Rd,qi)
    a = Rd * qi * efun((thi1 - vm)/qi)

:    b = trap0(-vm,-thi2,Rg,qi)
    b = Rg * qi * efun((vm - thi2)/qi)

    htau = 1/tadj/(a+b)
    hinf = 1/(1+exp((vm-thinf)/qinf))

FUNCTION trap0(v,th,a,q) {
	if (fabs((v-th)/q) > 1e-6) {
	        trap0 = a * (v - th) / (1 - exp(-(v - th)/q))
	} else {
	        trap0 = a * q

FUNCTION efun(z) {
	if (fabs(z) < 1e-6) {
		efun = 1 - z/2
		efun = z/(exp(z) - 1)

Loading data, please wait...