Firing neocortical layer V pyramidal neuron (Reetz et al. 2014; Stadler et al. 2014)

 Download zip file 
Help downloading and running models
Accession:168148
Neocortical Layer V model with firing behaviour adjusted to in vitro observations. The model was used to investigate the effects of IFN and PKC on the excitability of neurons (Stadler et al 2014, Reetz et al. 2014). The model contains new channel simulations for HCN1, HCN2 and the big calcium dependent potassium channel BK.
References:
1 . Stadler K, Bierwirth C, Stoenica L, Battefeld A, Reetz O, Mix E, Schuchmann S, Velmans T, Rosenberger K, Bräuer AU, Lehnardt S, Nitsch R, Budt M, Wolff T, Kole MH, Strauss U (2014) Elevation in type I interferons inhibits HCN1 and slows cortical neuronal oscillations. Cereb Cortex 24:199-210 [PubMed]
2 . Reetz O, Stadler K, Strauss U (2014) Protein kinase C activation mediates interferon-ß-induced neuronal excitability changes in neocortical pyramidal neurons. J Neuroinflammation 11:185 [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: Neocortex;
Cell Type(s): Neocortex L5/6 pyramidal GLU cell;
Channel(s): I Na,p; I Na,t; I L high threshold; I A; I K; I M; I h; I K,Ca; I Sodium; I Calcium; I Mixed; I Potassium; I Q;
Gap Junctions:
Receptor(s):
Gene(s): HCN1; HCN2;
Transmitter(s):
Simulation Environment: NEURON;
Model Concept(s): Activity Patterns; Detailed Neuronal Models; Action Potentials; Signaling pathways;
Implementer(s): Stadler, Konstantin [konstantin.stadler at ntnu.no];
Search NeuronDB for information about:  Neocortex L5/6 pyramidal GLU cell; I Na,p; I Na,t; I L high threshold; I A; I K; I M; I h; I K,Ca; I Sodium; I Calcium; I Mixed; I Potassium; I Q;
/
stadler2014_layerV
sub
OwnInit.hoc
ReducExp.hoc
util.hoc
                            
//######################################
//  						    
//  util.hoc
//  -------------
//
// Several function to work with LayerVrun                      
//  							
//  Author: Konstantin Stadler
//  Version: 20131108
//  							
//######################################
// 
/*******************************************************************
 **             implemented functions and procedures              **
*******************************************************************/
/*
 	start() PROC
        opens most used windows to visualize the model run
        inits a pointprocessmanager on the default section
        optional parameter: Tstop

    CCIV()
        runs a cciv on the default section
        parameter: CCIV(time_start, time_step, current_start, number_steps, step_size, save)
        save ... 0 for don't save, otherwise yes

    CCIVstand()
        starts the CCIV() with standard parameter:
            50ms start time without input current
            1000ms stps from -0.3 to 0.7 nA with 50 pA step size
            Result are saved in CCIVprot.txt and CCIV_AP.txt 
*/


/*******************************************************************
 **             General objectref and global variables            **
*******************************************************************/

//general

	objectvar StartDefaultSection	//pointer to the access section at start
	StartDefaultSection = new SectionRef()

//start
	
	objectvar save_window_, ocbox_
	objectvar scene_vector_[7]

//record time

	objectvar Time
	Time = new Vector()
	Time.record(&t)			//saves the time of the current simulation

//record execution time
	objref ParaCont
	ParaCont      = new ParallelContext()
	CalcTimeStart = 0
	CalcTimeEnd   = 0
//CCIV

 	objref IStim, AktPotCount   //pointmechnismen
  	objref IGraph, APGraph	  //graphs
  	objref ErgList, APVec, RecGes, SaveMatrix, ErgFile  //lists,files and matrices to save data
  	strdef SaveFile, SaveFile_AP  //SaveFile 's for the data, _AP for f/I

/*******************************************************************
 **             procedures                                        **
 *******************************************************************/

proc start() { 	//opens most used windows to visualize the model run
	
	ExpTime = 2000 		// duration of experiment in ms if not given as parameter
    dt = 0.025 

	if (numarg()>0)	{
		  ExpTime=$1
		}
    if (numarg()>1)	{
        dt=$2
    }
	//init PointProcessManager
    
		{
		load_file("pointman.hoc")
		}
				
		{
		StartDefaultSection ocbox_ = new PointProcessManager(0)
		}
		{
		ocbox_ = ocbox_.v1
		ocbox_.map("PointProcessManager", 300, 654, 222.3, 371.7)
		}
		objref ocbox_
	//end init PointProcessManager

	//RunControl
			
		xpanel("RunControl", 0)
		v_init = -78
		xvalue("Init","v_init", 1,"stdinit()", 1, 1 )
		xbutton("Init & Run","run()")
		xbutton("Stop","stoprun=1")
		runStopAt = 5
		xvalue("Continue til","runStopAt", 1,"{continuerun(runStopAt) stoprun=1}", 1, 1 )
		runStopIn = 1
		xvalue("Continue for","runStopIn", 1,"{continuerun(t + runStopIn) stoprun=1}", 1, 1 )
		xbutton("Single Step","steprun()")
		t = 0
		xvalue("t","t", 2 )
		tstop = ExpTime
		xvalue("Tstop","tstop", 1,"tstop_changed()", 0, 1 )
		xvalue("dt","dt", 1,"setdt()", 0, 1 )
		steps_per_ms = 1/dt
		xvalue("Points plotted/ms","steps_per_ms", 1,"setdt()", 0, 1 )
		screen_update_invl = 0.05
		xvalue("Scrn update invl","screen_update_invl", 1,"", 0, 1 )
		realtime = 0
		xvalue("Real Time","realtime", 0,"", 0, 1 )
		xpanel(1,654)
	//end Runcontrol
	
	//misc windows and graphs
		{
		save_window_ = new Graph(0)
		save_window_.size(0,4200,-100,20)
		scene_vector_[3] = save_window_
		{save_window_.view(0, -100, ExpTime, 120, 819, 0, 602, 172)}
		graphList[0].append(save_window_)
		save_window_.save_name("graphList[0].")
		save_window_.addexpr("v(.5)", 1, 1, 0.8, 0.9, 2)
        save_window_.label(0.1, 0.9, "Voltage at soma", 2, 1, 0, 0, 1)
		}

		{
		save_window_ = new Graph(0)
		save_window_.size(0,4200,-100,20)
		scene_vector_[4] = save_window_
		{save_window_.view(0, -100, ExpTime, 120, 819, 310, 602, 172)}
		graphList[0].append(save_window_)
		save_window_.save_name("graphList[0].")
		save_window_.addexpr("dend1[184].v(0.5)", 1, 1, 0.8, 0.9, 2) //dendrite 600 um from soma
		save_window_.addexpr("dend1[669].v(0.5)", 1, 1, 0.8, 0.9, 2) //dendrite 1000um from soma
        save_window_.label(0.1, 0.9, "Voltage at dendrites 600um and 1000um from soma", 2, 1, 0, 0, 1)
		}
 
  		{
  		save_window_ = new PlotShape(0)
  		save_window_.size(-620.785,410.235,-148.192,925.442)
  		save_window_.variable("v")
        /*save_window_.exec_menu("Shape Plot")*/
  		scene_vector_[5] = save_window_
  		{save_window_.view(-620.785, -148.192, 1031.02, 1073.63, 817, 617, 372.6, 388)}
  		fast_flush_list.append(save_window_)
        scene_vector_[5].exec_menu("Shape Plot")
  		}
  		
	//end misc windows

}

func CCIV() { local tStart, tStep, IStartStep, Steps, Stepsize localobj Prot
    // Simulation of a CCIV with IClamp on the access section with AP plot
    // parameters:
    //  Required:
    //		 TimeStart, TimeStep, IStartStep,
    //		 Steps, Stepsize, Save(0...no, else yes)
    //  Optional:
    //		 SaveFile, SaveFile_AP
    //
    // returns:
    //  -99 in case of errors
    //  1 otherwise
      	
      	CalcTimeStart = ParaCont.time()
      	
      	if (numarg()<6) {
            print "Wrong parameter..."
            print "Required:"
    		print "TimeStart, TimeStep, IStartStep,"
    		print "Steps, Stepsize, Save(0...no, else yes)"
            print "Optional:"
    		print "SaveFile, SaveFile_AP"
    		return -99
    	}
    
    	if (numarg()>6) {
  				SaveFile = $s7
  	} else {
  				SaveFile = "CCIVprot.txt"	
  	}
  	  	
  	if (numarg()==8) {
  				SaveFile_AP = $s8
  	} else {
  				SaveFile_AP = "CCIV_AP.txt"	
  	}
  	
  	    
    	tStart= $1
    	tStep = $2
    	IStartStep = $3
    	Steps = $4
    	Stepsize = $5
    	
    	if (tStart<0 || tStep<=0 || Steps <0 ) {
    		print "Wrong parameter: times and steps must be positive"
    		return -99
    	}
     
     	if ( (tStart+tStep) > tstop ) {
     		print "experiment time shorter than pulse"
     		return -99
     	}
      	
     	IStim = new IClamp(.5)
     	AktPotCount = new APCount(.5)

        RecGes = new Vector()
        ErgList = new List()

        APVec = new Vector(Steps+1)
        Prot = new Vector(Steps+1)  //Saves the currents for the APGraph

        IStim.del = tStart   //start with I=0
        IStim.dur = tStep    //duration of the step

        Min=0
        Max=0		//saves max and min for visualization
     	
     	print "CCIV calculation..."
     	
     	for i=0, Steps {
     	
     		IStim.amp = IStartStep + i*Stepsize
     		
     		print "\nStep ", i, "of ", Steps
     		print "Input current: ", IStim.amp, " nA"
 		
    		RecGes.record(&v(.5)) //voltage on the access section
 		
    		run()
 		
    		ErgList.append(RecGes.c)  //Copy of the result vector
    		APVec.x[i] = AktPotCount.n()
    		Prot.x[i] = IStim.amp
 		
    		if (RecGes.min() < Min) Min = RecGes.min()
    		if (RecGes.max() > Max) Max = RecGes.max()
      	}
  	
  	print "\nCalculation finished, visualization:"
  
  	IGraph = new Graph(0)		

 	IGraph.view(0, Min, tstop, (Max-Min), 720, 720, 500, 150)  
  		// draws it on the screen (Axenskalierung: (Start, ymin, Ende, ymax=ymin+value)
  		// in a window with user-specified location (5th and 6th args)
  		// and size (last 2 args) 
 
 	for i=0, ErgList.count()-1 {
 
 	ErgList.o(i).plot(IGraph, Time)
 		//Time vector as specified in general objectref at the beginning of that .hoc 
    	
    	IGraph.label(0.8, 0.8, "Voltage", 2, 1, 0, 0, 1)

 	}
 	
 	APGraph = new Graph(0)		//Plot of the FI curve
 	APGraph.view(IStartStep,0,abs(IStartStep)+i*Stepsize,APVec.max(),10,350,200,200)
 	APVec.plot(APGraph, Prot)
 	APGraph.label(0.8, 0.8, "F/I", 2, 1, 0, 0, 1)
 	 	
 	if ($6!=0) {		//6. parameter determines of the data will be saved
		
		print "Save..."
	
		SaveMatrix = new Matrix()
		
		SaveMatrix.resize(Time.size(),ErgList.count()+1) 
     		SaveMatrix.setcol(0,Time)
       
     		for i=0, ErgList.count()-1 SaveMatrix.setcol(1+i, ErgList.o(i))
    	     
	   //save to file
				
		ErgFile = new File()
		ErgFile.wopen(SaveFile)
		SaveMatrix.fprint(ErgFile, "%-e ")
              	ErgFile.close()		
		
		ErgFile = new File()
		ErgFile.wopen(SaveFile_AP)
		APVec.printf(ErgFile)
		ErgFile.close()
				
		print "**Saved**"
	}
	
	IStim.del = 1e9	    //wait 'eternally' for the next CCIV
 	
 	CalcTimeEnd = ParaCont.time()
 	print "\nCCIV protocol finished"
	print " Duration: ", CalcTimeEnd - CalcTimeStart," s" 
	return 1
}
  
proc CCIVstand() {	//CCIV with standard parameters
                    //50 ms init, 1000 ms step, starts at -300 pA, 20 steps a 50 pA
                    //Result are saved in CCIVprot.txt and CCIV_AP.txt
  	
  	SaveFile = "CCIVprot.txt"
  	SaveFile_AP = "CCIV_AP.txt"
  	if (numarg() > 0) SaveFile=$s1
  	if (numarg() > 1) SaveFile_AP=$s2
  	print SaveFile, SaveFile_AP
  	CCIV(50, 1000, -0.3, 20, 0.05, 1, SaveFile, SaveFile_AP)
}




Loading data, please wait...