Mapping function onto neuronal morphology (Stiefel and Sejnowski 2007)

 Download zip file   Auto-launch 
Help downloading and running models
Accession:93398
"... We used an optimization procedure to find neuronal morphological structures for two computational tasks: First, neuronal morphologies were selected for linearly summing excitatory synaptic potentials (EPSPs); second, structures were selected that distinguished the temporal order of EPSPs. The solutions resembled the morphology of real neurons. In particular the neurons optimized for linear summation electrotonically separated their synapses, as found in avian nucleus laminaris neurons, and neurons optimized for spike-order detection had primary dendrites of significantly different diameter, as found in the basal and apical dendrites of cortical pyramidal neurons. ..."
Reference:
1 . Stiefel KM, Sejnowski TJ (2007) Mapping function onto neuronal morphology. J Neurophysiol 98:513-26 [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):
Channel(s):
Gap Junctions:
Receptor(s):
Gene(s):
Transmitter(s):
Simulation Environment: NEURON;
Model Concept(s): Influence of Dendritic Geometry; Methods; Unsupervised Learning;
Implementer(s): Stiefel, Klaus [stiefel at salk.edu];
objref left[cellnr], right[cellnr], both[cellnr], score

// score the cells
// SMALL score == good performance
// $1: population mean dendritic tree size 0, $2 cell nr 
proc scoreme() { local linearity, equalsize, dsize
		if (left.x[$2] > 0.2 && right.x[$2] > 0.2 && both.x[$2] > 0.2) {
			linearity = abs(left.x[$2] + right.x[$2] - both.x[$2])/both.x[$2]	// judge linear sumation
			equalsize = left.x[$2]/right.x[$2] + right.x[$2]/left.x[$2] -2		// penalty for unequal EPSP sizes
			dsize = cell[$2].nall/$1						// penalty for large cells		
			score.x[$2] = linearity + wtequal*equalsize + wtsize*dsize - wtboth*log(both.x[$2])		
		} else { score.x[$2] = 99 }							// EPSP < .2 mV -> very bad score	
}

// $1: population mean dendritic tree size 0 $2: start 1 $3: start 2 $4: run type
proc linearrun() { local ce
	
	stimulator[0].start = $2
	stimulator[1].start = $3	
	init()
	dt = 0.025
	run()
	 
	if ($4 == 0) {	for ce = 0, cellnr-1 { left.x[ce] = cell[ce].voltage.max() - cell[ce].voltage.x[0] } }
	if ($4 == 1) {	for ce = 0, cellnr-1 { right.x[ce] = cell[ce].voltage.max() - cell[ce].voltage.x[0] } } 
	if ($4 == 2) {	for ce = 0, cellnr-1 { both.x[ce] = cell[ce].voltage.max() - cell[ce].voltage.x[0] }
			for ce = 0, cellnr-1 { scoreme($1, ce) } 		
			}
}

// $1: mean size 
proc lineartest() {
	
	left = new Vector(cellnr)
	right = new Vector(cellnr)
	both = new Vector(cellnr)
		
	// run electrophys. simulations 
	v_init = -70
	tstop = 50
	
	linearrun($1, 5, 9999, 0)
	linearrun($1, 9999, 5, 1)
	linearrun($1, 5, 5, 2)
}

Loading data, please wait...