Layer 5 Pyramidal Neuron (Shai et al., 2015)

 Download zip file   Auto-launch 
Help downloading and running models
Accession:180373
This work contains a NEURON model for a layer 5 pyramidal neuron (based on Hay et al., 2011) with distributed groups of synapses across the basal and tuft dendrites. The results of that simulation are used to fit a phenomenological model, which is also included in this file.
Reference:
1 . Shai AS, Anastassiou CA, Larkum ME, Koch C (2015) Physiology of layer 5 pyramidal neurons in mouse primary visual cortex: coincidence detection through bursting. PLoS Comput Biol 11:e1004090 [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): Neocortex L5/6 pyramidal GLU cell;
Channel(s):
Gap Junctions:
Receptor(s):
Gene(s):
Transmitter(s): Glutamate;
Simulation Environment: NEURON; MATLAB;
Model Concept(s): Dendritic Action Potentials; Active Dendrites;
Implementer(s):
Search NeuronDB for information about:  Neocortex L5/6 pyramidal GLU cell; Glutamate;
/
ShaiEtAl2015
simulationcode
Ca_HVA.mod *
Ca_LVAst.mod *
CaDynamics_E2.mod *
epsp.mod *
glutamate.mod *
Ih.mod *
Im.mod *
K_Pst.mod *
K_Tst.mod *
Nap_Et2.mod *
NaTa_t.mod *
NaTs2_t.mod *
SK_E2.mod *
SKv3_1.mod *
AccessoryFunctions.hoc
DefineSections.hoc
distSynsCluster.hoc
distSynsCluster2.hoc
distSynsUniform.hoc
distSynsUniform2.hoc
distSynsUniformAlpha.hoc
Fig3A.hoc
neuron203.os
O_vd_C.dat
O_vs_C.dat
Run.hoc
varycolor.m
                            
objref synList

obfunc distSynsCluster() { local totalSyns localobj lengthList1, cumLList1, sref, t1List, lengthList, cumLList, tobj, toAdd, randomNum, randomNum2, r2, randomVec, distList
	// INPUTS
	// numClust = $1 //number of clusters
	// section list for synapses to be distributed over= $2
	// gmax = $3, this is the max conductance of the nmda current
	// ntar = $4, this defines the conductance of the ampa current
	//            with ampa current = gmax/ntar
	// synsPerClust =$5 //number of synapses per cluster
	// lClust = $6 //length of cluster

   seed = 1
   lengthList = new Vector(0) // a vector of branch lengths in order
   numClust = $1 //numClust	 
   synsPerClust =$5 //number of synapses per cluster
   lClust = $6 //length of cluster

   totalL = 0
   forsec $o2 {
       totalL += L
       lengthList.append(L)
    }

cumLList = new Vector(lengthList.size()) // a vector of the cummulative 
											// branch length, in order
	
for i=0,lengthList.size()-1{
    cumLList.x[i]=lengthList.sum(0,i)
}

synList = new List()
	randomNum = new Random()
	rN = randomNum.uniform(0,totalL)
	randomNum.ACG(246)
	

for i=1,numClust{

	// FIND CENTER OF CLUSTER
	rN = randomNum.uniform(0,totalL)
	//find first index which has length greater than chosen random number

	centerSecInd = cumLList.indwhere(">",rN)

	
	dummy = 0
	forsec $o2{
	
	 if(dummy==centerSecInd){ //if we are in the section with the cluster center
	  	 {where = (cumLList.x[centerSecInd]-rN)/L	
	  	 distance(0,where)
	  	 
	  	t1List = new SectionList()
	  	 t1List.append()
	  	 theLength = L}
	  	 
	  	 
	  	 
	  	 while(theLength<lClust){ //while length<lClust add on children and parents
	  	 	forsec t1List{ t1List.children() }
	  	 	t1List.unique()
	  	 	theLength = 0
	  	 	forsec t1List{ theLength += L }
	  	 } //while length<lClust add on children and parents
	  	 
	  	 
	  	 
	  	 {
	  	 
  
  			 lengthList1 = new Vector(0) // a vector of branch lengths in order
			 totalL1 = 0
   			 forsec t1List {
       			totalL1 += L
       			lengthList1.append(L)
    		  }

			  cumLList1 = new Vector(lengthList1.size()) // a vector of the cummulative 
											// branch length, in order
	
			  for i=0,lengthList1.size()-1{ cumLList1.x[i]=lengthList1.sum(0,i) }
	  	 		
	  	 		numAdded = 0
	  	 		while(numAdded<synsPerClust){
	  	 			
	  	 				randomNum2 = new Random()
						rN2 = randomNum.uniform(0,totalL1)
						randomNum2.ACG(246)
						
						newInd = cumLList1.indwhere(">",rN2)

	
					dummy2 = 0
					forsec t1List{
	 					if(dummy==centerSecInd){ 
	 						where2 = (cumLList1.x[newInd]-rN2)/L
	 						
	 					    len2 = distance(1,where2)
	 					    print len2
	 					    
	 					    
	 					    
	 					    if(len2<lClust){
	 					    	numAdded+=1
	 					    	tobj = new glutamate(where2)
	 					    	synList.append(tobj)
	 						}
						}
					}
						
	  	 			
	  	 		
	  	 		}
	  	 
	  	 
	  	 
	  	 
	  	 
	  	 
	  	 
	  	 
	  	 
	  	 
	  	 
	  	 
	  	 
	  	 
	  	 
	  	 }
	  	 
	  	 
	  	 
	  	 
	  	 
	  	 
	  	 
	  	 
	  	 
	  	 
	  	 
	  	 
	  	 
	  	 
	  	 
	  	 
	  	 

	 }

	dummy = dummy+1
	}
	 





}




for i=0,synList.count()-1{
	synList.object(i).gmax = $3
	synList.object(i).ntar = $4
	synList.object(i).del = 500
	synList.object(i).Tspike = 20
	synList.object(i).Nspike = 1
}


	return synList

} //end procedure