ATLAS Offline Software
Toggle main menu visibility
Loading...
Searching...
No Matches
Trigger
EFTracking
FPGATrackSim
FPGATrackSimBinning
src
FPGATrackSimBinTool.cxx
Go to the documentation of this file.
1
// Copyright (C) 2002-2025 CERN for the benefit of the ATLAS collaboration
2
9
10
#include "
FPGATrackSimBinning/FPGATrackSimBinTool.h
"
11
12
using
FPGATrackSimBinUtil::ParSet
;
13
using
FPGATrackSimBinUtil::IdxSet
;
14
15
FPGATrackSimBinTool::FPGATrackSimBinTool
(
const
std::string &algname,
const
std::string &name,
16
const
IInterface *ifc)
17
:
AthAlgTool
(algname, name, ifc) {
18
}
19
20
21
// ----------------------------------------------------------------------------------------
22
// AthTool Methods
23
// ----------------------------------------------------------------------------------------
24
25
StatusCode
FPGATrackSimBinTool::initialize
() {
26
// Dump the configuration to make sure it propagated through right
27
const
std::vector<Gaudi::Details::PropertyBase*> props = this->getProperties();
28
for
( Gaudi::Details::PropertyBase* prop : props ) {
29
if
(prop->ownerTypeName()==this->type()) {
30
ATH_MSG_DEBUG
(
"Property:\t"
<< prop->name() <<
"\t : \t"
<< prop->toString());
31
}
32
}
33
34
// Retrieve
35
ATH_MSG_INFO
(
"Using "
<<
m_steps
.size() <<
" steps"
);
36
ATH_CHECK
(
m_steps
.retrieve());
37
38
if
(
m_steps
.empty()) {
39
ATH_MSG_FATAL
(
"initialize() Step list empty"
);
40
return
StatusCode::FAILURE;
41
}
42
43
m_parMin
= std::vector<double>(
m_parMinConfig
);
44
m_parMax
= std::vector<double>(
m_parMaxConfig
);
45
46
FPGATrackSimBinStep
* prev = 0;
47
for
(
auto
&step :
m_steps
) {
48
ATH_MSG_INFO
(
"Got Binning Step "
<< step->stepName());
49
m_stepNames
.push_back(step->stepName());
50
if
(!step->setRanges(prev,
m_parMin
,
m_parMax
)) {
51
ATH_MSG_FATAL
(
"Failed to setRange on step"
);
52
return
StatusCode::FAILURE;
53
}
54
prev = step.get();
55
}
56
57
ATH_MSG_DEBUG
(
"Finished initializing BinTool"
);
58
59
return
StatusCode::SUCCESS;
60
}
61
62
// ----------------------------------------------------------------------------------------
63
// Other methods
64
// ----------------------------------------------------------------------------------------
65
66
bool
FPGATrackSimBinTool::FPGATrackSimBinTool::inRange(
67
const
ParSet
&parset)
const
{
68
for
(
unsigned
par = 0; par <
FPGATrackSimTrackPars::NPARS
; par++) {
69
if
(!
inRange
(par,parset[par]))
70
return
false
;
71
}
72
return
true
;
73
}
74
75
// ----------------------------------------------------------------------------------------
76
// Valid Bin Function Implementation
77
// ----------------------------------------------------------------------------------------
78
79
void
FPGATrackSimBinTool::setValidBin
(
const
std::vector<unsigned>& idx) {
80
lastStep
()->
setValidBin
(idx);
81
}
82
83
void
FPGATrackSimBinTool::initValidBins
() {
84
for
(
auto
& step:
m_steps
) step->initValidBins();
85
}
86
87
void
FPGATrackSimBinTool::printValidBin
()
const
{
88
for
(
auto
&step :
m_steps
) {
89
step->printValidBin();
90
}
91
}
92
93
// Compute which bins correspond to track parameters that are in the region
94
// i.e. the pT, eta, phi, z0 and d0 bounds
95
void
FPGATrackSimBinTool::computeValidBins
(
const
IFPGATrackSimEventSelectionSvc
* evtSel) {
96
// determine which bins are valid
97
98
FPGATrackSimTrackPars
min_padded;
99
FPGATrackSimTrackPars
max_padded;
100
FPGATrackSimTrackPars
padding;
101
padding[
FPGATrackSimTrackPars::ID0
] =
m_d0FractionalPadding
;
102
padding[
FPGATrackSimTrackPars::IZ0
] =
m_z0FractionalPadding
;
103
padding[
FPGATrackSimTrackPars::IETA
] =
m_etaFractionalPadding
;
104
padding[
FPGATrackSimTrackPars::IPHI
] =
m_phiFractionalPadding
;
105
padding[
FPGATrackSimTrackPars::IHIP
] =
m_qOverPtFractionalPadding
;
106
for
(
unsigned
par = 0; par <
FPGATrackSimTrackPars::NPARS
; par++)
107
{
108
min_padded[par] = evtSel->
getMin
()[par] - padding[par] * (evtSel->
getMax
()[par]-evtSel->
getMin
()[par]);
109
max_padded[par] = evtSel->
getMax
()[par] + padding[par] * (evtSel->
getMax
()[par]-evtSel->
getMin
()[par]);
110
if
(par==
FPGATrackSimTrackPars::IHIP
) {
111
// working in units of GeV internally
112
min_padded[par] *= 1000;
113
max_padded[par] *= 1000;
114
}
115
ATH_MSG_INFO
(
"Padded Parameter Range: "
<<
FPGATrackSimTrackPars::parName
(par)
116
<<
" min="
<< min_padded[par] <<
" max="
<< max_padded[par]);
117
}
118
119
// iterator over the finest binning used which is the laststep
120
// setting lastSteps valid bins sets all the previous steps
121
auto
laststep =
lastStep
();
122
for
(
FPGATrackSimBinArray<int>::Iterator
bin
: laststep->m_validBinFull)
123
{
124
// this finds the parameters at all 2^5 corners of the bin and then finds the min and max of those
125
std::vector<IdxSet> idxsets =
FPGATrackSimBinUtil::makeVariationSet
(std::vector<unsigned>({0,1,2,3,4}),
bin
.idx());
126
FPGATrackSimTrackPars
minvals =
m_binDesc
->parSetToTrackPars(laststep->binCenter(
bin
.idx()));
127
FPGATrackSimTrackPars
maxvals =
m_binDesc
->parSetToTrackPars(laststep->binCenter(
bin
.idx()));
128
for
(
IdxSet
& idxset : idxsets) {
129
FPGATrackSimTrackPars
trackpars =
m_binDesc
->parSetToTrackPars(laststep->binLowEdge(idxset));
130
for
(
unsigned
par =0; par <
FPGATrackSimTrackPars::NPARS
; par++) {
131
minvals[par] = std::min(minvals[par],trackpars[par]);
132
maxvals[par] = std::max(maxvals[par],trackpars[par]);
133
}
134
}
135
136
// make sure bin overlaps with active region
137
bool
inRange
=
true
;
138
for
(
unsigned
par =0; par <
FPGATrackSimTrackPars::NPARS
; par++) {
139
inRange
=
inRange
&& (minvals[par] < max_padded[par]) && (maxvals[par] > min_padded[par]);
140
}
141
if
(
inRange
)
142
{
143
setValidBin
(
bin
.idx());
144
}
145
146
if
(
bin
.data() ==
false
)
147
{
148
ATH_MSG_VERBOSE
(
"Invalid bin: "
<<
bin
.idx() <<
" :"
<<
m_binDesc
->parSetToTrackPars(laststep->binCenter(
bin
.idx()))
149
<<
" minvals: "
<< minvals <<
" maxvals: "
<< maxvals );
150
}
151
}
152
}
153
154
ParSet
FPGATrackSimBinTool::center
()
const
155
{
156
ParSet
parset;
157
for
(
unsigned
i = 0; i <
FPGATrackSimTrackPars::NPARS
; i++)
158
{
159
parset[i] =
parCenter
(i);
160
}
161
return
parset;
162
}
163
164
// ----------------------------------------------------------------------------------------
165
// Write Firmware LUTs (constants)
166
// ----------------------------------------------------------------------------------------
167
void
FPGATrackSimBinTool::writeLUTs
()
const
{
168
for
(
const
auto
&step :
m_steps
) {
169
m_binDesc
->writeLUTs(*step.get());
170
}
171
}
ATH_CHECK
#define ATH_CHECK
Evaluate an expression and check for errors.
Definition
AthCheckMacros.h:40
ATH_MSG_FATAL
#define ATH_MSG_FATAL(x)
Definition
AthMsgStreamMacros.h:34
ATH_MSG_INFO
#define ATH_MSG_INFO(x)
Definition
AthMsgStreamMacros.h:31
ATH_MSG_VERBOSE
#define ATH_MSG_VERBOSE(x)
Definition
AthMsgStreamMacros.h:28
ATH_MSG_DEBUG
#define ATH_MSG_DEBUG(x)
Definition
AthMsgStreamMacros.h:29
FPGATrackSimBinTool.h
Binning Classes for BinTool.
inRange
bool inRange(const double *boundaries, const double value, const double tolerance=0.02)
Definition
LArSCIdVsIdTest.cxx:5
AthAlgTool::AthAlgTool
AthAlgTool(const std::string &type, const std::string &name, const IInterface *parent)
Constructor with parameters:
Definition
AthAlgTool.cxx:16
FPGATrackSimBinStep::setValidBin
void setValidBin(const std::vector< unsigned > &idx)
Definition
FPGATrackSimBinStep.cxx:133
FPGATrackSimBinTool::FPGATrackSimBinTool
FPGATrackSimBinTool(const std::string &algname, const std::string &name, const IInterface *ifc)
Definition
FPGATrackSimBinTool.cxx:15
FPGATrackSimBinTool::computeValidBins
void computeValidBins(const IFPGATrackSimEventSelectionSvc *evtSel)
Definition
FPGATrackSimBinTool.cxx:95
FPGATrackSimBinTool::initValidBins
void initValidBins()
Definition
FPGATrackSimBinTool.cxx:83
FPGATrackSimBinTool::center
FPGATrackSimBinUtil::ParSet center() const
Definition
FPGATrackSimBinTool.cxx:154
FPGATrackSimBinTool::m_parMax
FPGATrackSimBinUtil::ParSet m_parMax
Definition
FPGATrackSimBinTool.h:120
FPGATrackSimBinTool::FPGATrackSimBinStep
friend FPGATrackSimBinStep
Definition
FPGATrackSimBinTool.h:42
FPGATrackSimBinTool::writeLUTs
void writeLUTs() const
Definition
FPGATrackSimBinTool.cxx:167
FPGATrackSimBinTool::m_steps
ToolHandleArray< FPGATrackSimBinStep > m_steps
Definition
FPGATrackSimBinTool.h:111
FPGATrackSimBinTool::printValidBin
void printValidBin() const
Definition
FPGATrackSimBinTool.cxx:87
FPGATrackSimBinTool::m_etaFractionalPadding
Gaudi::Property< double > m_etaFractionalPadding
Definition
FPGATrackSimBinTool.h:105
FPGATrackSimBinTool::m_z0FractionalPadding
Gaudi::Property< double > m_z0FractionalPadding
Definition
FPGATrackSimBinTool.h:104
FPGATrackSimBinTool::m_parMaxConfig
Gaudi::Property< std::vector< double > > m_parMaxConfig
Definition
FPGATrackSimBinTool.h:109
FPGATrackSimBinTool::initialize
virtual StatusCode initialize() override
Definition
FPGATrackSimBinTool.cxx:25
FPGATrackSimBinTool::m_d0FractionalPadding
Gaudi::Property< double > m_d0FractionalPadding
Definition
FPGATrackSimBinTool.h:103
FPGATrackSimBinTool::m_binDesc
ToolHandle< IFPGATrackSimBinDesc > m_binDesc
Definition
FPGATrackSimBinTool.h:112
FPGATrackSimBinTool::setValidBin
void setValidBin(const std::vector< unsigned > &idx)
Definition
FPGATrackSimBinTool.cxx:79
FPGATrackSimBinTool::m_qOverPtFractionalPadding
Gaudi::Property< double > m_qOverPtFractionalPadding
Definition
FPGATrackSimBinTool.h:107
FPGATrackSimBinTool::m_stepNames
std::vector< std::string > m_stepNames
Definition
FPGATrackSimBinTool.h:123
FPGATrackSimBinTool::lastStep
FPGATrackSimBinStep * lastStep()
Definition
FPGATrackSimBinTool.h:56
FPGATrackSimBinTool::m_parMinConfig
Gaudi::Property< std::vector< double > > m_parMinConfig
Definition
FPGATrackSimBinTool.h:108
FPGATrackSimBinTool::m_phiFractionalPadding
Gaudi::Property< double > m_phiFractionalPadding
Definition
FPGATrackSimBinTool.h:106
FPGATrackSimBinTool::parCenter
double parCenter(unsigned par) const
Definition
FPGATrackSimBinTool.h:71
FPGATrackSimBinTool::inRange
bool inRange(unsigned par, double val) const
Definition
FPGATrackSimBinTool.h:81
FPGATrackSimBinTool::m_parMin
FPGATrackSimBinUtil::ParSet m_parMin
Definition
FPGATrackSimBinTool.h:119
FPGATrackSimTrackPars
Definition
FPGATrackSimTrackPars.h:22
FPGATrackSimTrackPars::parName
static std::string parName(unsigned i)
Definition
FPGATrackSimTrackPars.cxx:72
FPGATrackSimTrackPars::IHIP
@ IHIP
Definition
FPGATrackSimTrackPars.h:49
FPGATrackSimTrackPars::ID0
@ ID0
Definition
FPGATrackSimTrackPars.h:49
FPGATrackSimTrackPars::IETA
@ IETA
Definition
FPGATrackSimTrackPars.h:49
FPGATrackSimTrackPars::IPHI
@ IPHI
Definition
FPGATrackSimTrackPars.h:49
FPGATrackSimTrackPars::IZ0
@ IZ0
Definition
FPGATrackSimTrackPars.h:49
FPGATrackSimTrackPars::NPARS
@ NPARS
Definition
FPGATrackSimTrackPars.h:49
IFPGATrackSimEventSelectionSvc
Definition
IFPGATrackSimEventSelectionSvc.h:22
IFPGATrackSimEventSelectionSvc::getMin
virtual FPGATrackSimTrackPars getMin() const =0
IFPGATrackSimEventSelectionSvc::getMax
virtual FPGATrackSimTrackPars getMax() const =0
bin
Definition
BinsDiffFromStripMedian.h:43
FPGATrackSimBinUtil::makeVariationSet
std::vector< IdxSet > makeVariationSet(const std::vector< unsigned > &scanpars, const IdxSet &idx)
Definition
FPGATrackSimBinUtil.cxx:93
FPGATrackSimBinArray::Iterator
Definition
FPGATrackSimBinArray.h:201
FPGATrackSimBinUtil::IdxSet
Definition
FPGATrackSimBinUtil.h:41
FPGATrackSimBinUtil::ParSet
Definition
FPGATrackSimBinUtil.h:36
Generated on
for ATLAS Offline Software by
1.17.0