GC model (Beining et al 2017)

 Download zip file   Auto-launch 
Help downloading and running models
Accession:231818
A companion modeldb entry (NEURON only) to modeldb accession number 231862.
Reference:
1 . Beining M, Mongiat LA, Schwarzacher SW, Cuntz H, Jedlicka P (2017) T2N as a new tool for robust electrophysiological modeling demonstrated for mature and adult-born dentate granule cells eLife
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: Dentate gyrus;
Cell Type(s): Dentate gyrus granule GLU cell;
Channel(s): I A; I Calcium; I h; I K; I K,Ca; I K,leak; I Na,t; I M; Kir2 leak;
Gap Junctions:
Receptor(s):
Gene(s): Cav1.2 CACNA1C; Cav1.3 CACNA1D; Cav2.2 CACNA1B; Cav3.2 CACNA1H; HCN1; Nav1.2 SCN2A; Nav1.6 SCN8A; Kir2.1 KCNJ2; Kv1.1 KCNA1; Kv1.4 KCNA4; Kv2.1 KCNB1; Kv3.3 KCNC3; Kv3.4 KCNC4; Kv4.2 KCND2; KCa1.1 KCNMA1; KCa2.2 KCNN2;
Transmitter(s):
Simulation Environment: NEURON;
Model Concept(s): Methods; Neurogenesis; Conductance distributions;
Implementer(s): Beining, Marcel [beining at fias.uni-frankfurt.de];
Search NeuronDB for information about:  Dentate gyrus granule GLU cell; I Na,t; I A; I K; I K,leak; I M; I h; I K,Ca; I Calcium; Kir2 leak;
/
BeiningEtAl2017nrn
lib_genroutines
fixnseg.hoc
genroutines.hoc
pasroutines.hoc
                            
/* Sets nseg in each section to an odd value
   so that its segments are no longer than 
     d_lambda x the AC length constant
   at frequency freq in that section.

   Be sure to specify your own maxRa and maxcm before calling geom_nseg()

   To understand why this works, 
   and the advantages of using an odd value for nseg,
   see  Hines, M.L. and Carnevale, N.T.
        NEURON: a tool for neuroscientists.
        The Neuroscientist 7:123-135, 2001.
*/

// these are reasonable values for most models
freq = 300 //original:100     // Hz, frequency at which AC length constant will be computed
d_lambda = 0.1 //original:0.1
//objref nsegvec
//nsegvec = new Vector(2)
	
func lambda_f() { local i, x1, x2, d1, d2, lam
        if (n3d() < 2) {
                return 1e5*sqrt(diam/(4*PI*$1*Ra*cm))
        }
// above was too inaccurate with large variation in 3d diameter
// so now we use all 3-d points to get a better approximate lambda
        x1 = arc3d(0)
        d1 = diam3d(0)
        lam = 0
        for i=1, n3d()-1 {
                x2 = arc3d(i)
                d2 = diam3d(i)
                lam += (x2 - x1)/sqrt(d1 + d2)
                x1 = x2   d1 = d2
				
        }
		//print "lam, L = ", lam, L
        //  length of the section in units of lambda
        lam *= sqrt(2) * 1e-5*sqrt(4*PI*$1*Ra*cm)
	//print CELLINDEX, "$1, Ra, cm", $1, Ra, cm
	//print CELLINDEX, "$1*Ra*cm", $1*Ra*cm
	//print secname(), "lam, L = ", lam, L
	if(!lam){
		return 1
        }else {return L/lam}
}

proc geom_nseg_shared() {
	area(0.5) // make sure diam reflects 3d points

		forsec cellList.o[CELLINDEX].allreg { 
		/*
			if (maxRa.x(CELLINDEX) == 0 || maxcm.x(CELLINDEX) == 0) {
				thisRa = Ra
				thiscm = cm
			} else {
				thisRa = maxRa.x(CELLINDEX)
				thiscm = maxcm.x(CELLINDEX)
			}
			*/
			//nsegvec.x(0) = n3d()
			//nsegvec.x(1) = 
			//print "L = ", L
			//if (1) printf("lambda=%g\n",lambda_f(freq))
			nseg = int((int(L+0.5)/(d_lambda*lambda_f(freq))+0.9)/2)*2 + 1 //nsegvec.min()
			//print CELLINDEX, nseg, L, d_lambda, freq, lambda_f(freq)
			//print "nseg = ", nseg,"    ", secname()," L=   ",L,"  Ra = ",Ra,"  cm =  ",cm
		}
}

proc geom_nseg() {
	geom_nseg_shared()
	// increase nseg even further (tribute to Josef):
	if (accuracy == 2) {
		forsec cellList.o[CELLINDEX].allreg nseg*=3
	}
	if (accuracy == 1) {
		forsec cellList.o[CELLINDEX].regsoma nseg*=3
		forsec cellList.o[CELLINDEX].allaxonreg nseg*=3
	}
}

Loading data, please wait...