@@ -320,8 +320,11 @@ def load_fragments(self):
320320
321321 """
322322 # Read fragments
323- reader = swc_utils .Reader (anisotropy = self .anisotropy , return_graphs = True )
323+ reader = swc_utils .Reader (
324+ anisotropy = self .anisotropy , return_graphs = True
325+ )
324326 fragment_graphs = reader .load (self .fragments_pointer )
327+ self .fragment_ids = set (fragment_graphs .keys ())
325328
326329 # Filter fragments
327330 self .fragment_graphs = dict ()
@@ -521,6 +524,9 @@ def detect_merges(self):
521524 for key , label , xyz in self .merged_labels :
522525 self .process_merge (key , label , xyz , update_merged_labels = False )
523526
527+ # Write merges to local machine
528+ self .save_merged_labels ()
529+
524530 def count_merges (self , key , kdtree ):
525531 """
526532 Counts the number of label merges for a given graph key based on
@@ -670,6 +676,55 @@ def quantify_merges(self):
670676 n_edges = self .graphs [key ].graph ["n_edges" ]
671677 self .merged_percent [key ] = self .merged_edges_cnt [key ] / n_edges
672678
679+ def save_merged_labels (self ):
680+ """
681+ Saves merged labels and their corresponding coordinates to a text
682+ file.
683+
684+ Parameters
685+ ----------
686+ None
687+
688+ Returns
689+ -------
690+ None
691+
692+ """
693+ # Save detected merges
694+ prefix = "corrected_" if self .connections_path else ""
695+ filename = f"merged_ids-{ prefix } segmentation.txt"
696+ with open (os .path .join (self .output_dir , filename ), "w" ) as f :
697+ f .write (f" Label - xyz\n " )
698+ for _ , label , xyz in self .merged_labels :
699+ if self .connections_path :
700+ label = self .get_merged_label (label )
701+ f .write (f" { label } - { xyz } \n " )
702+
703+ def get_merged_label (self , label ):
704+ """
705+ Retrieves the label present in the corrected fragments that
706+ corresponds to the given label. Note: the given and retrieved label
707+ may differ in the case when two fragments are merged.
708+
709+ Parameters
710+ ----------
711+ label : str
712+ The label for which to find the corresponding label present in the
713+ corrected fragments.
714+
715+ Returns:
716+ -------
717+ str or list
718+ The first matching label found in "self.fragment_ids" or the
719+ original associated labels from "inverse_label_map" if no matches
720+ are found.
721+
722+ """
723+ for l in self .inverse_label_map [label ]:
724+ if l in self .fragment_ids :
725+ return l
726+ return self .inverse_label_map [label ]
727+
673728 # -- Projected Run Lengths --
674729 def compute_projected_run_lengths (self ):
675730 """
0 commit comments