ATLAS Offline Software
TileDQFragMonitorAlgorithm.cxx
Go to the documentation of this file.
1 /*
2  Copyright (C) 2002-2024 CERN for the benefit of the ATLAS collaboration
3 */
4 
10 
11 #include "StoreGate/ReadHandle.h"
13 
14 
16 
18 
19  ATH_MSG_INFO("in initialize()");
20 
23 
25 
26  ATH_CHECK( m_cablingSvc.retrieve() );
27  m_cabling = m_cablingSvc->cablingService();
28 
34  ATH_CHECK( m_eventInfoTileStatusKey.initialize() );
35 
36  using Tile = TileCalibUtils;
37 
38  m_errorsGroups = Monitored::buildToolMap<std::vector<int>>(m_tools, "TileDigiErrors",
39  Tile::MAX_ROS - 1, Tile::MAX_DRAWER);
41  m_errorsInLBGroups = Monitored::buildToolMap<std::vector<int>>(m_tools, "TileDigiErrorsInLB",
42  Tile::MAX_ROS - 1, Tile::MAX_DRAWER);
43  }
44 
45  m_errorsVsLBGroups = Monitored::buildToolMap<std::vector<int>>(m_tools, "FracTileDigiErrors",
46  Tile::MAX_ROS - 1, Tile::MAX_DRAWER);
47 
48  m_badChannelJumpGroups = Monitored::buildToolMap<int>(m_tools, "TileBadChannelsJumpMap", Tile::MAX_ROS - 1);
49  m_badChannelJumpNotMaskGroups = Monitored::buildToolMap<int>(m_tools, "TileBadChannelsJumpNotMaskMap", Tile::MAX_ROS - 1);
50 
51  m_badChannelNegGroups = Monitored::buildToolMap<int>(m_tools, "TileBadChannelsNegMap", Tile::MAX_ROS - 1);
52  m_badChannelNegNotMaskGroups = Monitored::buildToolMap<int>(m_tools, "TileBadChannelsNegNotMaskMap", Tile::MAX_ROS - 1);
53 
54  m_badPulseQualityGroups = Monitored::buildToolMap<int>(m_tools, "TileBadPulseQualityMap", Tile::MAX_ROS - 1);
55  m_negativeEnergyGroups = Monitored::buildToolMap<int>(m_tools, "TileNegativeEnergyMap", Tile::MAX_ROS - 1);
56 
59  m_ADCmaskValueMinusEps = m_tileInfo->ADCmaskValue() - 0.01; // indicates channels which were masked in background dataset
60 
61  return StatusCode::SUCCESS;
62 }
63 
64 
65 StatusCode TileDQFragMonitorAlgorithm::fillHistograms( const EventContext& ctx ) const {
66 
67  using Tile = TileCalibUtils;
68 
69  // In case you want to measure the execution time
70  auto timer = Monitored::Timer("TIME_execute");
71 
72  const xAOD::EventInfo* eventInfo = GetEventInfo(ctx).get();
73 
74  const TileDQstatus* dqStatus = SG::makeHandle (m_DQstatusKey, ctx).get();
75  const TileDCSState* dcsState = m_checkDCS ? SG::ReadCondHandle(m_DCSStateKey, ctx).cptr() : nullptr;
77  ATH_CHECK( emScale.isValid() );
78 
80  ATH_CHECK( badChannels.isValid() );
81 
82  auto lumiBlock = Monitored::Scalar<int>("lumiBlock", eventInfo->lumiBlock());
83 
84  auto monitoredROS = Monitored::Scalar<int>("ROS", -1);
85  auto monitoredModule = Monitored::Scalar<int>("module", -1);
86  auto monitoredChannel = Monitored::Scalar<int>("channel", -1);
87 
88  std::vector<int> dmus;
89  auto drawerDMUs = Monitored::Collection("DMU", dmus);
90 
91  std::vector<int> errors;
92  auto errorsInDMUs = Monitored::Collection("Error", errors);
93 
94  const int Trig_b7(7);
95 
96  unsigned int tileEventInfoFlag = eventInfo->eventFlags(xAOD::EventInfo::Tile);
97  bool isTileErrorState = (eventInfo->errorState(xAOD::EventInfo::Tile) == xAOD::EventInfo::Error);
98  int nBadConsecutiveModules = isTileErrorState ? MAX_DMU : ((tileEventInfoFlag >> MAX_DMU) & 0xF);
99 
100  auto monitoredConsecutiveBad = Monitored::Scalar<int>("TileConsecutiveBad", nBadConsecutiveModules);
101 
102  if (isTileErrorState) {
103  fill("TileEventsWithErrEventInfoLB", lumiBlock);
104  }
105 
106  fill("TileConsecutiveBadModules", monitoredConsecutiveBad);
107  fill("TileConsecutiveBadModulesLB", monitoredConsecutiveBad, lumiBlock);
108 
109  const TileDigitsContainer* digitsContainer{nullptr};
110  if (!m_digitsContainerKey.empty()) {
111  digitsContainer = SG::makeHandle(m_digitsContainerKey, ctx).get();
112  }
113 
114  uint32_t l1TriggerType(eventInfo->level1TriggerType());
115 
116  bool physicRun = (l1TriggerType == 0) || (((l1TriggerType >> Trig_b7) & 1) == 1);
117  if (physicRun && !m_rawChannelContainerKey.empty()) {
118 
120 
121  TileRawChannelUnit::UNIT rawChannelUnit = rawChannelContainer->get_unit();
122  if (rawChannelUnit != TileRawChannelUnit::ADCcounts
123  && rawChannelUnit != TileRawChannelUnit::OnlineADCcounts ) {
124 
125  ATH_MSG_WARNING( "Tile raw channel units are not ADC counts => will not check neagative amplitudes!" );
126  } else {
127 
128  for (const TileRawChannelCollection* rawChannelCollection : *rawChannelContainer) {
129 
130  int fragId = rawChannelCollection->identify();
131  int drawer = (fragId & 0x3F); // range 0-63
132  int ros = fragId >> 8; // range 1-4
133  unsigned int drawerIdx = TileCalibUtils::getDrawerIdx(ros, drawer);
134 
135  monitoredModule = drawer;
136  clearDigiError(dmus, errors);
137  for (const TileRawChannel* rawChannel : *rawChannelCollection) {
138 
139  HWIdentifier adcId = rawChannel->adc_HWID();
140  int channel = m_tileHWID->channel(adcId);
141  int gain = m_tileHWID->adc(adcId);
142 
143  // By convetion errors are saved in pedestal as 100000 + 10000*error
144  float pedestal = rawChannel->pedestal();
145  float quality = std::abs(rawChannel->quality());
146  float amplitude = rawChannel->amplitude();
147  float time = rawChannel->uncorrTime(); // take uncorrected time (if available)
148 
149  monitoredChannel = channel;
150 
151  if (dqStatus->isChanDQgood(ros, drawer, channel)
152  && !(badChannels->getAdcStatus(adcId).isBad()
153  || (m_checkDCS && dcsState->isStatusBad(ros, drawer, channel)))) {
154 
155  if (pedestal > 80000. || quality > m_qualityCut) {
156  fill(m_tools[m_badPulseQualityGroups[ros - 1]], monitoredModule, monitoredChannel);
157  }
158 
159  int pmt;
160  int index;
162  if (index >= 0) { // connected channel, exluding MBTS and E4'
163 
164  if (quality > m_qualityCut) {
165  bool overflow = (pedestal > 10000. + m_ADCmaskValueMinusEps);
166  if (!(overflow && gain == TileID::LOWGAIN && amplitude > 0.
167  && time > m_timeMinThresh && time < m_timeMaxThresh)) { // overflow in low gain is not masked
168  int dmu = channel / 3;
170  }
171  }
172 
173  float minEnergy = (m_tileID->sample(cell_id) == TileID::SAMP_E) ? m_minGapEnergy : m_minChannelEnergy;
174  float energy = emScale->calibrateChannel(drawerIdx, channel, gain, amplitude, rawChannelUnit, TileRawChannelUnit::MegaElectronVolts);
175  if (energy < minEnergy) {
176  int dmu = channel / 3;
178 
179  fill(m_tools[m_negativeEnergyGroups[ros - 1]], monitoredModule, monitoredChannel);
180  }
181  }
182  }
183 
184  if (amplitude < ((gain) ? m_negativeAmplitudeCutHG : m_negativeAmplitudeCutLG)) {
185 
186  // Channel number divided by 2
187  int channelDividedBy2 = channel >> 1;
188 
189  if (!(m_skipGapCells && ros > 2 // Choose extended barrel and channels: 0,1, 12,13, 18,19
190  && (channelDividedBy2 == 0 || channelDividedBy2 == 6 || channelDividedBy2 == 9))
191  && !(m_skipMasked && badChannels->getAdcStatus(adcId).isBad())) {
192 
193  fill(m_tools[m_badChannelNegGroups[ros - 1]], monitoredModule, monitoredChannel);
194 
195  if (!(m_checkDCS && !dcsState->isStatusBad(ros, drawer))
196  && dqStatus->isChanDQgood(ros, drawer, channel)) {
197 
198  fill(m_tools[m_badChannelNegNotMaskGroups[ros - 1]], monitoredModule, monitoredChannel);
199 
200  if (pedestal > 100000. && digitsContainer) {
201 
202  IdentifierHash hash = static_cast<IdentifierHash>(rawChannelContainer->hashFunc()(fragId));
203  const TileDigitsCollection* digitsCollection = digitsContainer->indexFindPtr(hash);
204 
205  if (digitsCollection) {
206 
207  for (const TileDigits* tile_digits : *digitsCollection) {
208 
209  if (m_tileHWID->channel(tile_digits->adc_HWID()) == channel) {
210 
211  msg(MSG::INFO) << "LB " << eventInfo->lumiBlock()
212  << " Evt " << eventInfo->eventNumber()
213  << " " << Tile::getDrawerString(ros, drawer)
214  << std::setfill(' ') << std::setw(3) << channel
215  << ((gain) ? " HG" : " LG") << " negative amplitude: "
216  << std::setprecision(2) << std::fixed << std::setw(7)
217  << amplitude << " Samples: " << std::setprecision(0);
218 
219  std::vector<float> samples = tile_digits->samples();
220  for (float sample : samples) {
221  msg(MSG::INFO) << sample << " ";
222  }
223 
224  msg(MSG::INFO) << " error = " << TileRawChannelBuilder::BadPatternName(pedestal) << endmsg;
225  }
226  }
227  }
228  }
229  }
230  }
231  }
232  }
233  if (!errors.empty()) {
234  fill(m_tools[m_errorsGroups[ros - 1][drawer]], drawerDMUs, errorsInDMUs);
235  }
236  }
237  }
238  }
239 
240 
241  if (digitsContainer) {
242 
243 
244  for (const TileDigitsCollection* digitsCollection : *digitsContainer) {
245 
246  int fragId = digitsCollection->identify();
247  int drawer = (fragId & 0x3F); // range 0-63
248  int ros = fragId >> 8; // range 1-4
249 
250  monitoredROS = ros;
251  monitoredModule = drawer;
252 
253  if (l1TriggerType != digitsCollection->getLvl1Type()) {
254  fill("TileMismatchedL1TriggerType", monitoredModule, monitoredROS);
255  }
256 
257  if (l1TriggerType == 0x82) {
258 
259  unsigned int nBadOrDisconnectedChannels(0);
260  for (unsigned int channel = 0; channel < Tile::MAX_CHAN; ++channel) {
262  if (badChannels->getChannelStatus(channel_id).isBad()
264  ++nBadOrDisconnectedChannels;
265  }
266  }
267 
268  unsigned int nRequiredChannels(Tile::MAX_CHAN - nBadOrDisconnectedChannels);
269  if (digitsCollection->size() < nRequiredChannels) {
270  fill("TileNoAllDigits", monitoredModule, monitoredROS);
271  ATH_MSG_VERBOSE("No All channels with digits (Trigger Type: 0x82) in module "
272  << Tile::getDrawerString(ros, drawer)
273  << ", present channels: " << digitsCollection->size()
274  << ", required channels: " << nRequiredChannels);
275  }
276 
277  }
278 
279  int error;
280  float minSample;
281  float maxSample;
282 
283  for (const TileDigits* tile_digits : *digitsCollection) {
284 
285  clearDigiError(dmus, errors);
286  uint16_t corruptedData[MAX_CORRUPTED_ERROR] = {0u};
287 
288  HWIdentifier adcId = tile_digits->adc_HWID();
289  int channel = m_tileHWID->channel(adcId);
290  int gain = m_tileHWID->adc(adcId);
291 
292  monitoredChannel = channel;
293 
294  error = TileRawChannelBuilder::CorruptedData(ros, drawer, channel, gain, tile_digits->samples(), minSample, maxSample, m_ADCmaxMinusEps, m_ADCmaskValueMinusEps);
295 
296  if ( (error > 0) &&
297  !(m_cabling->isDisconnected(ros, drawer, channel) || badChannels->getAdcStatus(adcId).isBad()) ) {
298 
299  if (msgLvl(MSG::DEBUG)) {
300  msg(MSG::DEBUG) << "LB " << eventInfo->lumiBlock()
301  << " Evt " << eventInfo->eventNumber()
302  << " " << Tile::getDrawerString(ros, drawer)
303  << std::setfill(' ') << std::setw(3) << channel
304  << ((gain) ? " HG" : " LG")
305  << " Samples: ";
306 
307  std::vector<float> samples = tile_digits->samples();
308  for (float sample : samples) {
309  msg(MSG::DEBUG) << sample << " ";
310  }
311  msg(MSG::DEBUG) << " error = " << TileRawChannelBuilder::BadPatternName(100000. + error * 10000) << endmsg;
312  }
313 
314  fill(m_tools[m_badChannelJumpGroups[ros - 1]], monitoredModule, monitoredChannel);
315 
316  if (!(m_checkDCS && dcsState->isStatusBad(ros, drawer)) && dqStatus->isChanDQgood(ros, drawer, channel)) {
317 
318  fill(m_tools[m_badChannelJumpNotMaskGroups[ros - 1]], monitoredModule, monitoredChannel);
319 
320  if (error <= MAX_CORRUPTED_ERROR) {
321  corruptedData[error - 1] |= 1u << (unsigned int) (channel / 3);
322  }
323  }
324  }
325 
326  bool fillCorruptedData(false);
327  for (int error = 0; error < MAX_CORRUPTED_ERROR; ++error) {
328  if (corruptedData[error] > 0u) {
329  fillCorruptedData = true;
330  for (unsigned int dmu = 0u; dmu < 16u; ++dmu) {
331  if (corruptedData[error] & (1u << dmu)) {
332  setDigiError(dmus, errors, dmu, MAX_DIGI_ERROR + error);
333  }
334  }
335  }
336  }
337 
338  if (fillCorruptedData) {
339  fill(m_tools[m_errorsGroups[ros - 1][drawer]], drawerDMUs, errorsInDMUs);
340  }
341  }
342  }
343  }
344 
345  std::vector<int> rosWithGloblaCRC;
346  std::vector<int> drawerWithGlobalCRC;
347  auto fractionOfBadDMUs = Monitored::Scalar<float>("fractionOfBadDMUs", 0.0);
348 
349  for (unsigned int ros = 1; ros < Tile::MAX_ROS; ++ros) {
350  for (unsigned int drawer = 0; drawer < Tile::MAX_DRAWER; ++drawer) {
351 
352  clearDigiError(dmus, errors);
353  bool isGoodModuleDCS(true);
354 
355  if (m_checkDCS && dcsState->isStatusBad(ros, drawer)) {
356 
357  fractionOfBadDMUs = -1.0; // By convention
358  isGoodModuleDCS = false;
359 
360  }
361 
362  int status = dqStatus->checkGlobalErr(ros, drawer, 0);
364  if (status & (TileFragStatus::ALL_FF | TileFragStatus::ALL_00)) {
365  error = DUMMY_FRAG;
366  } else if (status & (TileFragStatus::NO_FRAG | TileFragStatus::NO_ROB)) {
368  }
369 
370  float nBadNotMaskedDMUs = 0;
371 
372  for (int dmu = 0; dmu < MAX_DMU; ++dmu) { // loop over dmus
373  int channel = 3 * dmu;
374 
375  bool isMaskedDMU = m_ignoreNoRecoFragError ? (error == NO_RECO_FRAG) : false;
376 
377  TileBchStatus channelStatus0 = badChannels->getChannelStatus( m_tileHWID->channel_id(ros, drawer, channel) );
378  TileBchStatus channelStatus1 = badChannels->getChannelStatus( m_tileHWID->channel_id(ros, drawer, channel + 1) );
379  TileBchStatus channelStatus2 = badChannels->getChannelStatus( m_tileHWID->channel_id(ros, drawer, channel + 2) );
380 
381  bool specialEB; // special treatment of EBA15, EBC18
382 
383  if ((ros == 3 && drawer == 14) || (ros == 4 && drawer == 17)) {
384  specialEB = true; // EBA15, EBC18
385  } else {
386  specialEB = false;
387  }
388 
389  if ((channelStatus0.isBad() && channelStatus1.isBad() && channelStatus2.isBad())
390  // Check disconnected channels for EBs
391  || ((ros > 2 && ((channel == 18 && !specialEB) || channel == 33)) && channelStatus2.isBad())
392  // Check disconnected channels for LBs
393  || ((ros < 3 && channel == 30) && channelStatus2.isBad())
394  // Check disconnected channels for LBs
395  || ((ros < 3 && channel == 42) && channelStatus0.isBad() && channelStatus2.isBad())
396  // Check void DMUs for EBs
397  || (ros > 2 && (channel == 24 || channel == 27 || channel == 42 || channel == 45))
398  || (specialEB && channel == 0) // Check void DMU 0 for EBA15, EBC18
399  // Check disconnected PMT of DMU 1 for EBA15, EBC18
400  || ((specialEB && channel == 3) && channelStatus1.isBad() && channelStatus2.isBad())) {
401 
402  setDigiError(dmus, errors, dmu, MASKED);
403  isMaskedDMU = true;
404  }
405 
406  if (isGoodModuleDCS) {
407 
408  if (m_checkDCS
409  && ((dcsState->isStatusBad(ros, drawer, channel)
410  && !channelStatus0.contains(TileBchPrbs::NoHV) && !channelStatus0.contains(TileBchPrbs::WrongHV))
411  || (dcsState->isStatusBad(ros, drawer, channel + 1)
412  && !channelStatus1.contains(TileBchPrbs::NoHV) && !channelStatus1.contains(TileBchPrbs::WrongHV))
413  || (dcsState->isStatusBad(ros, drawer, channel + 2)
414  && !channelStatus2.contains(TileBchPrbs::NoHV) && !channelStatus2.contains(TileBchPrbs::WrongHV)))) {
415 
416  setDigiError(dmus, errors, dmu, ANY_CH_BAD_HV);
417  }
418 
419  if (dqStatus->isChanDQgood(ros, drawer, channel)) {
420  setDigiError(dmus, errors, dmu, OK);
421  } else {
422 
423  if (!(isMaskedDMU
424  || (ros > 2 && (dmu == 8 || dmu == 9 || dmu == 14 || dmu == 15))
425  || (specialEB && dmu == 0))) {
426 
427  ++nBadNotMaskedDMUs;
428  }
429 
430  if (error != OK) {
431  setDigiError(dmus, errors, dmu, error);
432  } else if (dqStatus->checkHeaderFormatErr(ros, drawer, dmu, 0) != 0) {
433  // In case of format errors, we only fill this one
434  setDigiError(dmus, errors, dmu, HEADER_FORM);
435  } else {
436  if (dqStatus->checkHeaderParityErr(ros, drawer, dmu, 0) != 0) {
437  setDigiError(dmus, errors, dmu, HEADER_PAR);
438  }
439  if (dqStatus->checkMemoryParityErr(ros, drawer, dmu, 0) != 0) {
440  setDigiError(dmus, errors, dmu, MEMO_PAR);
441  }
442  if (dqStatus->checkFE_CRCErr(ros, drawer, dmu, 0) != 0) {
443  setDigiError(dmus, errors, dmu, FE_CRC);
444  }
445  if (dqStatus->checkROD_CRCErr(ros, drawer, dmu, 0) != 0) {
446  setDigiError(dmus, errors, dmu, ROD_CRC);
447  }
448  if (dqStatus->checkBCIDErr(ros, drawer, dmu, 0) != 0) {
449  setDigiError(dmus, errors, dmu, BCID);
450  }
451  if (dqStatus->checkSampleFormatErr(ros, drawer, dmu, 0) != 0) {
452  setDigiError(dmus, errors, dmu, SAMPLE_FORM);
453  }
454  if (dqStatus->checkSampleParityErr(ros, drawer, dmu, 0) != 0) {
455  setDigiError(dmus, errors, dmu, SAMPLE_PAR);
456  }
457  if (dqStatus->checkDoubleStrobeErr(ros, drawer, dmu, 0) != 0) {
458  setDigiError(dmus, errors, dmu, DOUBLE_STB);
459  }
460  if (dqStatus->checkSingleStrobeErr(ros, drawer, dmu, 0) != 0) {
461  setDigiError(dmus, errors, dmu, SINGLE_STB);
462  }
463  if (dqStatus->checkGlobalCRCErr(ros, drawer, 0) != 0) {
464  setDigiError(dmus, errors, dmu, GLOBAL_CRC);
465  }
466  }
467  }
468  } else {
469  setDigiError(dmus, errors, dmu, ALL_M_BAD_DCS);
470  }
471  } // loop over DMUs
472 
473  if (isGoodModuleDCS) {
474  fractionOfBadDMUs = nBadNotMaskedDMUs / MAX_DMU;
475  }
476 
477  // Keep the number of processed events in underflow
478  // in histograms with DMU header errors
479  setDigiError(dmus, errors, -1, OK);
480  fill(m_tools[m_errorsGroups[ros - 1][drawer]], drawerDMUs, errorsInDMUs);
481  if (m_fillDigiErrorsInLB) {
482  fill(m_tools[m_errorsInLBGroups[ros - 1][drawer]], drawerDMUs, errorsInDMUs);
483  }
484 
485  fill(m_tools[m_errorsVsLBGroups[ros - 1][drawer]], lumiBlock, fractionOfBadDMUs);
486 
487  if (dqStatus->checkGlobalCRCErr(ros, drawer, 0) != 0) {
488  rosWithGloblaCRC.push_back(ros);
489  drawerWithGlobalCRC.push_back(drawer);
490  }
491  }
492  }
493 
494  if (!rosWithGloblaCRC.empty()) {
495  auto monModule = Monitored::Collection("module", drawerWithGlobalCRC);
496  auto monROS = Monitored::Collection("ROS", rosWithGloblaCRC);
497  fill("TileBadGlobalCRC", monModule, monROS);
498  }
499 
500  fill("TileDQFragMonExecuteTime", timer);
501 
502  return StatusCode::SUCCESS;
503 }
504 
505 
506 void TileDQFragMonitorAlgorithm::setDigiError(std::vector<int>& dmus, std::vector<int>& errors,
507  int dmu, int error) const {
508  dmus.push_back(dmu);
509  errors.push_back(error);
510 }
511 
512 
513 void TileDQFragMonitorAlgorithm::clearDigiError(std::vector<int>& dmus, std::vector<int>& errors) const {
514  dmus.clear();
515  errors.clear();
516 }
517 
python.PyKernel.retrieve
def retrieve(aClass, aKey=None)
Definition: PyKernel.py:110
TileDQFragMonitorAlgorithm::MEMO_PAR
@ MEMO_PAR
Definition: TileDQFragMonitorAlgorithm.h:45
TileDQFragMonitorAlgorithm::m_infoName
std::string m_infoName
Definition: TileDQFragMonitorAlgorithm.h:139
TileRawChannelContainer
Definition: TileRawChannelContainer.h:13
TileRawChannelBuilder::CorruptedData
static int CorruptedData(int ros, int drawer, int channel, int gain, const std::vector< float > &digits, float &dmin, float &dmax, float ADCmaxMinusEps, float ADCmaskValueMinusEps)
Definition: TileRawChannelBuilder.cxx:723
TileDQFragMonitorAlgorithm::m_skipMasked
Gaudi::Property< bool > m_skipMasked
Definition: TileDQFragMonitorAlgorithm.h:54
TileDQFragMonitorAlgorithm::m_ADCmaskValueMinusEps
float m_ADCmaskValueMinusEps
indicates channels which were masked in background dataset
Definition: TileDQFragMonitorAlgorithm.h:142
TileDQFragMonitorAlgorithm::m_ADCmaxMinusEps
float m_ADCmaxMinusEps
Definition: TileDQFragMonitorAlgorithm.h:141
TileDQFragMonitorAlgorithm::MAX_DMU
static const int MAX_DMU
Definition: TileDQFragMonitorAlgorithm.h:134
TileDQstatus::checkBCIDErr
int checkBCIDErr(int partition, int drawer, int dmu, int gain) const
returns 1 if DMU has BCID mismatch between DMU and ROD Since BCID errors in the DQ fragment are det...
Definition: TileDQstatus.h:100
TileDQFragMonitorAlgorithm::m_negativeAmplitudeCutHG
Gaudi::Property< float > m_negativeAmplitudeCutHG
Definition: TileDQFragMonitorAlgorithm.h:60
TileDQFragMonitorAlgorithm::m_skipGapCells
Gaudi::Property< bool > m_skipGapCells
Definition: TileDQFragMonitorAlgorithm.h:55
plotting.yearwise_efficiency.channel
channel
Definition: yearwise_efficiency.py:24
SG::ReadCondHandle
Definition: ReadCondHandle.h:44
ATH_MSG_INFO
#define ATH_MSG_INFO(x)
Definition: AthMsgStreamMacros.h:31
xAOD::EventInfo_v1::eventNumber
uint64_t eventNumber() const
The current event's event number.
TileDQFragMonitorAlgorithm::NO_RECO_FRAG
@ NO_RECO_FRAG
Definition: TileDQFragMonitorAlgorithm.h:47
CaloCellPos2Ntuple.int
int
Definition: CaloCellPos2Ntuple.py:24
TileDQFragMonitorAlgorithm::setDigiError
void setDigiError(std::vector< int > &dmus, std::vector< int > &errors, int dmu, int error) const
Definition: TileDQFragMonitorAlgorithm.cxx:506
xAOD::uint32_t
setEventNumber uint32_t
Definition: EventInfo_v1.cxx:127
TileDQstatus::isChanDQgood
bool isChanDQgood(int partition, int drawer, int ch) const
returns status of single channel (if bigain, returns AND of ADCs' status
Definition: TileDQstatus.cxx:240
index
Definition: index.py:1
TileDQFragMonitorAlgorithm::OK
@ OK
Definition: TileDQFragMonitorAlgorithm.h:45
TileDQFragMonitorAlgorithm::m_timeMinThresh
Gaudi::Property< float > m_timeMinThresh
Definition: TileDQFragMonitorAlgorithm.h:69
TileDQFragMonitorAlgorithm::BIG_NEGATIVE_AMPLITUDE
@ BIG_NEGATIVE_AMPLITUDE
Definition: TileDQFragMonitorAlgorithm.h:136
ReadBchFromCool.pmt
pmt
Definition: ReadBchFromCool.py:62
CaloCondBlobAlgs_fillNoiseFromASCII.gain
gain
Definition: CaloCondBlobAlgs_fillNoiseFromASCII.py:110
TileBchStatus
Class holding bad channel problems.
Definition: TileBchStatus.h:20
Tile_Base_ID::sample
int sample(const Identifier &id) const
Definition: Tile_Base_ID.cxx:171
TileDQFragMonitorAlgorithm::m_badChannelNegNotMaskGroups
std::vector< int > m_badChannelNegNotMaskGroups
Definition: TileDQFragMonitorAlgorithm.h:125
TileDQFragMonitorAlgorithm::TileDigiErrors
TileDigiErrors
Definition: TileDQFragMonitorAlgorithm.h:45
SG::ReadCondHandle::isValid
bool isValid()
Definition: ReadCondHandle.h:206
TileDQFragMonitorAlgorithm::HEADER_PAR
@ HEADER_PAR
Definition: TileDQFragMonitorAlgorithm.h:45
AthCommonMsg< Gaudi::Algorithm >::msgLvl
bool msgLvl(const MSG::Level lvl) const
Definition: AthCommonMsg.h:30
TileInfo.h
TileCablingService::h2s_cell_id_index
Identifier h2s_cell_id_index(const HWIdentifier &id, int &index, int &pmt) const
Definition: TileCablingService.cxx:2418
TileCalibUtils.h
TileRawChannelUnit::OnlineADCcounts
@ OnlineADCcounts
Definition: TileRawChannelUnit.h:21
TileDQFragMonitorAlgorithm::initialize
virtual StatusCode initialize() override
initialize
Definition: TileDQFragMonitorAlgorithm.cxx:15
Tile_Base_ID::SAMP_E
@ SAMP_E
Definition: Tile_Base_ID.h:55
ATH_MSG_VERBOSE
#define ATH_MSG_VERBOSE(x)
Definition: AthMsgStreamMacros.h:28
TileDQFragMonitorAlgorithm::m_tileID
const TileID * m_tileID
Definition: TileDQFragMonitorAlgorithm.h:130
TileDigitsContainer
Definition: TileDigitsContainer.h:13
SG::VarHandleKey::empty
bool empty() const
Test if the key is blank.
Definition: AthToolSupport/AsgDataHandles/Root/VarHandleKey.cxx:150
HWIdentifier
Definition: HWIdentifier.h:13
TileDCSState::isStatusBad
bool isStatusBad(unsigned int ros, unsigned int drawer) const
Return true if given Tile drawer considered as bad by summary drawer states per LVPS otherwise return...
Definition: TileDCSState.h:320
Trk::u
@ u
Enums for curvilinear frames.
Definition: ParamDefs.h:77
Example_ReadSampleNoise.drawer
drawer
Definition: Example_ReadSampleNoise.py:39
TileBchPrbs::WrongHV
@ WrongHV
Definition: TileBchPrbs.h:56
ReadCondHandle.h
TileDQFragMonitorAlgorithm::m_timeMaxThresh
Gaudi::Property< float > m_timeMaxThresh
Definition: TileDQFragMonitorAlgorithm.h:71
TileDQFragMonitorAlgorithm::m_digitsContainerKey
SG::ReadHandleKey< TileDigitsContainer > m_digitsContainerKey
Definition: TileDQFragMonitorAlgorithm.h:110
TileHWID::channel
int channel(const HWIdentifier &id) const
extract channel field from HW identifier
Definition: TileHWID.h:189
python.utils.AtlRunQueryTimer.timer
def timer(name, disabled=False)
Definition: AtlRunQueryTimer.py:86
TileDQFragMonitorAlgorithm::BAD_QUALITY
@ BAD_QUALITY
Definition: TileDQFragMonitorAlgorithm.h:136
TileDQstatus::checkGlobalCRCErr
int checkGlobalCRCErr(int partition, int drawer, int gain) const
returns 1 if adc channel has global CRC error
Definition: TileDQstatus.h:80
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
TileDQstatus::checkROD_CRCErr
int checkROD_CRCErr(int partition, int drawer, int dmu, int gain) const
returns 1 if DMU has CRC error originating in ROD
Definition: TileDQstatus.h:84
xAOD::EventInfo_v1::Error
@ Error
The sub-detector issued an error.
Definition: EventInfo_v1.h:349
TileDQFragMonitorAlgorithm::m_negativeAmplitudeCutLG
Gaudi::Property< float > m_negativeAmplitudeCutLG
Definition: TileDQFragMonitorAlgorithm.h:63
TileInfo::ADCmaskValue
int ADCmaskValue() const
Returns the overlay magic number that indicates channels which were masked in background dataset.
Definition: TileInfo.h:73
SG::makeHandle
SG::ReadCondHandle< T > makeHandle(const SG::ReadCondHandleKey< T > &key, const EventContext &ctx=Gaudi::Hive::currentContext())
Definition: ReadCondHandle.h:270
TileDQFragMonitorAlgorithm::m_tileHWID
const TileHWID * m_tileHWID
Definition: TileDQFragMonitorAlgorithm.h:131
TileEMScale::calibrateChannel
float calibrateChannel(unsigned int drawerIdx, unsigned int channel, unsigned int adc, float amplitude, TileRawChannelUnit::UNIT rawDataUnitIn, TileRawChannelUnit::UNIT rawDataUnitOut) const
Calibrate a Tile channel.
Definition: TileEMScale.cxx:136
TileDQFragMonitorAlgorithm::m_badChannelsKey
SG::ReadCondHandleKey< TileBadChannels > m_badChannelsKey
Name of TileBadChannels in condition store.
Definition: TileDQFragMonitorAlgorithm.h:83
TileDQstatus
Class that holds Data Quality fragment information and provides functions to extract the data quality...
Definition: TileDQstatus.h:49
TileHWID::adc
int adc(const HWIdentifier &id) const
extract adc field from HW identifier
Definition: TileHWID.h:193
TileDQFragMonitorAlgorithm::clearDigiError
void clearDigiError(std::vector< int > &dmus, std::vector< int > &errors) const
Definition: TileDQFragMonitorAlgorithm.cxx:513
TileDQFragMonitorAlgorithm::DOUBLE_STB
@ DOUBLE_STB
Definition: TileDQFragMonitorAlgorithm.h:46
Tile
Definition: TileVolumeBuilder.h:43
TileHWID.h
ParticleGun_FastCalo_ChargeFlip_Config.energy
energy
Definition: ParticleGun_FastCalo_ChargeFlip_Config.py:78
xAOD::uint16_t
setWord1 uint16_t
Definition: eFexEMRoI_v1.cxx:93
FullCPAlgorithmsTest_eljob.sample
sample
Definition: FullCPAlgorithmsTest_eljob.py:113
TileDQFragMonitorAlgorithm::m_cabling
const TileCablingService * m_cabling
Definition: TileDQFragMonitorAlgorithm.h:132
endmsg
#define endmsg
Definition: AnalysisConfig_Ntuple.cxx:63
EL::StatusCode
::StatusCode StatusCode
StatusCode definition for legacy code.
Definition: PhysicsAnalysis/D3PDTools/EventLoop/EventLoop/StatusCode.h:22
TileDQFragMonitorAlgorithm::m_badPulseQualityGroups
std::vector< int > m_badPulseQualityGroups
Definition: TileDQFragMonitorAlgorithm.h:127
TileDQstatus::checkHeaderFormatErr
int checkHeaderFormatErr(int partition, int drawer, int dmu, int gain) const
returns 1 if DMU has header word format error
Definition: TileDQstatus.h:113
createCoolChannelIdFile.channel_id
channel_id
Definition: createCoolChannelIdFile.py:52
TileRawChannelUnit::MegaElectronVolts
@ MegaElectronVolts
Definition: TileRawChannelUnit.h:20
TileDQFragMonitorAlgorithm::ROD_CRC
@ ROD_CRC
Definition: TileDQFragMonitorAlgorithm.h:45
TileRawChannel
Definition: TileRawChannel.h:35
TileDQFragMonitorAlgorithm::ANY_CH_BAD_HV
@ ANY_CH_BAD_HV
Definition: TileDQFragMonitorAlgorithm.h:47
TileDQFragMonitorAlgorithm::m_DQstatusKey
SG::ReadHandleKey< TileDQstatus > m_DQstatusKey
Definition: TileDQFragMonitorAlgorithm.h:92
ATH_CHECK
#define ATH_CHECK
Definition: AthCheckMacros.h:40
TileDQFragMonitorAlgorithm::MAX_DIGI_ERROR
@ MAX_DIGI_ERROR
Definition: TileDQFragMonitorAlgorithm.h:48
RunTileMonitoring.x82
x82
Definition: RunTileMonitoring.py:162
Tile_Base_ID::LOWGAIN
@ LOWGAIN
Definition: Tile_Base_ID.h:57
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
TileDQFragMonitorAlgorithm::m_ignoreNoRecoFragError
Gaudi::Property< bool > m_ignoreNoRecoFragError
Definition: TileDQFragMonitorAlgorithm.h:56
maskDeadModules.ros
ros
Definition: maskDeadModules.py:35
TileDQFragMonitorAlgorithm::HEADER_FORM
@ HEADER_FORM
Definition: TileDQFragMonitorAlgorithm.h:45
TileDQFragMonitorAlgorithm::m_badChannelNegGroups
std::vector< int > m_badChannelNegGroups
Definition: TileDQFragMonitorAlgorithm.h:124
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
TileRawChannelUnit::UNIT
UNIT
Definition: TileRawChannelUnit.h:16
xAOD::EventInfo_v1::lumiBlock
uint32_t lumiBlock() const
The current event's luminosity block number.
TileDQFragMonitorAlgorithm::m_errorsGroups
std::vector< std::vector< int > > m_errorsGroups
Definition: TileDQFragMonitorAlgorithm.h:117
TileBadChannels::getChannelStatus
const TileBchStatus & getChannelStatus(const HWIdentifier channel_id) const
Return Tile channel status.
Definition: TileBadChannels.cxx:35
mergePhysValFiles.errors
list errors
Definition: DataQuality/DataQualityUtils/scripts/mergePhysValFiles.py:43
TileDQFragMonitorAlgorithm::DUMMY_FRAG
@ DUMMY_FRAG
Definition: TileDQFragMonitorAlgorithm.h:47
TileDQFragMonitorAlgorithm::m_emScaleKey
SG::ReadCondHandleKey< TileEMScale > m_emScaleKey
Name of TileEMScale in condition store.
Definition: TileDQFragMonitorAlgorithm.h:104
TileDQstatus::checkGlobalErr
int checkGlobalErr(int partition, int drawer, int gain) const
returns 1 if adc channel has any global error
Definition: TileDQstatus.h:76
AthMonitorAlgorithm::m_tools
ToolHandleArray< GenericMonitoringTool > m_tools
Array of Generic Monitoring Tools.
Definition: AthMonitorAlgorithm.h:338
TileDigitsCollection
Definition: TileDigitsCollection.h:18
TileDQstatus::checkSampleParityErr
int checkSampleParityErr(int partition, int drawer, int dmu, int gain) const
returns 1 if DMU has data word parity error
Definition: TileDQstatus.h:125
TileDQFragMonitorAlgorithm::m_minChannelEnergy
Gaudi::Property< float > m_minChannelEnergy
Definition: TileDQFragMonitorAlgorithm.h:74
TileDQFragMonitorAlgorithm.h
TileDigits
Definition: TileDigits.h:30
TileDQFragMonitorAlgorithm::SINGLE_STB
@ SINGLE_STB
Definition: TileDQFragMonitorAlgorithm.h:46
TileHWID::channel_id
HWIdentifier channel_id(int ros, int drawer, int channel) const
channel HWIdentifer
Definition: TileHWID.cxx:199
TileRawChannelCollection
Definition: TileRawChannelCollection.h:12
TileDQstatus::checkHeaderParityErr
int checkHeaderParityErr(int partition, int drawer, int dmu, int gain) const
returns 1 if DMU has header word parity error
Definition: TileDQstatus.h:117
TileDQFragMonitorAlgorithm::SAMPLE_FORM
@ SAMPLE_FORM
Definition: TileDQFragMonitorAlgorithm.h:46
SG::CondHandleKey::initialize
StatusCode initialize(bool used=true)
TileDQstatus::checkSampleFormatErr
int checkSampleFormatErr(int partition, int drawer, int dmu, int gain) const
returns 1 if DMU has data word format error
Definition: TileDQstatus.h:121
TileRawChannelBuilder::BadPatternName
static const char * BadPatternName(float ped)
Definition: TileRawChannelBuilder.cxx:458
TileDQFragMonitorAlgorithm::m_rawChannelContainerKey
SG::ReadHandleKey< TileRawChannelContainer > m_rawChannelContainerKey
Definition: TileDQFragMonitorAlgorithm.h:107
TileDQFragMonitorAlgorithm::MAX_CORRUPTED_ERROR
static const int MAX_CORRUPTED_ERROR
Definition: TileDQFragMonitorAlgorithm.h:135
TileDQFragMonitorAlgorithm::m_eventInfoTileStatusKey
SG::ReadDecorHandleKey< xAOD::EventInfo > m_eventInfoTileStatusKey
Definition: TileDQFragMonitorAlgorithm.h:113
xAOD::EventInfo_v1
Class describing the basic event information.
Definition: EventInfo_v1.h:43
TileBadChannels::getAdcStatus
const TileBchStatus & getAdcStatus(const HWIdentifier adc_id) const
Return Tile ADC status.
Definition: TileBadChannels.cxx:24
AthMonitorAlgorithm::initialize
virtual StatusCode initialize() override
initialize
Definition: AthMonitorAlgorithm.cxx:18
TileDQFragMonitorAlgorithm::GLOBAL_CRC
@ GLOBAL_CRC
Definition: TileDQFragMonitorAlgorithm.h:46
TileRawChannelBuilder.h
xAOD::EventInfo_v1::eventFlags
uint32_t eventFlags(EventFlagSubDet subDet) const
Get the event flags for a particular sub-detector.
Definition: EventInfo_v1.cxx:697
TileDQFragMonitorAlgorithm::fillHistograms
virtual StatusCode fillHistograms(const EventContext &ctx) const override
adds event to the monitoring histograms
Definition: TileDQFragMonitorAlgorithm.cxx:65
xAOD::EventInfo_v1::Tile
@ Tile
The Tile calorimeter.
Definition: EventInfo_v1.h:336
DeMoScan.index
string index
Definition: DeMoScan.py:364
TileDQFragMonitorAlgorithm::m_qualityCut
Gaudi::Property< float > m_qualityCut
Definition: TileDQFragMonitorAlgorithm.h:66
TileBchStatus::contains
bool contains(const Prb &prb) const
Definition: TileBchStatus.h:121
TileCablingService::isDisconnected
bool isDisconnected(int ros, int drawer, int channel) const
Definition: TileCablingService.cxx:2461
CaloCondBlobAlgs_fillNoiseFromASCII.hash
dictionary hash
Definition: CaloCondBlobAlgs_fillNoiseFromASCII.py:109
TileDQFragMonitorAlgorithm::FE_CRC
@ FE_CRC
Definition: TileDQFragMonitorAlgorithm.h:45
ATH_MSG_WARNING
#define ATH_MSG_WARNING(x)
Definition: AthMsgStreamMacros.h:32
TileDQFragMonitorAlgorithm::m_badChannelJumpGroups
std::vector< int > m_badChannelJumpGroups
Definition: TileDQFragMonitorAlgorithm.h:121
TileDQFragMonitorAlgorithm::m_errorsInLBGroups
std::vector< std::vector< int > > m_errorsInLBGroups
Definition: TileDQFragMonitorAlgorithm.h:118
DEBUG
#define DEBUG
Definition: page_access.h:11
python.Classes.TileCalibUtils
TileCalibUtils
Definition: TileCalib/TileCalibBlobObjs/python/Classes.py:5
AthCommonMsg< Gaudi::Algorithm >::msg
MsgStream & msg() const
Definition: AthCommonMsg.h:24
TileDQFragMonitorAlgorithm::MASKED
@ MASKED
Definition: TileDQFragMonitorAlgorithm.h:47
TileDQFragMonitorAlgorithm::m_DCSStateKey
SG::ReadCondHandleKey< TileDCSState > m_DCSStateKey
Name of TileDCSState object in condition store.
Definition: TileDQFragMonitorAlgorithm.h:98
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
TileDCSState
Condition object to keep Tile DCS status from DB.
Definition: TileDCSState.h:24
TileDQFragMonitorAlgorithm::m_cablingSvc
ServiceHandle< TileCablingSvc > m_cablingSvc
Name of Tile cabling service.
Definition: TileDQFragMonitorAlgorithm.h:89
merge.status
status
Definition: merge.py:17
TileDQFragMonitorAlgorithm::m_errorsVsLBGroups
std::vector< std::vector< int > > m_errorsVsLBGroups
Definition: TileDQFragMonitorAlgorithm.h:119
TileCalibUtils::getDrawerIdx
static unsigned int getDrawerIdx(unsigned int ros, unsigned int drawer)
Returns a drawer hash.
Definition: TileCalibUtils.cxx:60
TileDQstatus::checkSingleStrobeErr
int checkSingleStrobeErr(int partition, int drawer, int dmu, int gain) const
returns 1 if DMU has single strobe error
Definition: TileDQstatus.h:133
TileAANtupleConfig.rawChannelContainer
rawChannelContainer
Definition: TileAANtupleConfig.py:120
Monitored::Scalar
Declare a monitored scalar variable.
Definition: MonitoredScalar.h:34
TileDQFragMonitorAlgorithm::m_negativeEnergyGroups
std::vector< int > m_negativeEnergyGroups
Definition: TileDQFragMonitorAlgorithm.h:128
TileBchPrbs::NoHV
@ NoHV
Definition: TileBchPrbs.h:55
ReadHandle.h
Handle class for reading from StoreGate.
TileDQFragMonitorAlgorithm::BCID
@ BCID
Definition: TileDQFragMonitorAlgorithm.h:45
TileDQFragMonitorAlgorithm::m_fillDigiErrorsInLB
Gaudi::Property< bool > m_fillDigiErrorsInLB
Definition: TileDQFragMonitorAlgorithm.h:57
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
TileDQFragMonitorAlgorithm::m_badChannelJumpNotMaskGroups
std::vector< int > m_badChannelJumpNotMaskGroups
Definition: TileDQFragMonitorAlgorithm.h:122
TileDQstatus::checkDoubleStrobeErr
int checkDoubleStrobeErr(int partition, int drawer, int dmu, int gain) const
returns 1 if DMU has double strobe error
Definition: TileDQstatus.h:137
TileDQstatus::checkMemoryParityErr
int checkMemoryParityErr(int partition, int drawer, int dmu, int gain) const
returns 1 if DMU has memory parity error
Definition: TileDQstatus.h:129
get_generator_info.error
error
Definition: get_generator_info.py:40
TileDQstatus::checkFE_CRCErr
int checkFE_CRCErr(int partition, int drawer, int dmu, int gain) const
returns 1 if DMU has CRC error originating in FE electronics
Definition: TileDQstatus.h:88
xAOD::lumiBlock
setTeId lumiBlock
Definition: L2StandAloneMuon_v1.cxx:327
SG::AllowEmpty
@ AllowEmpty
Definition: StoreGate/StoreGate/VarHandleKey.h:30
error
Definition: IImpactPoint3dEstimator.h:70
TileDQFragMonitorAlgorithm::m_checkDCS
Gaudi::Property< bool > m_checkDCS
Definition: TileDQFragMonitorAlgorithm.h:53
Monitored::Timer
A monitored timer.
Definition: MonitoredTimer.h:32
TileInfo::ADCmax
int ADCmax() const
Returns the maximum ADC output (10 bits --> 1023)
Definition: TileInfo.h:71
TileBchStatus::isBad
bool isBad() const
Definition: TileBchStatus.h:145
TileRawChannelUnit::ADCcounts
@ ADCcounts
Definition: TileRawChannelUnit.h:17
TileDQFragMonitorAlgorithm::m_minGapEnergy
Gaudi::Property< float > m_minGapEnergy
Definition: TileDQFragMonitorAlgorithm.h:77
SG::ReadCondHandle::cptr
const_pointer_type cptr()
Definition: ReadCondHandle.h:67
TileDQFragMonitorAlgorithm::SAMPLE_PAR
@ SAMPLE_PAR
Definition: TileDQFragMonitorAlgorithm.h:46
TileDQFragMonitorAlgorithm::m_tileInfo
const TileInfo * m_tileInfo
Definition: TileDQFragMonitorAlgorithm.h:140
Identifier
Definition: IdentifierFieldParser.cxx:14
TileDQFragMonitorAlgorithm::ALL_M_BAD_DCS
@ ALL_M_BAD_DCS
Definition: TileDQFragMonitorAlgorithm.h:47