From 6e0ffa3b7484a935bcb7052ba747da09b602328c Mon Sep 17 00:00:00 2001 From: Mirko Holler Date: Tue, 27 Oct 2026 08:52:18 +0100 Subject: [PATCH] fix(flomni): beamline detection for the trigger source by ddg1 only (exposure box motors removed) Mirko 2026-10-27: a real (not simulated) ddg1 is sufficient. Simulated or no ddg1 -> soft trigger; a failing check still counts as beamline (hardware trigger). Docs + PDF. Co-Authored-By: Claude Opus 5.5 Claude-Session: https://claude.ai/code/session_017KicuVBRC7jB1TLG5hLZwx --- .../local_contact_only-realtime_system.md | 9 ++++---- .../local_contact_only-realtime_system.pdf | Bin 68928 -> 68826 bytes csaxs_bec/scans/flomni_fermat_scan.py | 20 +++++------------- tests/tests_scans/test_flomni_fermat_scan.py | 6 ++---- 4 files changed, 11 insertions(+), 24 deletions(-) diff --git a/csaxs_bec/bec_ipython_client/plugins/flomni/docs/local_contact_only-realtime_system.md b/csaxs_bec/bec_ipython_client/plugins/flomni/docs/local_contact_only-realtime_system.md index eb9d1348..e3417883 100644 --- a/csaxs_bec/bec_ipython_client/plugins/flomni/docs/local_contact_only-realtime_system.md +++ b/csaxs_bec/bec_ipython_client/plugins/flomni/docs/local_contact_only-realtime_system.md @@ -70,11 +70,10 @@ default and is in no profile (flOMNI `FeedbackLoop/soft_trigger.md`). **`flomni_fermat_scan` sets the trigger source at every scan start** (2026-10-26): - **At the beamline → hardware.** At the beamline means: `ddg1` is configured with a real (not simulated) device - class, or one of the exposure box motors `ebtrx`, `ebtry`, `ebtrz`, `ebsupport` is in the session. If this cannot - be confirmed (web HMI not reachable, refused) the scan is aborted: with the soft trigger the detector would not - be triggered while flOMNI exposes internally. A failing check also counts as beamline. -- **Otherwise (simulated `ddg1`, no beamline devices) → soft** with `soft_exposure_ms` = `exp_time` × - `frames_per_trigger` × 1000. If that fails the scan continues with a warning (alarm). + class (only `ddg1` decides, 2026-10-27). If this cannot be confirmed (web HMI not reachable, refused) the scan is + aborted: with the soft trigger the detector would not be triggered while flOMNI exposes internally. A failing check + also counts as beamline. +- **Otherwise (simulated or no `ddg1`) → soft** with `soft_exposure_ms` = `exp_time` × `frames_per_trigger` × 1000. If that fails the scan continues with a warning (alarm). By hand: `flomni.rt_settings.trigger_set_soft(True, exposure_ms=100)`, `trigger_set_soft(False)`; `trigger_show()` shows both groups. diff --git a/csaxs_bec/bec_ipython_client/plugins/flomni/docs/local_contact_only-realtime_system.pdf b/csaxs_bec/bec_ipython_client/plugins/flomni/docs/local_contact_only-realtime_system.pdf index fb4ee1d079799fbd89e6d0f3d9eb167cd334d639..f8f45098627fba1d97bccffc7001850d8bac5a7c 100644 GIT binary patch delta 31102 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�* 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 j?418*E|asN@b@3 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
%afK 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 diff --git a/csaxs_bec/scans/flomni_fermat_scan.py b/csaxs_bec/scans/flomni_fermat_scan.py index 6cfac1bc..8d056a2a 100644 --- a/csaxs_bec/scans/flomni_fermat_scan.py +++ b/csaxs_bec/scans/flomni_fermat_scan.py @@ -69,10 +69,6 @@ class FlomniFermatScan(ScanBase): MAX_CORRIDOR_SIZE = 3 # Corridor size is capped at this value (in um) for stability MIN_FERMAT_ASYMMETRY = 0.1 # Practical working range for fermat_asymmetry (soft-clamped) MAX_FERMAT_ASYMMETRY = 10.0 - # Devices that exist only in the beamline configuration (bl_endstation.yaml: exposure box motors); with one of - # them, or a ddg1 that is not simulated, the session is at the beamline -> hardware trigger (flOMNI soft trigger, - # FeedbackLoop/soft_trigger.md, 2026-10-26) - BEAMLINE_DEVICES = ("ebtrx", "ebtry", "ebtrz", "ebsupport") def __init__( # fmt: off @@ -386,26 +382,20 @@ class FlomniFermatScan(ScanBase): def at_beamline(self) -> tuple[bool, str]: """ - Is this session at the beamline? True when ddg1 is configured with a real (not simulated) device class or - one of BEAMLINE_DEVICES is configured; False only when both say no. A failing check counts as beamline, - so the hardware trigger is the fallback. + Is this session at the beamline? True when ddg1 is configured with a real (not simulated) device class + (flOMNI soft trigger, FeedbackLoop/soft_trigger.md; ddg1 only, Mirko 2026-10-27). A failing check counts as + beamline, so the hardware trigger is the fallback. Returns: (at_beamline, reason) """ try: devices = self.device_manager.devices - reasons = [] if "ddg1" in devices: cls = str((getattr(devices["ddg1"], "_config", None) or {}).get("deviceClass", "")) if ".sim." not in cls and "Simulated" not in cls: - reasons.append(f"ddg1 is {cls or 'not simulated'}") - found = [name for name in self.BEAMLINE_DEVICES if name in devices] - if found: - reasons.append("beamline devices " + ", ".join(found)) - if reasons: - return True, "; ".join(reasons) - return False, "no beamline devices, ddg1 simulated or absent" + return True, f"ddg1 is {cls or 'not simulated'}" + return False, "ddg1 simulated or absent" except Exception as exc: # pylint: disable=broad-except return True, f"beamline check failed ({exc}), treated as beamline" diff --git a/tests/tests_scans/test_flomni_fermat_scan.py b/tests/tests_scans/test_flomni_fermat_scan.py index 98a66823..c68101a8 100644 --- a/tests/tests_scans/test_flomni_fermat_scan.py +++ b/tests/tests_scans/test_flomni_fermat_scan.py @@ -162,7 +162,6 @@ def _trigger_stub(devices, apply_result=None, apply_exc=None, exp_time=0.1, fram """A stand-in for a FlomniFermatScan instance with a device list {name: deviceClass} and the loop-settings device answering /api/settings/apply.""" scan = mock.MagicMock() - scan.BEAMLINE_DEVICES = FlomniFermatScan.BEAMLINE_DEVICES scan.device_manager.devices = { name: mock.MagicMock(_config={"deviceClass": cls}) for name, cls in devices.items() } @@ -187,9 +186,8 @@ def test_at_beamline_detection(): assert FlomniFermatScan.at_beamline(_trigger_stub({"ddg1": SIM_DDG1}))[0] is False assert FlomniFermatScan.at_beamline(_trigger_stub({}))[0] is False assert FlomniFermatScan.at_beamline(_trigger_stub({"ddg1": REAL_DDG1}))[0] is True - # a beamline-only device counts even with a simulated ddg1 - at_bl, reason = FlomniFermatScan.at_beamline(_trigger_stub({"ddg1": SIM_DDG1, "ebtrx": MOTOR})) - assert at_bl is True and "ebtrx" in reason + # only ddg1 decides: other devices (e.g. exposure box motors) do not count + assert FlomniFermatScan.at_beamline(_trigger_stub({"ddg1": SIM_DDG1, "ebtrx": MOTOR}))[0] is False # a failing check counts as beamline (hardware trigger is the fallback) scan = _trigger_stub({}) scan.device_manager.devices = None -- 2.54.0