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
[](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
std::size_t nSP = 0;
48
bool
useTopSp = useTopSpFun(seed);
49
const
auto
& sps = seed.sp();
50
for
(std::size_t isp : spacePointIndicesFun(sps.size())) {
51
const
xAOD::SpacePoint
*
sp
= sps.at(useTopSp ? sps.size() - isp - 1 : isp);
52
const
std::vector<const xAOD::UncalibratedMeasurement *> &els =
sp
->measurements();
53
for
(
const
xAOD::UncalibratedMeasurement
*meas : els) {
54
std::size_t hitIndex = measurementIndex.
index
(*meas);
55
if
(!(hitIndex <
m_seedIndex
.size())) {
56
// std::cout << "ERROR hit index " << hitIndex << " past end of " << m_seedIndex.size() << " hit indices\n";
57
continue
;
58
}
59
m_seedIndex
[hitIndex].push_back(
m_numSeeds
);
60
++
m_nSeedMeasurements
[
m_numSeeds
];
61
}
62
++nSP;
63
if
(nSP >= 3)
break
;
64
}
65
++
m_numSeeds
;
66
}
67
}
68
69
}
// 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:52
ActsTrk::detail::DuplicateSeedDetector::m_nUsedMeasurements
std::vector< index_t > m_nUsedMeasurements
Definition
DuplicateSeedDetector.h:49
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:53
ActsTrk::detail::DuplicateSeedDetector::m_disabled
bool m_disabled
Definition
DuplicateSeedDetector.h:46
ActsTrk::detail::DuplicateSeedDetector::m_isDuplicateSeed
std::vector< bool > m_isDuplicateSeed
Definition
DuplicateSeedDetector.h:51
ActsTrk::detail::DuplicateSeedDetector::SpacePointIndicesFun_t
std::function< std::array< std::size_t, 3 >(std::size_t)> SpacePointIndicesFun_t
Definition
DuplicateSeedDetector.h:23
ActsTrk::detail::DuplicateSeedDetector::m_nSeedMeasurements
std::vector< index_t > m_nSeedMeasurements
Definition
DuplicateSeedDetector.h:50
ActsTrk::detail::DuplicateSeedDetector::m_seedIndex
std::vector< boost::container::small_vector< index_t, 2 > > m_seedIndex
Definition
DuplicateSeedDetector.h:48
ActsTrk::detail::DuplicateSeedDetector::m_measOffset
index_t m_measOffset
Definition
DuplicateSeedDetector.h:47
ActsTrk::detail::DuplicateSeedDetector::addSeeds
void addSeeds(std::size_t typeIndex, const ActsTrk::SeedContainer &seeds, const MeasurementIndex &measurementIndex)
Definition
DuplicateSeedDetector.cxx:26
ActsTrk::detail::DuplicateSeedDetector::UseTopSpFun_t
std::function< bool(const ActsTrk::Seed &)> UseTopSpFun_t
Definition
DuplicateSeedDetector.h:24
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:66
ActsTrk::Seed
Definition
SeedContainer.h:43
Generated on
for ATLAS Offline Software by
1.17.0