CMS 3D CMS Logo

L1EmulatorErrorFlagClient.cc
Go to the documentation of this file.
2 
10 #include "TRandom.h"
11 #include <TF1.h>
12 #include <cstdio>
13 #include <sstream>
14 #include <cmath>
15 #include <TProfile.h>
16 #include <TProfile2D.h>
17 #include <memory>
18 #include <iostream>
19 #include <vector>
20 #include <iomanip>
21 #include <string>
22 #include <fstream>
23 #include "TROOT.h"
24 
26  : m_verbose(parSet.getUntrackedParameter<bool>("verbose", false)),
27  m_l1Systems(parSet.getParameter<std::vector<edm::ParameterSet> >("L1Systems")),
28  m_nrL1Systems(0) {
29  initialize();
30 }
31 
33  //empty
34 }
35 
37  m_nrL1Systems = m_l1Systems.size();
38 
41  m_systemMask.reserve(m_nrL1Systems);
44 
45  int indexSys = 0;
46 
47  for (std::vector<edm::ParameterSet>::const_iterator itSystem = m_l1Systems.begin(); itSystem != m_l1Systems.end();
48  ++itSystem) {
49  m_systemLabel.push_back(itSystem->getParameter<std::string>("SystemLabel"));
50 
51  m_systemLabelExt.push_back(itSystem->getParameter<std::string>("HwValLabel"));
52 
53  m_systemMask.push_back(itSystem->getParameter<unsigned int>("SystemMask"));
54 
55  m_systemFolder.push_back(itSystem->getParameter<std::string>("SystemFolder"));
56 
57  indexSys++;
58  }
59 
60  // [SYS]ErrorFlag histogram
61  for (unsigned int iSys = 0; iSys < m_nrL1Systems; ++iSys) {
62  if (m_systemFolder[iSys].empty()) {
63  m_systemErrorFlag.push_back("L1TEMU/" + m_systemLabel[iSys] + "/" + m_systemLabelExt[iSys] + "ErrorFlag");
64  } else {
65  m_systemErrorFlag.push_back(m_systemFolder[iSys] + "/" + m_systemLabelExt[iSys] + "ErrorFlag");
66  }
67  }
68 
69  m_summaryContent.reserve(m_nrL1Systems);
70 }
71 
73  ibooker.setCurrentFolder("L1TEMU/EventInfo");
74 
75  // define a histogram
77  ibooker.book1D("L1SummaryErrorFlagMap", "L1SummaryErrorFlagMap", m_nrL1Systems, 1, m_nrL1Systems + 1);
78 
79  m_meSummaryErrorFlagMap->setAxisTitle("Agreement fraction", 2);
80 
81  for (unsigned int iSys = 0; iSys < m_nrL1Systems; ++iSys) {
83  }
84 }
85 
87  DQMStore::IGetter& igetter,
88  const edm::LuminosityBlock& lumiSeg,
89  const edm::EventSetup& evSetup) {
90  // reset the summary content values
91  for (unsigned int iMon = 0; iMon < m_nrL1Systems; ++iMon) {
92  m_summaryContent[iMon] = 0.;
93  }
94 
95  // for masked systems and objects, set the summary content to -1
96 
97  for (unsigned int iMon = 0; iMon < m_nrL1Systems; ++iMon) {
98  if (m_systemMask[iMon] != 0) {
99  m_summaryContent[iMon] = -1;
100  }
101  }
102 
103  // then fill content for unmasked systems
104 
105  for (unsigned int iSys = 0; iSys < m_nrL1Systems; ++iSys) {
106  float percAgree = -1.;
107 
108  if (m_systemMask[iSys] == 0) {
109  percAgree = setSummary(igetter, iSys);
110 
111  if ((percAgree == -1) && m_verbose) {
112  std::cout << "\nWarning: ErrorFlag histogram for system " << m_systemLabel[iSys] << " empty!" << std::endl;
113  }
114  }
115 
116  m_summaryContent[iSys] = percAgree;
117  }
118 
119  int numUnMaskedSystems = 0;
120  for (unsigned int iMon = 0; iMon < m_nrL1Systems; iMon++) {
121  if (m_summaryContent[iMon] != -1) {
122  numUnMaskedSystems++;
123  }
124  }
125 
126  // fill the SummaryErrorFlagMap histogram for L1 systems
127  // (bin 0 - underflow, bin iSys + 1 overflow)
128  for (unsigned int iSys = 0; iSys < m_nrL1Systems; ++iSys) {
130  }
131 
132  if (m_verbose) {
133  std::cout << "\nSummary report L1EmulatorErrorFlagClient" << std::endl;
134 
135  std::cout << "\nL1 systems: " << m_nrL1Systems << " systems included\n" << std::endl;
136 
137  for (unsigned int iSys = 0; iSys < m_nrL1Systems; ++iSys) {
138  std::cout << std::setw(10) << m_systemLabel[iSys] << std::setw(10) << m_systemLabelExt[iSys] << " \t"
139  << m_systemMask[iSys] << " \t" << std::setw(25) << " m_summaryContent[" << std::setw(2) << iSys
140  << "] = " << m_summaryContent[iSys] << std::endl;
141  }
142  }
143 }
144 
145 // set subsystem agreement value in summary map
146 Float_t L1EmulatorErrorFlagClient::setSummary(DQMStore::IGetter& igetter, const unsigned int& iMon) const {
147  MonitorElement* QHist = igetter.get(m_systemErrorFlag[iMon]);
148 
149  int ntot = 0;
150  for (int i = 0; i < QHist->getNbinsX(); i++) {
151  ntot += QHist->getBinContent(i + 1);
152  }
153 
154  bool isEmpty = (ntot == 0);
155 
156  //errflag bins: agree, loc agree, loc disagree, data only, emul only
157 
158  return isEmpty ? -1. : ((QHist->getBinContent(1)) / (ntot));
159 }
~L1EmulatorErrorFlagClient() override
Destructor.
MonitorElement * book1D(TString const &name, TString const &title, int const nchX, double const lowX, double const highX)
Definition: DQMStore.cc:239
size_t m_nrL1Systems
number of L1 trigger systems
std::vector< Float_t > m_summaryContent
summary report
void setCurrentFolder(std::string const &fullpath)
Definition: DQMStore.cc:418
Float_t setSummary(DQMStore::IGetter &igetter, const unsigned int &) const
L1EmulatorErrorFlagClient(const edm::ParameterSet &)
Constructor.
virtual int getNbinsX() const
get # of bins in X-axis
void dqmEndLuminosityBlock(DQMStore::IBooker &, DQMStore::IGetter &, edm::LuminosityBlock const &, edm::EventSetup const &) override
void dqmEndJob(DQMStore::IBooker &, DQMStore::IGetter &) override
std::vector< edm::ParameterSet > m_l1Systems
std::vector< std::string > m_systemLabel
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 double getBinContent(int binx) const
get content of bin (1-D)
virtual void setBinContent(int binx, double content)
set content of bin (1-D)
std::vector< std::string > m_systemLabelExt
std::vector< std::string > m_systemErrorFlag
HLT enums.
std::vector< std::string > m_systemFolder
MonitorElement * get(std::string const &path)
Definition: DQMStore.cc:437
virtual void setAxisTitle(const std::string &title, int axis=1)
set x-, y- or z-axis title (axis=1, 2, 3 respectively)