broker: no rotation indexing in the Lite and FPGA receivers

The converter no longer passes indexing_settings.rotation_indexing and its two
angles into the experiment, so the receivers' IndexAndRefine never builds a
rotation indexer: rotation frames get the per-frame indexing stills get.
Output reports the old defaults (false, 20 deg, 0.5 deg). The receiver's
end-of-run rotation lattice (END message and scan result) goes; rugnux live
fills both for rotation runs, as it already did.

(ported from rc184-2 d279827a8)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01HVeDQsU5a8AJUdJPgWevAK
This commit is contained in:
leonarski_fandClaude Opus 5.5 committed 2026-11-09 11:23:33 +01:00
1 parent 0e89025b42
commit 8b774c2200
4 files changed
+6 -28

No files matched your search

+4 -6
View File
@@ -1019,9 +1019,6 @@ IndexingSettings Convert(const org::openapitools::server::model::Indexing_settin
ret.UnitCellDistTolerance(input.getUnitCellDistTolerance());
ret.ViableCellMinSpots(input.getViableCellMinSpots());
ret.IndexIceRings(input.isIndexIceRings());
ret.RotationIndexing(input.isRotationIndexing());
ret.RotationIndexingAngularStride_deg(input.getRotationIndexingAngularStrideDeg());
ret.RotationIndexingMinAngularRange_deg(input.getRotationIndexingMinAngularRangeDeg());
ret.BlockingBehavior(input.isBlocking());
return ret;
}
@@ -1037,9 +1034,10 @@ org::openapitools::server::model::Indexing_settings Convert(const IndexingSettin
ret.setThreadCount(input.GetIndexingThreads());
ret.setUnitCellDistTolerance(input.GetUnitCellDistTolerance());
ret.setViableCellMinSpots(input.GetViableCellMinSpots());
ret.setRotationIndexing(input.GetRotationIndexing());
ret.setRotationIndexingAngularStrideDeg(input.GetRotationIndexingAngularStride_deg());
ret.setRotationIndexingMinAngularRangeDeg(input.GetRotationIndexingMinAngularRange_deg());
// Deprecated: the broker runs no rotation indexer (rugnux live does), so these report the old defaults.
ret.setRotationIndexing(false);
ret.setRotationIndexingAngularStrideDeg(0.5);
ret.setRotationIndexingMinAngularRangeDeg(20.0);
ret.setBlocking(input.GetBlockingBehavior());
org::openapitools::server::model::Geom_refinement_algorithm refinement;
+1 -19
View File
@@ -173,18 +173,6 @@ void JFJochReceiver::SendEndMessage() {
message.az_int_result["dataset"] = plots.GetAzIntProfile();
const auto rotation_indexer_ret = indexer.FinalizeRotationIndexing();
if (rotation_indexer_ret.has_value()) {
message.rotation_lattice = rotation_indexer_ret->lattice;
message.rotation_lattice_type = LatticeMessage{
.centering = rotation_indexer_ret->search_result.centering,
.niggli_class = rotation_indexer_ret->search_result.niggli_class,
.crystal_system = rotation_indexer_ret->search_result.system
};
message.rotation_extra_lattices = rotation_indexer_ret->extra_lattices;
rotation_indexing_lattice = rotation_indexer_ret->lattice;
rotation_indexing_lattice_type = message.rotation_lattice_type;
}
message.unit_cell = indexer.GetConsensusUnitCell();
// The collection does not stop for an indexer that failed - the images are written regardless - but
// its indexing rate is then not a statement about the crystal, and the log has to say so.
@@ -193,8 +181,7 @@ void JFJochReceiver::SendEndMessage() {
indexer.RethrowIndexerError();
} catch (const std::exception &e) {
logger.Error("Indexing failed {} times in this collection, first with: {}. Those attempts are "
"left out of the indexing rate, and a rotation lattice may be missing for the same "
"reason", n, e.what());
"left out of the indexing rate", n, e.what());
}
}
@@ -235,11 +222,6 @@ JFJochReceiverOutput JFJochReceiver::GetFinalStatistics() const {
ret.status = GetStatus();
ret.writer_err = writer_error;
ret.scan_result = scan_result.GetResult();
ret.scan_result.rotation_lattice = rotation_indexing_lattice;
if (rotation_indexing_lattice_type) {
ret.scan_result.rotation_crystal_system = rotation_indexing_lattice_type->crystal_system;
ret.scan_result.rotation_centering = rotation_indexing_lattice_type->centering;
}
ret.images_written = images_written;
ret.processing_time = plots.GetMeanProcessingTime();
return ret;
-2
View File
@@ -86,8 +86,6 @@ protected:
std::mutex max_delay_mutex;
IndexAndRefine indexer;
std::optional<CrystalLattice> rotation_indexing_lattice;
std::optional<LatticeMessage> rotation_indexing_lattice_type;
std::string writer_error;
+1 -1
View File
@@ -713,7 +713,7 @@ float JFJochReceiverRugnux::GetEfficiency() const {
JFJochReceiverOutput JFJochReceiverRugnux::GetFinalStatistics() const {
JFJochReceiverOutput ret = JFJochReceiver::GetFinalStatistics();
ret.analysis_warning = skipped_warning;
// The receiver's own rotation indexer sees no image here: the lattice is rugnux's.
// The rotation lattice is rugnux's: the receivers run no rotation indexer of their own.
std::unique_lock ul(rugnux_m);
if (rugnux_result) {
const EndMessage &r = rugnux_result->end_message;