1 |
/***
|
2 |
|
3 |
Adopted from the D0 framework,
|
4 |
used to use event.get("caf_util::MET", met), etc, so needs something like METSelector to run upstream
|
5 |
|
6 |
***/
|
7 |
|
8 |
#ifndef LJETSTOPOVARS
|
9 |
#define LJETSTOPOVARS
|
10 |
|
11 |
#include <string>
|
12 |
#include <vector>
|
13 |
#include "FWCore/Framework/interface/Event.h"
|
14 |
#include "LJMet/MultivariateAnalysis/interface/TMBLorentzVector.h"
|
15 |
//#include "cafe/Event.hpp"
|
16 |
#include "TVectorD.h"
|
17 |
|
18 |
|
19 |
class LJetsTopoVars
|
20 |
{
|
21 |
public:
|
22 |
LJetsTopoVars(std::string jets, std::string met, std::string lepton, bool isMuon)
|
23 |
:m_jetBranch(jets),
|
24 |
m_metBranch(met),
|
25 |
m_leptonBranch(lepton),
|
26 |
m_isMuon(isMuon),
|
27 |
|
28 |
|
29 |
//_electron(NULL),
|
30 |
//_muon( NULL),
|
31 |
|
32 |
_ht( std::vector<double>(22, 0.) ),
|
33 |
_htOK( false),
|
34 |
_evtTopo( std::vector<double>( 3, 0.) ),
|
35 |
_evtTopoOK( false),
|
36 |
_kt( std::vector<double>( 3, 0.) ),
|
37 |
_ktOK( false),
|
38 |
_mt( std::vector<double>( 2, 0.) ),
|
39 |
_mtOK( false)
|
40 |
{};
|
41 |
|
42 |
// returns # of removed jets due to insufficient isolation from lepton
|
43 |
//void setEvent(const edm::Event& event);
|
44 |
//int setEvent(const edm::Event& event, double min_dr_jet_lepton=-0.01);
|
45 |
|
46 |
|
47 |
//###################################################################################################
|
48 |
//##
|
49 |
//## Initiate LJetsTopoVars using one lepton, one MET and 4 leading jets momentum. This initiation is
|
50 |
//## used when one of the leptons is converted to a neutrino.
|
51 |
//##
|
52 |
//###################################################################################################
|
53 |
|
54 |
int setEventMetFixed(TLorentzVector&,TLorentzVector&, TLorentzVector&, TLorentzVector&, TLorentzVector&, TLorentzVector&,double min_dr_jet_lepton=-0.01); //4 jets
|
55 |
int setEventMetFixed(TLorentzVector&, TLorentzVector&, TLorentzVector&, TLorentzVector&, TLorentzVector&,double min_dr_jet_lepton=-0.01); //3 jets
|
56 |
int setEventMetFixed(TLorentzVector&, TLorentzVector&, TLorentzVector&, TLorentzVector&,double min_dr_jet_lepton=-0.01); //2 jets
|
57 |
int setEventMetFixed(TLorentzVector&, TLorentzVector&, TLorentzVector&,double min_dr_jet_lepton=-0.01); //1 jet
|
58 |
int setEventMetFixed(TLorentzVector&, TLorentzVector&,double min_dr_jet_lepton=-0.01); //0 jet
|
59 |
int setEvent(const edm::Event& event, double, double min_dr_jet_lepton=-0.01); //This is for corrected MET
|
60 |
|
61 |
|
62 |
|
63 |
|
64 |
|
65 |
double aplanarity() const;
|
66 |
double centrality() const;
|
67 |
double sphericity() const;
|
68 |
double ht() const;
|
69 |
double htpluslepton() const;
|
70 |
double methtpluslepton() const;
|
71 |
double h() const;
|
72 |
double ktMinPrime() const;
|
73 |
double dphiLepMet() const;
|
74 |
double minDijetMass() const;
|
75 |
double maxJetEta() const;
|
76 |
double Et3() const;
|
77 |
double minDijetDeltaR() const;
|
78 |
double LeptonJet_DeltaR(); //btw lepton and leading 2 jet, minimum
|
79 |
double Jet1Jet2_DeltaR();
|
80 |
double Jet1Jet2_DeltaPhi();
|
81 |
double Jet1Jet2_M();
|
82 |
double Jet1Jet2_Pt();
|
83 |
double Jet1Jet2W_M();
|
84 |
double Jet1Jet2W_Pt();
|
85 |
|
86 |
double Hz(); //scalar sum of longitudinal energies of first four jets, the muon, and the neutrino
|
87 |
double HT2(); //scalar sum of transverse energies of the 2nd, 3rd, and 4th jets
|
88 |
double HT2prime(); //HT2/Hz
|
89 |
double W_MT(); //W transverse mass
|
90 |
double W_M(); //W mass
|
91 |
double W_Pt(); //W
|
92 |
double DphiJMET(); //Delta phi btw leading jet and MET
|
93 |
|
94 |
//muon only (throws exception if not)
|
95 |
double Muon_DeltaR(); //btw muon and jet, minimum
|
96 |
double Muon_etHaloScaled(); //TMBMuon::etHalo()/pT
|
97 |
double Muon_etTrkConeScaled(); //TMBMuon::etTrkCone()/pT
|
98 |
|
99 |
//electron only (throws exception if not)
|
100 |
double Electron_iso(); //TMBEMCluster::iso()
|
101 |
double Electron_lhood(); //TMBEMCluster::Lhood8(); is this right?
|
102 |
|
103 |
// Ht
|
104 |
double getHt() {if(!_htOK) calcHt(); return _ht[ 0];}
|
105 |
double getHtp() {if(!_htOK) calcHt(); return _ht[ 1];}
|
106 |
double getHtpp() {if(!_htOK) calcHt(); return _ht[ 2];}
|
107 |
double getHt2() {if(!_htOK) calcHt(); return _ht[ 3];}
|
108 |
double getHt2p() {if(!_htOK) calcHt(); return _ht[ 4];}
|
109 |
double getHt2pp() {if(!_htOK) calcHt(); return _ht[ 5];}
|
110 |
double getHt3() {if(!_htOK) calcHt(); return _ht[ 6];}
|
111 |
double getHt3p() {if(!_htOK) calcHt(); return _ht[ 7];}
|
112 |
double getHt3pp() {if(!_htOK) calcHt(); return _ht[ 8];}
|
113 |
double getCen() {if(!_htOK) calcHt(); return _ht[ 9];}
|
114 |
double getNJW() {if(!_htOK) calcHt(); return _ht[10];}
|
115 |
double getJetEtaMax() {if(!_htOK) calcHt(); return _ht[11];}
|
116 |
double getMdijetMin() {if(!_htOK) calcHt(); return _ht[12];}
|
117 |
double getMtjets() {if(!_htOK) calcHt(); return _ht[13];}
|
118 |
double getSqrtsT() {if(!_htOK) calcHt(); return _ht[14];}
|
119 |
double getMtAurelio() {if(!_htOK) calcHt(); return _ht[15];}
|
120 |
double getPzOverHT() {if(!_htOK) calcHt(); return _ht[16];}
|
121 |
double getMevent() {if(!_htOK) calcHt(); return _ht[17];}
|
122 |
double getM123inv() {if(!_htOK) calcHt(); return _ht[18];}
|
123 |
double getEta2Sum() {if(!_htOK) calcHt(); return _ht[19];}
|
124 |
double getMwRec() {if(!_htOK) calcHt(); return _ht[20];}
|
125 |
double getH() {if(!_htOK) calcHt(); return _ht[21];}
|
126 |
|
127 |
// event topo
|
128 |
double getSph() {if(!_evtTopoOK) calcEvtTopo(); return _evtTopo[0];}
|
129 |
double getApl() {if(!_evtTopoOK) calcEvtTopo(); return _evtTopo[1];}
|
130 |
double getAplMu() {if(!_evtTopoOK) calcEvtTopo(); return _evtTopo[2];}
|
131 |
|
132 |
// Kt
|
133 |
double getKtminp() {if(!_ktOK) calcKt(); return _kt[0];}
|
134 |
double getKtminpReduced() {if(!_ktOK) calcKt(); return _kt[1];}
|
135 |
double getDrMinJetJet() {if(!_ktOK) calcKt(); return _kt[2];}
|
136 |
|
137 |
// mT
|
138 |
double getDphiMuMet() {if(!_mtOK) calcMt(); return _mt[0];}
|
139 |
double getMt() {if(!_mtOK) calcMt(); return _mt[1];}
|
140 |
|
141 |
// Momentum tensor eigenvalues
|
142 |
TVectorD getEigen() {if(!_evtTopoOK) calcEvtTopo(); return eigenval;}
|
143 |
|
144 |
// Neutrino
|
145 |
TMBLorentzVector GetNeutrino() {return _neutrino;}
|
146 |
|
147 |
private:
|
148 |
std::string m_jetBranch, m_metBranch, m_leptonBranch;
|
149 |
std::vector<TMBLorentzVector> m_jets;
|
150 |
TMBLorentzVector m_met;
|
151 |
TMBLorentzVector m_lepton;
|
152 |
|
153 |
TVectorD eigenval;
|
154 |
|
155 |
bool m_isMuon;
|
156 |
|
157 |
/***** removed temporarily
|
158 |
const TMBEMCluster* _electron;
|
159 |
const TMBMuon* _muon;
|
160 |
*****/
|
161 |
|
162 |
//std::vector<TheJetClass*> _jetRAW;
|
163 |
//std::vector<TLorentzVector> _jet;
|
164 |
//TLorentzVector _lepton;
|
165 |
//TLorentzVector _neutrino;
|
166 |
TMBLorentzVector _neutrino;
|
167 |
|
168 |
void calcHt();
|
169 |
std::vector<double> _ht;
|
170 |
bool _htOK;
|
171 |
|
172 |
void calcEvtTopo();
|
173 |
std::vector<double> _evtTopo;
|
174 |
bool _evtTopoOK;
|
175 |
|
176 |
void calcKt();
|
177 |
std::vector<double> _kt;
|
178 |
bool _ktOK;
|
179 |
|
180 |
void calcMt();
|
181 |
std::vector<double> _mt;
|
182 |
bool _mtOK;
|
183 |
};
|
184 |
|
185 |
#endif //LJETSTOPOVARS
|