1 |
bortigno |
1.1 |
#ifndef ntupleReader_h
|
2 |
|
|
#define ntupleReader_h
|
3 |
|
|
|
4 |
|
|
#include <TROOT.h>
|
5 |
|
|
#include <TChain.h>
|
6 |
|
|
#include <TFile.h>
|
7 |
|
|
#include "TLorentzVector.h"
|
8 |
bortigno |
1.2 |
#include "ntupleLoader.hpp"
|
9 |
bortigno |
1.1 |
|
10 |
|
|
class ntupleReader : public ntupleLoader {
|
11 |
|
|
public :
|
12 |
|
|
|
13 |
bortigno |
1.2 |
ntupleReader(const char * infile) : ntupleLoader( infile ){};
|
14 |
|
|
// virtual ~ntupleReader();
|
15 |
bortigno |
1.1 |
virtual std::vector<TLorentzVector> SimBs();
|
16 |
|
|
virtual std::vector<TLorentzVector> SVs();
|
17 |
|
|
virtual int CountJets();
|
18 |
|
|
virtual int CountAddJets();
|
19 |
|
|
virtual int CountAddForwardJets();
|
20 |
|
|
virtual int CountAddJets_jec( double sign );
|
21 |
|
|
virtual int CountAddLeptons();
|
22 |
|
|
virtual bool TriggerBit();
|
23 |
|
|
virtual TLorentzVector VectorBoson(); //vector boson TLorentz vector
|
24 |
bortigno |
1.3 |
virtual double resolution(double eta); //smearing for the jet energy resolution
|
25 |
|
|
virtual TLorentzVector hJet_jer( int idx, double sign );
|
26 |
|
|
virtual TLorentzVector H_jer( double sing );
|
27 |
bortigno |
1.1 |
virtual double hJet_PT( int idx, int sign ); //higgs jet energy correction
|
28 |
|
|
virtual double aJet_PT( int idx, int sign ); //addtional jet energy correction
|
29 |
|
|
virtual TLorentzVector Higgs( int sign ); //higgs candidate jet energy correction
|
30 |
|
|
virtual double hJet_CSV( int idx, int sign ); //higgs jet energy correction
|
31 |
|
|
virtual double hJet_pt_jec( int idx, double sign ); //higgs jet energy correction
|
32 |
|
|
virtual double aJet_pt_jec( int idx, double sign ); //addtional jet energy correction
|
33 |
|
|
virtual TLorentzVector H_jec( double sign ); //higgs candidate jet energy correction
|
34 |
|
|
virtual double hJet_csv_cUP( int idx );
|
35 |
|
|
virtual double hJet_csv_cDOWN( int idx );
|
36 |
|
|
virtual double hJet_csv_cFUP( int idx );
|
37 |
|
|
virtual double hJet_csv_cFDOWN( int idx );
|
38 |
|
|
virtual double hJet_pt_jecUP( int idx );
|
39 |
|
|
virtual double hJet_pt_jecDOWN( int idx );
|
40 |
|
|
virtual double aJet_pt_jecUP( int idx );
|
41 |
|
|
virtual double aJet_pt_jecDOWN( int idx );
|
42 |
|
|
virtual TLorentzVector H_jecUP();
|
43 |
|
|
virtual TLorentzVector H_jecDOWN();
|
44 |
|
|
|
45 |
|
|
};
|
46 |
|
|
|
47 |
|
|
|
48 |
|
|
std::vector<TLorentzVector> ntupleReader::SimBs(){
|
49 |
|
|
TLorentzVector simB;
|
50 |
|
|
std::vector<TLorentzVector> iSimBs;
|
51 |
|
|
for(int j=0; j<nSimBs; ++j){
|
52 |
|
|
simB.SetPtEtaPhiM( SimBs_pt[j], SimBs_eta[j], SimBs_phi[j], SimBs_mass[j]);
|
53 |
|
|
iSimBs.push_back( simB );
|
54 |
|
|
}
|
55 |
|
|
return iSimBs;
|
56 |
|
|
}
|
57 |
|
|
|
58 |
|
|
std::vector<TLorentzVector> ntupleReader::SVs(){
|
59 |
|
|
TLorentzVector sv;
|
60 |
|
|
std::vector<TLorentzVector> iSVs;
|
61 |
|
|
for(int j=0; j<nSvs; ++j){
|
62 |
|
|
sv.SetPtEtaPhiM( Sv_pt[j], Sv_eta[j], Sv_phi[j], Sv_massBCand[j]);
|
63 |
|
|
iSVs.push_back( sv );
|
64 |
|
|
}
|
65 |
|
|
return iSVs;
|
66 |
|
|
}
|
67 |
|
|
|
68 |
|
|
TLorentzVector ntupleReader::VectorBoson(){
|
69 |
|
|
TLorentzVector l1, l2;
|
70 |
|
|
l1.SetPtEtaPhiM(vLepton_pt[0],vLepton_eta[0],vLepton_phi[0],vLepton_mass[0] );
|
71 |
|
|
l2.SetPtEtaPhiM(vLepton_pt[1],vLepton_eta[1],vLepton_phi[1],vLepton_mass[1] );
|
72 |
|
|
return (l1+l2);
|
73 |
|
|
}
|
74 |
|
|
|
75 |
bortigno |
1.3 |
//JER
|
76 |
|
|
double ntupleReader::resolution(double eta){
|
77 |
|
|
double inner = 0.06;
|
78 |
|
|
double outer = 0.1;
|
79 |
|
|
double eta_tracker = 1.1;
|
80 |
|
|
if(abs(eta) < eta_tracker) return inner; else return outer;
|
81 |
|
|
}
|
82 |
|
|
TLorentzVector ntupleReader::hJet_jer( int idx, double sign ){
|
83 |
|
|
TLorentzVector tmp;
|
84 |
|
|
double hJet_pt_jer = hJet_pt[idx] + sign * resolution(hJet_eta[idx])*TMath::Abs(hJet_pt[idx]-hJet_genPt[idx]);
|
85 |
|
|
tmp.SetPtEtaPhiE( hJet_pt_jer,
|
86 |
|
|
hJet_eta[idx],
|
87 |
|
|
hJet_phi[idx],
|
88 |
|
|
hJet_e[idx]*(hJet_pt_jer/hJet_pt[idx]) );
|
89 |
|
|
return tmp;
|
90 |
|
|
}
|
91 |
|
|
|
92 |
|
|
TLorentzVector ntupleReader::H_jer( double sign ){
|
93 |
|
|
TLorentzVector h;
|
94 |
|
|
h = hJet_jer( 0, sign ) + hJet_jer( 1, sign );
|
95 |
|
|
return h;
|
96 |
|
|
}
|
97 |
|
|
|
98 |
bortigno |
1.1 |
double ntupleReader::hJet_PT( int idx, int sign ){ return hJet_pt[idx]*(1 + (sign)*hJet_JECUnc[idx]); }
|
99 |
|
|
double ntupleReader::aJet_PT( int idx, int sign ){ return aJet_pt[idx]*(1 + (sign)*aJet_JECUnc[idx]); }
|
100 |
|
|
TLorentzVector ntupleReader::Higgs( int sign ){
|
101 |
|
|
TLorentzVector j1,j2,H;
|
102 |
|
|
j1.SetPtEtaPhiE( hJet_pt_jec(0,sign), hJet_eta[0], hJet_phi[0], hJet_e[0] );
|
103 |
|
|
j2.SetPtEtaPhiE( hJet_pt_jec(1,sign), hJet_eta[1], hJet_phi[1], hJet_e[1] );
|
104 |
|
|
return H=j1+j2;
|
105 |
|
|
}
|
106 |
|
|
double ntupleReader::hJet_CSV( int idx, int sign ){
|
107 |
|
|
if(sign == 1) return (hJet_csvUp[idx]);
|
108 |
|
|
else if(sign == -1) return (hJet_csvDown[idx]);
|
109 |
|
|
else if( sign == 2 ) return (hJet_csvFUp[idx]);
|
110 |
|
|
else if( sign == -2 ) return (hJet_csvFDown[idx]) ;
|
111 |
|
|
else return (hJet_csv[idx]);
|
112 |
|
|
}
|
113 |
|
|
|
114 |
|
|
|
115 |
|
|
//for jet energy correction variation
|
116 |
|
|
double ntupleReader::hJet_pt_jec( int idx, double sign ){ return hJet_pt[idx]*(1 + (sign)*hJet_JECUnc[idx]); }
|
117 |
|
|
double ntupleReader::aJet_pt_jec( int idx, double sign ){ return aJet_pt[idx]*(1 + (sign)*aJet_JECUnc[idx]); }
|
118 |
|
|
TLorentzVector ntupleReader::H_jec( double sign ){
|
119 |
|
|
TLorentzVector j1,j2,H;
|
120 |
|
|
j1.SetPtEtaPhiE( hJet_pt_jec(0,sign), hJet_eta[0], hJet_phi[0], hJet_e[0] );
|
121 |
|
|
j2.SetPtEtaPhiE( hJet_pt_jec(1,sign), hJet_eta[1], hJet_phi[1], hJet_e[1] );
|
122 |
|
|
return H=j1+j2;
|
123 |
|
|
}
|
124 |
|
|
double ntupleReader::hJet_csv_cUP( int idx ){ return ( hJet_csvUp[idx] ); }
|
125 |
|
|
double ntupleReader::hJet_csv_cDOWN( int idx ){ return ( hJet_csvDown[idx] ); }
|
126 |
|
|
double ntupleReader::hJet_csv_cFUP( int idx ){ return ( hJet_csvFUp[idx] ); }
|
127 |
|
|
double ntupleReader::hJet_csv_cFDOWN( int idx ){ return ( hJet_csvFDown[idx] ); }
|
128 |
|
|
double ntupleReader::hJet_pt_jecUP( int idx ){ return hJet_pt_jec(idx,+1); }
|
129 |
|
|
double ntupleReader::hJet_pt_jecDOWN( int idx ){ return hJet_pt_jec(idx,-1); }
|
130 |
|
|
double ntupleReader::aJet_pt_jecUP( int idx ){ return aJet_pt_jec(idx,+1); }
|
131 |
|
|
double ntupleReader::aJet_pt_jecDOWN( int idx ){ return aJet_pt_jec(idx,-1); }
|
132 |
|
|
TLorentzVector ntupleReader::H_jecUP(){ return H_jec(+1); }
|
133 |
|
|
TLorentzVector ntupleReader::H_jecDOWN(){ return H_jec(-1); }
|
134 |
|
|
|
135 |
|
|
|
136 |
|
|
int ntupleReader::CountJets(){
|
137 |
|
|
int sum=0;
|
138 |
|
|
for(int i=0; i<nhJets; ++i)
|
139 |
|
|
if( hJet_pt[i] > 20.
|
140 |
|
|
&& TMath::Abs(hJet_eta[i]) < 2.4 )
|
141 |
|
|
sum++;
|
142 |
|
|
for(int i=0; i<naJets; ++i)
|
143 |
|
|
if( aJet_pt[i] > 20.
|
144 |
|
|
&& TMath::Abs(aJet_eta[i]) < 2.4 )
|
145 |
|
|
sum++;
|
146 |
|
|
return sum;
|
147 |
|
|
}
|
148 |
|
|
int ntupleReader::CountAddJets(){
|
149 |
|
|
int sum=0;
|
150 |
|
|
for(int i=0; i<naJets; ++i)
|
151 |
|
|
if( aJet_pt[i] > 20.
|
152 |
|
|
&& TMath::Abs(aJet_eta[i]) < 2.4 )
|
153 |
|
|
sum++;
|
154 |
|
|
return sum;
|
155 |
|
|
}
|
156 |
|
|
int ntupleReader::CountAddForwardJets(){
|
157 |
|
|
int sum=0;
|
158 |
|
|
for(int i=0; i<naJets; ++i)
|
159 |
|
|
if( aJet_pt[i] > 30.
|
160 |
|
|
&& TMath::Abs(aJet_eta[i]) > 2.4
|
161 |
|
|
&& TMath::Abs(aJet_eta[i]) < 4.5 )
|
162 |
|
|
sum++;
|
163 |
|
|
return sum;
|
164 |
|
|
}
|
165 |
|
|
int ntupleReader::CountAddJets_jec( double sign ){
|
166 |
|
|
int sum=0;
|
167 |
|
|
for(int i=0; i<naJets; ++i)
|
168 |
|
|
if( aJet_pt[i]*(1+(sign)*aJet_JECUnc[i]) > 20.
|
169 |
|
|
&& TMath::Abs(aJet_eta[i]) < 2.4 )
|
170 |
|
|
sum++;
|
171 |
|
|
return sum;
|
172 |
|
|
}
|
173 |
|
|
|
174 |
|
|
int ntupleReader::CountAddLeptons(){
|
175 |
|
|
int sum=0;
|
176 |
|
|
for(int i=0; i<nalep; ++i)
|
177 |
|
|
if( aLepton_pt[i] > 15.
|
178 |
|
|
&& abs(aLepton_eta[i]) < 2.5
|
179 |
|
|
&& aLepton_pfCombRelIso[i] < 0.15 )
|
180 |
|
|
sum++;
|
181 |
|
|
return sum;
|
182 |
|
|
}
|
183 |
|
|
bool ntupleReader::TriggerBit()
|
184 |
|
|
{
|
185 |
|
|
if( triggerFlags[5]
|
186 |
|
|
|| triggerFlags[6] )
|
187 |
|
|
return false;
|
188 |
|
|
else
|
189 |
|
|
return true;
|
190 |
|
|
}
|
191 |
|
|
|
192 |
|
|
#endif // #ifdef ntupleReader_cxx
|
193 |
|
|
|