Artificial neuron model (Izhikevich 2003, 2004, 2007)

 Download zip file 
Help downloading and running models
A set of models is presented based on 2 related parameterizations to reproduce spiking and bursting behavior of multiple types of cortical neurons and thalamic neurons. These models combine the biologically plausibility of Hodgkin Huxley-type dynamics and the computational efficiency of integrate-and-fire neurons. Using these model, one can simulate tens of thousands of spiking cortical neurons in real time (1 ms resolution) using a desktop PC.
1 . Izhikevich EM (2007) Dynamical Systems in Neuroscience: The Geometry of Excitability and Bursting
2 . Izhikevich EM (2004) Which model to use for cortical spiking neurons? IEEE Trans Neural Netw 15:1063-70 [PubMed]
3 . Izhikevich EM (2003) Simple model of spiking neurons. IEEE Trans Neural Netw 14:1569-72 [PubMed]
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:
Cell Type(s): Abstract Izhikevich neuron;
Gap Junctions:
Simulation Environment: NEURON; MATLAB;
Model Concept(s): Action Potential Initiation; Activity Patterns; Parameter Fitting; Simplified Models; Tutorial/Teaching; Action Potentials;
Implementer(s): Lytton, William [bill.lytton at]; Dura-Bernal, Salvador [salvadordura at];
import simple

Sets up 5 models using default parameters in the .mod files
2 versions of 2003/2004 parameterization: freestanding (3a); in section (3b)
4 versions of 2007/2008 parameterization: freestanding (7a); in section with local integration of 'u' (7b); 
                                          in sec with STATE 'u' 7bS; in sec using wrapper class (7bw)
can graph u, v for any model'v3a','v3b') # compare voltage output for the 2 versions of the 2003/2004 parameterization; will NOT be identical'v7a','v7b','v7bw') # compare voltage output for 3 versions of the 2007 parameterization

from neuron import h, gui
import numpy as np
import izhi2007Wrapper as izh07
import pylab as plt
import pprint as pp
# fih = []

# make a 2003a STATE {u,vv} cell (used for 2003, 2004)
iz03a = h.Izhi2003a(0.5,sec=dummy)
iz03a.Iin = 4

# make a 2003b (Section v) cell
sec03b = h.Section() # this section will actually be used
sec03b.L, sec03b.diam = 10, 10 # empirically tuned
iz03b = h.Izhi2003b(0.5,sec=sec03b)
iz03b.Iin = 4
def iz03b_init (): sec03b(0.5).v, iz03b.u = -65, -65*iz03b.b
# fih.append(h.FInitializeHandler(iz03b_init))

# make a 2007a (NMODL) cell
iz07a = h.Izhi2007a(0.5,sec=dummy)
iz07a.Iin = 70

# make a 2007b (section) cell
sec07b = h.Section()
sec07b.L, sec07b.diam, = 10, 10, 31.831
iz07b = h.Izhi2007b(0.5,sec=sec07b)
iz07b.Iin = 70
def iz07b_init(): sec07b.v=-60
# fih.append(h.FInitializeHandler(iz07b_init))

# make a 2007b (section) cell using the Wrapper
iz07bw = izh07.IzhiCell() # defaults to RS
iz07bw.izh.Iin = 70
# fih.append(h.FInitializeHandler(iz07bw.init))

# vectors and plot
#recd = {'u3a':[iz03a._ref_u], 'v3a':[iz03a._ref_V], 'u3b':[iz03b._ref_u], 'v3b':[sec03b(0.5)._ref_v], 
recd={   'u7a':[iz07a._ref_u], 'v7a':[iz07a._ref_V], 'u7b':[iz07b._ref_u], 'v7b':[sec07b(0.5)._ref_v],
        'u7bw':[iz07bw.izh._ref_u], 'v7bw':[iz07bw.sec(0.5)._ref_v]}
[(v.append(h.Vector(h.tstop/h.dt+100)),v[1].record(v[0])) for x,v in recd.iteritems()]
def vtvec(vv): return np.linspace(0, len(vv)*h.dt, len(vv), endpoint=True)

# run and plot
fig = None
def show (*vars):
  global fig,tvec
  if fig is None: fig = plt.figure(figsize=(10,6), tight_layout=True)
  if len(vars)==0: vars=recd.keys()
  [plt.plot(tvec,v[1], label=x) for x,v in recd.iteritems() if x in vars]
  pp.pprint([v[1].as_numpy()[-5:] for x,v in recd.iteritems() if x in vars])

# show()

Loading data, please wait...