ATLAS Offline Software
Toggle main menu visibility
Loading...
Searching...
No Matches
Trigger
EFTracking
FPGATrackSim
FPGATrackSimObjects
src
FPGATrackSimRoad.cxx
Go to the documentation of this file.
1
/*
2
Copyright (C) 2002-2023 CERN for the benefit of the ATLAS collaboration
3
*/
10
11
#include <vector>
12
13
#include "
FPGATrackSimObjects/FPGATrackSimRoad.h
"
14
#include "
FPGATrackSimObjects/FPGATrackSimConstants.h
"
15
16
using namespace
std
;
17
18
//FPGATrackSimRoad::~FPGATrackSimRoad() { }
19
20
size_t
FPGATrackSimRoad::getNHits
()
const
21
{
22
size_t
n = 0;
23
for
(
const
auto
& l :
m_hits_trans
) n += l.size();
24
return
n;
25
}
26
27
std::vector<size_t>
FPGATrackSimRoad::getNHits_layer
()
const
28
{
29
std::vector<size_t> out;
30
out.reserve(
m_hits_trans
.size());
31
for
(
const
auto
& l :
m_hits_trans
) out.push_back(l.size());
32
return
out;
33
}
34
35
size_t
FPGATrackSimRoad::getNHitCombos
()
const
36
{
37
size_t
combos = 1;
38
size_t
l =
m_hits_trans
.size();
39
std::vector<unsigned int> skipindices;
40
41
// figure out indices of outer layers of stereo layers, where inner layer is also present to not
42
// double count spacepoints
43
for
(
size_t
i = 1; i < l; ++i) {
44
if
(
m_hits_trans
[i - 1].
size
() > 0 &&
m_hits_trans
[i].
size
() > 0) {
45
if
((
m_hits_trans
[i - 1][0]->isStrip() &&
m_hits_trans
[i][0]->isStrip()) &&
46
(
m_hits_trans
[i - 1][0]->getPhysLayer() % 2 == 0) &&
47
(
m_hits_trans
[i][0]->getPhysLayer() -
m_hits_trans
[i - 1][0]->getPhysLayer() == 1)) {
48
skipindices.push_back(i);
49
++i;
50
}
51
}
52
}
53
54
// calculate number of combinations
55
for
(
size_t
i = 0; i < l; ++i) {
56
size_t
n = 0;
57
for
(
size_t
j = 0; j <
m_hits_trans
[i].size(); ++j) {
58
// extra handling of spacepoints in combination calculation
59
if
(
m_hits_trans
[i][j]->getHitType() ==
HitType::spacepoint
) {
60
bool
skip
=
false
;
61
size_t
skipsize = skipindices.size();
62
for
(
size_t
k = 0; k < skipsize; ++k)
63
if
(i == skipindices[k])
skip
=
true
;
64
65
if
(
skip
)
continue
;
66
}
67
++n;
68
}
69
if
(n > 0) combos *= n;
70
}
71
72
return
combos;
73
}
74
75
76
FPGATrackSimMultiTruth
FPGATrackSimRoad::getTruth
()
const
77
{
78
// get number of pixel layers from hits. Assumes strips follow pixels,
79
// and all hits in a layer share the same det type
80
unsigned
nPixel;
81
for
(nPixel = 0; nPixel <
m_hits_trans
.size(); nPixel++)
82
if
(!
m_hits_trans
[nPixel].
empty
() &&
m_hits_trans
[nPixel].front()->isStrip())
83
break
;
84
85
std::map<FPGATrackSimMultiTruth::Barcode, layer_bitmask_t> layer_map;
86
87
for
(
auto
const
& hits :
m_hits_trans
)
88
for
(
auto
const
&
h
: hits)
89
for
(
auto
const
&
x
:
h
->getTruth())
90
layer_map[
x
.first] |= (1 <<
h
->getLayer());
91
92
FPGATrackSimMultiTruth
mt;
93
for
(
auto
const
&
x
: layer_map)
94
{
95
int
w = 0, n = 0;
96
for
(
unsigned
i = 0; i <
m_hits_trans
.size(); i++)
97
{
98
if
(!
m_hits_trans
[i].
empty
())
99
n += (i < nPixel) ? 2 : 1;
// double weight pixels
100
if
(
x
.second & (1 << i))
101
w += (i < nPixel) ? 2 : 1;
// double weight pixels
102
}
103
if
(n == 0){
104
throw
std::range_error(
"divide by zero in FPGATrackSimRoad::getTruth"
);
105
}
106
mt.
add
(
x
.first,
static_cast<
float
>
(w) / n);
107
}
108
109
return
mt;
110
}
111
112
113
std::unordered_set<const FPGATrackSimHit*>
FPGATrackSimRoad::getHits_flat
()
const
{
114
std::unordered_set<const FPGATrackSimHit*> hits;
115
for
(
const
auto
& layerHits :
m_hits
) {
116
for
(
const
auto
&
hit
: layerHits) {
117
hits.insert(&
hit
);
118
}
119
}
120
return
hits;
121
}
122
123
std::unordered_set<std::shared_ptr<const FPGATrackSimHit>>
FPGATrackSimRoad::getHitPtrs_flat
()
const
{
124
std::unordered_set<std::shared_ptr<const FPGATrackSimHit>> hits;
125
for
(
const
auto
& layerHits :
m_hits_trans
) {
126
for
(
const
auto
&
hit
: layerHits) {
127
hits.insert(
hit
);
128
}
129
}
130
return
hits;
131
}
132
133
void
FPGATrackSimRoad::setHits
(
unsigned
layer, std::vector<std::shared_ptr<const FPGATrackSimHit>> && hits) {
134
m_hits_trans
[layer] = std::move(hits);
135
}
// ensure setNLayers is called first
136
137
void
FPGATrackSimRoad::setHits
(std::vector<std::vector<std::shared_ptr<const FPGATrackSimHit>>> &&hits){
138
if
(hits.size() !=
m_hits_trans
.size())
setNLayers
(hits.size());
139
for
(
unsigned
i = 0;i < hits.size();++i) {
140
setHits
(i,std::move(hits[i]));
141
}
142
}
143
144
void
FPGATrackSimRoad::persistifyHits
() {
145
if
(
m_hits_trans
.empty())
return
;
146
147
m_hits
.clear();
148
m_hits
.resize(
m_hits_trans
.size());
149
for
(
size_t
layer = 0; layer <
m_hits_trans
.size(); ++layer) {
150
for
(
const
auto
&
hit
:
m_hits_trans
[layer]) {
151
if
(
hit
) {
152
m_hits
[layer].push_back(*
hit
);
153
}
154
}
155
}
156
}
157
158
159
ostream&
operator<<
(ostream& os,
const
FPGATrackSimRoad
& road)
160
{
161
os <<
"road "
<< road.
m_roadID
162
<<
": PID "
<< road.
m_pid
163
<<
", sector "
<< road.
m_sector
164
<<
" hitLayers "
<< std::showbase << std::hex << road.
m_hit_layers
165
<<
" wcLayers "
<< std::showbase << std::hex << road.
m_wildcard_layers
166
<<
", nHits "
<< road.
getNHits
();
167
/*
168
for (size_t l=0; l < road.m_hits.size(); l++)
169
{
170
for (FPGATrackSimHit const * hit : road.m_hits[l])
171
os << "\n\t" << *hit;
172
}
173
*/
174
175
return
os;
176
}
177
FPGATrackSimConstants.h
HitType::spacepoint
@ spacepoint
Definition
FPGATrackSimHit.h:39
FPGATrackSimRoad.h
Defines a class for roads.
hit
bool hit(const Container &ids, int pdgId)
Definition
JetIRCSafeLabelTool.cxx:64
size
size_t size() const
Number of registered mappings.
skip
bool skip
Definition
TrigGlobEffCorrValidation.cxx:190
x
#define x
empty
static const Attributes_t empty
Definition
XmlStreamer.cxx:16
FPGATrackSimMultiTruth
Definition
FPGATrackSimMultiTruth.h:46
FPGATrackSimMultiTruth::add
void add(const FPGATrackSimMultiTruth::Barcode &code, const FPGATrackSimMultiTruth::Weight &weight)
Definition
FPGATrackSimMultiTruth.cxx:22
FPGATrackSimRoad::m_wildcard_layers
layer_bitmask_t m_wildcard_layers
Definition
FPGATrackSimRoad.h:146
FPGATrackSimRoad::getTruth
FPGATrackSimMultiTruth getTruth() const
Definition
FPGATrackSimRoad.cxx:76
FPGATrackSimRoad::getNHitCombos
size_t getNHitCombos() const
Definition
FPGATrackSimRoad.cxx:35
FPGATrackSimRoad::m_roadID
int m_roadID
Definition
FPGATrackSimRoad.h:140
FPGATrackSimRoad::m_hits_trans
std::vector< std::vector< std::shared_ptr< const FPGATrackSimHit > > > m_hits_trans
Definition
FPGATrackSimRoad.h:163
FPGATrackSimRoad::persistifyHits
void persistifyHits()
Definition
FPGATrackSimRoad.cxx:144
FPGATrackSimRoad::getNHits
size_t getNHits() const
Definition
FPGATrackSimRoad.cxx:20
FPGATrackSimRoad::m_hit_layers
layer_bitmask_t m_hit_layers
Definition
FPGATrackSimRoad.h:145
FPGATrackSimRoad::setHits
void setHits(std::vector< std::vector< std::shared_ptr< const FPGATrackSimHit > > > &&hits)
Definition
FPGATrackSimRoad.cxx:137
FPGATrackSimRoad::FPGATrackSimRoad
FPGATrackSimRoad()=default
FPGATrackSimRoad::m_pid
pid_t m_pid
Definition
FPGATrackSimRoad.h:141
FPGATrackSimRoad::m_hits
std::vector< std::vector< FPGATrackSimHit > > m_hits
Definition
FPGATrackSimRoad.h:162
FPGATrackSimRoad::setNLayers
void setNLayers(unsigned layers)
Definition
FPGATrackSimRoad.h:66
FPGATrackSimRoad::getNHits_layer
std::vector< size_t > getNHits_layer() const
Definition
FPGATrackSimRoad.cxx:27
FPGATrackSimRoad::getHits_flat
std::unordered_set< const FPGATrackSimHit * > getHits_flat() const
Definition
FPGATrackSimRoad.cxx:113
FPGATrackSimRoad::m_sector
sector_t m_sector
Definition
FPGATrackSimRoad.h:142
FPGATrackSimRoad::getHitPtrs_flat
std::unordered_set< std::shared_ptr< const FPGATrackSimHit > > getHitPtrs_flat() const
Definition
FPGATrackSimRoad.cxx:123
h
std
STL namespace.
std::operator<<
ostream & operator<<(ostream &s, const SG::VarHandleKey &m)
Definition
AthToolSupport/AsgDataHandles/Root/VarHandleKey.cxx:158
Generated on
for ATLAS Offline Software by
1.17.0