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.

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-08 08:47:21 +01:00
1 parent 11eb760936
commit d279827a82
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
@@ -267,18 +267,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 images are written regardless, but the indexing rate is then not a statement about the crystal
if (const int64_t error_count = indexer.GetIndexerErrorCount(); error_count > 0) {
@@ -286,8 +274,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", error_count, e.what());
"left out of the indexing rate", error_count, e.what());
}
}
@@ -328,11 +315,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
@@ -424,7 +424,7 @@ void JFJochReceiverRugnuxRotation::SetSpotFindingSettings(const SpotFindingSetti
JFJochReceiverOutput JFJochReceiverRugnuxRotation::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_mutex);
if (rugnux_result) {
const EndMessage &rugnux_end = rugnux_result->end_message;