@@ -58,6 +58,8 @@ def _generate_segments(
58
58
) -> Union [list , Tuple [list , list ]]:
59
59
"""Generate segments maximizing segment lengths.
60
60
61
+ Isolated nodes will be included as segments of length 0.
62
+
61
63
Parameters
62
64
----------
63
65
x : TreeNeuron | NeuronList
@@ -108,6 +110,7 @@ def _generate_segments(
108
110
x .nodes .node_id .values , x .nodes .parent_id .values , weights = weight
109
111
)
110
112
113
+ # Find leaf nodes and sort by distance to root
111
114
d = dist_to_root (x , igraph_indices = False , weight = weight )
112
115
endNodeIDs = x .nodes [x .nodes .type == "end" ].node_id .values
113
116
endNodeIDs = sorted (endNodeIDs , key = lambda x : d .get (x , 0 ), reverse = True )
@@ -147,6 +150,12 @@ def _generate_segments(
147
150
lengths = [d [s [0 ]] - d [s [- 1 ]] for s in sequences ]
148
151
sequences = [x for _ , x in sorted (zip (lengths , sequences ), reverse = True )]
149
152
153
+ # Isolated nodes would not be included in the sequences(because they are treated
154
+ # as roots, not leafs. Let's add them manually here.
155
+ for node in nx .isolates (x .graph ):
156
+ sequences .append ([node ])
157
+ lengths .append (0 )
158
+
150
159
if return_lengths :
151
160
return sequences , sorted (lengths , reverse = True )
152
161
else :
0 commit comments