fix(gui_tools): minimal ring progress bar safeguard in order to not interupt any script using it

This commit is contained in:
wyzula_j authored and holler committed 2026-06-20 14:05:15 +02:00
1 parent 48b21d806a
commit dea43edcd9
1 file changed
+28 -13
@@ -1,8 +1,12 @@
import builtins import builtins
import time import time
from bec_lib import bec_logger
# from csaxs_bec.bec_ipython_client.plugins.cSAXS import epics_get, epics_put, fshopen, fshclose # 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: if builtins.__dict__.get("bec") is not None:
bec = builtins.__dict__.get("bec") bec = builtins.__dict__.get("bec")
dev = builtins.__dict__.get("dev") dev = builtins.__dict__.get("dev")
@@ -209,18 +213,21 @@ class flomniGuiTools:
return True return True
def flomnigui_show_progress(self): def flomnigui_show_progress(self):
self.flomnigui_show_gui() try:
if self._flomnigui_is_missing("progressbar"): self.flomnigui_show_gui()
self.flomnigui_remove_all_docks() if self._flomnigui_is_missing("progressbar"):
# Add a new dock with a RingProgressBar widget self.flomnigui_remove_all_docks()
self.progressbar = self.gui.flomni.new("RingProgressBar") # Add a new dock with a RingProgressBar widget
self.progressbar = self.gui.flomni.new("RingProgressBar")
# Setting multiple rings with different values # 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("manual") self.progressbar.add_ring().set_update("manual")
self.progressbar.add_ring().set_update("scan") 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): def _flomnigui_update_progress(self):
"""Update the progress ring bar and center label from the current progress state. """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") client.get_global_var("tomo_progress")
""" """
main_progress_ring = self.progressbar.rings[0] try:
subtomo_progress_ring = self.progressbar.rings[1] if self.progressbar is None:
if self.progressbar is not 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 progress = self.progress["projection"] / self.progress["total_projections"] * 100
subtomo_progress = ( subtomo_progress = (
self.progress["subtomo_projection"] self.progress["subtomo_projection"]
@@ -247,6 +258,7 @@ class flomniGuiTools:
start_str = self.progress.get("tomo_start_time") start_str = self.progress.get("tomo_start_time")
if start_str is not None: if start_str is not None:
import datetime as _dt import datetime as _dt
start_display = _dt.datetime.fromisoformat(start_str).strftime("%Y-%m-%d %H:%M:%S") start_display = _dt.datetime.fromisoformat(start_str).strftime("%Y-%m-%d %H:%M:%S")
else: else:
start_display = "N/A" start_display = "N/A"
@@ -255,6 +267,7 @@ class flomniGuiTools:
remaining_s = self.progress.get("estimated_remaining_time") remaining_s = self.progress.get("estimated_remaining_time")
if remaining_s is not None and remaining_s >= 0: if remaining_s is not None and remaining_s >= 0:
import datetime as _dt import datetime as _dt
remaining_s = int(remaining_s) remaining_s = int(remaining_s)
h, rem = divmod(remaining_s, 3600) h, rem = divmod(remaining_s, 3600)
m, s = divmod(rem, 60) m, s = divmod(rem, 60)
@@ -281,6 +294,8 @@ class flomniGuiTools:
f" Est. remaining: {eta_display}" f" Est. remaining: {eta_display}"
) )
self.progressbar.set_center_label(text) self.progressbar.set_center_label(text)
except Exception as exc:
logger.warning(f"flOMNI progress GUI update skipped: {exc}")
if __name__ == "__main__": if __name__ == "__main__":