ATLAS Offline Software
Loading...
Searching...
No Matches
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
19namespace LVL1{
20
21//Default Constructor
22LVL1::jFEXsumETAlgo::jFEXsumETAlgo(const std::string& type, const std::string& name, const IInterface* parent): AthAlgTool(type, name, parent) {
23 declareInterface<IjFEXsumETAlgo>(this);
24}
25
29
31 ATH_CHECK(m_jTowerContainerKey.initialize());
32 return StatusCode::SUCCESS;
33}
34
35//calls container for TT
37
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);
153 }
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);
167 }
169}
170
171
172//getter for tower saturation
173bool 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
183int 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
197void LVL1::jFEXsumETAlgo::setFPGAEnergy(std::unordered_map<int,std::vector<int> > et_map){
198 m_map_Etvalues=std::move(et_map);
199}
200
201
202}// end of namespace LVL1
#define ATH_CHECK
Evaluate an expression and check for errors.
#define ATH_MSG_ERROR(x)
#define ATH_MSG_DEBUG(x)
unsigned int uint
#define min(a, b)
Definition cfImp.cxx:40
#define max(a, b)
Definition cfImp.cxx:41
AthAlgTool(const std::string &type, const std::string &name, const IInterface *parent)
Constructor with parameters:
static constexpr int jFEX_wide_algoSpace_width
static constexpr int jFEX_thin_algoSpace_width
static constexpr int jFEX_algoSpace_height
std::unordered_map< int, std::vector< int > > m_map_Etvalues
std::vector< bool > m_SumETSat
virtual StatusCode safetyTest() override
virtual ~jFEXsumETAlgo()
Destructor.
std::vector< std::vector< int > > m_FPGA_fcal
virtual StatusCode reset() override
virtual void setFPGAEnergy(std::unordered_map< int, std::vector< int > > et_map) override
virtual void buildBarrelSumET() override
jFEXsumETAlgo(const std::string &type, const std::string &name, const IInterface *parent)
Constructors.
virtual std::tuple< int, bool > getETupperEta(uint bin) override
virtual void buildFWDSumET() override
std::vector< std::vector< int > > m_FPGA_phi02
std::vector< int > m_SumET
virtual void setup(int FPGA[FEXAlgoSpaceDefs::jFEX_algoSpace_height][FEXAlgoSpaceDefs::jFEX_thin_algoSpace_width]) override
std::vector< std::vector< int > > m_FPGA
virtual StatusCode initialize() override
standard Athena-Algorithm method
SG::ReadHandleKey< LVL1::jTowerContainer > m_jTowerContainerKey
virtual std::tuple< int, bool > getETlowerEta(uint bin) override
bool getTTowerSat(unsigned int TTID)
SG::ReadHandle< jTowerContainer > m_jTowerContainer
virtual int getTTowerET(unsigned int TTID=0) override
The jTower class is an interface object for jFEX trigger algorithms The purposes are twofold:
Definition jTower.h:36
bool getTowerSat() const
Definition jTower.h:61
eFexTowerBuilder creates xAOD::eFexTowerContainer from supercells (LATOME) and triggerTowers (TREX) i...