Cerebellar Model for the Optokinetic Response (Kim and Lim 2021)

 Download zip file 
Help downloading and running models
Accession:267334
We consider a cerebellar spiking neural network for the optokinetic response (OKR). Individual granule (GR) cells exhibit diverse spiking patterns which are in-phase, anti-phase, or complex out-of-phase with respect to their population-averaged firing activity. Then, these diversely-recoded signals via parallel fibers (PFs) from GR cells are effectively depressed by the error-teaching signals via climbing fibers from the inferior olive which are also in-phase ones. Synaptic weights at in-phase PF-Purkinje cell (PC) synapses of active GR cells are strongly depressed via strong long-term depression (LTD), while those at anti-phase and complex out-of-phase PF-PC synapses are weakly depressed through weak LTD. This kind of ‘‘effective’’ depression at the PF-PC synapses causes a big modulation in firings of PCs, which then exert effective inhibitory coordination on the vestibular nucleus (VN) neuron (which evokes OKR). For the firing of the VN neuron, the learning gain degree, corresponding to the modulation gain ratio, increases with increasing the learning cycle, and it saturates.
Reference:
1 . Kim SY, Lim W (2021) Effect of Diverse Recoding of Granule Cells on Optokinetic Response in A Cerebellar Ring Network with Synaptic Plasticity Neural Networks 134:173-204
Citations  Citation Browser
Model Information (Click on a link to find other models with that property)
Model Type: Realistic Network; Spiking neural network;
Brain Region(s)/Organism: Cerebellum;
Cell Type(s): Cerebellum interneuron granule GLU cell; Cerebellum interneuron Golgi GABA cell; Cerebellum Purkinje GABA cell; Inferior olive neuron; Vestibular nucleus neuron;
Channel(s):
Gap Junctions:
Receptor(s): AMPA; NMDA; Gaba;
Gene(s):
Transmitter(s): Glutamate; Gaba;
Simulation Environment: C or C++ program;
Model Concept(s): Learning; Sensory processing; Effective Optokinetic Response (OKR);
Implementer(s): Kim, Sang-Yoon; Lim, Woochang;
Search NeuronDB for information about:  Cerebellum Purkinje GABA cell; Cerebellum interneuron granule GLU cell; Cerebellum interneuron Golgi GABA cell; AMPA; NMDA; Gaba; Gaba; Glutamate;
/
OKR
README.txt
CI.c
IPSR.c
raster_plot.c
                            
/* A code to get the IPSR (instantaneous population spike rate) for the constituent cells */

#include <stdio.h>   /* Standard header file for the Input and Output */
#include <stdlib.h>  /* Standard library header file */
#include <math.h>    /* Math header file */
#include <conio.h>   /* Header file for the IO on the console */

#define N 1000       /* No. of cells:
                        The index of the array begins from i=1.
                        --> The size of array is N+1. */
#define NOD 10000    /* No. of spikes in the input raster plot */

unsigned long int RKCNT; /* No. of calling the Runge-Kutta intergration routine 
                            FLOW() to avoid the calculation error in time */

int SN,TN,PN;
int NOSi[N+1];
float Time,SPTime[N+1][20000];
float IISR[N+1],IPSR;
float h,BW;
char FINN[20],FOUTN[20];
FILE *FIN,*FOUT;

/* General Routines */

void KDE();                     /* A routine to obtain the individual and 
                                   population spiking rate using the kernel 
                                   density estimation */
float GaussKernel(float t);     /* A routine to return value of the Gaussian kernel */

void main()
{
    int i;

    /* Band width for the weighting function */
    BW=10.;

    /* Calculation Conditions to obtain the raster plot:
       h: RK time interval,
       TN: Transient time to eliminate the transient behavior,
       PN: Plotting time. */
    SN=10; h=1./SN; 
    TN=0; PN=2000;

    /* Input names of input and output files, and open them */
    printf("\n INPUT THE NAME OF THE INPUT FILE\n");scanf("%s",FINN);
    if((FIN = fopen(FINN,"r"))==NULL){printf("FILE OPEN ERROR...\n");exit(-1);}
    printf("\n INPUT THE NAME OF THE OUTPUT FILE\n");scanf("%s",FOUTN);
    if((FOUT = fopen(FOUTN,"w"))==NULL){printf("FILE OPEN ERROR...\n");exit(-1);}

    KDE();

    fclose(FIN); fclose(FOUT);
    printf("<***** End *****>\n");
    getche();
}

/* A routine to obtain the individual and population spiking rate using the 
   kernel density estimation */
void KDE()
{
    int i,j,k,ni,tmpi;
    float ftmp,ftmp2;

    /* Initialize No. of spike per each neuron */
    for(i=1;i<=N;i++) NOSi[i]=0;

    /* Read the spike time from the input raster plot */
    for(i=1;i<=NOD;i++) {
        fscanf(FIN,"%f %d",&Time,&ni);
        NOSi[ni]=NOSi[ni]+1;
        SPTime[ni][NOSi[ni]]=Time;
    }

    /* Calculate the individual and population spiking rate kernel estimation */
    for(i=1;i<=PN*SN;i++) {
        Time=((float)i+(float)TN*SN)*h;

        /* Calculate the individual spiking rate kernel estimation */
        for(j=1;j<=N;j++) {
            IISR[j]=0.;    /* Initialize */
            for(k=1;k<=NOSi[j];k++) {
                if(SPTime[j][k]>(Time-TN)) {
                    IISR[j]=IISR[j]+GaussKernel((Time-SPTime[j][k])/BW)/BW;
                }
                if(SPTime[j][k]>(Time+TN)) break;
            }
            IISR[j]=1000.*IISR[j];  /* 1000x: msec --> sec */
        }

        /* Calculate the population spiking rate kernel estimation */
        IPSR=0.;   /* Initialize */
        for(j=1;j<=N;j++) {
            IPSR=IPSR+IISR[j];
        }
        IPSR=IPSR/N;

        fprintf(FOUT,"%12.8f %12.8f ",Time,IPSR);
    }
}

/* A routine to return value of the rectangular kernel */
float RectKernel(float t)
{
    float KERNEL;
    
    if (fabs(t)<1.) KERNEL=0.5;
    else KERNEL=0.;
    
    return KERNEL;
}

/* A routine to return value of the triangular kernel */
float TriangKernel(float t)
{
    float KERNEL;
    
    if (fabs(t)<1.) KERNEL=1.-fabs(t);
    else KERNEL=0.;
    
    return KERNEL;
}

/* A routine to return value of the Gaussian kernel */
float GaussKernel(float t)
{
    float KERNEL;
    
    KERNEL=(1./sqrt(2.*M_PI))*exp(-t*t/2.);

    return KERNEL;
}