ATLAS Offline Software
Loading...
Searching...
No Matches
jFexInputProvider.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#include <math.h>
6
7#include "jFexInputProvider.h"
13
14#include "GaudiKernel/PhysicalConstants.h"
15
16using namespace std;
17using namespace LVL1;
18
19
20// jFex to L1Topo conversion factors
21const int jFexInputProvider::m_Et_conversion = 2; // 200 MeV to 100 MeV
22const double jFexInputProvider::m_sumEt_conversion = 0.01; // 1 MeV to 100 MeV
23const double jFexInputProvider::m_gXE_conversion = 0.01; // 1 MeV to 100 MeV
24const int jFexInputProvider::m_phi_conversion = 2; // 10 x phi to 20 x phi
25const int jFexInputProvider::m_eta_conversion = 4; // 10 x eta to 40 x eta
26
27const double jFexInputProvider::m_EtDouble_conversion = 0.1; // 100 MeV to GeV
28const double jFexInputProvider::m_sumEtDouble_conversion = 0.1; // 100 MeV to GeV
29const double jFexInputProvider::m_phiDouble_conversion = 0.05; // 20 x phi to phi
30const double jFexInputProvider::m_etaDouble_conversion = 0.025; // 40 x eta to eta
31
32
33jFexInputProvider::jFexInputProvider(const std::string& type, const std::string& name,
34 const IInterface* parent) :
35 base_class(type, name, parent)
36{
37 declareInterface<LVL1::IInputTOBConverter>( this );
38}
39
42
43StatusCode
45
53 if (! m_gXEJWOJ_EDMKey.empty() ) {
54 renounce(m_gXEJWOJ_EDMKey); //make this optional, in case no gFEX inputs are available (running without gFEX Sim or bytestream decoding)
55 }
56
57
58 if (!m_monTool.empty()) ATH_CHECK(m_monTool.retrieve());
59
60 return StatusCode::SUCCESS;
61}
62
63StatusCode
65 if (m_jEM_EDMKey.empty()) {
66 ATH_MSG_DEBUG("jFex EM input disabled, skip filling");
67 return StatusCode::SUCCESS;
68 }
70 ATH_CHECK(jEM_EDM.isValid());
71
72 for(const xAOD::jFexFwdElRoI* jFexRoI : * jEM_EDM) {
73
74 ATH_MSG_DEBUG( "EDM jFex Em Number: "
75 << +jFexRoI->jFexNumber() // returns an 8 bit unsigned integer referring to the jFEX number
76 << " et: "
77 << jFexRoI->et() // returns the et value of the jet in MeV unit
78 << " tobEt: "
79 << jFexRoI->tobEt() // returns the et value of the jet in units of 200 MeV
80 << " globalEta: "
81 << jFexRoI->globalEta() // returns simplified global eta in units of 0.1 (fcal straightened out, not suitable for use in L1TopoSim)
82 << " globalPhi: "
83 << jFexRoI->globalPhi() // returns simplified global phi in units of 0.1 (fcal straightened out, not suitable for use in L1TopoSim)
84 << " tobEMIso: "
85 << +jFexRoI->tobEMIso() // returns isolation bits
86 << " tobEMf1: "
87 << +jFexRoI->tobEMf1() // returns isolation bits
88 << " tobEMf2: "
89 << +jFexRoI->tobEMf2() // returns isolation bits
90 );
91
92 unsigned int EtTopo = jFexRoI->tobEt()*m_Et_conversion;
93 unsigned int phiTopo = TSU::toTopoPhi(jFexRoI->phi());
94 int etaTopo = TSU::toTopoEta(jFexRoI->eta());
95 unsigned int isolation = jFexRoI->tobEMIso();
96 unsigned int frac1 = jFexRoI->tobEMf2();
97 unsigned int frac2 = jFexRoI->tobEMf1();
98
99 // Avoid the events with 0 Et (events below threshold)
100 if (EtTopo==0) continue;
101
102 TCS::jEmTOB jem( EtTopo, etaTopo, phiTopo );
103 jem.setEtDouble( static_cast<double>(EtTopo*m_EtDouble_conversion) );
104 jem.setEtaDouble( static_cast<double>(etaTopo*m_etaDouble_conversion) );
105 jem.setPhiDouble( static_cast<double>(phiTopo*m_phiDouble_conversion) );
106 jem.setIsolation( isolation );
107 jem.setFrac1( frac1 );
108 jem.setFrac2( frac2 );
109
110 inputEvent.addjEm( jem );
111
112 auto mon_h_jEmPt = Monitored::Scalar("jEmTOBPt", jem.EtDouble());
113 auto mon_h_jEmIsolation = Monitored::Scalar("jEmTOBIsolation", jem.isolation());
114 auto mon_h_jEmFrac1 = Monitored::Scalar("jEmTOBFrac1", jem.frac1());
115 auto mon_h_jEmFrac2 = Monitored::Scalar("jEmTOBFrac2", jem.frac2());
116 auto mon_h_jEmPhi = Monitored::Scalar("jEmTOBPhi", jem.phi());
117 auto mon_h_jEmEta = Monitored::Scalar("jEmTOBEta", jem.eta());
118 Monitored::Group(m_monTool, mon_h_jEmPt, mon_h_jEmIsolation, mon_h_jEmFrac1, mon_h_jEmFrac2, mon_h_jEmPhi, mon_h_jEmEta);
119 }
120
121 return StatusCode::SUCCESS;
122}
123
124
125StatusCode
127 if (m_jTau_EDMKey.empty()) {
128 ATH_MSG_DEBUG("jFex Tau input disabled, skip filling");
129 return StatusCode::SUCCESS;
130 }
132 ATH_CHECK(jTau_EDM.isValid());
133
134 for(const xAOD::jFexTauRoI* jFexRoI : * jTau_EDM) {
135
136 ATH_MSG_DEBUG( "EDM jFex Tau Number: "
137 << +jFexRoI->jFexNumber() // returns an 8 bit unsigned integer referring to the jFEX number
138 << " et: "
139 << jFexRoI->et() // returns the et value of the jet in MeV unit
140 << " tobEt: "
141 << jFexRoI->tobEt() // returns the et value of the jet in units of 200 MeV
142 << " globalEta: "
143 << jFexRoI->globalEta() // returns simplified global eta in units of 0.1 (fcal straightened out, not suitable for use in L1TopoSim)
144 << " globalPhi: "
145 << jFexRoI->globalPhi() // returns simplified global phi in units of 0.1 (fcal straightened out, not suitable for use in L1TopoSim)
146 << " isolation: "
147 << jFexRoI->tobIso() // returns isolation value in units of 200 MeV
148 );
149
150 unsigned int EtTopo = jFexRoI->tobEt()*m_Et_conversion;
151 unsigned int phiTopo = TSU::toTopoPhi(jFexRoI->phi());
152 int etaTopo = TSU::toTopoEta(jFexRoI->eta());
153 unsigned int isolation = jFexRoI->tobIso()*m_Et_conversion;
154
155 // Avoid the events with 0 Et (events below threshold)
156 if (EtTopo==0) continue;
157
158 TCS::jTauTOB jtau( EtTopo, etaTopo, phiTopo );
159 jtau.setEtDouble( static_cast<double>(EtTopo*m_EtDouble_conversion) );
160 jtau.setEtaDouble( static_cast<double>(etaTopo*m_etaDouble_conversion) );
161 jtau.setPhiDouble( static_cast<double>(phiTopo*m_phiDouble_conversion) );
162 jtau.setEtIso( isolation );
163
164 inputEvent.addjTau( jtau );
165 inputEvent.addcTau( jtau );
166
167 auto mon_h_jTauPt = Monitored::Scalar("jTauTOBPt", jtau.EtDouble());
168 auto mon_h_jTauIsolation = Monitored::Scalar("jTauTOBIsolation", jtau.EtIso()*m_EtDouble_conversion);
169 auto mon_h_jTauPhi = Monitored::Scalar("jTauTOBPhi", jtau.phi());
170 auto mon_h_jTauEta = Monitored::Scalar("jTauTOBEta", jtau.eta());
171 Monitored::Group(m_monTool, mon_h_jTauPt, mon_h_jTauIsolation, mon_h_jTauPhi, mon_h_jTauEta);
172 }
173
174 return StatusCode::SUCCESS;
175}
176
177
178StatusCode
180 if (m_jLJet_EDMKey.empty()) {
181 ATH_MSG_DEBUG("jFex LJet input disabled, skip filling");
182 return StatusCode::SUCCESS;
183 }
185 ATH_CHECK(jLJet_EDM.isValid());
186
187 for(const xAOD::jFexLRJetRoI* jFexRoI : * jLJet_EDM) {
188
189 ATH_MSG_DEBUG( "EDM jFex LJet Number: "
190 << jFexRoI->jFexNumber() // returns an 8 bit unsigned integer referring to the jFEX number
191 << " et: "
192 << jFexRoI->et() // returns the et value of the jet in MeV
193 << " tobEt: "
194 << jFexRoI->tobEt() // returns the et value of the jet in units of 200 MeV
195 << " globalEta: "
196 << jFexRoI->globalEta() // returns simplified global eta in units of 0.1 (fcal straightened out, not suitable for use in L1TopoSim)
197 << " globalPhi: "
198 << jFexRoI->globalPhi() // returns simplified global phi in units of 0.1 (fcal straightened out, not suitable for use in L1TopoSim)
199 );
200
201 unsigned int EtTopo = jFexRoI->tobEt()*m_Et_conversion;
202 unsigned int phiTopo = TSU::toTopoPhi(jFexRoI->phi());
203 int etaTopo = TSU::toTopoEta(jFexRoI->eta());
204
205 // Avoid the events with 0 Et (events below threshold)
206 if (EtTopo==0) continue;
207
208 TCS::jLJetTOB jet( EtTopo, etaTopo, phiTopo );
209 jet.setEtDouble( static_cast<double>(EtTopo*m_EtDouble_conversion) );
210 jet.setEtaDouble( static_cast<double>(etaTopo*m_etaDouble_conversion) );
211 jet.setPhiDouble( static_cast<double>(phiTopo*m_phiDouble_conversion) );
212
213 inputEvent.addjLJet( jet );
214
215 auto mon_h_jLJetPt = Monitored::Scalar("jLJetTOBPt", jet.EtDouble());
216 auto mon_h_jLJetPhi = Monitored::Scalar("jLJetTOBPhi", jet.phi());
217 auto mon_h_jLJetEta = Monitored::Scalar("jLJetTOBEta", jet.eta());
218 Monitored::Group(m_monTool, mon_h_jLJetPt, mon_h_jLJetPhi, mon_h_jLJetEta);
219 }
220
221 return StatusCode::SUCCESS;
222}
223
224
225StatusCode
227 if (m_jJet_EDMKey.empty()) {
228 ATH_MSG_DEBUG("jFex Jet input disabled, skip filling");
229 return StatusCode::SUCCESS;
230 }
232 ATH_CHECK(jJet_EDM.isValid());
233
234 for(const xAOD::jFexSRJetRoI* jFexRoI : * jJet_EDM){
235
236 ATH_MSG_DEBUG( "EDM jFex Jet Number: "
237 << +jFexRoI->jFexNumber() // returns an 8 bit unsigned integer referring to the jFEX number
238 << " et: "
239 << jFexRoI->et() // returns the et value of the jet in MeV
240 << " tobEt: "
241 << jFexRoI->tobEt() // returns the et value of the jet in units of 200 MeV
242 << " globalEta: "
243 << jFexRoI->globalEta() // returns simplified global eta in units of 0.1 (fcal straightened out, not suitable for use in L1TopoSim)
244 << " globalPhi: "
245 << jFexRoI->globalPhi() // returns simplified global phi in units of 0.1 (fcal straightened out, not suitable for use in L1TopoSim)
246 );
247
248 unsigned int EtTopo = jFexRoI->tobEt()*m_Et_conversion;
249 unsigned int phiTopo = TSU::toTopoPhi(jFexRoI->phi());
250 int etaTopo = TSU::toTopoEta(jFexRoI->eta());
251
252 // Avoid the events with 0 Et (events below threshold)
253 if (EtTopo==0) continue;
254
255 TCS::jJetTOB jet( EtTopo, etaTopo, phiTopo );
256 jet.setEtDouble( static_cast<double>(EtTopo*m_EtDouble_conversion) );
257 jet.setEtaDouble( static_cast<double>(etaTopo*m_etaDouble_conversion) );
258 jet.setPhiDouble( static_cast<double>(phiTopo*m_phiDouble_conversion) );
259
260 inputEvent.addjJet( jet );
261
262 auto mon_h_jJetPt = Monitored::Scalar("jJetTOBPt", jet.EtDouble());
263 auto mon_h_jJetPhi = Monitored::Scalar("jJetTOBPhi", jet.phi());
264 auto mon_h_jJetEta = Monitored::Scalar("jJetTOBEta", jet.eta());
265 Monitored::Group(m_monTool, mon_h_jJetPt, mon_h_jJetPhi, mon_h_jJetEta);
266
267 }
268
269 return StatusCode::SUCCESS;
270}
271
272
273StatusCode
275
276 if (m_jXE_EDMKey.empty()) {
277 ATH_MSG_DEBUG("jFex XE input disabled, skip filling");
278 return StatusCode::SUCCESS;
279 }
280
282 ATH_CHECK(jXE_EDM.isValid());
283
284 int global_ExTopo = 0;
285 int global_EyTopo = 0;
286 int central_ExTopo = 0;
287 int central_EyTopo = 0;
288
289 for(const xAOD::jFexMETRoI* jFexRoI : *jXE_EDM){
290
291 // Get the XE components and convert to 100 MeV units
292 int ExTopo = jFexRoI->tobEx()*m_Et_conversion;
293 int EyTopo = jFexRoI->tobEy()*m_Et_conversion;
294 int jFexNumber = jFexRoI->jFexNumber();
295 int fpgaNumber = jFexRoI->fpgaNumber();
296
297 int hemisphere = fpgaNumber == 0 ? -1 : 1; //Note: flipped to produce the right sign
298
299 ExTopo = hemisphere * ExTopo;
300 EyTopo = hemisphere * EyTopo;
301
302 global_ExTopo += ExTopo;
303 global_EyTopo += EyTopo;
304
305 // jXEC
306 if( jFexNumber!=0 && jFexNumber!=5 ) {
307 central_ExTopo += ExTopo;
308 central_EyTopo += EyTopo;
309 }
310
311 ATH_MSG_DEBUG( "EDM jFex XE Number: "
312 << jFexNumber
313 << " FPGA Number: "
314 << fpgaNumber
315 << " Ex: "
316 << ExTopo
317 << " Ey: "
318 << EyTopo
319 );
320 }
321
322 long long global_ExTopoLong = static_cast<long long>(global_ExTopo);
323 long long global_EyTopoLong = static_cast<long long>(global_EyTopo);
324 long long central_ExTopoLong = static_cast<long long>(central_ExTopo);
325 long long central_EyTopoLong = static_cast<long long>(central_EyTopo);
326
327 unsigned long long Et2Topo = global_ExTopoLong*global_ExTopoLong + global_EyTopoLong*global_EyTopoLong;
328 unsigned long long EtTopo = std::sqrt( Et2Topo );
329 unsigned long long Et2Topo_central = central_ExTopoLong*central_ExTopoLong + central_EyTopoLong*central_EyTopoLong;
330 unsigned long long EtTopo_central = std::sqrt( Et2Topo_central );
331
332 TCS::jXETOB jxe( global_ExTopo, global_EyTopo, EtTopo, TCS::JXE );
333 TCS::jXETOB jxec( central_ExTopo, central_EyTopo, EtTopo_central, TCS::JXEC );
334
335 jxe.setExDouble( static_cast<double>(global_ExTopo*m_EtDouble_conversion) );
336 jxe.setEyDouble( static_cast<double>(global_EyTopo*m_EtDouble_conversion) );
337 jxe.setEtDouble( static_cast<double>(EtTopo*m_EtDouble_conversion) );
338 jxe.setEt2( Et2Topo );
339 jxec.setExDouble( static_cast<double>(central_ExTopo*m_EtDouble_conversion) );
340 jxec.setEyDouble( static_cast<double>(central_EyTopo*m_EtDouble_conversion) );
341 jxec.setEtDouble( static_cast<double>(EtTopo_central*m_EtDouble_conversion) );
342 jxec.setEt2( Et2Topo_central );
343
344 inputEvent.setjXE( jxe );
345 inputEvent.setjXEC( jxec );
346 auto mon_h_jXE_Pt = Monitored::Scalar("jXETOBPt", jxe.EtDouble());
347 auto mon_h_jXE_Phi = Monitored::Scalar("jXETOBPhi", atan2(jxe.Ey(),jxe.Ex()));
348 auto mon_h_jXEC_Pt = Monitored::Scalar("jXECTOBPt", jxec.EtDouble());
349 auto mon_h_jXEC_Phi = Monitored::Scalar("jXECTOBPhi", atan2(jxec.Ey(),jxec.Ex()));
350 Monitored::Group(m_monTool, mon_h_jXE_Pt, mon_h_jXE_Phi, mon_h_jXEC_Pt, mon_h_jXEC_Phi);
351
352
353 // create cXE (combined XE) last, so we can simply early-exit gracefully if no gFEX inputs are available
354 // this then leaves the internal cXE at its default (0).
355 if (m_gXEJWOJ_EDMKey.empty()) {
356 ATH_MSG_DEBUG("gFex XE input disabled, skip filling combined XE");
357 return StatusCode::SUCCESS;
358 }
360 if (! gXEJWOJ_EDM.isValid() ) {
361 //gESPRESSO is only active in HI runs and only available from data. If not present simply skip it.
362 ATH_MSG_DEBUG("gFex input is not available, skip filling cXE");
363 return StatusCode::SUCCESS;
364 }
365
366 //re-using quantities from jFEX, obtaining gFEX ones
367 //global_ExTopoLong; //jFEX!
368 //global_EyTopoLong; //jFEX!
369 long long gXE_ExTopoLong{0};
370 long long gXE_EyTopoLong{0};
371
372 for(const xAOD::gFexGlobalRoI* gFexRoI : * gXEJWOJ_EDM) {
373
374 auto globalType = gFexRoI->globalType();
375 if ( globalType != 2 ) { continue; } // 2 = MET components (METx, METy)
376
377 ATH_MSG_DEBUG( "EDM gFex XEJWOJ type: "
378 << gFexRoI->globalType()
379 << " Ex: "
380 << gFexRoI->METquantityOne() // returns the Ex component in MeV
381 << " Ey: "
382 << gFexRoI->METquantityTwo() // returns the Ey component in MeV
383 );
384
385 int ExTopo = gFexRoI->METquantityOne()*m_gXE_conversion;
386 int EyTopo = gFexRoI->METquantityTwo()*m_gXE_conversion;
387
388 gXE_ExTopoLong = static_cast<unsigned long long>(ExTopo);
389 gXE_EyTopoLong = static_cast<unsigned long long>(EyTopo);
390
391 break;
392 }
393
394 //construct cXE
395 //note: FW specification interprets weights at 10 bit unsigned fixed point, 2 integer, 8 fractional bits
396 unsigned jWeight = 0.55 * pow(2,8); //TODO: read those from menu
397 unsigned gWeight = 0.45 * pow(2,8);
398 long long cXE_x = (jWeight * global_ExTopoLong + gWeight * gXE_ExTopoLong) >> 8;
399 long long cXE_y = (jWeight * global_EyTopoLong + gWeight * gXE_EyTopoLong) >> 8;
400
401 unsigned long long cXE_mag2 = cXE_x*cXE_x + cXE_y*cXE_y;
402 unsigned long long cXE_mag = std::sqrt( cXE_mag2 );
403
404 TCS::jXETOB cxe_tob( cXE_x, cXE_y, cXE_mag, TCS::CXE );
405 inputEvent.setcXE( cxe_tob );
406
407 //optional: add monitoring of cXE values as done above
408
409 return StatusCode::SUCCESS;
410}
411
412
413StatusCode
415
416 if (m_jTE_EDMKey.empty()) {
417 ATH_MSG_DEBUG("jFex TE input disabled, skip filling");
418 return StatusCode::SUCCESS;
419 }
420
422 ATH_CHECK(jTE_EDM.isValid());
423
424 int topoTE = 0;
425 int topoTEsideA = 0;
426 int topoTEsideC = 0;
427
428 bool topoTE_sat = false;
429 // jTE variations include jTEC, jTEFWD, jTEFWDA, jTEFWDC
430 // These quantities are defined according to the jFex module number
431 // FWDA = 5, FWDC = 0, C = 1,2,3,4
432 int topoTEC = 0;
433 int topoTEFWD = 0;
434 int topoTEFWDA = 0;
435 int topoTEFWDC = 0;
436
437
438 for(const xAOD::jFexSumETRoI* jFexRoI : *jTE_EDM){
439
440 // Get the TE components (upper and lower) and convert to 100 MeV units
441 int EtLowerTopo = jFexRoI->Et_lower()*m_sumEt_conversion;
442 int EtUpperTopo = jFexRoI->Et_upper()*m_sumEt_conversion;
443 int jFexNumber = jFexRoI->jFexNumber();
444 int fpgaNumber = jFexRoI->fpgaNumber();
445
446 int Sat_lower = jFexRoI->tobSat_lower();
447 int Sat_upper = jFexRoI->tobSat_upper();
448
449 ATH_MSG_DEBUG( "EDM jFex TE Number: "
450 << jFexNumber
451 << " FPGA Number: "
452 << fpgaNumber
453 << " Et_lower: "
454 << EtLowerTopo
455 << " Et_upper: "
456 << EtUpperTopo
457 << " Sat_lower: "
458 << Sat_lower
459 << " Sat_upper: "
460 << Sat_upper
461 );
462
463 // jTE
464 topoTE += EtLowerTopo;
465 topoTE += EtUpperTopo;
466 topoTE_sat |= Sat_lower;
467 topoTE_sat |= Sat_upper;
468
469 // jTESideA
470 if( jFexNumber<3 ){
471 topoTEsideA += EtLowerTopo;
472 topoTEsideA += EtUpperTopo;
473 }
474 // jTESideC
475 else{
476 topoTEsideC += EtLowerTopo;
477 topoTEsideC += EtUpperTopo;
478 }
479
480
481 // jTEC
482 topoTEC += EtLowerTopo;
483 if( jFexNumber!=0 && jFexNumber!=5 )
484 {
485 topoTEC += EtUpperTopo;
486 }
487
488 // jTEFWD
489 if( jFexNumber==0 || jFexNumber==5 )
490 {
491 topoTEFWD += EtUpperTopo;
492 }
493
494 // jTEFWDA
495 if( jFexNumber==5 )
496 {
497 topoTEFWDA += EtUpperTopo;
498 }
499
500 // jTEFWDC
501 if( jFexNumber==0 )
502 {
503 topoTEFWDC += EtUpperTopo;
504 }
505 }
506
507 TCS::jTETOB jte( static_cast<unsigned int>(topoTE), TCS::JTE );
508 TCS::jTETOB jtec( static_cast<unsigned int>(topoTEC), TCS::JTEC );
509 TCS::jTETOB jtefwd( static_cast<unsigned int>(topoTEFWD), TCS::JTEFWD );
510 TCS::jTETOB jtefwda( static_cast<unsigned int>(topoTEFWDA), TCS::JTEFWDA );
511 TCS::jTETOB jtefwdc( static_cast<unsigned int>(topoTEFWDC), TCS::JTEFWDC );
512
513 jte.setSaturationFlag( static_cast<double>(topoTE_sat) );
514 jte.setSumEtDouble( static_cast<double>(topoTE*m_sumEtDouble_conversion) );
515 jtec.setSumEtDouble( static_cast<double>(topoTEC*m_sumEtDouble_conversion) );
516 jtefwd.setSumEtDouble( static_cast<double>(topoTEFWD*m_sumEtDouble_conversion) );
517 jtefwda.setSumEtDouble( static_cast<double>(topoTEFWDA*m_sumEtDouble_conversion) );
518 jtefwdc.setSumEtDouble( static_cast<double>(topoTEFWDC*m_sumEtDouble_conversion) );
519
520 // Set the hemisphere values
521 jte.setSumEtSideA( topoTEsideA );
522 jte.setSumEtSideC( topoTEsideC );
523 jte.setSumEtDoubleSideA( static_cast<double>(topoTEsideA*m_sumEtDouble_conversion) );
524 jte.setSumEtDoubleSideC( static_cast<double>(topoTEsideC*m_sumEtDouble_conversion) );
525
526 inputEvent.setjTE( jte );
527 inputEvent.setjTEC( jtec );
528 inputEvent.setjTEFWD( jtefwd );
529 inputEvent.setjTEFWDA( jtefwda );
530 inputEvent.setjTEFWDC( jtefwdc );
531
532 auto mon_h_jTE_saturation = Monitored::Scalar("jTETOBsaturation", jte.saturationFlag());
533 auto mon_h_jTE_sumEt = Monitored::Scalar("jTETOBsumEt", jte.sumEtDouble());
534 auto mon_h_jTEC_sumEt = Monitored::Scalar("jTECTOBsumEt", jtec.sumEtDouble());
535 auto mon_h_jTEFWD_sumEt = Monitored::Scalar("jTEFWDTOBsumEt", jtefwd.sumEtDouble());
536 auto mon_h_jTEFWDA_sumEt = Monitored::Scalar("jTEFWDATOBsumEt", jtefwda.sumEtDouble());
537 auto mon_h_jTEFWDC_sumEt = Monitored::Scalar("jTEFWDCTOBsumEt", jtefwdc.sumEtDouble());
538 Monitored::Group(m_monTool, mon_h_jTE_saturation, mon_h_jTE_sumEt, mon_h_jTEC_sumEt, mon_h_jTEFWD_sumEt, mon_h_jTEFWDA_sumEt, mon_h_jTEFWDC_sumEt);
539
540 return StatusCode::SUCCESS;
541}
542
543
544StatusCode
546 ATH_CHECK(fillEM(inputEvent));
547 ATH_CHECK(fillTau(inputEvent));
548 ATH_CHECK(fillSRJet(inputEvent));
549 ATH_CHECK(fillLRJet(inputEvent));
550 ATH_CHECK(fillXE(inputEvent));
551 ATH_CHECK(fillTE(inputEvent));
552 return StatusCode::SUCCESS;
553}
#define ATH_CHECK
Evaluate an expression and check for errors.
#define ATH_MSG_DEBUG(x)
#define CHECK(...)
Evaluate an expression and check for errors.
constexpr int pow(int base, int exp) noexcept
static const double m_gXE_conversion
SG::ReadHandleKey< xAOD::gFexGlobalRoIContainer > m_gXEJWOJ_EDMKey
StatusCode fillEM(TCS::TopoInputEvent &inputEvent) const
static const double m_sumEt_conversion
static const double m_phiDouble_conversion
SG::ReadHandleKey< xAOD::jFexSumETRoIContainer > m_jTE_EDMKey
StatusCode fillTau(TCS::TopoInputEvent &inputEvent) const
SG::ReadHandleKey< xAOD::jFexFwdElRoIContainer > m_jEM_EDMKey
SG::ReadHandleKey< xAOD::jFexSRJetRoIContainer > m_jJet_EDMKey
StatusCode fillXE(TCS::TopoInputEvent &inputEvent) const
virtual StatusCode initialize() override final
SG::ReadHandleKey< xAOD::jFexMETRoIContainer > m_jXE_EDMKey
static const int m_Et_conversion
jFexInputProvider(const std::string &type, const std::string &name, const IInterface *parent)
static const double m_sumEtDouble_conversion
static const double m_etaDouble_conversion
StatusCode fillLRJet(TCS::TopoInputEvent &inputEvent) const
StatusCode fillSRJet(TCS::TopoInputEvent &inputEvent) const
virtual StatusCode fillTopoInputEvent(TCS::TopoInputEvent &) const override final
SG::ReadHandleKey< xAOD::jFexLRJetRoIContainer > m_jLJet_EDMKey
ToolHandle< GenericMonitoringTool > m_monTool
StatusCode fillTE(TCS::TopoInputEvent &inputEvent) const
SG::ReadHandleKey< xAOD::jFexTauRoIContainer > m_jTau_EDMKey
static const double m_EtDouble_conversion
static const int m_phi_conversion
static const int m_eta_conversion
Group of local monitoring quantities and retain correlation when filling histograms
Declare a monitored scalar variable.
virtual bool isValid() override final
Can the handle be successfully dereferenced?
StatusCode addjEm(const jEmTOB &jEm)
StatusCode addjJet(const jJetTOB &jet)
StatusCode addjLJet(const jLJetTOB &jet)
StatusCode setjTEFWDC(const jTETOB &jTEFWDC)
StatusCode setjXEC(const jXETOB &jXEC)
StatusCode setcXE(const jXETOB &cXE)
StatusCode addjTau(const jTauTOB &tau)
StatusCode addcTau(const eTauTOB &eTau)
StatusCode setjTE(const jTETOB &jTE)
StatusCode setjTEFWD(const jTETOB &jTEFWD)
StatusCode setjXE(const jXETOB &jXE)
StatusCode setjTEC(const jTETOB &jTEC)
StatusCode setjTEFWDA(const jTETOB &jTEFWDA)
unsigned int frac1() const
Definition jEmTOB.h:41
void setEtaDouble(double eta)
Definition jEmTOB.h:50
void setFrac2(unsigned int frac2)
Definition jEmTOB.h:55
void setFrac1(unsigned int frac1)
Definition jEmTOB.h:54
unsigned phi() const
Definition jEmTOB.h:34
void setEtDouble(double et)
Definition jEmTOB.h:49
unsigned int frac2() const
Definition jEmTOB.h:42
void setPhiDouble(double phi)
Definition jEmTOB.h:51
int eta() const
Definition jEmTOB.h:33
void setIsolation(unsigned int isolation)
Definition jEmTOB.h:53
unsigned int isolation() const
Definition jEmTOB.h:40
double EtDouble() const
Definition jEmTOB.h:36
void setSumEtSideC(unsigned int sumEt)
Definition jTETOB.h:45
void setSumEtSideA(unsigned int sumEt)
Definition jTETOB.h:44
void setSumEtDoubleSideA(double sumEt)
Definition jTETOB.h:48
void setSaturationFlag(bool saturationFlag)
Definition jTETOB.h:51
void setSumEtDoubleSideC(double sumEt)
Definition jTETOB.h:49
double sumEtDouble() const
Definition jTETOB.h:34
void setSumEtDouble(double sumEt)
Definition jTETOB.h:47
bool saturationFlag() const
Definition jTETOB.h:38
int eta() const
Definition jTauTOB.h:33
unsigned int EtIso() const
Definition jTauTOB.h:40
void setEtDouble(double et)
Definition jTauTOB.h:47
void setPhiDouble(double phi)
Definition jTauTOB.h:49
void setEtIso(unsigned int etIso)
Definition jTauTOB.h:51
unsigned phi() const
Definition jTauTOB.h:34
void setEtaDouble(double eta)
Definition jTauTOB.h:48
double EtDouble() const
Definition jTauTOB.h:36
void setEyDouble(double ey)
Definition jXETOB.h:46
double EtDouble() const
Definition jXETOB.h:37
int Ex() const
Definition jXETOB.h:30
void setEt2(unsigned long long et2)
Definition jXETOB.h:43
int Ey() const
Definition jXETOB.h:31
void setExDouble(double ex)
Definition jXETOB.h:45
void setEtDouble(double et)
Definition jXETOB.h:47
eFexTowerBuilder creates xAOD::eFexTowerContainer from supercells (LATOME) and triggerTowers (TREX) i...
int toTopoEta(float eta)
unsigned int toTopoPhi(float phi)
STL namespace.
jFexFwdElRoI_v1 jFexFwdElRoI
Define the latest version of the jFexFwdElJetRoI class.
jFexSumETRoI_v1 jFexSumETRoI
Define the latest version of the jFexSumETJetRoI class.
gFexGlobalRoI_v1 gFexGlobalRoI
Define the latest version of the eFexEMRoI class.
jFexLRJetRoI_v1 jFexLRJetRoI
Define the latest version of the jFexLRJetRoI class.
jFexTauRoI_v1 jFexTauRoI
Define the latest version of the jFexSRJetRoI class.
Definition jFexTauRoI.h:13
jFexSRJetRoI_v1 jFexSRJetRoI
Define the latest version of the jFexSRJetRoI class.
jFexMETRoI_v1 jFexMETRoI
Define the latest version of the jFexMETRoI class.
Definition jFexMETRoI.h:13