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