CMS 3D CMS Logo

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