CMS 3D CMS Logo

MuonVPlusJetsIDSelectionFunctor.h
Go to the documentation of this file.
1 #ifndef PhysicsTools_PatUtils_interface_MuonVPlusJetsIDSelectionFunctor_h
2 #define PhysicsTools_PatUtils_interface_MuonVPlusJetsIDSelectionFunctor_h
3 
4 #ifndef __GCCXML__
6 #endif
11 
14 
15 #include <iostream>
16 
17 class MuonVPlusJetsIDSelectionFunctor : public Selector<pat::Muon> {
18 public: // interface
19  bool verbose_;
20 
22 
24 
25 #ifndef __GCCXML__
29  pvSrcToken_ = iC.consumes<std::vector<reco::Vertex> >(pvSrc_);
30  }
31 #endif
32 
34  verbose_ = false;
35 
36  std::string versionStr = parameters.getParameter<std::string>("version");
37 
39 
40  if (versionStr == "SUMMER08") {
41  version = SUMMER08;
42  } else if (versionStr == "FIRSTDATA") {
44  } else if (versionStr == "SPRING10") {
45  version = SPRING10;
46  } else if (versionStr == "FALL10") {
47  version = FALL10;
48  if (verbose_)
49  std::cout << "\nMUON SELECTION - you are using FALL10 Selection" << std::endl;
50  } else if (versionStr == "KITQCD") {
51  version = KITQCD;
52  if (verbose_)
53  std::cout << "\nMUON SELECTION - you are using KITQCD Selection" << std::endl;
54  } else {
55  throw cms::Exception("InvalidInput")
56  << "Expect version to be one of SUMMER08, FIRSTDATA, SPRING10, FALL10" << std::endl;
57  }
58 
60  parameters.getParameter<double>("Chi2"),
61  parameters.getParameter<double>("D0"),
62  parameters.getParameter<double>("ED0"),
63  parameters.getParameter<double>("SD0"),
64  parameters.getParameter<int>("NHits"),
65  parameters.getParameter<int>("NValMuHits"),
66  parameters.getParameter<double>("ECalVeto"),
67  parameters.getParameter<double>("HCalVeto"),
68  parameters.getParameter<double>("RelIso"),
69  parameters.getParameter<double>("LepZ"),
70  parameters.getParameter<int>("nPixelHits"),
71  parameters.getParameter<int>("nMatchedStations"));
72  if (parameters.exists("cutsToIgnore"))
73  setIgnoredCuts(parameters.getParameter<std::vector<std::string> >("cutsToIgnore"));
74 
76 
77  recalcDBFromBSp_ = parameters.getParameter<bool>("RecalcFromBeamSpot");
78  pvSrc_ = parameters.getParameter<edm::InputTag>("pvSrc");
79  }
80 
82  double chi2 = 10.0,
83  double d0 = 0.2,
84  double ed0 = 999.0,
85  double sd0 = 999.0,
86  int nhits = 11,
87  int nValidMuonHits = 0,
88  double ecalveto = 4.0,
89  double hcalveto = 6.0,
90  double reliso = 0.05,
91  double maxLepZ = 1.0,
92  int minPixelHits = 1,
93  int minNMatches = 1)
96  chi2,
97  d0,
98  ed0,
99  sd0,
100  nhits,
101  nValidMuonHits,
102  ecalveto,
103  hcalveto,
104  reliso,
105  maxLepZ,
106  minPixelHits,
107  minNMatches);
108 
110  }
111 
113  double chi2 = 10.0,
114  double d0 = 999.0,
115  double ed0 = 999.0,
116  double sd0 = 3.0,
117  int nhits = 11,
118  int nValidMuonHits = 0,
119  double ecalveto = 4.0,
120  double hcalveto = 6.0,
121  double reliso = 0.05,
122  double maxLepZ = 1.0,
123  int minPixelHits = 1,
124  int minNMatches = 1) {
125  version_ = version;
126 
127  push_back("Chi2", chi2);
128  push_back("D0", d0);
129  push_back("ED0", ed0);
130  push_back("SD0", sd0);
131  push_back("NHits", nhits);
132  push_back("NValMuHits", nValidMuonHits);
133  push_back("ECalVeto", ecalveto);
134  push_back("HCalVeto", hcalveto);
135  push_back("RelIso", reliso);
136  push_back("LepZ", maxLepZ);
137  push_back("nPixelHits", minPixelHits);
138  push_back("nMatchedStations", minNMatches);
139 
140  set("Chi2");
141  set("D0");
142  set("ED0");
143  set("SD0");
144  set("NHits");
145  set("NValMuHits");
146  set("ECalVeto");
147  set("HCalVeto");
148  set("RelIso");
149  set("LepZ");
150  set("nPixelHits");
151  set("nMatchedStations");
152 
153  indexChi2_ = index_type(&bits_, "Chi2");
154  indexD0_ = index_type(&bits_, "D0");
155  indexED0_ = index_type(&bits_, "ED0");
156  indexSD0_ = index_type(&bits_, "SD0");
157  indexNHits_ = index_type(&bits_, "NHits");
158  indexNValMuHits_ = index_type(&bits_, "NValMuHits");
159  indexECalVeto_ = index_type(&bits_, "ECalVeto");
160  indexHCalVeto_ = index_type(&bits_, "HCalVeto");
161  indexRelIso_ = index_type(&bits_, "RelIso");
162  indexLepZ_ = index_type(&bits_, "LepZ");
163  indexPixHits_ = index_type(&bits_, "nPixelHits");
164  indexStations_ = index_type(&bits_, "nMatchedStations");
165 
166  if (version == FALL10) {
167  set("ED0", false);
168  set("SD0", false);
169  set("ECalVeto", false);
170  set("HCalVeto", false);
171  } else if (version == SPRING10) {
172  set("ED0", false);
173  set("SD0", false);
174  set("ECalVeto", false);
175  set("HCalVeto", false);
176  set("LepZ", false);
177  set("nPixelHits", false);
178  set("nMatchedStations", false);
179  } else if (version_ == FIRSTDATA) {
180  set("D0", false);
181  set("ED0", false);
182  set("NValMuHits", false);
183  set("LepZ", false);
184  set("nPixelHits", false);
185  set("nMatchedStations", false);
186  } else if (version == SUMMER08) {
187  set("SD0", false);
188  set("NValMuHits", false);
189  set("LepZ", false);
190  set("nPixelHits", false);
191  set("nMatchedStations", false);
192  }
193  }
194 
195  // Allow for multiple definitions of the cuts.
196  bool operator()(const pat::Muon& muon, edm::EventBase const& event, pat::strbitset& ret) override {
197  if (version_ == FALL10)
198  return fall10Cuts(muon, event, ret);
199  else if (version_ == SPRING10)
200  return spring10Cuts(muon, event, ret);
201  else if (version_ == SUMMER08)
202  return summer08Cuts(muon, ret);
203  else if (version_ == FIRSTDATA)
204  return firstDataCuts(muon, ret);
205  else if (version_ == KITQCD) {
206  if (verbose_)
207  std::cout << "Calling KIT selection method" << std::endl;
208  return kitQCDCuts(muon, event, ret);
209  } else {
210  return false;
211  }
212  }
213 
214  // For compatibility with older versions.
215  bool operator()(const pat::Muon& muon, pat::strbitset& ret) override {
216  if (version_ == SPRING10 || version_ == FALL10)
217  throw cms::Exception("LogicError") << "MuonVPlusJetsSelectionFunctor SPRING10 and FALL10 versions needs the "
218  "event! Call operator()(muon,event,ret)"
219  << std::endl;
220 
221  else if (version_ == SUMMER08)
222  return summer08Cuts(muon, ret);
223  else if (version_ == FIRSTDATA)
224  return firstDataCuts(muon, ret);
225  else {
226  return false;
227  }
228  }
229 
231 
232  // cuts based on craft 08 analysis.
234  ret.set(false);
235 
236  double norm_chi2 = muon.normChi2();
237  double corr_d0 = muon.dB();
238  int nhits = static_cast<int>(muon.numberOfValidHits());
239 
240  double ecalVeto = muon.isolationR03().emVetoEt;
241  double hcalVeto = muon.isolationR03().hadVetoEt;
242 
243  double hcalIso = muon.hcalIso();
244  double ecalIso = muon.ecalIso();
245  double trkIso = muon.trackIso();
246  double pt = muon.pt();
247 
248  double relIso = (ecalIso + hcalIso + trkIso) / pt;
249 
250  if (norm_chi2 < cut(indexChi2_, double()) || ignoreCut(indexChi2_))
252  if (fabs(corr_d0) < cut(indexD0_, double()) || ignoreCut(indexD0_))
253  passCut(ret, indexD0_);
254  if (nhits >= cut(indexNHits_, int()) || ignoreCut(indexNHits_))
256  if (hcalVeto < cut(indexHCalVeto_, double()) || ignoreCut(indexHCalVeto_))
258  if (ecalVeto < cut(indexECalVeto_, double()) || ignoreCut(indexECalVeto_))
260  if (relIso < cut(indexRelIso_, double()) || ignoreCut(indexRelIso_))
262 
263  setIgnored(ret);
264 
265  return (bool)ret;
266  }
267 
268  // cuts based on craft 08 analysis.
270  ret.set(false);
271 
272  double norm_chi2 = muon.normChi2();
273  double corr_d0 = muon.dB();
274  double corr_ed0 = muon.edB();
275  double corr_sd0 = (corr_ed0 > 0.000000001) ? corr_d0 / corr_ed0 : 999.0;
276  int nhits = static_cast<int>(muon.numberOfValidHits());
277 
278  double ecalVeto = muon.isolationR03().emVetoEt;
279  double hcalVeto = muon.isolationR03().hadVetoEt;
280 
281  double hcalIso = muon.hcalIso();
282  double ecalIso = muon.ecalIso();
283  double trkIso = muon.trackIso();
284  double pt = muon.pt();
285 
286  double relIso = (ecalIso + hcalIso + trkIso) / pt;
287 
288  if (norm_chi2 < cut(indexChi2_, double()) || ignoreCut(indexChi2_))
290  if (fabs(corr_d0) < cut(indexD0_, double()) || ignoreCut(indexD0_))
291  passCut(ret, indexD0_);
292  if (fabs(corr_ed0) < cut(indexED0_, double()) || ignoreCut(indexED0_))
294  if (fabs(corr_sd0) < cut(indexSD0_, double()) || ignoreCut(indexSD0_))
296  if (nhits >= cut(indexNHits_, int()) || ignoreCut(indexNHits_))
298  if (hcalVeto < cut(indexHCalVeto_, double()) || ignoreCut(indexHCalVeto_))
300  if (ecalVeto < cut(indexECalVeto_, double()) || ignoreCut(indexECalVeto_))
302  if (relIso < cut(indexRelIso_, double()) || ignoreCut(indexRelIso_))
304 
305  setIgnored(ret);
306 
307  return (bool)ret;
308  }
309 
310  // cuts based on top group L+J synchronization exercise
312  ret.set(false);
313 
314  double norm_chi2 = muon.normChi2();
315  double corr_d0 = muon.dB();
316  double corr_ed0 = muon.edB();
317  double corr_sd0 = (corr_ed0 > 0.000000001) ? corr_d0 / corr_ed0 : 999.0;
318 
319  //If required, recalculate the impact parameter using the beam spot
320  if (recalcDBFromBSp_) {
321  //Get the beam spot
322  reco::TrackBase::Point beamPoint(0, 0, 0);
324  edm::Handle<reco::BeamSpot> beamSpotHandle;
325  event.getByLabel(beamLineSrc_, beamSpotHandle);
326 
327  if (beamSpotHandle.isValid()) {
328  beamSpot = *beamSpotHandle;
329  } else {
330  edm::LogError("DataNotAvailable")
331  << "No beam spot available from EventSetup, not adding high level selection \n";
332  }
333  beamPoint = reco::TrackBase::Point(beamSpot.x0(), beamSpot.y0(), beamSpot.z0());
334 
335  //Use the beamspot to correct the impact parameter and uncertainty
336  reco::TrackRef innerTrack = muon.innerTrack();
337  if (innerTrack.isNonnull() && innerTrack.isAvailable()) {
338  corr_d0 = -1.0 * innerTrack->dxy(beamPoint);
339  corr_ed0 =
340  sqrt(innerTrack->d0Error() * innerTrack->d0Error() + 0.5 * beamSpot.BeamWidthX() * beamSpot.BeamWidthX() +
341  0.5 * beamSpot.BeamWidthY() * beamSpot.BeamWidthY());
342  corr_sd0 = (corr_ed0 > 0.000000001) ? corr_d0 / corr_ed0 : 999.0;
343 
344  } else {
345  corr_d0 = 999.;
346  corr_ed0 = 999.;
347  }
348  }
349 
350  int nhits = static_cast<int>(muon.numberOfValidHits());
351  int nValidMuonHits = static_cast<int>(muon.globalTrack()->hitPattern().numberOfValidMuonHits());
352 
353  double ecalVeto = muon.isolationR03().emVetoEt;
354  double hcalVeto = muon.isolationR03().hadVetoEt;
355 
356  double hcalIso = muon.hcalIso();
357  double ecalIso = muon.ecalIso();
358  double trkIso = muon.trackIso();
359  double pt = muon.pt();
360 
361  double relIso = (ecalIso + hcalIso + trkIso) / pt;
362 
363  if (norm_chi2 < cut(indexChi2_, double()) || ignoreCut(indexChi2_))
365  if (fabs(corr_d0) < cut(indexD0_, double()) || ignoreCut(indexD0_))
366  passCut(ret, indexD0_);
367  if (fabs(corr_ed0) < cut(indexED0_, double()) || ignoreCut(indexED0_))
369  if (fabs(corr_sd0) < cut(indexSD0_, double()) || ignoreCut(indexSD0_))
371  if (nhits >= cut(indexNHits_, int()) || ignoreCut(indexNHits_))
373  if (nValidMuonHits > cut(indexNValMuHits_, int()) || ignoreCut(indexNValMuHits_))
375  if (hcalVeto < cut(indexHCalVeto_, double()) || ignoreCut(indexHCalVeto_))
377  if (ecalVeto < cut(indexECalVeto_, double()) || ignoreCut(indexECalVeto_))
379  if (relIso < cut(indexRelIso_, double()) || ignoreCut(indexRelIso_))
381 
382  setIgnored(ret);
383 
384  return (bool)ret;
385  }
386 
387  // cuts based on top group L+J synchronization exercise
389  ret.set(false);
390 
391  double norm_chi2 = muon.normChi2();
392  double corr_d0 = muon.dB();
393  double corr_ed0 = muon.edB();
394  double corr_sd0 = (corr_ed0 > 0.000000001) ? corr_d0 / corr_ed0 : 999.0;
395 
396  // Get the PV for the muon z requirement
398  event.getByLabel(pvSrc_, pvtxHandle_);
399 
400  double zvtx = -999;
401  if (!pvtxHandle_->empty()) {
402  zvtx = pvtxHandle_->at(0).z();
403  } else {
404  throw cms::Exception("InvalidInput")
405  << " There needs to be at least one primary vertex in the event." << std::endl;
406  }
407 
408  //If required, recalculate the impact parameter using the beam spot
409  if (recalcDBFromBSp_) {
410  //Get the beam spot
411  reco::TrackBase::Point beamPoint(0, 0, 0);
413  edm::Handle<reco::BeamSpot> beamSpotHandle;
414  event.getByLabel(beamLineSrc_, beamSpotHandle);
415 
416  if (beamSpotHandle.isValid()) {
417  beamSpot = *beamSpotHandle;
418  } else {
419  edm::LogError("DataNotAvailable")
420  << "No beam spot available from EventSetup, not adding high level selection \n";
421  }
422  beamPoint = reco::TrackBase::Point(beamSpot.x0(), beamSpot.y0(), beamSpot.z0());
423 
424  //Use the beamspot to correct the impact parameter and uncertainty
425  reco::TrackRef innerTrack = muon.innerTrack();
426  if (innerTrack.isNonnull() && innerTrack.isAvailable()) {
427  corr_d0 = -1.0 * innerTrack->dxy(beamPoint);
428  corr_ed0 =
429  sqrt(innerTrack->d0Error() * innerTrack->d0Error() + 0.5 * beamSpot.BeamWidthX() * beamSpot.BeamWidthX() +
430  0.5 * beamSpot.BeamWidthY() * beamSpot.BeamWidthY());
431  corr_sd0 = (corr_ed0 > 0.000000001) ? corr_d0 / corr_ed0 : 999.0;
432 
433  } else {
434  corr_d0 = 999.;
435  corr_ed0 = 999.;
436  }
437  }
438 
439  int nhits = static_cast<int>(muon.numberOfValidHits());
440  int nValidMuonHits = static_cast<int>(muon.globalTrack()->hitPattern().numberOfValidMuonHits());
441 
442  double ecalVeto = muon.isolationR03().emVetoEt;
443  double hcalVeto = muon.isolationR03().hadVetoEt;
444 
445  double hcalIso = muon.hcalIso();
446  double ecalIso = muon.ecalIso();
447  double trkIso = muon.trackIso();
448  double pt = muon.pt();
449 
450  double relIso = (ecalIso + hcalIso + trkIso) / pt;
451 
452  double z_mu = muon.vertex().z();
453 
454  int nPixelHits = muon.innerTrack()->hitPattern().pixelLayersWithMeasurement();
455 
456  int nMatchedStations = muon.numberOfMatches();
457 
458  if (norm_chi2 < cut(indexChi2_, double()) || ignoreCut(indexChi2_))
460  if (fabs(corr_d0) < cut(indexD0_, double()) || ignoreCut(indexD0_))
461  passCut(ret, indexD0_);
462  if (fabs(corr_ed0) < cut(indexED0_, double()) || ignoreCut(indexED0_))
464  if (fabs(corr_sd0) < cut(indexSD0_, double()) || ignoreCut(indexSD0_))
466  if (nhits >= cut(indexNHits_, int()) || ignoreCut(indexNHits_))
468  if (nValidMuonHits > cut(indexNValMuHits_, int()) || ignoreCut(indexNValMuHits_))
470  if (hcalVeto < cut(indexHCalVeto_, double()) || ignoreCut(indexHCalVeto_))
472  if (ecalVeto < cut(indexECalVeto_, double()) || ignoreCut(indexECalVeto_))
474  if (relIso < cut(indexRelIso_, double()) || ignoreCut(indexRelIso_))
476  if (fabs(z_mu - zvtx) < cut(indexLepZ_, double()) || ignoreCut(indexLepZ_))
478  if (nPixelHits > cut(indexPixHits_, int()) || ignoreCut(indexPixHits_))
480  if (nMatchedStations > cut(indexStations_, int()) || ignoreCut(indexStations_))
482 
483  setIgnored(ret);
484 
485  return (bool)ret;
486  }
487 
488  // cuts based on top group L+J synchronization exercise
489  // this is a copy of fall 10 cuts
490  // with a hack to include a double-sided reliso cut
491 
493  ret.set(false);
494 
495  double norm_chi2 = muon.normChi2();
496  double corr_d0 = muon.dB();
497  double corr_ed0 = muon.edB();
498  double corr_sd0 = (corr_ed0 > 0.000000001) ? corr_d0 / corr_ed0 : 999.0;
499 
500  // Get the PV for the muon z requirement
502  event.getByLabel(pvSrc_, pvtxHandle_);
503 
504  double zvtx = -999;
505  if (!pvtxHandle_->empty()) {
506  zvtx = pvtxHandle_->at(0).z();
507  } else {
508  throw cms::Exception("InvalidInput")
509  << " There needs to be at least one primary vertex in the event." << std::endl;
510  }
511 
512  //If required, recalculate the impact parameter using the beam spot
513  if (recalcDBFromBSp_) {
514  //Get the beam spot
515  reco::TrackBase::Point beamPoint(0, 0, 0);
517  edm::Handle<reco::BeamSpot> beamSpotHandle;
518  event.getByLabel(beamLineSrc_, beamSpotHandle);
519 
520  if (beamSpotHandle.isValid()) {
521  beamSpot = *beamSpotHandle;
522  } else {
523  edm::LogError("DataNotAvailable")
524  << "No beam spot available from EventSetup, not adding high level selection \n";
525  }
526  beamPoint = reco::TrackBase::Point(beamSpot.x0(), beamSpot.y0(), beamSpot.z0());
527 
528  //Use the beamspot to correct the impact parameter and uncertainty
529  reco::TrackRef innerTrack = muon.innerTrack();
530  if (innerTrack.isNonnull() && innerTrack.isAvailable()) {
531  corr_d0 = -1.0 * innerTrack->dxy(beamPoint);
532  corr_ed0 =
533  sqrt(innerTrack->d0Error() * innerTrack->d0Error() + 0.5 * beamSpot.BeamWidthX() * beamSpot.BeamWidthX() +
534  0.5 * beamSpot.BeamWidthY() * beamSpot.BeamWidthY());
535  corr_sd0 = (corr_ed0 > 0.000000001) ? corr_d0 / corr_ed0 : 999.0;
536 
537  } else {
538  corr_d0 = 999.;
539  corr_ed0 = 999.;
540  }
541  }
542 
543  int nhits = static_cast<int>(muon.numberOfValidHits());
544  int nValidMuonHits = static_cast<int>(muon.globalTrack()->hitPattern().numberOfValidMuonHits());
545 
546  double ecalVeto = muon.isolationR03().emVetoEt;
547  double hcalVeto = muon.isolationR03().hadVetoEt;
548 
549  double hcalIso = muon.hcalIso();
550  double ecalIso = muon.ecalIso();
551  double trkIso = muon.trackIso();
552  double pt = muon.pt();
553 
554  double relIso = (ecalIso + hcalIso + trkIso) / pt;
555 
556  double z_mu = muon.vertex().z();
557 
558  int nPixelHits = muon.innerTrack()->hitPattern().pixelLayersWithMeasurement();
559 
560  int nMatchedStations = muon.numberOfMatches();
561 
562  if (norm_chi2 < cut(indexChi2_, double()) || ignoreCut(indexChi2_))
564  if (fabs(corr_d0) < cut(indexD0_, double()) || ignoreCut(indexD0_))
565  passCut(ret, indexD0_);
566  if (fabs(corr_ed0) < cut(indexED0_, double()) || ignoreCut(indexED0_))
568  if (fabs(corr_sd0) < cut(indexSD0_, double()) || ignoreCut(indexSD0_))
570  if (nhits >= cut(indexNHits_, int()) || ignoreCut(indexNHits_))
572  if (nValidMuonHits > cut(indexNValMuHits_, int()) || ignoreCut(indexNValMuHits_))
574  if (hcalVeto < cut(indexHCalVeto_, double()) || ignoreCut(indexHCalVeto_))
576  if (ecalVeto < cut(indexECalVeto_, double()) || ignoreCut(indexECalVeto_))
578  if (fabs(z_mu - zvtx) < cut(indexLepZ_, double()) || ignoreCut(indexLepZ_))
580  if (nPixelHits > cut(indexPixHits_, int()) || ignoreCut(indexPixHits_))
582  if (nMatchedStations > cut(indexStations_, int()) || ignoreCut(indexStations_))
584 
586  //
587  // JMS Dec 13 2010
588  // HACK
589  // Need double-sided relIso cut to implement data-driven QCD
590  //
591  //
593  if (((relIso > 0.2) && (relIso < 0.75)) || ignoreCut(indexRelIso_))
595 
596  setIgnored(ret);
597 
598  return (bool)ret;
599  }
600 
601 private: // member variables
605 #ifndef __GCCXML__
607 #endif
609 #ifndef __GCCXML__
611 #endif
612 
625 };
626 
627 #endif
bool ignoreCut(std::string const &s) const
ignore the cut at index "s"
Definition: Selector.h:127
EDGetTokenT< ProductType > consumes(edm::InputTag const &tag)
bool fall10Cuts(const pat::Muon &muon, edm::EventBase const &event, pat::strbitset &ret)
edm::EDGetTokenT< std::vector< reco::Vertex > > pvSrcToken_
bool firstDataCuts(const pat::Muon &muon, pat::strbitset &ret)
void initialize(Version_t version, double chi2=10.0, double d0=999.0, double ed0=999.0, double sd0=3.0, int nhits=11, int nValidMuonHits=0, double ecalveto=4.0, double hcalveto=6.0, double reliso=0.05, double maxLepZ=1.0, int minPixelHits=1, int minNMatches=1)
bool operator()(const pat::Muon &muon, edm::EventBase const &event, pat::strbitset &ret) override
This provides an alternative signature that includes extra information.
ret
prodAgent to be discontinued
MuonVPlusJetsIDSelectionFunctor(edm::ParameterSet const &parameters, edm::ConsumesCollector &iC)
pat::strbitset::index_type index_type
Definition: Selector.h:25
void setIgnored(pat::strbitset &ret)
set ignored bits
Definition: Selector.h:181
pat::strbitset retInternal_
internal ret if users don&#39;t care about return bits
Definition: Selector.h:242
Log< level::Error, false > LogError
bool summer08Cuts(const pat::Muon &muon, pat::strbitset &ret)
pat::strbitset bits_
the bitset indexed by strings
Definition: Selector.h:241
void passCut(pat::strbitset &ret, std::string const &s)
Passing cuts.
Definition: Selector.h:142
T sqrt(T t)
Definition: SSEVec.h:19
virtual void push_back(std::string const &s)
This is the registration of an individual cut string.
Definition: Selector.h:42
math::XYZPoint Point
point in the space
Definition: TrackBase.h:80
Functor that operates on <T>
Definition: Selector.h:22
edm::EDGetTokenT< reco::BeamSpot > beamLineSrcToken_
MuonVPlusJetsIDSelectionFunctor(Version_t version, double chi2=10.0, double d0=0.2, double ed0=999.0, double sd0=999.0, int nhits=11, int nValidMuonHits=0, double ecalveto=4.0, double hcalveto=6.0, double reliso=0.05, double maxLepZ=1.0, int minPixelHits=1, int minNMatches=1)
bool spring10Cuts(const pat::Muon &muon, edm::EventBase const &event, pat::strbitset &ret)
static constexpr float d0
bool operator()(const pat::Muon &muon, pat::strbitset &ret) override
This provides the interface for base classes to select objects.
pat::strbitset getBitTemplate() const
Get an empty bitset with the proper names.
Definition: Selector.h:168
int cut(index_type const &i, int val) const
Access the int cut values at index "s".
Definition: Selector.h:158
bool isValid() const
Definition: HandleBase.h:70
MuonVPlusJetsIDSelectionFunctor(edm::ParameterSet const &parameters)
void setIgnoredCuts(std::vector< std::string > const &bitsToIgnore)
set the bits to ignore from a vector
Definition: Selector.h:131
bool kitQCDCuts(const pat::Muon &muon, edm::EventBase const &event, pat::strbitset &ret)
Analysis-level muon class.
Definition: Muon.h:51
Definition: event.py:1