[docs]classRemapLevelThread(QtCore.QThread):"""Thread for remapping a labels image to a different atlas level."""signal=QtCore.pyqtSignal(object)signal_prog=QtCore.pyqtSignal(object,object)def__init__(self,level:Optional[int],fn_success:Callable[[Any],None],fn_prog:Callable[[int,str],None]):"""Initialize the import thread."""super().__init__()self.level:Optional[int]=levelself.signal.connect(fn_success)self.signal_prog.connect(fn_prog)
[docs]defrun(self):"""Set up image import metadata."""self.update_prog(0,"Initializing atlas level remapping")if(config.labels_imgisNoneorconfig.labels_refisNoneorconfig.labels_ref.ref_lookupisNoneorself.levelisNone):# skip if labels, reference, or level are not availableself.update_prog(0,"Labels image or reference not available")return# remap atlas labels image to the given levellabels_np=ontology.make_labels_level(config.labels_img,config.labels_ref,self.level,self.update_prog)self.signal.emit(labels_np)self.update_prog(100,"Completed atlas level remapping")
[docs]classAnnotateLabels(QtCore.QThread):"""Thread to show label annotations in all editors."""signal=QtCore.pyqtSignal()signal_prog=QtCore.pyqtSignal(object,object)def__init__(self,eds:Sequence["plot_support.ImageSyncMixin"],show:bool,fn_success:Callable[[Any],None],fn_prog:Callable[[int,str],None]):"""Initialize the thread."""super().__init__()self.eds=edsself.show=showself.signal.connect(fn_success)self.signal_prog.connect(fn_prog)
[docs]defrun(self):"""Run the thread."""fromtimeimporttimestart=time()# set to 1 instead of 0 since 0 does not appear to trigger resetself.update_prog(1,"Initializing label display")neds=len(self.eds)annots={}fori,edinenumerate(self.eds):# find and show labels for the editorself.update_prog(int(i/neds*100),"Finding labels")ed.show_labels_annots(self.show,annots)# update before emitting success signal to avoid skipping the callself.update_prog(100,"Finished showing labels")self.signal.emit()print("elapsed:",time()-start)