Thank you for indicating the page where you found the statement in question. This is a
perfect example of why the context of a quote is important.
Listing 11.2 on pages 325-26 consists of proceedures and statements that, when executed, will
create all cell instances of the toy net, then assemble the network. The purpose of func
nc_append() is to set up a connection between a presynaptic cell and the target to which it
projects. It contains an "if" statement that executes different blocks of code, depending on
whether its third argument is < 0 or >= 0. Specifically, if $3 >= 0, the statement
Code: Select all
netcon = cells.object($1).connect2target(cells.object($2).synlist.object($3))
is executed, but if $3 < 0, the statement
Code: Select all
netcon = cells.object($1).connect2target(cells.object($2).pp)
is executed.
Now skip to the bottom of the file and note that the third argument is -1 for all invocations
of net_append(). So no statement will be executed that requires the cell class to have a
synlist member.
"Why does nc_append() written in this way?" So that it can be used with target cells that
are artificial spiiking cells, which will not have a synlist, or with target cells that are
biophysical model cells. If the target cell is a biophysical model cell, it will have a List of
objrefs to the synaptic mechanisms that are attached to it, and nc_append() has to
be told which of those synaptic mechanisms is to receive the NetCon's events.
"Why do biophysical model cells have a synlist? And what is a synlist, anyway?" When
doing anything that depends on the orchestration of many items, it is useful to have
policies for managing things that are closely related to each other. In the case of
networks that involve biophysical model cells, one must deal with cells, the
connections between them, and the synaptic mechanisms that mediate the effects of
presynaptic cells on postsynaptic cells. One reasonable policy for dealing with synaptic
mechanisms is to associate them with the (postsynaptic) cells to which they are attached.
In NEURON, this can be done by including a List in the definition of the cell class, and
then taking care to append each mechanism that is attached to a cell to the cell's synlist.
The GUI implements this policy in the NetReadyCellGUI tool (which is brought up by
clicking on NEURON Main Menu / Build / Network Cell / From Cell Builder). This tool is
used to specify the properties of "network ready cell classes," and one of the things a
user does with this tool is to select and place synaptic mechanisms on the branched
architecture of the cell. When an instance of the cell class is created, instances of each
of these mechanisms will be created, attached to the cell at the specified location, and
appended to the cell's synlist.
"Why don't artificial spiking cells have a synlist?" In NEURON, artificial spiking cells don't
have or even need a synlist because the effect of an input event on an artificial spiking
cell is an integral part of the artificial spiking cell itself, not something optional that is
attached to it, like a synaptic point process mechanism that is attached to a biophysical
model cell.