1 |
//
|
2 |
// Test of the JZB selection efficiency
|
3 |
//
|
4 |
|
5 |
#include <iostream>
|
6 |
#include <iomanip>
|
7 |
|
8 |
#include "TTree.h"
|
9 |
#include "TFile.h"
|
10 |
#include "TH1F.h"
|
11 |
#include "TCut.h"
|
12 |
#include "TLine.h"
|
13 |
#include "TMath.h"
|
14 |
#include "TCanvas.h"
|
15 |
#include "TString.h"
|
16 |
#include "TLegend.h"
|
17 |
#include "TProfile.h"
|
18 |
#include "TF1.h"
|
19 |
|
20 |
Int_t nBins = 100;
|
21 |
Float_t jzbMin = -207;
|
22 |
Float_t jzbMax = 243;
|
23 |
Float_t jzbSel = 100;
|
24 |
|
25 |
|
26 |
TFile* getFile(TString name) {
|
27 |
// TString dcPath("dcap://t3se01.psi.ch:22125/pnfs/psi.ch/cms/trivcat/store/user/buchmann/");
|
28 |
TString dcPath("/scratch/fronga/MC_v1.29/");
|
29 |
TFile* file = TFile::Open(dcPath+name+".root");
|
30 |
if ( file->IsOpen() ) return file;
|
31 |
|
32 |
exit(-1);
|
33 |
|
34 |
}
|
35 |
|
36 |
//____________________________________________________________________________________
|
37 |
// Efficiency plot
|
38 |
TH1F* plotEff(TTree* events, TCut kbase, int count) {
|
39 |
|
40 |
// Define new histogram
|
41 |
char hname[30]; sprintf(hname,"hJzbEff%d",count);
|
42 |
TH1F* hJzbEff = new TH1F(hname,"JZB selection efficiency ; JZB (GeV/c); Efficiency",
|
43 |
nBins,jzbMin,jzbMax);
|
44 |
Float_t step = (jzbMax-jzbMin)/static_cast<Float_t>(nBins);
|
45 |
|
46 |
events->Draw("jzb[1]","genJZBSel>-400"&&kbase,"goff");
|
47 |
Float_t maxEff = events->GetSelectedRows();
|
48 |
std::cout << hname << " " << maxEff << std::endl;
|
49 |
|
50 |
std::cout << "JZB max = " << jzbMax << std::endl;
|
51 |
// Loop over steps to get efficiency curve
|
52 |
char cut[256];
|
53 |
for ( Int_t iBin = 0; iBin<nBins; ++iBin ) {
|
54 |
sprintf(cut,"genJZBSel>%3f",jzbMin+iBin*step);
|
55 |
events->Draw("jzb[1]",TCut(cut)&&kbase,"goff");
|
56 |
Float_t eff = static_cast<Float_t>(events->GetSelectedRows())/maxEff;
|
57 |
// std::cout << "COUCOU " << __LINE__ << std::endl;
|
58 |
hJzbEff->SetBinContent(iBin+1,eff);
|
59 |
hJzbEff->SetBinError(iBin+1,TMath::Sqrt(eff*(1-eff)/maxEff));
|
60 |
}
|
61 |
return hJzbEff;
|
62 |
|
63 |
|
64 |
}
|
65 |
|
66 |
//____________________________________________________________________________________
|
67 |
// MC expectation
|
68 |
int expected(Float_t jzbCut = 100.) {
|
69 |
|
70 |
TFile* fLM4 = getFile("LM4_SUSY_sftsht_7TeV-pythia6");
|
71 |
TFile* fLM8 = getFile("LM8_SUSY_sftsht_7TeV-pythia6");
|
72 |
TFile* fTTJ = getFile("TTJets_TuneZ2_7TeV-madgraph-tauola");
|
73 |
TFile* fZLL = getFile("DYJetsToLL_TuneZ2_M-50_7TeV-madgraph-tauola");
|
74 |
|
75 |
// TCanvas* mycanvas = new TCanvas("mycanvas","canvas",600,500);
|
76 |
// mycanvas->Draw();
|
77 |
|
78 |
// Acceptance cuts
|
79 |
char cut[256];
|
80 |
sprintf(cut,"jzb[1]>%f",jzbCut);
|
81 |
TCut kbase("pfJetGoodNum>2&&abs(mll-91.2)<20&&id1==id2"&&TCut(cut));
|
82 |
std::cout << kbase.GetTitle() << std::endl;
|
83 |
|
84 |
Float_t lumi = 191.; // [1/pb]
|
85 |
Float_t xs[] = { 2.54, 1.029, 157.5, 3048.0 };
|
86 |
// Float_t sys[] = { 5/91.9, 5/88.5 }; // 50 GeV
|
87 |
Float_t sys[] = { 6.6/90.4, 6.9/85.3 }; // 100 GeV
|
88 |
Float_t nevents[] = { 242322.0, 242322.0, 1161621.0, 2313911.0};
|
89 |
|
90 |
Long_t nentries = ((TTree*)fLM4->Get("events"))->Draw("jzb[1]",kbase,"goff");
|
91 |
int isample = 0;
|
92 |
Float_t rescaling = lumi/nevents[isample]*xs[isample];
|
93 |
std::cout << "LM4: " << nentries << " " << nentries*rescaling << "+-" << sqrt(nentries)*rescaling << "+-" << nentries*sys[isample]*rescaling << std::endl;
|
94 |
std::cout << "LM4 (sigma x BR x acc): " << nentries/nevents[isample]*xs[isample] << std::endl;
|
95 |
|
96 |
++isample;
|
97 |
nentries = ((TTree*)fLM8->Get("events"))->Draw("jzb[1]",kbase,"goff");
|
98 |
rescaling = lumi/nevents[isample]*xs[isample];
|
99 |
std::cout << "LM8: " << nentries << " " << nentries*rescaling << "+-" << sqrt(nentries)*rescaling << "+-" << nentries*sys[isample]*rescaling << std::endl;
|
100 |
std::cout << "LM8 (sigma x BR x acc): " << nentries/nevents[isample]*xs[isample] << std::endl;
|
101 |
|
102 |
// ++isample;
|
103 |
// nentries = ((TTree*)fTTJ->Get("events"))->Draw("jzb[1]",kbase,"goff");
|
104 |
// std::cout << "TTJ: " << nentries << " " << nentries*lumi/nevents[isample]*xs[isample] << std::endl;
|
105 |
|
106 |
// ++isample;
|
107 |
// nentries = ((TTree*)fZLL->Get("events"))->Draw("jzb[1]",kbase,"goff");
|
108 |
// std::cout << "ZLL: " << nentries << " " << nentries*lumi/nevents[isample]*xs[isample] << std::endl;
|
109 |
|
110 |
return 0;
|
111 |
|
112 |
}
|
113 |
|
114 |
|
115 |
//____________________________________________________________________________________
|
116 |
// JZB selection efficiency
|
117 |
int JZBeff(void) {
|
118 |
|
119 |
TFile* fLM4 = getFile("LM4_SUSY_sftsht_7TeV-pythia6");
|
120 |
TFile* fLM8 = getFile("LM8_SUSY_sftsht_7TeV-pythia6");
|
121 |
TFile* fTTJ = getFile("TTJets_TuneZ2_7TeV-madgraph-tauola");
|
122 |
TFile* fZLL = getFile("DYJetsToLL_TuneZ2_M-50_7TeV-madgraph-tauola");
|
123 |
|
124 |
// TFile* fLM4 = TFile::Open("dcap://t3se01.psi.ch:22125/pnfs/psi.ch/cms/trivcat/store/user/buchmann/MCSpring2011PU/LM4_SUSY_sftsht_7TeV-pythia6.root");
|
125 |
// TFile* fLM8 = TFile::Open("dcap://t3se01.psi.ch:22125/pnfs/psi.ch/cms/trivcat/store/user/buchmann/MCSpring2011PU/LM8_SUSY_sftsht_7TeV-pythia6.root");
|
126 |
// TFile* fTTJ = TFile::Open("dcap://t3se01.psi.ch:22125/pnfs/psi.ch/cms/trivcat/store/user/buchmann/MCSpring2011PU/TTJets_TuneZ2_7TeV-madgraph-tauola.root");
|
127 |
// TFile* fZLL = TFile::Open("dcap://t3se01.psi.ch:22125/pnfs/psi.ch/cms/trivcat/store/user/buchmann/MCSpring2011PU/DYJetsToLL_TuneZ2_M-50_7TeV-madgraph-tauola.root");
|
128 |
|
129 |
TCanvas* mycanvas = new TCanvas("mycanvas","canvas",600,500);
|
130 |
mycanvas->Draw();
|
131 |
|
132 |
// Acceptance cuts
|
133 |
TCut kbase("abs(genMllSel-91.2)<20&&pfJetGoodNum>2&&genZPt>0&&abs(mll-91.2)<20&&((id1+1)*(id2+1)*ch1*ch2)!=-2");
|
134 |
|
135 |
int iplot=0;
|
136 |
TH1F* hLM4 = plotEff((TTree*)fLM4->Get("events"),kbase,iplot++);
|
137 |
hLM4->SetTitle("LM4");
|
138 |
hLM4->SetMarkerColor(kRed);
|
139 |
hLM4->SetMarkerStyle(24);
|
140 |
hLM4->SetMinimum(0.);
|
141 |
|
142 |
TH1F* hLM8 = plotEff((TTree*)fLM8->Get("events"),kbase,iplot++);
|
143 |
hLM8->SetTitle("LM8");
|
144 |
hLM8->SetMarkerColor(kRed);
|
145 |
|
146 |
TH1F* hZLL = plotEff((TTree*)fZLL->Get("events"),kbase,iplot++);
|
147 |
hZLL->SetTitle("Z+jets");
|
148 |
hZLL->SetMarkerColor(kBlack);
|
149 |
hZLL->SetMarkerStyle(21);
|
150 |
|
151 |
// Remove ZPt cut for TTJets
|
152 |
kbase = TCut("abs(genMllSel-91.2)<20&&pfJetGoodNum>2&&abs(mll-91.2)<20&&((id1+1)*(id2+1)*ch1*ch2)!=-2");
|
153 |
TH1F* hTTJ = plotEff((TTree*)fTTJ->Get("events"),kbase,iplot++);
|
154 |
hTTJ->SetTitle("ttbar");
|
155 |
hTTJ->SetMarkerColor(kGreen-3);
|
156 |
hTTJ->SetMarkerStyle(30);
|
157 |
|
158 |
// Add line where we cut
|
159 |
TLine* lSelect = new TLine(jzbSel,0.,jzbSel,hLM4->GetMaximum()*1.05);
|
160 |
lSelect->SetLineWidth(2);
|
161 |
lSelect->SetLineColor(kBlue);
|
162 |
|
163 |
// Dump some information
|
164 |
Int_t bin = hLM4->FindBin(jzbSel); // To get the error
|
165 |
std::cout << "Efficiency at JZB==" << jzbSel << std::endl;
|
166 |
std::cout << " LM4: " << hLM4->Interpolate(jzbSel) << "+-" << hLM4->GetBinError(bin) << std::endl;
|
167 |
std::cout << " LM8: " << hLM8->Interpolate(jzbSel) << "+-" << hLM8->GetBinError(bin) << std::endl;
|
168 |
std::cout << " TTJ: " << hTTJ->Interpolate(jzbSel) << "+-" << hTTJ->GetBinError(bin) << std::endl;
|
169 |
std::cout << " ZLL: " << hZLL->Interpolate(jzbSel) << "+-" << hZLL->GetBinError(bin) << std::endl;
|
170 |
|
171 |
// Draw it all
|
172 |
hLM4->Draw("E1");
|
173 |
hLM8->Draw("sameE1");
|
174 |
hTTJ->Draw("sameE1");
|
175 |
hZLL->Draw("sameE1");
|
176 |
lSelect->Draw();
|
177 |
|
178 |
// Add legend
|
179 |
TLegend* legend = new TLegend(0.7,0.7,0.9,0.9);
|
180 |
legend->AddEntry(hZLL,hZLL->GetTitle(),"p");
|
181 |
legend->AddEntry(hTTJ,hTTJ->GetTitle(),"p");
|
182 |
legend->AddEntry(hLM4,hLM4->GetTitle(),"p");
|
183 |
legend->AddEntry(hLM8,hLM8->GetTitle(),"p");
|
184 |
legend->SetFillColor(0);
|
185 |
legend->SetBorderSize(1);
|
186 |
legend->Draw();
|
187 |
|
188 |
mycanvas->SaveAs("plots/JZBefficiency.eps");
|
189 |
mycanvas->SaveAs("plots/macros/JZBefficiency.C");
|
190 |
|
191 |
return 0;
|
192 |
|
193 |
}
|
194 |
|
195 |
|
196 |
//____________________________________________________________________________________
|
197 |
// Total selection efficiency (MC)
|
198 |
int MCeff(void) {
|
199 |
|
200 |
char jzbSelStr[256]; sprintf(jzbSelStr,"%f",jzbSel);
|
201 |
// All acceptance cuts at gen. level
|
202 |
TCut kbase("abs(genMllSel-91.2)<20&&pfJetGoodNum>2&&genZPt>0&&genJZB>"+TString(jzbSelStr)+"&&genId1==-genId2");
|
203 |
// Corresponding reco. cuts
|
204 |
TCut ksel("abs(mll-91.2)<20&&id1==id2&&jzb[1]+0.9>"+TString(jzbSelStr));
|
205 |
TFile* fLM4 = getFile("LM4_SUSY_sftsht_7TeV-pythia6");
|
206 |
TFile* fLM8 = getFile("LM8_SUSY_sftsht_7TeV-pythia6");
|
207 |
TFile* fTTJ = getFile("TTJets_TuneZ2_7TeV-madgraph-tauola");
|
208 |
// TFile* fZLL = getFile("MCSpring2011PU/DYJetsToLL_TuneZ2_M-50_7TeV-madgraph-tauola");
|
209 |
|
210 |
TTree* tLM4 = ((TTree*)fLM4->Get("events"));
|
211 |
tLM4->Draw("jzb[1]",kbase&&ksel,"goff");
|
212 |
Float_t selLM4 = tLM4->GetSelectedRows();
|
213 |
tLM4->Draw("jzb[1]",kbase,"goff");
|
214 |
Float_t totLM4 = tLM4->GetSelectedRows();
|
215 |
|
216 |
TTree* tLM8 = ((TTree*)fLM8->Get("events"));
|
217 |
tLM8->Draw("jzb[1]",kbase&&ksel,"goff");
|
218 |
Float_t selLM8 = tLM8->GetSelectedRows();
|
219 |
tLM8->Draw("jzb[1]",kbase,"goff");
|
220 |
Float_t totLM8 = tLM8->GetSelectedRows();
|
221 |
|
222 |
// TTree* tZLL = ((TTree*)fZLL->Get("events"));
|
223 |
// tZLL->Draw("jzb[1]",kbase&&ksel,"goff");
|
224 |
// Float_t selZLL = tZLL->GetSelectedRows();
|
225 |
// tZLL->Draw("jzb[1]",kbase,"goff");
|
226 |
// Float_t totZLL = tZLL->GetSelectedRows();
|
227 |
|
228 |
// // TTBar: remove ZPt cut
|
229 |
// kbase = TCut("genZPtSel>0&&genPt1Sel>20&&abs(genEta1Sel)<2.4&&abs(genEta2Sel)<2.4&&genPt2Sel>20&&abs(genMllSel-91.2)<20&&pfJetGoodNum>1&&genId1==-genId2&&genJZBSel>50");
|
230 |
// TTree* tTTJ = ((TTree*)fTTJ->Get("events"));
|
231 |
// tTTJ->Draw("jzb[1]",kbase&&ksel,"goff");
|
232 |
// Float_t selTTJ = tTTJ->GetSelectedRows();
|
233 |
// tTTJ->Draw("jzb[1]",kbase,"goff");
|
234 |
// Float_t totTTJ = tTTJ->GetSelectedRows();
|
235 |
|
236 |
std::cout << "LM4: " << selLM4/totLM4 << "+-" << TMath::Sqrt(selLM4/totLM4*(1-selLM4/totLM4)/totLM4) << std::endl;
|
237 |
std::cout << "LM8: " << selLM8/totLM8 << "+-" << TMath::Sqrt(selLM8/totLM8*(1-selLM8/totLM8)/totLM8) << std::endl;
|
238 |
// std::cout << "TTJ: " << selTTJ/totTTJ << "+-" << TMath::Sqrt(selTTJ/totTTJ*(1-selTTJ/totTTJ)/totTTJ) << std::endl;
|
239 |
// std::cout << "ZLL: " << selZLL/totZLL << "+-" << TMath::Sqrt(selZLL/totZLL*(1-selZLL/totZLL)/totZLL) << std::endl;
|
240 |
|
241 |
|
242 |
|
243 |
return 0;
|
244 |
|
245 |
}
|
246 |
|
247 |
//________________________________________________________________________
|
248 |
// Effect of energy scale on efficiency
|
249 |
int JZBjetScale(TString fileName = "LM4_SUSY_sftsht_7TeV-pythia6", Float_t jzbSelection=-1, TString plotName = "" ) {
|
250 |
TFile* file = getFile(fileName);
|
251 |
TCut kbase("abs(genMllSel-91.2)<20&&genZPt>0");
|
252 |
TCut ksel("abs(mll-91.2)<20&&((id1+1)*(id2+1)*ch1*ch2)!=-2");
|
253 |
TCut nJets("pfJetGoodNum>2");
|
254 |
TCut nJetsP("pfJetGoodNum33>2");
|
255 |
TCut nJetsM("pfJetGoodNum27>2");
|
256 |
|
257 |
if ( jzbSelection>0 ) jzbSel = jzbSelection;
|
258 |
|
259 |
if ( !(plotName.Length()>1) ) plotName = fileName;
|
260 |
|
261 |
TCanvas* mycanvas = new TCanvas("mycanvas","canvas",600,500);
|
262 |
mycanvas->Draw();
|
263 |
|
264 |
int iplot=0;
|
265 |
nBins = 1; jzbMin = jzbSel*0.95; jzbMax = jzbSel*1.05;
|
266 |
TH1F* hist = plotEff((TTree*)file->Get("events"),(kbase&&ksel&&nJets),iplot++);
|
267 |
hist->SetTitle(plotName+" p_{T}>30 GeV/c");
|
268 |
hist->SetMarkerColor(kRed);
|
269 |
hist->SetMarkerStyle(24);
|
270 |
|
271 |
TH1F* histp = plotEff((TTree*)file->Get("events"),(kbase&&ksel&&nJetsP),iplot++);
|
272 |
histp->SetTitle(plotName+" "+nJetsP.GetTitle());
|
273 |
histp->SetMarkerColor(kRed);
|
274 |
histp->SetMarkerStyle(21);
|
275 |
|
276 |
TH1F* histm = plotEff((TTree*)file->Get("events"),(kbase&&ksel&&nJetsM),iplot++);
|
277 |
histm->SetTitle(plotName+" "+nJetsM.GetTitle());
|
278 |
histm->SetMarkerColor(kRed);
|
279 |
histm->SetMarkerStyle(22);
|
280 |
|
281 |
// Add line where we cut
|
282 |
TLine* lSelect = new TLine(jzbSel,0.,jzbSel,hist->GetMaximum()*1.05);
|
283 |
lSelect->SetLineStyle(2);
|
284 |
lSelect->SetLineColor(kBlue);
|
285 |
|
286 |
// Dump some information
|
287 |
Float_t eff = hist->Interpolate(jzbSel);
|
288 |
Float_t effp = histp->Interpolate(jzbSel);
|
289 |
Float_t effm = histm->Interpolate(jzbSel);
|
290 |
std::cout << "Efficiency at JZB==" << jzbSel << std::endl;
|
291 |
std::cout << plotName << ": " << eff << std::endl;
|
292 |
std::cout << plotName << "p: " << effp << " (" << (effp-eff)/eff*100. << "%)" << std::endl;
|
293 |
std::cout << plotName << "m: " << effm << " (" << (effm-eff)/eff*100. << "%)" << std::endl;
|
294 |
|
295 |
// Draw it all
|
296 |
hist->Draw("E1");
|
297 |
histp->Draw("sameE1");
|
298 |
histm->Draw("sameE1");
|
299 |
lSelect->Draw();
|
300 |
|
301 |
// // Add legend
|
302 |
// TLegend* legend = new TLegend(0.7,0.7,0.9,0.9);
|
303 |
// legend->AddEntry(hist, hist->GetTitle(),"p");
|
304 |
// legend->AddEntry(histp,histp->GetTitle(),"p");
|
305 |
// legend->AddEntry(histm,histm->GetTitle(),"p");
|
306 |
// legend->SetFillColor(0);
|
307 |
// legend->SetBorderSize(1);
|
308 |
// legend->Draw();
|
309 |
|
310 |
return 0;
|
311 |
|
312 |
}
|
313 |
|
314 |
//________________________________________________________________________
|
315 |
// Effect of energy scale on JZB efficiency
|
316 |
int JZBscale(TString fileName = "LM4_SUSY_sftsht_7TeV-pythia6", Float_t jzbSelection=-1, TString plotName = "" ) {
|
317 |
|
318 |
Float_t syst = 0.1; //0.05; //0.1;
|
319 |
|
320 |
TFile* file = new TFile("/scratch/fronga/MC_v1.29/"+fileName+".root");
|
321 |
TCut kbase("abs(genMllSel-91.2)<20&&genZPt>0&&pfJetGoodNum>2");
|
322 |
TCut ksel("abs(mll-91.2)<20&&((id1+1)*(id2+1)*ch1*ch2)!=-2");
|
323 |
|
324 |
TCanvas* mycanvas = new TCanvas("mycanvas","canvas",600,500);
|
325 |
mycanvas->Draw();
|
326 |
|
327 |
if ( jzbSelection>0 ) jzbSel = jzbSelection;
|
328 |
|
329 |
nBins = 50;
|
330 |
jzbMin = 0.5*jzbSel;
|
331 |
jzbMax = 2.0*jzbSel;
|
332 |
|
333 |
int iplot=0;
|
334 |
TTree* events = (TTree*)file->Get("events");
|
335 |
TH1F* hist = plotEff(events,kbase&&ksel,iplot++);
|
336 |
hist->SetTitle(plotName+" p_{T}>30 GeV/c");
|
337 |
hist->SetLineColor(kRed);
|
338 |
hist->SetMinimum(0.);
|
339 |
hist->SetMaximum(1.);
|
340 |
|
341 |
// Add lines where we cut
|
342 |
TLine* lSelect = new TLine(jzbSel,0.,jzbSel,hist->GetMaximum());
|
343 |
lSelect->SetLineColor(kBlue);
|
344 |
|
345 |
// Dump some information
|
346 |
Float_t eff = hist->Interpolate(jzbSel);
|
347 |
Float_t effp = hist->Interpolate(jzbSel*(1.+syst));
|
348 |
Float_t effm = hist->Interpolate(jzbSel*(1.-syst));
|
349 |
std::cout << fileName << " eff at JZB==" << jzbSel << ": " << eff << std::endl;
|
350 |
std::cout << fileName << " eff at JZB==" << jzbSel*(1.+syst) << ": " << effp << " (" << ((effp-eff)/eff)*100. << "%)" << std::endl;
|
351 |
std::cout << fileName << " eff at JZB==" << jzbSel*(1.-syst) << ": " << effm << " (" << ((effm-eff)/eff)*100. << "%)" << std::endl;
|
352 |
|
353 |
// Draw it all
|
354 |
hist->Draw("E1");
|
355 |
lSelect->Draw();
|
356 |
lSelect->SetLineStyle(2);
|
357 |
lSelect->DrawLine(jzbSel*(1+syst),0.,jzbSel*(1+syst),hist->GetMaximum());
|
358 |
lSelect->DrawLine(jzbSel*(1-syst),0.,jzbSel*(1-syst),hist->GetMaximum());
|
359 |
|
360 |
mycanvas->SaveAs("plots/jzbScale"+fileName+".eps");
|
361 |
mycanvas->SaveAs("plots/macros/jzbScale"+fileName+".C");
|
362 |
|
363 |
return 0;
|
364 |
|
365 |
}
|
366 |
|
367 |
//________________________________________________________________________
|
368 |
// JZB response (true/reco. vs. true)
|
369 |
int JZBresponse(TString fileName = "LM4_SUSY_sftsht_7TeV-pythia6", bool isMET = kFALSE, Float_t myJzbMax = 200., Int_t nPeriods = 9 ) {
|
370 |
TFile* file = getFile(fileName);
|
371 |
|
372 |
TCanvas* mycanvas = new TCanvas("mycanvas","canvas",600,500);
|
373 |
mycanvas->Draw();
|
374 |
|
375 |
jzbMin = 20;
|
376 |
|
377 |
TCut kbase("abs(genMllSel-91.2)<20&&genZPtSel>0&&pfJetGoodNum>2");
|
378 |
TCut ksel("abs(mll-91.2)<20&&((id1+1)*(id2+1)*ch1*ch2)!=-2");
|
379 |
|
380 |
TProfile* hJzbResp = new TProfile("hJzbResp","JZB response ; JZB true (GeV/c); JZB reco. / JZB true",
|
381 |
nPeriods, jzbMin, myJzbMax, "" );
|
382 |
|
383 |
TTree* events = (TTree*)file->Get("events");
|
384 |
if (!isMET) events->Project("hJzbResp","jzb[1]/genJZBSel:genJZBSel",kbase&&ksel);
|
385 |
else events->Project("hJzbResp","met[4]/genMET:genMET",kbase&&ksel);
|
386 |
|
387 |
hJzbResp->SetMaximum(1.2);
|
388 |
hJzbResp->SetMinimum(0.2);
|
389 |
hJzbResp->Fit("pol0");
|
390 |
|
391 |
// Draw line at 1
|
392 |
TLine* lSelect = new TLine(hJzbResp->GetXaxis()->GetXmin(),1.,hJzbResp->GetXaxis()->GetXmax(),1.);
|
393 |
lSelect->SetLineColor(kBlue);
|
394 |
lSelect->SetLineStyle(2);
|
395 |
lSelect->Draw();
|
396 |
|
397 |
TString name("JZB");
|
398 |
if ( isMET ) name = TString("MET");
|
399 |
mycanvas->SaveAs("plots/"+name+"response"+fileName+".eps");
|
400 |
mycanvas->SaveAs("plots/macros/"+name+"response"+fileName+".C");
|
401 |
|
402 |
|
403 |
return 0;
|
404 |
|
405 |
}
|
406 |
|
407 |
//________________________________________________________________________________________
|
408 |
// Pile-up efficiency
|
409 |
int pileup(TString fileName = "LM4_SUSY_sftsht_7TeV-pythia6", Float_t myJzbMax = 140. ) {
|
410 |
TFile* file = getFile(fileName);
|
411 |
|
412 |
nBins = 16;
|
413 |
jzbMax = myJzbMax;
|
414 |
TCanvas* mycanvas = new TCanvas("mycanvas","canvas",600,500);
|
415 |
mycanvas->Draw();
|
416 |
|
417 |
// Acceptance cuts
|
418 |
TCut kbase("abs(genMllSel-91.2)<20&&pfJetGoodNum>2&&genZPtSel>0&&abs(mll-91.2)<20&&((id1+1)*(id2+1)*ch1*ch2)!=-2");
|
419 |
int iplot=0;
|
420 |
|
421 |
TH1F* hLM4 = plotEff((TTree*)file->Get("events"),kbase,iplot++);
|
422 |
hLM4->SetTitle(fileName);
|
423 |
hLM4->SetMarkerColor(kRed);
|
424 |
hLM4->SetMarkerStyle(24);
|
425 |
hLM4->SetMinimum(0.);
|
426 |
|
427 |
// Nominal function
|
428 |
TF1* func = new TF1("func","0.5*TMath::Erfc([0]*x-[1])",jzbMin,jzbMax);
|
429 |
func->SetParameter(0,0.03);
|
430 |
func->SetParameter(1,0.);
|
431 |
hLM4->Fit(func);
|
432 |
|
433 |
// Pimped-up function
|
434 |
TF1* funcUp = (TF1*)func->Clone();
|
435 |
funcUp->SetParameter( 0., func->GetParameter(0)/1.1); // 10% systematic error (up in sigma => 0.1 in erfc)
|
436 |
funcUp->SetLineColor(kRed);
|
437 |
funcUp->SetLineStyle(2);
|
438 |
funcUp->Draw("same");
|
439 |
|
440 |
std::cout << funcUp->Eval(jzbSel) << " " << func->Eval(jzbSel)
|
441 |
<< "(" << (funcUp->Eval(jzbSel)-func->Eval(jzbSel))/func->Eval(jzbSel)*100. << "%)" << std::endl;
|
442 |
|
443 |
TLine* lSelect = new TLine(jzbSel,0.,jzbSel,hLM4->GetMaximum()*1.05);
|
444 |
lSelect->SetLineWidth(2);
|
445 |
lSelect->SetLineColor(kBlue);
|
446 |
lSelect->Draw();
|
447 |
|
448 |
|
449 |
mycanvas->SaveAs("plots/pileup"+fileName+".eps");
|
450 |
mycanvas->SaveAs("plots/macros/pileup"+fileName+".C");
|
451 |
|
452 |
|
453 |
return 0;
|
454 |
|
455 |
}
|
456 |
|
457 |
|
458 |
//________________________________________________________________________________________
|
459 |
// Run all efficiency tests
|
460 |
int doAll(void) {
|
461 |
|
462 |
TString samples[] = { "LM4_SUSY_sftsht_7TeV-pythia6",
|
463 |
"LM8_SUSY_sftsht_7TeV-pythia6",
|
464 |
"TTJets_TuneZ2_7TeV-madgraph-tauola" };
|
465 |
size_t nSamples = 3;
|
466 |
|
467 |
std::cout << "MC efficiencies: " << std::endl;
|
468 |
MCeff();
|
469 |
|
470 |
std::cout << "JZB efficiency: " << std::endl;
|
471 |
JZBeff();
|
472 |
|
473 |
std::cout << "Jet energy scale: " << std::endl;
|
474 |
for ( size_t i=0; i<nSamples; ++i ) JZBjetScale( samples[i] );
|
475 |
|
476 |
std::cout << "JZB scale: " << std::endl;
|
477 |
for ( size_t i=0; i<nSamples; ++i ) JZBscale( samples[i] );
|
478 |
|
479 |
std::cout << "JZB response: " << std::endl;
|
480 |
for ( size_t i=0; i<nSamples; ++i ) JZBresponse( samples[i] );
|
481 |
|
482 |
std::cout << "Pileup: " << std::endl;
|
483 |
for ( size_t i=0; i<nSamples; ++i ) pileup( samples[i] );
|
484 |
|
485 |
|
486 |
return 0;
|
487 |
|
488 |
}
|
489 |
|
490 |
int calcEff(void) {
|
491 |
|
492 |
float sysEff[][5] = { { 0.02, 0.02, 0.02 }, // Trigger eff. systematic
|
493 |
{ 0.02, 0.02, 0.02 }, // Lepton eff. systematic
|
494 |
{ 0.002, 0.012, 0.012 }, // Jet energy scale
|
495 |
{ 0.08, 0.011, 0.014 }, // JZB systematic
|
496 |
{ 0.39, 0.054, 0.069 } }; // pileup systematic
|
497 |
|
498 |
float eff[] = { 0.389, 0.933, 0.913 };
|
499 |
float effErr[] = { 1.1, 0.6, 0.7 };
|
500 |
|
501 |
for ( int i=0; i<3; ++i ) {
|
502 |
float totSys = 0;
|
503 |
for ( int j=0; j<5; ++j )
|
504 |
totSys += sysEff[j][i]*sysEff[j][i]*eff[i]*eff[i];
|
505 |
std::cout << "$ " << std::setprecision(3) << eff[i]*100.
|
506 |
<< " \\pm " << effErr[i] << "(\\text{stat})\\pm "
|
507 |
<< std::setprecision(2) << sqrt(totSys)*100. << "(\\text{syst}) $" << std::endl;
|
508 |
}
|
509 |
|
510 |
return 0;
|
511 |
|
512 |
}
|
513 |
|