feat(falcon): add prime() to arm the HDF5 plugin after an IOC restart #307

Merged
menzel merged 1 commits from feat/falcon into main 2026-08-31 15:52:10 +02:00
Member

The areaDetector file plugin refuses to be staged until one NDArray has
passed through it, so every restart of the SITORO IOC leaves the Falcon
raising ophyd's UnprimedPlugin at the start of a scan. The generic
HDF5Plugin.warmup() cannot be used, as it drives parent.cam, which the
Falcon does not have.

prime() pushes a single spectrum through the plugin using user-advanced
pixels, so no external gate signal is required and a disconnected trigger
cable cannot mask the priming. No file is written.

The trigger configuration is captured beforehand and restored in a finally
block. on_stage never resets pixel_advance_mode, ignore_gate or
pixels_per_buffer -- only on_connected does -- so a prime that bailed out
halfway would otherwise leave the detector deaf to the gate and silently
starve every subsequent scan.

prime() and is_primed() are exposed via USER_ACCESS, so they are callable
from the BEC client as dev.falcon.prime().

Co-Authored-By: Claude Opus 5 (1M context) noreply@anthropic.com
Claude-Session: https://claude.ai/code/session_01KLnmUurqcNd1FiDY5M2uZr

The areaDetector file plugin refuses to be staged until one NDArray has passed through it, so every restart of the SITORO IOC leaves the Falcon raising ophyd's UnprimedPlugin at the start of a scan. The generic HDF5Plugin.warmup() cannot be used, as it drives parent.cam, which the Falcon does not have. prime() pushes a single spectrum through the plugin using user-advanced pixels, so no external gate signal is required and a disconnected trigger cable cannot mask the priming. No file is written. The trigger configuration is captured beforehand and restored in a finally block. on_stage never resets pixel_advance_mode, ignore_gate or pixels_per_buffer -- only on_connected does -- so a prime that bailed out halfway would otherwise leave the detector deaf to the gate and silently starve every subsequent scan. prime() and is_primed() are exposed via USER_ACCESS, so they are callable from the BEC client as dev.falcon.prime(). Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01KLnmUurqcNd1FiDY5M2uZr
menzel added 1 commit 2026-08-31 15:48:58 +02:00
feat(falcon): add prime() to arm the HDF5 plugin after an IOC restart
CI for csaxs_bec / test (pull_request) Successful in 1m55s
Read the Docs Deploy Trigger / trigger-rtd-webhook (push) Successful in 1s
CI for csaxs_bec / test (push) Successful in 1m47s
d3f7871855
The areaDetector file plugin refuses to be staged until one NDArray has
passed through it, so every restart of the SITORO IOC leaves the Falcon
raising ophyd's UnprimedPlugin at the start of a scan. The generic
HDF5Plugin.warmup() cannot be used, as it drives parent.cam, which the
Falcon does not have.

prime() pushes a single spectrum through the plugin using user-advanced
pixels, so no external gate signal is required and a disconnected trigger
cable cannot mask the priming. No file is written.

The trigger configuration is captured beforehand and restored in a finally
block. on_stage never resets pixel_advance_mode, ignore_gate or
pixels_per_buffer -- only on_connected does -- so a prime that bailed out
halfway would otherwise leave the detector deaf to the gate and silently
starve every subsequent scan.

prime() and is_primed() are exposed via USER_ACCESS, so they are callable
from the BEC client as dev.falcon.prime().

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01KLnmUurqcNd1FiDY5M2uZr
menzel merged commit d3f7871855 into main 2026-08-31 15:52:10 +02:00
menzel deleted branch feat/falcon 2026-08-31 15:52:10 +02:00
Sign in to join this conversation.
No Reviewers
No labels
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: bec/csaxs_bec#307