From 6c06b63eced8c4ccfcaba31c50312ffd0ba9fa42 Mon Sep 17 00:00:00 2001 From: x01dc Date: Mon, 27 Jul 2026 17:48:26 +0200 Subject: [PATCH] fix(LamNI,flomni): FZP diameter/zone-width wrongly blanked to N/A fzp_diameter_um/fzp_zone_width_nm were read inside the same try block as the focal-distance calculation, which also needs energy_kev. When the photon energy read fails (as it does in at least one simulated session -- confirmed live: dev.ccm_energy unavailable), the exception wiped out the diameter/zone-width display too, even though those come from config (loptx/foptx userParameter) and were read just fine. Split into two independent try blocks: diameter/zone-width no longer depend on a working energy read, only the focal distance itself does. --- .../bec_ipython_client/plugins/LamNI/lamni.py | 12 +- .../plugins/OMNY_shared/psi_logo.svg | 119 ++++++++++++++++++ .../plugins/flomni/flomni.py | 12 +- 3 files changed, 135 insertions(+), 8 deletions(-) create mode 100644 csaxs_bec/bec_ipython_client/plugins/OMNY_shared/psi_logo.svg diff --git a/csaxs_bec/bec_ipython_client/plugins/LamNI/lamni.py b/csaxs_bec/bec_ipython_client/plugins/LamNI/lamni.py index 51ba6c0..1c301ff 100644 --- a/csaxs_bec/bec_ipython_client/plugins/LamNI/lamni.py +++ b/csaxs_bec/bec_ipython_client/plugins/LamNI/lamni.py @@ -2168,19 +2168,23 @@ class LamNI(TomoQueueMixin, LamNIAlignmentMixin, LamNIOpticsMixin, LamniGuiTools except Exception: energy_kev = None energy_str = "N/A" - # FZP focal distance: same formula as lfzp_info(), from the - # diameter/outermost-zone-width userParameter on loptx (see device - # config) and the current photon energy above. + # FZP diameter/outermost-zone-width: userParameter on loptx (see + # device config) -- independent of the energy read above, so a + # failed energy read shouldn't blank these out too. try: fzp_diameter_um = self._get_user_param_safe("loptx", "fzp_diameter") fzp_zone_width_nm = self._get_user_param_safe("loptx", "fzp_outermost_zone_width") + except Exception: + fzp_diameter_um = fzp_zone_width_nm = "N/A" + # FZP focal distance: same formula as lfzp_info(), from the values + # above and the current photon energy -- only this needs energy_kev. + try: wavelength_m = 1.2398e-9 / energy_kev focal_distance_mm = ( fzp_diameter_um * 1e-6 * fzp_zone_width_nm * 1e-9 / wavelength_m * 1000 ) focal_distance_str = f"{focal_distance_mm:.2f}" except Exception: - fzp_diameter_um = fzp_zone_width_nm = "N/A" focal_distance_str = "N/A" # FZP focus-to-sample distance: same live z-stage-based calculation # lfzp_info() already uses -- not a stored value. diff --git a/csaxs_bec/bec_ipython_client/plugins/OMNY_shared/psi_logo.svg b/csaxs_bec/bec_ipython_client/plugins/OMNY_shared/psi_logo.svg new file mode 100644 index 0000000..1ca31d4 --- /dev/null +++ b/csaxs_bec/bec_ipython_client/plugins/OMNY_shared/psi_logo.svg @@ -0,0 +1,119 @@ + diff --git a/csaxs_bec/bec_ipython_client/plugins/flomni/flomni.py b/csaxs_bec/bec_ipython_client/plugins/flomni/flomni.py index 4fc9122..326caf7 100644 --- a/csaxs_bec/bec_ipython_client/plugins/flomni/flomni.py +++ b/csaxs_bec/bec_ipython_client/plugins/flomni/flomni.py @@ -3799,19 +3799,23 @@ class Flomni( except Exception: energy_kev = None energy_str = "N/A" - # FZP focal distance: same formula as ffzp_info(), from the - # diameter/outermost-zone-width userParameter on foptx (see device - # config) and the current photon energy above. + # FZP diameter/outermost-zone-width: userParameter on foptx (see + # device config) -- independent of the energy read above, so a + # failed energy read shouldn't blank these out too. try: fzp_diameter_um = self._get_user_param_safe("foptx", "fzp_diameter") fzp_zone_width_nm = self._get_user_param_safe("foptx", "fzp_outermost_zone_width") + except Exception: + fzp_diameter_um = fzp_zone_width_nm = "N/A" + # FZP focal distance: same formula as ffzp_info(), from the values + # above and the current photon energy -- only this needs energy_kev. + try: wavelength_m = 1.2398e-9 / energy_kev focal_distance_mm = ( fzp_diameter_um * 1e-6 * fzp_zone_width_nm * 1e-9 / wavelength_m * 1000 ) focal_distance_str = f"{focal_distance_mm:.2f}" except Exception: - fzp_diameter_um = fzp_zone_width_nm = "N/A" focal_distance_str = "N/A" # FZP focus-to-sample distance: same live z-stage-based calculation # ffzp_info() already uses -- not a stored value.