15 |
|
#ifndef Verbosity |
16 |
|
#define Verbosity 0 |
17 |
|
#endif |
18 |
– |
#ifndef HUSH |
19 |
– |
#define HUSH 1 |
20 |
– |
#endif |
18 |
|
|
19 |
|
#include <TFile.h> |
20 |
|
#include <TTree.h> |
34 |
|
Float_t jzbSel = 100; |
35 |
|
int iplot=0; |
36 |
|
int verbose=0; |
37 |
+ |
string geqleq; |
38 |
+ |
string mcjzbexpression; |
39 |
+ |
|
40 |
+ |
TString geq_or_leq() { |
41 |
+ |
if(geqleq=="geq") return TString(">="); |
42 |
+ |
if(geqleq=="leq") return TString("<="); |
43 |
+ |
return TString("GEQ_OR_LEQ_ERROR"); |
44 |
+ |
} |
45 |
|
|
46 |
|
//______________________________________________________________________________ |
47 |
|
Double_t Interpolate(Double_t x, TH1 *histo) |
86 |
|
nBins,jzbMin,jzbMax); |
87 |
|
Float_t step = (jzbMax-jzbMin)/static_cast<Float_t>(nBins); |
88 |
|
|
89 |
< |
events->Draw("jzb[1]","genJZBSel>-400"&&kbase,"goff"); |
89 |
> |
events->Draw(mcjzbexpression.c_str(),"genJZBSel>-400"&&kbase,"goff"); |
90 |
|
Float_t maxEff = events->GetSelectedRows(); |
91 |
|
if(verbose>0) std::cout << hname << " (" << informalname <<") " << maxEff << std::endl; |
92 |
|
|
95 |
|
char cut[256]; |
96 |
|
for ( Int_t iBin = 0; iBin<nBins; ++iBin ) { |
97 |
|
sprintf(cut,"genJZBSel>%3f",jzbMin+iBin*step); |
98 |
< |
events->Draw("jzb[1]",TCut(cut)&&kbase,"goff"); |
98 |
> |
events->Draw(mcjzbexpression.c_str(),TCut(cut)&&kbase,"goff"); |
99 |
|
Float_t eff = static_cast<Float_t>(events->GetSelectedRows())/maxEff; |
100 |
|
// std::cout << "COUCOU " << __LINE__ << std::endl; |
101 |
|
hJzbEff->SetBinContent(iBin+1,eff); |
114 |
|
jzbMax = myJzbMax; |
115 |
|
|
116 |
|
// Acceptance cuts |
117 |
< |
TCut kbase("abs(genMllSel-91.2)<20&&pfJetGoodNum>2&&genZPtSel>0&&abs(mll-91.2)<20&&((id1+1)*(id2+1)*ch1*ch2)!=-2"); |
117 |
> |
TCut kbase("abs(genMllSel-91.2)<20&&genNjets>2&&genZPtSel>0&&abs(mll-91.2)<20&&((id1+1)*(id2+1)*ch1*ch2)!=-2"); |
118 |
|
|
119 |
|
TH1F* hLM4 = plotEff(events,kbase,informalname); |
120 |
|
hLM4->SetMinimum(0.); |
137 |
|
|
138 |
|
//____________________________________________________________________________________ |
139 |
|
// Total selection efficiency (MC) |
140 |
< |
void MCefficiency(TTree *events,float &res, float &reserr) { |
140 |
> |
void MCefficiency(TTree *events,float &res, float &reserr,string mcjzb) { |
141 |
|
|
142 |
|
char jzbSelStr[256]; sprintf(jzbSelStr,"%f",jzbSel); |
143 |
|
// All acceptance cuts at gen. level |
144 |
< |
TCut kbase("abs(genMllSel-91.2)<20&&pfJetGoodNum>2&&genZPt>0&&genJZB>"+TString(jzbSelStr)+"&&genId1==-genId2"); |
144 |
> |
TCut kbase("abs(genMllSel-91.2)<20&&genNjets>2&&genZPt>0&&genJZB"+geq_or_leq()+TString(jzbSelStr)+"&&genId1==-genId2"); |
145 |
|
// Corresponding reco. cuts |
146 |
< |
TCut ksel("abs(mll-91.2)<20&&id1==id2&&jzb[1]+0.9>"+TString(jzbSelStr)); |
146 |
> |
TCut ksel("abs(mll-91.2)<20&&id1==id2&&"+TString(mcjzb)+geq_or_leq()+TString(jzbSelStr)); |
147 |
|
|
148 |
< |
events->Draw("jzb[1]",kbase&&ksel,"goff"); |
148 |
> |
events->Draw(mcjzbexpression.c_str(),kbase&&ksel,"goff"); |
149 |
|
Float_t sel = events->GetSelectedRows(); |
150 |
< |
events->Draw("jzb[1]",kbase,"goff"); |
150 |
> |
events->Draw(mcjzbexpression.c_str(),kbase,"goff"); |
151 |
|
Float_t tot = events->GetSelectedRows(); |
152 |
|
|
153 |
|
res=sel/tot; |
156 |
|
} |
157 |
|
|
158 |
|
float JZBefficiency(TTree *events, string informalname) { |
159 |
< |
TCut kbase("abs(genMllSel-91.2)<20&&pfJetGoodNum>2&&genZPt>0&&abs(mll-91.2)<20&&((id1+1)*(id2+1)*ch1*ch2)!=-2"); |
159 |
> |
TCut kbase("abs(genMllSel-91.2)<20&&genNjets>2&&genZPt>0&&abs(mll-91.2)<20&&((id1+1)*(id2+1)*ch1*ch2)!=-2"); |
160 |
|
TH1F* hLM4 = plotEff(events,kbase,informalname); |
161 |
|
Int_t bin = hLM4->FindBin(jzbSel); // To get the error |
162 |
|
std::cout << " Efficiency at JZB==" << jzbSel << std::endl; |
204 |
|
// Effect of energy scale on JZB efficiency |
205 |
|
void doJZBscale(TTree *events, float &down, float &up, float &syst, float systematic, string informalname) { |
206 |
|
|
207 |
< |
TCut kbase("abs(genMllSel-91.2)<20&&genZPt>0&&pfJetGoodNum>2"); |
207 |
> |
TCut kbase("abs(genMllSel-91.2)<20&&genZPt>0&&genNjets>2"); |
208 |
|
TCut ksel("abs(mll-91.2)<20&&((id1+1)*(id2+1)*ch1*ch2)!=-2"); |
209 |
|
|
210 |
|
nBins = 50; |
229 |
|
void JZBresponse(TTree *events, bool isMET = kFALSE, Float_t myJzbMax = 200., Int_t nPeriods = 9 ) { |
230 |
|
|
231 |
|
jzbMin = 20; |
232 |
< |
TCut kbase("abs(genMllSel-91.2)<20&&genZPtSel>0&&pfJetGoodNum>2"); |
232 |
> |
TCut kbase("abs(genMllSel-91.2)<20&&genZPtSel>0&&genNjets>2"); |
233 |
|
TCut ksel("abs(mll-91.2)<20&&((id1+1)*(id2+1)*ch1*ch2)!=-2"); |
234 |
|
|
235 |
|
TProfile* hJzbResp = new TProfile("hJzbResp","JZB response ; JZB true (GeV/c); JZB reco. / JZB true", |
236 |
|
nPeriods, jzbMin, myJzbMax, "" ); |
237 |
|
|
238 |
< |
if (!isMET) events->Project("hJzbResp","jzb[1]/genJZBSel:genJZBSel",kbase&&ksel); |
238 |
> |
if (!isMET) events->Project("hJzbResp","("+TString(mcjzbexpression)+")/genJZBSel:genJZBSel",kbase&&ksel); |
239 |
|
else events->Project("hJzbResp","met[4]/genMET:genMET",kbase&&ksel); |
240 |
|
|
241 |
|
hJzbResp->SetMaximum(1.2); |
246 |
|
} |
247 |
|
|
248 |
|
|
249 |
< |
void do_systematics_for_one_file(TTree *events,string informalname, vector<vector<float> > &uncertainties) { |
249 |
> |
void do_systematics_for_one_file(TTree *events,string informalname, vector<vector<float> > &uncertainties,string mcjzb,string datajzb) { |
250 |
|
|
251 |
|
float JetEnergyScaleUncert=0.1; |
252 |
|
float JZBScaleUncert=0.1; |
253 |
+ |
mcjzbexpression=mcjzb; |
254 |
|
|
255 |
|
float triggereff=4;//percent! |
256 |
|
cout << "Trigger efficiency not implemented in this script yet, still using external one" << endl; |
259 |
|
|
260 |
|
float mceff,mcefferr; |
261 |
|
cout << "MC efficiencies:" << endl; |
262 |
< |
MCefficiency(events,mceff,mcefferr); |
262 |
> |
MCefficiency(events,mceff,mcefferr,mcjzb); |
263 |
|
JZBefficiency(events,informalname); |
264 |
|
|
265 |
|
std::cout << "Jet energy scale: " << std::endl; |
302 |
|
cout << "Looking at signal " << (signalsamples.collection)[isignal].filename << endl; |
303 |
|
for(int ibin=0;ibin<bins.size();ibin++) { |
304 |
|
jzbSel=bins[ibin]; |
305 |
< |
do_systematics_for_one_file((signalsamples.collection)[isignal].events,(signalsamples.collection)[isignal].samplename,uncertainties); |
305 |
> |
geqleq="geq"; |
306 |
> |
do_systematics_for_one_file((signalsamples.collection)[isignal].events,(signalsamples.collection)[isignal].samplename,uncertainties,mcjzb,datajzb); |
307 |
|
}//end of bin loop |
308 |
|
}//end of signal loop |
309 |
|
return uncertainties; |