Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

A new Online HCAL DQM histogram for bad quality events #45527

Closed
wants to merge 16 commits into from
16 changes: 16 additions & 0 deletions DQM/HcalTasks/data/HcalQualityTests.xml
Original file line number Diff line number Diff line change
Expand Up @@ -30,4 +30,20 @@
<LINK name="*Hcal/DigiTask/CapID/CapID_BadvsLS*">
<TestName activate="true">BadCapIDThreshold</TestName>
</LINK>
<QTEST name="BadQualityThreshold">
<TYPE>ContentsWithinExpected</TYPE>
<PARAM name="error">1.0</PARAM>
<PARAM name="warning">1.0</PARAM>
<PARAM name="minMean">-1.0</PARAM>
<PARAM name="maxMean">0.0</PARAM>
<PARAM name="minRMS">0.0</PARAM>
<PARAM name="maxRMS">0.0</PARAM>
<PARAM name="toleranceMean">-1.0</PARAM>
<PARAM name="minEntries">0</PARAM>
<PARAM name="useEmptyBins">1</PARAM>
</QTEST>
<LINK name="*Hcal/RawTask/BadQ_FEDvsLSmod60/BadQ_FEDvsLS*">
<TestName activate="true">BadQualityThreshold</TestName>
</LINK>

</TESTSCONFIGURATION>
10 changes: 6 additions & 4 deletions DQM/HcalTasks/interface/RawTask.h
Original file line number Diff line number Diff line change
Expand Up @@ -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<uint32_t> _vhashFEDs;
// vector of HcalElectronicsId for FEDs
std::vector<uint32_t> _vhashFEDs;

// Filters
hcaldqm::filter::HashFilter _filter_VME;
Expand All @@ -75,8 +76,9 @@ class RawTask : public hcaldqm::DQTask {
hcaldqm::Container2D _cOrnMsm_ElectronicsuTCA;
hcaldqm::ContainerXXX<uint32_t> _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
35 changes: 29 additions & 6 deletions DQM/HcalTasks/plugins/RawTask.cc
Original file line number Diff line number Diff line change
Expand Up @@ -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) {
Expand Down Expand Up @@ -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",
Expand Down Expand Up @@ -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);
}

Expand Down Expand Up @@ -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
Expand All @@ -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<DetId>::const_iterator it = creport->bad_quality_begin(); it != creport->bad_quality_end(); ++it) {
// skip non HCAL det ids
if (!HcalGenericDetId(*it).isHcalDetId())
Expand All @@ -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))
Expand Down Expand Up @@ -393,16 +407,17 @@ std::shared_ptr<hcaldqm::Cache> RawTask::globalBeginLuminosityBlock(edm::Luminos
for (std::vector<uint32_t>::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<uint32_t>::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)
Expand All @@ -419,9 +434,12 @@ std::shared_ptr<hcaldqm::Cache> 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;
}

Expand All @@ -430,7 +448,12 @@ std::shared_ptr<hcaldqm::Cache> RawTask::globalBeginLuminosityBlock(edm::Luminos
// - sum them all up in summary flag for this FED
// - reset each flag right after using it
for (std::vector<flag::Flag>::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++;

Expand Down