From 0948fc0c9951e50c0a58edac7037dcf70efe6e3c Mon Sep 17 00:00:00 2001 From: Wouter Deconinck Date: Wed, 29 Jul 2026 12:45:52 -0500 Subject: [PATCH 1/3] fix: sort space points before seeding for MT reproducibility Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com> --- src/algorithms/tracking/TrackSeeding.cc | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/src/algorithms/tracking/TrackSeeding.cc b/src/algorithms/tracking/TrackSeeding.cc index f6b6b0bf9b..b9f9c225f2 100644 --- a/src/algorithms/tracking/TrackSeeding.cc +++ b/src/algorithms/tracking/TrackSeeding.cc @@ -24,6 +24,7 @@ #include #include #include +#include #include #include #include @@ -100,6 +101,17 @@ void TrackSeeding::process(const Input& input, const Output& output) const { auto [trk_seeds, trk_params] = output; std::vector spacePoints = getSpacePoints(*trk_hits); + std::stable_sort(spacePoints.begin(), spacePoints.end(), [](const auto* lhs, const auto* rhs) { + const auto lhsPositionKey = std::tuple{lhs->r(), lhs->phi(), lhs->z(), lhs->x(), lhs->y()}; + const auto rhsPositionKey = std::tuple{rhs->r(), rhs->phi(), rhs->z(), rhs->x(), rhs->y()}; + if (lhsPositionKey != rhsPositionKey) { + return lhsPositionKey < rhsPositionKey; + } + + const auto lhsId = lhs->getObjectID(); + const auto rhsId = rhs->getObjectID(); + return std::tie(lhsId.collectionID, lhsId.index) < std::tie(rhsId.collectionID, rhsId.index); + }); Acts::SeedFinderOrthogonal finder(m_seedFinderConfig); // FIXME move into class scope From 2ead0cce2ace80b10147db8dc22ee58f28d5aaad Mon Sep 17 00:00:00 2001 From: Wouter Deconinck Date: Wed, 29 Jul 2026 15:01:01 -0500 Subject: [PATCH 2/3] fix: remove non-existent phi() from space-point sort key SpacePoint only exposes x(), y(), z(), r(). Use (r, z, x, y) as the sort key; phi = atan2(y, x) is fully encoded by (x, y) so no sorting information is lost. Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com> --- src/algorithms/tracking/TrackSeeding.cc | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/algorithms/tracking/TrackSeeding.cc b/src/algorithms/tracking/TrackSeeding.cc index b9f9c225f2..6a05479c16 100644 --- a/src/algorithms/tracking/TrackSeeding.cc +++ b/src/algorithms/tracking/TrackSeeding.cc @@ -102,8 +102,8 @@ void TrackSeeding::process(const Input& input, const Output& output) const { std::vector spacePoints = getSpacePoints(*trk_hits); std::stable_sort(spacePoints.begin(), spacePoints.end(), [](const auto* lhs, const auto* rhs) { - const auto lhsPositionKey = std::tuple{lhs->r(), lhs->phi(), lhs->z(), lhs->x(), lhs->y()}; - const auto rhsPositionKey = std::tuple{rhs->r(), rhs->phi(), rhs->z(), rhs->x(), rhs->y()}; + const auto lhsPositionKey = std::tuple{lhs->r(), lhs->z(), lhs->x(), lhs->y()}; + const auto rhsPositionKey = std::tuple{rhs->r(), rhs->z(), rhs->x(), rhs->y()}; if (lhsPositionKey != rhsPositionKey) { return lhsPositionKey < rhsPositionKey; } From 227195ca416ffb10b6b8edc8bbb76b5eba905012 Mon Sep 17 00:00:00 2001 From: epic-capybara <139920704+epic-capybara@users.noreply.github.com> Date: Wed, 29 Jul 2026 18:47:53 -0400 Subject: [PATCH 3/3] fix: sort space points before Acts seeding to ensure MT reproducibility (fix: iwyu) (#2812) This PR applies the include-what-you-use fixes as suggested by https://github.com/eic/EICrecon/actions/runs/30486835399. Please merge this PR into the branch `wdconinc-fix-trackseeding-sp-sort-for-mt-reproduc` to resolve failures in PR #2804. Auto-generated by [create-pull-request][1] [1]: https://github.com/peter-evans/create-pull-request Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> --- src/algorithms/tracking/TrackSeeding.cc | 1 + 1 file changed, 1 insertion(+) diff --git a/src/algorithms/tracking/TrackSeeding.cc b/src/algorithms/tracking/TrackSeeding.cc index 6a05479c16..be1f5684b7 100644 --- a/src/algorithms/tracking/TrackSeeding.cc +++ b/src/algorithms/tracking/TrackSeeding.cc @@ -27,6 +27,7 @@ #include #include #include +#include #include #include