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

 Download zip file 
Help downloading and running models
"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. ..."
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]
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: 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;
Simulation Environment: C or C++ program;
Model Concept(s): Calcium dynamics; Ion Channel Kinetics; Bursting;
Implementer(s): Canavier, CC; Knowlton, Christopher [cknow1 at];
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;
   #ifndef S_HALF
     double S_HALF = P[1];

   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;
         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;
         sinf = 1.0/(1.0+pow(S_HALF/y[A],spower));
         printf("%e ", sinf);
      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;
        isi = 0;
      v0 = y[0];
   return 0;