Coding of stimulus frequency by latency in thalamic networks (Golomb et al 2005)

 Download zip file 
Help downloading and running models
Accession:58582
The paper presents models of the rat vibrissa processing system including the posterior medial (POm) thalamus, ventroposterior medial (VPm) thalamus, and GABAB- mediated feedback inhibition from the reticular thalamic (Rt) nucleus. A clear match between the experimentally measured spike-rates and the numerically calculated rates for the full model occurs when VPm thalamus receives stronger brainstem input and weaker GABAB-mediated inhibition than POm thalamus.
Reference:
1 . Golomb D, Ahissar E, Kleinfeld D (2006) Coding of stimulus frequency by latency in thalamic networks through the interplay of GABAB-mediated feedback and stimulus shape. J Neurophysiol 95:1735-50 [PubMed]
Model Information (Click on a link to find other models with that property)
Model Type: Realistic Network;
Brain Region(s)/Organism: Thalamus;
Cell Type(s): Thalamus geniculate nucleus/lateral principal GLU cell; Thalamus reticular nucleus GABA cell;
Channel(s):
Gap Junctions:
Receptor(s): GabaA; GabaB; AMPA;
Gene(s):
Transmitter(s): Gaba; Glutamate;
Simulation Environment: C or C++ program;
Model Concept(s): Simplified Models; Rate-coding model neurons;
Implementer(s): Golomb, David [golomb at bgu.ac.il];
Search NeuronDB for information about:  Thalamus geniculate nucleus/lateral principal GLU cell; Thalamus reticular nucleus GABA cell; GabaA; GabaB; AMPA; Gaba; Glutamate;
/* This program plots the stimuli for LT and PT */
#include <stdio.h>
#include <math.h>
#include <string.h>
#include "nr.h"
#include "stm.h"

#define Mline 200

main(int argc, char*argv[])
{
  net_par netpar;
  FILE *fin, *flt, *fpt, *ffr;
  int itstim, ifr;
  char suffix[3]="a1", file_name[30], line[Mline];

  if (argc >= 2) strcpy(suffix,argv[1]);

  fin = fopen(strcat(strcpy(file_name,"tlp.n." ),suffix), "r");
  flt = fopen(strcat(strcpy(file_name,"stm.flt."),suffix), "w");
  fpt = fopen(strcat(strcpy(file_name,"stm.fpt."),suffix), "w");
  ffr = fopen(strcat(strcpy(file_name,"stm.ffr."),suffix), "w");

  while (fgets(line, Mline, fin) != NULL)
  { 
    if (line[6] == 'p') break;
  }

  sscanf(line, "INPUT pstim=%c rstim=%c nnts=%d\n", &netpar.pstim,
  &netpar.rstim, &netpar.nnts);
  fgets(line, Mline, fin);
  /* printf("INPUT pstim=%c rstim=%c nnts=5d\n", netpar.pstim, netpar.rstim,
  netpar.nnts); */
  sscanf(line, "nts=%d ts=%lf ff=%lf alphap=%lf\n", &netpar.nts, &netpar.ts,
  &netpar.ff, &netpar.alphap);
  /* printf("nts=%d ts=%lf ff=%lf alphap=%lf\n", netpar.nts, netpar.ts,
     netpar.ff, netpar.alphap); */

  fscanf(fin, "LT: ntstim=%d", &netpar.LT.ntstim);
  netpar.LT.tstim = dvector(0, netpar.LT.ntstim+1);
  netpar.LT.Ix = dvector(0, netpar.LT.ntstim+1);

  netpar.LT.tstim[0] = 0.0;
  netpar.LT.tstim[netpar.LT.ntstim+1] = 1000.0 / netpar.ff;
  fscanf(fin, " tstim=%lf", &netpar.LT.tstim[1]);
  for (itstim=2; itstim<=netpar.LT.ntstim; itstim++)
    fscanf(fin, " %lf", &netpar.LT.tstim[itstim]);
  fscanf(fin, "\n");

  netpar.LT.Ix[0] = 0.0;
  netpar.LT.Ix[netpar.LT.ntstim+1] = 0.0;
  fscanf(fin, "                Ix=%lf", &netpar.LT.Ix[1]);
  for (itstim=2; itstim<=netpar.LT.ntstim; itstim++)
    fscanf(fin, " %lf", &netpar.LT.Ix[itstim]);
  fscanf(fin, "\n");

  if (netpar.pstim == 'i')
  {
    fscanf(fin, "PT: ntstim=%d", &netpar.PT.ntstim);
    netpar.PT.tstim = dvector(0, netpar.PT.ntstim+1);
    netpar.PT.Ix = dvector(0, netpar.PT.ntstim+1);

    netpar.PT.tstim[0] = 0.0;
    netpar.PT.tstim[netpar.PT.ntstim+1] = 1000.0 / netpar.ff;
    fscanf(fin, " tstim=%lf", &netpar.PT.tstim[1]);
    for (itstim=2; itstim<=netpar.PT.ntstim; itstim++)
      fscanf(fin, " %lf", &netpar.PT.tstim[itstim]);
    fscanf(fin, "\n");

    netpar.PT.Ix[0] = 0.0;
    netpar.PT.Ix[netpar.PT.ntstim+1] = 0.0;
    fscanf(fin, "                Ix=%lf", &netpar.PT.Ix[1]);
    for (itstim=2; itstim<=netpar.PT.ntstim; itstim++)
      fscanf(fin, " %lf", &netpar.PT.Ix[itstim]);
    fscanf(fin, "\n");
  }
  else if (netpar.pstim == 'p')
  {
    netpar.PT.ntstim = netpar.LT.ntstim;
    netpar.PT.tstim = dvector(0, netpar.PT.ntstim+1);
    netpar.PT.Ix = dvector(0, netpar.PT.ntstim+1);

    for (itstim=0; itstim<=netpar.PT.ntstim+1; itstim++)
    {
      netpar.PT.tstim[itstim] = netpar.LT.tstim[itstim];
      netpar.PT.Ix[itstim] = netpar.alphap * netpar.LT.Ix[itstim];
    }
  }
  else
  {
    printf("wrong pstim=%c\n", netpar.pstim);
    exit(0);
  }


  for (itstim=0; itstim<=netpar.LT.ntstim+1; itstim++)
    fprintf(flt, "%lf %lf\n", netpar.LT.tstim[itstim] / 1000.0,
    netpar.LT.Ix[itstim]);

  for (itstim=0; itstim<=netpar.PT.ntstim+1; itstim++)
    fprintf(fpt, "%lf %lf\n", netpar.PT.tstim[itstim] / 1000.0,\
    netpar.PT.Ix[itstim]);

  for (ifr=1; ifr<=30; ifr++)
  {
    for (itstim=0; itstim<=netpar.LT.ntstim; itstim++)
      fprintf(ffr, "%lf %lf\n", (ifr-1) * 0.125 + netpar.LT.tstim[itstim] /
      1000.0, netpar.LT.Ix[itstim]);
  }

  fclose(fin);
  fclose(flt);
  fclose(fpt);
  fclose(ffr);
}

Loading data, please wait...