c29dd67b5fc860ab124fc2b924b73769e29198af
Every calibration step signals failure by calling SetState and returning normally - none of them throws, so none reached the catch in CalibrateDetector. The unconditional SetState(Idle, "Calibration sequence done", Success) after the try block then overwrote all of them. /cancel during a JUNGFRAU pedestal therefore left the broker Idle and apparently ready to measure while holding a truncated G0 and default-constructed zeros for G1/G2, and every subsequent run was silently mis-converted with nothing in /status to show it. The genuine failures - "Pedestal not collected properly", "Mask not collected properly" - were hidden the same way. The steps now return whether they succeeded, and the sequence reports success only if they all did. A cancellation or a failure leaves the state Inactive with Error severity rather than Idle or Error: the calibration is undefined, so the detector has to be initialized again, which is what Inactive means everywhere else in the machine. The exception path joins them, since a throw mid-sequence leaves the calibration no better defined. Cancelled pedestals were already Inactive but carried Warning severity, which reads as an advisory. CalibrateJUNGFRAU now abandons the sequence at the first failure instead of collecting G1 and G2 on top of a G0 that was never measured - the cancel path already behaved that way - and ConfigureDetector is skipped when there is no calibration to operate with, a cancelled sequence having left the detector mid-abort. Both error paths that end an Initialize now notify the condition variable. The state has left Busy, but without the notification a client in /wait_until_running slept out its whole timeout - up to an hour, if it asked for one - before noticing a failure that had already happened. Separately, dataset_settings.space_group_number allowed 1..194 in the OpenAPI schema while the broker accepts 1..230, so every generated client's validate() rejected all 36 cubic space groups before the request left. The regenerated clients follow in the version bump. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Uwv9ScHtDH6g8tYgfSuApo
Jungfraujoch
Application to receive data from the PSI JUNGFRAU and EIGER detectors.
All documentation is now placed in docs/ subdirectory and for the current version hosted on Jungfraujoch Read The Docs page.
Languages
C++
75.2%
HTML
7.6%
C
6.1%
TypeScript
4.2%
Cuda
2.2%
Other
4.6%