ModelDB is moving. Check out our new site at https://modeldb.science. The corresponding page is https://modeldb.science/84612.

Differential modulation of pattern and rate in a dopamine neuron model (Canavier and Landry 2006)

 Download zip file 
Help downloading and running models
Accession:84612
"A stylized, symmetric, compartmental model of a dopamine neuron in vivo shows how rate and pattern can be modulated either concurrently or differentially. If two or more parameters in the model are varied concurrently, the baseline firing rate and the extent of bursting become decorrelated, which provides an explanation for the lack of a tight correlation in vivo and is consistent with some independence of the mechanisms that generate baseline firing rates versus bursting. ..." See paper for more and details.
Reference:
1 . Canavier CC, Landry RS (2006) An increase in AMPA and a decrease in SK conductance increase burst firing by different mechanisms in a model of a dopamine neuron in vivo. J Neurophysiol 96:2549-63 [PubMed]
Model Information (Click on a link to find other models with that property)
Model Type: Neuron or other electrically excitable cell; Electrogenic pump;
Brain Region(s)/Organism:
Cell Type(s): Substantia nigra pars compacta DA cell;
Channel(s): I L high threshold; I N; I T low threshold; I A; I K; I K,Ca; I Sodium; I Calcium; Na/K pump;
Gap Junctions:
Receptor(s): AMPA; NMDA; Gaba;
Gene(s):
Transmitter(s):
Simulation Environment: NEURON;
Model Concept(s): Activity Patterns; Bursting; Detailed Neuronal Models; Intrinsic plasticity; Calcium dynamics; Sodium pump;
Implementer(s): Kuznetsova, Anna [anna.kuznetsova at utsa.edu];
Search NeuronDB for information about:  Substantia nigra pars compacta DA cell; AMPA; NMDA; Gaba; I L high threshold; I N; I T low threshold; I A; I K; I K,Ca; I Sodium; I Calcium; Na/K pump;
/
CanavierLandry2006
in_vitro
README
ampasyn.mod *
cabalan.mod *
cachan.mod *
capump.mod *
hh3.mod *
kca.mod *
leak.mod *
nabalan.mod *
nmdasyn.mod *
pump.mod *
stim.mod *
fig10a.hoc
fig10a.ses
fig10AMPA.dat
fig10b.hoc
fig10b.ses
fig10c.hoc
fig10c.ses
fig10NMDA.dat
fig11b1.hoc
fig11b1.ses
fig11b2.hoc
fig11b2.ses
fig4b1.hoc
fig4b1.ses
fig4b2.hoc
fig4b2.ses
fig4b3.hoc
fig4b3.ses
fig4bAMPA.dat
fig4bNMDA.dat
fig5a.hoc
fig5a.ses
fig5AMPA.dat
fig5b.hoc
fig5b.ses
fig5NMDA.dat
fig9a1.hoc
fig9a1.ses
fig9a2.hoc
fig9a2.ses
fig9a3.hoc
fig9a3.ses
fig9aAMPA.dat
fig9aNMDA.dat
fig9b1.hoc
fig9b1.ses
fig9b2.hoc
fig9b2.ses
fig9b3.hoc
fig9b3.ses
fig9bAMPA.dat
fig9bNMDA.dat
mosinit.hoc
Receptor.cpp
                            
/*Reproduces Fig.11B1*/

/* Driver Program for Midbrain Dopaminergic Neuron model */

/* The following command loads the standard run library functions into
 * the simulator.  These library functions are used to initialize the
 * simulator, begin and end simulations, and plot variables during a
 * simulation. */
timecon = 0
back= 0                         /* 1 switch for running in the background */
sakmann=0
if(!back)load_file("nrngui.hoc")
verbose=0
v_init = -67.24827
vcseries = 0
clamp = 0                     /* switch for voltage clamp*/
restart = 0                      /* switch for initializing from state.old */
tstart = 0
if(vcseries) tstop = 800 else tstop = 5000
if(clamp && !vcseries) tstop= 600
if(timecon) tstop = 800
nsyn = 1			/* The number of synapses */
soma_len= 25.0 
soma_diam= 15.0
ndend=4
nbranch=2
dend_diam= 1.5  /* 1.5 need to make dendrite taper */
prox_diam= 3.0  /* 3.0 need to make dendrite taper */
taper = 1.0
dend_len = 500.0
prox_len = 150.0
Dtmax =   1.0  
Dt =   1.00
if(timecon) Dtmax = 1.0 
dt = 5e-4  
if(timecon) dt = 0.01
nainit=  4.000
vsolder=v_init
vdolder=v_init
vsold=v_init
vdold=v_init
ourgampa=0.0
ourPnmda=0.0

create dummy,soma, prox[ndend], dend[nbranch*ndend]	/* Create all of the cell's sections */
global_ra = 400
forall Ra = global_ra
global_cm = 1.0
forall cm = global_cm
g_celsius = 35
celsius = g_celsius
forall ion_style("na_ion", 2,2,0,0,0)
access soma			/* All default references are to soma */

objectvar syn[nsyn]		/* Declare the object variables for
				 * the three synapses */
objectvar stim
objectvar vc
objref cvode
objref ff
objref vec1,vec2
cvode = new CVode(1) /* 0 for clamp*/
x= cvode.active(1)
ff = new File()
vec1 = new Vector(900001)
ff.ropen("fig9bAMPA.dat")
n = vec1.scanf(ff, 900000)
ff.close()
ff = new File()
vec2 = new Vector(900001)
ff.ropen("fig9bNMDA.dat")
n = vec2.scanf(ff, 900000)
ff.close()
samplestep = 0.1
objref tvec1,tvec2
tvec1 = vec1.c.indgen(samplestep)
tvec2 = vec2.c.indgen(samplestep)
vec1.play(&ourgampa,tvec1,1)
vec2.play(&ourPnmda,tvec2,1)

proc init_cell() {
/* First set all of the dimensions and insert the channels into each
 * section. */
    dummy{
      L=1
      d=1
    }
    soma {
	nseg = 1		/* # of compartments */
	diam = soma_diam		/* Set the diameter of the soma (in um) */
	L = soma_len			/* Set the length of the soma (in um) */
           

	{insert nabalan nainit_nabalan = 3.994503 f_nabalan = 4.0}
        {insert hh3 gkabar_hh3 = 100.0e-6
          miv_hh3 = 44.6 hiv_hh3 = 66.8 htv1_hh3 = 39.0 htv2_hh3 = 59.0}
        {insert pump ipumpmax_pump = 0.0036}
        {insert leak gcabar_leak = 0.6e-6 ggabaa_leak = 1700.0e-6 /*when changing
         change the corresponding parameter in dend and prox with ratio g_prox=g_dend=g_soma/10 */}
        {insert cabalan cainit_cabalan = 9.5573876e-05 }
        {insert cachan}
        {insert kca gkbar_kca = 800.0e-6}
        {insert capump}
if (!clamp) {
        istim = 0.0
        stim = new MyIClamp(.5)
        {stim.del = 0 stim.dur = 200000 stim.amp = 0.0  /*in nA, -0.180nA=-180pA*/
         stim.amp2 = 0}
if(timecon) stim.dur = 600  /*(ms)*/
if (sakmann) stim.amp2 = -0.050
if(timecon) stim.amp2 = -0.020 
if(timecon) stim.del = 100
     } else {
	vc = new SEClamp(.5)
        if(!vcseries) vc.amp1 = -60.0 else vc.amp1 = -130
	vc.dur1 =  50
	vc.amp2 = -30.0
	vc.dur2 = 350
	vc.amp3 = -60.0
	vc.dur3 = 201
    }

	pt3dclear()
	pt3dadd(0,0,0,soma_diam)
	pt3dadd(soma_len,0,0,soma_diam)

    }

    for i = 0, ndend-1 prox[i] {
	nseg = 1	/* # of compartments */
	L = prox_len			/* Set the length of the dendrite (in um) */
     
	{insert nabalan nainit_nabalan = 6.3299964 f_nabalan = 1.0}
	{insert hh3 gkabar_hh3 = 300.0e-6
          miv_hh3 = 34.6 hiv_hh3 = 56.8 htv1_hh3 = 29.0 htv2_hh3 = 49.0}
	{insert pump ipumpmax_pump = 0.0072}
	{insert leak gcabar_leak = 0.0e-6 ggabaa_leak = 170.0e-6 }
        {insert nmda}
        {insert ampa ratio_ampa = 1}
          
forall cm = global_cm
forall Ra = global_ra
g_celsius = 35
    }
 
     for i = 0, ndend-1 prox[i] {
      prox[i] for (x,0) { 
        setpointer caisoma_nmda(x), soma.cai(0.5)
        setpointer nmdasyn_nmda(x), ourPnmda 
        setpointer ampasyn_ampa(x), ourgampa
	  }
        } 
         
      for i = 0, nbranch*ndend - 1 dend[i] {
	nseg = 1	/* # of compartments */
	L = dend_len - prox_len 			/* Set the length of the dendrite (in um) */
        
	{insert nabalan nainit_nabalan = 6.0392485 f_nabalan = 1.0}
	{insert hh3 gkabar_hh3 = 1000.0e-6
           miv_hh3 = 26.6 hiv_hh3 = 48.8 htv1_hh3 = 21 htv2_hh3 = 41.0}
        {insert pump ipumpmax_pump = 0.009}
        {insert leak gcabar_leak = 0.0e-6 ggabaa_leak = 170.0e-6 }
        {insert nmda}
	{insert ampa ratio_ampa = 1}
    
forall cm = global_cm
forall Ra = global_ra
g_celsius = 35
    }

   for i = 0, nbranch*ndend - 1 dend[i] {
      dend[i] for (x,0) { 
        setpointer caisoma_nmda(x), soma.cai(0.5)
        setpointer nmdasyn_nmda(x), ourPnmda
	setpointer ampasyn_ampa(x), ourgampa  
	  }
          }
   
 /* Next we construct the topology by connecting each of the sections together. */
    connect soma(0),dummy(1)
    connect prox[0](0),soma(0)
    connect prox[1](0), soma(1)
    connect prox[2](0), soma(0.5)
    connect prox[3](0), soma(0.5) 
    for j = 0, ndend-1 {
    for i = 0, nbranch-1 {
    connect dend[j+i*ndend](0), prox[j](1)}}

        dummy{
	pt3dclear()
	pt3dadd(0.5*soma_len,0,1,1)
	pt3dadd(0.5*soma_len,0,0,1)
               }
        prox[0]{
	pt3dclear() 
	pt3dadd(0,0,0,prox_diam)
	pt3dadd(-prox_len,0,0,prox_diam)
               }
        dend[0]{
	pt3dclear() 
	pt3dadd(-prox_len,0,0,dend_diam)
	pt3dadd(-dend_len,0,0,dend_diam/taper)
               }
        if(nbranch==2) dend[4]{
	pt3dclear() 
	pt3dadd(-prox_len,0,0,dend_diam)
	pt3dadd(-prox_len,dend_len-prox_len,0,dend_diam/taper)
               }
        prox[1]{
	pt3dclear() 
	pt3dadd(soma_len,0,0,prox_diam)
	pt3dadd(soma_len+prox_len,0,0,prox_diam)
               }
        dend[1]{
	pt3dclear() 
	pt3dadd(soma_len+prox_len,0,0,dend_diam)
	pt3dadd(soma_len+dend_len,0,0,dend_diam/taper)
               }
        if(nbranch==2) dend[5]{
	pt3dclear() 
	pt3dadd(soma_len+prox_len,0,0,dend_diam)
	pt3dadd(soma_len+prox_len,prox_len-dend_len,0,dend_diam/taper)
               }
        prox[2]{
	pt3dclear() 
	pt3dadd(0,soma_diam/2,0,prox_diam)
	pt3dadd(0,(soma_diam/2 + prox_len),0,prox_diam)
               }
        dend[2]{
	pt3dclear() 
	pt3dadd(0,(soma_diam/2 + prox_len),0,dend_diam)
	pt3dadd(0,soma_diam/2 + dend_len,0,dend_diam/taper)
               }
        if(nbranch==2) dend[6]{
	pt3dclear() 
	pt3dadd(0,(soma_diam/2 + prox_len),0,dend_diam)
	pt3dadd(dend_len-prox_len,soma_diam/2 + prox_len,0,dend_diam/taper)
               }
        prox[3]{
	pt3dclear() 
	pt3dadd(0,-soma_diam/2,0,prox_diam)
	pt3dadd(0,(-soma_diam/2 - prox_len),0,prox_diam)
               }
        dend[3]{
	pt3dclear() 
	pt3dadd(0,-soma_diam/2 - prox_len,0,dend_diam)
	pt3dadd(0,-soma_diam/2 - dend_len,0,dend_diam/taper)
               }
        if(nbranch==2) dend[7]{
	pt3dclear() 
	pt3dadd(0,-soma_diam/2 - prox_len,0,dend_diam)
	pt3dadd(prox_len-dend_len,-soma_diam/2 - prox_len,0,dend_diam/taper)
               }
}

topology()

init_cell()			/* Call the function to initialize our
				 * cell. */
objref ss,f1,f2
ss = new SaveState()
f1 = new File()
f2 = new File()

proc init() {local i
if(!restart){ 
           finitialize(v_init)
           fcurrent()
          }
if(restart){ 
           f1.ropen("state11b1.old")
           ss.fread(f1)
           f1.close
           finitialize(v_init)
           ss.restore(1)
           t=tstart
           if(cvode.active()){
           cvode.re_init()

} else {
           fcurrent()
        }
 frecord_init()
           }
        t = tstart
}

init()
if(back){
if(!clamp ||verbose) {print t,soma.v(0.5),soma.nai(0.5),prox.nai(0.5),dend.nai(0.5),soma.cai(0.5)}
if(clamp && !vcseries && !verbose) print t,vc.i,soma.cai(0.5),soma.v(0.5)
if(vcseries) j= 10 else j = 0
for i = 0, j { if (vcseries) vc.amp1 = vc.amp1 + 10}
if(vcseries) init()
next = t + Dt
flag1=0
flag2=0
hold = 0
while (t<=tstop-dt){
          vsolder=vsold
          vdolder=vdold
          vsold=soma.v(0.5)
          vdold=dend[1].v(0.99)

          fadvance()
           if(!clamp||verbose){
          if((vsolder<vsold &&soma.v(0.5) <vsold)||(vsolder>vsold && soma.v(0.5)>vsold)||(vdolder<vdold &&dend[1].v(0.99) <vdold)|| (vdolder>vdold && dend[1].v(0.99)>vdold)) {
          vsolder=soma.v(0.5)
          vdolder=dend[1].v(0.99)
                           print t,soma.v(0.5),soma.nai(0.5),prox.nai(0.5),dend.nai(0.5),soma.cai(0.5)
               next = t + Dt
                           flag2=1
                           hold=dt
          soma.v(0.5)=vsolder
          dend[1].v(0.99)=vdolder
                            }
                            }   
               if(t>=next){
               Dt = 100*dt
               if(Dt>Dtmax) Dt = Dtmax
               if (Dt<.1) Dt = .1
               next = t + Dt
         if(!clamp||verbose) print t,soma.v(0.5),soma.nai(0.5),prox.nai(0.5),dend.nai(0.5),soma.cai(0.5)
if(clamp && !vcseries && !verbose) print t,vc.i,soma.cai(0.5),soma.v(0.5)
                          }
                 }
             print t,soma.v(0.5),soma.nai(0.5),prox.nai(0.5),dend.nai(0.5),soma.cai(0.5)    
if(vcseries) print vc.amp1,vc.i
f2.wopen("state11b1.new")
ss.save()
ss.fwrite(f2)
f2.close
} else{ if(clamp) {xopen("clamp.ses")} else {xopen("fig11b1.ses")}
                   forall Ra = global_ra
                   forall cm = global_cm
                   prox{ forall cm = global_cm}
                   dend{ forall cm = global_cm}
                   celsius = g_celsius
       }

Loading data, please wait...