CMS 3D CMS Logo

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Groups Pages
LepHTMonitor.cc
Go to the documentation of this file.
8 
31 
32 #include <limits>
33 #include <algorithm>
34 
35 class LepHTMonitor : public DQMEDAnalyzer, public TriggerDQMBase {
36 public:
39 
41  ~LepHTMonitor() throw() override;
42 
43 protected:
44  void bookHistograms(DQMStore::IBooker &ibooker, const edm::Run &, const edm::EventSetup &) override;
45  void analyze(const edm::Event &e, const edm::EventSetup &eSetup) override;
46 
47 private:
49  edm::EDGetTokenT<edm::View<reco::GsfElectron> > theElectronCollection_;
51  edm::EDGetTokenT<edm::ValueMap<bool> > theElectronVIDMap_;
65  edm::EDGetTokenT<reco::BeamSpot> theBeamSpot_;
66 
70 
71  const std::string folderName_;
72 
75 
77 
78  double jetPtCut_;
79  double jetEtaCut_;
80  double metCut_;
81  double htCut_;
82  double nmusCut_;
83  double nelsCut_;
86  double lep_iso_cut_;
87  double lep_eta_cut_;
88  double lep_d0_cut_b_;
89  double lep_dz_cut_b_;
90  double lep_d0_cut_e_;
91  double lep_dz_cut_e_;
92 
93  std::vector<double> ptbins_;
94  std::vector<double> htbins_;
98  float etabins_min_;
99  float etabins_max_;
104 
105  // Histograms
118 };
119 
120 namespace {
121 
122  //Offline electron definition
123  bool isGood(const reco::GsfElectron &el,
124  const reco::Vertex::Point &pv_position,
125  const reco::BeamSpot::Point &bs_position,
127  bool pass_id,
128  const double lep_counting_threshold,
129  const double lep_iso_cut,
130  const double lep_eta_cut,
131  const double d0_cut_b,
132  const double dz_cut_b,
133  const double d0_cut_e,
134  const double dz_cut_e) {
135  //Electron ID
136  if (!pass_id)
137  return false;
138 
139  //pT
140  if (el.pt() < lep_counting_threshold || std::abs(el.superCluster()->eta()) > lep_eta_cut)
141  return false;
142 
143  //Isolation
144  auto const &iso = el.pfIsolationVariables();
145  const float absiso =
146  iso.sumChargedHadronPt + std::max(0.0, iso.sumNeutralHadronEt + iso.sumPhotonEt - 0.5 * iso.sumPUPt);
147  const float relisowithdb = absiso / el.pt();
148  if (relisowithdb > lep_iso_cut)
149  return false;
150 
151  //Conversion matching
152  bool pass_conversion = false;
153  if (convs.isValid()) {
154  pass_conversion = !ConversionTools::hasMatchedConversion(el, *convs, bs_position);
155  } else {
156  edm::LogError("LepHTMonitor") << "Electron conversion matching failed.\n";
157  }
158  if (!pass_conversion)
159  return false;
160 
161  //Impact parameter
162  float d0 = 999., dz = 999.;
163  if (el.gsfTrack().isNonnull()) {
164  d0 = -(el.gsfTrack()->dxy(pv_position));
165  dz = el.gsfTrack()->dz(pv_position);
166  } else {
167  edm::LogError("LepHTMonitor") << "Could not read electron.gsfTrack().\n";
168  return false;
169  }
170  float etasc = el.superCluster()->eta();
171  if (std::abs(etasc) > 1.479) { //Endcap
172  if (std::abs(d0) > d0_cut_e || std::abs(dz) > dz_cut_e)
173  return false;
174 
175  } else { //Barrel
176  if (std::abs(d0) > d0_cut_b || std::abs(dz) > dz_cut_b)
177  return false;
178  }
179 
180  return true;
181  }
182 
183  //Offline muon definition
184  bool isGood(const reco::Muon &mu,
185  const reco::Vertex &pv,
186  const double lep_counting_threshold,
187  const double lep_iso_cut,
188  const double lep_eta_cut,
189  const double d0_cut,
190  const double dz_cut,
191  int muonIDlevel) {
192  const reco::Vertex::Point &pv_position = pv.position();
193 
194  // Muon pt and eta acceptance
195  if (mu.pt() < lep_counting_threshold || std::abs(mu.eta()) > lep_eta_cut)
196  return false;
197 
198  // Muon isolation
199  auto const &iso = mu.pfIsolationR04();
200  const float absiso =
201  iso.sumChargedHadronPt + std::max(0.0, iso.sumNeutralHadronEt + iso.sumPhotonEt - 0.5 * iso.sumPUPt);
202  const float relisowithdb = absiso / mu.pt();
203  if (relisowithdb > lep_iso_cut)
204  return false;
205 
206  // Muon ID
207  bool pass_id = false;
208  if (muonIDlevel == 1)
209  pass_id = muon::isLooseMuon(mu);
210  else if (muonIDlevel == 3)
211  pass_id = muon::isTightMuon(mu, pv);
212  else
213  pass_id = muon::isMediumMuon(mu);
214 
215  if (!pass_id)
216  return false;
217 
218  // Muon impact parameter
219  float d0 = std::abs(mu.muonBestTrack()->dxy(pv_position));
220  float dz = std::abs(mu.muonBestTrack()->dz(pv_position));
221  if (d0 > d0_cut || dz > dz_cut)
222  return false;
223 
224  return true;
225  }
226 } // namespace
227 
229  : theElectronTag_(ps.getParameter<edm::InputTag>("electronCollection")),
230  theElectronCollection_(consumes<edm::View<reco::GsfElectron> >(theElectronTag_)),
231  theElectronVIDTag_(ps.getParameter<edm::InputTag>("electronVID")),
232  theElectronVIDMap_(consumes<edm::ValueMap<bool> >(theElectronVIDTag_)),
233  theMuonTag_(ps.getParameter<edm::InputTag>("muonCollection")),
235  thePfMETTag_(ps.getParameter<edm::InputTag>("pfMetCollection")),
237  thePfJetTag_(ps.getParameter<edm::InputTag>("pfJetCollection")),
239  theJetTagTag_(ps.getParameter<edm::InputTag>("jetTagCollection")),
241  theVertexCollectionTag_(ps.getParameter<edm::InputTag>("vertexCollection")),
243  theConversionCollectionTag_(ps.getParameter<edm::InputTag>("conversionCollection")),
245  theBeamSpotTag_(ps.getParameter<edm::InputTag>("beamSpot")),
247 
249  ps.getParameter<edm::ParameterSet>("numGenericTriggerEventPSet"), consumesCollector(), *this)),
251  ps.getParameter<edm::ParameterSet>("den_lep_GenericTriggerEventPSet"), consumesCollector(), *this)),
253  ps.getParameter<edm::ParameterSet>("den_HT_GenericTriggerEventPSet"), consumesCollector(), *this)),
254 
255  folderName_(ps.getParameter<std::string>("folderName")),
256  requireValidHLTPaths_(ps.getParameter<bool>("requireValidHLTPaths")),
258 
259  muonIDlevel_(ps.getUntrackedParameter<int>("muonIDlevel")),
260  jetPtCut_(ps.getUntrackedParameter<double>("jetPtCut")),
261  jetEtaCut_(ps.getUntrackedParameter<double>("jetEtaCut")),
262  metCut_(ps.getUntrackedParameter<double>("metCut")),
263  htCut_(ps.getUntrackedParameter<double>("htCut")),
264 
265  nmusCut_(ps.getUntrackedParameter<double>("nmus")),
266  nelsCut_(ps.getUntrackedParameter<double>("nels")),
267  lep_pt_plateau_(ps.getUntrackedParameter<double>("leptonPtPlateau")),
268  lep_counting_threshold_(ps.getUntrackedParameter<double>("leptonCountingThreshold")),
269  lep_iso_cut_(ps.getUntrackedParameter<double>("lepIsoCut")),
270  lep_eta_cut_(ps.getUntrackedParameter<double>("lepEtaCut")),
271  lep_d0_cut_b_(ps.getUntrackedParameter<double>("lep_d0_cut_b")),
272  lep_dz_cut_b_(ps.getUntrackedParameter<double>("lep_dz_cut_b")),
273  lep_d0_cut_e_(ps.getUntrackedParameter<double>("lep_d0_cut_e")),
274  lep_dz_cut_e_(ps.getUntrackedParameter<double>("lep_dz_cut_e")),
275  ptbins_(ps.getParameter<std::vector<double> >("ptbins")),
276  htbins_(ps.getParameter<std::vector<double> >("htbins")),
277 
278  nbins_eta_(ps.getUntrackedParameter<int>("nbins_eta")),
279  nbins_phi_(ps.getUntrackedParameter<int>("nbins_phi")),
280  nbins_npv_(ps.getUntrackedParameter<int>("nbins_npv")),
281  etabins_min_(ps.getUntrackedParameter<double>("etabins_min")),
282  etabins_max_(ps.getUntrackedParameter<double>("etabins_max")),
283  phibins_min_(ps.getUntrackedParameter<double>("phibins_min")),
284  phibins_max_(ps.getUntrackedParameter<double>("phibins_max")),
285  npvbins_min_(ps.getUntrackedParameter<double>("npvbins_min")),
286  npvbins_max_(ps.getUntrackedParameter<double>("npvbins_max")),
287 
288  h_pfHTTurnOn_num_(nullptr),
289  h_pfHTTurnOn_den_(nullptr),
290  h_lepPtTurnOn_num_(nullptr),
291  h_lepPtTurnOn_den_(nullptr),
292  h_lepEtaTurnOn_num_(nullptr),
293  h_lepEtaTurnOn_den_(nullptr),
294  h_lepPhiTurnOn_num_(nullptr),
295  h_lepPhiTurnOn_den_(nullptr),
296  h_NPVTurnOn_num_(nullptr),
297  h_NPVTurnOn_den_(nullptr) {
298  edm::LogInfo("LepHTMonitor") << "Constructor LepHTMonitor::LepHTMonitor\n";
299 }
300 
303  num_genTriggerEventFlag_.reset();
304  }
307  }
310  }
311 }
312 
313 void LepHTMonitor::bookHistograms(DQMStore::IBooker &ibooker, const edm::Run &iRun, const edm::EventSetup &iSetup) {
314  // Initialize trigger flags
316  num_genTriggerEventFlag_->initRun(iRun, iSetup);
317  }
319  den_lep_genTriggerEventFlag_->initRun(iRun, iSetup);
320  }
322  den_HT_genTriggerEventFlag_->initRun(iRun, iSetup);
323  }
324 
325  // check if every HLT path specified in numerator and denominator has a valid match in the HLT Menu
327  num_genTriggerEventFlag_->allHLTPathsAreValid()) &&
329  den_lep_genTriggerEventFlag_->allHLTPathsAreValid()) ||
331  den_HT_genTriggerEventFlag_->allHLTPathsAreValid())));
332 
333  // if valid HLT paths are required,
334  // create DQM outputs only if all paths are valid
336  return;
337  }
338 
339  // book at beginRun
340  ibooker.cd();
341  ibooker.setCurrentFolder("HLT/SUSY/LepHT/" + folderName_);
342 
343  bool is_mu = false;
344  bool is_ele = false;
345  if (theElectronTag_.label().empty() and not theMuonTag_.label().empty()) {
346  is_mu = true;
347  } else if (not theElectronTag_.label().empty() and theMuonTag_.label().empty()) {
348  is_ele = true;
349  }
350 
351  // Cosmetic axis names
352  std::string lepton = "lepton", Lepton = "Lepton";
353  if (is_mu && !is_ele) {
354  lepton = "muon";
355  Lepton = "Muon";
356  } else if (is_ele && !is_mu) {
357  lepton = "electron";
358  Lepton = "Electron";
359  }
360 
361  //Convert to vfloat for picky TH1F constructor
362  vector<float> f_ptbins;
363  for (double ptbin : ptbins_)
364  f_ptbins.push_back(static_cast<float>(ptbin));
365  vector<float> f_htbins;
366  for (double htbin : htbins_)
367  f_htbins.push_back(static_cast<float>(htbin));
368 
369  //num and den hists to be divided in harvesting step to make turn on curves
371  ibooker.book1D("pfHTTurnOn_num", "Numerator;Offline H_{T} [GeV];", f_htbins.size() - 1, f_htbins.data());
373  ibooker.book1D("pfHTTurnOn_den", "Denominator;Offline H_{T} [GeV];", f_htbins.size() - 1, f_htbins.data());
374 
375  h_lepPtTurnOn_num_ = ibooker.book1D("lepPtTurnOn_num",
376  ("Numerator;Offline " + lepton + " p_{T} [GeV];").c_str(),
377  f_ptbins.size() - 1,
378  f_ptbins.data());
379  h_lepPtTurnOn_den_ = ibooker.book1D("lepPtTurnOn_den",
380  ("Denominator;Offline " + lepton + " p_{T} [GeV];").c_str(),
381  f_ptbins.size() - 1,
382  f_ptbins.data());
384  ibooker.book1D("lepEtaTurnOn_num", "Numerator;Offline lepton #eta;", nbins_eta_, etabins_min_, etabins_max_);
386  ibooker.book1D("lepEtaTurnOn_den", "Denominator;Offline lepton #eta;", nbins_eta_, etabins_min_, etabins_max_);
388  ibooker.book1D("lepPhiTurnOn_num", "Numerator;Offline lepton #phi;", nbins_phi_, phibins_min_, phibins_max_);
390  ibooker.book1D("lepPhiTurnOn_den", "Denominator;Offline lepton #phi;", nbins_phi_, phibins_min_, phibins_max_);
391 
392  h_lepEtaPhiTurnOn_num_ = ibooker.book2D("lepEtaPhiTurnOn_num",
393  "Numerator;Offline lepton #eta;Offline lepton #phi;",
394  nbins_eta_ / 2,
395  etabins_min_,
396  etabins_max_,
397  nbins_phi_ / 2,
398  phibins_min_,
399  phibins_max_);
400  h_lepEtaPhiTurnOn_den_ = ibooker.book2D("lepEtaPhiTurnOn_den",
401  "Denominator;Offline lepton #eta;Offline lepton #phi;",
402  nbins_eta_ / 2,
403  etabins_min_,
404  etabins_max_,
405  nbins_phi_ / 2,
406  phibins_min_,
407  phibins_max_);
408 
409  h_NPVTurnOn_num_ = ibooker.book1D("NPVTurnOn_num", "Numerator;N_{PV};", nbins_npv_, npvbins_min_, npvbins_max_);
410  h_NPVTurnOn_den_ = ibooker.book1D("NPVTurnOn_den", "Denominator;N_{PV};", nbins_npv_, npvbins_min_, npvbins_max_);
411 
412  ibooker.cd();
413 }
414 
415 void LepHTMonitor::analyze(const edm::Event &e, const edm::EventSetup &eSetup) {
416  // if valid HLT paths are required,
417  // analyze event only if all paths are valid
419  return;
420  }
421 
422  // Find whether main and auxilliary triggers fired
423  bool hasFired = false;
424  bool hasFiredAuxiliary = false;
425  bool hasFiredLeptonAuxiliary = false;
426  if (den_lep_genTriggerEventFlag_->on() && den_lep_genTriggerEventFlag_->accept(e, eSetup))
427  hasFiredLeptonAuxiliary = true;
428  if (den_HT_genTriggerEventFlag_->on() && den_HT_genTriggerEventFlag_->accept(e, eSetup))
429  hasFiredAuxiliary = true;
430  if (num_genTriggerEventFlag_->on() && num_genTriggerEventFlag_->accept(e, eSetup))
431  hasFired = true;
432 
433  if (!(hasFiredAuxiliary || hasFiredLeptonAuxiliary))
434  return;
435  int npv = 0;
436  //Vertex
438  if (not theVertexCollectionTag_.label().empty()) {
439  e.getByToken(theVertexCollection_, VertexCollection);
440  if (!VertexCollection.isValid()) {
441  edm::LogWarning("LepHTMonitor") << "Invalid VertexCollection: " << theVertexCollectionTag_.label() << '\n';
442  } else
443  npv = VertexCollection->size();
444  }
445 
446  //Get electron ID map
447  edm::Handle<edm::ValueMap<bool> > ele_id_decisions;
448  if (not theElectronVIDTag_.label().empty()) {
449  e.getByToken(theElectronVIDMap_, ele_id_decisions);
450  if (!ele_id_decisions.isValid()) {
451  edm::LogWarning("LepHTMonitor") << "Invalid Electron VID map: " << theElectronVIDTag_.label() << '\n';
452  }
453  }
454 
455  //Conversions
457  if (not theConversionCollectionTag_.label().empty()) {
458  e.getByToken(theConversionCollection_, ConversionCollection);
459  if (!ConversionCollection.isValid()) {
460  edm::LogWarning("LepHTMonitor") << "Invalid ConversionCollection: " << theConversionCollectionTag_.label()
461  << '\n';
462  }
463  }
464 
465  //Beam Spot
467  if (not theBeamSpotTag_.label().empty()) {
468  e.getByToken(theBeamSpot_, BeamSpot);
469  if (!BeamSpot.isValid()) {
470  edm::LogWarning("LepHTMonitor") << "Invalid BeamSpot: " << theBeamSpotTag_.label() << '\n';
471  }
472  }
473 
474  //MET
475  edm::Handle<reco::PFMETCollection> pfMETCollection;
476  if (not thePfMETTag_.label().empty()) {
477  e.getByToken(thePfMETCollection_, pfMETCollection);
478  if (!pfMETCollection.isValid()) {
479  edm::LogWarning("LepHTMonitor") << "Invalid PFMETCollection: " << thePfMETTag_.label() << '\n';
480  }
481  }
482 
483  //Jets
485  if (not thePfJetTag_.label().empty()) {
486  e.getByToken(thePfJetCollection_, pfJetCollection);
487  if (!pfJetCollection.isValid()) {
488  edm::LogWarning("LepHTMonitor") << "Invalid PFJetCollection: " << thePfJetTag_.label() << '\n';
489  }
490  }
491 
492  //Electron
494  if (not theElectronTag_.label().empty()) {
495  e.getByToken(theElectronCollection_, ElectronCollection);
496  if (!ElectronCollection.isValid()) {
497  edm::LogWarning("LepHTMonitor") << "Invalid GsfElectronCollection: " << theElectronTag_.label() << '\n';
498  }
499  }
500 
501  //Muon
503  if (not theMuonTag_.label().empty()) {
504  e.getByToken(theMuonCollection_, MuonCollection);
505  if (!MuonCollection.isValid()) {
506  edm::LogWarning("LepHTMonitor") << "Invalid MuonCollection: " << theMuonTag_.label() << '\n';
507  }
508  }
509 
510  //Get offline HT
511  double pfHT = -1.0;
512  if (pfJetCollection.isValid()) {
513  pfHT = 0.0;
514  for (auto const &pfjet : *pfJetCollection) {
515  if (pfjet.pt() < jetPtCut_)
516  continue;
517  if (std::abs(pfjet.eta()) > jetEtaCut_)
518  continue;
519  pfHT += pfjet.pt();
520  }
521  }
522 
523  //Get offline MET
524  double pfMET = -1.0;
525  if (pfMETCollection.isValid() && !pfMETCollection->empty()) {
526  pfMET = pfMETCollection->front().et();
527  }
528 
529  //Find offline leptons and keep track of pt,eta of leading and trailing leptons
530  double lep_max_pt = -1.0;
531  double lep_eta = 0;
532  double lep_phi = 0;
533  double trailing_ele_eta = 0;
534  double trailing_ele_phi = 0;
535  double trailing_mu_eta = 0;
536  double trailing_mu_phi = 0;
537  double min_ele_pt = -1.0;
538  double min_mu_pt = -1.0;
539  int nels = 0;
540  int nmus = 0;
541  if (VertexCollection.isValid() && !VertexCollection->empty()) { //for quality checks
542  //Try to find a reco electron
543  if (ElectronCollection.isValid() && ConversionCollection.isValid() && BeamSpot.isValid() &&
544  ele_id_decisions.isValid()) {
545  size_t index = 0;
546  for (auto const &electron : *ElectronCollection) {
547  const auto el = ElectronCollection->ptrAt(index);
548  bool pass_id = (*ele_id_decisions)[el];
549  if (isGood(electron,
550  VertexCollection->front().position(),
551  BeamSpot->position(),
553  pass_id,
555  lep_iso_cut_,
556  lep_eta_cut_,
560  lep_dz_cut_e_)) {
561  if (electron.pt() > lep_max_pt) {
562  lep_max_pt = electron.pt();
563  lep_eta = electron.eta();
564  lep_phi = electron.phi();
565  }
566  if (electron.pt() < min_ele_pt || min_ele_pt < 0) {
567  min_ele_pt = electron.pt();
568  trailing_ele_eta = electron.eta();
569  trailing_ele_phi = electron.phi();
570  }
571  nels++;
572  }
573  index++;
574  }
575  }
576 
577  //Try to find a reco muon
578  if (MuonCollection.isValid()) {
579  for (auto const &muon : *MuonCollection) {
580  if (isGood(muon,
581  VertexCollection->front(),
583  lep_iso_cut_,
584  lep_eta_cut_,
587  muonIDlevel_)) {
588  if (muon.pt() > lep_max_pt) {
589  lep_max_pt = muon.pt();
590  lep_eta = muon.eta();
591  lep_phi = muon.phi();
592  }
593  if (muon.pt() < min_mu_pt || min_mu_pt < 0) {
594  min_mu_pt = muon.pt();
595  trailing_mu_eta = muon.eta();
596  trailing_mu_phi = muon.phi();
597  }
598  nmus++;
599  }
600  }
601  }
602  }
603 
604  //Fill single lepton triggers with leading lepton pT
605  float lep_pt = lep_max_pt;
606 
607  //For dilepton triggers, use trailing rather than leading lepton
608  if (nmusCut_ >= 2) {
609  lep_pt = min_mu_pt;
610  lep_eta = trailing_mu_eta;
611  lep_phi = trailing_mu_phi;
612  }
613  if (nelsCut_ >= 2) {
614  lep_pt = min_ele_pt;
615  lep_eta = trailing_ele_eta;
616  lep_phi = trailing_ele_phi;
617  }
618  if (nelsCut_ >= 1 && nmusCut_ >= 1) {
619  if (min_ele_pt < min_mu_pt) {
620  lep_pt = min_ele_pt;
621  lep_eta = trailing_ele_eta;
622  lep_phi = trailing_ele_phi;
623  } else {
624  lep_pt = min_mu_pt;
625  lep_eta = trailing_mu_eta;
626  lep_phi = trailing_mu_phi;
627  }
628  }
629 
630  const bool nleps_cut = nels >= nelsCut_ && nmus >= nmusCut_;
631  bool lep_plateau = lep_pt > lep_pt_plateau_ || lep_pt_plateau_ < 0.0;
632 
633  //Fill lepton pT and eta histograms
634  if (hasFiredLeptonAuxiliary || !e.isRealData()) {
635  if (nleps_cut && (pfMET > metCut_ || metCut_ < 0.0) && (pfHT > htCut_ || htCut_ < 0.0)) {
636  if (h_lepPtTurnOn_den_) {
637  if (lep_pt > ptbins_.back())
638  lep_pt = ptbins_.back() - 1; //Overflow protection
639  h_lepPtTurnOn_den_->Fill(lep_pt);
640  }
641  if (h_lepPtTurnOn_num_ && hasFired)
642  h_lepPtTurnOn_num_->Fill(lep_pt);
643 
644  if (lep_plateau) {
645  //Fill Eta and Phi histograms for leptons above pT threshold
647  h_lepEtaTurnOn_den_->Fill(lep_eta);
648  if (h_lepEtaTurnOn_num_ && hasFired)
649  h_lepEtaTurnOn_num_->Fill(lep_eta);
651  h_lepPhiTurnOn_den_->Fill(lep_phi);
652  if (h_lepPhiTurnOn_num_ && hasFired)
653  h_lepPhiTurnOn_num_->Fill(lep_phi);
655  h_lepEtaPhiTurnOn_den_->Fill(lep_eta, lep_phi);
656  if (h_lepEtaPhiTurnOn_num_ && hasFired)
657  h_lepEtaPhiTurnOn_num_->Fill(lep_eta, lep_phi);
658 
659  //Fill NPV histograms
660  if (h_NPVTurnOn_den_)
661  h_NPVTurnOn_den_->Fill(npv);
662  if (h_NPVTurnOn_num_ && hasFired)
663  h_NPVTurnOn_num_->Fill(npv);
664  }
665  }
666  }
667 
668  //Fill HT turn-on histograms
669  if (hasFiredAuxiliary || !e.isRealData()) {
670  if (nleps_cut && lep_plateau) {
671  if (h_pfHTTurnOn_den_) {
672  if (pfHT > htbins_.back())
673  pfHT = htbins_.back() - 1; //Overflow protection
674  h_pfHTTurnOn_den_->Fill(pfHT);
675  }
676  if (h_pfHTTurnOn_num_ && hasFired)
677  h_pfHTTurnOn_num_->Fill(pfHT);
678  }
679  }
680 }
681 
const PflowIsolationVariables & pfIsolationVariables() const
Definition: GsfElectron.h:729
edm::EDGetTokenT< edm::ValueMap< bool > > theElectronVIDMap_
Definition: LepHTMonitor.cc:51
double lep_d0_cut_e_
Definition: LepHTMonitor.cc:90
float etabins_max_
Definition: LepHTMonitor.cc:99
float npvbins_min_
bool isNonnull() const
Checks for non-null.
Definition: Ref.h:238
double lep_iso_cut_
Definition: LepHTMonitor.cc:86
double pt() const final
transverse momentum
double jetEtaCut_
Definition: LepHTMonitor.cc:79
dqm::reco::MonitorElement MonitorElement
Definition: LepHTMonitor.cc:37
virtual void setCurrentFolder(std::string const &fullpath)
Definition: DQMStore.cc:32
bool isMediumMuon(const reco::Muon &, bool run2016_hip_mitigation=false)
MonitorElement * h_pfHTTurnOn_num_
bool getByToken(EDGetToken token, Handle< PROD > &result) const
Definition: Event.h:539
edm::InputTag thePfMETTag_
Definition: LepHTMonitor.cc:54
#define DEFINE_FWK_MODULE(type)
Definition: MakerMacros.h:16
double jetPtCut_
Definition: LepHTMonitor.cc:78
double lep_dz_cut_e_
Definition: LepHTMonitor.cc:91
edm::InputTag theJetTagTag_
Definition: LepHTMonitor.cc:58
MonitorElement * h_lepEtaTurnOn_den_
math::XYZPoint Point
point in the space
Definition: BeamSpot.h:27
MonitorElement * h_pfHTTurnOn_den_
Provides a code based selection for trigger and DCS information in order to have no failing filters i...
float etabins_min_
Definition: LepHTMonitor.cc:98
MonitorElement * h_lepPhiTurnOn_num_
JetFloatAssociation::Container JetTagCollection
Definition: JetTag.h:17
Log< level::Error, false > LogError
std::unique_ptr< T, impl::DeviceDeleter > unique_ptr
std::vector< Vertex > VertexCollection
Definition: Vertex.h:12
bool isRealData() const
Definition: EventBase.h:62
const Point & position() const
position
Definition: Vertex.h:127
tuple pfMET
Definition: pfMET_cfi.py:7
MonitorElement * h_NPVTurnOn_num_
std::vector< Conversion > ConversionCollection
collectin of Conversion objects
Definition: ConversionFwd.h:9
std::vector< Muon > MuonCollection
collection of Muon objects
Definition: MuonFwd.h:9
bool isLooseMuon(const reco::Muon &)
std::vector< double > ptbins_
Definition: LepHTMonitor.cc:93
edm::EDGetTokenT< reco::PFMETCollection > thePfMETCollection_
Definition: LepHTMonitor.cc:55
void Fill(long long x)
void bookHistograms(DQMStore::IBooker &ibooker, const edm::Run &, const edm::EventSetup &) override
GsfTrackRef gsfTrack() const override
reference to a GsfTrack
Definition: GsfElectron.h:156
double nmusCut_
Definition: LepHTMonitor.cc:82
double lep_d0_cut_b_
Definition: LepHTMonitor.cc:88
std::unique_ptr< GenericTriggerEventFlag > den_lep_genTriggerEventFlag_
Definition: LepHTMonitor.cc:68
virtual TrackRef muonBestTrack() const
Definition: Muon.h:60
edm::EDGetTokenT< edm::View< reco::GsfElectron > > theElectronCollection_
Definition: LepHTMonitor.cc:49
dqm::reco::DQMStore DQMStore
Definition: LepHTMonitor.cc:38
edm::InputTag thePfJetTag_
Definition: LepHTMonitor.cc:56
edm::InputTag theElectronTag_
Definition: LepHTMonitor.cc:48
static bool hasMatchedConversion(const reco::GsfElectron &ele, const reco::ConversionCollection &convCol, const math::XYZPoint &beamspot, bool allowCkfMatch=true, float lxyMin=2.0, float probMin=1e-6, unsigned int nHitsBeforeVtxMax=0)
edm::EDGetTokenT< reco::BeamSpot > theBeamSpot_
Definition: LepHTMonitor.cc:65
MonitorElement * h_lepPtTurnOn_den_
MonitorElement * h_lepPtTurnOn_num_
Abs< T >::type abs(const T &t)
Definition: Abs.h:22
math::XYZPoint Point
point in the space
Definition: Vertex.h:40
edm::EDGetTokenT< reco::ConversionCollection > theConversionCollection_
Definition: LepHTMonitor.cc:63
edm::EDGetTokenT< reco::JetTagCollection > theJetTagCollection_
Definition: LepHTMonitor.cc:59
const int mu
Definition: Constants.h:22
~LepHTMonitor() override
edm::InputTag theMuonTag_
Definition: LepHTMonitor.cc:52
void analyze(const edm::Event &e, const edm::EventSetup &eSetup) override
bool isValid() const
Definition: HandleBase.h:70
std::vector< Electron > ElectronCollection
collectin of Electron objects
Definition: ElectronFwd.h:9
edm::EDGetTokenT< reco::PFJetCollection > thePfJetCollection_
Definition: LepHTMonitor.cc:57
double lep_counting_threshold_
Definition: LepHTMonitor.cc:85
Log< level::Info, false > LogInfo
static constexpr float d0
float phibins_max_
MonitorElement * h_NPVTurnOn_den_
const MuonPFIsolation & pfIsolationR04() const
Definition: Muon.h:172
bool hltPathsAreValid_
Definition: LepHTMonitor.cc:74
MonitorElement * book2D(TString const &name, TString const &title, int nchX, double lowX, double highX, int nchY, double lowY, double highY, FUNC onbooking=NOOP())
Definition: DQMStore.h:177
float npvbins_max_
float phibins_min_
const std::string folderName_
Definition: LepHTMonitor.cc:71
std::string const & label() const
Definition: InputTag.h:36
std::unique_ptr< GenericTriggerEventFlag > num_genTriggerEventFlag_
Definition: LepHTMonitor.cc:67
double metCut_
Definition: LepHTMonitor.cc:80
std::vector< PFJet > PFJetCollection
collection of PFJet objects
MonitorElement * h_lepEtaPhiTurnOn_den_
std::vector< double > htbins_
Definition: LepHTMonitor.cc:94
double lep_eta_cut_
Definition: LepHTMonitor.cc:87
double lep_pt_plateau_
Definition: LepHTMonitor.cc:84
double nelsCut_
Definition: LepHTMonitor.cc:83
edm::EDGetTokenT< reco::VertexCollection > theVertexCollection_
Definition: LepHTMonitor.cc:61
std::unique_ptr< GenericTriggerEventFlag > den_HT_genTriggerEventFlag_
Definition: LepHTMonitor.cc:69
Log< level::Warning, false > LogWarning
bool isTightMuon(const reco::Muon &, const reco::Vertex &)
MonitorElement * book1D(TString const &name, TString const &title, int const nchX, double const lowX, double const highX, FUNC onbooking=NOOP())
Definition: DQMStore.h:98
edm::InputTag theConversionCollectionTag_
Definition: LepHTMonitor.cc:62
double lep_dz_cut_b_
Definition: LepHTMonitor.cc:89
edm::InputTag theElectronVIDTag_
Definition: LepHTMonitor.cc:50
MonitorElement * h_lepEtaPhiTurnOn_num_
float sumChargedHadronPt
sum-pt of charged Hadron // old float chargedHadronIso ;
Definition: GsfElectron.h:663
MonitorElement * h_lepPhiTurnOn_den_
LepHTMonitor(const edm::ParameterSet &ps)
SuperClusterRef superCluster() const override
reference to a SuperCluster
Definition: GsfElectron.h:155
edm::InputTag theVertexCollectionTag_
Definition: LepHTMonitor.cc:60
edm::EDGetTokenT< reco::MuonCollection > theMuonCollection_
Definition: LepHTMonitor.cc:53
Definition: Run.h:45
const bool requireValidHLTPaths_
Definition: LepHTMonitor.cc:73
edm::InputTag theBeamSpotTag_
Definition: LepHTMonitor.cc:64
MonitorElement * h_lepEtaTurnOn_num_
float sumChargedHadronPt
sum-pt of charged Hadron
Collection of PF MET.
double eta() const final
momentum pseudorapidity