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]
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
                            

obfunc distSynsCluster2() { local totalSyns localobj temprList1, rList1, synList, tempSynList, lengthList1, cumLList1, sref, centerList, 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
centerList = new List()
synList = new List()
print "We now have ", synList.count(), " synapses total"
   seed = 8
   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
rList1 = new Vector(numClust)
	
for i=0,lengthList.size()-1{
    cumLList.x[i]=lengthList.sum(0,i)
}

	seed = 3878

	randomNum = new Random(seed)
	rN = randomNum.uniform(0,totalL)
	//randomNum.ACG(seed+88)
	
print numClust
for r=1,numClust{
	print ""
	print ""
	print "=======Cluster", r, "======="
	
	// FIND CENTER OF CLUSTER
	randomNum.ACG(r+seed+83288)
	rN = randomNum.uniform(0,totalL)
	print "random number chosen is ", rN
	rList1.x[r-1] = rN
	temprList1 = new Vector()
	temprList1.copy(rList1)
	temprList1.sub(rN).abs()
	print "Chosen numbers so far ", rList1.printf()
	while(temprList1.indwhere("<",75)!=(r-1)){
		print "Random number chosen is too close to another cluster, try again"
		rN = randomNum.uniform(0,totalL)
		print "New random number is ", rN
		rList1.x[r-1] = rN
		temprList1 = new Vector()
		temprList1.copy(rList1)
		temprList1.sub(rN).abs()
	}

	
	//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
	 print "dendrite number ", dummy
	  	 where = (cumLList.x[centerSecInd]-rN)/L	
	  	 tobj = new AlphaSynapse(where)
	  	 centerList.append(tobj)
	  	 distance(0,where)
	  	t1List = new SectionList()
	  	 t1List.append()
	  	 //t1List.printnames()
	  	 theLength = L
	  	 
	  	print "the length of this dendrite is ", theLength, " and we need at least", lClust
	  	 
	  	while(theLength<lClust){ //while length<lClust add on children and parents
	  	 	forsec t1List{ 
	  	 		t1List.children()
	  	 		sref = new SectionRef()
	  	 		sref.parent {t1List.append()}
	  	 		}
	  	 	t1List.unique()
	  	 	theLength = 0
	  	 	forsec t1List{ theLength += L }
	  	 } //while length<lClust add on children and parents

		print "We are adding synapses along these sections: ", t1List.printnames()

	  	 tempSynList = distSynsUniform(1000,t1List,$3,$4)
	  	 print "We are now choosing from ", tempSynList.count(), " synapses"
	  	 
	  	 k=0
	  	 numAdded=0
	  	 while (k<tempSynList.count()&&numAdded<synsPerClust){
	  	 	localLoc = centerList.o(r-1).get_loc()
	  	 	distance(0,localLoc)
	  	 	pop_section()
	 		localLoc = tempSynList.o(k).get_loc()
	 		localLoc = distance(localLoc)
	 		pop_section()
	 		if (localLoc<lClust){
	 		print "we are now adding a synapse with distance: ", localLoc
	  	 	synList.append(tempSynList.o(k))
	  	 	numAdded +=1
	  	 	}
	  	 	k+=1
	  	 } 
	  	 print "We now have ", synList.count(), " synapses total"
	  	 print ""
	  	 
	  	 
	  	 
	  	 
	  	 
	  	 
	  	 
	  	 
	  	 
	  	 

	 }

	dummy = dummy+1
	}
	 





}




for i=0,synList.count()-1{
	synList.object(i).gmax = $3
	synList.object(i).ntar = $4
	synList.object(i).del = 50
	synList.object(i).Tspike = 20
	synList.object(i).Nspike = 1
}
	print "rList1 is "
	rList1.printf()

	return synList

} //end procedure


Loading data, please wait...