5-neuron-model of neocortex for producing realistic extracellular AP shapes (Van Dijck et al. 2012)

 Download zip file 
Help downloading and running models
This is a 5-neuron model of neocortex, containing one tufted layer-5 pyramidal cell, two non-tufted pyramidal cells, and two inhibitory interneurons. It was used to reproduce extracellular spike shapes in a study comparing algorithms for spike sorting and electrode selection. The neuron models are adapted from Dyhrfjeld-Johnsen et al. (2005).
1 . Van Dijck G, Seidl K, Paul O, Ruther P, Van Hulle MM, Maex R (2012) Enhancing the yield of high-density electrode arrays through automated electrode selection. Int J Neural Syst 22:1-19 [PubMed]
Model Information (Click on a link to find other models with that property)
Model Type: Extracellular; Neuron or other electrically excitable cell; Realistic Network;
Brain Region(s)/Organism:
Cell Type(s): Neocortex U1 L5B pyramidal pyramidal tract GLU cell; Neocortex U1 L2/6 pyramidal intratelencephalic GLU cell;
Gap Junctions:
Simulation Environment: GENESIS;
Model Concept(s):
Implementer(s): Maex, Reinoud [reinoud at bbf.uia.ac.be];
Search NeuronDB for information about:  Neocortex U1 L5B pyramidal pyramidal tract GLU cell; Neocortex U1 L2/6 pyramidal intratelencephalic GLU cell;
Axon_chans.g *
DiffRm.g *
electrodes_fixbug.g *
electrodes_try.g *
Excitatory_fibres.g *
Fibres.g *
Firing_rate_modulation.g *
Firing_rate_profile.g *
Gran_synchan.g *
Harsch-Robinson_modulation.g *
Hgradient.g *
Inhibitory_fibres.g *
L5P_ascout.g *
L5P_ascout_exp.g *
L5P_chans.g *
L5P_chans_tab_Temp.g *
L5P_chans_Temp.g *
L5P_comps.g *
L5P_const.g *
L5P_const+axon+syn.g *
L5P_history.g *
nsynapses.g *
test_position.g *

// Assumes diffamps already exist!!!

// Firing rate now in input field, gain now modulated by GAIN msg from other diffamp.

// Modification on 12/9/2007. To allow other factors to mofidy
// afferent firing rate, diffamp elements are inserted. The 'firing rate'
// is now expressed in the 'gain' field of the diffamp element.
// The diffamp element sends  its output to its corresponding randomspike
// element, and can receive PLUS or MINUS msgs from other objects.

// Sets the firing rates of the randomspike elements to values
// defined by position. The profile is the sum of two Gaussians.
// Position can be defined either along the depth (Z-) axis, or
// radially from the soma.
// Normalization makes the mean firing rate of the entire population
// of afferents equal to mean_firing_rate.
// The profile will be written to a file to be visualized with (Genesis) xplot
// (which does not seem to require ordered series for plotting).
// Of course the resulting density of afferent spikes will also be greatly determined by the density
// of fibres along depth location, which this procedure does not take into account. 

function make_firing_rate_profile (path, o1, sd1, w1, o2, sd2, w2, mean_firing_rate)

str path

// the origins, standard deviations and weights of the two gaussians
// the weights are relative magnitudes, their absolute values will be normalized out
float o1, o2, sd1, sd2, w1, w2  

float mean_firing_rate
float firing_rate
float denominator,coefficient, sum
float position
int number_of_elements, index
str name, diffamp_path, diffamp_element

echo {path}  {o1}  {sd1}  {w1}  {o2}  {sd2}  {w2}  {mean_firing_rate}

// count the elements in path

      number_of_elements = 0
      ce {path}
      foreach name ({el ./##[][TYPE=diffamp]})
//        echo {name}
        number_of_elements = {number_of_elements + 1}
      echo number_of_elements {number_of_elements}

// make the profile by calculating the gain field of the diffamp elements

//      ce {diffamp_path}
      sum = 0

// first Gaussian

      if ({{w1 * sd1} != 0})
      denominator = {sd1*sd1*2}
      coefficient = {w1 / sd1}
      foreach name ({el ./##[][TYPE=diffamp]})
          position = {getfield {name} z}
          firing_rate = {coefficient * {exp {-{{position-o1}*{position-o1}}/denominator}}}
//          echo {name} {position} {firing_rate}
          sum = {sum + firing_rate}
          setfield {name} plus {firing_rate}

      echo sum1 {sum}

// second Gaussian and calculation of sum for later normalization

      if ({{w2 * sd2} != 0})
      denominator = {sd2*sd2*2}
      coefficient = {w2 / sd2}
      foreach name ({el ./##[][TYPE=diffamp]})
          position = {getfield {name} z}
          firing_rate = {coefficient * {exp {-{{position-o2}*{position-o2}}/denominator}}}
//          echo {name} {position} {firing_rate}
          setfield {name} plus {{getfield {name} plus} + {firing_rate}} 
          sum = {sum + firing_rate}

      echo sum2 {sum}

// normalize and show
// want that sum of firing rates equals {mean_firing_rate * number_of_elements}
//      denominator = {sum / number_of_elements * mean_firing_rate}
      denominator = {sum / {number_of_elements * mean_firing_rate}}
      echo denominator {denominator}
      if ({denominator != 0})
	  foreach name ({el ./##[][TYPE=diffamp]})
//            echo {name}  {getfield {name} z}   {getfield {name} plus}  {{getfield {name} plus} / {denominator}}
              firing_rate =  {{getfield {name} plus} / {denominator}}
              setfield {name}  plus {firing_rate}
//            echo {name}  {getfield {name} z}    {firing_rate}

// print the profile

str list = ""
str output = {substring {path} 1 1} @ "_" @ {substring {path} 19 {{strlen {path}} -1}} @ "_profile.dat" // remove initial backslah from pathname
echo {output}

      foreach name ({el ./##[][TYPE=diffamp]})
          list = (list) @ {getfield {name} z} @ " " @ {getfield {name} plus} @ {chr 10}
//          echo {name} {getfield {name} z} {getfield {name} plus}
      echo {list}  > {output} // {source_list}

      sum = 0
      foreach name ({el ./##[][TYPE=diffamp]})
          sum = {{sum} + {getfield {name} plus}}

      echo average firing rate is {sum / {number_of_elements}} 


Loading data, please wait...