neurom.core.morphology#

Morphology classes and functions.

Functions

graft_morphology(section)

Returns a morphology starting at section.

iter_neurites(obj[, mapfun, filt, neurite_order])

Iterator to a neurite, morphology or morphology population.

iter_points(obj[, neurite_filter, ...])

Return an iterator to the points in a population, morphology, neurites, or section.

iter_sections(neurites[, iterator_type, ...])

Iterator to the sections in a neurite, morphology or morphology population.

iter_segments(obj[, neurite_filter, ...])

Return an iterator to the segments in a collection of neurites.

Classes

Morphology(morphio_morph[, name, ...])

Class representing a simple morphology.

Neurite(root_node, *[, process_subtrees])

Class representing a neurite tree.

Section(morphio_section)

Simple recursive tree class.

class neurom.core.morphology.Morphology(morphio_morph, name=None, *, process_subtrees=False)#

Class representing a simple morphology.

Morphology constructor.

Parameters:
  • morphio_morph (morphio.Morphology|morphio.mut.Morphology) – a morphio object

  • name (str) – an optional morphology name

  • process_subtrees (bool) – enable mixed tree processing if set to True

copy()#

Returns a shallow copy of the morphio morphology object.

property neurites#

The list of neurites.

property points#

Returns the list of points.

section(section_id)#

Returns the section with the given id.

property sections#

The array of all sections, excluding the soma.

property segments#

The array of all segments of the sections.

to_morphio()#

Returns the morphio morphology object.

transform(trans)#

Return a copy of this morphology with a 3D transformation applied.

class neurom.core.morphology.Neurite(root_node, *, process_subtrees=False)#

Class representing a neurite tree.

Constructor.

Parameters:
  • root_node (morphio.Section) – root section

  • process_subtrees (bool) – enable mixed tree processing if set to True

property area#

Return the surface area of this neurite.

The area is defined as the sum of area of the sections.

is_heterogeneous() bool#

Returns true if the neurite consists of more that one section types.

property length#

Returns the total length of this neurite.

The length is defined as the sum of lengths of the sections.

property morphio_root_node#

Returns the morphio root section.

property points#

Array with all the points in this neurite.

Note: Duplicate points at section bifurcations are removed

property process_subtrees#

Enable mixed tree processing if set to True.

property root_node#

The first section of the neurite.

property sections#

The array of all sections.

property segments#

The array of all segments of the neurite.

subtree_types#

The types of the subtrees.

type#

The type of the Neurite (which can be composite).

property volume#

Return the volume of this neurite.

The volume is defined as the sum of volumes of the sections.

class neurom.core.morphology.Section(morphio_section)#

Simple recursive tree class.

The section constructor.

property area#

Return the surface area of this section.

The area is calculated from the segments, as defined by this section’s points

property children#

Returns a list of child section.

ibifurcation_point(iter_mode=<function Section.ipreorder>)#

Iterator to bifurcation points.

Parameters:

iter_mode – iteration mode. Default: ipreorder.

property id#

Returns the section ID.

iforking_point(iter_mode=<function Section.ipreorder>)#

Iterator to forking points.

Parameters:

iter_mode – iteration mode. Default: ipreorder.

ileaf()#

Iterator to all leaves of a tree.

ipostorder()#

Depth-first post-order iteration of tree nodes.

ipreorder()#

Depth-first pre-order iteration of tree nodes.

is_bifurcation_point()#

Is tree a bifurcation point?

is_forking_point()#

Is this section a forking point?

is_homogeneous_point()#

A section is homogeneous if it has the same type with its children.

is_leaf()#

Is tree a leaf?

is_root()#

Is tree the root node?

iupstream(stop_node=None)#

Iterate from a tree node to the root nodes.

Parameters:

stop_node – Node to stop the upstream traversal. If None, it stops when parent is None.

property length#

Return the path length of this section.

property parent#

Returns the parent section if non root section else None.

property points#

Returns the section list of points the NeuroM way (points + radius).

property segments#

The array of all segments of the neurite.

to_morphio()#

Returns the morphio section.

property type#

Returns the section type.

property volume#

Return the volume of this section.

The volume is calculated from the segments, as defined by this section’s points

neurom.core.morphology.graft_morphology(section)#

Returns a morphology starting at section.

neurom.core.morphology.iter_neurites(obj, mapfun=None, filt=None, neurite_order=NeuriteIter.FileOrder)#

Iterator to a neurite, morphology or morphology population.

Applies optional neurite filter and mapping functions.

Parameters:
  • obj – a neurite, morphology or morphology population.

  • mapfun – optional neurite mapping function.

  • filt – optional neurite filter function.

  • neurite_order (NeuriteIter) – order upon which neurites should be iterated - NeuriteIter.FileOrder: order of appearance in the file - NeuriteIter.NRN: NRN simulator order: soma -> axon -> basal -> apical

Examples

Get the number of points in each neurite in a morphology population

>>> from neurom.core.morphology import iter_neurites
>>> from neurom import load_morphologies
>>> pop = load_morphologies("tests/data/valid_set")
>>> n_points = [n for n in iter_neurites(pop, lambda x, section_type: len(x.points))]

Get the number of points in each axon in a morphology population

>>> import neurom as nm
>>> from neurom.core.morphology import iter_neurites
>>> from neurom import load_morphologies
>>> pop = load_morphologies("tests/data/valid_set")
>>> filter = lambda n : n.type == nm.AXON
>>> mapping = lambda n, section_type: len(n.points)
>>> n_points = [n for n in iter_neurites(pop, mapping, filter)]
neurom.core.morphology.iter_points(obj, neurite_filter=None, neurite_order=NeuriteIter.FileOrder, section_filter=None)#

Return an iterator to the points in a population, morphology, neurites, or section.

Parameters:
  • obj – population, morphology, neurite, section or iterable containing

  • neurite_filter – optional top level filter on properties of neurite neurite objects

  • neurite_order – order upon which neurite should be iterated. Values: - NeuriteIter.FileOrder: order of appearance in the file - NeuriteIter.NRN: NRN simulator order: soma -> axon -> basal -> apical

  • section_filter – optional section level filter

neurom.core.morphology.iter_sections(neurites, iterator_type=<function Section.ipreorder>, neurite_filter=None, neurite_order=NeuriteIter.FileOrder, section_filter=None)#

Iterator to the sections in a neurite, morphology or morphology population.

Parameters:
  • neurites – morphology, population, neurite, or iterable containing neurite objects

  • iterator_type – section iteration order within a given neurite. Must be one of: Section.ipreorder: Depth-first pre-order iteration of tree nodes Section.ipostorder: Depth-first post-order iteration of tree nodes Section.iupstream: Iterate from a tree node to the root nodes Section.ibifurcation_point: Iterator to bifurcation points Section.ileaf: Iterator to all leaves of a tree

  • neurite_filter – optional top level filter on properties of neurite neurite objects.

  • neurite_order (NeuriteIter) – order upon which neurites should be iterated - NeuriteIter.FileOrder: order of appearance in the file - NeuriteIter.NRN: NRN simulator order: soma -> axon -> basal -> apical

  • section_filter – optional section level filter. Please note that neurite_filter takes precedence over the section_filter.

Examples

Get the number of points in each section of all the axons in a morphology population

>>> import neurom as nm
>>> from neurom.core.morphology import iter_sections
>>> filter = lambda n : n.type == nm.AXON
>>> n_points = [len(s.points) for s in iter_sections(pop,  neurite_filter=filter)]
neurom.core.morphology.iter_segments(obj, neurite_filter=None, neurite_order=NeuriteIter.FileOrder, section_filter=None, section_iterator=<function Section.ipreorder>)#

Return an iterator to the segments in a collection of neurites.

Parameters:
  • obj – morphology, population, neurite, section, or iterable containing neurite objects

  • neurite_filter – optional top level filter on properties of neurite neurite objects

  • neurite_order – order upon which neurite should be iterated. Values: - NeuriteIter.FileOrder: order of appearance in the file - NeuriteIter.NRN: NRN simulator order: soma -> axon -> basal -> apical

  • section_filter – optional section level filter

  • section_iterator – section iteration order within a given neurite. Must be one of: Section.ipreorder: Depth-first pre-order iteration of tree nodes Section.ipostorder: Depth-first post-order iteration of tree nodes Section.iupstream: Iterate from a tree node to the root nodes Section.ibifurcation_point: Iterator to bifurcation points Section.ileaf: Iterator to all leaves of a tree

Note

This is a convenience function provided for generic access to morphology segments. It may have a performance overhead WRT custom-made segment analysis functions that leverage numpy and section-wise iteration.