/* 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= 1 /* switch for running in the background */
sakmann=0
if(!back)load_proc("nrnmainmenu")
verbose=0
v_init = -60
vcseries = 0
clamp = 0 /* switch for voltage clamp*/
restart = 0 /* switch for initializing from state.old */
tstart = 0
if(vcseries) tstop = 800 else tstop = 100000
/*if(timecon) tstop = 100*/
if(timecon) tstop = 1000
nsyn = 1 /* The number of synapses */
soma_len= 15
soma_diam= 15
ndend=4
dend_diam= 1.0 /* need to make dendrite taper */
prox_diam= 2.0 /* need to make dendrite taper */
taper = 1.0
dend_len = 500
prox_len = 150
Dt = 5.0
if(timecon) Dt = 1.0
dt = 1.0
if(timecon) dt = 0.01
nainit= 4.000
create soma, prox[ndend], dend[ndend] /* Create all of the cell's sections */
global_ra = 200
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
cvode = new CVode(1)
// if stdrun code has been loaded then update the variable step control,
// otherwise the following will fall through and background control will
// still work
if (name_declared("cvode_active")) {
cvode_active(1)
}
proc init_cell() {
/* First set all of the dimensions and insert the channels into each
* section. */
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 nadifl D_nadifl = 0.60 }
{insert leak gkbar_leak = 100 gnabar_leak= 40 ek_leak = -100 ggabaa_leak = 0 }
{insert delay gkbar_delay = 400 }
{ insert pump ipumpmax_pump = 0.012 }
if (!clamp) {
istim = 0.022 /* 0.022*/
stim = new IClamp(.5)
{stim.del=0 stim.dur=200000 stim.amp=-istim*3.1416*diam*L*(0.01)}
if(timecon) stim.dur=0.5
if (sakmann) stim.amp = -0.063
if(timecon) stim.amp= -1.0
} else {
vc = new VClamp1(.5)
vc.vset = -130.0
vc.gain = 0.5
/*vc.amp[0] = -65
vc.dur[0] = tstop + 1
vc.amp[1] = -50
vc.dur[1] = 1000
vc.amp[2] = -60
vc.dur[2] = 1000
vc.gain = 0.5e5
vc.tau1 = 0
vc.tau2 = 0 */
}
pt3dclear()
pt3dadd(0,0,0,soma_diam)
pt3dadd(soma_len,0,0,soma_diam)
}
for i = 0, ndend-1 prox[i] {
nseg = 3 /* # of compartments */
L = prox_len /* Set the length of the dendrite (in um) */
{insert leak gkbar_leak = 100 gnabar_leak= 40 ek_leak = -100 }
{insert delay gkbar_delay=400 }
{insert nmda Pbar_nmda = 0.00e-6
base_nmda = 0.000 km_nmda= 50.75 q_nmda = 9 }
{insert nadifl D_nadifl = 0.60 }
{ insert pump ipumpmax_pump = 0.012 }
forall cm = global_cm
forall Ra = global_ra
g_celsius = 35
}
for i = 0, ndend-1 dend[i] {
nseg = 7 /* # of compartments */
L = dend_len - prox_len /* Set the length of the dendrite (in um) */
{insert leak gkbar_leak = 100 gnabar_leak= 40 ek_leak = -100 }
{insert delay gkbar_delay=400 }
{insert nmda Pbar_nmda = 1.4e-6
pr_nmda = 0.05 base_nmda = 0.000 km_nmda= 50.75 q_nmda = 9.0 }
{insert nadifl D_nadifl = 0.60 }
{ insert pump ipumpmax_pump = 0.012 }
forall cm = 5*global_cm
forall Ra = global_ra
g_celsius = 35
}
/* Next we construct the topology by connecting each of the sections
* together. */
connect prox[0](0), soma(0)
connect dend[0](0), prox[0](1)
connect prox[1](0), soma(1)
connect dend[1](0), prox[1](1)
connect prox[2](0), soma(0.5)
connect dend[2](0), prox[2](1)
connect prox[3](0), soma(0.5)
connect dend[3](0), prox[3](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)
}
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)
}
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)
}
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)
}
}
init_cell() /* Call the function to initialize our
* cell. */
topology()
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("state.old")
ss.fread(f1)
f1.close
finitialize(v_init)
ss.restore()
fcurrent()
cvode.re_init()
}
t = tstart
}
/*
proc continuerun() {local rt
eventcount=0
eventslow=1
stoprun = 0
startsw()
while(t < $1 && stoprun == 0) {
step()
rt = stopsw()
if (rt > realtime) {
realtime = rt
fastflushPlot()
doNotify()
if (realtime == 2 && eventcount > 50) {
eventslow = int(eventcount/50) + 1
}
eventcount = 0
}else{
eventcount = eventcount + 1
if ((eventcount%eventslow) == 0) {
doEvents()
}
}
}
f2.wopen("state.new")
ss.save()
ss.fwrite(f2)
f2.close
flushPlot()
}
*/
init()
/*
startsw()
flushPlot()
*/
/*
if(back){
if(!clamp ||verbose)print t,soma.v(0.5),dend[0].v(0.99),soma.nai(0.5),dend[0].nai(0.99),dend[0].inapump_pump(0.99),dend[0].inmda_nmda(0.99)
if(clamp && !vcseries && !verbose) print t,vc.i,soma.nai(0.5),soma.v(0.5)
if(vcseries) j= 10 else j = 0
for i = 0, j { if (vcseries) vc.vset = vc.vset + 10
if(vcseries) init()
while (t<tstop){
next = t + Dt
while (t<next) {
fadvance()
}
if(!clamp||verbose) print t,soma.v(0.5),dend[0].v(0.99),soma.nai(0.5),dend[0].nai(0.99),dend[0].inapump_pump(0.99),dend[0].inmda_nmda(0.99)
if(clamp && !vcseries && !verbose) print t,vc.i,soma.nai(0.5),soma.v(0.5)
}
if(vcseries) print vc.vset,vc.i
f2.wopen("state.new")
ss.save()
ss.fwrite(f2)
f2.close
}
} else{
if(clamp) {xopen("clamp.ses")
forall Ra = global_ra
forall cm = global_cm
prox{ forall cm = global_cm}
dend{ forall cm = global_cm}
celsius = g_celsius
} else {
xopen("seg1.ses")
}
forall Ra = global_ra
forall cm = global_cm
prox{ forall cm = global_cm}
dend{ forall cm = global_cm}
celsius = g_celsius
}
*/