CMS 3D CMS Logo

All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Pages
FourVectorHLTriggerOffline.cc
Go to the documentation of this file.
1 // $Id: FourVectorHLTriggerOffline.cc,v 1.37.2.1 2010/06/10 18:05:48 hegner Exp $
2 // See header file for information.
3 #include "TMath.h"
6 
7 #include <map>
8 #include <utility>
9 
10 
11 using namespace edm;
12 using namespace trigger;
13 
15  resetMe_(true), currentRun_(-99)
16 {
17  LogDebug("FourVectorHLTriggerOffline") << "constructor...." ;
18 
20  if ( ! dbe_ ) {
21  LogInfo("FourVectorHLTriggerOffline") << "unabel to get DQMStore service?";
22  }
23  if (iConfig.getUntrackedParameter < bool > ("DQMStore", false)) {
24  dbe_->setVerbose(0);
25  }
26 
27  dirname_ = iConfig.getUntrackedParameter("dirname",
28  std::string("HLT/FourVector/"));
29  //dirname_ += iConfig.getParameter<std::string>("@module_label");
30 
31  if (dbe_ != 0 ) {
33  }
34 
35  processname_ = iConfig.getParameter<std::string>("processname");
36 
37  // plotting paramters
38  ptMin_ = iConfig.getUntrackedParameter<double>("ptMin",0.);
39  ptMax_ = iConfig.getUntrackedParameter<double>("ptMax",1000.);
40  nBins_ = iConfig.getUntrackedParameter<unsigned int>("Nbins",20);
41 
42  plotAll_ = iConfig.getUntrackedParameter<bool>("plotAll", false);
43  // this is the list of paths to look at.
44  std::vector<edm::ParameterSet> paths =
45  iConfig.getParameter<std::vector<edm::ParameterSet> >("paths");
46  for(std::vector<edm::ParameterSet>::iterator
47  pathconf = paths.begin() ; pathconf != paths.end();
48  pathconf++) {
49  std::pair<std::string, std::string> custompathnamepair;
50  custompathnamepair.first =pathconf->getParameter<std::string>("pathname");
51  custompathnamepair.second = pathconf->getParameter<std::string>("denompathname");
52  custompathnamepairs_.push_back(custompathnamepair);
53  // customdenompathnames_.push_back(pathconf->getParameter<std::string>("denompathname"));
54  // custompathnames_.push_back(pathconf->getParameter<std::string>("pathname"));
55  }
56 
57  if (hltPaths_.size() > 0)
58  {
59  // book a histogram of scalers
60  scalersSelect = dbe_->book1D("selectedScalers","Selected Scalers", hltPaths_.size(), 0.0, (double)hltPaths_.size());
61  }
62 
63 
65  iConfig.getParameter<edm::InputTag>("triggerSummaryLabel");
67  iConfig.getParameter<edm::InputTag>("triggerResultsLabel");
68 
69  electronEtaMax_ = iConfig.getUntrackedParameter<double>("electronEtaMax",2.5);
70  electronEtMin_ = iConfig.getUntrackedParameter<double>("electronEtMin",3.0);
71  electronDRMatch_ =iConfig.getUntrackedParameter<double>("electronDRMatch",0.3);
72 
73  muonEtaMax_ = iConfig.getUntrackedParameter<double>("muonEtaMax",2.1);
74  muonEtMin_ = iConfig.getUntrackedParameter<double>("muonEtMin",3.0);
75  muonDRMatch_ =iConfig.getUntrackedParameter<double>("muonDRMatch",0.3);
76 
77  tauEtaMax_ = iConfig.getUntrackedParameter<double>("tauEtaMax",2.5);
78  tauEtMin_ = iConfig.getUntrackedParameter<double>("tauEtMin",3.0);
79  tauDRMatch_ =iConfig.getUntrackedParameter<double>("tauDRMatch",0.3);
80 
81  jetEtaMax_ = iConfig.getUntrackedParameter<double>("jetEtaMax",5.0);
82  jetEtMin_ = iConfig.getUntrackedParameter<double>("jetEtMin",10.0);
83  jetDRMatch_ =iConfig.getUntrackedParameter<double>("jetDRMatch",0.3);
84 
85  bjetEtaMax_ = iConfig.getUntrackedParameter<double>("bjetEtaMax",2.5);
86  bjetEtMin_ = iConfig.getUntrackedParameter<double>("bjetEtMin",10.0);
87  bjetDRMatch_ =iConfig.getUntrackedParameter<double>("bjetDRMatch",0.3);
88 
89  photonEtaMax_ = iConfig.getUntrackedParameter<double>("photonEtaMax",2.5);
90  photonEtMin_ = iConfig.getUntrackedParameter<double>("photonEtMin",3.0);
91  photonDRMatch_ =iConfig.getUntrackedParameter<double>("photonDRMatch",0.3);
92 
93  trackEtaMax_ = iConfig.getUntrackedParameter<double>("trackEtaMax",2.5);
94  trackEtMin_ = iConfig.getUntrackedParameter<double>("trackEtMin",3.0);
95  trackDRMatch_ =iConfig.getUntrackedParameter<double>("trackDRMatch",0.3);
96 
97  metMin_ = iConfig.getUntrackedParameter<double>("metMin",10.0);
98  htMin_ = iConfig.getUntrackedParameter<double>("htMin",10.0);
99  sumEtMin_ = iConfig.getUntrackedParameter<double>("sumEtMin",10.0);
100 
101 }
102 
103 
105 {
106 
107  // do anything here that needs to be done at desctruction time
108  // (e.g. close files, deallocate resources etc.)
109 
110 }
111 
112 
113 //
114 // member functions
115 //
116 
117 // ------------ method called to for each event ------------
118 void
120 {
121  using namespace edm;
122  using namespace trigger;
123  ++nev_;
124  LogDebug("FourVectorHLTriggerOffline")<< " analyze...." ;
125 
127  iEvent.getByLabel("genParticles", genParticles);
128  if(!genParticles.isValid()) {
129  edm::LogInfo("FourVectorHLTriggerOffline") << "genParticles not found, "
130  "skipping event";
131  return;
132  }
133 
135  iEvent.getByLabel("iterativeCone5GenJets",genJets);
136  if(!genJets.isValid()) {
137  edm::LogInfo("FourVectorHLTriggerOffline") << "genJets not found, "
138  "skipping event";
139  return;
140  }
141 
143  iEvent.getByLabel("genMetTrue",genMets);
144  if(!genMets.isValid()) {
145  edm::LogInfo("FourVectorHLTriggerOffline") << "genMets not found, "
146  "skipping event";
147  return;
148  }
149 
150  edm::Handle<TriggerResults> triggerResults;
151  iEvent.getByLabel(triggerResultsLabel_,triggerResults);
152  if(!triggerResults.isValid()) {
153  edm::InputTag triggerResultsLabelFU(triggerResultsLabel_.label(),triggerResultsLabel_.instance(), "FU");
154  iEvent.getByLabel(triggerResultsLabelFU,triggerResults);
155  if(!triggerResults.isValid()) {
156  edm::LogInfo("FourVectorHLTriggerOffline") << "TriggerResults not found, "
157  "skipping event";
158  return;
159  }
160  }
161  const edm::TriggerNames & triggerNames = iEvent.triggerNames(*triggerResults);
162  int npath = triggerResults->size();
163 
164  edm::Handle<TriggerEvent> triggerObj;
165  iEvent.getByLabel(triggerSummaryLabel_,triggerObj);
166  if(!triggerObj.isValid()) {
167  edm::InputTag triggerSummaryLabelFU(triggerSummaryLabel_.label(),triggerSummaryLabel_.instance(), "FU");
168  iEvent.getByLabel(triggerSummaryLabelFU,triggerObj);
169  if(!triggerObj.isValid()) {
170  edm::LogInfo("FourVectorHLTriggerOffline") << "TriggerEvent not found, "
171  "skipping event";
172  return;
173  }
174  }
175 
177  iEvent.getByLabel("muons",muonHandle);
178  if(!muonHandle.isValid()) {
179  edm::LogInfo("FourVectorHLTriggerOffline") << "muonHandle not found, ";
180  // "skipping event";
181  // return;
182  }
183 
185  iEvent.getByLabel("gsfElectrons",gsfElectrons);
186  if(!gsfElectrons.isValid()) {
187  edm::LogInfo("FourVectorHLTriggerOffline") << "gsfElectrons not found, ";
188  //"skipping event";
189  //return;
190  }
191 
193  iEvent.getByLabel("caloRecoTauProducer",tauHandle);
194  if(!tauHandle.isValid()) {
195  edm::LogInfo("FourVectorHLTriggerOffline") << "tauHandle not found, ";
196  //"skipping event";
197  //return;
198  }
199 
201  iEvent.getByLabel("iterativeCone5CaloJets",jetHandle);
202  if(!jetHandle.isValid()) {
203  edm::LogInfo("FourVectorHLTriggerOffline") << "jetHandle not found, ";
204  //"skipping event";
205  //return;
206  }
207 
208  // Get b tag information
210  iEvent.getByLabel("jetProbabilityBJetTags", bTagIPHandle);
211  if (!bTagIPHandle.isValid()) {
212  edm::LogInfo("FourVectorHLTriggerOffline") << "mTagIPHandle trackCountingHighEffJetTags not found, ";
213  //"skipping event";
214  //return;
215  }
216 
217  // Get b tag information
219  iEvent.getByLabel("softMuonBJetTags", bTagMuHandle);
220  if (!bTagMuHandle.isValid()) {
221  edm::LogInfo("FourVectorHLTriggerOffline") << "bTagMuHandle not found, ";
222  //"skipping event";
223  //return;
224  }
225 
227  iEvent.getByLabel("met",metHandle);
228  if(!metHandle.isValid()) {
229  edm::LogInfo("FourVectorHLTriggerOffline") << "metHandle not found, ";
230  //"skipping event";
231  //return;
232  }
233 
235  iEvent.getByLabel("photons",photonHandle);
236  if(!photonHandle.isValid()) {
237  edm::LogInfo("FourVectorHLTriggerOffline") << "photonHandle not found, ";
238  //"skipping event";
239  //return;
240  }
241 
243  iEvent.getByLabel("pixelTracks",trackHandle);
244  if(!trackHandle.isValid()) {
245  edm::LogInfo("FourVectorHLTriggerOffline") << "trackHandle not found, ";
246  //"skipping event";
247  //return;
248  }
249 
250  const trigger::TriggerObjectCollection & toc(triggerObj->getObjects());
251 
252  // electron Monitor
253  // ------------
255  eleMon.setReco(gsfElectrons);
256  eleMon.setMC(genParticles, 11, 1);
257  eleMon.setLimits(electronEtaMax_, electronEtMin_, electronDRMatch_);
258 
259  eleMon.pushTriggerType(TriggerElectron);
260  eleMon.pushTriggerType(TriggerL1NoIsoEG);
261  eleMon.pushTriggerType(TriggerL1IsoEG);
262 
263  eleMon.pushL1TriggerType(TriggerL1NoIsoEG);
264  eleMon.pushL1TriggerType(TriggerL1IsoEG);
265 
266  // muon Monitor
267  // ------------
269  muoMon.setReco(muonHandle);
270  muoMon.setMC(genParticles, 13, 1);
271  muoMon.setLimits(muonEtaMax_, muonEtMin_, muonDRMatch_);
272 
273  muoMon.pushTriggerType(TriggerMuon);
274  muoMon.pushTriggerType(TriggerL1Mu);
275 
276  muoMon.pushL1TriggerType(TriggerL1Mu);
277 
278  // tau Monitor
279  // ------------
281  tauMon.setReco(tauHandle);
282  tauMon.setMC(genParticles, 15, 3);
283  tauMon.setLimits(tauEtaMax_, tauEtMin_, tauDRMatch_);
284 
285  tauMon.pushTriggerType(TriggerTau);
286  tauMon.pushTriggerType(TriggerL1TauJet);
287 
288  tauMon.pushL1TriggerType(TriggerL1TauJet);
289  tauMon.pushL1TriggerType(TriggerL1CenJet);
290  tauMon.pushL1TriggerType(TriggerL1ForJet);
291 
292  // photon Monitor
293  // ------------
295  phoMon.setReco(photonHandle);
296  phoMon.setMC(genParticles, 22, 1);
297  phoMon.setLimits(photonEtaMax_, photonEtMin_, photonDRMatch_);
298 
299  phoMon.pushTriggerType(TriggerPhoton);
300 
301  phoMon.pushL1TriggerType(TriggerL1NoIsoEG);
302  phoMon.pushL1TriggerType(TriggerL1IsoEG);
303 
304  // jet Monitor - NOTICE: we use genJets for MC
305  // -------------------------------------------
307  jetMon.setReco(jetHandle);
308  jetMon.setGenJets(true, genJets);
309  jetMon.setLimits(jetEtaMax_, jetEtMin_, jetDRMatch_);
310 
311  jetMon.pushTriggerType(TriggerJet);
312  jetMon.pushTriggerType(TriggerL1CenJet);
313  jetMon.pushTriggerType(TriggerL1ForJet);
314 
315  jetMon.pushL1TriggerType(TriggerL1CenJet);
316  jetMon.pushL1TriggerType(TriggerL1ForJet);
317  jetMon.pushL1TriggerType(TriggerL1TauJet);
318 
319  // btag Monitor - NOTICE: we use genJets for MC
320  // -------------------------------------------
321  //objMon<reco::JetTagCollection> btagIPMon;
322  objMon<reco::CaloJetCollection> btagIPMon; // CaloJet will not be used, this is only place holder
323  //btagIPMon.setReco(jetHandle);
324  btagIPMon.setRecoB(bTagIPHandle);
325  btagIPMon.setMC(genParticles, 5, 3);
326  btagIPMon.setGenJets(true, genJets);
327  btagIPMon.setBJetsFlag(true);
328  btagIPMon.setLimits(bjetEtaMax_, bjetEtMin_, bjetDRMatch_);
329 
330  btagIPMon.pushTriggerType(TriggerBJet);
331  btagIPMon.pushTriggerType(TriggerJet);
332 
333  btagIPMon.pushL1TriggerType(TriggerL1CenJet);
334  btagIPMon.pushL1TriggerType(TriggerL1ForJet);
335  btagIPMon.pushL1TriggerType(TriggerL1TauJet);
336 
337  //objMon<reco::JetTagCollection> btagMuMon;
338  objMon<reco::CaloJetCollection> btagMuMon; // CaloJet will not be used, this is only place holder
339  //btagMuMon.setReco(jetHandle);
340  btagMuMon.setRecoB(bTagMuHandle);
341  btagMuMon.setMC(genParticles, 5, 3);
342  btagMuMon.setGenJets(true, genJets);
343  btagMuMon.setBJetsFlag(true);
344  btagMuMon.setLimits(bjetEtaMax_, bjetEtMin_, bjetDRMatch_);
345 
346  btagMuMon.pushTriggerType(TriggerBJet);
347  btagMuMon.pushTriggerType(TriggerJet);
348 
349  btagMuMon.pushL1TriggerType(TriggerL1CenJet);
350  btagMuMon.pushL1TriggerType(TriggerL1ForJet);
351  btagMuMon.pushL1TriggerType(TriggerL1TauJet);
352 
353 
354  objMon<reco::CaloJetCollection> btagMon; // Generic btagMon
355 
356  for(PathInfoCollection::iterator v = hltPaths_.begin();
357  v!= hltPaths_.end(); ++v )
358 {
359  //LogTrace("FourVectorHLTriggerOffline") << " path " << v->getPath() << std::endl;
360  if (v->getPath().find("BTagIP") != std::string::npos ) btagMon = btagIPMon;
361  else btagMon = btagMuMon;
362 
363 
364  // did we pass the denomPath?
365  bool denompassed = false;
366  for(int i = 0; i < npath; ++i) {
367  if (triggerNames.triggerName(i).find(v->getDenomPath()) != std::string::npos && triggerResults->accept(i))
368  {
369  denompassed = true;
370  break;
371  }
372  }
373 
374  if (denompassed)
375  {
376 
377  eleMon.clearSets();
378  muoMon.clearSets();
379  tauMon.clearSets();
380  phoMon.clearSets();
381  jetMon.clearSets();
382  btagMon.clearSets();
383 
384  int triggertype = 0;
385  triggertype = v->getObjectType();
386 
387  bool l1accept = false;
388  edm::InputTag l1testTag(v->getl1Path(),"",processname_);
389  const int l1index = triggerObj->filterIndex(l1testTag);
390  if ( l1index >= triggerObj->sizeFilters() ) {
391  edm::LogInfo("FourVectorHLTriggerOffline") << "no index "<< l1index << " of that name " << v->getl1Path() << "\t" << "\t" << l1testTag;
392  continue; // not in this event
393  }
394 
395  const trigger::Vids & idtype = triggerObj->filterIds(l1index);
396  const trigger::Keys & l1k = triggerObj->filterKeys(l1index);
397  l1accept = l1k.size() > 0;
398 
399 
400  eleMon.monitorDenominator(v, l1accept, idtype, l1k, toc);
401  muoMon.monitorDenominator(v, l1accept, idtype, l1k, toc);
402  tauMon.monitorDenominator(v, l1accept, idtype, l1k, toc);
403  phoMon.monitorDenominator(v, l1accept, idtype, l1k, toc);
404  jetMon.monitorDenominator(v, l1accept, idtype, l1k, toc);
405  btagMon.monitorDenominator(v, l1accept, idtype, l1k, toc);
406 
407  eleMon.fillL1Match(this);
408  muoMon.fillL1Match(this);
409  tauMon.fillL1Match(this);
410  phoMon.fillL1Match(this);
411  jetMon.fillL1Match(this);
412  btagMon.fillL1Match(this);
413 
414  // did we pass the numerator path?
415  bool numpassed = false;
416  for(int i = 0; i < npath; ++i) {
417 
418  if (triggerNames.triggerName(i) == v->getPath() && triggerResults->accept(i)) numpassed = true;
419 
420  }
421 
422  if (numpassed)
423  {
424 
425  if (!l1accept) {
426  edm::LogInfo("FourVectorHLTriggerOffline") << "l1 seed path not accepted for hlt path "<< v->getPath() << "\t" << v->getl1Path();
427  }
428 
429  // fill scaler histograms
430  edm::InputTag filterTag = v->getTag();
431 
432  // loop through indices and see if the filter is on the list of filters used by this path
433 
434  if (v->getLabel() == "dummy"){
435  const std::vector<std::string> filterLabels = hltConfig_.moduleLabels(v->getPath());
436  //loop over labels
437  for (std::vector<std::string>::const_iterator labelIter= filterLabels.begin(); labelIter!=filterLabels.end(); labelIter++)
438  {
439 
440  //std::cout << v->getPath() << "\t" << *labelIter << std::endl;
441  // last match wins...
442  edm::InputTag testTag(*labelIter,"",processname_);
443  int testindex = triggerObj->filterIndex(testTag);
444  if ( !(testindex >= triggerObj->sizeFilters()) ) {
445 
446  //std::cout << "found one! " << v->getPath() << "\t" << testTag.label() << std::endl;
447  filterTag = testTag; v->setLabel(*labelIter);}
448  }
449  }
450 
451  const int index = triggerObj->filterIndex(filterTag);
452  if ( index >= triggerObj->sizeFilters() ) {
453 
454  // std::cout << "WTF no index "<< index << " of that name "
455  // << filterTag << std::endl;
456  continue; // not in this event
457 
458  }
459 
460  //LogDebug("FourVectorHLTriggerOffline") << "filling ... " ;
461  const trigger::Keys & k = triggerObj->filterKeys(index);
462  // const trigger::Vids & idtype = triggerObj->filterIds(index);
463  // assume for now the first object type is the same as all objects in the collection
464  // std::cout << filterTag << "\t" << idtype.size() << "\t" << k.size() << std::endl;
465  // std::cout << "path " << v->getPath() << " trigger type "<<triggertype << std::endl;
466  //if (k.size() > 0) v->getNOnHisto()->Fill(k.size());
467 
468 
469  unsigned int NOn=0;
470 
471  for (trigger::Keys::const_iterator ki = k.begin(); ki !=k.end(); ++ki ) {
472 
473  eleMon.monitorOnline(idtype, l1k, ki, toc, NOn);
474  muoMon.monitorOnline(idtype, l1k, ki, toc, NOn);
475  tauMon.monitorOnline(idtype, l1k, ki, toc, NOn);
476  phoMon.monitorOnline(idtype, l1k, ki, toc, NOn);
477  jetMon.monitorOnline(idtype, l1k, ki, toc, NOn);
478  btagMon.monitorOnline(idtype, l1k, ki, toc, NOn);
479 
480  } //online object loop
481 
482  eleMon.fillOnlineMatch(this, l1k, toc);
483  muoMon.fillOnlineMatch(this, l1k, toc);
484  tauMon.fillOnlineMatch(this, l1k, toc);
485  phoMon.fillOnlineMatch(this, l1k, toc);
486  jetMon.fillOnlineMatch(this, l1k, toc);
487  btagMon.fillOnlineMatch(this, l1k, toc);
488 
489  eleMon.monitorOffline(this);
490  muoMon.monitorOffline(this);
491  tauMon.monitorOffline(this);
492  phoMon.monitorOffline(this);
493  jetMon.monitorOffline(this);
494  btagMon.monitorOffline(this);
495 
496  eleMon.fillOffMatch(this);
497  muoMon.fillOffMatch(this);
498  tauMon.fillOffMatch(this);
499  phoMon.fillOffMatch(this);
500  jetMon.fillOffMatch(this);
501  btagMon.fillOffMatch(this);
502 
503 
504  } //numpassed
505 
506 
507 
508  } //denompassed
509 
510  } //pathinfo loop
511 
512 }
513 
514 
515 
516 // -- method called once each job just before starting event loop --------
517 void
519 {
520  nev_ = 0;
521  DQMStore *dbe = 0;
522  dbe = Service<DQMStore>().operator->();
523 
524  if (dbe) {
526  dbe->rmdir(dirname_);
527  }
528 
529 
530  if (dbe) {
532  }
533 }
534 
535 // - method called once each job just after ending the event loop ------------
536 void
538 {
539  LogInfo("FourVectorHLTriggerOffline") << "analyzed " << nev_ << " events";
540  return;
541 }
542 
543 
544 // BeginRun
546 {
547  LogDebug("FourVectorHLTriggerOffline") << "beginRun, run " << run.id();
548 // HLT config does not change within runs!
549 
550  bool changed(false);
551  if (!hltConfig_.init(run, c, processname_, changed)) {
552  processname_ = "FU";
553  if (!hltConfig_.init(run, c, processname_, changed)){
554  LogDebug("FourVectorHLTriggerOffline") << "HLTConfigProvider failed to initialize.";
555  }
556  // check if trigger name in (new) config
557  // std::cout << "Available TriggerNames are: " << std::endl;
558  // hltConfig_.dump("Triggers");
559  }
560 
561 
562  if (1)
563  {
564  DQMStore *dbe = 0;
565  dbe = Service<DQMStore>().operator->();
566 
567  if (dbe) {
569  }
570 
571 
572  const unsigned int n(hltConfig_.size());
573  if (plotAll_){
574  for (unsigned int j=0; j!=n; ++j) {
575  std::string pathname = hltConfig_.triggerName(j);
576  std::string l1pathname = "dummy";
577  for (unsigned int i=0; i!=n; ++i) {
578  // std::cout << hltConfig_.triggerName(i) << std::endl;
579 
580  std::string denompathname = hltConfig_.triggerName(i);
581  int objectType = 0;
582  int denomobjectType = 0;
583  //parse pathname to guess object type
584  if (pathname.find("MET") != std::string::npos)
585  objectType = trigger::TriggerMET;
586  if (pathname.find("SumET") != std::string::npos)
587  objectType = trigger::TriggerTET;
588  if (pathname.find("HT") != std::string::npos)
589  objectType = trigger::TriggerTET;
590  if (pathname.find("Jet") != std::string::npos)
591  objectType = trigger::TriggerJet;
592  if (pathname.find("Mu") != std::string::npos)
593  objectType = trigger::TriggerMuon;
594  if (pathname.find("Ele") != std::string::npos)
595  objectType = trigger::TriggerElectron;
596  if (pathname.find("Photon") != std::string::npos)
597  objectType = trigger::TriggerPhoton;
598  if (pathname.find("Tau") != std::string::npos)
599  objectType = trigger::TriggerTau;
600  if (pathname.find("IsoTrack") != std::string::npos)
601  objectType = trigger::TriggerTrack;
602  if (pathname.find("BTag") != std::string::npos)
603  objectType = trigger::TriggerBJet;
604 
605  //parse denompathname to guess denomobject type
606  if (denompathname.find("MET") != std::string::npos)
607  denomobjectType = trigger::TriggerMET;
608  if (denompathname.find("SumET") != std::string::npos)
609  denomobjectType = trigger::TriggerTET;
610  if (denompathname.find("HT") != std::string::npos)
611  denomobjectType = trigger::TriggerTET;
612  if (denompathname.find("Jet") != std::string::npos)
613  denomobjectType = trigger::TriggerJet;
614  if (denompathname.find("Mu") != std::string::npos)
615  denomobjectType = trigger::TriggerMuon;
616  if (denompathname.find("Ele") != std::string::npos)
617  denomobjectType = trigger::TriggerElectron;
618  if (denompathname.find("Photon") != std::string::npos)
619  denomobjectType = trigger::TriggerPhoton;
620  if (denompathname.find("Tau") != std::string::npos)
621  denomobjectType = trigger::TriggerTau;
622  if (denompathname.find("IsoTrack") != std::string::npos)
623  denomobjectType = trigger::TriggerTrack;
624  if (denompathname.find("BTag") != std::string::npos)
625  denomobjectType = trigger::TriggerBJet;
626 
627  // find L1 condition for numpath with numpath objecttype
628 
629  // find PSet for L1 global seed for numpath,
630  // list module labels for numpath
631  std::vector<std::string> numpathmodules = hltConfig_.moduleLabels(pathname);
632 
633  for(std::vector<std::string>::iterator numpathmodule = numpathmodules.begin();
634  numpathmodule!= numpathmodules.end(); ++numpathmodule ) {
635  // std::cout << pathname << "\t" << *numpathmodule << "\t" << hltConfig_.moduleType(*numpathmodule) << std::endl;
636  if (hltConfig_.moduleType(*numpathmodule) == "HLTLevel1GTSeed")
637  {
638  edm::ParameterSet l1GTPSet = hltConfig_.modulePSet(*numpathmodule);
639  // std::cout << l1GTPSet.getParameter<std::string>("L1SeedsLogicalExpression") << std::endl;
640  // l1pathname = l1GTPSet.getParameter<std::string>("L1SeedsLogicalExpression");
641  l1pathname = *numpathmodule;
642  break;
643  }
644  }
645 
646 
647 
648  std::string filtername("dummy");
649  float ptMin = 0.0;
650  float ptMax = 100.0;
651  if (plotAll_ && denomobjectType == objectType && objectType != 0)
652  hltPaths_.push_back(PathInfo(denompathname, pathname, l1pathname, filtername, processname_, objectType, ptMin, ptMax));
653 
654  }
655  }
656 
657  }
658  else
659  {
660  // plot all diagonal combinations plus any other specified pairs
661  for (unsigned int i=0; i!=n; ++i) {
662  std::string denompathname = "";
663  std::string pathname = hltConfig_.triggerName(i);
664  std::string l1pathname = "dummy";
665  int objectType = 0;
666  int denomobjectType = 0;
667  //parse pathname to guess object type
668  if (pathname.find("MET") != std::string::npos)
669  objectType = trigger::TriggerMET;
670  if (pathname.find("SumET") != std::string::npos)
671  objectType = trigger::TriggerTET;
672  if (pathname.find("HT") != std::string::npos)
673  objectType = trigger::TriggerTET;
674  if (pathname.find("Jet") != std::string::npos)
675  objectType = trigger::TriggerJet;
676  if (pathname.find("Mu") != std::string::npos)
677  objectType = trigger::TriggerMuon;
678  if (pathname.find("Ele") != std::string::npos)
679  objectType = trigger::TriggerElectron;
680  if (pathname.find("Photon") != std::string::npos)
681  objectType = trigger::TriggerPhoton;
682  if (pathname.find("Tau") != std::string::npos)
683  objectType = trigger::TriggerTau;
684  if (pathname.find("IsoTrack") != std::string::npos)
685  objectType = trigger::TriggerTrack;
686  if (pathname.find("BTag") != std::string::npos)
687  objectType = trigger::TriggerBJet;
688 
689  //parse denompathname to guess denomobject type
690  if (denompathname.find("MET") != std::string::npos)
691  denomobjectType = trigger::TriggerMET;
692  if (denompathname.find("SumET") != std::string::npos)
693  denomobjectType = trigger::TriggerTET;
694  if (denompathname.find("HT") != std::string::npos)
695  denomobjectType = trigger::TriggerTET;
696  if (denompathname.find("Jet") != std::string::npos)
697  denomobjectType = trigger::TriggerJet;
698  if (denompathname.find("Mu") != std::string::npos)
699  denomobjectType = trigger::TriggerMuon;
700  if (denompathname.find("Ele") != std::string::npos)
701  denomobjectType = trigger::TriggerElectron;
702  if (denompathname.find("Photon") != std::string::npos)
703  denomobjectType = trigger::TriggerPhoton;
704  if (denompathname.find("Tau") != std::string::npos)
705  denomobjectType = trigger::TriggerTau;
706  if (denompathname.find("IsoTrack") != std::string::npos)
707  denomobjectType = trigger::TriggerTrack;
708  if (denompathname.find("BTag") != std::string::npos)
709  denomobjectType = trigger::TriggerBJet;
710  // find L1 condition for numpath with numpath objecttype
711 
712  // find PSet for L1 global seed for numpath,
713  // list module labels for numpath
714  std::vector<std::string> numpathmodules = hltConfig_.moduleLabels(pathname);
715 
716  for(std::vector<std::string>::iterator numpathmodule = numpathmodules.begin();
717  numpathmodule!= numpathmodules.end(); ++numpathmodule ) {
718  // std::cout << pathname << "\t" << *numpathmodule << "\t" << hltConfig_.moduleType(*numpathmodule) << std::endl;
719  if (hltConfig_.moduleType(*numpathmodule) == "HLTLevel1GTSeed")
720  {
721  edm::ParameterSet l1GTPSet = hltConfig_.modulePSet(*numpathmodule);
722  // std::cout << l1GTPSet.getParameter<std::string>("L1SeedsLogicalExpression") << std::endl;
723  //l1pathname = l1GTPSet.getParameter<std::string>("L1SeedsLogicalExpression");
724  l1pathname = *numpathmodule;
725  break;
726  }
727  }
728 
729 
730 
731 
732 
733  std::string filtername("dummy");
734  float ptMin = 0.0;
735  float ptMax = 100.0;
736  if (objectType == trigger::TriggerPhoton) ptMax = 100.0;
737  if (objectType == trigger::TriggerElectron) ptMax = 100.0;
738  if (objectType == trigger::TriggerMuon) ptMax = 100.0;
739  if (objectType == trigger::TriggerTau) ptMax = 100.0;
740  if (objectType == trigger::TriggerJet) ptMax = 300.0;
741  if (objectType == trigger::TriggerBJet) ptMax = 300.0;
742  if (objectType == trigger::TriggerMET) ptMax = 300.0;
743  if (objectType == trigger::TriggerTET) ptMax = 300.0;
744  if (objectType == trigger::TriggerTrack) ptMax = 100.0;
745 
746  if (objectType != 0){
747  hltPaths_.push_back(PathInfo(denompathname, pathname, l1pathname, filtername, processname_, objectType, ptMin, ptMax));
748  //create folder for pathname
749  }
750  }
751  // now loop over denom/num path pairs specified in cfg,
752  // recording the off-diagonal ones
753  for (std::vector<std::pair<std::string, std::string> >::iterator custompathnamepair = custompathnamepairs_.begin(); custompathnamepair != custompathnamepairs_.end(); ++custompathnamepair)
754  {
755  if (custompathnamepair->first != custompathnamepair->second)
756  {
757 
758  std::string denompathname = custompathnamepair->second;
759  std::string pathname = custompathnamepair->first;
760 
761  // check that these exist
762  bool foundfirst = false;
763  bool foundsecond = false;
764  for (unsigned int i=0; i!=n; ++i) {
765  if (hltConfig_.triggerName(i) == denompathname) foundsecond = true;
766  if (hltConfig_.triggerName(i) == pathname) foundfirst = true;
767  }
768  if (!foundfirst)
769  {
770  edm::LogInfo("FourVectorHLTriggerOffline") << "pathname not found, ignoring " << pathname;
771  continue;
772  }
773  if (!foundsecond)
774  {
775  edm::LogInfo("FourVectorHLTriggerOffline") << "denompathname not found, ignoring " << pathname;
776  continue;
777  }
778 
779  //std::cout << pathname << "\t" << denompathname << std::endl;
780  std::string l1pathname = "dummy";
781  int objectType = 0;
782  //int denomobjectType = 0;
783  //parse pathname to guess object type
784  if (pathname.find("MET") != std::string::npos)
785  objectType = trigger::TriggerMET;
786  if (pathname.find("SumET") != std::string::npos)
787  objectType = trigger::TriggerTET;
788  if (pathname.find("HT") != std::string::npos)
789  objectType = trigger::TriggerTET;
790  if (pathname.find("Jet") != std::string::npos)
791  objectType = trigger::TriggerJet;
792  if (pathname.find("Mu") != std::string::npos)
793  objectType = trigger::TriggerMuon;
794  if (pathname.find("Ele") != std::string::npos)
795  objectType = trigger::TriggerElectron;
796  if (pathname.find("Photon") != std::string::npos)
797  objectType = trigger::TriggerPhoton;
798  if (pathname.find("Tau") != std::string::npos)
799  objectType = trigger::TriggerTau;
800  if (pathname.find("IsoTrack") != std::string::npos)
801  objectType = trigger::TriggerTrack;
802  if (pathname.find("BTag") != std::string::npos)
803  objectType = trigger::TriggerBJet;
804  // find L1 condition for numpath with numpath objecttype
805 
806  // find PSet for L1 global seed for numpath,
807  // list module labels for numpath
808 
809  std::vector<std::string> numpathmodules = hltConfig_.moduleLabels(pathname);
810 
811  for(std::vector<std::string>::iterator numpathmodule = numpathmodules.begin();
812  numpathmodule!= numpathmodules.end(); ++numpathmodule ) {
813  // std::cout << pathname << "\t" << *numpathmodule << "\t" << hltConfig_.moduleType(*numpathmodule) << std::endl;
814  if (hltConfig_.moduleType(*numpathmodule) == "HLTLevel1GTSeed")
815  {
816  edm::ParameterSet l1GTPSet = hltConfig_.modulePSet(*numpathmodule);
817  // std::cout << l1GTPSet.getParameter<std::string>("L1SeedsLogicalExpression") << std::endl;
818  // l1pathname = l1GTPSet.getParameter<std::string>("L1SeedsLogicalExpression");
819  l1pathname = *numpathmodule;
820  //std::cout << *numpathmodule << std::endl;
821  break;
822  }
823  }
824 
825 
826 
827 
828 
829  std::string filtername("dummy");
830  float ptMin = 0.0;
831  float ptMax = 100.0;
832  if (objectType == trigger::TriggerPhoton) ptMax = 100.0;
833  if (objectType == trigger::TriggerElectron) ptMax = 100.0;
834  if (objectType == trigger::TriggerMuon) ptMax = 100.0;
835  if (objectType == trigger::TriggerTau) ptMax = 100.0;
836  if (objectType == trigger::TriggerJet) ptMax = 300.0;
837  if (objectType == trigger::TriggerBJet) ptMax = 300.0;
838  if (objectType == trigger::TriggerMET) ptMax = 300.0;
839  if (objectType == trigger::TriggerTET) ptMax = 300.0;
840  if (objectType == trigger::TriggerTrack) ptMax = 100.0;
841 
842  if (objectType != 0)
843  hltPaths_.push_back(PathInfo(denompathname, pathname, l1pathname, filtername, processname_, objectType, ptMin, ptMax));
844 
845  }
846  }
847 
848  }
849 
850 
851 
852  // now set up all of the histos for each path
853  for(PathInfoCollection::iterator v = hltPaths_.begin();
854  v!= hltPaths_.end(); ++v ) {
855  MonitorElement *NOn, *onEtOn, *onEtavsonPhiOn=0;
856  MonitorElement *NMc, *mcEtMc, *mcEtavsmcPhiMc=0;
857  MonitorElement *NOff, *offEtOff, *offEtavsoffPhiOff=0;
858  MonitorElement *NL1, *l1EtL1, *l1Etavsl1PhiL1=0;
859  MonitorElement *NL1On, *l1EtL1On, *l1Etavsl1PhiL1On=0;
860  MonitorElement *NL1Off, *offEtL1Off, *offEtavsoffPhiL1Off=0;
861  MonitorElement *NOnOff, *offEtOnOff, *offEtavsoffPhiOnOff=0;
862  MonitorElement *NL1Mc, *mcEtL1Mc, *mcEtavsmcPhiL1Mc=0;
863  MonitorElement *NOffMc, *mcEtOffMc, *mcEtavsmcPhiOffMc=0;
864  MonitorElement *NOnMc, *mcEtOnMc, *mcEtavsmcPhiOnMc=0;
865  MonitorElement *NL1OnUM, *l1EtL1OnUM, *l1Etavsl1PhiL1OnUM=0;
866  MonitorElement *NL1OffUM, *offEtL1OffUM, *offEtavsoffPhiL1OffUM=0;
867  MonitorElement *NOnOffUM, *offEtOnOffUM, *offEtavsoffPhiOnOffUM=0;
868  MonitorElement *NL1McUM, *mcEtL1McUM, *mcEtavsmcPhiL1McUM=0;
869  MonitorElement *NOffMcUM, *mcEtOffMcUM, *mcEtavsmcPhiOffMcUM=0;
870  MonitorElement *NOnMcUM, *mcEtOnMcUM, *mcEtavsmcPhiOnMcUM=0;
871  MonitorElement *mcDRL1Mc, *mcDROnMc, *mcDROffMc,
872  *offDRL1Off, *offDROnOff, *l1DRL1On=0;
873  std::string labelname("dummy");
874  labelname = v->getPath() + "_wrt_" + v->getDenomPath();
875  std::string histoname(labelname+"_NOn");
876  std::string title(labelname+" N online");
877 
878 
879 
880  double histEtaMax = 2.5;
881  if (v->getObjectType() == trigger::TriggerMuon || v->getObjectType() == trigger::TriggerL1Mu)
882  {
883  histEtaMax = muonEtaMax_;
884  }
885  else if (v->getObjectType() == trigger::TriggerElectron || v->getObjectType() == trigger::TriggerL1NoIsoEG || v->getObjectType() == trigger::TriggerL1IsoEG )
886  {
887  histEtaMax = electronEtaMax_;
888  }
889  else if (v->getObjectType() == trigger::TriggerTau || v->getObjectType() == trigger::TriggerL1TauJet )
890  {
891  histEtaMax = tauEtaMax_;
892  }
893  else if (v->getObjectType() == trigger::TriggerJet || v->getObjectType() == trigger::TriggerL1CenJet || v->getObjectType() == trigger::TriggerL1ForJet )
894  {
895  histEtaMax = jetEtaMax_;
896  }
897  else if (v->getObjectType() == trigger::TriggerBJet)
898  {
899  histEtaMax = bjetEtaMax_;
900  }
901  else if (v->getObjectType() == trigger::TriggerMET || v->getObjectType() == trigger::TriggerL1ETM )
902  {
903  histEtaMax = 5.0;
904  }
905  else if (v->getObjectType() == trigger::TriggerPhoton)
906  {
907  histEtaMax = photonEtaMax_;
908  }
909  else if (v->getObjectType() == trigger::TriggerTrack)
910  {
911  histEtaMax = trackEtaMax_;
912  }
913 
914  TString pathfolder = dirname_ + TString("/") + v->getPath();
915  dbe_->setCurrentFolder(pathfolder.Data());
916 
917  NOn = dbe->book1D(histoname.c_str(),
918  title.c_str(),10,
919  0.5,
920  10.5);
921 
922  histoname = labelname+"_NMc";
923  title = labelname+" N Mc";
924  NMc = dbe->book1D(histoname.c_str(),
925  title.c_str(),10,
926  0.5,
927  10.5);
928 
929  histoname = labelname+"_NOff";
930  title = labelname+" N Off";
931  NOff = dbe->book1D(histoname.c_str(),
932  title.c_str(),10,
933  0.5,
934  10.5);
935 
936  histoname = labelname+"_NL1";
937  title = labelname+" N L1";
938  NL1 = dbe->book1D(histoname.c_str(),
939  title.c_str(),10,
940  0.5,
941  10.5);
942 
943  histoname = labelname+"_NL1On";
944  title = labelname+" N L1On";
945  NL1On = dbe->book1D(histoname.c_str(),
946  title.c_str(),10,
947  0.5,
948  10.5);
949 
950  histoname = labelname+"_NL1Off";
951  title = labelname+" N L1Off";
952  NL1Off = dbe->book1D(histoname.c_str(),
953  title.c_str(),10,
954  0.5,
955  10.5);
956 
957  histoname = labelname+"_NOnOff";
958  title = labelname+" N OnOff";
959  NOnOff = dbe->book1D(histoname.c_str(),
960  title.c_str(),10,
961  0.5,
962  10.5);
963 
964  histoname = labelname+"_NL1Mc";
965  title = labelname+" N L1Mc";
966  NL1Mc = dbe->book1D(histoname.c_str(),
967  title.c_str(),10,
968  0.5,
969  10.5);
970 
971  histoname = labelname+"_NOffMc";
972  title = labelname+" N OffMc";
973  NOffMc = dbe->book1D(histoname.c_str(),
974  title.c_str(),10,
975  0.5,
976  10.5);
977 
978  histoname = labelname+"_NOnMc";
979  title = labelname+" N OnMc";
980  NOnMc = dbe->book1D(histoname.c_str(),
981  title.c_str(),10,
982  0.5,
983  10.5);
984 
985  histoname = labelname+"_NL1OnUM";
986  title = labelname+" N L1OnUM";
987  NL1OnUM = dbe->book1D(histoname.c_str(),
988  title.c_str(),10,
989  0.5,
990  10.5);
991 
992  histoname = labelname+"_NL1OffUM";
993  title = labelname+" N L1OffUM";
994  NL1OffUM = dbe->book1D(histoname.c_str(),
995  title.c_str(),10,
996  0.5,
997  10.5);
998 
999  histoname = labelname+"_NOnOffUM";
1000  title = labelname+" N OnOffUM";
1001  NOnOffUM = dbe->book1D(histoname.c_str(),
1002  title.c_str(),10,
1003  0.5,
1004  10.5);
1005 
1006  histoname = labelname+"_NL1McUM";
1007  title = labelname+" N L1McUM";
1008  NL1McUM = dbe->book1D(histoname.c_str(),
1009  title.c_str(),10,
1010  0.5,
1011  10.5);
1012 
1013  histoname = labelname+"_NOffMcUM";
1014  title = labelname+" N OffMcUM";
1015  NOffMcUM = dbe->book1D(histoname.c_str(),
1016  title.c_str(),10,
1017  0.5,
1018  10.5);
1019 
1020  histoname = labelname+"_NOnMcUM";
1021  title = labelname+" N OnMcUM";
1022  NOnMcUM = dbe->book1D(histoname.c_str(),
1023  title.c_str(),10,
1024  0.5,
1025  10.5);
1026 
1027  histoname = labelname+"_mcEtMc";
1028  title = labelname+" mcE_t Mc";
1029  mcEtMc = dbe->book1D(histoname.c_str(),
1030  title.c_str(),nBins_,
1031  v->getPtMin(),
1032  v->getPtMax());
1033 
1034  histoname = labelname+"_onEtOn";
1035  title = labelname+" onE_t online";
1036  onEtOn = dbe->book1D(histoname.c_str(),
1037  title.c_str(),nBins_,
1038  v->getPtMin(),
1039  v->getPtMax());
1040 
1041  histoname = labelname+"_offEtOff";
1042  title = labelname+" offE_t offline";
1043  offEtOff = dbe->book1D(histoname.c_str(),
1044  title.c_str(),nBins_,
1045  v->getPtMin(),
1046  v->getPtMax());
1047 
1048  histoname = labelname+"_l1EtL1";
1049  title = labelname+" l1E_t L1";
1050  l1EtL1 = dbe->book1D(histoname.c_str(),
1051  title.c_str(),nBins_,
1052  v->getPtMin(),
1053  v->getPtMax());
1054 
1055  int nBins2D = 10;
1056 
1057  histoname = labelname+"_mcEtamcPhiMc";
1058  title = labelname+" mc#eta vs mc#phi Mc";
1059  mcEtavsmcPhiMc = dbe->book2D(histoname.c_str(),
1060  title.c_str(),
1061  nBins2D,-histEtaMax,histEtaMax,
1062  nBins2D,-TMath::Pi(), TMath::Pi());
1063 
1064  histoname = labelname+"_onEtaonPhiOn";
1065  title = labelname+" on#eta vs on#phi online";
1066  onEtavsonPhiOn = dbe->book2D(histoname.c_str(),
1067  title.c_str(),
1068  nBins2D,-histEtaMax,histEtaMax,
1069  nBins2D,-TMath::Pi(), TMath::Pi());
1070 
1071  histoname = labelname+"_offEtaoffPhiOff";
1072  title = labelname+" off#eta vs off#phi offline";
1073  offEtavsoffPhiOff = dbe->book2D(histoname.c_str(),
1074  title.c_str(),
1075  nBins2D,-histEtaMax,histEtaMax,
1076  nBins2D,-TMath::Pi(), TMath::Pi());
1077 
1078  histoname = labelname+"_l1Etal1PhiL1";
1079  title = labelname+" l1#eta vs l1#phi L1";
1080  l1Etavsl1PhiL1 = dbe->book2D(histoname.c_str(),
1081  title.c_str(),
1082  nBins2D,-histEtaMax,histEtaMax,
1083  nBins2D,-TMath::Pi(), TMath::Pi());
1084 
1085  histoname = labelname+"_l1EtL1On";
1086  title = labelname+" l1E_t L1+online";
1087  l1EtL1On = dbe->book1D(histoname.c_str(),
1088  title.c_str(),nBins_,
1089  v->getPtMin(),
1090  v->getPtMax());
1091 
1092  histoname = labelname+"_offEtL1Off";
1093  title = labelname+" offE_t L1+offline";
1094  offEtL1Off = dbe->book1D(histoname.c_str(),
1095  title.c_str(),nBins_,
1096  v->getPtMin(),
1097  v->getPtMax());
1098 
1099  histoname = labelname+"_offEtOnOff";
1100  title = labelname+" offE_t online+offline";
1101  offEtOnOff = dbe->book1D(histoname.c_str(),
1102  title.c_str(),nBins_,
1103  v->getPtMin(),
1104  v->getPtMax());
1105 
1106  histoname = labelname+"_mcEtL1Mc";
1107  title = labelname+" mcE_t L1+MC truth";
1108  mcEtL1Mc = dbe->book1D(histoname.c_str(),
1109  title.c_str(),nBins_,
1110  v->getPtMin(),
1111  v->getPtMax());
1112 
1113  histoname = labelname+"_mcEtOffMc";
1114  title = labelname+" mcE_t Off+MC truth";
1115  mcEtOffMc = dbe->book1D(histoname.c_str(),
1116  title.c_str(),nBins_,
1117  v->getPtMin(),
1118  v->getPtMax());
1119 
1120  histoname = labelname+"_mcEtOnMc";
1121  title = labelname+" mcE_t online+MC truth";
1122  mcEtOnMc = dbe->book1D(histoname.c_str(),
1123  title.c_str(),nBins_,
1124  v->getPtMin(),
1125  v->getPtMax());
1126 
1127  histoname = labelname+"_l1Etal1PhiL1On";
1128  title = labelname+" l1#eta vs l1#phi L1+online";
1129  l1Etavsl1PhiL1On = dbe->book2D(histoname.c_str(),
1130  title.c_str(),
1131  nBins2D,-histEtaMax,histEtaMax,
1132  nBins2D,-TMath::Pi(), TMath::Pi());
1133 
1134  histoname = labelname+"_offEtaoffPhiL1Off";
1135  title = labelname+" off#eta vs off#phi L1+offline";
1136  offEtavsoffPhiL1Off = dbe->book2D(histoname.c_str(),
1137  title.c_str(),
1138  nBins2D,-histEtaMax,histEtaMax,
1139  nBins2D,-TMath::Pi(), TMath::Pi());
1140 
1141  histoname = labelname+"_offEtaoffPhiOnOff";
1142  title = labelname+" off#eta vs off#phi online+offline";
1143  offEtavsoffPhiOnOff = dbe->book2D(histoname.c_str(),
1144  title.c_str(),
1145  nBins2D,-histEtaMax,histEtaMax,
1146  nBins2D,-TMath::Pi(), TMath::Pi());
1147 
1148  histoname = labelname+"_mcEtamcPhiL1Mc";
1149  title = labelname+" mc#eta vs mc#phi L1+MC truth";
1150  mcEtavsmcPhiL1Mc = dbe->book2D(histoname.c_str(),
1151  title.c_str(),
1152  nBins2D,-histEtaMax,histEtaMax,
1153  nBins2D,-TMath::Pi(), TMath::Pi());
1154 
1155  histoname = labelname+"_mcEtamcPhiOffMc";
1156  title = labelname+" mc#eta vs mc#phi Off+MC truth";
1157  mcEtavsmcPhiOffMc = dbe->book2D(histoname.c_str(),
1158  title.c_str(),
1159  nBins2D,-histEtaMax,histEtaMax,
1160  nBins2D,-TMath::Pi(), TMath::Pi());
1161 
1162 
1163  histoname = labelname+"_mcEtamcPhiOnMc";
1164  title = labelname+" mc#eta vs mc#phi online+MC truth";
1165  mcEtavsmcPhiOnMc = dbe->book2D(histoname.c_str(),
1166  title.c_str(),
1167  nBins2D,-histEtaMax,histEtaMax,
1168  nBins2D,-TMath::Pi(), TMath::Pi());
1169 
1170  histoname = labelname+"_l1EtL1OnUM";
1171  title = labelname+" l1E_t L1+onlineUM";
1172  l1EtL1OnUM = dbe->book1D(histoname.c_str(),
1173  title.c_str(),nBins_,
1174  v->getPtMin(),
1175  v->getPtMax());
1176 
1177  histoname = labelname+"_offEtL1OffUM";
1178  title = labelname+" offE_t L1+offlineUM";
1179  offEtL1OffUM = dbe->book1D(histoname.c_str(),
1180  title.c_str(),nBins_,
1181  v->getPtMin(),
1182  v->getPtMax());
1183 
1184  histoname = labelname+"_offEtOnOffUM";
1185  title = labelname+" offE_t online+offlineUM";
1186  offEtOnOffUM = dbe->book1D(histoname.c_str(),
1187  title.c_str(),nBins_,
1188  v->getPtMin(),
1189  v->getPtMax());
1190 
1191  histoname = labelname+"_mcEtL1McUM";
1192  title = labelname+" mcE_t L1+MC truthUM";
1193  mcEtL1McUM = dbe->book1D(histoname.c_str(),
1194  title.c_str(),nBins_,
1195  v->getPtMin(),
1196  v->getPtMax());
1197 
1198  histoname = labelname+"_mcEtOffMcUM";
1199  title = labelname+" mcE_t Off+MC truthUM";
1200  mcEtOffMcUM = dbe->book1D(histoname.c_str(),
1201  title.c_str(),nBins_,
1202  v->getPtMin(),
1203  v->getPtMax());
1204 
1205  histoname = labelname+"_mcEtOnMcUM";
1206  title = labelname+" mcE_t online+MC truthUM";
1207  mcEtOnMcUM = dbe->book1D(histoname.c_str(),
1208  title.c_str(),nBins_,
1209  v->getPtMin(),
1210  v->getPtMax());
1211 
1212  histoname = labelname+"_l1Etal1PhiL1OnUM";
1213  title = labelname+" l1#eta vs l1#phi L1+onlineUM";
1214  l1Etavsl1PhiL1OnUM = dbe->book2D(histoname.c_str(),
1215  title.c_str(),
1216  nBins2D,-histEtaMax,histEtaMax,
1217  nBins2D,-TMath::Pi(), TMath::Pi());
1218 
1219  histoname = labelname+"_offEtaoffPhiL1OffUM";
1220  title = labelname+" off#eta vs off#phi L1+offlineUM";
1221  offEtavsoffPhiL1OffUM = dbe->book2D(histoname.c_str(),
1222  title.c_str(),
1223  nBins2D,-histEtaMax,histEtaMax,
1224  nBins2D,-TMath::Pi(), TMath::Pi());
1225 
1226  histoname = labelname+"_offEtaoffPhiOnOffUM";
1227  title = labelname+" off#eta vs off#phi online+offlineUM";
1228  offEtavsoffPhiOnOffUM = dbe->book2D(histoname.c_str(),
1229  title.c_str(),
1230  nBins2D,-histEtaMax,histEtaMax,
1231  nBins2D,-TMath::Pi(), TMath::Pi());
1232 
1233  histoname = labelname+"_mcEtamcPhiL1McUM";
1234  title = labelname+" mc#eta vs mc#phi L1+MC truthUM";
1235  mcEtavsmcPhiL1McUM = dbe->book2D(histoname.c_str(),
1236  title.c_str(),
1237  nBins2D,-histEtaMax,histEtaMax,
1238  nBins2D,-TMath::Pi(), TMath::Pi());
1239 
1240  histoname = labelname+"_mcEtamcPhiOffMcUM";
1241  title = labelname+" mc#eta vs mc#phi Off+MC truthUM";
1242  mcEtavsmcPhiOffMcUM = dbe->book2D(histoname.c_str(),
1243  title.c_str(),
1244  nBins2D,-histEtaMax,histEtaMax,
1245  nBins2D,-TMath::Pi(), TMath::Pi());
1246 
1247  histoname = labelname+"_mcEtamcPhiOnMcUM";
1248  title = labelname+" mc#eta vs mc#phi online+MC truthUM";
1249  mcEtavsmcPhiOnMcUM = dbe->book2D(histoname.c_str(),
1250  title.c_str(),
1251  nBins2D,-histEtaMax,histEtaMax,
1252  nBins2D,-TMath::Pi(), TMath::Pi());
1253 
1254  histoname = labelname+"_l1DRL1On";
1255  title = labelname+" l1DR L1+online";
1256  l1DRL1On = dbe->book1D(histoname.c_str(),
1257  title.c_str(),nBins_, 0, 1.);
1258 
1259  histoname = labelname+"_offDRL1Off";
1260  title = labelname+" offDR L1+offline";
1261  offDRL1Off = dbe->book1D(histoname.c_str(),
1262  title.c_str(),nBins_, 0, 1.);
1263 
1264  histoname = labelname+"_offDROnOff";
1265  title = labelname+" offDR online+offline";
1266  offDROnOff = dbe->book1D(histoname.c_str(),
1267  title.c_str(),nBins_, 0, 1.);
1268 
1269  histoname = labelname+"_mcDRL1Mc";
1270  title = labelname+" mcDR L1+MC truth";
1271  mcDRL1Mc = dbe->book1D(histoname.c_str(),
1272  title.c_str(),nBins_, 0, 1.);
1273 
1274  histoname = labelname+"_mcDROffMc";
1275  title = labelname+" mcDR Off+MC truth";
1276  mcDROffMc = dbe->book1D(histoname.c_str(),
1277  title.c_str(),nBins_, 0, 1.);
1278 
1279  histoname = labelname+"_mcDROnMc";
1280  title = labelname+" mcDR online+MC truth";
1281  mcDROnMc = dbe->book1D(histoname.c_str(),
1282  title.c_str(),nBins_, 0, 1.);
1283 
1284 
1285  v->setHistos( NMc, mcEtMc, mcEtavsmcPhiMc, NOn, onEtOn, onEtavsonPhiOn, NOff, offEtOff, offEtavsoffPhiOff, NL1, l1EtL1, l1Etavsl1PhiL1, NL1On, l1EtL1On, l1Etavsl1PhiL1On, NL1Off, offEtL1Off, offEtavsoffPhiL1Off, NOnOff, offEtOnOff, offEtavsoffPhiOnOff, NL1Mc, mcEtL1Mc, mcEtavsmcPhiL1Mc, NOffMc, mcEtOffMc, mcEtavsmcPhiOffMc, NOnMc, mcEtOnMc, mcEtavsmcPhiOnMc, NL1OnUM, l1EtL1OnUM, l1Etavsl1PhiL1OnUM, NL1OffUM, offEtL1OffUM, offEtavsoffPhiL1OffUM, NOnOffUM, offEtOnOffUM, offEtavsoffPhiOnOffUM, NL1McUM, mcEtL1McUM, mcEtavsmcPhiL1McUM, NOffMcUM, mcEtOffMcUM, mcEtavsmcPhiOffMcUM, NOnMcUM, mcEtOnMcUM, mcEtavsmcPhiOnMcUM, mcDRL1Mc, mcDROnMc, mcDROffMc, offDRL1Off, offDROnOff, l1DRL1On
1286 );
1287 
1288 
1289  }
1290  }
1291  return;
1292 
1293 
1294 
1295 }
1296 
1299 {
1300  LogDebug("FourVectorHLTriggerOffline") << "endRun, run " << run.id();
1301 }
1302 
1305 {
1306 
1307  LogDebug("FourVectorHLTriggerOffline") << "cleanDRMatchSet(mmset& tempSet) " << std::endl;
1308  LogDebug("FourVectorHLTriggerOffline") << "size of the set (before CLEANED)= " << tempSet.size() << " maps." << std::endl;
1309 
1310  if(tempSet.size() < 2) return;
1311 
1312  bool cleanedOneMap = false;
1313 
1314  // cleaning needed if the set has at least two maps
1315 
1316  while(! cleanedOneMap && tempSet.size() > 1) {
1317 
1318  cleanedOneMap=false;
1319 
1320  //LogTrace("FourVectorHLTriggerOffline") << "cleaning: size of the set = " << tempSet.size() << " maps." << std::endl;
1321 
1322  int imap = 0;
1323  for ( mmset::iterator setIter_i = tempSet.begin( ); setIter_i != tempSet.end( ); setIter_i++ )
1324  {
1325 
1326  fimmap tempMap_j = *setIter_i;
1327 
1328  //LogTrace("FourVectorHLTriggerOffline") << " map " << imap << std::endl;
1329  //LogTrace("FourVectorHLTriggerOffline") << " --------" << std::endl;
1330  for (fimmap::iterator it = tempMap_j.begin(); it != tempMap_j.end(); ++it)
1331  {
1332 
1333  //LogTrace("FourVectorHLTriggerOffline") << " " << (*it).first << " : " << (*it).second << std::endl;
1334 
1335  }
1336 
1337  imap++;
1338 
1339  }
1340 
1341  // loop i
1342  for ( mmset::iterator setIter_i = tempSet.begin( ); setIter_i != tempSet.end( ); setIter_i++ )
1343  {
1344 
1345  fimmap tempMap_i = *setIter_i;
1346  fimmap::iterator it = tempMap_i.begin();
1347  int topValue = (*it).second;
1348  //LogTrace("FourVectorHLTriggerOffline") << " topValue = " << topValue << std::endl;
1349 
1350 
1351  mmset::iterator tempIter_i = setIter_i;
1352 
1353  // from all the other maps, clean entries that have mapped value "topValue"
1354  // loop j
1355  for ( mmset::iterator setIter_j = ++tempIter_i; setIter_j != tempSet.end( ); setIter_j++ )
1356  {
1357 
1358  fimmap tempMap_j = *setIter_j;
1359  //LogTrace("FourVectorHLTriggerOffline") << " size of the map = " << tempMap_j.size() << std::endl;
1360 
1361  for (fimmap::iterator it = tempMap_j.begin(); it != tempMap_j.end(); ++it)
1362  {
1363 
1364  if(topValue == (*it).second)
1365  {
1366 
1367  //LogTrace("FourVectorHLTriggerOffline") << " Ridding map of a doubly-matched object." << std::endl;
1368  tempMap_j.erase(it);
1369 
1370  cleanedOneMap = true;
1371 
1372  }
1373 
1374  } //end for
1375 
1376  if(cleanedOneMap)
1377  {
1378 
1379  //remove the old map from the set
1380  tempSet.erase(setIter_j);
1381 
1382  // insert in the set the new map if it is not an empty map
1383  if(! tempMap_j.empty()) tempSet.insert(tempMap_j);
1384 
1385  break; // break from loop j
1386 
1387  } // end if
1388 
1389  }// end loop j
1390 
1391  if(cleanedOneMap) break; // break from loop i
1392 
1393  } // end loop i
1394 
1395  if(cleanedOneMap)
1396  {
1397 
1398  // continue cleaning (in while loop)
1399  // but reset flag first
1400  cleanedOneMap=false;
1401  continue;
1402 
1403  }
1404  else {
1405 
1406  // finished cleaing (break from while loop)
1407  break;
1408 
1409  }
1410 
1411 } // end while
1412 
1413  //LogTrace("FourVectorHLTriggerOffline") << "cleaned: size of the set = " << tempSet.size() << " maps." << std::endl;
1414  int jmap = 0;
1415 
1416  for ( mmset::iterator setIter_i = tempSet.begin( ); setIter_i != tempSet.end( ); setIter_i++ )
1417  {
1418 
1419  fimmap tempMap_j = *setIter_i;
1420 
1421  //LogTrace("FourVectorHLTriggerOffline") << " map " << jmap << std::endl;
1422  //LogTrace("FourVectorHLTriggerOffline") << " --------" << std::endl;
1423 
1424  for (fimmap::iterator it = tempMap_j.begin(); it != tempMap_j.end(); ++it)
1425  {
1426 
1427  //LogTrace("FourVectorHLTriggerOffline") << " " << (*it).first << " : " << (*it).second << std::endl;
1428 
1429  }
1430 
1431  jmap++;
1432 
1433  } // end for
1434 
1435 
1436  return;
1437 }
1438 
#define LogDebug(id)
unsigned int size() const
number of trigger paths in trigger table
const double Pi
T getParameter(std::string const &) const
T getUntrackedParameter(std::string const &, T const &) const
int i
Definition: DBlmapReader.cc:9
virtual edm::TriggerNames const & triggerNames(edm::TriggerResults const &triggerResults) const
Definition: Event.cc:208
RunID const & id() const
Definition: RunBase.h:43
const std::string moduleType(const std::string &module) const
C++ class name of module.
void endRun(const edm::Run &run, const edm::EventSetup &c)
EndRun.
FourVectorHLTriggerOffline(const edm::ParameterSet &)
const std::string & triggerName(unsigned int triggerIndex) const
MonitorElement * book1D(const char *name, const char *title, int nchX, double lowX, double highX)
Book 1D histogram.
Definition: DQMStore.cc:514
void rmdir(const std::string &fullpath)
Definition: DQMStore.cc:2311
enum start value shifted to 81 so as to avoid clashes with PDG codes
std::multimap< float, int > fimmap
Strings::size_type size() const
Definition: TriggerNames.cc:39
const edm::ParameterSet & modulePSet(const std::string &module) const
ParameterSet of module.
virtual void analyze(const edm::Event &, const edm::EventSetup &)
std::set< fimmap, std::less< fimmap > > mmset
int iEvent
Definition: GenABIO.cc:243
void cleanDRMatchSet(mmset &tempSet)
Clean DR Match Set.
void setReco(edm::Handle< T > offColl)
int j
Definition: DBlmapReader.cc:9
void setVerbose(unsigned level)
Definition: DQMStore.cc:196
bool getByLabel(InputTag const &tag, Handle< PROD > &result) const
Definition: Event.h:355
void beginRun(const edm::Run &run, const edm::EventSetup &c)
int k[5][pyjets_maxn]
const std::vector< std::string > & moduleLabels(unsigned int trigger) const
label(s) of module(s) on a trigger path
std::vector< TriggerObject > TriggerObjectCollection
collection of trigger physics objects (e.g., all isolated muons)
Definition: TriggerObject.h:83
std::vector< size_type > Keys
bool init(const edm::Run &iRun, const edm::EventSetup &iSetup, const std::string &processName, bool &changed)
std::string const & label() const
Definition: InputTag.h:25
std::vector< std::pair< std::string, std::string > > custompathnamepairs_
MonitorElement * book2D(const char *name, const char *title, int nchX, double lowX, double highX, int nchY, double lowY, double highY)
Book 2D histogram.
Definition: DQMStore.cc:642
std::string const & instance() const
Definition: InputTag.h:26
mathSSE::Vec4< T > v
void setRecoB(edm::Handle< reco::JetTagCollection > offCollB)
std::vector< int > Vids
void setCurrentFolder(const std::string &fullpath)
Definition: DQMStore.cc:232
Definition: Run.h:32