Explaining pathological changes in axonal excitability by dynamical analysis (Coggan et al. 2011)

 Download zip file 
Help downloading and running models
Accession:143072
"... To help decipher the biophysical basis for ‘paroxysmal’ spiking, we replicated afterdischarge (i.e. continued spiking after a brief stimulus) in a minimal conductance-based axon model. ... A perturbation could abruptly switch the system between two (quasi-)stable attractor states: rest and repetitive spiking. ... Initiation of afterdischarge was explained by activation of the persistent inward current forcing the system to cross a saddle point that separates the basins of attraction associated with each attractor. Termination of afterdischarge was explained by the attractor associated with repetitive spiking being destroyed. ... The model also explains other features of paroxysmal symptoms, including temporal summation and refractoriness."
Reference:
1 . Coggan JS, Ocker GK, Sejnowski TJ, Prescott SA (2011) Explaining pathological changes in axonal excitability through dynamical analysis of conductance-based models. J Neural Eng 8:065002 [PubMed]
Model Information (Click on a link to find other models with that property)
Model Type: Axon;
Brain Region(s)/Organism:
Cell Type(s):
Channel(s):
Gap Junctions:
Receptor(s):
Gene(s):
Transmitter(s):
Simulation Environment: XPP;
Model Concept(s): Nociception;
Implementer(s): Prescott, Steven [steve.prescott at sickkids.ca]];
:modified by Jay Coggan 

TITLE Motor Axon Node channels

: 2/02
: Cameron C. McIntyre
:
: Fast Na+, Persistant Na+, Slow K+, and Leakage currents 
: responsible for nodal action potential
: Iterative equations H-H notation rest = -80 mV
:
: This model is described in detail in:
:
: McIntyre CC, Richardson AG, and Grill WM. Modeling the excitability of
: mammalian nerve fibers: influence of afterpotentials on the recovery
: cycle. Journal of Neurophysiology 87:995-1006, 2002.

INDEPENDENT {t FROM 0 TO 1 WITH 1 (ms)}

NEURON {
	SUFFIX nax
	USEION na READ ena WRITE  ina		
	NONSPECIFIC_CURRENT ina
	NONSPECIFIC_CURRENT inap
	:NONSPECIFIC_CURRENT ik
	NONSPECIFIC_CURRENT il
	:RANGE gnapbar, gnabar, gkbar, gl, ena, ek, el
	:RANGE mp_inf, m_inf, h_inf, s_inf
	:RANGE tau_mp, tau_m, tau_h, tau_s

	RANGE gnapbar, gnabar, gl, ena, el
	RANGE mp_inf, m_inf, h_inf
	RANGE tau_mp, tau_m, tau_h
}


UNITS {
	(mA) = (milliamp)
	(mV) = (millivolt)
}

PARAMETER {

	gnapbar = 0.01	(mho/cm2)
	gnabar	= .2	(mho/cm2) :orig 3.0
	:gkbar   = 0.08 	(mho/cm2)
	gl	= 0.007 (mho/cm2) :orig 0.007
	ena     = 55.0  (mV)
	:ek      = -90.0 (mV)
	:el	= -73	 (mV)
	el	= -71 (mV)		 
	:celsius	= 	(degC)
	dt              (ms)
	v               (mV)
	vtraub=-80
	ampA = 0.01
	ampB = 27		 
	ampC = 10.2	
	bmpA = 0.00025		
	bmpB = 34		
	bmpC = 10	
	amA = 1.76 	
	amB = 21.4	
	amC = 9.3	
	bmA = 0.13	
	bmB = 18.7 	
	bmC = 9.16
	ahA = 0.062	
	ahB = 114.0
	ahC = 11.0
	bhA = 1.7	
	bhB = 31.8
	bhC = 13.4
	:asA = 0.3
	:asB = -27
	:asC = -5
	:bsA = 0.03
	:bsB = 10
	:bsC = -1
}

STATE {
	:mp m h s
	mp m h
}

ASSIGNED {
	:v	(mV)
	inap    (mA/cm2)
	ina	(mA/cm2)
	:ik      (mA/cm2)
	il      (mA/cm2)
	mp_inf
	m_inf
	h_inf
	:s_inf
	tau_mp
	tau_m
	tau_h
	:tau_s
	q10_1
	q10_2
	q10_3
}

BREAKPOINT {
	SOLVE states METHOD cnexp
	inap = gnapbar * mp*mp*mp * (v - ena)
	ina = gnabar * m*m*m*h * (v - ena)

:	inap = gnapbar * mp*mp*mp * (v - 55)
:	ina = gnabar * m*m*m*h * (v - 55)

	:ik   = gkbar * s * (v - ek)
	il   = gl * (v - el)
}

DERIVATIVE states {   : exact Hodgkin-Huxley equations
       evaluate_fct(v)
	mp'= (mp_inf - mp) / tau_mp
	m' = (m_inf - m) / tau_m
	h' = (h_inf - h) / tau_h
	:s' = (s_inf - s) / tau_s
}

UNITSOFF

INITIAL {
:
:	Q10 adjustment
:

	:q10_1 = 2.2 ^ ((celsius-20)/ 10 )
	:q10_2 = 2.9 ^ ((celsius-20)/ 10 )
	:q10_3 = 3.0 ^ ((celsius-36)/ 10 )

	evaluate_fct(v)
	mp = mp_inf
	m = m_inf
	h = h_inf
	:s = s_inf
}

PROCEDURE evaluate_fct(v(mV)) { LOCAL a,b,v2

: begin original v2
:	a = q10_1*vtrap1(v)
:	b = q10_1*vtrap2(v)
:	tau_mp = 1 / (a + b)
:	mp_inf = a / (a + b)

:	a = q10_1*vtrap6(v)
:	b = q10_1*vtrap7(v)
:	tau_m = 1 / (a + b)
:	m_inf = a / (a + b)

:	a = q10_2*vtrap8(v)
:	b = q10_2*bhA / (1 + Exp(-(v+bhB)/bhC))
:	tau_h = 1 / (a + b)
:	h_inf = a / (a + b)

:	:v2 = v - vtraub : convert to traub convention

:	:a = q10_3*asA / (Exp((v2+asB)/asC) + 1) 
:	:b = q10_3*bsA / (Exp((v2+bsB)/bsC) + 1)
:	:tau_s = 1 / (a + b)
:	:s_inf = a / (a + b)
: end origianl v2

: begin no q10

	a = vtrap1(v)
	b = vtrap2(v)
	tau_mp = 1 / (a + b)
	mp_inf = a / (a + b)

	a = vtrap6(v)
	b = vtrap7(v)
	tau_m = 1 / (a + b)
	m_inf = a / (a + b)

	a = vtrap8(v)
	b = bhA / (1 + Exp(-(v+bhB)/bhC))
	tau_h = 1 / (a + b)
	h_inf = a / (a + b)

	:v2 = v - vtraub : convert to traub convention

	:a = q10_3*asA / (Exp((v2+asB)/asC) + 1) 
	:b = q10_3*bsA / (Exp((v2+bsB)/bsC) + 1)
	:tau_s = 1 / (a + b)
	:s_inf = a / (a + b)

: end no q10






}

:FUNCTION vtrap(x) {
:	if (x < -50) {
:		vtrap = 0
:	}else{
:		vtrap = bsA / (Exp((x+bsB)/bsC) + 1)
:	}
:}

FUNCTION vtrap1(x) {
	if (fabs((x+ampB)/ampC) < 1e-6) {
		vtrap1 = ampA*ampC
	}else{
		vtrap1 = (ampA*(x+ampB)) / (1 - Exp(-(x+ampB)/ampC))
	}
}

FUNCTION vtrap2(x) {
	if (fabs((x+bmpB)/bmpC) < 1e-6) {
		vtrap2 = -bmpA*bmpC
	}else{
		vtrap2 = (bmpA*(-(x+bmpB))) / (1 - Exp((x+bmpB)/bmpC))
	}
}

FUNCTION vtrap6(x) {
	if (fabs((x+amB)/amC) < 1e-6) {
		vtrap6 = amA*amC
	}else{
		vtrap6 = (amA*(x+amB)) / (1 - Exp(-(x+amB)/amC))
	}
}

FUNCTION vtrap7(x) {
	if (fabs((x+bmB)/bmC) < 1e-6) {
		vtrap7 = -bmA*bmC
	}else{
		vtrap7 = (bmA*(-(x+bmB))) / (1 - Exp((x+bmB)/bmC))
	}
}

FUNCTION vtrap8(x) {
	if (fabs((x+ahB)/ahC) < 1e-6) {
		vtrap8 = -ahA*ahC
	}else{
		vtrap8 = (ahA*(-(x+ahB))) / (1 - Exp((x+ahB)/ahC)) 
	}
}

FUNCTION Exp(x) {
	if (x < -100) {
		Exp = 0
	}else{
		Exp = exp(x)
	}
}

UNITSON

Loading data, please wait...