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