Cerebellar gain and timing control model (Yamazaki & Tanaka 2007)(Yamazaki & Nagao 2012)

 Download zip file 
Help downloading and running models
Accession:144416
This paper proposes a hypothetical computational mechanism for unified gain and timing control in the cerebellum. The hypothesis is justified by computer simulations of a large-scale spiking network model of the cerebellum.
References:
1 . Yamazaki T, Tanaka S (2007) A spiking network model for passage-of-time representation in the cerebellum. Eur J Neurosci 26:2279-92 [PubMed]
2 . Yamazaki T, Nagao S (2012) A computational mechanism for unified gain and timing control in the cerebellum. PLoS One 7:e33319 [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 Purkinje GABA cell; Cerebellum interneuron granule GLU cell; Cerebellum golgi cell; Cerebellum deep nucleus neuron;
Channel(s):
Gap Junctions:
Receptor(s):
Gene(s):
Transmitter(s):
Simulation Environment: C or C++ program;
Model Concept(s): Spatio-temporal Activity Patterns; Detailed Neuronal Models; Learning; Sensory processing;
Implementer(s): Yamazaki, Tadashi ;
Search NeuronDB for information about:  Cerebellum Purkinje GABA cell; Cerebellum interneuron granule GLU cell;
#include<stdio.h>
#include<stdlib.h>
#include<math.h>

#define R_N2	(100)
#define N	((32)*(32)) // number of granule-cell clusters
#define T      	2000
#define DT	1.0
#define T_ALL	((int)((T)/(DT)))
#define X_PKJ	16
#define Y_PKJ	1
#define N_PKJ	((X_PKJ)*(Y_PKJ))
#define X_GR	(10*32)
#define Y_GR    (10*32)
#define N_GR	((X_GR)*(Y_GR))

double **w_pkjpf, *ex;

void init_w(void)
{
  int i;
  w_pkjpf = (double **)malloc(N_PKJ*sizeof(double *));

  for(i = 0; i < N_PKJ; i++){
    w_pkjpf[i] = (double *)malloc(N_GR*sizeof(double));
  }
}
void free_w(void)
{
  int i;

  for(i = 0; i < N_PKJ; i++){
    free(w_pkjpf[i]);
  }
  free(w_pkjpf);
}
int read_w(char *filename)
{
  FILE *file;
  int i, j;
  char buf[1024];

  file = fopen(filename, "r");
  if (!file){
    fprintf(stderr, "cannot open %s\n", filename);
    return 1;
  }
  for(i = 0; i < N_PKJ; i++){
    for(j = 0; j < N_GR; j++){
      fgets(buf, 1024, file);
      w_pkjpf[i][j] = atof(buf);
    }
  }
  fclose(file);
  return 0;
}

void print_w(char *in, char *out)
{
  FILE *fin, *fout;
  char buf[1024], s[1024];
  int i, t, j;

  fin = fopen(in, "r");
  if (!fin){
    fprintf(stderr, "cannot open %s\n", in);
  }
  fout = fopen(out, "w");
  while(fgets(buf, 1024, fin)){
    sscanf(buf, "%s %d", s, &j);
    t = (int)(atof(s) / DT);
    if (t >= T){
      break;
    }
    if (j%100 == 0){
      for(i = 0; i < N_PKJ; i++){
	if (w_pkjpf[i][j] != 0){
	  fprintf(fout, "%d %f\n", t, w_pkjpf[i][j]);
	}
      }
    }
  }
  fclose(fin);
  fclose(fout);
}

int main(int argc, char *argv[])
{
  if (argc < 4){
    fprintf(stderr, "usage: %s <i:w.?> <i:gr.spk.a?> <o:w.dat>\n", argv[0]);
    exit(1);
  }

  init_w();
  read_w(argv[1]);
  print_w(argv[2], argv[3]);
  free_w();

  return 0;
}

Loading data, please wait...