Artificial neuron model (Izhikevich 2003, 2004, 2007)

 Download zip file   Auto-launch 
Help downloading and running models
Accession:39948
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.
References:
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;
Channel(s):
Gap Junctions:
Receptor(s):
Gene(s):
Transmitter(s):
Simulation Environment: NEURON; MATLAB;
Model Concept(s): Action Potential Initiation; Activity Patterns; Parameter Fitting; Simplified Models; Tutorial/Teaching; Action Potentials;
Implementer(s): Lytton, William [billl at neurosim.downstate.edu]; Dura-Bernal, Salvador [salvadordura at gmail.com];
''' izhitest.py
Script to test izhikevich cell model from Izhikevich (2007) "Neural Dynamical Systems" MIT Press 

Cell parameters taken from figures of Izhikevich, 2007 book and implemented using the general eqns (8.5) and (8,6)

Python wrappers and parameters of each cell type defined in izhi.py

Model implemented using NEURON simulator NMDOL in izhi2007.mod

Cell types available are based on Izhikevich, 2007 book:
    1. RS - Layer 5 regular spiking pyramidal cell (fig 8.12 from 2007 book)
    2. IB - Layer 5 intrinsically bursting cell (fig 8.19 from 2007 book)
    3. CH - Cat primary visual cortex chattering cell (fig 8.23 from 2007 book)
    4. LTS - Rat barrel cortex Low-threshold  spiking interneuron (fig 8.25 from 2007 book)
    5. FS - Rat visual cortex layer 5 fast-spiking interneuron (fig 8.27 from 2007 book)
    6. TC and TC_burst - Cat dorsal LGN thalamocortical (TC) cell (fig 8.31 from 2007 book)
    7. RTN and RTN_burst - Rat reticular thalamic nucleus (RTN) cell  (fig 8.32 from 2007 book)

Usage: 
nrniv -python izhi2007Figs.py 
cell=izh07.IzhiCell()
recorder(cell, cell.sec(0.5)._ref_v)
test1(cell, 'RS', 'RS')

'''

from neuron import h,gui
import pylab as plt
plt.ion()
import izhi2007Wrapper as izh07
from izhiGUI import choices, izhtype, izh, cell07 # need to make sure can also access everything that will be seen from within 'choices'

## Code to  reproduce figs from Izhikevich, 2007 (book)
testModel = 'RS' # cell type to reproduce (RS, IB, CH, LTS, FS, TC, RTN)
burstMode = 0 # tests bursting mode for TC and RTN cells
save = False # whether to save 
IinRange = []
IinHyper = 0
title = ''
fig1 = None

def test1 (ce, name, izhtype):
  global testModel, burstMode, IinRange, IinHyper, legendLabels, title
  testModel = name
  burstMode = 0
  C, izhm = ce, ce.izh

  if C.type is not testModel:
    C.reparam(testModel)

  legendLabels = ['%s'%(izhtype)]
  # RS
  if testModel == 'RS': 
    h.tstop = 520
    IinRange = [60,70,85,100]           
    title = 'Layer 5 regular spiking (RS) pyramidal cell (fig 8.12)'

  # IB
  elif testModel == 'IB': 
    h.tstop = 600
    IinRange = [290,370,500,550]
    title = 'Layer 5 intrinsic bursting (IB) pyramidal cell (fig 8.19)'

  # CH
  elif testModel == 'CH': 
    h.tstop = 210
    IinRange = [200,300,400,600]
    title = 'Cortical chattering (CH) cell  (fig 8.23)'

  # LTS
  elif testModel == 'LTS': 
    h.tstop = 320
    IinRange = [100,125,200,300]
    title = 'Low-threshold spiking (LTS) interneuron (fig 8.25) '

    # FS
  elif testModel == 'FS': 
    h.tstop = 100
    IinRange = [73.2,100,200,400]
    title = 'Fast-spiking (FS) interneuron (fig 8.27) '

    # TC
  elif testModel == 'TC':
    h.tstop = 650
    IinRange = [50,100,150]
    title = 'Thalamocortical (TC) cell (fig 8.31) '
    
    # TC burst
  elif testModel == 'TC_burst':
    burstMode = 1
    h.tstop = 650
    IinHyper = -1200
    IinRange = [0,50,100]
    title = 'Thalamocortical (TC) cell burst mode (fig 8.31) '

    # RTN
  elif testModel == 'RTN':
    IinRange = [50,70,110]
    h.tstop=650
    title = 'Reticular thalamic nucleus (RTN) cell (fig 8.32) '

    # RTN burst
  elif testModel == 'RTN_burst':
    burstMode = 1
    IinHyper = -350
    IinRange = [30,50,90]
    h.tstop=720
    title = 'Reticular thalamic nucleus (RTN) cell (fig 8.32) '
  runsim(izhm)

nquantities=4
spikevec = h.Vector()
recvecs = [h.Vector() for q in range(nquantities)] # Initialize vectors
def recorder (ce, vloc):
  izhm = ce.izh
  #record spikes
  spikerecorder = h.NetCon(izhm, None)
  spikerecorder.record(spikevec)
  # record V,u,Iin
  recvecs[0].record(h._ref_t) # Record simulation time
  recvecs[1].record(vloc) # Record cell voltage
  recvecs[2].record(izhm._ref_u) # Record cell recovery variable
  recvecs[3].record(izhm._ref_Iin) # input

## Run sim
def runsim (izhm):
  global Iin, ax1, recvecs
  h.dt = 0.025
  f1 = []
  ax1=None
  if fig1 is not None: plt.clf()
  for Iin in IinRange:
    izhm.Iin=Iin
    h.init()

    if burstMode:
            izhm.Iin=IinHyper
            h.init()
            h.continuerun(120)
            izhm.Iin=Iin
            h.run()
    else:
            h.run()
    plotall()

ax1=None
def plotall ():
    global fig1, Iin, ax1, legend
    if fig1 is None: fig1 = plt.figure(figsize=(6,10), tight_layout=True)
    ax = fig1.add_subplot(len(IinRange),1,len(IinRange)-IinRange.index(Iin),sharex=ax1)
    if not ax1: ax1=ax
    ax.plot(recvecs[0], recvecs[1])
    ax.set_xlabel('t (ms)     (for Iin=%d pA)'%int(Iin))
    ax.set_xlim([0,h.tstop])
    ax.set_ylabel('V (mV)')
    if IinRange.index(Iin)==0: 
            plt.legend(legendLabels)
    if IinRange.index(Iin)==len(IinRange)-1: 
            ax.set_title(title)
    plt.draw()
    if save: 
      burstText=['', '_burstMode']
      fig1.savefig('%s%s.png'%(testModel,burstText[burstMode]))
    plt.show()

def closeFig():
  global fig1
  plt.close('all')
  fig1 = None

Loading data, please wait...