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