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

 Download zip file 
Help downloading and running models
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.
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;
Gap Junctions:
Receptor(s): GabaA; GabaB; AMPA;
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];
Search NeuronDB for information about:  Thalamus geniculate nucleus/lateral principal GLU cell; Thalamus reticular nucleus GABA cell; GabaA; GabaB; AMPA; Gaba; Glutamate;
#ifndef min
#define min(x,y) ( ((x) < (y)) ? (x) : (y) )
#define max(x,y) ( ((x) > (y)) ? (x) : (y) )

#ifndef heav
#define heav(x) ( ((x) >= (0.0)) ? (1.0) : (0.0) )

#ifndef linthr
#define linthr(x) ( ((x) > (0.0)) ? (x) : (0.0) )

#ifndef Pi
#define Pi 3.1415926535897931

#ifndef TwoPi
#define TwoPi 6.2831853071795862

#ifndef Gammaf
#define Gammaf(VV, theta, sigma) ( 1.0/(1.0+exp(-(VV-(theta))/(sigma))) )

#define Mpar 1000
#define MIapp 10
#define Mline 500
#define Mword 50
#define Mdatraw 200
#define Mdatcol 80

/* Structure Declaration */

typedef struct cont_val{
  double valmin, valmax, val;
  int spsth, smeasure, nval, ival;
} cont_val;

typedef struct scan_val{
  double parmin, parmax, par_ar[Mpar];
  int npar, ipar, npt;
  char scan_type, par1[Mword], par2[Mword], par_type;
} scan_val;

typedef struct dat_str{
  char datar[Mdatraw][Mdatcol];
  int n_datar;
} dat_str;

typedef struct fl_st{
  FILE *in, *tmp, *nps, *out, *col, *res;
} fl_st;

typedef struct syn_kinetics{
  double tau1, tau2;
  double power;
} syn_kinetics;

typedef struct g_td{
  double g, td;
  int ntd;
} g_td;

typedef struct syn_strength_delay{
  g_td ltp, ltn, lep, len, lia, lib;
  g_td ptp, ptn, pep, pen, pia, pib;
  g_td ra, rb;
  double theta;
  double gL, VL, VK, Vthr, taut, fgb, fst;
  double thetaa, sadapt;
  double tau_act_del;
  double tauact, taudeact, rauact, raudeact;
  double **tstim, **Ix, slope, width;
  int *ntstim;
  int ntd_act_del;
} syn_strength_delay;

typedef struct net_par{
  int nvar, npop;
  double *ts, *ff, *alphap;
  double PLtshift;
  char pstim, rstim;
  int nnts, ints;
  syn_kinetics AMPA, NMDA, GABAA, GABAB;
  syn_strength_delay LT, LE, LI, PT, PE, PI, R;
  int admodel;
  double sigmaa;
} net_par;

typedef struct var_name{
  int iltv, iltb, ilta, ilti, iltp, ilep, ilia;
  int iptv, iptb, ipta, ipti, iptp, ipep, ipia;
  int iri, ira, jrb, irb;
} var_name;

typedef struct run_par{
  double epsilon;
  double deltat;
  double max_delay;
  int nt, twrite, tmcol;
  int sm;
  int nstore, sptr;
  int nwritev, *nwritevar, nwritep, *nwritepar;
  char method, smforce;
} run_par;

typedef struct save_str{
  double **av_save;
  int ncol, ntsave, itsave;
} save_str;

typedef struct psth_str{
  double **psth_res;
  int npsth, nmeasure;
} psth_str;

typedef struct func_return{
  double fn;
} func_return;

typedef struct transfer_to_func{
  cont_val *cval;
  scan_val *svam;
  scan_val *sval;
  psth_str *ps;
  fl_st    *fl;
} transfer_to_func;

typedef void (cal_ad)(double Mar_MxT, double Varbar_ixtv, double *Varbar_ixtb,
     double *Varbar_ixta, double Varbar_ixti, int sptr, syn_strength_delay
     *nxT, net_par *netpar, double epsilon, double *kout_ixtb, 
     double *kout_ixta, double *kout_ixti, run_par *runpar, fl_st fl);

/* Function Declaration */

void line_scan_equal_read(char par1[Mword], char par2[Mword], int *npt,
     double *parmin, double *parmax, int *npar, double par_ar[Mpar],
     char *par_type, fl_st fl);
void line_scan_unequal_read(char par1[Mword], char par2[Mword], int *npt,
     double *parmin, double *parmax, int *npar, double par_ar[Mpar],
     char *par_type, fl_st fl);
void read_file_in(dat_str *datstr, char scan_type, fl_st fl);
int process_line(char *par1, char *par2, int npt, char par_type, double par_ar,
    char line[], FILE *ftmp);
void update_file(char *par1, char *par2, int npt, char par_type, double par_ar,
     dat_str *datstr, fl_st fl);
void one_par(fl_st fl, char scan_type, psth_str *ps);
void read_input(net_par *netpar, run_par *runpar, fl_st fl);
void determine_sm(run_par *runpar, char scan_type, fl_st fl);
void find_max_delay(net_par *netpar, run_par *runpar, fl_st fl);
void calculate_ntd(net_par *netpar, run_par *runpar, fl_st fl);
void assign_var_name(var_name *varname, fl_st fl);
void in_con(net_par *netpar, run_par *runpar, var_name *varname, 
     double **Varbar, fl_st fl);
void n_run(net_par *netpar, run_par *runpar, var_name *varname,
     double **Varbar, save_str *sv, fl_st fl);
double determine_stim(double t_in_period, int ntstim, double *tstim,
       double *Ix);
double gxudel(g_td *gtd, double *array, run_par *runpar, fl_st fl);
double delay(double *array, int nn, run_par *runpar, fl_st fl);
void pr_fct(net_par *netpar, run_par *runpar, var_name *varname,
     double **Varbar, double *Mar, double time, int it, save_str *sv,
     fl_st fl);
cal_ad calculate_adapt_a;
cal_ad calculate_adapt_b;
cal_ad calculate_adapt_c;
cal_ad calculate_adapt_d;
void one_integration_step(net_par *netpar, run_par *runpar, var_name *varname,
     double **Varbar, double *kin, double *kout, double delt, int it, 
     double time, double *Varc, double *Mar, fl_st fl);
void ntd_cal(g_td *gtd, char *syn_del_str, run_par *runpar, fl_st fl);
double lininter(double x1, double x2, double xc, double y1, double y2);
void one_stim_read(char *xTch, int nts, syn_strength_delay *xT, double ff,
     fl_st fl);
void one_stim_calculate(char *xTch, int nts, syn_strength_delay *xT, double ff,
     fl_st fl);
void one_stim_width(char *xTch, int nts, syn_strength_delay *xT, double ff,
     fl_st fl);
void one_stim_rune(char *xTch, int nts, syn_strength_delay *xT, double ff,
     fl_st fl);
void LT_to_PT_stim_copy(int nts, syn_strength_delay *LT, syn_strength_delay
    *PT, double alphap, double PLtshift, fl_st fl);
void one_stim_write(char *xTch, int nts, syn_strength_delay *xT, fl_st fl);
void create_stimulus_array(net_par *netpar, run_par *runpar, fl_st fl);
void free_stimulus_array(net_par *netpar, run_par *runpar, fl_st fl);
double** dptr_vector(long nl, long nh);
void free_dptr_vector(double **dptr, long nl, long nh);

void generate_struct_psth(save_str *sv, run_par *runpar, fl_st fl);
void prt_res(double mpar, double lpar, char scan_type, psth_str *ps,
     fl_st fl);

void contour_plot_cal(cont_val *cval, scan_val *svam, scan_val *sval,
     psth_str *ps, fl_st fl);
double contour_dot_func(double xx, void *ptr);
void update_and_run_two_par(scan_val *svam, scan_val *sval, psth_str *ps,
     fl_st fl);

Loading data, please wait...