Source code for csaxs_bec.bec_ipython_client.plugins.omny.gui_tools

import builtins

# from csaxs_bec.bec_ipython_client.plugins.cSAXS import epics_get, epics_put, fshopen, fshclose

if builtins.__dict__.get("bec") is not None:
    bec = builtins.__dict__.get("bec")
    dev = builtins.__dict__.get("dev")
    scans = builtins.__dict__.get("scans")

[docs] def umv(*args): return scans.umv(*args, relative=False)
[docs] class OMNYGuiToolsError(Exception): pass
[docs] class OMNYGuiTools: def __init__(self, client): self.gui = getattr(client, "gui", None) self.gui_window = self.gui.windows["main"].widget self.fig200 = None self.fig201 = None self.fig202 = None self.fig203 = None self.progressbar = None self.text_box = None self.idle_text_box = None def omnygui_show_gui(self): self.gui_window.show() def omnygui_stop_gui(self): self.gui_window.hide() def _omnycam_parking(self): self.omnygui_show_omnycam_parking() def omnygui_show_omnycam_parking(self): self.omnygui_show_gui() if self.fig200 is None: self._omnycam_clear() self.fig200 = self.gui_window.add_dock(name="omnycam200").add_widget("BECImageWidget") if self._omnycam_check_device_exists(dev.cam200): fig = self.fig200.image("cam200") fig.set_rotation(deg_90=3) self.fig200.lock_aspect_ratio(True) else: print("Cannot open cam200. Device does not exist.") self.fig203 = self.gui_window.add_dock(name="omnycam203").add_widget("BECImageWidget") if self._omnycam_check_device_exists(dev.cam203): fig = self.fig203.image("cam203") fig.set_rotation(deg_90=3) self.fig203.lock_aspect_ratio(True) else: print("Cannot open cam203. Device does not exist.") try: self.gui_window.remove_dock(name="default_figure") except: pass def omnygui_remove_all_docks(self): self.gui_window.clear_all() self.fig200 = None self.fig201 = None self.fig202 = None self.fig203 = None self.progressbar = None self.text_box = None self.idle_text_box = None def omnygui_idle(self): self.omnygui_show_gui() if self.idle_text_box is None: self.omnygui_remove_all_docks() self.idle_text_box = self.gui_window.add_dock(name="idle_text").add_widget("TextBox") try: self.gui_window.remove_dock(name="default_figure") except: pass text = ( "<pre>" + "██████╗ ███████╗ ██████╗ ██████╗ ███╗ ███╗███╗ ██╗██╗ ██╗\n" + "██╔══██╗██╔════╝██╔════╝ ██╔═══██╗████╗ ████║████╗ ██║╚██╗ ██╔╝\n" + "██████╔╝█████╗ ██║ ██║ ██║██╔████╔██║██╔██╗ ██║ ╚████╔╝ \n" + "██╔══██╗██╔══╝ ██║ ██║ ██║██║╚██╔╝██║██║╚██╗██║ ╚██╔╝ \n" + "██████╔╝███████╗╚██████╗ ╚██████╔╝██║ ╚═╝ ██║██║ ╚████║ ██║ \n" + "╚═════╝ ╚══════╝ ╚═════╝ ╚═════╝ ╚═╝ ╚═╝╚═╝ ╚═══╝ ╚═╝ \n" + "</pre>" ) self.idle_text_box.set_html_text(text) def _omnycam_clear(self): self.omnygui_remove_all_docks() def _omnycam_check_device_exists(self, device): try: device except: return False else: return True def _omnycam_samplestage(self): self.omnygui_show_omnycam_samplestage() def omnygui_show_omnycam_samplestage(self): self.omnygui_show_gui() if self.fig201 is None: self.omnygui_remove_all_docks() self.fig201 = self.gui_window.add_dock(name="omnycam201").add_widget("BECImageWidget") if self._omnycam_check_device_exists(dev.cam201): fig = self.fig201.image("cam201") fig.set_rotation(deg_90=3) self.fig201.lock_aspect_ratio(True) else: print("Cannot open cam201. Device does not exist.") self.fig202 = self.gui_window.add_dock(name="omnycam202").add_widget("BECImageWidget") if self._omnycam_check_device_exists(dev.cam202): fig = self.fig202.image("cam202") fig.set_rotation(deg_90=3) self.fig202.lock_aspect_ratio(True) else: print("Cannot open cam202. Device does not exist.") try: self.gui_window.remove_dock(name="default_figure") except: pass def omnygui_show_progress(self): self.omnygui_show_gui() if self.progressbar is None: self.omnygui_remove_all_docks() # Add a new dock with a RingProgressBar widget self.progressbar = self.gui_window.add_dock(name="progress").add_widget( "RingProgressBar" ) # Customize the size of the progress ring self.progressbar.set_line_widths(20) # Disable automatic updates and manually set the self.progressbar value self.progressbar.enable_auto_updates(False) # Set precision for the self.progressbar display self.progressbar.set_precision(1) # Display self.progressbar with one decimal places # Setting multiple rigns with different values self.progressbar.set_number_of_bars(3) self.progressbar.rings[2].set_update("scan") # Set the values of the rings to 50, 75, and 25 from outer to inner ring # self.progressbar.set_value([50, 75]) # Add a new dock with a TextBox widget self.text_box = self.gui_window.add_dock(name="progress_text").add_widget("TextBox") try: self.gui_window.remove_dock(name="default_figure") except: pass self._omnygui_update_progress() def _omnygui_update_progress(self): if self.progressbar is not None: progress = self.progress["projection"] / self.progress["total_projections"] * 100 subotmo_progress = ( self.progress["subtomo_projection"] / self.progress["subtomo_total_projections"] * 100 ) self.progressbar.set_value([progress, subotmo_progress]) text = f"Progress report:\n Tomo type: ....................... {self.progress['tomo_type']}\n Projection: ...................... {self.progress['projection']:.0f}\n Total projections expected ....... {self.progress['total_projections']}\n Angle: ........................... {self.progress['angle']}\n Current subtomo: ................. {self.progress['subtomo']}\n Current projection within subtomo: {self.progress['subtomo_projection']}\n Total projections per subtomo: ... {self.progress['subtomo_total_projections']}" self.text_box.set_plain_text(text)