CMS 3D CMS Logo

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