ATLAS Offline Software
Toggle main menu visibility
Loading...
Searching...
No Matches
Trigger
TrigT1
L1CaloFEX
L1CaloFEXSim
src
jFEXsumETAlgo.cxx
Go to the documentation of this file.
1
/*
2
Copyright (C) 2002-2026 CERN for the benefit of the ATLAS collaboration
3
*/
4
//***************************************************************************
5
// jFEXsumETAlgo - Algorithm for Sum ET Algorithm in jFEX
6
// -------------------
7
// begin : 12 05 2021
8
// email : Sergi.Rodriguez@cern.ch
9
//***************************************************************************
10
#include <vector>
11
#include <math.h>
12
#include "
jFEXsumETAlgo.h
"
13
#include "
L1CaloFEXSim/jTower.h
"
14
#include "
L1CaloFEXSim/jTowerContainer.h
"
15
#include "
L1CaloFEXSim/FEXAlgoSpaceDefs.h
"
16
17
namespace
LVL1
{
18
19
//Default Constructor
20
LVL1::jFEXsumETAlgo::jFEXsumETAlgo
(
const
std::string&
type
,
const
std::string&
name
,
const
IInterface* parent):
AthAlgTool
(
type
,
name
, parent) {
21
declareInterface<IjFEXsumETAlgo>(
this
);
22
}
23
25
LVL1::jFEXsumETAlgo::~jFEXsumETAlgo
() {
26
}
27
28
StatusCode
LVL1::jFEXsumETAlgo::initialize
() {
29
ATH_CHECK
(
m_jTowerContainerKey
.initialize());
30
return
StatusCode::SUCCESS;
31
}
32
33
//calls container for TT
34
StatusCode
LVL1::jFEXsumETAlgo::safetyTest
() {
35
36
m_jTowerContainer
=
SG::ReadHandle<jTowerContainer>
(
m_jTowerContainerKey
);
37
if
(!
m_jTowerContainer
.isValid()) {
38
ATH_MSG_ERROR
(
"Could not retrieve jTowerContainer "
<<
m_jTowerContainerKey
.key());
39
return
StatusCode::FAILURE;
40
}
41
42
return
StatusCode::SUCCESS;
43
}
44
45
StatusCode
LVL1::jFEXsumETAlgo::reset
() {
46
m_FPGA
.clear();
47
m_FPGA_phi02
.clear();
48
m_FPGA_fcal
.clear();
49
return
StatusCode::SUCCESS;
50
}
51
52
//
53
void
LVL1::jFEXsumETAlgo::setup
(
int
FPGA[
FEXAlgoSpaceDefs::jFEX_algoSpace_height
][
FEXAlgoSpaceDefs::jFEX_thin_algoSpace_width
]) {
54
55
ATH_MSG_DEBUG
(
"---------------- jFEXsumETAlgo::setup ----------------"
);
56
m_FPGA
.resize(
FEXAlgoSpaceDefs::jFEX_algoSpace_height
);
57
for
(
int
iphi=0;iphi<
FEXAlgoSpaceDefs::jFEX_algoSpace_height
;iphi++){
58
for
(
int
ieta=8;ieta<16;ieta++){
59
m_FPGA
[iphi].push_back(FPGA[iphi][ieta]);
60
}
61
}
62
}
63
64
void
LVL1::jFEXsumETAlgo::setup
(
int
FPGA[
FEXAlgoSpaceDefs::jFEX_algoSpace_height
][
FEXAlgoSpaceDefs::jFEX_wide_algoSpace_width
]) {
65
66
ATH_MSG_DEBUG
(
"---------------- jFEXsumETAlgo::setup ----------------"
);
67
m_FPGA
.resize(
FEXAlgoSpaceDefs::jFEX_algoSpace_height
);
68
for
(
int
iphi=0;iphi<
FEXAlgoSpaceDefs::jFEX_algoSpace_height
;iphi++){
69
for
(
int
ieta=8;ieta<17;ieta++){
70
m_FPGA
[iphi].push_back(FPGA[iphi][ieta]);
71
}
72
}
73
m_FPGA_phi02
.resize(16);
74
for
(
int
iphi=0;iphi<16;iphi++){
75
for
(
int
ieta=17;ieta<21;ieta++){
76
m_FPGA_phi02
[iphi].push_back(FPGA[iphi][ieta]);
77
}
78
}
79
m_FPGA_fcal
.resize(8);
80
for
(
int
iphi=0;iphi<8;iphi++){
81
for
(
int
ieta=21;ieta<
FEXAlgoSpaceDefs::jFEX_wide_algoSpace_width
;ieta++){
82
m_FPGA_fcal
[iphi].push_back(FPGA[iphi][ieta]);
83
}
84
}
85
86
}
87
88
//this function calculates SumET for the barrel region
89
void
LVL1::jFEXsumETAlgo::buildBarrelSumET
()
90
{
91
ATH_MSG_DEBUG
(
"---------------- jFEXsumETAlgo::buildBarrelSumET ----------------"
);
92
93
m_SumET
.clear();
94
m_SumET
.resize(8,0);
95
m_SumETSat
.clear();
96
m_SumETSat
.resize(8,0);
97
98
for
(
uint
iphi=0;iphi<
m_FPGA
.size();iphi++){
99
for
(
uint
ieta=0;ieta<
m_FPGA
[iphi].size();ieta++){
100
m_SumET
[ieta]+=
getTTowerET
(
m_FPGA
[iphi][ieta]);
101
m_SumETSat
[ieta] =
m_SumETSat
[ieta] ||
getTTowerSat
(
m_FPGA
[iphi][ieta]);
102
}
103
}
104
105
}
106
107
//this function calculates SumET for the forward region
108
void
LVL1::jFEXsumETAlgo::buildFWDSumET
()
109
{
110
ATH_MSG_DEBUG
(
"---------------- jFEXsumETAlgo::buildFWDSumET ----------------"
);
111
112
m_SumET
.clear();
113
m_SumET
.resize(14,0);
114
m_SumETSat
.clear();
115
m_SumETSat
.resize(14,0);
116
117
// ECal with resolution of 0.1x0.1
118
for
(
uint
iphi=0;iphi<
m_FPGA
.size();iphi++){
119
for
(
uint
ieta=0;ieta<
m_FPGA
[iphi].size();ieta++){
120
m_SumET
[ieta]+=
getTTowerET
(
m_FPGA
[iphi][ieta]);
121
m_SumETSat
.at(ieta) =
m_SumETSat
.at(ieta) ||
getTTowerSat
(
m_FPGA
[iphi][ieta]);
122
}
123
}
124
125
// ECal with resolution of 0.2x0.2
126
for
(
uint
iphi=0;iphi<
m_FPGA_phi02
.size();iphi++){
127
for
(
uint
ieta=0;ieta<
m_FPGA_phi02
[iphi].size();ieta++){
128
m_SumET
[ieta+9]+=
getTTowerET
(
m_FPGA_phi02
[iphi][ieta]);
129
m_SumETSat
.at(ieta+9) =
m_SumETSat
.at(ieta+9) ||
getTTowerSat
(
m_FPGA_phi02
[iphi][ieta]);
130
}
131
}
132
133
// Fcal
134
for
(
uint
iphi=0;iphi<
m_FPGA_fcal
.size();iphi++){
135
for
(
uint
ieta=0;ieta<
m_FPGA_fcal
[iphi].size();ieta++){
136
m_SumET
[13]+=
getTTowerET
(
m_FPGA_fcal
[iphi][ieta]);
//All FCAL is considered one slice due to the non-aligment of the FCal layers
137
m_SumETSat
.at(13) =
m_SumETSat
.at(13) ||
getTTowerSat
(
m_FPGA_fcal
[iphi][ieta]);
138
}
139
}
140
141
}
142
143
std::tuple<int, bool>
LVL1::jFEXsumETAlgo::getETlowerEta
(
uint
bin
)
const
144
{
145
uint
max
=
m_SumET
.size() > (
bin
+ 1) ?
bin
:
m_SumET
.size();
146
int
SumlowEta = 0;
147
bool
SumlowEtaSat =
false
;
148
for
(
uint
ieta=0;ieta<
max
;ieta++){
149
SumlowEta +=
m_SumET
.at(ieta);
150
SumlowEtaSat = SumlowEtaSat ||
m_SumETSat
.at(ieta);
151
}
152
return
{SumlowEta, SumlowEtaSat};
153
}
154
155
156
157
std::tuple<int, bool>
LVL1::jFEXsumETAlgo::getETupperEta
(
uint
bin
)
const
158
{
159
uint
min
=
m_SumET
.size() > (
bin
+ 1) ?
bin
:
m_SumET
.size();
160
int
SumhighEta = 0;
161
bool
SumhighEtaSat =
false
;
162
for
(
uint
ieta=
min
;ieta<
m_SumET
.size();ieta++){
163
SumhighEta +=
m_SumET
.at(ieta);
164
SumhighEtaSat = SumhighEtaSat ||
m_SumETSat
.at(ieta);
165
}
166
return
{SumhighEta, SumhighEtaSat};
167
}
168
169
170
//getter for tower saturation
171
bool
LVL1::jFEXsumETAlgo::getTTowerSat
(
unsigned
int
TTID ) {
172
if
(TTID == 0) {
173
return
false
;
174
}
175
176
const
LVL1::jTower
* tmpTower =
m_jTowerContainer
->findTower(TTID);
177
return
tmpTower->
getTowerSat
();
178
}
179
180
//Gets the ET for the TT. This ET is EM + HAD
181
int
LVL1::jFEXsumETAlgo::getTTowerET
(
unsigned
int
TTID )
const
{
182
if
(TTID == 0) {
183
return
0;
184
}
185
186
auto
itr =
m_map_Etvalues
.find(TTID);
187
if
( itr ==
m_map_Etvalues
.end()) {
188
return
0;
189
}
190
191
return
(itr->second).at(1);
192
}
193
194
195
void
LVL1::jFEXsumETAlgo::setFPGAEnergy
(std::unordered_map<
int
,std::vector<int> > et_map){
196
m_map_Etvalues
=std::move(et_map);
197
}
198
199
200
}
// end of namespace LVL1
ATH_CHECK
#define ATH_CHECK
Evaluate an expression and check for errors.
Definition
AthCheckMacros.h:40
ATH_MSG_DEBUG
#define ATH_MSG_DEBUG(x,...)
Definition
AthMsgStreamMacros.h:43
ATH_MSG_ERROR
#define ATH_MSG_ERROR(x,...)
Definition
AthMsgStreamMacros.h:47
FEXAlgoSpaceDefs.h
uint
unsigned int uint
Definition
LArOFPhaseFill.cxx:19
min
#define min(a, b)
Definition
cfImp.cxx:40
max
#define max(a, b)
Definition
cfImp.cxx:41
AthAlgTool::AthAlgTool
AthAlgTool(const std::string &type, const std::string &name, const IInterface *parent)
Constructor with parameters:
Definition
AthAlgTool.cxx:16
LVL1::FEXAlgoSpaceDefs::jFEX_wide_algoSpace_width
static constexpr int jFEX_wide_algoSpace_width
Definition
FEXAlgoSpaceDefs.h:27
LVL1::FEXAlgoSpaceDefs::jFEX_thin_algoSpace_width
static constexpr int jFEX_thin_algoSpace_width
Definition
FEXAlgoSpaceDefs.h:28
LVL1::FEXAlgoSpaceDefs::jFEX_algoSpace_height
static constexpr int jFEX_algoSpace_height
Definition
FEXAlgoSpaceDefs.h:29
LVL1::jFEXsumETAlgo::m_map_Etvalues
std::unordered_map< int, std::vector< int > > m_map_Etvalues
Definition
jFEXsumETAlgo.h:58
LVL1::jFEXsumETAlgo::m_SumETSat
std::vector< bool > m_SumETSat
Definition
jFEXsumETAlgo.h:56
LVL1::jFEXsumETAlgo::safetyTest
virtual StatusCode safetyTest() override
Definition
jFEXsumETAlgo.cxx:34
LVL1::jFEXsumETAlgo::getETupperEta
virtual std::tuple< int, bool > getETupperEta(uint bin) const override
Definition
jFEXsumETAlgo.cxx:157
LVL1::jFEXsumETAlgo::~jFEXsumETAlgo
virtual ~jFEXsumETAlgo()
Destructor.
Definition
jFEXsumETAlgo.cxx:25
LVL1::jFEXsumETAlgo::m_FPGA_fcal
std::vector< std::vector< int > > m_FPGA_fcal
Definition
jFEXsumETAlgo.h:54
LVL1::jFEXsumETAlgo::reset
virtual StatusCode reset() override
Definition
jFEXsumETAlgo.cxx:45
LVL1::jFEXsumETAlgo::setFPGAEnergy
virtual void setFPGAEnergy(std::unordered_map< int, std::vector< int > > et_map) override
Definition
jFEXsumETAlgo.cxx:195
LVL1::jFEXsumETAlgo::buildBarrelSumET
virtual void buildBarrelSumET() override
Definition
jFEXsumETAlgo.cxx:89
LVL1::jFEXsumETAlgo::jFEXsumETAlgo
jFEXsumETAlgo(const std::string &type, const std::string &name, const IInterface *parent)
Constructors.
Definition
jFEXsumETAlgo.cxx:20
LVL1::jFEXsumETAlgo::buildFWDSumET
virtual void buildFWDSumET() override
Definition
jFEXsumETAlgo.cxx:108
LVL1::jFEXsumETAlgo::m_FPGA_phi02
std::vector< std::vector< int > > m_FPGA_phi02
Definition
jFEXsumETAlgo.h:53
LVL1::jFEXsumETAlgo::m_SumET
std::vector< int > m_SumET
Definition
jFEXsumETAlgo.h:55
LVL1::jFEXsumETAlgo::setup
virtual void setup(int FPGA[FEXAlgoSpaceDefs::jFEX_algoSpace_height][FEXAlgoSpaceDefs::jFEX_thin_algoSpace_width]) override
Definition
jFEXsumETAlgo.cxx:53
LVL1::jFEXsumETAlgo::m_FPGA
std::vector< std::vector< int > > m_FPGA
Definition
jFEXsumETAlgo.h:52
LVL1::jFEXsumETAlgo::initialize
virtual StatusCode initialize() override
standard Athena-Algorithm method
Definition
jFEXsumETAlgo.cxx:28
LVL1::jFEXsumETAlgo::m_jTowerContainerKey
SG::ReadHandleKey< LVL1::jTowerContainer > m_jTowerContainerKey
Definition
jFEXsumETAlgo.h:50
LVL1::jFEXsumETAlgo::getTTowerET
virtual int getTTowerET(unsigned int TTID=0) const override
Definition
jFEXsumETAlgo.cxx:181
LVL1::jFEXsumETAlgo::getETlowerEta
virtual std::tuple< int, bool > getETlowerEta(uint bin) const override
Definition
jFEXsumETAlgo.cxx:143
LVL1::jFEXsumETAlgo::getTTowerSat
bool getTTowerSat(unsigned int TTID)
Definition
jFEXsumETAlgo.cxx:171
LVL1::jFEXsumETAlgo::m_jTowerContainer
SG::ReadHandle< jTowerContainer > m_jTowerContainer
Definition
jFEXsumETAlgo.h:51
LVL1::jTower
The jTower class is an interface object for jFEX trigger algorithms The purposes are twofold:
Definition
jTower.h:36
LVL1::jTower::getTowerSat
bool getTowerSat() const
Definition
jTower.h:61
SG::ReadHandle
Definition
StoreGate/StoreGate/ReadHandle.h:67
bin
Definition
BinsDiffFromStripMedian.h:43
jFEXsumETAlgo.h
jTowerContainer.h
jTower.h
LVL1
eFexTowerBuilder creates xAOD::eFexTowerContainer from supercells (LATOME) and triggerTowers (TREX) i...
Definition
IZdcDataAccess.h:13
type
TrigConf::name
Definition
HLTChainList.h:35
Generated on
for ATLAS Offline Software by
1.17.0