Source code for neuron_morphology.validation.bits_validation

from neuron_morphology.validation.result import NodeValidationError as ve
from neuron_morphology.constants import *
from functools import reduce


[docs]def validate_independent_axon_has_more_than_four_nodes(morphology): """ This function checks if an independent (parent is -1) axon has more than three nodes """ result = [] axon_nodes = morphology.get_node_by_types([AXON]) for node in axon_nodes: if morphology.parent_of(node) is None: if len(morphology.children_of(node)) == 0: result.append(ve("There is an independent axon with less than 4 nodes", node['id'], "Info")) elif len(morphology.children_of(node)) == 1: if len(morphology.children_of(morphology.children_of(node)[0])) == 0: result.append(ve("There is an independent axon with less than 4 nodes", node['id'], "Info")) elif len(morphology.children_of(morphology.children_of(node)[0])) == 1: if len(morphology.children_of(morphology.children_of(morphology.children_of(node)[0])[0])) == 0: result.append(ve("There is an independent axon with less than 4 nodes", node['id'], "Info")) elif len(morphology.children_of(node)) == 2: if len(morphology.children_of(morphology.children_of(node)[0])) == 0 and \ len(morphology.children_of(morphology.children_of(node)[1])) == 0: result.append(ve("There is an independent axon with less than 4 nodes", node['id'], "Info")) return result
[docs]def validate_types_three_four_traceable_back_to_soma(morphology): """ This function checks if types 3,4 are traceable back to soma """ result = [] traceable_types = {BASAL_DENDRITE, APICAL_DENDRITE} traceable_nodes = set() to_visit = [morphology.get_root()] while to_visit: node = to_visit.pop() traceable_nodes.add(node['id']) to_visit.extend(morphology.children_of(node)) must_be_traceable = [] for node in reduce(list.__add__, map(morphology.get_node_by_types, [traceable_types])): must_be_traceable.append(node['id']) for node_id in must_be_traceable: if node_id not in traceable_nodes: result.append(ve("Nodes of type %s must be traceable back to the soma" % traceable_types, node_id, "Warning")) return result
[docs]def validate(morphology): result = [] result += validate_independent_axon_has_more_than_four_nodes(morphology) result += validate_types_three_four_traceable_back_to_soma(morphology) return result