From 05ef894e4a239dd6ddbf3547af8b14401fe4133e Mon Sep 17 00:00:00 2001 From: x12sa Date: Tue, 30 Jun 2026 09:17:56 +0200 Subject: [PATCH] fix/slits_show_all working again --- .../bec_ipython_client/plugins/cSAXS/slits.py | 91 +++++++------------ 1 file changed, 34 insertions(+), 57 deletions(-) diff --git a/csaxs_bec/bec_ipython_client/plugins/cSAXS/slits.py b/csaxs_bec/bec_ipython_client/plugins/cSAXS/slits.py index 9a62402..f1653c5 100644 --- a/csaxs_bec/bec_ipython_client/plugins/cSAXS/slits.py +++ b/csaxs_bec/bec_ipython_client/plugins/cSAXS/slits.py @@ -19,6 +19,16 @@ class cSAXSSlits: User-visible slits namespace. """ + # device name prefix -> human-readable label + _SLIT_LABELS = { + "sl1": "Slit 1 (frontend)", + "sl2": "Slit 2 (optics, slit 1)", + "sl3": "Slit 3 (optics, slit 2)", + "sl4": "Slit 4 (exposure box 1, entrance)", + "sl5": "Slit 5 (exposure box 1, exit)", + "sl6": "Slit 6 (exposure box 2)", + } + def __init__(self, client): self.client = client self.device_manager = client.device_manager @@ -28,27 +38,20 @@ class cSAXSSlits: # -------------------------------------------------------- def _sl_get_position(self, device_name: str) -> Optional[float]: - """ - Safely return the position of a device or None. - """ - try: - device = self.device_manager.devices[device_name] - except Exception: - return None + """ + Safely return the position of a device or None. + """ + try: + device = self.device_manager.devices[device_name] + except Exception: + return None - try: - if hasattr(device, "readback"): - return device.readback.get() - except Exception: - pass - - try: - if hasattr(device, "get"): - return device.get() - except Exception: - pass - - return None + try: + reading = device.read() + value = reading[device_name]["value"] + return float(value) + except Exception: + return None @staticmethod def _sl_fmt(value: Optional[float]) -> str: @@ -62,53 +65,27 @@ class cSAXSSlits: def slits_show_all(self): """ - Show all slits with center and width. + Show all slits with x/y center and size. """ print("") print("========== cSAXS Slits Overview ==========") print("") - # Slit 1 - print("Slit 1 (frontend):") - - ch = self._sl_get_position("sl1xc") - wh = self._sl_get_position("sl1xs") - cv = self._sl_get_position("sl1yc") - wv = self._sl_get_position("sl1ys") - - print( - f" center horizontal = {self._sl_fmt(ch)} " - f"width horizontal = {self._sl_fmt(wh)}" - ) - print( - f" center vertical = {self._sl_fmt(cv)} " - f"width vertical = {self._sl_fmt(wv)}" - ) - print("") - - # Slits 3–5 - slit_map = { - 3: "exposure box 2 entrance", - 4: "exposure box 2 exit", - 5: "exposure box 3", - } - - for slit, label in slit_map.items(): - print(f"Slit {slit} ({label}):") - - ch = self._sl_get_position(f"sl{slit}ch") - wh = self._sl_get_position(f"sl{slit}wh") - cv = self._sl_get_position(f"sl{slit}cv") - wv = self._sl_get_position(f"sl{slit}wv") + for prefix, label in self._SLIT_LABELS.items(): + xc = self._sl_get_position(f"{prefix}xc") + xs = self._sl_get_position(f"{prefix}xs") + yc = self._sl_get_position(f"{prefix}yc") + ys = self._sl_get_position(f"{prefix}ys") + print(f"{label}:") print( - f" center horizontal = {self._sl_fmt(ch)} " - f"width horizontal = {self._sl_fmt(wh)}" + f" x center = {self._sl_fmt(xc)} " + f"x size = {self._sl_fmt(xs)}" ) print( - f" center vertical = {self._sl_fmt(cv)} " - f"width vertical = {self._sl_fmt(wv)}" + f" y center = {self._sl_fmt(yc)} " + f"y size = {self._sl_fmt(ys)}" ) print("")