babymaker  e95a6a9342d4604277fe7cc6149b6b5b24447d89
jet_met_tools.hh
Go to the documentation of this file.
1 // jet_met_tools: Functions related to jets, MET, and JECs
2 
3 #ifndef H_JET_MET_TOOLS
4 #define H_JET_MET_TOOLS
5 
6 // System include files
7 #include <vector>
8 #include <memory>
9 
10 // FW physics include files
11 #include "DataFormats/PatCandidates/interface/Jet.h"
12 #include "DataFormats/JetReco/interface/GenJet.h"
13 #include "DataFormats/PatCandidates/interface/MET.h"
14 #include "CondFormats/JetMETObjects/interface/FactorizedJetCorrector.h"
15 #include "CondFormats/JetMETObjects/interface/JetCorrectorParameters.h"
16 #include "CondFormats/JetMETObjects/interface/JetCorrectionUncertainty.h"
17 // B-tag scale factors
18 #include "CondFormats/BTauObjects/interface/BTagCalibration.h"
19 #include "CondTools/BTau/interface/BTagCalibrationReader.h"
20 
21 // ROOT include files
22 #include "TString.h"
23 #include "TH3D.h"
24 
25 // User include files
28 
30 private:
31  float getMCTagEfficiency(int pdgId, float pT, float eta, BTagEntry::OperatingPoint op, bool doDeepCSV, bool doByProc) const;
32 
33 public:
34 
36  const float JetPtCut = 30.0;
37  const float JetPtCutLoose = 20.0;
38  const float JetEtaCut = 2.4;
39  const float JetMHTEtaCut = 5.0;
40  const float JetHLTPtCut = 30.0;
41  const float JetHLTEtaCut = 3.0;
42  // Set in constructor depending on CMSSW release used
43  float CSVLoose = 999;
44  float CSVMedium = 999;
45  float CSVTight = 999;
46 
47  float DeepCSVLoose = 999;
48  float DeepCSVMedium = 999;
49  float DeepCSVTight = 999;
50 
51  float DeepFlavourLoose = 999;
52  float DeepFlavourMedium = 999;
53  float DeepFlavourTight = 999;
54 
55  const float sizeJet = 0.4;
56 
59 
60  TString jecName;
62  bool isFastSim;
63  bool doJEC;
64  bool isData;
65  double rhoEvent_;
66  edm::Handle<pat::JetCollection> alljets_;
67  std::unique_ptr<FactorizedJetCorrectorCalculator> jetCorrector;
68  FactorizedJetCorrectorCalculator::VariableValues jetValues;
69  std::unique_ptr<JetCorrectionUncertainty> jecUncProvider;
70  std::vector<float> jetTotCorrections, jetL1Corrections;
71  std::vector<LVector> corrJet;
72  std::vector<float> jerUnc, jecUnc;
73  std::vector<float> genJetPt;
74 
75  static const std::vector<BTagEntry::OperatingPoint> op_pts_;
76  static const std::vector<BTagEntry::JetFlavor> flavors_;
77  std::unique_ptr<BTagCalibration> calib_full_;
78  std::unique_ptr<BTagCalibration> calib_fast_;
79  std::map<BTagEntry::OperatingPoint, std::unique_ptr<BTagCalibrationReader> > readers_full_;
80  std::map<BTagEntry::OperatingPoint, std::unique_ptr<BTagCalibrationReader> > readers_fast_;
81  std::vector<const TH3D*> btag_efficiencies_;
82  std::vector<const TH3D*> btag_efficiencies_proc_;
83 
84  std::unique_ptr<BTagCalibration> calib_deep_full_;
85  std::unique_ptr<BTagCalibration> calib_deep_fast_;
86  std::map<BTagEntry::OperatingPoint, std::unique_ptr<BTagCalibrationReader> > readers_deep_full_;
87  std::map<BTagEntry::OperatingPoint, std::unique_ptr<BTagCalibrationReader> > readers_deep_fast_;
88  std::vector<const TH3D*> btag_efficiencies_deep_;
89  std::vector<const TH3D*> btag_efficiencies_deep_proc_;
90 
91  bool leptonInJet(const pat::Jet &jet, vCands leptons);
92  bool jetMatched(const pat::Jet &jet, vCands objects);
93  bool idJet(const pat::Jet &jet, CutLevel cut);
94  bool isLowDphi(vCands jets, float mht_phi, float &dphi1, float &dphi2, float &dphi3, float &dphi4);
95 
96  float getGenPt(const pat::Jet &jet, edm::Handle<edm::View <reco::GenJet> > genjets);
97  bool matchesGenJet(const pat::Jet &jet, edm::Handle<edm::View <reco::GenJet> > genjets);
98  float trueHT(edm::Handle<edm::View <reco::GenJet> > genjets);
99 
100  void getMETRaw(edm::Handle<pat::METCollection> mets, float &metRaw, float &metRawPhi);
101  void getMETWithJEC(edm::Handle<pat::METCollection> mets, float &met, float &metPhi, unsigned isys);
102 
103  void getJetCorrections(edm::Handle<edm::View <reco::GenJet> > genjets, edm::Handle<pat::JetCollection> alljets, double rhoEvent);
104  void setJetUncertainties(edm::Handle<edm::View <reco::GenJet> > genjets);
105 
106  float getJetResolutionSF(float jet_eta);
107  float jetBTagWeight(const pat::Jet &jet, const LVector &jetp4, BTagEntry::OperatingPoint op,
108  const std::string &bc_full_syst, const std::string &udsg_full_syst,
109  const std::string &bc_fast_syst, const std::string &udsg_fast_syst, bool doDeepCSV, bool doByProc = false) const;
110  float jetBTagWeight(const pat::Jet &jet, const LVector &jetp4, BTagEntry::OperatingPoint op,
111  const std::string &bc_full_syst, const std::string &udsg_full_syst, bool doDeepCSV, bool doByProc = false) const;
112  float jetBTagWeight(const pat::Jet &jet, const LVector &jetp4, const std::vector<BTagEntry::OperatingPoint> &ops,
113  const std::string &bc_full_syst, const std::string &udsg_full_syst, bool doDeepCSV, bool doByProc = false) const;
114  float jetBTagWeight(const pat::Jet &jet, const LVector &jetp4, const std::vector<BTagEntry::OperatingPoint> &ops,
115  const std::string &bc_full_syst, const std::string &udsg_full_syst,
116  const std::string &bc_fast_syst, const std::string &udsg_fast_syst, bool doDeepCSV, bool doByProc = false) const;
117  void fillDeltaRbb(std::vector<float> & deltaRbb, std::vector<float> & bb_pt, std::vector<float> & bb_m, std::vector<int> & bb_jet_idx1, std::vector<int> & bb_jet_idx2, std::vector<int> & bb_gs_idx, std::vector<int> & bb_gs_flavor, const std::vector<LVector> &jets, const std::vector<float> &jets_csv, const std::vector<bool> &jets_islep, const std::vector<float> &jets_pt, const std::vector<size_t> &brank,int & highcsv_index, bool deep = false);
118  static std::vector<size_t> getBRanking(const std::vector<LVector> &momentum, const std::vector<float> &csv,
119  const std::vector<bool> &is_lep);
120  static float getDeltaRbbHighCSV(const std::vector<LVector> &momentum, const std::vector<size_t> &brank, size_t nb);
121  static float getDeltaRbbMax(const std::vector<LVector> &momentum, const std::vector<size_t> &brank,
122  size_t nb);
123  static float getDeltaRbbMin(const std::vector<LVector> &momentum, const std::vector<size_t> &brank,
124  size_t nb);
125  static float getDeltaPhibb(const std::vector<LVector> &momentum, const std::vector<size_t> &brank, size_t nb);
126  static float getDeltaPhibbMax(const std::vector<LVector> &momentum, const std::vector<size_t> &brank,
127  size_t nb);
128  static float getDeltaPhibbMin(const std::vector<LVector> &momentum, const std::vector<size_t> &brank,
129  size_t nb);
130  static float getMbb(const std::vector<LVector> &momentum, const std::vector<size_t> &brank, size_t nb);
131  static float getMbbMax(const std::vector<LVector> &momentum, const std::vector<size_t> &brank,
132  size_t nb);
133  static float getMbbMin(const std::vector<LVector> &momentum, const std::vector<size_t> &brank,
134  size_t nb);
135  static float getMblepMax2(const std::vector<LVector> &jets, const std::vector<size_t> &brank,
136  size_t nb, const LVector &lep);
137  static float getMblepMin2(const std::vector<LVector> &jets, const std::vector<size_t> &brank,
138  size_t nb, const LVector &lep);
139  static float getMblepMax(const std::vector<LVector> &jets, const std::vector<size_t> &brank,
140  size_t nb, const LVector &lep);
141  static float getMblepMin(const std::vector<LVector> &jets, const std::vector<size_t> &brank,
142  size_t nb, const LVector &lep);
143  static float getDeltaRblepMax2(const std::vector<LVector> &jets, const std::vector<size_t> &brank,
144  size_t nb, const LVector &lep);
145  static float getDeltaRblepMin2(const std::vector<LVector> &jets, const std::vector<size_t> &brank,
146  size_t nb, const LVector &lep);
147  static float getDeltaRblepMax(const std::vector<LVector> &jets, const std::vector<size_t> &brank,
148  size_t nb, const LVector &lep);
149  static float getDeltaRblepMin(const std::vector<LVector> &jets, const std::vector<size_t> &brank,
150  size_t nb, const LVector &lep);
151  static float getDeltaPhiblepMax2(const std::vector<LVector> &jets, const std::vector<size_t> &brank,
152  size_t nb, const LVector &lep);
153  static float getDeltaPhiblepMin2(const std::vector<LVector> &jets, const std::vector<size_t> &brank,
154  size_t nb, const LVector &lep);
155  static float getDeltaPhiblepMax(const std::vector<LVector> &jets, const std::vector<size_t> &brank,
156  size_t nb, const LVector &lep);
157  static float getDeltaPhiblepMin(const std::vector<LVector> &jets, const std::vector<size_t> &brank,
158  size_t nb, const LVector &lep);
159  static float getMTbmetMax2(const std::vector<LVector> &jets, const std::vector<size_t> &brank,
160  size_t nb, float met, float met_phi);
161  static float getMTbmetMin2(const std::vector<LVector> &jets, const std::vector<size_t> &brank,
162  size_t nb, float met, float met_phi);
163  static float getMTbmetMax(const std::vector<LVector> &jets, const std::vector<size_t> &brank,
164  size_t nb, float met, float met_phi);
165  static float getMTbmetMin(const std::vector<LVector> &jets, const std::vector<size_t> &brank,
166  size_t nb, float met, float met_phi);
167  static float getDeltaPhibmetMax2(const std::vector<LVector> &jets, const std::vector<size_t> &brank,
168  size_t nb, float met_phi);
169  static float getDeltaPhibmetMin2(const std::vector<LVector> &jets, const std::vector<size_t> &brank,
170  size_t nb, float met_phi);
171  static float getDeltaPhibmetMax(const std::vector<LVector> &jets, const std::vector<size_t> &brank,
172  size_t nb, float met_phi);
173  static float getDeltaPhibmetMin(const std::vector<LVector> &jets, const std::vector<size_t> &brank,
174  size_t nb, float met_phi);
175 
176  void clusterFatJets(int &nfjets, float &mj,
177  std::vector<float> &fjets_pt,
178  std::vector<float> &fjets_eta,
179  std::vector<float> &fjets_phi,
180  std::vector<float> &fjets_m,
181  std::vector<int> &fjets_nconst,
182  std::vector<int> &jets_fjet_index,
183  baby_full &baby,
184  double radius,
185  double min_jets_pt,
186  bool cluster_leps);
187  double getSysMJ(double radius, std::vector<LVector> &jets,
188  std::vector<bool> &jets_islep, double min_jets_pt,
189  bool cluster_leps);
190 
191  jet_met_tools(TString ijecName, bool doSys, bool isFastSim, TString outname);
192  ~jet_met_tools() = default;
193 };
194 
195 
196 
197 #endif
std::unique_ptr< JetCorrectionUncertainty > jecUncProvider
float DeepFlavourTight
bool leptonInJet(const pat::Jet &jet, vCands leptons)
static float getMbbMax(const std::vector< LVector > &momentum, const std::vector< size_t > &brank, size_t nb)
void fillDeltaRbb(std::vector< float > &deltaRbb, std::vector< float > &bb_pt, std::vector< float > &bb_m, std::vector< int > &bb_jet_idx1, std::vector< int > &bb_jet_idx2, std::vector< int > &bb_gs_idx, std::vector< int > &bb_gs_flavor, const std::vector< LVector > &jets, const std::vector< float > &jets_csv, const std::vector< bool > &jets_islep, const std::vector< float > &jets_pt, const std::vector< size_t > &brank, int &highcsv_index, bool deep=false)
double getSysMJ(double radius, std::vector< LVector > &jets, std::vector< bool > &jets_islep, double min_jets_pt, bool cluster_leps)
bool jetMatched(const pat::Jet &jet, vCands objects)
void setJetUncertainties(edm::Handle< edm::View< reco::GenJet > > genjets)
static float getMTbmetMin(const std::vector< LVector > &jets, const std::vector< size_t > &brank, size_t nb, float met, float met_phi)
void clusterFatJets(int &nfjets, float &mj, std::vector< float > &fjets_pt, std::vector< float > &fjets_eta, std::vector< float > &fjets_phi, std::vector< float > &fjets_m, std::vector< int > &fjets_nconst, std::vector< int > &jets_fjet_index, baby_full &baby, double radius, double min_jets_pt, bool cluster_leps)
float DeepFlavourLoose
static std::vector< size_t > getBRanking(const std::vector< LVector > &momentum, const std::vector< float > &csv, const std::vector< bool > &is_lep)
bool isLowDphi(vCands jets, float mht_phi, float &dphi1, float &dphi2, float &dphi3, float &dphi4)
std::vector< const TH3D * > btag_efficiencies_deep_
float getJetResolutionSF(float jet_eta)
static float getDeltaPhiblepMin(const std::vector< LVector > &jets, const std::vector< size_t > &brank, size_t nb, const LVector &lep)
static float getDeltaPhibmetMin(const std::vector< LVector > &jets, const std::vector< size_t > &brank, size_t nb, float met_phi)
static float getDeltaPhibb(const std::vector< LVector > &momentum, const std::vector< size_t > &brank, size_t nb)
jet_met_tools(TString ijecName, bool doSys, bool isFastSim, TString outname)
static float getDeltaPhiblepMin2(const std::vector< LVector > &jets, const std::vector< size_t > &brank, size_t nb, const LVector &lep)
static float getDeltaRblepMin(const std::vector< LVector > &jets, const std::vector< size_t > &brank, size_t nb, const LVector &lep)
std::vector< const reco::Candidate * > vCands
Definition: utilities.hh:15
void getMETRaw(edm::Handle< pat::METCollection > mets, float &metRaw, float &metRawPhi)
static float getDeltaPhibmetMax(const std::vector< LVector > &jets, const std::vector< size_t > &brank, size_t nb, float met_phi)
float trueHT(edm::Handle< edm::View< reco::GenJet > > genjets)
float getGenPt(const pat::Jet &jet, edm::Handle< edm::View< reco::GenJet > > genjets)
std::vector< const TH3D * > btag_efficiencies_proc_
static float getDeltaRblepMin2(const std::vector< LVector > &jets, const std::vector< size_t > &brank, size_t nb, const LVector &lep)
std::vector< float > jerUnc
float DeepFlavourMedium
FactorizedJetCorrectorCalculator::VariableValues jetValues
std::unique_ptr< BTagCalibration > calib_deep_full_
std::unique_ptr< BTagCalibration > calib_full_
std::map< BTagEntry::OperatingPoint, std::unique_ptr< BTagCalibrationReader > > readers_deep_full_
void getMETWithJEC(edm::Handle< pat::METCollection > mets, float &met, float &metPhi, unsigned isys)
static float getDeltaPhiblepMax2(const std::vector< LVector > &jets, const std::vector< size_t > &brank, size_t nb, const LVector &lep)
std::vector< LVector > corrJet
std::vector< const TH3D * > btag_efficiencies_deep_proc_
std::map< BTagEntry::OperatingPoint, std::unique_ptr< BTagCalibrationReader > > readers_deep_fast_
const float JetHLTPtCut
const float sizeJet
float jetBTagWeight(const pat::Jet &jet, const LVector &jetp4, BTagEntry::OperatingPoint op, const std::string &bc_full_syst, const std::string &udsg_full_syst, const std::string &bc_fast_syst, const std::string &udsg_fast_syst, bool doDeepCSV, bool doByProc=false) const
const float JetEtaCut
static float getDeltaPhibmetMax2(const std::vector< LVector > &jets, const std::vector< size_t > &brank, size_t nb, float met_phi)
static float getDeltaRblepMax2(const std::vector< LVector > &jets, const std::vector< size_t > &brank, size_t nb, const LVector &lep)
float getMCTagEfficiency(int pdgId, float pT, float eta, BTagEntry::OperatingPoint op, bool doDeepCSV, bool doByProc) const
std::map< BTagEntry::OperatingPoint, std::unique_ptr< BTagCalibrationReader > > readers_full_
static float getDeltaRbbMin(const std::vector< LVector > &momentum, const std::vector< size_t > &brank, size_t nb)
static float getMbb(const std::vector< LVector > &momentum, const std::vector< size_t > &brank, size_t nb)
static float getMTbmetMin2(const std::vector< LVector > &jets, const std::vector< size_t > &brank, size_t nb, float met, float met_phi)
const float JetPtCut
static const std::vector< BTagEntry::OperatingPoint > op_pts_
static float getDeltaPhibmetMin2(const std::vector< LVector > &jets, const std::vector< size_t > &brank, size_t nb, float met_phi)
static float getMblepMax(const std::vector< LVector > &jets, const std::vector< size_t > &brank, size_t nb, const LVector &lep)
reco::Candidate::LorentzVector LVector
Definition: utilities.hh:16
static float getMTbmetMax(const std::vector< LVector > &jets, const std::vector< size_t > &brank, size_t nb, float met, float met_phi)
static float getDeltaPhiblepMax(const std::vector< LVector > &jets, const std::vector< size_t > &brank, size_t nb, const LVector &lep)
edm::Handle< pat::JetCollection > alljets_
static float getDeltaRbbMax(const std::vector< LVector > &momentum, const std::vector< size_t > &brank, size_t nb)
static float getMblepMin2(const std::vector< LVector > &jets, const std::vector< size_t > &brank, size_t nb, const LVector &lep)
static float getMblepMin(const std::vector< LVector > &jets, const std::vector< size_t > &brank, size_t nb, const LVector &lep)
static float getDeltaRbbHighCSV(const std::vector< LVector > &momentum, const std::vector< size_t > &brank, size_t nb)
const float JetPtCutLoose
std::unique_ptr< FactorizedJetCorrectorCalculator > jetCorrector
std::unique_ptr< BTagCalibration > calib_fast_
void getJetCorrections(edm::Handle< edm::View< reco::GenJet > > genjets, edm::Handle< pat::JetCollection > alljets, double rhoEvent)
~jet_met_tools()=default
std::vector< float > jetL1Corrections
std::unique_ptr< BTagCalibration > calib_deep_fast_
std::vector< const TH3D * > btag_efficiencies_
static const std::vector< BTagEntry::JetFlavor > flavors_
static float getDeltaPhibbMax(const std::vector< LVector > &momentum, const std::vector< size_t > &brank, size_t nb)
bool idJet(const pat::Jet &jet, CutLevel cut)
static float getMTbmetMax2(const std::vector< LVector > &jets, const std::vector< size_t > &brank, size_t nb, float met, float met_phi)
const float JetHLTEtaCut
bool matchesGenJet(const pat::Jet &jet, edm::Handle< edm::View< reco::GenJet > > genjets)
const float JetMHTEtaCut
std::vector< float > jetTotCorrections
static float getDeltaRblepMax(const std::vector< LVector > &jets, const std::vector< size_t > &brank, size_t nb, const LVector &lep)
static float getMblepMax2(const std::vector< LVector > &jets, const std::vector< size_t > &brank, size_t nb, const LVector &lep)
std::vector< float > genJetPt
std::map< BTagEntry::OperatingPoint, std::unique_ptr< BTagCalibrationReader > > readers_fast_
static float getDeltaPhibbMin(const std::vector< LVector > &momentum, const std::vector< size_t > &brank, size_t nb)
std::vector< float > jecUnc
static float getMbbMin(const std::vector< LVector > &momentum, const std::vector< size_t > &brank, size_t nb)