CMS 3D CMS Logo

HLTHiggsSubAnalysis.cc
Go to the documentation of this file.
1 
7 
9 
13 
15 
16 #include "TPRegexp.h"
17 #include "TString.h"
18 
21 
24 
25 #include "TPRegexp.h"
26 #include "TRegexp.h"
27 #include "TString.h"
28 
29 #include <set>
30 #include <algorithm>
31 
33  const std::string& analysisname,
35  : _pset(pset),
36  _analysisname(analysisname),
37  _minCandidates(0),
38  _HtJetPtMin(0),
39  _HtJetEtaMax(0),
40  _hltProcessName(pset.getParameter<std::string>("hltProcessName")),
41  _histDirectory(pset.getParameter<std::string>("histDirectory")),
42  _genParticleLabel(iC.consumes<reco::GenParticleCollection>(pset.getParameter<std::string>("genParticleLabel"))),
43  _genJetLabel(iC.consumes<reco::GenJetCollection>(pset.getParameter<std::string>("genJetLabel"))),
44  _recoHtJetLabel(iC.consumes<reco::PFJetCollection>(
45  pset.getUntrackedParameter<std::string>("recoHtJetLabel", "ak4PFJetsCHS"))),
46  _parametersEta(pset.getParameter<std::vector<double>>("parametersEta")),
47  _parametersPhi(pset.getParameter<std::vector<double>>("parametersPhi")),
48  _parametersPu(pset.getParameter<std::vector<double>>("parametersPu")),
49  _parametersHt(0),
50  _parametersTurnOn(pset.getParameter<std::vector<double>>("parametersTurnOn")),
51  _trigResultsTag(iC.consumes<edm::TriggerResults>(edm::InputTag("TriggerResults", "", _hltProcessName))),
52  _genJetSelector(nullptr),
53  _recMuonSelector(nullptr),
54  _recElecSelector(nullptr),
55  _recCaloMETSelector(nullptr),
56  _recPFMETSelector(nullptr),
57  _recPFTauSelector(nullptr),
58  _recPhotonSelector(nullptr),
59  _recPFJetSelector(nullptr),
60  _recTrackSelector(nullptr),
61  _NminOneCuts(0),
62  _useNminOneCuts(false) {
63  // Specific parameters for this analysis
64  edm::ParameterSet anpset = pset.getParameter<edm::ParameterSet>(analysisname);
65  // Collections labels (but genparticles already initialized)
66  // initializing _recLabels data member)
67  if (anpset.exists("parametersTurnOn")) {
68  _parametersTurnOn = anpset.getParameter<std::vector<double>>("parametersTurnOn");
69  _pset.addParameter("parametersTurnOn", _parametersTurnOn);
70  }
71  this->bookobjects(anpset, iC);
72  // Generic objects: Initialization of cuts
73  for (std::map<unsigned int, std::string>::const_iterator it = _recLabels.begin(); it != _recLabels.end(); ++it) {
74  const std::string objStr = EVTColContainer::getTypeString(it->first);
75  _genCut[it->first] = pset.getParameter<std::string>(objStr + "_genCut");
76  _recCut[it->first] = pset.getParameter<std::string>(objStr + "_recCut");
77  _cutMinPt[it->first] = pset.getParameter<double>(objStr + "_cutMinPt");
78  _cutMaxEta[it->first] = pset.getParameter<double>(objStr + "_cutMaxEta");
79  }
80  //--- Updating parameters if has to be modified for this particular specific analysis
81  for (std::map<unsigned int, std::string>::const_iterator it = _recLabels.begin(); it != _recLabels.end(); ++it) {
82  const std::string objStr = EVTColContainer::getTypeString(it->first);
83  if (anpset.existsAs<std::string>(objStr + "_genCut", false)) {
84  _genCut[it->first] = anpset.getUntrackedParameter<std::string>(objStr + "_genCut");
85  }
86  if (anpset.existsAs<std::string>(objStr + "_recCut", false)) {
87  _recCut[it->first] = anpset.getUntrackedParameter<std::string>(objStr + "_recCut");
88  }
89  if (anpset.existsAs<double>(objStr + "_cutMinPt", false)) {
90  _cutMinPt[it->first] = anpset.getUntrackedParameter<double>(objStr + "_cutMinPt");
91  }
92  if (anpset.existsAs<double>(objStr + "_cutMaxEta", false)) {
93  _cutMaxEta[it->first] = anpset.getUntrackedParameter<double>(objStr + "_cutMaxEta");
94  }
95  }
96  _hltPathsToCheck = anpset.getParameter<std::vector<std::string>>("hltPathsToCheck");
97  _minCandidates = anpset.getParameter<unsigned int>("minCandidates");
98 
99  std::vector<double> default_parametersHt;
100  default_parametersHt.push_back(100);
101  default_parametersHt.push_back(0);
102  default_parametersHt.push_back(1000);
103  _parametersHt = pset.getUntrackedParameter<std::vector<double>>("parametersHt", default_parametersHt);
104 
105  _HtJetPtMin = anpset.getUntrackedParameter<double>("HtJetPtMin", -1);
106  _HtJetEtaMax = anpset.getUntrackedParameter<double>("HtJetEtaMax", -1);
107 
108  if (_HtJetPtMin > 0 && _HtJetEtaMax > 0)
109  _bookHtPlots = true;
110  else
111  _bookHtPlots = false;
112 
113  if (pset.exists("pileUpInfoLabel")) {
114  _puSummaryInfo = iC.consumes<std::vector<PileupSummaryInfo>>(pset.getParameter<std::string>("pileUpInfoLabel"));
115  }
116 
117  if (anpset.existsAs<std::vector<double>>("NminOneCuts", false)) {
118  _NminOneCuts = anpset.getUntrackedParameter<std::vector<double>>("NminOneCuts");
119  if (_NminOneCuts.size() < 9 + _minCandidates) {
120  edm::LogError("HiggsValidation") << "In HLTHiggsSubAnalysis::HLTHiggsSubAnalysis, "
121  << "Incoherence found in the python configuration file!!\nThe SubAnalysis '"
122  << _analysisname << "' has a vector NminOneCuts with size "
123  << _NminOneCuts.size() << ", while it needs to be at least of size "
124  << (9 + _minCandidates) << ".";
125  exit(-1);
126  }
127  if ((_NminOneCuts[0] || _NminOneCuts[1]) && _minCandidates < 4) {
128  edm::LogError("HiggsValidation") << "In HLTHiggsSubAnalysis::HLTHiggsSubAnalysis, "
129  << "Incoherence found in the python configuration file!!\nThe SubAnalysis '"
130  << _analysisname
131  << "' has a vector NminOneCuts with a dEtaqq of mqq cut on the least b-tagged "
132  "jets of the first 4 jets while only requiring "
133  << _minCandidates << " jets.";
134  exit(-1);
135  }
136  if (_NminOneCuts[5] && _minCandidates < 3) {
137  edm::LogError("HiggsValidation") << "In HLTHiggsSubAnalysis::HLTHiggsSubAnalysis, "
138  << "Incoherence found in the python configuration file!!\nThe SubAnalysis '"
139  << _analysisname
140  << "' has a vector NminOneCuts with a CSV3 cut while only requiring "
141  << _minCandidates << " jets.";
142  exit(-1);
143  }
144  if ((_NminOneCuts[2] || _NminOneCuts[4]) && _minCandidates < 2) {
145  edm::LogError("HiggsValidation") << "In HLTHiggsSubAnalysis::HLTHiggsSubAnalysis, "
146  << "Incoherence found in the python configuration file!!\nThe SubAnalysis '"
147  << _analysisname
148  << "' has a vector NminOneCuts with a dPhibb or CSV2 cut using the second most "
149  "b-tagged jet while only requiring "
150  << _minCandidates << " jet.";
151  exit(-1);
152  }
153  for (std::vector<double>::const_iterator it = _NminOneCuts.begin(); it != _NminOneCuts.end(); ++it) {
154  if (*it) {
155  _useNminOneCuts = true;
156  break;
157  }
158  }
159  }
160  // NptPlots = ( _useNminOneCuts ? _minCandidates : 2 );
162 }
163 
165  for (std::map<unsigned int, StringCutObjectSelector<reco::GenParticle>*>::iterator it = _genSelectorMap.begin();
166  it != _genSelectorMap.end();
167  ++it) {
168  delete it->second;
169  it->second = nullptr;
170  }
171  delete _genJetSelector;
172  _genJetSelector = nullptr;
173  delete _recMuonSelector;
174  _recMuonSelector = nullptr;
175  delete _recElecSelector;
176  _recElecSelector = nullptr;
177  delete _recPhotonSelector;
178  _recPhotonSelector = nullptr;
179  delete _recCaloMETSelector;
180  _recCaloMETSelector = nullptr;
181  delete _recPFMETSelector;
182  _recPFMETSelector = nullptr;
183  delete _recPFTauSelector;
184  _recPFTauSelector = nullptr;
185  delete _recPFJetSelector;
186  _recPFJetSelector = nullptr;
187  delete _recTrackSelector;
188  _recTrackSelector = nullptr;
189 }
190 
192 
193 void HLTHiggsSubAnalysis::beginRun(const edm::Run& iRun, const edm::EventSetup& iSetup) {
194  // Initialize the confighlt
195  bool changedConfig;
196  if (!_hltConfig.init(iRun, iSetup, _hltProcessName, changedConfig)) {
197  edm::LogError("HiggsValidations") << "HLTHiggsSubAnalysis::beginRun: "
198  << "Initializtion of HLTConfigProvider failed!!";
199  }
200 
201  // Parse the input paths to get them if there are in the table
202  // and associate them the last filter of the path (in order to extract the
203  _hltPaths.clear();
204  for (size_t i = 0; i < _hltPathsToCheck.size(); ++i) {
205  bool found = false;
206  TPRegexp pattern(_hltPathsToCheck[i]);
207  for (size_t j = 0; j < _hltConfig.triggerNames().size(); ++j) {
208  std::string thetriggername = _hltConfig.triggerNames()[j];
209  if (TString(thetriggername).Contains(pattern)) {
210  _hltPaths.insert(thetriggername);
211  found = true;
212  }
213  }
214  if (!found) {
215  LogDebug("HiggsValidations") << "HLTHiggsSubAnalysis::beginRun, In " << _analysisname
216  << " subfolder NOT found the path: '" << _hltPathsToCheck[i] << "*'";
217  }
218  }
219 
220  LogTrace("HiggsValidation") << "SubAnalysis: " << _analysisname << "\nHLT Trigger Paths found >>>";
221  // Initialize the plotters (analysers for each trigger path)
222  _analyzers.clear();
223  for (std::set<std::string>::iterator iPath = _hltPaths.begin(); iPath != _hltPaths.end(); ++iPath) {
224  // Avoiding the dependence of the version number for
225  // the trigger paths
226  std::string path = *iPath;
227  std::string shortpath = path;
228  if (path.rfind("_v") < path.length()) {
229  shortpath = path.substr(0, path.rfind("_v"));
230  }
231  _shortpath2long[shortpath] = path;
232 
233  // Objects needed by the HLT path
234  const std::vector<unsigned int> objsNeedHLT = this->getObjectsType(shortpath);
235  // Sanity check: the object needed by a trigger path should be
236  // introduced by the user via config python (_recLabels datamember)
237  std::vector<unsigned int> userInstantiate;
238  for (std::map<unsigned int, std::string>::iterator it = _recLabels.begin(); it != _recLabels.end(); ++it) {
239  userInstantiate.push_back(it->first);
240  }
241  for (std::vector<unsigned int>::const_iterator it = objsNeedHLT.begin(); it != objsNeedHLT.end(); ++it) {
242  if (std::find(userInstantiate.begin(), userInstantiate.end(), *it) == userInstantiate.end()) {
243  edm::LogError("HiggsValidation") << "In HLTHiggsSubAnalysis::beginRun, "
244  << "Incoherence found in the python configuration file!!\nThe SubAnalysis '"
245  << _analysisname << "' has been asked to evaluate the trigger path '"
246  << shortpath << "' (found it in 'hltPathsToCheck') BUT this path"
247  << " needs a '" << EVTColContainer::getTypeString(*it)
248  << "' which has not been instantiate ('recVariableLabels'"
249  << ")";
250  exit(-1);
251  }
252  }
253  LogTrace("HiggsValidation") << " --- " << shortpath;
254 
255  // the hlt path, the objects (elec,muons,photons,...)
256  // needed to evaluate the path are the argumens of the plotter
257  HLTHiggsPlotter analyzer(_pset, shortpath, objsNeedHLT, NptPlots, _NminOneCuts);
258  _analyzers.push_back(analyzer);
259  }
260 }
261 
264  ibooker.setCurrentFolder(baseDir);
265  // Book the gen/reco analysis-dependent histograms (denominators)
266  std::vector<std::string> sources(2);
267  sources[0] = "gen";
268  sources[1] = "rec";
269 
270  for (std::map<unsigned int, std::string>::const_iterator it = _recLabels.begin(); it != _recLabels.end(); ++it) {
271  const std::string objStr = EVTColContainer::getTypeString(it->first);
272  TString maxPt;
273 
274  for (size_t i = 0; i < sources.size(); i++) {
276  if (_useNminOneCuts && it->first == EVTColContainer::PFJET) {
277  if (source == "gen")
278  continue;
279  else {
280  // N-1 jet plots (dEtaqq, mqq, dPhibb, CSV1, maxCSV_jets, maxCSV_E, PFMET, pt1, pt2, pt3, pt4)
281  if (_NminOneCuts[0])
282  bookHist(source, objStr, "dEtaqq", ibooker);
283  if (_NminOneCuts[1])
284  bookHist(source, objStr, "mqq", ibooker);
285  if (_NminOneCuts[2])
286  bookHist(source, objStr, "dPhibb", ibooker);
287  if (_NminOneCuts[3]) {
288  if (_NminOneCuts[6])
289  bookHist(source, objStr, "maxCSV", ibooker);
290  else
291  bookHist(source, objStr, "CSV1", ibooker);
292  }
293  if (_NminOneCuts[4])
294  bookHist(source, objStr, "CSV2", ibooker);
295  if (_NminOneCuts[5])
296  bookHist(source, objStr, "CSV3", ibooker);
297  }
298  }
299 
300  bookHist(source, objStr, "Eta", ibooker);
301  bookHist(source, objStr, "Phi", ibooker);
302  for (unsigned int i = 0; i < NptPlots; i++) {
303  maxPt = "MaxPt";
304  maxPt += i + 1;
305  bookHist(source, objStr, maxPt.Data(), ibooker);
306  }
307  }
308  }
309 
310  // Call the bookHistograms (which books all the path dependent histograms)
311  for (std::vector<HLTHiggsPlotter>::iterator it = _analyzers.begin(); it != _analyzers.end(); ++it) {
312  it->bookHistograms(ibooker, _useNminOneCuts);
313  }
314  //booking the histograms for overall trigger efficiencies
315  for (size_t i = 0; i < sources.size(); i++) {
316  std::string nameGlobalEfficiency = "SummaryPaths_" + _analysisname + "_" + sources[i];
317 
318  _elements[nameGlobalEfficiency] = ibooker.book1D(
319  nameGlobalEfficiency.c_str(), nameGlobalEfficiency.c_str(), _hltPathsToCheck.size(), 0, _hltPathsToCheck.size());
320 
321  std::string nameGlobalEfficiencyPassing = nameGlobalEfficiency + "_passingHLT";
322  _elements[nameGlobalEfficiencyPassing] = ibooker.book1D(nameGlobalEfficiencyPassing.c_str(),
323  nameGlobalEfficiencyPassing.c_str(),
324  _hltPathsToCheck.size(),
325  0,
326  _hltPathsToCheck.size());
327 
328  std::string titlePu = "nb of interations in the event";
329  std::string nameVtxPlot = "trueVtxDist_" + _analysisname + "_" + sources[i];
330  std::vector<double> paramsPu = _parametersPu;
331  int nBinsPu = (int)paramsPu[0];
332  double minPu = paramsPu[1];
333  double maxPu = paramsPu[2];
334 
335  std::string titleHt = "sum of jet pT in the event";
336  std::string nameHtPlot = "HtDist_" + _analysisname + "_" + sources[i];
337  std::vector<double> paramsHt = _parametersHt;
338  int nBinsHt = (int)paramsHt[0];
339  double minHt = paramsHt[1];
340  double maxHt = paramsHt[2];
341 
342  if ((!_useNminOneCuts) || sources[i] == "rec")
343  _elements[nameVtxPlot] = ibooker.book1D(nameVtxPlot.c_str(), titlePu.c_str(), nBinsPu, minPu, maxPu);
344  if (_bookHtPlots)
345  _elements[nameHtPlot] = ibooker.book1D(nameHtPlot.c_str(), titleHt.c_str(), nBinsHt, minHt, maxHt);
346  for (size_t j = 0; j < _hltPathsToCheck.size(); j++) {
347  //declare the efficiency vs interaction plots
349  std::string shortpath = path;
350  if (path.rfind("_v") < path.length()) {
351  shortpath = path.substr(0, path.rfind("_v"));
352  }
353  std::string titlePassingPu = "nb of interations in the event passing path " + shortpath;
354  if ((!_useNminOneCuts) || sources[i] == "rec")
355  _elements[nameVtxPlot + "_" + shortpath] =
356  ibooker.book1D(nameVtxPlot + "_" + shortpath, titlePassingPu.c_str(), nBinsPu, minPu, maxPu);
357 
358  std::string titlePassingHt = "sum of jet pT in the event passing path " + shortpath;
359  if (_bookHtPlots)
360  _elements[nameHtPlot + "_" + shortpath] =
361  ibooker.book1D(nameHtPlot + "_" + shortpath, titlePassingHt.c_str(), nBinsHt, minHt, maxHt);
362 
363  //fill the bin labels of the summary plot
364  _elements[nameGlobalEfficiency]->setBinLabel(j + 1, shortpath);
365  _elements[nameGlobalEfficiencyPassing]->setBinLabel(j + 1, shortpath);
366  }
367  }
368 }
369 
371  // Initialize the collection (the ones which hasn't been initialiazed yet)
372  this->initobjects(iEvent, cols);
373  // utility map
374  std::map<unsigned int, std::string> u2str;
375  u2str[GEN] = "gen";
376  u2str[RECO] = "rec";
377 
378  std::map<unsigned int, double> Htmap;
379  Htmap[GEN] = 0.;
380  Htmap[RECO] = 0.;
381 
383  iEvent.getByToken(_puSummaryInfo, puInfo);
384  int nbMCvtx = -1;
385  if (puInfo.isValid()) {
386  std::vector<PileupSummaryInfo>::const_iterator PVI;
387  for (PVI = puInfo->begin(); PVI != puInfo->end(); ++PVI) {
388  if (PVI->getBunchCrossing() == 0) {
389  nbMCvtx = PVI->getPU_NumInteractions();
390  break;
391  }
392  }
393  }
394 
395  // Extract the match structure containing the gen/reco candidates (electron, muons,...)
396  // common to all the SubAnalysis
397  //---- Generation
398  // Make each good gen object into the base cand for a MatchStruct
399  std::vector<MatchStruct>* matches = new std::vector<MatchStruct>;
400  // bool alreadyMu = false;
401  for (std::map<unsigned int, std::string>::iterator it = _recLabels.begin(); it != _recLabels.end(); ++it) {
402  // Use genJets for jet matchstructs
403  if (it->first == EVTColContainer::PFJET) {
404  // Skip genJets for N-1 plots
405  if (!_useNminOneCuts) {
406  // Initialize selectors when first event
407  if (!_genJetSelector) {
409  }
410  for (size_t i = 0; i < cols->genJets->size(); ++i) {
411  if (_genJetSelector->operator()(cols->genJets->at(i))) {
412  matches->push_back(MatchStruct(&cols->genJets->at(i), it->first));
413  }
414  }
415  }
416  }
417  // Use genParticles
418  else {
419  // Avoiding the TkMu and Mu case
420  /* if( alreadyMu )
421  {
422  continue;
423  }*/
424  // Initialize selectors when first event
425  if (!_genSelectorMap[it->first]) {
427  }
428 
429  for (size_t i = 0; i < cols->genParticles->size(); ++i) {
430  if (_genSelectorMap[it->first]->operator()(cols->genParticles->at(i))) {
431  matches->push_back(MatchStruct(&cols->genParticles->at(i), it->first));
432  }
433  }
434  /* if( it->first == EVTColContainer::MUON || it->first == EVTColContainer::TRACK )
435  {
436  alreadyMu = true;
437  }*/
438  }
439  }
440  // Sort the MatchStructs by pT for later filling of turn-on curve
441  std::sort(matches->begin(), matches->end(), matchesByDescendingPt());
442 
443  // Map to reference the source (gen/reco) with the recoCandidates
444  std::map<unsigned int, std::vector<MatchStruct>> sourceMatchMap; // To be a pointer to delete
445  // --- Storing the generating candidates
446  sourceMatchMap[GEN] = *matches;
447 
448  // Reuse the vector
449  matches->clear();
450  // --- same for RECO objects
451 
452  // Different treatment for jets (b-tag)
453  std::map<std::string, bool> nMinOne;
454  std::map<std::string, bool> jetCutResult;
455  float dEtaqq;
456  float mqq;
457  float dPhibb;
458  float CSV1;
459  float CSV2;
460  float CSV3;
461  bool passAllCuts = false;
462  if (_recLabels.find(EVTColContainer::PFJET) != _recLabels.end()) {
463  // Initialize jet selector
465  // Initialize and insert pfJets
466  this->initAndInsertJets(iEvent, cols, matches);
467  // Make sure to skip events that don't have enough jets
468  if (matches->size() < NptPlots) {
469  delete matches;
470  return;
471  }
472  // Cuts on multiple jet events (RECO)
473  if (_useNminOneCuts) {
474  this->passJetCuts(matches, jetCutResult, dEtaqq, mqq, dPhibb, CSV1, CSV2, CSV3);
475  }
476  }
477  // Extraction of the objects candidates
478  for (std::map<unsigned int, std::string>::iterator it = _recLabels.begin(); it != _recLabels.end(); ++it) {
479  // Reco selectors (the function takes into account if it was instantiated
480  // before or not
481  this->InitSelector(it->first);
482  // -- Storing the matches
483  this->insertcandidates(it->first, cols, matches);
484  }
485 
486  // Sort the MatchStructs by pT for later filling of turn-on curve
487  std::sort(matches->begin(), matches->end(), matchesByDescendingPt());
488 
489  if (_useNminOneCuts) {
490  // Check non-jet N-1 Cuts
491  this->passOtherCuts(*matches, jetCutResult);
492 
493  // Make N-1 booleans from jetCutResults
494  for (std::map<std::string, bool>::const_iterator it = jetCutResult.begin(); it != jetCutResult.end(); ++it) {
495  nMinOne[it->first] = true;
496  for (std::map<std::string, bool>::const_iterator it2 = jetCutResult.begin(); it2 != jetCutResult.end(); ++it2) {
497  //ignore CSV2,CSV3 cut plotting CSV1
498  if (it->first == "CSV1" && it2->first == "CSV3")
499  continue;
500  if (it->first == "CSV1" && it2->first == "CSV2")
501  continue;
502 
503  //ignore CSV3 plotting cut CSV2
504  if (it->first == "CSV2" && it2->first == "CSV3")
505  continue;
506 
507  if (it->first != it2->first && !(it2->second)) {
508  nMinOne[it->first] = false;
509  break;
510  }
511  }
512  }
513  bool temp = false;
514  for (std::map<std::string, bool>::const_iterator it = nMinOne.begin(); it != nMinOne.end(); ++it) {
515  if (temp && it->second) {
516  passAllCuts = true;
517  break;
518  }
519  if (it->second)
520  temp = true;
521  }
522  }
523 
524  // --- Storing the reco candidates
525  sourceMatchMap[RECO] = *matches;
526  // --- All the objects are in place
527  delete matches;
528 
529  // -- Trigger Results
530  const edm::TriggerNames& trigNames = iEvent.triggerNames(*(cols->triggerResults));
531 
532  if (_bookHtPlots) {
534  iEvent.getByToken(_recoHtJetLabel, recoJet);
535  if (recoJet.isValid()) {
536  for (reco::PFJetCollection::const_iterator iJet = recoJet->begin(); iJet != recoJet->end(); iJet++) {
537  double pt = iJet->pt();
538  double eta = iJet->eta();
539  if (pt > _HtJetPtMin && fabs(eta) < _HtJetEtaMax) {
540  Htmap[RECO] += pt;
541  }
542  }
543  }
544 
546  iEvent.getByToken(_genJetLabel, genJet);
547  if (genJet.isValid()) {
548  for (reco::GenJetCollection::const_iterator iJet = genJet->begin(); iJet != genJet->end(); iJet++) {
549  double pt = iJet->pt();
550  double eta = iJet->eta();
551  if (pt > _HtJetPtMin && fabs(eta) < _HtJetEtaMax) {
552  Htmap[GEN] += pt;
553  }
554  }
555  }
556  }
557 
558  // Filling the histograms if pass the minimum amount of candidates needed by the analysis:
559  // GEN + RECO CASE in the same loop
560  for (std::map<unsigned int, std::vector<MatchStruct>>::iterator it = sourceMatchMap.begin();
561  it != sourceMatchMap.end();
562  ++it) {
563  // it->first: gen/reco it->second: matches (std::vector<MatchStruc>)
564  if (it->second.size() < _minCandidates) // FIXME: A bug is potentially here: what about the mixed channels?
565  {
566  continue;
567  }
568 
569  // Filling the gen/reco objects (eff-denominators):
570  // Just the first two different ones, if there are more
571  std::map<unsigned int, int>* countobjects = new std::map<unsigned int, int>;
572  // Initializing the count of the used object
573  for (std::map<unsigned int, std::string>::iterator co = _recLabels.begin(); co != _recLabels.end(); ++co) {
574  if (!(_useNminOneCuts && co->first == EVTColContainer::PFJET && it->first == GEN)) // genJets are not there
575  countobjects->insert(std::pair<unsigned int, int>(co->first, 0));
576  }
577  int counttotal = 0;
578  const int totalobjectssize2 = NptPlots * countobjects->size();
579  for (size_t j = 0; j < it->second.size(); ++j) {
580  const unsigned int objType = it->second[j].objType;
582 
583  float pt = (it->second)[j].pt;
584  float eta = (it->second)[j].eta;
585  float phi = (it->second)[j].phi;
586 
587  // PFMET N-1 cut
588  if (_useNminOneCuts && objType == EVTColContainer::PFMET && _NminOneCuts[8] && !nMinOne["PFMET"]) {
589  continue;
590  }
591 
592  TString maxPt;
593  if ((unsigned)(*countobjects)[objType] < NptPlots) {
594  maxPt = "MaxPt";
595  maxPt += (*countobjects)[objType] + 1;
597  if (nMinOne[maxPt.Data()]) {
598  this->fillHist(u2str[it->first], objTypeStr, maxPt.Data(), pt);
599  }
600  } else {
601  this->fillHist(u2str[it->first], objTypeStr, maxPt.Data(), pt);
602  }
603  // Filled the high pt ...
604  ++((*countobjects)[objType]);
605  ++counttotal;
606  } else {
607  if ((unsigned)(*countobjects)[objType] < _minCandidates) { // To get correct results for HZZ
608  ++((*countobjects)[objType]);
609  ++counttotal;
610  } else
611  continue; // Otherwise too many entries in Eta and Phi distributions
612  }
613 
614  // Jet N-1 Cuts
616  if (passAllCuts) {
617  this->fillHist(u2str[it->first], objTypeStr, "Eta", eta);
618  this->fillHist(u2str[it->first], objTypeStr, "Phi", phi);
619  }
620  } else {
621  this->fillHist(u2str[it->first], objTypeStr, "Eta", eta);
622  this->fillHist(u2str[it->first], objTypeStr, "Phi", phi);
623  }
624 
625  // Already the minimum two objects has been filled, get out...
626  if (counttotal == totalobjectssize2) {
627  break;
628  }
629  }
630  delete countobjects;
631 
632  if (_useNminOneCuts && it->first == RECO) {
633  if (_NminOneCuts[0] && nMinOne["dEtaqq"]) {
634  this->fillHist(u2str[it->first], EVTColContainer::getTypeString(EVTColContainer::PFJET), "dEtaqq", dEtaqq);
635  }
636  if (_NminOneCuts[1] && nMinOne["mqq"]) {
637  this->fillHist(u2str[it->first], EVTColContainer::getTypeString(EVTColContainer::PFJET), "mqq", mqq);
638  }
639  if (_NminOneCuts[2] && nMinOne["dPhibb"]) {
640  this->fillHist(u2str[it->first], EVTColContainer::getTypeString(EVTColContainer::PFJET), "dPhibb", dPhibb);
641  }
642  if (_NminOneCuts[3]) {
643  std::string nameCSVplot = "CSV1";
644  if (_NminOneCuts[6])
645  nameCSVplot = "maxCSV";
646  if (nMinOne[nameCSVplot])
647  this->fillHist(u2str[it->first], EVTColContainer::getTypeString(EVTColContainer::PFJET), nameCSVplot, CSV1);
648  }
649  if (_NminOneCuts[4] && nMinOne["CSV2"]) {
650  this->fillHist(u2str[it->first], EVTColContainer::getTypeString(EVTColContainer::PFJET), "CSV2", CSV2);
651  }
652  if (_NminOneCuts[5] && nMinOne["CSV3"]) {
653  this->fillHist(u2str[it->first], EVTColContainer::getTypeString(EVTColContainer::PFJET), "CSV3", CSV3);
654  }
655  }
656 
657  //fill the efficiency vs nb of interactions
658  std::string nameVtxPlot = "trueVtxDist_" + _analysisname + "_" + u2str[it->first];
659  if ((!_useNminOneCuts) || it->first == RECO)
660  _elements[nameVtxPlot]->Fill(nbMCvtx);
661 
662  //fill the efficiency vs sum pT of jets
663  std::string nameHtPlot = "HtDist_" + _analysisname + "_" + u2str[it->first];
664  if (_bookHtPlots)
665  _elements[nameHtPlot]->Fill(Htmap[it->first]);
666 
667  // Calling to the plotters analysis (where the evaluation of the different trigger paths are done)
668  std::string SummaryName = "SummaryPaths_" + _analysisname + "_" + u2str[it->first];
669  const std::string source = u2str[it->first];
670  for (std::vector<HLTHiggsPlotter>::iterator an = _analyzers.begin(); an != _analyzers.end(); ++an) {
671  const std::string hltPath = _shortpath2long[an->gethltpath()];
672  const std::string fillShortPath = an->gethltpath();
673  const bool ispassTrigger = cols->triggerResults->accept(trigNames.triggerIndex(hltPath));
674 
675  if (_useNminOneCuts) {
676  an->analyze(ispassTrigger, source, it->second, nMinOne, dEtaqq, mqq, dPhibb, CSV1, CSV2, CSV3, passAllCuts);
677  } else {
678  an->analyze(ispassTrigger, source, it->second, _minCandidates);
679  }
680 
681  int refOfThePath = -1;
682  for (size_t itePath = 0; itePath < _hltPathsToCheck.size(); itePath++) {
683  refOfThePath++;
684  if (TString(hltPath).Contains(_hltPathsToCheck[itePath]))
685  break;
686  }
687  _elements[SummaryName]->Fill(refOfThePath);
688  if (ispassTrigger) {
689  _elements[SummaryName + "_passingHLT"]->Fill(refOfThePath, 1);
690  if ((!_useNminOneCuts) || it->first == RECO)
691  _elements[nameVtxPlot + "_" + fillShortPath]->Fill(nbMCvtx);
692  if (_bookHtPlots)
693  _elements[nameHtPlot + "_" + fillShortPath]->Fill(Htmap[it->first]);
694  } else {
695  _elements[SummaryName + "_passingHLT"]->Fill(refOfThePath, 0);
696  }
697  }
698  }
699 }
700 
701 // Return the objects (muons,electrons,photons,...) needed by a hlt path.
702 const std::vector<unsigned int> HLTHiggsSubAnalysis::getObjectsType(const std::string& hltPath) const {
703  static const unsigned int objSize = 7;
704  static const unsigned int objtriggernames[] = {EVTColContainer::MUON,
707  // EVTColContainer::TRACK, // Note is tracker muon
712 
713  std::set<unsigned int> objsType;
714  // The object to deal has to be entered via the config .py
715  for (unsigned int i = 0; i < objSize; ++i) {
716  std::string objTypeStr = EVTColContainer::getTypeString(objtriggernames[i]);
717  // Check if it is needed this object for this trigger
718  if (!TString(hltPath).Contains(objTypeStr)) {
719  if ((objtriggernames[i] == EVTColContainer::PFJET &&
720  TString(hltPath).Contains("WHbbBoost")) || // fix for HLT_Ele27_WPLoose_Gsf_WHbbBoost_v
721  (objtriggernames[i] == EVTColContainer::PFJET && TString(hltPath).Contains("CSV")) || // fix for ZnnHbb PFJET
722  (objtriggernames[i] == EVTColContainer::PFMET && TString(hltPath).Contains("MHT")) || // fix for ZnnHbb PFMET
723  (objtriggernames[i] == EVTColContainer::PHOTON && TString(hltPath).Contains("Diphoton"))) {
724  objsType.insert(objtriggernames[i]); //case of the New Diphoton paths
725  }
726  continue;
727  }
728  if ((objtriggernames[i] == EVTColContainer::CALOMET &&
729  (TString(hltPath).Contains("PFMET") || TString(hltPath).Contains("MHT"))) || // fix for PFMET
730  (objtriggernames[i] == EVTColContainer::PFJET && TString(hltPath).Contains("JetIdCleaned") &&
731  !TString(hltPath).Contains(TRegexp("Jet[^I]"))) || // fix for Htaunu
732  (objtriggernames[i] == EVTColContainer::MUON && TString(hltPath).Contains("METNoMu"))) // fix for VBFHToInv
733  {
734  continue;
735  }
736 
737  objsType.insert(objtriggernames[i]);
738  }
739 
740  return std::vector<unsigned int>(objsType.begin(), objsType.end());
741 }
742 
743 // Booking the maps: recLabels and genParticle selectors
745  if (anpset.exists("recMuonLabel")) {
746  _recLabels[EVTColContainer::MUON] = anpset.getParameter<std::string>("recMuonLabel");
749  }
750  if (anpset.exists("recElecLabel")) {
751  _recLabels[EVTColContainer::ELEC] = anpset.getParameter<std::string>("recElecLabel");
754  }
755  if (anpset.exists("recPhotonLabel")) {
756  _recLabels[EVTColContainer::PHOTON] = anpset.getParameter<std::string>("recPhotonLabel");
759  }
760  if (anpset.exists("recCaloMETLabel")) {
761  _recLabels[EVTColContainer::CALOMET] = anpset.getParameter<std::string>("recCaloMETLabel");
764  }
765  if (anpset.exists("recPFMETLabel")) {
766  _recLabels[EVTColContainer::PFMET] = anpset.getParameter<std::string>("recPFMETLabel");
769  }
770  if (anpset.exists("recPFTauLabel")) {
771  _recLabels[EVTColContainer::PFTAU] = anpset.getParameter<std::string>("recPFTauLabel");
774  }
775  if (anpset.exists("recJetLabel")) {
776  _recLabels[EVTColContainer::PFJET] = anpset.getParameter<std::string>("recJetLabel");
778  if (anpset.exists("jetTagLabel"))
780  _genJetSelector = nullptr;
781  }
782  /*if( anpset.exists("recTrackLabel") )
783  {
784  _recLabels[EVTColContainer::TRACK] = anpset.getParameter<std::string>("recTrackLabel");
785  _genSelectorMap[EVTColContainer::TRACK] = 0 ;
786  }*/
787 
788  if (_recLabels.empty()) {
789  edm::LogError("HiggsValidation") << "HLTHiggsSubAnalysis::bookobjects, "
790  << "Not included any object (recMuonLabel, recElecLabel, ...) "
791  << "in the analysis " << _analysisname;
792  return;
793  }
794 }
795 
797  /*if( col != 0 && col->isAllInit() )
798  {
799  // Already init, not needed to do nothing
800  return;
801  }*/
802  if (!col->isCommonInit()) {
803  // extract the trigger results (path info, pass,...)
805  iEvent.getByToken(_trigResultsTag, trigResults);
806  if (trigResults.isValid()) {
807  col->triggerResults = trigResults.product();
808  }
809 
810  // GenParticle collection if is there (genJets only if there need to be jets)
812  iEvent.getByToken(_genParticleLabel, genPart);
813  if (genPart.isValid()) {
814  col->genParticles = genPart.product();
815  }
816  }
817 
818  for (std::map<unsigned int, std::string>::iterator it = _recLabels.begin(); it != _recLabels.end(); ++it) {
819  if (it->first == EVTColContainer::MUON) {
821  iEvent.getByToken(_recLabelsMuon, theHandle);
822  col->set(theHandle.product());
823  } else if (it->first == EVTColContainer::ELEC) {
825  iEvent.getByToken(_recLabelsElec, theHandle);
826  col->set(theHandle.product());
827  } else if (it->first == EVTColContainer::PHOTON) {
829  iEvent.getByToken(_recLabelsPhoton, theHandle);
830  col->set(theHandle.product());
831  } else if (it->first == EVTColContainer::CALOMET) {
833  iEvent.getByToken(_recLabelsCaloMET, theHandle);
834  col->set(theHandle.product());
835  } else if (it->first == EVTColContainer::PFMET) {
837  iEvent.getByToken(_recLabelsPFMET, theHandle);
838  col->set(theHandle.product());
839  } else if (it->first == EVTColContainer::PFTAU) {
841  iEvent.getByToken(_recLabelsPFTau, theHandle);
842  col->set(theHandle.product());
843  }
844  // PFJets loaded in seperate function initAndInsertJets because they need to be combined with the btags using the Handle (not the product) and for ordering them seperately in the MatchStruct's
845  else if (it->first == EVTColContainer::PFJET) {
846  if (!_useNminOneCuts) {
847  // GenJet collection
849  iEvent.getByToken(_genJetLabel, genJet);
850  if (genJet.isValid()) {
851  col->genJets = genJet.product();
852  }
853  }
854  } else {
855  edm::LogError("HiggsValidation") << "HLTHiggsSubAnalysis::initobjects "
856  << " NOT IMPLEMENTED (yet) ERROR: '" << it->second << "'";
857  //return; ??
858  }
859  }
860 }
861 
863  const std::string& objType,
864  const std::string& variable,
865  DQMStore::IBooker& ibooker) {
866  std::string sourceUpper = source;
867  sourceUpper[0] = std::toupper(sourceUpper[0]);
869  TH1F* h = nullptr;
870 
871  if (variable.find("MaxPt") != std::string::npos) {
873  if (variable == "MaxPt1")
874  desc = "Leading";
875  else if (variable == "MaxPt2")
876  desc = "Next-to-Leading";
877  else
878  desc = variable.substr(5, 6) + "th Leading";
879  std::string title = "pT of " + desc + " " + sourceUpper + " " + objType;
880  const size_t nBinsStandard = _parametersTurnOn.size() - 1;
881  size_t nBins = nBinsStandard;
882  float* edges = new float[nBinsStandard + 1];
883  for (size_t i = 0; i < nBinsStandard + 1; i++) {
885  }
886 
888  if (objType == jetObj) {
889  const size_t nBinsJets = 25;
890  nBins = nBinsJets;
891  delete[] edges;
892  edges = new float[nBinsJets + 1];
893  for (size_t i = 0; i < nBinsJets + 1; i++) {
894  edges[i] = i * 10;
895  }
896  }
898  const size_t nBinsJets = 30;
899  nBins = nBinsJets;
900  delete[] edges;
901  edges = new float[nBinsJets + 1];
902  for (size_t i = 0; i < nBinsJets + 1; i++) {
903  edges[i] = i * 10;
904  }
905  }
906  h = new TH1F(name.c_str(), title.c_str(), nBins, edges);
907  delete[] edges;
908  } else if (variable == "dEtaqq") {
909  std::string title = "#Delta #eta_{qq} of " + sourceUpper + " " + objType;
910  int nBins = 20;
911  double min = 0;
912  double max = 4.8;
913  h = new TH1F(name.c_str(), title.c_str(), nBins, min, max);
914  } else if (variable == "mqq") {
915  std::string title = "m_{qq} of " + sourceUpper + " " + objType;
916  int nBins = 20;
917  double min = 0;
918  double max = 1000;
919  h = new TH1F(name.c_str(), title.c_str(), nBins, min, max);
920  } else if (variable == "dPhibb") {
921  std::string title = "#Delta #phi_{bb} of " + sourceUpper + " " + objType;
922  int nBins = 10;
923  double min = 0;
924  double max = 3.1416;
925  h = new TH1F(name.c_str(), title.c_str(), nBins, min, max);
926  } else if (variable == "CSV1") {
927  std::string title = "CSV1 of " + sourceUpper + " " + objType;
928  int nBins = 20;
929  double min = 0;
930  double max = 1;
931  h = new TH1F(name.c_str(), title.c_str(), nBins, min, max);
932  } else if (variable == "CSV2") {
933  std::string title = "CSV2 of " + sourceUpper + " " + objType;
934  int nBins = 20;
935  double min = 0;
936  double max = 1;
937  h = new TH1F(name.c_str(), title.c_str(), nBins, min, max);
938  } else if (variable == "CSV3") {
939  std::string title = "CSV3 of " + sourceUpper + " " + objType;
940  int nBins = 20;
941  double min = 0;
942  double max = 1;
943  h = new TH1F(name.c_str(), title.c_str(), nBins, min, max);
944  } else if (variable == "maxCSV") {
945  std::string title = "max CSV of " + sourceUpper + " " + objType;
946  int nBins = 20;
947  double min = 0;
948  double max = 1;
949  h = new TH1F(name.c_str(), title.c_str(), nBins, min, max);
950  } else {
951  std::string symbol = (variable == "Eta") ? "#eta" : "#phi";
952  std::string title = symbol + " of " + sourceUpper + " " + objType;
953  std::vector<double> params = (variable == "Eta") ? _parametersEta : _parametersPhi;
954 
955  int nBins = (int)params[0];
956  double min = params[1];
957  double max = params[2];
958  h = new TH1F(name.c_str(), title.c_str(), nBins, min, max);
959  }
960  h->Sumw2();
961  _elements[name] = ibooker.book1D(name, h);
962  delete h;
963 }
964 
966  const std::string& objType,
967  const std::string& variable,
968  const float& value) {
969  std::string sourceUpper = source;
970  sourceUpper[0] = toupper(sourceUpper[0]);
972 
973  _elements[name]->Fill(value);
974 }
975 
976 // Initialize the selectors
977 void HLTHiggsSubAnalysis::InitSelector(const unsigned int& objtype) {
978  if (objtype == EVTColContainer::MUON && _recMuonSelector == nullptr) {
980  } else if (objtype == EVTColContainer::ELEC && _recElecSelector == nullptr) {
982  } else if (objtype == EVTColContainer::PHOTON && _recPhotonSelector == nullptr) {
984  } else if (objtype == EVTColContainer::CALOMET && _recCaloMETSelector == nullptr) {
986  } else if (objtype == EVTColContainer::PFMET && _recPFMETSelector == nullptr) {
988  } else if (objtype == EVTColContainer::PFTAU && _recPFTauSelector == nullptr) {
990  } else if (objtype == EVTColContainer::PFJET && _recPFJetSelector == nullptr) {
992  }
993  /*else if( objtype == EVTColContainer::TRACK && _recTrackSelector == 0)
994  {
995  _recTrackSelector = new StringCutObjectSelector<reco::Track>(_recCut[objtype]);
996  }*/
997  /* else
998  {
999 FIXME: ERROR NO IMPLEMENTADO
1000  }*/
1001 }
1002 
1004  EVTColContainer* cols,
1005  std::vector<MatchStruct>* matches) {
1007  iEvent.getByToken(_recLabelsPFJet, PFJetHandle);
1008  cols->set(PFJetHandle.product());
1009 
1011  if (_useNminOneCuts) {
1012  iEvent.getByToken(_recTagPFJet, JetTagHandle);
1013  }
1014 
1015  for (reco::PFJetCollection::const_iterator it = PFJetHandle->begin(); it != PFJetHandle->end(); ++it) {
1016  reco::PFJetRef jetRef(PFJetHandle, it - PFJetHandle->begin());
1017  reco::JetBaseRef jetBaseRef(jetRef);
1018 
1019  if (_recPFJetSelector->operator()(*it)) {
1020  if (_useNminOneCuts) {
1021  float bTag = (*(JetTagHandle.product()))[jetBaseRef];
1022  matches->push_back(MatchStruct(&*it, EVTColContainer::PFJET, bTag));
1023  } else {
1024  matches->push_back(MatchStruct(&*it, EVTColContainer::PFJET));
1025  }
1026  }
1027  }
1028 }
1029 
1031  std::vector<MatchStruct>* matches,
1032  std::map<std::string, bool>& jetCutResult,
1033  float& dEtaqq,
1034  float& mqq,
1035  float& dPhibb,
1036  float& CSV1,
1037  float& CSV2,
1038  float& CSV3) { //dEtaqq, mqq, dPhibb, CSV1, CSV2, CSV3, maxCSV_jets, maxCSV_E, PFMET, pt1, pt2, pt3, pt4
1039 
1040  // Perform pt cuts
1041  std::sort(matches->begin(), matches->end(), matchesByDescendingPt());
1042  TString maxPt;
1043  for (unsigned int i = 0; i < NptPlots; i++) {
1044  maxPt = "MaxPt";
1045  maxPt += i + 1;
1046  if ((*matches)[i].pt > _NminOneCuts[9 + i])
1047  jetCutResult[maxPt.Data()] = true;
1048  else
1049  jetCutResult[maxPt.Data()] = false;
1050  }
1051 
1052  unsigned int NbTag = ((_NminOneCuts[0] || _NminOneCuts[1]) ? 4 : 8);
1053  if (matches->size() < NbTag)
1054  NbTag = matches->size();
1055  // Perform b-tag ordered cuts
1056  std::sort(matches->begin(), matches->begin() + NbTag, matchesByDescendingBtag());
1057 
1058  if (_NminOneCuts[0]) {
1059  jetCutResult["dEtaqq"] = false;
1060  if (matches->size() > 2) {
1061  dEtaqq = fabs((*matches)[2].eta - (*matches)[3].eta);
1062  if (dEtaqq > _NminOneCuts[0])
1063  jetCutResult["dEtaqq"] = true;
1064  }
1065  }
1066 
1067  if (_NminOneCuts[1]) {
1068  jetCutResult["mqq"] = false;
1069  if (matches->size() > 2) {
1070  mqq = ((*matches)[2].lorentzVector + (*matches)[3].lorentzVector).M();
1071  if (mqq > _NminOneCuts[1])
1072  jetCutResult["mqq"] = true;
1073  }
1074  }
1075 
1076  if (_NminOneCuts[2]) {
1077  jetCutResult["dPhibb"] = false;
1078  if (matches->size() > 1) {
1079  dPhibb = fmod(fabs((*matches)[0].phi - (*matches)[1].phi), 3.1416);
1080  if (dPhibb < _NminOneCuts[2])
1081  jetCutResult["dPhibb"] = true;
1082  }
1083  }
1084 
1085  if (_NminOneCuts[4]) {
1086  std::string nameCSV2plot = "CSV2";
1087  jetCutResult[nameCSV2plot] = false;
1088  if (matches->size() > 1) {
1089  CSV2 = (*matches)[1].bTag;
1090  if (CSV2 > _NminOneCuts[4])
1091  jetCutResult[nameCSV2plot] = true;
1092  }
1093  }
1094 
1095  if (_NminOneCuts[5]) {
1096  std::string nameCSV3plot = "CSV3";
1097  jetCutResult[nameCSV3plot] = false;
1098  if (matches->size() > 2) {
1099  CSV3 = (*matches)[2].bTag;
1100  if (CSV3 > _NminOneCuts[5])
1101  jetCutResult[nameCSV3plot] = true;
1102  }
1103  }
1104 
1105  if (_NminOneCuts[3]) {
1106  CSV1 = (*matches)[0].bTag;
1107  std::string nameCSVplot = "CSV1";
1108  if (_NminOneCuts[6])
1109  nameCSVplot = "maxCSV";
1110 
1111  if (CSV1 > _NminOneCuts[3])
1112  jetCutResult[nameCSVplot] = true;
1113  else
1114  jetCutResult[nameCSVplot] = false;
1115 
1116  // max(CSV)
1117  if (_NminOneCuts[6]) {
1118  std::sort(matches->begin(), matches->end(), matchesByDescendingPt());
1119  CSV1 = (*matches)[0].bTag;
1120  unsigned int Njets = (unsigned int)_NminOneCuts[6];
1121  if (_NminOneCuts[6] > matches->size())
1122  Njets = matches->size();
1123  for (unsigned int i = 1; i < (unsigned int)Njets; ++i) {
1124  if ((*matches)[i].bTag > CSV1 && (*matches)[i].pt > _NminOneCuts[7])
1125  CSV1 = (*matches)[i].bTag;
1126  }
1127  }
1128  }
1129 }
1130 
1131 void HLTHiggsSubAnalysis::passOtherCuts(const std::vector<MatchStruct>& matches,
1132  std::map<std::string, bool>& jetCutResult) {
1133  if (_NminOneCuts[8]) {
1134  jetCutResult["PFMET"] = false;
1135  for (std::vector<MatchStruct>::const_iterator it = matches.begin(); it != matches.end(); ++it) {
1136  if (it->objType == EVTColContainer::PFMET) {
1137  if (it->pt > _NminOneCuts[8])
1138  jetCutResult["PFMET"] = true;
1139  break;
1140  }
1141  }
1142  }
1143 }
1144 
1146  const EVTColContainer* cols,
1147  std::vector<MatchStruct>* matches) {
1148  if (objType == EVTColContainer::MUON) {
1149  for (size_t i = 0; i < cols->muons->size(); i++) {
1150  if (_recMuonSelector->operator()(cols->muons->at(i))) {
1151  matches->push_back(MatchStruct(&cols->muons->at(i), objType));
1152  }
1153  }
1154  } else if (objType == EVTColContainer::ELEC) {
1155  for (size_t i = 0; i < cols->electrons->size(); i++) {
1156  if (_recElecSelector->operator()(cols->electrons->at(i))) {
1157  matches->push_back(MatchStruct(&cols->electrons->at(i), objType));
1158  }
1159  }
1160  } else if (objType == EVTColContainer::PHOTON) {
1161  for (size_t i = 0; i < cols->photons->size(); i++) {
1162  if (_recPhotonSelector->operator()(cols->photons->at(i))) {
1163  matches->push_back(MatchStruct(&cols->photons->at(i), objType));
1164  }
1165  }
1166  } else if (objType == EVTColContainer::CALOMET) {
1167  for (size_t i = 0; i < cols->caloMETs->size(); i++) {
1168  if (_recCaloMETSelector->operator()(cols->caloMETs->at(i))) {
1169  matches->push_back(MatchStruct(&cols->caloMETs->at(i), objType));
1170  }
1171  }
1172  } else if (objType == EVTColContainer::PFMET) {
1173  for (size_t i = 0; i < cols->pfMETs->size(); i++) {
1174  if (_recPFMETSelector->operator()(cols->pfMETs->at(i))) {
1175  matches->push_back(MatchStruct(&cols->pfMETs->at(i), objType));
1176  }
1177  }
1178  } else if (objType == EVTColContainer::PFTAU) {
1179  for (size_t i = 0; i < cols->pfTaus->size(); i++) {
1180  if (_recPFTauSelector->operator()(cols->pfTaus->at(i))) {
1181  matches->push_back(MatchStruct(&cols->pfTaus->at(i), objType));
1182  }
1183  }
1184  }
1185  // else if( objType == EVTColContainer::PFJET )
1186  // {
1187  // already inserted
1188  // }
1189  /*else if( objType == EVTColContainer::TRACK )
1190  {
1191  for(size_t i = 0; i < cols->tracks->size(); i++)
1192  {
1193  if(_recTrackSelector->operator()(cols->tracks->at(i)))
1194  {
1195  matches->push_back(MatchStruct(&cols->tracks->at(i),objType));
1196  }
1197  }
1198  }*/
1199  /*
1200  else FIXME: Control errores
1201  {
1202  }
1203  */
1204 }
EVTColContainer::getTypeString
const static std::string getTypeString(const unsigned int &objtype)
Tranform types into strings.
Definition: EVTColContainer.cc:232
HLTHiggsSubAnalysis::_recPFMETSelector
StringCutObjectSelector< reco::PFMET > * _recPFMETSelector
Definition: HLTHiggsSubAnalysis.h:158
reco::PFMETCollection
std::vector< reco::PFMET > PFMETCollection
collection of PFMET objects
Definition: PFMETCollection.h:20
HLTHiggsSubAnalysis::_elements
std::map< std::string, MonitorElement * > _elements
Definition: HLTHiggsSubAnalysis.h:173
HLTHiggsSubAnalysis::_cutMaxEta
std::map< unsigned int, double > _cutMaxEta
Definition: HLTHiggsSubAnalysis.h:144
HLTHiggsSubAnalysis::_recLabelsCaloMET
edm::EDGetTokenT< reco::CaloMETCollection > _recLabelsCaloMET
Definition: HLTHiggsSubAnalysis.h:128
Handle.h
runGCPTkAlMap.title
string title
Definition: runGCPTkAlMap.py:94
mps_fire.i
i
Definition: mps_fire.py:428
EVTColContainer::electrons
const std::vector< reco::GsfElectron > * electrons
Definition: EVTColContainer.cc:73
MessageLogger.h
funct::false
false
Definition: Factorize.h:29
HLTHiggsSubAnalysis::passOtherCuts
void passOtherCuts(const std::vector< MatchStruct > &matches, std::map< std::string, bool > &jetCutResult)
Definition: HLTHiggsSubAnalysis.cc:1131
edm::Handle::product
T const * product() const
Definition: Handle.h:70
EVTColContainer::ELEC
Definition: EVTColContainer.cc:49
trigNames
static const char *const trigNames[]
Definition: EcalDumpRaw.cc:57
TriggerResults.h
HLTHiggsSubAnalysis::_parametersTurnOn
std::vector< double > _parametersTurnOn
Definition: HLTHiggsSubAnalysis.h:140
reco::GenJetCollection
std::vector< GenJet > GenJetCollection
collection of GenJet objects
Definition: GenJetCollection.h:14
DiDispStaMuonMonitor_cfi.pt
pt
Definition: DiDispStaMuonMonitor_cfi.py:39
CalibrationSummaryClient_cfi.params
params
Definition: CalibrationSummaryClient_cfi.py:14
edm::Run
Definition: Run.h:45
min
T min(T a, T b)
Definition: MathUtil.h:58
HLTHiggsSubAnalysis::_trigResultsTag
edm::EDGetTokenT< edm::TriggerResults > _trigResultsTag
Definition: HLTHiggsSubAnalysis.h:141
HLTHiggsPlotter
Definition: HLTHiggsPlotter.h:46
edm
HLT enums.
Definition: AlignableModifier.h:19
HLTHiggsSubAnalysis::analyze
void analyze(const edm::Event &iEvent, const edm::EventSetup &iEventSetup, EVTColContainer *cols)
Definition: HLTHiggsSubAnalysis.cc:370
HLTHiggsSubAnalysis::_recLabelsPFJet
edm::EDGetTokenT< reco::PFJetCollection > _recLabelsPFJet
Definition: HLTHiggsSubAnalysis.h:131
HLTHiggsSubAnalysis::initobjects
void initobjects(const edm::Event &iEvent, EVTColContainer *col)
Definition: HLTHiggsSubAnalysis.cc:796
HLTHiggsSubAnalysis::_recLabelsPFTau
edm::EDGetTokenT< reco::PFTauCollection > _recLabelsPFTau
Definition: HLTHiggsSubAnalysis.h:130
cuy.col
col
Definition: cuy.py:1009
TriggerAnalyzer.hltPath
hltPath
Definition: TriggerAnalyzer.py:62
oniaPATMuonsWithTrigger_cff.matches
matches
Definition: oniaPATMuonsWithTrigger_cff.py:77
HLT_FULL_cff.InputTag
InputTag
Definition: HLT_FULL_cff.py:89301
reco::GenParticleCollection
std::vector< GenParticle > GenParticleCollection
collection of GenParticles
Definition: GenParticleFwd.h:13
dqm::implementation::NavigatorBase::setCurrentFolder
virtual void setCurrentFolder(std::string const &fullpath)
Definition: DQMStore.cc:32
HLTHiggsSubAnalysis::_parametersPu
std::vector< double > _parametersPu
Definition: HLTHiggsSubAnalysis.h:138
CalibrationSummaryClient_cfi.sources
sources
Definition: CalibrationSummaryClient_cfi.py:23
L1TrackerEtMissProducer_cfi.maxPt
maxPt
Definition: L1TrackerEtMissProducer_cfi.py:14
ALCARECODTCalibSynchDQM_cff.baseDir
baseDir
Definition: ALCARECODTCalibSynchDQM_cff.py:16
reco::GsfElectronCollection
std::vector< GsfElectron > GsfElectronCollection
collection of GsfElectron objects
Definition: GsfElectronFwd.h:14
edm::ParameterSet::getUntrackedParameter
T getUntrackedParameter(std::string const &, T const &) const
HLTHiggsSubAnalysis::_hltProcessName
std::string _hltProcessName
Definition: HLTHiggsSubAnalysis.h:107
edm::ParameterSet::existsAs
bool existsAs(std::string const &parameterName, bool trackiness=true) const
checks if a parameter exists as a given type
Definition: ParameterSet.h:171
reco
fixed size matrix
Definition: AlignmentAlgorithmBase.h:46
HLTHiggsSubAnalysis.h
h
The Signals That Services Can Subscribe To This is based on ActivityRegistry h
Helper function to determine trigger accepts.
Definition: Activities.doc:4
spr::find
void find(edm::Handle< EcalRecHitCollection > &hits, DetId thisDet, std::vector< EcalRecHitCollection::const_iterator > &hit, bool debug=false)
Definition: FindCaloHit.cc:19
ramdisk_dqm_sourceclient-live_cfg.analyzer
analyzer
Definition: ramdisk_dqm_sourceclient-live_cfg.py:22
newFWLiteAna.found
found
Definition: newFWLiteAna.py:118
edm::Handle
Definition: AssociativeIterator.h:50
groupFilesInBlocks.temp
list temp
Definition: groupFilesInBlocks.py:142
HLTHiggsSubAnalysis::_recLabelsMuon
edm::EDGetTokenT< reco::MuonCollection > _recLabelsMuon
Definition: HLTHiggsSubAnalysis.h:125
matchesByDescendingPt
Helper structure to order MatchStruct.
Definition: MatchStruct.cc:58
HLTHiggsSubAnalysis::_puSummaryInfo
edm::EDGetTokenT< std::vector< PileupSummaryInfo > > _puSummaryInfo
Definition: HLTHiggsSubAnalysis.h:133
EVTColContainer::MUON
Definition: EVTColContainer.cc:50
edm::Ref< PFJetCollection >
HLTHiggsSubAnalysis::_analyzers
std::vector< HLTHiggsPlotter > _analyzers
Definition: HLTHiggsSubAnalysis.h:170
HLTHiggsSubAnalysis::initAndInsertJets
void initAndInsertJets(const edm::Event &iEvent, EVTColContainer *cols, std::vector< MatchStruct > *matches)
Definition: HLTHiggsSubAnalysis.cc:1003
HLTHiggsSubAnalysis::_hltPaths
std::set< std::string > _hltPaths
the hlt paths found in the hltConfig
Definition: HLTHiggsSubAnalysis.h:113
HLTHiggsSubAnalysis::_genJetLabel
edm::EDGetTokenT< reco::GenJetCollection > _genJetLabel
Definition: HLTHiggsSubAnalysis.h:121
EVTColContainer::triggerResults
const edm::TriggerResults * triggerResults
Definition: EVTColContainer.cc:85
HLTHiggsSubAnalysis::_recLabelsPhoton
edm::EDGetTokenT< reco::PhotonCollection > _recLabelsPhoton
Definition: HLTHiggsSubAnalysis.h:127
MTVHistoProducerAlgoForTrackerBlock_cfi.minPu
minPu
Definition: MTVHistoProducerAlgoForTrackerBlock_cfi.py:40
HLT_FULL_cff.minHt
minHt
Definition: HLT_FULL_cff.py:14158
cms::cuda::co
__host__ __device__ VT * co
Definition: prefixScan.h:47
EVTColContainer::CALOMET
Definition: EVTColContainer.cc:58
Service.h
PVValHelper::eta
Definition: PVValidationHelpers.h:70
HLTHiggsSubAnalysis::_genJetSelector
StringCutObjectSelector< reco::GenJet > * _genJetSelector
Definition: HLTHiggsSubAnalysis.h:154
reco::MuonCollection
std::vector< Muon > MuonCollection
collection of Muon objects
Definition: MuonFwd.h:9
HLTHiggsSubAnalysis::_recLabels
std::map< unsigned int, std::string > _recLabels
Definition: HLTHiggsSubAnalysis.h:124
reco::PFTauCollection
std::vector< PFTau > PFTauCollection
collection of PFTau objects
Definition: PFTauFwd.h:9
source
static const std::string source
Definition: EdmProvDump.cc:47
HLTHiggsSubAnalysis::_useNminOneCuts
bool _useNminOneCuts
Definition: HLTHiggsSubAnalysis.h:166
ECF_cff.Njets
Njets
Definition: ECF_cff.py:21
HLTHiggsSubAnalysis::_bookHtPlots
bool _bookHtPlots
Definition: HLTHiggsSubAnalysis.h:105
edm::ConsumesCollector::consumes
EDGetTokenT< ProductType > consumes(edm::InputTag const &tag)
Definition: ConsumesCollector.h:55
EVTColContainer::genParticles
const reco::GenParticleCollection * genParticles
Definition: EVTColContainer.cc:70
HLTHiggsSubAnalysis::_parametersPhi
std::vector< double > _parametersPhi
Definition: HLTHiggsSubAnalysis.h:137
seedmultiplicitymonitor_newtracking_cfi.nBins
nBins
Definition: seedmultiplicitymonitor_newtracking_cfi.py:8
h
EVTColContainer::PFMET
Definition: EVTColContainer.cc:54
EVTColContainer::pfMETs
const std::vector< reco::PFMET > * pfMETs
Definition: EVTColContainer.cc:76
EVTColContainer::genJets
const reco::GenJetCollection * genJets
Definition: EVTColContainer.cc:57
MatchStruct
Definition: MatchStruct.cc:23
HLTHiggsSubAnalysis::bookHist
void bookHist(const std::string &source, const std::string &objType, const std::string &variable, DQMStore::IBooker &)
Definition: HLTHiggsSubAnalysis.cc:862
HLTHiggsSubAnalysis::_recCut
std::map< unsigned int, std::string > _recCut
Definition: HLTHiggsSubAnalysis.h:149
edm::AssociationVector
Definition: AssociationVector.h:67
HLTHiggsSubAnalysis::beginRun
void beginRun(const edm::Run &iRun, const edm::EventSetup &iEventSetup)
Definition: HLTHiggsSubAnalysis.cc:193
edm::ParameterSet::exists
bool exists(std::string const &parameterName) const
checks if a parameter exists
Definition: ParameterSet.cc:681
HLTHiggsSubAnalysis::_recPFJetSelector
StringCutObjectSelector< reco::PFJet > * _recPFJetSelector
Definition: HLTHiggsSubAnalysis.h:161
electrons_cff.objType
objType
Definition: electrons_cff.py:519
LogDebug
#define LogDebug(id)
Definition: MessageLogger.h:233
EVTColContainer::PHOTON
Definition: EVTColContainer.cc:48
HLTHiggsSubAnalysis::_hltConfig
HLTConfigProvider _hltConfig
Definition: HLTHiggsSubAnalysis.h:172
edm::ParameterSet
Definition: ParameterSet.h:47
SiStripPI::max
Definition: SiStripPayloadInspectorHelper.h:169
HLTHiggsSubAnalysis::_recCaloMETSelector
StringCutObjectSelector< reco::CaloMET > * _recCaloMETSelector
Definition: HLTHiggsSubAnalysis.h:157
MatchStruct.cc
jetUpdater_cfi.sort
sort
Definition: jetUpdater_cfi.py:29
EVTColContainer::caloMETs
const std::vector< reco::CaloMET > * caloMETs
Definition: EVTColContainer.cc:79
HLTHiggsSubAnalysis::fillHist
void fillHist(const std::string &source, const std::string &objType, const std::string &variable, const float &value)
Definition: HLTHiggsSubAnalysis.cc:965
HLTHiggsSubAnalysis::_cutMinPt
std::map< unsigned int, double > _cutMinPt
Definition: HLTHiggsSubAnalysis.h:143
MTVHistoProducerAlgoForTrackerBlock_cfi.maxPu
maxPu
Definition: MTVHistoProducerAlgoForTrackerBlock_cfi.py:41
EVTColContainer::muons
const std::vector< reco::Muon > * muons
Definition: EVTColContainer.cc:71
edm::ParameterSet::addParameter
void addParameter(std::string const &name, T const &value)
Definition: ParameterSet.h:135
createfilelist.int
int
Definition: createfilelist.py:10
TriggerNames.h
iEvent
int iEvent
Definition: GenABIO.cc:224
HLTHiggsSubAnalysis::InitSelector
void InitSelector(const unsigned int &objtype)
Definition: HLTHiggsSubAnalysis.cc:977
value
Definition: value.py:1
HLTHiggsSubAnalysis::_recTagPFJet
edm::EDGetTokenT< reco::JetTagCollection > _recTagPFJet
Definition: HLTHiggsSubAnalysis.h:132
matchesByDescendingBtag
Definition: MatchStruct.cc:61
topSingleLeptonDQM_PU_cfi.pattern
pattern
Definition: topSingleLeptonDQM_PU_cfi.py:39
trackerHitRTTI::vector
Definition: trackerHitRTTI.h:21
HLTHiggsSubAnalysis::_HtJetEtaMax
double _HtJetEtaMax
Definition: HLTHiggsSubAnalysis.h:103
HLTHiggsSubAnalysis::_recoHtJetLabel
edm::EDGetTokenT< reco::PFJetCollection > _recoHtJetLabel
Definition: HLTHiggsSubAnalysis.h:122
edm::EventSetup
Definition: EventSetup.h:58
edm::LogError
Log< level::Error, false > LogError
Definition: MessageLogger.h:123
HLTHiggsSubAnalysis::RECO
Definition: HLTHiggsSubAnalysis.h:64
EVTColContainer::set
void set(const reco::MuonCollection *v)
Setter: multiple overloaded function.
Definition: EVTColContainer.cc:136
HLTHiggsSubAnalysis::passJetCuts
void passJetCuts(std::vector< MatchStruct > *matches, std::map< std::string, bool > &jetCutResult, float &dEtaqq, float &mqq, float &dPhibb, float &CSV1, float &CSV2, float &CSV3)
Definition: HLTHiggsSubAnalysis.cc:1030
HLTHiggsSubAnalysis::GEN
Definition: HLTHiggsSubAnalysis.h:64
SelectiveReadoutTask_cfi.edges
edges
Definition: SelectiveReadoutTask_cfi.py:107
AlCaHLTBitMon_QueryRunRegistry.string
string string
Definition: AlCaHLTBitMon_QueryRunRegistry.py:256
HLTHiggsSubAnalysis::NptPlots
unsigned int NptPlots
Definition: HLTHiggsSubAnalysis.h:167
HLTHiggsSubAnalysis::_genCut
std::map< unsigned int, std::string > _genCut
gen/rec objects cuts
Definition: HLTHiggsSubAnalysis.h:148
DDAxes::phi
HLTHiggsSubAnalysis::_shortpath2long
std::map< std::string, std::string > _shortpath2long
Relation between the short version of a path.
Definition: HLTHiggsSubAnalysis.h:116
HLTHiggsSubAnalysis::_NminOneCuts
std::vector< double > _NminOneCuts
Definition: HLTHiggsSubAnalysis.h:165
submitPVResolutionJobs.desc
string desc
Definition: submitPVResolutionJobs.py:251
taus_updatedMVAIds_cff.variable
variable
Definition: taus_updatedMVAIds_cff.py:33
HLTHiggsSubAnalysis::_pset
edm::ParameterSet _pset
Definition: HLTHiggsSubAnalysis.h:95
std
Definition: JetResolutionObject.h:76
HLTConfigProvider::init
bool init(const edm::Run &iRun, const edm::EventSetup &iSetup, const std::string &processName, bool &changed)
d'tor
Definition: HLTConfigProvider.cc:36
analyzer
Definition: SiPixelLorentzAngle.h:82
EVTColContainer::pfTaus
const std::vector< reco::PFTau > * pfTaus
Definition: EVTColContainer.cc:82
HLTHiggsSubAnalysis::_genSelectorMap
std::map< unsigned int, StringCutObjectSelector< reco::GenParticle > * > _genSelectorMap
Definition: HLTHiggsSubAnalysis.h:153
reco::PFJetCollection
std::vector< PFJet > PFJetCollection
collection of PFJet objects
Definition: PFJetCollection.h:14
HLTHiggsSubAnalysis::_recElecSelector
StringCutObjectSelector< reco::GsfElectron > * _recElecSelector
Definition: HLTHiggsSubAnalysis.h:156
HLTHiggsSubAnalysis::_recLabelsPFMET
edm::EDGetTokenT< reco::PFMETCollection > _recLabelsPFMET
Definition: HLTHiggsSubAnalysis.h:129
EVTColContainer::photons
const std::vector< reco::Photon > * photons
Definition: EVTColContainer.cc:74
StringCutObjectSelector< reco::GenParticle >
EVTColContainer::PFTAU
Definition: EVTColContainer.cc:52
HLTHiggsSubAnalysis::_genParticleLabel
edm::EDGetTokenT< reco::GenParticleCollection > _genParticleLabel
Definition: HLTHiggsSubAnalysis.h:120
HLTHiggsSubAnalysis::_recPhotonSelector
StringCutObjectSelector< reco::Photon > * _recPhotonSelector
Definition: HLTHiggsSubAnalysis.h:160
edm::TriggerNames
Definition: TriggerNames.h:55
TtFullHadHypKinFit_cfi.bTag
bTag
Definition: TtFullHadHypKinFit_cfi.py:17
Skims_PA_cff.name
name
Definition: Skims_PA_cff.py:17
EVTColContainer.cc
HLTHiggsSubAnalysis::_recPFTauSelector
StringCutObjectSelector< reco::PFTau > * _recPFTauSelector
Definition: HLTHiggsSubAnalysis.h:159
edm::ParameterSet::getParameter
T getParameter(std::string const &) const
Definition: ParameterSet.h:303
edm::RefToBase< Jet >
edm::HLTGlobalStatus::accept
bool accept() const
Has at least one path accepted the event?
Definition: HLTGlobalStatus.h:49
HLTHiggsSubAnalysis::bookHistograms
void bookHistograms(DQMStore::IBooker &)
Definition: HLTHiggsSubAnalysis.cc:262
dqm::implementation::IBooker
Definition: DQMStore.h:43
HLTHiggsSubAnalysis::_histDirectory
std::string _histDirectory
Definition: HLTHiggsSubAnalysis.h:108
reco::PhotonCollection
std::vector< Photon > PhotonCollection
collectin of Photon objects
Definition: PhotonFwd.h:9
HLTHiggsSubAnalysis::_HtJetPtMin
double _HtJetPtMin
Definition: HLTHiggsSubAnalysis.h:102
castor_dqm_sourceclient_file_cfg.path
path
Definition: castor_dqm_sourceclient_file_cfg.py:37
EVTColContainer::PFJET
Definition: EVTColContainer.cc:61
HLTHiggsSubAnalysis::_recLabelsElec
edm::EDGetTokenT< reco::GsfElectronCollection > _recLabelsElec
Definition: HLTHiggsSubAnalysis.h:126
genParticles_cff.map
map
Definition: genParticles_cff.py:11
LogTrace
#define LogTrace(id)
Definition: MessageLogger.h:234
HLTHiggsSubAnalysis::_minCandidates
unsigned int _minCandidates
The minimum number of reco/gen candidates needed by the analysis.
Definition: HLTHiggsSubAnalysis.h:100
reco::CaloMETCollection
std::vector< reco::CaloMET > CaloMETCollection
collection of CaloMET objects
Definition: CaloMETCollection.h:20
HLTHiggsSubAnalysis::getObjectsType
const std::vector< unsigned int > getObjectsType(const std::string &hltpath) const
Extract what objects need this analysis.
Definition: HLTHiggsSubAnalysis.cc:702
beamvalidation.exit
def exit(msg="")
Definition: beamvalidation.py:52
HLTHiggsSubAnalysis::~HLTHiggsSubAnalysis
~HLTHiggsSubAnalysis()
Definition: HLTHiggsSubAnalysis.cc:164
HLTConfigProvider::triggerNames
const std::vector< std::string > & triggerNames() const
names of trigger paths
Definition: HLTConfigProvider.h:69
dqmiolumiharvest.j
j
Definition: dqmiolumiharvest.py:66
HLTHiggsSubAnalysis::HLTHiggsSubAnalysis
HLTHiggsSubAnalysis(const edm::ParameterSet &pset, const std::string &analysisname, edm::ConsumesCollector &&iC)
Definition: HLTHiggsSubAnalysis.cc:32
edm::HandleBase::isValid
bool isValid() const
Definition: HandleBase.h:70
HLTHiggsSubAnalysis::bookobjects
void bookobjects(const edm::ParameterSet &anpset, edm::ConsumesCollector &iC)
Definition: HLTHiggsSubAnalysis.cc:744
HLTObjectsMonitor_cfi.TriggerResults
TriggerResults
Definition: HLTObjectsMonitor_cfi.py:9
EVTColContainer
container with all the objects needed
Definition: EVTColContainer.cc:46
edm::Event
Definition: Event.h:73
HLTHiggsSubAnalysis::_recTrackSelector
StringCutObjectSelector< reco::Track > * _recTrackSelector
Definition: HLTHiggsSubAnalysis.h:162
HLTHiggsSubAnalysis::_parametersEta
std::vector< double > _parametersEta
Some kinematical parameters.
Definition: HLTHiggsSubAnalysis.h:136
edm::ConsumesCollector
Definition: ConsumesCollector.h:45
HLTHiggsSubAnalysis::beginJob
void beginJob()
Definition: HLTHiggsSubAnalysis.cc:191
HLTHiggsSubAnalysis::insertcandidates
void insertcandidates(const unsigned int &objtype, const EVTColContainer *col, std::vector< MatchStruct > *matches)
Definition: HLTHiggsSubAnalysis.cc:1145
HLTHiggsSubAnalysis::_recMuonSelector
StringCutObjectSelector< reco::Muon > * _recMuonSelector
Definition: HLTHiggsSubAnalysis.h:155
muonDTDigis_cfi.pset
pset
Definition: muonDTDigis_cfi.py:27
dqm::implementation::IBooker::book1D
MonitorElement * book1D(TString const &name, TString const &title, int const nchX, double const lowX, double const highX, FUNC onbooking=NOOP())
Definition: DQMStore.h:98
HLTHiggsSubAnalysis::_hltPathsToCheck
std::vector< std::string > _hltPathsToCheck
the hlt paths with regular expressions
Definition: HLTHiggsSubAnalysis.h:111
HLTHiggsSubAnalysis::_parametersHt
std::vector< double > _parametersHt
Definition: HLTHiggsSubAnalysis.h:139
HLTHiggsSubAnalysis::_analysisname
std::string _analysisname
Definition: HLTHiggsSubAnalysis.h:97