babymaker  e95a6a9342d4604277fe7cc6149b6b5b24447d89
lepton_tools.hh
Go to the documentation of this file.
1 // LEPTON_TOOLS: Functions to select analysis leptons
2 
3 #ifndef H_LEPTON_TOOLS
4 #define H_LEPTON_TOOLS
5 
6 #include <utility>
7 
8 #include "TH2D.h"
9 #include "TH2F.h"
10 
11 #include "FWCore/Framework/interface/ESHandle.h"
12 #include "DataFormats/VertexReco/interface/Vertex.h"
13 #include "DataFormats/PatCandidates/interface/Jet.h"
14 #include "DataFormats/PatCandidates/interface/Muon.h"
15 #include "DataFormats/PatCandidates/interface/Electron.h"
16 #include "DataFormats/PatCandidates/interface/PackedCandidate.h"
17 #include "DataFormats/MuonReco/interface/Muon.h"
18 #include "DataFormats/PatCandidates/interface/Lepton.h"
19 #include "DataFormats/PatCandidates/interface/PFIsolation.h"
21 
23 
24 public:
25  lepton_tools();
26  ~lepton_tools();
27 
29  const float SignalLeptonPtCut = 20.0;
30  const float VetoLeptonPtCut = 10.0;
31  const float MuonEtaCut = 2.4;
32  const float ElectronEtaCut = 2.5;
33  const float MuonMiniIsoCut = 0.2;
34  const float ElectronMiniIsoCut = 0.1;
35 
37  template<class T>
38  T chooseVal(CutLevel threshold, T valVeto, T valLoose, T valMedium, T valTight){
39  switch(threshold){
40  default:
41  case kMediumICHEP:
42  cms::Exception("BadElectronID")
43  << "CutLevel " << static_cast<int>(threshold) << " is not accepted for electrons." << std::endl;
44  case kVeto:
45  return valVeto;
46  case kLoose:
47  return valLoose;
48  case kMedium:
49  return valMedium;
50  case kTight:
51  return valTight;
52  }
53  return valVeto;
54  }
55 
56  bool isVetoMuon(const pat::Muon &lep, edm::Handle<reco::VertexCollection> vtx, double lepIso);
57  bool isSignalMuon(const pat::Muon &lep, edm::Handle<reco::VertexCollection> vtx, double lepIso);
58  bool idMuon(const pat::Muon &lep, edm::Handle<reco::VertexCollection> vtx, CutLevel threshold);
59  bool vertexMuon(const pat::Muon &lep, edm::Handle<reco::VertexCollection> vtx, double &dz, double &d0);
60  double getEffAreaMuon(double eta);
61  double getRelIsolation(const pat::Muon &lep, double rho);
62 // double getMinIsolation(const pat::PFIsolation &lepiso, double rho) const;
63 // double getMinIsolation(const reco::Candidate* lep, double rho);
64 
65  bool isVetoElectron(const pat::Electron &lep, edm::Handle<reco::VertexCollection> vtx, double lepIso);
66  bool isSignalElectron(const pat::Electron &lep, edm::Handle<reco::VertexCollection> vtx, double lepIso);
67  bool idElectron(const pat::Electron &lep, edm::Handle<reco::VertexCollection> vtx, CutLevel threshold, bool doIso=false);
68  bool vertexElectron(const pat::Electron &lep, edm::Handle<reco::VertexCollection> vtx, double &dz, double &d0);
69  double getEffAreaElectron(double eta);
70  double getRelIsolation(const pat::Electron &lep, double rho);
71 // double getMinIsolation(const pat::PFIsolation &lepiso, double rho);
72 
73  static std::pair<double, double> getScaleFactor(const reco::Candidate &cand);
74  static std::pair<double, double> getScaleFactor(const vCands &sig_leps);
75 
76  static std::pair<double, double> getScaleFactorFs(const reco::Candidate &cand);
77  static std::pair<double, double> getScaleFactorFs(const vCands &sig_leps);
78 
79  double getPFIsolation(edm::Handle<pat::PackedCandidateCollection> pfcands,
80  const reco::Candidate* ptcl,
81  double r_iso_min, double r_iso_max, double kt_scale,
82  double rho, bool charged_only);
83 
84  vCands getIsoTracks(edm::Handle<pat::PackedCandidateCollection> pfcands, double met, double met_phi);
85  vCands getRA4IsoTracks(edm::Handle<pat::PackedCandidateCollection> pfcands, double met, double met_phi,double rhoEventCentral,std::vector<float> &isos, std::vector<float> &relisos, int primary_pdg);
86 
87  bool outInOnly(const reco::Muon &mu) const;
88  bool preselection(const reco::Muon &mu, bool selectClones) const;
89  bool tighterId(const reco::Muon &mu) const;
90  bool tightGlobal(const reco::Muon &mu) const;
91  bool safeId(const reco::Muon &mu) const;
92  bool partnerId(const reco::Muon &mu) const;
93  std::set<unsigned> badGlobalMuonSelector(edm::Handle<reco::VertexCollection> vtx,
94  edm::Handle<pat::MuonCollection> muons, bool selectClones);
95 private:
97  static const TH2D sf_fast_muon_medium, sf_fast_muon_iso, sf_fast_electron_mediumiso; //sf_full_muon_tracking
98 
99  static std::pair<double, double> getScaleFactor(const reco::Muon &lep);
100  static std::pair<double, double> getScaleFactor(const pat::Electron &lep);
101 
102  static std::pair<double, double> getScaleFactorFs(const reco::Muon &lep);
103  static std::pair<double, double> getScaleFactorFs(const pat::Electron &lep);
104 };
105 
106 #endif
static const TH2F sf_full_electron_medium
Definition: lepton_tools.hh:96
double getPFIsolation(edm::Handle< pat::PackedCandidateCollection > pfcands, const reco::Candidate *ptcl, double r_iso_min, double r_iso_max, double kt_scale, double rho, bool charged_only)
std::set< unsigned > badGlobalMuonSelector(edm::Handle< reco::VertexCollection > vtx, edm::Handle< pat::MuonCollection > muons, bool selectClones)
bool safeId(const reco::Muon &mu) const
static const TH2F sf_full_muon_medium
Definition: lepton_tools.hh:96
std::vector< const reco::Candidate * > vCands
Definition: utilities.hh:15
const float SignalLeptonPtCut
Definition: lepton_tools.hh:29
const float ElectronEtaCut
Definition: lepton_tools.hh:32
bool isVetoElectron(const pat::Electron &lep, edm::Handle< reco::VertexCollection > vtx, double lepIso)
T chooseVal(CutLevel threshold, T valVeto, T valLoose, T valMedium, T valTight)
Definition: lepton_tools.hh:38
const float MuonEtaCut
Definition: lepton_tools.hh:31
bool idElectron(const pat::Electron &lep, edm::Handle< reco::VertexCollection > vtx, CutLevel threshold, bool doIso=false)
bool preselection(const reco::Muon &mu, bool selectClones) const
static const TH2D sf_fast_electron_mediumiso
Definition: lepton_tools.hh:97
bool tighterId(const reco::Muon &mu) const
const float VetoLeptonPtCut
Definition: lepton_tools.hh:30
bool isVetoMuon(const pat::Muon &lep, edm::Handle< reco::VertexCollection > vtx, double lepIso)
bool isSignalElectron(const pat::Electron &lep, edm::Handle< reco::VertexCollection > vtx, double lepIso)
double getRelIsolation(const pat::Muon &lep, double rho)
vCands getRA4IsoTracks(edm::Handle< pat::PackedCandidateCollection > pfcands, double met, double met_phi, double rhoEventCentral, std::vector< float > &isos, std::vector< float > &relisos, int primary_pdg)
bool tightGlobal(const reco::Muon &mu) const
static const TH2F sf_full_muon_vtx
Definition: lepton_tools.hh:96
double getEffAreaMuon(double eta)
bool idMuon(const pat::Muon &lep, edm::Handle< reco::VertexCollection > vtx, CutLevel threshold)
bool isSignalMuon(const pat::Muon &lep, edm::Handle< reco::VertexCollection > vtx, double lepIso)
static const TH2F sf_full_muon_iso
Definition: lepton_tools.hh:96
const float MuonMiniIsoCut
Definition: lepton_tools.hh:33
bool partnerId(const reco::Muon &mu) const
const float ElectronMiniIsoCut
Definition: lepton_tools.hh:34
static const TH2F sf_full_electron_tracking
Definition: lepton_tools.hh:96
bool vertexMuon(const pat::Muon &lep, edm::Handle< reco::VertexCollection > vtx, double &dz, double &d0)
bool outInOnly(const reco::Muon &mu) const
static std::pair< double, double > getScaleFactor(const reco::Candidate &cand)
double getEffAreaElectron(double eta)
static const TH2D sf_fast_muon_medium
Definition: lepton_tools.hh:97
static const TH2F sf_full_electron_iso
Definition: lepton_tools.hh:96
static const TH2D sf_fast_muon_iso
Definition: lepton_tools.hh:97
vCands getIsoTracks(edm::Handle< pat::PackedCandidateCollection > pfcands, double met, double met_phi)
bool vertexElectron(const pat::Electron &lep, edm::Handle< reco::VertexCollection > vtx, double &dz, double &d0)
static std::pair< double, double > getScaleFactorFs(const reco::Candidate &cand)