Model of the cerebellar granular network (Sudhakar et al 2017)

 Download zip file   Auto-launch 
Help downloading and running models
Accession:232023
"The granular layer, which mainly consists of granule and Golgi cells, is the first stage of the cerebellar cortex and processes spatiotemporal information transmitted by mossy fiber inputs with a wide variety of firing patterns. To study its dynamics at multiple time scales in response to inputs approximating real spatiotemporal patterns, we constructed a large-scale 3D network model of the granular layer. ..."
Reference:
1 . Sudhakar SK, Hong S, Raikov I, Publio R, Lang C, Close T, Guo D, Negrello M, De Schutter E (2017) Spatiotemporal network coding of physiological mossy fiber inputs by the cerebellar granular layer. PLoS Comput Biol 13:e1005754 [PubMed]
Citations  Citation Browser
Model Information (Click on a link to find other models with that property)
Model Type: Realistic Network;
Brain Region(s)/Organism: Cerebellum;
Cell Type(s): Cerebellum golgi cell;
Channel(s): I A; I Calcium; I K; I K,Ca; I Na,t; I h; I Na,p; I T low threshold;
Gap Junctions: Gap junctions;
Receptor(s): AMPA; NMDA; Gaba;
Gene(s):
Transmitter(s): Glutamate; Gaba;
Simulation Environment: NEURON;
Model Concept(s): Spatio-temporal Activity Patterns; Oscillations; Synchronization; Winner-take-all;
Implementer(s): Hong, Sungho [shhong at oist.jp]; Guo, Daqing [dqguo at uestc.edu.cn]; Raikov, Ivan [ivan.g.raikov at gmail.com]; Publio, Rodrigo [publio at oist.jp]; De Schutter, Erik [erik at oist.jp];
Search NeuronDB for information about:  AMPA; NMDA; Gaba; I Na,p; I Na,t; I T low threshold; I A; I K; I h; I K,Ca; I Calcium; Gaba; Glutamate;
// Template for connections from cerebellar mossy fibers to Golgi cells
//
// Written by Shyam Kumar Sudhakar, Ivan Raikov, Tom Close, Rodrigo Publio, Daqing Guo, and Sungho Hong
// Computational Neuroscience Unit, Okinawa Institute of Science and Technology, Japan
// Supervisor: Erik De Schutter
//
// Correspondence: Sungho Hong (shhong@oist.jp)
//
// September 16, 2017

begintemplate MFtoGoC
public excNClem, enP
external  numDendGolgi , MFcons, MFtoGoCzone,TS,step_time,CV_gmax,x_c1,x_c2,y_c1,y_c2
external GolgiPop, GranulePop,gseed, MossyPop, MFtoGCzone, MLplug
objref excNClem, enP,pc,r
objref circle1,circle2,MFIDlist,MFdellist,Vec_size,tob_vec1,tob_vec2,idv


proc init() { local i,j,count,mfid localobj nc,ncm,cell,ampasyn

    nD     = numDendGolgi
    numGC  = GranulePop.nCells
    numMF  = MossyPop.nCells
    numGoC = GolgiPop.nCells

    mAMPA = 300e-6
    SD_AMPA = mAMPA*CV_gmax
    r = new Random(gseed)
    del    = 20
    thresh = -10

    pc = new ParallelContext()

    objref excNClem
    excNClem = new List()

    r = new Random(gseed)
    r.uniform(0,nD-1)

    enP = new enPassage()

    if(MLplug==1) {  // This part is reserved for future development

	enP.connectPops1(MossyPop,GranulePop,GolgiPop, MFtoGoCzone,MFtoGCzone, TS,$o1,$o2)
	enP.connectPops2(MossyPop,GranulePop,GolgiPop, MFtoGoCzone,MFtoGCzone, TS,$o1,$o2)
	enP.connectPops3(MossyPop,GranulePop,GolgiPop, MFtoGoCzone,MFtoGCzone, TS,$o1,$o2)
	//enP.connectPops4(MossyPop,GranulePop,GolgiPop, MFtoGoCzone,MFtoGCzone, TS,$o1,$o2,PurkinjePop)
	//enP.connectPops5(MossyPop,GranulePop,GolgiPop, MFtoGoCzone,MFtoGCzone, TS,$o1,$o2,PCPop)

    } else {

	enP.connectPops1(MossyPop,GranulePop,GolgiPop, MFtoGoCzone,MFtoGCzone, TS)
	enP.connectPops2(MossyPop,GranulePop,GolgiPop, MFtoGoCzone,MFtoGCzone, TS)
    //enP.connectPops1(MossyPop,GranulePop,GolgiPop, MFtoGoCzone,MFtoGCzone, TS)

    }

// Connect up to MFcons MFs to each Golgi cell according rules defined by enPassage
pc.barrier()
//MF testing patch 2 received same MF profile as patch 1 GOC duplication w.r.t MF inputboth spikes and connection
MFtesting=0
if (MFtesting ==1){
circle1=new Vector()
circle2=new Vector()
MFIDlist=new List()
MFdellist=new List()
Vec_size = new Vector()
idv=new Vector()

for i=0,GolgiPop.GoCcoordinates.nrow-1 {
goc_id = i
GoC_c1 = (GolgiPop.GoCcoordinates.x[i][0]-x_c1)^2+(GolgiPop.GoCcoordinates.x[i][1]-y_c1)^2
GoC_c1 = GoC_c1<=100*100
GoC_c2 = (GolgiPop.GoCcoordinates.x[i][0]-x_c2)^2+(GolgiPop.GoCcoordinates.x[i][1]-y_c2)^2
GoC_c2 = GoC_c2<=100*100

idt=0
if ( GoC_c1==1 ) {
tob_vec1=new Vector()
tob_vec2=new Vector()
circle1.append(goc_id)
if (pc.gid_exists(goc_id+GolgiPop.startindex)) {
tob_vec1 = pc.gid2cell(goc_id+GolgiPop.startindex).MFID
tob_vec2 = pc.gid2cell(goc_id+GolgiPop.startindex).MFdel
idt = pc.id
}
idv=new Vector()
pc.allgather(idt,idv)
printf("Host is %f\n",idv.sum())
pc.broadcast(tob_vec1,int(idv.sum))
pc.broadcast(tob_vec2,int(idv.sum))

pc.barrier()
MFIDlist.append(tob_vec1)
MFdellist.append(tob_vec2)
pc.barrier()
}

if ( GoC_c2==1) {
circle2.append(goc_id)

}
}

printf("Total number of MFid is %f \n",MFIDlist.count())
if (pc.id ==3) {
for m=0,MFIDlist.count-1 {
MFIDlist.object(m).printf
}
}

pc.barrier()
Vec_size.append(circle1.size)
Vec_size.append(circle2.size)
minsize=Vec_size.min()

for i=0,minsize-1 {
       goc_id = circle2.x[i]
       if (pc.gid_exists(goc_id+GolgiPop.startindex)) {
       pc.gid2cell(goc_id+GolgiPop.startindex).MFID = MFIDlist.object(i)
       pc.gid2cell(goc_id+GolgiPop.startindex).MFdel = MFdellist.object(i)
       //MFIDlist.object(i).printf
        }
}
}

// Mechanism over ////////////////////////////////////



    pc.barrier()
    for (i=pc.id; i < numGoC; i +=pc.nhost) {

	cell = pc.gid2cell(i+GolgiPop.startindex)
	if (cell.MFID.size()>1) { // At least 1 MF connection

            for j=0, cell.MFID.size()-1 {
		mfid    = cell.MFID.x(j)
                dendno=r.discunif(0,1)

		ampasyn = cell.ampa.object(dendno)
		nc      = pc.gid_connect(mfid, ampasyn)
		if (cell.MFdel.x(j)<=step_time){
                    nc.delay=step_time +step_time/10
		}else{
                    nc.delay=cell.MFdel.x(j)
		}


                w = r.normal(mAMPA,SD_AMPA*SD_AMPA)

		nc.weight=w
		excNClem.append(nc)

            }
	}
    }


} // end init

endtemplate MFtoGoC

objref ncMFtoGoC[1]

if(MLplug==1) { // This part is reserved for future development

    ncMFtoGoC[0] = new MFtoGoC(StellatePop,BasketPop)

} else {

    ncMFtoGoC[0] = new MFtoGoC()

}