Temperature-Dependent Pyloric Pacemaker Kernel (Caplan JS et al., 2014)

 Download zip file 
Help downloading and running models
"... Here we demonstrate that biophysical models of channel noise can give rise to two kinds of recently discovered stochastic facilitation effects in a Hodgkin-Huxley-like model of auditory brainstem neurons. The first, known as slope-based stochastic resonance (SBSR), enables phasic neurons to emit action potentials that can encode the slope of inputs that vary slowly relative to key time constants in the model. The second, known as inverse stochastic resonance (ISR), occurs in tonically firing neurons when small levels of noise inhibit tonic firing and replace it with burstlike dynamics. ... our results show that possible associated computational benefits may occur due to channel noise in neurons of the auditory brainstem. ... "
1 . Caplan JS, Williams AH, Marder E (2014) Many parameter sets in a multicompartment model oscillator are robust to temperature perturbations. J Neurosci 34:4963-75 [PubMed]
Citations  Citation Browser
Model Information (Click on a link to find other models with that property)
Model Type: Neuron or other electrically excitable cell;
Brain Region(s)/Organism:
Cell Type(s): Stomatogastric ganglion (STG) pyloric dilator (PD) neuron; Stomatogastric ganglion (STG) pyloric neuron;
Channel(s): I A; I K,leak; I h; I K,Ca; I Sodium; I Calcium;
Gap Junctions:
Simulation Environment: C or C++ program;
Model Concept(s): Bursting; Parameter sensitivity; Temperature; Audition;
Implementer(s): Caplan, Jonathan S [joncaplan at gmail.com];
Search NeuronDB for information about:  I A; I K,leak; I h; I K,Ca; I Sodium; I Calcium;
#ifndef MODEL_H_
#define MODEL_H_
#endif /* MODEL_H_ */

//#define testing // Use this #define to enable some sanity checks. Turn off for speed.
#define desktop // Enables recording of state information like voltage, channel state and [Ca++].

using namespace std;
#include <vector>
#include <sys/time.h>

const int num_channels = 10;
const int num_neurons  =  2;

enum currents     { Na=0, K_AIS=1, CaT=2, CaS=3, nap=4, H=5, K_soma=6, KCa=7, A=8, proc=9, Leak_AIS=10, Leak_soma=11, Axial=12, Gap=13};
enum cellTypes    { AB   = 0, PD  = 1};
enum compartments { Soma = 0, AIS = 1}; // (AIS: Axon initial segment.)

struct neuron_stats {
    double mean_spikes_per_burst;
    double mean_burst_length;
    double mean_burst_frequency;
    double duty_cycle;
    double duty_cycle_by_spikes;
    double fraction_bursting; // Fraction of the time that a cell is bursting. Useful for irregular bursters where duty cycle can't be accurately calculated.
    bool   regular_bursting;  // true if the CV of inter-burst interval is <0.05 and there are at least 3 bursts. 
    double V_min;             // Minimum voltage reached after stabilization period.
    double V_max;             // Maximum  ... 

struct network_stats{
    neuron_stats AB_stats;
    neuron_stats PD_stats;
    int save_slots;

    vector<vector<vector<double> > > V_hist;

    #ifdef desktop
        vector<vector<vector<double> > > I_hist;
        vector<vector<vector<double> > > m_hist;
        vector<vector<vector<double> > > h_hist;
        vector<vector<double> >          Ca_hist;
    vector <double> AB_burst_onsets;  // Classified by A current activation.
    vector <double> PD_burst_onsets;
    vector <double> AB_burst_offsets;
    vector <double> PD_burst_offsets;
    vector <double> AB_spike_onsets;
    vector <double> PD_spike_onsets;
    vector <double> AB_bursts_on;    // Classified by spike times within burst. (Note difference from burst_onsets.)
    vector <double> AB_bursts_off;
    vector <double> PD_bursts_on;
    vector <double> PD_bursts_off;

    vector <vector<double> > g_max_all_adj; // Maximal conductance     adjusted for Q10 values.
    vector <vector<double> > g_max_all;     // Maximal conductance NOT adjusted for Q10 values.
    vector <double>          g_axial;
    double                   g_gap;
    vector <vector<double> > g_leaks;

// Function Prototypes.

network_stats    model(
    double delta_temperature, 
    double Q10_alphas[2][10], 
    double Q10_betas[2][10], 
    double Q10_g_bars[10],
    double Q10_Ca,
    double Q10_axial[2],
    double Q10_gap, 
    double Q10_leak,
    double sim_length,
    double dt,
    double dt_hist,  /* Sampling interval for saving state. */
    bool   cluster,
    bool   randomize_initial_conductances,
    int    g_max_set,
    bool   constant_Ca,
    int    rng_seed
    //, int save_slots);

void    oneStep(int last_step, int next_step, double dt);

double  sigmoid(double a, double b, double c, double  V);

double  tau_sigmoid(double a, double b, double c, double d, double e, double V);

int     get_channel_state(int neuron, int channel, double V, double Calcium, double old_m, double old_h, double dt, double Q_m_alpha, double Q_h_alpha, double Q_m_beta, double Q_h_beta, double * act, double * inact);

double  my_mean (vector <double> input, double default_for_div0);
double  standard_deviation(vector <double> input);

bool    AlmostEqual2sComplement(float A, float B, int maxUlps);

int     difftime_ms(timeval t1, timeval t2);