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
                            
proc init() {
	realtime = 0

	dtsav = dt						// Save desired dt value to reset after temporarily changing dt
	steps_per_ms_sav = 1 / dt
	secondordersav = secondorder	// Save desired secondorder value to reset after temporarily changing secondorder

	finitialize(v_init)	// Call finitialize (since we are replacing the default init proc that calls this)
						// finitialize will Call the INITIAL block for all mechanisms and point processes inserted in the sections
						//	and set the initial voltage to v_init for all sections

	if (prerun>0) {
		t = - prerun -100			// Set the start time for (pre) simulation; -500 to prepare network in advance of start at 0
		dt= 10				// Set dt to large value
		secondorder = 0		// Set secondorder to 0 to set the default fully implicit backward euler for numerical integration (see NEURON ref)
		
		temp= cvode.active()
		if (temp!=0) {cvode.active(0)}	// If cvode is on, turn off temporarily to do large fixed step
		
		// Now, do a large pre run to set the network 'settle' and all components to reach steady state
		while(t<-10) { fadvance() 
		}
		
		if (temp!=0) {cvode.active(1)}	// If cvode was on and then turned off, turn it back on now
		steps_per_ms = steps_per_ms_sav
		dt = dtsav						// Reset dt to specified value
		
		t = tstart-dt						// Start time of the simulation (-dt to account for recording vectors at time 0)
		frecord_init()				// places the correct values into the recording vectors
		secondorder = secondordersav	// Reset secondorder to specified value
		
		if (cvode.active()){
			cvode.re_init()				// If cvode is active, initialize the integrator
		} else {
			fcurrent()					// If cvode is not active, make all assigned variables (currents, conductances, etc) consistent with the values of the states
		}
	}
}

proc run() {
	running_ = 1
	continuerun(tstop)
}


proc totalarea() { local sum
  finitialize()
  sum = 0
//  forall for (x,0) sum += area(x)
  forsec $o1.allreg for (x,0) sum += area(x)
  print "total surface area = ", sum, " um2"
}



proc set_range() {
	f = new File()
	io = f.ropen($s2)
	io = thissec.scanf(f)
	io = f.close()
	f = new File()
	io = f.ropen($s3)
	io = thisseg.scanf(f)
	io = f.close()
	f = new File()
	io = f.ropen($s4)
	io = thisval.scanf(f)
	
	io = f.close()
	if (thissec.size()==thisseg.size() && thissec.size() == thisval.size()) {
		for c = 0, thissec.size()-1 {
			io = sprint(tmpstr,"%s(thisseg.x(c)) = thisval.x(c)",$s5)
			cellList.o($1).allregobj.o(thissec.x(c)).sec     io = execute(tmpstr)
			//print $1, thissec.x(c), thisseg.x(c), thisval.x(c)
		}
		thissec.resize(0)
		thisseg.resize(0)
		thisval.resize(0)
	}else {execerror("Error, thisseg, thissec and thisval do not have same size! please check!!")}
}

/*
proc set_range() {local i
	f = new File()
	io = f.ropen($s2)
	io = thissec.scanf(f)
	io = f.close()
	f = new File()
	io = f.ropen($s3)
	io = thisseg.scanf(f)
	io = f.close()
	f = new File()
	io = f.ropen($s4)
	io = thisval.scanf(f)
	
	io = f.close()
	
	depp = thissec.size() / (numarg()-4) // depp = step...neuron didnt want that ^^
		for i = 5,numarg() {
			thisstart = (i-5) * depp
	
			for c = thisstart, thisstart+depp-1 {
				io = sprint(tmpstr,"%s(thisseg.x(c)) = thisval.x(c)",$si)
				cellList.o($1).allregobj.o(thissec.x(c)).sec     io = execute(tmpstr)
				//print numarg(),$1, $si, thissec.x(c), thisseg.x(c), thisval.x(c), thisstart+(i-4)*depp-1
			}
	}
	thissec.resize(0)
	thisseg.resize(0)
	thisval.resize(0)
}
*/

Loading data, please wait...