ATLAS Offline Software
DuplicateSeedDetector.h
Go to the documentation of this file.
1 /*
2  Copyright (C) 2002-2025 CERN for the benefit of the ATLAS collaboration
3 */
4 
5 #ifndef ACTSTRACKRECONSTRUCTION_DUPLICATESEEDDETECTOR_H
6 #define ACTSTRACKRECONSTRUCTION_DUPLICATESEEDDETECTOR_H
7 
11 
12 #include <unordered_map>
13 #include <vector>
14 #include <boost/container/small_vector.hpp>
15 
16 namespace ActsTrk::detail {
17  class MeasurementIndex;
18 
19  // === DuplicateSeedDetector ===============================================
20  // Identify duplicate seeds: seeds where all measurements were already located in a previously followed trajectory.
22  public:
23  using index_t = unsigned int;
24  using SpacePointIndicesFun_t = std::function<std::array<std::size_t, 3>(std::size_t)>; // copied from ITrackParamsEstimationTool
25  using UseTopSpFun_t = std::function<bool(const ActsTrk::Seed&)>;
26 
27  DuplicateSeedDetector(std::size_t numSeeds, index_t measOffset, bool enabled);
33 
34  // add seeds from an associated measurements collection.
35  void addSeeds(std::size_t typeIndex, const ActsTrk::SeedContainer &seeds, const MeasurementIndex &measurementIndex);
36  void addSeeds(std::size_t typeIndex, const ActsTrk::SeedContainer &seeds, const MeasurementIndex &measurementIndex,
37  SpacePointIndicesFun_t spacePointIndicesFun, UseTopSpFun_t useTopSpFun);
38  inline void newTrajectory();
40 
41  // For complete removal of duplicate seeds, assumes isDuplicate(typeIndex,iseed) is called for monotonically increasing typeIndex,iseed.
42  inline bool isDuplicate(std::size_t typeIndex, index_t iseed);
43 
44  private:
45  friend struct DuplicateSeedDetectorTest; // allow unit test access to internals
46 
47  bool m_disabled{false};
48  index_t m_measOffset{0u}; // if a seed has N hits, only N - m_measOffset are needed to mark it as duplicate
49  std::vector<boost::container::small_vector<index_t, 2>> m_seedIndex; // m_seedIndex[measurementIndex][usedBySeedNumber]
50  std::vector<index_t> m_nUsedMeasurements;
51  std::vector<index_t> m_nSeedMeasurements;
52  std::vector<bool> m_isDuplicateSeed;
53  std::vector<index_t> m_seedOffset;
54  index_t m_numSeeds{0u}; // count of number of seeds so-far added with addSeeds()
55  std::size_t m_nextSeed{0ul}; // index of next seed expected with isDuplicate()
56  index_t m_foundSeeds{0u}; // count of found seeds for this/last trajectory
57 
58  };
59 
60 } // namespace ActsTrk::detail
61 
63 
64 #endif
ActsTrk::detail::DuplicateSeedDetector::DuplicateSeedDetectorTest
friend struct DuplicateSeedDetectorTest
Definition: DuplicateSeedDetector.h:45
ActsTrk::detail::DuplicateSeedDetector::m_numSeeds
index_t m_numSeeds
Definition: DuplicateSeedDetector.h:54
ActsTrk::detail::DuplicateSeedDetector::addSeeds
void addSeeds(std::size_t typeIndex, const ActsTrk::SeedContainer &seeds, const MeasurementIndex &measurementIndex)
Definition: DuplicateSeedDetector.cxx:26
ActsTrk::detail::DuplicateSeedDetector::SpacePointIndicesFun_t
std::function< std::array< std::size_t, 3 >(std::size_t)> SpacePointIndicesFun_t
Definition: DuplicateSeedDetector.h:24
ActsTrk::detail::DuplicateSeedDetector::m_nextSeed
std::size_t m_nextSeed
Definition: DuplicateSeedDetector.h:55
ActsTrk::detail::DuplicateSeedDetector::DuplicateSeedDetector
DuplicateSeedDetector(const DuplicateSeedDetector &)=delete
ActsTrk::detail::DuplicateSeedDetector::isDuplicate
bool isDuplicate(std::size_t typeIndex, index_t iseed)
const
bool const RAWDATA *ch2 const
Definition: LArRodBlockPhysicsV0.cxx:560
ActsTrk::detail::MeasurementIndex
Definition: MeasurementIndex.h:16
ActsTrk::detail::DuplicateSeedDetector::operator=
DuplicateSeedDetector & operator=(const DuplicateSeedDetector &)=delete
ActsTrk::detail::DuplicateSeedDetector::m_nUsedMeasurements
std::vector< index_t > m_nUsedMeasurements
Definition: DuplicateSeedDetector.h:50
SeedContainer.h
Trk::u
@ u
Enums for curvilinear frames.
Definition: ParamDefs.h:77
ActsTrk::detail::DuplicateSeedDetector::m_measOffset
index_t m_measOffset
Definition: DuplicateSeedDetector.h:48
ActsTrk::detail::DuplicateSeedDetector::DuplicateSeedDetector
DuplicateSeedDetector(std::size_t numSeeds, index_t measOffset, bool enabled)
Definition: DuplicateSeedDetector.cxx:13
xAOD::UncalibratedMeasurement_v1
Definition: UncalibratedMeasurement_v1.h:13
ActsTrk::detail::DuplicateSeedDetector::m_isDuplicateSeed
std::vector< bool > m_isDuplicateSeed
Definition: DuplicateSeedDetector.h:52
UncalibratedMeasurementContainer.h
ActsTrk::detail::DuplicateSeedDetector::m_disabled
bool m_disabled
Definition: DuplicateSeedDetector.h:47
ActsTrk::detail::DuplicateSeedDetector::addMeasurement
void addMeasurement(const ActsTrk::ATLASUncalibSourceLink &sl, const MeasurementIndex &measurementIndex)
detail::ul
unsigned long ul
Definition: PrimitiveHelpers.h:46
DataVector
Derived DataVector<T>.
Definition: DataVector.h:795
ActsTrk::detail::DuplicateSeedDetector::m_seedIndex
std::vector< boost::container::small_vector< index_t, 2 > > m_seedIndex
Definition: DuplicateSeedDetector.h:49
ActsTrk::detail::DuplicateSeedDetector::DuplicateSeedDetector
DuplicateSeedDetector(DuplicateSeedDetector &&) noexcept=default
ActsTrk::detail::DuplicateSeedDetector::newTrajectory
void newTrajectory()
ActsTrk::ActsSeed
Definition: Seed.h:18
ActsTrk::detail::DuplicateSeedDetector::m_nSeedMeasurements
std::vector< index_t > m_nSeedMeasurements
Definition: DuplicateSeedDetector.h:51
DuplicateSeedDetector.icc
python.CaloAddPedShiftConfig.default
default
Definition: CaloAddPedShiftConfig.py:43
python.CaloAddPedShiftConfig.int
int
Definition: CaloAddPedShiftConfig.py:45
private
#define private
Definition: xAODTruthCnvAlg.h:20
ActsTrk::detail::DuplicateSeedDetector::m_seedOffset
std::vector< index_t > m_seedOffset
Definition: DuplicateSeedDetector.h:53
ActsTrk
The AlignStoreProviderAlg loads the rigid alignment corrections and pipes them through the readout ge...
Definition: MdtCalibInput.h:31
ActsTrk::detail::DuplicateSeedDetector::m_foundSeeds
index_t m_foundSeeds
Definition: DuplicateSeedDetector.h:56
ActsTrk::detail
Athena definition of the Eigen plugin.
Definition: MeasurementCalibratorBase.h:19
xAOD::bool
setBGCode setTAP setLVL2ErrorBits bool
Definition: TrigDecision_v1.cxx:60
ActsTrk::detail::DuplicateSeedDetector::index_t
unsigned int index_t
Definition: DuplicateSeedDetector.h:23
ActsTrk::detail::DuplicateSeedDetector
Definition: DuplicateSeedDetector.h:21
ActsTrk::detail::DuplicateSeedDetector::UseTopSpFun_t
std::function< bool(const ActsTrk::Seed &)> UseTopSpFun_t
Definition: DuplicateSeedDetector.h:25