ViewVC Help
View File | Revision Log | Show Annotations | Root Listing
root/cvsroot/UserCode/cbrown/Development/Plotting/Modules/StudyModule.C
Revision: 1.3
Committed: Mon Feb 13 15:30:56 2012 UTC (13 years, 2 months ago) by buchmann
Content type: text/plain
Branch: MAIN
Changes since 1.2: +13 -7 lines
Log Message:
Added generator info, made legend usable

File Contents

# Content
1 #include <iostream>
2 #include <vector>
3 #include <sys/stat.h>
4
5 #include <TCut.h>
6 #include <TROOT.h>
7 #include <TCanvas.h>
8 #include <TMath.h>
9 #include <TColor.h>
10 #include <TPaveText.h>
11 #include <TRandom.h>
12 #include <TH1.h>
13 #include <TH2.h>
14 #include <TF1.h>
15 #include <TSQLResult.h>
16 #include <TProfile.h>
17 #include <TPaveStats.h>
18
19 //#include "TTbar_stuff.C"
20 using namespace std;
21
22 using namespace PlottingSetup;
23
24
25 void do_experimental_pred_obs_calculation(float cut ,string mcjzb,string datajzb, int mcordata) {
26 dout << "Crunching the numbers for JZB>" << cut << endl;
27 string xlabel="JZB [GeV] -- for algoritm internal use only!";
28 TH1F *ZOSSFP = allsamples.Draw("ZOSSFP",datajzb,1,cut,14000, xlabel, "events",cutmass&&cutOSSF&&cutnJets&&basiccut,mcordata,luminosity);
29 TH1F *ZOSOFP = allsamples.Draw("ZOSOFP",datajzb,1,cut,14000, xlabel, "events",cutmass&&cutOSOF&&cutnJets&&basiccut,mcordata,luminosity);
30 TH1F *ZOSSFN = allsamples.Draw("ZOSSFN","-"+datajzb,1,cut,14000, xlabel, "events",cutmass&&cutOSSF&&cutnJets&&basiccut,mcordata,luminosity);
31 TH1F *ZOSOFN = allsamples.Draw("ZOSOFN","-"+datajzb,1,cut,14000, xlabel, "events",cutmass&&cutOSOF&&cutnJets&&basiccut,mcordata,luminosity);
32
33 TH1F *SBOSSFP;
34 TH1F *SBOSOFP;
35 TH1F *SBOSSFN;
36 TH1F *SBOSOFN;
37
38 flag_this_change(__FUNCTION__,__LINE__,false);//PlottingSetup::RestrictToMassPeak
39 if(PlottingSetup::RestrictToMassPeak) {
40 SBOSSFP = allsamples.Draw("SBOSSFP",datajzb,1,cut,14000, xlabel, "events",cutOSSF&&cutnJets&&basiccut&&sidebandcut,mcordata,luminosity);
41 SBOSOFP = allsamples.Draw("SBOSOFP",datajzb,1,cut,14000, xlabel, "events",cutOSOF&&cutnJets&&basiccut&&sidebandcut,mcordata,luminosity);
42 SBOSSFN = allsamples.Draw("SBOSSFN","-"+datajzb,1,cut,14000, xlabel, "events",cutOSSF&&cutnJets&&basiccut&&sidebandcut,mcordata,luminosity);
43 SBOSOFN = allsamples.Draw("SBOSOFN","-"+datajzb,1,cut,14000, xlabel, "events",cutOSOF&&cutnJets&&basiccut&&sidebandcut,mcordata,luminosity);
44 }
45
46
47 flag_this_change(__FUNCTION__,__LINE__,false);//PlottingSetup::RestrictToMassPeak
48 if(PlottingSetup::RestrictToMassPeak) {
49 dout << " Observed : " << ZOSSFP->Integral() << endl;
50 dout << " Predicted: " << ZOSSFN->Integral() << " + (1/3)*(" << ZOSOFP->Integral() << "-" << ZOSOFN->Integral()<<") + (1/3)*(" << SBOSSFP->Integral() << "-" << SBOSSFN->Integral()<<") + (1/3)*(" << SBOSOFP->Integral() << "-" << SBOSOFN->Integral()<<")" << endl;
51 dout << " P(ZJets ) \t " << ZOSSFN->Integral() << endl;
52 dout << " P(e&mu;]) \t " << ZOSOFP->Integral() << "-" << ZOSOFN->Integral() << " = " << ZOSOFP->Integral()-ZOSOFN->Integral()<<endl;
53 dout << " P(ossf,sb]) \t " << SBOSSFP->Integral() << "-" << SBOSSFN->Integral()<<" = "<<SBOSSFP->Integral()-SBOSSFN->Integral()<<endl;
54 dout << " P(osof,sb]) \t " << SBOSOFP->Integral() << "-" << SBOSOFN->Integral()<<" = "<<SBOSOFP->Integral()-SBOSOFN->Integral()<<endl;
55 } else {
56 dout << " Observed : " << ZOSSFP->Integral() << endl;
57 dout << " Predicted: " << ZOSSFN->Integral() << " + (" << ZOSOFP->Integral() << "-" << ZOSOFN->Integral()<<")" << endl;
58 dout << " P(ZJets ) \t " << ZOSSFN->Integral() << endl;
59 dout << " P(e&mu;]) \t " << ZOSOFP->Integral() << "-" << ZOSOFN->Integral() << " = " << ZOSOFP->Integral()-ZOSOFN->Integral()<<endl;
60 }
61
62
63 delete ZOSSFP;
64 delete ZOSOFP;
65 delete ZOSSFN;
66 delete ZOSOFN;
67
68 delete SBOSSFP;
69 delete SBOSOFP;
70 delete SBOSSFN;
71 delete SBOSOFN;
72 }
73
74 void look_at_sidebands(string mcjzb, string datajzb, bool includejetcut, float cutat=0) {
75
76 flag_this_change(__FUNCTION__,__LINE__,false);//PlottingSetup::RestrictToMassPeak -- this funciton is meaningless for the offpeak case
77 if(!PlottingSetup::RestrictToMassPeak) return;
78 dout << "Looking at sidebands ... " << endl;
79 int mcordata=data;//data // you can perform this study for mc or data ...
80
81 TCut specialjetcut;
82 if(includejetcut) specialjetcut=cutnJets&&basiccut;
83 else specialjetcut="mll>0";
84 dout << "The datajzb variable is defined as " << datajzb << endl;
85 stringstream addcut;
86 addcut<<"(pt>"<<cutat<<")";
87 TCut additionalcut=addcut.str().c_str();
88
89 int nbins=75; float min=51;float max=201;string xlabel="mll [GeV]";
90 TCanvas *c1 = new TCanvas("c1","c1");
91 c1->SetLogy(1);
92 TH1F *datahistoOSSF = allsamples.Draw("datahistoOSSF","mll",nbins,min,max, xlabel, "events",cutOSSF&&specialjetcut&&additionalcut,data,luminosity);
93 THStack mcstackOSSF = allsamples.DrawStack("mcstackOSSF","mll",nbins,min,max, xlabel, "events",cutOSSF&&specialjetcut&&additionalcut,mc,luminosity);
94
95 datahistoOSSF->SetMinimum(1);
96 datahistoOSSF->Draw();
97 mcstackOSSF.Draw("same");
98 datahistoOSSF->Draw("same");
99 TLegend *kinleg = allsamples.allbglegend();
100 kinleg->AddEntry(datahistoOSSF,"OSSF (data)","p");
101 kinleg->Draw();
102 if(includejetcut) CompleteSave(c1,"sidebands/"+any2string(cutat)+"/OSSF");
103 else CompleteSave(c1,"sidebands/"+any2string(cutat)+"/OSSF_nojetcut");
104
105 TH1F *datahistoOSOF = allsamples.Draw("datahistoOSOF","mll",nbins,min,max, xlabel, "events",cutOSOF&&specialjetcut&&additionalcut,data,luminosity);
106 THStack mcstackOSOF = allsamples.DrawStack("mcstackOSOF","mll",nbins,min,max, xlabel, "events",cutOSOF&&specialjetcut&&additionalcut,mc,luminosity);
107 // datahistoOSOF->SetMinimum(0.4);
108 datahistoOSOF->Draw();
109 mcstackOSOF.Draw("same");
110 datahistoOSOF->Draw("same");
111 TLegend *kinleg2 = allsamples.allbglegend();
112 kinleg2->AddEntry(datahistoOSOF,"OSOF (data)","p");
113 kinleg2->Draw();
114 if(includejetcut) CompleteSave(c1,"sidebands/"+any2string(cutat)+"/OSOF");
115 else CompleteSave(c1,"sidebands/"+any2string(cutat)+"/OSOF_nojetcut");
116
117 TH1F *rawmlleemmData = allsamples.Draw("rawmlleemmData","mll",200,0,200, "mll [GeV]", "events", cutOSSF&&specialjetcut&&sidebandcut&&additionalcut,data, luminosity);
118 TH1F *rawmllemData = allsamples.Draw("rawmllemData" ,"mll",200,0,200, "mll [GeV]", "events", cutmass&&cutOSOF&&specialjetcut&&additionalcut,data, luminosity);
119 dout << "Number of events in peak for OSOF: " << rawmllemData->GetEntries() << endl;
120 dout << "Number of events in SB for OSSF: " << rawmlleemmData->GetEntries() << endl;
121
122 TH1F *SFttbarZpeak = allsamples.Draw("SFttbarZpeak",mcjzb,100,-200,400, "JZB [GeV]", "events",cutmass&&cutOSSF&&specialjetcut&&additionalcut,mc,luminosity,allsamples.FindSample("TTJets"));
123 TH1F *OFttbarZpeak = allsamples.Draw("OFttbarZpeak",mcjzb,100,-200,400, "JZB [GeV]", "events",cutmass&&cutOSOF&&specialjetcut&&additionalcut,mc,luminosity,allsamples.FindSample("TTJets"));
124 TH1F *SFttbarsideb = allsamples.Draw("SFttbarsideb",mcjzb,100,-200,400, "JZB [GeV]", "events",cutOSSF&&specialjetcut&&sidebandcut&&additionalcut,mc,luminosity,allsamples.FindSample("TTJets"));
125
126 SFttbarZpeak->SetLineColor(kBlack);
127 OFttbarZpeak->SetLineColor(kBlue);
128 OFttbarZpeak->SetMarkerColor(kBlue);
129 SFttbarsideb->SetLineColor(kPink);
130 SFttbarsideb->SetMarkerColor(kPink);
131
132 SFttbarZpeak->Draw("histo");
133 OFttbarZpeak->Draw("histo,same");
134 SFttbarsideb->Draw("histo,same");
135
136 TLegend *leg3 = new TLegend(0.6,0.8,0.89,0.89);
137 leg3->AddEntry(SFttbarZpeak,"SF ttbar Z peak","l");
138 leg3->AddEntry(OFttbarZpeak,"OF ttbar Z peak","l");
139 leg3->AddEntry(SFttbarsideb,"SF ttbar SB","l");
140 leg3->SetFillColor(kWhite);
141 leg3->SetLineColor(kWhite);
142 leg3->SetBorderSize(0);
143
144 leg3->Draw();
145 if(includejetcut) CompleteSave(c1,"sidebands/"+any2string(cutat)+"/ttbar_comparison");
146 else CompleteSave(c1,"sidebands/"+any2string(cutat)+"/ttbar_comparison_nojetcut");
147
148
149 c1->SetLogy(0);
150
151 SFttbarsideb->SetFillColor(TColor::GetColor("#F5A9A9"));
152 SFttbarsideb->SetLineColor(TColor::GetColor("#F5A9A9"));
153 SFttbarsideb->SetFillStyle(3004);
154 OFttbarZpeak->SetFillColor(TColor::GetColor("#819FF7"));
155 OFttbarZpeak->SetLineColor(TColor::GetColor("#819FF7"));
156 OFttbarZpeak->SetFillColor(kBlue);
157 OFttbarZpeak->SetFillStyle(3005);
158
159 OFttbarZpeak->Rebin(2);
160 SFttbarZpeak->Rebin(2);
161 SFttbarsideb->Rebin(2);
162 OFttbarZpeak->Divide(SFttbarZpeak);
163 SFttbarsideb->Divide(SFttbarZpeak);
164 OFttbarZpeak->GetYaxis()->SetRangeUser(0,5);
165 OFttbarZpeak->GetYaxis()->SetTitle("ratio");
166 TF1 *centralfitO = new TF1("centralfitO","pol1",-40,120);
167 TF1 *centralfit1 = new TF1("centralfit1","pol1",-200,400);
168 // TF1 *centralfitS = new TF1("centralfitS","pol1",-40,120);
169 SFttbarsideb->Fit(centralfitO,"R");
170 //OFttbarZpeak->Fit(centralfitO,"R");
171 centralfit1->SetParameters(centralfitO->GetParameters());
172 // SFttbarZpeak->Fit(centralfitS,"R");
173 OFttbarZpeak->Draw("e5");
174 SFttbarsideb->Draw("e5,same");
175 OFttbarZpeak->Draw("same");
176 SFttbarsideb->Draw("same");
177 centralfit1->SetLineColor(kOrange);
178 // centralfitS->SetLineColor(kOrange);
179 centralfit1->SetLineWidth(2);
180 // centralfitS->SetLineWidth(2);
181 centralfit1->Draw("same");
182 // centralfitS->Draw("same");
183 TLine *oneline = new TLine(-200,1,400,1);
184 oneline->SetLineColor(kBlue);
185 TLine *point5 = new TLine(-200,0.5,400,0.5);
186 point5->SetLineStyle(2);
187 point5->SetLineColor(kGreen);
188 TLine *op5 = new TLine(-200,1.5,400,1.5);
189 op5->SetLineStyle(2);
190 op5->SetLineColor(kGreen);
191 TLine *point7 = new TLine(-200,0.7,400,0.7);
192 point7->SetLineStyle(2);
193 point7->SetLineColor(kBlack);
194 TLine *op7 = new TLine(-200,1.3,400,1.3);
195 op7->SetLineStyle(2);
196 op7->SetLineColor(kBlack);
197 oneline->Draw("same");
198 point5->Draw("same");
199 point7->Draw("same");
200 op5->Draw("same");
201 op7->Draw("same");
202 TLegend *leg4 = new TLegend(0.6,0.65,0.89,0.89);
203 leg4->AddEntry(OFttbarZpeak,"OF ttbar Z peak / truth","l");
204 leg4->AddEntry(SFttbarsideb,"SF ttbar SB / truth","l");
205 leg4->AddEntry(centralfit1,"Fit to [-40,120] GeV region (OF)","l");
206 leg4->AddEntry(point5,"50% systematic envelope","l");
207 leg4->AddEntry(point7,"30% systematic envelope","l");
208 // leg4->AddEntry(centralfitS,"Fit to [-40,120] GeV region (SF)","l");
209 leg4->SetFillColor(kWhite);
210 leg4->SetLineColor(kWhite);
211 leg4->SetBorderSize(0);
212 leg4->Draw("same");
213 if(includejetcut) CompleteSave(c1,"sidebands/"+any2string(cutat)+"/ttbar_comparison_ratio");
214 else CompleteSave(c1,"sidebands/"+any2string(cutat)+"/ttbar_comparison_ratio_nojetcut");
215 dout << "Moving on to predicted / observed yields! " << endl;
216 dout << "Sideband definition: " << (const char*) sidebandcut << endl;
217 /*
218 do_experimental_pred_obs_calculation(50,mcjzb,datajzb,mcordata);
219 do_experimental_pred_obs_calculation(75,mcjzb,datajzb,mcordata);
220 do_experimental_pred_obs_calculation(100,mcjzb,datajzb,mcordata);
221 do_experimental_pred_obs_calculation(125,mcjzb,datajzb,mcordata);
222 do_experimental_pred_obs_calculation(150,mcjzb,datajzb,mcordata);
223 */
224
225 delete rawmlleemmData;
226 delete rawmllemData;
227 delete SFttbarZpeak;
228 delete OFttbarZpeak;
229 delete SFttbarsideb;
230 delete datahistoOSOF;
231 delete datahistoOSSF;
232
233
234 }
235
236 void look_at_sidebands(string mcjzb, string datajzb) {
237 // for (int i=0;i<100;i+=10) {
238 int i=0;
239 {
240 look_at_sidebands(mcjzb,datajzb, true,i);
241 look_at_sidebands(mcjzb,datajzb, false,i);
242 }
243 }
244
245 void find_sideband_definition() {
246 flag_this_change(__FUNCTION__,__LINE__,false);//PlottingSetup::RestrictToMassPeak
247 if(!PlottingSetup::RestrictToMassPeak) return; // this function is meaningless for the offpeak analysis
248
249 TH1F *mllttbar = allsamples.Draw("mllttbar","mll",145,55,200, "mll [GeV]", "events",cutOSSF&&cutnJets&&!cutmass,mc,luminosity,allsamples.FindSample("TTJets"));
250 TH1F *mllttbarz = allsamples.Draw("mllttbarz","mll",1,50,200, "mll [GeV]", "events",cutOSSF&&cutnJets&&cutmass,mc,luminosity,allsamples.FindSample("TTJets"));
251 float leftstop=0;
252 float rightstop=0;
253 int pos90=mllttbar->FindBin(90);
254 float leftsum=0; float rightsum=0;
255 float peaksum=mllttbarz->Integral();
256 for(int i=0;i<mllttbar->GetNbinsX()&&!(leftstop&&rightstop);i++) {
257 if(pos90-i<1) leftstop=mllttbar->GetBinLowEdge(1);
258 if(mllttbar->GetBinLowEdge(pos90+i)+mllttbar->GetBinWidth(pos90+i)>190) rightstop=190;
259 if(!leftstop) leftsum+=mllttbar->GetBinContent(pos90-i);
260 if(!rightstop) rightsum+=mllttbar->GetBinContent(pos90+i);
261 if(leftsum+rightsum>peaksum) {
262 if(!leftstop) leftstop=mllttbar->GetBinLowEdge(pos90-i);
263 if(!rightstop) rightstop=mllttbar->GetBinLowEdge(pos90+i)+mllttbar->GetBinWidth(pos90+i);
264 dout << "Found the boundaries! on the left: " << leftstop << " and on the right " << rightstop << endl;
265 dout << "Total sum : " << leftsum+rightsum << " which supposedly corresponds ~ to " << peaksum << endl;
266 }
267 }
268 TH1F *mllttbart = allsamples.Draw("mllttbart","mll",1,55,155, "mll [GeV]", "events",cutOSSF&&cutnJets&&!cutmass,mc,luminosity,allsamples.FindSample("TTJets"));
269 dout << mllttbart->Integral() << endl;
270
271
272 }
273
274 void calculate_upper_limits(string mcjzb, string datajzb) {
275 write_warning("calculate_upper_limits","Upper limit calculation temporarily deactivated");
276 // write_warning("calculate_upper_limits","Calculation of SUSY upper limits has been temporarily suspended in favor of top discovery");
277 // rediscover_the_top(mcjzb,datajzb);
278 /*
279 TCanvas *c3 = new TCanvas("c3","c3");
280 c3->SetLogy(1);
281 vector<float> binning;
282 //binning=allsamples.get_optimal_binsize(mcjzb,cutmass&&cutOSSF&&cutnJets,20,50,800);
283 binning.push_back(50);
284 binning.push_back(100);
285 binning.push_back(150);
286 binning.push_back(200);
287 binning.push_back(500);
288 TH1F *datapredictiona = allsamples.Draw("datapredictiona", "-"+datajzb, binning, "JZB [GeV]", "events", cutmass&&cutOSSF&&cutnJets,mc, luminosity);
289 TH1F *datapredictionb = allsamples.Draw("datapredictionb", "-"+datajzb, binning, "JZB [GeV]", "events", cutmass&&cutOSOF&&cutnJets,mc, luminosity);
290 TH1F *datapredictionc = allsamples.Draw("datapredictionc", datajzb, binning, "JZB [GeV]", "events", cutmass&&cutOSOF&&cutnJets,mc, luminosity);
291 TH1F *dataprediction = (TH1F*)datapredictiona->Clone();
292 dataprediction->Add(datapredictionb,-1);
293 dataprediction->Add(datapredictionc);
294 TH1F *puresignal = allsamples.Draw("puresignal", mcjzb, binning, "JZB [GeV]", "events", cutmass&&cutOSSF&&cutnJets,mc, luminosity,allsamples.FindSample("LM4"));
295 TH1F *signalpred = allsamples.Draw("signalpred", "-"+mcjzb, binning, "JZB [GeV]", "events", cutmass&&cutOSSF&&cutnJets,mc, luminosity,allsamples.FindSample("LM4"));
296 TH1F *signalpredlo = allsamples.Draw("signalpredlo", "-"+mcjzb, binning, "JZB [GeV]", "events", cutmass&&cutOSOF&&cutnJets,mc, luminosity,allsamples.FindSample("LM4"));
297 TH1F *signalpredro = allsamples.Draw("signalpredro", mcjzb, binning, "JZB [GeV]", "events", cutmass&&cutOSOF&&cutnJets,mc, luminosity,allsamples.FindSample("LM4"));
298 TH1F *puredata = allsamples.Draw("puredata", datajzb,binning, "JZB [GeV]", "events", cutmass&&cutOSSF&&cutnJets,data,luminosity);
299 signalpred->Add(signalpredlo,-1);
300 signalpred->Add(signalpredro);
301 puresignal->Add(signalpred,-1);//subtracting signal contamination
302 ofstream myfile;
303 myfile.open ("ShapeFit_log.txt");
304 establish_upper_limits(puredata,dataprediction,puresignal,"LM4",myfile);
305 myfile.close();
306 */
307 }
308
309 TH1F *runcheckhisto(string cut) {
310 string histoname=GetNumericHistoName();
311 TH1F *histo = new TH1F(histoname.c_str(),histoname.c_str(),100,163000,168000);
312 (allsamples.collection)[0].events->Draw(("runNum>>"+histoname).c_str(),cut.c_str());
313 return histo;
314 }
315
316 void run_check() {
317 gROOT->SetStyle("Plain");
318 TCanvas *c1 = new TCanvas("runnum","runnum",800,1000);
319 c1->Divide(2,4);
320 flag_this_change(__FUNCTION__,__LINE__,false);//PlottingSetup::RestrictToMassPeak
321 if(PlottingSetup::RestrictToMassPeak) c1->Divide(2,2); // there are only four regions ...
322
323 c1->cd(1);
324 TH1F *ossfp = runcheckhisto((const char*)(cutmass&&cutOSSF&&cutnJets&&basiccut&&"((jzb[1]+0.06*pt-2.84727)>100)"));
325 ossfp->Draw();
326 TText *t1 = write_title("OSSF,P");t1->Draw();
327
328 c1->cd(2);
329 TH1F *ossfn = runcheckhisto((const char*)(cutmass&&cutOSSF&&cutnJets&&basiccut&&"((jzb[1]+0.06*pt-2.84727)<-100)"));
330 ossfn->Draw();
331 TText *t2 = write_title("OSSF,N");t2->Draw();
332
333 c1->cd(3);
334 TH1F *osofp = runcheckhisto((const char*)(cutmass&&cutOSOF&&cutnJets&&basiccut&&"((jzb[1]+0.06*pt-2.84727)>100)"));
335 osofp->Draw();
336 TText *t3 = write_title("OSOF,P");t3->Draw();
337 c1->cd(4);
338 TH1F *osofn = runcheckhisto((const char*)(cutmass&&cutOSOF&&cutnJets&&basiccut&&"((jzb[1]+0.06*pt-2.84727)<-100)"));
339 osofn->Draw();
340 TText *t4 = write_title("OSOF,N");t4->Draw();
341
342 flag_this_change(__FUNCTION__,__LINE__,false);//PlottingSetup::RestrictToMassPeak
343 if(PlottingSetup::RestrictToMassPeak) {
344 c1->cd(5);
345 TH1F *sbofp = runcheckhisto((const char*)(sidebandcut&&cutOSOF&&cutnJets&&basiccut&&"((jzb[1]+0.06*pt-2.84727)>100)"));
346 sbofp->Draw();
347 TText *t5 = write_title("SB,OSOF,P");t5->Draw();
348 c1->cd(6);
349 TH1F *sbofn = runcheckhisto((const char*)(cutOSOF&&cutnJets&&basiccut&&sidebandcut&&"((jzb[1]+0.06*pt-2.84727)<-100)"));
350 sbofn->Draw();
351 TText *t6 = write_title("SB,OSOF,N");t6->Draw();
352
353 c1->cd(7);
354 TH1F *sbsfp = runcheckhisto((const char*)(sidebandcut&&cutOSSF&&cutnJets&&basiccut&&"((jzb[1]+0.06*pt-2.84727)>100)"));
355 sbsfp->Draw();
356 TText *t7 = write_title("SB,OSSF,P");t7->Draw();
357 c1->cd(8);
358 TH1F *sbsfn = runcheckhisto((const char*)(sidebandcut&&cutOSSF&&cutnJets&&basiccut&&"((jzb[1]+0.06*pt-2.84727)<-100)"));
359 sbsfn->Draw();
360 TText *t8 = write_title("SB,OSSF,N");t8->Draw();
361 }
362
363 c1->SaveAs("runNumber.png");
364 }
365
366 TH1F *give_boson_pred(TCut bcut,string mcjzb) {
367 int nbins=50;
368 TH1F *jzbn = allsamples.Draw("jzbn","-"+mcjzb,nbins,0,350, "JZB [GeV]", "events", bcut&&cutOSSF&&cutnJets&&cutmass,mc,luminosity,allsamples.FindSample("VVJetsTo4L_TuneD6T_7TeV"));
369 TH1F *jzbno = allsamples.Draw("jzbno","-"+mcjzb,nbins,0,350, "JZB [GeV]", "events",bcut&&cutOSOF&&cutnJets&&cutmass,mc,luminosity,allsamples.FindSample("VVJetsTo4L_TuneD6T_7TeV"));
370 TH1F *jzbpo = allsamples.Draw("jzbp",mcjzb,nbins,0,350, "JZB [GeV]", "events", bcut&&cutOSOF&&cutnJets&&cutmass,mc,luminosity,allsamples.FindSample("VVJetsTo4L_TuneD6T_7TeV"));
371
372 //Sidebands
373 TH1F *jzbnos;
374 TH1F *jzbpos;
375 TH1F *jzbnss;
376 TH1F *jzbpss;
377
378 flag_this_change(__FUNCTION__,__LINE__,false);//PlottingSetup::RestrictToMassPeak
379 if(PlottingSetup::RestrictToMassPeak) {
380 jzbnos = allsamples.Draw("jzbnos","-"+mcjzb,nbins,0,350, "JZB [GeV]", "events",bcut&&cutOSOF&&cutnJets&&sidebandcut,mc,luminosity,allsamples.FindSample("VVJetsTo4L_TuneD6T_7TeV"));
381 jzbpos = allsamples.Draw("jzbpos",mcjzb,nbins,0,350, "JZB [GeV]", "events", bcut&&cutOSOF&&cutnJets&&sidebandcut,mc,luminosity,allsamples.FindSample("VVJetsTo4L_TuneD6T_7TeV"));
382 jzbnss = allsamples.Draw("jzbnss","-"+mcjzb,nbins,0,350, "JZB [GeV]", "events",bcut&&cutOSSF&&cutnJets&&sidebandcut,mc,luminosity,allsamples.FindSample("VVJetsTo4L_TuneD6T_7TeV"));
383 jzbpss = allsamples.Draw("jzbpss",mcjzb,nbins,0,350, "JZB [GeV]", "events", bcut&&cutOSSF&&cutnJets&&sidebandcut,mc,luminosity,allsamples.FindSample("VVJetsTo4L_TuneD6T_7TeV"));
384 }
385
386
387 TH1F *pred = (TH1F*)jzbn->Clone("pred");
388 flag_this_change(__FUNCTION__,__LINE__,false);//PlottingSetup::RestrictToMassPeak
389 if(PlottingSetup::RestrictToMassPeak) {
390 pred->Add(jzbno,-1.0/3);
391 pred->Add(jzbpo,1.0/3);
392 pred->Add(jzbnos,-1.0/3);
393 pred->Add(jzbpos,1.0/3);
394 pred->Add(jzbnss,-1.0/3);
395 pred->Add(jzbpss,1.0/3);
396 } else {
397 pred->Add(jzbno,-1.0);
398 pred->Add(jzbpo,1.0);
399 }
400 pred->SetLineColor(kRed);
401 pred->SetMinimum(0);
402 delete jzbn;
403 delete jzbpo;
404 delete jzbno;
405 delete jzbpos;
406 delete jzbnos;
407 delete jzbpss;
408 delete jzbnss;
409
410 return pred;
411 }
412
413
414 void show_dibosons(string datajzb, string mcjzb) {
415 TCut WW("(abs(genMID1)==24&&abs(genMID2)==24)||(abs(genGMID1)==24&&abs(genGMID2)==24)");
416 TCut ZZ("(abs(genMID1)==23&&abs(genMID2)==23)||(abs(genGMID1)==23&&abs(genGMID2)==23)");
417 TCut WZ("((abs(genMID1)==23&&abs(genMID2)==24)||(abs(genGMID1)==23&&abs(genGMID2)==24))||((abs(genMID1)==24&&abs(genMID2)==23)||(abs(genGMID1)==24&&abs(genGMID2)==23))");
418
419 TCanvas *dibs = new TCanvas("dibs","dibs",900,900);
420 dibs->Divide(2,2);
421
422 dibs->cd(1);
423 TH1F *wwjzbp = allsamples.Draw("wwjzbp",mcjzb,70,0,350, "JZB [GeV]", "events", WW&&cutOSSF&&cutnJets&&cutmass,mc,luminosity,allsamples.FindSample("VVJetsTo4L_TuneD6T_7TeV"));
424 TH1F *wwpred = (TH1F*) give_boson_pred(WW,mcjzb);
425 wwpred->Draw("histo");
426 wwjzbp->Draw("histo,same");
427 TLegend *leg = make_legend("WW");
428 leg->SetFillColor(kWhite);
429 leg->SetLineColor(kWhite);
430 leg->SetHeader("WW (MC)");
431 leg->AddEntry(wwjzbp,"Observed","l");
432 leg->AddEntry(wwpred,"Predicted","l");
433 leg->Draw("same");
434
435 dibs->cd(2);
436 TH1F *wzjzbp = allsamples.Draw("wzjzbp",mcjzb,70,0,350, "JZB [GeV]", "events",WZ&&cutOSSF&&cutnJets&&cutmass,mc,luminosity,allsamples.FindSample("VVJetsTo4L_TuneD6T_7TeV"));
437 TH1F *wzpred = (TH1F*) give_boson_pred(WZ,mcjzb);
438 wzpred->Draw("histo");
439 wzjzbp->Draw("same,histo");
440 TLegend *leg2 = (TLegend*)leg->Clone("leg2");
441 leg2->SetHeader("WZ (MC)");
442 leg2->Draw("same");
443 DrawPrelim();
444
445 dibs->cd(3);
446 TH1F *zzjzbp = allsamples.Draw("zzjzbp",mcjzb,70,0,350, "JZB [GeV]", "events",ZZ&&cutOSSF&&cutnJets&&cutmass,mc,luminosity,allsamples.FindSample("VVJetsTo4L_TuneD6T_7TeV"));
447 TH1F *zzpred = (TH1F*) give_boson_pred(ZZ,mcjzb);
448 zzpred->Draw("histo");
449 zzjzbp->Draw("same,histo");
450 TLegend *leg3 = (TLegend*)leg->Clone("leg2");
451 leg3->SetHeader("ZZ (MC)");
452 leg3->Draw("same");
453 leg3->Draw("same");
454 DrawPrelim();
455
456 dibs->cd(4);
457 TH1F *alljzbp = allsamples.Draw("alljzbp",mcjzb,70,0,350, "JZB [GeV]", "events",(WW||WZ||ZZ)&&cutOSSF&&cutnJets&&cutmass,mc,luminosity,allsamples.FindSample("VVJetsTo4L_TuneD6T_7TeV"));
458 TH1F *allpred = (TH1F*) give_boson_pred((WW||WZ||ZZ),mcjzb);
459 allpred->Draw("histo");
460 alljzbp->Draw("same,histo");
461 TLegend *leg4 = (TLegend*)leg->Clone("leg2");
462 leg4->SetHeader("All dibosons (MC)");
463 leg4->Draw("same");
464 DrawPrelim();
465
466 CompleteSave(dibs,"Studies/Dibosons");
467
468 }
469
470 void show_rare_samples(string datajzb, string mcjzb) {
471 TCanvas *rares = new TCanvas("rares","Rare Samples",900,900);
472
473 int nbins=50;
474 TH1F *jzbp = raresample.Draw("jzbp", mcjzb,nbins,0,350, "JZB [GeV]", "events",cutOSSF&&cutnJets&&cutmass,mc,luminosity);
475
476 TH1F *jzbn = raresample.Draw("jzbn", "-"+mcjzb,nbins,0,350, "JZB [GeV]", "events",cutOSSF&&cutnJets&&cutmass,mc,luminosity);
477 TH1F *jzbno = raresample.Draw("jzbno", "-"+mcjzb,nbins,0,350, "JZB [GeV]", "events",cutOSOF&&cutnJets&&cutmass,mc,luminosity);
478 TH1F *jzbpo = raresample.Draw("jzbp", mcjzb,nbins,0,350, "JZB [GeV]", "events",cutOSOF&&cutnJets&&cutmass,mc,luminosity);
479
480 //Sidebands
481 TH1F *jzbnos = raresample.Draw("jzbnos","-"+mcjzb,nbins,0,350, "JZB [GeV]", "events",cutOSOF&&cutnJets&&sidebandcut,mc,luminosity);
482 TH1F *jzbpos = raresample.Draw("jzbpos", mcjzb,nbins,0,350, "JZB [GeV]", "events",cutOSOF&&cutnJets&&sidebandcut,mc,luminosity);
483 TH1F *jzbnss = raresample.Draw("jzbnss","-"+mcjzb,nbins,0,350, "JZB [GeV]", "events",cutOSSF&&cutnJets&&sidebandcut,mc,luminosity);
484 TH1F *jzbpss = raresample.Draw("jzbpss", mcjzb,nbins,0,350, "JZB [GeV]", "events",cutOSSF&&cutnJets&&sidebandcut,mc,luminosity);
485
486 TH1F *pred = (TH1F*)jzbn->Clone("pred");
487 pred->Add(jzbno,-1.0/3);
488 pred->Add(jzbpo,1.0/3);
489 pred->Add(jzbnos,-1.0/3);
490 pred->Add(jzbpos,1.0/3);
491 pred->Add(jzbnss,-1.0/3);
492 pred->Add(jzbpss,1.0/3);
493 pred->SetLineColor(kRed);
494 pred->SetMinimum(0);
495 delete jzbn;
496 delete jzbpo;
497 delete jzbno;
498 delete jzbpos;
499 delete jzbnos;
500 delete jzbpss;
501 delete jzbnss;
502
503 pred->Draw("histo");
504 pred->GetYaxis()->SetTitleOffset(1.3);
505 jzbp->Draw("histo,same");
506 TLegend *leg = make_legend("WW");
507 leg->SetFillColor(kWhite);
508 leg->SetLineColor(kWhite);
509 leg->SetHeader("Rare Samples (MC)");
510 leg->AddEntry(jzbp,"Observed","l");
511 leg->AddEntry(pred,"Predicted","l");
512 leg->Draw("same");
513
514
515 CompleteSave(rares,"Studies/Rare_Samples");
516 delete jzbp;
517 delete pred;
518 delete leg;
519 delete rares;
520 }
521
522
523 class signature {
524 public:
525 int runNum;
526 int eventNum;
527 int lumi;
528 };
529
530 vector<signature> get_list_of_events(string cut) {
531 float jzb;
532 int runNum,lumi,eventNum;
533 (allsamples.collection)[0].events->SetBranchAddress("jzb",&jzb);
534 (allsamples.collection)[0].events->SetBranchAddress("eventNum",&eventNum);
535 (allsamples.collection)[0].events->SetBranchAddress("lumi",&lumi);
536 (allsamples.collection)[0].events->SetBranchAddress("runNum",&runNum);
537
538 TTreeFormula *select = new TTreeFormula("select", cut.c_str()&&essentialcut, (allsamples.collection)[0].events);
539 vector<signature> allevents;
540 for (Int_t entry = 0 ; entry < (allsamples.collection)[0].events->GetEntries() ; entry++) {
541 (allsamples.collection)[0].events->LoadTree(entry);
542 if (select->EvalInstance()) {
543 (allsamples.collection)[0].events->GetEntry(entry);
544 signature newevent;
545 newevent.runNum=runNum;
546 newevent.eventNum=eventNum;
547 newevent.lumi=lumi;
548 allevents.push_back(newevent);
549 }
550 }
551 cout << "Done looping!" << endl;
552 return allevents;
553 }
554
555 void make_double_plot(string variable, int nbins, float min, float max, float ymax, bool logscale,string xlabel, string filename,TCut observed, TCut predicted, bool is_data, bool noscale = false) {
556 TCut ibasiccut=basiccut;
557
558 //Step 2: Refine the cut
559 TCanvas *ckin = new TCanvas("ckin","Kinematic Plots (in the making)",600,600);
560 ckin->SetLogy(logscale);
561
562 TH1F *datahistoa = allsamples.Draw("datahistoa",variable,nbins,min,max, xlabel, "events",observed,is_data,luminosity);
563 TH1F *datahistob = allsamples.Draw("datahistob",variable,nbins,min,max, xlabel, "events",predicted,is_data,luminosity);
564
565 datahistoa->SetLineColor(kBlue);
566 datahistob->SetLineColor(kRed);
567
568 TLegend *kinleg = new TLegend(0.6,0.7,0.8,0.89);
569 kinleg->SetFillColor(kWhite);
570 kinleg->SetLineColor(kWhite);
571 kinleg->SetBorderSize(0);
572 kinleg->AddEntry(datahistoa,"Observed "+TString(is_data?"Data":"MC"),"l");
573 kinleg->AddEntry(datahistob,"Predicted "+TString(is_data?"Data":"MC"),"l");
574
575 datahistoa->SetMaximum(ymax);
576 datahistoa->Draw("histo");
577 datahistob->SetLineStyle(2);
578 if ( !noscale ) datahistob->Scale(0.3);
579 datahistob->Draw("histo,sames");
580 TVirtualPad::Pad()->Update();
581
582 TPaveStats *sa = (TPaveStats*)datahistoa->GetListOfFunctions()->FindObject("stats");
583 TPaveStats *sb = (TPaveStats*)datahistob->GetListOfFunctions()->FindObject("stats");
584 if ( sa && sb ) {
585 sa->SetTextColor(datahistoa->GetLineColor());
586 sb->SetTextColor(datahistob->GetLineColor());
587 sb->SetY1NDC(sb->GetY1NDC()-0.25);
588 sb->SetY2NDC(sb->GetY2NDC()-0.25);
589 TVirtualPad::Pad()->Update();
590 }
591 kinleg->Draw();
592 TText* write_cut = write_title(variable);
593 write_cut->Draw();
594 CompleteSave(ckin,"special_kin/"+filename);
595 datahistoa->Delete();
596 datahistob->Delete();
597 delete ckin;
598 }
599
600 TH1F *give_lm0_pred(TCut bcut,string mcjzb) {
601 int nbins=50;
602 TH1F *jzbn = signalsamples.Draw("jzbn","-"+mcjzb,nbins,0,350, "JZB [GeV]", "events", cutOSSF&&cutnJets&&cutmass,mc,luminosity,signalsamples.FindSample("LM0"));
603 TH1F *jzbno = signalsamples.Draw("jzbno","-"+mcjzb,nbins,0,350, "JZB [GeV]", "events",cutOSOF&&cutnJets&&cutmass,mc,luminosity,signalsamples.FindSample("LM0"));
604 TH1F *jzbpo = signalsamples.Draw("jzbp",mcjzb,nbins,0,350, "JZB [GeV]", "events", cutOSOF&&cutnJets&&cutmass,mc,luminosity,signalsamples.FindSample("LM0"));
605
606 //Sidebands
607 flag_this_change(__FUNCTION__,__LINE__,false);//PlottingSetup::RestrictToMassPeak
608 TH1F *jzbnos;
609 TH1F *jzbpos;
610 TH1F *jzbnss;
611 TH1F *jzbpss;
612
613 if(PlottingSetup::RestrictToMassPeak) {
614 jzbnos = signalsamples.Draw("jzbnos","-"+mcjzb,nbins,0,350, "JZB [GeV]", "events",cutOSOF&&cutnJets&&sidebandcut,mc,luminosity,signalsamples.FindSample("LM0"));
615 jzbpos = signalsamples.Draw("jzbpos",mcjzb,nbins,0,350, "JZB [GeV]", "events", cutOSOF&&cutnJets&&sidebandcut,mc,luminosity,signalsamples.FindSample("LM0"));
616 jzbnss = signalsamples.Draw("jzbnss","-"+mcjzb,nbins,0,350, "JZB [GeV]", "events",cutOSSF&&cutnJets&&sidebandcut,mc,luminosity,signalsamples.FindSample("LM0"));
617 jzbpss = signalsamples.Draw("jzbpss",mcjzb,nbins,0,350, "JZB [GeV]", "events", cutOSSF&&cutnJets&&sidebandcut,mc,luminosity,signalsamples.FindSample("LM0"));
618 }
619
620 TH1F *pred = (TH1F*)jzbn->Clone("pred");
621 flag_this_change(__FUNCTION__,__LINE__,false);//PlottingSetup::RestrictToMassPeak
622 if(PlottingSetup::RestrictToMassPeak) {
623 pred->Add(jzbno,-1.0/3);
624 pred->Add(jzbpo,1.0/3);
625 pred->Add(jzbnos,-1.0/3);
626 pred->Add(jzbpos,1.0/3);
627 pred->Add(jzbnss,-1.0/3);
628 pred->Add(jzbpss,1.0/3);
629 } else {
630 pred->Add(jzbno,-1.0);
631 pred->Add(jzbpo,1.0);
632 }
633
634 pred->SetLineColor(kRed);
635 pred->SetMinimum(0);
636
637 delete jzbn;
638 delete jzbpo;
639 delete jzbno;
640 delete jzbpos;
641 delete jzbnos;
642 delete jzbpss;
643 delete jzbnss;
644 cout << "pred contains " << pred->Integral() << "entries" << endl;
645 return pred;
646 }
647
648
649 void lm0_illustration() {
650 TCanvas *can = new TCanvas("can","Signal Background Comparison Canvas");
651 can->SetLogy(1);
652
653 int sbg_nbins=130;
654 float sbg_min=-500; //-110;
655 float sbg_max=800; //jzbHigh;
656
657 float simulatedlumi=1000;//in pb please
658
659 TH1F *JZBplotZJETs = allsamples.Draw("JZBplotZJETs",jzbvariablemc,sbg_nbins,sbg_min,sbg_max, "JZB [GeV]", "events",cutmass&&cutOSSF&&cutnJets,mc,simulatedlumi,allsamples.FindSample("DYJetsToLL"));
660 TH1F *JZBplotLM0 = signalsamples.Draw("JZBplotLM0",jzbvariablemc,sbg_nbins,sbg_min,sbg_max, "JZB [GeV]", "events",cutmass&&cutOSSF&&cutnJets,mc,simulatedlumi,signalsamples.FindSample("LM0"));
661 TH1F *JZBplotTtbar = allsamples.Draw("JZBplotTtbar",jzbvariablemc,sbg_nbins,sbg_min,sbg_max, "JZB [GeV]", "events",cutmass&&cutOSSF&&cutnJets,mc,simulatedlumi,allsamples.FindSample("TTJets"));
662
663 JZBplotTtbar->SetLineColor(allsamples.GetColor("TTJet"));
664 JZBplotZJETs->SetFillColor(allsamples.GetColor("DY"));
665 JZBplotZJETs->SetLineColor(kBlack);
666 JZBplotLM0->SetLineStyle(2);
667 JZBplotZJETs->SetMaximum(JZBplotZJETs->GetMaximum()*5);
668 JZBplotZJETs->SetMinimum(1);
669
670 JZBplotTtbar->SetMaximum(JZBplotZJETs->GetMaximum());
671 JZBplotTtbar->SetMinimum(0.01);
672 JZBplotTtbar->SetFillColor(allsamples.GetColor("TTJets"));
673 JZBplotTtbar->DrawClone("histo");
674 JZBplotZJETs->Draw("histo,same");
675 JZBplotTtbar->SetFillColor(0);
676 JZBplotTtbar->DrawClone("histo,same");
677 JZBplotTtbar->SetFillColor(allsamples.GetColor("TTJets"));
678 JZBplotLM0->Draw("histo,same");
679
680
681 TLegend *signal_bg_comparison_leg2 = make_legend("",0.55,0.75,false);
682 signal_bg_comparison_leg2->AddEntry(JZBplotZJETs,"Z+Jets","f");
683 signal_bg_comparison_leg2->AddEntry(JZBplotTtbar,"t#bar{t}","f");
684 signal_bg_comparison_leg2->AddEntry(JZBplotLM0,"LM0","f");
685 signal_bg_comparison_leg2->Draw();
686 TText* title = write_title("CMS MC simulation, #sqrt{s}= 7 TeV @ L=1 fb^{-1}");
687 title->Draw();
688 CompleteSave(can,"LM0/jzb_bg_vs_signal_distribution__LM0");
689 can->SetLogy(0);
690 TH1F *lm0jzbp = signalsamples.Draw("lm0jzb",jzbvariablemc,70,0,350, "JZB [GeV]", "events",cutOSSF&&cutnJets&&cutmass,mc,luminosity,signalsamples.FindSample("LM0"));
691 TH1F *lm0pred = (TH1F*) give_lm0_pred("mll>0",jzbvariablemc);
692 lm0pred->Draw("histo");
693 lm0jzbp->Draw("histo,same");
694 TLegend *leg = make_legend("LM0");
695 leg->SetFillColor(kWhite);
696 leg->SetLineColor(kWhite);
697 leg->SetHeader("LM0 (MC)");
698 leg->AddEntry(lm0jzbp,"Observed","l");
699 leg->AddEntry(lm0pred,"Predicted","l");
700 leg->Draw("same");
701 CompleteSave(can,"LM0/LeftRight");
702
703 delete lm0jzbp;
704 delete lm0pred;
705 }
706
707 void kinematic_dist_of_pred_and_obs() {//former plot_list
708 gStyle->SetOptStat("oueMri");
709 TCut observed=(cutmass&&cutOSSF&&cutnJets&&basiccut&&"((jzb[1]+0.06*pt-2.84727)>100)");
710
711 TCut predicted = (cutmass&&cutOSOF&&cutnJets&&basiccut&&"((jzb[1]+0.06*pt-2.84727)>100)")
712 || (sidebandcut&&cutOSOF&&cutnJets&&basiccut&&"((jzb[1]+0.06*pt-2.84727)>100)")
713 || (sidebandcut&&cutOSSF&&cutnJets&&basiccut&&"((jzb[1]+0.06*pt-2.84727)>100)");
714 TCut predictedMC = (cutmass&&cutOSOF&&cutnJets&&basiccut&&"((jzb[1]+0.04*pt-1.82559)>100)")
715 || (sidebandcut&&cutOSOF&&cutnJets&&basiccut&&"((jzb[1]+0.04*pt-1.82559)>100)")
716 || (sidebandcut&&cutOSSF&&cutnJets&&basiccut&&"((jzb[1]+0.04*pt-1.82559)>100)");
717
718 flag_this_change(__FUNCTION__,__LINE__,false);//PlottingSetup::RestrictToMassPeak
719 if(!PlottingSetup::RestrictToMassPeak) {
720 predicted = TCut((cutmass&&cutOSOF&&cutnJets&&basiccut&&"((jzb[1]+0.06*pt-2.84727)>100)"));
721 predictedMC = TCut((cutmass&&cutOSOF&&cutnJets&&basiccut&&"((jzb[1]+0.04*pt-1.82559)>100)"));
722 }
723 // TCut predicted=((cutmass&&cutOSSF&&cutnJets&&basiccut&&"((jzb[1]+0.06*pt-2.84727)<-100)")
724 // ||(cutmass&&cutOSOF&&cutnJets&&basiccut&&"((jzb[1]+0.06*pt-2.84727)>100)")
725 // ||(cutmass&&cutOSOF&&cutnJets&&basiccut&&"((jzb[1]+0.06*pt-2.84727)<-100)")
726 // ||(sidebandcut&&cutOSOF&&cutnJets&&basiccut&&"((jzb[1]+0.06*pt-2.84727)>100)")
727 // ||(sidebandcut&&cutOSOF&&cutnJets&&basiccut&&"((jzb[1]+0.06*pt-2.84727)<-100)")
728 // ||(sidebandcut&&cutOSSF&&cutnJets&&basiccut&&"((jzb[1]+0.06*pt-2.84727)>100)")
729 // ||(sidebandcut&&cutOSSF&&cutnJets&&basiccut&&"((jzb[1]+0.06*pt-2.84727)<-100)"));
730
731 bool doPF=false;
732 bool dolog=true;
733 bool nolog=false;
734
735 // Mll: do not scale
736 make_double_plot("mll",20,50,150,11,nolog,"m_{ll} [GeV]","mll",observed,predicted,data,true);
737 make_double_plot("mll",20,50,150,11,nolog,"m_{ll} [GeV]","mll_MC",observed,predictedMC,mc,true);
738 make_double_plot("met[4]",20,0,400,11,nolog,"pfMET [GeV]","pfMET",observed,predicted,data);
739 make_double_plot("met[4]",20,0,400,11,nolog,"pfMET [GeV]","pfMET_MC",observed,predictedMC,mc);
740 make_double_plot("jetpt[0]",10,0,400,11,nolog,"leading jet p_{T} [GeV]","pfJetGoodPt_0",observed,predicted,data);
741 make_double_plot("jetpt[0]",10,0,400,11,nolog,"leading jet p_{T} [GeV]","pfJetGoodPt_0_MC",observed,predictedMC,mc);
742 make_double_plot("jeteta[0]",10,-5,5,11,nolog,"leading jet #eta","pfJetGoodEta_0",observed,predicted,data);
743 make_double_plot("jeteta[0]",10,-5,5,11,nolog,"leading jet #eta","pfJetGoodEta_0_MC",observed,predictedMC,mc);
744 make_double_plot("pt",10,0,300,11,nolog,"Z p_{T} [GeV]","Zpt",observed,predicted,data);
745 make_double_plot("pt",10,0,300,11,nolog,"Z p_{T} [GeV]","Zpt_MC",observed,predictedMC,mc);
746 make_double_plot("pt1",10,0,200,15,nolog,"p_{T} [GeV]","pt1",observed,predicted,data);
747 make_double_plot("pt1",10,0,200,15,nolog,"p_{T} [GeV]","pt1_MC",observed,predictedMC,mc);
748 make_double_plot("pt2",10,0,200,25,nolog,"p_{T} [GeV]","pt2",observed,predicted,data);
749 make_double_plot("pt2",10,0,200,25,nolog,"p_{T} [GeV]","pt2_MC",observed,predictedMC,mc);
750 make_double_plot("eta1",10,-5,5,11,nolog,"#eta_{1,l}","eta_1",observed,predicted,data);
751 make_double_plot("eta1",10,-5,5,11,nolog,"#eta_{1,l}","eta_1_MC",observed,predictedMC,mc);
752 make_double_plot("eta2",10,-5,5,11,nolog,"#eta_{2,l}","eta_2",observed,predicted,data);
753 make_double_plot("eta2",10,-5,5,11,nolog,"#eta_{2,l}","eta_2_MC",observed,predictedMC,mc);
754 make_double_plot("phi1-phi2",10,-6.0,6.0,11,nolog,"#phi_{1}-#phi_{2}","dphi",observed,predicted,data);
755 make_double_plot("phi1-phi2",10,-6.0,6.0,11,nolog,"#phi_{1}-#phi_{2}","dphi_MC",observed,predictedMC,mc);
756 make_double_plot("pfJetGoodNum",8,0.5,8.5,20,nolog,"nJets","nJets",observed,predicted,data);
757 make_double_plot("pfJetGoodNum",8,0.5,8.5,20,nolog,"nJets","nJets_MC",observed,predictedMC,mc);
758
759 }
760
761
762 void jzb_negative_generator_study() {
763 write_warning(__FUNCTION__,"We are going to use a t5zz scan file, and \033[1;31m WON'T \033[1;35m cut on MassGlu/MassLSP in order to improve statistics. This is ok for small studies, for a real study you'll need to look at points individually ...");
764
765
766 scansample.AddSample("/scratch/buchmann/ntuples/GeneratorInformationInJZB___JZBplusSamples_TestingSMS_v7/SMS-T5zz_x-05_Mgluino-150to1200_mLSP-50to1150_7TeV-Pythia6Z__Summer11-PU_START42_V11_FastSim-v2__AODSIM___inclindex_v2.root","SMST5zz",1,1,false,false,0,kRed);
767 TCanvas *jcan = new TCanvas("jcan","jcan");
768 scansample.collection[scansample.collection.size()-1].events->Draw("(LSP1pt/LSP1Mopt):pureGeneratorJZB","genNjets>2","PROF");
769 TH1F *h = new TH1F("h","h",100,-500,500);
770 h->SetLineColor(kBlack);
771 TProfile *p = (TProfile*)jcan->GetPrimitive("htemp");
772 p->GetXaxis()->SetTitle("Generator JZB");
773 p->GetXaxis()->CenterTitle();
774 p->GetYaxis()->SetTitle("( LSP p_{T} ) / ( LSP mother p_{T} )");
775 p->GetYaxis()->CenterTitle();
776 p->SetLineColor(kBlue);
777 TLegend* leg = make_legend("", 0.40, 0.75, false);
778 leg->AddEntry(p,"LSP1 pt / LSP1 Mother pt","l");
779 leg->AddEntry(h,"Z pt / Z Mother pt","l");
780 leg->Draw();
781 TText *title = write_title("JZB as a function of the first LSP's momentum transfer");
782 title->Draw();
783 scansample.collection[scansample.collection.size()-1].events->Draw("(genZPt/LSP1Mopt):pureGeneratorJZB","genNjets>2","PROF,same");
784
785 CompleteSave(jcan,"NegativeJZBStudy/LSPpt_LSPMopt");
786
787 scansample.collection[scansample.collection.size()-1].events->Draw("angleLSPLSP:pureGeneratorJZB","genNjets>2","PROF");
788 TProfile *p1 = (TProfile*)jcan->GetPrimitive("htemp");
789 p1->GetXaxis()->SetTitle("Generator JZB");
790 p1->GetXaxis()->CenterTitle();
791 p1->GetYaxis()->SetTitle("#angle(LSP1,LSP2)");
792 p1->GetYaxis()->CenterTitle();
793 TText *title1 = write_title("JZB as a function of the angle between the two LSPs");
794 title1->Draw();
795 CompleteSave(jcan,"NegativeJZBStudy/AngleLSPLSP");
796
797 TH1F *jzbdistributionvsz[5];
798 THStack zstack;
799 jcan->SetLogy(1);
800 TLegend* leg2 = make_legend("", 0.15, 0.75, false);
801 leg2->SetX2(0.4);
802 TLegend* leg3 = make_legend("", 0.15, 0.75, false);
803 leg3->SetX2(0.4);
804 for(int z=0;z<5;z++) {
805 stringstream specialcut;
806 if(z<4) specialcut << "genNjets>2&&(LSP1pt/LSP1Mopt)>" << z*0.2 << "&&(LSP1pt/LSP1Mopt)<" << (z+1)*0.2;
807 else specialcut << "genNjets>2&&(LSP1pt/LSP1Mopt)>" << z*0.2;
808 stringstream histtitle;
809 histtitle << "splitup_" << z;
810 stringstream ntitle;
811 if(z<4) ntitle << z*0.2 << " < z < " << (z+1)*0.2;
812 else ntitle << z*0.2 << " < z";
813 jzbdistributionvsz[z] = scansample.Draw(histtitle.str().c_str(),"pureGeneratorJZB",100,-500,500, "generator JZB (GeV)", "events",specialcut.str().c_str(),mc,1.0);
814 jzbdistributionvsz[z]->SetLineColor(z+1);
815 jzbdistributionvsz[z]->SetMarkerSize(0);
816 zstack.Add(jzbdistributionvsz[z]);
817 leg2->AddEntry(jzbdistributionvsz[z],ntitle.str().c_str(),"f");
818 leg3->AddEntry(jzbdistributionvsz[z],ntitle.str().c_str(),"l");
819 }
820
821 jzbdistributionvsz[0]->GetYaxis()->SetRangeUser(2,800);
822 jzbdistributionvsz[0]->DrawNormalized("histo");
823 for(int z=0;z<5;z++) {
824 jzbdistributionvsz[z]->DrawNormalized("histo,same");
825 }
826
827 // zstack.Draw("nostack,histo");
828 leg3->Draw("same");
829 CompleteSave(jcan,"NegativeJZBStudy/StackedAccordingToMomentumFractionIndividual");
830
831 for(int z=0;z<5;z++) {
832 jzbdistributionvsz[z]->SetFillColor(z+1);
833 }
834
835 zstack.Draw("histo");
836 leg2->Draw("same");
837 CompleteSave(jcan,"NegativeJZBStudy/StackedAccordingToMomentumFractionStacked");
838
839 //varangle vasysyn
840
841 // scansample.collection[scansample.collection.size()-1].events->Draw("(LSPPromptnessLevel[0]/4.0)*angleLSPLSP/(LSP1pt/LSP1Mopt):pureGeneratorJZB","genNjets>2","PROF");
842
843
844
845 }
846
847 string ReplaceCharacter(string originalstring,string replacethis,string replacewiththis)
848 {
849 int pos = originalstring.find(replacethis);
850 if(pos == -1) return originalstring;
851 originalstring.replace(pos, replacewiththis.length(), replacewiththis);
852 return originalstring;
853 }
854 string removefunnystring(string name) {
855 name=ReplaceCharacter(name,"[","_");
856 name=ReplaceCharacter(name,"]","_");
857 name=ReplaceCharacter(name,"{","_");
858 name=ReplaceCharacter(name,"}","_");
859 name=ReplaceCharacter(name,".","_");
860 name=ReplaceCharacter(name,",","_");
861 name=ReplaceCharacter(name,";","_");
862 name=ReplaceCharacter(name,":","_");
863 name=ReplaceCharacter(name,"'","_");
864 name=ReplaceCharacter(name,"$","_");
865 name=ReplaceCharacter(name,"@","_");
866 return name;
867 }
868
869 void compare_lm4_sms_variable(TTree *eventsLM4, TTree *eventsSMS, string variable, int nbins, float xmin, float xmax, TCut cut, string saveas, bool dology=false) {
870 TCanvas *can = new TCanvas("can","can");
871 can->SetLogy(dology);
872 TH1F *hlm4 = new TH1F("hlm4","hlm4",nbins,xmin,xmax);
873 TH1F *hsms = new TH1F("hsms","hsms",nbins,xmin,xmax);
874 eventsLM4->Draw((variable+">>hlm4").c_str(),cut,"goff");
875 eventsSMS->Draw((variable+">>hsms").c_str(),cut,"goff");
876 hlm4->SetLineColor(kBlue);
877 hsms->SetLineColor(kRed);
878
879 if(hlm4->Integral()>0) hlm4->Scale(1.0/hlm4->Integral());
880 else write_warning(__FUNCTION__,"Watch out, LM4 histo is empty!");
881 if(hsms->Integral()>0) hsms->Scale(1.0/hsms->Integral());
882 else write_warning(__FUNCTION__,"Watch out, SMS histo is empty!");
883
884 float min=get_nonzero_minimum(hlm4);
885 float max=hlm4->GetMaximum();
886 if(get_nonzero_minimum(hsms)<min) min=get_nonzero_minimum(hsms);
887 if(hsms->GetMaximum()>max) max=hsms->GetMaximum();
888 if(dology) max*=5;
889 else max*=2;
890
891 hlm4->GetYaxis()->SetRangeUser(min,max);
892 hlm4->GetXaxis()->SetTitle(variable.c_str());
893 hlm4->GetXaxis()->CenterTitle();
894 hlm4->Draw("histo");
895 hsms->Draw("histo,same");
896 TLegend *leg = make_legend("",0.2,0.98,false);
897 leg->SetY2(1.0);
898 leg->SetNColumns(2);
899 leg->AddEntry(hlm4,"LM4","l");
900 leg->AddEntry(hsms,"\"LM4\" SMS","l");
901 leg->Draw();
902 stringstream saveas2;
903 saveas2 << "ComparingLM4_SMS/" << removefunnystring(saveas);
904 CompleteSave(can,saveas2.str());
905 delete can;
906 delete hlm4;
907 delete hsms;
908 }
909
910
911 void compare_LM4_and_SMS() {
912 TFile *f1 = new TFile("/shome/lbaeni/jzb/LM4_SMS/SMS_LM4_JZB.root");
913 TTree *LM4events = (TTree*)f1->Get("events");
914 TFile *f2 = new TFile("/scratch/buchmann/ntuples/GeneratorInformationInJZB___JZBplusSamples_TestingSMS_v5/LM4_SUSY_sftsht_7TeV-pythia6__Summer11-PU_S4_START42_V11-v2__withIndex.root ");
915 TTree *SMSevents = (TTree*)f2->Get("events");
916
917 compare_lm4_sms_variable(LM4events, SMSevents, "mll",100,50,150,cutOSSF&&cutnJets&&basiccut,"mll",true);
918 compare_lm4_sms_variable(LM4events, SMSevents, "jzb[1]+0.04*pt-2.32212",100,-300,700,cutmass&&cutOSSF&&cutnJets&&basiccut,"jzb",true);
919 compare_lm4_sms_variable(LM4events, SMSevents, "pureGeneratorJZB",100,-300.0,700.0,cutOSSF&&basiccut,"pureGeneratorJZB",true);
920 compare_lm4_sms_variable(LM4events, SMSevents, "pfJetGoodNum",10,-0.5,9.5,cutmass&&cutOSSF&&basiccut,"pfJetGoodNum",true);
921 compare_lm4_sms_variable(LM4events, SMSevents, "pt",100,15.0,200.0,cutOSSF&&basiccut,"pt",false);
922 compare_lm4_sms_variable(LM4events, SMSevents, "pt1",100,15.0,100.0,cutOSSF&&basiccut,"pt1",false);
923 compare_lm4_sms_variable(LM4events, SMSevents, "pt2",100,15.0,100.0,cutOSSF&&basiccut,"pt2",false);
924 compare_lm4_sms_variable(LM4events, SMSevents, "met[4]",100,0.0,600.0,cutOSSF&&basiccut,"met",false);
925 compare_lm4_sms_variable(LM4events, SMSevents, "genMET",100,0.0,600.0,cutOSSF&&basiccut,"genMET",false);
926 compare_lm4_sms_variable(LM4events, SMSevents, "genNjets",10,-0.5,9.5,cutOSSF&&basiccut,"genNjets",true);
927 }