ATLAS Offline Software
Loading...
Searching...
No Matches
gFEXSim.cxx
Go to the documentation of this file.
1/*
2 Copyright (C) 2002-2023 CERN for the benefit of the ATLAS collaboration
3*/
4//***************************************************************************
5// gFEXSim - Simulation of the gFEX module
6// -------------------
7// begin : 01 04 2021
8// email : cecilia.tosciri@cern.ch
9//***************************************************************************
10
11#include "gFEXSim.h"
12#include "L1CaloFEXSim/gTower.h"
13#include "gFEXFPGA.h"
15#include "gFEXJetAlgo.h"
18
19namespace LVL1 {
20
21 gFEXSim::gFEXSim(const std::string& type,const std::string& name,const IInterface* parent):
22 AthAlgTool(type,name,parent)
23 {
24 declareInterface<IgFEXSim>(this);
25 }
26
27
29 {
30 int rows = m_gTowersIDs.size();
31 int cols = m_gTowersIDs[0].size();
32
33 for (int i=0; i<rows; i++){
34 for (int j=0; j<cols; j++){
35 m_gTowersIDs[i][j] = 0;
36 }
37 }
38
39 }
40
44
45 StatusCode gFEXSim::initialize(){
46 ATH_CHECK( m_gFEXFPGA_Tool.retrieve() );
47 ATH_CHECK( m_gFEXJetAlgoTool.retrieve() );
48 ATH_CHECK( m_gFEXJwoJAlgoTool.retrieve() );
49 ATH_CHECK( m_gFEXaltMetAlgoTool.retrieve() );
50 ATH_CHECK(m_l1MenuKey.initialize());
51 ATH_CHECK(m_gTowersWriteKey.initialize());
52 return StatusCode::SUCCESS;
53 }
54
56
57 }
58
59StatusCode gFEXSim::executegFEXSim(const gTowersIDs& tmp_gTowersIDs_subset, gFEXOutputCollection* gFEXOutputs){
60
61 // Container to save gTowers
63 ATH_CHECK(gTowersContainer.record(std::make_unique<xAOD::gFexTowerContainer>(), std::make_unique<xAOD::gFexTowerAuxContainer>()));
64 ATH_MSG_DEBUG("Recorded gFexTriggerTower container with key " << gTowersContainer.key());
65
66 int rows = tmp_gTowersIDs_subset.size();
67 int cols = tmp_gTowersIDs_subset[0].size();
68
69 std::copy(&tmp_gTowersIDs_subset[0][0], &tmp_gTowersIDs_subset[0][0]+(rows*cols),&m_gTowersIDs[0][0]);
70
71 gTowersType Atwr = {{{0}}};
72 gTowersType Btwr = {{{0}}};
73 gTowersType Ctwr = {{{0}}};
74
75 gTowersType Atwr50 = {{{0}}};
76 gTowersType Btwr50 = {{{0}}};
77 gTowersType Ctwr50 = {{{0}}};
78
79 gTowersType Asat = {{{0}}};
80 gTowersType Bsat = {{{0}}};
81 gTowersType Csat = {{{0}}};
82
83
84 //FPGA A----------------------------------------------------------------------------------------------------------------------------------------------
85 gTowersCentral tmp_gTowersIDs_subset_centralFPGA;
86 memset(&tmp_gTowersIDs_subset_centralFPGA, 0, sizeof tmp_gTowersIDs_subset_centralFPGA);
87 for (int myrow = 0; myrow<FEXAlgoSpaceDefs::centralNphi; myrow++){
88 for (int mycol = 0; mycol<12; mycol++){
89 tmp_gTowersIDs_subset_centralFPGA[myrow][mycol] = tmp_gTowersIDs_subset[myrow][mycol+8];
90 }
91 }
92 ATH_CHECK(m_gFEXFPGA_Tool->init(0));
93 m_gFEXFPGA_Tool->FillgTowerEDMCentral(gTowersContainer, tmp_gTowersIDs_subset_centralFPGA, Atwr, Atwr50, Asat);
94 m_gFEXFPGA_Tool->reset();
95
96 //FPGA A----------------------------------------------------------------------------------------------------------------------------------------------
97
98 //FPGA B----------------------------------------------------------------------------------------------------------------------------------------------
99 gTowersCentral tmp_gTowersIDs_subset_centralFPGA_B;
100 memset(&tmp_gTowersIDs_subset_centralFPGA_B, 0, sizeof tmp_gTowersIDs_subset_centralFPGA_B);
101 for (int myrow = 0; myrow<FEXAlgoSpaceDefs::centralNphi; myrow++){
102 for (int mycol = 0; mycol<12; mycol++){
103 tmp_gTowersIDs_subset_centralFPGA_B[myrow][mycol] = tmp_gTowersIDs_subset[myrow][mycol+20];
104 }
105 }
106 ATH_CHECK(m_gFEXFPGA_Tool->init(1));
107 m_gFEXFPGA_Tool->FillgTowerEDMCentral(gTowersContainer, tmp_gTowersIDs_subset_centralFPGA_B, Btwr, Btwr50, Bsat);
108 m_gFEXFPGA_Tool->reset();
109
110 //FPGA B----------------------------------------------------------------------------------------------------------------------------------------------
111
112
113 //FPGA C ----------------------------------------------------------------------------------------------------------------------------------------------
114
115 // C-N
116 //Use a matrix with 32 rows, even if FPGA-N (negative) also deals with regions of 16 bins in phi (those connected to FCAL).
117 //We have 4 columns with 32 rows and 4 columns with 16 rows for each FPGA-C.
118 //So we use a matrix 32x8 but we fill only half of it in the region 3.3<|eta|<4.8.
119 gTowersForward tmp_gTowersIDs_subset_forwardFPGA_N;
120 memset(&tmp_gTowersIDs_subset_forwardFPGA_N, 0, sizeof tmp_gTowersIDs_subset_forwardFPGA_N);
121 for (int myrow = 0; myrow<FEXAlgoSpaceDefs::forwardNphi; myrow++){
122 for (int mycol = 0; mycol<4; mycol++){
123 tmp_gTowersIDs_subset_forwardFPGA_N[myrow][mycol] = tmp_gTowersIDs_subset[myrow][mycol];
124 }
125 }
126 for (int myrow = 0; myrow<FEXAlgoSpaceDefs::centralNphi; myrow++){
127 for (int mycol = 4; mycol<8; mycol++){
128 tmp_gTowersIDs_subset_forwardFPGA_N[myrow][mycol] = tmp_gTowersIDs_subset[myrow][mycol];
129 }
130 }
131
132 // C-P
133 //Use a matrix with 32 rows, even if FPGA-C (positive) also deals with regions of 16 bins in phi (those connected to FCAL).
134 //We have 4 columns with 32 rows and 4 columns with 16 rows for each FPGA-C.
135 //So we use a matrix 32x8 but we fill only half of it in the region 3.3<|eta|<4.8.
136 gTowersForward tmp_gTowersIDs_subset_forwardFPGA_P;
137 memset(&tmp_gTowersIDs_subset_forwardFPGA_P, 0, sizeof tmp_gTowersIDs_subset_forwardFPGA_P);
138 for (int myrow = 0; myrow<FEXAlgoSpaceDefs::centralNphi; myrow++){
139 for (int mycol = 0; mycol<4; mycol++){
140 tmp_gTowersIDs_subset_forwardFPGA_P[myrow][mycol] = tmp_gTowersIDs_subset[myrow][mycol+32];
141 }
142 }
143 for (int myrow = 0; myrow<FEXAlgoSpaceDefs::forwardNphi; myrow++){
144 for (int mycol = 4; mycol<8; mycol++){
145 tmp_gTowersIDs_subset_forwardFPGA_P[myrow][mycol] = tmp_gTowersIDs_subset[myrow][mycol+32];
146 }
147 }
148
149 ATH_CHECK(m_gFEXFPGA_Tool->init(2));
150 m_gFEXFPGA_Tool->FillgTowerEDMForward(gTowersContainer, tmp_gTowersIDs_subset_forwardFPGA_N, tmp_gTowersIDs_subset_forwardFPGA_P, Ctwr, Ctwr50, Csat);
151 m_gFEXFPGA_Tool->reset();
152
153
154 //FPGA C----------------------------------------------------------------------------------------------------------------------------------------------
155
156 // Retrieve the L1 menu configuration
158 ATH_CHECK(l1Menu.isValid());
159
160 //Parameters related to gLJ (large-R jet objects - gJet)
161 auto & thr_gLJ = l1Menu->thrExtraInfo().gLJ();
162 int gLJ_seedThrA = 0;
163 int gLJ_seedThrB = 0;
164 int gLJ_seedThrC = 0;
165 gLJ_seedThrA = thr_gLJ.seedThrCounts('A'); //defined in GeV by default
166 gLJ_seedThrB = thr_gLJ.seedThrCounts('B'); //defined in GeV by default
167 gLJ_seedThrC = thr_gLJ.seedThrCounts('C'); //defined in GeV by default
168
169 int gLJ_ptMinToTopoCounts1 = 0;
170 int gLJ_ptMinToTopoCounts2 = 0;
171 gLJ_ptMinToTopoCounts1 = thr_gLJ.ptMinToTopoCounts(1);
172 gLJ_ptMinToTopoCounts2 = thr_gLJ.ptMinToTopoCounts(2);
173 float gLJ_rhoMaxA = 0;
174 float gLJ_rhoMaxB = 0;
175 float gLJ_rhoMaxC = 0;
176
177 gLJ_rhoMaxA = (thr_gLJ.rhoTowerMax('A')*1000)/50;//Values are given in GeV, need to be converted with 50MeV scale to be used in PU calculation
178 gLJ_rhoMaxB = (thr_gLJ.rhoTowerMax('B')*1000)/50;//Values are given in GeV, need to be converted with 50MeV scale to be used in PU calculation
179 gLJ_rhoMaxC = (thr_gLJ.rhoTowerMax('C')*1000)/50;//Values are given in GeV, need to be converted with 50MeV scale to be used in PU calculation
180
181
182 //Parameters related to gJ (small-R jet objects - gBlock)
183 auto & thr_gJ = l1Menu->thrExtraInfo().gJ();
184 int gJ_ptMinToTopoCounts1 = 0;
185 int gJ_ptMinToTopoCounts2 = 0;
186 gJ_ptMinToTopoCounts1 = thr_gJ.ptMinToTopoCounts(1);
187 gJ_ptMinToTopoCounts2 = thr_gJ.ptMinToTopoCounts(2);
188
189
190 int pucA = 0;
191 int pucB = 0;
192 int pucC = 0;
193 //note that jetThreshold is not a configurable parameter in firmware, it is used to check that jet values are positive
194 int jetThreshold = FEXAlgoSpaceDefs::jetThr; //this threshold is set by the online software
195
196 if (FEXAlgoSpaceDefs::ENABLE_PUC == true){
197 m_gFEXJetAlgoTool->pileUpCalculation(Atwr50, gLJ_rhoMaxA, 1, pucA);
198 m_gFEXJetAlgoTool->pileUpCalculation(Btwr50, gLJ_rhoMaxB, 1, pucB);
199 m_gFEXJetAlgoTool->pileUpCalculation(Ctwr50, gLJ_rhoMaxC, 1, pucC);
200 }
201
202
203
204 // The output TOBs, to be filled by the gFEXJetAlgoTool
205 std::array<uint32_t, 7> ATOB1_dat = {0};
206 std::array<uint32_t, 7> ATOB2_dat = {0};
207 std::array<uint32_t, 7> BTOB1_dat = {0};
208 std::array<uint32_t, 7> BTOB2_dat = {0};
209 std::array<uint32_t, 7> CTOB1_dat = {0};
210 std::array<uint32_t, 7> CTOB2_dat = {0};
211
212
213 // Pass the energy matrices to the algo tool, and run the algorithms
214 auto tobs_v = m_gFEXJetAlgoTool->largeRfinder(Atwr, Btwr, Ctwr, Asat, Bsat, Csat, pucA, pucB, pucC,
215 gLJ_seedThrA, gLJ_seedThrB, gLJ_seedThrC, gJ_ptMinToTopoCounts1, gJ_ptMinToTopoCounts2,
216 jetThreshold, gLJ_ptMinToTopoCounts1, gLJ_ptMinToTopoCounts2,
217 ATOB1_dat, ATOB2_dat,
218 BTOB1_dat, BTOB2_dat,
219 CTOB1_dat, CTOB2_dat);
220
221 m_gRhoTobWords.resize(3);
222 m_gBlockTobWords.resize(12);
223 m_gJetTobWords.resize(6);
224
225 m_gRhoTobWords[0] = ATOB2_dat[0];//Pile up correction A
226 m_gRhoTobWords[1] = BTOB2_dat[0];//Pile up correction B
227 m_gRhoTobWords[2] = CTOB2_dat[0];//Pile up correction C
228
229 //Placing the gBlock TOBs into a dedicated array
230 m_gBlockTobWords[0] = ATOB1_dat[1];//leading gBlock in FPGA A, eta bins (0--5)
231 m_gBlockTobWords[1] = ATOB2_dat[1];//leading gBlock in FPGA A, eta bins (6--11)
232 m_gBlockTobWords[2] = BTOB1_dat[1];//leading gBlock in FPGA B, eta bins (0--5)
233 m_gBlockTobWords[3] = BTOB2_dat[1];//leading gBlock in FPGA B, eta bins (6--11)
234
235 m_gBlockTobWords[4] = ATOB1_dat[2];//subleading gBlock in FPGA A, eta bins (0--5)
236 m_gBlockTobWords[5] = ATOB2_dat[2];//subleading gBlock in FPGA A, eta bins (6--11)
237 m_gBlockTobWords[6] = BTOB1_dat[2];//subleading gBlock in FPGA B, eta bins (0--5)
238 m_gBlockTobWords[7] = BTOB2_dat[2];//subleading gBlock in FPGA B, eta bins (6--11)
239
240 m_gBlockTobWords[8] = CTOB1_dat[1];//leading gBlock in FPGA C, eta negative
241 m_gBlockTobWords[9] = CTOB2_dat[1];//leading gBlock in FPGA C, eta positive
242 m_gBlockTobWords[10] = CTOB1_dat[2];//sub-leading gBlock in FPGA C, eta negative
243 m_gBlockTobWords[11] = CTOB2_dat[2];//sub-leading gBlock in FPGA C, eta positive
244
245 //Placing the gJet TOBs into a dedicated array
246 m_gJetTobWords[0] = ATOB1_dat[3];//leading gJet in FPGA A, eta bins (0--5)
247 m_gJetTobWords[1] = ATOB2_dat[3];//leading gJet in FPGA A, eta bins (6--11)
248 m_gJetTobWords[2] = BTOB1_dat[3];//leading gJet in FPGA B, eta bins (0--5)
249 m_gJetTobWords[3] = BTOB2_dat[3];//leading gJet in FPGA B, eta bins (6--11)
250 m_gJetTobWords[4] = CTOB1_dat[3];//leading gJet in FPGA C negative
251 m_gJetTobWords[5] = CTOB2_dat[3];//leading gJet in FPGA C positive
252
253
254 // Use the gFEXJetAlgoTool
255 std::array<int32_t, 4> outJwojTOB = {0};
256 std::array<uint32_t, 4> outAltMetTOB = {0};
257
258 //Parameters related to gXE (MET objects, both JwoJ and alternative MET calculation)
259 auto & thr_gXE = l1Menu->thrExtraInfo().gXE();
260 int gXE_seedThrA = 0;
261 int gXE_seedThrB = 0;
262 int gXE_seedThrC = 0;
263 gXE_seedThrA = thr_gXE.seedThr('A'); //defined in counts
264 gXE_seedThrB = thr_gXE.seedThr('B'); //defined in counts
265 gXE_seedThrC = thr_gXE.seedThr('C'); //defined in counts
266
267
268 int aFPGA_A = thr_gXE.JWOJ_param('A','a');// 1003
269 int bFPGA_A = thr_gXE.JWOJ_param('A','b');// 409
270 int aFPGA_B = thr_gXE.JWOJ_param('B','a');// 1003
271 int bFPGA_B = thr_gXE.JWOJ_param('B','b');// 409
272 int aFPGA_C = thr_gXE.JWOJ_param('C','a');// 1003
273 int bFPGA_C = thr_gXE.JWOJ_param('C','b');// 409
274
275 //Set constants for JwoJ and run the algorithm
276 m_gFEXJwoJAlgoTool->setAlgoConstant(aFPGA_A, bFPGA_A,
277 aFPGA_B, bFPGA_B,
278 aFPGA_C, bFPGA_C,
279 gXE_seedThrA, gXE_seedThrB, gXE_seedThrC);
280
281 auto global_tobs = m_gFEXJwoJAlgoTool->jwojAlgo(Atwr, Btwr, Ctwr, outJwojTOB);
282
283 m_gScalarEJwojTobWords.resize(1);
287
288
289 //Placing the global TOBs into a dedicated array
290 m_gScalarEJwojTobWords[0] = outJwojTOB[0];//
291 m_gMETComponentsJwojTobWords[0] = outJwojTOB[1];//
292 m_gMHTComponentsJwojTobWords[0] = outJwojTOB[2];//
293 m_gMSTComponentsJwojTobWords[0] = outJwojTOB[3];//
294
295
296 //Set constants for noise cut and rho+RMS and run the algorithms
297 std::vector<int> thr_A (12, 0);//To be retrieved from COOL database in the future
298 std::vector<int> thr_B (12, 0);//To be retrieved from COOL database in the future
299
300 m_gFEXaltMetAlgoTool->setAlgoConstant(std::move(thr_A) , std::move(thr_B), 10000/200);
301
302 m_gFEXaltMetAlgoTool->altMetAlgo(Atwr, Btwr, outAltMetTOB);
303
307 m_gScalarERmsTobWords.resize(1);
308
309
310 //Placing the global TOBs into a dedicated array
311 m_gMETComponentsNoiseCutTobWords[0] = outAltMetTOB[0];//
312 m_gMETComponentsRmsTobWords[0] = outAltMetTOB[1];//
313 m_gScalarENoiseCutTobWords[0] = outAltMetTOB[2];//
314 m_gScalarERmsTobWords[0] = outAltMetTOB[3];//
315
316 for (int i = 0; i <14; i++){
317 gFEXOutputs->addJetTob(tobs_v[i]->getWord());
318 gFEXOutputs->addValueJet("EtaJet", tobs_v[i]->getEta());
319 gFEXOutputs->addValueJet("PhiJet", tobs_v[i]->getPhi());
320 gFEXOutputs->addValueJet("ETJet", tobs_v[i]->getET());
321 gFEXOutputs->addValueJet("StatusJet", tobs_v[i]->getStatus());
322 gFEXOutputs->addValueJet("TobIDJet", tobs_v[i]->getTobID());
323 gFEXOutputs->fillJet();
324
325 }
326
327 for (int i = 0; i <4; i++){
328 gFEXOutputs->addGlobalTob(global_tobs[i]->getWord());
329 gFEXOutputs->addValueGlobal("GlobalQuantity1", global_tobs[i]->getQuantity1());
330 gFEXOutputs->addValueGlobal("GlobalQuantity2", global_tobs[i]->getQuantity2());
331 gFEXOutputs->addValueGlobal("SaturationGlobal", global_tobs[i]->getSaturation());
332 gFEXOutputs->addValueGlobal("TobIDGlobal", global_tobs[i]->getTobID());
333 gFEXOutputs->addValueGlobal("GlobalStatus1", global_tobs[i]->getStatus1());
334 gFEXOutputs->addValueGlobal("GlobalStatus2", global_tobs[i]->getStatus2());
335 gFEXOutputs->fillGlobal();
336
337 }
338
339 return StatusCode::SUCCESS;
340
341}
342
343
344std::vector<uint32_t> gFEXSim::getgRhoTOBs() const
345{
346 return m_gRhoTobWords;
347}
348
349std::vector<uint32_t> gFEXSim::getgBlockTOBs() const
350{
351 return m_gBlockTobWords;
352}
353
354std::vector<uint32_t> gFEXSim::getgJetTOBs() const
355{
356 return m_gJetTobWords;
357}
358
359std::vector<int32_t> gFEXSim::getgScalarEJwojTOBs() const
360{
362}
363
364std::vector<uint32_t> gFEXSim::getgMETComponentsJwojTOBs() const
365{
367}
368
369std::vector<uint32_t> gFEXSim::getgMHTComponentsJwojTOBs() const
370{
372}
373
374std::vector<uint32_t> gFEXSim::getgMSTComponentsJwojTOBs() const
375{
377}
378
379std::vector<uint32_t> gFEXSim::getgMETComponentsNoiseCutTOBs() const
380{
382}
383
384std::vector<uint32_t> gFEXSim::getgMETComponentsRmsTOBs() const
385{
387}
388
389std::vector<uint32_t> gFEXSim::getgScalarENoiseCutTOBs() const
390{
392}
393
394std::vector<uint32_t> gFEXSim::getgScalarERmsTOBs() const
395{
397}
398
399
400} // end of namespace bracket
#define ATH_CHECK
Evaluate an expression and check for errors.
#define ATH_MSG_DEBUG(x)
AthAlgTool(const std::string &type, const std::string &name, const IInterface *parent)
Constructor with parameters:
static constexpr int centralNphi
static constexpr int jetThr
static constexpr int forwardNphi
static constexpr bool ENABLE_PUC
void addValueGlobal(std::string key, float value)
void addValueJet(std::string key, float value)
add a value related to the jet finder algorithm for a TOB
virtual std::vector< uint32_t > getgMSTComponentsJwojTOBs() const override
Definition gFEXSim.cxx:374
virtual StatusCode executegFEXSim(const gTowersIDs &tmp, gFEXOutputCollection *gFEXOutputs) override
Definition gFEXSim.cxx:59
ToolHandle< IgFEXFPGA > m_gFEXFPGA_Tool
Definition gFEXSim.h:111
std::vector< uint32_t > m_gMETComponentsJwojTobWords
Definition gFEXSim.h:95
virtual std::vector< uint32_t > getgMHTComponentsJwojTOBs() const override
Definition gFEXSim.cxx:369
gTowersIDs m_gTowersIDs
Internal data.
Definition gFEXSim.h:83
std::vector< int32_t > m_gScalarEJwojTobWords
Definition gFEXSim.h:93
SG::ReadHandleKey< TrigConf::L1Menu > m_l1MenuKey
Definition gFEXSim.h:119
virtual std::vector< uint32_t > getgScalarENoiseCutTOBs() const override
Definition gFEXSim.cxx:389
ToolHandle< IgFEXJwoJAlgo > m_gFEXJwoJAlgoTool
Definition gFEXSim.h:115
virtual std::vector< uint32_t > getgMETComponentsJwojTOBs() const override
Definition gFEXSim.cxx:364
SG::WriteHandleKey< xAOD::gFexTowerContainer > m_gTowersWriteKey
Definition gFEXSim.h:121
std::vector< uint32_t > m_gMHTComponentsJwojTobWords
Definition gFEXSim.h:97
virtual std::vector< uint32_t > getgJetTOBs() const override
Definition gFEXSim.cxx:354
std::vector< uint32_t > m_gMSTComponentsJwojTobWords
Definition gFEXSim.h:99
virtual std::vector< uint32_t > getgScalarERmsTOBs() const override
Definition gFEXSim.cxx:394
virtual void reset() override
Definition gFEXSim.cxx:28
virtual std::vector< uint32_t > getgBlockTOBs() const override
Definition gFEXSim.cxx:349
virtual std::vector< uint32_t > getgMETComponentsRmsTOBs() const override
Definition gFEXSim.cxx:384
std::vector< uint32_t > m_gScalarERmsTobWords
Definition gFEXSim.h:107
std::vector< uint32_t > m_gScalarENoiseCutTobWords
Definition gFEXSim.h:105
std::vector< uint32_t > m_gMETComponentsRmsTobWords
Definition gFEXSim.h:103
virtual StatusCode initialize() override
Definition gFEXSim.cxx:45
std::vector< uint32_t > m_gRhoTobWords
Definition gFEXSim.h:87
gFEXSim(const std::string &type, const std::string &name, const IInterface *parent)
Constructors.
Definition gFEXSim.cxx:21
virtual void execute() override
Definition gFEXSim.cxx:55
std::vector< uint32_t > m_gJetTobWords
Definition gFEXSim.h:91
virtual std::vector< uint32_t > getgRhoTOBs() const override
Definition gFEXSim.cxx:344
ToolHandle< IgFEXJetAlgo > m_gFEXJetAlgoTool
Definition gFEXSim.h:113
ToolHandle< IgFEXaltMetAlgo > m_gFEXaltMetAlgoTool
Definition gFEXSim.h:117
std::vector< uint32_t > m_gMETComponentsNoiseCutTobWords
Definition gFEXSim.h:101
virtual ~gFEXSim()
Destructor.
Definition gFEXSim.cxx:42
virtual std::vector< int32_t > getgScalarEJwojTOBs() const override
Definition gFEXSim.cxx:359
virtual std::vector< uint32_t > getgMETComponentsNoiseCutTOBs() const override
Definition gFEXSim.cxx:379
std::vector< uint32_t > m_gBlockTobWords
Definition gFEXSim.h:89
virtual bool isValid() override final
Can the handle be successfully dereferenced?
virtual const std::string & key() const override final
Return the StoreGate ID for the referenced object.
StatusCode record(std::unique_ptr< T > data)
Record a const object to the store.
eFexTowerBuilder creates xAOD::eFexTowerContainer from supercells (LATOME) and triggerTowers (TREX) i...
std::array< std::array< int, 8 >, 32 > gTowersForward
std::array< std::array< int, 12 >, 32 > gTowersCentral
std::array< std::array< int, 12 >, 32 > gTowersType
Definition IgFEXFPGA.h:25
std::array< std::array< int, 40 >, 32 > gTowersIDs
Definition IgFEXSim.h:20