From 69cd7b551d3953d63dfcb0e9fea2e9b1a5078118 Mon Sep 17 00:00:00 2001 From: Filip Leonarski Date: Mon, 19 Jan 2026 13:06:23 +0100 Subject: [PATCH] IndexAndRefine: Use "standard predictor", just with rotated axis --- image_analysis/IndexAndRefine.cpp | 20 ++++++++++++++++--- .../BraggPredictionFactory.cpp | 2 -- 2 files changed, 17 insertions(+), 5 deletions(-) diff --git a/image_analysis/IndexAndRefine.cpp b/image_analysis/IndexAndRefine.cpp index 8bc8b50a..8a297d72 100644 --- a/image_analysis/IndexAndRefine.cpp +++ b/image_analysis/IndexAndRefine.cpp @@ -10,18 +10,22 @@ #include "indexing/FFTIndexer.h" #include "lattice_search/LatticeSearch.h" + IndexAndRefine::IndexAndRefine(const DiffractionExperiment &x, IndexerThreadPool *indexer) : index_ice_rings(x.GetIndexingSettings().GetIndexIceRings()), experiment(x), geom_(x.GetDiffractionGeometry()), indexer_(indexer) { - if (indexer && x.GetGoniometer() && x.GetIndexingSettings().GetRotationIndexing()) + if (indexer && x.IsRotationIndexing()) rotation_indexer = std::make_unique(x, *indexer); } +#include void IndexAndRefine::SetLattice(const CrystalLattice &lattice) { - if (rotation_indexer) + if (rotation_indexer) { rotation_indexer->SetLattice(lattice); + std::cout << "Set lattice for rotation indexing" << std::endl; + } } IndexAndRefine::IndexingOutcome IndexAndRefine::DetermineLatticeAndSymmetry(DataMessage &msg) { @@ -144,9 +148,19 @@ void IndexAndRefine::QuickPredictAndIntegrate(DataMessage &msg, .ewald_dist_cutoff = ewald_dist_cutoff, .max_hkl = 100, .centering = outcome.symmetry.centering, + .image_number = static_cast(msg.number) }; - auto nrefl = prediction.Calc(experiment, *outcome.lattice_candidate, settings_prediction); + CrystalLattice latt = outcome.lattice_candidate.value(); + + if (rotation_indexer) { + // Rotate lattice_candidate to the current image angle + auto gon = experiment.GetGoniometer(); + if (gon) + latt = outcome.lattice_candidate->Multiply(gon->GetTransformation(-msg.number)); + } + + auto nrefl = prediction.Calc(experiment, latt, settings_prediction); auto refl_ret = BraggIntegrate2D(outcome.experiment, image, prediction.GetReflections(), nrefl, msg.number); constexpr size_t kMaxReflections = 10000; diff --git a/image_analysis/bragg_prediction/BraggPredictionFactory.cpp b/image_analysis/bragg_prediction/BraggPredictionFactory.cpp index abee4820..9c6dde50 100644 --- a/image_analysis/bragg_prediction/BraggPredictionFactory.cpp +++ b/image_analysis/bragg_prediction/BraggPredictionFactory.cpp @@ -10,8 +10,6 @@ #endif std::unique_ptr CreateBraggPrediction(bool rotation_indexing, int max_reflections) { - if (rotation_indexing) - return std::make_unique(max_reflections); #ifdef JFJOCH_USE_CUDA if (get_gpu_count() > 0) return std::make_unique(max_reflections);