def util_get_nml(): import wknml trees = [ wknml.Tree( id=0, color=(255, 255, 0, 1), name="Synapse 1", nodes=[ wknml.Node(id=0, position=(1, 1, 1), radius=1), wknml.Node(id=1, position=(1, 1, 2), radius=1), wknml.Node(id=2, position=(1, 1, 3), radius=1), wknml.Node(id=3, position=(1, 2, 2), radius=1) ], edges=[ wknml.Edge(source=0, target=1), wknml.Edge(source=1, target=2), wknml.Edge(source=1, target=3) ], groupId=1, ), wknml.Tree( id=1, color=(255, 0, 255, 1), name="Synapse 2", nodes=[ wknml.Node(id=0, position=(2, 1, 1), radius=1), wknml.Node(id=1, position=(3, 1, 1), radius=1), wknml.Node(id=2, position=(4, 1, 1), radius=1) ], edges=[ wknml.Edge(source=0, target=1), wknml.Edge(source=1, target=2) ], groupId=1, ), ] nml = wknml.NML( parameters=wknml.NMLParameters( name="Test", scale=(1, 1, 1), ), trees=trees, branchpoints=[], comments=[], groups=[], ) return nml
def test_calc_efpl_simple(): import wknml nml = wknml.NML( parameters=wknml.NMLParameters( name='', scale=(1, 1, 1), ), trees=[ wknml.Tree( id=0, color=(255, 255, 0, 1), name='', nodes=[ wknml.Node(id=4, position=(2, 1, 1), radius=1), wknml.Node(id=5, position=(3, 1, 1), radius=1) ], edges=[ wknml.Edge(source=4, target=5), ], ), ], branchpoints=[], comments=[], groups=[], ) Vlbls = np.ones((5, 5, 5), dtype=np.uint32) dataset_start = np.zeros((1, 3), dtype=int) calc_eftpl(nml, Vlbls, dataset_start)
def test__calc_efpl__use_correct_edge_lengths(): """ Github issue: https://github.com/elhuhdron/emdrp/issues/4 Check that the norm between edge node positions is calculated along the correct axis. """ import wknml trees = [ wknml.Tree( id=0, color=(255, 255, 0, 1), name="neuron1", nodes=[ wknml.Node(id=0, position=(1, 1, 1), radius=1), wknml.Node(id=1, position=(1, 1, 3), radius=1), wknml.Node(id=2, position=(1, 2, 1), radius=1) ], edges=[ wknml.Edge(source=0, target=1), wknml.Edge(source=0, target=2) ], groupId=1, ) ] nml = wknml.NML( parameters=wknml.NMLParameters( name="Test", scale=(1, 1, 1), ), trees=trees, branchpoints=[], comments=[], groups=[], ) Vlbls = np.ones((5, 5, 5), dtype=np.uint32) dataset_start = np.zeros((1, 3), dtype=int) Vlbls[:, 1:, :] = 2 efpl = calc_eftpl(nml, Vlbls, dataset_start) assert (efpl == 2 / 3)
def _skeleton_to_nml(self): """ Converts skeleton to wknml data structures.""" trees = [] for tree_idx, tree_id in enumerate(self.tree_ids): nml_nodes = Skeleton._nodes_to_nml_nodes(self.nodes[tree_idx]) nml_edges = Skeleton._edges_to_nml_edges(self.edges[tree_idx]) tree = wknml.Tree(id=tree_id, color=self.colors[tree_idx], name=self.names[tree_idx], groupId=self.group_ids[tree_idx], nodes=nml_nodes, edges=nml_edges) trees.append(tree) nml = wknml.NML( parameters=wknml.NMLParameters(**self.parameters._asdict()), trees=trees, branchpoints=self.branchpoints, comments=self._skeleton_to_nml_comments(), groups=self.groups) return nml
old_new_mapping = defaultdict(list) new_trees = [] for i in range(n_components): node_ids, = np.where(labels == i) node_ids = node_ids.tolist() if len(node_ids) == 1 and node_ids[0] not in all_node_ids: continue old_tree = find(lambda t: any(n.id in node_ids for n in t.nodes), nml.trees) new_tree = wknml.Tree( id=i, color=old_tree.color, name=old_tree.name, groupId=old_tree.groupId, nodes=[n for n in all_nodes if n.id in node_ids], edges=[ e for e in all_edges if e.source in node_ids or e.target in node_ids ], ) old_new_mapping[old_tree.id].append(i) new_trees.append(new_tree) new_trees_with_groups = [] new_groups = [] for i, (old_id, new_ids) in enumerate(old_new_mapping.items()): group_id = i + 1 old_tree = find(lambda t: t.id == old_id, nml.trees) new_groups.append(wknml.Group(id=group_id, name=old_tree.name, children=[]))