-
Notifications
You must be signed in to change notification settings - Fork 61
Cable Cell Morphologies
bcumming edited this page Mar 4, 2019
·
2 revisions
The current library interface for constructing cell morphologies needs improvement. The problems with the current approach include
- No way to label segments and sub-regions of cells for later reference.
- there are three existing "cable" types: sphere, dendrite and axon
- these are implemented as classes that inherit from a an abstract
segment
base class. - to add a mechanism to every dendrite, for example, one has to iterate over all segments manually
- see NeuronML, which allows the labeling of arbitrary parts of the cell morphology.
- The morphology description includes information about the multi-compartment discretization,
specifically the number of compartments per segment.
- these should be separate
- The term segment is used in a non-standard way. In Neuron a segment is a compartment, and in NeuroML a segment is the smallest atomic unit for constructing a cell.
There are four different components required to construct a discretized multi-compartment cell, ready for simulation. The first three components describe the cell and its dynamics, and the fourth is meta-data pertaining to the numeric solution method:
- Morphologies: the cell morphology, described by a set of connected segments.
- Labels: subsets of the morphology, e.g. "dendrite", "soma", "hillock", "spine"
- Dynamics: ion channels, synapses, capacitance, resistance etc: assigned to labels, segments or branches.
- Discretization Meta-data: description of how the morphology should be decomposed into compartments for a specific discretization/numeric solver.
- A morphology is composed of segments.
- A segment is either
- a sphere
- linear cable segment
- a spherical segment has:
- a parent segment [compulsory]
- a radius [compulsory]
- a center [optional]
- a cable segment has:
- a parent segment [compulsory]
- one of:
- length and radius [cylinder]
- length and proximal+distal radii [tapering cylinder]
- explicit proximal+distal locations + radii
- length+ distal radius [inherits proximal radius parent segment]
- distal location+radius [inherits proximal radius and location from parent segment]
- a spherical segment can't have spherical parent (how do you calculate the resistance or surface area between them?)
- a cable segment with spherical parent must provide proximal radius
Open questions:
- NeuroML allows segments to attach at an arbitrary location on its parent: should we support this
- I say yes.
- On a cable soma we need to be able to say which end of the cable a child segment attaches to.
- This would be supported by allowing segments to attach at arbitrary locations.
# a spherical segment
seg 0 {
parent(), # empty parent indicates the root of tree
center(0,0,0),
radius(10)
}
# cable segment: fixed radius
seg 3 {
parent(2),
len(20),
rad(0.5)
}
# cable segment: tapering
seg 3 {
parent(2),
len(20),
prox rad(0.5),
dist rad(0.2)
}
# cable segment: tapering
seg 3 {
parent(2),
prox pos(10, 2, 0, 0.5),
dist pos(12, 4, 0, 0.2)
}
The approach would be to implement each of the components first in C++, then in Python.
- C++ API for morphologies, including both programatic and SWC inputs.
- Python wrapper for morphologies.
- C++ API for labels
- Python wrapper labels
- C++ API for dynamics
- Python wrapper for dynamics
- C++ API for discretization meta-data
- C++ implement FVM discretization using cell description and meta-data
- Design file format for describing cells
- C++ API for both input and output of the file format.
- Python wrapper for IO
- Python support for converting from PyNeuroML: can be used with step 10 to output file format from step 9.