17 #include <TDirectoryFile.h> 29 typedef std::tuple<int, int, int>
IdVFAT;
40 Float_t fNumErrVFAT = 0,
41 Float_t fNumWarnVFAT = 0,
42 Float_t fNumErrOH = 0,
43 Float_t fNumWarnOH = 0,
44 Float_t fNumErrAMC = 0,
45 Float_t fNumWarnAMC = 0,
46 Float_t fNumErrAMC13 = 0)
47 : fNumTotal_(fNumTotal),
49 fNumErrVFAT_(fNumErrVFAT),
50 fNumWarnVFAT_(fNumWarnVFAT),
51 fNumErrOH_(fNumErrOH),
52 fNumWarnOH_(fNumWarnOH),
53 fNumErrAMC_(fNumErrAMC),
54 fNumWarnAMC_(fNumWarnAMC),
55 fNumErrAMC13_(fNumErrAMC13) {}
75 void createTableWatchingSummary();
85 std::vector<MonitorElement *> &listOccPlots,
105 std::string strName, Int_t nIdxX, Int_t nIdxY, Float_t fAll, Float_t fNumOcc, Float_t fNumErr, Float_t fNumWarn);
107 Int_t UpdateStatusChamber(Int_t nIdxLayer, Int_t nIdxCh, Int_t nLumiCurr, NumStatus numStatus);
108 Int_t UpdateStatusChamber(Int_t nIdxLayer, Int_t nIdxCh, Int_t nIdxVFAT, Int_t nLumiCurr, NumStatus numStatus);
109 Int_t UpdateStatusChamber(std::vector<StatusInfo> &listStatus,
110 NumStatus &numStatus,
112 NumStatus numStatusNew);
122 const Int_t nCodeFine_ = 1;
123 const Int_t nCodeError_ = 2;
124 const Int_t nCodeWarning_ = 3;
125 const Int_t nCodeLowError_ = 4;
127 const Int_t nBitWarnVFAT_ = 7;
128 const Int_t nBitErrVFAT_ = 6;
129 const Int_t nBitWarnOH_ = 5;
130 const Int_t nBitErrOH_ = 4;
131 const Int_t nBitWarnAMC_ = 3;
132 const Int_t nBitErrAMC_ = 2;
133 const Int_t nBitErrAMC13_ = 1;
134 const Int_t nBitOcc_ = 0;
136 const Int_t nNumVFATs_ = 24;
138 const Int_t nMaxLumi_ = 6000;
160 fCutErr_ =
cfg.getParameter<
double>(
"cutErr");
161 fCutLowErr_ =
cfg.getParameter<
double>(
"cutLowErr");
162 fCutWarn_ =
cfg.getParameter<
double>(
"cutWarn");
163 nResolutionLumi_ =
cfg.getParameter<
int>(
"resolutionLumi");
164 bIsStatusChambersInit_ =
false;
169 desc.add<
double>(
"cutErr", 0.05);
170 desc.add<
double>(
"cutLowErr", 0.00);
171 desc.add<
double>(
"cutWarn", 0.05);
172 desc.add<
int>(
"resolutionLumi", 1);
173 descriptions.
add(
"GEMDQMHarvester",
desc);
182 drawSummaryHistogram(store, nLumiCurr);
186 Float_t fReportSummary = -1.0;
188 std::string strSrcStatusA =
"GEM/DAQStatus/chamberAllStatus";
189 std::string strSrcStatusE =
"GEM/DAQStatus/chamberErrors";
190 std::string strSrcStatusW =
"GEM/DAQStatus/chamberWarnings";
191 std::string strSrcStatusEVFAT =
"GEM/DAQStatus/chamberVFATErrors";
192 std::string strSrcStatusWVFAT =
"GEM/DAQStatus/chamberVFATWarnings";
193 std::string strSrcStatusEOH =
"GEM/DAQStatus/chamberOHErrors";
194 std::string strSrcStatusWOH =
"GEM/DAQStatus/chamberOHWarnings";
195 std::string strSrcStatusEAMC =
"GEM/DAQStatus/chamberAMCErrors";
196 std::string strSrcStatusWAMC =
"GEM/DAQStatus/chamberAMCWarnings";
197 std::string strSrcStatusEAMC13 =
"GEM/DAQStatus/chamberAMC13Errors";
200 std::string strSrcVFATStatusW =
"GEM/DAQStatus/vfat_statusWarnSum";
201 std::string strSrcVFATStatusE =
"GEM/DAQStatus/vfat_statusErrSum";
218 getGeometryInfo(store, h2SrcStatusE);
220 if (h2SrcStatusA !=
nullptr && h2SrcStatusE !=
nullptr && h2SrcStatusW !=
nullptr) {
222 createSummaryHist(store, h2SrcStatusE, h2Sum);
223 createTableWatchingSummary();
225 std::vector<MonitorElement *> listOccPlots(listLayer_.size() + 1);
226 for (
const auto &strSuffix : listLayer_) {
227 if (mapIdxLayer_.find(strSuffix) == mapIdxLayer_.end())
229 auto nIdxLayer = mapIdxLayer_[strSuffix];
231 if (h2SrcVFATOcc ==
nullptr)
233 listOccPlots[nIdxLayer] = h2SrcVFATOcc;
234 mapIdxToChamberInOcc_[nIdxLayer] = {};
235 Int_t nNumModule = mapNumModule_[nIdxLayer];
237 for (Int_t
i = 1;
i <= h2SrcVFATOcc->
getNbinsX();
i++) {
240 std::vector<int> listNumExtract;
242 while (!strSrc.empty()) {
243 auto nPosDigit = strSrc.find_first_of(
"0123456789");
244 if (nPosDigit == std::string::npos)
246 std::stringstream
ss;
247 ss << strSrc.substr(nPosDigit);
255 listNumExtract.push_back(nExtract);
258 if (listNumExtract.empty()) {
259 edm::LogError(
"GEMDQMHarvester") <<
"Error: Wrong label of GEM VFAT occupancy plot: " << strLabel;
260 }
else if (listNumExtract.size() > 1 && nNumModule > 1) {
261 Int_t nCh = (listNumExtract[0] - 1) * nNumModule + listNumExtract[1];
262 mapIdxToChamberInOcc_[nIdxLayer][nCh] =
i;
264 mapIdxToChamberInOcc_[nIdxLayer][listNumExtract[0]] =
i;
269 fReportSummary = refineSummaryHistogram(strTitleSummary,
284 for (
const auto &strSuffix : listLayer_) {
285 if (mapIdxLayer_.find(strSuffix) == mapIdxLayer_.end())
287 auto nIdxLayer = mapIdxLayer_[strSuffix];
291 if (h2SrcVFATOcc ==
nullptr || h2SrcVFATStatusW ==
nullptr || h2SrcVFATStatusE ==
nullptr)
295 createSummaryVFAT(store, h2SrcVFATStatusE, strSuffix, h2SumVFAT);
296 refineSummaryVFAT(strSuffix, h2SumVFAT, h2SrcVFATOcc, h2SrcVFATStatusE, h2SrcVFATStatusW, nLumiCurr, nIdxLayer);
297 TString strNewTitle = h2SrcVFATStatusE->
getTitle();
298 h2SumVFAT->
setTitle((
const char *)strNewTitle.ReplaceAll(
"errors",
"errors/warnings"));
302 createLumiFuncHist(store, strSuffix, nIdxLayer, nLumiCurr);
306 for (
const auto &strSuffix : listLayer_) {
307 if (mapIdxLayer_.find(strSuffix) == mapIdxLayer_.end())
309 Int_t nIdxLayer = mapIdxLayer_[strSuffix];
310 auto nNumChamber = mapNumChPerChamber_[nIdxLayer] / mapNumModule_[nIdxLayer];
311 createInactiveChannelFracHist(store, strSuffix, nNumChamber);
318 if (bIsStatusChambersInit_)
321 for (
const auto &[nIdxLayer, nNumCh] : mapNumChPerChamber_) {
322 for (Int_t
i = 1;
i <= nNumCh;
i++) {
323 mapStatusChambersSummary_[{nIdxLayer,
i}] = std::vector<StatusInfo>();
324 mapNumStatusChambersSummary_[{nIdxLayer,
i}] =
NumStatus();
325 for (Int_t
j = 1;
j <= nNumVFATs_;
j++) {
326 mapStatusVFATsSummary_[{nIdxLayer,
i,
j}] = std::vector<StatusInfo>();
327 mapNumStatusVFATsSummary_[{nIdxLayer,
i,
j}] =
NumStatus();
332 bIsStatusChambersInit_ =
true;
338 for (Int_t
i = 1;
i <=
nBinX;
i++) {
341 for (Int_t
i = 1;
i <=
nBinY;
i++) {
351 mapIdxLayer_.clear();
352 mapNumChPerChamber_.clear();
354 if (h2Src !=
nullptr) {
356 listLayer_.push_back(
"");
358 for (Int_t
i = 1;
i <=
nBinY;
i++) {
360 auto nPos = strLabelFull.find(
';');
361 auto strLayer = strLabelFull.substr(nPos + 1);
363 if (nBinXActual > 108) {
364 if (strLayer.find(
"GE11") != std::string::npos) {
366 }
else if (strLayer.find(
"GE21") != std::string::npos) {
368 }
else if (strLayer.find(
"GE01") != std::string::npos) {
372 listLayer_.push_back(strLayer);
373 mapIdxLayer_[strLayer] =
i;
374 mapNumChPerChamber_[
i] = nBinXActual;
375 mapNumModule_[
i] = (strLayer.find(
"GE21") != std::string::npos ? 4 : 1);
378 listLayer_.push_back(
"");
379 if (store->
get(
"GEM/Digis/occupancy_GE11-M-L1/occ_GE11-M-01L1-S") !=
nullptr) {
380 listLayer_.push_back(
"_GE11-P-L2");
381 listLayer_.push_back(
"_GE11-P-L1");
382 listLayer_.push_back(
"_GE11-M-L1");
383 listLayer_.push_back(
"_GE11-M-L2");
384 mapIdxLayer_[
"_GE11-P-L2"] = 1;
385 mapIdxLayer_[
"_GE11-P-L1"] = 2;
386 mapIdxLayer_[
"_GE11-M-L1"] = 3;
387 mapIdxLayer_[
"_GE11-M-L2"] = 4;
388 mapNumChPerChamber_[1] = 36;
389 mapNumChPerChamber_[2] = 36;
390 mapNumChPerChamber_[3] = 36;
391 mapNumChPerChamber_[4] = 36;
421 copyLabels(h2Src, h2Sum);
425 std::string strName, Int_t nIdxX, Int_t nIdxY, Float_t fAll, Float_t fNumOcc, Float_t fNumErr, Float_t fNumWarn) {
426 if (fNumErr > fCutErr_ * fAll)
428 else if (fNumErr > fCutLowErr_ * fAll)
429 return nCodeLowError_;
430 else if (fNumWarn > fCutWarn_ * fAll)
431 return nCodeWarning_;
432 else if (fNumOcc > 0)
441 std::vector<MonitorElement *> &listOccPlots,
454 Int_t nAllBin = 0, nFineBin = 0;
455 for (Int_t
j = 1;
j <=
nBinY;
j++) {
456 Int_t
nBinX = mapNumChPerChamber_[
j];
457 auto h2SrcOcc = listOccPlots[
j];
458 auto &mapIdxOccChamber = mapIdxToChamberInOcc_[
j];
460 if (h2SrcOcc !=
nullptr) {
461 nBinYOcc = h2SrcOcc->getNbinsY();
465 for (Int_t
i = 1;
i <=
nBinX;
i++) {
467 Int_t nIdxChOcc = mapIdxOccChamber[
i];
468 for (Int_t r = 1; r <= nBinYOcc; r++) {
469 fOcc += h2SrcOcc->getBinContent(nIdxChOcc, r);
475 Float_t fStatusErrVFAT = h2SrcStatusEVFAT !=
nullptr ? h2SrcStatusEVFAT->
getBinContent(
i,
j) : 0;
476 Float_t fStatusWarnVFAT = h2SrcStatusWVFAT !=
nullptr ? h2SrcStatusWVFAT->
getBinContent(
i,
j) : 0;
477 Float_t fStatusErrOH = h2SrcStatusEOH !=
nullptr ? h2SrcStatusEOH->
getBinContent(
i,
j) : 0;
478 Float_t fStatusWarnOH = h2SrcStatusWOH !=
nullptr ? h2SrcStatusWOH->
getBinContent(
i,
j) : 0;
479 Float_t fStatusErrAMC = h2SrcStatusEAMC !=
nullptr ? h2SrcStatusEAMC->
getBinContent(
i,
j) : 0;
480 Float_t fStatusWarnAMC = h2SrcStatusWAMC !=
nullptr ? h2SrcStatusWAMC->
getBinContent(
i,
j) : 0;
481 Float_t fStatusErrAMC13 = h2SrcStatusEAMC13 !=
nullptr ? h2SrcStatusEAMC13->
getBinContent(
i,
j) : 0;
491 UpdateStatusChamber(
j,
i, nLumiCurr, numStatus);
493 Int_t nRes = assessOneBin(strName,
i,
j, fStatusAll, fOcc, fStatusErr, fStatusWarn);
502 return ((Float_t)nFineBin) / nAllBin;
513 for (Int_t
j = 1;
j <=
nBinY;
j++) {
515 for (Int_t
i = 1;
i <=
nBinX;
i++) {
519 Float_t fStatusAll = fOcc + fStatusErr + fStatusWarn;
520 NumStatus numStatus(fStatusAll, fOcc, fStatusErr, fStatusWarn, 0, 0, 0, 0, 0);
521 UpdateStatusChamber(nIdxLayer,
i,
j, nLumiCurr, numStatus);
523 Int_t nRes = assessOneBin(strName,
i,
j, fStatusAll, fOcc, fStatusErr, fStatusWarn);
532 if (!bIsStatusChambersInit_)
534 if (0 >= nIdxCh || nIdxCh > mapNumChPerChamber_[nIdxLayer])
536 auto &listStatus = mapStatusChambersSummary_[{nIdxLayer, nIdxCh}];
537 auto &numStatusPrev = mapNumStatusChambersSummary_[{nIdxLayer, nIdxCh}];
538 return UpdateStatusChamber(listStatus, numStatusPrev, nLumiCurr, numStatus);
542 Int_t nIdxLayer, Int_t nIdxCh, Int_t nIdxVFAT, Int_t nLumiCurr,
NumStatus numStatus) {
543 if (!bIsStatusChambersInit_)
545 if (0 >= nIdxCh || nIdxCh > mapNumChPerChamber_[nIdxLayer])
547 if (0 >= nIdxVFAT || nIdxVFAT > nNumVFATs_)
549 auto &listStatus = mapStatusVFATsSummary_[{nIdxLayer, nIdxCh, nIdxVFAT}];
550 auto &numStatusPrev = mapNumStatusVFATsSummary_[{nIdxLayer, nIdxCh, nIdxVFAT}];
551 return UpdateStatusChamber(listStatus, numStatusPrev, nLumiCurr, numStatus);
579 nStatus = (numStatusNew.
fNumOcc_ > 0 ? 1 << nBitOcc_ : 0) | (fNumAddErrAMC13 > 0 ? 1 << nBitErrAMC13_ : 0) |
580 (fNumAddErrAMC > 0 ? 1 << nBitErrAMC_ : 0) | (fNumAddWarnAMC > 0 ? 1 << nBitWarnAMC_ : 0) |
581 (fNumAddErrOH > 0 ? 1 << nBitErrOH_ : 0) | (fNumAddWarnOH > 0 ? 1 << nBitWarnOH_ : 0) |
582 (fNumAddErrVFAT > 0 ? 1 << nBitErrVFAT_ : 0) | (fNumAddWarnVFAT > 0 ? 1 << nBitWarnVFAT_ : 0);
590 if (listStatus.empty()) {
591 listStatus.push_back(statusNew);
593 auto &statusLastPre = listStatus.back();
594 if (statusLastPre.nStatus == nStatus) {
595 statusLastPre.nLumiEnd = nLumiCurr;
597 listStatus.push_back(statusNew);
608 auto &nNumCh = mapNumChPerChamber_[nIdxLayer];
613 Int_t nNumBinLumi = ((nLumiCurr - 1) / nResolutionLumi_) + 1;
617 if (mapHistLumiFunc_.find(nIdxLayer) == mapHistLumiFunc_.end()) {
619 h2Summary = store->
book2S(
"chamberStatus_inLumi" + strSuffix,
620 "Chamber status on lumi-block " + strSuffix.substr(1),
621 nMaxLumi_ / nResolutionLumi_,
623 (Float_t)(nMaxLumi_ + 1),
628 mapHistLumiFunc_[nIdxLayer] = h2Summary;
630 h2Summary->
setXTitle(
"Luminosity block");
632 Int_t nNumModule = mapNumModule_[nIdxLayer];
633 for (Int_t
i = 1;
i <= nNumCh;
i++) {
634 if (nNumModule <= 1) {
637 Int_t nCh = (
i - 1) / nNumModule + 1;
638 Int_t nModule = (
i - 1) / nNumModule + 1;
639 h2Summary->
setBinLabel(
i, Form(
"%i M%i", nCh, nModule), 2);
643 h2Summary = mapHistLumiFunc_[nIdxLayer];
646 for (Int_t nIdxCh = 1; nIdxCh <= nNumCh; nIdxCh++) {
647 auto &listStatus = mapStatusChambersSummary_[{nIdxLayer, nIdxCh}];
649 Int_t nIdxStatus = 0;
650 for (Int_t nIdxLumi = 0; nIdxLumi < nNumBinLumi; nIdxLumi++) {
652 Int_t nLumiStart = 1 + nIdxLumi * nResolutionLumi_;
653 Int_t nLumiEnd = (1 + nIdxLumi) * nResolutionLumi_;
654 if (nLumiEnd > nLumiCurr)
655 nLumiEnd = nLumiCurr;
657 Int_t nStatusSum = 0;
661 if (listStatus[nIdxStatus].nLumiEnd < nLumiStart) {
663 if (nIdxStatus >= (
int)listStatus.size()) {
669 nStatusSum = listStatus[nIdxStatus].nStatus;
672 if (nIdxStatus + 1 >= (
int)listStatus.size() || listStatus[nIdxStatus].nLumiEnd >= nLumiEnd) {
677 if (nIdxStatus >= (
int)listStatus.size()) {
683 if (nMaxBin < nIdxLumi + 1)
684 nMaxBin = nIdxLumi + 1;
688 for (Int_t nX = 1; nX <= nMaxBin; nX++) {
695 char cChType = (nIdxCh % 2 == 0 ?
'L' :
'S');
698 if (strSuffix.find(
"-M-") != std::string::npos)
700 else if (strSuffix.find(
"-P-") != std::string::npos)
705 if (strSuffix.find(
"-L1") != std::string::npos)
707 else if (strSuffix.find(
"-L2") != std::string::npos)
713 "GEM/Digis/occupancy_GE11-%c-L%i/occ_GE11-%c-%02iL%i-%c", cRegion, nLayer, cRegion, nIdxCh, nLayer, cChType);
719 char cChType = (nIdxCh % 2 == 0 ?
'L' :
'S');
722 if (strSuffix.find(
"-M-") != std::string::npos)
724 else if (strSuffix.find(
"-P-") != std::string::npos)
729 if (strSuffix.find(
"-L1") != std::string::npos)
731 else if (strSuffix.find(
"-L2") != std::string::npos)
737 "GEM/Digis/occupancy_GE21-%c-L%i/occ_GE21-%c-%02iL%i-%c", cRegion, nLayer, cRegion, nIdxCh, nLayer, cChType);
747 std::string strTitle =
"The fraction of inactive channels in " + strSuffix.substr(1);
749 store->
book1D(
"inactive_frac_chamber" + strSuffix, strTitle, nNumChamber, 0.5, nNumChamber + 0.5);
751 h2InactiveChannel->
setYTitle(
"Fraction of inactive channels");
752 for (Int_t
i = 1;
i <= nNumChamber;
i++) {
758 if (strSuffix.find(
"_GE11") != std::string::npos) {
760 }
else if (strSuffix.find(
"_GE21") != std::string::npos) {
764 for (Int_t nIdxCh = 1; nIdxCh <= nNumChamber; nIdxCh++) {
765 std::string strNameCh = funcNameCh(strSuffix, nIdxCh);
767 if (h2SrcChamberOcc ==
nullptr) {
772 Int_t nNumBinX = h2SrcChamberOcc->
getNbinsX();
773 Int_t nNumBinY = h2SrcChamberOcc->
getNbinsY();
774 Int_t nNumAllChannel = nNumBinX * nNumBinY;
775 auto *histData = h2SrcChamberOcc->
getTH2F();
776 auto *pdData = histData->GetArray();
777 Int_t nNumChannelInactive = 0;
778 for (Int_t
j = 1;
j <= nNumBinY;
j++)
779 for (Int_t
i = 1;
i <= nNumBinX;
i++) {
780 if (pdData[
j * (nNumBinX + 2) +
i] <= 0) {
781 nNumChannelInactive++;
784 h2InactiveChannel->
setBinContent(nIdxCh, ((Double_t)nNumChannelInactive) / nNumAllChannel);
virtual void setTitle(const std::string &title)
set (ie. change) histogram/profile title
std::map< std::string, int > mapIdxLayer_
LuminosityBlockNumber_t luminosityBlock() const
MonitorElement * bookFloat(TString const &name, FUNC onbooking=NOOP())
void createSummaryVFAT(edm::Service< DQMStore > &store, MonitorElement *h2Src, std::string strSuffix, MonitorElement *&h2Sum)
MonitorElement * book2S(TString const &name, TString const &title, int nchX, double lowX, double highX, int nchY, double lowY, double highY, FUNC onbooking=NOOP())
void createInactiveChannelFracHist(edm::Service< DQMStore > &store, std::string strSuffix, Int_t nNumChamber)
void setCurrentFolder(std::string const &fullpath) override
virtual std::string getAxisTitle(int axis=1) const
get x-, y- or z-axis title (axis=1, 2, 3 respectively)
~GEMDQMHarvester() override
std::string getNameChamberOccGE21(std::string strSuffix, Int_t nIdxCh)
Float_t refineSummaryHistogram(std::string strName, MonitorElement *h2Sum, std::vector< MonitorElement *> &listOccPlots, MonitorElement *h2SrcStatusA, MonitorElement *h2SrcStatusE, MonitorElement *h2SrcStatusW, MonitorElement *h2SrcStatusEVFAT, MonitorElement *h2SrcStatusWVFAT, MonitorElement *h2SrcStatusEOH, MonitorElement *h2SrcStatusWOH, MonitorElement *h2SrcStatusEAMC, MonitorElement *h2SrcStatusWAMC, MonitorElement *h2SrcStatusEAMC13, Int_t nLumiCurr)
void copyLabels(MonitorElement *h2Src, MonitorElement *h2Dst)
Log< level::Error, false > LogError
void dqmEndLuminosityBlock(DQMStore::IBooker &, DQMStore::IGetter &, edm::LuminosityBlock const &iLumi, edm::EventSetup const &) override
std::map< IdChamber, std::vector< StatusInfo > > mapStatusChambersSummary_
std::map< IdVFAT, NumStatus > mapNumStatusVFATsSummary_
void createTableWatchingSummary()
std::string getNameChamberOccNull(std::string strSuffix, Int_t nIdxChamber)
std::vector< std::string > listLayer_
virtual TH2F * getTH2F() const
std::map< IdVFAT, std::vector< StatusInfo > > mapStatusVFATsSummary_
void drawSummaryHistogram(edm::Service< DQMStore > &store, Int_t nLumiCurr)
virtual void setXTitle(std::string const &title)
std::tuple< int, int > IdChamber
std::vector< std::vector< Float_t > > TableStatusOcc
std::string getNameChamberOccGE11(std::string strSuffix, Int_t nIdxCh)
Bool_t bIsStatusChambersInit_
NumStatus(Float_t fNumTotal=0, Float_t fNumOcc=0, Float_t fNumErrVFAT=0, Float_t fNumWarnVFAT=0, Float_t fNumErrOH=0, Float_t fNumWarnOH=0, Float_t fNumErrAMC=0, Float_t fNumWarnAMC=0, Float_t fNumErrAMC13=0)
std::map< int, MonitorElement * > mapHistLumiFunc_
#define DEFINE_FWK_MODULE(type)
Int_t assessOneBin(std::string strName, Int_t nIdxX, Int_t nIdxY, Float_t fAll, Float_t fNumOcc, Float_t fNumErr, Float_t fNumWarn)
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)
virtual int getNbinsY() const
get # of bins in Y-axis
void getGeometryInfo(edm::Service< DQMStore > &store, MonitorElement *h2Src)
virtual std::string getTitle() const
get MonitorElement title
std::map< int, int > mapNumModule_
virtual void setYTitle(std::string const &title)
static void fillDescriptions(edm::ConfigurationDescriptions &descriptions)
virtual void setBinContent(int binx, double content)
set content of bin (1-D)
LuminosityBlockID id() const
MonitorElement * book2D(TString const &name, TString const &title, int nchX, double lowX, double highX, int nchY, double lowY, double highY, FUNC onbooking=NOOP())
std::map< int, std::map< int, int > > mapIdxToChamberInOcc_
GEMDQMHarvester(const edm::ParameterSet &)
void add(std::string const &label, ParameterSetDescription const &psetDescription)
Int_t UpdateStatusChamber(Int_t nIdxLayer, Int_t nIdxCh, Int_t nLumiCurr, NumStatus numStatus)
virtual MonitorElement * get(std::string const &fullpath) const
std::map< IdChamber, NumStatus > mapNumStatusChambersSummary_
std::vector< std::vector< Int_t > > TableStatusNum
virtual int getNbinsX() const
get # of bins in X-axis
void createSummaryHist(edm::Service< DQMStore > &store, MonitorElement *h2Src, MonitorElement *&h2Sum)
Int_t refineSummaryVFAT(std::string strName, MonitorElement *h2Sum, MonitorElement *h2SrcOcc, MonitorElement *h2SrcStatusE, MonitorElement *h2SrcStatusW, Int_t nLumiCurr, Int_t nIdxLayer)
MonitorElement * book1D(TString const &name, TString const &title, int const nchX, double const lowX, double const highX, FUNC onbooking=NOOP())
std::map< int, int > mapNumChPerChamber_
void createLumiFuncHist(edm::Service< DQMStore > &store, std::string strSuffix, Int_t nIdxLayer, Int_t nLumiCurr)
static void fillDescriptions(edm::ConfigurationDescriptions &descriptions)
std::tuple< int, int, int > IdVFAT
virtual double getBinContent(int binx) const
get content of bin (1-D)
void dqmEndJob(DQMStore::IBooker &, DQMStore::IGetter &) override