ATLAS Offline Software
SCTErrMonTool.cxx
Go to the documentation of this file.
1 /*
2  Copyright (C) 2002-2023 CERN for the benefit of the ATLAS collaboration
3 */
4 
5 /* @file SCTErrMonTool.cxx
6  *
7  * @author Martin White, based on code by Luca Fiorini, Shaun Roe, Manuel Diaz & Rob McPherson
8  * Major tidying/restructuring by Martin Flechl
9  */
10 
11 #include "SCTErrMonTool.h"
12 
13 #include "Identifier/Identifier.h"
14 #include "InDetIdentifier/SCT_ID.h"
16 #include "LWHists/TH1F_LW.h"
17 #include "LWHists/TH2F_LW.h"
18 #include "LWHists/TProfile_LW.h"
19 #include "LWHists/TProfile2D_LW.h"
21 #include "StoreGate/ReadHandle.h"
22 
23 #include "GaudiKernel/ITHistSvc.h"
24 
25 #include "TH1I.h"
26 #include "TH2F.h"
27 #include "TProfile.h"
28 
29 #include <iostream>
30 #include <map>
31 #include <utility>
32 
33 using namespace SCT_Monitoring;
34 
35 namespace {
36  // anon. namespace for file-scoped functions
37  // test offline the online code
38  static const bool testOffline{false};
39 
40  int
41  numberOfInefficientSides(TH2* pHistogramArray[], const int xbin, const int ybin, const float threshold) {
42  // If at least either of pointers is null, no inefficient sides are reported.
43  if (pHistogramArray[0]==nullptr or pHistogramArray[1]==nullptr) return 0;
44 
45  double histogramBinContent0{pHistogramArray[0]->GetBinContent(xbin, ybin)};
46  double histogramBinContent1{pHistogramArray[1]->GetBinContent(xbin, ybin)};
47  int side0Inefficient{histogramBinContent0 > threshold};
48  int side1Inefficient{histogramBinContent1 > threshold};
49 
50  return side0Inefficient + side1Inefficient;
51  }
52 
53  bool
54  eitherSideIsOverThreshold(TH2* pHistogramArray[], const int xbin, const int ybin, const float threshold) {
55  // If at least either of pointers is null, no sides with over threshold are reported.
56  if (pHistogramArray[0]==nullptr or pHistogramArray[1]==nullptr) return false;
57 
58  double histogramBinContent0{pHistogramArray[0]->GetBinContent(xbin, ybin)};
59  double histogramBinContent1{pHistogramArray[1]->GetBinContent(xbin, ybin)};
60 
61  return ((histogramBinContent0 > threshold) or (histogramBinContent1 > threshold));
62  }
63 
64  bool
65  thereAreEnoughEntries(TH2* pHistogramArray[], const float threshold) {
66  // If at least either of pointers is null, enough entries are not reported.
67  if (pHistogramArray[0]==nullptr or pHistogramArray[1]==nullptr) return false;
68 
69  double histogramEntries0{pHistogramArray[0]->GetEntries()};
70  double histogramEntries1{pHistogramArray[1]->GetEntries()};
71 
72  return ((histogramEntries0 > threshold) and (histogramEntries1 > threshold));
73  }
74 
75  void
76  countNoisyModules(const int regionIndex, const int generalIndex, TH2* pHistogram[],
77  const float threshold, int countArray[]) {
78  // If at least either of pointers is null, counting is not done.
79  if (pHistogram[0]==nullptr or pHistogram[1]==nullptr) return;
80 
81  const int xbins{pHistogram[0]->GetNbinsX() + 1};
82  const int ybins{pHistogram[0]->GetNbinsY() + 1};
83 
84  for (int xb{1}; xb < xbins; ++xb) {
85  for (int yb{1}; yb < ybins; ++yb) {
86  if (eitherSideIsOverThreshold(pHistogram, xb, yb, threshold)) {
87  countArray[generalIndex]++;
88  countArray[regionIndex]++;
89  }
90  }
91  }
92  }
93 }
94 
95 
96 // ====================================================================================================
102 // ====================================================================================================
103 SCTErrMonTool::SCTErrMonTool(const std::string& type, const std::string& name, const IInterface* parent)
105 }
106 
107 // ====================================================================================================
108 //====================================================================================================
110  ATH_CHECK(detStore()->retrieve(m_pSCTHelper, "SCT_ID"));
111 
113 
114  moduleGeo_t moduleGeo; // dummy value
115  const unsigned int maxHash{static_cast<unsigned int>(m_pSCTHelper->wafer_hash_max())}; // 8176
116  m_geo.resize(maxHash, moduleGeo);
117 
118  double rz{0.};
119  const double deltaZ{0.};
120 
121  const InDetDD::SCT_DetectorManager* sctManager{nullptr};
122  ATH_CHECK(detStore()->retrieve(sctManager, "SCT"));
123 
124  for (unsigned int i{0}; i<maxHash; i++) {
125  IdentifierHash hash{i};
126  const InDetDD::SiDetectorElement* newElement{sctManager->getDetectorElement(hash)};
127  newElement->getEtaPhiRegion(deltaZ,
128  moduleGeo.first.first, moduleGeo.first.second,
129  moduleGeo.second.first, moduleGeo.second.second,
130  rz);
131  m_geo[i] = moduleGeo;
132  }
135 }
136 
137 // ====================================================================================================
138 // SCTErrMonTool :: transfer [enum CategoryErrors] -> [TString ErrorName]
139 // ====================================================================================================
140 TString
141 SCTErrMonTool::errorsString(int errtype) const {
142  if (errtype == MASKEDLINKALL) {
143  return "MaskedLinkALL";
144  }
145  if (errtype == SUMMARY) {
146  return "Errors";
147  }
148  if (errtype == BADERR) {
149  return "BadErrors";
150  }
151  if (errtype == LINKLEVEL) {
152  return "LinkLevelErrors";
153  }
154  if (errtype == RODLEVEL) {
155  return "RODLevelErrors";
156  }
157  if (errtype == MASKEDCHIP) {
158  return "MaskedChipALL";
159  }
160  return "";
161 }
162 
163 // ====================================================================================================
164 // SCTErrMonTool :: bookHistograms
165 // ====================================================================================================
168 
169  ATH_MSG_DEBUG(" initialize being called ");
170  if (newRunFlag()) {
171  m_numberOfEvents = 0;
173  m_checkrate = 100;
174  }
175  }
178  }
179 
180  // Services for Summary Histograms: SCT_ModuleConditionsTool from CondDB
181  ATH_MSG_INFO("Checking for CondDB");
182  ATH_CHECK(m_ConfigurationTool.retrieve());
183 
184  // get a handle on the histogramming service //
185  ATH_CHECK(m_thistSvc.retrieve());
186 
188  if (bookConfMapsGen().isFailure()) {
189  ATH_MSG_WARNING("Error in bookConfMapsGen()");
190  }
191  if (bookErrHistosGen().isFailure()) {
192  ATH_MSG_WARNING("Error in bookErrHistosGen()");
193  }
194 
195  for (int reg{0}; reg<N_REGIONS; reg++) {
196  if (bookErrHistos(reg).isFailure()) {
197  ATH_MSG_WARNING("Error in bookErrHistos(): " << "SCT" + subDetNameShort[reg]);
198  }
199  }
200 
201  ATH_CHECK(m_byteStreamErrTool.retrieve());
202  if (m_useDCS) ATH_CHECK(m_dcsTool.retrieve());
203  else m_dcsTool.disable();
204  ATH_CHECK(m_pSummaryTool.retrieve());
205  ATH_CHECK(m_flaggedTool.retrieve());
206  m_initialize = true;
207  return StatusCode::SUCCESS;
208 }
209 
210 //====================================================================================================
211 // SCTErrMonTool :: bookHistogramsRecurrent, Keisuke Koda 12.09.2016
212 //====================================================================================================
214  static const std::string profNames[numberOfProblemForCoverage] = {
215  "", // All
216  "SCT_CoverageOfEnabledLinksVsLbs", // All - Disabled
217  "SCT_CoverageWithNoBadLinkLevelErrorVsLbs", // All - BadLinkLevelError
218  "SCT_CoverageWithNoBadRODLevelErrorVsLbs", // All - BadRODLevelError
219  "SCT_CoverageWithNoBadErrorVsLbs", // All - BadError
220  "SCT_CoverageWithNoPSTripVsLbs", // All - PSTrip(DCS)
221  "SCT_CoverageOfLinksWithNoBadProblemVsLbs" // All - Summary
222  };
223  static const std::string profTitles[numberOfProblemForCoverage] = {
224  "", // All
225  "Ave. Coverage of Enabled Links per LB", // All - Disabled
226  "Ave. Coverage of Links with No Bad LinkLevelError per LB", // All - BadLinkLevelError
227  "Ave. Coverage of Links with No Bad RODLevelError per LB", // All - BadRODLevelError
228  "Ave. Coverage of Links with No Bad Error per LB", // All - BadError
229  "Ave. Coverage of links Not Affected by PS Trip", // All - PSTrip(DCS)
230  "Ave. Coverage of Links With No Bad Problem per LB" // All - Summary
231  };
232 
233  bool status{true};
234  if ( not m_CoverageCheck ) {
235  return StatusCode::SUCCESS;
236  }
237 
239  MonGroup monGr_shift{this, "SCT/DetectorCoverage", ManagedMonitorToolBase::run, ATTRIB_UNMANAGED};
240 
241  //All SCT module for counting good module
242  m_mapSCT[allRegion] = new TH2F( "SCT_AllRegion", "Map of All Region",
244  //Disabled
245  m_mapSCT[disabled] = new TH2F( "SCT_MapOfDisabledLinks", "Map of Disabled Links",
247  //BadLinkLevelError
248  m_mapSCT[badLinkError] = new TH2F( "SCT_MapOfLinksWithBadLinkLevelErrors", "Map of Links with bad LinkLevelErrors",
250  //BadRODLevelError
251  m_mapSCT[badRODError] = new TH2F( "SCT_MapOfLinksWithBadRODLevelErrors", "Map of Links with Bad RODLevelErrors",
253  //BadError = BadLinkLevelError + BadRODLevelError
254  m_mapSCT[badError] = new TH2F( "SCT_MapOfLinksWithBadErrors", "Map of Links with Bad Errors",
256  //Power supply trip (SCT_DCSConditionsTool)
257  m_mapSCT[psTripDCS] = new TH2F( "SCT_MapOfLinksWithPSTrip", "Map of Links Affected by PS Trip",
259  //Total (SCT_ConditionsSummaryTool)
260  m_mapSCT[summary] = new TH2F( "SCT_MapOfLinksWithAnyProbelm", "Map of Links with Any Bad Problem",
262 
263  //Detector Coverage vs LumiBlock
264  for (int iProblem{0}; iProblem<numberOfProblemForCoverage ; iProblem++) {
265  m_mapSCT[iProblem]->GetXaxis()->SetTitle("#eta");
266  m_mapSCT[iProblem]->GetYaxis()->SetTitle("#phi");
267  status &= monGr_shift.regHist( m_mapSCT[iProblem] ).isSuccess();
268  m_mapSCT[iProblem]->SetStats(0);
269  }
270 
271  for (int iProblem{0}; iProblem<numberOfProblemForCoverage; iProblem++) {
272  if (iProblem==allRegion) continue;
273 
274  m_detectorCoverageVsLbs[iProblem] = new TProfile(profNames[iProblem].c_str(), profTitles[iProblem].c_str(), NBINS_LBs,0.5,NBINS_LBs+0.5);
275  m_detectorCoverageVsLbs[iProblem]->GetXaxis()->SetTitle("LumiBlock");
276  m_detectorCoverageVsLbs[iProblem]->GetYaxis()->SetTitle("Detector Coverage [%]");
277  if (monGr_shift.regHist(m_detectorCoverageVsLbs[iProblem]).isFailure()) {
278  ATH_MSG_WARNING("Cannot book " << profNames[iProblem] << ", " << profTitles[iProblem]);
279  }
280  }
281 
282  //Number of Modules affected by PS Trip vs LumiBlock
283  m_PSTripModulesVsLbs = new TProfile("SCT_ModulesWithPSTripVsLbs",
284  "Ave. Num of Modules Affected by PS Trip per LB in All Region",
285  NBINS_LBs,0.5,NBINS_LBs+0.5);
286  m_PSTripModulesVsLbs->GetXaxis()->SetTitle("LumiBlock");
287  m_PSTripModulesVsLbs->GetYaxis()->SetTitle("Num. of Modules Affected by PS Trip");
288  if ( monGr_shift.regHist(m_PSTripModulesVsLbs).isFailure() ) {
289  ATH_MSG_WARNING("Cannot book Histogram:SCTpstripWafer" );
290  }
291  }
292 
293  return ( status ) ? StatusCode::SUCCESS : StatusCode::FAILURE;
294 }
295 
296 // ====================================================================================================
297 // SCTErrMonTool :: fillHistograms
298 // This is the real workhorse, called for each event. It retrieves the data each time
299 // ====================================================================================================
302 
304  if (not pEvent.isValid()) {
305  ATH_MSG_WARNING("Could not retrieve event info!");
306  return StatusCode::SUCCESS;
307  }
308  m_current_lb = pEvent->lumiBlock();
309  bool sctflag{false};
310  if (pEvent->errorState(xAOD::EventInfo::SCT) == xAOD::EventInfo::Error) {
313  sctflag = true;
314  } else {
316  }
318 
320 
321  // Check wafers with many fired strips (event dependent) using SCT_FlaggedConditionTool.
322  std::array<int, N_REGIONS_INC_GENERAL> nFlaggedWafers{};
323  nFlaggedWafers.fill(0);
324  const unsigned int wafer_hash_max{static_cast<unsigned int>(m_pSCTHelper->wafer_hash_max())};
325  for (unsigned int iHash{0}; iHash<wafer_hash_max; iHash++) {
326  const IdentifierHash hash{iHash};
327  if (not m_flaggedTool->isGood(hash)) {
328  const Identifier wafer_id{m_pSCTHelper->wafer_id(hash)};
329  const int barrel_ec{m_pSCTHelper->barrel_ec(wafer_id)};
330  nFlaggedWafers[barrel_ec]++;
331  nFlaggedWafers[GENERAL_INDEX]++;
332  }
333  }
334  for (int reg{0}; reg<N_REGIONS_INC_GENERAL; reg++) {
335  m_flaggedWafers->Fill(reg, nFlaggedWafers[reg]);
336  }
337 
338  if (sctflag) {
339  return StatusCode::SUCCESS;
340  }
341 
343  if ((m_numberOfEvents == 1) or ((m_numberOfEvents > 1) and (m_numberOfEvents % m_checkrate) == 0)) {
344  if (resetCondDBMaps().isFailure()) {
345  ATH_MSG_WARNING("Error in resetCondDBMaps()");
346  }
347  if (fillCondDBMaps().isFailure()) {
348  ATH_MSG_WARNING("Error in fillCondDBMaps()");
349  }
350  if ((m_numberOfEvents % (m_checkrate * 10)) == 0) {
351  if (resetConfigurationDetails().isFailure()) {
352  ATH_MSG_WARNING("Error in resetConfigurationDetails()");
353  }
354  if (fillConfigurationDetails().isFailure()) {
355  ATH_MSG_WARNING("Error in fillConfigurationDetails()");
356  }
357  }
358  }
359  }
363  }
364  }
365  return StatusCode::SUCCESS;
366 }
367 
368 // ====================================================================================================
369 // SCTErrMonTool :: checkRateHists
370 // DD 17/08/2010
371 // Here we have the check of the histograms and we can build rate
372 // error rate histograms from the basic ones
373 // ====================================================================================================
377  bool isEndOfEventsBlock{endOfLumiBlockFlag()};
378 
380  if (m_initialize) {
381  float content{0.};
382  float cxb{0.};
383  float cyb{0.};
384  int evt_lumi{m_numberOfEventsLumi};
385  for (int reg{0}; reg<N_REGIONS; reg++) {
387  const unsigned int xbins{m_numErrorsPerLumi[reg]->GetNbinsX() + 1};
388  const unsigned int ybins{m_numErrorsPerLumi[reg]->GetNbinsY() + 1};
389  for (unsigned int xb{1}; xb < xbins; ++xb) {
391  for (unsigned int yb{1}; yb < ybins; ++yb) {
393  int num_modules{getNumModules(index2Bec(reg), yb - 1)};
395  if (num_modules > 0) {
396  m_rateErrorsPerLumi[reg]->Fill(cxb, cyb, 1, content);
397  m_rateErrorsPerLumi[reg]->Fill(cxb, cyb, 0, (evt_lumi * (static_cast<double>(num_modules)) - content));
398  }
399  }
400  }
401  }
402  }
403 
404  if (isEndOfEventsBlock) {
405  if (resetCondDBMaps().isFailure()) {
406  ATH_MSG_WARNING("Error in resetCondDBMaps()");
407  }
408  if (fillCondDBMaps().isFailure()) {
409  ATH_MSG_WARNING("Error in fillCondDBMaps()");
410  }
411  if (resetConfigurationDetails().isFailure()) {
412  ATH_MSG_WARNING("Error in resetConfigurationDetails()");
413  }
414  if (fillConfigurationDetails().isFailure()) {
415  ATH_MSG_WARNING("Error in fillConfigurationDetails()");
416  }
417  }
418  } // mf moved brackets to allow online compilation
419  }
420 
421  return StatusCode::SUCCESS;
422 }
423 
424 //====================================================================================================
425 // SCTErrMonTool :: procHistograms
426 // ====================================================================================================
429  if (endOfLumiBlockFlag()) {
430  ATH_MSG_DEBUG("finalHists()");
431  ATH_MSG_DEBUG("Total Rec Event Number: " << m_numberOfEvents);
432  ATH_MSG_DEBUG("Calling checkHists(true); true := end of run");
433  if (checkRateHists().isFailure()) {
434  ATH_MSG_WARNING("Error in checkRateHists()");
435  }
436  ATH_MSG_DEBUG("Exiting finalHists");
437  }
438  return StatusCode::SUCCESS;
439 }
440 
441 // ====================================================================================================
442 // SCTErrMonTool :: fillByteStreamErrorsHelper, Martin Flechl 10/09/2009
443 // ====================================================================================================
444 int
445 SCTErrMonTool::fillByteStreamErrorsHelper(const std::set<IdentifierHash>& errors,
446  bool lumi2DHist, int err_type) {
447 
448  //--- Check categories of the BS error
449  bool b_category[CategoryErrors::N_ERRCATEGORY];
450 
451  b_category[CategoryErrors::MASKEDLINKALL] =
452  (err_type == SCT_ByteStreamErrors::MaskedLink) or (err_type == SCT_ByteStreamErrors::MaskedROD);
453 
454  b_category[CategoryErrors::SUMMARY] = true;
455 
456  b_category[CategoryErrors::BADERR] = false;
457  for (SCT_ByteStreamErrors::ErrorType tmpBadError: SCT_ByteStreamErrors::BadErrors) {
458  if (err_type == tmpBadError) {
459  b_category[CategoryErrors::BADERR] = true;
460  break;
461  }
462  }
463 
464 
465  b_category[CategoryErrors::LINKLEVEL] = false;
466  for (SCT_ByteStreamErrors::ErrorType linkLevelError: SCT_ByteStreamErrors::LinkLevelErrors) {
467  if (err_type == linkLevelError) {
468  b_category[CategoryErrors::LINKLEVEL] = true;
469  break;
470  }
471  }
472 
473  b_category[CategoryErrors::RODLEVEL] = false;
474  for (SCT_ByteStreamErrors::ErrorType rodLevelError: SCT_ByteStreamErrors::RodLevelErrors) {
475  if (err_type == rodLevelError) {
476  b_category[CategoryErrors::RODLEVEL] = true;
477  break;
478  }
479  }
480 
481  b_category[CategoryErrors::MASKEDCHIP] =
482  (err_type == SCT_ByteStreamErrors::TempMaskedChip0) or (err_type == SCT_ByteStreamErrors::TempMaskedChip1) or
483  (err_type == SCT_ByteStreamErrors::TempMaskedChip2) or (err_type == SCT_ByteStreamErrors::TempMaskedChip3) or
484  (err_type == SCT_ByteStreamErrors::TempMaskedChip4) or (err_type == SCT_ByteStreamErrors::TempMaskedChip5);
485 
486  //--- Count BS errors
487  int nerrors{0};
488  for (const auto& hash: errors) {
489  nerrors++;
490  if (not hash.is_valid()) continue;
491 
492  //--- FIll module information with BS error
493  Identifier fitId{m_pSCTHelper->wafer_id(hash)};
494  int layer{m_pSCTHelper->layer_disk(fitId)};
495  int side{m_pSCTHelper->side(fitId)};
496  int barrel_ec{m_pSCTHelper->barrel_ec(fitId)};
497  int ieta{m_pSCTHelper->eta_module(fitId)};
498  int iphi{m_pSCTHelper->phi_module(fitId)};
499  layer = layer * 2 + side;
500  // barrel_ec = {ENDCAP_C=-2, BARREL=0, ENDCAP_A=2}
501  // -> regionIndex = {ENDCAP_C_INDEX=0, BARREL_INDEX=1, ENDCAP_A_INDEX=2, GENERAL_INDEX=3}
502  int regionIndex{GENERAL_INDEX};
503  if ((barrel_ec == BARREL) and (layer >= 0) and (layer < N_BARRELSx2)) regionIndex = BARREL_INDEX;
504  else if (barrel_ec == ENDCAP_A) regionIndex = ENDCAP_A_INDEX;
505  else if (barrel_ec == ENDCAP_C) regionIndex = ENDCAP_C_INDEX;
506 
507  //--- Fill BS errors to the map for each categories
509  if (b_category[CategoryErrors::MASKEDLINKALL] and (regionIndex!=GENERAL_INDEX)) m_MaskedAllLinks->Fill(regionIndex);
510 
511  if (not lumi2DHist) {
512  if (m_doPerLumiErrors) m_numErrorsPerLumi[regionIndex]->Fill(err_type, layer);
513  for (int errType{0}; errType < CategoryErrors::N_ERRCATEGORY; ++errType) {
514  if (b_category[errType]) m_pallErrsCate[errType][regionIndex][layer]->Fill(ieta, iphi);
515  }
516  }
517  }
518 
519  if (b_category[CategoryErrors::SUMMARY]) return nerrors;
520  return 0;
521 }
522 
523 // ====================================================================================================
524 // SCTErrMonTool :: numByteStreamErrors, Daniel Damiani 04/07/2011
525 // ====================================================================================================
526 void
527 SCTErrMonTool::numByteStreamErrors(const std::set<IdentifierHash>& errors, int& ntot) const {
528 
529  for (const auto& fit: errors) {
530  if (fit.is_valid()) {
531  ntot++;
532  }
533  }
534 
535 }
536 
537 // ====================================================================================================
538 // SCTErrMonTool :: fillByteStreamErrors
539 // ====================================================================================================
542 
543  //--- Get event information
545  if (not pEvent.isValid()) {
546  ATH_MSG_ERROR("Could not retrieve event info!");
547  return StatusCode::RECOVERABLE;
548  }
549  unsigned int current_lb{pEvent->lumiBlock()};
550 
551  bool sctflag{false};
552  if (pEvent->errorState(xAOD::EventInfo::SCT) == xAOD::EventInfo::Error) {
553  sctflag = true;
554  }
555  const EventContext& ctx{Gaudi::Hive::currentContext()};
556  //--- Fill 1D histograms (vs LumiBlock) for each BS
557  for (int errType{0}; errType < SCT_ByteStreamErrors::NUM_ERROR_TYPES; ++errType) {
558  int bs_errs{0}; // ALL
559  // get number of BS errors
560  numByteStreamErrors(m_byteStreamErrTool->getErrorSet(errType, ctx),
561  bs_errs);
562  // fill number of BS errors vs LBs
563  if (not sctflag) m_ByteStreamVsLB[errType]->Fill(current_lb, static_cast<double>(bs_errs));
564  }
565 
566  if (sctflag) {
567  return StatusCode::SUCCESS;
568  }
569 
570  //--- Reset Histograms
571  m_MaskedAllLinks->Reset();
572 
573  int tot_mod_bytestreamCate_errs[CategoryErrors::N_ERRCATEGORY];
574  for (int errType{0}; errType < CategoryErrors::N_ERRCATEGORY; ++errType) {
575  tot_mod_bytestreamCate_errs[errType] = 0;
576  }
577 
578  for (int reg{0}; reg < N_REGIONS; ++reg) {
579  const int nLayers{n_layers[reg]*2};
580  for (int lyr{0}; lyr < nLayers; ++lyr) {
581  for (int errType{0}; errType < CategoryErrors::N_ERRCATEGORY; ++errType) {
582  if (m_pallErrsCate[errType][reg][lyr]) m_pallErrsCate[errType][reg][lyr]->Reset();
583  }
585  (m_current_lb % m_checkrecent == 0) and
587  m_summaryErrsRecent[reg][lyr]) {
588  m_summaryErrsRecent[reg][lyr]->Reset();
589  }
590  }
591  }
592 
593  //--- Fill map histograms for each BS
594  for (int errType{0}; errType < SCT_ByteStreamErrors::NUM_ERROR_TYPES; ++errType) {
595  fillByteStreamErrorsHelper(m_byteStreamErrTool->getErrorSet(errType, ctx), false, errType);
596  }
597 
598  //--- Fill detector coverage histograms
599  if ( m_CoverageCheck ) {
600  ATH_MSG_INFO("Detector Coverage calculation starts" );
601 
602  for (int iProblem{0}; iProblem<numberOfProblemForCoverage; iProblem++) {
603  m_mapSCT[iProblem]->Reset("ICE");
604  }
605 
606  std::set<IdentifierHash> sctHash[numberOfProblemForCoverage]{{}};
607  syncDisabledSCT(sctHash[disabled]);
608  syncErrorSCT(sctHash[badLinkError], sctHash[badRODError], sctHash[badError]);
609  summarySCT(sctHash[allRegion], sctHash[summary]);
610  float PSTripModules{0.};
611  psTripDCSSCT(sctHash[psTripDCS],
612  PSTripModules);
613 
614  for (int iProblem{0}; iProblem<numberOfProblemForCoverage; iProblem++) {
615  for (const IdentifierHash& hash: sctHash[iProblem]) {
616  fillWafer(m_geo[hash], m_mapSCT[iProblem]);
617  }
618  }
619 
620  //detector coverage
621  for (int iProblem{0}; iProblem<numberOfProblemForCoverage; iProblem++) {
622  if (iProblem==allRegion) continue;
623 
624  double detector_coverage{calculateDetectorCoverage(m_mapSCT[iProblem])};
625  m_detectorCoverageVsLbs[iProblem]->Fill(static_cast<double>(current_lb), detector_coverage);
626  }
627 
628  //Modules affected by PS Tirp
629  m_PSTripModulesVsLbs ->Fill(static_cast<double>(current_lb), PSTripModules);
630 
631  }
632 
633  //--- Counting # of links with categorised errors
634  for (int reg{0}; reg < N_REGIONS; ++reg) {
635  const int nLayers{n_layers[reg]*2};
636  for (int lyr{0}; lyr < nLayers; ++lyr) {
637  const unsigned int nBinsX{m_pallErrsCate[CategoryErrors::SUMMARY][reg][lyr]->GetNbinsX() + 1};
638  const unsigned int nBinsY{m_pallErrsCate[CategoryErrors::SUMMARY][reg][lyr]->GetNbinsY() + 1};
639  for (unsigned int xb{1}; xb < nBinsX; ++xb) {
641  for (unsigned int yb{1}; yb < nBinsY; ++yb) {
643  for (int errType{0}; errType < CategoryErrors::N_ERRCATEGORY; ++errType) {
644  if (m_pallErrsCate[errType][reg][lyr]->GetBinContent(xb, yb) > 0) {
645  m_allErrsCate[errType][reg][lyr]->Fill(cxb, cyb, 1);
647  m_summaryErrsRecent[reg][lyr]->Fill(cxb, cyb, 1);
648  }
649  tot_mod_bytestreamCate_errs[errType]++;
650  } else {
651  m_allErrsCate[errType][reg][lyr]->Fill(cxb, cyb, 0);
653  m_summaryErrsRecent[reg][lyr]->Fill(cxb, cyb, 0);
654  }
655  }
656  }
657 
659  // mf cast to (int) below to avoid compiler warnings... we do want int, right? Some code duplication
660  // below...
661  if ((m_numberOfEvents % m_checkrate == 0) and m_runOnline) {
662  for (int errType{0}; errType < CategoryErrors::N_ERRCATEGORY; ++errType) {
663  int content{static_cast<int>(m_pallErrsCate[errType][reg][lyr]->GetBinContent(xb, yb))};
664  int evt{m_numberOfEvents};
665  m_allErrsCate[errType][reg][lyr]->Fill(cxb, cyb, 1, content);
666  m_allErrsCate[errType][reg][lyr]->Fill(cxb, cyb, 0, evt - content);
667  }
668  }
669  }
670  } // Loop for BinY
671  } // Loop for BinX
672  } // Loop for Layer
673  } // Loop for Region
674 
675  for (int errType{0}; errType < CategoryErrors::N_ERRCATEGORY; ++errType) {
676  m_LinksWithCategorisedErrorsVsLB[errType]->Fill(current_lb, (tot_mod_bytestreamCate_errs[errType]));
677  }
678 
681  return StatusCode::SUCCESS;
682 }
683 
684 // ====================================================================================================
685 // SCTErrMonTool :: bookErrHistosHelper
686 // Avoids duplicate code in the bookErrHistosXXXX functions; added 8/9/09, Martin Flechl
687 // ====================================================================================================
689 SCTErrMonTool::bookErrHistosHelper(MonGroup& mg, TString name, TString title, TString titlehitmap,
690  TProfile2D_LW*& tprof, TH2F_LW*& th, const int layer, const bool barrel) const {
691  std::ostringstream streamhitmap;
692 
693  streamhitmap << layer / 2 << "_" << layer % 2;
694 
695  name += streamhitmap.str();
696  title += streamhitmap.str();
697  titlehitmap += streamhitmap.str();
698 
699  if (barrel) {
700  const float xlo{FIRST_ETA_BIN - 0.5};
701  const float xhi{LAST_ETA_BIN + 0.5};
702  const float ylo{FIRST_PHI_BIN - 0.5};
703  const float yhi{LAST_PHI_BIN + 0.5};
705  th = TH2F_LW::create(titlehitmap, title, N_ETA_BINS, xlo, xhi, N_PHI_BINS, ylo, yhi);
706  } else {
707  const float xlo{FIRST_ETA_BIN_EC - 0.5};
708  const float xhi{LAST_ETA_BIN_EC + 0.5};
709  const float ylo{FIRST_PHI_BIN_EC - 0.5};
710  const float yhi{LAST_PHI_BIN_EC + 0.5};
713  }
714  StatusCode sc0{mg.regHist(th)};
715  StatusCode sc1{mg.regHist(tprof)};
716  if (sc0.isFailure() or sc1.isFailure()) {
717  return StatusCode::FAILURE;
718  }
719  return StatusCode::SUCCESS;
720 }
721 
722 // ====================================================================================================
723 // SCTErrMonTool :: bookErrHistosHelper
724 // Avoids duplicate code in the bookErrHistosXXXX functions; added 08/08/11, Daniel Damiani
725 // ====================================================================================================
728  const bool barrel) const {
729  std::ostringstream streamhitmap;
730 
731  streamhitmap << layer / 2 << "_" << layer % 2;
732 
733  name += streamhitmap.str();
734  title += streamhitmap.str();
735  if (barrel) {
737  FIRST_PHI_BIN - 0.5, LAST_PHI_BIN + 0.5);
738  } else {
741  }
742 
743  StatusCode sc{mg.regHist(tprof)};
744  if (sc.isFailure()) {
745  return StatusCode::FAILURE;
746  }
747  return StatusCode::SUCCESS;
748 }
749 
750 // ====================================================================================================
751 // SCTErrMonTool :: bookErrHistos
752 // Book 1D and 2D Histograms of errors
753 // ====================================================================================================
755 SCTErrMonTool::bookErrHistos(int reg=-1) { // reg = 0:EC, 1:B, 2:EA
756 
757  if (reg==-1) return StatusCode::FAILURE;
758 
759  const int nLayers{n_layers[reg]*2};
760  std::string regName{("SCT" + subDetNameShort[reg]).Data()};
761  std::string layerTitle{layerName[reg].Data()};
762  layerTitle.at(0)=toupper(layerTitle.at(0));
763 
764  if (m_doPerLumiErrors) {
766  MonGroup lumiErr{this, ("SCT/"+regName+"/errors").c_str(), ManagedMonitorToolBase::lumiBlock, ATTRIB_UNMANAGED};
767  //______________________________________________________________________________________
769  TH2F_LW::create("NumErrsPerLumi", ("Total Number of Error Types for "+layerTitle+" per Lumi-Block").c_str(),
771  nLayers, -0.5, nLayers-0.5);
772  if (lumiErr.regHist(m_numErrorsPerLumi[reg]).isFailure()) {
773  ATH_MSG_WARNING("Couldn't book NumErrsPerLumi");
774  }
775  //______________________________________________________________________________________
777  TProfile2D_LW::create("RateErrorsPerLumi", ("Rate of Error Types for "+layerTitle+" per Lumi-Block").c_str(),
779  nLayers, -0.5, nLayers-0.5);
780  if (lumiErr.regHist(m_rateErrorsPerLumi[reg]).isFailure()) {
781  ATH_MSG_WARNING("Couldn't book RateErrorsPerLumi");
782  }
783  //______________________________________________________________________________________
784  for (unsigned int bin{0}; bin < SCT_ByteStreamErrors::NUM_ERROR_TYPES; bin++) {
785  m_numErrorsPerLumi[reg]->GetXaxis()->SetBinLabel(bin+1, SCT_ByteStreamErrors::ErrorTypeDescription[bin].c_str());
786  m_rateErrorsPerLumi[reg]->GetXaxis()->SetBinLabel(bin+1, SCT_ByteStreamErrors::ErrorTypeDescription[bin].c_str());
787  }
788  for (int bin{0}; bin < nLayers; bin++) {
791  }
792  }
793  }
794 
796  bool somethingFailed{false};
797  // Book percentage error histograms
798  for (int layer{0}; layer < nLayers; ++layer) {
799  for (int errType{0}; errType < CategoryErrors::N_ERRCATEGORY; ++errType) {
800  MonGroup err2{this, "SCT/"+regName+"/errors/"+errorsString(errType).Data(), ManagedMonitorToolBase::lumiBlock, ATTRIB_UNMANAGED};
801  std::string name1{("SCT_NumberOf" + errorsString(errType) + subDetNameShort[reg].Data() + "_").Data()};
802  std::string title{("Num of " + errorsString(errType) + " per "+layerTitle).Data()};
803  std::string name2{("SCT_T" + errorsString(errType) + subDetNameShort[reg].Data() + "_").Data()};
804  somethingFailed |= bookErrHistosHelper(err2, name1, title, name2, m_allErrsCate[errType][reg][layer],
805  m_pallErrsCate[errType][reg][layer], layer, reg==BARREL_INDEX).isFailure();
806  }
808  MonGroup err{this, "SCT/"+regName+"/errors/", ManagedMonitorToolBase::run, ATTRIB_UNMANAGED};
809  somethingFailed |= bookErrHistosHelper(err,
810  ("summaryErrsRecent"+subDetNameShort[reg]+"_").Data(),
811  "summary recent Layer ",
813  layer, reg==BARREL_INDEX).isFailure();
814  }
815  }
816  if (somethingFailed) {
817  ATH_MSG_DEBUG("Something went wrong in bookErrHistos "<< regName);
818  }
819  }
820 
821  return StatusCode::SUCCESS;
822 }
823 
827  MonGroup MaskErrs{this, "SCT/GENERAL/errors", ManagedMonitorToolBase::run, ATTRIB_UNMANAGED};
828  m_MaskedAllLinks = new TH1I("Masked Links", "Number of Masked Links for SCT,ECA,B,ECC", N_REGIONS_INC_GENERAL, -0.5, N_REGIONS_INC_GENERAL-0.5);
829  m_MaskedAllLinks->GetXaxis()->SetBinLabel(1, "EndCapC");
830  m_MaskedAllLinks->GetXaxis()->SetBinLabel(2, "Barrel");
831  m_MaskedAllLinks->GetXaxis()->SetBinLabel(3, "EndCapA");
832  m_MaskedAllLinks->GetXaxis()->SetBinLabel(4, "All");
833  if (MaskErrs.regHist(m_MaskedAllLinks).isFailure()) {
834  ATH_MSG_WARNING("Couldn't book MaskedLinks");
835  }
836  m_flaggedWafers = new TProfile("FlaggedWafers", "Number of flagged wafers for SCT,ECA,B,ECC", N_REGIONS_INC_GENERAL, -0.5, N_REGIONS_INC_GENERAL-0.5);
837  m_flaggedWafers->GetXaxis()->SetBinLabel(1, "EndCapC");
838  m_flaggedWafers->GetXaxis()->SetBinLabel(2, "Barrel");
839  m_flaggedWafers->GetXaxis()->SetBinLabel(3, "EndCapA");
840  m_flaggedWafers->GetXaxis()->SetBinLabel(4, "All");
841  if (MaskErrs.regHist(m_flaggedWafers).isFailure()) {
842  ATH_MSG_WARNING("Couldn't book FlaggedWafers");
843  }
844  }
845  return StatusCode::SUCCESS;
846 }
847 
848 // ====================================================================================================
849 // SCTErrMonTool :: bookConfMapsGen
850 // ====================================================================================================
853  static const std::string SummaryBinNames[ConfbinsSummary] = {
854  "Mod Out", "Flagged Links", "Masked Links", "Errors", "Inefficient", "Noisy"
855  };
856  static const std::string DetailedBinNames[ConfbinsDetailed] = {
857  "Modules", "Link 0", "Link 1", "Chips", "Strips (10^{2})"
858  };
859  static const std::string OnlineBinNames[ConfbinsOnline] = {
860  "Mod Out", "Flagged Links", "Masked Links", "Errors"
861  };
862  static const TString regLabel[N_REGIONS_INC_GENERAL] = {
863  "EndcapC", "Barrel", "EndcapA", ""
864  };
865  static const TString regTitle[N_REGIONS_INC_GENERAL] = {
866  "EndcapC", "Barrel", "EndcapA", "All Region"
867  };
868 
870  MonGroup ConfHist[N_REGIONS_INC_GENERAL] = {
871  MonGroup{this, "SCT/SCTEC/Conf", ManagedMonitorToolBase::run, ATTRIB_UNMANAGED},
872  MonGroup{this, "SCT/SCTB/Conf", ManagedMonitorToolBase::run, ATTRIB_UNMANAGED},
873  MonGroup{this, "SCT/SCTEA/Conf", ManagedMonitorToolBase::run, ATTRIB_UNMANAGED},
874  MonGroup{this, "SCT/GENERAL/Conf", ManagedMonitorToolBase::run, ATTRIB_UNMANAGED}
875  };
876 
877  std::string streamName{streamNameFunction()->getStreamName(this, ConfHist[GENERAL_INDEX], "", false)};
878  m_gpath = streamName.substr(0, streamName.rfind("SCT/GENERAL/Conf"));
879  ATH_MSG_INFO("Global Path :" << m_gpath);
880 
881  if (m_makeConfHisto or testOffline) {
882  m_DetailedConfiguration = TProfile_LW::create("SCTConfDetails", "Exclusion from the Configuration",
883  ConfbinsDetailed, -0.5, ConfbinsDetailed - 0.5);
884  for (int bin{0}; bin < ConfbinsDetailed; bin++) {
885  m_DetailedConfiguration->GetXaxis()->SetBinLabel(bin + 1, DetailedBinNames[bin].c_str());
886  }
887  if (ConfHist[GENERAL_INDEX].regHist(m_DetailedConfiguration).isFailure()) {
888  ATH_MSG_WARNING("Cannot book Histogram:SCTConfDetails");
889  }
890 
891  m_ConfNew = TProfile_LW::create("SCTConf"+regLabel[GENERAL_INDEX]+"New", "Num of Problematic Modules in "+regTitle[GENERAL_INDEX],
892  ConfbinsSummary-1, -0.5, ConfbinsSummary-1-0.5);
893  for (int bin{1}; bin < ConfbinsSummary; bin++) {
894  m_ConfNew->GetXaxis()->SetBinLabel(bin, SummaryBinNames[bin].c_str());
895  }
896  if (ConfHist[GENERAL_INDEX].regHist(m_ConfNew).isFailure()) {
897  ATH_MSG_WARNING("Cannot book Histogram:SCTConf");
898  }
899 
900  m_ConfOutModules = TProfile_LW::create("SCTConf"+regLabel[GENERAL_INDEX]+"OutM", "Num of Out Modules in "+regTitle[GENERAL_INDEX], 1, -0.5, 0.5);
901  m_ConfOutModules->GetXaxis()->SetBinLabel(1, "Mod Out");
902  if (ConfHist[GENERAL_INDEX].regHist(m_ConfOutModules).isFailure()) {
903  ATH_MSG_WARNING("Cannot book Histogram:SCTConf");
904  }
905 
906  for (int errType{0}; errType < SCT_ByteStreamErrors::NUM_ERROR_TYPES; ++errType) {
907  m_ByteStreamVsLB[errType] =
908  TProfile_LW::create("SCT_" + SCT_ByteStreamErrors::ErrorTypeDescription[errType] + "VsLbs" + regLabel[GENERAL_INDEX],
909  "Ave. " + SCT_ByteStreamErrors::ErrorTypeDescription[errType] + " per LB in " + regTitle[GENERAL_INDEX],
910  NBINS_LBs, 0.5, NBINS_LBs + 0.5);
911  m_ByteStreamVsLB[errType]->GetXaxis()->SetTitle("LumiBlock");
912  m_ByteStreamVsLB[errType]->GetYaxis()->SetTitle("Num of " + TString(SCT_ByteStreamErrors::ErrorTypeDescription[errType]));
913 
914  if (ConfHist[GENERAL_INDEX].regHist(m_ByteStreamVsLB[errType]).isFailure()) {
915  ATH_MSG_WARNING("Cannot book Histogram:" + SCT_ByteStreamErrors::ErrorTypeDescription[errType]);
916  }
917  }
918 
919  for (int errType{0}; errType < CategoryErrors::N_ERRCATEGORY; ++errType) {
921  TProfile_LW::create("SCT_LinksWith" + errorsString(errType) + "VsLbs" + regLabel[GENERAL_INDEX],
922  "Ave. Num of Links with " + errorsString(errType) + " per LB in " + regTitle[GENERAL_INDEX],
923  NBINS_LBs, 0.5, NBINS_LBs+0.5);
924  m_LinksWithCategorisedErrorsVsLB[errType]->GetXaxis()->SetTitle("LumiBlock");
925  m_LinksWithCategorisedErrorsVsLB[errType]->GetYaxis()->SetTitle("Num of Links with "+errorsString(errType));
926 
927  if (ConfHist[GENERAL_INDEX].regHist(m_LinksWithCategorisedErrorsVsLB[errType]).isFailure()) {
928  ATH_MSG_WARNING("Cannot book Histogram:SCTLinksWith" + errorsString(errType) + "VsLbs" + regLabel[GENERAL_INDEX]);
929  }
930  }
931 
932  m_NumberOfSCTFlagErrorsVsLB = TH1F_LW::create("NumberOfSCTFlagErrorsVsLB","Num of SCT Flag errors per LB ",NBINS_LBs, 0.5, NBINS_LBs + 0.5);
934  if (ConfHist[GENERAL_INDEX].regHist(m_NumberOfSCTFlagErrorsVsLB).isFailure()) {
935  ATH_MSG_WARNING("Cannot book Histogram:NumberOfSCTFlagErrors");
936  }
937 
938  m_NumberOfEventsVsLB = TH1F_LW::create("NumberOfEventsVsLB", "Num of events per LB ", NBINS_LBs, 0.5,NBINS_LBs + 0.5);
939  m_NumberOfEventsVsLB->GetXaxis()->SetTitle("LumiBlock");
940  if (ConfHist[GENERAL_INDEX].regHist(m_NumberOfEventsVsLB).isFailure()) {
941  ATH_MSG_WARNING("Cannot book Histogram:NumberOfEventsVsLB");
942  }
943 
944  m_FractionOfSCTFlagErrorsPerLB = TProfile_LW::create("FractionOfSCTFlagErrorsPerLB", "Frac of SCT Flag errors per LB ",NBINS_LBs, 0.5, NBINS_LBs + 0.5);
946  if (ConfHist[GENERAL_INDEX].regHist(m_FractionOfSCTFlagErrorsPerLB).isFailure()) {
947  ATH_MSG_WARNING("Cannot book Histogram:FractionOfSCTFlagErrorsPerLB");
948  }
949 
950  if ((m_environment == AthenaMonManager::online) or testOffline) {
951  m_ConfEffOnline = new TProfile("SCTEffConf", "Number of Inefficient Modules Online",
953  m_ConfNoiseOnline = TProfile_LW::create("SCTNoiseConf", "Number of Noisy Modules Online",
955  m_ConfNoiseOnlineRecent = TProfile_LW::create("SCTNoiseConfRecent", "Number of Noisy Modules Online Recent",
957  for (int reg{0}; reg < N_REGIONS_INC_GENERAL; ++reg) {
958  m_ConfOnline[GENERAL_INDEX] = TProfile_LW::create("SCTOnlineConf"+regLabel[GENERAL_INDEX], "Num of Out Links in "+regTitle[GENERAL_INDEX]+" Online",
959  ConfbinsOnline, -0.5, ConfbinsOnline-0.5);
960  for (int bin{0}; bin < ConfbinsOnline; bin++) {
961  m_ConfOnline[GENERAL_INDEX]->GetXaxis()->SetBinLabel(bin + 1, OnlineBinNames[bin].c_str());
962  }
963 
964  if (ConfHist[GENERAL_INDEX].regHist(m_ConfOnline[GENERAL_INDEX]).isFailure()) {
965  ATH_MSG_WARNING("Cannot book Histogram:SCTConfOnline");
966  }
967 
968  m_ConfEffOnline->GetXaxis()->SetBinLabel(reg + 1, ("Ineff "+subDetNameShort[GENERAL_INDEX]).Data());
969  m_ConfNoiseOnline->GetXaxis()->SetBinLabel(reg + 1, ("Noisy "+subDetNameShort[GENERAL_INDEX]).Data());
970  m_ConfNoiseOnlineRecent->GetXaxis()->SetBinLabel(reg + 1, ("Noisy "+subDetNameShort[GENERAL_INDEX]).Data());
971  }
972 
973  if (ConfHist[GENERAL_INDEX].regHist(m_ConfEffOnline).isFailure()) {
974  ATH_MSG_WARNING("Cannot book Histogram:SCTConfEffOnline");
975  }
976  if (ConfHist[GENERAL_INDEX].regHist(m_ConfNoiseOnline).isFailure()) {
977  ATH_MSG_WARNING("Cannot book Histogram:SCTConfNoiseOnline");
978  }
979  if (ConfHist[GENERAL_INDEX].regHist(m_ConfNoiseOnlineRecent).isFailure()) {
980  ATH_MSG_WARNING("Cannot book Histogram:SCTConfNoiseOnlineRecent");
981  }
982  }
983  ATH_MSG_DEBUG("Finished registering Conf Histograms :" << m_gpath);
984  }// end if m_makeConfHisto or testOffline
985  }// end if isNewRun
986  return StatusCode::SUCCESS;
987 }
988 
989 // ====================================================================================================
990 // SCTErrMonTool :: fillCondDBMaps
991 // ====================================================================================================
994  double Flagged[N_REGIONS_INC_GENERAL] = {
995  m_flaggedWafers->GetBinContent(1),
996  m_flaggedWafers->GetBinContent(2),
997  m_flaggedWafers->GetBinContent(3),
998  m_flaggedWafers->GetBinContent(4)
999  };
1000  int MOut[N_REGIONS_INC_GENERAL] = {
1001  0, 0, 0, 0
1002  };
1003  int MaskedAllLinks[N_REGIONS_INC_GENERAL] = {
1004  static_cast<int>(m_MaskedAllLinks->GetBinContent(1)),
1005  static_cast<int>(m_MaskedAllLinks->GetBinContent(2)),
1006  static_cast<int>(m_MaskedAllLinks->GetBinContent(3)),
1007  static_cast<int>(m_MaskedAllLinks->GetBinContent(4))
1008  };
1009  int ModErr[N_REGIONS_INC_GENERAL] = {
1010  0, 0, 0, 0
1011  };
1012  int InEffModules[N_REGIONS_INC_GENERAL] = {
1013  0, 0, 0, 0
1014  };
1015  int NoisyModules[N_REGIONS_INC_GENERAL] = {
1016  0, 0, 0, 0
1017  };
1018  int NoisyModulesRecent[N_REGIONS_INC_GENERAL] = {
1019  0, 0, 0, 0
1020  };
1021 
1022  bool failedbooking{false};
1023  TH2* hitsHisto_tmp[2];
1024 
1025  std::vector<TH2F> p2DmapHistoVectorAll[SCT_Monitoring::N_REGIONS]{};
1026  for (int reg{0}; reg < N_REGIONS; ++reg) {
1027  std::string regName{("SCT" + subDetNameShort[reg]).Data()};
1028  const int nLayers{n_layers[reg]*2};
1029  for (int layer{0}; layer < nLayers; ++layer) {
1030  std::string mapName{std::string{"modulemap"} + subDetNameShort[reg].Data() + std::to_string(layer/2) + "_" + std::to_string(layer%2)};
1031  TH2F hitsHisto_tmp2{TH2F(mapName.c_str(),
1032  (std::string{"Module Out of Configuration : "}+subDetName[reg].Data()+", "+
1033  layerName[reg].Data()+" "+std::to_string(layer/2)+
1034  " side "+std::to_string(layer%2)).c_str(),
1035  n_etabins[reg], f_etabin[reg] - 0.5, l_etabin[reg] + 0.5,
1036  n_phibins[reg], f_phibin[reg] - 0.5, l_phibin[reg] + 0.5)};
1037  hitsHisto_tmp2.GetXaxis()->SetTitle("Index in the direction of #eta");
1038  hitsHisto_tmp2.GetYaxis()->SetTitle("Index in the direction of #phi");
1039  p2DmapHistoVectorAll[reg].push_back(hitsHisto_tmp2);
1040  }
1041  }
1042 
1043  // Pointers are deleted by regHist() method
1046  for (; planeIterator not_eq planeEnd; ++planeIterator) {
1047  Identifier planeId{*planeIterator};
1048  int eta{m_pSCTHelper->eta_module(planeId)};
1049  int phi{m_pSCTHelper->phi_module(planeId)};
1050  int barrel_ec{m_pSCTHelper->barrel_ec(planeId)};
1051  int reg{BARREL_INDEX};
1052  if (barrel_ec == ENDCAP_A) reg = ENDCAP_A_INDEX;
1053  if (barrel_ec == ENDCAP_C) reg = ENDCAP_C_INDEX;
1054  int element{2 * m_pSCTHelper->layer_disk(planeId) + m_pSCTHelper->side(planeId)};
1055  int IN{m_ConfigurationTool->isGood(planeId, InDetConditions::SCT_SIDE) ? 0 : 1};
1056  if (m_pSCTHelper->side(planeId) == 0) {
1057  if (IN == 1) {
1058  MOut[GENERAL_INDEX]++;
1059  MOut[reg]++;
1060  }
1061  }
1062  // danger: no check that barrel_ec is valid
1063  int y{phi + 1};
1064  int x{(barrel_ec == BARREL) ? (eta + 7) : (eta + 1)};
1065  p2DmapHistoVectorAll[reg][element].SetBinContent(x, y, IN);
1066  }
1067 
1068  // region
1069  for (int reg{0}; reg<N_REGIONS; reg++) {
1070  const int nLayers{n_layers[reg]};
1071  for (int lyr{0}; lyr < nLayers; ++lyr) {
1072 
1073  // Check for the number of Modules with more than m_errThreshold error rate
1074  const unsigned int xbins{m_allErrsCate[CategoryErrors::SUMMARY][reg][lyr]->GetNbinsX() + 1};
1075  const unsigned int ybins{m_allErrsCate[CategoryErrors::SUMMARY][reg][lyr]->GetNbinsY() + 1};
1076  for (unsigned int xb{1}; xb < xbins; ++xb) {
1077  for (unsigned int yb{1}; yb < ybins; ++yb) {
1078  if (m_allErrsCate[CategoryErrors::SUMMARY][reg][2*lyr ]->GetBinContent(xb, yb) > m_errThreshold or
1080  ModErr[GENERAL_INDEX]++;
1081  ModErr[reg]++;
1082  }
1083  }
1084  }
1085 
1086  // noisy modules
1087  failedbooking = getHisto(lyr, reg, 0, hitsHisto_tmp);
1088  if (failedbooking == false) {
1089  countNoisyModules(reg, GENERAL_INDEX, hitsHisto_tmp, m_noiseThreshold, NoisyModules);
1090  }
1091  // noisy modules recent
1093  failedbooking = getHistoRecent(lyr, reg, 0, hitsHisto_tmp);
1094  if (failedbooking == false) {
1095  countNoisyModules(reg, GENERAL_INDEX, hitsHisto_tmp, m_noiseThreshold, NoisyModulesRecent);
1096  }
1097  }
1098 
1099  // ineff modules
1100  failedbooking = getHisto(lyr, reg, 1, hitsHisto_tmp);
1101  if (failedbooking == false) {
1103  thereAreEnoughEntries(hitsHisto_tmp, m_min_stat_ineff_mod) or
1104  testOffline) {
1105  const int xbins{hitsHisto_tmp[0]->GetNbinsX() + 1};
1106  const int ybins{hitsHisto_tmp[0]->GetNbinsY() + 1};
1107  // if (testOffline) printContents(hitsHisto_tmp[0]);
1108  for (int xb{1}; xb < xbins; ++xb) {
1109  for (int yb{1}; yb < ybins; ++yb) {
1110  float outOfConfig{static_cast<float>(p2DmapHistoVectorAll[reg][2 * lyr].GetBinContent(xb, yb))};
1111  if (outOfConfig < 1.) { // i.e. its in the configuration
1112  int nSides{numberOfInefficientSides(hitsHisto_tmp, xb, yb, 1 - m_effThreshold)};
1113  InEffModules[GENERAL_INDEX] += nSides;
1114  InEffModules[reg] += nSides;
1115  }
1116  }
1117  }
1118  }
1119  }
1120  }
1121  }
1122 
1123  if (m_makeConfHisto) {
1124  m_ConfOutModules->Fill(0., static_cast<double>(MOut[GENERAL_INDEX]));
1126  m_ConfNew->Fill(1., static_cast<double>(MaskedAllLinks[GENERAL_INDEX]));
1127  m_ConfNew->Fill(2., static_cast<double>(ModErr[GENERAL_INDEX]));
1128  m_ConfNew->Fill(3., static_cast<double>(InEffModules[GENERAL_INDEX]));
1129  m_ConfNew->Fill(4., static_cast<double>(NoisyModules[GENERAL_INDEX]));
1131  for (int reg{0}; reg < N_REGIONS_INC_GENERAL; ++reg) {
1132  m_ConfOnline[reg]->Fill(0., static_cast<double>(MOut[reg]));
1133  m_ConfOnline[reg]->Fill(1., Flagged[reg]);
1134  m_ConfOnline[reg]->Fill(2., static_cast<double>(MaskedAllLinks[reg]));
1135  m_ConfOnline[reg]->Fill(3., static_cast<double>(ModErr[reg]));
1136  }
1137  }
1138  if ((m_environment == AthenaMonManager::online) or testOffline) {
1139  m_ConfEffOnline->Reset("ICE");
1140  for (int reg{0}; reg < N_REGIONS_INC_GENERAL; ++reg) {
1141  const float f{static_cast<float>(reg)};
1142  m_ConfEffOnline->Fill(f, static_cast<double>(InEffModules[reg]));
1143  m_ConfNoiseOnline->Fill(f, static_cast<double>(NoisyModules[reg]));
1144  m_ConfNoiseOnlineRecent->Fill(f, static_cast<double>(NoisyModulesRecent[reg]));
1145  }
1146  }
1147  }
1148 
1149  return StatusCode::SUCCESS;
1150 }
1151 
1152 // ====================================================================================================
1153 // SCTErrMonTool :: fillConfigurationDetails
1154 // Fills Number of Bad Modules / Links / Chips / Strips in to a histogram
1155 // ====================================================================================================
1156 StatusCode
1158  ATH_MSG_DEBUG("Inside fillConfigurationDetails()");
1159  unsigned int nBadMods{static_cast<unsigned int>(m_ConfigurationTool->badModules()->size())}; // bad modules
1160  const std::map<IdentifierHash, std::pair<bool, bool>>* badLinks{m_ConfigurationTool->badLinks()}; // bad links
1161  unsigned int nBadLink0{0}, nBadLink1{0}, nBadLinkBoth{0};
1162  for (const std::pair<const IdentifierHash, std::pair<bool, bool>>& link: *badLinks) {
1163  std::pair<bool, bool> status{link.second};
1164  if ((status.first == false) and (status.second == true)) {
1165  ++nBadLink0;
1166  }
1167  if ((status.first == true) and (status.second == false)) {
1168  ++nBadLink1;
1169  }
1170  if ((status.first == false) and (status.second == false)) {
1171  ++nBadLinkBoth;
1172  }
1173  }
1174 
1175  const std::map<Identifier, unsigned int>* badChips{m_ConfigurationTool->badChips()}; // bad chips
1176  unsigned int nBadChips{0};
1177  for (const std::pair<const Identifier, unsigned int>& chip : *badChips) {
1178  unsigned int status{chip.second};
1179  for (unsigned int i{0}; i < CHIPS_PER_MODULE; i++) {
1180  nBadChips += ((status & (1 << i)) == 0 ? 0 : 1);
1181  }
1182  }
1183 
1184  std::set<Identifier> badStripsAll; // bad strips
1185  m_ConfigurationTool->badStrips(badStripsAll);
1186  unsigned int nBadStrips{static_cast<unsigned int>(badStripsAll.size())};
1187 
1188  std::set<Identifier> badStripsExclusive; // bad strips w/o bad modules and chips
1189  m_ConfigurationTool->badStrips(badStripsExclusive, true, true);
1190  int nBadStripsExclusive{static_cast<int>(badStripsExclusive.size())};
1191  int nBadStripsExclusiveBEC[N_REGIONS] = {
1192  0, 0, 0
1193  };
1194  for (const Identifier& strip: badStripsExclusive) {
1196  nBadStripsExclusiveBEC[bec2Index(bec)] += 1;
1197  }
1198 
1199  m_DetailedConfiguration->Fill(0., static_cast<double>(nBadMods));
1200  m_DetailedConfiguration->Fill(1., static_cast<double>(nBadLink0));
1201  m_DetailedConfiguration->Fill(2., static_cast<double>(nBadLink1));
1202  m_DetailedConfiguration->Fill(3., static_cast<double>(nBadChips));
1203  m_DetailedConfiguration->Fill(4., static_cast<double>(nBadStripsExclusive) / 100.);
1204 
1205  ATH_MSG_DEBUG("-----------------------------------------------------------------------");
1206  ATH_MSG_DEBUG("Number of bad modules = " << nBadMods);
1207  ATH_MSG_DEBUG("Number of bad link 0 = " << nBadLink0);
1208  ATH_MSG_DEBUG("Number of bad link 1 = " << nBadLink1);
1209  ATH_MSG_DEBUG("Number of bad link both = " << nBadLinkBoth);
1210  ATH_MSG_DEBUG("Number of bad chips = " << nBadChips);
1211  ATH_MSG_DEBUG("Number of bad strips = " << nBadStrips);
1212  ATH_MSG_DEBUG("Number of bad strips exclusive = " << nBadStripsExclusive);
1213  ATH_MSG_DEBUG("Number of bad strips exclusive (ECC, B, ECA) = "
1214  << nBadStripsExclusiveBEC[ENDCAP_C_INDEX] << ", "
1215  << nBadStripsExclusiveBEC[BARREL_INDEX] << ", "
1216  << nBadStripsExclusiveBEC[ENDCAP_A_INDEX] << ", ");
1217  ATH_MSG_DEBUG("-----------------------------------------------------------------------");
1218 
1219  return StatusCode::SUCCESS;
1220 }
1221 
1222 // ====================================================================================================
1223 // SCTErrMonTool :: resetCondDBMaps, Daniel Damiani 25/07/2011
1224 // ====================================================================================================
1225 StatusCode
1228  return StatusCode::SUCCESS;
1229  }
1230  if (m_makeConfHisto) {
1231  for (int reg{0}; reg < N_REGIONS_INC_GENERAL; ++reg) {
1232  m_ConfOnline[reg]->Reset();
1233  }
1234  m_ConfEffOnline->Reset();
1237  }
1238  return StatusCode::SUCCESS;
1239 }
1240 
1241 // ====================================================================================================
1242 // SCTErrMonTool :: resetConfigurationDetails, Daniel Damiani 25/07/2011
1243 // ====================================================================================================
1244 StatusCode
1247  return StatusCode::SUCCESS;
1248  }
1249  if (m_makeConfHisto) {
1251  }
1252  return StatusCode::SUCCESS;
1253 }
1254 
1255 // ====================================================================================================
1256 // SCTErrMonTool :: getHisto, Martin Flechl 14/9/2009
1257 // ====================================================================================================
1258 bool
1259 SCTErrMonTool::getHisto(const int layer, const int reg, const int type, TH2* histo[2]) const {
1260  static const std::string trm[2][N_REGIONS] = { // 2 is the number of types (noise, eff)
1261  {"SCT/SCTEC/Noise/noiseoccupancymapECm_","SCT/SCTB/Noise/noiseoccupancymap_", "SCT/SCTEA/Noise/noiseoccupancymapECp_"},
1262  {"SCT/SCTEC/eff/ineffm_", "SCT/SCTB/eff/ineff_", "SCT/SCTEA/eff/ineffp_"}
1263  };
1264  static const std::string trm_trig[2][N_REGIONS] = { // 2 is the number of types (noise, eff)
1265  {"SCT/SCTEC/Noise/noiseoccupancymaptriggerECm_", "SCT/SCTB/Noise/noiseoccupancymaptrigger_", "SCT/SCTEA/Noise/noiseoccupancymaptriggerECp_"},
1266  {"SCT/SCTEC/eff/ineffm_", "SCT/SCTB/eff/ineff_", "SCT/SCTEA/eff/ineffp_"}
1267  };
1268  std::string shname1{m_gpath + trm[type][reg] + std::to_string(layer)};
1269  std::string shname2{m_gpath + trm[type][reg] + std::to_string(layer)};
1270 
1271  if (testOffline or ((m_environment != AthenaMonManager::online) and
1273  shname1 = m_gpath + trm_trig[type][reg] + std::to_string(layer);
1274  shname2 = m_gpath + trm_trig[type][reg] + std::to_string(layer);
1275  }
1276  if ((type==0) or (type==1)) {
1277  shname1 += "_0";
1278  shname2 += "_1";
1279  }
1280  if (type==2) {
1281  shname2 = "";
1282  }
1283  bool failedBooking{false};
1284  histo[0]=nullptr;
1285  histo[1]=nullptr;
1286  if (shname1!="") {
1287  if (m_thistSvc->existsHist(shname1)) {
1288  if (m_thistSvc->getHist(shname1, histo[0]).isFailure()) {
1289  ATH_MSG_WARNING("Retrieval of " << shname1 << " failed");
1290  failedBooking = true;
1291  }
1292  } else {
1293  ATH_MSG_INFO(shname1 << " does not exist");
1294  failedBooking = true;
1295  }
1296  }
1297  if (shname2!="") {
1298  if (m_thistSvc->existsHist(shname2)) {
1299  if (m_thistSvc->getHist(shname2, histo[1]).isFailure()) {
1300  ATH_MSG_WARNING("Retrieval of " << shname2 << " failed");
1301  failedBooking = true;
1302  }
1303  } else {
1304  ATH_MSG_INFO(shname2 << " does not exist");
1305  failedBooking = true;
1306  }
1307  }
1308  return failedBooking;
1309 }
1310 
1311 // ====================================================================================================
1312 // SCTErrMonTool :: getHistoRecent, Dan Damiani 21/7/2011
1313 // ====================================================================================================
1314 bool
1315 SCTErrMonTool::getHistoRecent(const int layer, const int reg, const int type, TH2* histo[2]) const {
1316  static const std::string trm[1][N_REGIONS] = {
1317  {"SCT/SCTEC/Noise/noiseoccupancymaprecentECm_", "SCT/SCTB/Noise/noiseoccupancymaprecent_", "SCT/SCTEA/Noise/noiseoccupancymaprecentECp_"}
1318  };
1319  std::string shname1{m_gpath + trm[type][reg] + std::to_string(layer) + "_0"};
1320  std::string shname2{m_gpath + trm[type][reg] + std::to_string(layer) + "_1"};
1321 
1322  bool failedBooking{false};
1323  histo[0] = nullptr;
1324  histo[1] = nullptr;
1325 
1326  if (m_thistSvc->existsHist(shname1)) {
1327  if (m_thistSvc->getHist(shname1, histo[0]).isFailure()) {
1328  ATH_MSG_WARNING("Retrieval of " << shname1 << " failed");
1329  failedBooking = true;
1330  }
1331  } else {
1332  ATH_MSG_INFO(shname1 << " does not exist");
1333  failedBooking = true;
1334  }
1335 
1336  if (m_thistSvc->existsHist(shname2)) {
1337  if (m_thistSvc->getHist(shname2, histo[1]).isFailure()) {
1338  ATH_MSG_WARNING("Retrieval of " << shname2 << " failed");
1339  failedBooking = true;
1340  }
1341  } else {
1342  ATH_MSG_INFO(shname2 << " does not exist");
1343  failedBooking = true;
1344  }
1345 
1346  return failedBooking;
1347 }
1348 
1349 //====================================================================================================
1350 // SCTErrMonTool :: fillWafer, Keisuke Kouda 12.09.2016
1351 //====================================================================================================
1353  double etaMin{module.first.first}, etaMax{module.first.second};
1354  double phiMin{module.second.first}, phiMax{module.second.second};
1355  unsigned int nRep{1};
1356  if (etaMin<-s_rangeEta) { etaMin = -s_rangeEta; }
1357  if (etaMax> s_rangeEta) { etaMax = s_rangeEta; }
1358  if (phiMin>phiMax) {
1359  phiMin = -M_PI;
1360  nRep=2;
1361  }
1362  for (unsigned int iRep{0}; iRep<nRep; iRep++) {
1363  if (iRep==1) {
1364  phiMin = module.second.first;
1365  phiMax = M_PI;
1366  }
1367  const int ixMin{static_cast<int>((etaMin/s_rangeEta+1.)*s_nBinsEta/2)+1};
1368  const int ixMax{static_cast<int>((etaMax/s_rangeEta+1.)*s_nBinsEta/2)};
1369  const int iyMin{static_cast<int>((phiMin/M_PI+1.)*s_nBinsPhi/2)+1};
1370  const int iyMax{static_cast<int>((phiMax/M_PI+1.)*s_nBinsPhi/2)};
1371  const double xMin{(static_cast<double>(ixMin)/s_nBinsEta*2-1.)*s_rangeEta};
1372  const double xMax{(static_cast<double>(ixMax)/s_nBinsEta*2-1.)*s_rangeEta};
1373  const double yMin{(static_cast<double>(iyMin)/s_nBinsPhi*2-1.)*M_PI};
1374  const double yMax{(static_cast<double>(iyMax)/s_nBinsPhi*2-1.)*M_PI};
1375  const double wxMin{(xMin-etaMin)/s_rangeEta*s_nBinsEta/2};
1376  const double wxMax{(etaMax-xMax)/s_rangeEta*s_nBinsEta/2};
1377  const double wxOne{(etaMax-etaMin)/s_rangeEta*s_nBinsEta/2};
1378  const double wyMin{(yMin-phiMin)/M_PI*s_nBinsPhi/2};
1379  const double wyMax{(phiMax-yMax)/M_PI*s_nBinsPhi/2};
1380  const double wyOne{(phiMax-phiMin)/M_PI*s_nBinsPhi/2};
1381  for (int ix{ixMin}; ix<=ixMax+1; ix++) {
1382  double weightx{1.};
1383  if (ixMin==ixMax+1) weightx = wxOne;
1384  else if (ix==ixMin) weightx = wxMin;
1385  else if (ix==ixMax+1) weightx = wxMax;
1386  for (int iy{iyMin}; iy<=iyMax+1; iy++) {
1387  double weight{weightx};
1388  if (iyMin==iyMax+1) weight *= wyOne;
1389  else if (iy==iyMin) weight *= wyMin;
1390  else if (iy==iyMax+1) weight *= wyMax;
1391  histo->SetBinContent(ix, iy, histo->GetBinContent(ix,iy)+weight); //Fill(ix, iy, weight);//
1392  }
1393  }
1394  }
1395  return;
1396 }
1397 
1398 //====================================================================================================
1399 // SCTErrMonTool :: SyncSCT, Keisuke Kouda 12.09.2016
1400 //====================================================================================================
1401 bool SCTErrMonTool::syncErrorSCT(std::set<IdentifierHash>& sctHashBadLinkError,
1402  std::set<IdentifierHash>& sctHashBadRODError,
1403  std::set<IdentifierHash>& sctHashBadError) const {
1404  sctHashBadLinkError.clear();
1405  sctHashBadRODError.clear();
1406  sctHashBadError.clear();
1407  const EventContext& ctx{Gaudi::Hive::currentContext()};
1408  //BadLinkLevelError
1409  for (SCT_ByteStreamErrors::ErrorType linkLevelBadErrors: SCT_ByteStreamErrors::LinkLevelBadErrors) {
1410  const std::set<IdentifierHash> sctErrors{m_byteStreamErrTool->getErrorSet( linkLevelBadErrors, ctx )};
1411  for (const IdentifierHash& waferHash : sctErrors) {
1412  sctHashBadLinkError.insert(waferHash);
1413  }
1414  }
1415 
1416  //BadRODLevelError
1417  for (SCT_ByteStreamErrors::ErrorType RodLevelBadErrors: SCT_ByteStreamErrors::RodLevelBadErrors) {
1418  const std::set<IdentifierHash> sctErrors{m_byteStreamErrTool->getErrorSet( RodLevelBadErrors, ctx )};
1419  for (const IdentifierHash& waferHash: sctErrors) {
1420  sctHashBadRODError.insert(waferHash);
1421  }
1422  }
1423 
1424  //BadError = BadLinkLevelError + BadRODLevelError
1425  for (SCT_ByteStreamErrors::ErrorType tmpBadError: SCT_ByteStreamErrors::BadErrors) {
1426  const std::set<IdentifierHash> sctErrors{m_byteStreamErrTool->getErrorSet( tmpBadError, ctx )};
1427  for (const IdentifierHash& waferHash: sctErrors) {
1428  sctHashBadError.insert(waferHash);
1429  }
1430  }
1431  return true;
1432 }
1433 
1434 //Disabled
1435 bool SCTErrMonTool::syncDisabledSCT(std::set<IdentifierHash>& sctHashDisabled) const {
1436  bool altered{false};
1437  sctHashDisabled.clear();
1438  const std::set<Identifier>* badModules{m_ConfigurationTool->badModules()};
1439 
1440  for (const Identifier& badModule: *badModules) {
1441  altered = true;
1442  IdentifierHash hashSide0{m_pSCTHelper->wafer_hash(badModule)};
1443  IdentifierHash hashSide1;
1444  m_pSCTHelper->get_other_side(hashSide0, hashSide1);
1445  sctHashDisabled.insert(hashSide0);
1446  sctHashDisabled.insert(hashSide1);
1447  }
1448  return altered;
1449 }
1450 
1451 //Total (SCT_ConditionsSummaryTool) //All
1452 bool SCTErrMonTool::summarySCT(std::set<IdentifierHash>& sctHashAll, std::set<IdentifierHash>& sctHashSummary) const {
1453  bool altered{false};
1454  sctHashAll.clear();//All
1455  sctHashSummary.clear();
1456  const EventContext& ctx = Gaudi::Hive::currentContext();
1457  const unsigned int maxHash{static_cast<unsigned int>(m_pSCTHelper->wafer_hash_max())}; // 8176
1458  for (unsigned int i{0}; i<maxHash; i++) {
1459  IdentifierHash hash{i};
1460  sctHashAll.insert(hash);//All
1461  if (not m_pSummaryTool->isGood(hash, ctx)) {
1462  sctHashSummary.insert(hash);
1463  }
1464  }
1465  return altered;
1466 }
1467 
1468 //Power supply trip (SCT_DCSConditionsTool)
1469 bool SCTErrMonTool::psTripDCSSCT(std::set<IdentifierHash>& sctHashPSTripDCS, float& PSTripModules) const {
1470  bool altered{false};
1471  sctHashPSTripDCS.clear();
1472 
1473  const unsigned int maxHash{static_cast<unsigned int>(m_pSCTHelper->wafer_hash_max())}; // 8176
1474  int npsw{0};
1475  for (unsigned int i{0}; i<maxHash; i++) {
1476  IdentifierHash hash{i};
1477  if (m_useDCS and (not m_dcsTool->isGood(hash))) {
1478  npsw++; //Counting the number of PS sides
1479  altered = true;
1480  sctHashPSTripDCS.insert(hash);
1481  }
1482  }
1483  PSTripModules = npsw/2.;
1484  return altered;
1485 }
1486 
1487 //====================================================================================================
1488 // SCTErrMonTool :: calculateDetectorCoverage, Keisuke Kouda 12.09.2016
1489 //====================================================================================================
1491  double occupancy{0.};
1492 
1493  for (unsigned int i{0}; i < s_nBinsEta; i++) {
1494  for (unsigned int j{0}; j < s_nBinsPhi; j++) {
1495  double waferCell{m_mapSCT[allRegion]->GetBinContent(i+1, j+1) - histo->GetBinContent(i+1, j+1)};
1496 
1497  if (waferCell >= s_WafersThreshold) {
1498  occupancy += 1.0;
1499  } else if (waferCell > s_WafersThreshold - 1.0 ) {
1500  occupancy += waferCell - (s_WafersThreshold - 1.0);
1501  //Calculating the bin occupancy which has less than 1.
1502  //For example, bin have a 2.3. In this case, we can understand that 30% of the bin is coverd by 3 sides/wafers and 70% of the bin is coverd by 2 sides/wafers.
1503  //And it means that occupancy of the bin is 0.3 So, in this line, I take difference between s_WafersThreshold(3)-1 and waferCell, and add it to the occupancy.
1504  }
1505  }
1506  }
1507  double detector_coverage{100. * static_cast<double>( occupancy )/( static_cast<double>( s_nBinsEta ) * static_cast<double>( s_nBinsPhi ) )};
1508  return detector_coverage;
1509 }
1510 
1511 const unsigned int SCTErrMonTool::s_nBinsEta = 100;
1512 const double SCTErrMonTool::s_rangeEta = 2.5;
1513 const unsigned int SCTErrMonTool::s_nBinsPhi = 100;
1514 const double SCTErrMonTool::s_WafersThreshold = 3.0;
SCT_Monitoring::ENDCAP_C_INDEX
@ ENDCAP_C_INDEX
Definition: SCT_MonitoringNumbers.h:19
TH2F_LW::Fill
virtual void Fill(const double &x, const double &y) override
Definition: TH2F_LW.cxx:329
python.PyKernel.retrieve
def retrieve(aClass, aKey=None)
Definition: PyKernel.py:110
SCT_Monitoring::BADERR
@ BADERR
Definition: SCT_MonitoringNumbers.h:54
SCT_Monitoring::badLinkError
@ badLinkError
Definition: SCT_MonitoringNumbers.h:61
WritePulseShapeToCool.yhi
yhi
Definition: WritePulseShapeToCool.py:153
SCT_CalibAlgs::bec2Index
unsigned int bec2Index(const int bec)
Definition: SCT_CalibUtilities.cxx:60
SCTErrMonTool::bookErrHistosGen
StatusCode bookErrHistosGen()
Definition: SCTErrMonTool.cxx:825
ManagedMonitorToolBase::streamNameFunction
virtual StreamNameFcn * streamNameFunction()
Returns the function object that converts logical paramters into a physical stream name.
Definition: ManagedMonitorToolBase.cxx:503
SCTErrMonTool::fillWafer
void fillWafer(moduleGeo_t module, TH2F *histo) const
Definition: SCTErrMonTool.cxx:1352
SCTErrMonTool::SCTErrMonTool
SCTErrMonTool(const std::string &type, const std::string &name, const IInterface *parent)
Constructor, calls base class constructor with parameters.
Definition: SCTErrMonTool.cxx:103
python.CaloRecoConfig.f
f
Definition: CaloRecoConfig.py:127
TH1F_LW.h
SCT_Monitoring::N_REGIONS
@ N_REGIONS
Definition: SCT_MonitoringNumbers.h:19
TH2F_LW.h
SCTErrMonTool::errorsString
TString errorsString(int errtype) const
Used in bookErrHistosGen() and bookErrHistos.
Definition: SCTErrMonTool.cxx:141
SCTErrMonTool::m_summaryErrsRecent
TProfile2D_LW * m_summaryErrsRecent[SCT_Monitoring::N_REGIONS][SCT_Monitoring::N_ENDCAPSx2]
Definition: SCTErrMonTool.h:170
SCTErrMonTool::resetCondDBMaps
StatusCode resetCondDBMaps()
Used in fillHistograms() and checkRateHists()
Definition: SCTErrMonTool.cxx:1226
SCT_ID.h
This is an Identifier helper class for the SCT subdetector. This class is a factory for creating comp...
SCTErrMonTool::m_eventInfoKey
SG::ReadHandleKey< xAOD::EventInfo > m_eventInfoKey
Definition: SCTErrMonTool.h:117
ReadCellNoiseFromCool.name1
name1
Definition: ReadCellNoiseFromCool.py:233
SiliconTech::strip
@ strip
InDetDD::SCT_DetectorManager
Definition: SCT_DetectorManager.h:49
TH2F_LW::GetNbinsX
virtual unsigned GetNbinsX() const override
Definition: TH2F_LW.cxx:347
phi
Scalar phi() const
phi method
Definition: AmgMatrixBasePlugin.h:64
TH1F_LW::Fill
virtual void Fill(const double &x) override
Definition: TH1F_LW.cxx:246
ATH_MSG_INFO
#define ATH_MSG_INFO(x)
Definition: AthMsgStreamMacros.h:31
SCTErrMonTool::m_ConfNew
TProfile_LW * m_ConfNew
Profiles requiring postprocessing Under run directories.
Definition: SCTErrMonTool.h:161
SCT_ConditionsData::N_REGIONS
@ N_REGIONS
Definition: SCT_ConditionsParameters.h:28
ParticleGun_SamplingFraction.bec
int bec
Definition: ParticleGun_SamplingFraction.py:89
ManagedMonitorToolBase::lumiBlock
@ lumiBlock
Definition: ManagedMonitorToolBase.h:114
SCTErrMonTool::m_rateErrorsPerLumi
TProfile2D_LW * m_rateErrorsPerLumi[SCT_Monitoring::N_REGIONS]
Definition: SCTErrMonTool.h:165
TH1F_LW::create
static TH1F_LW * create(const char *name, const char *title, unsigned nbinsx, const double &xlow, const double &xup)
Definition: TH1F_LW.cxx:33
ManagedMonitorToolBase
Provides functionality for users to implement and save histograms, ntuples, and summary data,...
Definition: ManagedMonitorToolBase.h:74
SCT_Monitoring::FIRST_ETA_BIN_EC
@ FIRST_ETA_BIN_EC
Definition: SCT_MonitoringNumbers.h:47
python.SystemOfUnits.mg
int mg
Definition: SystemOfUnits.py:171
eta
Scalar eta() const
pseudorapidity method
Definition: AmgMatrixBasePlugin.h:79
SG::ReadHandle
Definition: StoreGate/StoreGate/ReadHandle.h:70
SCTErrMonTool::m_checkrecent
IntegerProperty m_checkrecent
Definition: SCTErrMonTool.h:95
ManagedMonitorToolBase::endOfLumiBlockFlag
bool endOfLumiBlockFlag() const
Definition: ManagedMonitorToolBase.h:858
Data
@ Data
Definition: BaseObject.h:11
SCT_Monitoring::allRegion
@ allRegion
Definition: SCT_MonitoringNumbers.h:59
SCTErrMonTool::bookErrHistosHelper
StatusCode bookErrHistosHelper(MonGroup &mg, TString name, TString title, TString titlehitmap, TProfile2D_LW *&tprof, TH2F_LW *&th, const int layer, const bool barrel=true) const
Used in bookErrHistos()
Definition: SCTErrMonTool.cxx:689
SCT_Monitoring::MASKEDCHIP
@ MASKEDCHIP
Definition: SCT_MonitoringNumbers.h:54
SCTErrMonTool::fillConfigurationDetails
StatusCode fillConfigurationDetails()
Definition: SCTErrMonTool.cxx:1157
AthenaMonManager::cosmics
@ cosmics
Definition: AthenaMonManager.h:58
SCT_Monitoring::N_ERRCATEGORY
@ N_ERRCATEGORY
Definition: SCT_MonitoringNumbers.h:54
TH2F_LW::GetBinContent
virtual double GetBinContent(unsigned binx, unsigned biny) const override
Definition: TH2F_LW.cxx:369
SCTErrMonTool::getHisto
bool getHisto(const int lyr, const int reg, const int type, TH2 *histo[2]) const
Used in fillCondDBMaps()
Definition: SCTErrMonTool.cxx:1259
SCT_ID::wafer_begin
const_id_iterator wafer_begin(void) const
Iterators over full set of ids. Wafer iterator is sorted.
Definition: SCT_ID.cxx:648
SCT_Monitoring::LAST_ETA_BIN
@ LAST_ETA_BIN
Definition: SCT_MonitoringNumbers.h:41
TProfile2D_LW::GetBinContent
double GetBinContent(unsigned binx, unsigned biny) const
Definition: TProfile2D_LW.cxx:267
PixelAthClusterMonAlgCfg.ybins
ybins
Definition: PixelAthClusterMonAlgCfg.py:163
SCT_Monitoring::LINKLEVEL
@ LINKLEVEL
Definition: SCT_MonitoringNumbers.h:54
SCTErrMonTool::m_doPerLumiErrors
BooleanProperty m_doPerLumiErrors
Definition: SCTErrMonTool.h:105
M_PI
#define M_PI
Definition: ActiveFraction.h:11
SCT_Monitoring::FIRST_PHI_BIN_EC
@ FIRST_PHI_BIN_EC
Definition: SCT_MonitoringNumbers.h:48
bin
Definition: BinsDiffFromStripMedian.h:43
compileRPVLLRates.current_lb
int current_lb
Definition: compileRPVLLRates.py:154
SCTErrMonTool::m_ConfNoiseOnlineRecent
TProfile_LW * m_ConfNoiseOnlineRecent
Definition: SCTErrMonTool.h:169
xAOD::etaMax
etaMax
Definition: HIEventShape_v2.cxx:46
SCT_Monitoring::N_BARRELSx2
@ N_BARRELSx2
Definition: SCT_MonitoringNumbers.h:43
SCTErrMonTool::m_DetailedConfiguration
TProfile_LW * m_DetailedConfiguration
Definition: SCTErrMonTool.h:142
SCTErrMonTool::m_MaskedAllLinks
TH1I * m_MaskedAllLinks
Definition: SCTErrMonTool.h:146
SCTErrMonTool::m_makeConfHisto
BooleanProperty m_makeConfHisto
Definition: SCTErrMonTool.h:103
SCTErrMonTool::s_WafersThreshold
static const double s_WafersThreshold
Definition: SCTErrMonTool.h:78
SCT_ID::const_id_iterator
std::vector< Identifier >::const_iterator const_id_iterator
Definition: SCT_ID.h:73
SCTErrMonTool::bookHistogramsRecurrent
virtual StatusCode bookHistogramsRecurrent() override final
An inheriting class should either override this function, bookHists() or bookHistograms().
Definition: SCTErrMonTool.cxx:213
TProfile_LW.h
SCTErrMonTool::m_pallErrsCate
TH2F_LW * m_pallErrsCate[SCT_Monitoring::CategoryErrors::N_ERRCATEGORY][SCT_Monitoring::N_REGIONS][SCT_Monitoring::N_ENDCAPSx2]
Under LB directories.
Definition: SCTErrMonTool.h:152
LArG4FSStartPointFilter.evt
evt
Definition: LArG4FSStartPointFilter.py:42
SCT_ID::barrel_ec
int barrel_ec(const Identifier &id) const
Values of different levels (failure returns 0)
Definition: SCT_ID.h:728
SCT_Monitoring::BARREL_INDEX
@ BARREL_INDEX
Definition: SCT_MonitoringNumbers.h:19
SCTErrMonTool::m_checkrate
IntegerProperty m_checkrate
CheckHists() frequency.
Definition: SCTErrMonTool.h:94
SCTErrMonTool::m_noiseThreshold
IntegerProperty m_noiseThreshold
Definition: SCTErrMonTool.h:115
SCTErrMonTool::bookConfMapsGen
StatusCode bookConfMapsGen()
Used in bookHistograms()
Definition: SCTErrMonTool.cxx:852
SCTErrMonTool::m_geo
std::vector< moduleGeo_t > m_geo
Definition: SCTErrMonTool.h:91
SCT_ID::phi_module
int phi_module(const Identifier &id) const
Definition: SCT_ID.h:740
TProfile2D_LW::create
static TProfile2D_LW * create(const char *name, const char *title, unsigned nbinsx, const double &xlow, const double &xup, unsigned nbinsy, const double &ylow, const double &yup, const char *option=" ")
Definition: TProfile2D_LW.cxx:32
SCT_Monitoring::ConfbinsOnline
@ ConfbinsOnline
Definition: SCT_MonitoringNumbers.h:69
SCTErrMonTool::m_LinksWithCategorisedErrorsVsLB
TProfile_LW * m_LinksWithCategorisedErrorsVsLB[SCT_Monitoring::CategoryErrors::N_ERRCATEGORY]
Definition: SCTErrMonTool.h:162
SCTErrMonTool::bookErrHistos
StatusCode bookErrHistos(int iregion)
Definition: SCTErrMonTool.cxx:755
InDetDD::SolidStateDetectorElementBase::getEtaPhiRegion
void getEtaPhiRegion(double deltaZ, double &etaMin, double &etaMax, double &phiMin, double &phiMax, double &rz) const
Method for building up region of interest table.
Definition: SolidStateDetectorElementBase.cxx:140
python.TrigEgammaMonitorHelper.TH2F
def TH2F(name, title, nxbins, bins_par2, bins_par3, bins_par4, bins_par5=None, bins_par6=None, path='', **kwargs)
Definition: TrigEgammaMonitorHelper.py:45
SCT_Monitoring::badRODError
@ badRODError
Definition: SCT_MonitoringNumbers.h:62
x
#define x
python.DomainsRegistry.reg
reg
globals -----------------------------------------------------------------—
Definition: DomainsRegistry.py:343
SCT_Monitoring
Definition: SCT_MonitoringNumbers.h:17
SCTErrMonTool::m_PSTripModulesVsLbs
TProfile * m_PSTripModulesVsLbs
Definition: SCTErrMonTool.h:157
SCTErrMonTool::summarySCT
bool summarySCT(std::set< IdentifierHash > &sctHashAll, std::set< IdentifierHash > &sctHashSummary) const
Definition: SCTErrMonTool.cxx:1452
SCTErrMonTool::s_nBinsPhi
static const unsigned int s_nBinsPhi
Definition: SCTErrMonTool.h:77
SCT_Monitoring::N_PHI_BINS
@ N_PHI_BINS
Definition: SCT_MonitoringNumbers.h:42
TProfile2D_LW::Fill
void Fill(const double &x, const double &y, const double &z)
Definition: TProfile2D_LW.cxx:246
AthenaPoolTestRead.sc
sc
Definition: AthenaPoolTestRead.py:27
AthCommonDataStore< AthCommonMsg< AlgTool > >::detStore
const ServiceHandle< StoreGateSvc > & detStore() const
The standard StoreGateSvc/DetectorStore Returns (kind of) a pointer to the StoreGateSvc.
Definition: AthCommonDataStore.h:95
xAOD::EventInfo_v1::Error
@ Error
The sub-detector issued an error.
Definition: EventInfo_v1.h:349
SCTErrMonTool::m_allErrsCate
TProfile2D_LW * m_allErrsCate[SCT_Monitoring::CategoryErrors::N_ERRCATEGORY][SCT_Monitoring::N_REGIONS][SCT_Monitoring::N_ENDCAPSx2]
Under LB directories.
Definition: SCTErrMonTool.h:164
TProfile_LW::Reset
virtual void Reset() override
Definition: TProfile_LW.cxx:182
SCTErrMonTool::psTripDCSSCT
bool psTripDCSSCT(std::set< IdentifierHash > &sctHashPSTripDCS, float &PSTripModules) const
Definition: SCTErrMonTool.cxx:1469
dqt_zlumi_pandas.weight
int weight
Definition: dqt_zlumi_pandas.py:200
SCTErrMonTool::m_ConfEffOnline
TProfile * m_ConfEffOnline
Definition: SCTErrMonTool.h:171
TProfile2D_LW::Reset
virtual void Reset() override
Definition: TProfile2D_LW.cxx:204
TRT::Hit::side
@ side
Definition: HitInfo.h:83
SCT_Monitoring::index2Bec
Bec index2Bec(const unsigned int i)
Conversion index->bec.
Definition: SCT_MonitoringNumbers.h:29
SCTErrMonTool::m_NumberOfSCTFlagErrorsVsLB
TH1F_LW * m_NumberOfSCTFlagErrorsVsLB
Definition: SCTErrMonTool.h:144
SCT_Monitoring::ENDCAP_A_INDEX
@ ENDCAP_A_INDEX
Definition: SCT_MonitoringNumbers.h:19
LWHist::GetXaxis
LWHistAxis * GetXaxis()
Definition: LWHist.cxx:309
SCTErrMonTool::calculateDetectorCoverage
double calculateDetectorCoverage(const TH2F *histo) const
Definition: SCTErrMonTool.cxx:1490
grepfile.content
string content
Definition: grepfile.py:56
python.PyAthena.module
module
Definition: PyAthena.py:134
SCT_Monitoring::numberOfProblemForCoverage
@ numberOfProblemForCoverage
Definition: SCT_MonitoringNumbers.h:66
PixelByteStreamErrors::Flagged
@ Flagged
Definition: PixelByteStreamErrors.h:14
SCT_Monitoring::N_REGIONS_INC_GENERAL
@ N_REGIONS_INC_GENERAL
Definition: SCT_MonitoringNumbers.h:19
ManagedMonitorToolBase::MonGroup
A container of information describing a monitoring object.
Definition: ManagedMonitorToolBase.h:138
SCTErrMonTool::fillCondDBMaps
StatusCode fillCondDBMaps()
Definition: SCTErrMonTool.cxx:993
SCT_Monitoring::LAST_ETA_BIN_EC
@ LAST_ETA_BIN_EC
Definition: SCT_MonitoringNumbers.h:47
python.TriggerHandler.th
th
Definition: TriggerHandler.py:296
AthenaMonManager::dataType
static DataType_t dataType()
Returns the data type that the monitoring application is running over to help ManagedMonitorToolBase ...
Definition: AthenaMonManager.cxx:338
ATH_MSG_ERROR
#define ATH_MSG_ERROR(x)
Definition: AthMsgStreamMacros.h:33
SCTErrMonTool::m_mapSCT
TH2F * m_mapSCT[SCT_Monitoring::numberOfProblemForCoverage]
Detector coverage.
Definition: SCTErrMonTool.h:156
ManagedMonitorToolBase::initialize
virtual StatusCode initialize()
Definition: ManagedMonitorToolBase.cxx:669
LWHist::LWHistAxis::SetTitle
void SetTitle(const char *)
Definition: LWHist.cxx:359
dqt_zlumi_pandas.err
err
Definition: dqt_zlumi_pandas.py:193
WritePulseShapeToCool.xhi
xhi
Definition: WritePulseShapeToCool.py:152
TProfile_LW::create
static TProfile_LW * create(const char *name, const char *title, unsigned nbinsx, const double &xlow, const double &xup, const char *option=" ")
Definition: TProfile_LW.cxx:32
SCT_Monitoring::psTripDCS
@ psTripDCS
Definition: SCT_MonitoringNumbers.h:64
lumiFormat.i
int i
Definition: lumiFormat.py:92
python.TrigEgammaMonitorHelper.TProfile
def TProfile(*args, **kwargs)
Definition: TrigEgammaMonitorHelper.py:81
SCT_Monitoring::RODLEVEL
@ RODLEVEL
Definition: SCT_MonitoringNumbers.h:54
EL::StatusCode
::StatusCode StatusCode
StatusCode definition for legacy code.
Definition: PhysicsAnalysis/D3PDTools/EventLoop/EventLoop/StatusCode.h:22
SCTErrMonTool::numByteStreamErrors
void numByteStreamErrors(const std::set< IdentifierHash > &errors, int &ntot) const
Definition: SCTErrMonTool.cxx:527
ATH_MSG_DEBUG
#define ATH_MSG_DEBUG(x)
Definition: AthMsgStreamMacros.h:29
AthenaMonManager::online
@ online
Definition: AthenaMonManager.h:49
TRT::Hit::layer
@ layer
Definition: HitInfo.h:79
SCTErrMonTool::m_CoverageCheck
BooleanProperty m_CoverageCheck
Definition: SCTErrMonTool.h:109
SCTErrMonTool::fillHistograms
virtual StatusCode fillHistograms() override final
An inheriting class should either override this function or fillHists().
Definition: SCTErrMonTool.cxx:301
covarianceTool.title
title
Definition: covarianceTool.py:542
SCTErrMonTool::m_thistSvc
ServiceHandle< ITHistSvc > m_thistSvc
a handle on the Hist/TTree registration service
Definition: SCTErrMonTool.h:124
SCTErrMonTool::s_rangeEta
static const double s_rangeEta
Definition: SCTErrMonTool.h:76
SCTErrMonTool::m_ConfOnline
TProfile_LW * m_ConfOnline[SCT_Monitoring::N_REGIONS_INC_GENERAL]
Only online.
Definition: SCTErrMonTool.h:167
SCTErrMonTool::syncErrorSCT
bool syncErrorSCT(std::set< IdentifierHash > &sctHashBadLinkError, std::set< IdentifierHash > &sctHashBadRODError, std::set< IdentifierHash > &sctHashBadError) const
Definition: SCTErrMonTool.cxx:1401
ManagedMonitorToolBase::ATTRIB_UNMANAGED
@ ATTRIB_UNMANAGED
Definition: ManagedMonitorToolBase.h:131
test_pyathena.parent
parent
Definition: test_pyathena.py:15
SCT_Monitoring::SUMMARY
@ SUMMARY
Definition: SCT_MonitoringNumbers.h:54
SCTErrMonTool::fillByteStreamErrorsHelper
int fillByteStreamErrorsHelper(const std::set< IdentifierHash > &errors, bool lumi2DHist, int err_type)
Used in fillByteStreamErrors()
Definition: SCTErrMonTool.cxx:445
SCTErrMonTool::m_ByteStreamVsLB
TProfile_LW * m_ByteStreamVsLB[SCT_ByteStreamErrors::NUM_ERROR_TYPES]
Definition: SCTErrMonTool.h:141
ATH_CHECK
#define ATH_CHECK
Definition: AthCheckMacros.h:40
SCT_Monitoring::disabled
@ disabled
Definition: SCT_MonitoringNumbers.h:60
SCTErrMonTool::m_ConfNoiseOnline
TProfile_LW * m_ConfNoiseOnline
Definition: SCTErrMonTool.h:168
SCT_ID::wafer_hash
IdentifierHash wafer_hash(const Identifier &wafer_id) const
wafer hash from id - optimized
Definition: SCT_ID.h:492
ManagedMonitorToolBase::StreamNameFcn::getStreamName
virtual std::string getStreamName(const ManagedMonitorToolBase *tool, const MonGroup &group, const std::string &objName, bool usePreviousInterval=false)=0
A function that converts a MonGroup of logical parameters into a physical output stream name.
SCTErrMonTool::m_NumberOfEventsVsLB
TH1F_LW * m_NumberOfEventsVsLB
Definition: SCTErrMonTool.h:145
WritePulseShapeToCool.xlo
xlo
Definition: WritePulseShapeToCool.py:133
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
SCT_ID::get_other_side
int get_other_side(const IdentifierHash &id, IdentifierHash &other) const
Wafer hash on other side.
Definition: SCT_ID.cxx:435
SCTErrMonTool::m_detectorCoverageVsLbs
TProfile * m_detectorCoverageVsLbs[SCT_Monitoring::numberOfProblemForCoverage]
Detector coverage.
Definition: SCTErrMonTool.h:173
SCT_Monitoring::ENDCAP_A
@ ENDCAP_A
Definition: SCT_MonitoringNumbers.h:21
SCTErrMonTool::m_runOnline
BooleanProperty m_runOnline
flag to run online
Definition: SCTErrMonTool.h:98
SCTErrMonTool.h
SCTErrMonTool::moduleGeo_t
std::pair< std::pair< double, double >, std::pair< double, double > > moduleGeo_t
Definition: SCTErrMonTool.h:73
WritePulseShapeToCool.ylo
ylo
Definition: WritePulseShapeToCool.py:134
SCT_Monitoring::N_ETA_BINS_EC
@ N_ETA_BINS_EC
Definition: SCT_MonitoringNumbers.h:47
SCTErrMonTool::resetConfigurationDetails
StatusCode resetConfigurationDetails()
Definition: SCTErrMonTool.cxx:1245
SCTErrMonTool::syncDisabledSCT
bool syncDisabledSCT(std::set< IdentifierHash > &sctHashDisabled) const
Definition: SCTErrMonTool.cxx:1435
TProfile_LW::Fill
void Fill(const double &x, const double &y)
Definition: TProfile_LW.cxx:223
ManagedMonitorToolBase::m_environment
AthenaMonManager::Environment_t m_environment
Definition: ManagedMonitorToolBase.h:902
MuonValidation_CreateResolutionProfiles.fit
def fit(h, emin, emax)
Definition: MuonValidation_CreateResolutionProfiles.py:69
SCTErrMonTool::m_useDCS
BooleanProperty m_useDCS
Definition: SCTErrMonTool.h:110
SCTErrMonTool::m_effThreshold
FloatProperty m_effThreshold
Definition: SCTErrMonTool.h:114
SCTErrMonTool::m_initialize
bool m_initialize
Definition: SCTErrMonTool.h:84
SCTErrMonTool::initialize
virtual StatusCode initialize() override final
Definition: SCTErrMonTool.cxx:109
SCTErrMonTool::fillByteStreamErrors
StatusCode fillByteStreamErrors()
Used in fillHistograms()
Definition: SCTErrMonTool.cxx:541
mergePhysValFiles.errors
list errors
Definition: DataQuality/DataQualityUtils/scripts/mergePhysValFiles.py:43
TProfile2D_LW::GetNbinsY
unsigned GetNbinsY() const
Definition: TProfile2D_LW.cxx:265
SCTErrMonTool::m_flaggedTool
ToolHandle< ISCT_FlaggedConditionTool > m_flaggedTool
Definition: SCTErrMonTool.h:131
TH2F_LW::GetNbinsY
virtual unsigned GetNbinsY() const override
Definition: TH2F_LW.cxx:352
SCT_Monitoring::GENERAL_INDEX
@ GENERAL_INDEX
Definition: SCT_MonitoringNumbers.h:19
SCT_Monitoring::FIRST_PHI_BIN
@ FIRST_PHI_BIN
Definition: SCT_MonitoringNumbers.h:42
name
std::string name
Definition: Control/AthContainers/Root/debug.cxx:195
SCT_ID::wafer_hash_max
size_type wafer_hash_max(void) const
Definition: SCT_ID.cxx:639
ActsTrk::to_string
std::string to_string(const DetectorType &type)
Definition: GeometryDefs.h:34
TH2F_LW::create
static TH2F_LW * create(const char *name, const char *title, unsigned nbinsx, const double &xmin, const double &xmax, unsigned nbinsy, const double &ymin, const double &ymax)
Definition: TH2F_LW.cxx:33
LWHist::LWHistAxis::SetBinLabel
void SetBinLabel(unsigned bin, const char *label)
Definition: LWHist.cxx:411
SCT_ByteStreamErrors::ErrorType
ErrorType
SCT byte stream error type enums used in SCT_RodDecoder, SCT_ByteStreamErrorsTool,...
Definition: SCT_ByteStreamErrors.h:178
threshold
Definition: chainparser.cxx:74
SCT_Monitoring::LAST_PHI_BIN
@ LAST_PHI_BIN
Definition: SCT_MonitoringNumbers.h:42
SCT_ID::layer_disk
int layer_disk(const Identifier &id) const
Definition: SCT_ID.h:734
SCT_Monitoring::ENDCAP_C
@ ENDCAP_C
Definition: SCT_MonitoringNumbers.h:21
TProfile2D_LW.h
InDetDD::SiDetectorElement
Definition: SiDetectorElement.h:109
SCT_Monitoring::ConfbinsDetailed
@ ConfbinsDetailed
Definition: SCT_MonitoringNumbers.h:69
SCT_Monitoring::MASKEDLINKALL
@ MASKEDLINKALL
Definition: SCT_MonitoringNumbers.h:54
TProfile2D_LW
Definition: TProfile2D_LW.h:24
SCTErrMonTool::procHistograms
virtual StatusCode procHistograms() override final
An inheriting class should either override this function or finalHists().
Definition: SCTErrMonTool.cxx:428
SCTErrMonTool::m_numberOfEventsLumi
int m_numberOfEventsLumi
Definition: SCTErrMonTool.h:81
SiDetectorElement.h
DataModelTestDataCommonDict::xb
DMTest::CView::Pers_t xb
Definition: DataModelTestDataCommonDict.h:44
SCT_Monitoring::N_ETA_BINS
@ N_ETA_BINS
Definition: SCT_MonitoringNumbers.h:41
LArCellBinning.xbins
int xbins
Definition: LArCellBinning.py:163
TProfile2D_LW::GetNbinsX
unsigned GetNbinsX() const
Definition: TProfile2D_LW.cxx:264
SCT_Monitoring::N_PHI_BINS_EC
@ N_PHI_BINS_EC
Definition: SCT_MonitoringNumbers.h:48
ManagedMonitorToolBase::run
@ run
Definition: ManagedMonitorToolBase.h:116
SCTErrMonTool::s_nBinsEta
static const unsigned int s_nBinsEta
Definition: SCTErrMonTool.h:75
AthenaPoolExample_Copy.streamName
string streamName
Definition: AthenaPoolExample_Copy.py:39
LArCellBinning.etaMin
etaMin
Definition: LArCellBinning.py:84
SCTErrMonTool::m_numErrorsPerLumi
TH2F_LW * m_numErrorsPerLumi[SCT_Monitoring::N_REGIONS_INC_GENERAL]
Definition: SCTErrMonTool.h:154
y
#define y
TH2F_LW::Reset
virtual void Reset() override
Definition: TH2F_LW.cxx:250
CaloCondBlobAlgs_fillNoiseFromASCII.hash
dictionary hash
Definition: CaloCondBlobAlgs_fillNoiseFromASCII.py:109
ATH_MSG_WARNING
#define ATH_MSG_WARNING(x)
Definition: AthMsgStreamMacros.h:32
SCTErrMonTool::bookHistograms
virtual StatusCode bookHistograms() override final
An inheriting class should either override this function or bookHists().
Definition: SCTErrMonTool.cxx:167
SCT_FlaggedCondEnum::NUM_ERROR_TYPES
@ NUM_ERROR_TYPES
Definition: SCT_FlaggedCondEnum.h:28
python.CaloScaleNoiseConfig.type
type
Definition: CaloScaleNoiseConfig.py:78
SCTErrMonTool::m_ConfOutModules
TProfile_LW * m_ConfOutModules
Profiles/histograms not requiring postprocessing Under run directories.
Definition: SCTErrMonTool.h:140
SCT_ID::eta_module
int eta_module(const Identifier &id) const
Definition: SCT_ID.h:746
SCTErrMonTool::m_flaggedWafers
TProfile * m_flaggedWafers
Definition: SCTErrMonTool.h:147
LWHist::LWHistAxis::GetBinCenter
double GetBinCenter(int bin) const
Definition: LWHist.cxx:391
DetectorZone::barrel
@ barrel
SCTErrMonTool::getHistoRecent
bool getHistoRecent(const int lyr, const int reg, const int type, TH2 *histo[2]) const
Definition: SCTErrMonTool.cxx:1315
SCTErrMonTool::m_min_stat_ineff_mod
FloatProperty m_min_stat_ineff_mod
Definition: SCTErrMonTool.h:107
BARREL
@ BARREL
Definition: TRTRadiatorParameters.h:10
SCT_Monitoring::LAST_PHI_BIN_EC
@ LAST_PHI_BIN_EC
Definition: SCT_MonitoringNumbers.h:48
SCT_ID::side
int side(const Identifier &id) const
Definition: SCT_ID.h:752
SCT_ID::wafer_end
const_id_iterator wafer_end(void) const
Definition: SCT_ID.cxx:652
SCT_Monitoring::getNumModules
int getNumModules(const int reg, const int layer)
Definition: SCT_MonitoringNumbers.h:99
SCT_Monitoring::FIRST_ETA_BIN
@ FIRST_ETA_BIN
Definition: SCT_MonitoringNumbers.h:41
SCTErrMonTool::m_pSCTHelper
const SCT_ID * m_pSCTHelper
SCT Helper class.
Definition: SCTErrMonTool.h:134
merge.status
status
Definition: merge.py:17
SCT_ConditionsData::CHIPS_PER_MODULE
@ CHIPS_PER_MODULE
Definition: SCT_ConditionsParameters.h:20
TH2F_LW
Definition: TH2F_LW.h:23
SCTErrMonTool::m_ConfigurationTool
ToolHandle< ISCT_ConfigurationConditionsTool > m_ConfigurationTool
Definition: SCTErrMonTool.h:126
SCTErrMonTool::checkRateHists
StatusCode checkRateHists()
Used in procHistograms()
Definition: SCTErrMonTool.cxx:375
SCTErrMonTool::m_FractionOfSCTFlagErrorsPerLB
TProfile_LW * m_FractionOfSCTFlagErrorsPerLB
Definition: SCTErrMonTool.h:143
ReadHandle.h
Handle class for reading from StoreGate.
SCT_ID::wafer_id
Identifier wafer_id(int barrel_ec, int layer_disk, int phi_module, int eta_module, int side) const
For a single side of module.
Definition: SCT_ID.h:464
SCT_DetectorManager.h
makeComparison.deltaZ
int deltaZ
Definition: makeComparison.py:46
ManagedMonitorToolBase::newLumiBlockFlag
bool newLumiBlockFlag() const
Definition: ManagedMonitorToolBase.h:853
SCTErrMonTool::m_errThreshold
FloatProperty m_errThreshold
Definition: SCTErrMonTool.h:113
InDetConditions::SCT_SIDE
@ SCT_SIDE
Definition: InDetHierarchy.h:14
plotBeamSpotCompare.histo
histo
Definition: plotBeamSpotCompare.py:415
SCT_Monitoring::ConfbinsSummary
@ ConfbinsSummary
Definition: SCT_MonitoringNumbers.h:69
SCTErrMonTool::m_dcsTool
ToolHandle< ISCT_DCSConditionsTool > m_dcsTool
Definition: SCTErrMonTool.h:129
LWHist::GetYaxis
LWHistAxis * GetYaxis()
Definition: LWHist.cxx:319
SCT_Monitoring::badError
@ badError
Definition: SCT_MonitoringNumbers.h:63
SCTErrMonTool::m_gpath
std::string m_gpath
Definition: SCTErrMonTool.h:89
ManagedMonitorToolBase::regHist
virtual StatusCode regHist(TH1 *h, const std::string &system, Interval_t interval, MgmtAttr_t histo_mgmt=ATTRIB_MANAGED, const std::string &chain="", const std::string &merge="")
Registers a TH1 (including TH2, TH3, and TProfile) to be included in the output stream using logical ...
Definition: ManagedMonitorToolBase.cxx:1454
SCTErrMonTool::m_current_lb
int m_current_lb
Definition: SCTErrMonTool.h:86
SCTErrMonTool::m_numberOfEvents
int m_numberOfEvents
Definition: SCTErrMonTool.h:82
SCTErrMonTool::m_byteStreamErrTool
ToolHandle< ISCT_ByteStreamErrorsTool > m_byteStreamErrTool
Definition: SCTErrMonTool.h:128
SCTErrMonTool::m_pSummaryTool
ToolHandle< IInDetConditionsTool > m_pSummaryTool
Definition: SCTErrMonTool.h:130
xAOD::EventInfo_v1::SCT
@ SCT
The SCT.
Definition: EventInfo_v1.h:333
SCTErrMonTool::m_last_reset_lb
int m_last_reset_lb
Definition: SCTErrMonTool.h:87
ManagedMonitorToolBase::newRunFlag
bool newRunFlag() const
Definition: ManagedMonitorToolBase.h:854
SCT_Monitoring::summary
@ summary
Definition: SCT_MonitoringNumbers.h:65