From d5bbd7dbd52722d0453f2e36d6f5918192c06a12 Mon Sep 17 00:00:00 2001 From: leonarski_f Date: Sun, 19 Apr 2026 20:31:08 +0200 Subject: [PATCH] Indexer: Differentiate between no indexing attempted (e.g., indexer not available) and negative indexing result, so only the other one determines indexing rate --- image_analysis/IndexAndRefine.cpp | 5 +++-- image_analysis/indexing/Indexer.cpp | 1 + image_analysis/indexing/Indexer.h | 1 + image_analysis/indexing/IndexerThreadPool.cpp | 2 +- 4 files changed, 6 insertions(+), 3 deletions(-) diff --git a/image_analysis/IndexAndRefine.cpp b/image_analysis/IndexAndRefine.cpp index 496451ed..692886fb 100644 --- a/image_analysis/IndexAndRefine.cpp +++ b/image_analysis/IndexAndRefine.cpp @@ -61,6 +61,9 @@ IndexAndRefine::IndexingOutcome IndexAndRefine::DetermineLatticeAndSymmetry(Data auto indexer_result = indexer_->Run(experiment, recip); msg.indexing_time_s = indexer_result.indexing_time_s; + if (indexer_result.executed) + msg.indexing_result = false; + if (indexer_result.lattice.empty()) return outcome; @@ -233,8 +236,6 @@ void IndexAndRefine::ProcessImage(DataMessage &msg, if (!indexer_ || !spot_finding_settings.indexing) return; - msg.indexing_result = false; - IndexingOutcome outcome(experiment); if (rotation_indexer) outcome = DetermineLatticeAndSymmetryRotation(msg); diff --git a/image_analysis/indexing/Indexer.cpp b/image_analysis/indexing/Indexer.cpp index d4f42696..dfc1b24f 100644 --- a/image_analysis/indexing/Indexer.cpp +++ b/image_analysis/indexing/Indexer.cpp @@ -20,5 +20,6 @@ IndexerResult Indexer::Run(const std::vector &coord) { auto end = std::chrono::steady_clock::now(); std::chrono::duration duration = end - start; ret.indexing_time_s = duration.count(); + ret.executed = true; return ret; } diff --git a/image_analysis/indexing/Indexer.h b/image_analysis/indexing/Indexer.h index 361a0223..1718136a 100644 --- a/image_analysis/indexing/Indexer.h +++ b/image_analysis/indexing/Indexer.h @@ -15,6 +15,7 @@ struct IndexerResult { std::vector lattice; float indexing_time_s; + bool executed = false; // If indexing was not performed (due to indexer being not-available) mark it, so indexing result is marked accordingly }; class Indexer { diff --git a/image_analysis/indexing/IndexerThreadPool.cpp b/image_analysis/indexing/IndexerThreadPool.cpp index 53ae44e7..86900f12 100644 --- a/image_analysis/indexing/IndexerThreadPool.cpp +++ b/image_analysis/indexing/IndexerThreadPool.cpp @@ -211,7 +211,7 @@ int IndexerThreadPool::GetFreeWorker() { IndexerResult IndexerThreadPool::Run(const DiffractionExperiment &experiment, const std::vector &recip) { if (experiment.GetIndexingAlgorithm() == IndexingAlgorithmEnum::None) - return IndexerResult{.lattice = {}, .indexing_time_s = 0}; + return IndexerResult{.lattice = {}, .indexing_time_s = 0, .executed = false}; // Check if there is available worker const int task = GetFreeWorker();