From eba81013cdae88486a3a7ee5d9d4a131cfafe142 Mon Sep 17 00:00:00 2001 From: Filip Leonarski Date: Tue, 8 Sep 2026 07:26:58 +0200 Subject: [PATCH] analysis: a scanning goniometer under an MX mode is normal, and no longer warned about The warning claimed a sweep collected under mx_stills was being analysed as something the data did not support. It is not a problem to report: a scanning goniometer is REQUIRED for the file to carry correct metadata, mx_stills included, so its presence under an MX mode is the ordinary case and firing on it would train an operator to ignore the log. Removed rather than downgraded. Nothing is left behind saying the condition is tolerated, because there is no condition. Co-Authored-By: Claude Opus 5 Claude-Session: https://claude.ai/code/session_01EFEJG6WBQv8th4UJFNe53N --- broker/JFJochStateMachine.cpp | 12 ------------ docs/CHANGELOG.md | 2 +- 2 files changed, 1 insertion(+), 13 deletions(-) diff --git a/broker/JFJochStateMachine.cpp b/broker/JFJochStateMachine.cpp index 85aba5d99..e8b3f7ce9 100644 --- a/broker/JFJochStateMachine.cpp +++ b/broker/JFJochStateMachine.cpp @@ -399,18 +399,6 @@ void JFJochStateMachine::Start(const DatasetSettings &settings, bool async) { experiment.ImportDatasetSettings(settings); - // A sweep arriving under an MX mode. The mode says stills - it is the only MX mode this API can - // express - but the goniometer says the crystal turns, and analysing a sweep frame by frame is a - // different measurement from the one the data support. It is said out loud rather than refused: - // collecting rotation data here is normal and per-image spot counts are useful live feedback, so - // the mistake worth preventing is not the acquisition but the silence about what was done to it. - if (experiment.GetAnalysisSettings().IsMX() - && experiment.GetGoniometer().has_value() && experiment.GetGoniometer()->IsScanning()) - logger.Warning("Analysis mode is {} but the goniometer scans: this sweep is analysed frame by " - "frame as stills. jfjoch_broker has no rotation analysis - process the stored " - "file with rugnux for that.", - AnalysisModeName(experiment.GetAnalysisMode())); - cancel_sequence = false; if (experiment.GetStorageCellNumber() == 1) experiment.StorageCellStart(15); diff --git a/docs/CHANGELOG.md b/docs/CHANGELOG.md index 0246d8e42..e561147f1 100644 --- a/docs/CHANGELOG.md +++ b/docs/CHANGELOG.md @@ -5,7 +5,7 @@ * jfjoch_broker takes an explicit analysis mode (`/config/analysis`, the `analysis` block of the configuration file, and the Analysis panel of the web frontend): `MXStills` (the default), `Azint`, `Grid`, `PowderCalibration` or `None`. The mode decides what runs and takes precedence over `dataset_settings.spot_finding` and `spot_finding_settings.enable`, which are now deprecated. * `PowderCalibration` moves azimuthal integration onto the CPU and sets a sector count of its own, since the FPGA integration core cannot hold enough bins for a sectored profile; a calibration exposure then runs at a few Hz. -* Rotation MX analysis is not offered online - it is absent from the REST API and refused by the broker - and a rotation sweep collected under an MX mode is logged as being analysed frame by frame as stills. +* Rotation MX analysis is not offered online: it is absent from the REST API and refused by the broker. Rotation data is collected with jfjoch_broker and processed with rugnux. * `rugnux --mode` accepts `mx_rotation` and `mx_stills` beside `mx`, which continues to choose between them from the goniometer. * The stream and the written file record which analysis produced them, as `analysis_mode` in the CBOR start message and `/entry/MX/analysis_mode` in the HDF5 master. * The crystals a grid scan found travel through the CBOR end message (`grid_crystals`), the HDF5 master (`/entry/MX/crystals`) and `GET /result/scan`, which also carries a powder-calibration result.