Skip to content

ModelDBRepository/39949

Repository files navigation

<HTML>
<HEAD>
  <!-- readme.html -->
  <!-- version 1.2 7:55 AM 6/21/2004 -->
  <TITLE>NEURON implementation of spiny neuron model</TITLE>
</HEAD>
<BODY bgcolor="#ffffff" text="#000000" link="#CC0000" alink="#FF3300" vlink="#330099">
<h1 align=center>
NEURON implementation of spiny neuron model
</h1>

These programs reproduce figures from the paper<br>
"Modulation of Striatal Single Units by Expected Reward: 
A Spiny Neuron Model Displaying Dopamine-Induced Bistability"<br>
Aaron J. Gruber, Sara A. Solla, D., James Surmeier, and James C. Houk<br>
J Neurophysiol 90: 1095 1114, 2003
<p>

Address questions to Ted Carnevale<br>
<a href="ted.carnevale@yale.edu">ted.carnevale@yale.edu</a>

<p>
The following comments show 
<a href="#usage">how to operate</a>
these programs, 
and discuss the 
<a href="#implementation">
implementation of the models
</a>
and how to reuse this code.

<h2>
<br>
<a name="usage">Usage</a>
</h2>

<ol>
<li>Unzip spinycell.zip into an empty directory.
<li>Compile the mod files with nrnivmodl (or mknrndll if you're using MSWin)
<li>Follow the instructions below.
</ol>


<h3>
<br>
Figs. 2 and 3A
</h3>
Use NEURON to execute 
<a href="figs2and3A.hoc">figs2and3A.hoc</a>
<br>
Click on the Plot button in each of the three Graphers.
<blockquote>
<img SRC="./figs/figs2and3A.gif">
</blockquote>


<h3>
<br>
Figs. 3B and C
</h3>
Use NEURON to execute 
<a href="fig3BC.hoc">fig3BC.hoc</a>
<br>
Click one of the buttons in this small panel
<blockquote>
<img SRC="./figs/fig3BC.gif">
</blockquote>

<p>
to bring up a plot that reproduces Fig. 3B
<blockquote>
<img SRC="./figs/fig3B.gif">
</blockquote>

<p>
or Fig. 3C
<blockquote>
<img SRC="./figs/fig3C.gif">
</blockquote>


<h3>
<br>
Fig. 4
</h3>
Use NEURON to execute 
<a href="fig4.hoc">fig4.hoc</a>
<br>
The graph is created automatically.
<blockquote>
<img SRC="./figs/fig4.gif">
</blockquote>


<h3>
<br>
Fig. 6
</h3>
Use NEURON to execute 
<a href="fig6.hoc">fig6.hoc</a>
<br>
On the right there is a graph window.
Just below this is a small panel with buttons labeled "Fig. 6a" and "Fig. 6b".
Click on one of these to generate the corresponding family of plots.
<blockquote>
<b>Fig. 6a</b>
<br>
<img SRC="./figs/fig6a.gif">
</blockquote>
<blockquote>
<b>Fig. 6b</b>
<br>
<img SRC="./figs/fig6b.gif">
</blockquote>

Notes:
<ol>
<li>The first 200-300 ms of each trace is a "warmup" or "stabilization" interval 
during which the model reaches a dynamic equilibrium appropriate for the 
baseline synaptic drive.
<li>The increase of synaptic drive starts at 400 ms.
<li>The pseudorandom afferent spike trains are different on each run, 
so each press of these buttons produces a slighly different family of traces.
However, the envelopes of the individual trajectories are essentially similar
from run to run.
<br>
<b>Example: repeat "Fig. 6b run"</b>
<br>
<img SRC="./figs/fig6bagain.gif">
<li>Mean synaptic conductance appears to be 
the primary determinant of the membrane potential trajectories.
Other details of synaptic input (negexp ISI spike trains driving 
the relatively simple ExpSyn mechanism here, 
vs. the more complex, empirically derived model of synaptic activity 
used by Gruber et al.) affect only the low-level fluctuations of the 
individual traces.
</ol>


<h3>
<br>
Figs. 7A and B
</h3>
Use NEURON to execute 
<a href="fig7a.hoc">fig7a.hoc</a>
or
<a href="fig7a.hoc">fig7b.hoc</a>
<br>
The graphs are created automatically.
<blockquote>
<b>Fig. 7A</b>
<br>
<img SRC="./figs/fig7a.gif">
</blockquote>
<blockquote>
<b>Fig. 7B</b>
<br>
<img SRC="./figs/fig7b.gif">
</blockquote>

Note: The actual values of mu used for the figures in the paper were not available.
The values used in these programs are sufficient 
to demonstrate the same dynamical features of the 
model that were illustrated by the original figures.


<h3>
<br>
Fig. 10A and B
</h3>
Use NEURON to execute 
<a href="fig10ab.hoc">fig10ab.hoc</a>
<br>
This brings up several windows, the rightmost of which are a stack of graphs.
From the top down, these graphs will show
<ul>
<li>the membrane potential of the spiny neuron
<li>the cortical input spike train
<li>the time course of the modulatory action of dopaminergic input
</ul>
Above these graphs is a small panel with four radio buttons 
that set the "experimental conditions."
Select one of the four possible combinations and click 
on the RunControl's Init & Run button to launch a 
simulation.
<blockquote>
<b>Example 1: weak cortical input, target unrewarded</b>
<p>
<img SRC="./figs/fig10weakunrewarded.gif">
</blockquote>
<blockquote>
<b>Example 2: strong cortical input, target rewarded</b>
<p>
<img SRC="./figs/fig10strongrewarded.gif">
</blockquote>

Notes:
<ol>
<li>During the first few hundred ms, the model reaches a 
dynamic equilibrium appropriate for the background synaptic drive.
<li>Sequential runs under the same conditions will differ because 
a different afferent spike train is used each time.
</ol>


<h2>
<br>
<a name="implementation">Model implementation</a>
</h2>

<p>
Among these files there are actually two different implementations of a 
spiny neuron model.
The first is used to generate the figures that illustrate 
the basic properties of the model (Figs. 2 - 4 and 7), 
and the second is used for those figures that show 
how dopamine affects the model's response to afferent spike trains 
(Figs. 6 and 10).

<p>
Both implementations use the same membrane currents, 
which are specified by these files:
<pre>
  caL.mod
  kir2.mod
  ksi.mod
  leak.mod
</pre>
Of these, only caL.mod includes temperature dependence 
(needs <code>celsius = 20</code> to reproduce the figures 
from the paper).

<p>
Some of the programs also use the mechanisms specified in 
one or both of these files:
<pre>
  damsg.mod
  gspike.mod
</pre>
These mechanisms are described later in this document.


<h3>
<br>
Implementation 1: a "stand-alone" model cell
</h3>

The properties of the model used for Figs. 2 - 4 and 7 are specified by 
these graphical tools
<blockquote>
<img SRC="./figs/model1.gif">
</blockquote>

<p>
These were set up with NEURON's GUI, 
and they are recreated by having NEURON execute the code in <b>model_mu_1.ses</b>.
Think of this file as a "virtual experimental preparation,"
somewhat analogous to a single cell in tissue culture 
or an acutely isolated soma.

<p>
This file is loaded by the following programs&nbsp;:
<pre>
  figs2and3A.hoc
  fig3BC.hoc
  fig4.hoc
  fig7a.hoc
  fig7b.hoc
</pre>

It needs only one thing to be a complete specification of a model of a spiny neuron&nbsp;: 
some way for the caL and kir2 mechanisms to discover the value of the "dopamine message."
In figs2and3A.hoc this is done by the statements
<pre>
msg = 1

soma for (x,0) { // skip the nodes at 0 and 1
        setpointer mu_caL(x), msg
        setpointer mu_kir2(x), msg
}
</pre>
which link the "mu" POINTERs of caL and kir2 to the hoc scalar msg.
Except for fig7a.hoc and fig7b.hoc, 
the other programs that use model_mu_1.ses contain similar statements.
This is OK for simulations in which mu remains constant 
or changes abruptly from one steady level to another.

<p>
For fig7a.hoc and fig7b.hoc, computational efficiency requires a different approach.
Unlike other simulations involving the "stand-alone model," 
these need msg to have nontrivial dynamics.
Using a hoc scalar and modifying NEURON's main computational loop 
to force incremental changes in msg at every fadvance() 
is not the best way to do this.

<p>
Therefore fig7a.hoc and fig7b.hoc employ a DAsyn point process.
This "net-ready" synaptic mechanism 
has a state variable msg which, in this implementation, 
has first order dynamics and can be driven by spike events.
The file fig7syn.hoc contains the statements that link 
the "mu" POINTERS of caL and kir2 to this msg.

<blockquote>
DAsyn is also used in the program that reproduces Fig. 10 
(see below).
</blockquote>


<h3>
<br>
Implementation 2: a "networked" model cell
</h3>

The "networked" model cell is used by these two programs:
<pre>
  fig6.hoc
  fig10ab.hoc
</pre>

This model implementation has 
a "fast conductance change excitatory synapse" (ExpSyn) 
that receives spike trains representing afferent cortical activity.
It happens to be implemented with NEURON's NetReadyCellGUI tool, 
but its anatomical and biophysical properties are identical to 
those of the "stand-alone" model.

<p>
The NetReadyCellGUI tool that specifies the properties of this "biological model cell", 
and the ArtCellGUI tool that specifies the properties of the 
artificial spiking cells that generate the afferent spike trains, 
were created using NEURON's GUI and saved to session files called 
fig6netcells.ses
and 
fig10netcells.ses.

<blockquote>
As noted above, the conductance fluctuations 
used in the simulations reported by Gruber et al.
are quite different from those generated by 
spike trains with negexp statistics converging on an ExpSyn mechanism.
Even so, the simulation results produced by these files 
are qualitatively quite similar to the published figures.
Mean synaptic conductance, rather than its detailed fluctuations, 
appears to be the principal factor 
that governs the time course of membrane potential.
</blockquote>

Network architectures were specified with the NetGUI tool and saved to 
session files called
fig6net.ses
and 
fig10net.ses.
"Instrumentation" (simulation controls and graphical displays of results) are contained in 
fig6netrig.ses
and
fig10netrig.ses.

<p>
fig6.hoc uses a simple hoc scalar called msg to represent dopaminergic effect,
and the mu POINTERs of the caL and kir2 mechanisms are linked 
to it in the file fig6.hoc.
As noted previously, the simulations that generate Figure 10 
use a DAsyn point process so that msg can have its own dynamics 
and yet be computationally efficient.
fig10syn.hoc contains the statements that link the mu POINTERs of caL and kir2 
to the DAsyn's msg.

<blockquote>
The "spike" mechanism used by Gruber et al. 2003 for Fig. 10 
requires an implementation that demands fig10ab.hoc be run only with 
fixed time step integration (see gspike.mod).
</blockquote>

<p>
<b>Reusable hoc code</b>
<p>
c_cell.hoc contains a template (class definition) for model neurons with 
properties identical to the one that was used 
to generate Fig. 10, complete with both an ExpSyn (to receive "cortical 
input spikes") and a DAsyn (to receive "dopaminergic input spikes").
It can be used, with or without NEURON's GUI,
to spawn new instances of this model neuron 
that are suitable for use in network simulations.

<blockquote>
<pre>
load_file("c_cell.hoc")
objref foo
foo = new List()
for i=0,99 foo.append(new C_Cell())
foo.count()  // returns 100
// now there are 100 of these cells ready to be connected into a network
</pre>
</blockquote>

<b>Caveat: </b>
Be sure to specify the operating temperature, e.g.
<pre>
  celsius = 20
</pre>

<blockquote>
<b>How I created c_cell.hoc</b>

<ol>
<li>Clicked on the "Hoc File" button of fig10ab.hoc's NetGUI tool 
and specified fig10network.hoc as the name of the output file
<li>Extracted the template for the C_Cell class from fig10network.hoc
<li>Finally, made one small but important modification to the C_Cell template:
<br>
adding a "forsec all" loop to proc synapses() so that the 
mu POINTERs of every instance of caL and kir2 will be 
linked to the DAsyn's msg variable
</ol>

Here's the modified proc synapses()--
<pre>
proc synapses() {
  /* ExpSyn0 */   soma syn_ = new ExpSyn(0.5)  synlist.append(syn_)
    syn_.tau = 3
  /* DAsyn1 */   soma syn_ = new DAsyn(0.5)  synlist.append(syn_)
  // attach all POINTERs to DAsyn.msg
  forsec all {
    if (issection("caL")) {
      for (x,0) { // skip the nodes at 0 and 1
	setpointer mu_caL(x), synlist.object(1).msg
      }
    }
    if (issection("kir2")) {
      for (x,0) { // skip the nodes at 0 and 1
	setpointer mu_kir2(x), synlist.object(1).msg
      }
    }
  }
}
</pre>
</blockquote>

</BODY></HTML>

Releases

No releases published

Packages

No packages published

Languages