ATLAS Offline Software
TileDQFragMonitorAlgorithm.cxx
Go to the documentation of this file.
1 /*
2  Copyright (C) 2002-2023 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);
40 
41  m_errorsVsLBGroups = Monitored::buildToolMap<std::vector<int>>(m_tools, "FracTileDigiErrors",
42  Tile::MAX_ROS - 1, Tile::MAX_DRAWER);
43 
44  m_badChannelJumpGroups = Monitored::buildToolMap<int>(m_tools, "TileBadChannelsJumpMap", Tile::MAX_ROS - 1);
45  m_badChannelJumpNotMaskGroups = Monitored::buildToolMap<int>(m_tools, "TileBadChannelsJumpNotMaskMap", Tile::MAX_ROS - 1);
46 
47  m_badChannelNegGroups = Monitored::buildToolMap<int>(m_tools, "TileBadChannelsNegMap", Tile::MAX_ROS - 1);
48  m_badChannelNegNotMaskGroups = Monitored::buildToolMap<int>(m_tools, "TileBadChannelsNegNotMaskMap", Tile::MAX_ROS - 1);
49 
50  m_badPulseQualityGroups = Monitored::buildToolMap<int>(m_tools, "TileBadPulseQualityMap", Tile::MAX_ROS - 1);
51  m_negativeEnergyGroups = Monitored::buildToolMap<int>(m_tools, "TileNegativeEnergyMap", Tile::MAX_ROS - 1);
52 
55  m_ADCmaskValueMinusEps = m_tileInfo->ADCmaskValue() - 0.01; // indicates channels which were masked in background dataset
56 
57  return StatusCode::SUCCESS;
58 }
59 
60 
61 StatusCode TileDQFragMonitorAlgorithm::fillHistograms( const EventContext& ctx ) const {
62 
63  using Tile = TileCalibUtils;
64 
65  // In case you want to measure the execution time
66  auto timer = Monitored::Timer("TIME_execute");
67 
68  const xAOD::EventInfo* eventInfo = GetEventInfo(ctx).get();
69 
70  const TileDQstatus* dqStatus = SG::makeHandle (m_DQstatusKey, ctx).get();
71  const TileDCSState* dcsState = m_checkDCS ? SG::ReadCondHandle(m_DCSStateKey, ctx).cptr() : nullptr;
73  ATH_CHECK( emScale.isValid() );
74 
76  ATH_CHECK( badChannels.isValid() );
77 
78  auto lumiBlock = Monitored::Scalar<int>("lumiBlock", eventInfo->lumiBlock());
79 
80  auto monitoredROS = Monitored::Scalar<int>("ROS", -1);
81  auto monitoredModule = Monitored::Scalar<int>("module", -1);
82  auto monitoredChannel = Monitored::Scalar<int>("channel", -1);
83 
84  std::vector<int> dmus;
85  auto drawerDMUs = Monitored::Collection("DMU", dmus);
86 
87  std::vector<int> errors;
88  auto errorsInDMUs = Monitored::Collection("Error", errors);
89 
90  const int Trig_b7(7);
91 
92  unsigned int tileEventInfoFlag = eventInfo->eventFlags(xAOD::EventInfo::Tile);
93  bool isTileErrorState = (eventInfo->errorState(xAOD::EventInfo::Tile) == xAOD::EventInfo::Error);
94  int nBadConsecutiveModules = isTileErrorState ? MAX_DMU : ((tileEventInfoFlag >> MAX_DMU) & 0xF);
95 
96  auto monitoredConsecutiveBad = Monitored::Scalar<int>("TileConsecutiveBad", nBadConsecutiveModules);
97 
98  if (isTileErrorState) {
99  fill("TileEventsWithErrEventInfoLB", lumiBlock);
100  }
101 
102  fill("TileConsecutiveBadModules", monitoredConsecutiveBad);
103  fill("TileConsecutiveBadModulesLB", monitoredConsecutiveBad, lumiBlock);
104 
105  const TileDigitsContainer* digitsContainer{nullptr};
106  if (!m_digitsContainerKey.empty()) {
107  digitsContainer = SG::makeHandle(m_digitsContainerKey, ctx).get();
108  }
109 
110  uint32_t l1TriggerType(eventInfo->level1TriggerType());
111 
112  bool physicRun = (l1TriggerType == 0) || (((l1TriggerType >> Trig_b7) & 1) == 1);
113  if (physicRun && !m_rawChannelContainerKey.empty()) {
114 
116 
117  TileRawChannelUnit::UNIT rawChannelUnit = rawChannelContainer->get_unit();
118  if (rawChannelUnit != TileRawChannelUnit::ADCcounts
119  && rawChannelUnit != TileRawChannelUnit::OnlineADCcounts ) {
120 
121  ATH_MSG_WARNING( "Tile raw channel units are not ADC counts => will not check neagative amplitudes!" );
122  } else {
123 
124  for (const TileRawChannelCollection* rawChannelCollection : *rawChannelContainer) {
125 
126  int fragId = rawChannelCollection->identify();
127  int drawer = (fragId & 0x3F); // range 0-63
128  int ros = fragId >> 8; // range 1-4
129  unsigned int drawerIdx = TileCalibUtils::getDrawerIdx(ros, drawer);
130 
131  monitoredModule = drawer;
132  clearDigiError(dmus, errors);
133  for (const TileRawChannel* rawChannel : *rawChannelCollection) {
134 
135  HWIdentifier adcId = rawChannel->adc_HWID();
136  int channel = m_tileHWID->channel(adcId);
137  int gain = m_tileHWID->adc(adcId);
138 
139  // By convetion errors are saved in pedestal as 100000 + 10000*error
140  float pedestal = rawChannel->pedestal();
141  float quality = std::abs(rawChannel->quality());
142  float amplitude = rawChannel->amplitude();
143  float time = rawChannel->uncorrTime(); // take uncorrected time (if available)
144 
145  monitoredChannel = channel;
146 
147  if (dqStatus->isChanDQgood(ros, drawer, channel)
148  && !(badChannels->getAdcStatus(adcId).isBad()
149  || (m_checkDCS && dcsState->isStatusBad(ros, drawer, channel)))) {
150 
151  if (pedestal > 80000. || quality > m_qualityCut) {
152  fill(m_tools[m_badPulseQualityGroups[ros - 1]], monitoredModule, monitoredChannel);
153  }
154 
155  int pmt;
156  int index;
158  if (index >= 0) { // connected channel, exluding MBTS and E4'
159 
160  if (quality > m_qualityCut) {
161  bool overflow = (pedestal > 10000. + m_ADCmaskValueMinusEps);
162  if (!(overflow && gain == TileID::LOWGAIN && amplitude > 0.
163  && time > m_timeMinThresh && time < m_timeMaxThresh)) { // overflow in low gain is not masked
164  int dmu = channel / 3;
166  }
167  }
168 
169  float minEnergy = (m_tileID->sample(cell_id) == TileID::SAMP_E) ? m_minGapEnergy : m_minChannelEnergy;
170  float energy = emScale->calibrateChannel(drawerIdx, channel, gain, amplitude, rawChannelUnit, TileRawChannelUnit::MegaElectronVolts);
171  if (energy < minEnergy) {
172  int dmu = channel / 3;
174 
175  fill(m_tools[m_negativeEnergyGroups[ros - 1]], monitoredModule, monitoredChannel);
176  }
177  }
178  }
179 
180  if (amplitude < ((gain) ? m_negativeAmplitudeCutHG : m_negativeAmplitudeCutLG)) {
181 
182  // Channel number divided by 2
183  int channelDividedBy2 = channel >> 1;
184 
185  if (!(m_skipGapCells && ros > 2 // Choose extended barrel and channels: 0,1, 12,13, 18,19
186  && (channelDividedBy2 == 0 || channelDividedBy2 == 6 || channelDividedBy2 == 9))
187  && !(m_skipMasked && badChannels->getAdcStatus(adcId).isBad())) {
188 
189  fill(m_tools[m_badChannelNegGroups[ros - 1]], monitoredModule, monitoredChannel);
190 
191  if (!(m_checkDCS && !dcsState->isStatusBad(ros, drawer))
192  && dqStatus->isChanDQgood(ros, drawer, channel)) {
193 
194  fill(m_tools[m_badChannelNegNotMaskGroups[ros - 1]], monitoredModule, monitoredChannel);
195 
196  if (pedestal > 100000. && digitsContainer) {
197 
198  IdentifierHash hash = static_cast<IdentifierHash>(rawChannelContainer->hashFunc()(fragId));
199  const TileDigitsCollection* digitsCollection = digitsContainer->indexFindPtr(hash);
200 
201  if (digitsCollection) {
202 
203  for (const TileDigits* tile_digits : *digitsCollection) {
204 
205  if (m_tileHWID->channel(tile_digits->adc_HWID()) == channel) {
206 
207  msg(MSG::INFO) << "LB " << eventInfo->lumiBlock()
208  << " Evt " << eventInfo->eventNumber()
209  << " " << Tile::getDrawerString(ros, drawer)
210  << std::setfill(' ') << std::setw(3) << channel
211  << ((gain) ? " HG" : " LG") << " negative amplitude: "
212  << std::setprecision(2) << std::fixed << std::setw(7)
213  << amplitude << " Samples: " << std::setprecision(0);
214 
215  std::vector<float> samples = tile_digits->samples();
216  for (float sample : samples) {
217  msg(MSG::INFO) << sample << " ";
218  }
219 
220  msg(MSG::INFO) << " error = " << TileRawChannelBuilder::BadPatternName(pedestal) << endmsg;
221  }
222  }
223  }
224  }
225  }
226  }
227  }
228  }
229  if (!errors.empty()) {
230  fill(m_tools[m_errorsGroups[ros - 1][drawer]], drawerDMUs, errorsInDMUs);
231  }
232  }
233  }
234  }
235 
236 
237  if (digitsContainer) {
238 
239 
240  for (const TileDigitsCollection* digitsCollection : *digitsContainer) {
241 
242  int fragId = digitsCollection->identify();
243  int drawer = (fragId & 0x3F); // range 0-63
244  int ros = fragId >> 8; // range 1-4
245 
246  monitoredROS = ros;
247  monitoredModule = drawer;
248 
249  if (l1TriggerType != digitsCollection->getLvl1Type()) {
250  fill("TileMismatchedL1TriggerType", monitoredModule, monitoredROS);
251  }
252 
253  if (l1TriggerType == 0x82) {
254 
255  unsigned int nBadOrDisconnectedChannels(0);
256  for (unsigned int channel = 0; channel < Tile::MAX_CHAN; ++channel) {
258  if (badChannels->getChannelStatus(channel_id).isBad()
260  ++nBadOrDisconnectedChannels;
261  }
262  }
263 
264  unsigned int nRequiredChannels(Tile::MAX_CHAN - nBadOrDisconnectedChannels);
265  if (digitsCollection->size() < nRequiredChannels) {
266  fill("TileNoAllDigits", monitoredModule, monitoredROS);
267  ATH_MSG_VERBOSE("No All channels with digits (Trigger Type: 0x82) in module "
268  << Tile::getDrawerString(ros, drawer)
269  << ", present channels: " << digitsCollection->size()
270  << ", required channels: " << nRequiredChannels);
271  }
272 
273  }
274 
275  int error;
276  float minSample;
277  float maxSample;
278 
279  for (const TileDigits* tile_digits : *digitsCollection) {
280 
281  clearDigiError(dmus, errors);
282  uint16_t corruptedData[MAX_CORRUPTED_ERROR] = {0u};
283 
284  HWIdentifier adcId = tile_digits->adc_HWID();
285  int channel = m_tileHWID->channel(adcId);
286  int gain = m_tileHWID->adc(adcId);
287 
288  monitoredChannel = channel;
289 
290  error = TileRawChannelBuilder::CorruptedData(ros, drawer, channel, gain, tile_digits->samples(), minSample, maxSample, m_ADCmaxMinusEps, m_ADCmaskValueMinusEps);
291 
292  if ( (error > 0) &&
293  !(m_cabling->isDisconnected(ros, drawer, channel) || badChannels->getAdcStatus(adcId).isBad()) ) {
294 
295  if (msgLvl(MSG::DEBUG)) {
296  msg(MSG::DEBUG) << "LB " << eventInfo->lumiBlock()
297  << " Evt " << eventInfo->eventNumber()
298  << " " << Tile::getDrawerString(ros, drawer)
299  << std::setfill(' ') << std::setw(3) << channel
300  << ((gain) ? " HG" : " LG")
301  << " Samples: ";
302 
303  std::vector<float> samples = tile_digits->samples();
304  for (float sample : samples) {
305  msg(MSG::DEBUG) << sample << " ";
306  }
307  msg(MSG::DEBUG) << " error = " << TileRawChannelBuilder::BadPatternName(100000. + error * 10000) << endmsg;
308  }
309 
310  fill(m_tools[m_badChannelJumpGroups[ros - 1]], monitoredModule, monitoredChannel);
311 
312  if (!(m_checkDCS && dcsState->isStatusBad(ros, drawer)) && dqStatus->isChanDQgood(ros, drawer, channel)) {
313 
314  fill(m_tools[m_badChannelJumpNotMaskGroups[ros - 1]], monitoredModule, monitoredChannel);
315 
316  if (error <= MAX_CORRUPTED_ERROR) {
317  corruptedData[error - 1] |= 1u << (unsigned int) (channel / 3);
318  }
319  }
320  }
321 
322  bool fillCorruptedData(false);
323  for (int error = 0; error < MAX_CORRUPTED_ERROR; ++error) {
324  if (corruptedData[error] > 0u) {
325  fillCorruptedData = true;
326  for (unsigned int dmu = 0u; dmu < 16u; ++dmu) {
327  if (corruptedData[error] & (1u << dmu)) {
328  setDigiError(dmus, errors, dmu, MAX_DIGI_ERROR + error);
329  }
330  }
331  }
332  }
333 
334  if (fillCorruptedData) {
335  fill(m_tools[m_errorsGroups[ros - 1][drawer]], drawerDMUs, errorsInDMUs);
336  }
337  }
338  }
339  }
340 
341  std::vector<int> rosWithGloblaCRC;
342  std::vector<int> drawerWithGlobalCRC;
343  auto fractionOfBadDMUs = Monitored::Scalar<float>("fractionOfBadDMUs", 0.0);
344 
345  for (unsigned int ros = 1; ros < Tile::MAX_ROS; ++ros) {
346  for (unsigned int drawer = 0; drawer < Tile::MAX_DRAWER; ++drawer) {
347 
348  clearDigiError(dmus, errors);
349  bool isGoodModuleDCS(true);
350 
351  if (m_checkDCS && dcsState->isStatusBad(ros, drawer)) {
352 
353  fractionOfBadDMUs = -1.0; // By convention
354  isGoodModuleDCS = false;
355 
356  }
357 
358  int status = dqStatus->checkGlobalErr(ros, drawer, 0);
360  if (status & (TileFragStatus::ALL_FF | TileFragStatus::ALL_00)) {
361  error = DUMMY_FRAG;
362  } else if (status & (TileFragStatus::NO_FRAG | TileFragStatus::NO_ROB)) {
364  }
365 
366  float nBadNotMaskedDMUs = 0;
367 
368  for (int dmu = 0; dmu < MAX_DMU; ++dmu) { // loop over dmus
369  int channel = 3 * dmu;
370 
371  bool isMaskedDMU = m_ignoreNoRecoFragError ? (error == NO_RECO_FRAG) : false;
372 
373  TileBchStatus channelStatus0 = badChannels->getChannelStatus( m_tileHWID->channel_id(ros, drawer, channel) );
374  TileBchStatus channelStatus1 = badChannels->getChannelStatus( m_tileHWID->channel_id(ros, drawer, channel + 1) );
375  TileBchStatus channelStatus2 = badChannels->getChannelStatus( m_tileHWID->channel_id(ros, drawer, channel + 2) );
376 
377  bool specialEB; // special treatment of EBA15, EBC18
378 
379  if ((ros == 3 && drawer == 14) || (ros == 4 && drawer == 17)) {
380  specialEB = true; // EBA15, EBC18
381  } else {
382  specialEB = false;
383  }
384 
385  if ((channelStatus0.isBad() && channelStatus1.isBad() && channelStatus2.isBad())
386  // Check disconnected channels for EBs
387  || ((ros > 2 && ((channel == 18 && !specialEB) || channel == 33)) && channelStatus2.isBad())
388  // Check disconnected channels for LBs
389  || ((ros < 3 && channel == 30) && channelStatus2.isBad())
390  // Check disconnected channels for LBs
391  || ((ros < 3 && channel == 42) && channelStatus0.isBad() && channelStatus2.isBad())
392  // Check void DMUs for EBs
393  || (ros > 2 && (channel == 24 || channel == 27 || channel == 42 || channel == 45))
394  || (specialEB && channel == 0) // Check void DMU 0 for EBA15, EBC18
395  // Check disconnected PMT of DMU 1 for EBA15, EBC18
396  || ((specialEB && channel == 3) && channelStatus1.isBad() && channelStatus2.isBad())) {
397 
398  setDigiError(dmus, errors, dmu, MASKED);
399  isMaskedDMU = true;
400  }
401 
402  if (isGoodModuleDCS) {
403 
404  if (m_checkDCS
405  && ((dcsState->isStatusBad(ros, drawer, channel)
406  && !channelStatus0.contains(TileBchPrbs::NoHV) && !channelStatus0.contains(TileBchPrbs::WrongHV))
407  || (dcsState->isStatusBad(ros, drawer, channel + 1)
408  && !channelStatus1.contains(TileBchPrbs::NoHV) && !channelStatus1.contains(TileBchPrbs::WrongHV))
409  || (dcsState->isStatusBad(ros, drawer, channel + 2)
410  && !channelStatus2.contains(TileBchPrbs::NoHV) && !channelStatus2.contains(TileBchPrbs::WrongHV)))) {
411 
412  setDigiError(dmus, errors, dmu, ANY_CH_BAD_HV);
413  }
414 
415  if (dqStatus->isChanDQgood(ros, drawer, channel)) {
416  setDigiError(dmus, errors, dmu, OK);
417  } else {
418 
419  if (!(isMaskedDMU
420  || (ros > 2 && (dmu == 8 || dmu == 9 || dmu == 14 || dmu == 15))
421  || (specialEB && dmu == 0))) {
422 
423  ++nBadNotMaskedDMUs;
424  }
425 
426  if (error != OK) {
427  setDigiError(dmus, errors, dmu, error);
428  } else if (dqStatus->checkHeaderFormatErr(ros, drawer, dmu, 0) != 0) {
429  // In case of format errors, we only fill this one
430  setDigiError(dmus, errors, dmu, HEADER_FORM);
431  } else {
432  if (dqStatus->checkHeaderParityErr(ros, drawer, dmu, 0) != 0) {
433  setDigiError(dmus, errors, dmu, HEADER_PAR);
434  }
435  if (dqStatus->checkMemoryParityErr(ros, drawer, dmu, 0) != 0) {
436  setDigiError(dmus, errors, dmu, MEMO_PAR);
437  }
438  if (dqStatus->checkFE_CRCErr(ros, drawer, dmu, 0) != 0) {
439  setDigiError(dmus, errors, dmu, FE_CRC);
440  }
441  if (dqStatus->checkROD_CRCErr(ros, drawer, dmu, 0) != 0) {
442  setDigiError(dmus, errors, dmu, ROD_CRC);
443  }
444  if (dqStatus->checkBCIDErr(ros, drawer, dmu, 0) != 0) {
445  setDigiError(dmus, errors, dmu, BCID);
446  }
447  if (dqStatus->checkSampleFormatErr(ros, drawer, dmu, 0) != 0) {
448  setDigiError(dmus, errors, dmu, SAMPLE_FORM);
449  }
450  if (dqStatus->checkSampleParityErr(ros, drawer, dmu, 0) != 0) {
451  setDigiError(dmus, errors, dmu, SAMPLE_PAR);
452  }
453  if (dqStatus->checkDoubleStrobeErr(ros, drawer, dmu, 0) != 0) {
454  setDigiError(dmus, errors, dmu, DOUBLE_STB);
455  }
456  if (dqStatus->checkSingleStrobeErr(ros, drawer, dmu, 0) != 0) {
457  setDigiError(dmus, errors, dmu, SINGLE_STB);
458  }
459  if (dqStatus->checkGlobalCRCErr(ros, drawer, 0) != 0) {
460  setDigiError(dmus, errors, dmu, GLOBAL_CRC);
461  }
462  }
463  }
464  } else {
465  setDigiError(dmus, errors, dmu, ALL_M_BAD_DCS);
466  }
467  } // loop over DMUs
468 
469  if (isGoodModuleDCS) {
470  fractionOfBadDMUs = nBadNotMaskedDMUs / MAX_DMU;
471  }
472 
473  // Keep the number of processed events in underflow
474  // in histograms with DMU header errors
475  setDigiError(dmus, errors, -1, OK);
476  fill(m_tools[m_errorsGroups[ros - 1][drawer]], drawerDMUs, errorsInDMUs);
477  fill(m_tools[m_errorsVsLBGroups[ros - 1][drawer]], lumiBlock, fractionOfBadDMUs);
478 
479  if (dqStatus->checkGlobalCRCErr(ros, drawer, 0) != 0) {
480  rosWithGloblaCRC.push_back(ros);
481  drawerWithGlobalCRC.push_back(drawer);
482  }
483  }
484  }
485 
486  if (!rosWithGloblaCRC.empty()) {
487  auto monModule = Monitored::Collection("module", drawerWithGlobalCRC);
488  auto monROS = Monitored::Collection("ROS", rosWithGloblaCRC);
489  fill("TileBadGlobalCRC", monModule, monROS);
490  }
491 
492  fill("TileDQFragMonExecuteTime", timer);
493 
494  return StatusCode::SUCCESS;
495 }
496 
497 
498 void TileDQFragMonitorAlgorithm::setDigiError(std::vector<int>& dmus, std::vector<int>& errors,
499  int dmu, int error) const {
500  dmus.push_back(dmu);
501  errors.push_back(error);
502 }
503 
504 
505 void TileDQFragMonitorAlgorithm::clearDigiError(std::vector<int>& dmus, std::vector<int>& errors) const {
506  dmus.clear();
507  errors.clear();
508 }
509 
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:136
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:139
TileDQFragMonitorAlgorithm::m_ADCmaxMinusEps
float m_ADCmaxMinusEps
Definition: TileDQFragMonitorAlgorithm.h:138
TileDQFragMonitorAlgorithm::MAX_DMU
static const int MAX_DMU
Definition: TileDQFragMonitorAlgorithm.h:131
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:58
TileDQFragMonitorAlgorithm::m_skipGapCells
Gaudi::Property< bool > m_skipGapCells
Definition: TileDQFragMonitorAlgorithm.h:55
plotting.yearwise_efficiency.channel
channel
Definition: yearwise_efficiency.py:28
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:498
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:67
TileDQFragMonitorAlgorithm::BIG_NEGATIVE_AMPLITUDE
@ BIG_NEGATIVE_AMPLITUDE
Definition: TileDQFragMonitorAlgorithm.h:133
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:122
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:127
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:83
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:69
TileDQFragMonitorAlgorithm::m_digitsContainerKey
SG::ReadHandleKey< TileDigitsContainer > m_digitsContainerKey
Definition: TileDQFragMonitorAlgorithm.h:108
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:133
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:61
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:128
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:81
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:505
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:88
FullCPAlgorithmsTest_eljob.sample
sample
Definition: FullCPAlgorithmsTest_eljob.py:100
TileDQFragMonitorAlgorithm::m_cabling
const TileCablingService * m_cabling
Definition: TileDQFragMonitorAlgorithm.h:129
Identifier
Definition: DetectorDescription/Identifier/Identifier/Identifier.h:32
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
01SubmitToGrid.samples
samples
Definition: 01SubmitToGrid.py:58
TileDQFragMonitorAlgorithm::m_badPulseQualityGroups
std::vector< int > m_badPulseQualityGroups
Definition: TileDQFragMonitorAlgorithm.h:124
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:90
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:121
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:115
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:102
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:72
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:198
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:105
TileDQFragMonitorAlgorithm::MAX_CORRUPTED_ERROR
static const int MAX_CORRUPTED_ERROR
Definition: TileDQFragMonitorAlgorithm.h:132
TileDQFragMonitorAlgorithm::m_eventInfoTileStatusKey
SG::ReadDecorHandleKey< xAOD::EventInfo > m_eventInfoTileStatusKey
Definition: TileDQFragMonitorAlgorithm.h:111
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:61
xAOD::EventInfo_v1::Tile
@ Tile
The Tile calorimeter.
Definition: EventInfo_v1.h:336
DeMoScan.index
string index
Definition: DeMoScan.py:362
TileDQFragMonitorAlgorithm::m_qualityCut
Gaudi::Property< float > m_qualityCut
Definition: TileDQFragMonitorAlgorithm.h:64
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
CaloSwCorrections.time
def time(flags, cells_name, *args, **kw)
Definition: CaloSwCorrections.py:242
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: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:96
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:87
merge.status
status
Definition: merge.py:17
TileDQFragMonitorAlgorithm::m_errorsVsLBGroups
std::vector< std::vector< int > > m_errorsVsLBGroups
Definition: TileDQFragMonitorAlgorithm.h:116
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:125
TileBchPrbs::NoHV
@ NoHV
Definition: TileBchPrbs.h:55
ReadHandle.h
Handle class for reading from StoreGate.
TileDQFragMonitorAlgorithm::BCID
@ BCID
Definition: TileDQFragMonitorAlgorithm.h:45
IdentifierHash
Definition: IdentifierHash.h:38
TileDQFragMonitorAlgorithm::m_badChannelJumpNotMaskGroups
std::vector< int > m_badChannelJumpNotMaskGroups
Definition: TileDQFragMonitorAlgorithm.h:119
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:75
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:137
TileDQFragMonitorAlgorithm::ALL_M_BAD_DCS
@ ALL_M_BAD_DCS
Definition: TileDQFragMonitorAlgorithm.h:47