File contents
Routine Name: readcell
Description: Creates a model neuron from a description in a cell parameter
file.
Usage: readcell filename cellname -hsolve -prand SDlen SDdia
-rand SDlen SDdia -split Number -lambdasplit maxl
filename name of the cell descriptor file
(should end with extension .p)
cellname name of the neutral element to be at the
head of the tree of elements which comprise
the cell
-hsolve create cellname as an hsolve element
Example: readcell cell.p /cell
readcell cell.p /hcell -hsolve
"cell.p" contains:
*relative
*cartesian
*asymmetric
*set_compt_param RM 0.33333
*set_compt_param RA 0.3
*set_compt_param CM 0.01
*set_compt_param EREST_ACT -0.07
// For the soma, use the leakage potential (-0.07 + 0.0106) for Em
*set_compt_param ELEAK -0.0594
soma none 30 0 0 30 Na_squid_hh 1200 K_squid_hh 360 spike 0.0
// The dendrite has no H-H channels, so ELEAK = EREST_ACT
*set_compt_param ELEAK -0.07
dend soma 100 0 0 2 Ex_channel 0.795775
Notes:
The first example above will produce the element tree
/cell/soma:
Na_squid_hh K_squid_hh spike
/cell/dend:
Ex_channel
with the maxium channel conductances scaled by the area of the
compartment. Here, "/cell" will be a neutral element. In the second
example, "/hcell" will be an hsolve element. This is the preferred way of
creating a cell which is to be taken over by the Hines solver, as it
automatically creates the hsolve element as the root of the element tree
and sets the path for the elements to be solved. Note that, starting with
GENESIS version 2.2, it is necessary to provide the full path to the cell
when using readcell to directly create an hsolve. (e.g. you can't use
"readcell cell.p hcell -hsolve", even if "/" is the current working
element.)
In cartesian coordinates, the format for each compartment parameter line
in a cell parameter file is
name parent x y z dia chan dens [chan dens] ...
For polar coordinates, it is
name parent r theta phi dia chan dens [chan dens] ...
Here, 'name' gives the name of the compartment, and 'parent' refers to the
adjacent compartment to which it is connected. 'parent' may be replaced
by '.' to refer to the compartment defined on the preceding line. For
asymmetric compartments, the connection to 'parent' is through the axial
resistance (Ra) of 'name'. The coordinates and diameter (x, y, z, dia)
are in microns, all other units are SI (Meter, Kg, Second, Ampere). In
polar mode 'r' is in microns, theta and phi in degrees. Theta is measured
from the z-axis and phi from the x-axis in the x-y plane. The compartment
length, which is not stated explicitly, is calculated from the coodinates
of the compartment and its parent.
'chan' is the name of one of the channel prototypes under the neutral
element '/library'. At present, the supported channel types are
hh_channel, tabchannel, tab2Dchannel, tabcurrent, vdep_channel, synchan,
hebbsynchan, ddsyn, receptor2, manuelconduct, and graded. 'chan' may also
refer to the other neural element types: spikegen, Ca_concen, difshell,
difbuffer, concpool, mmpump, and hillpump. Presently, the obsolete
channelC, channelC2, channelC3, and spike objects are also supported.
For channels, 'dens' is the conductance density (Gbar or gmax per unit
compartment area) in Siemens/m^2. If a negative value is specified, the
absolute value is taken, and it is interpreted as the maximum
conductance in Siemens, without scaling by the compartment area.
For spikegen elements, the 'dens' parameter is the 'thresh' field of the
element. For Ca_concen elements, it is the 'B' field, divided by the
volume of the compartment. However, if the 'thick' field of the Ca_concen
element is non-zero, the volume is scaled using the volume of a true shell
of thickness 'thick'. A negative value of 'dens' is used to indicate that
it should be taken as an absolute value of B, without scaling.
A maximum of 30 'chan dens' pairs are allowed in a compartment
specification. The '*compt' option described below provides a way to
overcome this limitation.
Several types of options may be specified in the cell parameter file.
These options start with a '*', and affect all lines following them,
until canceled by the opposite command.
COMPARTMENT COORDINATES
*relative coordinates are relative to parent
*absolute coordinates are absolute (default)
*polar polar coordinates
*cartesian cartesian coordinates (default)
*lambda_warn will issue warning if the electrotonic length of the
compartment (in terms of the space constant, lambda)
is outside the range 0.01-0.20.
*lambda_warn MIN MAX same as above, but uses the range MIN-MAX.
*lambda_unwarn turns off lambda warning (default)
*double_endpoint
allows both endpoints to be explicitly entered for all compartments.
The syntax is:
name parent x0 y0 z0 x y z chans dens... for cartesian mode, and
name parent r0 t0 p0 r t p chans dens... for polar mode.
The double endpoint mode has two main uses. First, when one is adding
dendrites to a spherical compartment like a soma, one wants the
dendrite to begin at the edge of the sphere, not in the middle. The
double endpoint mode allows the user to attach the cylinder at any
desired point. While this does not matter electrically, the cell will
be prettier when displayed with xcell.
Second, this allows the anatomical (not electrical) attachment of
dendrites in the middle of another compartment rather than at an
endpoint. This flexibility may be particularly important for modeling
invertebrate neurons, whose large process diameters often mean that
the distance between two branch points is just a tiny fraction of the
electrotonic length constant. The only caveat in using the mode for
this purpose is that the view in xcell gives less information about
how the model is performing electrically. For example, if a branch is
connected in the middle of a compartment anatomically (and thus it
will be displayed as such in the cell viewer), one must remember that
it is not connected electrically at that point, but (presumably) at
the closer endpoint of that compartment.
*double_endpoint_off turns off double endpoint mode
COMPARTMENT SHAPE
*spherical make a spherical compartment
*cylindrical make a cylindrical compartment (default)
*symmetric make symmetric compartments
*asymmetric make asymmetric compartments (default)
PARAMETER VALUES
*set_compt_param variable value
sets one of the following internal variables used by the cell
reader to 'value'. 'value' may be a number, or the name of a
globally defined script variable.
RM specific membrane resistance in ohm*m^2
RA specific axial resistance in ohm*m
CM specific membrane capacitance in farad/m^2
EREST_ACT resting potential in volts (initial Em and initVm)
ELEAK if specified, gives an alternate value for initial Em,
so that Vm will be initialized to initVm (EREST_ACT)
on reset, instead of Em. Otherwise, ELEAK = EREST_ACT.
*set_global variable value
similar to the above, but also sets the value of global script
variables of the same name. However, it does not support the ELEAK
internal variable. If the RM, CM, RA and EREST_ACT global variables
have not been previously declared, readcell will create them.
'variable' may also be the name of any other previously declared
global script variable other than the internal variables listed
above. In this case '*set_global' may be used to set the values of
these script variables.
COMPARTMENT AND CELL PROTOTYPES
*start_cell CELL_NAME start new cell (in separate tree)
*append_to_cell CELL_NAME append to existing cell
*makeproto COMP_NAME converts new cell to prototype configuration
*compt COMP_NAME all following compartments will be copies of
COMP_NAME, including its complete subtree and
messages between its elements, with gmax/Gbar
appropriately scaled (unless 'dens' is
negative). This allows you to avoid repeating
many long strings of channel specifications when
there are many compartments that have the same
channels with the same conductance densities.
It also permits compartments to contain elements
of types other than the ones recognized by
readcell. In this case, create a prototype
compartment that contains the desired channels
or other elements linked by any necessary
messages, and use "*compt" in the cell parameter
file to make additional copies of the
compartment.
These commands are illustrated in Scripts/int_methods/granule.p and
Scripts/examples/pore/markov.
Messages can be specified between elements in different compartment
subtrees by creating and setting an extended field "addmsg#", where "#" is
an integer. This field will contain a string of the form "source
destination message-name [values]", defining the message. For example,
this commonly done to allow readcell to properly set up the needed
messages between calcium channels, Ca_concen elements, and calcium
dependent potassium channels. This is illustrated in
Scripts/neurokit/prototypes/traub91chan.g.
SPINES and BRANCHES
There are a variety of commands used for adding dendritic spines and
branches to compartments. These commands affect the passive structure
of the neuron only.
*memb_factor MEMB_FACTOR scales all membrane surface by this factor
*add_spines DENDR_DIAM SPINE_DENS SPINE_SUR
Adds membrane surface for collapsed spines to all compartments with
dia <= DENDR_DIAM; units: um, 1/um, um^2.
*rand_spines DENDR_DIAM SPINE_DENS SPINE_SURF AV_LENGTH SPINE_FREQ
spine_proto
Like above, but a random number of spines will be attached as copies
of the compartment(s) spine_proto. The number of spines added
depends on SPINE_FREQ and AV_LENGTH. On the average a compartment
with dia <= DENDR_DIAM and len = AV_LENGTH will receive n =
SPINE_FREQ spines. If SPINE_FREQ >= 1.0 then all compartments with
dia <= DENDR_DIAM will receive at least one spine. The dendritic
surface area is still corrected for the 'missing' spines.
(See, for example, Scripts/purkinje/Purk2M9s.p.)
*mrand_spines DENDR_MIN DENDR_DIAM SPINE_DENS SPINE_SURF AV_LENGTH
SPINE_FREQ spine_proto
Like above, but a random number of spines will be attached as copies
of the compartment(s) spine_proto. Number of spines added depends on
SPINE_FREQ and AV_LENGTH. On the average a compartment with
DENDR_MIN < dia <= DENDR_DIAM and len = AV_LENGTH will receive
n=SPINE_FREQ spines. If SPINE_FREQ >= 1.0 then all compartments
with DENDR_MIN < dia <= DENDR_DIAM will receive at least one spine.
The dendritic surface area is still corrected for the 'missing'
spines on dendrites with dia <= DENDR_DIAM.
*fixed_spines DENDR_DIAM SPINE_NUM SPINE_SURF SPINE_SKIP spine_proto
Like above, but a fixed number of spines will be attached as copies
of the compartment(s) spine_proto. Number of spines added is
SPINE_NUM, from this command onward a spine will be added every
SPINE_SKIP compartments (if dia <= DENDR_DIAM) The dendritic surface
area is still corrected for the 'missing' spines.
*mfixed_spines DENDR_MIN DENDR_DIAM SPINE_NUM SPINE_SURF SPINE_SKIP
spine_proto
Like above, but a fixed number of spines will be attached as copies
of the compartment(s) spine_proto. Number of spines added is
SPINE_NUM, from this command onward a spine will be added every
SPINE_SKIP compartments (if DENDR_MIN < dia <= DENDR_DIAM). The
dendritic surface area is still corrected for the 'missing' spines.
*rand_branches MAX_DIA RAND_FREQ NUM_ORDERS POSTFIX NUM_COMPS MIN_L
MAX_L MIN_D MAX_D [NUM_COMPS MIN_L MAX_L MIN_D MAX_D] ...
Adds more branches randomly at the end of dendrites. The routine
assumes that the .p file has a logical order, where each branch
segment is defined in continuing lines and the first segment after a
branchpoint is defined immediately after the segment before the
branchpoint (if this is not the case the things might still work
correctly by the MAX_DIA control). The branching is binary (thus
either 2 or 4 or 8 or ... segments are added. NUM_ORDERS (1-5)
determines the number of branchpoints that are added. For each
branchpoint one gives the MIN_L and MAX_L (length) and MIN_D and
MAX_D (diameter) and NUM_COMPS, the number of compartments per
segment. Adds smartly: will skip thick segments if the existing
dendritic tip is thin and will only add to 'tips' with a diameter <
MAX_DIAM. Frequency of addition of these branches is controlled by
RAND_FREQ (0-1): if RAND_FREQ == 1 all tips smaller than MAX_DIAM
will have branches appended. The name will be the name of the
parent + POSTFIX, indexed from 0 to 2^(NUM_ORDERS-1). For a "full"
addition (to a thick dendritic tip) the number of added compartments
is 2*NUM_COMPS[1] + ... + 2*NUM_COMPS[NUM_ORDERS].
See also: writecell, compartment, Scripts/neurokit/README,
Scripts/int_methods/granule.p