Fast Spiking Basket cells (Tzilivaki et al 2019)

 Download zip file   Auto-launch 
Help downloading and running models
Accession:237595
"Interneurons are critical for the proper functioning of neural circuits. While often morphologically complex, dendritic integration and its role in neuronal output have been ignored for decades, treating interneurons as linear point neurons. Exciting new findings suggest that interneuron dendrites support complex, nonlinear computations: sublinear integration of EPSPs in the cerebellum, coupled to supralinear calcium accumulations and supralinear voltage integration in the hippocampus. These findings challenge the point neuron dogma and call for a new theory of interneuron arithmetic. Using detailed, biophysically constrained models, we predict that dendrites of FS basket cells in both hippocampus and mPFC come in two flavors: supralinear, supporting local sodium spikes within large-volume branches and sublinear, in small-volume branches. Synaptic activation of varying sets of these dendrites leads to somatic firing variability that cannot be explained by the point neuron reduction. Instead, a 2-stage Artificial Neural Network (ANN), with both sub- and supralinear hidden nodes, captures most of the variance. We propose that FS basket cells have substantially expanded computational capabilities sub-served by their non-linear dendrites and act as a 2-layer ANN."
Reference:
1 . Tzilivaki A, Kastellakis G, Poirazi P (2019) Challenging the point neuron dogma: FS basket cells as 2-stage nonlinear integrators Nature Communications 10(1):3664 [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: Hippocampus; Prefrontal cortex (PFC);
Cell Type(s): Hippocampus CA3 interneuron basket GABA cell; Neocortex layer 5 interneuron;
Channel(s):
Gap Junctions:
Receptor(s):
Gene(s):
Transmitter(s):
Simulation Environment: NEURON; MATLAB; Python;
Model Concept(s): Active Dendrites; Detailed Neuronal Models;
Implementer(s): Tzilivaki, Alexandra [alexandra.tzilivaki at charite.de]; Kastellakis, George [gkastel at gmail.com];
Search NeuronDB for information about:  Hippocampus CA3 interneuron basket GABA cell;
/*  In Branch stimulation protocol
written by Alexandra Tzilivaki (alexandra.tzilivaki@imbb.forth.gr)*/





//Initialize NEURON
load_file("nrngui.hoc")  
v_init=-68        // Vrest
cvode.active(0)
     
//-----Objects for record data
objref cv
cv=new CVode(0)
tstop=1000//500 //Duration of the simulation
steps_per_ms=10
dt=1/steps_per_ms
n=int(tstop/dt)

objref all_msec
all_msec = new Vector(n,0)
for q=0,n-1 {all_msec.x[q]=q*dt}
  
xopen("tempSomogyi1.hoc") // template with mechanisms
objref FSdetailedtemplate
FSdetailedtemplate = new FScell("Somogyi_1.hoc") //moprhology reconstruction

xopen("../bash_templates/current_balance_fs.hoc")
current_balanceFS(-68)
xopen("../bash_templates/basic-graphics.hoc") 
addgraph("FSdetailedtemplate.soma.v(0.5)",-90,50)

//-----------------------------------------------------------------------------------------
ctrpr = 0
forsec FSdetailedtemplate.basal_prox {          //ctpr= basal prox
	ctrpr = ctrpr +1
}
ctrd= 0
forsec FSdetailedtemplate.basal_dist {  //ctrd= basal dist
	ctrd = ctrd +1
}
number_dends = ctrpr + ctrd
objref fsyndend
maxsyndend=60



//----------------------------------------------------------------------------------------------
// Uncomment this if you wish to set diameter of all dends equal to 2 microns!
/*for all=0,number_dends-1{
    access FSdetailedtemplate.dend[all]

    FSdetailedtemplate.dend[all].diam=2//1.2//FSdetailedtemplate.dend[dendrite].diam//*1.2
}*/



cluster_size =1 // max dendritic branch number. 1 cluster_size=1 dendrite receives 60 synapses. 2 cluster_size=2 dendrites receive 30 synapses and so on 
cluster_synapses=60//15//20//30//10 // total synapses per branch
objref branch, tmpbranch 
objref vecstim[cluster_synapses*cluster_size] 

mean=0.02 //50 Hz
objref rp
rp = new Random()
rp.poisson(mean)
//print"123"
objref stimvector[cluster_synapses*cluster_size]
for t=0,cluster_synapses*cluster_size-1{
	stimvector[t]= new Vector()
	for k=0,int(tstop)-1{
		if(rp.repick()){
			stimvector[t].append(k)
		}
	}
}
//----------------------------------record&save
objref vsoma, FSv, FSt, vdend

proc rec_soma_Voltage(){
	FSv=new Vector(n)
	FSt=new Vector(n) 
	for j=0,n-1 {FSt.x[j]=j*dt }
	FSdetailedtemplate.soma cv.record(&FSdetailedtemplate.soma.v(0.5),FSv,FSt,1)
}
strdef temp
proc save_soma_Voltage() { localobj vect
	
	vsoma = new File()		
	sprint(temp,"Cell_io/cluster/PFC/Jan19/PFC_67/all//clusteredall/clusteredall_1/Synapses_%d_seeddend_%d_seedpid.txt", $1, $2, $3)   
	vsoma.wopen(temp)
	for sb=0, FSv/*[$1][$2][$3]*/.size()-1 { 
	vsoma.printf ("%f\n",FSv/*[$1][$2][$3]*/.x[sb])
	}
	vsoma.close()

	vect = $o4
	vdend = new File()		
	sprint(temp,"Cell_io/cluster/PFC/Jan19/PFC_67/all//clusteredall/dend_clusteredall_1/Synapses_%d_seeddend_%d.txt", $1,$2)  
	vdend.wopen(temp)
	for k=0,vect.size()-1 { 
		vdend.printf ("%d\n",vect.x[k])
	}
	vdend.close()
}
//------------------------------------------------------------creat the pool of dends---------
objref dendpool
faulty= 54//Somogyi_1
//faulty=12 //Somogyi_2
//faulty=7 //Somogyi_3
//faulty=13// Somogyi_4
//faulty=13 //Somogyi_5

//faulty=7//new_DR-rat 13
//faulty= 12//DR-int
//faulty= 11//Mar_11



dendnum=number_dends-faulty 
print dendnum		//number of correct dends
dendpool= new Vector(dendnum)		//the vectror of correct dends
j=0
for i=0,number_dends-1{


	if (i==0||i==1||i==2||i==9||i==13||i==15||i==18||i==21||i==33||i==34||i==35||i==38||i==40||i==44||i==48||i==57||i==59||i==65||i==67||i==69||i==70||i==73||i==82||i==93||i==98||i==108||i==111||i==115||i==116||i==117||i==121||i==127||i==134||i==135||i==137||i==138||i==139||i==141||i==145||i==146||i==148||i==149||i==154||i==157||i==160||i==164||i==171||i==182||i==173||i==187||i==190||i==195||i==198||i==210){ //Somogyi_1

//if (i==0||i==5||i==11||i==12||i==13||i==14||i==15||i==16||i==21||i==27||i==40||i==4) { //Som_2 correct 63-12=51

//if (i==0||i==3||i==9||i==13||i==26||i==41||i==48){ // Somogyi 3. 58-7=51 seeddend=0,50

//if (i==0||i==6||i==40||i==66||i==89||i==90||i==91||i==92||i==111||i==112||i==126||i==161||i==179) { //Som_4 0.186

//if (i==0||i==1||i==14||i==15||i==19||i==27||i==33||i==32||i==37||i==41||i==47||i==48||i==54) { //Som_5 0.58



//if (i==0||i==9||i==16||i==28||i==31||i==36||i==41){ //PFC 47 48-7=41 seeddend=0,40

//if (i==0||i==12||i==13||i==14||i==23||i==24||i==29||i==32||i==43||i==48||i==50||i==64){ //PFC 64 65-12=53 seeddend=0,52
	
//if (i==0||i==6||i==14||i==17||i==27||i==34||i==52||i==53||i==55||i==56||i==65){ //Mar_11


		continue
	}else{
		dendpool.x[j]=i
		j=j+1
		}

}


//Number of total sengments per dendrite.
proc total_segments_per_dend(){
FSdetailedtemplate.dend[$1].nseg=cluster_synapses
}

for t=0, dendpool.size()-1 {
total_segments_per_dend(dendpool.x[t])
}

//----------------------------------------------------------------------------------------------------------------------------------------------
//.........................Autapse.................
PV2PVmaxsyn=12  
objref gabaain[PV2PVmaxsyn], congabaain[PV2PVmaxsyn]
proc self_inhibition() {local delstimpv localobj fpvpv
	fpvpv = new Random(100)
	delstimpv=fpvpv.normal(0.6,0.2)
	for a=0, (PV2PVmaxsyn-1) {
		FSdetailedtemplate.soma {gabaain[a]=new GABAain(0.5) }
		delstimpv = fpvpv.repick()
		if (delstimpv<0) {delstimpv=delstimpv*(-1)}
		FSdetailedtemplate.axon {congabaain[0] = new NetCon(&v(1), gabaain[0], -20, delstimpv, 5.1e-4*14)}
	}
}


objref fpin, r
fpin = new Random(5)                        //delstim
fpin.normal(0.6, 0.2)		
randomDend=0
objref ampa[cluster_synapses*cluster_size],nmda[cluster_synapses*cluster_size]
objref conampa[cluster_synapses*cluster_size], connmda[cluster_synapses*cluster_size]     

//--------------------Permutate randomly dendrites indices:
objref rd, fppv	,clusterDendrites
fppv = new Random(2)
//print "fine! go on!"


//--------------------------------------------
objref rndcluster
for runs=0, cluster_size-1 { // 0,2=3 branches
print "cluster_size" , cluster_size
	for seeddend = 0,dendnum-1 { 
                rd=new Random(seeddend*50)
		rndcluster = new Vector(runs+1,0) //douplets triplets quadruplets etc
		print runs 
                print seeddend
		for k = 0, (rndcluster.size()-1) {
			rndcluster.x[k] = dendpool.x[(rd.uniform(0, dendpool.size()-1))] 
			print k+1, " : ", rndcluster.x[k]
		}
		  for seedpid = 0,0{//4{
                      r=new Random(seedpid*120)
                      r.uniform(0.0, 1.0) //PID random
			//print "Stimulating and running the above dendritic cluster with different PID!"
			for syn=0, cluster_synapses-1 {
		            print "syn", syn
                            for k = 0, rndcluster.size()-1 {
				uidx = k*cluster_synapses+syn 
                          print "uidx", uidx                                                           
				delstim=fppv.normal(0.6, 0.2) 
				    if (delstim<0) {delstim=delstim*(-1) }
					DEND = rndcluster.x[k]
					PID = r.repick()
                                        //print PID
					FSdetailedtemplate.dend[DEND] { ampa[uidx] = new CPGLUIN(PID) }
					FSdetailedtemplate.dend[DEND] { nmda[uidx] = new NMDAIN(PID) }
					vecstim[uidx] = new VecStim(0.5)
					vecstim[uidx].delay =0
					vecstim[uidx].play(stimvector[uidx])
					conampa[uidx] = new NetCon(vecstim[uidx], ampa[uidx], -20, delstim, 7.5e-4)  
					connmda[uidx] = new NetCon(vecstim[uidx], nmda[uidx], -20, delstim, 3.2e-4*5)
				}
			}
                      self_inhibition()
			rec_soma_Voltage(runs,seeddend,seedpid,rndcluster)
                       
			run()
			//save_soma_Voltage(runs,seeddend,seedpid,rndcluster)
                       
		}//seedpid
	}//seeddend
} //runs









Loading data, please wait...