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++;