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;

/* This script has to do with the spatial (vertical depth) profile of inputs.
   Input arguments:
	PATH : the pathname of an array of diffamp elements;
		each element has been assigned a (vertical) position
		and corresponds to a fibre (randomspike element) to 
		which it sends a RATE msg
        O1, SD1, W!, O2, SD2, W2 : parameters for two 1D Gaussians 
		along vertical dimension (cortical depth) (origin, SD, total area)

        the PLUS field of each diffamp element is set to the (sum of) Gaussian weights,
        by which the diffamps represent a spatial profile of weight and/or fibre density

// Note: why not put gain field, and send other inputs as PLUS msgs ?
// Done 9/9/2008

// 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}
          setfield {name} gain {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}} 
          setfield {name} gain {{getfield {name} gain} + {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}}
              firing_rate =  {{getfield {name} gain} / {denominator}}
//              setfield {name}  plus {firing_rate}
              setfield {name}  gain {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}
          list = (list) @ {getfield {name} z} @ " " @ {getfield {name} gain} @ {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}}
          sum = {{sum} + {getfield {name} gain}}

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


Loading data, please wait...