Model for K-ATP mediated bursting in mSNc DA neurons (Knowlton et al 2018)

 Download zip file 
Help downloading and running models
Accession:227678
"Burst firing in medial substantia nigra dopamine (mSN DA) neurons has been selectively linked to novelty-induced exploration behavior in mice. Burst firing in mSN DA neurons, in contrast to lateral SN DA neurons, requires functional ATP-sensitive potassium channels (K-ATP) both in vitro and in vivo. However, the precise role of K-ATP channels in promoting burst firing is un-known. We show experimentally that L-type calcium channel activity in mSN DA neurons en-hances open probability of K-ATP channels. We then generated a mathematical model to study the role of Ca2+ dynamics driving K-ATP channel function in mSN DA neurons during bursting. ..."
Reference:
1 . Knowlton C, Kutterer S, Roeper J, Canavier CC (2018) Calcium dynamics control K-ATP channel-mediated bursting in substantia nigra dopamine neurons: a combined experimental and modeling study. J Neurophysiol 119:84-95 [PubMed]
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: Basal ganglia;
Cell Type(s): Substantia nigra pars compacta DA cell;
Channel(s): ATP-senstive potassium current; I Calcium; I Sodium; Ca pump; I K;
Gap Junctions:
Receptor(s): NMDA;
Gene(s):
Transmitter(s):
Simulation Environment: C or C++ program;
Model Concept(s): Calcium dynamics; Ion Channel Kinetics; Bursting;
Implementer(s): Canavier, CC; Knowlton, Christopher [cknow1 at lsuhsc.edu];
Search NeuronDB for information about:  Substantia nigra pars compacta DA cell; NMDA; I K; I Sodium; I Calcium; ATP-senstive potassium current; Ca pump;
/* euler integrator with noise that can accept same input/ouput as radau5 for minimal changes
namely - it will take as inputs n (iteration), deriv_, x (time), state, xend, state, out_
and output via out_
because everything is in c we can just pull up deriv_ and out_ form out.c and atp.c repsectively with include
*/
#include <stdio.h>
#include <math.h>
#include <stdlib.h>
#include "atp.h"
#include "atp.c"
#include <time.h> //for random seed
double current[C];
double iapp;

int main(int argc, char** argv){
   double dx[N];
   double y[N];
   double noise[N];
   double x;
   double isi;
   double v0=-100;
   double TIME = 0;
   double step;
   double sinf;
   double P[2];
   if(argc > 2){
      P[0] = atof(argv[1]);
      P[1] = atof(argv[2]);
   }
   int n = 0;
   int spikes = 1-PRINT_STATES;
   x = (double) n;
   iapp = 0;
   double h = 1.0e-2; //tiny step because euler, but small model so doesn't take long
   int i;
   for(i=0;i<N;i++) noise[i] = 0.0;
   noise[V1]=NOISE;
   scan_(y,P[1]);
   #ifndef S_HALF
     double S_HALF = P[1];
   #endif

   time_t tseed;
   double caavg = 0;
   while(x < ENDTIME){
      deriv_(&n, &x, y, dx,P);
      if(n%100==0&&!spikes&&x>WARMUP) printf("%e ", (x-WARMUP)*1e-3);
      step = 0.5;
      for(i=0;i<N;i++){
         if(spikes&&i==Ca0&&x>WARMUP) caavg +=y[i];
         y[i] += step*h*(dx[i]+noise[i]*rand_gauss()); //rand_gauss is defined in atp.c
         if(n%100==0&&!spikes&&x>WARMUP) printf("%e ", y[i]);       
      }
      //if(y[0]!=y[0]) break;
      if(n%100==0&&!spikes&&x>WARMUP){
         sinf = 1.0/(1.0+pow(S_HALF/y[A],spower));
         printf("%e ", sinf);
         printf("\n");
      }
      x+=h*step;
      isi+=h*step;
      n++;
      if(v0 > 0 && 0 > y[0] && isi > 10){
        if(spikes && x > WARMUP){
          printf("%e  %e  %e\n",x-WARMUP, 0.001*isi, h*step*caavg/isi);
          caavg = 0;
          fflush(stdout);
        }
        isi = 0;
      }
      v0 = y[0];
   }
   dump_(y);
   return 0;
}

Loading data, please wait...