Notebook for demo how to get features with neuron_morphology¶

To obtain the package, please see https://neuron-morphology.readthedocs.io/en/readthedocs/.

This step-by-step guid will walk you through the whole process of getting the interested features with neuron_morphology.

In [1]:
import sys
sys.path.insert(0, "../")
#import warnings
#warnings.filterwarnings('ignore')

from io import StringIO
import requests
from neuron_morphology.swc_io import morphology_from_swc
from neuron_morphology.feature_extractor.data import Data
from neuron_morphology.feature_extractor.feature_extractor import FeatureExtractor
import neuron_morphology.feature_extractor.feature_writer as fw
from neuron_morphology.features.default_features import default_features

import matplotlib.pyplot as plt
import json
import numpy as np

Pick your neuron (.swc/.csv)¶

Here select one SWC file as an example.

In [2]:
def data_from_url(morphology_url):
    morphology_swc = StringIO(requests.get(morphology_url).text)

    # Feature functions expect a Data object - in this case just a wrapper for a Morphology
    # If we were working with additional data (say, layer annotations) we would store these here as well
    return Data(morphology_from_swc(morphology_swc))

# fetch a published reconstruction
IVSCC_swc_file = "http://celltypes.brain-map.org/api/v2/well_known_file_download/491120375"

Load SWC file as morphology data¶

We can load the SWC file into our morphology data object and then calculate features on it.

In [3]:
# fetch a published reconstruction 
test_data = data_from_url(IVSCC_swc_file)

# directly load a swc file given its file path
# test_data = Data(morphology_from_swc(IVSCC_swc_file))

nodes = test_data.morphology.nodes()

x = [node['x'] for node in nodes]
y = [node['y'] for node in nodes]
z = [node['z'] for node in nodes]

fig, ax = plt.subplots(1, 2)
ax[0].scatter(x, y, s=0.1)
ax[0].set_title('x-y view')
ax[1].scatter(z, y, s=0.1)
ax[1].set_title('z-y view')
Out[3]:
Text(0.5, 1.0, 'z-y view')

List default features to extract¶

Register your interested features¶

In this example, we register all the default features to extract.

In [4]:
fe = FeatureExtractor()
fe.register_features(default_features)
Out[4]:
<neuron_morphology.feature_extractor.feature_extractor.FeatureExtractor at 0x1a213839b0>

Extracting features¶

In [5]:
feature_extraction_run = fe.extract(test_data)
2020-02-25 14:04:19,178 root         INFO     skipping mark (validation failed): type
2020-02-25 14:04:19,182 root         INFO     skipping mark (validation failed): type
2020-02-25 14:04:19,184 root         INFO     skipping mark (validation failed): type
/Users/matthew.aitken/allen_dev/neuron_morphology/neuron_morphology/feature_extractor/mark.py:118: UserWarning: This morphology is not uniquely rooted! Found 7 root nodes. Features using the root node of this morphology may not select that node consistently. Some or all of these root nodes may not be soma nodes.
  f"This morphology is not uniquely rooted! Found {num_roots} "
2020-02-25 14:04:19,197 root         INFO     selected marks: <bound method FeatureExtractionRun.select_marks of <neuron_morphology.feature_extractor.feature_extraction_run.FeatureExtractionRun object at 0x1a213837f0>>
2020-02-25 14:04:19,197 root         INFO     skipping feature: apical_dendrite.node.dimension. Found extra marks: ['RequiresApical']
2020-02-25 14:04:19,199 root         INFO     skipping feature: apical_dendrite.tip.dimension. Found extra marks: ['RequiresApical']
2020-02-25 14:04:19,200 root         INFO     skipping feature: apical_dendrite.compartment.dimension. Found extra marks: ['RequiresApical']
2020-02-25 14:04:19,201 root         INFO     skipping feature: apical_dendrite.bifurcation.dimension. Found extra marks: ['RequiresApical']
2020-02-25 14:04:19,202 root         INFO     skipping feature: apical_dendrite.num_nodes. Found extra marks: ['RequiresApical']
2020-02-25 14:04:19,202 root         INFO     skipping feature: apical_dendrite.num_branches. Found extra marks: ['RequiresApical']
2020-02-25 14:04:19,203 root         INFO     skipping feature: apical_dendrite.num_tips. Found extra marks: ['RequiresApical']
2020-02-25 14:04:19,204 root         INFO     skipping feature: apical_dendrite.mean_fragmentation. Found extra marks: ['RequiresApical']
2020-02-25 14:04:19,205 root         INFO     skipping feature: apical_dendrite.max_branch_order. Found extra marks: ['RequiresApical']
2020-02-25 14:04:19,206 root         INFO     skipping feature: apical_dendrite.num_outer_bifurcations. Found extra marks: ['RequiresApical']
2020-02-25 14:04:19,207 root         INFO     skipping feature: apical_dendrite.total_length. Found extra marks: ['RequiresApical']
2020-02-25 14:04:19,207 root         INFO     skipping feature: apical_dendrite.total_surface_area. Found extra marks: ['RequiresApical']
2020-02-25 14:04:19,208 root         INFO     skipping feature: apical_dendrite.total_volume. Found extra marks: ['RequiresApical']
2020-02-25 14:04:19,209 root         INFO     skipping feature: apical_dendrite.mean_diameter. Found extra marks: ['RequiresApical']
2020-02-25 14:04:19,210 root         INFO     skipping feature: apical_dendrite.mean_parent_daughter_ratio. Found extra marks: ['RequiresApical']
2020-02-25 14:04:19,211 root         INFO     skipping feature: apical_dendrite.max_euclidean_distance. Found extra marks: ['RequiresApical']
2020-02-25 14:04:19,212 root         INFO     skipping feature: apical_dendrite.axon.overlap. Found extra marks: ['RequiresApical']
2020-02-25 14:04:19,213 root         INFO     skipping feature: apical_dendrite.dendrite.overlap. Found extra marks: ['RequiresApical']
2020-02-25 14:04:19,214 root         INFO     skipping feature: axon.apical_dendrite.overlap. Found extra marks: ['RequiresApical']
2020-02-25 14:04:19,215 root         INFO     skipping feature: apical_dendrite.apical_dendrite.overlap. Found extra marks: ['RequiresApical']
2020-02-25 14:04:19,215 root         INFO     skipping feature: basal_dendrite.apical_dendrite.overlap. Found extra marks: ['RequiresApical']
2020-02-25 14:04:19,216 root         INFO     skipping feature: dendrite.apical_dendrite.overlap. Found extra marks: ['RequiresApical']
2020-02-25 14:04:19,216 root         INFO     skipping feature: apical_dendrite.basal_dendrite.overlap. Found extra marks: ['RequiresApical']
2020-02-25 14:04:19,218 root         INFO     skipping feature: apical_dendrite.node.moments. Found extra marks: ['RequiresApical']
2020-02-25 14:04:19,219 root         INFO     skipping feature: apical_dendrite.tip.moments. Found extra marks: ['RequiresApical']
2020-02-25 14:04:19,219 root         INFO     skipping feature: apical_dendrite.compartment.moments. Found extra marks: ['RequiresApical']
2020-02-25 14:04:19,220 root         INFO     skipping feature: apical_dendrite.bifurcation.moments. Found extra marks: ['RequiresApical']
2020-02-25 14:04:19,221 root         INFO     skipping feature: basal_dendrite.normalized_depth_histogram. Found extra marks: ['RequiresReferenceLayerDepths', 'RequiresLayeredPointDepths']
2020-02-25 14:04:19,222 root         INFO     skipping feature: all_neurites.normalized_depth_histogram. Found extra marks: ['RequiresReferenceLayerDepths', 'RequiresLayeredPointDepths']
2020-02-25 14:04:19,224 root         INFO     skipping feature: dendrite.normalized_depth_histogram. Found extra marks: ['RequiresReferenceLayerDepths', 'RequiresLayeredPointDepths']
2020-02-25 14:04:19,225 root         INFO     skipping feature: apical_dendrite.normalized_depth_histogram. Found extra marks: ['RequiresApical', 'RequiresReferenceLayerDepths', 'RequiresLayeredPointDepths']
2020-02-25 14:04:19,226 root         INFO     skipping feature: axon.normalized_depth_histogram. Found extra marks: ['RequiresReferenceLayerDepths', 'RequiresLayeredPointDepths']
2020-02-25 14:04:19,227 root         INFO     skipping feature: axon.axon.earth_movers_distance. Found extra marks: ['RequiresReferenceLayerDepths', 'RequiresLayeredPointDepths']
2020-02-25 14:04:19,228 root         INFO     skipping feature: apical_dendrite.axon.earth_movers_distance. Found extra marks: ['RequiresApical', 'RequiresReferenceLayerDepths', 'RequiresLayeredPointDepths']
2020-02-25 14:04:19,228 root         INFO     skipping feature: basal_dendrite.axon.earth_movers_distance. Found extra marks: ['RequiresReferenceLayerDepths', 'RequiresLayeredPointDepths']
2020-02-25 14:04:19,230 root         INFO     skipping feature: dendrite.axon.earth_movers_distance. Found extra marks: ['RequiresReferenceLayerDepths', 'RequiresLayeredPointDepths']
2020-02-25 14:04:19,230 root         INFO     skipping feature: axon.dendrite.earth_movers_distance. Found extra marks: ['RequiresReferenceLayerDepths', 'RequiresLayeredPointDepths']
2020-02-25 14:04:19,231 root         INFO     skipping feature: apical_dendrite.dendrite.earth_movers_distance. Found extra marks: ['RequiresApical', 'RequiresReferenceLayerDepths', 'RequiresLayeredPointDepths']
2020-02-25 14:04:19,232 root         INFO     skipping feature: basal_dendrite.dendrite.earth_movers_distance. Found extra marks: ['RequiresReferenceLayerDepths', 'RequiresLayeredPointDepths']
2020-02-25 14:04:19,232 root         INFO     skipping feature: dendrite.dendrite.earth_movers_distance. Found extra marks: ['RequiresReferenceLayerDepths', 'RequiresLayeredPointDepths']
2020-02-25 14:04:19,233 root         INFO     skipping feature: axon.apical_dendrite.earth_movers_distance. Found extra marks: ['RequiresApical', 'RequiresReferenceLayerDepths', 'RequiresLayeredPointDepths']
2020-02-25 14:04:19,234 root         INFO     skipping feature: apical_dendrite.apical_dendrite.earth_movers_distance. Found extra marks: ['RequiresApical', 'RequiresReferenceLayerDepths', 'RequiresLayeredPointDepths']
2020-02-25 14:04:19,235 root         INFO     skipping feature: basal_dendrite.apical_dendrite.earth_movers_distance. Found extra marks: ['RequiresApical', 'RequiresReferenceLayerDepths', 'RequiresLayeredPointDepths']
2020-02-25 14:04:19,235 root         INFO     skipping feature: dendrite.apical_dendrite.earth_movers_distance. Found extra marks: ['RequiresApical', 'RequiresReferenceLayerDepths', 'RequiresLayeredPointDepths']
2020-02-25 14:04:19,236 root         INFO     skipping feature: axon.basal_dendrite.earth_movers_distance. Found extra marks: ['RequiresReferenceLayerDepths', 'RequiresLayeredPointDepths']
2020-02-25 14:04:19,237 root         INFO     skipping feature: apical_dendrite.basal_dendrite.earth_movers_distance. Found extra marks: ['RequiresApical', 'RequiresReferenceLayerDepths', 'RequiresLayeredPointDepths']
2020-02-25 14:04:19,238 root         INFO     skipping feature: basal_dendrite.basal_dendrite.earth_movers_distance. Found extra marks: ['RequiresReferenceLayerDepths', 'RequiresLayeredPointDepths']
2020-02-25 14:04:19,239 root         INFO     skipping feature: dendrite.basal_dendrite.earth_movers_distance. Found extra marks: ['RequiresReferenceLayerDepths', 'RequiresLayeredPointDepths']
2020-02-25 14:04:19,244 root         INFO     selected features: ['basal_dendrite.node.dimension', 'all_neurites.node.dimension', 'dendrite.node.dimension', 'axon.node.dimension', 'basal_dendrite.tip.dimension', 'all_neurites.tip.dimension', 'dendrite.tip.dimension', 'axon.tip.dimension', 'basal_dendrite.compartment.dimension', 'all_neurites.compartment.dimension', 'dendrite.compartment.dimension', 'axon.compartment.dimension', 'basal_dendrite.bifurcation.dimension', 'all_neurites.bifurcation.dimension', 'dendrite.bifurcation.dimension', 'axon.bifurcation.dimension', 'basal_dendrite.num_nodes', 'all_neurites.num_nodes', 'dendrite.num_nodes', 'axon.num_nodes', 'basal_dendrite.num_branches', 'all_neurites.num_branches', 'dendrite.num_branches', 'axon.num_branches', 'basal_dendrite.num_tips', 'all_neurites.num_tips', 'dendrite.num_tips', 'axon.num_tips', 'basal_dendrite.mean_fragmentation', 'all_neurites.mean_fragmentation', 'dendrite.mean_fragmentation', 'axon.mean_fragmentation', 'basal_dendrite.max_branch_order', 'all_neurites.max_branch_order', 'dendrite.max_branch_order', 'axon.max_branch_order', 'basal_dendrite.num_outer_bifurcations', 'all_neurites.num_outer_bifurcations', 'dendrite.num_outer_bifurcations', 'axon.num_outer_bifurcations', 'basal_dendrite.total_length', 'all_neurites.total_length', 'dendrite.total_length', 'axon.total_length', 'basal_dendrite.total_surface_area', 'all_neurites.total_surface_area', 'dendrite.total_surface_area', 'axon.total_surface_area', 'basal_dendrite.total_volume', 'all_neurites.total_volume', 'dendrite.total_volume', 'axon.total_volume', 'basal_dendrite.mean_diameter', 'all_neurites.mean_diameter', 'dendrite.mean_diameter', 'axon.mean_diameter', 'basal_dendrite.mean_parent_daughter_ratio', 'all_neurites.mean_parent_daughter_ratio', 'dendrite.mean_parent_daughter_ratio', 'axon.mean_parent_daughter_ratio', 'basal_dendrite.max_euclidean_distance', 'all_neurites.max_euclidean_distance', 'dendrite.max_euclidean_distance', 'axon.max_euclidean_distance', 'max_path_distance', 'early_branch_path', 'mean_contraction', 'axon.axon.overlap', 'basal_dendrite.axon.overlap', 'dendrite.axon.overlap', 'axon.dendrite.overlap', 'basal_dendrite.dendrite.overlap', 'dendrite.dendrite.overlap', 'axon.basal_dendrite.overlap', 'basal_dendrite.basal_dendrite.overlap', 'dendrite.basal_dendrite.overlap', 'basal_dendrite.node.moments', 'all_neurites.node.moments', 'dendrite.node.moments', 'axon.node.moments', 'basal_dendrite.tip.moments', 'all_neurites.tip.moments', 'dendrite.tip.moments', 'axon.tip.moments', 'basal_dendrite.compartment.moments', 'all_neurites.compartment.moments', 'dendrite.compartment.moments', 'axon.compartment.moments', 'basal_dendrite.bifurcation.moments', 'all_neurites.bifurcation.moments', 'dendrite.bifurcation.moments', 'axon.bifurcation.moments']

Results¶

In [6]:
results = feature_extraction_run.results

from neuron_morphology.feature_extractor.utilities import unnest
unnest(results)
Out[6]:
{'basal_dendrite.node.dimension.width': 384.2443999999999,
 'basal_dendrite.node.dimension.height': 209.35199999999998,
 'basal_dendrite.node.dimension.depth': 58.8211,
 'basal_dendrite.node.dimension.min_xyz': array([ -86.8776, -151.2368,  -15.5191]),
 'basal_dendrite.node.dimension.max_xyz': array([297.3668,  58.1152,  43.302 ]),
 'basal_dendrite.node.dimension.bias_xyz': array([210.4892,  93.1216,  27.7829]),
 'all_neurites.node.dimension.width': 598.6509,
 'all_neurites.node.dimension.height': 602.6546,
 'all_neurites.node.dimension.depth': 71.5631,
 'all_neurites.node.dimension.min_xyz': array([-252.2122, -220.8229,  -16.1489]),
 'all_neurites.node.dimension.max_xyz': array([346.4387, 381.8317,  55.4142]),
 'all_neurites.node.dimension.bias_xyz': array([ 94.2265, 161.0088,  39.2653]),
 'dendrite.node.dimension.width': 384.2443999999999,
 'dendrite.node.dimension.height': 209.35199999999998,
 'dendrite.node.dimension.depth': 58.8211,
 'dendrite.node.dimension.min_xyz': array([ -86.8776, -151.2368,  -15.5191]),
 'dendrite.node.dimension.max_xyz': array([297.3668,  58.1152,  43.302 ]),
 'dendrite.node.dimension.bias_xyz': array([210.4892,  93.1216,  27.7829]),
 'axon.node.dimension.width': 598.6509,
 'axon.node.dimension.height': 602.6546,
 'axon.node.dimension.depth': 71.5631,
 'axon.node.dimension.min_xyz': array([-252.2122, -220.8229,  -16.1489]),
 'axon.node.dimension.max_xyz': array([346.4387, 381.8317,  55.4142]),
 'axon.node.dimension.bias_xyz': array([ 94.2265, 161.0088,  39.2653]),
 'basal_dendrite.tip.dimension.width': 384.2443999999999,
 'basal_dendrite.tip.dimension.height': 209.35199999999998,
 'basal_dendrite.tip.dimension.depth': 58.702,
 'basal_dendrite.tip.dimension.min_xyz': array([ -86.8776, -151.2368,  -15.4   ]),
 'basal_dendrite.tip.dimension.max_xyz': array([297.3668,  58.1152,  43.302 ]),
 'basal_dendrite.tip.dimension.bias_xyz': array([210.4892,  93.1216,  27.902 ]),
 'all_neurites.tip.dimension.width': 598.6509,
 'all_neurites.tip.dimension.height': 602.6546,
 'all_neurites.tip.dimension.depth': 71.02420000000001,
 'all_neurites.tip.dimension.min_xyz': array([-252.2122, -220.8229,  -15.61  ]),
 'all_neurites.tip.dimension.max_xyz': array([346.4387, 381.8317,  55.4142]),
 'all_neurites.tip.dimension.bias_xyz': array([ 94.2265, 161.0088,  39.8042]),
 'dendrite.tip.dimension.width': 384.2443999999999,
 'dendrite.tip.dimension.height': 209.35199999999998,
 'dendrite.tip.dimension.depth': 58.702,
 'dendrite.tip.dimension.min_xyz': array([ -86.8776, -151.2368,  -15.4   ]),
 'dendrite.tip.dimension.max_xyz': array([297.3668,  58.1152,  43.302 ]),
 'dendrite.tip.dimension.bias_xyz': array([210.4892,  93.1216,  27.902 ]),
 'axon.tip.dimension.width': 598.6509,
 'axon.tip.dimension.height': 602.6546,
 'axon.tip.dimension.depth': 71.02420000000001,
 'axon.tip.dimension.min_xyz': array([-252.2122, -220.8229,  -15.61  ]),
 'axon.tip.dimension.max_xyz': array([346.4387, 381.8317,  55.4142]),
 'axon.tip.dimension.bias_xyz': array([ 94.2265, 161.0088,  39.8042]),
 'basal_dendrite.compartment.dimension.width': 597.75495,
 'basal_dendrite.compartment.dimension.height': 601.5844,
 'basal_dendrite.compartment.dimension.depth': 70.9803,
 'basal_dendrite.compartment.dimension.min_xyz': array([-251.64115, -220.31665,  -16.1041 ]),
 'basal_dendrite.compartment.dimension.max_xyz': array([346.1138 , 381.26775,  54.8762 ]),
 'basal_dendrite.compartment.dimension.bias_xyz': array([ 94.47265, 160.9511 ,  38.7721 ]),
 'all_neurites.compartment.dimension.width': 597.75495,
 'all_neurites.compartment.dimension.height': 601.5844,
 'all_neurites.compartment.dimension.depth': 70.9803,
 'all_neurites.compartment.dimension.min_xyz': array([-251.64115, -220.31665,  -16.1041 ]),
 'all_neurites.compartment.dimension.max_xyz': array([346.1138 , 381.26775,  54.8762 ]),
 'all_neurites.compartment.dimension.bias_xyz': array([ 94.47265, 160.9511 ,  38.7721 ]),
 'dendrite.compartment.dimension.width': 597.75495,
 'dendrite.compartment.dimension.height': 601.5844,
 'dendrite.compartment.dimension.depth': 70.9803,
 'dendrite.compartment.dimension.min_xyz': array([-251.64115, -220.31665,  -16.1041 ]),
 'dendrite.compartment.dimension.max_xyz': array([346.1138 , 381.26775,  54.8762 ]),
 'dendrite.compartment.dimension.bias_xyz': array([ 94.47265, 160.9511 ,  38.7721 ]),
 'axon.compartment.dimension.width': 597.75495,
 'axon.compartment.dimension.height': 601.5844,
 'axon.compartment.dimension.depth': 70.9803,
 'axon.compartment.dimension.min_xyz': array([-251.64115, -220.31665,  -16.1041 ]),
 'axon.compartment.dimension.max_xyz': array([346.1138 , 381.26775,  54.8762 ]),
 'axon.compartment.dimension.bias_xyz': array([ 94.47265, 160.9511 ,  38.7721 ]),
 'basal_dendrite.bifurcation.dimension.width': 298.87109999999996,
 'basal_dendrite.bifurcation.dimension.height': 130.90789999999998,
 'basal_dendrite.bifurcation.dimension.depth': 19.8475,
 'basal_dendrite.bifurcation.dimension.min_xyz': array([ -34.32  , -115.099 ,  -13.9513]),
 'basal_dendrite.bifurcation.dimension.max_xyz': array([264.5511,  15.8089,   5.8962]),
 'basal_dendrite.bifurcation.dimension.bias_xyz': array([230.2311,  99.2901,   8.0551]),
 'all_neurites.bifurcation.dimension.width': 468.01079999999996,
 'all_neurites.bifurcation.dimension.height': 370.59540000000004,
 'all_neurites.bifurcation.dimension.depth': 63.7093,
 'all_neurites.bifurcation.dimension.min_xyz': array([-203.4597, -161.5683,  -13.9513]),
 'all_neurites.bifurcation.dimension.max_xyz': array([264.5511, 209.0271,  49.758 ]),
 'all_neurites.bifurcation.dimension.bias_xyz': array([61.0914, 47.4588, 35.8067]),
 'dendrite.bifurcation.dimension.width': 298.87109999999996,
 'dendrite.bifurcation.dimension.height': 130.90789999999998,
 'dendrite.bifurcation.dimension.depth': 19.8475,
 'dendrite.bifurcation.dimension.min_xyz': array([ -34.32  , -115.099 ,  -13.9513]),
 'dendrite.bifurcation.dimension.max_xyz': array([264.5511,  15.8089,   5.8962]),
 'dendrite.bifurcation.dimension.bias_xyz': array([230.2311,  99.2901,   8.0551]),
 'axon.bifurcation.dimension.width': 299.6037,
 'axon.bifurcation.dimension.height': 370.59540000000004,
 'axon.bifurcation.dimension.depth': 63.5054,
 'axon.bifurcation.dimension.min_xyz': array([-203.4597, -161.5683,  -13.7474]),
 'axon.bifurcation.dimension.max_xyz': array([ 96.144 , 209.0271,  49.758 ]),
 'axon.bifurcation.dimension.bias_xyz': array([107.3157,  47.4588,  36.0106]),
 'basal_dendrite.num_nodes': 1138,
 'all_neurites.num_nodes': 9011,
 'dendrite.num_nodes': 1138,
 'axon.num_nodes': 7872,
 'basal_dendrite.num_branches': 28,
 'all_neurites.num_branches': 234,
 'dendrite.num_branches': 28,
 'axon.num_branches': 205,
 'basal_dendrite.num_tips': 16,
 'all_neurites.num_tips': 122,
 'dendrite.num_tips': 16,
 'axon.num_tips': 106,
 'basal_dendrite.mean_fragmentation': 45.666666666666664,
 'all_neurites.mean_fragmentation': 40.113122171945705,
 'dendrite.mean_fragmentation': 45.666666666666664,
 'axon.mean_fragmentation': 39.83076923076923,
 'basal_dendrite.max_branch_order': 5,
 'all_neurites.max_branch_order': 20,
 'dendrite.max_branch_order': 5,
 'axon.max_branch_order': 18,
 'basal_dendrite.num_outer_bifurcations': 2,
 'all_neurites.num_outer_bifurcations': 6,
 'dendrite.num_outer_bifurcations': 2,
 'axon.num_outer_bifurcations': 4,
 'basal_dendrite.total_length': 1328.5272307560708,
 'all_neurites.total_length': 10597.055000190818,
 'dendrite.total_length': 1328.5272307560708,
 'axon.total_length': 9267.107931500354,
 'basal_dendrite.total_surface_area': 1446.9625685172398,
 'all_neurites.total_surface_area': 10180.544127130415,
 'dendrite.total_surface_area': 1446.9625685172398,
 'axon.total_surface_area': 8076.358511825999,
 'basal_dendrite.total_volume': 138.506708926475,
 'all_neurites.total_volume': 1661.2646020708073,
 'dendrite.total_volume': 138.506708926475,
 'axon.total_volume': 573.1543047923315,
 'basal_dendrite.mean_diameter': 0.34678910369068544,
 'all_neurites.mean_diameter': 0.28735922761069804,
 'dendrite.mean_diameter': 0.34678910369068544,
 'axon.mean_diameter': 0.27727619410569104,
 'basal_dendrite.mean_parent_daughter_ratio': 1.0107658156125583,
 'all_neurites.mean_parent_daughter_ratio': 1.019226483271939,
 'dendrite.mean_parent_daughter_ratio': 1.0107658156125583,
 'axon.mean_parent_daughter_ratio': 1.0048656537174114,
 'basal_dendrite.max_euclidean_distance': 316.34712860060864,
 'all_neurites.max_euclidean_distance': 406.2726500370164,
 'dendrite.max_euclidean_distance': 316.34712860060864,
 'axon.max_euclidean_distance': 406.2726500370164,
 'max_path_distance': 487.9666166977375,
 'early_branch_path': 0.9043141229383738,
 'mean_contraction': 0.8914424815936268,
 'axon.axon.overlap.above': 0.0,
 'axon.axon.overlap.overlap': 1.0,
 'axon.axon.overlap.below': 0.0,
 'basal_dendrite.axon.overlap.above': 0.3075457317073171,
 'basal_dendrite.axon.overlap.overlap': 0.651295731707317,
 'basal_dendrite.axon.overlap.below': 0.041158536585365856,
 'dendrite.axon.overlap.above': 0.3075457317073171,
 'dendrite.axon.overlap.overlap': 0.651295731707317,
 'dendrite.axon.overlap.below': 0.041158536585365856,
 'axon.dendrite.overlap.above': 0.0,
 'axon.dendrite.overlap.overlap': 1.0,
 'axon.dendrite.overlap.below': 0.0,
 'basal_dendrite.dendrite.overlap.above': 0.0,
 'basal_dendrite.dendrite.overlap.overlap': 1.0,
 'basal_dendrite.dendrite.overlap.below': 0.0,
 'dendrite.dendrite.overlap.above': 0.0,
 'dendrite.dendrite.overlap.overlap': 1.0,
 'dendrite.dendrite.overlap.below': 0.0,
 'axon.basal_dendrite.overlap.above': 0.0,
 'axon.basal_dendrite.overlap.overlap': 1.0,
 'axon.basal_dendrite.overlap.below': 0.0,
 'basal_dendrite.basal_dendrite.overlap.above': 0.0,
 'basal_dendrite.basal_dendrite.overlap.overlap': 1.0,
 'basal_dendrite.basal_dendrite.overlap.below': 0.0,
 'dendrite.basal_dendrite.overlap.above': 0.0,
 'dendrite.basal_dendrite.overlap.overlap': 1.0,
 'dendrite.basal_dendrite.overlap.below': 0.0,
 'basal_dendrite.node.moments.mean': array([371.67827979, 384.15500202,  22.75047504]),
 'basal_dendrite.node.moments.std': array([91.46987853, 47.57474511,  9.71403638]),
 'basal_dendrite.node.moments.var': array([8366.73867817, 2263.35637217,   94.36250284]),
 'basal_dendrite.node.moments.skew': array([1.07528987, 0.33109853, 1.22089127]),
 'basal_dendrite.node.moments.kurt': array([ 0.19481417, -0.32343285,  1.66038877]),
 'all_neurites.node.moments.mean': array([284.65664186, 447.9004895 ,  36.65105336]),
 'all_neurites.node.moments.std': array([ 96.04465386, 113.10652749,  16.31120537]),
 'all_neurites.node.moments.var': array([ 9224.57553503, 12793.08655982,   266.05542061]),
 'all_neurites.node.moments.skew': array([0.83715376, 0.83389332, 0.43031137]),
 'all_neurites.node.moments.kurt': array([ 1.25042202,  0.53539343, -0.57693762]),
 'dendrite.node.moments.mean': array([371.67827979, 384.15500202,  22.75047504]),
 'dendrite.node.moments.std': array([91.46987853, 47.57474511,  9.71403638]),
 'dendrite.node.moments.var': array([8366.73867817, 2263.35637217,   94.36250284]),
 'dendrite.node.moments.skew': array([1.07528987, 0.33109853, 1.22089127]),
 'dendrite.node.moments.kurt': array([ 0.19481417, -0.32343285,  1.66038877]),
 'axon.node.moments.mean': array([272.07415252, 457.1164732 ,  38.66187515]),
 'axon.node.moments.std': array([ 89.98651647, 116.81159299,  16.09131565]),
 'axon.node.moments.var': array([ 8097.57314564, 13644.94825713,   258.93043941]),
 'axon.node.moments.skew': array([0.86052855, 0.68889462, 0.32708782]),
 'axon.node.moments.kurt': array([ 1.590552  ,  0.24348046, -0.60056431]),
 'basal_dendrite.tip.moments.mean': array([381.1720875 , 377.13418125,  24.058775  ]),
 'basal_dendrite.tip.moments.std': array([115.245204  ,  60.98361422,  16.59256238]),
 'basal_dendrite.tip.moments.var': array([13281.45704604,  3719.00120328,   275.31312621]),
 'basal_dendrite.tip.moments.skew': array([0.88257471, 0.52941179, 1.54739432]),
 'basal_dendrite.tip.moments.kurt': array([-0.21927634, -0.07628938,  1.63288763]),
 'all_neurites.tip.moments.mean': array([271.45980984, 437.31752705,  38.0240541 ]),
 'all_neurites.tip.moments.std': array([108.63012271, 119.79287932,  21.84652233]),
 'all_neurites.tip.moments.var': array([11800.50355967, 14350.3339353 ,   477.27053785]),
 'all_neurites.tip.moments.skew': array([0.88649874, 0.79015374, 0.46526034]),
 'all_neurites.tip.moments.kurt': array([ 1.2997187 ,  0.71310949, -1.10842373]),
 'dendrite.tip.moments.mean': array([381.1720875 , 377.13418125,  24.058775  ]),
 'dendrite.tip.moments.std': array([115.245204  ,  60.98361422,  16.59256238]),
 'dendrite.tip.moments.var': array([13281.45704604,  3719.00120328,   275.31312621]),
 'dendrite.tip.moments.skew': array([0.88257471, 0.52941179, 1.54739432]),
 'dendrite.tip.moments.kurt': array([-0.21927634, -0.07628938,  1.63288763]),
 'axon.tip.moments.mean': array([254.89946604, 446.40180566,  40.13202075]),
 'axon.tip.moments.std': array([ 97.93003161, 123.97792698,  21.82802052]),
 'axon.tip.moments.var': array([ 9590.29109061, 15370.52637944,   476.4624798 ]),
 'axon.tip.moments.skew': array([0.82659091, 0.66000773, 0.35067857]),
 'axon.tip.moments.kurt': array([ 1.53152661,  0.44356425, -1.1994296 ]),
 'basal_dendrite.compartment.moments.mean': array([284.65064104, 447.91468142,  36.62523649]),
 'basal_dendrite.compartment.moments.std': array([ 95.83248524, 112.88042383,  16.25442807]),
 'basal_dendrite.compartment.moments.var': array([ 9183.86522818, 12741.9900847 ,   264.206432  ]),
 'basal_dendrite.compartment.moments.skew': array([0.83960938, 0.83584894, 0.42965145]),
 'basal_dendrite.compartment.moments.kurt': array([ 1.2587922 ,  0.54110569, -0.57454958]),
 'all_neurites.compartment.moments.mean': array([284.65064104, 447.91468142,  36.62523649]),
 'all_neurites.compartment.moments.std': array([ 95.83248524, 112.88042383,  16.25442807]),
 'all_neurites.compartment.moments.var': array([ 9183.86522818, 12741.9900847 ,   264.206432  ]),
 'all_neurites.compartment.moments.skew': array([0.83960938, 0.83584894, 0.42965145]),
 'all_neurites.compartment.moments.kurt': array([ 1.2587922 ,  0.54110569, -0.57454958]),
 'dendrite.compartment.moments.mean': array([284.65064104, 447.91468142,  36.62523649]),
 'dendrite.compartment.moments.std': array([ 95.83248524, 112.88042383,  16.25442807]),
 'dendrite.compartment.moments.var': array([ 9183.86522818, 12741.9900847 ,   264.206432  ]),
 'dendrite.compartment.moments.skew': array([0.83960938, 0.83584894, 0.42965145]),
 'dendrite.compartment.moments.kurt': array([ 1.2587922 ,  0.54110569, -0.57454958]),
 'axon.compartment.moments.mean': array([284.65064104, 447.91468142,  36.62523649]),
 'axon.compartment.moments.std': array([ 95.83248524, 112.88042383,  16.25442807]),
 'axon.compartment.moments.var': array([ 9183.86522818, 12741.9900847 ,   264.206432  ]),
 'axon.compartment.moments.skew': array([0.83960938, 0.83584894, 0.42965145]),
 'axon.compartment.moments.kurt': array([ 1.2587922 ,  0.54110569, -0.57454958]),
 'basal_dendrite.bifurcation.moments.mean': array([358.90069231, 398.65600769,  22.6655    ]),
 'basal_dendrite.bifurcation.moments.std': array([94.10146561, 41.53441784,  6.62980721]),
 'basal_dendrite.bifurcation.moments.var': array([8855.08582927, 1725.10786536,   43.95434364]),
 'basal_dendrite.bifurcation.moments.skew': array([ 1.55331765, -0.33621157, -0.29349052]),
 'basal_dendrite.bifurcation.moments.kurt': array([ 0.94968664, -0.68116567, -1.25485591]),
 'all_neurites.bifurcation.moments.mean': array([268.7349055 , 437.27338624,  34.15637523]),
 'all_neurites.bifurcation.moments.std': array([72.26776233, 77.79269387, 13.96437115]),
 'all_neurites.bifurcation.moments.var': array([5222.62947211, 6051.70321995,  195.00366151]),
 'all_neurites.bifurcation.moments.skew': array([1.10432028, 0.82681317, 0.69244759]),
 'all_neurites.bifurcation.moments.kurt': array([3.26581569, 0.69704123, 0.09470238]),
 'dendrite.bifurcation.moments.mean': array([358.90069231, 398.65600769,  22.6655    ]),
 'dendrite.bifurcation.moments.std': array([94.10146561, 41.53441784,  6.62980721]),
 'dendrite.bifurcation.moments.var': array([8855.08582927, 1725.10786536,   43.95434364]),
 'dendrite.bifurcation.moments.skew': array([ 1.55331765, -0.33621157, -0.29349052]),
 'dendrite.bifurcation.moments.kurt': array([ 0.94968664, -0.68116567, -1.25485591]),
 'axon.bifurcation.moments.mean': array([256.52495521, 442.50282292,  35.71243125]),
 'axon.bifurcation.moments.std': array([59.62891364, 80.18862077, 13.98645012]),
 'axon.bifurcation.moments.var': array([3555.60734242, 6430.21490074,  195.62078685]),
 'axon.bifurcation.moments.skew': array([0.20760483, 0.73206218, 0.59747653]),
 'axon.bifurcation.moments.kurt': array([-0.19641111,  0.42381651, -0.04420766])}
Or save the features as h5 or csv file¶
In [8]:
heavy_path = "test_features.h5"
table_path = "test_features.csv"

features_writer = fw.FeatureWriter(heavy_path, table_path)
features_writer.add_run("test", feature_extraction_run.serialize())
features_writer.write_table()
2020-02-25 14:05:50,208 root         WARNING  writing additional outputs to csv. See output json for record of selected features and marks
In [ ]: