CMS 3D CMS Logo

GEMDAQStatusSource.cc
Go to the documentation of this file.
2 
3 using namespace std;
4 using namespace edm;
5 
8  tagVFAT_ = consumes<GEMVFATStatusCollection>(cfg.getParameter<edm::InputTag>("VFATInputLabel"));
9  tagOH_ = consumes<GEMOHStatusCollection>(cfg.getParameter<edm::InputTag>("OHInputLabel"));
10  tagAMC_ = consumes<GEMAMCStatusCollection>(cfg.getParameter<edm::InputTag>("AMCInputLabel"));
11  tagAMC13_ = consumes<GEMAMC13StatusCollection>(cfg.getParameter<edm::InputTag>("AMC13InputLabel"));
12 
13  nAMCSlots_ = cfg.getParameter<Int_t>("AMCSlots");
14 
15  bWarnedNotFound_ = false;
16 }
17 
20  desc.add<edm::InputTag>("VFATInputLabel", edm::InputTag("muonGEMDigis", "VFATStatus"));
21  desc.add<edm::InputTag>("OHInputLabel", edm::InputTag("muonGEMDigis", "OHStatus"));
22  desc.add<edm::InputTag>("AMCInputLabel", edm::InputTag("muonGEMDigis", "AMCStatus"));
23  desc.add<edm::InputTag>("AMC13InputLabel", edm::InputTag("muonGEMDigis", "AMC13Status"));
24 
25  desc.add<Int_t>("AMCSlots", 13);
26  desc.addUntracked<std::string>("runType", "relval");
27  desc.addUntracked<std::string>("logCategory", "GEMDAQStatusSource");
28 
29  descriptions.add("GEMDAQStatusSource", desc);
30 }
31 
33  //if (useDBEMap_)
34  if (true) {
35  const auto &chMap = iSetup.getData(gemChMapToken_);
36  auto gemChMap = std::make_unique<GEMChMap>(chMap);
37 
38  std::vector<unsigned int> listFEDId;
39  for (auto const &[ec, dc] : gemChMap->chamberMap()) {
40  unsigned int fedId = ec.fedId;
41  uint8_t amcNum = ec.amcNum;
42  GEMDetId gemChId(dc.detId);
43 
44  if (mapFEDIdToRe_.find(fedId) == mapFEDIdToRe_.end()) {
45  listFEDId.push_back(fedId);
46  }
47  mapFEDIdToRe_[fedId] = gemChId.region();
48  mapFEDIdToSt_[fedId] = gemChId.station();
49  mapAMC13ToListChamber_[fedId].push_back(gemChId);
50  mapAMCToListChamber_[{fedId, amcNum}].push_back(gemChId);
51  }
52 
53  Int_t nIdx = 1;
54  for (auto fedId : listFEDId) {
55  mapFEDIdToPosition_[fedId] = nIdx++;
56  }
57 
58  } else {
59  // no EMap in DB, using dummy
60  auto gemChMap = std::make_unique<GEMChMap>();
61  gemChMap->setDummy();
62 
63  for (auto const &[ec, dc] : gemChMap->chamberMap()) {
64  unsigned int fedId = ec.fedId;
65  uint8_t amcNum = ec.amcNum;
66  GEMDetId gemChId(dc.detId);
67 
68  mapFEDIdToRe_[fedId] = gemChId.region();
69  mapAMC13ToListChamber_[fedId].push_back(gemChId);
70  mapAMCToListChamber_[{fedId, amcNum}].push_back(gemChId);
71  }
72  }
73 }
74 
76  if (h2Status == nullptr) {
77  return;
78  }
79 
80  unsigned int unBinPos = 1;
81  h2Status->setBinLabel(unBinPos++, "Good", 2);
82  h2Status->setBinLabel(unBinPos++, "Invalid AMC", 2);
83  h2Status->setBinLabel(unBinPos++, "Invalid size", 2);
84  h2Status->setBinLabel(unBinPos++, "Fail trailer check", 2);
85  h2Status->setBinLabel(unBinPos++, "Fail fragment length", 2);
86  h2Status->setBinLabel(unBinPos++, "Fail trailer match", 2);
87  h2Status->setBinLabel(unBinPos++, "More trailer", 2);
88  h2Status->setBinLabel(unBinPos++, "CRC modified", 2);
89  h2Status->setBinLabel(unBinPos++, "S-link error", 2);
90  h2Status->setBinLabel(unBinPos++, "Wrong FED ID", 2);
91 
92  for (auto const &[fedId, nPos] : mapFEDIdToPosition_) {
93  auto st = mapFEDIdToSt_[fedId];
94  auto re = (mapFEDIdToRe_[fedId] > 0 ? 'P' : 'M');
95  h2Status->setBinLabel(nPos, Form("GE%i1-%c", st, re), 1);
96  }
97 }
98 
100  if (h2Status == nullptr) {
101  return;
102  }
103 
104  unsigned int unBinPos = 1;
105  h2Status->setBinLabel(unBinPos++, "Good", 2);
106  h2Status->setBinLabel(unBinPos++, "Invalid OH", 2);
107  h2Status->setBinLabel(unBinPos++, "Back pressure", 2);
108  h2Status->setBinLabel(unBinPos++, "Bad EC", 2);
109  h2Status->setBinLabel(unBinPos++, "Bad BC", 2);
110  h2Status->setBinLabel(unBinPos++, "Bad OC", 2);
111  h2Status->setBinLabel(unBinPos++, "Bad run type", 2);
112  h2Status->setBinLabel(unBinPos++, "Bad CRC", 2);
113  h2Status->setBinLabel(unBinPos++, "MMCM locked", 2);
114  h2Status->setBinLabel(unBinPos++, "DAQ clock locked", 2);
115  h2Status->setBinLabel(unBinPos++, "DAQ not ready", 2);
116  h2Status->setBinLabel(unBinPos++, "BC0 not locked", 2);
117 }
118 
120  if (h2Status == nullptr) {
121  return;
122  }
123 
124  unsigned int unBinPos = 1;
125  h2Status->setBinLabel(unBinPos++, "Good", 2);
126  h2Status->setBinLabel(unBinPos++, "Event FIFO near full", 2);
127  h2Status->setBinLabel(unBinPos++, "Input FIFO near full", 2);
128  h2Status->setBinLabel(unBinPos++, "L1A FIFO near full", 2);
129  h2Status->setBinLabel(unBinPos++, "Event size warn", 2);
130  h2Status->setBinLabel(unBinPos++, "Invalid VFAT", 2);
131  h2Status->setBinLabel(unBinPos++, "Event FIFO full", 2);
132  h2Status->setBinLabel(unBinPos++, "Input FIFO full", 2);
133  h2Status->setBinLabel(unBinPos++, "L1A FIFO full", 2);
134  h2Status->setBinLabel(unBinPos++, "Event size overflow", 2);
135  h2Status->setBinLabel(unBinPos++, "Invalid event", 2);
136  h2Status->setBinLabel(unBinPos++, "Out of Sync AMC vs VFAT", 2);
137  h2Status->setBinLabel(unBinPos++, "Out of Sync VFAT vs VFAT", 2);
138  h2Status->setBinLabel(unBinPos++, "BX mismatch AMC vs VFAT", 2);
139  h2Status->setBinLabel(unBinPos++, "BX mismatch VFAT vs VFAT", 2);
140  h2Status->setBinLabel(unBinPos++, "Input FIFO underflow", 2);
141  h2Status->setBinLabel(unBinPos++, "Bad VFAT count", 2);
142 }
143 
145  if (h2Status == nullptr) {
146  return;
147  }
148 
149  unsigned int unBinPos = 1;
150  h2Status->setBinLabel(unBinPos++, "Good", 2);
151  h2Status->setBinLabel(unBinPos++, "Basic overflow", 2);
152  h2Status->setBinLabel(unBinPos++, "Zero-sup overflow", 2);
153  h2Status->setBinLabel(unBinPos++, "VFAT CRC error", 2);
154  h2Status->setBinLabel(unBinPos++, "Invalid header", 2);
155  h2Status->setBinLabel(unBinPos++, "AMC EC mismatch", 2);
156  h2Status->setBinLabel(unBinPos++, "AMC BC mismatch", 2);
157 }
158 
160  LoadROMap(iSetup);
161  if (mapAMC13ToListChamber_.empty() || mapAMCToListChamber_.empty())
162  return;
163  initGeometry(iSetup);
164  if (GEMGeometry_ == nullptr)
165  return;
166  loadChambers();
167 
168  strFolderMain_ = "GEM/DAQStatus";
169 
170  nBXMin_ = -10;
171  nBXMax_ = 10;
172 
173  ibooker.cd();
175 
176  h2AMC13Status_ = nullptr;
177 
178  bFillAMC_ = false;
179 
180  //if (nRunType_ != GEMDQM_RUNTYPE_RELVAL)
182  Int_t nNumAMC13 = (Int_t)mapFEDIdToRe_.size();
183  h2AMC13Status_ = ibooker.book2D(
184  "amc13_status", "AMC13 Status;AMC13;", nNumAMC13, 0.5, nNumAMC13 + 0.5, nBitAMC13_, 0.5, nBitAMC13_ + 0.5);
186 
187  for (auto &[fedId, nIdx] : mapFEDIdToPosition_) {
188  auto st = mapFEDIdToSt_[fedId];
189  auto re = (mapFEDIdToRe_[fedId] > 0 ? 'P' : 'M');
190  auto strName = Form("amc_status_GE%i1-%c", st, re);
191  auto strTitle = Form("AMC Status GE%i1-%c;AMC slot;", st, re);
193  ibooker.book2D(strName, strTitle, nAMCSlots_, -0.5, nAMCSlots_ - 0.5, nBitAMC_, 0.5, nBitAMC_ + 0.5);
195  }
196 
197  bFillAMC_ = true;
198  }
199 
200  mapStatusOH_ =
201  MEMap3Inf(this, "oh_status", "OptoHybrid Status", 36, 0.5, 36.5, nBitOH_, 0.5, nBitOH_ + 0.5, "Chamber");
202 
204  this, "vfat_statusWarnSum", "VFAT reporting warnings", 36, 0.5, 36.5, 24, -0.5, 24 - 0.5, "Chamber", "VFAT");
206  this, "vfat_statusErrSum", "VFAT reporting errors", 36, 0.5, 36.5, 24, -0.5, 24 - 0.5, "Chamber", "VFAT");
208  MEMap4Inf(this, "vfat_status", "VFAT Status", 24, -0.5, 24 - 0.5, nBitVFAT_, 0.5, nBitVFAT_ + 0.5, "VFAT");
209 
215  }
216 
217  GenerateMEPerChamber(ibooker);
218 
220  h2SummaryStatusAll = CreateSummaryHist(ibooker, "chamberAllStatus");
221  h2SummaryStatusWarning = CreateSummaryHist(ibooker, "chamberWarnings");
222  h2SummaryStatusError = CreateSummaryHist(ibooker, "chamberErrors");
223  }
224 
226  h2SummaryStatusVFATWarning = CreateSummaryHist(ibooker, "chamberVFATWarnings");
227  h2SummaryStatusVFATError = CreateSummaryHist(ibooker, "chamberVFATErrors");
228  h2SummaryStatusOHWarning = CreateSummaryHist(ibooker, "chamberOHWarnings");
229  h2SummaryStatusOHError = CreateSummaryHist(ibooker, "chamberOHErrors");
230  h2SummaryStatusAMCWarning = CreateSummaryHist(ibooker, "chamberAMCWarnings");
231  h2SummaryStatusAMCError = CreateSummaryHist(ibooker, "chamberAMCErrors");
232  h2SummaryStatusAMC13Error = CreateSummaryHist(ibooker, "chamberAMC13Errors");
233 
234  h2SummaryStatusAll->setTitle("Summary of all number of OH or VFAT status of each chambers");
235  h2SummaryStatusWarning->setTitle("Summary of all warnings of each chambers");
236  h2SummaryStatusError->setTitle("Summary of all errors of each chambers");
237  h2SummaryStatusVFATWarning->setTitle("Summary of VFAT warnings of each chambers");
238  h2SummaryStatusVFATError->setTitle("Summary of VFAT errors of each chambers");
239  h2SummaryStatusOHWarning->setTitle("Summary of OH warnings of each chambers");
240  h2SummaryStatusOHError->setTitle("Summary of OH errors of each chambers");
241  h2SummaryStatusAMCWarning->setTitle("Summary of AMC warnings of each chambers");
242  h2SummaryStatusAMCError->setTitle("Summary of AMC errors of each chambers");
243  h2SummaryStatusAMC13Error->setTitle("Summary of AMC13 errors of each chambers");
244  }
245 }
246 
248  MEStationInfo &stationInfo = mapStationInfo_[key];
249 
250  Int_t nNewNumCh = stationInfo.nMaxIdxChamber_ - stationInfo.nMinIdxChamber_ + 1;
251  Int_t nNewMinIdxChamber = stationInfo.nNumModules_ * (stationInfo.nMinIdxChamber_ - 1) + 1;
252  Int_t nNewMaxIdxChamber = stationInfo.nNumModules_ * stationInfo.nMaxIdxChamber_;
253 
254  nNewNumCh *= stationInfo.nNumModules_;
255 
256  mapStatusOH_.SetBinConfX(nNewNumCh, nNewMinIdxChamber - 0.5, nNewMaxIdxChamber + 0.5);
257  mapStatusOH_.bookND(bh, key);
258  mapStatusOH_.SetLabelForChambers(key, 1, -1, nNewMinIdxChamber, stationInfo.nNumModules_);
259 
260  if (mapStatusOH_.isOperating()) {
262  }
263 
264  Int_t nNumVFATPerModule = stationInfo.nMaxVFAT_ / stationInfo.nNumModules_;
265 
266  mapStatusWarnVFATPerLayer_.SetBinConfX(nNewNumCh, nNewMinIdxChamber - 0.5, nNewMaxIdxChamber + 0.5);
267  mapStatusWarnVFATPerLayer_.SetBinConfY(nNumVFATPerModule, -0.5);
269  mapStatusWarnVFATPerLayer_.SetLabelForChambers(key, 1, -1, nNewMinIdxChamber, stationInfo.nNumModules_);
271 
272  mapStatusErrVFATPerLayer_.SetBinConfX(nNewNumCh, nNewMinIdxChamber - 0.5, nNewMaxIdxChamber + 0.5);
273  mapStatusErrVFATPerLayer_.SetBinConfY(nNumVFATPerModule, -0.5);
275  mapStatusErrVFATPerLayer_.SetLabelForChambers(key, 1, -1, nNewMinIdxChamber, stationInfo.nNumModules_);
277 
278  return 0;
279 }
280 
282  ME3IdsKey key3 = key4Tokey3(key);
283  MEStationInfo &stationInfo = mapStationInfo_[key3];
284 
285  bh.getBooker()->setCurrentFolder(strFolderMain_ + "/VFATStatus_" + getNameDirLayer(key3));
286 
287  mapStatusVFATPerCh_.SetBinConfX(stationInfo.nMaxVFAT_, -0.5);
292  }
293 
295 
296  return 0;
297 }
298 
304 
305  event.getByToken(tagVFAT_, gemVFAT);
306  event.getByToken(tagOH_, gemOH);
307  event.getByToken(tagAMC_, gemAMC);
308  event.getByToken(tagAMC13_, gemAMC13);
309 
310  if (!(gemVFAT.isValid() && gemOH.isValid() && gemAMC.isValid() && gemAMC13.isValid())) {
311  if (!bWarnedNotFound_) {
312  edm::LogWarning(log_category_) << "DAQ sources from muonGEMDigis are not found";
313  bWarnedNotFound_ = true;
314  }
315  return;
316  }
317 
318  std::map<ME4IdsKey, bool> mapChamberAll;
319  std::map<ME4IdsKey, bool> mapChamberWarning;
320  std::map<ME4IdsKey, bool> mapChamberError;
321  std::map<ME4IdsKey, bool> mapChamberVFATWarning;
322  std::map<ME4IdsKey, bool> mapChamberVFATError;
323  std::map<ME4IdsKey, bool> mapChamberOHWarning;
324  std::map<ME4IdsKey, bool> mapChamberOHError;
325  std::map<ME4IdsKey, bool> mapChamberAMCWarning;
326  std::map<ME4IdsKey, bool> mapChamberAMCError;
327  std::map<ME4IdsKey, bool> mapChamberAMC13Error;
328 
329  for (auto amc13It = gemAMC13->begin(); amc13It != gemAMC13->end(); ++amc13It) {
330  int fedId = (*amc13It).first;
331  if (mapFEDIdToPosition_.find(fedId) == mapFEDIdToPosition_.end()) {
332  continue;
333  }
334  int nXBin = mapFEDIdToPosition_[fedId];
335 
336  const auto &range = (*amc13It).second;
337  for (auto amc13 = range.first; amc13 != range.second; ++amc13) {
338  Bool_t bWarn = false;
339  Bool_t bErr = false;
340 
343 
344  if (bFillAMC_) {
346  if (warnings.InValidAMC)
347  FillWithRiseErr(h2AMC13Status_, nXBin, 2, bWarn);
348  }
349 
351  if (errors.InValidSize)
352  FillWithRiseErr(h2AMC13Status_, nXBin, 3, bErr);
353  if (errors.failTrailerCheck)
354  FillWithRiseErr(h2AMC13Status_, nXBin, 4, bErr);
355  if (errors.failFragmentLength)
356  FillWithRiseErr(h2AMC13Status_, nXBin, 5, bErr);
357  if (errors.failTrailerMatch)
358  FillWithRiseErr(h2AMC13Status_, nXBin, 6, bErr);
359  if (errors.moreTrailers)
360  FillWithRiseErr(h2AMC13Status_, nXBin, 7, bErr);
361  if (errors.crcModified)
362  FillWithRiseErr(h2AMC13Status_, nXBin, 8, bErr);
363  if (errors.slinkError)
364  FillWithRiseErr(h2AMC13Status_, nXBin, 9, bErr);
365  if (errors.wrongFedId)
366  FillWithRiseErr(h2AMC13Status_, nXBin, 10, bErr);
367  }
368  }
369 
370  if (!bWarn && !bErr) {
372  h2AMC13Status_->Fill(nXBin, 1);
373  }
374  } else {
375  auto &listChamber = mapAMC13ToListChamber_[fedId];
376  for (auto gid : listChamber) {
377  ME4IdsKey key4Ch{gid.region(), gid.station(), gid.layer(), gid.chamber()};
378  if (bErr)
379  mapChamberAMC13Error[key4Ch] = false;
380  }
381  }
382  }
383  }
384 
385  MonitorElement *h2AMCStatus = nullptr;
386 
387  for (auto amcIt = gemAMC->begin(); amcIt != gemAMC->end(); ++amcIt) {
388  int fedId = (*amcIt).first;
389  if (mapFEDIdToAMCStatus_.find(fedId) == mapFEDIdToAMCStatus_.end()) {
390  continue;
391  }
392  h2AMCStatus = mapFEDIdToAMCStatus_[fedId];
393 
394  const GEMAMCStatusCollection::Range &range = (*amcIt).second;
395  for (auto amc = range.first; amc != range.second; ++amc) {
396  Bool_t bWarn = false;
397  Bool_t bErr = false;
398 
399  Int_t nAMCNum = amc->amcNumber();
400 
401  GEMAMCStatus::Warnings warnings{amc->warnings()};
402  GEMAMCStatus::Errors errors{amc->errors()};
403 
404  if (bFillAMC_) {
406  if (warnings.InValidOH)
407  FillWithRiseErr(h2AMCStatus, nAMCNum, 2, bWarn);
408  if (warnings.backPressure)
409  FillWithRiseErr(h2AMCStatus, nAMCNum, 3, bWarn);
410  }
411 
413  if (errors.badEC)
414  FillWithRiseErr(h2AMCStatus, nAMCNum, 4, bErr);
415  if (errors.badBC)
416  FillWithRiseErr(h2AMCStatus, nAMCNum, 5, bErr);
417  if (errors.badOC)
418  FillWithRiseErr(h2AMCStatus, nAMCNum, 6, bErr);
419  if (errors.badRunType)
420  FillWithRiseErr(h2AMCStatus, nAMCNum, 7, bErr);
421  if (errors.badCRC)
422  FillWithRiseErr(h2AMCStatus, nAMCNum, 8, bErr);
423  if (errors.MMCMlocked)
424  FillWithRiseErr(h2AMCStatus, nAMCNum, 9, bErr);
425  if (errors.DAQclocklocked)
426  FillWithRiseErr(h2AMCStatus, nAMCNum, 10, bErr);
427  if (errors.DAQnotReday)
428  FillWithRiseErr(h2AMCStatus, nAMCNum, 11, bErr);
429  if (errors.BC0locked)
430  FillWithRiseErr(h2AMCStatus, nAMCNum, 12, bErr);
431  }
432  }
433 
434  if (!bWarn && !bErr) {
436  h2AMCStatus->Fill(nAMCNum, 1);
437  }
438  } else {
439  auto &listChamber = mapAMCToListChamber_[{fedId, nAMCNum}];
440  for (auto gid : listChamber) {
441  ME4IdsKey key4Ch{gid.region(), gid.station(), gid.layer(), gid.chamber()};
442  if (bErr)
443  mapChamberAMCError[key4Ch] = false;
444  if (bWarn)
445  mapChamberAMCWarning[key4Ch] = false;
446  }
447  }
448  }
449  }
450 
451  for (auto ohIt = gemOH->begin(); ohIt != gemOH->end(); ++ohIt) {
452  GEMDetId gid = (*ohIt).first;
453  ME3IdsKey key3{gid.region(), gid.station(), gid.layer()};
454  ME4IdsKey key4{gid.region(), gid.station(), gid.layer(), gid.chamber()}; // WARNING: Chamber, not iEta
455  MEStationInfo &stationInfo = mapStationInfo_[key3];
456 
457  const GEMOHStatusCollection::Range &range = (*ohIt).second;
458  for (auto OHStatus = range.first; OHStatus != range.second; ++OHStatus) {
459  Int_t nIdxModule = getIdxModule(gid.station(), OHStatus->chamberType());
460  Int_t nCh = (gid.chamber() - 1) * stationInfo.nNumModules_ + nIdxModule;
461  ME4IdsKey key4Mod{gid.region(), gid.station(), gid.layer(), nCh}; // WARNING: Chamber+Module, not iEta
462 
463  GEMOHStatus::Warnings warnings{OHStatus->warnings()};
464  if (warnings.EvtNF)
465  mapStatusOH_.Fill(key3, nCh, 2);
466  if (warnings.InNF)
467  mapStatusOH_.Fill(key3, nCh, 3);
468  if (warnings.L1aNF)
469  mapStatusOH_.Fill(key3, nCh, 4);
470  if (warnings.EvtSzW)
471  mapStatusOH_.Fill(key3, nCh, 5);
472  if (warnings.InValidVFAT)
473  mapStatusOH_.Fill(key3, nCh, 6);
474 
475  GEMOHStatus::Errors errors{OHStatus->errors()};
476  if (errors.EvtF)
477  mapStatusOH_.Fill(key3, nCh, 7);
478  if (errors.InF)
479  mapStatusOH_.Fill(key3, nCh, 8);
480  if (errors.L1aF)
481  mapStatusOH_.Fill(key3, nCh, 9);
482  if (errors.EvtSzOFW)
483  mapStatusOH_.Fill(key3, nCh, 10);
484  if (errors.Inv)
485  mapStatusOH_.Fill(key3, nCh, 11);
486  if (errors.OOScAvV)
487  mapStatusOH_.Fill(key3, nCh, 12);
488  if (errors.OOScVvV)
489  mapStatusOH_.Fill(key3, nCh, 13);
490  if (errors.BxmAvV)
491  mapStatusOH_.Fill(key3, nCh, 14);
492  if (errors.BxmVvV)
493  mapStatusOH_.Fill(key3, nCh, 15);
494  if (errors.InUfw)
495  mapStatusOH_.Fill(key3, nCh, 16);
496  if (errors.badVFatCount)
497  mapStatusOH_.Fill(key3, nCh, 17);
498 
499  Bool_t bWarn = warnings.wcodes != 0;
500  Bool_t bErr = errors.codes != 0;
501  if (!bWarn && !bErr)
502  mapStatusOH_.Fill(key3, nCh, 1);
503  if (bWarn)
504  mapChamberOHWarning[key4Mod] = false;
505  if (bErr)
506  mapChamberOHError[key4Mod] = false;
507  mapChamberAll[key4Mod] = true;
508  }
509  }
510 
511  for (auto vfatIt = gemVFAT->begin(); vfatIt != gemVFAT->end(); ++vfatIt) {
512  GEMDetId gid = (*vfatIt).first;
513  ME3IdsKey key3{gid.region(), gid.station(), gid.layer()};
514  ME4IdsKey key4Ch{gid.region(), gid.station(), gid.layer(), gid.chamber()}; // WARNING: Chamber, not iEta
515  MEStationInfo &stationInfo = mapStationInfo_[key3];
516  Int_t nNumVFATPerModule = stationInfo.nMaxVFAT_ / stationInfo.nNumModules_;
517 
518  const GEMVFATStatusCollection::Range &range = (*vfatIt).second;
519 
520  for (auto vfatStat = range.first; vfatStat != range.second; ++vfatStat) {
521  Int_t nIdxModule = getIdxModule(gid.station(), vfatStat->chamberType());
522  Int_t nCh = (gid.chamber() - 1) * stationInfo.nNumModules_ + nIdxModule;
523  ME4IdsKey key4Mod{gid.region(), gid.station(), gid.layer(), nCh}; // WARNING: Chamber+Module, not iEta
524 
525  Int_t nIdxVFAT = vfatStat->vfatPosition();
526  Int_t nIdxVFATMod = nIdxVFAT;
527  if (stationInfo.nNumModules_ > 1) {
528  nIdxVFATMod = nIdxVFAT + nNumVFATPerModule * (nIdxModule - 1);
529  }
530 
531  GEMVFATStatus::Warnings warnings{vfatStat->warnings()};
532  if (warnings.basicOFW)
533  mapStatusVFATPerCh_.Fill(key4Ch, nIdxVFATMod, 2);
534  if (warnings.zeroSupOFW)
535  mapStatusVFATPerCh_.Fill(key4Ch, nIdxVFATMod, 3);
536 
537  GEMVFATStatus::Errors errors{(uint8_t)vfatStat->errors()};
538  if (errors.vc)
539  mapStatusVFATPerCh_.Fill(key4Ch, nIdxVFATMod, 4);
540  if (errors.InValidHeader)
541  mapStatusVFATPerCh_.Fill(key4Ch, nIdxVFATMod, 5);
542  if (errors.EC)
543  mapStatusVFATPerCh_.Fill(key4Ch, nIdxVFATMod, 6);
544  if (errors.BC)
545  mapStatusVFATPerCh_.Fill(key4Ch, nIdxVFATMod, 7);
546 
547  Bool_t bWarn = warnings.wcodes != 0;
548  Bool_t bErr = errors.codes != 0;
549  if (!bWarn && !bErr)
550  mapStatusVFATPerCh_.Fill(key4Ch, nIdxVFATMod, 1);
551  if (bWarn)
552  mapChamberVFATWarning[key4Mod] = false;
553  if (bErr)
554  mapChamberVFATError[key4Mod] = false;
555  if (bWarn)
556  mapStatusWarnVFATPerLayer_.Fill(key3, nCh, nIdxVFAT);
557  if (bErr)
558  mapStatusErrVFATPerLayer_.Fill(key3, nCh, nIdxVFAT);
559  mapChamberAll[key4Mod] = true;
560  }
561  }
562 
563  if (nRunType_ == GEMDQM_RUNTYPE_ALLPLOTS || nRunType_ == GEMDQM_RUNTYPE_ONLINE) {
564  // Summarizing all presence of status of each chamber
565  for (auto const &[key4, bErr] : mapChamberAll) {
566  ME3IdsKey key3 = key4Tokey3(key4);
567  Int_t nChamber = keyToChamber(key4);
568  h2SummaryStatusAll->Fill(nChamber, mapStationToIdx_[key3]);
569  }
570 
571  // Summarizing all presence of status of each chamber
572  FillStatusSummaryPlot(mapChamberAll, h2SummaryStatusAll);
573  // Summarizing all the error and warning occupancy
574  FillStatusSummaryPlot(mapChamberVFATWarning, h2SummaryStatusVFATWarning, &mapChamberWarning);
575  FillStatusSummaryPlot(mapChamberVFATError, h2SummaryStatusVFATError, &mapChamberError);
576  FillStatusSummaryPlot(mapChamberOHWarning, h2SummaryStatusOHWarning, &mapChamberWarning);
577  FillStatusSummaryPlot(mapChamberOHError, h2SummaryStatusOHError, &mapChamberError);
578  FillStatusSummaryPlot(mapChamberAMCWarning, h2SummaryStatusAMCWarning, &mapChamberWarning);
579  FillStatusSummaryPlot(mapChamberAMCError, h2SummaryStatusAMCError, &mapChamberError);
580  FillStatusSummaryPlot(mapChamberAMC13Error, h2SummaryStatusAMC13Error, &mapChamberError);
581 
582  FillStatusSummaryPlot(mapChamberWarning, h2SummaryStatusWarning);
583  FillStatusSummaryPlot(mapChamberError, h2SummaryStatusError);
584  }
585 }
586 
virtual void setTitle(const std::string &title)
set (ie. change) histogram/profile title
static void fillDescriptions(edm::ConfigurationDescriptions &descriptions)
constexpr int station() const
Definition: GEMDetId.h:179
ESGetTokenH3DDVariant esConsumes(std::string const &Record, edm::ConsumesCollector &)
Definition: DeDxTools.cc:283
MEMapInfT< MEMap4Ids, ME4IdsKey > MEMap4Inf
Definition: GEMDQMBase.h:481
dqm::impl::MonitorElement * CreateSummaryHist(DQMStore::IBooker &ibooker, TString strName)
Definition: GEMDQMBase.cc:148
int ProcessWithMEMap3WithChamber(BookingHelper &bh, ME4IdsKey key) override
GEMDAQStatusSource(const edm::ParameterSet &cfg)
constexpr int region() const
Definition: GEMDetId.h:171
Int_t nRunType_
Definition: GEMDQMBase.h:550
int getIdxModule(const int, const int)
Definition: GEMDQMBase.h:660
T const & getData(const ESGetToken< T, R > &iToken) const noexcept(false)
Definition: EventSetup.h:119
void FillWithRiseErr(MonitorElement *h, Int_t nX, Int_t nY, Bool_t &bErr)
virtual void setCurrentFolder(std::string const &fullpath)
Definition: DQMStore.cc:36
edm::EDGetToken tagAMC13_
MonitorElement * h2SummaryStatusAMCWarning
MEMapInfT< MEMap3Ids, ME3IdsKey > MEMap3Inf
Definition: GEMDQMBase.h:480
MonitorElement * h2AMC13Status_
MonitorElement * h2SummaryStatusAMCError
int initGeometry(edm::EventSetup const &iSetup)
Definition: GEMDQMBase.cc:27
std::tuple< Int_t, Int_t, Int_t, Int_t > ME4IdsKey
std::map< UInt_t, int > mapFEDIdToRe_
int SetLabelForVFATs(K key, Int_t nNumEtaPartitions, Int_t nAxis, Int_t nNumBin=-1)
Definition: GEMDQMBase.h:365
std::map< ME3IdsKey, MEStationInfo > mapStationInfo_
Definition: GEMDQMBase.h:624
std::map< UInt_t, int > mapFEDIdToSt_
std::map< std::tuple< int, int >, std::vector< GEMDetId > > mapAMCToListChamber_
int loadChambers()
Definition: GEMDQMBase.cc:56
constexpr int layer() const
Definition: GEMDetId.h:190
int Fill(K key, Double_t x)
Definition: GEMDQMBase.h:401
std::string log_category_
Definition: GEMDQMBase.h:552
constexpr int chamber() const
Definition: GEMDetId.h:183
edm::EDGetToken tagVFAT_
MonitorElement * h2SummaryStatusVFATError
const edm::ESGetToken< GEMChMap, GEMChMapRcd > gemChMapToken_
void Fill(long long x)
MEMap3Inf mapStatusWarnVFATPerLayer_
std::map< UInt_t, MonitorElement * > mapFEDIdToAMCStatus_
void bookHistograms(DQMStore::IBooker &, edm::Run const &, edm::EventSetup const &) override
edm::EDGetToken tagOH_
MonitorElement * h2SummaryStatusError
MEMap3Inf mapStatusErrVFATPerLayer_
int GenerateMEPerChamber(DQMStore::IBooker &ibooker)
Definition: GEMDQMBase.cc:180
void SetLabelAMCStatus(MonitorElement *h2Status)
void LoadROMap(edm::EventSetup const &iSetup)
std::map< UInt_t, int > mapFEDIdToPosition_
void analyze(edm::Event const &e, edm::EventSetup const &eSetup) override
Transition
Definition: Transition.h:12
#define DEFINE_FWK_MODULE(type)
Definition: MakerMacros.h:16
virtual void setBinLabel(int bin, const std::string &label, int axis=1)
set bin label for x, y or z axis (axis=1, 2, 3 respectively)
DigiRangeIterator begin() const
void SetLabelAMC13Status(MonitorElement *h2Status)
std::map< int, std::vector< GEMDetId > > mapAMC13ToListChamber_
MonitorElement * h2SummaryStatusVFATWarning
MonitorElement * h2SummaryStatusAll
const GEMGeometry * GEMGeometry_
Definition: GEMDQMBase.h:609
void SetLabelVFATStatus(MonitorElement *h2Status)
std::pair< const_iterator, const_iterator > Range
MonitorElement * book2D(TString const &name, TString const &title, int nchX, double lowX, double highX, int nchY, double lowY, double highY, FUNC onbooking=NOOP())
Definition: DQMStore.h:212
void add(std::string const &label, ParameterSetDescription const &psetDescription)
DQMStore::IBooker * getBooker()
Definition: GEMDQMBase.h:94
void SetLabelOHStatus(MonitorElement *h2Status)
bool isValid() const
Definition: HandleBase.h:70
std::string getNameDirLayer(ME3IdsKey key3)
Definition: GEMDQMBase.h:718
int bookND(BookingHelper &bh, K key)
Definition: GEMDQMBase.h:307
MonitorElement * h2SummaryStatusOHWarning
ME3IdsKey key4Tokey3(ME4IdsKey key)
Definition: GEMDQMBase.h:583
MonitorElement * h2SummaryStatusAMC13Error
HLT enums.
int ProcessWithMEMap3(BookingHelper &bh, ME3IdsKey key) override
std::tuple< Int_t, Int_t, Int_t > ME3IdsKey
void SetBinConfX(Int_t nBins, Double_t dL=0.5, Double_t dH=-1048576.0)
Definition: GEMDQMBase.h:281
Definition: errors.py:1
MonitorElement * h2SummaryStatusWarning
Log< level::Warning, false > LogWarning
Definition: AMCSpec.h:8
MonitorElement * h2SummaryStatusOHError
void SetBinConfY(Int_t nBins, Double_t dL=0.5, Double_t dH=-1048576.0)
Definition: GEMDQMBase.h:289
dqm::impl::MonitorElement * FindHist(K key)
Definition: GEMDQMBase.h:328
DigiRangeIterator end() const
int SetLabelForChambers(K key, Int_t nAxis, Int_t nNumBin=-1, Int_t nIdxStart=1, Int_t nNumModules=1)
Definition: GEMDQMBase.h:337
Definition: event.py:1
Definition: Run.h:45
edm::EDGetToken tagAMC_