File indexing completed on 2024-04-06 12:07:35
0001 #include "DQM/HcalTasks/interface/RawTask.h"
0002
0003 using namespace hcaldqm;
0004 using namespace hcaldqm::constants;
0005
0006 RawTask::RawTask(edm::ParameterSet const& ps)
0007 : DQTask(ps), hcalDbServiceToken_(esConsumes<HcalDbService, HcalDbRecord, edm::Transition::BeginRun>()) {
0008 _tagFEDs = ps.getUntrackedParameter<edm::InputTag>("tagFEDs", edm::InputTag("rawDataCollector"));
0009 _tagReport = ps.getUntrackedParameter<edm::InputTag>("tagReport", edm::InputTag("hcalDigis"));
0010 _calibProcessing = ps.getUntrackedParameter<bool>("calibProcessing", false);
0011 _thresh_calib_nbadq = ps.getUntrackedParameter<int>("thresh_calib_nbadq", 5000);
0012
0013 _tokFEDs = consumes<FEDRawDataCollection>(_tagFEDs);
0014 _tokReport = consumes<HcalUnpackerReport>(_tagReport);
0015
0016 _vflags.resize(nRawFlag);
0017 _vflags[fEvnMsm] = flag::Flag("EvnMsm");
0018 _vflags[fBcnMsm] = flag::Flag("BcnMsm");
0019 _vflags[fBadQ] = flag::Flag("BadQ");
0020 _vflags[fOrnMsm] = flag::Flag("OrnMsm");
0021 }
0022
0023 void RawTask::bookHistograms(DQMStore::IBooker& ib, edm::Run const& r, edm::EventSetup const& es) {
0024 DQTask::bookHistograms(ib, r, es);
0025
0026
0027 edm::ESHandle<HcalDbService> dbs = es.getHandle(hcalDbServiceToken_);
0028 _emap = dbs->getHcalMapping();
0029 std::vector<uint32_t> vVME;
0030 std::vector<uint32_t> vuTCA;
0031 vVME.push_back(
0032 HcalElectronicsId(constants::FIBERCH_MIN, constants::FIBER_VME_MIN, SPIGOT_MIN, CRATE_VME_MIN).rawId());
0033 vuTCA.push_back(HcalElectronicsId(CRATE_uTCA_MIN, SLOT_uTCA_MIN, FIBER_uTCA_MIN1, FIBERCH_MIN, false).rawId());
0034 _filter_VME.initialize(filter::fFilter, hcaldqm::hashfunctions::fElectronics, vVME);
0035 _filter_uTCA.initialize(filter::fFilter, hcaldqm::hashfunctions::fElectronics, vuTCA);
0036
0037 _cBadQualityvsLS.initialize(_name,
0038 "BadQualityvsLS",
0039 new hcaldqm::quantity::LumiSection(_maxLS),
0040 new hcaldqm::quantity::ValueQuantity(hcaldqm::quantity::fN_m0to10000),
0041 0);
0042 _cBadQualityvsBX.initialize(_name,
0043 "BadQualityvsBX",
0044 new hcaldqm::quantity::ValueQuantity(hcaldqm::quantity::fBX),
0045 new hcaldqm::quantity::ValueQuantity(hcaldqm::quantity::fN_m0to10000),
0046 0);
0047 _cBadQuality_depth.initialize(_name,
0048 "BadQuality",
0049 hcaldqm::hashfunctions::fdepth,
0050 new hcaldqm::quantity::DetectorQuantity(hcaldqm::quantity::fieta),
0051 new hcaldqm::quantity::DetectorQuantity(hcaldqm::quantity::fiphi),
0052 new hcaldqm::quantity::ValueQuantity(hcaldqm::quantity::fN),
0053 0);
0054
0055
0056 if (_ptype != fOffline) {
0057 std::vector<int> vFEDs = hcaldqm::utilities::getFEDList(_emap);
0058 std::vector<int> vFEDsVME = hcaldqm::utilities::getFEDVMEList(_emap);
0059 std::vector<int> vFEDsuTCA = hcaldqm::utilities::getFEDuTCAList(_emap);
0060
0061 std::vector<uint32_t> vhashFEDsVME;
0062 std::vector<uint32_t> vhashFEDsuTCA;
0063
0064 for (std::vector<int>::const_iterator it = vFEDsVME.begin(); it != vFEDsVME.end(); ++it) {
0065 vhashFEDsVME.push_back(
0066 HcalElectronicsId(
0067 constants::FIBERCH_MIN, constants::FIBER_VME_MIN, SPIGOT_MIN, (*it) - constants::FED_VME_MIN)
0068 .rawId());
0069 _vhashFEDs.push_back(
0070 HcalElectronicsId(
0071 constants::FIBERCH_MIN, constants::FIBER_VME_MIN, SPIGOT_MIN, (*it) - constants::FED_VME_MIN)
0072 .rawId());
0073 }
0074 for (std::vector<int>::const_iterator it = vFEDsuTCA.begin(); it != vFEDsuTCA.end(); ++it) {
0075 std::pair<uint16_t, uint16_t> cspair = utilities::fed2crate(*it);
0076 vhashFEDsuTCA.push_back(
0077 HcalElectronicsId(cspair.first, cspair.second, FIBER_uTCA_MIN1, FIBERCH_MIN, false).rawId());
0078 _vhashFEDs.push_back(HcalElectronicsId(cspair.first, cspair.second, FIBER_uTCA_MIN1, FIBERCH_MIN, false).rawId());
0079 }
0080 _filter_FEDsVME.initialize(filter::fPreserver, hcaldqm::hashfunctions::fFED, vhashFEDsVME);
0081 _filter_FEDsuTCA.initialize(filter::fPreserver, hcaldqm::hashfunctions::fFED, vhashFEDsuTCA);
0082
0083
0084 _cEvnMsm_ElectronicsuTCA.initialize(_name,
0085 "EvnMsm",
0086 hcaldqm::hashfunctions::fElectronics,
0087 new hcaldqm::quantity::FEDQuantity(vFEDsuTCA),
0088 new hcaldqm::quantity::ElectronicsQuantity(hcaldqm::quantity::fSlotuTCA),
0089 new hcaldqm::quantity::ValueQuantity(hcaldqm::quantity::fN),
0090 0);
0091 _cBcnMsm_ElectronicsuTCA.initialize(_name,
0092 "BcnMsm",
0093 hcaldqm::hashfunctions::fElectronics,
0094 new hcaldqm::quantity::FEDQuantity(vFEDsuTCA),
0095 new hcaldqm::quantity::ElectronicsQuantity(hcaldqm::quantity::fSlotuTCA),
0096 new hcaldqm::quantity::ValueQuantity(hcaldqm::quantity::fN),
0097 0);
0098 _cOrnMsm_ElectronicsuTCA.initialize(_name,
0099 "OrnMsm",
0100 hcaldqm::hashfunctions::fElectronics,
0101 new hcaldqm::quantity::FEDQuantity(vFEDsuTCA),
0102 new hcaldqm::quantity::ElectronicsQuantity(hcaldqm::quantity::fSlotuTCA),
0103 new hcaldqm::quantity::ValueQuantity(hcaldqm::quantity::fN),
0104 0);
0105
0106
0107 _cBadQuality_FEDuTCA.initialize(_name,
0108 "BadQuality",
0109 hcaldqm::hashfunctions::fCrate,
0110 new hcaldqm::quantity::ElectronicsQuantity(hcaldqm::quantity::fSlotuTCA),
0111 new hcaldqm::quantity::ElectronicsQuantity(hcaldqm::quantity::fFiberuTCA),
0112 new hcaldqm::quantity::ValueQuantity(hcaldqm::quantity::fN),
0113 0);
0114
0115
0116 if (_ptype == fOnline) {
0117 _xEvnMsmLS.initialize(hcaldqm::hashfunctions::fFED);
0118 _xBcnMsmLS.initialize(hcaldqm::hashfunctions::fFED);
0119 _xOrnMsmLS.initialize(hcaldqm::hashfunctions::fFED);
0120 _xBadQLS.initialize(hcaldqm::hashfunctions::fFED);
0121 _cSummaryvsLS_FED.initialize(_name,
0122 "SummaryvsLS",
0123 hcaldqm::hashfunctions::fFED,
0124 new hcaldqm::quantity::LumiSection(_maxLS),
0125 new hcaldqm::quantity::FlagQuantity(_vflags),
0126 new hcaldqm::quantity::ValueQuantity(hcaldqm::quantity::fState),
0127 0);
0128 _cSummaryvsLS.initialize(_name,
0129 "SummaryvsLS",
0130 new hcaldqm::quantity::LumiSection(_maxLS),
0131 new hcaldqm::quantity::FEDQuantity(vFEDs),
0132 new hcaldqm::quantity::ValueQuantity(hcaldqm::quantity::fState),
0133 0);
0134
0135 _cDataSizevsLS_FED.initialize(_name,
0136 "DataSizevsLS",
0137 hcaldqm::hashfunctions::fFED,
0138 new hcaldqm::quantity::LumiSection(_maxLS),
0139 new hcaldqm::quantity::ValueQuantity(hcaldqm::quantity::fDataSize),
0140 0);
0141 }
0142 }
0143
0144
0145 if (_ptype != fOffline) {
0146 _cEvnMsm_ElectronicsuTCA.book(ib, _emap, _filter_VME, _subsystem);
0147 _cBcnMsm_ElectronicsuTCA.book(ib, _emap, _filter_VME, _subsystem);
0148 _cOrnMsm_ElectronicsuTCA.book(ib, _emap, _filter_VME, _subsystem);
0149
0150 _cBadQuality_FEDuTCA.book(ib, _emap, _filter_VME, _subsystem);
0151 }
0152 if (_ptype == fOffline) {
0153 auto scope = DQMStore::IBooker::UseLumiScope(ib);
0154 _cBadQuality_depth.book(ib, _emap, _subsystem);
0155 } else {
0156 _cBadQuality_depth.book(ib, _emap, _subsystem);
0157 }
0158 _cBadQualityvsLS.book(ib, _subsystem);
0159 _cBadQualityvsBX.book(ib, _subsystem);
0160
0161
0162 if (_ptype == fOnline) {
0163 _xEvnMsmLS.book(_emap);
0164 _xBcnMsmLS.book(_emap);
0165 _xOrnMsmLS.book(_emap);
0166 _xBadQLS.book(_emap);
0167 _cSummaryvsLS_FED.book(ib, _emap, _subsystem);
0168 _cSummaryvsLS.book(ib, _subsystem);
0169 _cDataSizevsLS_FED.book(ib, _emap, _subsystem);
0170 }
0171
0172
0173
0174
0175
0176
0177
0178
0179
0180
0181
0182
0183
0184
0185 _ehashmap.initialize(_emap, hcaldqm::electronicsmap::fD2EHashMap);
0186 }
0187
0188 void RawTask::_resetMonitors(hcaldqm::UpdateFreq uf) {
0189
0190 DQTask::_resetMonitors(uf);
0191 }
0192
0193 void RawTask::_process(edm::Event const& e, edm::EventSetup const&) {
0194 edm::Handle<FEDRawDataCollection> craw;
0195 edm::Handle<HcalUnpackerReport> creport;
0196 if (!e.getByToken(_tokFEDs, craw))
0197 _logger.dqmthrow("Collection FEDRawDataCollection isn't available" + _tagFEDs.label() + " " + _tagFEDs.instance());
0198 if (!e.getByToken(_tokReport, creport))
0199 _logger.dqmthrow("Collection HcalUnpackerReport isn't available" + _tagReport.label() + " " +
0200 _tagReport.instance());
0201
0202
0203 int bx = e.bunchCrossing();
0204
0205 auto lumiCache = luminosityBlockCache(e.getLuminosityBlock().index());
0206 _currentLS = lumiCache->currentLS;
0207 _xQuality.reset();
0208 _xQuality = lumiCache->xQuality;
0209
0210
0211
0212
0213
0214
0215 if (_calibProcessing) {
0216 int nbadq = creport->badQualityDigis();
0217 if (nbadq >= _thresh_calib_nbadq)
0218 return;
0219 }
0220
0221 int nn = 0;
0222
0223
0224
0225
0226
0227 for (std::vector<DetId>::const_iterator it = creport->bad_quality_begin(); it != creport->bad_quality_end(); ++it) {
0228
0229 if (!HcalGenericDetId(*it).isHcalDetId())
0230 continue;
0231
0232
0233
0234 if (_xQuality.exists(HcalDetId(*it))) {
0235 HcalChannelStatus cs(it->rawId(), _xQuality.get(HcalDetId(*it)));
0236 if (cs.isBitSet(HcalChannelStatus::HcalCellMask) || cs.isBitSet(HcalChannelStatus::HcalCellDead))
0237 continue;
0238 }
0239
0240 nn++;
0241 HcalElectronicsId eid = HcalElectronicsId(_ehashmap.lookup(*it));
0242 _cBadQuality_depth.fill(HcalDetId(*it));
0243
0244 if (_ptype == fOnline)
0245 _xBadQLS.get(eid)++;
0246 if (_ptype != fOffline) {
0247 if (!eid.isVMEid()) {
0248 if (_filter_FEDsuTCA.filter(eid))
0249 continue;
0250 _cBadQuality_FEDuTCA.fill(eid);
0251 }
0252 }
0253 }
0254 _cBadQualityvsLS.fill(_currentLS, nn);
0255 _cBadQualityvsBX.fill(bx, nn);
0256
0257 if (_ptype != fOffline) {
0258 for (int fed = FEDNumbering::MINHCALFEDID; fed <= FEDNumbering::MAXHCALuTCAFEDID; fed++) {
0259
0260 if ((fed > FEDNumbering::MAXHCALFEDID && fed < FEDNumbering::MINHCALuTCAFEDID) ||
0261 fed > FEDNumbering::MAXHCALuTCAFEDID)
0262 continue;
0263 FEDRawData const& raw = craw->FEDData(fed);
0264 if (raw.size() < constants::RAW_EMPTY)
0265 continue;
0266
0267 if (fed <= FEDNumbering::MAXHCALFEDID)
0268 {
0269 HcalDCCHeader const* hdcc = (HcalDCCHeader const*)(raw.data());
0270 if (!hdcc)
0271 continue;
0272
0273 uint32_t bcn = hdcc->getBunchId();
0274 uint32_t orn = hdcc->getOrbitNumber() & 0x1F;
0275 uint32_t evn = hdcc->getDCCEventNumber();
0276 int dccId = hdcc->getSourceId() - constants::FED_VME_MIN;
0277
0278
0279 if (_ptype == fOnline) {
0280 HcalElectronicsId eid =
0281 HcalElectronicsId(constants::FIBERCH_MIN, constants::FIBER_VME_MIN, constants::SPIGOT_MIN, dccId);
0282 if (_filter_FEDsVME.filter(eid))
0283 continue;
0284 _cDataSizevsLS_FED.fill(eid, _currentLS, double(raw.size()) / 1024.);
0285 }
0286
0287
0288 HcalHTRData htr;
0289 for (int is = 0; is < HcalDCCHeader::SPIGOT_COUNT; is++) {
0290 int r = hdcc->getSpigotData(is, htr, raw.size());
0291 if (r != 0 || !htr.check())
0292 continue;
0293 HcalElectronicsId eid = HcalElectronicsId(constants::FIBERCH_MIN, constants::FIBER_VME_MIN, is, dccId);
0294 if (_filter_FEDsVME.filter(eid))
0295 continue;
0296
0297 uint32_t htr_evn = htr.getL1ANumber();
0298 uint32_t htr_orn = htr.getOrbitNumber();
0299 uint32_t htr_bcn = htr.getBunchNumber();
0300 bool qevn = (htr_evn != evn);
0301 bool qbcn = (htr_bcn != bcn);
0302 bool qorn = (htr_orn != orn);
0303 if (qevn) {
0304 if (_ptype == fOnline && is <= constants::SPIGOT_MAX)
0305 _xEvnMsmLS.get(eid)++;
0306 }
0307 if (qorn) {
0308 if (_ptype == fOnline && is <= constants::SPIGOT_MAX)
0309 _xOrnMsmLS.get(eid)++;
0310 }
0311 if (qbcn) {
0312 if (_ptype == fOnline && is <= constants::SPIGOT_MAX)
0313 _xBcnMsmLS.get(eid)++;
0314 }
0315 }
0316 } else
0317 {
0318 hcal::AMC13Header const* hamc13 = (hcal::AMC13Header const*)raw.data();
0319 if (!hamc13)
0320 continue;
0321
0322
0323 if (_ptype == fOnline) {
0324 std::pair<uint16_t, uint16_t> cspair = utilities::fed2crate(fed);
0325 HcalElectronicsId eid = HcalElectronicsId(cspair.first, cspair.second, FIBER_uTCA_MIN1, FIBERCH_MIN, false);
0326 if (_filter_FEDsuTCA.filter(eid))
0327 continue;
0328 _cDataSizevsLS_FED.fill(eid, _currentLS, double(raw.size()) / 1024.);
0329 }
0330
0331 uint32_t bcn = hamc13->bunchId();
0332 uint32_t orn = hamc13->orbitNumber() & 0xFFFF;
0333 uint32_t evn = hamc13->l1aNumber();
0334 int namc = hamc13->NAMC();
0335
0336 for (int iamc = 0; iamc < namc; iamc++) {
0337 int slot = hamc13->AMCSlot(iamc);
0338 int crate = hamc13->AMCId(iamc) & 0xFF;
0339 HcalElectronicsId eid(crate, slot, FIBER_uTCA_MIN1, FIBERCH_MIN, false);
0340 if (_filter_FEDsuTCA.filter(eid))
0341 continue;
0342 HcalUHTRData uhtr(hamc13->AMCPayload(iamc), hamc13->AMCSize(iamc));
0343
0344 uint32_t uhtr_evn = uhtr.l1ANumber();
0345 uint32_t uhtr_bcn = uhtr.bunchNumber();
0346 uint32_t uhtr_orn = uhtr.orbitNumber();
0347 bool qevn = (uhtr_evn != evn);
0348 bool qbcn = (uhtr_bcn != bcn);
0349 bool qorn = (uhtr_orn != orn);
0350 if (qevn) {
0351 _cEvnMsm_ElectronicsuTCA.fill(eid);
0352
0353 if (_ptype == fOnline)
0354 _xEvnMsmLS.get(eid)++;
0355 }
0356 if (qorn) {
0357 _cOrnMsm_ElectronicsuTCA.fill(eid);
0358
0359 if (_ptype == fOnline)
0360 _xOrnMsmLS.get(eid)++;
0361 }
0362 if (qbcn) {
0363 _cBcnMsm_ElectronicsuTCA.fill(eid);
0364
0365 if (_ptype == fOnline)
0366 _xBcnMsmLS.get(eid)++;
0367 }
0368 }
0369 }
0370 }
0371 }
0372 }
0373
0374 std::shared_ptr<hcaldqm::Cache> RawTask::globalBeginLuminosityBlock(edm::LuminosityBlock const& lb,
0375 edm::EventSetup const& es) const {
0376 return DQTask::globalBeginLuminosityBlock(lb, es);
0377
0378
0379
0380 }
0381
0382 void RawTask::globalEndLuminosityBlock(edm::LuminosityBlock const& lb, edm::EventSetup const& es) {
0383 auto lumiCache = luminosityBlockCache(lb.index());
0384 _currentLS = lumiCache->currentLS;
0385 _evsPerLS = lumiCache->EvtCntLS;
0386
0387 if (_ptype != fOnline)
0388 return;
0389
0390
0391
0392
0393 for (std::vector<uint32_t>::const_iterator it = _vhashFEDs.begin(); it != _vhashFEDs.end(); ++it) {
0394 flag::Flag fSum("RAW");
0395 HcalElectronicsId eid = HcalElectronicsId(*it);
0396
0397 std::vector<uint32_t>::const_iterator cit = std::find(_vcdaqEids.begin(), _vcdaqEids.end(), *it);
0398 if (cit == _vcdaqEids.end()) {
0399
0400 for (uint32_t iflag = 0; iflag < _vflags.size(); iflag++)
0401 _cSummaryvsLS_FED.setBinContent(eid, _currentLS, int(iflag), int(flag::fNCDAQ));
0402 _cSummaryvsLS.setBinContent(eid, _currentLS, int(flag::fNCDAQ));
0403 continue;
0404 }
0405
0406
0407 if (hcaldqm::utilities::isFEDHBHE(eid) || hcaldqm::utilities::isFEDHF(eid) || hcaldqm::utilities::isFEDHO(eid)) {
0408 if (_xEvnMsmLS.get(eid) > 0)
0409 _vflags[fEvnMsm]._state = flag::fBAD;
0410 else
0411 _vflags[fEvnMsm]._state = flag::fGOOD;
0412 if (_xBcnMsmLS.get(eid) > 0)
0413 _vflags[fBcnMsm]._state = flag::fBAD;
0414 else
0415 _vflags[fBcnMsm]._state = flag::fGOOD;
0416 if (_xOrnMsmLS.get(eid) > 0)
0417 _vflags[fOrnMsm]._state = flag::fBAD;
0418 else
0419 _vflags[fOrnMsm]._state = flag::fGOOD;
0420 if (double(_xBadQLS.get(eid)) > double(12 * _evsPerLS))
0421 _vflags[fBadQ]._state = flag::fBAD;
0422 else if (_xBadQLS.get(eid) > 0)
0423 _vflags[fBadQ]._state = flag::fPROBLEMATIC;
0424 else
0425 _vflags[fBadQ]._state = flag::fGOOD;
0426 }
0427
0428 int iflag = 0;
0429
0430
0431
0432 for (std::vector<flag::Flag>::iterator ft = _vflags.begin(); ft != _vflags.end(); ++ft) {
0433 _cSummaryvsLS_FED.setBinContent(eid, _currentLS, int(iflag), ft->_state);
0434 fSum += (*ft);
0435 iflag++;
0436
0437
0438
0439 ft->reset();
0440 }
0441 _cSummaryvsLS.setBinContent(eid, _currentLS, fSum._state);
0442 }
0443
0444
0445 _xOrnMsmLS.reset();
0446 _xEvnMsmLS.reset();
0447 _xBcnMsmLS.reset();
0448 _xBadQLS.reset();
0449
0450
0451 DQTask::globalEndLuminosityBlock(lb, es);
0452 }
0453
0454 DEFINE_FWK_MODULE(RawTask);