Mechanisms of very fast oscillations in axon networks coupled by gap junctions (Munro, Borgers 2010)

 Download zip file 
Help downloading and running models
Accession:120907
Axons connected by gap junctions can produce very fast oscillations (VFOs, > 80 Hz) when stimulated randomly at a low rate. The models here explore the mechanisms of VFOs that can be seen in an axonal plexus, (Munro & Borgers, 2009): a large network model of an axonal plexus, small network models of axons connected by gap junctions, and an implementation of the model underlying figure 12 in Traub et al. (1999) . The large network model consists of 3,072 5-compartment axons connected in a random network. The 5-compartment axons are the 5 axonal compartments from the CA3 pyramidal cell model in Traub et al. (1994) with a fixed somatic voltage. The random network has the same parameters as the random network in Traub et al. (1999), and axons are stimulated randomly via a Poisson process with a rate of 2/s/axon. The small network models simulate waves propagating through small networks of axons connected by gap junctions to study how local connectivity affects the refractory period.
Reference:
1 . Munro E, Börgers C (2010) Mechanisms of very fast oscillations in networks of axons coupled by gap junctions. J Comput Neurosci 28:539-55 [PubMed]
Citations  Citation Browser
Model Information (Click on a link to find other models with that property)
Model Type: Realistic Network; Neuron or other electrically excitable cell; Axon;
Brain Region(s)/Organism: Hippocampus;
Cell Type(s): Hippocampus CA3 pyramidal GLU cell;
Channel(s): I Na,t; I K;
Gap Junctions: Gap junctions;
Receptor(s):
Gene(s):
Transmitter(s):
Simulation Environment: C or C++ program;
Model Concept(s): Oscillations; Detailed Neuronal Models; Axonal Action Potentials; Epilepsy; Conduction failure;
Implementer(s): Munro, Erin [ecmun at math.bu.edu];
Search NeuronDB for information about:  Hippocampus CA3 pyramidal GLU cell; I Na,t; I K;
#include <stdlib.h>
#include <stdio.h>
#include "my_math.h"
#include "poisson_stim.h"

static int cells; // number of cells
static double *last_stim;
static double time_step;
static double stim; // amount of stimulation (typically nA)
static double stim_length;
static double lambda;
static int record_stim = 0;
static FILE* outp;

void poisson_stim_setup(int n_cells, double dt, double I, double stim_l, 
			double rate){
  extern int cells;
  extern double *last_stim;
  extern double time_step;
  extern double stim;
  extern double stim_length;

  cells = n_cells;
  last_stim = (double*)calloc(n_cells,sizeof(double));
  if(last_stim == NULL){
    fprintf(stderr,"Calloc failed to allocated memory for Poisson stim" 
	    "database.\n");
  }
  time_step = dt;
  stim = I;
  stim_length = stim_l;
  lambda = rate;
}

double poisson_stim_get_time_step(){
  extern double time_step;
  return time_step;
}

void poisson_stim_set_time_step(double dt){
  extern double time_step;
  time_step = dt;
}

double poisson_stim_get_stim(){
  extern double stim;
  return stim;
}

void poisson_stim_set_stim(double I){
  extern double stim;
  stim = I;
}

double poisson_stim_get_stim_length(){
  extern double stim_length;
  return stim_length;
}

void poisson_stim_set_stim_length(double stim_l){
  extern double stim_length;
  stim_length = stim_l;
}

double poisson_stim_get_lambda(){
  extern double lambda;
  return lambda;
}

void poisson_stim_start_recorder(char *filename, char *mode){
  extern int record_stim;
  extern FILE* outp;

  record_stim = 1;
  outp = fopen(filename,mode);
}

void poisson_stim_stop_recorder(){
  extern int record_stim;
  extern FILE* outp;

  record_stim = 0;
  fclose(outp);
}

void poisson_stim_reset(){
  // reset internal database to 0
  extern double *last_stim;
  int i;

  for(i=0;i<cells;i++){
    last_stim[i] = 0;
  }
}

void poisson_stim_dismantle_database(){
  extern double *last_stim;
  free(last_stim);
}

double poisson_stim(int id, double t){
  extern double *last_stim;
  extern double stim;
  extern FILE* outp;
  extern int record_stim;
  extern double stim_length;
  
  if((double)rand()/RAND_MAX < time_step*lambda*exp(-time_step*lambda)){
    if(record_stim){
      fprintf(outp,"%d\t%g\n",id,t);
    }
    *(last_stim+id) = t;
    return stim;
  }else if(last_stim[id] != 0 && t-last_stim[id] <= stim_length){
    return stim;
  }else{
    return 0;
  }
}