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

 Download zip file   Auto-launch 
Help downloading and running models
"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. ..."
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]
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;
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]; Guo, Daqing [dqguo at]; Raikov, Ivan [ivan.g.raikov at]; Publio, Rodrigo [publio at]; De Schutter, Erik [erik at];
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 (
// 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)

    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
//MF testing patch 2 received same MF profile as patch 1 GOC duplication w.r.t MF inputboth spikes and connection
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

if ( GoC_c1==1 ) {
tob_vec1=new Vector()
tob_vec2=new Vector()
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 =
idv=new Vector()
printf("Host is %f\n",idv.sum())


if ( GoC_c2==1) {


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


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)

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

    for (; 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)

		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

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



} // 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()


Loading data, please wait...