@@ -58,6 +58,8 @@ def _generate_segments(
5858) -> Union [list , Tuple [list , list ]]:
5959 """Generate segments maximizing segment lengths.
6060
61+ Isolated nodes will be included as segments of length 0.
62+
6163 Parameters
6264 ----------
6365 x : TreeNeuron | NeuronList
@@ -108,6 +110,7 @@ def _generate_segments(
108110 x .nodes .node_id .values , x .nodes .parent_id .values , weights = weight
109111 )
110112
113+ # Find leaf nodes and sort by distance to root
111114 d = dist_to_root (x , igraph_indices = False , weight = weight )
112115 endNodeIDs = x .nodes [x .nodes .type == "end" ].node_id .values
113116 endNodeIDs = sorted (endNodeIDs , key = lambda x : d .get (x , 0 ), reverse = True )
@@ -147,6 +150,12 @@ def _generate_segments(
147150 lengths = [d [s [0 ]] - d [s [- 1 ]] for s in sequences ]
148151 sequences = [x for _ , x in sorted (zip (lengths , sequences ), reverse = True )]
149152
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+
150159 if return_lengths :
151160 return sequences , sorted (lengths , reverse = True )
152161 else :
0 commit comments