From 2ba52ea3015a19276f39b632a6edb8de019d81a3 Mon Sep 17 00:00:00 2001 From: Kyungmin Park Date: Wed, 21 Aug 2024 01:33:26 +0200 Subject: [PATCH 1/3] Add ECAL DCC desync DQM trend plots --- .../python/RawDataTask_cfi.py | 28 +++++++++++++ DQM/EcalMonitorTasks/src/RawDataTask.cc | 40 ++++++++++++++++--- 2 files changed, 62 insertions(+), 6 deletions(-) diff --git a/DQM/EcalMonitorTasks/python/RawDataTask_cfi.py b/DQM/EcalMonitorTasks/python/RawDataTask_cfi.py index 25c4fe7e05018..6ba4284e2e8cd 100644 --- a/DQM/EcalMonitorTasks/python/RawDataTask_cfi.py +++ b/DQM/EcalMonitorTasks/python/RawDataTask_cfi.py @@ -49,6 +49,34 @@ ecalRawDataTask = cms.untracked.PSet( MEs = cms.untracked.PSet( + TrendBXTCC = cms.untracked.PSet( + path = cms.untracked.string('Ecal/Trends/RawDataTask number of %(prefix)sRDT bunch crossing TCC errors'), + kind = cms.untracked.string('TH1F'), + otype = cms.untracked.string('Ecal2P'), + btype = cms.untracked.string('Trend'), + description = cms.untracked.string('Trend of the number of bunch crossing value mismatches between DCC and TCC.') + ), + TrendL1ATCC = cms.untracked.PSet( + path = cms.untracked.string('Ecal/Trends/RawDataTask number of %(prefix)sRDT L1A TCC errors'), + kind = cms.untracked.string('TH1F'), + otype = cms.untracked.string('Ecal2P'), + btype = cms.untracked.string('Trend'), + description = cms.untracked.string('Trend of the number of L1A value mismatches between DCC and TCC.') + ), + TrendBXSRP = cms.untracked.PSet( + path = cms.untracked.string('Ecal/Trends/RawDataTask number of %(prefix)sRDT bunch crossing SRP errors'), + kind = cms.untracked.string('TH1F'), + otype = cms.untracked.string('Ecal2P'), + btype = cms.untracked.string('Trend'), + description = cms.untracked.string('Trend of the number of bunch crossing value mismatches between DCC and SRP.') + ), + TrendL1ASRP = cms.untracked.PSet( + path = cms.untracked.string('Ecal/Trends/RawDataTask number of %(prefix)sRDT L1A SRP errors'), + kind = cms.untracked.string('TH1F'), + otype = cms.untracked.string('Ecal2P'), + btype = cms.untracked.string('Trend'), + description = cms.untracked.string('Trend of the number of L1A value mismatches between DCC and SRP.') + ), BXSRP = cms.untracked.PSet( path = cms.untracked.string('%(subdet)s/%(prefix)sRawDataTask/%(prefix)sRDT bunch crossing SRP errors'), kind = cms.untracked.string('TH1F'), diff --git a/DQM/EcalMonitorTasks/src/RawDataTask.cc b/DQM/EcalMonitorTasks/src/RawDataTask.cc index 225dbac456508..d3b9087de0e50 100644 --- a/DQM/EcalMonitorTasks/src/RawDataTask.cc +++ b/DQM/EcalMonitorTasks/src/RawDataTask.cc @@ -88,6 +88,10 @@ namespace ecaldqm { MESet& meBXSRP(MEs_.at("BXSRP")); MESet& meL1ASRP(MEs_.at("L1ASRP")); MESet& meTrendNSyncErrors(MEs_.at("L1ATCC")); + MESet& meTrendBXTCC(MEs_.at("TrendBXTCC")); + MESet& meTrendL1ATCC(MEs_.at("TrendL1ATCC")); + MESet& meTrendBXSRP(MEs_.at("TrendBXSRP")); + MESet& meTrendL1ASRP(MEs_.at("TrendL1ASRP")); MESet& meEventTypePreCalib(MEs_.at("EventTypePreCalib")); MESet& meEventTypeCalib(MEs_.at("EventTypeCalib")); MESet& meEventTypePostCalib(MEs_.at("EventTypePostCalib")); @@ -214,30 +218,54 @@ namespace ecaldqm { if (tccBx.size() == 4) { // EB uses tccBx[0]; EE uses all if (dccId <= kEEmHigh + 1 || dccId >= kEEpLow + 1) { for (int iTCC(0); iTCC < 4; iTCC++) { - if (tccBx[iTCC] != dccBX && tccBx[iTCC] != -1 && dccBX != -1) + if (tccBx[iTCC] != dccBX && tccBx[iTCC] != -1 && dccBX != -1) { meBXTCC.fill(getEcalDQMSetupObjects(), dccId); + meTrendBXTCC.fill(getEcalDQMSetupObjects(), EcalEndcap, double(timestamp_.iLumi), 1); + } - if (tccL1[iTCC] != dccL1AShort && tccL1[iTCC] != -1 && dccL1AShort != 0) + if (tccL1[iTCC] != dccL1AShort && tccL1[iTCC] != -1 && dccL1AShort != 0) { meL1ATCC.fill(getEcalDQMSetupObjects(), dccId); + meTrendL1ATCC.fill(getEcalDQMSetupObjects(), EcalEndcap, double(timestamp_.iLumi), 1); + } } } else { - if (tccBx[0] != dccBX && tccBx[0] != -1 && dccBX != -1) + if (tccBx[0] != dccBX && tccBx[0] != -1 && dccBX != -1) { meBXTCC.fill(getEcalDQMSetupObjects(), dccId); + meTrendBXTCC.fill(getEcalDQMSetupObjects(), EcalBarrel, double(timestamp_.iLumi), 1); + } - if (tccL1[0] != dccL1AShort && tccL1[0] != -1 && dccL1AShort != 0) + if (tccL1[0] != dccL1AShort && tccL1[0] != -1 && dccL1AShort != 0) { meL1ATCC.fill(getEcalDQMSetupObjects(), dccId); + meTrendL1ATCC.fill(getEcalDQMSetupObjects(), EcalBarrel, double(timestamp_.iLumi), 1); + } } } short srpBx(dcchItr->getSRPBx()); short srpL1(dcchItr->getSRPLv1()); - if (srpBx != dccBX && srpBx != -1 && dccBX != -1) + if (srpBx != dccBX && srpBx != -1 && dccBX != -1) { meBXSRP.fill(getEcalDQMSetupObjects(), dccId); - if (srpL1 != dccL1AShort && srpL1 != -1 && dccL1AShort != 0) + if (dccId <= kEEmHigh + 1 || dccId >= kEEpLow + 1) { // EE + meTrendBXSRP.fill(getEcalDQMSetupObjects(), EcalEndcap, double(timestamp_.iLumi), 1); + } + else { // EB + meTrendBXSRP.fill(getEcalDQMSetupObjects(), EcalBarrel, double(timestamp_.iLumi), 1); + } + } + + if (srpL1 != dccL1AShort && srpL1 != -1 && dccL1AShort != 0) { meL1ASRP.fill(getEcalDQMSetupObjects(), dccId); + if (dccId <= kEEmHigh + 1 || dccId >= kEEpLow + 1) { // EE + meTrendL1ASRP.fill(getEcalDQMSetupObjects(), EcalEndcap, double(timestamp_.iLumi), 1); + } + else { // EB + meTrendL1ASRP.fill(getEcalDQMSetupObjects(), EcalBarrel, double(timestamp_.iLumi), 1); + } + } + const int calibBX(3490); short runType(dcchItr->getRunType() + 1); From dc5a86f04ac83df64cd0016b90ccf72843da7e8d Mon Sep 17 00:00:00 2001 From: Kyungmin Park Date: Wed, 21 Aug 2024 02:02:21 +0200 Subject: [PATCH 2/3] Update ECAL DCC number of desyncs threshold for Integrity Quality Criteria --- DQM/EcalMonitorClient/src/IntegrityClient.cc | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/DQM/EcalMonitorClient/src/IntegrityClient.cc b/DQM/EcalMonitorClient/src/IntegrityClient.cc index 159904346cce8..ecd33aa1ef42f 100644 --- a/DQM/EcalMonitorClient/src/IntegrityClient.cc +++ b/DQM/EcalMonitorClient/src/IntegrityClient.cc @@ -123,15 +123,20 @@ namespace ecaldqm { } } - // Quality check: set an entire FED to BAD if "any" DCC-SRP or DCC-TCC mismatch errors are detected + // Quality check: set an entire FED to BAD if "any" DCC-SRP or DCC-TCC mismatch errors are detected AND the number of events affected by the DCC-SRP or DCC-TCC mismatch errors is more than 1% of the events analyzed in the run // Fill mismatch statistics MESet const& sBXSRP(sources_.at("BXSRP")); MESet const& sBXTCC(sources_.at("BXTCC")); std::vector hasMismatchDCC(nDCC, false); for (unsigned iDCC(0); iDCC < nDCC; ++iDCC) { - if (sBXSRP.getBinContent(getEcalDQMSetupObjects(), iDCC + 1) > 50. || - sBXTCC.getBinContent(getEcalDQMSetupObjects(), iDCC + 1) > 50.) // "any" => 50 - hasMismatchDCC[iDCC] = true; + int nBXSRPdesync = sBXSRP.getBinContent(getEcalDQMSetupObjects(), iDCC + 1); + int nBXTCCdesync = sBXTCC.getBinContent(getEcalDQMSetupObjects(), iDCC + 1); + + if (nBXSRPdesync > 50. || nBXTCCdesync > 50.) { // "any" => 50 + if (nBXSRPdesync > int(0.01 * processedEvents) || nBXTCCdesync > int(0.01 * processedEvents)) { // check if the events with DCC-SRP or DCC-TCC desyncs for the given DCC is more than 1% of the events analyzed + hasMismatchDCC[iDCC] = true; + } + } } // Analyze mismatch statistics for (MESet::iterator qsItr(meQualitySummary.beginChannel(GetElectronicsMap())); From 8d788bcc033778bd1fd31373389cc77571fd5827 Mon Sep 17 00:00:00 2001 From: Kyungmin Park Date: Wed, 21 Aug 2024 14:51:31 +0200 Subject: [PATCH 3/3] Update the integrity summary plot description --- DQM/EcalMonitorClient/python/IntegrityClient_cfi.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/DQM/EcalMonitorClient/python/IntegrityClient_cfi.py b/DQM/EcalMonitorClient/python/IntegrityClient_cfi.py index 7f631d75a86da..2a2e61d0aecbf 100644 --- a/DQM/EcalMonitorClient/python/IntegrityClient_cfi.py +++ b/DQM/EcalMonitorClient/python/IntegrityClient_cfi.py @@ -27,7 +27,7 @@ kind = cms.untracked.string('TH2F'), otype = cms.untracked.string('Ecal3P'), btype = cms.untracked.string('Crystal'), - description = cms.untracked.string('Summary of the data integrity. A channel is red if more than ' + str(errFractionThreshold) + ' of its entries have integrity errors.') + description = cms.untracked.string('Summary of the data integrity. A channel is red if more than ' + str(errFractionThreshold) + ' of its entries have integrity errors. Also, an entire SuperModule can show red if more than 0.01 of its entries have DCC-SRP or DCC-TCC Desync errors.') ), Quality = cms.untracked.PSet( path = cms.untracked.string('%(subdet)s/%(prefix)sIntegrityClient/%(prefix)sIT data integrity quality %(sm)s'),