Cortical network model of posttraumatic epileptogenesis (Bush et al 1999)

 Download zip file   Auto-launch 
Help downloading and running models
Accession:52034
This simulation from Bush, Prince, and Miller 1999 shows the epileptiform response (Fig. 6C) to a brief single stimulation in a 500 cell network of multicompartment models, some of which have active dendrites. The results which I obtained under Redhat Linux is shown in result.gif. Original 1997 code from Paul Bush modified slightly by Bill Lytton to make it work with current version of NEURON (5.7.139). Thanks to Paul Bush and Ken Miller for making the code available.
Reference:
1 . Bush PC, Prince DA, Miller KD (1999) Increased pyramidal excitability and NMDA conductance can explain posttraumatic epileptogenesis without disinhibition: a model. J Neurophysiol 82:1748-58 [PubMed]
Citations  Citation Browser
Model Information (Click on a link to find other models with that property)
Model Type: Neuron or other electrically excitable cell;
Brain Region(s)/Organism: Neocortex;
Cell Type(s): Neocortex M1 L5B pyramidal pyramidal tract GLU cell; Neocortex M1 L2/6 pyramidal intratelencephalic GLU cell; Neocortex M1 interneuron basket PV GABA cell;
Channel(s): I Na,t; I Sodium; I Potassium;
Gap Junctions:
Receptor(s): GabaA; GabaB; AMPA; NMDA; Gaba;
Gene(s):
Transmitter(s): Gaba; Glutamate;
Simulation Environment: NEURON;
Model Concept(s): Active Dendrites; Detailed Neuronal Models; Epilepsy; Synaptic Integration;
Implementer(s): Lytton, William [bill.lytton at downstate.edu]; Bush, Paul;
Search NeuronDB for information about:  Neocortex M1 L2/6 pyramidal intratelencephalic GLU cell; Neocortex M1 L5B pyramidal pyramidal tract GLU cell; Neocortex M1 interneuron basket PV GABA cell; GabaA; GabaB; AMPA; NMDA; Gaba; I Na,t; I Sodium; I Potassium; Gaba; Glutamate;
/
ctxnet
README
AMPA.mod
cadecay.mod
cah.mod
dpresyn.mod
fpoisson_generator.mod
GABAa.mod
GABAb.mod
glu.mod
holt_alphasyn.mod
holt_rnd.mod
kca.mod *
kdr.mod
kdrp.mod
na.mod
nap.mod
NMDA.mod
noise.mod
precall.mod
pregen.mod
seed.mod
Aff
Afi
Aft
Aiaf
Aiat
Aibf
Aibt
Atf
Ati
Att
data.temp
gtstpop.ses
init.hoc
mosinit.hoc *
presyn.inc
result.gif
sns.inc
snsarr.inc
snshead.inc
                            
COMMENT
Modified from Zach's code: 6.3.94
Simulates alpha function synapse with synaptic delay.
If pre > PreThresh then a new spike is put on the queue at t+delay.
A delta pulse is added into the alpha function equations when time >
a time on the queue. A maximum of (pspMAX) can be handled on the queue.
ENDCOMMENT

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

DEFINE pspMAX 15				:max # of spikes on queue

NEURON {
	POINT_PROCESS glu
	POINTER pre				:presyn variable to trigger on
	RANGE gmax, i, g, delay
	RANGE delta, flag, erev:, p
	NONSPECIFIC_CURRENT i
	GLOBAL tau,PreThresh
}

ASSIGNED {
	pspSTACK[pspMAX]
	psp0
	psp1
	pspN
	pre
	flag
	delta
:	rn
}

UNITS {
	(nA) = (nanoamp)
	(mV) = (millivolt)
	(umho) = (micromho)
	(mM) = (milli/liter)
}

PARAMETER {
	gmax=0.005     (umho)
	erev=0		(mV)
	tau=1.0 			:tau for alpha function
	delay=1.5	(ms)		:synaptic delay
	PreThresh=-20	(mV)		:presyn spike thresh to test for
	v		(mV)
        dt		(ms)
:	p = 0.2
}

STATE {
	X
	Y
}

INITIAL { LOCAL i
	X = 0				:~proportion of bound transmitter/receptors
	Y = 0				:~proportion of channels open (g)
	flag = 0			:set if spike is above thresh
	delta = 0			:set if quantum released
	g = 0
	pspN = 0
	psp0 = 0
	psp1 = 0
:	rn = 1/(2^31)
  FROM i=0 TO pspMAX {
  pspSTACK[i] = 0 
 }
}

ASSIGNED { i (nA)  g (umho)}

BREAKPOINT {			:everything in BREAKPOINT called twice except SOLVE

  SOLVE dstates METHOD cnexp

  g = gmax * Y / (tau * 0.36787944)   : tau * exp(-1)
  i = g*(v - erev)
}

DERIVATIVE dstates {
	CheckThresh()        
	CheckTime()
	X' = delta - X / tau
        Y' = X - Y / tau
}

PROCEDURE CheckThresh() { 

  if (flag) { if (pre < PreThresh) {flag = 0} }
  else {
    if (pre > PreThresh) {
      flag = 1
:      if (random()*rn < p) {
        AddSpike()
:      }
    }
  }
}

PROCEDURE AddSpike() { 

  if (pspN < pspMAX) {
    pspN=pspN+1
    if (psp1 >= pspMAX) { psp1 = 0 }
    pspSTACK[psp1] = t+delay-dt		:time at which next quantum released
    psp1=psp1+1
  }
  else { printf("ERROR: spike queue full - synaptic delay too long?\n") }
}

COMMENT
PROCEDURE CheckTimeo() {		:hacked code to get around pseudo bug
  if ( pspSTACK[psp0] > 0) {		:if delta set for only 1 dt, doesn't work
    if (t-pspSTACK[psp0] > dt) {
  	delta = 0
        pspN=pspN-1
        pspSTACK[psp0] = 0
        psp0 = psp0+1
        if (psp0 >= pspMAX) { psp0 = 0 }
    } else if (t-pspSTACK[psp0] > 0) {
        printf("quantum released\n")
        delta = 1/dt
    }
  }
}
ENDCOMMENT

PROCEDURE CheckTime() {			
delta = 0
  if ( (pspSTACK[psp0] > 0) && (t > pspSTACK[psp0]) ){		
        delta = 1/dt
        pspN=pspN-1
        pspSTACK[psp0] = 0
        psp0 = psp0+1
        if (psp0 >= pspMAX) { psp0 = 0 }
  }
}