CMS 3D CMS Logo

HLTExoticaPlotter.cc
Go to the documentation of this file.
1 
7 
11 
12 #include "TPRegexp.h"
13 
15 
16 #include <cctype>
17 #include <set>
18 
20  const std::string &hltPath,
21  const std::vector<unsigned int> &objectsType)
22  : _hltPath(hltPath),
23  _hltProcessName(pset.getParameter<std::string>("hltProcessName")),
24  _objectsType(std::set<unsigned int>(objectsType.begin(), objectsType.end())),
25  _nObjects(objectsType.size()),
26  _parametersEta(pset.getParameter<std::vector<double>>("parametersEta")),
27  _parametersPhi(pset.getParameter<std::vector<double>>("parametersPhi")),
28  _parametersTurnOn(pset.getParameter<std::vector<double>>("parametersTurnOn")),
29  _parametersTurnOnSumEt(pset.getParameter<std::vector<double>>("parametersTurnOnSumEt")),
30  _parametersDxy(pset.getParameter<std::vector<double>>("parametersDxy")),
31  _drop_pt2(false),
32  _drop_pt3(false) {
33  if (pset.exists("dropPt2")) {
34  _drop_pt2 = pset.getParameter<bool>("dropPt2");
35  }
36  if (pset.exists("dropPt3")) {
37  _drop_pt3 = pset.getParameter<bool>("dropPt3");
38  }
39  LogDebug("ExoticaValidation") << "In HLTExoticaPlotter::constructor()";
40 }
41 
43 
45 
47  const edm::Run &iRun,
48  const edm::EventSetup &iSetup) {
49  LogDebug("ExoticaValidation") << "In HLTExoticaPlotter::plotterBookHistos()";
50  for (std::set<unsigned int>::iterator it = _objectsType.begin(); it != _objectsType.end(); ++it) {
51  std::vector<std::string> sources(2);
52  sources[0] = "gen";
53  sources[1] = "rec";
54 
55  const std::string objTypeStr = EVTColContainer::getTypeString(*it);
56 
57  for (size_t i = 0; i < sources.size(); i++) {
58  std::string source = sources[i];
59 
60  if (source == "gen") {
61  if (TString(objTypeStr).Contains("MET") || TString(objTypeStr).Contains("MHT") ||
62  TString(objTypeStr).Contains("Jet")) {
63  continue;
64  } else {
65  bookHist(iBooker, source, objTypeStr, "MaxPt1");
66  if (!_drop_pt2)
67  bookHist(iBooker, source, objTypeStr, "MaxPt2");
68  if (!_drop_pt3)
69  bookHist(iBooker, source, objTypeStr, "MaxPt3");
70  bookHist(iBooker, source, objTypeStr, "Eta");
71  bookHist(iBooker, source, objTypeStr, "Phi");
72 
73  // If the target is electron or muon,
74  // we will add Dxy plots.
76  bookHist(iBooker, source, objTypeStr, "Dxy");
77  }
78  }
79  } else { // reco
80  if (TString(objTypeStr).Contains("MET") || TString(objTypeStr).Contains("MHT")) {
81  bookHist(iBooker, source, objTypeStr, "MaxPt1");
82  bookHist(iBooker, source, objTypeStr, "SumEt");
83  } else {
84  bookHist(iBooker, source, objTypeStr, "MaxPt1");
85  if (!_drop_pt2)
86  bookHist(iBooker, source, objTypeStr, "MaxPt2");
87  if (!_drop_pt3)
88  bookHist(iBooker, source, objTypeStr, "MaxPt3");
89  bookHist(iBooker, source, objTypeStr, "Eta");
90  bookHist(iBooker, source, objTypeStr, "Phi");
91 
92  // If the target is electron or muon,
93  // we will add Dxy plots.
95  bookHist(iBooker, source, objTypeStr, "Dxy");
96  }
97  }
98  }
99  }
100  }
101 }
102 
103 void HLTExoticaPlotter::analyze(const bool &isPassTrigger,
104  const std::string &source,
105  const std::vector<reco::LeafCandidate> &matches,
106  std::map<int, double> theSumEt,
107  std::vector<float> &dxys) {
108  LogDebug("ExoticaValidation") << "In HLTExoticaPlotter::analyze()";
109  if (!isPassTrigger) {
110  return;
111  }
112 
113  std::map<unsigned int, int> countobjects;
114  // Initializing the count of the used object
115  for (std::set<unsigned int>::iterator co = _objectsType.begin(); co != _objectsType.end(); ++co) {
116  countobjects[*co] = 0;
117  }
118 
119  int counttotal = 0;
120 
121  // 3 : pt1, pt2, pt3
122  int totalobjectssize = 1;
123  if (!_drop_pt2)
124  totalobjectssize++;
125  if (!_drop_pt3)
126  totalobjectssize++;
127  totalobjectssize *= countobjects.size();
128  // Fill the histos if pass the trigger (just the two with higher pt)
129  for (size_t j = 0; j < matches.size(); ++j) {
130  // Is this object owned by this trigger? If not we are not interested...
131  if (_objectsType.find(matches[j].pdgId()) == _objectsType.end()) {
132  continue;
133  }
134 
135  const unsigned int objType = matches[j].pdgId();
136  const std::string objTypeStr = EVTColContainer::getTypeString(objType);
137 
138  float pt = matches[j].pt();
139  float eta = matches[j].eta();
140  float phi = matches[j].phi();
141 
142  if (!(TString(objTypeStr).Contains("MET") || TString(objTypeStr).Contains("MHT"))) {
143  this->fillHist(isPassTrigger, source, objTypeStr, "Eta", eta);
144  this->fillHist(isPassTrigger, source, objTypeStr, "Phi", phi);
145  } else if (source != "gen") {
146  if (theSumEt[objType] >= 0 && countobjects[objType] == 0) {
147  this->fillHist(isPassTrigger, source, objTypeStr, "SumEt", theSumEt[objType]);
148  }
149  }
150 
151  if (!dxys.empty() &&
152  (objType == EVTColContainer::ELEC || objType == EVTColContainer::MUON || objType == EVTColContainer::MUTRK))
153  this->fillHist(isPassTrigger, source, objTypeStr, "Dxy", dxys[j]);
154 
155  if (countobjects[objType] == 0) {
156  if (!(TString(objTypeStr).Contains("MET") || TString(objTypeStr).Contains("MHT")) || source != "gen") {
157  this->fillHist(isPassTrigger, source, objTypeStr, "MaxPt1", pt);
158  }
159  // Filled the high pt ...
160  ++(countobjects[objType]);
161  ++counttotal;
162  } else if (countobjects[objType] == 1 && !_drop_pt2) {
163  if (!(TString(objTypeStr).Contains("MET") || TString(objTypeStr).Contains("MHT"))) {
164  this->fillHist(isPassTrigger, source, objTypeStr, "MaxPt2", pt);
165  }
166  // Filled the second high pt ...
167  ++(countobjects[objType]);
168  ++counttotal;
169  } else if (countobjects[objType] == 2 && !_drop_pt3) {
170  if (!(TString(objTypeStr).Contains("MET") || TString(objTypeStr).Contains("MHT"))) {
171  this->fillHist(isPassTrigger, source, objTypeStr, "MaxPt3", pt);
172  }
173  // Filled the third highest pt ...
174  ++(countobjects[objType]);
175  ++counttotal;
176  } else {
177  if (counttotal == totalobjectssize) {
178  break;
179  }
180  }
181 
182  } // end loop over matches
183 }
184 
186  const std::string &source,
187  const std::string &objType,
188  const std::string &variable) {
189  LogDebug("ExoticaValidation") << "In HLTExoticaPlotter::bookHist()";
190  std::string sourceUpper = source;
191  sourceUpper[0] = std::toupper(sourceUpper[0]);
192  std::string name = source + objType + variable + "_" + _hltPath;
193  TH1F *h = nullptr;
194 
195  if (variable.find("SumEt") != std::string::npos) {
196  std::string title = "Sum ET of " + sourceUpper + " " + objType;
197  const size_t nBins = _parametersTurnOnSumEt.size() - 1;
198  float *edges = new float[nBins + 1];
199  for (size_t i = 0; i < nBins + 1; i++) {
200  edges[i] = _parametersTurnOnSumEt[i];
201  }
202  h = new TH1F(name.c_str(), title.c_str(), nBins, edges);
203  delete[] edges;
204  } else if (variable.find("Dxy") != std::string::npos) {
205  std::string title = "Dxy " + sourceUpper + " " + objType;
206  int nBins = _parametersDxy[0];
207  double min = _parametersDxy[1];
208  double max = _parametersDxy[2];
209  h = new TH1F(name.c_str(), title.c_str(), nBins, min, max);
210  } else if (variable.find("MaxPt") != std::string::npos) {
211  std::string desc =
212  (variable == "MaxPt1") ? "Leading" : (variable == "MaxPt2") ? "Next-to-Leading" : "Next-to-next-to-Leading";
213  std::string title = "pT of " + desc + " " + sourceUpper + " " + objType +
214  " "
215  "where event pass the " +
216  _hltPath;
217  const size_t nBins = _parametersTurnOn.size() - 1;
218  float *edges = new float[nBins + 1];
219  for (size_t i = 0; i < nBins + 1; i++) {
220  edges[i] = _parametersTurnOn[i];
221  }
222  h = new TH1F(name.c_str(), title.c_str(), nBins, edges);
223  delete[] edges;
224  }
225 
226  else {
227  std::string symbol = (variable == "Eta") ? "#eta" : "#phi";
228  std::string title = symbol + " of " + sourceUpper + " " + objType + " " + "where event pass the " + _hltPath;
229  std::vector<double> params = (variable == "Eta") ? _parametersEta : _parametersPhi;
230 
231  int nBins = (int)params[0];
232  double min = params[1];
233  double max = params[2];
234  h = new TH1F(name.c_str(), title.c_str(), nBins, min, max);
235  }
236 
237  h->Sumw2();
238  _elements[name] = iBooker.book1D(name, h);
239  // LogDebug("ExoticaValidation") << " booked histo
240  // with name " << name << "\n"
241  // << " at location " <<
242  //(unsigned long int)_elements[name];
243  delete h;
244 }
245 
246 void HLTExoticaPlotter::fillHist(const bool &passTrigger,
247  const std::string &source,
248  const std::string &objType,
249  const std::string &variable,
250  const float &value) {
251  std::string sourceUpper = source;
252  sourceUpper[0] = toupper(sourceUpper[0]);
253  std::string name = source + objType + variable + "_" + _hltPath;
254 
255  LogDebug("ExoticaValidation") << "In HLTExoticaPlotter::fillHist()" << name << " " << value;
256  _elements[name]->Fill(value);
257  LogDebug("ExoticaValidation") << "In HLTExoticaPlotter::fillHist()" << name << " worked";
258 }
#define LogDebug(id)
size
Write out results.
T getParameter(std::string const &) const
FWCore Framework interface EventSetupRecordImplementation h
Helper function to determine trigger accepts.
void plotterBookHistos(DQMStore::IBooker &iBooker, const edm::Run &iRun, const edm::EventSetup &iSetup)
bool exists(std::string const &parameterName) const
checks if a parameter exists
std::set< unsigned int > _objectsType
std::vector< double > _parametersDxy
std::vector< double > _parametersTurnOnSumEt
HLTExoticaPlotter(const edm::ParameterSet &pset, const std::string &hltPath, const std::vector< unsigned int > &objectsType)
std::vector< double > _parametersEta
MonitorElement * book1D(Args &&...args)
Definition: DQMStore.h:106
#define end
Definition: vmac.h:39
Definition: value.py:1
T min(T a, T b)
Definition: MathUtil.h:58
std::vector< double > _parametersTurnOn
void fillHist(const bool &passTrigger, const std::string &source, const std::string &objType, const std::string &var, const float &value)
std::vector< double > _parametersPhi
void bookHist(DQMStore::IBooker &iBooker, const std::string &source, const std::string &objType, const std::string &variable)
void analyze(const bool &isPassTrigger, const std::string &source, const std::vector< reco::LeafCandidate > &matches, std::map< int, double > theSumEt, std::vector< float > &dxys)
#define begin
Definition: vmac.h:32
static const std::string getTypeString(const unsigned int &objtype)
Tranform types into strings.
static std::string const source
Definition: EdmProvDump.cc:47
Definition: Run.h:45
std::map< std::string, MonitorElement * > _elements