File indexing completed on 2025-08-05 08:09:49
0001
0002
0003
0004
0005
0006
0007
0008
0009 #include "ActsExamples/TrackFindingML/AmbiguityResolutionMLDBScanAlgorithm.hpp"
0010
0011 #include "ActsExamples/Framework/ProcessCode.hpp"
0012 #include "ActsExamples/Framework/WhiteBoard.hpp"
0013 #include "ActsExamples/TrackFindingML/AmbiguityDBScanClustering.hpp"
0014
0015 #include <iterator>
0016 #include <map>
0017
0018 ActsExamples::AmbiguityResolutionMLDBScanAlgorithm::
0019 AmbiguityResolutionMLDBScanAlgorithm(
0020 ActsExamples::AmbiguityResolutionMLDBScanAlgorithm::Config cfg,
0021 Acts::Logging::Level lvl)
0022 : ActsExamples::AmbiguityResolutionML(
0023 "AmbiguityResolutionMLDBScanAlgorithm", lvl),
0024 m_cfg(std::move(cfg)),
0025 m_duplicateClassifier(m_cfg.inputDuplicateNN.c_str()) {
0026 if (m_cfg.inputTracks.empty()) {
0027 throw std::invalid_argument("Missing trajectories input collection");
0028 }
0029 if (m_cfg.outputTracks.empty()) {
0030 throw std::invalid_argument("Missing trajectories output collection");
0031 }
0032 m_inputTracks.initialize(m_cfg.inputTracks);
0033 m_outputTracks.initialize(m_cfg.outputTracks);
0034 }
0035
0036 ActsExamples::ProcessCode
0037 ActsExamples::AmbiguityResolutionMLDBScanAlgorithm::execute(
0038 const AlgorithmContext& ctx) const {
0039
0040 const auto& tracks = m_inputTracks(ctx);
0041
0042 std::multimap<int, std::pair<std::size_t, std::vector<std::size_t>>>
0043 trackMap = mapTrackHits(tracks, m_cfg.nMeasurementsMin);
0044
0045 auto cluster = Acts::dbscanTrackClustering(
0046 trackMap, tracks, m_cfg.epsilonDBScan, m_cfg.minPointsDBScan);
0047
0048 std::vector<std::size_t> goodTracks =
0049 m_duplicateClassifier.solveAmbiguity(cluster, tracks);
0050
0051 auto outputTracks = prepareOutputTrack(tracks, goodTracks);
0052 m_outputTracks(ctx, std::move(outputTracks));
0053
0054 return ActsExamples::ProcessCode::SUCCESS;
0055 }