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;
// genesis

// Function make_fibres (pathname).
// Creates in {pathname} three populations of fibres: feedforward, feedback intracolumn,
// feedback intercolumn, using a {template} model neuron as input, so as to create one
// fibre for each compartment of the template.

// Each population consists of randomspike elements with associated diffamps.
// The associated diffamps are needed to flexibly modulate the rates by different sources.
// The diffamps send RATE msgs to their respective randomspikes. 
// In other scripts, the diffamps will get PLUS messages, e.g.feedforward fibres 
// will get input from Harsch-Robinson_input.g.
// The gain fields of the diffamps are set in Firing_rate_profile.g  whereas the randsomspikes will be 
// connected (in Excitatory_fibers.g and Inhibitory_fibres.g) to synapses on the L5P cell.

// Actually, for each compartment on L5P, one fibre is generated, (almost) randomly
// assigned to one of the three classes and put at the same position as the compartment.

int  index

function make_fibres (pathname, template)

	str pathname, template

// Make library protoptypes *****

   	if ({!{exists /library}})
        	create neutral /library 
          	disable /library

	if ({!{exists /library/fibre}})
         //   create randomspike2 /library/fibre  // randomspike 2 does not exist in official release
   		create randomspike /library/fibre
		//   setfield ^ rate {E_fibre_rate} 
		//              abs_refract 0.001 
		//              rate_type RS_EFFECTIVE

	create diffamp /library/diffamp
	setfield ^ plus 0 minus 0 saturation 10e10

// count numbers of fibres to be made

	int  number_of_fibres =0

//	foreach name ({el /L5P/p#[][TYPE=compartment]})
	foreach name ({el {template}#[][TYPE=compartment]})
                number_of_fibres = {number_of_fibres} + 1

	int number_FF_fibres = {number_of_fibres} / 3
	int number_FBintra_fibres = {number_of_fibres} / 3
	int number_FBinter_fibres = {number_of_fibres - number_FF_fibres - number_FBintra_fibres}
        if ({{number_of_fibres % 3} > 0})
              number_FF_fibres =  {number_FF_fibres + 1}
        if ({{number_of_fibres % 3} > 1})
              number_FBintra_fibres =  {number_FBintra_fibres + 1}

        echo  the number of fibres = {number_of_fibres}
        echo  the number of FF fibres = {number_FF_fibres}
        echo  the number of intracolumn FB fibres = {number_FBintra_fibres}
        echo  the number of intercolumn FB fibres = {number_FBinter_fibres}

// Make subpopulations *****

	echo Making {pathname} and subpopulations

	if(!{exists {pathname}}) 
          create neutral {pathname}
	create neutral {pathname}/FF
	create neutral {pathname}/FBintra
	create neutral {pathname}/FBinter
	echo The fibres
	createmap /library/fibre {pathname}/FF \
             {number_FF_fibres} 1 -delta 0 0 -origin 0 0 
	createmap /library/fibre {pathname}/FBintra \
             {number_FBintra_fibres} 1 -delta 0 0 -origin 0 0 
	createmap /library/fibre {pathname}/FBinter \
             {number_FBinter_fibres} 1 -delta 0 0 -origin 0 0 

	echo The diffamps
	createmap /library/diffamp {pathname}/FF \
             {number_FF_fibres} 1 -delta 0 0 -origin 0 0 
	createmap /library/diffamp {pathname}/FBintra \
             {number_FBintra_fibres} 1 -delta 0 0 -origin 0 0 
	createmap /library/diffamp {pathname}/FBinter \
             {number_FBinter_fibres} 1 -delta 0 0 -origin 0 0 

// works only for randomspike2; not sure this exists in Genesis2.3
//   setfield {pathname}/E_fibre[] seed1 0 -increment 9 100
//   setfield {pathname}/E_fibre[] seed2 0 -increment 9e-2 100

// Position fibres at corresponding L5P compartments *****

	echo Calculating positions of {pathname} 

	str subpath
	ce {pathname}
	index = 0
//	foreach name ({el /L5P/p#[][TYPE=compartment]})
	foreach name ({el {template}#[][TYPE=compartment]})
//   echo {name}
	if ({{index % 3} == 0})
           subpath = "FF/fibre"
      	elif ({{index % 3} == 1})
             subpath = "FBintra/fibre"
      	else subpath = "FBinter/fibre"
	setfield {subpath}[{index / 3}] \
                x {getfield {name} x} \
                y {getfield {name} y} \
                z {getfield {name} z} 

//        echo {name} {index}  {subpath} {index / 3}  // OK works
        index = {index + 1}
//        echo index = {index}   // OK 2058 dendritic compartments

// Connect diffamps to fibres *****

	echo Sending RATE msgs from diffmaps to fibres 

	for (index = 0; index < {number_FF_fibres}; index = {index} + 1)
	setfield	FF/diffamp[{index}]           	x {getfield FF/fibre[{index}] x} \
	                                             	y {getfield FF/fibre[{index}] y} \
	                                             	z {getfield FF/fibre[{index}] z}
	addmsg		FF/diffamp[{index}]    		FF/fibre[{index}]         RATE    output
	for (index = 0; index < {number_FBintra_fibres}; index = {index} + 1)
	setfield 	FBintra/diffamp[{index}]    	x {getfield FBintra/fibre[{index}] x} \
	                                                y {getfield FBintra/fibre[{index}] y} \
	                                                z {getfield FBintra/fibre[{index}] z}
      	addmsg		FBintra/diffamp[{index}]  	FBintra/fibre[{index}]    RATE    output
	for (index = 0; index < {number_FBinter_fibres}; index = {index} + 1)
	setfield 	FBinter/diffamp[{index}]   	x {getfield FBinter/fibre[{index}] x} \
	                                                y {getfield FBinter/fibre[{index}] y} \
	                                                z {getfield FBinter/fibre[{index}] z}
	addmsg 		FBinter/diffamp[{index}]	FBinter/fibre[{index}]    RATE    output

Loading data, please wait...