From b7fd6a249ef370d94211497e5157ac89c22f5ad5 Mon Sep 17 00:00:00 2001
From: Susumu Oda <susumu.oda@cern.ch>
Date: Thu, 26 Mar 2020 02:23:08 +0100
Subject: [PATCH 01/10] Move some eunms, numbers, strings of SCTErrMonTool/Alg
 to SCT_MonitoringNumbers.h

---
 .../SCT_Monitoring/SCT_MonitoringNumbers.h    | 28 +++++++-
 .../share/SCTErrMonAlg_jobOptions.py          | 52 +++++---------
 .../SCT_Monitoring/src/SCTErrMonAlg.cxx       | 40 +++++------
 .../SCT_Monitoring/src/SCTErrMonAlg.h         | 15 +---
 .../SCT_Monitoring/src/SCTErrMonTool.cxx      | 70 ++++++++++---------
 .../SCT_Monitoring/src/SCTErrMonTool.h        | 30 ++------
 6 files changed, 104 insertions(+), 131 deletions(-)

diff --git a/InnerDetector/InDetMonitoring/SCT_Monitoring/SCT_Monitoring/SCT_MonitoringNumbers.h b/InnerDetector/InDetMonitoring/SCT_Monitoring/SCT_Monitoring/SCT_MonitoringNumbers.h
index 1b4f27bcd357..d2e6380acec6 100644
--- a/InnerDetector/InDetMonitoring/SCT_Monitoring/SCT_Monitoring/SCT_MonitoringNumbers.h
+++ b/InnerDetector/InDetMonitoring/SCT_Monitoring/SCT_Monitoring/SCT_MonitoringNumbers.h
@@ -11,13 +11,14 @@
 #ifndef SCT_MonitoringNumbers_H
 #define SCT_MonitoringNumbers_H
 #include "TString.h"
+#include <string>
 #include <vector>
  
 namespace SCT_Monitoring{
   ///what array indices mean when looping over subsystems
   enum BecIndex {INVALID_INDEX=-1, ENDCAP_C_INDEX=0, BARREL_INDEX=1, ENDCAP_A_INDEX=2, GENERAL_INDEX=3};
   ///Possible values of the 'BEC' (Barrel or EndCap) value
-  enum Bec{ ENDCAP_C=-2, BARREL=0, ENDCAP_A=2, N_REGIONS=3, GENERAL=3, INVALID_SYSTEM=4};
+  enum Bec{ ENDCAP_C=-2, BARREL=0, ENDCAP_A=2, N_REGIONS=3, GENERAL=3, INVALID_SYSTEM=4, N_REGIONS_INC_GENERAL=N_REGIONS+1};
   ///Array for conversion of an array index to a Bec
   static const std::vector<Bec> index2BecArray={ENDCAP_C, BARREL, ENDCAP_A, GENERAL};
   ///Conversion  bec->index
@@ -48,6 +49,21 @@ namespace SCT_Monitoring{
     N_SIDES = 2
   };
   
+  enum CategoryErrors {MASKEDLINKALL=0, SUMMARY, BADERR, LINKLEVEL, RODLEVEL, MASKEDCHIP, N_ERRCATEGORY};
+
+  enum ProblemForCoverage {
+    all, //All SCT module for counting good module
+    disabled, //Disabled
+    badLinkError, //BadLinkLevelError
+    badRODError, //BadRODLevelError
+    badError, //BadError = BadLinkLevelError + BadRODLevelError
+    psTripDCS, //Power supply trip using SCT_DCSConditionsSvc
+    summary, //Total coverage using SCT_ConditionsSummarySvc
+    numberOfProblemForCoverage
+  };
+
+  enum ConfigurationBins {ConfbinsSummary = 6, ConfbinsDetailed = 5, ConfbinsOnline = 4};
+
   static const std::vector<int> n_layers = {N_DISKS, N_BARRELS, N_DISKS, 2 * N_DISKS + N_BARRELS};
   static const std::vector<int> n_etabins = {N_ETA_BINS_EC, N_ETA_BINS, N_ETA_BINS_EC};
   static const std::vector<int> n_phibins = {N_PHI_BINS_EC, N_PHI_BINS, N_PHI_BINS_EC};
@@ -63,6 +79,16 @@ namespace SCT_Monitoring{
   
   static const long NBINS_LBs = 3000;
   
+  static const std::vector<std::string> coverageVarNames = {
+    "", // All (not used)
+    "OfEnabledLinks", // All - Disabled
+    "WithNoBadLinkLevelError", // All - BadLinkLevelError
+    "WithNoBadRODLevelError", // All - BadRODLevelError
+    "WithNoBadError", // All - BadError
+    "WithNoPSTrip", // All - PSTrip (DCS)
+    "OfLinksWithNoBadProblem" // All - Summary
+  };
+
   //====================================================================================================
   //                          SCTErrMonTool :: getNumModules, Daniel Damiani 16/8/2010
   //====================================================================================================
diff --git a/InnerDetector/InDetMonitoring/SCT_Monitoring/share/SCTErrMonAlg_jobOptions.py b/InnerDetector/InDetMonitoring/SCT_Monitoring/share/SCTErrMonAlg_jobOptions.py
index 372a95a7e1a5..63ae47a11aab 100644
--- a/InnerDetector/InDetMonitoring/SCT_Monitoring/share/SCTErrMonAlg_jobOptions.py
+++ b/InnerDetector/InDetMonitoring/SCT_Monitoring/share/SCTErrMonAlg_jobOptions.py
@@ -33,14 +33,7 @@ myMonGroup = helper.addGroup(myMonAlg, "SCTErrMonitor", "SCT/")
 
 # Configure histograms
 
-# ENDCAP_C_INDEX = 0
-# BARREL_INDEX   = 1
-# ENDCAP_A_INDEX = 2
-# GENERAL_INDEX  = 3
-N_REGIONS = 3
-NREGIONS_INC_GENERAL = N_REGIONS+1
-
-NBINS_LBs = 3000
+from ROOT import SCT_Monitoring as sctMon
 
 # Filled in fillHistograms
 myMonGroup.defineHistogram(varname = "moduleOutBin, moduleOut;SCTConfOutM",
@@ -59,9 +52,9 @@ for i in range(SCT_ByteStreamErrors.NUM_ERROR_TYPES):
                                type = "TProfile",
                                title = "Ave. "+SCT_ByteStreamErrors.errorTypesDescription[i]+" per LB in All Region;LumiBlock;Num of "+SCT_ByteStreamErrors.errorTypesDescription[i],
                                path = "GENERAL/Conf",
-                               xbins = NBINS_LBs,
+                               xbins = sctMon.NBINS_LBs,
                                xmin = 0.5,
-                               xmax = NBINS_LBs+0.5)
+                               xmax = sctMon.NBINS_LBs+0.5)
 
 # Filled in fillByteStreamErrorsHelper
 myMonGroup.defineHistogram(varname = "maskedLinksBin;Masked Links",
@@ -69,21 +62,12 @@ myMonGroup.defineHistogram(varname = "maskedLinksBin;Masked Links",
                            type = "TH1I",
                            title = "Number of Masked Links for SCT,ECA,B,ECC",
                            path = "GENERAL/errors",
-                           xbins = 4,
+                           xbins = sctMon.N_REGIONS_INC_GENERAL,
                            xmin = -0.5,
-                           xmax = 3.5,
+                           xmax = sctMon.N_REGIONS_INC_GENERAL-0.5,
                            xlabels = ["EndCapC", "Barrel", "EndCapA", "All"])
 
 # Filled in fillByteStreamErrors
-coverageVarNames = [
-    "", # All (not used)
-    "OfEnabledLinks", # All - Disabled
-    "WithNoBadLinkLevelError", # All - BadLinkLevelError
-    "WithNoBadRODLevelError", # All - BadRODLevelError
-    "WithNoBadError", # All - BadError
-    "WithNoPSTrip", # All - PSTrip (DCS)
-    "OfLinksWithNoBadProblem" # All - Summary
-]
 coverageTitles = [
     "", # All (not used)
     "Ave. Coverage of Enabled Links per LB", # All - Disabled
@@ -93,42 +77,38 @@ coverageTitles = [
     "Ave. Coverage of links Not Affected by PS Trip", # All - PSTrip (DCS)
     "Ave. Coverage of Links With No Bad Problem per LB" # All - Summary
 ]
-numberOfProblemForCoverage = len(coverageVarNames)
-for iProblem in range(1, numberOfProblemForCoverage):
-    myMonGroup.defineHistogram(varname = "lumiBlock, detectorCoverage"+coverageVarNames[iProblem]+";SCT_Coverage"+coverageVarNames[iProblem]+"VsLbs",
+for iProblem in range(1, sctMon.ProblemForCoverage.numberOfProblemForCoverage):
+    myMonGroup.defineHistogram(varname = "lumiBlock, detectorCoverage"+sctMon.coverageVarNames[iProblem]+";SCT_Coverage"+sctMon.coverageVarNames[iProblem]+"VsLbs",
                                type = "TProfile",
                                title = coverageTitles[iProblem]+";LumiBlock;Detector Coverage [%]",
                                path = "DetectorCoverage",
-                               xbins = NBINS_LBs,
+                               xbins = sctMon.NBINS_LBs,
                                xmin = 0.5,
-                               xmax = NBINS_LBs+0.5)    
+                               xmax = sctMon.NBINS_LBs+0.5)    
 
 # Fiiled in fillByteStreamErrors
 myMonGroup.defineHistogram(varname = "lumiBlock, psTripModules;SCT_ModulesWithPSTripVsLbs",
                            type = "TProfile",
                            title = "Ave. Num of Modules Affected by PS Trip per LB in All Region;LumiBlock;Num. of Modules Affected by PS Trip",
                            path = "DetectorCoverage",
-                           xbins = NBINS_LBs,
+                           xbins = sctMon.NBINS_LBs,
                            xmin = 0.5,
-                           xmax = NBINS_LBs+0.5)
+                           xmax = sctMon.NBINS_LBs+0.5)
 
 # Filled in fillByteStreamErrorsHelper
-layerName = [" disk ", " layer ", " disk "]
-subDetNameShort = ["EC", "B", "EA"]
-n_layers = [9, 4, 9]
 xlabels = []
 for i in range(SCT_ByteStreamErrors.NUM_ERROR_TYPES):
     xlabels.append(SCT_ByteStreamErrors.errorTypesDescription[i])
-for reg in range(N_REGIONS):
-    nLayers = n_layers[reg]*2
+for reg in range(sctMon.N_REGIONS):
+    nLayers = sctMon.n_layers[reg]*2
     ylabels = []
     for i in range(nLayers):
         ylabels.append(str(i/2)+"_"+str(i%2))
     myMonGroup.defineHistogram(varname = "errorType, layerSide, errorFraction;RateErrorsPerLumi",
-                               cutmask = "is"+subDetNameShort[reg],
+                               cutmask = "is"+sctMon.subDetNameShort[reg].Data(),
                                type = "TProfile2D",
-                               title = "Rate of Error Types for "+layerName[reg]+" per Lumi-Block",
-                               path = "SCT"+subDetNameShort[reg]+"/errors",
+                               title = "Rate of Error Types for "+sctMon.layerName[reg].Data()+" per Lumi-Block",
+                               path = "SCT"+sctMon.subDetNameShort[reg].Data()+"/errors",
                                xbins = SCT_ByteStreamErrors.NUM_ERROR_TYPES,
                                xmin = -0.5,
                                xmax = SCT_ByteStreamErrors.NUM_ERROR_TYPES-0.5,
diff --git a/InnerDetector/InDetMonitoring/SCT_Monitoring/src/SCTErrMonAlg.cxx b/InnerDetector/InDetMonitoring/SCT_Monitoring/src/SCTErrMonAlg.cxx
index 813a2d906153..921d54ce0adc 100644
--- a/InnerDetector/InDetMonitoring/SCT_Monitoring/src/SCTErrMonAlg.cxx
+++ b/InnerDetector/InDetMonitoring/SCT_Monitoring/src/SCTErrMonAlg.cxx
@@ -102,7 +102,7 @@ SCTErrMonAlg::fillByteStreamErrors(const EventContext& ctx) const {
   if (m_coverageCheck) {
     ATH_MSG_INFO("Detector Coverage calculation starts" );
 
-    static const std::string names[numberOfProblemForCoverage] = {
+    static const std::string names[ProblemForCoverage::numberOfProblemForCoverage] = {
       "SCT_AllRegion", // All
       "SCT_MapOfDisabledLinks", // Disabled
       "SCT_MapOfLinksWithBadLinkLevelErrors", // BadLinkLevelError
@@ -111,7 +111,7 @@ SCTErrMonAlg::fillByteStreamErrors(const EventContext& ctx) const {
       "SCT_MapOfLinksWithPSTrip", // PSTrip (DCS)
       "SCT_MapOfLinksWithAnyProbelm" // Summary
     };
-    static const std::string titles[numberOfProblemForCoverage] = {
+    static const std::string titles[ProblemForCoverage::numberOfProblemForCoverage] = {
       "Map of All Region", // All
       "Map of Disabled Links", // Disabled
       "Map of Links with bad LinkLevelErrors", // BadLinkLevelError
@@ -120,42 +120,36 @@ SCTErrMonAlg::fillByteStreamErrors(const EventContext& ctx) const {
       "Map of Links Affected by PS Trip", // PSTrip (DCS)
       "Map of Links with Any Bad Problem" // Summary
     };
-    static const std::string varNames[numberOfProblemForCoverage] = {
-      "", // All (not used)
-      "OfEnabledLinks", // All - Disabled
-      "WithNoBadLinkLevelError", // All - BadLinkLevelError
-      "WithNoBadRODLevelError", // All - BadRODLevelError
-      "WithNoBadError", // All - BadError
-      "WithNoPSTrip", // All - PSTrip (DCS)
-      "OfLinksWithNoBadProblem" // All - Summary
-    };
 
     std::vector<TH2F> mapSCT; // TODO: Check if we need to record these histograms
-    for (int iProblem{0}; iProblem<numberOfProblemForCoverage; iProblem++) {
+    for (int iProblem{0}; iProblem<ProblemForCoverage::numberOfProblemForCoverage; iProblem++) {
       mapSCT.push_back(TH2F(names[iProblem].c_str(), titles[iProblem].c_str(),
                             s_nBinsEta, -s_rangeEta, s_rangeEta, s_nBinsPhi, -M_PI, M_PI));
       mapSCT[iProblem].GetXaxis()->SetTitle("#eta");
       mapSCT[iProblem].GetYaxis()->SetTitle("#phi");
     }
 
-    std::set<IdentifierHash> sctHash[numberOfProblemForCoverage]{{}};
-    disabledSCT(sctHash[disabled]);
-    errorSCT(sctHash[badLinkError], sctHash[badRODError], sctHash[badError]);
-    summarySCT(sctHash[all], sctHash[summary]);
+    std::set<IdentifierHash> sctHash[ProblemForCoverage::numberOfProblemForCoverage]{{}};
+    disabledSCT(sctHash[ProblemForCoverage::disabled]);
+    errorSCT(sctHash[ProblemForCoverage::badLinkError],
+             sctHash[ProblemForCoverage::badRODError],
+             sctHash[ProblemForCoverage::badError]);
+    summarySCT(sctHash[ProblemForCoverage::all],
+               sctHash[ProblemForCoverage::summary]);
     float psTripModules{0.};
-    psTripDCSSCT(sctHash[psTripDCS], psTripModules);
+    psTripDCSSCT(sctHash[ProblemForCoverage::psTripDCS], psTripModules);
 
-    for (int iProblem{0}; iProblem<numberOfProblemForCoverage; iProblem++) {
+    for (int iProblem{0}; iProblem<ProblemForCoverage::numberOfProblemForCoverage; iProblem++) {
       for (const IdentifierHash& hash: sctHash[iProblem]) {
         fillWafer(m_geo[hash], mapSCT[iProblem]);
       }
 
-      if (iProblem==all) continue;
+      if (iProblem==ProblemForCoverage::all) continue;
 
-      double detector_coverage{calculateDetectorCoverage(mapSCT[iProblem], mapSCT[all])};
+      double detector_coverage{calculateDetectorCoverage(mapSCT[iProblem], mapSCT[ProblemForCoverage::all])};
       /// Fill /SCT/DetectorCoverage/SCT_Coverage*VsLbs ///
       auto lumiBlockAcc{Monitored::Scalar<int>("lumiBlock", pEvent->lumiBlock())};
-      auto detectorCoverageAcc{Monitored::Scalar<double>("detectorCoverage"+varNames[iProblem], detector_coverage)};
+      auto detectorCoverageAcc{Monitored::Scalar<double>("detectorCoverage"+coverageVarNames[iProblem], detector_coverage)};
       fill("SCTErrMonitor", lumiBlockAcc, detectorCoverageAcc);
     }
     
@@ -220,7 +214,7 @@ SCTErrMonAlg::fillByteStreamErrorsHelper(const set<IdentifierHash>& errors,
 
   //--- Count BS errors
   int nerrors{0};
-  int nMaskedLinks[NREGIONS_INC_GENERAL]{0, 0, 0, 0};
+  int nMaskedLinks[N_REGIONS_INC_GENERAL]{0, 0, 0, 0};
   for (const auto& hash: errors) {
     nerrors++;
     if (not hash.is_valid()) continue;
@@ -250,7 +244,7 @@ SCTErrMonAlg::fillByteStreamErrorsHelper(const set<IdentifierHash>& errors,
 
   /// Fill /SCT/GENERAL/errors/Masked Links ///
   // TODO: reset the histogram every event
-  for (int reg{0}; reg<NREGIONS_INC_GENERAL; reg++) {
+  for (int reg{0}; reg<N_REGIONS_INC_GENERAL; reg++) {
     auto maskedLinksBinAcc{Monitored::Scalar<int>("maskedLinksBin", reg)};
     auto maskedLinksAcc{Monitored::Scalar<int>("maskedLinks", nMaskedLinks[reg])};
     fill("SCTErrMonitor", maskedLinksBinAcc, maskedLinksAcc);
diff --git a/InnerDetector/InDetMonitoring/SCT_Monitoring/src/SCTErrMonAlg.h b/InnerDetector/InDetMonitoring/SCT_Monitoring/src/SCTErrMonAlg.h
index 7dadffbc92c9..c0356b1287e5 100644
--- a/InnerDetector/InDetMonitoring/SCT_Monitoring/src/SCTErrMonAlg.h
+++ b/InnerDetector/InDetMonitoring/SCT_Monitoring/src/SCTErrMonAlg.h
@@ -9,7 +9,7 @@
 
 #include "AthenaMonitoring/AthMonitorAlgorithm.h"
 
-#include "SCT_MonitoringNumbers.h"
+#include "SCT_Monitoring/SCT_MonitoringNumbers.h"
 
 #include "InDetConditionsSummaryService/IInDetConditionsTool.h"
 #include "SCT_ConditionsTools/ISCT_ByteStreamErrorsTool.h"
@@ -33,19 +33,6 @@ class SCTErrMonAlg : public AthMonitorAlgorithm {
   // First element of pair is minimum second is maximum.
   typedef std::pair<std::pair<double, double>, std::pair<double, double>> moduleGeo_t;
 
-  enum CategoryErrors {MASKEDLINKALL=0, SUMMARY, BADERR, LINKLEVEL, RODLEVEL, MASKEDCHIP, N_ERRCATEGORY};
-  enum ProblemForCoverage {
-    all, // All SCT module for counting good module
-    disabled, // Disabled
-    badLinkError, // BadLinkLevelError
-    badRODError, // BadRODLevelError
-    badError, // BadError = BadLinkLevelError + BadRODLevelError
-    psTripDCS, // Power supply trip using SCT_DCSConditionsSvc
-    summary, // Total coverage using SCT_ConditionsSummarySvc
-    numberOfProblemForCoverage
-  };
-  enum {NREGIONS_INC_GENERAL = SCT_Monitoring::N_REGIONS+1};
-
   static const unsigned int s_nBinsEta;
   static const double s_rangeEta;
   static const unsigned int s_nBinsPhi;
diff --git a/InnerDetector/InDetMonitoring/SCT_Monitoring/src/SCTErrMonTool.cxx b/InnerDetector/InDetMonitoring/SCT_Monitoring/src/SCTErrMonTool.cxx
index 1924dc420baa..05c5d4436b4b 100644
--- a/InnerDetector/InDetMonitoring/SCT_Monitoring/src/SCTErrMonTool.cxx
+++ b/InnerDetector/InDetMonitoring/SCT_Monitoring/src/SCTErrMonTool.cxx
@@ -211,7 +211,7 @@ SCTErrMonTool::bookHistograms() {
 //          SCTErrMonTool :: bookHistogramsRecurrent, Keisuke Koda 12.09.2016
 //====================================================================================================
 StatusCode SCTErrMonTool::bookHistogramsRecurrent() {
-  static const string profNames[numberOfProblemForCoverage] = {
+  static const string profNames[ProblemForCoverage::numberOfProblemForCoverage] = {
     "", // All
     "SCT_CoverageOfEnabledLinksVsLbs", // All - Disabled
     "SCT_CoverageWithNoBadLinkLevelErrorVsLbs", // All - BadLinkLevelError
@@ -220,7 +220,7 @@ StatusCode SCTErrMonTool::bookHistogramsRecurrent() {
     "SCT_CoverageWithNoPSTripVsLbs", // All - PSTrip(DCS)
     "SCT_CoverageOfLinksWithNoBadProblemVsLbs" // All - Summary
   };
-  static const string profTitles[numberOfProblemForCoverage] = {
+  static const string profTitles[ProblemForCoverage::numberOfProblemForCoverage] = {
     "", // All
     "Ave. Coverage of Enabled Links per LB", // All - Disabled
     "Ave. Coverage of Links with No Bad LinkLevelError per LB", // All - BadLinkLevelError
@@ -239,8 +239,8 @@ StatusCode SCTErrMonTool::bookHistogramsRecurrent() {
     MonGroup monGr_shift{this, "SCT/DetectorCoverage", ManagedMonitorToolBase::run, ATTRIB_UNMANAGED};
 
     //All SCT module for counting good module
-    m_mapSCT[all] = new TH2F( "SCT_AllRegion", "Map of All Region",
-                              s_nBinsEta, -s_rangeEta, s_rangeEta, s_nBinsPhi, -M_PI, M_PI );
+    m_mapSCT[ProblemForCoverage::all] = new TH2F( "SCT_AllRegion", "Map of All Region",
+                                                  s_nBinsEta, -s_rangeEta, s_rangeEta, s_nBinsPhi, -M_PI, M_PI );
     //Disabled
     m_mapSCT[disabled] = new TH2F( "SCT_MapOfDisabledLinks", "Map of Disabled Links",
                                    s_nBinsEta, -s_rangeEta, s_rangeEta, s_nBinsPhi, -M_PI, M_PI );
@@ -261,15 +261,15 @@ StatusCode SCTErrMonTool::bookHistogramsRecurrent() {
                                   s_nBinsEta, -s_rangeEta, s_rangeEta, s_nBinsPhi, -M_PI, M_PI );
     
     //Detector Coverage vs LumiBlock
-    for (int iProblem{0}; iProblem<numberOfProblemForCoverage ; iProblem++) {
+    for (int iProblem{0}; iProblem<ProblemForCoverage::numberOfProblemForCoverage ; iProblem++) {
       m_mapSCT[iProblem]->GetXaxis()->SetTitle("#eta");
       m_mapSCT[iProblem]->GetYaxis()->SetTitle("#phi");
       status &= monGr_shift.regHist( m_mapSCT[iProblem] ).isSuccess();
       m_mapSCT[iProblem]->SetStats(0);
     }
 
-    for (int iProblem{0}; iProblem<numberOfProblemForCoverage; iProblem++) {
-      if (iProblem==all) continue;
+    for (int iProblem{0}; iProblem<ProblemForCoverage::numberOfProblemForCoverage; iProblem++) {
+      if (iProblem==ProblemForCoverage::all) continue;
 
       m_detectorCoverageVsLbs[iProblem] = new TProfile(profNames[iProblem].c_str(), profTitles[iProblem].c_str(), NBINS_LBs,0.5,NBINS_LBs+0.5);
       m_detectorCoverageVsLbs[iProblem]->GetXaxis()->SetTitle("LumiBlock");
@@ -585,25 +585,29 @@ SCTErrMonTool::fillByteStreamErrors() {
   if ( m_CoverageCheck ) {
     ATH_MSG_INFO("Detector Coverage calculation starts" );
 
-    for (int iProblem{0}; iProblem<numberOfProblemForCoverage; iProblem++) {
+    for (int iProblem{0}; iProblem<ProblemForCoverage::numberOfProblemForCoverage; iProblem++) {
       m_mapSCT[iProblem]->Reset("ICE");
     }
 
-    std::set<IdentifierHash> sctHash[numberOfProblemForCoverage]{{}};
-    syncDisabledSCT(sctHash[disabled]);
-    syncErrorSCT(sctHash[badLinkError], sctHash[badRODError], sctHash[badError]);
-    summarySCT(sctHash[all], sctHash[summary]);
+    std::set<IdentifierHash> sctHash[ProblemForCoverage::numberOfProblemForCoverage]{{}};
+    syncDisabledSCT(sctHash[ProblemForCoverage::disabled]);
+    syncErrorSCT(sctHash[ProblemForCoverage::badLinkError],
+                 sctHash[ProblemForCoverage::badRODError],
+                 sctHash[ProblemForCoverage::badError]);
+    summarySCT(sctHash[ProblemForCoverage::all],
+               sctHash[ProblemForCoverage::summary]);
     float PSTripModules{0.};
-    psTripDCSSCT(sctHash[psTripDCS], PSTripModules);
+    psTripDCSSCT(sctHash[ProblemForCoverage::psTripDCS],
+                 PSTripModules);
     
-    for (int iProblem{0}; iProblem<numberOfProblemForCoverage; iProblem++) {
+    for (int iProblem{0}; iProblem<ProblemForCoverage::numberOfProblemForCoverage; iProblem++) {
       for (const IdentifierHash& hash: sctHash[iProblem]) {
         fillWafer(m_geo[hash], m_mapSCT[iProblem]);
       }
     }
     
     //detector coverage
-    for (int iProblem{0}; iProblem<numberOfProblemForCoverage; iProblem++) {
+    for (int iProblem{0}; iProblem<ProblemForCoverage::numberOfProblemForCoverage; iProblem++) {
       if (iProblem==all) continue;
 
       double detector_coverage{calculateDetectorCoverage(m_mapSCT[iProblem])};
@@ -836,15 +840,15 @@ SCTErrMonTool::bookConfMapsGen() {
   static const string OnlineBinNames[ConfbinsOnline] = {
     "Mod Out", "Flagged Links", "Masked Links", "Errors"
   };
-  static const TString regLabel[NREGIONS_INC_GENERAL] = {
+  static const TString regLabel[N_REGIONS_INC_GENERAL] = {
     "EndcapC", "Barrel", "EndcapA", ""
   };
-  static const TString regTitle[NREGIONS_INC_GENERAL] = {
+  static const TString regTitle[N_REGIONS_INC_GENERAL] = {
     "EndcapC", "Barrel", "EndcapA", "All Region"
   };
 
   if (ManagedMonitorToolBase::newRunFlag()) {
-    MonGroup ConfHist[NREGIONS_INC_GENERAL] = {
+    MonGroup ConfHist[N_REGIONS_INC_GENERAL] = {
       MonGroup{this, "SCT/SCTEC/Conf",   ManagedMonitorToolBase::run, ATTRIB_UNMANAGED},
       MonGroup{this, "SCT/SCTB/Conf",    ManagedMonitorToolBase::run, ATTRIB_UNMANAGED},
       MonGroup{this, "SCT/SCTEA/Conf",   ManagedMonitorToolBase::run, ATTRIB_UNMANAGED},
@@ -926,12 +930,12 @@ SCTErrMonTool::bookConfMapsGen() {
 
       if ((m_environment == AthenaMonManager::online) or testOffline) {
         m_ConfEffOnline = new TProfile("SCTEffConf", "Number of Inefficient Modules Online",
-                                       NREGIONS_INC_GENERAL, -0.5, NREGIONS_INC_GENERAL-0.5);
+                                       N_REGIONS_INC_GENERAL, -0.5, N_REGIONS_INC_GENERAL-0.5);
         m_ConfNoiseOnline = TProfile_LW::create("SCTNoiseConf", "Number of Noisy Modules Online",
-                                                NREGIONS_INC_GENERAL, -0.5, NREGIONS_INC_GENERAL-0.5);
+                                                N_REGIONS_INC_GENERAL, -0.5, N_REGIONS_INC_GENERAL-0.5);
         m_ConfNoiseOnlineRecent = TProfile_LW::create("SCTNoiseConfRecent", "Number of Noisy Modules Online Recent",
-                                                      NREGIONS_INC_GENERAL, -0.5, NREGIONS_INC_GENERAL - 0.5);
-        for (int reg{0}; reg < NREGIONS_INC_GENERAL; ++reg) {
+                                                      N_REGIONS_INC_GENERAL, -0.5, N_REGIONS_INC_GENERAL - 0.5);
+        for (int reg{0}; reg < N_REGIONS_INC_GENERAL; ++reg) {
           m_ConfOnline[GENERAL_INDEX] = TProfile_LW::create("SCTOnlineConf"+regLabel[GENERAL_INDEX], "Num of Out Links in "+regTitle[GENERAL_INDEX]+" Online",
                                                   ConfbinsOnline, -0.5, ConfbinsOnline-0.5);
           for (int bin{0}; bin < ConfbinsOnline; bin++) {
@@ -968,28 +972,28 @@ SCTErrMonTool::bookConfMapsGen() {
 // ====================================================================================================
 StatusCode
 SCTErrMonTool::fillCondDBMaps() {
-  int Flagged[NREGIONS_INC_GENERAL] = { // Not updated. Always zero.
+  int Flagged[N_REGIONS_INC_GENERAL] = { // Not updated. Always zero.
     0, 0, 0, 0
   };
-  int MOut[NREGIONS_INC_GENERAL] = {
+  int MOut[N_REGIONS_INC_GENERAL] = {
     0, 0, 0, 0
   };
-  int MaskedAllLinks[NREGIONS_INC_GENERAL] = {
+  int MaskedAllLinks[N_REGIONS_INC_GENERAL] = {
     static_cast<int>(m_MaskedAllLinks->GetBinContent(1)),
     static_cast<int>(m_MaskedAllLinks->GetBinContent(2)),
     static_cast<int>(m_MaskedAllLinks->GetBinContent(3)),
     static_cast<int>(m_MaskedAllLinks->GetBinContent(4))
   };
-  int ModErr[NREGIONS_INC_GENERAL] = {
+  int ModErr[N_REGIONS_INC_GENERAL] = {
     0, 0, 0, 0
   };
-  int InEffModules[NREGIONS_INC_GENERAL] = {
+  int InEffModules[N_REGIONS_INC_GENERAL] = {
     0, 0, 0, 0
   };
-  int NoisyModules[NREGIONS_INC_GENERAL] = {
+  int NoisyModules[N_REGIONS_INC_GENERAL] = {
     0, 0, 0, 0
   };
-  int NoisyModulesRecent[NREGIONS_INC_GENERAL] = {
+  int NoisyModulesRecent[N_REGIONS_INC_GENERAL] = {
     0, 0, 0, 0
   };
 
@@ -1102,7 +1106,7 @@ SCTErrMonTool::fillCondDBMaps() {
     m_ConfNew->Fill(3., static_cast<double>(InEffModules[GENERAL_INDEX]));
     m_ConfNew->Fill(4., static_cast<double>(NoisyModules[GENERAL_INDEX]));
     if (m_environment == AthenaMonManager::online) {
-      for (int reg{0}; reg < NREGIONS_INC_GENERAL; ++reg) {
+      for (int reg{0}; reg < N_REGIONS_INC_GENERAL; ++reg) {
         m_ConfOnline[reg]->Fill(0., static_cast<double>(MOut[reg]));
         m_ConfOnline[reg]->Fill(1., static_cast<double>(Flagged[reg]));
         m_ConfOnline[reg]->Fill(2., static_cast<double>(MaskedAllLinks[reg]));
@@ -1111,7 +1115,7 @@ SCTErrMonTool::fillCondDBMaps() {
     }
     if ((m_environment == AthenaMonManager::online) or testOffline) {
       m_ConfEffOnline->Reset("ICE");
-      for (int reg{0}; reg < NREGIONS_INC_GENERAL; ++reg) {
+      for (int reg{0}; reg < N_REGIONS_INC_GENERAL; ++reg) {
         const float f{static_cast<float>(reg)};
         m_ConfEffOnline->Fill(f, static_cast<double>(InEffModules[reg]));
         m_ConfNoiseOnline->Fill(f, static_cast<double>(NoisyModules[reg]));
@@ -1202,7 +1206,7 @@ SCTErrMonTool::resetCondDBMaps() {
     return StatusCode::SUCCESS;
   }
   if (m_makeConfHisto) {
-    for (int reg{0}; reg < NREGIONS_INC_GENERAL; ++reg) {
+    for (int reg{0}; reg < N_REGIONS_INC_GENERAL; ++reg) {
       m_ConfOnline[reg]->Reset();
     }
     m_ConfEffOnline->Reset();
@@ -1466,7 +1470,7 @@ double SCTErrMonTool::calculateDetectorCoverage( const TH2F* histo ) const {
 
   for (unsigned int i{0}; i < s_nBinsEta; i++) {
     for (unsigned int j{0}; j < s_nBinsPhi; j++) {
-      double waferCell{m_mapSCT[all]->GetBinContent(i+1, j+1) - histo->GetBinContent(i+1, j+1)};
+      double waferCell{m_mapSCT[ProblemForCoverage::all]->GetBinContent(i+1, j+1) - histo->GetBinContent(i+1, j+1)};
 
       if (waferCell >= s_WafersThreshold) {
         occupancy += 1.0;
diff --git a/InnerDetector/InDetMonitoring/SCT_Monitoring/src/SCTErrMonTool.h b/InnerDetector/InDetMonitoring/SCT_Monitoring/src/SCTErrMonTool.h
index ddc81898c7e4..42e0f572f383 100644
--- a/InnerDetector/InDetMonitoring/SCT_Monitoring/src/SCTErrMonTool.h
+++ b/InnerDetector/InDetMonitoring/SCT_Monitoring/src/SCTErrMonTool.h
@@ -71,24 +71,6 @@ class SCTErrMonTool : public ManagedMonitorToolBase {
   //First element of pair is minimum second is maximum.
   typedef std::pair<std::pair<double, double>, std::pair<double, double>> moduleGeo_t;
 
-  enum CategoryErrors {MASKEDLINKALL=0, SUMMARY, BADERR, LINKLEVEL, RODLEVEL, MASKEDCHIP, N_ERRCATEGORY};
-
-  enum ProblemForCoverage {
-    all, //All SCT module for counting good module
-    disabled, //Disabled
-    badLinkError, //BadLinkLevelError
-    badRODError, //BadRODLevelError
-    badError, //BadError = BadLinkLevelError + BadRODLevelError
-    psTripDCS, //Power supply trip using SCT_DCSConditionsSvc
-    summary, //Total coverage using SCT_ConditionsSummarySvc
-    numberOfProblemForCoverage
-  };
-
-  /// "Magic numbers" for an SCT module
-  enum {ConfbinsSummary = 6, ConfbinsDetailed = 5, ConfbinsOnline = 4};
-
-  enum {NREGIONS_INC_GENERAL = SCT_Monitoring::N_REGIONS+1};
-
   static const unsigned int s_nBinsEta;
   static const double s_rangeEta;
   static const unsigned int s_nBinsPhi;
@@ -166,26 +148,26 @@ class SCTErrMonTool : public ManagedMonitorToolBase {
   // total number of errors
   TH2F_LW* m_pallErrsCate[SCT_ByteStreamErrors::NUM_ERROR_TYPES][SCT_Monitoring::N_REGIONS][SCT_Monitoring::N_ENDCAPSx2]{}; // Filled in fillByteStreamErrorsHelper. Used to fill m_allErrsCate and m_summaryErrsRecent
   // Default histos to print per lumi block
-  TH2F_LW* m_numErrorsPerLumi[NREGIONS_INC_GENERAL]{}; // Filled in fillByteStreamErrorsHelper. Used to fill m_rateErrorsPerLumi
+  TH2F_LW* m_numErrorsPerLumi[SCT_Monitoring::N_REGIONS_INC_GENERAL]{}; // Filled in fillByteStreamErrorsHelper. Used to fill m_rateErrorsPerLumi
   /// Detector coverage
-  TH2F* m_mapSCT[numberOfProblemForCoverage]{nullptr}; // Filled in fillByteStreamErrors
+  TH2F* m_mapSCT[SCT_Monitoring::ProblemForCoverage::numberOfProblemForCoverage]{nullptr}; // Filled in fillByteStreamErrors
   TProfile* m_PSTripModulesVsLbs{}; // Filled in fillByteStreamErrors
 
   /// Profiles requiring postprocessing
   /// Under run directories
   TProfile_LW* m_ConfNew{}; // Filled in fillCondDBMaps using m_MaskedAllLinks and m_allErrsCate. Noise plots are also used.
-  TProfile_LW* m_LinksWithCategorisedErrorsVsLB[CategoryErrors::N_ERRCATEGORY]{}; // Fillded in fillByteStreamErrors using m_pallErrsCate
+  TProfile_LW* m_LinksWithCategorisedErrorsVsLB[SCT_Monitoring::CategoryErrors::N_ERRCATEGORY]{}; // Fillded in fillByteStreamErrors using m_pallErrsCate
   /// Under LB directories
   TProfile2D_LW* m_allErrsCate[SCT_ByteStreamErrors::NUM_ERROR_TYPES][SCT_Monitoring::N_REGIONS][SCT_Monitoring::N_ENDCAPSx2]{}; // Rate of errors. Filled in fillByteStreamErrors. Used to fill necessary m_ConfNew
-  TProfile2D_LW* m_rateErrorsPerLumi[NREGIONS_INC_GENERAL]{}; // Filled in checkRateHists using m_numErrorsPerLumi
+  TProfile2D_LW* m_rateErrorsPerLumi[SCT_Monitoring::N_REGIONS_INC_GENERAL]{}; // Filled in checkRateHists using m_numErrorsPerLumi
   /// Only online
-  TProfile_LW* m_ConfOnline[NREGIONS_INC_GENERAL]{}; // Filled in fillCondDBMaps using m_MaskedAllLinks and m_allErrsCate
+  TProfile_LW* m_ConfOnline[SCT_Monitoring::N_REGIONS_INC_GENERAL]{}; // Filled in fillCondDBMaps using m_MaskedAllLinks and m_allErrsCate
   TProfile_LW* m_ConfNoiseOnline{}; // Filled in fillCondDBMaps using noise plots
   TProfile_LW* m_ConfNoiseOnlineRecent{}; // Filled in fillCondDBMaps using noise plots
   TProfile2D_LW* m_summaryErrsRecent[SCT_Monitoring::N_REGIONS][SCT_Monitoring::N_ENDCAPSx2]{}; // Recent error rate histograms. Filled in fillByteStreamErrors using m_pallErrsCate
   TProfile* m_ConfEffOnline{}; // Filled in fillByteStreamErrors using efficiency plots
   /// Detector coverage
-  TProfile* m_detectorCoverageVsLbs[numberOfProblemForCoverage]{nullptr}; // Filled in fillByteStreamErrors using m_mapSCT
+  TProfile* m_detectorCoverageVsLbs[SCT_Monitoring::ProblemForCoverage::numberOfProblemForCoverage]{nullptr}; // Filled in fillByteStreamErrors using m_mapSCT
 
   /// Used in bookHistograms()
   StatusCode bookConfMapsGen();
-- 
GitLab


From b949bba0c56e048b04fe78323313fa22160915ab Mon Sep 17 00:00:00 2001
From: Susumu Oda <susumu.oda@cern.ch>
Date: Thu, 26 Mar 2020 03:53:40 +0100
Subject: [PATCH 02/10] Rename SCT_Monitoring::ProblemForCoverage::all to
 SCT_Monitoring::ProblemForCoverage::allRegion to avoid conflict with
 ManagedMonitorToolBase::Interval_t::all

---
 .../share/InDetMonitoringSCT.py               |  4 +-
 .../SCT_Monitoring/SCT_MonitoringNumbers.h    |  2 +-
 .../share/SCTErrMonAlg_jobOptions.py          |  2 +-
 .../SCT_Monitoring/src/SCTErrMonAlg.cxx       | 25 ++++++-------
 .../SCT_Monitoring/src/SCTErrMonTool.cxx      | 37 +++++++++----------
 .../SCT_Monitoring/src/SCTErrMonTool.h        |  4 +-
 6 files changed, 34 insertions(+), 40 deletions(-)

diff --git a/InnerDetector/InDetExample/InDetRecExample/share/InDetMonitoringSCT.py b/InnerDetector/InDetExample/InDetRecExample/share/InDetMonitoringSCT.py
index 152892dd0226..26ae01f97e4f 100755
--- a/InnerDetector/InDetExample/InDetRecExample/share/InDetMonitoringSCT.py
+++ b/InnerDetector/InDetExample/InDetRecExample/share/InDetMonitoringSCT.py
@@ -116,11 +116,11 @@ InDetSCTMonMan = AthenaMonManager("InDetSCTMonManager",
                                   Run                 = DQMonFlags.monManRun(),
                                   LumiBlock           = DQMonFlags.monManLumiBlock(),
                                   AthenaMonTools      = [ InDetSCTHitsTool,
-                                                          InDetSCTErrMonTool
+                                                          # InDetSCTErrMonTool
                                                         ] )
 
 if useNewAlgs:
-  # include("SCT_Monitoring/SCTErrMonAlg_jobOptions.py")
+  include("SCT_Monitoring/SCTErrMonAlg_jobOptions.py")
   include("SCT_Monitoring/SCTHitEffMonAlg_jobOptions.py")
   include("SCT_Monitoring/SCTLorentzMonAlg_jobOptions.py")
   include("SCT_Monitoring/SCTTracksMonAlg_jobOptions.py")
diff --git a/InnerDetector/InDetMonitoring/SCT_Monitoring/SCT_Monitoring/SCT_MonitoringNumbers.h b/InnerDetector/InDetMonitoring/SCT_Monitoring/SCT_Monitoring/SCT_MonitoringNumbers.h
index d2e6380acec6..d56250f8a31c 100644
--- a/InnerDetector/InDetMonitoring/SCT_Monitoring/SCT_Monitoring/SCT_MonitoringNumbers.h
+++ b/InnerDetector/InDetMonitoring/SCT_Monitoring/SCT_Monitoring/SCT_MonitoringNumbers.h
@@ -52,7 +52,7 @@ namespace SCT_Monitoring{
   enum CategoryErrors {MASKEDLINKALL=0, SUMMARY, BADERR, LINKLEVEL, RODLEVEL, MASKEDCHIP, N_ERRCATEGORY};
 
   enum ProblemForCoverage {
-    all, //All SCT module for counting good module
+    allRegion, //All SCT module for counting good module
     disabled, //Disabled
     badLinkError, //BadLinkLevelError
     badRODError, //BadRODLevelError
diff --git a/InnerDetector/InDetMonitoring/SCT_Monitoring/share/SCTErrMonAlg_jobOptions.py b/InnerDetector/InDetMonitoring/SCT_Monitoring/share/SCTErrMonAlg_jobOptions.py
index 63ae47a11aab..310b32376736 100644
--- a/InnerDetector/InDetMonitoring/SCT_Monitoring/share/SCTErrMonAlg_jobOptions.py
+++ b/InnerDetector/InDetMonitoring/SCT_Monitoring/share/SCTErrMonAlg_jobOptions.py
@@ -77,7 +77,7 @@ coverageTitles = [
     "Ave. Coverage of links Not Affected by PS Trip", # All - PSTrip (DCS)
     "Ave. Coverage of Links With No Bad Problem per LB" # All - Summary
 ]
-for iProblem in range(1, sctMon.ProblemForCoverage.numberOfProblemForCoverage):
+for iProblem in range(1, sctMon.numberOfProblemForCoverage):
     myMonGroup.defineHistogram(varname = "lumiBlock, detectorCoverage"+sctMon.coverageVarNames[iProblem]+";SCT_Coverage"+sctMon.coverageVarNames[iProblem]+"VsLbs",
                                type = "TProfile",
                                title = coverageTitles[iProblem]+";LumiBlock;Detector Coverage [%]",
diff --git a/InnerDetector/InDetMonitoring/SCT_Monitoring/src/SCTErrMonAlg.cxx b/InnerDetector/InDetMonitoring/SCT_Monitoring/src/SCTErrMonAlg.cxx
index 921d54ce0adc..cb8e5de10069 100644
--- a/InnerDetector/InDetMonitoring/SCT_Monitoring/src/SCTErrMonAlg.cxx
+++ b/InnerDetector/InDetMonitoring/SCT_Monitoring/src/SCTErrMonAlg.cxx
@@ -102,7 +102,7 @@ SCTErrMonAlg::fillByteStreamErrors(const EventContext& ctx) const {
   if (m_coverageCheck) {
     ATH_MSG_INFO("Detector Coverage calculation starts" );
 
-    static const std::string names[ProblemForCoverage::numberOfProblemForCoverage] = {
+    static const std::string names[numberOfProblemForCoverage] = {
       "SCT_AllRegion", // All
       "SCT_MapOfDisabledLinks", // Disabled
       "SCT_MapOfLinksWithBadLinkLevelErrors", // BadLinkLevelError
@@ -111,7 +111,7 @@ SCTErrMonAlg::fillByteStreamErrors(const EventContext& ctx) const {
       "SCT_MapOfLinksWithPSTrip", // PSTrip (DCS)
       "SCT_MapOfLinksWithAnyProbelm" // Summary
     };
-    static const std::string titles[ProblemForCoverage::numberOfProblemForCoverage] = {
+    static const std::string titles[numberOfProblemForCoverage] = {
       "Map of All Region", // All
       "Map of Disabled Links", // Disabled
       "Map of Links with bad LinkLevelErrors", // BadLinkLevelError
@@ -122,31 +122,28 @@ SCTErrMonAlg::fillByteStreamErrors(const EventContext& ctx) const {
     };
 
     std::vector<TH2F> mapSCT; // TODO: Check if we need to record these histograms
-    for (int iProblem{0}; iProblem<ProblemForCoverage::numberOfProblemForCoverage; iProblem++) {
+    for (int iProblem{0}; iProblem<numberOfProblemForCoverage; iProblem++) {
       mapSCT.push_back(TH2F(names[iProblem].c_str(), titles[iProblem].c_str(),
                             s_nBinsEta, -s_rangeEta, s_rangeEta, s_nBinsPhi, -M_PI, M_PI));
       mapSCT[iProblem].GetXaxis()->SetTitle("#eta");
       mapSCT[iProblem].GetYaxis()->SetTitle("#phi");
     }
 
-    std::set<IdentifierHash> sctHash[ProblemForCoverage::numberOfProblemForCoverage]{{}};
-    disabledSCT(sctHash[ProblemForCoverage::disabled]);
-    errorSCT(sctHash[ProblemForCoverage::badLinkError],
-             sctHash[ProblemForCoverage::badRODError],
-             sctHash[ProblemForCoverage::badError]);
-    summarySCT(sctHash[ProblemForCoverage::all],
-               sctHash[ProblemForCoverage::summary]);
+    std::set<IdentifierHash> sctHash[numberOfProblemForCoverage]{{}};
+    disabledSCT(sctHash[disabled]);
+    errorSCT(sctHash[badLinkError], sctHash[badRODError], sctHash[badError]);
+    summarySCT(sctHash[allRegion], sctHash[summary]);
     float psTripModules{0.};
-    psTripDCSSCT(sctHash[ProblemForCoverage::psTripDCS], psTripModules);
+    psTripDCSSCT(sctHash[psTripDCS], psTripModules);
 
-    for (int iProblem{0}; iProblem<ProblemForCoverage::numberOfProblemForCoverage; iProblem++) {
+    for (int iProblem{0}; iProblem<numberOfProblemForCoverage; iProblem++) {
       for (const IdentifierHash& hash: sctHash[iProblem]) {
         fillWafer(m_geo[hash], mapSCT[iProblem]);
       }
 
-      if (iProblem==ProblemForCoverage::all) continue;
+      if (iProblem==allRegion) continue;
 
-      double detector_coverage{calculateDetectorCoverage(mapSCT[iProblem], mapSCT[ProblemForCoverage::all])};
+      double detector_coverage{calculateDetectorCoverage(mapSCT[iProblem], mapSCT[allRegion])};
       /// Fill /SCT/DetectorCoverage/SCT_Coverage*VsLbs ///
       auto lumiBlockAcc{Monitored::Scalar<int>("lumiBlock", pEvent->lumiBlock())};
       auto detectorCoverageAcc{Monitored::Scalar<double>("detectorCoverage"+coverageVarNames[iProblem], detector_coverage)};
diff --git a/InnerDetector/InDetMonitoring/SCT_Monitoring/src/SCTErrMonTool.cxx b/InnerDetector/InDetMonitoring/SCT_Monitoring/src/SCTErrMonTool.cxx
index 05c5d4436b4b..3d2950fb3709 100644
--- a/InnerDetector/InDetMonitoring/SCT_Monitoring/src/SCTErrMonTool.cxx
+++ b/InnerDetector/InDetMonitoring/SCT_Monitoring/src/SCTErrMonTool.cxx
@@ -211,7 +211,7 @@ SCTErrMonTool::bookHistograms() {
 //          SCTErrMonTool :: bookHistogramsRecurrent, Keisuke Koda 12.09.2016
 //====================================================================================================
 StatusCode SCTErrMonTool::bookHistogramsRecurrent() {
-  static const string profNames[ProblemForCoverage::numberOfProblemForCoverage] = {
+  static const string profNames[numberOfProblemForCoverage] = {
     "", // All
     "SCT_CoverageOfEnabledLinksVsLbs", // All - Disabled
     "SCT_CoverageWithNoBadLinkLevelErrorVsLbs", // All - BadLinkLevelError
@@ -220,7 +220,7 @@ StatusCode SCTErrMonTool::bookHistogramsRecurrent() {
     "SCT_CoverageWithNoPSTripVsLbs", // All - PSTrip(DCS)
     "SCT_CoverageOfLinksWithNoBadProblemVsLbs" // All - Summary
   };
-  static const string profTitles[ProblemForCoverage::numberOfProblemForCoverage] = {
+  static const string profTitles[numberOfProblemForCoverage] = {
     "", // All
     "Ave. Coverage of Enabled Links per LB", // All - Disabled
     "Ave. Coverage of Links with No Bad LinkLevelError per LB", // All - BadLinkLevelError
@@ -239,8 +239,8 @@ StatusCode SCTErrMonTool::bookHistogramsRecurrent() {
     MonGroup monGr_shift{this, "SCT/DetectorCoverage", ManagedMonitorToolBase::run, ATTRIB_UNMANAGED};
 
     //All SCT module for counting good module
-    m_mapSCT[ProblemForCoverage::all] = new TH2F( "SCT_AllRegion", "Map of All Region",
-                                                  s_nBinsEta, -s_rangeEta, s_rangeEta, s_nBinsPhi, -M_PI, M_PI );
+    m_mapSCT[allRegion] = new TH2F( "SCT_AllRegion", "Map of All Region",
+                              s_nBinsEta, -s_rangeEta, s_rangeEta, s_nBinsPhi, -M_PI, M_PI );
     //Disabled
     m_mapSCT[disabled] = new TH2F( "SCT_MapOfDisabledLinks", "Map of Disabled Links",
                                    s_nBinsEta, -s_rangeEta, s_rangeEta, s_nBinsPhi, -M_PI, M_PI );
@@ -261,15 +261,15 @@ StatusCode SCTErrMonTool::bookHistogramsRecurrent() {
                                   s_nBinsEta, -s_rangeEta, s_rangeEta, s_nBinsPhi, -M_PI, M_PI );
     
     //Detector Coverage vs LumiBlock
-    for (int iProblem{0}; iProblem<ProblemForCoverage::numberOfProblemForCoverage ; iProblem++) {
+    for (int iProblem{0}; iProblem<numberOfProblemForCoverage ; iProblem++) {
       m_mapSCT[iProblem]->GetXaxis()->SetTitle("#eta");
       m_mapSCT[iProblem]->GetYaxis()->SetTitle("#phi");
       status &= monGr_shift.regHist( m_mapSCT[iProblem] ).isSuccess();
       m_mapSCT[iProblem]->SetStats(0);
     }
 
-    for (int iProblem{0}; iProblem<ProblemForCoverage::numberOfProblemForCoverage; iProblem++) {
-      if (iProblem==ProblemForCoverage::all) continue;
+    for (int iProblem{0}; iProblem<numberOfProblemForCoverage; iProblem++) {
+      if (iProblem==allRegion) continue;
 
       m_detectorCoverageVsLbs[iProblem] = new TProfile(profNames[iProblem].c_str(), profTitles[iProblem].c_str(), NBINS_LBs,0.5,NBINS_LBs+0.5);
       m_detectorCoverageVsLbs[iProblem]->GetXaxis()->SetTitle("LumiBlock");
@@ -585,30 +585,27 @@ SCTErrMonTool::fillByteStreamErrors() {
   if ( m_CoverageCheck ) {
     ATH_MSG_INFO("Detector Coverage calculation starts" );
 
-    for (int iProblem{0}; iProblem<ProblemForCoverage::numberOfProblemForCoverage; iProblem++) {
+    for (int iProblem{0}; iProblem<numberOfProblemForCoverage; iProblem++) {
       m_mapSCT[iProblem]->Reset("ICE");
     }
 
-    std::set<IdentifierHash> sctHash[ProblemForCoverage::numberOfProblemForCoverage]{{}};
-    syncDisabledSCT(sctHash[ProblemForCoverage::disabled]);
-    syncErrorSCT(sctHash[ProblemForCoverage::badLinkError],
-                 sctHash[ProblemForCoverage::badRODError],
-                 sctHash[ProblemForCoverage::badError]);
-    summarySCT(sctHash[ProblemForCoverage::all],
-               sctHash[ProblemForCoverage::summary]);
+    std::set<IdentifierHash> sctHash[numberOfProblemForCoverage]{{}};
+    syncDisabledSCT(sctHash[disabled]);
+    syncErrorSCT(sctHash[badLinkError], sctHash[badRODError], sctHash[badError]);
+    summarySCT(sctHash[allRegion], sctHash[summary]);
     float PSTripModules{0.};
-    psTripDCSSCT(sctHash[ProblemForCoverage::psTripDCS],
+    psTripDCSSCT(sctHash[psTripDCS],
                  PSTripModules);
     
-    for (int iProblem{0}; iProblem<ProblemForCoverage::numberOfProblemForCoverage; iProblem++) {
+    for (int iProblem{0}; iProblem<numberOfProblemForCoverage; iProblem++) {
       for (const IdentifierHash& hash: sctHash[iProblem]) {
         fillWafer(m_geo[hash], m_mapSCT[iProblem]);
       }
     }
     
     //detector coverage
-    for (int iProblem{0}; iProblem<ProblemForCoverage::numberOfProblemForCoverage; iProblem++) {
-      if (iProblem==all) continue;
+    for (int iProblem{0}; iProblem<numberOfProblemForCoverage; iProblem++) {
+      if (iProblem==allRegion) continue;
 
       double detector_coverage{calculateDetectorCoverage(m_mapSCT[iProblem])};
       m_detectorCoverageVsLbs[iProblem]->Fill(static_cast<double>(current_lb), detector_coverage);
@@ -1470,7 +1467,7 @@ double SCTErrMonTool::calculateDetectorCoverage( const TH2F* histo ) const {
 
   for (unsigned int i{0}; i < s_nBinsEta; i++) {
     for (unsigned int j{0}; j < s_nBinsPhi; j++) {
-      double waferCell{m_mapSCT[ProblemForCoverage::all]->GetBinContent(i+1, j+1) - histo->GetBinContent(i+1, j+1)};
+      double waferCell{m_mapSCT[allRegion]->GetBinContent(i+1, j+1) - histo->GetBinContent(i+1, j+1)};
 
       if (waferCell >= s_WafersThreshold) {
         occupancy += 1.0;
diff --git a/InnerDetector/InDetMonitoring/SCT_Monitoring/src/SCTErrMonTool.h b/InnerDetector/InDetMonitoring/SCT_Monitoring/src/SCTErrMonTool.h
index 42e0f572f383..7bcf7087a1aa 100644
--- a/InnerDetector/InDetMonitoring/SCT_Monitoring/src/SCTErrMonTool.h
+++ b/InnerDetector/InDetMonitoring/SCT_Monitoring/src/SCTErrMonTool.h
@@ -150,7 +150,7 @@ class SCTErrMonTool : public ManagedMonitorToolBase {
   // Default histos to print per lumi block
   TH2F_LW* m_numErrorsPerLumi[SCT_Monitoring::N_REGIONS_INC_GENERAL]{}; // Filled in fillByteStreamErrorsHelper. Used to fill m_rateErrorsPerLumi
   /// Detector coverage
-  TH2F* m_mapSCT[SCT_Monitoring::ProblemForCoverage::numberOfProblemForCoverage]{nullptr}; // Filled in fillByteStreamErrors
+  TH2F* m_mapSCT[SCT_Monitoring::numberOfProblemForCoverage]{nullptr}; // Filled in fillByteStreamErrors
   TProfile* m_PSTripModulesVsLbs{}; // Filled in fillByteStreamErrors
 
   /// Profiles requiring postprocessing
@@ -167,7 +167,7 @@ class SCTErrMonTool : public ManagedMonitorToolBase {
   TProfile2D_LW* m_summaryErrsRecent[SCT_Monitoring::N_REGIONS][SCT_Monitoring::N_ENDCAPSx2]{}; // Recent error rate histograms. Filled in fillByteStreamErrors using m_pallErrsCate
   TProfile* m_ConfEffOnline{}; // Filled in fillByteStreamErrors using efficiency plots
   /// Detector coverage
-  TProfile* m_detectorCoverageVsLbs[SCT_Monitoring::ProblemForCoverage::numberOfProblemForCoverage]{nullptr}; // Filled in fillByteStreamErrors using m_mapSCT
+  TProfile* m_detectorCoverageVsLbs[SCT_Monitoring::numberOfProblemForCoverage]{nullptr}; // Filled in fillByteStreamErrors using m_mapSCT
 
   /// Used in bookHistograms()
   StatusCode bookConfMapsGen();
-- 
GitLab


From a320ac9642b534c3e9022353866c41e95661ce38 Mon Sep 17 00:00:00 2001
From: Susumu Oda <susumu.oda@cern.ch>
Date: Thu, 26 Mar 2020 04:07:41 +0100
Subject: [PATCH 03/10] Revert to InDetSCTErrMonTool

---
 .../InDetExample/InDetRecExample/share/InDetMonitoringSCT.py  | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/InnerDetector/InDetExample/InDetRecExample/share/InDetMonitoringSCT.py b/InnerDetector/InDetExample/InDetRecExample/share/InDetMonitoringSCT.py
index 26ae01f97e4f..152892dd0226 100755
--- a/InnerDetector/InDetExample/InDetRecExample/share/InDetMonitoringSCT.py
+++ b/InnerDetector/InDetExample/InDetRecExample/share/InDetMonitoringSCT.py
@@ -116,11 +116,11 @@ InDetSCTMonMan = AthenaMonManager("InDetSCTMonManager",
                                   Run                 = DQMonFlags.monManRun(),
                                   LumiBlock           = DQMonFlags.monManLumiBlock(),
                                   AthenaMonTools      = [ InDetSCTHitsTool,
-                                                          # InDetSCTErrMonTool
+                                                          InDetSCTErrMonTool
                                                         ] )
 
 if useNewAlgs:
-  include("SCT_Monitoring/SCTErrMonAlg_jobOptions.py")
+  # include("SCT_Monitoring/SCTErrMonAlg_jobOptions.py")
   include("SCT_Monitoring/SCTHitEffMonAlg_jobOptions.py")
   include("SCT_Monitoring/SCTLorentzMonAlg_jobOptions.py")
   include("SCT_Monitoring/SCTTracksMonAlg_jobOptions.py")
-- 
GitLab


From bc4dde0542004bde0460cdd354545b1d9d9d8eef Mon Sep 17 00:00:00 2001
From: Susumu Oda <susumu.oda@cern.ch>
Date: Thu, 26 Mar 2020 04:28:04 +0100
Subject: [PATCH 04/10] Use N_REGIONS_INC_GENERAL instead of N_REGIONS+1 in
 SCTHitEffMonTool/Alg. Reduce the size of an array in SCTErrMonTool

---
 .../InDetMonitoring/SCT_Monitoring/src/SCTErrMonTool.h |  2 +-
 .../SCT_Monitoring/src/SCTHitEffMonAlg.cxx             |  2 +-
 .../SCT_Monitoring/src/SCTHitEffMonTool.cxx            | 10 +++++-----
 3 files changed, 7 insertions(+), 7 deletions(-)

diff --git a/InnerDetector/InDetMonitoring/SCT_Monitoring/src/SCTErrMonTool.h b/InnerDetector/InDetMonitoring/SCT_Monitoring/src/SCTErrMonTool.h
index 7bcf7087a1aa..926a7565aa07 100644
--- a/InnerDetector/InDetMonitoring/SCT_Monitoring/src/SCTErrMonTool.h
+++ b/InnerDetector/InDetMonitoring/SCT_Monitoring/src/SCTErrMonTool.h
@@ -159,7 +159,7 @@ class SCTErrMonTool : public ManagedMonitorToolBase {
   TProfile_LW* m_LinksWithCategorisedErrorsVsLB[SCT_Monitoring::CategoryErrors::N_ERRCATEGORY]{}; // Fillded in fillByteStreamErrors using m_pallErrsCate
   /// Under LB directories
   TProfile2D_LW* m_allErrsCate[SCT_ByteStreamErrors::NUM_ERROR_TYPES][SCT_Monitoring::N_REGIONS][SCT_Monitoring::N_ENDCAPSx2]{}; // Rate of errors. Filled in fillByteStreamErrors. Used to fill necessary m_ConfNew
-  TProfile2D_LW* m_rateErrorsPerLumi[SCT_Monitoring::N_REGIONS_INC_GENERAL]{}; // Filled in checkRateHists using m_numErrorsPerLumi
+  TProfile2D_LW* m_rateErrorsPerLumi[SCT_Monitoring::N_REGIONS]{}; // Filled in checkRateHists using m_numErrorsPerLumi
   /// Only online
   TProfile_LW* m_ConfOnline[SCT_Monitoring::N_REGIONS_INC_GENERAL]{}; // Filled in fillCondDBMaps using m_MaskedAllLinks and m_allErrsCate
   TProfile_LW* m_ConfNoiseOnline{}; // Filled in fillCondDBMaps using noise plots
diff --git a/InnerDetector/InDetMonitoring/SCT_Monitoring/src/SCTHitEffMonAlg.cxx b/InnerDetector/InDetMonitoring/SCT_Monitoring/src/SCTHitEffMonAlg.cxx
index 38cd82ca1462..029c5f812645 100644
--- a/InnerDetector/InDetMonitoring/SCT_Monitoring/src/SCTHitEffMonAlg.cxx
+++ b/InnerDetector/InDetMonitoring/SCT_Monitoring/src/SCTHitEffMonAlg.cxx
@@ -47,7 +47,7 @@ using namespace std;
 namespace {// anonymous namespace for functions at file scope
   static const bool testOffline{false};
 
-  static const string histogramPath[N_REGIONS+1] = {
+  static const string histogramPath[N_REGIONS_INC_GENERAL] = {
     "SCT/SCTEC/eff", "SCT/SCTB/eff", "SCT/SCTEA/eff", "SCT/GENERAL/eff"
   };
   static const string histogramPathRe[N_REGIONS] = {
diff --git a/InnerDetector/InDetMonitoring/SCT_Monitoring/src/SCTHitEffMonTool.cxx b/InnerDetector/InDetMonitoring/SCT_Monitoring/src/SCTHitEffMonTool.cxx
index 764d08098d5a..4db453b4bed7 100644
--- a/InnerDetector/InDetMonitoring/SCT_Monitoring/src/SCTHitEffMonTool.cxx
+++ b/InnerDetector/InDetMonitoring/SCT_Monitoring/src/SCTHitEffMonTool.cxx
@@ -54,7 +54,7 @@ using std::string;
 namespace {// anonymous namespace for functions at file scope
   static const bool testOffline(false);
 
-  static const string histogramPath[N_REGIONS+1] = {
+  static const string histogramPath[N_REGIONS_INC_GENERAL] = {
     "SCT/SCTEC/eff", "SCT/SCTB/eff", "SCT/SCTEA/eff", "SCT/GENERAL/eff"
   };
   static const string histogramPathRe[N_REGIONS] = {
@@ -191,7 +191,7 @@ SCTHitEffMonTool::bookHistograms() {
       ATH_MSG_VERBOSE("Module " << m_sctId->wafer_hash(chip.first) << ", chip " << chip.second);
     }
 
-    std::array < MonGroup, N_REGIONS + 1 > histGroupE = {
+    std::array < MonGroup, N_REGIONS_INC_GENERAL > histGroupE = {
       MonGroup{this, m_path + histogramPath[ENDCAP_C_INDEX], run, ATTRIB_UNMANAGED},
       MonGroup{this, m_path + histogramPath[BARREL_INDEX], run, ATTRIB_UNMANAGED},
       MonGroup{this, m_path + histogramPath[ENDCAP_A_INDEX], run, ATTRIB_UNMANAGED},
@@ -204,7 +204,7 @@ SCTHitEffMonTool::bookHistograms() {
       MonGroup{this, m_path + histogramPathRe[ENDCAP_A_INDEX], run, ATTRIB_UNMANAGED}
     };
 
-    std::array < MonGroup, N_REGIONS + 1 > histGroupShift = {
+    std::array < MonGroup, N_REGIONS_INC_GENERAL > histGroupShift = {
       MonGroup{this, m_path + histogramPath[ENDCAP_C_INDEX], run, ATTRIB_UNMANAGED},
       MonGroup{this, m_path + histogramPath[BARREL_INDEX], run, ATTRIB_UNMANAGED},
       MonGroup{this, m_path + histogramPath[ENDCAP_A_INDEX], run, ATTRIB_UNMANAGED},
@@ -323,7 +323,7 @@ SCTHitEffMonTool::bookHistogramsRecurrent() {
       ATH_MSG_VERBOSE("Module " << m_sctId->wafer_hash(chip.first) << ", chip " << chip.second);
     }
 
-    std::array < MonGroup, N_REGIONS + 1 > histGroupE = {
+    std::array < MonGroup, N_REGIONS_INC_GENERAL > histGroupE = {
       MonGroup{this, m_path + histogramPath[ENDCAP_C_INDEX], run, ATTRIB_UNMANAGED},
       MonGroup{this, m_path + histogramPath[BARREL_INDEX], run, ATTRIB_UNMANAGED},
       MonGroup{this, m_path + histogramPath[ENDCAP_A_INDEX], run, ATTRIB_UNMANAGED},
@@ -336,7 +336,7 @@ SCTHitEffMonTool::bookHistogramsRecurrent() {
       MonGroup{this, m_path + histogramPathRe[ENDCAP_A_INDEX], run, ATTRIB_UNMANAGED}
     };
 
-    std::array < MonGroup, N_REGIONS + 1 > histGroupShift = {
+    std::array < MonGroup, N_REGIONS_INC_GENERAL > histGroupShift = {
       MonGroup{this, m_path + histogramPath[ENDCAP_C_INDEX], run, ATTRIB_UNMANAGED},
       MonGroup{this, m_path + histogramPath[BARREL_INDEX], run, ATTRIB_UNMANAGED},
       MonGroup{this, m_path + histogramPath[ENDCAP_A_INDEX], run, ATTRIB_UNMANAGED},
-- 
GitLab


From 29259c51f75beffdfc74d972feac0dfba497dbc7 Mon Sep 17 00:00:00 2001
From: Susumu Oda <susumu.oda@cern.ch>
Date: Thu, 26 Mar 2020 06:25:00 +0100
Subject: [PATCH 05/10] Fix a bug of bin size

---
 .../SCT_Monitoring/share/SCTHitEffMonAlg_jobOptions.py        | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/InnerDetector/InDetMonitoring/SCT_Monitoring/share/SCTHitEffMonAlg_jobOptions.py b/InnerDetector/InDetMonitoring/SCT_Monitoring/share/SCTHitEffMonAlg_jobOptions.py
index 807313e65614..f5b5a121afe0 100644
--- a/InnerDetector/InDetMonitoring/SCT_Monitoring/share/SCTHitEffMonAlg_jobOptions.py
+++ b/InnerDetector/InDetMonitoring/SCT_Monitoring/share/SCTHitEffMonAlg_jobOptions.py
@@ -83,7 +83,7 @@ myMonGroup[sctMon.GENERAL_INDEX].defineHistogram(varname= "isub, eff;" + "SctTot
                                                  xbins=sctMon.N_REGIONS,
                                                  xmin=0.,
                                                  xmax=sctMon.N_REGIONS,
-                                                 xlabels=subDetName)
+                                                 xlabels=subDetName[0:sctMon.N_REGIONS])
 
 myMonGroup[sctMon.GENERAL_INDEX].defineHistogram(varname= "isub, eff;" + "SctTotalEffBCID",
                                                  type= "TProfile",
@@ -92,7 +92,7 @@ myMonGroup[sctMon.GENERAL_INDEX].defineHistogram(varname= "isub, eff;" + "SctTot
                                                  xbins=sctMon.N_REGIONS,
                                                  xmin=0.,
                                                  xmax=sctMon.N_REGIONS,
-                                                 xlabels=subDetName,
+                                                 xlabels=subDetName[0:sctMon.N_REGIONS],
                                                  cutmask="isFirstBCID")
 
 myMonGroup[sctMon.GENERAL_INDEX].defineHistogram(varname= "sideHash, eff;" + "effHashCode",
-- 
GitLab


From 57bc3d85b3df56bdf81c00a6a61400f9b7204377 Mon Sep 17 00:00:00 2001
From: Susumu Oda <susumu.oda@cern.ch>
Date: Thu, 26 Mar 2020 09:19:46 +0100
Subject: [PATCH 06/10] Add four profiles/histograms to SCTErrMonAlg. Move
 N_REGIONS and N_REGIONS_INC_GENERAL enums to BecIndex

---
 .../SCT_Monitoring/SCT_MonitoringNumbers.h    |   4 +-
 .../share/SCTErrMonAlg_jobOptions.py          |  29 +++++
 .../SCT_Monitoring/src/SCTErrMonAlg.cxx       | 109 +++++++++++++++++-
 .../SCT_Monitoring/src/SCTErrMonAlg.h         |   6 +
 .../SCT_Monitoring/src/SCTErrMonTool.cxx      |   6 +-
 5 files changed, 143 insertions(+), 11 deletions(-)

diff --git a/InnerDetector/InDetMonitoring/SCT_Monitoring/SCT_Monitoring/SCT_MonitoringNumbers.h b/InnerDetector/InDetMonitoring/SCT_Monitoring/SCT_Monitoring/SCT_MonitoringNumbers.h
index d56250f8a31c..9c25c4e7f6d6 100644
--- a/InnerDetector/InDetMonitoring/SCT_Monitoring/SCT_Monitoring/SCT_MonitoringNumbers.h
+++ b/InnerDetector/InDetMonitoring/SCT_Monitoring/SCT_Monitoring/SCT_MonitoringNumbers.h
@@ -16,9 +16,9 @@
  
 namespace SCT_Monitoring{
   ///what array indices mean when looping over subsystems
-  enum BecIndex {INVALID_INDEX=-1, ENDCAP_C_INDEX=0, BARREL_INDEX=1, ENDCAP_A_INDEX=2, GENERAL_INDEX=3};
+  enum BecIndex {INVALID_INDEX=-1, ENDCAP_C_INDEX=0, BARREL_INDEX=1, ENDCAP_A_INDEX=2, GENERAL_INDEX=3, N_REGIONS=3, N_REGIONS_INC_GENERAL=4};
   ///Possible values of the 'BEC' (Barrel or EndCap) value
-  enum Bec{ ENDCAP_C=-2, BARREL=0, ENDCAP_A=2, N_REGIONS=3, GENERAL=3, INVALID_SYSTEM=4, N_REGIONS_INC_GENERAL=N_REGIONS+1};
+  enum Bec{ ENDCAP_C=-2, BARREL=0, ENDCAP_A=2, GENERAL=3, INVALID_SYSTEM=4};
   ///Array for conversion of an array index to a Bec
   static const std::vector<Bec> index2BecArray={ENDCAP_C, BARREL, ENDCAP_A, GENERAL};
   ///Conversion  bec->index
diff --git a/InnerDetector/InDetMonitoring/SCT_Monitoring/share/SCTErrMonAlg_jobOptions.py b/InnerDetector/InDetMonitoring/SCT_Monitoring/share/SCTErrMonAlg_jobOptions.py
index 310b32376736..a05d393085dc 100644
--- a/InnerDetector/InDetMonitoring/SCT_Monitoring/share/SCTErrMonAlg_jobOptions.py
+++ b/InnerDetector/InDetMonitoring/SCT_Monitoring/share/SCTErrMonAlg_jobOptions.py
@@ -35,6 +35,35 @@ myMonGroup = helper.addGroup(myMonAlg, "SCTErrMonitor", "SCT/")
 
 from ROOT import SCT_Monitoring as sctMon
 
+# Filled in fillHistograms
+myMonGroup.defineHistogram(varname = "lumiBlock;NumberOfEventsVsLB",
+                           cutmask = "is1D",
+                           type = "TH1F",
+                           title = "Num of events per LB ;LumiBlock",
+                           path = "GENERAL/Conf",
+                           xbins = sctMon.NBINS_LBs,
+                           xmin = 0.5,
+                           xmax = sctMon.NBINS_LBs+0.5)
+
+# Filled in fillHistograms
+myMonGroup.defineHistogram(varname = "lumiBlock;NumberOfSCTFlagErrorsVsLB",
+                           cutmask = "sctFlag",
+                           type = "TH1F",
+                           title = "Num of SCT Flag errors per LB ;LumiBlock",
+                           path = "GENERAL/Conf",
+                           xbins = sctMon.NBINS_LBs,
+                           xmin = 0.5,
+                           xmax = sctMon.NBINS_LBs+0.5)
+
+# Filled in fillHistograms
+myMonGroup.defineHistogram(varname = "lumiBlock, sctFlag;FractionOfSCTFlagErrorsPerLB",
+                           type = "TProfile",
+                           title = "Frac of SCT Flag errors per LB ;LumiBlock",
+                           path = "GENERAL/Conf",
+                           xbins = sctMon.NBINS_LBs,
+                           xmin = 0.5,
+                           xmax = sctMon.NBINS_LBs+0.5)
+
 # Filled in fillHistograms
 myMonGroup.defineHistogram(varname = "moduleOutBin, moduleOut;SCTConfOutM",
                            type = "TProfile",
diff --git a/InnerDetector/InDetMonitoring/SCT_Monitoring/src/SCTErrMonAlg.cxx b/InnerDetector/InDetMonitoring/SCT_Monitoring/src/SCTErrMonAlg.cxx
index cb8e5de10069..2e8274f6abf9 100644
--- a/InnerDetector/InDetMonitoring/SCT_Monitoring/src/SCTErrMonAlg.cxx
+++ b/InnerDetector/InDetMonitoring/SCT_Monitoring/src/SCTErrMonAlg.cxx
@@ -46,6 +46,36 @@ StatusCode SCTErrMonAlg::initialize() {
 }
 
 StatusCode SCTErrMonAlg::fillHistograms(const EventContext& ctx) const {
+  SG::ReadHandle<xAOD::EventInfo> pEvent{m_EventInfoKey, ctx};
+  if (not pEvent.isValid()) {
+    ATH_MSG_WARNING("Could not retrieve event info!");
+    return StatusCode::SUCCESS;
+  }
+
+  bool sctFlag{false};
+  if (pEvent->errorState(xAOD::EventInfo::SCT) == xAOD::EventInfo::Error) {
+    sctFlag = true;
+  }
+  /// Fill NumberOfSCTFlagErrorsVsLB, NumberOfEventsVsLB and FractionOfSCTFlagErrorsPerLB
+  /// under /SCT/GENERAL/Conf/ ///
+  auto lumiBlockAcc{Monitored::Scalar<int>("lumiBlock", pEvent->lumiBlock())};
+  auto is1DAcc{Monitored::Scalar<bool>("is1D", true)};
+  auto sctFlagAcc{Monitored::Scalar<bool>("sctFlag", sctFlag)};
+  fill("SCTErrMonitor", lumiBlockAcc, is1DAcc, sctFlagAcc);
+
+  if (sctFlag) {
+    return StatusCode::SUCCESS;
+  }
+
+  // The numbers of disabled modules, links, strips do not change during a run.
+  if (m_isFirstConfigurationDetails) {
+    std::lock_guard{m_mutex};
+    if (m_isFirstConfigurationDetails) {
+      ATH_CHECK(fillConfigurationDetails(ctx));
+      m_isFirstConfigurationDetails = false;
+    }
+  }
+
   ATH_CHECK(fillByteStreamErrors(ctx));
 
   /// Fill /SCT/GENERAL/Conf/SCTConfOutM ///
@@ -70,16 +100,83 @@ StatusCode SCTErrMonAlg::fillHistograms(const EventContext& ctx) const {
   return StatusCode::SUCCESS;
 }
 
+StatusCode
+SCTErrMonAlg::fillConfigurationDetails(const EventContext& ctx) const {
+  ATH_MSG_DEBUG("Inside fillConfigurationDetails()");
+  unsigned int nBadMods{static_cast<unsigned int>(m_configurationTool->badModules()->size())}; // bad modules
+  const map<IdentifierHash, pair<bool, bool>>* badLinks{m_configurationTool->badLinks(ctx)}; // bad links
+  unsigned int nBadLink0{0}, nBadLink1{0}, nBadLinkBoth{0};
+  for (const pair<IdentifierHash, pair<bool, bool>>& link: *badLinks) {
+    pair<bool, bool> status{link.second};
+    if ((status.first == false) and (status.second == true)) {
+      ++nBadLink0;
+    }
+    if ((status.first == true) and (status.second == false)) {
+      ++nBadLink1;
+    }
+    if ((status.first == false) and (status.second == false)) {
+      ++nBadLinkBoth;
+    }
+  }
+
+  const map<Identifier, unsigned int>* badChips{m_configurationTool->badChips(ctx)}; // bad chips
+  unsigned int nBadChips{0};
+  for (const pair<Identifier, unsigned int>& chip : *badChips) {
+    unsigned int status{chip.second};
+    for (unsigned int i{0}; i < CHIPS_PER_MODULE; i++) {
+      nBadChips += ((status & (1 << i)) == 0 ? 0 : 1);
+    }
+  }
+
+  set<Identifier> badStripsAll; // bad strips
+  m_configurationTool->badStrips(badStripsAll, ctx);
+  unsigned int nBadStrips{static_cast<unsigned int>(badStripsAll.size())};
+
+  set<Identifier> badStripsExclusive; // bad strips w/o bad modules and chips
+  m_configurationTool->badStrips(badStripsExclusive, ctx, true, true);
+  int nBadStripsExclusive{static_cast<int>(badStripsExclusive.size())};
+  int nBadStripsExclusiveBEC[N_REGIONS] = {
+    0, 0, 0
+  };
+  for (const Identifier& strip: badStripsExclusive) {
+    int bec{m_pSCTHelper->barrel_ec(strip)};
+    nBadStripsExclusiveBEC[bec2Index(bec)] += 1;
+  }
+
+  auto detailedConfBinAcc{Monitored::Scalar<int>("detailedConfBin")};
+  auto nBadAcc{Monitored::Scalar<double>("nBad")};
+  for (unsigned int i{0}; i<ConfbinsDetailed; i++) {
+    detailedConfBinAcc = 0;
+    if (i==0) nBadAcc = nBadMods;
+    else if (i==1) nBadAcc = nBadLink0;
+    else if (i==2) nBadAcc = nBadLink1;
+    else if (i==3) nBadAcc = nBadChips;
+    else if (i==4) nBadAcc = static_cast<double>(nBadStripsExclusive) / 100.;
+    fill("SCTErrMonitor", detailedConfBinAcc, nBadAcc);
+  }
+
+  ATH_MSG_DEBUG("-----------------------------------------------------------------------");
+  ATH_MSG_DEBUG("Number of bad modules                          = " << nBadMods);
+  ATH_MSG_DEBUG("Number of bad link 0                           = " << nBadLink0);
+  ATH_MSG_DEBUG("Number of bad link 1                           = " << nBadLink1);
+  ATH_MSG_DEBUG("Number of bad link both                        = " << nBadLinkBoth);
+  ATH_MSG_DEBUG("Number of bad chips                            = " << nBadChips);
+  ATH_MSG_DEBUG("Number of bad strips                           = " << nBadStrips);
+  ATH_MSG_DEBUG("Number of bad strips exclusive                 = " << nBadStripsExclusive);
+  ATH_MSG_DEBUG("Number of bad strips exclusive (ECC, B, ECA)   = "
+                << nBadStripsExclusiveBEC[ENDCAP_C_INDEX] << ", "
+                << nBadStripsExclusiveBEC[BARREL_INDEX] << ", "
+                << nBadStripsExclusiveBEC[ENDCAP_A_INDEX] << ", ");
+  ATH_MSG_DEBUG("-----------------------------------------------------------------------");
+
+  return StatusCode::SUCCESS;
+}
+
 StatusCode
 SCTErrMonAlg::fillByteStreamErrors(const EventContext& ctx) const {
-  //--- Get event information
   SG::ReadHandle<xAOD::EventInfo> pEvent{m_EventInfoKey, ctx};
   if (not pEvent.isValid()) {
-    ATH_MSG_ERROR("Could not retrieve event info!");
-    return StatusCode::RECOVERABLE;
-  }
-
-  if (pEvent->errorState(xAOD::EventInfo::SCT) == xAOD::EventInfo::Error) {
+    ATH_MSG_WARNING("Could not retrieve event info!");
     return StatusCode::SUCCESS;
   }
 
diff --git a/InnerDetector/InDetMonitoring/SCT_Monitoring/src/SCTErrMonAlg.h b/InnerDetector/InDetMonitoring/SCT_Monitoring/src/SCTErrMonAlg.h
index c0356b1287e5..86cf7ae96f3b 100644
--- a/InnerDetector/InDetMonitoring/SCT_Monitoring/src/SCTErrMonAlg.h
+++ b/InnerDetector/InDetMonitoring/SCT_Monitoring/src/SCTErrMonAlg.h
@@ -16,6 +16,8 @@
 #include "SCT_ConditionsTools/ISCT_ConfigurationConditionsTool.h"
 #include "SCT_ConditionsTools/ISCT_DCSConditionsTool.h"
 
+#include <atomic>
+#include <mutex>
 #include <utility>
 #include <vector>
 
@@ -40,6 +42,9 @@ class SCTErrMonAlg : public AthMonitorAlgorithm {
 
   std::vector<moduleGeo_t> m_geo{};
 
+  mutable std::atomic_bool m_isFirstConfigurationDetails{false};
+  mutable std::mutex m_mutex{};
+
   BooleanProperty m_makeConfHisto{this, "MakeConfHisto", true};
   BooleanProperty m_coverageCheck{this, "CoverageCheck", true};
   BooleanProperty m_useDCS{this, "UseDCS", true};
@@ -53,6 +58,7 @@ class SCTErrMonAlg : public AthMonitorAlgorithm {
   const SCT_ID* m_pSCTHelper{nullptr};
 
   /// Used in fillHistograms()
+  StatusCode fillConfigurationDetails(const EventContext& ctx) const;
   StatusCode fillByteStreamErrors(const EventContext& ctx) const;
   /// Used in fillByteStreamErrors()
   int fillByteStreamErrorsHelper(const std::set<IdentifierHash>& errors,
diff --git a/InnerDetector/InDetMonitoring/SCT_Monitoring/src/SCTErrMonTool.cxx b/InnerDetector/InDetMonitoring/SCT_Monitoring/src/SCTErrMonTool.cxx
index 3d2950fb3709..7f5dc970447b 100644
--- a/InnerDetector/InDetMonitoring/SCT_Monitoring/src/SCTErrMonTool.cxx
+++ b/InnerDetector/InDetMonitoring/SCT_Monitoring/src/SCTErrMonTool.cxx
@@ -1186,9 +1186,9 @@ SCTErrMonTool::fillConfigurationDetails() {
   ATH_MSG_DEBUG("Number of bad strips                           = " << nBadStrips);
   ATH_MSG_DEBUG("Number of bad strips exclusive                 = " << nBadStripsExclusive);
   ATH_MSG_DEBUG("Number of bad strips exclusive (ECC, B, ECA)   = "
-                << nBadStripsExclusiveBEC[0] << ", "
-                << nBadStripsExclusiveBEC[1] << ", "
-                << nBadStripsExclusiveBEC[2] << ", ");
+                << nBadStripsExclusiveBEC[ENDCAP_C_INDEX] << ", "
+                << nBadStripsExclusiveBEC[BARREL_INDEX] << ", "
+                << nBadStripsExclusiveBEC[ENDCAP_A_INDEX] << ", ");
   ATH_MSG_DEBUG("-----------------------------------------------------------------------");
 
   return StatusCode::SUCCESS;
-- 
GitLab


From ef0ff89be0989b7d7bc7575b1a45f416bf607575 Mon Sep 17 00:00:00 2001
From: Susumu Oda <susumu.oda@cern.ch>
Date: Thu, 26 Mar 2020 10:22:57 +0100
Subject: [PATCH 07/10] Implement more profiles

---
 .../share/InDetMonitoringSCT.py               |  4 +--
 .../SCT_Monitoring/SCT_MonitoringNumbers.h    |  1 +
 .../share/SCTErrMonAlg_jobOptions.py          | 26 +++++++++++++++++++
 .../SCT_Monitoring/src/SCTErrMonAlg.cxx       | 21 ++++++++++++---
 .../SCT_Monitoring/src/SCTErrMonAlg.h         |  3 ++-
 5 files changed, 49 insertions(+), 6 deletions(-)

diff --git a/InnerDetector/InDetExample/InDetRecExample/share/InDetMonitoringSCT.py b/InnerDetector/InDetExample/InDetRecExample/share/InDetMonitoringSCT.py
index 152892dd0226..26ae01f97e4f 100755
--- a/InnerDetector/InDetExample/InDetRecExample/share/InDetMonitoringSCT.py
+++ b/InnerDetector/InDetExample/InDetRecExample/share/InDetMonitoringSCT.py
@@ -116,11 +116,11 @@ InDetSCTMonMan = AthenaMonManager("InDetSCTMonManager",
                                   Run                 = DQMonFlags.monManRun(),
                                   LumiBlock           = DQMonFlags.monManLumiBlock(),
                                   AthenaMonTools      = [ InDetSCTHitsTool,
-                                                          InDetSCTErrMonTool
+                                                          # InDetSCTErrMonTool
                                                         ] )
 
 if useNewAlgs:
-  # include("SCT_Monitoring/SCTErrMonAlg_jobOptions.py")
+  include("SCT_Monitoring/SCTErrMonAlg_jobOptions.py")
   include("SCT_Monitoring/SCTHitEffMonAlg_jobOptions.py")
   include("SCT_Monitoring/SCTLorentzMonAlg_jobOptions.py")
   include("SCT_Monitoring/SCTTracksMonAlg_jobOptions.py")
diff --git a/InnerDetector/InDetMonitoring/SCT_Monitoring/SCT_Monitoring/SCT_MonitoringNumbers.h b/InnerDetector/InDetMonitoring/SCT_Monitoring/SCT_Monitoring/SCT_MonitoringNumbers.h
index 9c25c4e7f6d6..0af4c77ab9ac 100644
--- a/InnerDetector/InDetMonitoring/SCT_Monitoring/SCT_Monitoring/SCT_MonitoringNumbers.h
+++ b/InnerDetector/InDetMonitoring/SCT_Monitoring/SCT_Monitoring/SCT_MonitoringNumbers.h
@@ -50,6 +50,7 @@ namespace SCT_Monitoring{
   };
   
   enum CategoryErrors {MASKEDLINKALL=0, SUMMARY, BADERR, LINKLEVEL, RODLEVEL, MASKEDCHIP, N_ERRCATEGORY};
+  static const std::vector<std::string> CategoryErrorsNames = {"MASKEDLINKALL", "SUMMARY", "BADERR", "LINKLEVEL", "RODLEVEL", "MASKEDCHIP"};
 
   enum ProblemForCoverage {
     allRegion, //All SCT module for counting good module
diff --git a/InnerDetector/InDetMonitoring/SCT_Monitoring/share/SCTErrMonAlg_jobOptions.py b/InnerDetector/InDetMonitoring/SCT_Monitoring/share/SCTErrMonAlg_jobOptions.py
index a05d393085dc..447d479b56d8 100644
--- a/InnerDetector/InDetMonitoring/SCT_Monitoring/share/SCTErrMonAlg_jobOptions.py
+++ b/InnerDetector/InDetMonitoring/SCT_Monitoring/share/SCTErrMonAlg_jobOptions.py
@@ -64,6 +64,16 @@ myMonGroup.defineHistogram(varname = "lumiBlock, sctFlag;FractionOfSCTFlagErrors
                            xmin = 0.5,
                            xmax = sctMon.NBINS_LBs+0.5)
 
+# Filled in fillConfigurationDetails
+myMonGroup.defineHistogram(varname = "detailedConfBin, nBad;SCTConfDetails",
+                           type = "TProfile",
+                           title = "Exclusion from the Configuration",
+                           path = "GENERAL/Conf",
+                           xbins = sctMon.ConfbinsDetailed,
+                           xmin = -0.5,
+                           xmax = sctMon.ConfbinsDetailed-0.5,
+                           xlabels = ["Modules", "Link 0", "Link 1", "Chips", "Strips (10^{2})"])
+
 # Filled in fillHistograms
 myMonGroup.defineHistogram(varname = "moduleOutBin, moduleOut;SCTConfOutM",
                            type = "TProfile",
@@ -85,6 +95,22 @@ for i in range(SCT_ByteStreamErrors.NUM_ERROR_TYPES):
                                xmin = 0.5,
                                xmax = sctMon.NBINS_LBs+0.5)
 
+# Fiiled in fillByteStreamErrors
+errorsString = ["MaskedLinkALL", # MASKEDLINKALL
+                "Errors", # SUMMARY
+                "BadErrors", # BADERR
+                "LinkLevelErrors", # LINKLEVEL
+                "RODLevelErrors", # RODLEVEL
+                "MaskedChipALL"] # MASKEDCHIP
+for i in range(sctMon.N_ERRCATEGORY):
+    myMonGroup.defineHistogram(varname = "lumiBlock, n_"+sctMon.CategoryErrorsNames[i]+";SCT_LinksWith"+errorsString[i]+"VsLbs",
+                               type = "TProfile",
+                               title = "Ave. Num of Links with "+errorsString[i]+" per LB in All Region;LumiBlock;Num of Links with "+errorsString[i],
+                               path = "GENERAL/Conf",
+                               xbins = sctMon.NBINS_LBs,
+                               xmin = 0.5,
+                               xmax = sctMon.NBINS_LBs+0.5)
+
 # Filled in fillByteStreamErrorsHelper
 myMonGroup.defineHistogram(varname = "maskedLinksBin;Masked Links",
                            weight = "maskedLinks",
diff --git a/InnerDetector/InDetMonitoring/SCT_Monitoring/src/SCTErrMonAlg.cxx b/InnerDetector/InDetMonitoring/SCT_Monitoring/src/SCTErrMonAlg.cxx
index 2e8274f6abf9..66777500eca0 100644
--- a/InnerDetector/InDetMonitoring/SCT_Monitoring/src/SCTErrMonAlg.cxx
+++ b/InnerDetector/InDetMonitoring/SCT_Monitoring/src/SCTErrMonAlg.cxx
@@ -143,6 +143,7 @@ SCTErrMonAlg::fillConfigurationDetails(const EventContext& ctx) const {
     nBadStripsExclusiveBEC[bec2Index(bec)] += 1;
   }
 
+  /// Fill /SCT/GENERAL/Conf/SCTConfDetails ///
   auto detailedConfBinAcc{Monitored::Scalar<int>("detailedConfBin")};
   auto nBadAcc{Monitored::Scalar<double>("nBad")};
   for (unsigned int i{0}; i<ConfbinsDetailed; i++) {
@@ -191,11 +192,20 @@ SCTErrMonAlg::fillByteStreamErrors(const EventContext& ctx) const {
     fill("SCTErrMonitor", lumiBlockAcc, nBSErrorsAcc);
   }
 
+  std::array<int, CategoryErrors::N_ERRCATEGORY> tot_mod_bytestreamCate_errs;
+  tot_mod_bytestreamCate_errs.fill(0);
   int total_errors{0};
   for (int errType{0}; errType < SCT_ByteStreamErrors::NUM_ERROR_TYPES; ++errType) {
-    total_errors += fillByteStreamErrorsHelper(m_byteStreamErrTool->getErrorSet(errType), errType);
+    total_errors += fillByteStreamErrorsHelper(m_byteStreamErrTool->getErrorSet(errType), errType, tot_mod_bytestreamCate_errs);
   }
-
+  /// Fill /SCT/GENERAL/errors/SCT_LinksWith*VsLbs ///
+  for (int errCate{0}; errCate < CategoryErrors::N_ERRCATEGORY; ++errCate) {
+    auto lumiBlockAcc{Monitored::Scalar<int>("lumiBlock", pEvent->lumiBlock())};
+    auto nCategoryErrorsAcc{Monitored::Scalar<int>("n_"+CategoryErrorsNames[errCate],
+                                                   tot_mod_bytestreamCate_errs[errCate])};
+    fill("SCTErrMonitor", lumiBlockAcc, nCategoryErrorsAcc);
+  }
+  
   if (m_coverageCheck) {
     ATH_MSG_INFO("Detector Coverage calculation starts" );
 
@@ -259,7 +269,8 @@ SCTErrMonAlg::fillByteStreamErrors(const EventContext& ctx) const {
 
 int
 SCTErrMonAlg::fillByteStreamErrorsHelper(const set<IdentifierHash>& errors,
-                                         int err_type) const {
+                                         int err_type,
+                                         std::array<int, CategoryErrors::N_ERRCATEGORY>& tot_mod_bytestreamCate_errs) const {
 
   //--- Check categories of the BS error
   bool b_category[CategoryErrors::N_ERRCATEGORY];
@@ -361,6 +372,10 @@ SCTErrMonAlg::fillByteStreamErrorsHelper(const set<IdentifierHash>& errors,
     }
   }
 
+  for (int errCate{0}; errCate < CategoryErrors::N_ERRCATEGORY; ++errCate) {
+    if (b_category[errCate]) tot_mod_bytestreamCate_errs[errCate]++;
+  }
+
   if (b_category[CategoryErrors::SUMMARY]) return nerrors;
   return 0;
 }
diff --git a/InnerDetector/InDetMonitoring/SCT_Monitoring/src/SCTErrMonAlg.h b/InnerDetector/InDetMonitoring/SCT_Monitoring/src/SCTErrMonAlg.h
index 86cf7ae96f3b..2085222c38c1 100644
--- a/InnerDetector/InDetMonitoring/SCT_Monitoring/src/SCTErrMonAlg.h
+++ b/InnerDetector/InDetMonitoring/SCT_Monitoring/src/SCTErrMonAlg.h
@@ -62,7 +62,8 @@ class SCTErrMonAlg : public AthMonitorAlgorithm {
   StatusCode fillByteStreamErrors(const EventContext& ctx) const;
   /// Used in fillByteStreamErrors()
   int fillByteStreamErrorsHelper(const std::set<IdentifierHash>& errors,
-                                 int err_type) const;
+                                 int err_type,
+                                 std::array<int, SCT_Monitoring::CategoryErrors::N_ERRCATEGORY>& tot_mod_bytestreamCate_errs) const;
   void numByteStreamErrors(const std::set<IdentifierHash>& errors, int& ntot) const;
   bool disabledSCT(std::set<IdentifierHash>& sctHashDisabled) const;
   bool errorSCT(std::set<IdentifierHash>& sctHashBadLinkError,
-- 
GitLab


From eb320b4a2f7abee87aead55c8a82e410daedf8b1 Mon Sep 17 00:00:00 2001
From: Susumu Oda <susumu.oda@cern.ch>
Date: Thu, 26 Mar 2020 15:24:20 +0100
Subject: [PATCH 08/10] Fix bug. Change variable names

---
 .../SCT_Monitoring/SCT_MonitoringNumbers.h             |  7 ++++++-
 .../SCT_Monitoring/share/SCTErrMonAlg_jobOptions.py    | 10 ++--------
 .../InDetMonitoring/SCT_Monitoring/src/SCTErrMonAlg.h  |  2 +-
 3 files changed, 9 insertions(+), 10 deletions(-)

diff --git a/InnerDetector/InDetMonitoring/SCT_Monitoring/SCT_Monitoring/SCT_MonitoringNumbers.h b/InnerDetector/InDetMonitoring/SCT_Monitoring/SCT_Monitoring/SCT_MonitoringNumbers.h
index 0af4c77ab9ac..89d7d2fde173 100644
--- a/InnerDetector/InDetMonitoring/SCT_Monitoring/SCT_Monitoring/SCT_MonitoringNumbers.h
+++ b/InnerDetector/InDetMonitoring/SCT_Monitoring/SCT_Monitoring/SCT_MonitoringNumbers.h
@@ -50,7 +50,12 @@ namespace SCT_Monitoring{
   };
   
   enum CategoryErrors {MASKEDLINKALL=0, SUMMARY, BADERR, LINKLEVEL, RODLEVEL, MASKEDCHIP, N_ERRCATEGORY};
-  static const std::vector<std::string> CategoryErrorsNames = {"MASKEDLINKALL", "SUMMARY", "BADERR", "LINKLEVEL", "RODLEVEL", "MASKEDCHIP"};
+  static const std::vector<std::string> CategoryErrorsNames = {"MaskedLinkALL", // MASKEDLINKALL
+                                                               "Errors", // SUMMARY
+                                                               "BadErrors", // BADERR
+                                                               "LinkLevelErrors", // LINKLEVEL
+                                                               "RODLevelErrors", // RODLEVEL
+                                                               "MaskedChipALL"}; // MASKEDCHIP
 
   enum ProblemForCoverage {
     allRegion, //All SCT module for counting good module
diff --git a/InnerDetector/InDetMonitoring/SCT_Monitoring/share/SCTErrMonAlg_jobOptions.py b/InnerDetector/InDetMonitoring/SCT_Monitoring/share/SCTErrMonAlg_jobOptions.py
index 447d479b56d8..d5a6d6daea1b 100644
--- a/InnerDetector/InDetMonitoring/SCT_Monitoring/share/SCTErrMonAlg_jobOptions.py
+++ b/InnerDetector/InDetMonitoring/SCT_Monitoring/share/SCTErrMonAlg_jobOptions.py
@@ -96,16 +96,10 @@ for i in range(SCT_ByteStreamErrors.NUM_ERROR_TYPES):
                                xmax = sctMon.NBINS_LBs+0.5)
 
 # Fiiled in fillByteStreamErrors
-errorsString = ["MaskedLinkALL", # MASKEDLINKALL
-                "Errors", # SUMMARY
-                "BadErrors", # BADERR
-                "LinkLevelErrors", # LINKLEVEL
-                "RODLevelErrors", # RODLEVEL
-                "MaskedChipALL"] # MASKEDCHIP
 for i in range(sctMon.N_ERRCATEGORY):
-    myMonGroup.defineHistogram(varname = "lumiBlock, n_"+sctMon.CategoryErrorsNames[i]+";SCT_LinksWith"+errorsString[i]+"VsLbs",
+    myMonGroup.defineHistogram(varname = "lumiBlock, n_"+sctMon.CategoryErrorsNames[i]+";SCT_LinksWith"+sctMon.CategoryErrosNames[i]+"VsLbs",
                                type = "TProfile",
-                               title = "Ave. Num of Links with "+errorsString[i]+" per LB in All Region;LumiBlock;Num of Links with "+errorsString[i],
+                               title = "Ave. Num of Links with "+sctMon.CategoryErrosNames[i]+" per LB in All Region;LumiBlock;Num of Links with "+sctMon.CategoryErrosNames[i],
                                path = "GENERAL/Conf",
                                xbins = sctMon.NBINS_LBs,
                                xmin = 0.5,
diff --git a/InnerDetector/InDetMonitoring/SCT_Monitoring/src/SCTErrMonAlg.h b/InnerDetector/InDetMonitoring/SCT_Monitoring/src/SCTErrMonAlg.h
index 2085222c38c1..5677754e3991 100644
--- a/InnerDetector/InDetMonitoring/SCT_Monitoring/src/SCTErrMonAlg.h
+++ b/InnerDetector/InDetMonitoring/SCT_Monitoring/src/SCTErrMonAlg.h
@@ -42,7 +42,7 @@ class SCTErrMonAlg : public AthMonitorAlgorithm {
 
   std::vector<moduleGeo_t> m_geo{};
 
-  mutable std::atomic_bool m_isFirstConfigurationDetails{false};
+  mutable std::atomic_bool m_isFirstConfigurationDetails{true};
   mutable std::mutex m_mutex{};
 
   BooleanProperty m_makeConfHisto{this, "MakeConfHisto", true};
-- 
GitLab


From 615ff141301349692c3b437f652075cfacb42766 Mon Sep 17 00:00:00 2001
From: Susumu Oda <susumu.oda@cern.ch>
Date: Fri, 27 Mar 2020 01:34:36 +0100
Subject: [PATCH 09/10] Fix bugs

---
 .../SCT_Monitoring/share/SCTErrMonAlg_jobOptions.py           | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/InnerDetector/InDetMonitoring/SCT_Monitoring/share/SCTErrMonAlg_jobOptions.py b/InnerDetector/InDetMonitoring/SCT_Monitoring/share/SCTErrMonAlg_jobOptions.py
index d5a6d6daea1b..e58ca7db2efa 100644
--- a/InnerDetector/InDetMonitoring/SCT_Monitoring/share/SCTErrMonAlg_jobOptions.py
+++ b/InnerDetector/InDetMonitoring/SCT_Monitoring/share/SCTErrMonAlg_jobOptions.py
@@ -97,9 +97,9 @@ for i in range(SCT_ByteStreamErrors.NUM_ERROR_TYPES):
 
 # Fiiled in fillByteStreamErrors
 for i in range(sctMon.N_ERRCATEGORY):
-    myMonGroup.defineHistogram(varname = "lumiBlock, n_"+sctMon.CategoryErrorsNames[i]+";SCT_LinksWith"+sctMon.CategoryErrosNames[i]+"VsLbs",
+    myMonGroup.defineHistogram(varname = "lumiBlock, n_"+sctMon.CategoryErrorsNames[i]+";SCT_LinksWith"+sctMon.CategoryErrorsNames[i]+"VsLbs",
                                type = "TProfile",
-                               title = "Ave. Num of Links with "+sctMon.CategoryErrosNames[i]+" per LB in All Region;LumiBlock;Num of Links with "+sctMon.CategoryErrosNames[i],
+                               title = "Ave. Num of Links with "+sctMon.CategoryErrorsNames[i]+" per LB in All Region;LumiBlock;Num of Links with "+sctMon.CategoryErrorsNames[i],
                                path = "GENERAL/Conf",
                                xbins = sctMon.NBINS_LBs,
                                xmin = 0.5,
-- 
GitLab


From 1df3f8e1dedfa87e293e014a4afcd80060d213eb Mon Sep 17 00:00:00 2001
From: Susumu Oda <susumu.oda@cern.ch>
Date: Fri, 27 Mar 2020 01:40:07 +0100
Subject: [PATCH 10/10] Revert to SCTErrMonTool

---
 .../InDetExample/InDetRecExample/share/InDetMonitoringSCT.py  | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/InnerDetector/InDetExample/InDetRecExample/share/InDetMonitoringSCT.py b/InnerDetector/InDetExample/InDetRecExample/share/InDetMonitoringSCT.py
index 26ae01f97e4f..152892dd0226 100755
--- a/InnerDetector/InDetExample/InDetRecExample/share/InDetMonitoringSCT.py
+++ b/InnerDetector/InDetExample/InDetRecExample/share/InDetMonitoringSCT.py
@@ -116,11 +116,11 @@ InDetSCTMonMan = AthenaMonManager("InDetSCTMonManager",
                                   Run                 = DQMonFlags.monManRun(),
                                   LumiBlock           = DQMonFlags.monManLumiBlock(),
                                   AthenaMonTools      = [ InDetSCTHitsTool,
-                                                          # InDetSCTErrMonTool
+                                                          InDetSCTErrMonTool
                                                         ] )
 
 if useNewAlgs:
-  include("SCT_Monitoring/SCTErrMonAlg_jobOptions.py")
+  # include("SCT_Monitoring/SCTErrMonAlg_jobOptions.py")
   include("SCT_Monitoring/SCTHitEffMonAlg_jobOptions.py")
   include("SCT_Monitoring/SCTLorentzMonAlg_jobOptions.py")
   include("SCT_Monitoring/SCTTracksMonAlg_jobOptions.py")
-- 
GitLab