Dentate gyrus granule cell: subthreshold signal processing (Schmidt-Hieber et al. 2007)

 Download zip file   Auto-launch 
Help downloading and running models
Detailed compartmental cable models of 8 hippocampal granule cells of adult mice were obtained from dual patch-clamp whole-cell recordings and subsequent 3D reconstructions. This code allows to reproduce figures 6-8 from the paper.
1 . Schmidt-Hieber C, Jonas P, Bischofberger J (2007) Subthreshold dendritic signal processing and coincidence detection in dentate gyrus granule cells. J Neurosci 27:8430-41 [PubMed]
Citations  Citation Browser
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): Dentate gyrus granule GLU cell;
Gap Junctions:
Receptor(s): AMPA; Glutamate;
Transmitter(s): Glutamate;
Simulation Environment: NEURON;
Model Concept(s): Parameter Fitting; Influence of Dendritic Geometry; Synaptic Integration;
Implementer(s): Schmidt-Hieber, Christoph [ at];
Search NeuronDB for information about:  Dentate gyrus granule GLU cell; AMPA; Glutamate; Glutamate;
// ----------------------------------------------------------------------------
// calcSpines.hoc
// Calculate the spine factor from raw spine counts.
// The spine factor is calculated as follows:
// SF=(A_shaft+A_spines)/A_shaft,
// where A_shaft is the surface area of the shaft and
// A_spines is the surface area of the spines
// 2007-06-15, Christoph Schmidt-Hieber, University of Freiburg
// accompanies the publication:
// Schmidt-Hieber C, Jonas P, Bischofberger J (2007)
// Subthreshold Dendritic Signal Processing and Coincidence Detection 
// in Dentate Gyrus Granule Cells. J Neurosci 27:8430-8441
// send bug reports and suggestions to
// ----------------------------------------------------------------------------


proc calc_spines() {local aveDiam,radius,spineLength,alpha,corrF,n_points,R,r,side,A_shaft,A_spines,n_n,neuronArea,count,n_spines
	n_spines = 0
	if (count_spines != 0) {
		aveDiam = 0.0
		count = 0
		for (n_n) {
			aveDiam += diam(n_n)
			count += 1
		aveDiam /= count
		radius = aveDiam/2.0
		spineLength = 1.25
		alpha = my_asin_asin(radius/(radius+spineLength))
		corrF = pi/(pi-2.0*alpha)
		if (debug_mode) printf("\nCorrection factor for hidden spines in section %s: %f\n",secname(),corrF)
		count_spines *= corrF
		if (debug_mode) n_spines += count_spines
	if (debug_mode) printf("Spine density in section %s=%f/um\n",secname(),count_spines/L)
	// get the total area of the spines:
	// get the area of the shaft:
	for (n_points=0;n_points<n3d()-1;n_points+=1) {
	// get the surface area of a truncated cone
	// between neighbouring points:
		side = sqrt((R-r)*(R-r)+height*height)
	// tell the user what we did:
	if (debug_mode) {
		for (n_n) {
		printf("I think the surface area of %s's shaft is %f um^2\n",secname(),A_shaft)
		printf("NEURON thinks it's %f um^2\n",neuronArea)
		printf("spineFactor (%s)=%f\n",secname(),scale_spines)
		print "corrected number of spines:",n_spines

func numRealSpines() {local A_spines,A_shaft,x,num_spines
	// get n_spines from scale_spines:
	num_spines = 0.0
	forsec "section" {
		A_shaft = 0.0
		for (x) A_shaft += area(x)
		A_spines  = A_shaft * (scale_spines-1.0)
		num_spines += (A_spines / spineArea)
	return num_spines