CMS 3D CMS Logo

EfficiencyAnalyzer.cc
Go to the documentation of this file.
1 /* This Class Header */
3 
4 /* Collaborating Class Header */
15 
16 #include "TLorentzVector.h"
17 #include "TFile.h"
18 #include <vector>
19 #include <cmath>
20 #include <algorithm>
21 
22 /* C++ Headers */
23 #include <iostream>
24 #include <fstream>
25 #include <cmath>
26 using namespace std;
27 using namespace edm;
28 
30  parameters = pSet;
31 
32  theService = new MuonServiceProxy(parameters.getParameter<ParameterSet>("ServiceParameters"));
33 
34  // DATA
35  theMuonCollectionLabel_ = consumes<edm::View<reco::Muon> >(parameters.getParameter<edm::InputTag>("MuonCollection"));
36  theTrackCollectionLabel_ = consumes<reco::TrackCollection>(parameters.getParameter<edm::InputTag>("TrackCollection"));
37  theVertexLabel_ = consumes<reco::VertexCollection>(parameters.getParameter<edm::InputTag>("VertexLabel"));
38  theBeamSpotLabel_ = mayConsume<reco::BeamSpot>(parameters.getParameter<edm::InputTag>("BeamSpotLabel"));
39 
40  //Vertex requirements
41  doPVCheck_ = parameters.getParameter<bool>("doPrimaryVertexCheck");
42 
43  ptBin_ = parameters.getParameter<int>("ptBin");
44  ptMin_ = parameters.getParameter<double>("ptMin");
45  ptMax_ = parameters.getParameter<double>("ptMax");
46 
47  etaBin_ = parameters.getParameter<int>("etaBin");
48  etaMin_ = parameters.getParameter<double>("etaMin");
49  etaMax_ = parameters.getParameter<double>("etaMax");
50 
51  phiBin_ = parameters.getParameter<int>("phiBin");
52  phiMin_ = parameters.getParameter<double>("phiMin");
53  phiMax_ = parameters.getParameter<double>("phiMax");
54 
55  vtxBin_ = parameters.getParameter<int>("vtxBin");
56  vtxMin_ = parameters.getParameter<double>("vtxMin");
57  vtxMax_ = parameters.getParameter<double>("vtxMax");
58 
59  ID_ = parameters.getParameter<string>("ID");
60  theFolder = parameters.getParameter<string>("folder");
61 }
62 
64 
66  edm::Run const& /*iRun*/,
67  edm::EventSetup const& /* iSetup */) {
68  ibooker.cd();
69  ibooker.setCurrentFolder(theFolder + ID_);
70 
71  h_allProbes_pt = ibooker.book1D("allProbes_pt", "All Probes Pt", ptBin_, ptMin_, ptMax_);
72  h_allProbes_inner_pt = ibooker.book1D("allProbes_inner_pt", "All Probes inner Pt", ptBin_, ptMin_, ptMax_);
73  h_allProbes_inner_eta = ibooker.book1D("allProbes_inner_eta", "All Probes inner eta", etaBin_, etaMin_, etaMax_);
74  h_allProbes_inner_phi = ibooker.book1D("allProbes_inner_phi", "All Probes inner phi", phiBin_, phiMin_, phiMax_);
75  h_allProbes_EB_pt = ibooker.book1D("allProbes_EB_pt", "Barrel: all Probes Pt", ptBin_, ptMin_, ptMax_);
76  h_allProbes_EE_pt = ibooker.book1D("allProbes_EE_pt", "Endcap: all Probes Pt", ptBin_, ptMin_, ptMax_);
77  h_allProbes_eta = ibooker.book1D("allProbes_eta", "All Probes Eta", etaBin_, etaMin_, etaMax_);
78  h_allProbes_hp_eta = ibooker.book1D("allProbes_hp_eta", "High Pt all Probes Eta", etaBin_, etaMin_, etaMax_);
79  h_allProbes_phi = ibooker.book1D("allProbes_phi", "All Probes Phi", phiBin_, phiMin_, phiMax_);
80 
81  h_allProbes_ID_pt = ibooker.book1D("allProbes_ID_pt", "All ID Probes Pt", ptBin_, ptMin_, ptMax_);
82  h_allProbes_EB_ID_pt = ibooker.book1D("allProbes_EB_ID_pt", "Barrel: all ID Probes Pt", ptBin_, ptMin_, ptMax_);
83  h_allProbes_EE_ID_pt = ibooker.book1D("allProbes_EE_ID_pt", "Endcap: all ID Probes Pt", ptBin_, ptMin_, ptMax_);
84  h_allProbes_ID_nVtx = ibooker.book1D("allProbes_ID_nVtx", "All Probes (ID) nVtx", vtxBin_, vtxMin_, vtxMax_);
85  h_allProbes_EB_ID_nVtx =
86  ibooker.book1D("allProbes_EB_ID_nVtx", "Barrel: All Probes (ID) nVtx", vtxBin_, vtxMin_, vtxMax_);
87  h_allProbes_EE_ID_nVtx =
88  ibooker.book1D("allProbes_EE_ID_nVtx", "Endcap: All Probes (ID) nVtx", vtxBin_, vtxMin_, vtxMax_);
89 
90  h_passProbes_ID_pt = ibooker.book1D("passProbes_ID_pt", "ID Passing Probes Pt", ptBin_, ptMin_, ptMax_);
91  h_passProbes_ID_inner_pt =
92  ibooker.book1D("passProbes_ID_inner_pt", "ID Passing Probes inner Pt", ptBin_, ptMin_, ptMax_);
93  h_passProbes_ID_inner_eta =
94  ibooker.book1D("passProbes_ID_inner_eta", "ID Passing Probes inner eta", etaBin_, etaMin_, etaMax_);
95  h_passProbes_ID_inner_phi =
96  ibooker.book1D("passProbes_ID_inner_phi", "ID Passing Probes inner phi", phiBin_, phiMin_, phiMax_);
97  h_passProbes_ID_EB_pt = ibooker.book1D("passProbes_ID_EB_pt", "Barrel: ID Passing Probes Pt", ptBin_, ptMin_, ptMax_);
98  h_passProbes_ID_EE_pt = ibooker.book1D("passProbes_ID_EE_pt", "Endcap: ID Passing Probes Pt", ptBin_, ptMin_, ptMax_);
99  h_passProbes_ID_eta = ibooker.book1D("passProbes_ID_eta", "ID Passing Probes #eta", etaBin_, etaMin_, etaMax_);
100  h_passProbes_ID_hp_eta =
101  ibooker.book1D("passProbes_ID_hp_eta", "High Pt ID Passing Probes #eta", etaBin_, etaMin_, etaMax_);
102  h_passProbes_ID_phi = ibooker.book1D("passProbes_ID_phi", "ID Passing Probes #phi", phiBin_, phiMin_, phiMax_);
103 
104  h_passProbes_detIsoID_pt =
105  ibooker.book1D("passProbes_detIsoID_pt", "detIsoID Passing Probes Pt", ptBin_, ptMin_, ptMax_);
106  h_passProbes_EB_detIsoID_pt =
107  ibooker.book1D("passProbes_EB_detIsoID_pt", "Barrel: detIsoID Passing Probes Pt", ptBin_, ptMin_, ptMax_);
108  h_passProbes_EE_detIsoID_pt =
109  ibooker.book1D("passProbes_EE_detIsoID_pt", "Endcap: detIsoID Passing Probes Pt", ptBin_, ptMin_, ptMax_);
110 
111  h_passProbes_pfIsoID_pt =
112  ibooker.book1D("passProbes_pfIsoID_pt", "pfIsoID Passing Probes Pt", ptBin_, ptMin_, ptMax_);
113  h_passProbes_EB_pfIsoID_pt =
114  ibooker.book1D("passProbes_EB_pfIsoID_pt", "Barrel: pfIsoID Passing Probes Pt", ptBin_, ptMin_, ptMax_);
115  h_passProbes_EE_pfIsoID_pt =
116  ibooker.book1D("passProbes_EE_pfIsoID_pt", "Endcap: pfIsoID Passing Probes Pt", ptBin_, ptMin_, ptMax_);
117 
118  h_passProbes_detIsoID_nVtx =
119  ibooker.book1D("passProbes_detIsoID_nVtx", "detIsoID Passing Probes nVtx (R03)", vtxBin_, vtxMin_, vtxMax_);
120  h_passProbes_pfIsoID_nVtx =
121  ibooker.book1D("passProbes_pfIsoID_nVtx", "pfIsoID Passing Probes nVtx (R04)", vtxBin_, vtxMin_, vtxMax_);
122  h_passProbes_EB_detIsoID_nVtx = ibooker.book1D(
123  "passProbes_EB_detIsoID_nVtx", "Barrel: detIsoID Passing Probes nVtx (R03)", vtxBin_, vtxMin_, vtxMax_);
124  h_passProbes_EE_detIsoID_nVtx = ibooker.book1D(
125  "passProbes_EE_detIsoID_nVtx", "Endcap: detIsoID Passing Probes nVtx (R03)", vtxBin_, vtxMin_, vtxMax_);
126  h_passProbes_EB_pfIsoID_nVtx = ibooker.book1D(
127  "passProbes_EB_pfIsoID_nVtx", "Barrel: pfIsoID Passing Probes nVtx (R04)", vtxBin_, vtxMin_, vtxMax_);
128  h_passProbes_EE_pfIsoID_nVtx = ibooker.book1D(
129  "passProbes_EE_pfIsoID_nVtx", "Endcap: pfIsoID Passing Probes nVtx (R04)", vtxBin_, vtxMin_, vtxMax_);
130 
131  // Apply deltaBeta PU corrections to the PF isolation eficiencies.
132 
133  h_passProbes_pfIsodBID_pt = ibooker.book1D(
134  "passProbes_pfIsodBID_pt", "pfIsoID Passing Probes Pt (deltaB PU correction)", ptBin_, ptMin_, ptMax_);
135  h_passProbes_EB_pfIsodBID_pt = ibooker.book1D(
136  "passProbes_EB_pfIsodBID_pt", "Barrel: pfIsoID Passing Probes Pt (deltaB PU correction)", ptBin_, ptMin_, ptMax_);
137  h_passProbes_EE_pfIsodBID_pt = ibooker.book1D(
138  "passProbes_EE_pfIsodBID_pt", "Endcap: pfIsoID Passing Probes Pt (deltaB PU correction)", ptBin_, ptMin_, ptMax_);
139  h_passProbes_pfIsodBID_nVtx = ibooker.book1D("passProbes_pfIsodBID_nVtx",
140  "pfIsoID Passing Probes nVtx (R04) (deltaB PU correction)",
141  vtxBin_,
142  vtxMin_,
143  vtxMax_);
144  h_passProbes_EB_pfIsodBID_nVtx = ibooker.book1D("passProbes_EB_pfIsodBID_nVtx",
145  "Barrel: pfIsoID Passing Probes nVtx (R04) (deltaB PU correction)",
146  vtxBin_,
147  vtxMin_,
148  vtxMax_);
149  h_passProbes_EE_pfIsodBID_nVtx = ibooker.book1D("passProbes_EE_pfIsodBID_nVtx",
150  "Endcap: pfIsoID Passing Probes nVtx (R04) (deltaB PU correction)",
151  vtxBin_,
152  vtxMin_,
153  vtxMax_);
154 
155 #ifdef DEBUG
156  cout << "[EfficiencyAnalyzer] Parameters initialization DONE" << endl;
157 #endif
158 }
159 
161  LogTrace(metname) << "[EfficiencyAnalyzer] Analyze the mu in different eta regions";
162  theService->update(iSetup);
163  // ==========================================================
164  // BEGIN READ DATA:
165  // Muon information
167  iEvent.getByToken(theMuonCollectionLabel_, muons);
168 
169  // Tracks information
171  iEvent.getByToken(theTrackCollectionLabel_, tracks);
172 
173  //Vertex information
175  iEvent.getByToken(theVertexLabel_, vertex);
176  // END READ DATA
177  // ==========================================================
178 
179  _numPV = 0;
180  bool bPrimaryVertex = true;
181  if (doPVCheck_) {
182  bPrimaryVertex = false;
183 
184  if (!vertex.isValid()) {
185  LogTrace(metname) << "[EfficiencyAnalyzer] Could not find vertex collection" << std::endl;
186  bPrimaryVertex = false;
187  }
188 
189  if (vertex.isValid()) {
190  const reco::VertexCollection& vertexCollection = *(vertex.product());
191  int vertex_number = vertexCollection.size();
192 
193  reco::VertexCollection::const_iterator v = vertexCollection.begin();
194  for (; v != vertexCollection.end(); ++v) {
195  double vertex_chi2 = v->normalizedChi2();
196  double vertex_ndof = v->ndof();
197  bool fakeVtx = v->isFake();
198  double vertex_Z = v->z();
199 
200  if (!fakeVtx && vertex_number >= 1 && vertex_ndof > 4 && vertex_chi2 < 999 && fabs(vertex_Z) < 24.) {
201  bPrimaryVertex = true;
202  ++_numPV;
203  }
204  }
205  }
206  }
207 
208  // =================================================================================
209  // Look for the Primary Vertex (and use the BeamSpot instead, if you can't find it):
210  reco::Vertex::Point posVtx;
211  reco::Vertex::Error errVtx;
212  unsigned int theIndexOfThePrimaryVertex = 999.;
213  if (vertex.isValid()) {
214  for (unsigned int ind = 0; ind < vertex->size(); ++ind) {
215  if ((*vertex)[ind].isValid() && !((*vertex)[ind].isFake())) {
216  theIndexOfThePrimaryVertex = ind;
217  break;
218  }
219  }
220  }
221 
222  if (theIndexOfThePrimaryVertex < 100) {
223  posVtx = ((*vertex)[theIndexOfThePrimaryVertex]).position();
224  errVtx = ((*vertex)[theIndexOfThePrimaryVertex]).error();
225  } else {
226  LogInfo("RecoMuonValidator") << "reco::PrimaryVertex not found, use BeamSpot position instead\n";
227 
228  edm::Handle<reco::BeamSpot> recoBeamSpotHandle;
229  iEvent.getByToken(theBeamSpotLabel_, recoBeamSpotHandle);
230  reco::BeamSpot bs = *recoBeamSpotHandle;
231 
232  posVtx = bs.position();
233  errVtx(0, 0) = bs.BeamWidthX();
234  errVtx(1, 1) = bs.BeamWidthY();
235  errVtx(2, 2) = bs.sigmaZ();
236  }
237 
238  const reco::Vertex thePrimaryVertex(posVtx, errVtx);
239  // ==========================================================
240 
241  if (!muons.isValid())
242  return;
243 
244  // Loop on muon collection
245  TLorentzVector Mu1, Mu2;
246 
247  bool isMB = false;
248  bool isME = false;
249 
250  for (edm::View<reco::Muon>::const_iterator muon1 = muons->begin(); muon1 != muons->end(); ++muon1) {
251  LogTrace(metname) << "[EfficiencyAnalyzer] loop over first muons" << endl;
252 
253  //--- Define combined isolation
254  reco::MuonIsolation Iso_muon = muon1->isolationR03();
255  float combIso = (Iso_muon.emEt + Iso_muon.hadEt + Iso_muon.sumPt);
256 
257  //--- Is Global Muon
258  if (!muon1->isGlobalMuon())
259  continue;
260 
261  // get the track combinig the information from both the Tracker and the Spectrometer
262  reco::TrackRef recoCombinedGlbTrack1 = muon1->combinedMuon();
263  float muPt1 = recoCombinedGlbTrack1->pt();
264  Mu1.SetPxPyPzE(recoCombinedGlbTrack1->px(),
265  recoCombinedGlbTrack1->py(),
266  recoCombinedGlbTrack1->pz(),
267  recoCombinedGlbTrack1->p());
268 
269  //--- Define if it is a tight muon
270  // Change the Tight muon definition by using the implemented method in: MuonSelectors.cc
271  if (ID_ == "Loose" && !muon::isLooseMuon(*muon1))
272  continue;
273  if (ID_ == "Medium" && !muon::isMediumMuon(*muon1))
274  continue;
275  if (ID_ == "Tight" && !muon::isTightMuon(*muon1, thePrimaryVertex))
276  continue;
277 
278  //-- is isolated muon
279  if (muPt1 <= 15)
280  continue;
281  if (combIso / muPt1 > 0.1)
282  continue;
283 
284  for (edm::View<reco::Muon>::const_iterator muon2 = muons->begin(); muon2 != muons->end(); ++muon2) {
285  LogTrace(metname) << "[EfficiencyAnalyzer] loop over second muon" << endl;
286  if (muon2 == muon1)
287  continue;
288 
289  if (muon2->eta() < 1.479)
290  isMB = true;
291  if (muon2->eta() >= 1.479)
292  isME = true;
293 
294  //--> should we apply track quality cuts???
295  Mu2.SetPxPyPzE(muon2->px(), muon2->py(), muon2->pz(), muon2->p());
296 
297  float Minv = (Mu1 + Mu2).M();
298  if (!muon2->isTrackerMuon())
299  continue;
300  if (muon2->pt() < 5)
301  continue;
302  if ((muon1->charge()) * (muon2->charge()) > 0)
303  continue;
304  if (Minv < 70 || Minv > 110)
305  continue;
306 
307  h_allProbes_pt->Fill(muon2->pt());
308  h_allProbes_eta->Fill(muon2->eta());
309  h_allProbes_phi->Fill(muon2->phi());
310  if (muon2->innerTrack()->extra().isAvailable()) {
311  h_allProbes_inner_pt->Fill(muon2->innerTrack()->innerMomentum().Rho());
312  h_allProbes_inner_eta->Fill(muon2->innerTrack()->innerPosition().Eta());
313  h_allProbes_inner_phi->Fill(muon2->innerTrack()->innerPosition().Phi());
314  }
315  if (isMB)
316  h_allProbes_EB_pt->Fill(muon2->pt());
317  if (isME)
318  h_allProbes_EE_pt->Fill(muon2->pt());
319  if (muon2->pt() > 20)
320  h_allProbes_hp_eta->Fill(muon2->eta());
321 
322  // Probes passing the tight muon criteria
323  if (ID_ == "Loose" && !muon::isLooseMuon(*muon2))
324  continue;
325  if (ID_ == "Medium" && !muon::isMediumMuon(*muon2))
326  continue;
327  if (ID_ == "Tight" && !muon::isTightMuon(*muon2, thePrimaryVertex))
328  continue;
329 
330  h_passProbes_ID_pt->Fill(muon2->pt());
331  h_passProbes_ID_eta->Fill(muon2->eta());
332  h_passProbes_ID_phi->Fill(muon2->phi());
333  if (muon2->innerTrack()->extra().isAvailable()) {
334  h_passProbes_ID_inner_pt->Fill(muon2->innerTrack()->innerMomentum().Rho());
335  h_passProbes_ID_inner_eta->Fill(muon2->innerTrack()->innerPosition().Eta());
336  h_passProbes_ID_inner_phi->Fill(muon2->innerTrack()->innerPosition().Phi());
337  }
338 
339  if (isMB)
340  h_passProbes_ID_EB_pt->Fill(muon2->pt());
341  if (isME)
342  h_passProbes_ID_EE_pt->Fill(muon2->pt());
343  if (muon2->pt() > 20)
344  h_passProbes_ID_hp_eta->Fill(muon2->eta());
345 
346  h_allProbes_ID_pt->Fill(muon2->pt());
347  if (isMB)
348  h_allProbes_EB_ID_pt->Fill(muon2->pt());
349  if (isME)
350  h_allProbes_EE_ID_pt->Fill(muon2->pt());
351 
352  //------- For PU monitoring -------//
353  if (bPrimaryVertex)
354  h_allProbes_ID_nVtx->Fill(_numPV);
355  if (bPrimaryVertex && isMB)
356  h_allProbes_EB_ID_nVtx->Fill(_numPV);
357  if (bPrimaryVertex && isME)
358  h_allProbes_EE_ID_nVtx->Fill(_numPV);
359 
360  //-- Define det relative isolation
361  float tkIso = muon2->isolationR03().sumPt;
362  float emIso = muon2->isolationR03().emEt;
363  float hadIso = muon2->isolationR03().hadEt + muon2->isolationR03().hoEt;
364  float relDetIso = (tkIso + emIso + hadIso) / (muon2->pt());
365 
366  if (relDetIso < 0.05) {
367  h_passProbes_detIsoID_pt->Fill(muon2->pt());
368  if (isMB)
369  h_passProbes_EB_detIsoID_pt->Fill(muon2->pt());
370  if (isME)
371  h_passProbes_EE_detIsoID_pt->Fill(muon2->pt());
372 
373  if (bPrimaryVertex)
374  h_passProbes_detIsoID_nVtx->Fill(_numPV);
375  if (bPrimaryVertex && isMB)
376  h_passProbes_EB_detIsoID_nVtx->Fill(_numPV);
377  if (bPrimaryVertex && isME)
378  h_passProbes_EE_detIsoID_nVtx->Fill(_numPV);
379  }
380 
381  //-- Define PF relative isolation
382  float chargedIso = muon2->pfIsolationR04().sumChargedHadronPt;
383  float neutralIso = muon2->pfIsolationR04().sumNeutralHadronEt;
384  float photonIso = muon2->pfIsolationR04().sumPhotonEt;
385  float relPFIso = (chargedIso + neutralIso + photonIso) / (muon2->pt());
386 
387  float pu = muon2->pfIsolationR04().sumPUPt;
388  float neutralphotonPUCorrected = std::max(0.0, (neutralIso + photonIso - 0.5 * pu));
389  float relPFIsoPUCorrected = (chargedIso + neutralphotonPUCorrected) / (muon2->pt());
390 
391  if (relPFIso < 0.12) {
392  h_passProbes_pfIsoID_pt->Fill(muon2->pt());
393  if (isMB)
394  h_passProbes_EB_pfIsoID_pt->Fill(muon2->pt());
395  if (isME)
396  h_passProbes_EE_pfIsoID_pt->Fill(muon2->pt());
397 
398  if (bPrimaryVertex)
399  h_passProbes_pfIsoID_nVtx->Fill(_numPV);
400  if (bPrimaryVertex && isMB)
401  h_passProbes_EB_pfIsoID_nVtx->Fill(_numPV);
402  if (bPrimaryVertex && isME)
403  h_passProbes_EE_pfIsoID_nVtx->Fill(_numPV);
404  }
405 
406  // Apply deltaBeta PU corrections to the PF isolation eficiencies.
407  if (relPFIsoPUCorrected < 0.12) {
408  h_passProbes_pfIsodBID_pt->Fill(muon2->pt());
409  if (isMB)
410  h_passProbes_EB_pfIsodBID_pt->Fill(muon2->pt());
411  if (isME)
412  h_passProbes_EE_pfIsodBID_pt->Fill(muon2->pt());
413 
414  if (bPrimaryVertex)
415  h_passProbes_pfIsodBID_nVtx->Fill(_numPV);
416  if (bPrimaryVertex && isMB)
417  h_passProbes_EB_pfIsodBID_nVtx->Fill(_numPV);
418  if (bPrimaryVertex && isME)
419  h_passProbes_EE_pfIsodBID_nVtx->Fill(_numPV);
420  }
421  }
422  }
423 }
MonitorElement * book1D(TString const &name, TString const &title, int const nchX, double const lowX, double const highX)
Definition: DQMStore.cc:239
float hadEt
hcal sum-Et
Definition: MuonIsolation.h:8
float sumPt
sum-pt of tracks
Definition: MuonIsolation.h:6
bool isMediumMuon(const reco::Muon &, bool run2016_hip_mitigation=false)
bool getByToken(EDGetToken token, Handle< PROD > &result) const
Definition: Event.h:525
const std::string metname
void setCurrentFolder(std::string const &fullpath)
Definition: DQMStore.cc:418
math::Error< dimension >::type Error
covariance error matrix (3x3)
Definition: Vertex.h:43
std::vector< Vertex > VertexCollection
collection of Vertex objects
Definition: VertexFwd.h:9
bool isLooseMuon(const reco::Muon &)
void bookHistograms(DQMStore::IBooker &, edm::Run const &, edm::EventSetup const &) override
int iEvent
Definition: GenABIO.cc:224
neutralIso
Definition: taus_cff.py:75
float emEt
ecal sum-Et
Definition: MuonIsolation.h:7
math::XYZPoint Point
point in the space
Definition: Vertex.h:39
double BeamWidthX() const
beam width X
Definition: BeamSpot.h:82
bool isValid() const
Definition: HandleBase.h:70
#define LogTrace(id)
~EfficiencyAnalyzer() override
T const * product() const
Definition: Handle.h:69
double sigmaZ() const
sigma z
Definition: BeamSpot.h:76
double BeamWidthY() const
beam width Y
Definition: BeamSpot.h:84
HLT enums.
boost::indirect_iterator< typename seq_t::const_iterator > const_iterator
Definition: View.h:86
static int position[264][3]
Definition: ReadPGInfo.cc:289
const Point & position() const
position
Definition: BeamSpot.h:59
bool isTightMuon(const reco::Muon &, const reco::Vertex &)
EfficiencyAnalyzer(const edm::ParameterSet &pset)
chargedIso
Definition: taus_cff.py:74
Definition: Run.h:45
void analyze(const edm::Event &event, const edm::EventSetup &eventSetup) override