diff --git a/DQM/HcalTasks/data/HcalQualityTests.xml b/DQM/HcalTasks/data/HcalQualityTests.xml index 7834b0539311e..d215a54888071 100644 --- a/DQM/HcalTasks/data/HcalQualityTests.xml +++ b/DQM/HcalTasks/data/HcalQualityTests.xml @@ -30,4 +30,20 @@ BadCapIDThreshold + + ContentsWithinExpected + 1.0 + 1.0 + -1.0 + 0.0 + 0.0 + 0.0 + -1.0 + 0 + 1 + + + BadQualityThreshold + + diff --git a/DQM/HcalTasks/interface/RawTask.h b/DQM/HcalTasks/interface/RawTask.h index 99b35969afdf6..41a1683558333 100644 --- a/DQM/HcalTasks/interface/RawTask.h +++ b/DQM/HcalTasks/interface/RawTask.h @@ -51,9 +51,10 @@ class RawTask : public hcaldqm::DQTask { // physics vs calib processing switch bool _calibProcessing; int _thresh_calib_nbadq; + int _nBadQEvent; - // vector of HcalElectronicsId for FEDs - std::vector _vhashFEDs; + // vector of HcalElectronicsId for FEDs + std::vector _vhashFEDs; // Filters hcaldqm::filter::HashFilter _filter_VME; @@ -75,8 +76,9 @@ class RawTask : public hcaldqm::DQTask { hcaldqm::Container2D _cOrnMsm_ElectronicsuTCA; hcaldqm::ContainerXXX _xEvnMsmLS, _xBcnMsmLS, _xOrnMsmLS, _xBadQLS; - hcaldqm::Container2D _cSummaryvsLS_FED; // online only - hcaldqm::ContainerSingle2D _cSummaryvsLS; // online only + hcaldqm::Container2D _cSummaryvsLS_FED; // online only + hcaldqm::ContainerSingle2D _cSummaryvsLS; // online only + hcaldqm::ContainerSingle2D _cBadQ_FEDvsLSmod60; // online only }; #endif diff --git a/DQM/HcalTasks/plugins/RawTask.cc b/DQM/HcalTasks/plugins/RawTask.cc index 1206a6a5166e3..0946f3939084d 100644 --- a/DQM/HcalTasks/plugins/RawTask.cc +++ b/DQM/HcalTasks/plugins/RawTask.cc @@ -18,6 +18,7 @@ RawTask::RawTask(edm::ParameterSet const& ps) _vflags[fBcnMsm] = flag::Flag("BcnMsm"); _vflags[fBadQ] = flag::Flag("BadQ"); _vflags[fOrnMsm] = flag::Flag("OrnMsm"); + _nBadQEvent = 0; } /* virtual */ void RawTask::bookHistograms(DQMStore::IBooker& ib, edm::Run const& r, edm::EventSetup const& es) { @@ -131,6 +132,12 @@ RawTask::RawTask(edm::ParameterSet const& ps) new hcaldqm::quantity::FEDQuantity(vFEDs), new hcaldqm::quantity::ValueQuantity(hcaldqm::quantity::fState), 0); + _cBadQ_FEDvsLSmod60.initialize(_name, + "BadQ_FEDvsLSmod60", + new hcaldqm::quantity::LumiSection(60), + new hcaldqm::quantity::FEDQuantity(vFEDs), + new hcaldqm::quantity::ValueQuantity(hcaldqm::quantity::fN), + 0); // FED Size vs LS _cDataSizevsLS_FED.initialize(_name, "DataSizevsLS", @@ -166,6 +173,7 @@ RawTask::RawTask(edm::ParameterSet const& ps) _xBadQLS.book(_emap); _cSummaryvsLS_FED.book(ib, _emap, _subsystem); _cSummaryvsLS.book(ib, _subsystem); + _cBadQ_FEDvsLSmod60.book(ib, _subsystem); _cDataSizevsLS_FED.book(ib, _emap, _subsystem); } @@ -206,7 +214,6 @@ RawTask::RawTask(edm::ParameterSet const& ps) _currentLS = lumiCache->currentLS; _xQuality.reset(); _xQuality = lumiCache->xQuality; - /* * For Calibration/Abort Gap Processing * check if the #channels taht are bad from the unpacker @@ -224,6 +231,11 @@ RawTask::RawTask(edm::ParameterSet const& ps) // TODO: Include for Online Calibration Channels marked as bad // a comment below is left on purpose! //_cBadQualityvsBX.fill(bx, creport->badQualityDigis()); + int Nbadq = creport->badQualityDigis(); + if (lumiCache->EvtCntLS == 1) + _nBadQEvent = 0; // Reset at the beginning of each new LS + if (Nbadq > 0) + _nBadQEvent++; for (std::vector::const_iterator it = creport->bad_quality_begin(); it != creport->bad_quality_end(); ++it) { // skip non HCAL det ids if (!HcalGenericDetId(*it).isHcalDetId()) @@ -242,7 +254,9 @@ RawTask::RawTask(edm::ParameterSet const& ps) _cBadQuality_depth.fill(HcalDetId(*it)); // ONLINE ONLY! if (_ptype == fOnline) + //Number of BadQualityDigis _xBadQLS.get(eid)++; + //std::cout << " event _xBadQLS "<< double(_xBadQLS.get(eid)) << std::endl; if (_ptype != fOffline) { // hidefed2crate if (!eid.isVMEid()) { if (_filter_FEDsuTCA.filter(eid)) @@ -393,16 +407,17 @@ std::shared_ptr RawTask::globalBeginLuminosityBlock(edm::Luminos for (std::vector::const_iterator it = _vhashFEDs.begin(); it != _vhashFEDs.end(); ++it) { flag::Flag fSum("RAW"); HcalElectronicsId eid = HcalElectronicsId(*it); - + int fed = hcaldqm::utilities::crate2fed(eid.crateId(), eid.slot()); std::vector::const_iterator cit = std::find(_vcdaqEids.begin(), _vcdaqEids.end(), *it); if (cit == _vcdaqEids.end()) { // not @cDAQ for (uint32_t iflag = 0; iflag < _vflags.size(); iflag++) _cSummaryvsLS_FED.setBinContent(eid, _currentLS, int(iflag), int(flag::fNCDAQ)); _cSummaryvsLS.setBinContent(eid, _currentLS, int(flag::fNCDAQ)); + if (!hcaldqm::utilities::isFEDHO(eid) && fed != 1136) + _cBadQ_FEDvsLSmod60.setBinContent(eid, _currentLS % 60, int(flag::fNCDAQ)); continue; } - // FED is @cDAQ if (hcaldqm::utilities::isFEDHBHE(eid) || hcaldqm::utilities::isFEDHF(eid) || hcaldqm::utilities::isFEDHO(eid)) { if (_xEvnMsmLS.get(eid) > 0) @@ -419,9 +434,12 @@ std::shared_ptr RawTask::globalBeginLuminosityBlock(edm::Luminos _vflags[fOrnMsm]._state = flag::fGOOD; if (double(_xBadQLS.get(eid)) > double(12 * _evsPerLS)) _vflags[fBadQ]._state = flag::fBAD; - else if (_xBadQLS.get(eid) > 0) + //else if (_xBadQLS.get(eid) > 0){ + // Following line added due to https://gitlab.cern.ch/cmshcal/docs/-/issues/233 + // BadQ > (5%) of number of events in this LS. + else if (double(_xBadQLS.get(eid)) > 0 && double(_nBadQEvent) > double(0.05 * _evsPerLS)) { _vflags[fBadQ]._state = flag::fPROBLEMATIC; - else + } else _vflags[fBadQ]._state = flag::fGOOD; } @@ -430,7 +448,12 @@ std::shared_ptr RawTask::globalBeginLuminosityBlock(edm::Luminos // - sum them all up in summary flag for this FED // - reset each flag right after using it for (std::vector::iterator ft = _vflags.begin(); ft != _vflags.end(); ++ft) { - _cSummaryvsLS_FED.setBinContent(eid, _currentLS, int(iflag), ft->_state); + _cSummaryvsLS_FED.setBinContent(eid, _currentLS, int(iflag), ft->_state); + if (ft->_name == "BadQ") { + if (!hcaldqm::utilities::isFEDHO(eid) && fed != 1136 && ft->_state != 3) { + _cBadQ_FEDvsLSmod60.setBinContent(eid, _currentLS % 60, (double(_nBadQEvent) / double(_evsPerLS)) * 100); + } + } fSum += (*ft); iflag++;