ATLAS Offline Software
Loading...
Searching...
No Matches
DuplicateSeedDetector.h
Go to the documentation of this file.
1/*
2 Copyright (C) 2002-2026 CERN for the benefit of the ATLAS collaboration
3*/
4
5#ifndef ACTSTRACKRECONSTRUCTION_DUPLICATESEEDDETECTOR_H
6#define ACTSTRACKRECONSTRUCTION_DUPLICATESEEDDETECTOR_H
7
10
11#include <unordered_map>
12#include <vector>
13#include <boost/container/small_vector.hpp>
14
15namespace ActsTrk::detail {
16 class MeasurementIndex;
17
18 // === DuplicateSeedDetector ===============================================
19 // Identify duplicate seeds: seeds where all measurements were already located in a previously followed trajectory.
21 public:
22 using index_t = unsigned int;
23 using SpacePointIndicesFun_t = std::function<std::array<std::size_t, 3>(std::size_t)>; // copied from ITrackParamsEstimationTool
24 using UseTopSpFun_t = std::function<bool(const ActsTrk::Seed&)>;
25
26 DuplicateSeedDetector(std::size_t numSeeds, index_t measOffset, bool enabled);
30 DuplicateSeedDetector &operator=(DuplicateSeedDetector &&) noexcept = default;
32
33 // add seeds from an associated measurements collection.
34 void addSeeds(std::size_t typeIndex, const ActsTrk::SeedContainer &seeds, const MeasurementIndex &measurementIndex);
35 void addSeeds(std::size_t typeIndex, const ActsTrk::SeedContainer &seeds, const MeasurementIndex &measurementIndex,
36 SpacePointIndicesFun_t spacePointIndicesFun, UseTopSpFun_t useTopSpFun);
37 inline void newTrajectory();
38 inline void addMeasurement(const xAOD::UncalibratedMeasurement* sl, const MeasurementIndex &measurementIndex);
39
40 // For complete removal of duplicate seeds, assumes isDuplicate(typeIndex,iseed) is called for monotonically increasing typeIndex,iseed.
41 inline bool isDuplicate(std::size_t typeIndex, index_t iseed);
42
43 private:
44 friend struct DuplicateSeedDetectorTest; // allow unit test access to internals
45
46 bool m_disabled{false};
47 index_t m_measOffset{0u}; // if a seed has N hits, only N - m_measOffset are needed to mark it as duplicate
48 std::vector<boost::container::small_vector<index_t, 2>> m_seedIndex; // m_seedIndex[measurementIndex][usedBySeedNumber]
49 std::vector<index_t> m_nUsedMeasurements;
50 std::vector<index_t> m_nSeedMeasurements;
51 std::vector<bool> m_isDuplicateSeed;
52 std::vector<index_t> m_seedOffset;
53 index_t m_numSeeds{0u}; // count of number of seeds so-far added with addSeeds()
54 std::size_t m_nextSeed{0ul}; // index of next seed expected with isDuplicate()
55 index_t m_foundSeeds{0u}; // count of found seeds for this/last trajectory
56
57 };
58
59} // namespace ActsTrk::detail
60
62
63#endif
DuplicateSeedDetector(std::size_t numSeeds, index_t measOffset, bool enabled)
std::function< std::array< std::size_t, 3 >(std::size_t)> SpacePointIndicesFun_t
bool isDuplicate(std::size_t typeIndex, index_t iseed)
void addMeasurement(const xAOD::UncalibratedMeasurement *sl, const MeasurementIndex &measurementIndex)
DuplicateSeedDetector & operator=(const DuplicateSeedDetector &)=delete
std::vector< boost::container::small_vector< index_t, 2 > > m_seedIndex
void addSeeds(std::size_t typeIndex, const ActsTrk::SeedContainer &seeds, const MeasurementIndex &measurementIndex)
std::function< bool(const ActsTrk::Seed &)> UseTopSpFun_t
DuplicateSeedDetector(const DuplicateSeedDetector &)=delete
DuplicateSeedDetector(DuplicateSeedDetector &&) noexcept=default
Hash functions to pack the source link into unordered_maps / unordered_sets.
The AlignStoreProviderAlg loads the rigid alignment corrections and pipes them through the readout ge...
STL namespace.
ICaloAffectedTool is abstract interface for tools checking if 4 mom is in calo affected region.
#define private
Definition testRead.cxx:27