CMS 3D CMS Logo

EwkMuDQM.cc
Go to the documentation of this file.
2 
6 
9 
12 
16 
22 
24 
28 
30 
32 
33 using namespace edm;
34 using namespace std;
35 using namespace reco;
36 
38  :
39  // Input collections
40  metTag_(cfg.getUntrackedParameter<edm::InputTag>("METTag",
41  edm::InputTag("pfmet"))),
42  jetTag_(cfg.getUntrackedParameter<edm::InputTag>(
43  "JetTag", edm::InputTag("ak4PFJets"))),
44  //trigTag_(consumes<edm::TriggerResults>(
45  // cfg.getUntrackedParameter<edm::InputTag>(
46  // "TrigTag", edm::InputTag("TriggerResults::HLT")))),
47  muonTag_(consumes<edm::View<reco::Muon> >(
48  cfg.getUntrackedParameter<edm::InputTag>("MuonTag",
49  edm::InputTag("muons")))),
50  metToken_(consumes<edm::View<reco::MET> >(
51  cfg.getUntrackedParameter<edm::InputTag>("METTag",
52  edm::InputTag("pfmet")))),
53  jetToken_(consumes<edm::View<reco::Jet> >(
54  cfg.getUntrackedParameter<edm::InputTag>(
55  "JetTag", edm::InputTag("ak4PFJets")))),
56  phoTag_(consumes<edm::View<reco::Photon> >(
57  cfg.getUntrackedParameter<edm::InputTag>("phoTag",
58  edm::InputTag("photons")))),
59  vertexTag_(consumes<edm::View<reco::Vertex> >(
60  cfg.getUntrackedParameter<edm::InputTag>(
61  "VertexTag", edm::InputTag("offlinePrimaryVertices")))),
62  beamSpotTag_(
63  consumes<reco::BeamSpot>(cfg.getUntrackedParameter<edm::InputTag>(
64  "beamSpotTag", edm::InputTag("offlineBeamSpot")))),
65  // trigPathNames_(cfg.getUntrackedParameter<std::vector<std::string> >(
66  // "TrigPathNames")),
67 
68  // Muon quality cuts
69  isAlsoTrackerMuon_(cfg.getUntrackedParameter<bool>(
70  "IsAlsoTrackerMuon", true)), // Glb muon also tracker muon
71  dxyCut_(
72  cfg.getUntrackedParameter<double>("DxyCut", 0.2)), // dxy < 0.2 cm
73  normalizedChi2Cut_(cfg.getUntrackedParameter<double>(
74  "NormalizedChi2Cut", 10.)), // chi2/ndof (of global fit) <10.0
75  trackerHitsCut_(cfg.getUntrackedParameter<int>("TrackerHitsCut",
76  11)), // Tracker Hits >10
77  pixelHitsCut_(
78  cfg.getUntrackedParameter<int>("PixelHitsCut", 1)), // Pixel Hits >0
79  muonHitsCut_(cfg.getUntrackedParameter<int>("MuonHitsCut",
80  1)), // Valid Muon Hits >0
81  nMatchesCut_(cfg.getUntrackedParameter<int>(
82  "NMatchesCut", 2)), // At least 2 Chambers with matches
83 
84  // W-boson cuts
85  isRelativeIso_(cfg.getUntrackedParameter<bool>("IsRelativeIso", true)),
86  isCombinedIso_(cfg.getUntrackedParameter<bool>("IsCombinedIso", false)),
87  isoCut03_(cfg.getUntrackedParameter<double>("IsoCut03", 0.1)),
88  acopCut_(cfg.getUntrackedParameter<double>("AcopCut", 999.)),
89  metMin_(cfg.getUntrackedParameter<double>("MetMin", -999999.)),
90  metMax_(cfg.getUntrackedParameter<double>("MetMax", 999999.)),
91  mtMin_(cfg.getUntrackedParameter<double>("MtMin", 50.)),
92  mtMax_(cfg.getUntrackedParameter<double>("MtMax", 200.)),
93  ptCut_(cfg.getUntrackedParameter<double>("PtCut", 20.)),
94  etaCut_(cfg.getUntrackedParameter<double>("EtaCut", 2.4)),
95 
96  // Z rejection
97  ptThrForZ1_(cfg.getUntrackedParameter<double>("PtThrForZ1", 20.)),
98  ptThrForZ2_(cfg.getUntrackedParameter<double>("PtThrForZ2", 10.)),
99 
100  // Z selection
101  dimuonMassMin_(cfg.getUntrackedParameter<double>("dimuonMassMin", 80.)),
102  dimuonMassMax_(cfg.getUntrackedParameter<double>("dimuonMassMax", 120.)),
103 
104  // Top rejection
105  eJetMin_(cfg.getUntrackedParameter<double>("EJetMin", 999999.)),
106  nJetMax_(cfg.getUntrackedParameter<int>("NJetMax", 999999)),
107 
108  // Photon cuts
109  ptThrForPhoton_(cfg.getUntrackedParameter<double>("ptThrForPhoton", 5.)),
110  nPhoMax_(cfg.getUntrackedParameter<int>("nPhoMax", 999999)),
111  hltPrescaleProvider_(cfg, consumesCollector(), *this) {
112  isValidHltConfig_ = false;
113 }
114 
115 
116 void EwkMuDQM::dqmBeginRun(const Run& iRun, const EventSetup& iSet) {
117  nall = 0;
118  nsel = 0;
119  nz = 0;
120 
121  nrec = 0;
122  niso = 0;
123  nhlt = 0;
124  nmet = 0;
125 
126  // passed as parameter to HLTConfigProvider::init(), not yet used
127  bool isConfigChanged = false;
128  // isValidHltConfig_ used to short-circuit analyze() in case of problems
130  hltPrescaleProvider_.init(iRun, iSet, "HLT", isConfigChanged);
131 }
132 
134  edm::Run const &, edm::EventSetup const &) {
135 
136  ibooker.setCurrentFolder("Physics/EwkMuDQM");
137 
138  char chtitle[256] = "";
139 
140  pt_before_ = ibooker.book1D("PT_BEFORECUTS",
141  "Muon transverse momentum (global muon) [GeV]", 100, 0., 100.);
142  pt_after_ = ibooker.book1D("PT_AFTERWCUTS",
143  "Muon transverse momentum (global muon) [GeV]", 100, 0., 100.);
144 
145  eta_before_ = ibooker.book1D("ETA_BEFORECUTS",
146  "Muon pseudo-rapidity", 50, -2.5, 2.5);
147  eta_after_ = ibooker.book1D("ETA_AFTERWCUTS",
148  "Muon pseudo-rapidity", 50, -2.5, 2.5);
149 
150  dxy_before_ = ibooker.book1D("DXY_BEFORECUTS",
151  "Muon transverse distance to beam spot [cm]", 100, -0.5, 0.5);
152  dxy_after_ = ibooker.book1D("DXY_AFTERWCUTS",
153  "Muon transverse distance to beam spot [cm]", 100, -0.5, 0.5);
154 
155  goodewkmuon_before_ = ibooker.book1D("GOODEWKMUON_BEFORECUTS",
156  "Quality-muon flag", 2, -0.5, 1.5);
157  goodewkmuon_after_ = ibooker.book1D("GOODEWKMUON_AFTERWCUTS",
158  "Quality-muon flag", 2, -0.5, 1.5);
159 
160  if (isRelativeIso_) {
161  if (isCombinedIso_) {
162  iso_before_ = ibooker.book1D("ISO_BEFORECUTS",
163  "Relative (combined) isolation variable", 100, 0., 1.);
164  iso_after_ = ibooker.book1D("ISO_AFTERWCUTS",
165  "Relative (combined) isolation variable", 100, 0., 1.);
166  } else {
167  iso_before_ = ibooker.book1D("ISO_BEFORECUTS",
168  "Relative (tracker) isolation variable", 100, 0., 1.);
169  iso_after_ = ibooker.book1D("ISO_AFTERWCUTS",
170  "Relative (tracker) isolation variable", 100, 0., 1.);
171  }
172  } else {
173  if (isCombinedIso_) {
174  iso_before_ = ibooker.book1D("ISO_BEFORECUTS",
175  "Absolute (combined) isolation variable [GeV]", 100, 0., 20.);
176  iso_after_ = ibooker.book1D("ISO_AFTERWCUTS",
177  "Absolute (combined) isolation variable [GeV]", 100, 0., 20.);
178  } else {
179  iso_before_ = ibooker.book1D("ISO_BEFORECUTS",
180  "Absolute (tracker) isolation variable [GeV]", 100, 0., 20.);
181  iso_after_ = ibooker.book1D("ISO_AFTERWCUTS",
182  "Absolute (tracker) isolation variable [GeV]", 100, 0., 20.);
183  }
184  }
185 
186 /* trig_before_ = ibooker.book1D("TRIG_BEFORECUTS",
187  "Trigger response (boolean of muon triggers)", 2, -0.5, 1.5);
188  trig_after_ = ibooker.book1D("TRIG_AFTERWCUTS",
189  "Trigger response (boolean of muon triggers)", 2, -0.5, 1.5);
190 */
191  snprintf(chtitle, 255, "Transverse mass (%s) [GeV]", metTag_.label().data());
192  mt_before_ = ibooker.book1D("MT_BEFORECUTS", chtitle, 150, 0., 300.);
193  mt_after_ = ibooker.book1D("MT_AFTERWCUTS", chtitle, 150, 0., 300.);
194 
195  snprintf(chtitle, 255, "Missing transverse energy (%s) [GeV]",
196  metTag_.label().data());
197  met_before_ = ibooker.book1D("MET_BEFORECUTS", chtitle, 100, 0., 200.);
198  met_after_ = ibooker.book1D("MET_AFTERWCUTS", chtitle, 100, 0., 200.);
199  met_afterZ_ = ibooker.book1D("MET_AFTERZCUTS", chtitle, 100, 0., 200.);
200 
201  snprintf(chtitle, 255, "MU-MET (%s) acoplanarity", metTag_.label().data());
202  acop_before_ = ibooker.book1D("ACOP_BEFORECUTS", chtitle, 50, 0., M_PI);
203  acop_after_ = ibooker.book1D("ACOP_AFTERWCUTS", chtitle, 50, 0., M_PI);
204 
205  snprintf(chtitle, 255, "Z selection: muons above %.2f GeV", ptThrForZ1_);
206  n_zselPt1thr_ = ibooker.book1D("NZSELPT1THR", chtitle, 10, -0.5, 9.5);
207  snprintf(chtitle, 255, "Z selection: muons above %.2f GeV", ptThrForZ2_);
208  n_zselPt2thr_ = ibooker.book1D("NZSELPT2THR", chtitle, 10, -0.5, 9.5);
209 
210  snprintf(chtitle, 255, "Number of jets (%s) above %.2f GeV",
211  jetTag_.label().data(), eJetMin_);
212  njets_before_ = ibooker.book1D("NJETS_BEFORECUTS", chtitle, 16, -0.5, 15.5);
213  njets_after_ = ibooker.book1D("NJETS_AFTERWCUTS", chtitle, 16, -0.5, 15.5);
214  njets_afterZ_ = ibooker.book1D("NJETS_AFTERZCUTS", chtitle, 16, -0.5, 15.5);
215 
216  leadingjet_pt_before_ = ibooker.book1D("LEADINGJET_PT_BEFORECUTS",
217  "Leading Jet transverse momentum", 300, 0., 300.);
218  leadingjet_pt_after_ = ibooker.book1D("LEADINGJET_PT_AFTERWCUTS",
219  "Leading Jet transverse momentum", 300, 0., 300.);
220  leadingjet_pt_afterZ_ = ibooker.book1D("LEADINGJET_PT_AFTERZCUTS",
221  "Leading Jet transverse momentum", 300, 0., 300.);
222 
223  leadingjet_eta_before_ = ibooker.book1D("LEADINGJET_ETA_BEFORECUTS",
224  "Leading Jet pseudo-rapidity", 50, -2.5, 2.5);
225  leadingjet_eta_after_ = ibooker.book1D("LEADINGJET_ETA_AFTERWCUTS",
226  "Leading Jet pseudo-rapidity", 50, -2.5, 2.5);
227  leadingjet_eta_afterZ_ = ibooker.book1D("LEADINGJET_ETA_AFTERZCUTS",
228  "Leading Jet pseudo-rapidity", 50, -2.5, 2.5);
229 
230  ptDiffPM_before_ = ibooker.book1D("PTDIFFPM_BEFORE_CUTS",
231  "pt(Muon+)-pt(Muon-) after Z cuts [GeV]", 200, -100., 100.);
232  ptDiffPM_afterZ_ = ibooker.book1D("PTDIFFPM_AFTERZ_CUTS",
233  "pt(Muon+)-pt(Muon-) after Z cuts [GeV]", 200, -100., 100.);
234 
237  pt1_afterZ_ = ibooker.book1D("PT1_AFTERZCUTS",
238  "Muon transverse momentum (global muon) [GeV]", 100, 0., 100.);
239  eta1_afterZ_ = ibooker.book1D("ETA1_AFTERZCUTS",
240  "Muon pseudo-rapidity", 50, -2.5, 2.5);
241  dxy1_afterZ_ = ibooker.book1D("DXY1_AFTERZCUTS",
242  "Muon transverse distance to beam spot [cm]", 100, -0.5, 0.5);
243  goodewkmuon1_afterZ_ = ibooker.book1D("GOODEWKMUON1_AFTERZCUTS",
244  "Quality-muon flag", 2, -0.5, 1.5);
245 
246  if (isRelativeIso_) {
247  if (isCombinedIso_) {
248  iso1_afterZ_ = ibooker.book1D("ISO1_AFTERZCUTS",
249  "Relative (combined) isolation variable", 100, 0., 1.);
250  iso2_afterZ_ = ibooker.book1D("ISO2_AFTERZCUTS",
251  "Relative (combined) isolation variable", 100, 0., 1.);
252  } else {
253  iso1_afterZ_ = ibooker.book1D("ISO1_AFTERZCUTS",
254  "Relative (tracker) isolation variable", 100, 0., 1.);
255  iso2_afterZ_ = ibooker.book1D("ISO2_AFTERZCUTS",
256  "Relative (tracker) isolation variable", 100, 0., 1.);
257  }
258  } else {
259  if (isCombinedIso_) {
260  iso1_afterZ_ = ibooker.book1D("ISO1_AFTERZCUTS",
261  "Absolute (combined) isolation variable [GeV]", 100, 0., 20.);
262  iso2_afterZ_ = ibooker.book1D("ISO2_AFTERZCUTS",
263  "Absolute (combined) isolation variable [GeV]", 100, 0., 20.);
264  } else {
265  iso1_afterZ_ = ibooker.book1D("ISO1_AFTERZCUTS",
266  "Absolute (tracker) isolation variable [GeV]", 100, 0., 20.);
267  iso2_afterZ_ = ibooker.book1D("ISO2_AFTERZCUTS",
268  "Absolute (tracker) isolation variable [GeV]", 100, 0., 20.);
269  }
270  }
271 
272  pt2_afterZ_ = ibooker.book1D("PT2_AFTERZCUTS",
273  "Muon transverse momentum (global muon) [GeV]", 100, 0., 100.);
274  eta2_afterZ_ = ibooker.book1D("ETA2_AFTERZCUTS",
275  "Muon pseudo-rapidity", 50, -2.5, 2.5);
276  dxy2_afterZ_ = ibooker.book1D("DXY2_AFTERZCUTS",
277  "Muon transverse distance to beam spot [cm]", 100, -0.5, 0.5);
278  goodewkmuon2_afterZ_ = ibooker.book1D("GOODEWKMUON2_AFTERZCUTS",
279  "Quality-muon flag", 2, -0.5, 1.5);
280 /* ztrig_afterZ_ = ibooker.book1D("ZTRIG_AFTERZCUTS",
281  "Trigger response (boolean of muon triggers)", 2, -0.5, 1.5);
282  */
283  dimuonmass_before_ = ibooker.book1D("DIMUONMASS_BEFORECUTS",
284  "DiMuonMass (2 globals)", 100, 0, 200);
285  dimuonmass_afterZ_ = ibooker.book1D("DIMUONMASS_AFTERZCUTS",
286  "DiMuonMass (2 globals)", 100, 0, 200);
287  npvs_before_ = ibooker.book1D("NPVs_BEFORECUTS",
288  "Number of Valid Primary Vertices", 51, -0.5, 50.5);
289  npvs_after_ = ibooker.book1D("NPVs_AFTERWCUTS",
290  "Number of Valid Primary Vertices", 51, -0.5, 50.5);
291  npvs_afterZ_ = ibooker.book1D("NPVs_AFTERZCUTS",
292  "Number of Valid Primary Vertices", 51, -0.5, 50.5);
293  muoncharge_before_ = ibooker.book1D("MUONCHARGE_BEFORECUTS",
294  "Muon Charge", 3, -1.5, 1.5);
295  muoncharge_after_ = ibooker.book1D("MUONCHARGE_AFTERWCUTS",
296  "Muon Charge", 3, -1.5, 1.5);
297  muoncharge_afterZ_ = ibooker.book1D("MUONCHARGE_AFTERZCUTS",
298  "Muon Charge", 3, -1.5, 1.5);
299 
300  // Adding these to replace the NZ ones (more useful, since they are more
301  // general?)
302  nmuons_ = ibooker.book1D("NMuons",
303  "Number of muons in the event", 10, -0.5, 9.5);
304  ngoodmuons_ = ibooker.book1D("NGoodMuons",
305  "Number of muons passing the quality criteria", 10, -0.5, 9.5);
306 
307  nph_ = ibooker.book1D("nph", "Number of photons in the event", 20, 0., 20.);
308  phPt_ = ibooker.book1D("phPt", "Photon transverse momentum [GeV]", 100, 0.,1000.);
309  snprintf(chtitle, 255, "Photon pseudorapidity (pT>%4.1f)", ptThrForPhoton_);
310  phEta_ = ibooker.book1D("phEta", chtitle, 100, -2.5, 2.5);
311 }
312 
313 void EwkMuDQM::endRun(const Run& r, const EventSetup& iSet) {}
314 
315 void EwkMuDQM::analyze(const Event& ev, const EventSetup& iSet) {
316 
317  // Muon collection
319  if (!ev.getByToken(muonTag_, muonCollection)) {
320  // LogWarning("") << ">>> Muon collection does not exist !!!";
321  return;
322  }
323  unsigned int muonCollectionSize = muonCollection->size();
324 
325  // Beam spot
326  Handle<reco::BeamSpot> beamSpotHandle;
327  if (!ev.getByToken(beamSpotTag_, beamSpotHandle)) {
328  // LogWarning("") << ">>> No beam spot found !!!";
329  return;
330  }
331 
332  // Loop to reject/control Z->mumu is done separately
333  unsigned int nmuonsForZ1 = 0;
334  unsigned int nmuonsForZ2 = 0;
335  bool cosmic = false;
336  for (unsigned int i = 0; i < muonCollectionSize; i++) {
337  const Muon& mu = muonCollection->at(i);
338  if (!mu.isGlobalMuon()) continue;
339  double pt = mu.pt();
340  double dxy = mu.innerTrack()->dxy(beamSpotHandle->position());
341 
342  if (fabs(dxy) > 1) {
343  cosmic = true;
344  break;
345  }
346 
347  if (pt > ptThrForZ1_) nmuonsForZ1++;
348  if (pt > ptThrForZ2_) nmuonsForZ2++;
349 
350  for (unsigned int j = i + 1; j < muonCollectionSize; j++) {
351  const Muon& mu2 = muonCollection->at(j);
352  if (mu2.isGlobalMuon() && (mu.charge() * mu2.charge() == -1)) {
353  const math::XYZTLorentzVector ZRecoGlb(
354  mu.px() + mu2.px(), mu.py() + mu2.py(), mu.pz() + mu2.pz(),
355  mu.p() + mu2.p());
356  dimuonmass_before_->Fill(ZRecoGlb.mass());
357  if (mu.charge() > 0) {
358  ptDiffPM_before_->Fill(mu.pt() - mu2.pt());
359  } else {
360  ptDiffPM_before_->Fill(mu2.pt() - mu.pt());
361  }
362  }
363  }
364  }
365  if (cosmic) return;
366 
367  LogTrace("") << "> Z rejection: muons above " << ptThrForZ1_
368  << " [GeV]: " << nmuonsForZ1;
369  LogTrace("") << "> Z rejection: muons above " << ptThrForZ2_
370  << " [GeV]: " << nmuonsForZ2;
371 
372  // MET
374  if (!ev.getByToken(metToken_, metCollection)) {
375  // LogWarning("") << ">>> MET collection does not exist !!!";
376  return;
377  }
378  const MET& met = metCollection->at(0);
379  double met_et = met.pt();
380  LogTrace("") << ">>> MET, MET_px, MET_py: " << met_et << ", " << met.px()
381  << ", " << met.py() << " [GeV]";
382  met_before_->Fill(met_et);
383 
384  // Vertices in the event
386  if (!ev.getByToken(vertexTag_, vertexCollection)) {
387  LogError("") << ">>> Vertex collection does not exist !!!";
388  return;
389  }
390  unsigned int vertexCollectionSize = vertexCollection->size();
391 
392  int nvvertex = 0;
393  for (unsigned int i = 0; i < vertexCollectionSize; i++) {
394  const Vertex& vertex = vertexCollection->at(i);
395  if (vertex.isValid()) nvvertex++;
396  }
397 
398  npvs_before_->Fill(nvvertex);
399 
400  // bool trigger_fired = false;
401  //Handle<TriggerResults> triggerResults;
402  // if (!ev.getByToken(trigTag_, triggerResults)) {
403  // LogWarning("") << ">>> TRIGGER collection does not exist !!!";
404  // return;
405  // }
406  // const edm::TriggerNames& trigNames = ev.triggerNames(*triggerResults);
407  // LogWarning("")<<"Loop over triggers";
408 
409  //HLTConfigProvider const& hltConfigProvider = hltPrescaleProvider_.hltConfigProvider();
410 
411  /* change faulty logic of triggering
412  for (unsigned int i=0; i<triggerResults->size(); i++)
413  {
414  const std::string trigName = trigNames.triggerName(i);
415 
416  bool found=false;
417  for(unsigned int index=0; index<trigPathNames_.size() && found==false;
418  index++) {
419  size_t trigPath = trigName.find(trigPathNames_[index]); // 0 if
420  found, pos if not
421  if (trigPath==0) found=true;
422  }
423  if(!found) {continue;}
424 
425  bool prescaled=false;
426  for (unsigned int ps= 0; ps< hltConfigProvider.prescaleSize();
427  ps++){
428  const unsigned int prescaleValue =
429  hltConfigProvider.prescaleValue(ps, trigName) ;
430  if (prescaleValue != 1) prescaled =true;
431  }
432 
433  if( triggerResults->accept(i) && !prescaled){ trigger_fired=true;}
434  // LogWarning("")<<"TrigNo: "<<i<<" "<<found<<"
435  "<<trigName<<" ---> FIRED";}
436  }
437  */
438 
439  // get the prescale set for this event
440  const int prescaleSet = hltPrescaleProvider_.prescaleSet(ev, iSet);
441  if (prescaleSet == -1) {
442  LogTrace("") << "Failed to determine prescaleSet\n";
443  // std::cout << "Failed to determine prescaleSet. Check the GlobalTag in
444  // cfg\n";
445  return;
446  }
447 
448  // for (unsigned int i = 0;
449  // (i < triggerResults->size()) && (trigger_fired == false); i++) {
450  // skip trigger, if it did not fire
451  //if (!triggerResults->accept(i)) continue;
452 
453  // skip trigger, if it is not on our list
454  //bool found = false;
455  //const std::string trigName = trigNames.triggerName(i);
456  //for (unsigned int index = 0;
457  // index < trigPathNames_.size() && found == false; index++) {
458  // if (trigName.find(trigPathNames_.at(index)) == 0) found = true;
459  // }
460  // if (!found) continue;
461 
462  // skip trigger, if it is prescaled
463  /* if (prescaleSet != -1) {
464  if (hltConfigProvider.prescaleValue(prescaleSet, trigName) != 1)
465  continue;
466  } else {
467  // prescaleSet is not known.
468  // This branch is not needed, if prescaleSet=-1 forces to skip event
469  int prescaled = 0;
470  for (unsigned int ps = 0;
471  !prescaled && (ps < hltConfigProvider.prescaleSize()); ++ps) {
472  if (hltConfigProvider.prescaleValue(ps, trigName) != 1) {
473  prescaled = 1;
474  }
475  }
476  if (prescaled) {
477  // std::cout << "trigger prescaled\n";
478  continue;
479  }
480  }
481 */
482  // std::cout << "found unprescaled trigger that fired: " << trigName <<
483  // "\n";
484  // trigger_fired = true;
485  // }
486  // if (trigger_fired) std::cout << "\n\tGot Trigger\n";
487 
488  // trig_before_->Fill(trigger_fired);
489 
490  // Jet collection
491  Handle<View<Jet> > jetCollection;
492  if (!ev.getByToken(jetToken_, jetCollection)) {
493  // LogError("") << ">>> JET collection does not exist !!!";
494  return;
495  }
496  unsigned int jetCollectionSize = jetCollection->size();
497  int njets = 0;
498  int LEADJET = -1;
499  double max_pt = 0;
500  for (unsigned int i = 0; i < jetCollectionSize; i++) {
501  const Jet& jet = jetCollection->at(i);
502  double minDistance = 99999; // This is in order to use PFJets
503  for (unsigned int j = 0; j < muonCollectionSize; j++) {
504  const Muon& mu = muonCollection->at(j);
505  double distance = sqrt((mu.eta() - jet.eta()) * (mu.eta() - jet.eta()) +
506  (mu.phi() - jet.phi()) * (mu.phi() - jet.phi()));
507  if (minDistance > distance) minDistance = distance;
508  }
509  if (minDistance < 0.3)
510  continue; // 0.3 is the isolation cone around the muon
511  if (jet.et() > max_pt) {
512  LEADJET = i;
513  max_pt = jet.et();
514  }
515  if (jet.et() > eJetMin_) {
516  njets++;
517  }
518  }
519 
520  LogTrace("") << ">>> Total number of jets: " << jetCollectionSize;
521  LogTrace("") << ">>> Number of jets above " << eJetMin_
522  << " [GeV]: " << njets;
523  njets_before_->Fill(njets);
524  double lead_jet_pt = -1;
525  double lead_jet_eta = -100;
526  if (LEADJET != -1) {
527  const Jet& leadJet = jetCollection->at(LEADJET);
528  leadingjet_pt_before_->Fill(leadJet.pt());
529  leadingjet_eta_before_->Fill(leadJet.eta());
530  lead_jet_pt = leadJet.pt();
531  lead_jet_eta = leadJet.eta();
532  }
533  // Photon Collection
535  if (!ev.getByToken(phoTag_, photonCollection)) {
536  // LogError("")
537  return;
538  }
539  unsigned int ngam = 0;
540 
541  for (unsigned int i = 0; i < photonCollection->size(); i++) {
542  const Photon& ph = photonCollection->at(i);
543  double photonPt = ph.pt();
544  if (photonPt > ptThrForPhoton_) {
545  ngam++;
546  phEta_->Fill(ph.eta());
547  }
548  phPt_->Fill(photonPt);
549  }
550  nph_->Fill(ngam);
551  LogTrace("") << " >>> N photons " << ngam << std::endl;
552 
553  nmuons_->Fill(muonCollectionSize);
554 
555  // Start counting
556  nall++;
557 
558  // Histograms per event should be done only once, so keep track of them
559  // bool hlt_hist_done = false;
560  // bool zhlt_hist_done = false;
561  bool zjets_hist_done = false;
562  bool zfullsel_hist_done = false;
563  bool met_hist_done = false;
564  bool njets_hist_done = false;
565  bool wfullsel_hist_done = false;
566 
567  // Central W->mu nu selection criteria
568  const int NFLAGS = 10;
569  bool muon_sel[NFLAGS];
570  const int NFLAGSZ = 12;
571  bool zmuon_sel[NFLAGSZ];
572  bool muon4Z = false;
573 
574  double number_of_muons = 0;
575  double number_of_goodMuons = 0;
576 
577  for (unsigned int i = 0; i < muonCollectionSize; i++) {
578  for (int j = 0; j < NFLAGS; ++j) {
579  muon_sel[j] = false;
580  }
581 
582  number_of_muons++;
583 
584  const Muon& mu = muonCollection->at(i);
585  if (!mu.isGlobalMuon()) continue;
586  if (mu.globalTrack().isNull()) continue;
587  if (mu.innerTrack().isNull()) continue;
588 
589  LogTrace("") << "> Wsel: processing muon number " << i << "...";
590  reco::TrackRef gm = mu.globalTrack();
591  reco::TrackRef tk = mu.innerTrack();
592 
593  // Pt,eta cuts
594  double pt = mu.pt();
595  double eta = mu.eta();
596  LogTrace("") << "\t... pt, eta: " << pt << " [GeV], " << eta;
597  ;
598  if (pt > ptCut_) muon_sel[0] = true;
599  if (fabs(eta) < etaCut_) muon_sel[1] = true;
600 
601  double charge = mu.charge();
602 
603  // d0, chi2, nhits quality cuts
604  double dxy = gm->dxy(beamSpotHandle->position());
605  double normalizedChi2 = gm->normalizedChi2();
606  double trackerHits = tk->hitPattern().numberOfValidTrackerHits();
607  int pixelHits = tk->hitPattern().numberOfValidPixelHits();
608  int muonHits = gm->hitPattern().numberOfValidMuonHits();
609  int nMatches = mu.numberOfMatches();
610 
611  LogTrace("") << "\t... dxy, normalizedChi2, trackerHits, isTrackerMuon?: "
612  << dxy << " [cm], " << normalizedChi2 << ", " << trackerHits
613  << ", " << mu.isTrackerMuon();
614  if (fabs(dxy) < dxyCut_) muon_sel[2] = true;
615 
616  bool quality = true;
617 
618  if (normalizedChi2 > normalizedChi2Cut_) quality = false;
619  if (trackerHits < trackerHitsCut_) quality = false;
620  if (pixelHits < pixelHitsCut_) quality = false;
621  if (muonHits < muonHitsCut_) quality = false;
622  ;
623  if (!mu.isTrackerMuon()) quality = false;
624  if (nMatches < nMatchesCut_) quality = false;
625  muon_sel[3] = quality;
626  if (quality) number_of_goodMuons++;
627 
628  pt_before_->Fill(pt);
629  eta_before_->Fill(eta);
630  dxy_before_->Fill(dxy);
631  muoncharge_before_->Fill(charge);
632  goodewkmuon_before_->Fill(quality);
633 
634  // Charge asymmetry
635  // if (quality) {
636  // if (charge>0) ptPlus_before_->Fill(pt);
637  // if (charge<0) ptMinus_before_->Fill(pt);
638  //}
639 
640  // Isolation cuts
641  double isovar = mu.isolationR03().sumPt;
642  if (isCombinedIso_) {
643  isovar += mu.isolationR03().emEt;
644  isovar += mu.isolationR03().hadEt;
645  }
646  if (isRelativeIso_) isovar /= pt;
647  if (isovar < isoCut03_) muon_sel[4] = true;
648 
649  LogTrace("") << "\t... isolation value" << isovar << ", isolated? "
650  << muon_sel[6];
651  iso_before_->Fill(isovar);
652 
653  // HLT (not mtched to muon for the time being)
654  // if (trigger_fired) muon_sel[5] = true;
655 
656  // For Z:
657  if (pt > ptThrForZ1_ && fabs(eta) < etaCut_ && fabs(dxy) < dxyCut_ &&
658  quality && isovar < isoCut03_) {
659  muon4Z = true;
660  }
661 
662  // MET/MT cuts
663  double w_et = met_et + mu.pt();
664  double w_px = met.px() + mu.px();
665  double w_py = met.py() + mu.py();
666 
667  double massT = w_et * w_et - w_px * w_px - w_py * w_py;
668  massT = (massT > 0) ? sqrt(massT) : 0;
669 
670  LogTrace("") << "\t... W mass, W_et, W_px, W_py: " << massT << ", " << w_et
671  << ", " << w_px << ", " << w_py << " [GeV]";
672  if (massT > mtMin_ && massT < mtMax_) muon_sel[5] = true;
673  mt_before_->Fill(massT);
674  if (met_et > metMin_ && met_et < metMax_) muon_sel[6] = true;
675 
676  // Acoplanarity cuts
677  Geom::Phi<double> deltaphi(mu.phi() - atan2(met.py(), met.px()));
678  double acop = deltaphi.value();
679  if (acop < 0) acop = -acop;
680  acop = M_PI - acop;
681  LogTrace("") << "\t... acoplanarity: " << acop;
682  if (acop < acopCut_) muon_sel[7] = true;
683  acop_before_->Fill(acop);
684 
685  // Remaining flags (from global event information)
686  if (nmuonsForZ1 < 1 || nmuonsForZ2 < 2) muon_sel[8] = true;
687  if (njets <= nJetMax_) muon_sel[9] = true;
688 
689  // Collect necessary flags "per muon"
690  int flags_passed = 0;
691  for (int j = 0; j < NFLAGS; ++j) {
692  if (muon_sel[j]) flags_passed += 1;
693  }
694 
695  // Do N-1 histograms now (and only once for global event quantities)
696  if (flags_passed >= (NFLAGS - 1)) {
697  if (!muon_sel[0] || flags_passed == NFLAGS) pt_after_->Fill(pt);
698  if (!muon_sel[1] || flags_passed == NFLAGS) eta_after_->Fill(eta);
699  if (!muon_sel[2] || flags_passed == NFLAGS) dxy_after_->Fill(dxy);
700  if (!muon_sel[3] || flags_passed == NFLAGS)
701  goodewkmuon_after_->Fill(quality);
702  if (!muon_sel[4] || flags_passed == NFLAGS) iso_after_->Fill(isovar);
703  // if (!muon_sel[5] || flags_passed == NFLAGS)
704  // if (!hlt_hist_done) trig_after_->Fill(trigger_fired);
705  //hlt_hist_done = true;
706  if (!muon_sel[5] || flags_passed == NFLAGS) mt_after_->Fill(massT);
707  if (!muon_sel[6] || flags_passed == NFLAGS)
708  if (!met_hist_done) met_after_->Fill(met_et);
709  met_hist_done = true;
710  if (!muon_sel[7] || flags_passed == NFLAGS) acop_after_->Fill(acop);
711  // no action here for muon_sel[8]
712  if (!muon_sel[9] || flags_passed == NFLAGS) {
713  if (!njets_hist_done) {
714  njets_after_->Fill(njets);
715  leadingjet_pt_after_->Fill(lead_jet_pt);
716  leadingjet_eta_after_->Fill(lead_jet_eta);
717  }
718  njets_hist_done = true;
719  }
720  if (flags_passed == NFLAGS) {
721  if (!wfullsel_hist_done) {
722  npvs_after_->Fill(nvvertex);
723  muoncharge_after_->Fill(charge);
724  // if (charge>0) ptPlus_afterW_->Fill(pt);
725  // if (charge<0) ptMinus_afterW_->Fill(pt);
726  }
727  wfullsel_hist_done = true;
728  }
729  }
730 
731  // The cases in which the event is rejected as a Z are considered
732  // independently:
733  if (muon4Z && !muon_sel[8]) {
734 
735  // Plots for 2 muons
736  for (unsigned int j = i + 1; j < muonCollectionSize; j++) {
737 
738  for (int ij = 0; ij < NFLAGSZ; ++ij) {
739  zmuon_sel[ij] = false;
740  }
741 
742  for (int ji = 0; ji < 5; ++ji) {
743  zmuon_sel[ji] = muon_sel[ji];
744  }
745 
746  const Muon& mu2 = muonCollection->at(j);
747  if (!mu2.isGlobalMuon()) continue;
748  if (mu2.charge() * charge != -1) continue;
749  reco::TrackRef gm2 = mu2.globalTrack();
750  reco::TrackRef tk2 = mu2.innerTrack();
751  double pt2 = mu2.pt();
752  if (pt2 > ptThrForZ2_) zmuon_sel[5] = true;
753  double eta2 = mu2.eta();
754  if (fabs(eta2) < etaCut_) zmuon_sel[6] = true;
755  double dxy2 = gm2->dxy(beamSpotHandle->position());
756  if (fabs(dxy2) < dxyCut_) zmuon_sel[7] = true;
757  double normalizedChi22 = gm2->normalizedChi2();
758  double trackerHits2 = tk2->hitPattern().numberOfValidTrackerHits();
759  int pixelHits2 = tk2->hitPattern().numberOfValidPixelHits();
760  int muonHits2 = gm2->hitPattern().numberOfValidMuonHits();
761  int nMatches2 = mu2.numberOfMatches();
762  bool quality2 = true;
763  if (normalizedChi22 > normalizedChi2Cut_) quality2 = false;
764  if (trackerHits2 < trackerHitsCut_) quality2 = false;
765  if (pixelHits2 < pixelHitsCut_) quality2 = false;
766  if (muonHits2 < muonHitsCut_) quality2 = false;
767  if (!mu2.isTrackerMuon()) quality2 = false;
768  if (nMatches2 < nMatchesCut_) quality2 = false;
769  zmuon_sel[8] = quality2;
770  double isovar2 = mu2.isolationR03().sumPt;
771  if (isCombinedIso_) {
772  isovar2 += mu2.isolationR03().emEt;
773  isovar2 += mu2.isolationR03().hadEt;
774  }
775  if (isRelativeIso_) isovar2 /= pt2;
776  if (isovar2 < isoCut03_) zmuon_sel[9] = true;
777  // if (trigger_fired) zmuon_sel[10] = true;
778  const math::XYZTLorentzVector ZRecoGlb(
779  mu.px() + mu2.px(), mu.py() + mu2.py(), mu.pz() + mu2.pz(),
780  mu.p() + mu2.p());
781  if (ZRecoGlb.mass() > dimuonMassMin_ &&
782  ZRecoGlb.mass() < dimuonMassMax_)
783  zmuon_sel[10] = true;
784 
785  // jet flag
786  if (njets <= nJetMax_) zmuon_sel[11] = true;
787 
788  // start filling histos: N-1 plots
789  int flags_passed_z = 0;
790 
791  for (int jj = 0; jj < NFLAGSZ; ++jj) {
792  if (zmuon_sel[jj]) ++flags_passed_z;
793  }
794 
795  if (flags_passed_z >= (NFLAGSZ - 1)) {
796  if (!zmuon_sel[0] || flags_passed_z == NFLAGSZ) {
797  pt1_afterZ_->Fill(pt);
798  }
799  if (!zmuon_sel[1] || flags_passed_z == NFLAGSZ) {
800  eta1_afterZ_->Fill(eta);
801  }
802  if (!zmuon_sel[2] || flags_passed_z == NFLAGSZ) {
803  dxy1_afterZ_->Fill(dxy);
804  }
805  if (!zmuon_sel[3] || flags_passed_z == NFLAGSZ) {
806  goodewkmuon1_afterZ_->Fill(quality);
807  }
808  if (!zmuon_sel[4] || flags_passed_z == NFLAGSZ) {
809  iso1_afterZ_->Fill(isovar);
810  }
811  if (!zmuon_sel[5] || flags_passed_z == NFLAGSZ) {
812  pt2_afterZ_->Fill(pt2);
813  }
814  if (!zmuon_sel[6] || flags_passed_z == NFLAGSZ) {
815  eta2_afterZ_->Fill(eta2);
816  }
817  if (!zmuon_sel[7] || flags_passed_z == NFLAGSZ) {
818  dxy2_afterZ_->Fill(dxy2);
819  }
820  if (!zmuon_sel[8] || flags_passed_z == NFLAGSZ) {
821  goodewkmuon2_afterZ_->Fill(quality2);
822  }
823  if (!zmuon_sel[9] || flags_passed_z == NFLAGSZ) {
824  iso2_afterZ_->Fill(isovar2);
825  }
826  // if (!zmuon_sel[10] || flags_passed_z == NFLAGSZ) {
827  // if (!zhlt_hist_done) ztrig_afterZ_->Fill(trigger_fired);
828  // zhlt_hist_done = true;
829  // }
830  if (!zmuon_sel[10] || flags_passed_z == NFLAGSZ) {
831  dimuonmass_afterZ_->Fill(ZRecoGlb.mass());
832  }
833  if (!zmuon_sel[11] || flags_passed_z == NFLAGSZ) {
834  if (!zjets_hist_done) {
835  njets_afterZ_->Fill(njets);
836  leadingjet_pt_afterZ_->Fill(lead_jet_pt);
837  leadingjet_eta_afterZ_->Fill(lead_jet_eta);
838  }
839  zjets_hist_done = true;
840  }
841  if (flags_passed_z == NFLAGSZ) {
842  met_afterZ_->Fill(met_et);
843  if (!zfullsel_hist_done) {
844  npvs_afterZ_->Fill(nvvertex);
845  muoncharge_afterZ_->Fill(charge);
846  if (charge > 0) {
847  // ptPlus_afterZ_->Fill(mu.pt());
848  // ptMinus_afterZ_->Fill(mu2.pt());
849  ptDiffPM_afterZ_->Fill(mu.pt() - mu2.pt());
850  } else {
851  // ptPlus_afterZ_->Fill(mu2.pt());
852  // ptMinus_afterZ_->Fill(mu.pt());
853  ptDiffPM_afterZ_->Fill(mu2.pt() - mu.pt());
854  }
855  }
856  zfullsel_hist_done = true;
857  }
858  }
859  }
860  }
861  }
862 
863  if (zfullsel_hist_done) {
864  // here was a Z candidate
865  n_zselPt1thr_->Fill(nmuonsForZ1);
866  n_zselPt2thr_->Fill(nmuonsForZ2);
867  }
868 
869  // nmuons_->Fill(number_of_muons);
870  // nmuons_->Fill(muonCollectionSize);
871  ngoodmuons_->Fill(number_of_goodMuons);
872 
873  return;
874 }
875 
876 // Local Variables:
877 // show-trailing-whitespace: t
878 // truncate-lines: t
879 // End:
MonitorElement * met_before_
Definition: EwkMuDQM.h:113
float hadEt
hcal sum-Et
Definition: MuonIsolation.h:9
MonitorElement * ptDiffPM_afterZ_
Definition: EwkMuDQM.h:135
double etaCut_
Definition: EwkMuDQM.h:74
MonitorElement * dimuonmass_afterZ_
Definition: EwkMuDQM.h:155
unsigned int nall
Definition: EwkMuDQM.h:91
int nMatchesCut_
Definition: EwkMuDQM.h:61
Definition: Photon.py:1
MonitorElement * phEta_
Definition: EwkMuDQM.h:173
double eta() const final
momentum pseudorapidity
EwkMuDQM(const edm::ParameterSet &)
Definition: EwkMuDQM.cc:37
float sumPt
sum-pt of tracks
Definition: MuonIsolation.h:7
MonitorElement * njets_afterZ_
Definition: EwkMuDQM.h:120
unsigned int nrec
Definition: EwkMuDQM.h:92
MonitorElement * iso2_afterZ_
Definition: EwkMuDQM.h:147
double mtMax_
Definition: EwkMuDQM.h:71
MonitorElement * npvs_before_
Definition: EwkMuDQM.h:157
double ptThrForPhoton_
Definition: EwkMuDQM.h:85
virtual TrackRef innerTrack() const
Definition: Muon.h:48
bool getByToken(EDGetToken token, Handle< PROD > &result) const
Definition: Event.h:519
MonitorElement * dxy1_afterZ_
Definition: EwkMuDQM.h:140
MonitorElement * njets_before_
Definition: EwkMuDQM.h:118
MonitorElement * dxy_before_
Definition: EwkMuDQM.h:103
MonitorElement * leadingjet_eta_afterZ_
Definition: EwkMuDQM.h:126
double metMax_
Definition: EwkMuDQM.h:69
MonitorElement * muoncharge_before_
Definition: EwkMuDQM.h:161
bool isValid() const
Tells whether the vertex is valid.
Definition: Vertex.h:68
edm::EDGetTokenT< reco::BeamSpot > beamSpotTag_
Definition: EwkMuDQM.h:52
double px() const final
x coordinate of momentum vector
MonitorElement * eta2_afterZ_
Definition: EwkMuDQM.h:144
double ptCut_
Definition: EwkMuDQM.h:73
double isoCut03_
Definition: EwkMuDQM.h:65
MonitorElement * npvs_afterZ_
Definition: EwkMuDQM.h:159
MonitorElement * leadingjet_eta_before_
Definition: EwkMuDQM.h:124
double pt() const final
transverse momentum
int charge() const final
electric charge
Definition: LeafCandidate.h:91
bool ev
double eJetMin_
Definition: EwkMuDQM.h:82
MonitorElement * acop_before_
Definition: EwkMuDQM.h:115
MonitorElement * leadingjet_pt_after_
Definition: EwkMuDQM.h:122
MonitorElement * goodewkmuon_before_
Definition: EwkMuDQM.h:105
MonitorElement * eta_after_
Definition: EwkMuDQM.h:102
MonitorElement * muoncharge_afterZ_
Definition: EwkMuDQM.h:163
MonitorElement * pt_before_
Definition: EwkMuDQM.h:99
unsigned int nhlt
Definition: EwkMuDQM.h:94
MonitorElement * dxy2_afterZ_
Definition: EwkMuDQM.h:145
void dqmBeginRun(const edm::Run &, const edm::EventSetup &) override
Definition: EwkMuDQM.cc:116
void Fill(long long x)
bool isTrackerMuon() const override
Definition: Muon.h:273
MonitorElement * leadingjet_pt_before_
Definition: EwkMuDQM.h:121
MonitorElement * goodewkmuon1_afterZ_
Definition: EwkMuDQM.h:141
MonitorElement * iso_before_
Definition: EwkMuDQM.h:107
XYZTLorentzVectorD XYZTLorentzVector
Lorentz vector with cylindrical internal representation using pseudorapidity.
Definition: LorentzVector.h:29
MonitorElement * npvs_after_
Definition: EwkMuDQM.h:158
MonitorElement * goodewkmuon2_afterZ_
Definition: EwkMuDQM.h:146
MonitorElement * njets_after_
Definition: EwkMuDQM.h:119
MonitorElement * ngoodmuons_
Definition: EwkMuDQM.h:166
MonitorElement * n_zselPt2thr_
Definition: EwkMuDQM.h:151
double metMin_
Definition: EwkMuDQM.h:68
Definition: Muon.py:1
MonitorElement * pt2_afterZ_
Definition: EwkMuDQM.h:143
double ptThrForZ2_
Definition: EwkMuDQM.h:77
Definition: Jet.py:1
double et() const final
transverse energy
int nJetMax_
Definition: EwkMuDQM.h:83
bool isGlobalMuon() const override
Definition: Muon.h:272
double pz() const final
z coordinate of momentum vector
Definition: MET.h:42
T sqrt(T t)
Definition: SSEVec.h:18
unsigned int nsel
Definition: EwkMuDQM.h:96
float emEt
ecal sum-Et
Definition: MuonIsolation.h:8
MonitorElement * met_afterZ_
Definition: EwkMuDQM.h:137
double dxyCut_
Definition: EwkMuDQM.h:56
MonitorElement * book1D(Args &&...args)
Definition: DQMStore.h:118
MonitorElement * leadingjet_eta_after_
Definition: EwkMuDQM.h:125
double dimuonMassMin_
Definition: EwkMuDQM.h:79
const int mu
Definition: Constants.h:22
void bookHistograms(DQMStore::IBooker &, edm::Run const &, edm::EventSetup const &) override
Definition: EwkMuDQM.cc:133
bool isCombinedIso_
Definition: EwkMuDQM.h:64
double dimuonMassMax_
Definition: EwkMuDQM.h:80
void analyze(const edm::Event &, const edm::EventSetup &) override
Definition: EwkMuDQM.cc:315
MonitorElement * mt_after_
Definition: EwkMuDQM.h:112
MonitorElement * goodewkmuon_after_
Definition: EwkMuDQM.h:106
MonitorElement * muoncharge_after_
Definition: EwkMuDQM.h:162
MonitorElement * mt_before_
Definition: EwkMuDQM.h:111
bool isNull() const
Checks for null.
Definition: Ref.h:250
#define LogTrace(id)
MonitorElement * eta_before_
Definition: EwkMuDQM.h:101
MonitorElement * iso1_afterZ_
Definition: EwkMuDQM.h:142
bool isRelativeIso_
Definition: EwkMuDQM.h:63
#define M_PI
int prescaleSet(const edm::Event &iEvent, const edm::EventSetup &iSetup)
T value() const
Explicit access to value in case implicit conversion not OK.
Definition: Phi.h:38
HLTPrescaleProvider hltPrescaleProvider_
Definition: EwkMuDQM.h:89
edm::InputTag jetTag_
Definition: EwkMuDQM.h:45
double p() const final
magnitude of momentum vector
int pixelHitsCut_
Definition: EwkMuDQM.h:59
edm::EDGetTokenT< edm::View< reco::Vertex > > vertexTag_
Definition: EwkMuDQM.h:51
MonitorElement * nmuons_
Definition: EwkMuDQM.h:165
double normalizedChi2Cut_
Definition: EwkMuDQM.h:57
void setCurrentFolder(const std::string &fullpath)
Definition: DQMStore.cc:279
edm::InputTag metTag_
Definition: EwkMuDQM.h:44
MonitorElement * pt_after_
Definition: EwkMuDQM.h:100
MonitorElement * iso_after_
Definition: EwkMuDQM.h:108
met
===> hadronic RAZOR
MonitorElement * eta1_afterZ_
Definition: EwkMuDQM.h:139
double py() const final
y coordinate of momentum vector
MonitorElement * ptDiffPM_before_
Definition: EwkMuDQM.h:130
int numberOfMatches(ArbitrationType type=SegmentAndTrackArbitration) const
get number of chambers with matched segments
MonitorElement * pt1_afterZ_
Definition: EwkMuDQM.h:138
std::string const & label() const
Definition: InputTag.h:36
MonitorElement * nph_
Definition: EwkMuDQM.h:169
int trackerHitsCut_
Definition: EwkMuDQM.h:58
double mtMin_
Definition: EwkMuDQM.h:70
unsigned int nz
Definition: EwkMuDQM.h:97
MonitorElement * phPt_
Definition: EwkMuDQM.h:171
double ptThrForZ1_
Definition: EwkMuDQM.h:76
fixed size matrix
HLT enums.
edm::EDGetTokenT< edm::View< reco::Jet > > jetToken_
Definition: EwkMuDQM.h:49
MonitorElement * dxy_after_
Definition: EwkMuDQM.h:104
int muonHitsCut_
Definition: EwkMuDQM.h:60
const Point & position() const
position
Definition: BeamSpot.h:62
void endRun(const edm::Run &, const edm::EventSetup &) override
Definition: EwkMuDQM.cc:313
MonitorElement * met_after_
Definition: EwkMuDQM.h:114
edm::EDGetTokenT< edm::View< reco::Muon > > muonTag_
Definition: EwkMuDQM.h:47
MonitorElement * n_zselPt1thr_
Definition: EwkMuDQM.h:150
unsigned int niso
Definition: EwkMuDQM.h:93
double phi() const final
momentum azimuthal angle
edm::EDGetTokenT< edm::View< reco::MET > > metToken_
Definition: EwkMuDQM.h:48
bool init(const edm::Run &iRun, const edm::EventSetup &iSetup, const std::string &processName, bool &changed)
edm::EDGetTokenT< edm::View< reco::Photon > > phoTag_
Definition: EwkMuDQM.h:50
MonitorElement * dimuonmass_before_
Definition: EwkMuDQM.h:154
const MuonIsolation & isolationR03() const
Definition: Muon.h:162
Definition: Run.h:43
double acopCut_
Definition: EwkMuDQM.h:67
unsigned int nmet
Definition: EwkMuDQM.h:95
bool isValidHltConfig_
Definition: EwkMuDQM.h:88
virtual TrackRef globalTrack() const
reference to Track reconstructed in both tracked and muon detector
Definition: Muon.h:54
MonitorElement * leadingjet_pt_afterZ_
Definition: EwkMuDQM.h:123
MonitorElement * acop_after_
Definition: EwkMuDQM.h:116