ATLAS Offline Software
DuplicateSeedDetector.cxx
Go to the documentation of this file.
1 /*
2  Copyright (C) 2002-2025 CERN for the benefit of the ATLAS collaboration
3 */
4 
6 
8 #include <stdexcept>
9 #include <array>
10 
11 namespace ActsTrk::detail {
12 
14  unsigned int measOffset,
15  bool enabled)
16  : m_disabled(!enabled),
17  m_measOffset(measOffset),
18  m_nUsedMeasurements(enabled ? numSeeds : 0ul, 0ul),
19  m_nSeedMeasurements(enabled ? numSeeds : 0ul, 0ul),
20  m_isDuplicateSeed(enabled ? numSeeds : 0ul, false) {
21  if (m_disabled)
22  return;
23  m_seedOffset.reserve(2ul);
24  }
25 
26  void DuplicateSeedDetector::addSeeds(std::size_t typeIndex,
27  const ActsTrk::SeedContainer &seeds,
28  const MeasurementIndex& measurementIndex) {
29  addSeeds(typeIndex, seeds, measurementIndex,
30  [](std::size_t) -> std::array<std::size_t, 3> { return {0, 1, 2}; },
31  [](const ActsTrk::Seed&) -> bool { return false; });
32  }
33 
34  void DuplicateSeedDetector::addSeeds(std::size_t typeIndex,
35  const ActsTrk::SeedContainer &seeds,
36  const MeasurementIndex& measurementIndex,
37  SpacePointIndicesFun_t spacePointIndicesFun,
38  UseTopSpFun_t useTopSpFun) {
39  if (m_disabled)
40  return;
41  if (!(typeIndex < m_seedOffset.size()))
42  m_seedOffset.resize(typeIndex + 1);
43  m_seedOffset[typeIndex] = m_numSeeds;
44  m_seedIndex.resize(measurementIndex.size()); // will resize for each seed container, but always with the same space
45 
46  for (const ActsTrk::Seed *seed : seeds) {
47  if (!seed)
48  continue;
49 
50  std::size_t nSP = 0;
51  bool useTopSp = useTopSpFun(*seed);
52  const auto& sps = seed->sp();
53  for (std::size_t isp : spacePointIndicesFun(sps.size())) {
54  const xAOD::SpacePoint *sp = sps.at(useTopSp ? sps.size() - isp - 1 : isp);
55  const std::vector<const xAOD::UncalibratedMeasurement *> &els = sp->measurements();
56  for (const xAOD::UncalibratedMeasurement *meas : els) {
57  std::size_t hitIndex = measurementIndex.index(*meas);
58  if (!(hitIndex < m_seedIndex.size())) {
59  // std::cout << "ERROR hit index " << hitIndex << " past end of " << m_seedIndex.size() << " hit indices\n";
60  continue;
61  }
62  m_seedIndex[hitIndex].push_back(m_numSeeds);
64  }
65  ++nSP;
66  if (nSP >= 3) break;
67  }
68  ++m_numSeeds;
69  }
70  }
71 
72 } // namespace ActsTrk::detail
ActsTrk::detail::DuplicateSeedDetector::m_numSeeds
index_t m_numSeeds
Definition: DuplicateSeedDetector.h:55
ActsTrk::detail::MeasurementIndex::size
std::size_t size() const
ActsTrk::detail::DuplicateSeedDetector::addSeeds
void addSeeds(std::size_t typeIndex, const ActsTrk::SeedContainer &seeds, const MeasurementIndex &measurementIndex)
Definition: DuplicateSeedDetector.cxx:26
ActsTrk::detail::DuplicateSeedDetector::DuplicateSeedDetector
DuplicateSeedDetector(std::size_t numSeeds, unsigned int measOffset, bool enabled)
Definition: DuplicateSeedDetector.cxx:13
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_seedIndex
std::vector< boost::container::small_vector< index_t, 4 > > m_seedIndex
Definition: DuplicateSeedDetector.h:50
xAOD::SpacePoint_v1
Definition: SpacePoint_v1.h:29
ActsTrk::detail::MeasurementIndex
Definition: MeasurementIndex.h:16
MeasurementIndex.h
xAOD::UncalibratedMeasurement_v1
Definition: UncalibratedMeasurement_v1.h:13
ActsTrk::detail::DuplicateSeedDetector::m_disabled
bool m_disabled
Definition: DuplicateSeedDetector.h:47
detail::ul
unsigned long ul
Definition: PrimitiveHelpers.h:46
xAOD::SpacePoint_v1::measurements
const std::vector< const xAOD::UncalibratedMeasurement * > & measurements() const
Returns the index of the measurements.
DataVector
Derived DataVector<T>.
Definition: DataVector.h:794
ActsTrk::ActsSeed
Definition: Seed.h:18
ActsTrk::detail::DuplicateSeedDetector::m_seedOffset
std::vector< index_t > m_seedOffset
Definition: DuplicateSeedDetector.h:54
ActsTrk::detail::MeasurementIndex::index
std::size_t index(const xAOD::UncalibratedMeasurement &hit) const
ActsTrk::detail::DuplicateSeedDetector::m_nSeedMeasurements
std::vector< std::size_t > m_nSeedMeasurements
Definition: DuplicateSeedDetector.h:52
DuplicateSeedDetector.h
ActsTrk::detail
Athena definition of the Eigen plugin.
Definition: MeasurementCalibratorBase.h:19
ActsTrk::detail::DuplicateSeedDetector::UseTopSpFun_t
std::function< bool(const ActsTrk::Seed &)> UseTopSpFun_t
Definition: DuplicateSeedDetector.h:25