diff --git a/csaxs_bec/bec_ipython_client/plugins/flomni/gui_tools.py b/csaxs_bec/bec_ipython_client/plugins/flomni/gui_tools.py index 5d03537..274a519 100644 --- a/csaxs_bec/bec_ipython_client/plugins/flomni/gui_tools.py +++ b/csaxs_bec/bec_ipython_client/plugins/flomni/gui_tools.py @@ -1,8 +1,12 @@ import builtins import time +from bec_lib import bec_logger + # from csaxs_bec.bec_ipython_client.plugins.cSAXS import epics_get, epics_put, fshopen, fshclose +logger = bec_logger.logger + if builtins.__dict__.get("bec") is not None: bec = builtins.__dict__.get("bec") dev = builtins.__dict__.get("dev") @@ -209,18 +213,21 @@ class flomniGuiTools: return True def flomnigui_show_progress(self): - self.flomnigui_show_gui() - if self._flomnigui_is_missing("progressbar"): - self.flomnigui_remove_all_docks() - # Add a new dock with a RingProgressBar widget - self.progressbar = self.gui.flomni.new("RingProgressBar") + try: + self.flomnigui_show_gui() + if self._flomnigui_is_missing("progressbar"): + self.flomnigui_remove_all_docks() + # Add a new dock with a RingProgressBar widget + self.progressbar = self.gui.flomni.new("RingProgressBar") - # Setting multiple rings with different values - self.progressbar.add_ring().set_update("manual") - self.progressbar.add_ring().set_update("manual") - self.progressbar.add_ring().set_update("scan") + # Setting multiple rings with different values + self.progressbar.add_ring().set_update("manual") + self.progressbar.add_ring().set_update("manual") + self.progressbar.add_ring().set_update("scan") - self._flomnigui_update_progress() + self._flomnigui_update_progress() + except Exception as e: + logger.warning(f"Error in flomnigui_show_progress: {e}") def _flomnigui_update_progress(self): """Update the progress ring bar and center label from the current progress state. @@ -231,9 +238,13 @@ class flomniGuiTools: client.get_global_var("tomo_progress") """ - main_progress_ring = self.progressbar.rings[0] - subtomo_progress_ring = self.progressbar.rings[1] - if self.progressbar is not None: + try: + if self.progressbar is None: + logger.warning("flOMNI progress GUI update skipped: progressbar is not available.") + return + + main_progress_ring = self.progressbar.rings[0] + subtomo_progress_ring = self.progressbar.rings[1] progress = self.progress["projection"] / self.progress["total_projections"] * 100 subtomo_progress = ( self.progress["subtomo_projection"] @@ -247,6 +258,7 @@ class flomniGuiTools: start_str = self.progress.get("tomo_start_time") if start_str is not None: import datetime as _dt + start_display = _dt.datetime.fromisoformat(start_str).strftime("%Y-%m-%d %H:%M:%S") else: start_display = "N/A" @@ -255,6 +267,7 @@ class flomniGuiTools: remaining_s = self.progress.get("estimated_remaining_time") if remaining_s is not None and remaining_s >= 0: import datetime as _dt + remaining_s = int(remaining_s) h, rem = divmod(remaining_s, 3600) m, s = divmod(rem, 60) @@ -281,6 +294,8 @@ class flomniGuiTools: f" Est. remaining: {eta_display}" ) self.progressbar.set_center_label(text) + except Exception as exc: + logger.warning(f"flOMNI progress GUI update skipped: {exc}") if __name__ == "__main__":