ATLAS Offline Software
LArFEBMonAlg.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 // ********************************************************************
6 // NAME: LArFEBMonAlg.cxx
7 //
8 // AUTHOR: P. Strizenec, based on LArFEBMon tool by B. Trocme
9 // ********************************************************************
10 
11 #include "LArFEBMonAlg.h"
12 
15 
19 
20 #include "LArTrigStreamMatching.h"
21 
22 #include <algorithm>
23 #include <math.h>
24 #include <sys/types.h>
25 
26 const unsigned sizeNorm=262144;
27 
28 // ********************************************************************
29 LArFEBMonAlg::LArFEBMonAlg( const std::string& name, ISvcLocator* pSvcLocator)
30  : AthMonitorAlgorithm(name, pSvcLocator),
31  m_onlineHelper(nullptr),
32  m_dspThrDone(false),
33  m_maskedDone(false),
34  m_nbOfFebBlocksTotal(-1)
35 {
36 
37 }
38 
39 
40 // ********************************************************************
42 
43  ATH_MSG_INFO( "Initializing LArFEBMonAlg " );
44 
45  StatusCode sc = detStore()->retrieve(m_onlineHelper, "LArOnlineID");
46  if (sc.isFailure()) {
47  ATH_MSG_ERROR( "Could not get LArOnlineID helper !" );
48  return StatusCode::FAILURE;
49  }
50 
51  sc=m_BFKey.initialize();
52  if (sc.isFailure()) {
53  ATH_MSG_ERROR( "Could not initialize Missing FEBs key " << m_BFKey.key() );
54  return StatusCode::FAILURE;
55  } else {
56  ATH_MSG_DEBUG( "Missing FEBs key" << m_BFKey.key() << " initialized" );
57  }
58 
61 
62  m_histoGroups.reserve(m_SubDetNames.size());
63  for (unsigned i=0; i<m_SubDetNames.size(); ++i) {
64  std::vector<std::string> part;
65  part.push_back(m_partitions[2*i]);
66  part.push_back(m_partitions[2*i+1]);
67  m_histoGroups.push_back(Monitored::buildToolMap<int>(m_tools,m_SubDetNames[i],part));
68  }
69 
72  ATH_CHECK( m_eventInfoDecorKey.initialize() );
73 
75 }
76 
77 // ********************************************************************
78 StatusCode LArFEBMonAlg::fillHistograms(const EventContext& ctx) const {
79 
80  bool eventRejected = false;
81  std::bitset<13> rejectionBits;
82  // for TTree
83  std::vector<int> febInErrorTree(0);
84  std::vector<int> febErrorTypeTree(0);
85 
86  // Retrieve event info to get event time,trigger type...
87  // Retrieved at beg of method now to get the LVL1 type
88  // to check consistency with DSP trigger type
90  ATH_CHECK(thisEvent.isValid());
91  unsigned int l1Trig = thisEvent->level1TriggerType();
92  auto l1 = Monitored::Scalar<int>("LVL1Trig",l1Trig);
94 
95  auto eventTime = Monitored::Scalar<int>("timestamp",thisEvent->timeStamp());
96  auto eventTime_ns = Monitored::Scalar<int>("time_ns",thisEvent->timeStampNSOffset());
97 
98  unsigned lumi_block = thisEvent->lumiBlock();
99  bool lar_inerror = (thisEvent->errorState(xAOD::EventInfo::LAr)==xAOD::EventInfo::Error) ? true : false;
100 
101  ATH_MSG_DEBUG( "LArFEBMonAlg Lumi block: "<<lumi_block);
102 
105  if (!hdrCont.isValid()) {
106  ATH_MSG_ERROR( "No LArFebHeaderContainer found in TDS" );
107  return StatusCode::FAILURE;
108  }
109 
110  if (hdrCont->size()==0) {
111  ATH_MSG_WARNING( "Got empty LArFebHeaderContainer. Do nothing" );
112  return StatusCode::SUCCESS;
113  }
114 
115  if (!lArFebErrorSummary.isValid()) {
116  ATH_MSG_ERROR( "No LArFebErrorSummary found in TDS" );
117  return StatusCode::FAILURE;
118  }
119 
120  bool trigok=true;
122  const ToolHandle<Trig::TrigDecisionTool> trigTool=getTrigDecisionTool();
123  //const Trig::TrigDecisionTool *trigTool = dynamic_cast<const Trig::TrigDecisionTool * > (&*trigHdl);
124  std::vector<std::string> l1triggers;
125  if(!trigTool.empty()) {
126  const Trig::ChainGroup* allL1 = trigTool->getChainGroup("L1_.*");
127  l1triggers = allL1->getListOfTriggers();
128  ATH_MSG_DEBUG( "lvl1 item names: [" );
129  for (unsigned int i=0;i< l1triggers.size();i++) {
130  ATH_MSG_DEBUG( i << " " << l1triggers.at(i) << " , " );
131  }
132  ATH_MSG_DEBUG( "] " );
133  } else {
134  ATH_MSG_WARNING("TrigDecisionTool is empty");
135  }
136  if (l1triggers.size()>0) {trigok=true;} else {trigok=false;}
137  }
138 
139  uint32_t firstEventType = (*hdrCont->begin())->DetEventType();
140 
141  { // adding scope for locking
142  std::lock_guard<std::mutex> lock(m_mut);
143  if(!m_maskedDone) { // should be done once at the beginning
144  plotMaskedFEB();
145  m_maskedDone=true;
146  }
147  }
148 
149  // At 1st event, retrieve DSP thresholds and fill histogram with values for all channels
150  { // adding scope for locking
151  std::lock_guard<std::mutex> lock(m_mut);
152  if (!m_dspThrDone && firstEventType == 4) {
153 
154  auto dspADC = Monitored::Scalar<unsigned int>("dspThrADC",-1);
155  auto dspQT = Monitored::Scalar<unsigned int>("dspThrQT",-1);
156  if (!m_run1DSPThresholdsKey.empty()) {
157  ATH_MSG_DEBUG("Loading run1 version of LAr DSP Thresholds");
160  dspADC=dspThresh->samplesThr(ch);
161  dspQT=dspThresh->tQThr(ch);
162  fill(m_monGroupName, dspADC, dspQT);
163  }//end loop over channels
164  }
165  else if (!m_run2DSPThresholdsKey.empty()) {
166  ATH_MSG_DEBUG("Loading run2 version of LAr DSP Thresholds");
168  LArDSPThresholdsFlat dspThreshFlat(*dspThrshAttr);
169  if (!dspThreshFlat.good()) {
170  ATH_MSG_WARNING( "Failed to initialize LArDSPThresholdFlat from attribute list loaded from " << m_run2DSPThresholdsKey.key()
171  << ". Will not fill histograms." );
172  }//end if not good
174  for (unsigned iChan=0;iChan<chanMax;++iChan) {
175  dspADC=dspThreshFlat.samplesThrByHash(iChan);
176  dspQT=dspThreshFlat.tQThrByHash(iChan);
177  fill(m_monGroupName, dspADC, dspQT);
178  }
179  }
180  else
181  ATH_MSG_WARNING( "No LArDSPThresholds key specified. Will not fill these histograms" );
182  m_dspThrDone=true;
183  }//m_dspThrDone
184  } // locking scope
185 
186 
187  //Adjust event type if we have raw data in the ROD block
188  if (firstEventType == 4 && (*hdrCont->begin())->RodRawDataSize() != 0) firstEventType = 14;
189 
190  std::vector<unsigned int> nfeb(m_partitions.size());
191  int firstEventNbSp=-1;
192  unsigned int totNbOfSweet2 = 0;
193  float larEventSize = 0;
194  float larEventSize_part[8] = {0.,0.,0.,0.,0.,0.,0.,0.};
195 
197  LArFebHeaderContainer::const_iterator it_e = hdrCont->end();
198 
199  auto l1word = Monitored::Scalar<int>("LVL1TrigAllDSP",0);
200  // Loop on all available FEBHeader to fill basic parameters histogram : event type, event size, nb of sweet cells...
201  auto slmon = Monitored::Scalar<int>("slotnb",-1);
202  auto ftmon = Monitored::Scalar<int>("FTnb",-1);
203  auto sw1 = Monitored::Scalar<int>("weightsweet1",-1);
204  auto sw2 = Monitored::Scalar<int>("weightsweet2",-1);
205  auto slmis = Monitored::Scalar<int>("slotmist",-1);
206  auto ftmis = Monitored::Scalar<int>("FTmist",-1);
207  for ( ; it!=it_e;++it) {
208  HWIdentifier febid=(*it)->FEBId();
209 
210  if (febid.get_identifier32().get_compact() >= 0x38000000 && febid.get_identifier32().get_compact() <= 0x3bc60000 && !(febid.get_identifier32().get_compact() & 0xFFF)) {
211  int barrel_ec = m_onlineHelper->barrel_ec(febid);
212  int pos_neg = m_onlineHelper->pos_neg(febid);
213  int ft = m_onlineHelper->feedthrough(febid);
214  int slot = m_onlineHelper->slot(febid);
215  unsigned int partitionNb_dE = returnPartition(barrel_ec,pos_neg,ft,slot);
216  unsigned int subdet = partitionNb_dE / 2;
217 
218  if (partitionNb_dE < m_partitions.size()) {
219  nfeb[partitionNb_dE]++ ;
220  }else{
221  ATH_MSG_WARNING("Unknown partition number: "<< partitionNb_dE << " not filling !");
222  continue;
223  }
224  larEventSize += (float) ((*it)->RodRawDataSize() + (*it)->RodResults1Size() + (*it)->RodResults2Size()); // This quantity is now in megabytes
225  if(partitionNb_dE<8) larEventSize_part[partitionNb_dE] += (float) ((*it)->RodRawDataSize() + (*it)->RodResults1Size() + (*it)->RodResults2Size());
226 
227  // Eventype = 2 : transparent/raw data - 4 : Physic - 7 : calibration - 10 : pedestal - 14 : raw data + results
228  uint32_t eventType = (*it)->DetEventType();
229  // If physic mode && raw data != 0, we are in rawdata+results
230  if (eventType == 4 && (*it)->RodRawDataSize() != 0) eventType = 14;
231  //if (firstEventType == 999) firstEventType = eventType;
232  if (firstEventNbSp < 0)
233  if ((*it)->NbSamples() != 0)
234  firstEventNbSp=(*it)->NbSamples();
235 
236 
237  l1word = (*it)->LVL1TigType();
238  fill(m_monGroupName,l1word);
239 
240  if (firstEventType == 4) totNbOfSweet2 = totNbOfSweet2+(*it)->NbSweetCells2();
241  // Fill (nb of evnts and sweet cells per FEB) histos
242  slmon = slot;
243  ftmon = ft;
244  sw1 = (*it)->NbSweetCells1();
245  sw2 = (*it)->NbSweetCells2();
246  fill(m_tools[m_histoGroups.at(subdet).at(m_partitions[partitionNb_dE])],slmon,ftmon,sw1,sw2);
247  if ((*it)->LVL1TigType() == 0 || (*it)->LVL1TigType() == 170 || (*it)->LVL1TigType() != l1Trig){
248  fill(m_tools[m_histoGroups.at(subdet).at(m_partitions[partitionNb_dE])],slmis,ftmis);
249  }
250  }//Test on FEBid
251  }//end of loop over FEB headers
252 
253  // Loop over all febs to plot the error from statusword
254  // This is mandatory to also monitor the FEBs with missing headers
255 
256  bool anyfebIE = false;
257  for (std::vector<HWIdentifier>::const_iterator allFeb = m_onlineHelper->feb_begin();
258  allFeb != m_onlineHelper->feb_end(); ++allFeb) {
259  HWIdentifier febid = HWIdentifier(*allFeb);
260  bool currentFebStatus = false;
261  uint16_t feberrorSummary = lArFebErrorSummary->feb_error(febid);
262 
263  if ( feberrorSummary != 0 ){
264  int barrel_ec = m_onlineHelper->barrel_ec(febid);
265  int pos_neg = m_onlineHelper->pos_neg(febid);
266  int ft = m_onlineHelper->feedthrough(febid);
267  int slot = m_onlineHelper->slot(febid);
268  unsigned int partitionNb_dE = returnPartition(barrel_ec,pos_neg,ft,slot);
269 
270  if (partitionNb_dE < m_partitions.size()) {
271  // Fill the errors in partition histograms
272  fillErrorsSummary(partitionNb_dE,ft,slot,feberrorSummary,lar_inerror, rejectionBits, currentFebStatus, eventRejected);
273  }else{
274  ATH_MSG_WARNING("Unknown partition number: "<< partitionNb_dE << " not filling !");
275  }
276 
277  if (currentFebStatus && febInErrorTree.size()<33){
278  febInErrorTree.push_back(febid.get_identifier32().get_compact());
279  febErrorTypeTree.push_back(rejectionBits.to_ulong());
280  }
281  }
282  if(currentFebStatus) anyfebIE = currentFebStatus;
283  }
284 
285  //Fill general data histos
286  auto evttype = Monitored::Scalar<int>("EvtType",firstEventType);
287 
288  float nbOfFeb = 0.;
289  for(auto nf: nfeb) nbOfFeb+=nf;// (nfeb[0]+nfeb[1]+nfeb[2]+nfeb[3]+nfeb[4]+nfeb[5]+nfeb[6]+nfeb[7]);
290  if (firstEventType == 2 || firstEventType == 4 || firstEventType == 14) {
291  auto nbsamp = Monitored::Scalar<int>("NbOfSamp",firstEventNbSp);
292  fill(m_monGroupName, nbsamp);
293  }
294 
295  bool newHighWaterMarkNFebBlocksTotal = false;
296  if(m_nbOfFebBlocksTotal < nbOfFeb){ // new number of Febs
297  if(m_nbOfFebBlocksTotal >= 0) newHighWaterMarkNFebBlocksTotal = true;
298  m_nbOfFebBlocksTotal = nbOfFeb;
299  }
300  auto nbfeb = Monitored::Scalar<int>("nbFEB",nbOfFeb);
301  fill(m_monGroupName, evttype, nbfeb);
302 
303  auto part = Monitored::Scalar<int>("part",-1);
304  auto nbfebpart = Monitored::Scalar<int>("nbFEBpart",-1);
305  for(unsigned i=0; i<m_partitions.size(); ++i) {
306  part=i;
307  unsigned subdet = i / 2;
308  nbfebpart=nfeb[i];
309  fill(m_monGroupName,part,nbfebpart);
310  fill(m_tools[m_histoGroups.at(subdet).at(m_partitions[i])],nbfebpart);
311  }
312 
313  // If the nb of DSP headers is lower than the maximum, this means that there are some missing FEBs, probably
314  // due to missing ROS fragment
315 
316  auto evtrej = Monitored::Scalar<int>("EvtRej",-1);
317  float evt_yield=-1;
318  auto evtyield = Monitored::Scalar<float>("EvtRejYield",-1);
319  auto evtyieldout = Monitored::Scalar<float>("EvtRejYieldOut",-1);
320  if (febInErrorTree.size()>=1 || newHighWaterMarkNFebBlocksTotal || nbOfFeb < m_nbOfFebBlocksTotal ){
321  evtrej=0; evt_yield = 100.;
322  if (febInErrorTree.size()>=4) evtrej=1;
323  if (thisEvent->isEventFlagBitSet(xAOD::EventInfo::LAr,LArEventBitInfo::DATACORRUPTEDVETO)) evtyieldout=0.; // Vetoed
324  else evtyieldout=100.; // not vetoed
325  }
326  if(evtrej > -1) {
327  fill(m_monGroupName,evtrej);
328  evtrej=-1;
329  }
330 
332  evtrej=2;
333  auto rbits = Monitored::Scalar<unsigned long>("rejBits", rejectionBits.to_ulong());
334  fill(m_monGroupName, rbits, evtrej);
335 
336  evt_yield = 100.;
338  evtrej=4;
339  evtyieldout=0.; // Vetoed
340  } else {
341  evtrej=3;
342  evtyieldout=100.; // not vetoed
343  }
344  } else{ // The event is NOT in error. Fill per LB TProfile
345  evtrej=6; evt_yield = 0.; evtyieldout=0.;
346  }
347  evtyield=evt_yield;
348  auto evSize = Monitored::Scalar<float>("LArEvSize",larEventSize/sizeNorm);
349  auto sweet2 = Monitored::Scalar<int>("NbOfSweet2",totNbOfSweet2);
350  auto lb0 = Monitored::Scalar<int>("LB0",lumi_block); //to avoid 'NbOfEventsVSLB' being filled multiple times
351  fill(m_monGroupName,evtrej,evtyieldout,evtyield,evSize, sweet2, lb0);
353  evtrej=5;
354  fill(m_monGroupName,evtrej);
355  }
356  evtrej=7;
357  fill(m_monGroupName,evtrej);
359  auto lbfake = Monitored::Scalar<int>("LBf",0);
360  fill(m_monGroupName,evtyield,lbfake);
361  }
362 
363  if(anyfebIE) {
364  //Fill LArCorrupted tree and >=1FEB in errors
365  auto mon_febInErrorTree = Monitored::Collection("febHwId", febInErrorTree);
366  auto mon_febErrorTypeTree = Monitored::Collection("febErrorType", febErrorTypeTree);
367  auto evtonerej = Monitored::Scalar<int>("EvtOneErrorYield",100);
368  fill(m_monGroupName,mon_febInErrorTree,mon_febErrorTypeTree,eventTime,eventTime_ns,evtonerej);
369  }
370 
371  // Now we could fill the event size
372  auto lb = Monitored::Scalar<int>("LB",lumi_block);
373  auto evsize=Monitored::Scalar<float>("LArEvSizePart",-1);
374  if(environment() == Environment_t::online && m_streams.size() > 0) {
375  std::vector<unsigned int> streamsThisEvent=LArMon::trigStreamMatching(m_streams,thisEvent->streamTags());
376  if(streamsThisEvent.size()==1 && streamsThisEvent[0] == m_streams.size()) streamsThisEvent[0]=m_streams.size()-1; // assuming others are last in the list of streams
377 
378  auto streambin=Monitored::Scalar<float>("streamBin",-1);
379 
380  unsigned ie(0);
381  for(unsigned int str=0; str<streamsThisEvent.size(); ++str) {
382  if(streamsThisEvent[str] > m_streams.size()) break;
383  if(trigok && streamsThisEvent[str] < m_streams.size() && (m_streams[streamsThisEvent[str]].find("CosmicCalo") != std::string::npos)) { // test excluding events
384  if (!getTrigDecisionTool().empty()) {
385  for(ie=0; ie<m_excoscalo.size(); ++ie) {
386  if(getTrigDecisionTool()->isPassed(m_excoscalo[ie])) break;
387  }
388  }
389  if(ie<m_excoscalo.size()) {
390  ATH_MSG_INFO("Skipping "<<m_excoscalo[ie]<<" for CosmicCalo ");
391  continue; // we should skip this trigger
392  }
393  }
394  streambin = streamsThisEvent[str];
395  evsize = larEventSize/262144;
396  fill(m_monGroupName,lb,streambin,evsize);
397 
398  for(unsigned i=0; i <m_partitions.size(); ++i){
399  unsigned subdet = i / 2;
400  evsize = larEventSize_part[i]/sizeNorm;
401  fill(m_tools[m_histoGroups.at(subdet).at(m_partitions[i])],lb,streambin,evsize);
402  }
403 
404  }
405  } else { // we are filling only simple profiles
406  for(unsigned i=0; i<m_partitions.size(); ++i) {
407  unsigned subdet = i / 2;
408  evsize=larEventSize_part[i]/sizeNorm;
409  fill(m_tools[m_histoGroups.at(subdet).at(m_partitions[i])],lb,evsize);
410  }
411  }
412 
413 
414  return StatusCode::SUCCESS;
415 }
416 
417 
418 // ********************************************************************
419 void LArFEBMonAlg::fillErrorsSummary(unsigned int partitNb_2,int ft,int slot,uint16_t error, bool lar_inerror, std::bitset<13> &rejectionBits, bool &currentFebStatus, bool &eventRejected) const
420 {
421 
422  if (m_badFebs.count(std::make_pair(slot,ft)) != 0) return;
423 
424 
425  auto part = Monitored::Scalar<int>("part",partitNb_2);
426  auto ferror = Monitored::Scalar<int>("febError",-1);
427  if ( error & (1<<0) ){
428  unsigned subdet = partitNb_2 / 2;
429  auto sl = Monitored::Scalar<int>("slotPar",slot);
430  auto ftmon = Monitored::Scalar<int>("FTPar",ft);
431  fill(m_tools[m_histoGroups.at(subdet).at(m_partitions[partitNb_2])],sl,ftmon);
432  currentFebStatus = true;
433  rejectionBits.set(0);
434  ferror=1;
435  fill(m_monGroupName, ferror, part);
436  }
437 
438  if ( error & (1<<1) ){
439  unsigned subdet = partitNb_2 / 2;
440  auto sl = Monitored::Scalar<int>("slotBcid",slot);
441  auto ftmon = Monitored::Scalar<int>("FTBcid",ft);
442  fill(m_tools[m_histoGroups.at(subdet).at(m_partitions[partitNb_2])],sl,ftmon);
443  currentFebStatus = true;
444  rejectionBits.set(1);
445  ferror=2;
446  fill(m_monGroupName, ferror, part);
447  }
448 
449  if ( error & (1<<2) ){
450  unsigned subdet = partitNb_2 / 2;
451  auto sl = Monitored::Scalar<int>("slotRadd",slot);
452  auto ftmon = Monitored::Scalar<int>("FTRadd",ft);
453  fill(m_tools[m_histoGroups.at(subdet).at(m_partitions[partitNb_2])],sl,ftmon);
454  currentFebStatus = true;
455  rejectionBits.set(2);
456  ferror=3;
457  fill(m_monGroupName, ferror, part);
458  }
459 
460  if ( error & (1<<3) ){
461  unsigned subdet = partitNb_2 / 2;
462  auto sl = Monitored::Scalar<int>("slotEvtid",slot);
463  auto ftmon = Monitored::Scalar<int>("FTEvtid",ft);
464  fill(m_tools[m_histoGroups.at(subdet).at(m_partitions[partitNb_2])],sl,ftmon);
465  currentFebStatus = true;
466  rejectionBits.set(3);
467  ferror=4;
468  fill(m_monGroupName, ferror, part);
469  }
470 
471  if ( error & (1<<4) ){
472  unsigned subdet = partitNb_2 / 2;
473  auto sl = Monitored::Scalar<int>("slotScac",slot);
474  auto ftmon = Monitored::Scalar<int>("FTScac",ft);
475  fill(m_tools[m_histoGroups.at(subdet).at(m_partitions[partitNb_2])],sl,ftmon);
476  currentFebStatus = true;
477  rejectionBits.set(4);
478  ferror=5;
479  fill(m_monGroupName, ferror, part);
480  }
481 
482  if ( error & (1<<5) ){
483  unsigned subdet = partitNb_2 / 2;
484  auto sl = Monitored::Scalar<int>("slotscout",slot);
485  auto ftmon = Monitored::Scalar<int>("FTscout",ft);
486  fill(m_tools[m_histoGroups.at(subdet).at(m_partitions[partitNb_2])],sl,ftmon);
487  currentFebStatus = true;
488  rejectionBits.set(5);
489  ferror=6;
490  fill(m_monGroupName, ferror, part);
491  }
492 
493  if ( error & (1<<6) ){
494  unsigned subdet = partitNb_2 / 2;
495  auto sl = Monitored::Scalar<int>("slotgain",slot);
496  auto ftmon = Monitored::Scalar<int>("FTgain",ft);
497  fill(m_tools[m_histoGroups.at(subdet).at(m_partitions[partitNb_2])],sl,ftmon);
498  currentFebStatus = true;
499  rejectionBits.set(6);
500  ferror=7;
501  fill(m_monGroupName, ferror, part);
502  }
503 
504  if ( error & (1<<7) ){
505  unsigned subdet = partitNb_2 / 2;
506  auto sl = Monitored::Scalar<int>("slottype",slot);
507  auto ftmon = Monitored::Scalar<int>("FTtype",ft);
508  fill(m_tools[m_histoGroups.at(subdet).at(m_partitions[partitNb_2])],sl,ftmon);
509  currentFebStatus = true;
510  rejectionBits.set(7);
511  ferror=8;
512  fill(m_monGroupName, ferror, part);
513  }
514 
515  if ( error & (1<<8) ){
516  unsigned subdet = partitNb_2 / 2;
517  auto sl = Monitored::Scalar<int>("slotsmp",slot);
518  auto ftmon = Monitored::Scalar<int>("FTsmp",ft);
519  fill(m_tools[m_histoGroups.at(subdet).at(m_partitions[partitNb_2])],sl,ftmon);
520  currentFebStatus = true;
521  rejectionBits.set(8);
522  ferror=9;
523  fill(m_monGroupName, ferror, part);
524  }
525 
526  if ( error & (1<<9) ){
527  unsigned subdet = partitNb_2 / 2;
528  auto sl = Monitored::Scalar<int>("slotzero",slot);
529  auto ftmon = Monitored::Scalar<int>("FTzero",ft);
530  fill(m_tools[m_histoGroups.at(subdet).at(m_partitions[partitNb_2])],sl,ftmon);
531  currentFebStatus = true;
532  rejectionBits.set(9);
533  ferror=10;
534  fill(m_monGroupName, ferror, part);
535  }
536 
537 
538  if ( error & (1<<11) ){
539  unsigned subdet = partitNb_2 / 2;
540  auto sl = Monitored::Scalar<int>("slotsum",slot);
541  auto ftmon = Monitored::Scalar<int>("FTsum",ft);
542  fill(m_tools[m_histoGroups.at(subdet).at(m_partitions[partitNb_2])],sl,ftmon);
543  currentFebStatus = true;
544  rejectionBits.set(10);
545  ferror=11;
546  fill(m_monGroupName, ferror, part);
547  }
548 
549  if ( error & (1<<12) ){
550  // Check whether this error can be ignored. Useful for calibration run of PS or EMB
551  if (!((m_ignoreMissingHeaderEMB && partitNb_2<2 && slot>=2) || (m_ignoreMissingHeaderPS && partitNb_2<2 && slot==1))){
552  unsigned subdet = partitNb_2 / 2;
553  auto sl = Monitored::Scalar<int>("slotmis",slot);
554  auto ftmon = Monitored::Scalar<int>("FTmis",ft);
555  fill(m_tools[m_histoGroups.at(subdet).at(m_partitions[partitNb_2])],sl,ftmon);
556  currentFebStatus = true;
557  rejectionBits.set(11);
558  ferror=12;
559  fill(m_monGroupName, ferror, part);
560  }
561  }
562 
563  if ( error & (1<<13) ){
564  unsigned subdet = partitNb_2 / 2;
565  auto sl = Monitored::Scalar<int>("slotgain",slot);
566  auto ftmon = Monitored::Scalar<int>("FTgain",ft);
567  fill(m_tools[m_histoGroups.at(subdet).at(m_partitions[partitNb_2])],sl,ftmon);
568  currentFebStatus = true;
569  rejectionBits.set(12);
570  ferror=13;
571  fill(m_monGroupName, ferror, part);
572  }
573 
574 
575  unsigned subdet = partitNb_2 / 2;
576  float ferr=0.;
577  if (currentFebStatus){
578  auto sl = Monitored::Scalar<int>("slotabs",slot);
579  auto ftmon = Monitored::Scalar<int>("FTabs",ft);
580  fill(m_tools[m_histoGroups.at(subdet).at(m_partitions[partitNb_2])],sl,ftmon);
581  if (lar_inerror) {// LArinError
582  eventRejected = true;
583  if(environment() == Environment_t::online) ferr=100.;
584  } else {
585  if(environment() == Environment_t::online) ferr=50.;
586  }
587  }
589  auto lbf = Monitored::Scalar<float>("LBf",0.5);
590  auto erry = Monitored::Scalar<float>("erronl",ferr);
591  fill(m_tools[m_histoGroups.at(subdet).at(m_partitions[partitNb_2])],lbf,erry);
592  }
593 
594  return;
595 }
596 
597 /*---------------------------------------------------------*/
598 void
600 
602  const LArBadFebCont* badFebCont=(*badFebHdl);
603  if(!badFebCont) {
604  ATH_MSG_WARNING( "Do not have Misisng FEB container, no plots !!!" );
605  return;
606  }
607  m_badFebs.clear();
608  // Loop over all FEBs
609  for (std::vector<HWIdentifier>::const_iterator allFeb = m_onlineHelper->feb_begin();
610  allFeb != m_onlineHelper->feb_end(); ++allFeb) {
611  HWIdentifier febid = HWIdentifier(*allFeb);
612  const LArBadFeb febStatus = badFebCont->status(febid);
613  unsigned int binContent = 0;
614  if (febStatus.inError() || febStatus.deadReadout() || febStatus.deadAll() || febStatus.deactivatedInOKS()) binContent = 2;
615  if (febStatus.ignoreErrors() > 0) binContent = 1;
616  if (binContent != 0){
617  int barrel_ec = m_onlineHelper->barrel_ec(febid);
618  int pos_neg = m_onlineHelper->pos_neg(febid);
619  int ft = m_onlineHelper->feedthrough(febid);
620  int slot = m_onlineHelper->slot(febid);
621  unsigned int partitionNb_dE = returnPartition(barrel_ec,pos_neg,ft,slot);
622  int subdet = partitionNb_dE / 2;
623 
624  m_badFebs[std::make_pair(slot,ft)] = binContent;
625  if (partitionNb_dE < m_partitions.size()) {
626  auto sl = Monitored::Scalar<int>("slotMasked",slot);
627  auto ftmon = Monitored::Scalar<int>("FTMasked",ft);
628  ATH_MSG_INFO("filling for " << partitionNb_dE << " partition, slot: " << slot << "FT: " << ft);
629  fill(m_tools[m_histoGroups.at(subdet).at(m_partitions[partitionNb_dE])],sl,ftmon);
630  }else{
631  ATH_MSG_WARNING("Unknown partition number: "<< partitionNb_dE << " not filling !");
632  }
633  }
634  }
635 }
636 
637 
638 /*---------------------------------------------------------*/
639 /*
640  DEV this needs to be migrated, but so far we do not have posibility to dynamically create the histograms....
641 void
642 LArFEBMonAlg::fillFebInError(const summaryPartition& summ,int errorType,int barrel_ec,int pos_neg,std::string summName)
643 {
644  ATH_MSG_DEBUG( "In fillFebInError" );
645 
646  // TH2I* tempHisto = TH2I_LW::create(*summ.parity);
647 
648  std::string hName = "/LAr/FEBMon/perPartition/FebInErrors/" + summName;
649 
650  MonGroup generalGroup( this, hName.c_str(), run, ATTRIB_MANAGED);
651 
652  // Loop on TH2D to find which FEB is in error
653  // parity is used to extract binning range. Ok as this is uniform along different errors
654  int nbOfFEBErrors = 0;
655 
656  for (unsigned int ix=1; ix <= (summ.parity)->GetNbinsX();ix++){
657  for (unsigned int iy=1; iy <= (summ.parity)->GetNbinsY();iy++){
658  // Found a faulty FEB
659  // If more than 15 FEBs in error in a partition, ignore other FEBs (mandatory to avoid
660  // creation of 1500 histos when a run is bad!).
661  double binContent =0;
662  switch (errorType){
663  case 1:
664  binContent = (summ.parity)->GetBinContent(ix,iy);
665  break;
666  case 2:
667  binContent = (summ.BCID_2halves)->GetBinContent(ix,iy);
668  break;
669  case 3:
670  binContent = (summ.RADD_2halves)->GetBinContent(ix,iy);
671  break;
672  case 4:
673  binContent = (summ.EVTID_2halves)->GetBinContent(ix,iy);
674  break;
675  case 5:
676  binContent = (summ.SCACStatus)->GetBinContent(ix,iy);
677  break;
678  case 6:
679  binContent = (summ.scaOutOfRange)->GetBinContent(ix,iy);
680  break;
681  case 7:
682  binContent = (summ.gainMismatch)->GetBinContent(ix,iy);
683  break;
684  case 8:
685  binContent = (summ.typeMismatch)->GetBinContent(ix,iy);
686  break;
687  case 9:
688  binContent = (summ.badNbOfSamp)->GetBinContent(ix,iy);
689  break;
690  case 10:
691  binContent = (summ.zeroSamp)->GetBinContent(ix,iy);
692  break;
693  case 11:
694  binContent = (summ.checkSum)->GetBinContent(ix,iy);
695  break;
696  case 12:
697  binContent = (summ.missingHeader)->GetBinContent(ix,iy);
698  break;
699  case 13:
700  binContent = (summ.badGain)->GetBinContent(ix,iy);
701  break;
702  }
703 
704  if (binContent>0 && nbOfFEBErrors < 15){
705  HWIdentifier errorFebId = m_onlineHelper->feb_Id(barrel_ec,pos_neg,iy-1,ix);
706  IdentifierHash hashId = m_onlineHelper->feb_Hash(errorFebId);
707  if (!m_bfebIE[hashId]) {
708  m_febInError[hashId] = TH1F_LW::create((m_strHelper->feb_str(errorFebId)).c_str(),(m_strHelper->feb_str(errorFebId)+"(UNRELIABLE if # of faulty FEBs>15)").c_str(),13,0.5,13.5);
709  // tempHisto->Print();
710  (m_febInError[hashId]->GetXaxis())->SetBinLabel(1,"Parity");
711  (m_febInError[hashId]->GetXaxis())->SetBinLabel(2,"BCID");
712  (m_febInError[hashId]->GetXaxis())->SetBinLabel(3,"Sample Header");
713  (m_febInError[hashId]->GetXaxis())->SetBinLabel(4,"EVTID");
714  (m_febInError[hashId]->GetXaxis())->SetBinLabel(5,"SCAC status");
715  (m_febInError[hashId]->GetXaxis())->SetBinLabel(6,"Sca out of range");
716  (m_febInError[hashId]->GetXaxis())->SetBinLabel(7,"Gain mismatch");
717  (m_febInError[hashId]->GetXaxis())->SetBinLabel(8,"Type mismatch");
718  (m_febInError[hashId]->GetXaxis())->SetBinLabel(9,"# of samples");
719  (m_febInError[hashId]->GetXaxis())->SetBinLabel(10,"Empty data block");
720  (m_febInError[hashId]->GetXaxis())->SetBinLabel(11,"Checksum / block size");
721  (m_febInError[hashId]->GetXaxis())->SetBinLabel(12,"Missing header");
722  (m_febInError[hashId]->GetXaxis())->SetBinLabel(13,"Bad gain");
723  (m_febInError[hashId]->GetYaxis())->SetTitle("Number of errors");
724 
725  StatusCode sc = generalGroup.regHist(m_febInError[hashId]);
726  if (sc.isFailure()) ATH_MSG_ERROR( "Failed to register Feb histogram!" );
727  else m_bfebIE[hashId] = true;
728  }
729  m_febInError[hashId]->SetBinContent(errorType,binContent);
730  m_febInError[hashId]->SetEntries(m_eventsCounter);
731  nbOfFEBErrors++;
732  }
733  }
734  }
735 
736  fillYieldHistos(summ.LArAllErrors,summ.LArAllErrorsYield);
737 
738  return;
739 }
740 */
741 /*---------------------------------------------------------*/
742 unsigned int LArFEBMonAlg::returnPartition(int be,int pn,int ft,int sl) const {
743  // partitionNb_dE = 0 : EMBC / 1 : EMBA / 2 : EMECC / 3 : EMECA / 4 : HECC / 5 : HECA / 6 : FCALC / 7 : FCALA
744  unsigned int part = be*2+pn;
745  if (be == 1){
746  // This is a HEC FEB - Dirty method as IsHECOnlineFEBId is buggy!
747  if ((ft == 3 || ft == 10 || ft == 16 || ft == 22) && (sl > 2)) part = be*2+pn + 2;
748  if (ft == 6) part = be*2 + pn + 4; // This is FCAL FEB
749  }
750  return part;
751 }
752 
753 
LArG4FSStartPointFilter.part
part
Definition: LArG4FSStartPointFilter.py:21
AthMonitorAlgorithm::environment
Environment_t environment() const
Accessor functions for the environment.
Definition: AthMonitorAlgorithm.h:205
DataModel_detail::const_iterator
Const iterator class for DataVector/DataList.
Definition: DVLIterator.h:82
sendEI_SPB.ch
ch
Definition: sendEI_SPB.py:35
PlotCalibFromCool.ft
ft
Definition: PlotCalibFromCool.py:329
LArDSPThresholdsFlat::tQThrByHash
float tQThrByHash(const IdentifierHash &h) const
Definition: LArDSPThresholdsFlat.cxx:39
LArFEBMonAlg::returnPartition
unsigned int returnPartition(int be, int pn, int ft, int sl) const
Definition: LArFEBMonAlg.cxx:742
DeMoUpdate.lb0
def lb0
Definition: DeMoUpdate.py:1051
SG::ReadCondHandle
Definition: ReadCondHandle.h:44
ATH_MSG_INFO
#define ATH_MSG_INFO(x)
Definition: AthMsgStreamMacros.h:31
xAOD::uint32_t
setEventNumber uint32_t
Definition: EventInfo_v1.cxx:127
SG::ReadHandle
Definition: StoreGate/StoreGate/ReadHandle.h:70
LArFEBMonAlg::m_eventInfoDecorKey
SG::ReadDecorHandleKey< xAOD::EventInfo > m_eventInfoDecorKey
Definition: LArFEBMonAlg.h:57
LArFEBMonAlg::m_monGroupName
Gaudi::Property< std::string > m_monGroupName
Definition: LArFEBMonAlg.h:55
LArBadXCont
Conditions-Data class holding LAr Bad Channel or Bad Feb information.
Definition: LArBadChannelCont.h:28
LArFEBMonAlg::fillHistograms
virtual StatusCode fillHistograms(const EventContext &ctx) const override final
adds event to the monitoring histograms
Definition: LArFEBMonAlg.cxx:78
LArFEBMonAlg::fillErrorsSummary
void fillErrorsSummary(unsigned int partitNb_2, int ft, int slot, uint16_t error, bool lar_inerror, std::bitset< 13 > &rejectionBits, bool &currentFebStatus, bool &eventRejected) const
Definition: LArFEBMonAlg.cxx:419
skel.it
it
Definition: skel.GENtoEVGEN.py:396
LArBadFeb::deadReadout
bool deadReadout() const
FEB is not sending readout data, but the L1 trigger path is working.
Definition: LArBadFeb.h:33
AthMonitorAlgorithm::getTrigDecisionTool
const ToolHandle< Trig::TrigDecisionTool > & getTrigDecisionTool() const
Get the trigger decision tool member.
Definition: AthMonitorAlgorithm.cxx:189
LArOnlineID_Base::slot
int slot(const HWIdentifier id) const
Return the slot number of a hardware cell identifier: slot = [1,15] Slot-ID in top part of the crat...
Definition: LArOnlineID_Base.cxx:1957
Identifier::get_identifier32
Identifier32 get_identifier32() const
Get the 32-bit version Identifier, will be invalid if >32 bits needed.
LArEventBitInfo::DATACORRUPTED
@ DATACORRUPTED
Definition: LArEventBitInfo.h:14
LArDSPThresholdsFlat::good
bool good() const
Definition: LArDSPThresholdsFlat.h:27
LArFEBMonAlg::m_hdrContKey
SG::ReadHandleKey< LArFebHeaderContainer > m_hdrContKey
Definition: LArFEBMonAlg.h:45
LArFEBMonAlg::m_SubDetNames
Gaudi::Property< std::vector< std::string > > m_SubDetNames
Definition: LArFEBMonAlg.h:53
LArOnlineID_Base::feb_begin
id_iterator feb_begin() const
Returns an iterator pointing to a feb identifier collection.
Definition: LArOnlineID_Base.cxx:1906
LArDSPThresholdsFlat
Definition: LArDSPThresholdsFlat.h:17
SG::VarHandleKey::key
const std::string & key() const
Return the StoreGate ID for the referenced object.
Definition: AthToolSupport/AsgDataHandles/Root/VarHandleKey.cxx:141
xAOD::EventInfo_v1::timeStampNSOffset
uint32_t timeStampNSOffset() const
Nanosecond time offset wrt. the time stamp.
LArFEBMonAlg::m_onlineHelper
const LArOnlineID * m_onlineHelper
Definition: LArFEBMonAlg.h:63
SG::VarHandleKey::empty
bool empty() const
Test if the key is blank.
Definition: AthToolSupport/AsgDataHandles/Root/VarHandleKey.cxx:150
HWIdentifier
Definition: HWIdentifier.h:13
LArOnlineID_Base::barrel_ec
int barrel_ec(const HWIdentifier id) const
Return the position barrel or endcap of a hardware cell identifier: barrel_ec = [0,...
Definition: LArOnlineID_Base.cxx:1938
AthenaAttributeList.h
LArDSPThresholdsComplete::samplesThr
float samplesThr(const HWIdentifier chid) const
Definition: LArDSPThresholdsComplete.h:27
xAOD::EventInfo_v1::LAr
@ LAr
The LAr calorimeter.
Definition: EventInfo_v1.h:335
empty
bool empty(TH1 *h)
Definition: computils.cxx:294
LArBadXCont::status
LArBC_t status(const HWIdentifier channel) const
Query the status of a particular channel or FEB This is the main client access method.
LArFEBMonAlg::m_nbOfFebBlocksTotal
std::atomic< int > m_nbOfFebBlocksTotal
Definition: LArFEBMonAlg.h:75
LArFEBMonAlg::initialize
virtual StatusCode initialize() override final
initialize
Definition: LArFEBMonAlg.cxx:41
Identifier32::get_compact
value_type get_compact() const
Get the compact id.
Definition: Identifier32.h:44
AthenaPoolTestRead.sc
sc
Definition: AthenaPoolTestRead.py:27
LArEventBitInfo.h
LArTrigStreamMatching.h
AthCommonDataStore< AthCommonMsg< Gaudi::Algorithm > >::detStore
const ServiceHandle< StoreGateSvc > & detStore() const
The standard StoreGateSvc/DetectorStore Returns (kind of) a pointer to the StoreGateSvc.
Definition: AthCommonDataStore.h:95
Monitored::Collection
ValuesCollection< T > Collection(std::string name, const T &collection)
Declare a monitored (double-convertible) collection.
Definition: MonitoredCollection.h:38
xAOD::EventInfo_v1::Error
@ Error
The sub-detector issued an error.
Definition: EventInfo_v1.h:349
PlotCalibFromCool.ie
ie
Definition: PlotCalibFromCool.py:420
LArDSPThresholdsFlat::samplesThrByHash
float samplesThrByHash(const IdentifierHash &h) const
Definition: LArDSPThresholdsFlat.cxx:51
AthMonitorAlgorithm
Base class for Athena Monitoring Algorithms.
Definition: AthMonitorAlgorithm.h:36
LArFebErrorSummary::feb_error
uint16_t feb_error(HWIdentifier febid) const
get error for feb
Definition: LArFebErrorSummary.cxx:20
python.ZdcRecConfig.pn
pn
Definition: ZdcRecConfig.py:506
LArEventBitInfo::NOISEBURSTVETO
@ NOISEBURSTVETO
Definition: LArEventBitInfo.h:13
LArFEBMonAlg::m_run2DSPThresholdsKey
SG::ReadCondHandleKey< AthenaAttributeList > m_run2DSPThresholdsKey
Definition: LArFEBMonAlg.h:44
ATH_MSG_ERROR
#define ATH_MSG_ERROR(x)
Definition: AthMsgStreamMacros.h:33
python.BunchSpacingUtils.lb
lb
Definition: BunchSpacingUtils.py:88
LArOnlineID_Base::channel_range
id_range channel_range() const
Definition: LArOnlineID_Base.cxx:1932
xAOD::uint16_t
setWord1 uint16_t
Definition: eFexEMRoI_v1.cxx:88
lumiFormat.i
int i
Definition: lumiFormat.py:85
LArDSPThresholdsComplete.h
A LArRawConditionsContainer holding thresholds used by the DSP.
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
LArBadFeb::deadAll
bool deadAll() const
FEB is completely missing, e.g. powered off.
Definition: LArBadFeb.h:30
LArOnlineID_Base::pos_neg
int pos_neg(const HWIdentifier id) const
Return the side of a hardware cell identifier pos_neg = [0,1] positive-side or negative-side Barrel...
Definition: LArOnlineID_Base.cxx:1950
ATH_CHECK
#define ATH_CHECK
Definition: AthCheckMacros.h:40
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
xAOD::EventInfo_v1::lumiBlock
uint32_t lumiBlock() const
The current event's luminosity block number.
SG::ReadHandle::isValid
virtual bool isValid() override final
Can the handle be successfully dereferenced?
LArDSPThresholdsComplete::tQThr
float tQThr(const HWIdentifier chid) const
Definition: LArDSPThresholdsComplete.h:26
LArDSPThresholdsFlat.h
LArFEBMonAlg::m_streams
Gaudi::Property< std::vector< std::string > > m_streams
Definition: LArFEBMonAlg.h:51
Trig::ChainGroup
Definition: ChainGroup.h:51
LArOnlineID_Base::feb_end
id_iterator feb_end() const
Definition: LArOnlineID_Base.cxx:1911
AthMonitorAlgorithm::m_tools
ToolHandleArray< GenericMonitoringTool > m_tools
Array of Generic Monitoring Tools.
Definition: AthMonitorAlgorithm.h:338
AthMonitorAlgorithm::Environment_t::online
@ online
LArFEBMonAlg::m_ignoreMissingHeaderPS
Gaudi::Property< bool > m_ignoreMissingHeaderPS
Definition: LArFEBMonAlg.h:48
LArFEBMonAlg::m_histoGroups
std::vector< std::map< std::string, int > > m_histoGroups
Definition: LArFEBMonAlg.h:60
name
std::string name
Definition: Control/AthContainers/Root/debug.cxx:221
LArBadFeb::ignoreErrors
unsigned int ignoreErrors() const
Definition: LArBadFeb.h:65
LArOnlineID_Base::channelHashMax
size_type channelHashMax(void) const
Define channel hash tables max size.
Definition: LArOnlineID_Base.cxx:1897
LArBadFeb
Definition: LArBadFeb.h:10
LArFEBMonAlg::plotMaskedFEB
void plotMaskedFEB() const
Definition: LArFEBMonAlg.cxx:599
LArFEBMonAlg::m_excoscalo
Gaudi::Property< std::vector< std::string > > m_excoscalo
Definition: LArFEBMonAlg.h:50
SG::CondHandleKey::initialize
StatusCode initialize(bool used=true)
LArBadFeb::inError
bool inError() const
FEB has readout errors, cannot be used.
Definition: LArBadFeb.h:36
LArFEBMonAlg::m_partitions
Gaudi::Property< std::vector< std::string > > m_partitions
Definition: LArFEBMonAlg.h:52
LArBadFeb::deactivatedInOKS
bool deactivatedInOKS() const
Deactivated in OKS.
Definition: LArBadFeb.h:39
xAOD::EventInfo_v1::streamTags
const std::vector< StreamTag > & streamTags() const
Get the streams that the event was put in.
Definition: EventInfo_v1.cxx:283
AthMonitorAlgorithm::initialize
virtual StatusCode initialize() override
initialize
Definition: AthMonitorAlgorithm.cxx:18
DataVector::end
const_iterator end() const noexcept
Return a const_iterator pointing past the end of the collection.
LArFEBMonAlg::LArFEBMonAlg
LArFEBMonAlg(const std::string &name, ISvcLocator *pSvcLocator)
Definition: LArFEBMonAlg.cxx:29
LArOnlineID_Base::feedthrough
int feedthrough(const HWIdentifier id) const
Return the feedthrough of a hardware cell identifier : feedthrough = [0,31] Barrel - A/C side or H/...
Definition: LArOnlineID_Base.cxx:1944
python.CaloScaleNoiseConfig.str
str
Definition: CaloScaleNoiseConfig.py:78
ATH_MSG_WARNING
#define ATH_MSG_WARNING(x)
Definition: AthMsgStreamMacros.h:32
xAOD::EventInfo_v1::level1TriggerType
uint16_t level1TriggerType() const
The Level-1 trigger type.
xAOD::EventInfo_v1::errorState
EventFlagErrorState errorState(EventFlagSubDet subDet) const
Get the error state for a particular sub-detector.
Definition: EventInfo_v1.cxx:817
LArFEBMonAlg.h
xAOD::EventInfo_v1::timeStamp
uint32_t timeStamp() const
POSIX time in seconds from 1970. January 1st.
xAOD::EventInfo_v1::isEventFlagBitSet
bool isEventFlagBitSet(EventFlagSubDet subDet, size_t bit) const
Check one particular bit of one particular sub-detector.
Definition: EventInfo_v1.cxx:703
ReadDecorHandle.h
Handle class for reading a decoration on an object.
LArFEBMonAlg::m_ignoreMissingHeaderEMB
Gaudi::Property< bool > m_ignoreMissingHeaderEMB
Definition: LArFEBMonAlg.h:47
str
Definition: BTagTrackIpAccessor.cxx:11
skel.l1
l1
Definition: skel.GENtoEVGEN.py:398
Monitored::Scalar
Declare a monitored scalar variable.
Definition: MonitoredScalar.h:34
Trig::ChainGroup::getListOfTriggers
std::vector< std::string > getListOfTriggers() const
Definition: ChainGroup.cxx:467
LArEventBitInfo::DATACORRUPTEDVETO
@ DATACORRUPTEDVETO
Definition: LArEventBitInfo.h:15
IdentifierHash
This is a "hash" representation of an Identifier. This encodes a 32 bit index which can be used to lo...
Definition: IdentifierHash.h:25
LArFEBMonAlg::m_lArFebErrorSummaryKey
SG::ReadHandleKey< LArFebErrorSummary > m_lArFebErrorSummaryKey
Definition: LArFEBMonAlg.h:46
LArMon::trigStreamMatching
std::vector< unsigned > trigStreamMatching(const std::vector< std::string > &streamsFromJobO, const std::vector< xAOD::EventInfo::StreamTag > &streamInEvent)
Definition: LArTrigStreamMatching.cxx:7
sizeNorm
const unsigned sizeNorm
Definition: LArFEBMonAlg.cxx:26
SG::AllowEmpty
@ AllowEmpty
Definition: StoreGate/StoreGate/VarHandleKey.h:30
error
Definition: IImpactPoint3dEstimator.h:70
PlotCalibFromCool.be
be
Definition: PlotCalibFromCool.py:398
DataVector::size
size_type size() const noexcept
Returns the number of elements in the collection.
readCCLHist.float
float
Definition: readCCLHist.py:83
LArFEBMonAlg::m_BFKey
SG::ReadCondHandleKey< LArBadFebCont > m_BFKey
Definition: LArFEBMonAlg.h:40
DataVector::begin
const_iterator begin() const noexcept
Return a const_iterator pointing at the beginning of the collection.
LArFEBMonAlg::m_run1DSPThresholdsKey
SG::ReadCondHandleKey< LArDSPThresholdsComplete > m_run1DSPThresholdsKey
Definition: LArFEBMonAlg.h:42