Cerebellar nuclear neuron (Sudhakar et al., 2015)

 Download zip file   Auto-launch 
Help downloading and running models
Accession:185513
"... In this modeling study, we investigate different forms of Purkinje neuron simple spike pause synchrony and its influence on candidate coding strategies in the cerebellar nuclei. That is, we investigate how different alignments of synchronous pauses in synthetic Purkinje neuron spike trains affect either time-locking or rate-changes in the downstream nuclei. We find that Purkinje neuron synchrony is mainly represented by changes in the firing rate of cerebellar nuclei neurons. ..."
Reference:
1 . Sudhakar SK, Torben-Nielsen B, De Schutter E (2015) Cerebellar Nuclear Neurons Use Time and Rate Coding to Transmit Purkinje Neuron Pauses. PLoS Comput Biol 11:e1004641 [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: Cerebellum;
Cell Type(s): Cerebellum deep nucleus neuron;
Channel(s): I Na,p; I T low threshold; I h; I Sodium;
Gap Junctions:
Receptor(s): NMDA; Glutamate; Gaba;
Gene(s):
Transmitter(s): Gaba; Glutamate;
Simulation Environment: NEURON;
Model Concept(s): Rate-coding model neurons; Rebound firing;
Implementer(s):
Search NeuronDB for information about:  NMDA; Glutamate; Gaba; I Na,p; I T low threshold; I h; I Sodium; Gaba; Glutamate;
/
SudhakarEtAl2015
readme.html
CaConc.mod *
CaHVA.mod *
CaL.mod
CalConc.mod *
CaLVA.mod *
DCNsyn.mod *
DCNsynGABA.mod
DCNsynNMDA.mod *
fKdr.mod *
GammaStim.mod *
h.mod *
Ifluct8.mod *
NaF.mod *
NaP.mod *
pasDCN.mod *
SK.mod *
sKdr.mod *
TNC.mod
vecevent.mod *
cellids.dat
cellids_n.dat
datasp_ex1.dat
datasp1.dat
DCN_init_model1.hoc
DCN_init_model2.hoc
DCN_init_model2_highgain.hoc
DCN_init_model2_lowgain.hoc
DCN_init_model2_medgain.hoc
DCN_init_model3.hoc
DCN_mechs1.hoc *
DCN_mechs2.hoc
DCN_morph.hoc *
DCN_params.hoc
l_ex1.dat
l1.dat
model1_params.hoc
model2_params.hoc
model2_params_highgain.hoc
model2_params_lowgain.hoc
model2_params_medgain.hoc
model3_params.hoc
mosinit.hoc
pausebeg.dat
pausebeg_n.dat
screenshot.png
                            
// CN model used in Saak V Ovsepian, Volker Steuber, Marie Le 
// Berre, Liam O'Hara, Valerie B O'Leary, and J. Oliver Dolly 
// (2013). A Defined Heteromeric KV1 Channel Stabilizes the 
// Intrinsic Pacemaking and Regulates the Efferent Code of Deep 
// Cerebellar Nuclear Neurons to Thalamic Targets. Journal of 
// Physiology (epub ahead of print). 
//
// written by Johannes Luthman, modified by Volker Steuber
//
// main simulation script that replicates Figure 9A,B
// in Ovsepian et al. (2013)


strdef strFilePrefix

Kdrblock = 1 // will be overwritten
strFilePrefix = "Kdr60"

load_file("nrngui.hoc")
load_file("model2_params.hoc")
load_file("DCN_morph.hoc")
load_file("DCN_mechs2.hoc")

objref oRndInh, oRndExc,CurrentClamp,ra,VoltageClamp,Vol1,Edata,Edata1
objref gammaStimPC[INHTOTALSYNAPSES]
objref netconPC[INHTOTALSYNAPSES],spikecount,spiketimes,Vol,GABAsyn,vdata_ex,vtemp_ex,vlength_ex,Vect_list_ex

// Declare instances of the GammaStim objects for excitatory synapses
// (1 GammaStim activates 1 AMPA + 1 fNMDA + 1 sNMDA) and the corresponding
// NetCon objects (=1 each for AMPA, fNMDA, and sNMDA).
objref gammaStimExc[EXCTOTALSYNAPSES],filed,filed1
objref filed3,filed4,filed5

objref netconExc[3 * EXCTOTALSYNAPSES]


num=1
if (name_declared("x")==5) { // x has been assigned a numerical value
  num = x
}
print "num is ", num

strdef PCdata, MFdata, ext,PCfilename,MFfilename
PCdata = "datasp"
MFdata = "datasp_ex"
ext = ".dat"
sprint(PCfilename,"%s%d%s",PCdata,num,ext)	
sprint(MFfilename,"%s%d%s",MFdata,num,ext)	
print PCfilename
print MFfilename


strdef PCl, MFl, ext,PClname,MFlname
PCl = "l"
MFl = "l_ex"
ext = ".dat"
sprint(PClname,"%s%d%s",PCl,num,ext)	
sprint(MFlname,"%s%d%s",MFl,num,ext)	
print PClname
print MFlname


objref fdata,vtemp,vdata,Vect_list,fdata1,vlength
vdata=new Vector()
vtemp=new Vector()
vlength = new Vector()
Vect_list=new List()
fdata = new File() //datasp
fdata1 = new File() //datasp
Vol1=new Vector()
Edata = new File()
Edata1=new File()
vdata_ex=new Vector()
vtemp_ex=new Vector()
vlength_ex = new Vector()
Vect_list_ex=new List()

objref NaFcurrent,NaPcurrent,fKdrcurrent,sKdrcurrent,SKcurrent,TNCcurrent, hcurrent,CaLVAcurrent,CaHVAcurrent,trialtorecord 
objref vectmp,vectmp1,fnmdalist,snmdalist


NaFcurrent = new Vector()
NaPcurrent = new Vector()
fKdrcurrent = new Vector()
sKdrcurrent = new Vector()
SKcurrent = new Vector()
TNCcurrent = new Vector()
hcurrent = new Vector()
CaLVAcurrent = new Vector()
CaHVAcurrent = new Vector()
trialtorecord = new Vector()
//trialtorecord.append(1,9,11,13,21,23,33,35,49,43,52,53,61,68,72,78,87,88,99,91)
trialtorecord.indgen(1,100,1)


fnmdalist =new List()
snmdalist =new List()


for i=0, EXCTOTALSYNAPSES-1 {
	
vectmp = new Vector()
vectmp1 = new Vector()

fnmdalist.append(vectmp)
snmdalist.append(vectmp1)

}


// model vecstim for inhibitory input
fdata.ropen(PCfilename)
fdata1.ropen(PClname)

        vtemp = new Vector()
        vdata.scanf(fdata)
        vlength.scanf(fdata1)
        fdata.close()
        fdata1.close()
numspikespercell = int(vdata.size()/INHTOTALSYNAPSES)

src_start = 0
        for i = 0, INHTOTALSYNAPSES-1 { 
            vtemp = new Vector()
            src_tmp = vlength.x[i]
    
            vtemp.copy(vdata,0,src_start,src_start+src_tmp-1)
            src_start=src_start+src_tmp
            Vect_list.append(vtemp)
        }
        
// model netstim for inhibitory input

Edata.ropen(MFfilename)
Edata1.ropen(MFlname)

        vtemp_ex = new Vector()
        vdata_ex.scanf(Edata)
        vlength_ex.scanf(Edata1)
        Edata.close()
        Edata1.close()
//numspikespercell = int(vdata_ex.size()/EXCTOTALSYNAPSES)

src_start_ex = 0
        for i = 0, EXCTOTALSYNAPSES-1 { 
            vtemp_ex = new Vector()
            src_tmp_ex = vlength_ex.x[i]
    
            vtemp_ex.copy(vdata_ex,0,src_start_ex,src_start_ex+src_tmp_ex-1)
            src_start_ex=src_start_ex+src_tmp_ex
            Vect_list_ex.append(vtemp_ex)
        }
        
                           

///////////////////////////////////////////////////////////////

proc DCNloop() {
        DCNmechs()
        tstop=2000
	
    	runSimulation()
        if (trialtorecord.indwhere("==",num) >= 0) {
    	rec_data()
    	} 
   	run(tstop)
    	spiketimes.printf()

       //quit()

}


proc runSimulation() {
        
    // Set up the excitatory synapses
    
    oRndExc = new Random()
    oRndExc.ACG(randomiserSeed)
    spiketimes=new Vector()
    Vol=new Vector()

    soma spikecount=new APCount(0.5)
    spikecount.thresh=-20
    spikecount.record(spiketimes)
    Vol.record(&soma.v(0.5))
    
    soma CurrentClamp = new IClamp(0.5)
    CurrentClamp.amp = 0//-0.15
    CurrentClamp.dur = 0//1500
    CurrentClamp.del = 500
    //CurrentClamp.del = 0
    //Vol.record(&soma.h_NaP(0.5))
    
    soma VoltageClamp = new SEClamp(0.5)
    VoltageClamp.amp1 = -60
    VoltageClamp.dur1 = 0//1e9//1500
    //Vol.record(&VoltageClamp.i)

    //Vol.record(&fnmda[0].i)
    Vol1.record(&snmda[0].i)



    
    soma GABAsyn = new Exp2Syn(0.5)
    GABAsyn.tau1 = 0.25 //0.25
    GABAsyn.tau2 =2.25  //2.25
    GABAsyn.e = -GABARevPot
    

       ra=new Random()

    for (c=0; c < EXCTOTALSYNAPSES; c+=1) {
//        gammaStimExc[c] = new NetStim()
//        gammaStimExc[c].number = 1e9
//        gammaStimExc[c].interval = 100
//        gammaStimExc[c].start = 0
//        gammaStimExc[c].noise = 1+ra.uniform(0,1)
        
        gammaStimExc[c] = new VecStim(0.5)
        gammaStimExc[c].play(Vect_list_ex.object[c])
    }

    // Set up the excitatory NetCons.
    ncIndex = 0
    for (c=0; c < EXCTOTALSYNAPSES; c+=1) {

        // Create three NetCons for each excitatory GammaStim to connect it
        // to the ampa and the two nmda receptors.
        netconExc[ncIndex] = new NetCon(gammaStimExc[c], ampa[c])
        netconExc[ncIndex].threshold = 0 //mV
        netconExc[ncIndex].weight = gAMPA
        netconExc[ncIndex+1] = new NetCon(gammaStimExc[c], fnmda[c])
        netconExc[ncIndex+1].threshold = 0 //mV
        netconExc[ncIndex+1].weight = gfNMDA
        netconExc[ncIndex+2] = new NetCon(gammaStimExc[c], snmda[c])
        netconExc[ncIndex+2].threshold = 0 //mV
        netconExc[ncIndex+2].weight = gsNMDA

        ncIndex = ncIndex + 3
    }
    
    oRndInh = new Random()
    oRndInh.ACG(randomiserSeed)
    for (c=0; c<INHTOTALSYNAPSES; c+=1) {
         //gammaStimPC[c] = new NetStim(0.5)
         //gammaStimPC[c].number = 0//1e9
        //gammaStimPC[c].interval = 0//40
        //gammaStimPC[c].start = 0
        //gammaStimPC[c].noise = 0//oRndInh.uniform(0,1)
        
        gammaStimPC[c] = new VecStim(0.5)
        gammaStimPC[c].play(Vect_list.object[c])
    }        
    

    // Set up the GABA NetCons.
    gsIndex = 0
    counterOfNetCons = 0
   
    for (cGABA=0; cGABA < INHTOTALSYNAPSES; cGABA=cGABA+1) {

        //netconPC[cGABA] = new NetCon(gammaStimPC[cGABA], GABAsyn)
        s=ra.discunif(0,300)
        netconPC[cGABA] = new NetCon(gammaStimPC[cGABA], gaba[s])
       

        //netconPC[cGABA].threshold = 0 //mV
        netconPC[cGABA].weight = gGABA//3e-3 //0.2e-3//0.3e-3//gGABA //0.25

      
    }

    
} // end of "proc runSimulation()".

proc rec_data() {
	
	//record current
   rec_dt_current = 0.1 //ms
   rec_dt_nmda = 0.5	 //ms
   NaFcurrent.record(&soma.ina_NaF(0.5),rec_dt_current)
   NaPcurrent.record(&soma.ina_NaP(0.5),rec_dt_current)
   fKdrcurrent.record(&soma.ik_fKdr(0.5),rec_dt_current)
   sKdrcurrent.record(&soma.ik_sKdr(0.5),rec_dt_current)
   SKcurrent.record(&soma.ik_SK(0.5),rec_dt_current)
   hcurrent.record(&soma.ih_h(0.5),rec_dt_current)
   TNCcurrent.record(&soma.i_TNC(0.5),rec_dt_current)
   CaLVAcurrent.record(&soma.ical_CaLVA(0.5),rec_dt_current)
   CaHVAcurrent.record(&soma.ica_CaHVA(0.5),rec_dt_current)
   
   for i=0, EXCTOTALSYNAPSES-1 {
	


//fnmdalist.object(i).record(&fnmda[i].g,rec_dt_nmda)
//snmdalist.object(i).record(&snmda[i].g,rec_dt_nmda)

}
 
}


//DCNrun()

DCNloop()

strdef file1, file2, ext,filename1,filename2
file1 = "m2_a"
file2 = "m2_b"
ext = ".bin"
sprint(filename1,"%s%d%s",file1,num,ext)	
sprint(filename2,"%s%d%s",file2,num,ext)	
print filename1
print filename2


filed = new File()
filed.wopen(filename1)
filed.close(filename1)
filed.aopen(filename1) 

Vol.vwrite(filed)
//Vol1.vwrite(filed)

filed.close()

filed1 = new File()
filed1.wopen(filename2)
filed1.close(filename2)
filed1.aopen(filename2) 

spiketimes.vwrite(filed1)
filed1.close()

if (trialtorecord.indwhere("==",num) >= 0) {
print "sss"

strdef filename3,filename4,file3,file4,file5,filename5   
 	
file3 = "m2_c"
file4 = "m2_d"
file5 = "m2_e"
sprint(filename3,"%s%d%s",file3,num,ext)	
sprint(filename4,"%s%d%s",file4,num,ext)
sprint(filename5,"%s%d%s",file5,num,ext)

filed3 = new File()
filed3.wopen(filename3)
filed3.close(filename3)
filed3.aopen(filename3) 

NaFcurrent.vwrite(filed3)
NaPcurrent.vwrite(filed3)
fKdrcurrent.vwrite(filed3)
fKdrcurrent.vwrite(filed3)
sKdrcurrent.vwrite(filed3)
TNCcurrent.vwrite(filed3)
hcurrent.vwrite(filed3)
CaLVAcurrent.vwrite(filed3)
CaHVAcurrent.vwrite(filed3)
filed3.close()

filed4 = new File()
filed4.wopen(filename4)
filed4.close(filename4)
filed4.aopen(filename4) 

for i=0, EXCTOTALSYNAPSES-1 {
	
//	fnmdalist.object(i).vwrite(filed4)
}

filed4.close()

filed5 = new File()
filed5.wopen(filename5)
filed5.close(filename5)
filed5.aopen(filename5) 

for i=0, EXCTOTALSYNAPSES-1 {
	
//	snmdalist.object(i).vwrite(filed5)
}

filed5.close()
}
quit()

Loading data, please wait...