Neuron objects¶
pymaid is built on top of <navis https://navis.readthedocs.io/en/latest/>_.
Single neurons and lists of neurons are represented in pymaid by
pymaid.CatmaidNeuron and pymaid.CatmaidNeuronList which
are subclasses of navis.TreeNeuron and navis.NeuronList, respectively.
As such, they can be plugged into any navis function that accepts their
parent class!
CatmaidNeuron can be minimally initialized with just skeleton IDs. So you
can do something like this:
>>> n = pymaid.CatmaidNeuron(16)
>>> n
type <class 'pymaid.core.CatmaidNeuron'>
neuron_name NA
skeleton_id 16
n_nodes NA
n_connectors NA
n_branch_nodes NA
n_end_nodes NA
n_open_ends NA
cable_length NA
review_status NA
soma NA
dtype: object
This gives you an empty neuron (note NA entries) which you can
use to retrieve more data. Ordinarily, however, you would get neurons from
functions like pymaid.get_neuron() that already contain some data:
>>> n = pymaid.get_neuron(16)
>>> n
type <class 'pymaid.core.CatmaidNeuron'>
neuron_name PN glomerulus VA6 017 DB
skeleton_id 16
n_nodes 12743
n_connectors 2028
n_branch_nodes 774
n_end_nodes 823
n_open_ends 280
cable_length 2866.11
review_status NA
soma 2941309
pymaid.get_neuron() returned a CatmaidNeuron with name,
nodes, connectors and tags:
>>> n.nodes
node_id parent_id creator_id x y z radius \
0 17909304 26337791 123 355710 153742 152440 -1
1 26337791 26337787 117 355738 153802 152400 -1
2 26337787 3148134 117 355790 153922 152320 -1
3 6532788 25728462 94 349025 160905 154160 -1
4 25728462 6532787 117 349059 160783 154360 -1
confidence type
0 5 end
1 5 slab
2 5 slab
3 5 slab
4 5 slab
Missing data, e.g. the review status or annotations, are fetched on demand (see also list below):
>>> n.annotations
['test_cremi_c',
'WTPN2017_AL_PN',
...
'right',
'right excitatory']
To force an update calling the respective function explicitly:
>>> n.get_annotations()
['test_cremi_c',
'WTPN2017_AL_PN',
...
'right',
'glomerulus DA1 right excitatory']
Functions such as pymaid.get_neuron() return multiple neurons as
CatmaidNeuronList:
>>> nl = pymaid.get_neuron([16, 27295])
>>> nl
<class 'pymaid.core.CatmaidNeuronList'> of 2 neurons
neuron_name skeleton_id n_nodes n_connectors \
0 PN glomerulus VA6 017 DB 16 12743 2028
1 PN glomerulus DA1 27296 BH 27295 9973 469
n_branch_nodes n_end_nodes open_ends cable_length review_status soma
0 774 823 280 2866.105439 NA True
1 212 219 58 1591.519821 NA True
A CatmaidNeuronList works similar to normal Python lists with
a few additional perks:
>>> # Get the first (Python indices start at 0) neuron in the list
>>> nl[0]
type <class 'pymaid.core.CatmaidNeuron'>
neuron_name PN glomerulus VA6 017 DB
skeleton_id 16
n_nodes 12743
n_connectors 2028
n_branch_nodes 774
n_end_nodes 823
n_open_ends 280
cable_length 2866.11
review_status NA
soma 2941309
>>> # Get a skeleton by it's ID using the ``.idx`` indexer
>>> nl.idx[27295]
type <class 'pymaid.core.CatmaidNeuron'>
neuron_name PN glomerulus VA6 017 DB
skeleton_id 16
n_nodes 12743
n_connectors 2028
n_branch_nodes 774
n_end_nodes 823
n_open_ends 280
cable_length 2866.11
review_status NA
soma 2941309
>>> # Filter neurons by annotation(s)
>>> nl.has_annotations('glomerulus VA6')
<class 'pymaid.core.CatmaidNeuronList'> of 1 neurons
neuron_name skeleton_id n_nodes n_connectors \
0 PN glomerulus VA6 017 DB 16 12743 2028
n_branch_nodes n_end_nodes open_ends cable_length review_status soma
0 774 823 280 2866.105439 NA True
They allow easy and fast access to data across all neurons:
>>> nl.skeleton_id
array(['16', '27295'], dtype='<U5')
>>> nl.cable_length
array([2866.10543944, 1591.51982146])
In addition to these attributes, both CatmaidNeuron and
CatmaidNeuronList have shortcuts (called methods) to
other pymaid functions. These lines of code are equivalent:
>>> # Reroot the neuron
>>> n.reroot(n.soma, inplace=True)
>>> n.root = n.soma
>>> pymaid.reroot_neuron(n, n.soma, inplace=True)
>>> # Plot in 3D
>>> n.plot3d(color='red')
>>> pymaid.plot3d(n, color='red')
>>> # Prune to the arbors inside the lateral horn volume
>>> lh = pymaid.get_volume("LH_R")
>>> n.prune_by_volume(lh, inplace=True)
>>> navis.in_volume(n, lh, inplace=True)
The inplace parameter is part of many pymaid (and navis) functions and
works like that in the pandas library. If inplace=True operations are
performed on the original. If inplace=False (default) operations are
performed on a copy of the original which is then returned:
>>> n = pymaid.get_neuron(16)
>>> n_lh = n.prune_by_volume('LH_R', inplace=False)
>>> n.n_nodes, n_lh.n_nodes
(12743, 3564)
Please see other sections and the docstrings of
CatmaidNeuron and CatmaidNeuronList for
more examples.
Neuron attributes¶
This is a selection of CatmaidNeuron and
CatmaidNeuronList class attributes:
skeleton_id: neurons’ skeleton ID(s)neuron_name: neurons’ name(s)nodes: node tableconnectors: connector tablepresynapses: connector table for presynapses onlypostsynapses: connector table for postsynapses onlygap_junctions: connector table for gap junctions onlypartners: connectivity tabletags: node tags (dict)annotations: list of neurons’ annotationscable_length: cable length(s) in nmreview_status: review status of neuron(s)soma: node ID of soma (if applicable)root: root node IDsegments: list of linear segmentsgraph: NetworkX graph representation of the neuronigraph: iGraph representation of the neuron (if library available)
All attributes are accessible through auto-completion.
Reference¶
See CatmaidNeuron or API.