From 650e4c3f9b47139794706b3ecc92d94fa0fc3203 Mon Sep 17 00:00:00 2001 From: Wouter Deconinck Date: Tue, 28 Jul 2026 19:24:38 -0500 Subject: [PATCH 1/3] fix: stabilize digi raw hit ordering Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com> --- src/algorithms/digi/MPGDTrackerDigi.cc | 19 +++++++++++++------ src/algorithms/digi/SiliconTrackerDigi.cc | 17 +++++++++++++---- 2 files changed, 26 insertions(+), 10 deletions(-) diff --git a/src/algorithms/digi/MPGDTrackerDigi.cc b/src/algorithms/digi/MPGDTrackerDigi.cc index 43f90ecdaa..701c990892 100644 --- a/src/algorithms/digi/MPGDTrackerDigi.cc +++ b/src/algorithms/digi/MPGDTrackerDigi.cc @@ -396,10 +396,17 @@ void MPGDTrackerDigi::process(const MPGDTrackerDigi::Input& input, // ***** RawHit INSTANTIATION AND RawHit<-SimHits ASSOCIATION: for (auto& cell_hit_map : cell_hit_maps) { - for (auto item : cell_hit_map) { - raw_hits->push_back(item.second); - CellID stripID = item.first; - const auto is = stripID2cIDs.find(stripID); + std::vector ordered_cell_ids; + ordered_cell_ids.reserve(cell_hit_map.size()); + for (const auto& [cell_id, hit] : cell_hit_map) { + ordered_cell_ids.push_back(cell_id); + } + std::sort(ordered_cell_ids.begin(), ordered_cell_ids.end()); + + for (const auto stripID : ordered_cell_ids) { + const auto& hit = cell_hit_map.at(stripID); + raw_hits->push_back(hit); + const auto is = stripID2cIDs.find(stripID); if (is == stripID2cIDs.end()) { error(R"(Inconsistency: CellID {:x} not found in "stripID2cIDs" map)", stripID); throw std::runtime_error(R"(Inconsistency in the handling of "stripID2cIDs" map)"); @@ -410,13 +417,13 @@ void MPGDTrackerDigi::process(const MPGDTrackerDigi::Input& input, if (sim_hit.getCellID() == cID) { // create link auto link = links->create(); - link.setFrom(item.second); + link.setFrom(hit); link.setTo(sim_hit); link.setWeight(1.0); // set association auto hitassoc = associations->create(); hitassoc.setWeight(1.0); - hitassoc.setRawHit(item.second); + hitassoc.setRawHit(hit); hitassoc.setSimHit(sim_hit); } } diff --git a/src/algorithms/digi/SiliconTrackerDigi.cc b/src/algorithms/digi/SiliconTrackerDigi.cc index a9a20ef4a6..fdf5de1853 100644 --- a/src/algorithms/digi/SiliconTrackerDigi.cc +++ b/src/algorithms/digi/SiliconTrackerDigi.cc @@ -15,6 +15,7 @@ #include #include #include +#include #include "SiliconTrackerDigi.h" #include "algorithms/digi/SiliconTrackerDigiConfig.h" @@ -83,15 +84,23 @@ void SiliconTrackerDigi::process(const SiliconTrackerDigi::Input& input, } } - for (auto item : cell_hit_map) { - raw_hits->push_back(item.second); + std::vector ordered_cell_ids; + ordered_cell_ids.reserve(cell_hit_map.size()); + for (const auto& [cell_id, hit] : cell_hit_map) { + ordered_cell_ids.push_back(cell_id); + } + std::sort(ordered_cell_ids.begin(), ordered_cell_ids.end()); + + for (const auto cell_id : ordered_cell_ids) { + const auto& hit = cell_hit_map.at(cell_id); + raw_hits->push_back(hit); auto raw_hit = raw_hits->at(raw_hits->size() - 1); for (const auto& sim_hit : *sim_hits) { - if (item.first == sim_hit.getCellID()) { + if (cell_id == sim_hit.getCellID()) { // create link auto link = links->create(); - link.setFrom(item.second); + link.setFrom(hit); link.setTo(sim_hit); link.setWeight(1.0); // set association From ec0521737c3ea1d78e32773a246b85eab2b32c2c Mon Sep 17 00:00:00 2001 From: Wouter Deconinck Date: Tue, 28 Jul 2026 19:47:24 -0500 Subject: [PATCH 2/3] fix: use persisted raw hits for digi relations Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com> --- src/algorithms/digi/MPGDTrackerDigi.cc | 7 ++++--- src/algorithms/digi/SiliconTrackerDigi.cc | 2 +- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/src/algorithms/digi/MPGDTrackerDigi.cc b/src/algorithms/digi/MPGDTrackerDigi.cc index 701c990892..f9d7714fb3 100644 --- a/src/algorithms/digi/MPGDTrackerDigi.cc +++ b/src/algorithms/digi/MPGDTrackerDigi.cc @@ -406,7 +406,8 @@ void MPGDTrackerDigi::process(const MPGDTrackerDigi::Input& input, for (const auto stripID : ordered_cell_ids) { const auto& hit = cell_hit_map.at(stripID); raw_hits->push_back(hit); - const auto is = stripID2cIDs.find(stripID); + const auto raw_hit = raw_hits->at(raw_hits->size() - 1); + const auto is = stripID2cIDs.find(stripID); if (is == stripID2cIDs.end()) { error(R"(Inconsistency: CellID {:x} not found in "stripID2cIDs" map)", stripID); throw std::runtime_error(R"(Inconsistency in the handling of "stripID2cIDs" map)"); @@ -417,13 +418,13 @@ void MPGDTrackerDigi::process(const MPGDTrackerDigi::Input& input, if (sim_hit.getCellID() == cID) { // create link auto link = links->create(); - link.setFrom(hit); + link.setFrom(raw_hit); link.setTo(sim_hit); link.setWeight(1.0); // set association auto hitassoc = associations->create(); hitassoc.setWeight(1.0); - hitassoc.setRawHit(hit); + hitassoc.setRawHit(raw_hit); hitassoc.setSimHit(sim_hit); } } diff --git a/src/algorithms/digi/SiliconTrackerDigi.cc b/src/algorithms/digi/SiliconTrackerDigi.cc index fdf5de1853..403e6ab44a 100644 --- a/src/algorithms/digi/SiliconTrackerDigi.cc +++ b/src/algorithms/digi/SiliconTrackerDigi.cc @@ -100,7 +100,7 @@ void SiliconTrackerDigi::process(const SiliconTrackerDigi::Input& input, if (cell_id == sim_hit.getCellID()) { // create link auto link = links->create(); - link.setFrom(hit); + link.setFrom(raw_hit); link.setTo(sim_hit); link.setWeight(1.0); // set association From 2524df59e0acb9b48b3724485063f824cf207523 Mon Sep 17 00:00:00 2001 From: Wouter Deconinck Date: Wed, 29 Jul 2026 12:34:14 -0500 Subject: [PATCH 3/3] style: use std::ranges::sort as recommended by clang-tidy Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com> --- src/algorithms/digi/MPGDTrackerDigi.cc | 2 +- src/algorithms/digi/SiliconTrackerDigi.cc | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/algorithms/digi/MPGDTrackerDigi.cc b/src/algorithms/digi/MPGDTrackerDigi.cc index f9d7714fb3..5326202912 100644 --- a/src/algorithms/digi/MPGDTrackerDigi.cc +++ b/src/algorithms/digi/MPGDTrackerDigi.cc @@ -401,7 +401,7 @@ void MPGDTrackerDigi::process(const MPGDTrackerDigi::Input& input, for (const auto& [cell_id, hit] : cell_hit_map) { ordered_cell_ids.push_back(cell_id); } - std::sort(ordered_cell_ids.begin(), ordered_cell_ids.end()); + std::ranges::sort(ordered_cell_ids); for (const auto stripID : ordered_cell_ids) { const auto& hit = cell_hit_map.at(stripID); diff --git a/src/algorithms/digi/SiliconTrackerDigi.cc b/src/algorithms/digi/SiliconTrackerDigi.cc index 403e6ab44a..dc65279a7f 100644 --- a/src/algorithms/digi/SiliconTrackerDigi.cc +++ b/src/algorithms/digi/SiliconTrackerDigi.cc @@ -89,7 +89,7 @@ void SiliconTrackerDigi::process(const SiliconTrackerDigi::Input& input, for (const auto& [cell_id, hit] : cell_hit_map) { ordered_cell_ids.push_back(cell_id); } - std::sort(ordered_cell_ids.begin(), ordered_cell_ids.end()); + std::ranges::sort(ordered_cell_ids); for (const auto cell_id : ordered_cell_ids) { const auto& hit = cell_hit_map.at(cell_id);