CMS 3D CMS Logo

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Groups Pages
DigiTask.cc
Go to the documentation of this file.
2 
3 using namespace hcaldqm;
4 using namespace hcaldqm::constants;
5 using namespace hcaldqm::filter;
6 
8  : DQTask(ps), hcalDbServiceToken_(esConsumes<HcalDbService, HcalDbRecord, edm::Transition::BeginRun>()) {
9  _tagQIE11 = ps.getUntrackedParameter<edm::InputTag>("tagHE", edm::InputTag("hcalDigis"));
10  _tagHO = ps.getUntrackedParameter<edm::InputTag>("tagHO", edm::InputTag("hcalDigis"));
11  _tagQIE10 = ps.getUntrackedParameter<edm::InputTag>("tagHF", edm::InputTag("hcalDigis"));
12 
13  _tokQIE11 = consumes<QIE11DigiCollection>(_tagQIE11);
14  _tokHO = consumes<HODigiCollection>(_tagHO);
15  _tokQIE10 = consumes<QIE10DigiCollection>(_tagQIE10);
16 
17  _cutSumQ_HBHE = ps.getUntrackedParameter<double>("cutSumQ_HBHE", 20);
18  _cutSumQ_HO = ps.getUntrackedParameter<double>("cutSumQ_HO", 20);
19  _cutSumQ_HF = ps.getUntrackedParameter<double>("cutSumQ_HF", 20);
20  _thresh_unihf = ps.getUntrackedParameter<double>("thresh_unihf", 0.2);
21  _thresh_led = ps.getUntrackedParameter<double>("thresh_led", 20);
22 
23  _vflags.resize(nDigiFlag);
24  _vflags[fUni] = hcaldqm::flag::Flag("UniSlotHF");
25  _vflags[fDigiSize] = hcaldqm::flag::Flag("DigiSize");
26  _vflags[fNChsHF] = hcaldqm::flag::Flag("NChsHF");
27  _vflags[fUnknownIds] = hcaldqm::flag::Flag("UnknownIds");
28  _vflags[fLED] = hcaldqm::flag::Flag("LEDMisfire");
29  _vflags[fCapId] = hcaldqm::flag::Flag("BadCapId");
30 
31  _qie10InConditions = ps.getUntrackedParameter<bool>("qie10InConditions", true);
32 
33  // Get reference digi sizes. Convert from unsigned to signed int, because <digi>::size()/samples() return ints for some reason.
34  std::vector<uint32_t> vrefDigiSize = ps.getUntrackedParameter<std::vector<uint32_t>>("refDigiSize");
35  _refDigiSize[HcalBarrel] = (int)vrefDigiSize[0];
36  _refDigiSize[HcalEndcap] = (int)vrefDigiSize[1];
37  _refDigiSize[HcalOuter] = (int)vrefDigiSize[2];
38  _refDigiSize[HcalForward] = (int)vrefDigiSize[3];
39 
40  // (capid - BX) % 4 to 1
41  _capidmbx[HcalBarrel] = 1;
42  _capidmbx[HcalEndcap] = 1;
43  _capidmbx[HcalOuter] = 1;
45 }
46 
47 /* virtual */ void DigiTask::bookHistograms(DQMStore::IBooker& ib, edm::Run const& r, edm::EventSetup const& es) {
48  DQTask::bookHistograms(ib, r, es);
49 
50  // GET WHAT YOU NEED
52  _emap = dbs->getHcalMapping();
53 
54  // Book LED calibration channels from emap
55  std::vector<HcalElectronicsId> eids = _emap->allElectronicsId();
56  for (unsigned i = 0; i < eids.size(); i++) {
57  HcalElectronicsId eid = eids[i];
58  DetId id = _emap->lookup(eid);
59  if (HcalGenericDetId(id.rawId()).isHcalCalibDetId()) {
60  HcalCalibDetId calibId(id);
62  HcalSubdetector this_subdet = HcalEmpty;
63  switch (calibId.hcalSubdet()) {
64  case HcalBarrel:
65  this_subdet = HcalBarrel;
66  break;
67  case HcalEndcap:
68  this_subdet = HcalEndcap;
69  break;
70  case HcalOuter:
71  this_subdet = HcalOuter;
72  break;
73  case HcalForward:
74  this_subdet = HcalForward;
75  break;
76  default:
77  this_subdet = HcalEmpty;
78  break;
79  }
80  _ledCalibrationChannels[this_subdet].push_back(
81  HcalDetId(HcalOther, calibId.ieta(), calibId.iphi(), calibId.cboxChannel()));
82  }
83  }
84  }
85 
86  std::vector<uint32_t> vVME;
87  std::vector<uint32_t> vuTCA;
88  vVME.push_back(
90  vuTCA.push_back(HcalElectronicsId(CRATE_uTCA_MIN, SLOT_uTCA_MIN, FIBER_uTCA_MIN1, FIBERCH_MIN, false).rawId());
93 
94  // Filters for QIE8 vs QIE10/11
95  std::vector<uint32_t> vhashQIE8;
98 
99  std::vector<uint32_t> vhashQIE1011;
100  vhashQIE1011.push_back(
102  vhashQIE1011.push_back(
104  vhashQIE1011.push_back(
107 
108  std::vector<uint32_t> vhash_TDC2bit;
109  vhash_TDC2bit.push_back(
111  vhash_TDC2bit.push_back(
114 
115  std::vector<uint32_t> vhash_TDC6bit;
116  vhash_TDC6bit.push_back(
118  vhash_TDC6bit.push_back(
120  vhash_TDC6bit.push_back(
122  vhash_TDC6bit.push_back(
125 
126  // INITIALIZE FIRST
128  "ADC",
132  0);
134  "fC",
138  0);
140  "SumQ",
144  0);
146  "SumQ",
151  0);
153  "SumQvsLS",
157  0);
158 
160  "ADC",
164  0);
166  "fC",
170  0);
172  "SumQ",
176  0);
178  "SumQvsLS",
182  0);
183 
185  "TimingCut",
189  0);
191  "TimingHighCut",
195  0);
197  "TimingCut",
202  0);
204  "TimingvsLS",
208  0);
209 
210  // Occupancy w/o a cut
212  "OccupancyvsLS",
216  0);
218  "Occupancy",
223  0);
224 
225  // Occupancy w/ a cut
227  "OccupancyCutvsLS",
231  0);
233  "OccupancyCut",
238  0);
239 
240  // Digi size
242  "DigiSize",
246  0);
248  "ADCvsTS",
253  0);
255  "ADCvsTS",
260  0);
261 
263  "LETDCTimevsADC",
269  "LETDCvsADC",
275  "LETDCvsADC",
281  "LETDCvsTS",
287  "LETDCvsTS",
292 
294  "LETDCTime",
299  "LETDCTime",
304  0);
305 
307  "BadTDCValues",
312  "BadTDCvsBX",
317  "BadTDCvsLS",
322  "BadTDCCount",
327  0);
328 
329  if (_ptype == fOnline || _ptype == fLocal) {
331  "Occupancy",
336  0);
338  "Occupancy",
343  0);
344  }
345 
346  // INITIALIZE HISTOGRAMS that are only for Online
347  if (_ptype == fOnline) {
348  // Charge sharing
350  "Q2Q12vsLS",
354  0);
356  "SumQvsBX",
360  0);
362  "SumQvsBX",
366  0);
368  "DigiSizevsLS",
372  0);
374  "TimingCutvsiphi",
378  0);
380  "TimingCutvsieta",
384  0);
386  "Occupancyvsiphi",
390  0);
392  "Occupancyvsieta",
396  0);
398  "OccupancyCutvsiphi",
402  0);
404  "OccupancyCutvsieta",
408  0);
410  "OccupancyCutvsLS",
414  0);
416  "OccupancyCutvsBX",
420  0);
421  // _cOccupancyCutvsSlotvsLS_HFPM.initialize(_name,
422  // "OccupancyCutvsSlotvsLS", hcaldqm::hashfunctions::fSubdetPM,
423  // new hcaldqm::quantity::LumiSection(_maxLS),
424  // new hcaldqm::quantity::ElectronicsQuantity(hcaldqm::quantity::fSlotuTCA),
425  // new hcaldqm::quantity::ValueQuantity(hcaldqm::quantity::fN),0);
427  "OccupancyCutvsiphivsLS",
432  0);
433  }
435  "CapID",
439 
440  for (int i = 0; i < 4; ++i) {
442  "CapID",
446  0);
447  }
448 
449  if (_ptype != fOffline) { // hidefed2crate
450  std::vector<int> vFEDs = hcaldqm::utilities::getFEDList(_emap);
451  std::vector<int> vFEDsVME = hcaldqm::utilities::getFEDVMEList(_emap);
452  std::vector<int> vFEDsuTCA = hcaldqm::utilities::getFEDuTCAList(_emap);
453 
454  if (_ptype == fOnline) {
456  "CapID",
460  0);
461 
463  "CapID",
467  0);
468  }
469 
470  std::vector<uint32_t> vFEDHF;
471  vFEDHF.push_back(HcalElectronicsId(22, SLOT_uTCA_MIN, FIBER_uTCA_MIN1, FIBERCH_MIN, false).rawId());
472  vFEDHF.push_back(HcalElectronicsId(22, SLOT_uTCA_MIN + 6, FIBER_uTCA_MIN1, FIBERCH_MIN, false).rawId());
473  vFEDHF.push_back(HcalElectronicsId(29, SLOT_uTCA_MIN, FIBER_uTCA_MIN1, FIBERCH_MIN, false).rawId());
474  vFEDHF.push_back(HcalElectronicsId(29, SLOT_uTCA_MIN + 6, FIBER_uTCA_MIN1, FIBERCH_MIN, false).rawId());
475  vFEDHF.push_back(HcalElectronicsId(32, SLOT_uTCA_MIN, FIBER_uTCA_MIN1, FIBERCH_MIN, false).rawId());
476  vFEDHF.push_back(HcalElectronicsId(32, SLOT_uTCA_MIN + 6, FIBER_uTCA_MIN1, FIBERCH_MIN, false).rawId());
477 
478  // initialize filters
480 
481  // push the rawIds of each fed into the vector...
482  for (std::vector<int>::const_iterator it = vFEDsVME.begin(); it != vFEDsVME.end(); ++it)
483  _vhashFEDs.push_back(
485  for (std::vector<int>::const_iterator it = vFEDsuTCA.begin(); it != vFEDsuTCA.end(); ++it) {
486  std::pair<uint16_t, uint16_t> cspair = utilities::fed2crate(*it);
487  _vhashFEDs.push_back(HcalElectronicsId(cspair.first, cspair.second, FIBER_uTCA_MIN1, FIBERCH_MIN, false).rawId());
488  }
489 
491  "ShapeCut",
495  0);
496 
498  "TimingCut",
503  0);
505  "TimingCut",
507  new hcaldqm::quantity::FEDQuantity(vFEDsuTCA),
510  0);
512  "TimingvsLS",
516  0);
517 
519  "Occupancy",
524  0);
526  "Occupancy",
528  new hcaldqm::quantity::FEDQuantity(vFEDsuTCA),
531  0);
532 
534  "OccupancyCut",
539  0);
541  "OccupancyCut",
543  new hcaldqm::quantity::FEDQuantity(vFEDsuTCA),
546  0);
547 
549  "DigiSize",
553  0);
554 
555  if (_ptype == fOnline) {
557  "SummaryvsLS",
562  0);
564  "SummaryvsLS",
568  0);
569 
576  }
577  }
578  if (_ptype != fLocal) {
580  "LED_ADCvsBX",
585  0);
586 
588  "LED_CUCountvsLS",
592  0);
593  if (_ptype == fOnline) {
595  "LED_CUCountvsLSmod60",
599  0);
600  }
601  }
602 
603  // BOOK HISTOGRAMS
604  char cutstr[200];
605  sprintf(cutstr, "_SumQHBHE%dHO%dHF%d", int(_cutSumQ_HBHE), int(_cutSumQ_HO), int(_cutSumQ_HF));
606  char cutstr2[200];
607  sprintf(cutstr2, "_SumQHF%d", int(_cutSumQ_HF));
608 
620 
621  if (_ptype != fOffline) { // hidefed2crate
631  }
632  if (_ptype != fOffline) { // else book per-lumi later.
635  }
636 
641 
644 
652 
657 
659  if (_ptype == fOnline) {
660  _cCapid_BadvsFEDvsLS.book(ib, _subsystem, "BadvsLS");
661  _cCapid_BadvsFEDvsLSmod60.book(ib, _subsystem, "BadvsLSmod60");
662  }
663  for (int i = 0; i < 4; ++i) {
664  constexpr unsigned int kSize = 32;
665  char aux[kSize];
666  snprintf(aux, kSize, "%d_uTCA", i);
668  }
669 
670  if (_ptype != fLocal) {
673  if (_ptype == fOnline) {
675  }
676  }
677 
678  // BOOK HISTOGRAMS that are only for Online
681 
682  if (_ptype == fOnline || _ptype == fLocal) {
685  }
686 
687  if (_ptype == fOnline) {
700  // _cOccupancyCutvsSlotvsLS_HFPM.book(ib, _emap, _filter_QIE1011, _subsystem);
704 
706  _xNChs.book(_emap);
708  _xUni.book(_emap);
711 
712  // just PER HF FED RECORD THE #CHANNELS
713  // ONLY WAY TO DO THAT AUTOMATICALLY AND W/O HARDCODING 1728
714  // or ANY OTHER VALUES LIKE 2592, 2192
715  std::vector<HcalGenericDetId> gids = _emap->allPrecisionId();
716  for (std::vector<HcalGenericDetId>::const_iterator it = gids.begin(); it != gids.end(); ++it) {
717  if (!it->isHcalDetId())
718  continue;
719  HcalDetId did(it->rawId());
720  if (_xQuality.exists(did)) {
721  HcalChannelStatus cs(it->rawId(), _xQuality.get(HcalDetId(*it)));
723  continue;
724  }
726  _xNChsNominal.get(eid)++; // he will know the nominal #channels per FED
727  }
728  }
729 
730  {
731  // MARK THESE HISTOGRAMS AS LUMI BASED FOR OFFLINE PROCESSING
732  auto scope = DQMStore::IBooker::UseLumiScope(ib);
733  if (_ptype == fOffline) {
734  //_cDigiSize_FED.setLumiFlag();
737  }
738 
739  // book Number of Events vs LS histogram
740  ib.setCurrentFolder(_subsystem + "/RunInfo");
741  meNumEvents1LS = ib.book1DD("NumberOfEvents", "NumberOfEvents", 1, 0, 1);
742 
743  // book the flag for unknown ids and the online guy as well
744  ib.setCurrentFolder(_subsystem + "/" + _name);
745  meUnknownIds1LS = ib.book1DD("UnknownIds", "UnknownIds", 1, 0, 1);
746  _unknownIdsPresent = false;
747  }
748 }
749 
751  DQTask::_resetMonitors(uf);
752 
753  switch (uf) {
754  case hcaldqm::f1LS:
755  _unknownIdsPresent = false;
756  break;
757  case hcaldqm::f50LS:
758  // ^^^ONLINE ONLY!
759  if (_ptype == fOnline)
761  // ^^^
762  break;
763  default:
764  break;
765  }
766 }
767 
768 /* virtual */ void DigiTask::_process(edm::Event const& e, edm::EventSetup const&) {
772 
773  if (!e.getByToken(_tokQIE11, c_QIE11))
774  _logger.dqmthrow("Collection QIE11DigiCollection isn't available" + _tagQIE11.label() + " " + _tagQIE11.instance());
775  if (!e.getByToken(_tokHO, c_ho))
776  _logger.dqmthrow("Collection HODigiCollection isn't available" + _tagHO.label() + " " + _tagHO.instance());
777  if (!e.getByToken(_tokQIE10, c_QIE10))
778  _logger.dqmthrow("Collection QIE10DigiCollection isn't available" + _tagQIE10.label() + " " + _tagQIE10.instance());
779 
780  // extract some info per event
781  int bx = e.bunchCrossing();
782  meNumEvents1LS->Fill(0.5); // just increment
783 
784  auto lumiCache = luminosityBlockCache(e.getLuminosityBlock().index());
785  _currentLS = lumiCache->currentLS;
786  _xQuality.reset();
787  _xQuality = lumiCache->xQuality;
788 
789  if (_ptype == fOnline &&
790  lumiCache->EvtCntLS == 1) { // Reset the bin for _cCapid_BadvsFEDvsLSmod60 at the beginning of each new LS
791  for (std::vector<uint32_t>::const_iterator it = _vhashFEDs.begin(); it != _vhashFEDs.end(); ++it) {
793  _cCapid_BadvsFEDvsLSmod60.setBinContent(eid, _currentLS % 50, 0);
794  }
795  }
796 
797  // To fill histograms outside of the loop, you need to determine if there were
798  // any valid det ids first
799  uint32_t rawidValid = 0;
800  uint32_t rawidHBValid = 0;
801  uint32_t rawidHEValid = 0;
802 
803  // HB collection
804  int numChs = 0;
805  int numChsCut = 0;
806  int numChsHE = 0;
807  int numChsCutHE = 0;
808 
809  // HB+HE QIE11 collection
810  for (QIE11DigiCollection::const_iterator it = c_QIE11->begin(); it != c_QIE11->end(); ++it) {
811  const QIE11DataFrame digi = static_cast<const QIE11DataFrame>(*it);
812 
813  // Explicit check on the DetIds present in the Collection
814  HcalDetId const& did = digi.detid();
815  if ((did.subdet() != HcalBarrel) && (did.subdet() != HcalEndcap)) {
816  // LED monitoring from calibration channels
817  if (_ptype != fLocal) {
818  if (did.subdet() == HcalOther) {
819  HcalOtherDetId hodid(digi.detid());
820  if (hodid.subdet() == HcalCalibration) {
823  did) != _ledCalibrationChannels[HcalEndcap].end()) {
824  bool channelLEDSignalPresent = false;
825  for (int i = 0; i < digi.samples(); i++) {
826  _LED_ADCvsBX_Subdet.fill(HcalDetId(HcalEndcap, 16, 1, 1), bx, digi[i].adc());
827 
828  if (digi[i].adc() > _thresh_led) {
829  channelLEDSignalPresent = true;
830  }
831  }
832  if (channelLEDSignalPresent) {
833  _LED_CUCountvsLS_Subdet.fill(HcalDetId(HcalEndcap, 16, 1, 1), _currentLS);
834  if (_ptype == fOnline) {
835  _LED_CUCountvsLSmod60_Subdet.fill(HcalDetId(HcalEndcap, 16, 1, 1), _currentLS % 60);
836  }
837  }
841  bool channelLEDSignalPresent = false;
842  for (int i = 0; i < digi.samples(); i++) {
843  _LED_ADCvsBX_Subdet.fill(HcalDetId(HcalBarrel, 1, 1, 1), bx, digi[i].adc());
844 
845  if (digi[i].adc() > _thresh_led) {
846  channelLEDSignalPresent = true;
847  }
848  }
849  if (channelLEDSignalPresent) {
850  _LED_CUCountvsLS_Subdet.fill(HcalDetId(HcalBarrel, 1, 1, 1), _currentLS);
851  if (_ptype == fOnline) {
852  _LED_CUCountvsLSmod60_Subdet.fill(HcalDetId(HcalBarrel, 1, 1, 1), _currentLS % 60);
853  }
854  }
855  }
856  }
857  }
858  }
859  continue;
860  }
861 
862  uint32_t rawid = _ehashmap.lookup(did);
863  if (rawid == 0) {
864  meUnknownIds1LS->Fill(1);
865  _unknownIdsPresent = true;
866  continue;
867  } else {
868  if (did.subdet() == HcalBarrel) {
869  rawidHBValid = did.rawId();
870  } else if (did.subdet() == HcalEndcap) {
871  rawidHEValid = did.rawId();
872  }
873  }
874  HcalElectronicsId const& eid(rawid);
875 
876  // filter out channels that are masked out
877  if (_xQuality.exists(did)) {
878  HcalChannelStatus cs(did.rawId(), _xQuality.get(did));
880  continue;
881  }
882 
883  // (capid - BX) % 4
884  if (_ptype == fOnline) {
885  short soi = -1;
886  for (int i = 0; i < digi.samples(); i++) {
887  if (digi[i].soi()) {
888  soi = i;
889  break;
890  }
891  }
892  short this_capidmbx = (digi[soi].capid() - bx) % 4;
893  if (this_capidmbx < 0) {
894  this_capidmbx += 4;
895  }
896  _cCapidMinusBXmod4_SubdetPM.fill(did, this_capidmbx);
897  bool good_capidmbx = (_capidmbx[did.subdet()] == this_capidmbx);
898  if (!good_capidmbx) {
899  _xBadCapid.get(eid)++;
900  _cCapid_BadvsFEDvsLS.fill(eid, _currentLS);
901  _cCapid_BadvsFEDvsLSmod60.fill(eid, _currentLS % 60);
902  }
903  if (!eid.isVMEid()) {
904  _cCapidMinusBXmod4_CrateSlotuTCA[this_capidmbx].fill(eid);
905  }
906  }
907 
908  CaloSamples digi_fC = hcaldqm::utilities::loadADC2fCDB<QIE11DataFrame>(_dbService, did, digi);
909  double sumQ = hcaldqm::utilities::sumQDB<QIE11DataFrame>(_dbService, digi_fC, did, digi, 0, digi.samples() - 1);
910 
911  _cSumQ_SubdetPM_QIE1011.fill(did, sumQ);
912  _cOccupancy_depth.fill(did);
913  if (_ptype == fOnline || _ptype == fLocal) {
914  _cOccupancy_Crate.fill(eid);
916  }
917  if (_ptype == fOnline) {
918  _cDigiSizevsLS_FED.fill(eid, _currentLS, digi.samples());
919  digi.samples() != _refDigiSize[did.subdet()] ? _xDigiSize.get(eid)++ : _xDigiSize.get(eid) += 0;
922  }
923  _cDigiSize_Crate.fill(eid, digi.samples());
924  if (_ptype != fOffline) { // hidefed2crate
925  _cDigiSize_FED.fill(eid, digi.samples());
926  if (!eid.isVMEid()) {
929  /*
930  if (!digi.validate(0, digi.size()))
931  {
932  _cCapIdRots_depth.fill(did);
933  _cCapIdRots_FEDuTCA.fill(eid, 1);
934  }*/
935  }
936  }
937  for (int i = 0; i < digi.samples(); i++) {
938  double q = hcaldqm::utilities::adc2fCDBMinusPedestal<QIE11DataFrame>(_dbService, digi_fC, did, digi, i);
939  _cADC_SubdetPM_QIE1011.fill(did, digi[i].adc());
940  _cfC_SubdetPM_QIE1011.fill(did, q);
941 
942  if (did.subdet() == HcalBarrel) {
943  _cLETDCvsADC_2bit_SubdetPM.fill(did, digi[i].adc(), digi[i].tdc());
944  _cLETDCvsTS_2bit_SubdetPM.fill(did, (int)i, digi[i].tdc());
945 
946  if (digi[i].tdc() < 2) {
947  double time = i * 25. + (digi[i].tdc() * 12.5);
948  _cLETDCTime_SubdetPM.fill(did, time);
949  _cLETDCTime_depth.fill(did, time);
950  _cLETDCTimevsADC_SubdetPM.fill(did, digi[i].adc(), time);
951  }
952  } else if (did.subdet() == HcalEndcap) {
953  _cLETDCvsADC_6bit_SubdetPM.fill(did, digi[i].adc(), digi[i].tdc());
954  _cLETDCvsTS_6bit_SubdetPM.fill(did, (int)i, digi[i].tdc());
955  if (digi[i].tdc() < 50) {
956  double time = i * 25. + (digi[i].tdc() / 2.);
957  _cLETDCTime_SubdetPM.fill(did, time);
958  _cLETDCTime_depth.fill(did, time);
959  _cLETDCTimevsADC_SubdetPM.fill(did, digi[i].adc(), time);
960  }
961  // Bad TDC values: 50-61 should never happen in QIE10 or QIE11, but we saw some in 2017 data.
962  if ((50 <= digi[i].tdc()) && (digi[i].tdc() <= 61)) {
963  _cBadTDCValues_SubdetPM.fill(did, digi[i].tdc());
964  _cBadTDCvsBX_SubdetPM.fill(did, bx);
965  _cBadTDCvsLS_SubdetPM.fill(did, _currentLS);
967  }
968  }
969  if (_ptype != fOffline) { // hidefed2crate
970  _cADCvsTS_SubdetPM_QIE1011.fill(did, i, digi[i].adc());
971  if (sumQ > _cutSumQ_HBHE) {
972  _cShapeCut_FED.fill(eid, i, q);
973  }
974  }
975  }
976 
977  if (sumQ > _cutSumQ_HBHE) {
978  //double timing = hcaldqm::utilities::aveTS_v10<QIE11DataFrame>(digi, 2.5, 0,digi.samples()-1);
979  // without pedestal substraction, request from https://gitlab.cern.ch/cmshcal/docs/-/issues/106
980  double timing =
981  hcaldqm::utilities::aveTSDB<QIE11DataFrame>(_dbService, digi_fC, did, digi, 0, digi.samples() - 1, false);
982  _cTimingCut_SubdetPM.fill(did, timing);
983  // with pedestal substraction for energetic hits
984  if (sumQ > 100. * _cutSumQ_HBHE)
986  did, hcaldqm::utilities::aveTSDB<QIE11DataFrame>(_dbService, digi_fC, did, digi, 0, digi.samples() - 1));
987  _cTimingCut_depth.fill(did, timing);
989  _cTimingCutvsLS_SubdetPM.fill(did, _currentLS, timing);
990  if (_ptype != fOffline) { // hidefed2crate
991  _cTimingCutvsLS_FED.fill(eid, _currentLS, timing);
992  }
993  _cSumQ_depth.fill(did, sumQ);
994  _cSumQvsLS_SubdetPM_QIE1011.fill(did, _currentLS, sumQ);
995  if (_ptype == fOnline) {
996  _cSumQvsBX_SubdetPM_QIE1011.fill(did, bx, sumQ);
997  _cTimingCutvsiphi_SubdetPM.fill(did, timing);
998  _cTimingCutvsieta_Subdet.fill(did, timing);
1001  _cOccupancyCutvsiphivsLS_SubdetPM.fill(did, _currentLS);
1002  }
1003  if (_ptype != fOffline) { // hidefed2crate
1004  if (!eid.isVMEid()) {
1005  _cTimingCut_FEDuTCA.fill(eid, timing);
1006  _cTimingCut_ElectronicsuTCA.fill(eid, timing);
1009  }
1010  }
1011  did.subdet() == HcalBarrel ? numChsCut++ : numChsCutHE++;
1012  }
1013  did.subdet() == HcalBarrel ? numChs++ : numChsHE++;
1014  }
1015 
1016  if (rawidHBValid != 0 && rawidHEValid != 0) {
1017  _cOccupancyvsLS_Subdet.fill(HcalDetId(rawidHBValid), _currentLS, numChs);
1018  _cOccupancyvsLS_Subdet.fill(HcalDetId(rawidHEValid), _currentLS, numChsHE);
1019  // ONLINE ONLY!
1020  if (_ptype == fOnline) {
1021  _cOccupancyCutvsLS_Subdet.fill(HcalDetId(rawidHBValid), _currentLS, numChsCut);
1022  _cOccupancyCutvsBX_Subdet.fill(HcalDetId(rawidHBValid), bx, numChsCut);
1023  _cOccupancyCutvsLS_Subdet.fill(HcalDetId(rawidHEValid), _currentLS, numChsCutHE);
1024  _cOccupancyCutvsBX_Subdet.fill(HcalDetId(rawidHEValid), bx, numChsCutHE);
1025  }
1026  // ^^^ONLINE ONLY!
1027  }
1028  numChs = 0;
1029  numChsCut = 0;
1030 
1031  // reset
1032  rawidValid = 0;
1033 
1034  // HO collection
1035  for (HODigiCollection::const_iterator it = c_ho->begin(); it != c_ho->end(); ++it) {
1036  const HODataFrame digi = (const HODataFrame)(*it);
1037  // Explicit check on the DetIds present in the Collection
1038  HcalDetId const& did = it->id();
1039  if (did.subdet() != HcalOuter) {
1040  // LED monitoring from calibration channels
1041  if (_ptype != fLocal) {
1042  if (did.subdet() == HcalOther) {
1043  HcalOtherDetId hodid(did);
1044  if (hodid.subdet() == HcalCalibration) {
1047  bool channelLEDSignalPresent = false;
1048  for (int i = 0; i < digi.size(); i++) {
1049  _LED_ADCvsBX_Subdet.fill(HcalDetId(HcalOuter, 1, 1, 4), bx, digi[i].adc());
1050 
1051  if (digi[i].adc() > _thresh_led) {
1052  channelLEDSignalPresent = true;
1053  }
1054  }
1055  if (channelLEDSignalPresent) {
1056  _LED_CUCountvsLS_Subdet.fill(HcalDetId(HcalOuter, 1, 1, 4), _currentLS);
1057  if (_ptype == fOnline) {
1058  _LED_CUCountvsLSmod60_Subdet.fill(HcalDetId(HcalOuter, 1, 1, 4), _currentLS % 60);
1059  }
1060  }
1061  }
1062  }
1063  }
1064  }
1065  continue;
1066  }
1067  uint32_t rawid = _ehashmap.lookup(did);
1068  if (rawid == 0) {
1069  meUnknownIds1LS->Fill(1);
1070  _unknownIdsPresent = true;
1071  continue;
1072  } else {
1073  rawidValid = did.rawId();
1074  }
1075  HcalElectronicsId const& eid(rawid);
1076 
1077  // filter out channels that are masked out
1078  if (_xQuality.exists(did)) {
1079  HcalChannelStatus cs(did.rawId(), _xQuality.get(did));
1081  continue;
1082  }
1083 
1084  if (_ptype == fOnline) {
1085  short this_capidmbx = (it->sample(it->presamples()).capid() - bx) % 4;
1086  if (this_capidmbx < 0) {
1087  this_capidmbx += 4;
1088  }
1089  _cCapidMinusBXmod4_SubdetPM.fill(did, this_capidmbx);
1090  bool good_capidmbx = (_capidmbx[did.subdet()] == this_capidmbx);
1091  if (!good_capidmbx) {
1092  _xBadCapid.get(eid)++;
1093  _cCapid_BadvsFEDvsLS.fill(eid, _currentLS);
1094  _cCapid_BadvsFEDvsLSmod60.fill(eid, _currentLS % 60);
1095  }
1096  if (!eid.isVMEid()) {
1097  _cCapidMinusBXmod4_CrateSlotuTCA[this_capidmbx].fill(eid);
1098  }
1099  }
1100 
1101  //double sumQ = hcaldqm::utilities::sumQ<HODataFrame>(*it, 8.5, 0, it->size()-1);
1102  CaloSamples digi_fC = hcaldqm::utilities::loadADC2fCDB<HODataFrame>(_dbService, did, *it);
1103  double sumQ = hcaldqm::utilities::sumQDB<HODataFrame>(_dbService, digi_fC, did, *it, 0, it->size() - 1);
1104 
1105  _cSumQ_SubdetPM.fill(did, sumQ);
1106  _cOccupancy_depth.fill(did);
1107  if (_ptype == fOnline) {
1108  _cDigiSizevsLS_FED.fill(eid, _currentLS, it->size());
1109  it->size() != _refDigiSize[did.subdet()] ? _xDigiSize.get(eid)++ : _xDigiSize.get(eid) += 0;
1112  }
1113  _cDigiSize_Crate.fill(eid, it->size());
1114  if (_ptype != fOffline) { // hidefed2crate
1115  _cDigiSize_FED.fill(eid, it->size());
1116  if (!eid.isVMEid()) {
1119  /*
1120  if (!it->validate(0, it->size()))
1121  _cCapIdRots_FEDuTCA.fill(eid, 1);*/
1122  }
1123  }
1124 
1125  for (int i = 0; i < it->size(); i++) {
1126  _cADC_SubdetPM.fill(did, it->sample(i).adc());
1127  _cfC_SubdetPM.fill(did, it->sample(i).nominal_fC());
1128  if (_ptype != fOffline) { // hidefed2crate
1129  _cADCvsTS_SubdetPM.fill(did, i, it->sample(i).adc());
1130  if (sumQ > _cutSumQ_HO)
1131  _cShapeCut_FED.fill(eid, i, it->sample(i).nominal_fC());
1132  }
1133  }
1134 
1135  if (sumQ > _cutSumQ_HO) {
1136  //double timing = hcaldqm::utilities::aveTS<HODataFrame>(*it, 8.5, 0,it->size()-1);
1137  // without pedestal substraction, request from https://gitlab.cern.ch/cmshcal/docs/-/issues/106
1138  double timing = hcaldqm::utilities::aveTSDB<HODataFrame>(_dbService, digi_fC, did, *it, 0, it->size() - 1, false);
1139  _cSumQ_depth.fill(did, sumQ);
1140  _cSumQvsLS_SubdetPM.fill(did, _currentLS, sumQ);
1142  _cTimingCut_SubdetPM.fill(did, timing);
1143  // with pedestal substraction for energetic hits
1144  if (sumQ > 100. * _cutSumQ_HO)
1146  did, hcaldqm::utilities::aveTSDB<HODataFrame>(_dbService, digi_fC, did, *it, 0, it->size() - 1));
1147  _cTimingCut_depth.fill(did, timing);
1148  _cTimingCutvsLS_SubdetPM.fill(did, _currentLS, timing);
1149  if (_ptype != fOffline) { // hidefed2crate
1150  _cTimingCutvsLS_FED.fill(eid, _currentLS, timing);
1151  }
1152  if (_ptype == fOnline) {
1153  _cSumQvsBX_SubdetPM.fill(did, bx, sumQ);
1154  _cTimingCutvsiphi_SubdetPM.fill(did, timing);
1155  _cTimingCutvsieta_Subdet.fill(did, timing);
1158  _cOccupancyCutvsiphivsLS_SubdetPM.fill(did, _currentLS);
1159  }
1160  if (_ptype != fOffline) { // hidefed2crate
1161  if (!eid.isVMEid()) {
1162  _cTimingCut_FEDuTCA.fill(eid, timing);
1163  _cTimingCut_ElectronicsuTCA.fill(eid, timing);
1166  }
1167  }
1168  numChsCut++;
1169  }
1170  numChs++;
1171  }
1172 
1173  if (rawidValid != 0) {
1174  _cOccupancyvsLS_Subdet.fill(HcalDetId(rawidValid), _currentLS, numChs);
1175 
1176  if (_ptype == fOnline) {
1177  _cOccupancyCutvsLS_Subdet.fill(HcalDetId(rawidValid), _currentLS, numChsCut);
1178  _cOccupancyCutvsBX_Subdet.fill(HcalDetId(rawidValid), bx, numChsCut);
1179  }
1180  }
1181  numChs = 0;
1182  numChsCut = 0;
1183 
1184  // reset
1185  rawidValid = 0;
1186 
1187  // HF collection
1188  if (_qie10InConditions) {
1189  for (QIE10DigiCollection::const_iterator it = c_QIE10->begin(); it != c_QIE10->end(); ++it) {
1190  const QIE10DataFrame digi = static_cast<const QIE10DataFrame>(*it);
1191 
1192  // Explicit check on the DetIds present in the Collection
1193  HcalDetId const& did = digi.detid();
1194  if (did.subdet() != HcalForward) {
1195  // LED monitoring from calibration channels
1196  if (_ptype != fLocal) {
1197  if (did.subdet() == HcalOther) {
1198  HcalOtherDetId hodid(digi.detid());
1199  if (hodid.subdet() == HcalCalibration) {
1202  did) != _ledCalibrationChannels[HcalForward].end()) {
1203  bool channelLEDSignalPresent = false;
1204  for (int i = 0; i < digi.samples(); i++) {
1205  _LED_ADCvsBX_Subdet.fill(HcalDetId(HcalForward, 29, 1, 1), bx, digi[i].adc());
1206 
1207  if (digi[i].adc() > _thresh_led) {
1208  channelLEDSignalPresent = true;
1209  }
1210  }
1211  if (channelLEDSignalPresent) {
1212  _LED_CUCountvsLS_Subdet.fill(HcalDetId(HcalForward, 29, 1, 1), _currentLS);
1213  if (_ptype == fOnline) {
1214  _LED_CUCountvsLSmod60_Subdet.fill(HcalDetId(HcalForward, 29, 1, 1), _currentLS % 60);
1215  }
1216  }
1217  }
1218  }
1219  }
1220  }
1221  continue;
1222  }
1223 
1224  uint32_t rawid = _ehashmap.lookup(did);
1225  if (rawid == 0) {
1226  meUnknownIds1LS->Fill(1);
1227  _unknownIdsPresent = true;
1228  continue;
1229  } else {
1230  rawidValid = did.rawId();
1231  }
1232  HcalElectronicsId const& eid(rawid);
1233 
1234  // filter out channels that are masked out
1235  if (_xQuality.exists(did)) {
1236  HcalChannelStatus cs(did.rawId(), _xQuality.get(did));
1238  continue;
1239  }
1240 
1241  // (capid - BX) % 4
1242  if (_ptype == fOnline) {
1243  short soi = -1;
1244  for (int i = 0; i < digi.samples(); i++) {
1245  if (digi[i].soi()) {
1246  soi = i;
1247  break;
1248  }
1249  }
1250  short this_capidmbx = (digi[soi].capid() - bx) % 4;
1251  if (this_capidmbx < 0) {
1252  this_capidmbx += 4;
1253  }
1254  _cCapidMinusBXmod4_SubdetPM.fill(did, this_capidmbx);
1255  bool good_capidmbx = (_capidmbx[did.subdet()] == this_capidmbx);
1256  if (!good_capidmbx) {
1257  _xBadCapid.get(eid)++;
1258  _cCapid_BadvsFEDvsLS.fill(eid, _currentLS);
1259  _cCapid_BadvsFEDvsLSmod60.fill(eid, _currentLS % 60);
1260  }
1261  if (!eid.isVMEid()) {
1262  _cCapidMinusBXmod4_CrateSlotuTCA[this_capidmbx].fill(eid);
1263  }
1264  }
1265 
1266  CaloSamples digi_fC = hcaldqm::utilities::loadADC2fCDB<QIE10DataFrame>(_dbService, did, digi);
1267  double sumQ = hcaldqm::utilities::sumQDB<QIE10DataFrame>(_dbService, digi_fC, did, digi, 0, digi.samples() - 1);
1268  //double sumQ = hcaldqm::utilities::sumQ_v10<QIE10DataFrame>(digi, 2.5, 0, digi.samples()-1);
1269 
1270  //if (!_filter_QIE1011.filter(did)) {
1271  _cSumQ_SubdetPM_QIE1011.fill(did, sumQ);
1272  //}
1273 
1274  _cOccupancy_depth.fill(did);
1275  if (_ptype == fOnline) {
1276  _xNChs.get(eid)++;
1277  _cDigiSizevsLS_FED.fill(eid, _currentLS, digi.samples());
1278  digi.samples() != _refDigiSize[did.subdet()] ? _xDigiSize.get(eid)++ : _xDigiSize.get(eid) += 0;
1281  }
1282  _cDigiSize_Crate.fill(eid, digi.samples());
1283  if (_ptype != fOffline) { // hidefed2crate
1284  _cDigiSize_FED.fill(eid, digi.samples());
1285  if (!eid.isVMEid()) {
1288  /*
1289  if (!it->validate(0, it->size()))
1290  _cCapIdRots_FEDuTCA.fill(eid, 1);*/
1291  }
1292  }
1293 
1294  for (int i = 0; i < digi.samples(); i++) {
1295  double q = hcaldqm::utilities::adc2fCDBMinusPedestal<QIE10DataFrame>(_dbService, digi_fC, did, digi, i);
1296  //if (!_filter_QIE1011.filter(did)) {
1297  _cADC_SubdetPM_QIE1011.fill(did, digi[i].adc());
1298  _cfC_SubdetPM_QIE1011.fill(did, q);
1299  _cLETDCvsADC_6bit_SubdetPM.fill(did, digi[i].adc(), digi[i].le_tdc());
1300  _cLETDCvsTS_6bit_SubdetPM.fill(did, (int)i, digi[i].le_tdc());
1301  if (digi[i].le_tdc() < 50) {
1302  double time = i * 25. + (digi[i].le_tdc() / 2.);
1303  _cLETDCTime_SubdetPM.fill(did, time);
1304  _cLETDCTime_depth.fill(did, time);
1305  _cLETDCTimevsADC_SubdetPM.fill(did, digi[i].adc(), time);
1306  }
1307 
1308  // Bad TDC values: 50-61 should never happen in QIE10 or QIE11, but we are seeing some in 2017 data.
1309  if ((50 <= digi[i].le_tdc()) && (digi[i].le_tdc() <= 61)) {
1310  _cBadTDCValues_SubdetPM.fill(did, digi[i].le_tdc());
1311  _cBadTDCvsBX_SubdetPM.fill(did, bx);
1312  _cBadTDCvsLS_SubdetPM.fill(did, _currentLS);
1314  }
1315  if (_ptype != fOffline) { // hidefed2crate
1316  _cADCvsTS_SubdetPM_QIE1011.fill(did, (int)i, digi[i].adc());
1317  if (sumQ > _cutSumQ_HF)
1318  _cShapeCut_FED.fill(eid, (int)i, q);
1319  }
1320  //}
1321  }
1322 
1323  if (sumQ > _cutSumQ_HF) {
1324  double timing = hcaldqm::utilities::aveTS_v10<QIE10DataFrame>(digi, 2.5, 0, digi.samples() - 1);
1325  double q1 = hcaldqm::utilities::adc2fCDBMinusPedestal<QIE10DataFrame>(_dbService, digi_fC, did, digi, 1);
1326  double q2 = hcaldqm::utilities::adc2fCDBMinusPedestal<QIE10DataFrame>(_dbService, digi_fC, did, digi, 2);
1327  double q2q12 = q2 / (q1 + q2);
1328  _cSumQ_depth.fill(did, sumQ);
1329  //if (!_filter_QIE1011.filter(did)) {
1330  _cSumQvsLS_SubdetPM_QIE1011.fill(did, _currentLS, sumQ);
1331  //}
1332  _cTimingCut_SubdetPM.fill(did, hcaldqm::utilities::aveTS_v10<QIE10DataFrame>(digi, 0., 0, digi.samples() - 1));
1333  if (sumQ > 100. * _cutSumQ_HF)
1334  _cTimingCutHTH_SubdetPM.fill(did, timing);
1335  _cTimingCut_depth.fill(did, timing);
1336  _cTimingCutvsLS_SubdetPM.fill(did, _currentLS, timing);
1337  if (_ptype == fOnline) {
1338  //if (!_filter_QIE1011.filter(did)) {
1339  _cSumQvsBX_SubdetPM_QIE1011.fill(did, bx, sumQ);
1340  //}
1341  _cTimingCutvsiphi_SubdetPM.fill(did, timing);
1342  _cTimingCutvsieta_Subdet.fill(did, timing);
1345  _cOccupancyCutvsiphivsLS_SubdetPM.fill(did, _currentLS);
1346  // _cOccupancyCutvsSlotvsLS_HFPM.fill(did, _currentLS);
1347  _xUniHF.get(eid)++;
1348  }
1349  if (_ptype != fOffline) { // hidefed2crate
1350  _cTimingCutvsLS_FED.fill(eid, _currentLS, timing);
1351  }
1353  if (!eid.isVMEid())
1354  if (_ptype == fOnline)
1355  _cQ2Q12CutvsLS_FEDHF.fill(eid, _currentLS, q2q12);
1356  if (_ptype != fOffline) { // hidefed2crate
1357  if (!eid.isVMEid()) {
1358  _cTimingCut_FEDuTCA.fill(eid, timing);
1359  _cTimingCut_ElectronicsuTCA.fill(eid, timing);
1362  }
1363  }
1364  numChsCut++;
1365  }
1366  numChs++;
1367  }
1368  }
1369 
1370  if (rawidValid != 0) {
1371  _cOccupancyvsLS_Subdet.fill(HcalDetId(rawidValid), _currentLS, numChs);
1372 
1373  if (_ptype == fOnline) {
1374  _cOccupancyCutvsLS_Subdet.fill(HcalDetId(rawidValid), _currentLS, numChsCut);
1375  _cOccupancyCutvsBX_Subdet.fill(HcalDetId(rawidValid), bx, numChsCut);
1376  }
1377  }
1378 }
1379 
1380 std::shared_ptr<hcaldqm::Cache> DigiTask::globalBeginLuminosityBlock(edm::LuminosityBlock const& lb,
1381  edm::EventSetup const& es) const {
1382  return DQTask::globalBeginLuminosityBlock(lb, es);
1383 }
1384 
1386  auto lumiCache = luminosityBlockCache(lb.index());
1387  _currentLS = lumiCache->currentLS;
1388  _evsPerLS = lumiCache->EvtCntLS;
1389 
1390  if (_ptype != fOnline)
1391  return;
1392 
1393  for (uintCompactMap::const_iterator it = _xUniHF.begin(); it != _xUniHF.end(); ++it) {
1394  uint32_t hash1 = it->first;
1395  HcalElectronicsId eid1(hash1);
1396  double x1 = it->second;
1397 
1398  for (uintCompactMap::const_iterator jt = _xUniHF.begin(); jt != _xUniHF.end(); ++jt) {
1399  if (jt == it)
1400  continue;
1401  double x2 = jt->second;
1402  if (x2 == 0)
1403  continue;
1404  if (x1 / x2 < _thresh_unihf)
1405  _xUni.get(eid1)++;
1406  }
1407  }
1408 
1409  if (_ptype != fOffline) { // hidefed2crate
1410  for (std::vector<uint32_t>::const_iterator it = _vhashFEDs.begin(); it != _vhashFEDs.end(); ++it) {
1411  hcaldqm::flag::Flag fSum("DIGI");
1413 
1414  std::vector<uint32_t>::const_iterator cit = std::find(_vcdaqEids.begin(), _vcdaqEids.end(), *it);
1415  if (cit == _vcdaqEids.end()) {
1416  // not @cDAQ
1417  for (uint32_t iflag = 0; iflag < _vflags.size(); iflag++)
1418  _cSummaryvsLS_FED.setBinContent(eid, _currentLS, int(iflag), int(hcaldqm::flag::fNCDAQ));
1419  _cSummaryvsLS.setBinContent(eid, _currentLS, int(hcaldqm::flag::fNCDAQ));
1420  continue;
1421  }
1422 
1423  // FED is @cDAQ
1425  if (_xDigiSize.get(eid) > 0)
1427  else
1429 
1430  if (_xBadCapid.get(eid) > 0) {
1432  } else {
1434  }
1435 
1436  if (hcaldqm::utilities::isFEDHF(eid)) {
1437  double fr = double(_xNChs.get(eid)) / double(_xNChsNominal.get(eid) * _evsPerLS);
1438  if (_runkeyVal == 0 || _runkeyVal == 4) {
1439  // only for pp or hi
1440  if (_xUni.get(eid) > 0)
1442  else
1443  _vflags[fUni]._state = hcaldqm::flag::fGOOD;
1444  }
1445  if (fr < 0.95)
1447  else if (fr < 1.0)
1449  else
1451  }
1452  }
1453  if (_unknownIdsPresent)
1455  else
1457 
1458  // LED misfires
1459  if (_ptype != fLocal) {
1460  if (hcaldqm::utilities::isFEDHBHE(eid)) {
1463 
1464  if (_LED_CUCountvsLS_Subdet.getBinContent(did_hb, _currentLS) > 0 ||
1465  _LED_CUCountvsLS_Subdet.getBinContent(did_he, _currentLS) > 0) {
1466  _vflags[fLED]._state = hcaldqm::flag::fBAD;
1467  } else {
1468  _vflags[fLED]._state = hcaldqm::flag::fGOOD;
1469  }
1470  } else if (hcaldqm::utilities::isFEDHF(eid)) {
1472  if (_LED_CUCountvsLS_Subdet.getBinContent(did_hf, _currentLS) > 0) {
1473  _vflags[fLED]._state = hcaldqm::flag::fBAD;
1474  } else {
1475  _vflags[fLED]._state = hcaldqm::flag::fGOOD;
1476  }
1477  } else if (hcaldqm::utilities::isFEDHO(eid)) {
1479  if (_LED_CUCountvsLS_Subdet.getBinContent(did_ho, _currentLS) > 0) {
1480  _vflags[fLED]._state = hcaldqm::flag::fBAD;
1481  } else {
1482  _vflags[fLED]._state = hcaldqm::flag::fGOOD;
1483  }
1484  }
1485  }
1486 
1487  int iflag = 0;
1488  for (std::vector<hcaldqm::flag::Flag>::iterator ft = _vflags.begin(); ft != _vflags.end(); ++ft) {
1489  _cSummaryvsLS_FED.setBinContent(eid, _currentLS, iflag, int(ft->_state));
1490  fSum += (*ft);
1491  iflag++;
1492 
1493  // reset!
1494  ft->reset();
1495  }
1496  _cSummaryvsLS.setBinContent(eid, _currentLS, fSum._state);
1497  }
1498  }
1499 
1500  _xDigiSize.reset();
1501  _xUniHF.reset();
1502  _xUni.reset();
1503  _xNChs.reset();
1504  _xBadCapid.reset();
1505 
1506  // in the end always do the DQTask::endLumi
1507  DQTask::globalEndLuminosityBlock(lb, es);
1508 }
1509 
void initialize(std::string const &folder, hashfunctions::HashType, quantity::Quantity *, quantity::Quantity *, int debug=0) override
hcaldqm::ContainerProf1D _cTimingCutvsiphi_SubdetPM
Definition: DigiTask.h:106
constexpr uint32_t rawId() const
void _process(edm::Event const &, edm::EventSetup const &) override
Definition: DigiTask.cc:768
hcaldqm::ContainerXXX< uint32_t > _xBadCapid
Definition: DigiTask.h:146
bool _qie10InConditions
Definition: DigiTask.h:182
T getUntrackedParameter(std::string const &, T const &) const
edm::ESGetToken< HcalDbService, HcalDbRecord > hcalDbServiceToken_
Definition: DigiTask.h:49
double _thresh_led
Definition: DigiTask.h:187
MonitorElement * meNumEvents1LS
Definition: DigiTask.h:175
hcaldqm::Container1D _LED_CUCountvsLSmod60_Subdet
Definition: DigiTask.h:191
edm::InputTag _tagQIE10
Definition: DigiTask.h:45
hcaldqm::Container1D _cADC_SubdetPM
Definition: DigiTask.h:78
hcaldqm::Container1D _cADC_SubdetPM_QIE1011
Definition: DigiTask.h:86
hcaldqm::Container1D _LED_CUCountvsLS_Subdet
Definition: DigiTask.h:190
virtual void initialize(std::string const &folder, hashfunctions::HashType, quantity::Quantity *, quantity::Quantity *qy=new quantity::ValueQuantity(quantity::fN), int debug=0)
Definition: Container1D.cc:33
hcaldqm::Container1D _cOccupancyCutvsieta_Subdet
Definition: DigiTask.h:129
hcaldqm::Container2D _cLETDCvsADC_2bit_SubdetPM
Definition: DigiTask.h:149
hcaldqm::ContainerProf1D _cSumQvsBX_SubdetPM
Definition: DigiTask.h:83
virtual bool exists(HcalDetId const &)
Definition: ContainerXXX.h:212
constexpr int size() const
total number of samples in the digi
Definition: HODataFrame.h:27
int const CRATE_VME_MIN
Definition: Constants.h:95
int ib
Definition: cuy.py:661
void fill(HcalDetId const &) override
edm::InputTag _tagHO
Definition: DigiTask.h:44
std::map< HcalSubdetector, int > _refDigiSize
Definition: DigiTask.h:61
hcaldqm::Container2D _cADCvsTS_SubdetPM
Definition: DigiTask.h:94
std::pair< uint16_t, uint16_t > fed2crate(int fed)
Definition: Utilities.cc:10
LuminosityBlockIndex index() const
CalibDetType calibFlavor() const
get the flavor of this calibration detid
virtual void setCurrentFolder(std::string const &fullpath)
Definition: DQMStore.cc:32
hcaldqm::Container1D _cTimingCutHTH_SubdetPM
Definition: DigiTask.h:100
hcaldqm::ContainerProf1D _cQ2Q12CutvsLS_FEDHF
Definition: DigiTask.h:110
MonitorElement * meUnknownIds1LS
Definition: DigiTask.h:176
bool getByToken(EDGetToken token, Handle< PROD > &result) const
Definition: Event.h:539
void globalEndLuminosityBlock(edm::LuminosityBlock const &, edm::EventSetup const &) override
Definition: DigiTask.cc:1385
void initialize(HcalElectronicsMap const *, ElectronicsMapType etype=fHcalElectronicsMap)
#define DEFINE_FWK_MODULE(type)
Definition: MakerMacros.h:16
unique_ptr< ClusterSequence > cs
std::shared_ptr< hcaldqm::Cache > globalBeginLuminosityBlock(edm::LuminosityBlock const &, edm::EventSetup const &) const override
Definition: DigiTask.cc:1380
hcaldqm::Container2D _cLETDCTimevsADC_SubdetPM
Definition: DigiTask.h:155
double _cutSumQ_HO
Definition: DigiTask.h:51
virtual CompactMap::const_iterator begin()
Definition: ContainerXXX.h:69
double _thresh_unihf
Definition: DigiTask.h:52
UpdateFreq
Definition: DQTask.h:32
State _state
Definition: Flag.h:62
std::map< HcalSubdetector, short > _capidmbx
Definition: DigiTask.h:184
constexpr uint32_t rawId() const
get the raw id
Definition: DetId.h:57
std::vector< T >::const_iterator const_iterator
hcaldqm::Container2D _cLETDCvsTS_2bit_SubdetPM
Definition: DigiTask.h:151
int bunchCrossing() const
Definition: EventBase.h:64
hcaldqm::ContainerSingle2D _cCapidMinusBXmod4_CrateSlotuTCA[4]
Definition: DigiTask.h:169
edm::EDGetTokenT< QIE10DigiCollection > _tokQIE10
Definition: DigiTask.h:48
virtual void initialize(std::string const &folder, quantity::Quantity *, quantity::Quantity *, quantity::Quantity *qz=new quantity::ValueQuantity(quantity::fN), int debug=0)
int const SPIGOT_MIN
Definition: Constants.h:120
void book(DQMStore::IBooker &, HcalElectronicsMap const *, std::string subsystem="Hcal", std::string aux="") override
hcaldqm::ContainerProf2D _cSumQ_depth
Definition: DigiTask.h:81
edm::EDGetTokenT< HODigiCollection > _tokHO
Definition: DigiTask.h:47
hcaldqm::Container1D _cOccupancyCutvsiphi_SubdetPM
Definition: DigiTask.h:128
virtual void reset()
Definition: ContainerXXX.h:292
hcaldqm::ContainerProf1D _cSumQvsLS_SubdetPM_QIE1011
Definition: DigiTask.h:89
void find(edm::Handle< EcalRecHitCollection > &hits, DetId thisDet, std::vector< EcalRecHitCollection::const_iterator > &hit, bool debug=false)
Definition: FindCaloHit.cc:19
hcaldqm::ContainerSingle2D _cSummaryvsLS
Definition: DigiTask.h:180
void bookHistograms(DQMStore::IBooker &, edm::Run const &, edm::EventSetup const &) override
Definition: DigiTask.cc:47
int const FIBER_VME_MIN
Definition: Constants.h:125
hcaldqm::Container2D _cOccupancyCutvsiphivsLS_SubdetPM
Definition: DigiTask.h:131
int ieta() const
hcaldqm::ContainerXXX< uint32_t > _xDigiSize
Definition: DigiTask.h:142
hcaldqm::ContainerProf2D _cTimingCut_FEDuTCA
Definition: DigiTask.h:101
hcaldqm::Container1D _cBadTDCvsLS_SubdetPM
Definition: DigiTask.h:160
int const FIBERCH_MIN
Definition: Constants.h:134
virtual void book(DQMStore::IBooker &, std::string subsystem="Hcal", std::string aux="")
example_stream void bookHistograms(DQMStore::IBooker &, edm::Run const &, edm::EventSetup const &) override
std::vector< int > getFEDVMEList(HcalElectronicsMap const *)
Definition: Utilities.cc:115
hcaldqm::filter::HashFilter _filter_VME
Definition: DigiTask.h:68
void Fill(long long x)
virtual CompactMap::const_iterator end()
Definition: ContainerXXX.h:70
constexpr DetId detid() const
Get the detector id.
constexpr HcalSubdetector subdet() const
get the subdetector
Definition: HcalDetId.h:138
MonitorElement * book1DD(TString const &name, TString const &title, int nchX, double lowX, double highX, FUNC onbooking=NOOP())
Definition: DQMStore.h:155
ProcessingType _ptype
Definition: DQModule.h:44
virtual void fill(uint32_t)
Definition: Container1D.cc:73
virtual void reset()
Definition: Container1D.cc:60
hcaldqm::Container2D _cLETDCvsADC_6bit_SubdetPM
Definition: DigiTask.h:150
void reset()
Definition: Flag.h:59
hcaldqm::Container2D _cOccupancy_CrateSlot
Definition: DigiTask.h:117
virtual void setBinContent(int, int, int)
constexpr bool isVMEid() const
void dqmthrow(std::string const &msg) const
Definition: Logger.h:12
ContainerXXX< uint32_t > _xQuality
Definition: DQTask.h:66
hcaldqm::ContainerSingle2D _cCapid_BadvsFEDvsLS
Definition: DigiTask.h:170
int const FED_VME_MIN
Definition: Constants.h:82
hcaldqm::Container2D _cADCvsTS_SubdetPM_QIE1011
Definition: DigiTask.h:95
hcaldqm::Container1D _cDigiSize_Crate
Definition: DigiTask.h:139
hcaldqm::Container1D _cShapeCut_FED
Definition: DigiTask.h:93
hcaldqm::Container2D _cOccupancyCut_depth
Definition: DigiTask.h:127
hcaldqm::ContainerProf1D _cOccupancyCutvsBX_Subdet
Definition: DigiTask.h:136
double _cutSumQ_HF
Definition: DigiTask.h:51
HcalSubdetector
Definition: HcalAssistant.h:31
edm::EDGetTokenT< QIE11DigiCollection > _tokQIE11
Definition: DigiTask.h:46
int const FIBER_uTCA_MIN1
Definition: Constants.h:128
Transition
Definition: Transition.h:12
hcaldqm::Container1D _cfC_SubdetPM_QIE1011
Definition: DigiTask.h:87
double _cutSumQ_HBHE
Definition: DigiTask.h:51
std::map< HcalSubdetector, std::vector< HcalDetId > > _ledCalibrationChannels
Definition: DigiTask.h:188
hash_function_did const hash_did[nHashType_did]
hcaldqm::ContainerProf2D _cTimingCut_depth
Definition: DigiTask.h:105
std::vector< HcalGenericDetId > allPrecisionId() const
LuminosityBlock const & getLuminosityBlock() const
Definition: Event.h:100
Logger _logger
Definition: DQModule.h:55
hcaldqm::Container1D _cBadTDCValues_SubdetPM
Definition: DigiTask.h:158
hcaldqm::ContainerProf1D _cTimingCutvsLS_SubdetPM
Definition: DigiTask.h:104
UseScope< MonitorElementData::Scope::LUMI > UseLumiScope
Definition: DQMStore.h:463
hcaldqm::filter::HashFilter _filter_TDC2bit
Definition: DigiTask.h:73
hcaldqm::ContainerProf1D _cSumQvsBX_SubdetPM_QIE1011
Definition: DigiTask.h:90
uint32_t hash_Subdet(HcalDetId const &)
hcaldqm::Container2D _cOccupancy_depth
Definition: DigiTask.h:118
std::string _name
Definition: DQModule.h:42
HcalElectronicsMap const * _emap
Definition: DQTask.h:81
hcaldqm::Container2D _cSummaryvsLS_FED
Definition: DigiTask.h:179
hcaldqm::filter::HashFilter _filter_FEDHF
Definition: DigiTask.h:70
int const CRATE_uTCA_MIN
Definition: Constants.h:100
int iphi() const
get the low-edge iphi (if relevant)
DigiTask(edm::ParameterSet const &)
Definition: DigiTask.cc:7
hcaldqm::ContainerProf1D _cOccupancyvsLS_Subdet
Definition: DigiTask.h:134
Definition: DetId.h:17
void _resetMonitors(hcaldqm::UpdateFreq) override
Definition: DigiTask.cc:750
hcaldqm::ContainerProf1D _cSumQvsLS_SubdetPM
Definition: DigiTask.h:82
hcaldqm::ContainerXXX< uint32_t > _xUni
Definition: DigiTask.h:143
hcaldqm::ContainerProf1D _cTimingCutvsLS_FED
Definition: DigiTask.h:103
hcaldqm::Container2D _cOccupancyCut_FEDuTCA
Definition: DigiTask.h:125
constexpr int samples() const
total number of samples in the digi
bool isFEDHBHE(HcalElectronicsId const &)
Definition: Utilities.cc:156
virtual void book(HcalElectronicsMap const *)
Definition: ContainerXXX.h:87
std::vector< HcalElectronicsId > allElectronicsId() const
int size() const
get the size
Definition: CaloSamples.h:24
HcalOtherSubdetector subdet() const
get the category
hcaldqm::Container1D _cDigiSize_FED
Definition: DigiTask.h:140
hcaldqm::filter::HashFilter _filter_QIE8
Definition: DigiTask.h:72
virtual void book(DQMStore::IBooker &, HcalElectronicsMap const *, std::string subsystem="Hcal", std::string aux="")
Definition: Container1D.cc:592
virtual void initialize(std::string const &folder, hashfunctions::HashType, quantity::Quantity *, quantity::Quantity *, quantity::Quantity *qz=new quantity::ValueQuantity(quantity::fN), int debug=0)
Definition: Container2D.cc:25
hcaldqm::Container2D _LED_ADCvsBX_Subdet
Definition: DigiTask.h:192
hcaldqm::ContainerXXX< uint32_t > _xNChsNominal
Definition: DigiTask.h:145
hcaldqm::Container1D _cSumQ_SubdetPM
Definition: DigiTask.h:80
hcaldqm::Container1D _cOccupancyvsiphi_SubdetPM
Definition: DigiTask.h:119
void book(DQMStore::IBooker &, HcalElectronicsMap const *, std::string subsystem="Hcal", std::string aux="") override
hcaldqm::ContainerProf1D _cTimingCutvsieta_Subdet
Definition: DigiTask.h:107
hcaldqm::ContainerSingle2D _cCapid_BadvsFEDvsLSmod60
Definition: DigiTask.h:172
hcaldqm::Container1D _cLETDCTime_SubdetPM
Definition: DigiTask.h:153
constexpr int samples() const
total number of samples in the digi
hcaldqm::electronicsmap::ElectronicsMap _dhashmap
Definition: DigiTask.h:65
void initialize(std::string const &folder, hashfunctions::HashType, quantity::Quantity *, quantity::Quantity *, quantity::Quantity *qz=new quantity::ValueQuantity(quantity::fEnergy), int debug=0) override
boost::transform_iterator< IterHelp, boost::counting_iterator< int > > const_iterator
std::vector< hcaldqm::flag::Flag > _vflags
Definition: DigiTask.h:55
void setBinContent(HcalDetId const &, int) override
Definition: Container2D.cc:163
std::string const & label() const
Definition: InputTag.h:36
hcaldqm::Container2D _cOccupancyCut_ElectronicsuTCA
Definition: DigiTask.h:126
int cboxChannel() const
get the calibration box channel (if relevant)
virtual STDTYPE & get(HcalDetId const &)
Definition: ContainerXXX.h:197
edm::ESHandle< HcalDbService > _dbService
Definition: DQTask.h:80
hcaldqm::Container1D _cBadTDCvsBX_SubdetPM
Definition: DigiTask.h:159
virtual double getBinContent(HcalDetId const &)
Definition: Container1D.cc:177
std::vector< int > getFEDList(HcalElectronicsMap const *)
Definition: Utilities.cc:97
hcaldqm::Container2D _cOccupancy_Crate
Definition: DigiTask.h:116
string end
Definition: dataset.py:937
std::vector< int > getFEDuTCAList(HcalElectronicsMap const *)
Definition: Utilities.cc:135
void fill(HcalDetId const &) override
Definition: Container2D.cc:52
virtual void initialize(FilterType ftype, hashfunctions::HashType htype, std::vector< uint32_t > const &)
Definition: HashFilter.cc:17
std::string _subsystem
Definition: DQModule.h:49
hcaldqm::filter::HashFilter _filter_uTCA
Definition: DigiTask.h:69
bool isFEDHO(HcalElectronicsId const &)
Definition: Utilities.cc:182
std::vector< uint32_t > _vcdaqEids
Definition: DQTask.h:69
hcaldqm::Container2D _cLETDCvsTS_6bit_SubdetPM
Definition: DigiTask.h:152
hcaldqm::ContainerProf1D _cDigiSizevsLS_FED
Definition: DigiTask.h:141
hcaldqm::ContainerXXX< uint32_t > _xNChs
Definition: DigiTask.h:144
HcalSubdetector hcalSubdet() const
get the HcalSubdetector (if relevant)
hcaldqm::filter::HashFilter _filter_TDC6bit
Definition: DigiTask.h:74
virtual void fill(int, int)
hcaldqm::electronicsmap::ElectronicsMap _ehashmap
Definition: DigiTask.h:64
hcaldqm::ContainerProf1D _cOccupancyCutvsLS_Subdet
Definition: DigiTask.h:135
virtual void initialize(hashfunctions::HashType, int debug=0)
Definition: ContainerXXX.h:81
ESHandle< T > getHandle(const ESGetToken< T, R > &iToken) const
Definition: EventSetup.h:157
hcaldqm::filter::HashFilter _filter_QIE1011
Definition: DigiTask.h:71
void book(DQMStore::IBooker &, HcalElectronicsMap const *, std::string subsystem="Hcal", std::string aux="") override
Definition: Container2D.cc:567
hcaldqm::Container2D _cBadTDCCount_depth
Definition: DigiTask.h:161
hcaldqm::ContainerProf2D _cLETDCTime_depth
Definition: DigiTask.h:154
std::vector< uint32_t > _vhashFEDs
Definition: DigiTask.h:59
edm::InputTag _tagQIE11
Definition: DigiTask.h:43
hcaldqm::Container1D _cOccupancyvsieta_Subdet
Definition: DigiTask.h:120
Readout chain identification for Hcal.
std::string const & instance() const
Definition: InputTag.h:37
ESGetTokenH3DDVariant esConsumes(std::string const &Reccord, edm::ConsumesCollector &)
Definition: DeDxTools.cc:283
const DetId lookup(HcalElectronicsId fId) const
lookup the logical detid associated with the given electronics id
bool isFEDHF(HcalElectronicsId const &)
Definition: Utilities.cc:170
hcaldqm::ContainerProf2D _cTimingCut_ElectronicsuTCA
Definition: DigiTask.h:102
int const SLOT_uTCA_MIN
Definition: Constants.h:107
hcaldqm::Container1D _cSumQ_SubdetPM_QIE1011
Definition: DigiTask.h:88
hcaldqm::Container1D _cTimingCut_SubdetPM
Definition: DigiTask.h:99
Definition: Run.h:45
uint16_t *__restrict__ uint16_t const *__restrict__ adc
bool _unknownIdsPresent
Definition: DigiTask.h:177
hcaldqm::Container2D _cOccupancy_FEDuTCA
Definition: DigiTask.h:114
hcaldqm::Container1D _cCapidMinusBXmod4_SubdetPM
Definition: DigiTask.h:168
hcaldqm::ContainerXXX< uint32_t > _xUniHF
Definition: DigiTask.h:143
constexpr DetId detid() const
Get the detector id.
double sumQ(DIGI const &digi, double ped, int i=0, int j=3)
Definition: Utilities.h:127
hcaldqm::Container1D _cfC_SubdetPM
Definition: DigiTask.h:79
hcaldqm::Container2D _cOccupancy_ElectronicsuTCA
Definition: DigiTask.h:115