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

 Download zip file 
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 inhibitory connections between cerebellar 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 GoCtoGoC

external GolgiPop, step_time, numAxonGolgi, numGABAGoC, GoC_GoC_inh_con, GoC_GoC_gap_con, vGoCtoGoCgapsources, vGoCtoGoCgaptargets, vGoCtoGoCgapdistances, gseed
external GoC_GoC_gap_A1, GoC_GoC_gap_A2, GoC_GoC_gap_x0, GoC_GoC_gap_dx, GoC_GoC_gap_beta, GoC_GoC_gap_lambda
external BoltzmannPDF, ExpPDF,CV_gmax
objref par_gaps,pc,r,Golgigap,vGoCtoGoCgapsourcefinal, vGoCtoGoCgaptargetfinal, vGoCtoGoCgapdistancefinal
public vGoCtoGoCgaptargetfinal, vGoCtoGoCgapsourcefinal, vGoCtoGoCgapdistancefinal

objref  inhNCelem

func gap_create() {localobj pc

    pc = $o5

    // for each gap junction create two unique global id in all hosts
    gap_src_gid += 2

    if (pc.gid_exists($1)) {
	gap_create1($1, $2, gap_src_gid + 1, gap_src_gid, pc,$6)
    if (pc.gid_exists($3)) {
	gap_create1($3, $4, gap_src_gid, gap_src_gid + 1, pc,$6)
    return 1

proc gap_create1() {local loc localobj pc, c, g,rn

    pc = $o5

    c = pc.gid2obj($1)
    rn = new Random(gseed)
    loc = rn.discunif(0,3)

    c.dend[loc] {

	g = new gap(.5)
        g.g = $6


	pc.target_var(&g.vgap, $3)
	pc.source_var(&v(.5), $4)

proc init() { local i,j,dist,a,b,axonid,tgaps,disgap,g localobj nc,cell,receptor,r1,r2
    inhNCelem = new List()
    r = new Random(gseed)
    r1 = new Random(gseed)
    r2 = new Random(gseed)
    Golgigap = new Matrix(GolgiPop.nCells,GolgiPop.nCells)
    numGoC = GolgiPop.nCells

    par_gaps=new List()
    mGABA = 330e-6
    SDGABA = mGABA*CV_gmax
    del = 20
    thresh = -10

    pc = new ParallelContext()

    if (GoC_GoC_inh_con == 1) {

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

	    cell = pc.gid2cell(i+GolgiPop.startindex)

	    // Connect GoC axons to GoC somas

	    if(cell.GoCID.size() >= 1) { // At least 1 GoC connection

        for j=0, cell.GoCID.size()-1 {
  		    axonid = cell.GoCID.x(j)
  		    receptor = cell.gaba.object(dendno)

  		    nc = pc.gid_connect(axonid,receptor)

  		    if (cell.GoCdel.x(j)<=step_time){
                          nc.delay = step_time + step_time/10




    // Vary extra GABA with CV_gmax
    for j=0, cell.gabaML.count()-1 {
        mGABA1 = cell.gabaML.object(j).g
        SDGABA1 = 0.01*mGABA1
        w = r1.normal(mGABA1, SDGABA1*SDGABA1)
        cell.gabaML.object(j).g = w

    if (GoC_GoC_gap_con == 1) {

        vGoCtoGoCgapsourcefinal  = new Vector()
        vGoCtoGoCgaptargetfinal  = new Vector()
        vGoCtoGoCgapdistancefinal = new Vector()

        for k=0,vGoCtoGoCgapsources.size()-1 {

            // Connect GoC gap junctions

            dist = vGoCtoGoCgapdistances.x[k]

            prob = BoltzmannPDF(dist, GoC_GoC_gap_A1, GoC_GoC_gap_A2, GoC_GoC_gap_x0, GoC_GoC_gap_dx) / 100

            a  = vGoCtoGoCgapsources.x[k]
            b  = vGoCtoGoCgaptargets.x[k]

            // Check if this gap junction has already been created
            if (Golgigap.x[b][a]==1 || Golgigap.x[a][b]==1) {

       	    Golgigap.x[a][b] = 1

            if (r.repick() <= prob) {

	        pre  = vGoCtoGoCgapsources.x[k]
	        post = vGoCtoGoCgaptargets.x[k]



                g = ExpPDF(dist,GoC_GoC_gap_beta,GoC_GoC_gap_lambda) / 1000 // convert to microsiemens

                //printf("Gap junction: dist = %g prob = %g g = %g\n", dist, prob, g)

                gap_create (pre, 0, post, 0, pc, g)



printf("\nNumber of gap objects on host %d is %d\n",, par_gaps.count())
printf("Total gap junctions = %d", tgaps)

} // end init

endtemplate GoCtoGoC

objref ncGoCtoGoC[1]
ncGoCtoGoC[0] = new GoCtoGoC()

Loading data, please wait...