ATLAS Offline Software
Toggle main menu visibility
Loading...
Searching...
No Matches
Tracking
Acts
ActsTrackReconstruction
src
detail
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
5
#include "
src/detail/DuplicateSeedDetector.h
"
6
7
#include "
src/detail/MeasurementIndex.h
"
8
#include <stdexcept>
9
#include <array>
10
11
namespace
ActsTrk::detail
{
12
13
DuplicateSeedDetector::DuplicateSeedDetector
(std::size_t numSeeds,
14
unsigned
int
measOffset,
15
bool
enabled)
16
:
m_disabled
(!enabled),
17
m_measOffset
(measOffset),
18
m_nUsedMeasurements
(enabled ? numSeeds : 0ul, 0u),
19
m_nSeedMeasurements
(enabled ? numSeeds : 0ul, 0u),
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
[](
const
ActsTrk::SpacePointRange
&) -> std::array<std::size_t, 3> {
return
{0, 1, 2}; });
31
}
32
33
void
DuplicateSeedDetector::addSeeds
(std::size_t typeIndex,
34
const
ActsTrk::SeedContainer
&seeds,
35
const
MeasurementIndex
& measurementIndex,
36
SpacePointIndicesFun_t
spacePointIndicesFun) {
37
if
(
m_disabled
)
38
return
;
39
if
(!(typeIndex <
m_seedOffset
.size()))
40
m_seedOffset
.resize(typeIndex + 1);
41
m_seedOffset
[typeIndex] =
m_numSeeds
;
42
m_seedIndex
.resize(measurementIndex.
size
());
// will resize for each seed container, but always with the same space
43
44
for
(
const
ActsTrk::Seed
seed : seeds) {
45
std::size_t nSP = 0;
46
const
auto
& sps = seed.sp();
47
for
(std::size_t isp : spacePointIndicesFun(sps)) {
48
const
xAOD::SpacePoint
*
sp
= sps.at(isp);
49
const
std::vector<const xAOD::UncalibratedMeasurement *> &els =
sp
->measurements();
50
for
(
const
xAOD::UncalibratedMeasurement
*meas : els) {
51
std::size_t hitIndex = measurementIndex.
index
(*meas);
52
if
(!(hitIndex <
m_seedIndex
.size())) {
53
// std::cout << "ERROR hit index " << hitIndex << " past end of " << m_seedIndex.size() << " hit indices\n";
54
continue
;
55
}
56
m_seedIndex
[hitIndex].push_back(
m_numSeeds
);
57
++
m_nSeedMeasurements
[
m_numSeeds
];
58
}
59
++nSP;
60
if
(nSP >= 3)
break
;
61
}
62
++
m_numSeeds
;
63
}
64
}
65
66
}
// namespace ActsTrk::detail
DuplicateSeedDetector.h
sp
static Double_t sp
Definition
LArPhysWaveHECTool.cxx:37
MeasurementIndex.h
ActsTrk::detail::DuplicateSeedDetector::m_seedOffset
std::vector< index_t > m_seedOffset
Definition
DuplicateSeedDetector.h:51
ActsTrk::detail::DuplicateSeedDetector::m_nUsedMeasurements
std::vector< index_t > m_nUsedMeasurements
Definition
DuplicateSeedDetector.h:48
ActsTrk::detail::DuplicateSeedDetector::DuplicateSeedDetector
DuplicateSeedDetector(std::size_t numSeeds, index_t measOffset, bool enabled)
Definition
DuplicateSeedDetector.cxx:13
ActsTrk::detail::DuplicateSeedDetector::m_numSeeds
index_t m_numSeeds
Definition
DuplicateSeedDetector.h:52
ActsTrk::detail::DuplicateSeedDetector::m_disabled
bool m_disabled
Definition
DuplicateSeedDetector.h:45
ActsTrk::detail::DuplicateSeedDetector::m_isDuplicateSeed
std::vector< bool > m_isDuplicateSeed
Definition
DuplicateSeedDetector.h:50
ActsTrk::detail::DuplicateSeedDetector::m_nSeedMeasurements
std::vector< index_t > m_nSeedMeasurements
Definition
DuplicateSeedDetector.h:49
ActsTrk::detail::DuplicateSeedDetector::m_seedIndex
std::vector< boost::container::small_vector< index_t, 2 > > m_seedIndex
Definition
DuplicateSeedDetector.h:47
ActsTrk::detail::DuplicateSeedDetector::m_measOffset
index_t m_measOffset
Definition
DuplicateSeedDetector.h:46
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 >(const ActsTrk::SpacePointRange &)> SpacePointIndicesFun_t
Definition
DuplicateSeedDetector.h:23
ActsTrk::detail::MeasurementIndex
Definition
MeasurementIndex.h:16
ActsTrk::detail::MeasurementIndex::size
std::size_t size() const
ActsTrk::detail::MeasurementIndex::index
std::size_t index(const xAOD::UncalibratedMeasurement &hit) const
ActsTrk::detail
Hash functions to pack the source link into unordered_maps / unordered_sets.
Definition
MeasurementCalibratorBase.h:31
xAOD::UncalibratedMeasurement
UncalibratedMeasurement_v1 UncalibratedMeasurement
Define the version of the uncalibrated measurement class.
Definition
UncalibratedMeasurementFwd.h:13
xAOD::SpacePoint
SpacePoint_v1 SpacePoint
Definition
Event/xAOD/xAODInDetMeasurement/xAODInDetMeasurement/SpacePoint.h:12
ActsTrk::SeedContainer
Definition
SeedContainer.h:67
ActsTrk::Seed
Definition
SeedContainer.h:44
ActsTrk::SpacePointRange
Definition
SeedContainer.h:29
Generated on
for ATLAS Offline Software by
1.17.0