File indexing completed on 2025-08-05 08:09:41
0001
0002
0003
0004
0005
0006
0007
0008
0009 #include "Acts/TrackFinding/detail/AmbiguityTrackClustering.hpp"
0010
0011 #include <iterator>
0012
0013 std::unordered_map<std::size_t, std::vector<std::size_t>>
0014 Acts::detail::clusterDuplicateTracks(
0015 const std::multimap<int, std::pair<std::size_t, std::vector<std::size_t>>>&
0016 trackMap) {
0017
0018
0019 std::unordered_map<std::size_t, std::vector<std::size_t>> cluster;
0020
0021
0022 std::unordered_map<std::size_t, std::size_t> hitToTrack;
0023
0024
0025 for (auto track = trackMap.rbegin(); track != trackMap.rend(); ++track) {
0026 std::vector<std::size_t> hits = track->second.second;
0027 auto matchedTrack = hitToTrack.end();
0028
0029 for (auto hit = hits.begin(); hit != hits.end(); hit++) {
0030
0031 matchedTrack = hitToTrack.find(*hit);
0032 if (matchedTrack != hitToTrack.end()) {
0033
0034 cluster.at(matchedTrack->second).push_back(track->second.first);
0035 break;
0036 }
0037 }
0038
0039 if (matchedTrack == hitToTrack.end()) {
0040 cluster.emplace(track->second.first,
0041 std::vector<std::size_t>(1, track->second.first));
0042 for (const auto& hit : hits) {
0043
0044 hitToTrack.emplace(hit, track->second.first);
0045 }
0046 }
0047 }
0048 return cluster;
0049 }