ATLAS Offline Software
L1CaloL1TopoMonitorAlgorithm.cxx
Go to the documentation of this file.
1 /*
2  Copyright (C) 2002-2022 CERN for the benefit of the ATLAS collaboration
3 */
4 
5 #include <map>
6 #include <utility>
7 #include <set>
8 #include <tuple>
9 #include <algorithm>
10 #include <vector>
11 #include <iomanip>
12 #include <sstream>
13 
15 
16 #include "L1TopoRDO/BlockTypes.h"
17 #include "L1TopoRDO/Helpers.h"
18 #include "L1TopoRDO/Fibre.h"
19 #include "L1TopoRDO/Status.h"
21 
25 
27  ISvcLocator* pSvcLocator )
28  : AthMonitorAlgorithm(name,pSvcLocator)
29 {
30 }
31 
33 
34  ATH_MSG_DEBUG("L1CaloL1TopoMonitorAlgorith::initialize");
35  ATH_MSG_DEBUG("Package Name "<< m_packageName);
36 
37  // we initialise all the containers that we need
39  ATH_CHECK(m_cmxJetTobLocation.initialize());
40  ATH_CHECK(m_cmxCpTobLocation.initialize());
41  ATH_CHECK(m_l1TopoKey.initialize());
42 
44 }
45 
46 StatusCode L1CaloL1TopoMonitorAlgorithm::fillHistograms( const EventContext& ctx ) const {
47 
48  ATH_MSG_DEBUG("L1CaloL1TopoMonitorAlgorithm::fillHistograms");
49  ATH_MSG_DEBUG("m_ctpRdoKey=" << m_ctpRdoKey);
50  ATH_MSG_DEBUG("m_cmxCpTobLocation=" << m_cmxCpTobLocation);
51  ATH_MSG_DEBUG("m_cmxJetTobLocation=" << m_cmxJetTobLocation);
52  ATH_MSG_DEBUG("m_l1TopoKey=" << m_l1TopoKey);
53 
54  typedef std::tuple<int,int,int,int,int,int> TobKey;
55  std::set<TobKey> cmxKeys[TOB_TYPES],topoKeys[TOB_TYPES],
56  keyDiff[TOB_TYPES],keyIntersect[TOB_TYPES];
57 
58  const int LUMI_BLOCK=GetEventInfo(ctx)->lumiBlock();
59  const int NFPGA=4;
60  const int MAXTOBS=20;
61 
62  // monitored variables
63  std::vector<int> errors;
64  std::vector<std::reference_wrapper<Monitored::IMonitoredVariable>> variables;
65 
66  // 1D
67  auto run = Monitored::Scalar<int>("run",GetEventInfo(ctx)->runNumber());
68  auto nJetTobs = Monitored::Scalar<int>("nJetTobs",0);
69  auto nTauTobs = Monitored::Scalar<int>("nTauTobs",0);
70  auto nEMTobs = Monitored::Scalar<int>("nEMTobs",0);
71  auto nMuonTobs = Monitored::Scalar<int>("nMuonTobs",0);
72 
73  variables.push_back(run);
74  variables.push_back(nJetTobs);
75  variables.push_back(nTauTobs);
76  variables.push_back(nEMTobs);
77  variables.push_back(nMuonTobs);
78 
79  auto jetTobsEnergyL = Monitored::Scalar<int>("jetTobsEnergyL",0);
80  auto wFPGA = Monitored::Scalar<float>("wFPGA",1.0/NFPGA);
81  auto lbErrors = Monitored::Scalar<int>("lbErrors",0);
82  auto sumErrors = Monitored::Collection("sumErrors",errors,[](const auto &_e){return _e;});
83 
84  // 2D Hitmaps
85  auto etaJetSTobs_match = Monitored::Scalar<double>("etaJetSTobs_match", 0.);
86  auto phiJetSTobs_match = Monitored::Scalar<double>("phiJetSTobs_match", 0.);
87  auto etaJetLTobs_match = Monitored::Scalar<double>("etaJetLTobs_match", 0.);
88  auto phiJetLTobs_match = Monitored::Scalar<double>("phiJetLTobs_match", 0.);
89  auto etaTauTobs_match = Monitored::Scalar<double>("etaTauTobs_match", 0.);
90  auto phiTauTobs_match = Monitored::Scalar<double>("phiTauTobs_match", 0.);
91  auto etaEMTobs_match = Monitored::Scalar<double>("etaEMTobs_match", 0.);
92  auto phiEMTobs_match = Monitored::Scalar<double>("phiEMTobs_match", 0.);
93  auto xJetSTobs_match = Monitored::Scalar<double>("xJetSTobs_match", 0.);
94  auto yJetSTobs_match = Monitored::Scalar<double>("yJetSTobs_match", 0.);
95  auto xJetLTobs_match = Monitored::Scalar<double>("xJetLTobs_match", 0.);
96  auto yJetLTobs_match = Monitored::Scalar<double>("yJetLTobs_match", 0.);
97  auto xTauTobs_match = Monitored::Scalar<double>("xTauTobs_match", 0.);
98  auto yTauTobs_match = Monitored::Scalar<double>("yTauTobs_match", 0.);
99  auto xEMTobs_match = Monitored::Scalar<double>("xEMTobs_match", 0.);
100  auto yEMTobs_match = Monitored::Scalar<double>("yEMTobs_match", 0.);
101 
102  auto etaJetSTobs_mismatch = Monitored::Scalar<double>("etaJetSTobs_mismatch", 0.);
103  auto phiJetSTobs_mismatch = Monitored::Scalar<double>("phiJetSTobs_mismatch", 0.);
104  auto etaJetLTobs_mismatch = Monitored::Scalar<double>("etaJetLTobs_mismatch", 0.);
105  auto phiJetLTobs_mismatch = Monitored::Scalar<double>("phiJetLTobs_mismatch", 0.);
106  auto etaTauTobs_mismatch = Monitored::Scalar<double>("etaTauTobs_mismatch", 0.);
107  auto phiTauTobs_mismatch = Monitored::Scalar<double>("phiTauTobs_mismatch", 0.);
108  auto etaEMTobs_mismatch = Monitored::Scalar<double>("etaEMTobs_mismatch", 0.);
109  auto phiEMTobs_mismatch = Monitored::Scalar<double>("phiEMTobs_mismatch", 0.);
110  auto xJetSTobs_mismatch = Monitored::Scalar<double>("xJetSTobs_mismatch", 0.);
111  auto yJetSTobs_mismatch = Monitored::Scalar<double>("yJetSTobs_mismatch", 0.);
112  auto xJetLTobs_mismatch = Monitored::Scalar<double>("xJetLTobs_mismatch", 0.);
113  auto yJetLTobs_mismatch = Monitored::Scalar<double>("yJetLTobs_mismatch", 0.);
114  auto xTauTobs_mismatch = Monitored::Scalar<double>("xTauTobs_mismatch", 0.);
115  auto yTauTobs_mismatch = Monitored::Scalar<double>("yTauTobs_mismatch", 0.);
116  auto xEMTobs_mismatch = Monitored::Scalar<double>("xEMTobs_mismatch", 0.);
117  auto yEMTobs_mismatch = Monitored::Scalar<double>("yEMTobs_mismatch", 0.);
118 
119  // 2D Topo items vs BC
120  auto item0 = Monitored::Scalar<int>("item0", 0.);
121  auto item1 = Monitored::Scalar<int>("item1", 0.);
122  auto item2 = Monitored::Scalar<int>("item2", 0.);
123  auto item3 = Monitored::Scalar<int>("item3", 0.);
124  auto bc0 = Monitored::Scalar<int>("bc0", 0.);
125  auto bc1 = Monitored::Scalar<int>("bc1", 0.);
126  auto bc2 = Monitored::Scalar<int>("bc2", 0.);
127  auto bc3 = Monitored::Scalar<int>("bc3", 0.);
128 
129  // read all objects needed
130  ATH_MSG_DEBUG("Begin to fetch store gate objects ..");
131  SG::ReadHandle<CTP_RDO> const_ctpRdo(m_ctpRdoKey,ctx);
132  ATH_CHECK(const_ctpRdo.isValid());
134  ATH_CHECK(cmxCpTob.isValid());
136  ATH_CHECK(cmxJetTob.isValid());
138  if (!l1TopoRawData.isValid()) {
139  ATH_MSG_DEBUG ("L1Topo DAQ raw data collection not valid");
140  errors.push_back(static_cast<int>(SummaryErrors::NO_DAQ));
141  lbErrors=LUMI_BLOCK;
142  fill(m_packageName,lbErrors,sumErrors);
143  return StatusCode::SUCCESS;
144  }
145  if (l1TopoRawData->empty()) {
146  ATH_MSG_DEBUG ("L1Topo DAQ raw data collection empty");
147  errors.push_back(static_cast<int>(SummaryErrors::NO_DAQ));
148  lbErrors=LUMI_BLOCK;
149  fill(m_packageName,lbErrors,sumErrors);
150  return StatusCode::SUCCESS;
151  }
152  ATH_MSG_DEBUG("Done fetching from store gate.");
153 
154  // Make a writable copy and Set CTP version number to 4 when reading persistified data
155  std::vector<uint32_t> ctp_data=const_ctpRdo->getDataWords();
156  CTP_RDO ctpRdo(4,std::move(ctp_data));
157  ctpRdo.setL1AcceptBunchPosition(const_ctpRdo->getL1AcceptBunchPosition());
158  ctpRdo.setTurnCounter(const_ctpRdo->getTurnCounter());
159 
160  // Approximate timing test of L1Topo by comparing TIP bits to L1A
161  if (ctpRdo.getCTPVersionNumber()==0) {
162  ATH_MSG_DEBUG("CTP version number not set, skipping CTP test");
163  }
164  else {
166  ctp.setRDO(&ctpRdo);
167  const uint16_t l1aPos = ctpRdo.getL1AcceptBunchPosition();
168  const uint32_t bx=ctp.getBunchCrossings().size();
169  const int dbx=bx/2;
170  if (l1aPos >= bx) {
171  ATH_MSG_DEBUG( "CTP_RDO gave invalid l1aPos." );
172  }
173  else {
174  ATH_MSG_DEBUG( "CTP l1aPos, size : " << l1aPos << ", " << bx );
175  if ( bx>=3 && l1aPos>0) {
176  for (int bc=-dbx; bc<=dbx; ++bc) {
177  const CTP_BC& ctp_bc = ctp.getBunchCrossings().at(l1aPos+bc);
178  std::bitset<512> tip = ctp_bc.getTIP();
179  ATH_MSG_DEBUG( "got CTP TIP bits: " << tip.to_string() );
180  const unsigned int topoTipStart(384);
181  const unsigned int nTopoCTPOutputs(128);
182  for (unsigned int item=0; item<nTopoCTPOutputs;++item) {
183  // Check if algorithms fired
184  if (tip.test(item+topoTipStart)) {
185  if (item/32==0) {item0=item; bc0=bc; fill(m_packageName,item0,bc0);}
186  else if (item/32==1) {item1=item; bc1=bc; fill(m_packageName,item1,bc1);}
187  else if (item/32==2) {item2=item; bc2=bc; fill(m_packageName,item2,bc2);}
188  else if (item/32==3) {item3=item; bc3=bc; fill(m_packageName,item3,bc3);}
189  ATH_MSG_DEBUG(" Fired (item, bc) =" << item << ", " << bc);
190  }
191  }
192  }
193  }
194  }
195  }
196 
197  // Retrieve CMX CP tobs
198  if (cmxCpTob->empty()) {
199  ATH_MSG_DEBUG ("No CMX CP TOBs found");
200  }
201  else {
202  ATH_MSG_DEBUG( "Found CMXCPTobCollection, looping on TOBs ..." );
203  for (const xAOD::CMXCPTob* t : *cmxCpTob) {
204  if (t->energy()) {
205  for (int clone=0;clone<4;++clone) {
206  if (t->cmx()==0)
207  cmxKeys[TAU_TOB].insert(std::make_tuple(t->crate(),t->cpm(),
208  t->chip(),t->location(),
209  t->energy(),clone));
210  else
211  cmxKeys[EM_TOB].insert(std::make_tuple(t->crate(),t->cpm(),
212  t->chip(),t->location(),
213  t->energy(),clone));
214  }
215  }
216  }
217  }
218 
219  // Retrieve CMX jet tobs
220  if (cmxJetTob->empty()) {
221  ATH_MSG_DEBUG ("No CMX jet TOBs found");
222  }
223  else {
224  ATH_MSG_DEBUG( "Found CMXJetTobCollection, looping on TOBs ..." );
225  for (const xAOD::CMXJetTob* t : *cmxJetTob) {
226  for (int clone=0;clone<4;++clone) {
227  if (t->energyLarge())
228  cmxKeys[JETL_TOB].insert(std::make_tuple(t->crate(),t->jem(),
229  t->frame(),t->location(),
230  t->energyLarge(),clone));
231  if (t->energySmall())
232  cmxKeys[JETS_TOB].insert(std::make_tuple(t->crate(),t->jem(),
233  t->frame(),t->location(),
234  t->energySmall(),clone));
235  }
236  }
237  }
238 
239  // analyse and register the L1Topo DAQ TOBs
240  int daqJetTobs=0;
241  int daqTauTobs=0;
242  int daqEMTobs=0;
243  int daqMuonTobs=0;
244  for (const xAOD::L1TopoRawData* rawdata : *l1TopoRawData) {
245  ATH_MSG_DEBUG("Found L1Topo raw DAQ data with source ID "
246  << L1Topo::formatHex8(rawdata->sourceID()));
247  //rdo.setStatusWords(rawdata->statusWords());
248  if (rawdata->errorWord()) {
249  ATH_MSG_INFO("DAQ Converter errors reported: " << rawdata->errorWord());
250  errors.push_back(static_cast<int>(SummaryErrors::DAQ_CONV));
251  }
252  if (rawdata->dataWords().empty()) {
253  ATH_MSG_INFO("L1Topo raw data DAQ payload is empty");
254  errors.push_back(static_cast<int>(SummaryErrors::NO_DAQ));
255  }
256  else {
257  std::vector<L1Topo::L1TopoTOB> daqTobs;
258 
259  // initialise header: beware, this can make a valid-looking header
260  // set version 15, BCN -7, which is unlikely:
261  L1Topo::Header header(0xf, 0, 0, 0, 0, 1, 0x7);
262  int i_fpga=-1;
263  for (auto word : rawdata->dataWords()) {
264  switch (L1Topo::blockType(word)) {
265 
267  {
268  header = L1Topo::Header(word);
269  if (header.payload_crc()!=0) {
270  errors.push_back(static_cast<int>(SummaryErrors::PAYL_CRC));
271  }
272  i_fpga=(((rawdata->sourceID())>>3)&2)+header.fpga();
273  break;
274  }
276  {
277  auto fibreBlock = L1Topo::Fibre(word);
278  break;
279  }
281  {
282  auto status = L1Topo::Status(word);
283  ATH_MSG_WARNING( "fibre overflow: " << status.overflow()
284  << " fibre crc: " << status.crc() );
285  if (status.crc()) {
286  errors.push_back(static_cast<int>(SummaryErrors::F_CRC));
287  }
288  break;
289  }
291  {
292  if (header.bcn_offset()==0){
293  auto tob = L1Topo::L1TopoTOB(word);
294  ATH_MSG_DEBUG(tob);
295  daqTobs.push_back(tob);
296  // not reimplemented yet
297  //auto index = L1Topo::triggerBitIndex(rawdata->sourceID(),tob);
298  for (unsigned int i=0; i<8; ++i){
299  if ((tob.trigger_bits() >>i)&1) {
300  //m_h_l1topo_1d_DAQTriggerBits->Fill(index+i);
301  }
302  if ((tob.overflow_bits()>>i)&1) {
303  //m_h_l1topo_1d_DAQOverflowBits->Fill(index+i);
304  }
305  }
306  }
307  break;
308  }
311  {
312  if (header.bcn_offset()==0) {
313  const int crate = (word >> 28) & 0x1;
314  const int jem = (word >> 24) & 0xF;
315  const int frame = (word >> 21) & 0x7;
316  const int location = (word >> 19) & 0x3;
317  const int energyS = (word >> 10) & 0x1FF;
318  const int energyL = (word & 0x3FF);
319  if (energyL) {
320  topoKeys[JETL_TOB].
321  insert(std::make_tuple(crate,jem,frame,
322  location,energyL,i_fpga));
323  ++daqJetTobs;
324  jetTobsEnergyL=energyL;
325  fill(m_packageName,jetTobsEnergyL,wFPGA);
326  }
327  if (energyS) {
328  topoKeys[JETS_TOB].
329  insert(std::make_tuple(crate,jem,frame,
330  location,energyS,i_fpga));
331  }
332  }
333  break;
334  }
336  {
337  if (header.bcn_offset()==0) {
338  ++daqTauTobs;
339  const int crate = (word >> 26) & 0x3;
340  const int cpm = (word >> 20) & 0xF;
341  const int chip = (word >> 15) & 0xF;
342  const int location = (word >> 13) & 0x3;
343  const int energy = (word & 0xFF);
344  if (energy)
345  topoKeys[TAU_TOB].
346  insert(std::make_tuple(crate,cpm,chip,
347  location,energy,i_fpga));
348  }
349  break;
350  }
352  {
353  if (header.bcn_offset()==0) {
354  ++daqEMTobs;
355  const int crate = (word >> 26) & 0x3;
356  const int cpm = (word >> 20) & 0xF;
357  const int chip = (word >> 15) & 0xF;
358  const int location = (word >> 13) & 0x3;
359  const int energy = (word & 0xFF);
360  if (energy)
361  topoKeys[EM_TOB].
362  insert(std::make_tuple(crate,cpm,chip,
363  location,energy,i_fpga));
364  }
365  break;
366  }
368  {
369  if (header.bcn_offset()==0){
370  ++daqMuonTobs;
371  }
372  break;
373  }
375  {
376  if (header.bcn_offset()==0){
377  }
378  break;
379  }
380  default:
381  {
382  break;
383  }
384 
385  }
386  } // for word
387  } // L1Topo raw data
388  } // L1 Topo collection
389 
390 
391  // look in both directions for CMX and Topo TOBs (mis)matches
392  bool mismatch=false;
393  for (int t=0; t<TOB_TYPES; ++t) {
394  // create set of mismatches
395  set_symmetric_difference(cmxKeys[t].begin(),cmxKeys[t].end(),
396  topoKeys[t].begin(),topoKeys[t].end(),
397  inserter(keyDiff[t],keyDiff[t].begin()));
398  if (keyDiff[t].size()>0) {
399  ATH_MSG_DEBUG("Error: CMX <-> L1Topo TOB mismatches = "
400  << keyDiff[t].size());
401  mismatch=true;
402  }
403  for (auto& tob : keyDiff[t]) {
404  int x,y;
405  double eta,phi;
406  if (t==JETS_TOB || t==JETL_TOB) {
407  jem2Coord(std::get<0>(tob),std::get<1>(tob),
408  std::get<2>(tob),std::get<3>(tob),x,y,eta,phi);
409  if (t==JETS_TOB) {
410  xJetSTobs_mismatch=x; yJetSTobs_mismatch=y;
411  etaJetSTobs_mismatch=eta; phiJetSTobs_mismatch=phi;
412  fill(m_packageName, xJetSTobs_mismatch, yJetSTobs_mismatch,
413  etaJetSTobs_mismatch, phiJetSTobs_mismatch);
414  }
415  else { // JETL_TOB
416  xJetLTobs_mismatch=x; yJetLTobs_mismatch=y;
417  etaJetLTobs_mismatch=eta; phiJetLTobs_mismatch=phi;
418  fill(m_packageName, xJetLTobs_mismatch, yJetLTobs_mismatch,
419  etaJetLTobs_mismatch, phiJetLTobs_mismatch);
420  }
421  }
422  else {
423  cpm2Coord(std::get<0>(tob),std::get<1>(tob),
424  std::get<2>(tob),std::get<3>(tob),x,y,eta,phi);
425  if (t==TAU_TOB) {
426  xTauTobs_mismatch=x; yTauTobs_mismatch=y;
427  etaTauTobs_mismatch=eta; phiTauTobs_mismatch=phi;
428  fill(m_packageName, xTauTobs_mismatch, yTauTobs_mismatch,
429  etaTauTobs_mismatch, phiTauTobs_mismatch);
430  }
431  else { // EM_TOB
432  xEMTobs_mismatch=x; yEMTobs_mismatch=y;
433  etaEMTobs_mismatch=eta; phiEMTobs_mismatch=phi;
434  fill(m_packageName, xEMTobs_mismatch, yEMTobs_mismatch,
435  etaEMTobs_mismatch, phiEMTobs_mismatch);
436  }
437  }
438  }
439  // create set of matches
440  set_intersection(cmxKeys[t].begin(),cmxKeys[t].end(),
441  topoKeys[t].begin(),topoKeys[t].end(),
442  inserter(keyIntersect[t],keyIntersect[t].begin()));
443  for (auto& tob : keyIntersect[t]) {
444  int x,y;
445  double eta,phi;
446  if (t==JETS_TOB || t==JETL_TOB) {
447  jem2Coord(std::get<0>(tob),std::get<1>(tob),
448  std::get<2>(tob),std::get<3>(tob),x,y,eta,phi);
449  if (t==JETS_TOB) {
450  xJetSTobs_match=x; yJetSTobs_match=y;
451  etaJetSTobs_match=eta; phiJetSTobs_match=phi;
452  fill(m_packageName, xJetSTobs_match, yJetSTobs_match,
453  etaJetSTobs_match, phiJetSTobs_match);
454  }
455  else { // JETL_TOB
456  xJetLTobs_match=x; yJetLTobs_match=y;
457  etaJetLTobs_match=eta; phiJetLTobs_match=phi;
458  fill(m_packageName, xJetLTobs_match, yJetLTobs_match,
459  etaJetLTobs_match, phiJetLTobs_match);
460  }
461  }
462  else {
463  cpm2Coord(std::get<0>(tob),std::get<1>(tob),
464  std::get<2>(tob),std::get<3>(tob),x,y,eta,phi);
465  if (t==TAU_TOB) {
466  xTauTobs_match=x; yTauTobs_match=y;
467  etaTauTobs_match=eta; phiTauTobs_match=phi;
468  fill(m_packageName, xTauTobs_match, yTauTobs_match,
469  etaTauTobs_match, phiTauTobs_match);
470  }
471  else { // EM_TOB
472  xEMTobs_match=x; yEMTobs_match=y;
473  etaEMTobs_match=eta; phiEMTobs_match=phi;
474  fill(m_packageName, xEMTobs_match, yEMTobs_match,
475  etaEMTobs_match, phiEMTobs_match);
476  }
477  }
478  }
479  }
480 
481  if (mismatch) {
482  errors.push_back(static_cast<int>(SummaryErrors::CMX_MATCH));
483  }
484  if (!errors.empty()) {
485  lbErrors=LUMI_BLOCK;
486  fill(m_packageName,lbErrors,sumErrors);
487  }
488 
489  nJetTobs=std::min(daqJetTobs/NFPGA,MAXTOBS-1);
490  nTauTobs=std::min(daqTauTobs/NFPGA,MAXTOBS-1);
491  nEMTobs=std::min(daqEMTobs/NFPGA,MAXTOBS-1);
492  nMuonTobs=std::min(daqMuonTobs/NFPGA,MAXTOBS-1);
493 
495  return StatusCode::SUCCESS;
496 }
497 
498 void L1CaloL1TopoMonitorAlgorithm::jem2Coord(const int crate, const int jem,
499  const int frame, const int location,
500  int &x, int &y, double &eta, double &phi) const
501 {
502  x = crate*16 + jem;
503  y = frame*4 + location;
504  const uint32_t roiWord = // formula from JEPSimMon
505  ((((((crate << 4) + jem) << 3) + frame) << 2) + location) << 19;
507  const LVL1::CoordinateRange coord(decoder.coordinate(roiWord));
508  eta = coord.eta();
509  phi = coord.phi();
510 }
511 
512 void L1CaloL1TopoMonitorAlgorithm::cpm2Coord(const int crate, const int cpm,
513  const int chip, const int location,
514  int &x, int &y, double &eta, double &phi) const
515 {
516  x = crate*14 + cpm - 1;
517  y = chip*4 + location;
518  const uint32_t roiWord = // formula from CPSimMon
519  ((((((crate << 4) + cpm) << 4) + chip) << 2)
520  + location) << 18;
522  const LVL1::CoordinateRange coord(decoder.coordinate(roiWord));
523  eta = coord.eta();
524  phi = coord.phi();
525 }
L1CaloL1TopoMonitorAlgorithm::SummaryErrors::DAQ_CONV
@ DAQ_CONV
L1CaloL1TopoMonitorAlgorithm::JETS_TOB
@ JETS_TOB
Definition: L1CaloL1TopoMonitorAlgorithm.h:50
plotBeamSpotCompare.x1
x1
Definition: plotBeamSpotCompare.py:216
CTP_Decoder.h
L1CaloL1TopoMonitorAlgorithm::m_ctpRdoKey
SG::ReadHandleKey< CTP_RDO > m_ctpRdoKey
Definition: L1CaloL1TopoMonitorAlgorithm.h:54
header
Definition: hcg.cxx:526
checkCoolLatestUpdate.variables
variables
Definition: checkCoolLatestUpdate.py:13
phi
Scalar phi() const
phi method
Definition: AmgMatrixBasePlugin.h:67
ATH_MSG_INFO
#define ATH_MSG_INFO(x)
Definition: AthMsgStreamMacros.h:31
L1Topo::L1TopoTOB
Represents the L1Topo TOB word of the L1Topo ROI data, with decode and encoder.
Definition: L1TopoTOB.h:17
Fibre.h
python.LArCondContChannels.decoder
decoder
def channelSelection(self, channelList, groupType): if groupType == self.SingleGroup: pass elif group...
Definition: LArCondContChannels.py:618
xAOD::uint32_t
setEventNumber uint32_t
Definition: EventInfo_v1.cxx:127
L1CaloL1TopoMonitorAlgorithm::initialize
virtual StatusCode initialize() override
initialize
Definition: L1CaloL1TopoMonitorAlgorithm.cxx:32
eta
Scalar eta() const
pseudorapidity method
Definition: AmgMatrixBasePlugin.h:83
SG::ReadHandle
Definition: StoreGate/StoreGate/ReadHandle.h:70
LVL1::JEPRoIDecoder
A level 1 calorimeter trigger conversion service: returns the Coordinate represented by a RoI word.
Definition: JEPRoIDecoder.h:33
min
constexpr double min()
Definition: ap_fixedTest.cxx:26
CPRoIDecoder.h
L1Topo::Status
Represents the L1Topo status word of the L1Topo DAQ header, with decoder and encoder.
Definition: Status.h:19
BlockTypes.h
PlotCalibFromCool.begin
begin
Definition: PlotCalibFromCool.py:94
L1Topo::blockType
L1Topo::BlockTypes blockType(const uint32_t word, uint32_t offset=28, uint32_t size=0x0f)
Function to return the block type of a data word from L1Topo
Definition: BlockTypes.cxx:9
L1Topo::BlockTypes::JET2_TOB
@ JET2_TOB
L1Topo::BlockTypes::JET1_TOB
@ JET1_TOB
L1Topo::BlockTypes::MUON_TOB
@ MUON_TOB
xAOD::CMXCPTob_v1
Description of CMXCPTob_v1.
Definition: CMXCPTob_v1.h:27
L1CaloL1TopoMonitorAlgorithm::JETL_TOB
@ JETL_TOB
Definition: L1CaloL1TopoMonitorAlgorithm.h:50
read_hist_ntuple.t
t
Definition: read_hist_ntuple.py:5
CTP_RDO::getCTPVersionNumber
unsigned int getCTPVersionNumber() const
Definition: CTP_RDO.h:64
L1CaloL1TopoMonitorAlgorithm::cpm2Coord
void cpm2Coord(const int crate, const int cpm, const int chip, const int location, int &x, int &y, double &eta, double &phi) const
Definition: L1CaloL1TopoMonitorAlgorithm.cxx:512
L1Topo::BlockTypes::FIBRE
@ FIBRE
x
#define x
L1Topo::BlockTypes::ENERGY_TOB
@ ENERGY_TOB
CTP_RDO::getDataWords
const std::vector< uint32_t > & getDataWords() const
Definition: CTP_RDO.h:39
L1Topo::BlockTypes::STATUS
@ STATUS
python.Utilities.clone
clone
Definition: Utilities.py:134
L1CaloL1TopoMonitorAlgorithm::SummaryErrors::NO_DAQ
@ NO_DAQ
CTP_Decoder
Definition: CTP_Decoder.h:141
mergePhysValFiles.end
end
Definition: DataQuality/DataQualityUtils/scripts/mergePhysValFiles.py:93
Monitored::Collection
ValuesCollection< T > Collection(std::string name, const T &collection)
Declare a monitored (double-convertible) collection.
Definition: MonitoredCollection.h:38
L1Topo::Header
Represents the L1Topo header word of the L1Topo DAQ data, with decoder and encoder.
Definition: L1Topo/L1TopoRDO/L1TopoRDO/Header.h:18
AthMonitorAlgorithm
Base class for Athena Monitoring Algorithms.
Definition: AthMonitorAlgorithm.h:36
CTP_BC::getTIP
const std::bitset< 512 > & getTIP() const
get bitset of TIP words
Definition: CTP_Decoder.h:80
L1CaloL1TopoMonitorAlgorithm::EM_TOB
@ EM_TOB
Definition: L1CaloL1TopoMonitorAlgorithm.h:50
xAOD::roiWord
roiWord
Definition: TrigMissingET_v1.cxx:36
python.setupRTTAlg.size
int size
Definition: setupRTTAlg.py:39
PyPoolBrowser.item
item
Definition: PyPoolBrowser.py:129
L1Topo::BlockTypes::EM_TOB
@ EM_TOB
L1CaloL1TopoMonitorAlgorithm::MAXTOBS
static const int MAXTOBS
Definition: L1CaloL1TopoMonitorAlgorithm.h:51
LVL1::CoordinateRange
CoordinateRange class declaration.
Definition: CoordinateRange.h:36
ParticleGun_FastCalo_ChargeFlip_Config.energy
energy
Definition: ParticleGun_FastCalo_ChargeFlip_Config.py:78
L1Topo::BlockTypes::TAU_TOB
@ TAU_TOB
xAOD::uint16_t
setWord1 uint16_t
Definition: eFexEMRoI_v1.cxx:93
lumiFormat.i
int i
Definition: lumiFormat.py:85
L1Topo::BlockTypes::L1TOPO_TOB
@ L1TOPO_TOB
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
xAOD::L1TopoRawData_v1
Description of L1TopoRawData_v1.
Definition: L1TopoRawData_v1.h:28
fitman.bx
bx
Definition: fitman.py:410
L1CaloL1TopoMonitorAlgorithm::m_packageName
StringProperty m_packageName
Definition: L1CaloL1TopoMonitorAlgorithm.h:43
CTP_BC
Definition: CTP_Decoder.h:17
L1CaloL1TopoMonitorAlgorithm::fillHistograms
virtual StatusCode fillHistograms(const EventContext &ctx) const override
adds event to the monitoring histograms
Definition: L1CaloL1TopoMonitorAlgorithm.cxx:46
CTP_RDO::setL1AcceptBunchPosition
void setL1AcceptBunchPosition(const uint8_t)
Definition: CTP_RDO.cxx:141
L1CaloL1TopoMonitorAlgorithm::jem2Coord
void jem2Coord(const int crate, const int jem, const int frame, const int location, int &x, int &y, double &eta, double &phi) const
Definition: L1CaloL1TopoMonitorAlgorithm.cxx:498
L1CaloL1TopoMonitorAlgorithm::m_l1TopoKey
SG::ReadHandleKey< xAOD::L1TopoRawDataContainer > m_l1TopoKey
Definition: L1CaloL1TopoMonitorAlgorithm.h:62
ATH_CHECK
#define ATH_CHECK
Definition: AthCheckMacros.h:40
run
Definition: run.py:1
AthMonitorAlgorithm::fill
void fill(const ToolHandle< GenericMonitoringTool > &groupHandle, std::vector< std::reference_wrapper< Monitored::IMonitoredVariable >> &&variables) const
Fills a vector of variables to a group by reference.
SG::VarHandleKey::initialize
StatusCode initialize(bool used=true)
If this object is used as a property, then this should be called during the initialize phase.
Definition: AthToolSupport/AsgDataHandles/Root/VarHandleKey.cxx:103
AthMonitorAlgorithm::GetEventInfo
SG::ReadHandle< xAOD::EventInfo > GetEventInfo(const EventContext &) const
Return a ReadHandle for an EventInfo object (get run/event numbers, etc.)
Definition: AthMonitorAlgorithm.cxx:107
JEPRoIDecoder.h
xAOD::CMXJetTob_v1
Description of CMXJetTob_v1.
Definition: CMXJetTob_v1.h:27
L1CaloL1TopoMonitorAlgorithm::m_cmxJetTobLocation
SG::ReadHandleKey< xAOD::CMXJetTobContainer > m_cmxJetTobLocation
Definition: L1CaloL1TopoMonitorAlgorithm.h:59
SG::ReadHandle::isValid
virtual bool isValid() override final
Can the handle be successfully dereferenced?
mergePhysValFiles.errors
list errors
Definition: DataQuality/DataQualityUtils/scripts/mergePhysValFiles.py:43
L1CaloL1TopoMonitorAlgorithm::SummaryErrors::PAYL_CRC
@ PAYL_CRC
L1Topo::formatHex8
std::string formatHex8(uint32_t word)
Helper function to format a 32-bit integer as an 8-digit hex number for printing.
Definition: Trigger/TrigT1/L1Topo/L1TopoRDO/src/Helpers.cxx:111
name
std::string name
Definition: Control/AthContainers/Root/debug.cxx:228
CTP_RDO::setTurnCounter
void setTurnCounter(const uint32_t)
Definition: CTP_RDO.cxx:148
item
Definition: ItemListSvc.h:43
JetVoronoiDiagramHelpers::coord
double coord
Definition: JetVoronoiDiagramHelpers.h:45
CTP_RDO::getL1AcceptBunchPosition
uint32_t getL1AcceptBunchPosition() const
Definition: CTP_RDO.cxx:94
TriggerTest.ctp
ctp
Retrieve trigger EDM objects.
Definition: TriggerTest.py:14
L1CaloL1TopoMonitorAlgorithm::SummaryErrors::CMX_MATCH
@ CMX_MATCH
L1Topo::Fibre
Represents the L1Topo fibre word of the L1Topo DAQ header, with decoder and encoder.
Definition: Fibre.h:22
AthMonitorAlgorithm::initialize
virtual StatusCode initialize() override
initialize
Definition: AthMonitorAlgorithm.cxx:18
DeMoAtlasDataLoss.runNumber
string runNumber
Definition: DeMoAtlasDataLoss.py:64
LVL1::CPRoIDecoder
A level 1 calorimeter trigger conversion service: returns the Coordinate represented by a RoI word.
Definition: CPRoIDecoder.h:37
CTP_RDO
Definition: CTP_RDO.h:20
CTP_RDO::getTurnCounter
uint32_t getTurnCounter() const
Definition: CTP_RDO.cxx:106
y
#define y
CoordinateRange.h
ATH_MSG_WARNING
#define ATH_MSG_WARNING(x)
Definition: AthMsgStreamMacros.h:32
Status.h
L1Topo::BlockTypes::HEADER
@ HEADER
L1CaloL1TopoMonitorAlgorithm.h
merge.status
status
Definition: merge.py:17
Monitored::Scalar
Declare a monitored scalar variable.
Definition: MonitoredScalar.h:34
L1CaloL1TopoMonitorAlgorithm::L1CaloL1TopoMonitorAlgorithm
L1CaloL1TopoMonitorAlgorithm(const std::string &name, ISvcLocator *pSvcLocator)
Definition: L1CaloL1TopoMonitorAlgorithm.cxx:26
makeTOC.header
header
Definition: makeTOC.py:28
L1CaloL1TopoMonitorAlgorithm::TAU_TOB
@ TAU_TOB
Definition: L1CaloL1TopoMonitorAlgorithm.h:50
L1CaloL1TopoMonitorAlgorithm::SummaryErrors::F_CRC
@ F_CRC
set_intersection
Set * set_intersection(Set *set1, Set *set2)
Perform an intersection of two sets.
L1CaloL1TopoMonitorAlgorithm::TOB_TYPES
@ TOB_TYPES
Definition: L1CaloL1TopoMonitorAlgorithm.h:50
DataVector::empty
bool empty() const noexcept
Returns true if the collection is empty.
Helpers.h
L1CaloL1TopoMonitorAlgorithm::m_cmxCpTobLocation
SG::ReadHandleKey< xAOD::CMXCPTobContainer > m_cmxCpTobLocation
Definition: L1CaloL1TopoMonitorAlgorithm.h:56