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 gap junctions
// 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 Gap
public src, target, g, valid, pr, set_gm, gm, cm
objref srcsec, targetsec, cm, gm, y, b, xvec, sl, lm, this, fih
strdef tstr

proc init(){
    g_ = 10
    valid_ = 0
    cm = new Matrix(2,2,2)
    gm = new Matrix(2,2)
    y = new Vector(2)
    b = new Vector(2)
    xvec = new Vector(2)

func src() {
    srcsec = new SectionRef()
    xvec.x[0] = $1
    valid_ = 0
    return valid()

func target() {
    targetsec = new SectionRef()
    xvec.x[1] = $1
    valid_ = 0
    return valid()

func g() {
    if (numarg() > 0) {
        g_ = $1
        if (valid_) {
    return g_

proc set_gm() { local us, a// conductance in nanosiemens
    if (valid_ == 0) { return }
    us = .001*g_
    srcsec.sec { a = 100/area(xvec.x[0]) }
    gm.x[0][0] = us*a
    gm.x[0][1] = -us*a
    targetsec.sec { a = 100/area(xvec.x[1]) }
    gm.x[1][1] = us*a
    gm.x[1][0] = -us*a

func valid() {
    if (valid_ == 0) {
        if (object_id(srcsec) && object_id(targetsec)) {
    return valid_

proc mkgap() {
    sl = new SectionList()
    srcsec.sec sl.append()
    targetsec.sec sl.append()
    valid_ = 1
    lm = new LinearMechanism(cm, gm, y, b, sl, xvec)
    // only necessary because we anticpate changes in diameter
    // fih = new FInitializeHandler(0, "set_gm()")
    // unfortunately up through the  5.6 2004/02/09 Main (44)
    // version there is an error in parsing the third arg, so
    sprint(tstr, "%s.set_gm()", this)
    fih = new FInitializeHandler(0, tstr)

proc pr() {
    if (valid_) {
srcsec.sec printf("%s %s(%g)", this, secname(), xvec.x[0])
targetsec.sec printf("---%s(%g) \tg = %g (ns)\n", secname(), xvec.x[1], g())
        printf("%s not used\n", this)
endtemplate Gap

Loading data, please wait...