Skip to content
Snippets Groups Projects
morphology.rst 23.13 KiB

Cable cell morphology

A location on :attr:`branch`, where :attr:`pos`, in the range 0 ≤ pos ≤ 1, gives the relative position between the proximal and distal ends of the branch. The position is in terms of branch path length, so for example, on a branch of path length 100 μm pos=0.2 corresponds to 20 μm and 80 μm from the proximal and distal ends of the branch respectively.

An unbranched cable that is a subset of a branch. The values of 0 ≤ prox ≤ dist ≤ 1 are the relative position of the cable's end points on the branch, in terms of branch path length. For example, on a branch of path length 100 μm, the values :attr:`prox` =0.2, :attr:`dist` =0.8 describe a cable that starts and ends 20 μm and 80 μm along the branch respectively.

A location of a cell morphology at a fixed location in space. Describes the location of the as three-dimensional coordinates (:attr:`x`, :attr:`y`, :attr:`z`) and the :attr:`radius` of the cable.

A segment tree is a description of a the segments and their connections Segment trees comprise a sequence of segments starting from at lease one root segment, together with a parent-child adjacency relationship where a child segment is distal to its parent. Branches in the tree occur where a segment has more than one child. Furthermore, a segment can not have more than one parent. In this manner, neuron morphologies are modeled as a tree, where cables that represent dendrites and axons can branch, but branches can not rejoin. A segment tree is a segment-based description of a cell's morphology.

The tree is constructed by appending segments to the tree. Segments are numbered starting at 0 in the order that they are added, with the first segment getting id 0, the second segment id 1, and so forth.

A segment can not be added before its parent, hence the first segment is always at the root. In this manner, a segment tree is always guaranteed to be in a correct state, with consistent parent-child indexing, and with n segments numbered from 0 to n-1.

To illustrate how a segment tree is constructed by appending segments, take the segment tree used in the :ref:`documentation above <morph-label-seg-fig>`.

Which is constructed as follows.

import arbor
from arbor import mpoint
from arbor import mpos

tree = arbor.segment_tree()
# Start with a cylinder segment for the soma (with tag 1)
tree.append(mnpos, mpoint(0,   0.0, 0, 2.0), mpoint( 4,  0.0, 0, 2.0), tag=1)
# Construct the first section of the dendritic tree,
# comprised of segments 1 and 2, attached to soma segment 0.
tree.append(0,     mpoint(4,   0.0, 0, 0.8), mpoint( 8,  0.0, 0, 0.8), tag=3)
tree.append(1,     mpoint(8,   0.0, 0, 0.8), mpoint(12, -0.5, 0, 0.8), tag=3)
# Construct the rest of the dendritic tree.
tree.append(2,     mpoint(12, -0.5, 0, 0.8), mpoint(20,  4.0, 0, 0.4), tag=3)
tree.append(3,     mpoint(20,  4.0, 0, 0.4), mpoint(26,  6.0, 0, 0.2), tag=3)
tree.append(2,     mpoint(12, -0.5, 0, 0.5), mpoint(19, -3.0, 0, 0.5), tag=3)
tree.append(5,     mpoint(19, -3.0, 0, 0.5), mpoint(24, -7.0, 0, 0.2), tag=3)
tree.append(5,     mpoint(19, -3.0, 0, 0.5), mpoint(23, -1.0, 0, 0.2), tag=3)
tree.append(7,     mpoint(23, -1.0, 0, 0.2), mpoint(26, -2.0, 0, 0.2), tag=3)
# Two segments that define the axon, with the first at the root, where its proximal
# end will be connected with the proximal end of the soma segment.
tree.append(mnpos, mpoint(0,   0.0, 0, 2.0), mpoint(-7,  0.0, 0, 0.4), tag=2)
tree.append(9,     mpoint(-7,  0.0, 0, 0.4), mpoint(-10, 0.0, 0, 0.4), tag=2)

Discretisation and CV policies

The set of boundary points used by the simulator is determined by a :ref:`CV policy <morph-cv-policies>`. These are objects of type :cpp:class:`cv_policy`, which has the following public methods:

Specific CV policy objects are created by functions described below. These all take a region parameter that restrict the domain of applicability of that policy; this facility is useful for specifying differing discretisations on different parts of a cell morphology. When a CV policy is constrained in this manner, the boundary of the domain will always constitute part of the CV boundary point set.