diff --git a/src/algorithms/digi/MPGDTrackerDigi.cc b/src/algorithms/digi/MPGDTrackerDigi.cc index 43f90ecdaa..5326202912 100644 --- a/src/algorithms/digi/MPGDTrackerDigi.cc +++ b/src/algorithms/digi/MPGDTrackerDigi.cc @@ -396,10 +396,18 @@ 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::ranges::sort(ordered_cell_ids); + + for (const auto stripID : ordered_cell_ids) { + const auto& hit = cell_hit_map.at(stripID); + raw_hits->push_back(hit); + 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)"); @@ -410,13 +418,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(raw_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(raw_hit); hitassoc.setSimHit(sim_hit); } } diff --git a/src/algorithms/digi/SiliconTrackerDigi.cc b/src/algorithms/digi/SiliconTrackerDigi.cc index a9a20ef4a6..dc65279a7f 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::ranges::sort(ordered_cell_ids); + + 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(raw_hit); link.setTo(sim_hit); link.setWeight(1.0); // set association