ViewVC Help
View File | Revision Log | Show Annotations | Root Listing
root/cvsroot/UserCode/cbrown/AnalysisFramework/Plotting/Modules/StudyModule.C
Revision: 1.11
Committed: Wed Aug 17 09:18:41 2011 UTC (13 years, 8 months ago) by buchmann
Content type: text/plain
Branch: MAIN
Changes since 1.10: +17 -13 lines
Log Message:
Changed diboson plots (added legend, title, specified that this is MC); fixed a potential memory leak (canvas)

File Contents

# User Rev Content
1 buchmann 1.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 fronga 1.9 #include <TPaveStats.h>
18 buchmann 1.1
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 buchmann 1.4 dout << "Crunching the numbers for JZB>" << cut << endl;
27 buchmann 1.2 string xlabel="JZB [GeV] -- for algoritm internal use only!";
28 buchmann 1.1 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 = allsamples.Draw("SBOSSFP",datajzb,1,cut,14000, xlabel, "events",cutOSSF&&cutnJets&&basiccut&&sidebandcut,mcordata,luminosity);
34     TH1F *SBOSOFP = allsamples.Draw("SBOSOFP",datajzb,1,cut,14000, xlabel, "events",cutOSOF&&cutnJets&&basiccut&&sidebandcut,mcordata,luminosity);
35     TH1F *SBOSSFN = allsamples.Draw("SBOSSFN","-"+datajzb,1,cut,14000, xlabel, "events",cutOSSF&&cutnJets&&basiccut&&sidebandcut,mcordata,luminosity);
36     TH1F *SBOSOFN = allsamples.Draw("SBOSOFN","-"+datajzb,1,cut,14000, xlabel, "events",cutOSOF&&cutnJets&&basiccut&&sidebandcut,mcordata,luminosity);
37    
38 buchmann 1.4 dout << " Observed : " << ZOSSFP->Integral() << endl;
39     dout << " Predicted: " << ZOSSFN->Integral() << " + (1/3)*(" << ZOSOFP->Integral() << "-" << ZOSOFN->Integral()<<") + (1/3)*(" << SBOSSFP->Integral() << "-" << SBOSSFN->Integral()<<") + (1/3)*(" << SBOSOFP->Integral() << "-" << SBOSOFN->Integral()<<")" << endl;
40     dout << " P(ZJets ) \t " << ZOSSFN->Integral() << endl;
41     dout << " P(e&mu;]) \t " << ZOSOFP->Integral() << "-" << ZOSOFN->Integral() << " = " << ZOSOFP->Integral()-ZOSOFN->Integral()<<endl;
42     dout << " P(ossf,sb]) \t " << SBOSSFP->Integral() << "-" << SBOSSFN->Integral()<<" = "<<SBOSSFP->Integral()-SBOSSFN->Integral()<<endl;
43     dout << " P(osof,sb]) \t " << SBOSOFP->Integral() << "-" << SBOSOFN->Integral()<<" = "<<SBOSOFP->Integral()-SBOSOFN->Integral()<<endl;
44 buchmann 1.1
45     delete ZOSSFP;
46     delete ZOSOFP;
47     delete ZOSSFN;
48     delete ZOSOFN;
49    
50     delete SBOSSFP;
51     delete SBOSOFP;
52     delete SBOSSFN;
53     delete SBOSOFN;
54     }
55    
56 buchmann 1.3 void look_at_sidebands(string mcjzb, string datajzb, bool includejetcut, float cutat=0) {
57 buchmann 1.1
58 buchmann 1.4 dout << "Looking at sidebands ... " << endl;
59 buchmann 1.1 int mcordata=data;//data // you can perform this study for mc or data ...
60    
61     TCut specialjetcut;
62     if(includejetcut) specialjetcut=cutnJets&&basiccut;
63     else specialjetcut="mll>0";
64 buchmann 1.4 dout << "The datajzb variable is defined as " << datajzb << endl;
65 buchmann 1.3 stringstream addcut;
66     addcut<<"(pt>"<<cutat<<")";
67     TCut additionalcut=addcut.str().c_str();
68 buchmann 1.1
69 buchmann 1.2 int nbins=75; float min=51;float max=201;string xlabel="mll [GeV]";
70 buchmann 1.1 TCanvas *c1 = new TCanvas("c1","c1");
71     c1->SetLogy(1);
72 buchmann 1.2 TH1F *datahistoOSSF = allsamples.Draw("datahistoOSSF","mll",nbins,min,max, xlabel, "events",cutOSSF&&specialjetcut&&additionalcut,data,luminosity);
73     THStack mcstackOSSF = allsamples.DrawStack("mcstackOSSF","mll",nbins,min,max, xlabel, "events",cutOSSF&&specialjetcut&&additionalcut,mc,luminosity);
74 buchmann 1.1
75     datahistoOSSF->SetMinimum(1);
76     datahistoOSSF->Draw();
77     mcstackOSSF.Draw("same");
78     datahistoOSSF->Draw("same");
79     TLegend *kinleg = allsamples.allbglegend();
80     kinleg->AddEntry(datahistoOSSF,"OSSF (data)","p");
81     kinleg->Draw();
82 buchmann 1.3 if(includejetcut) CompleteSave(c1,"sidebands/"+any2string(cutat)+"/OSSF");
83     else CompleteSave(c1,"sidebands/"+any2string(cutat)+"/OSSF_nojetcut");
84 buchmann 1.1
85 buchmann 1.2 TH1F *datahistoOSOF = allsamples.Draw("datahistoOSOF","mll",nbins,min,max, xlabel, "events",cutOSOF&&specialjetcut&&additionalcut,data,luminosity);
86     THStack mcstackOSOF = allsamples.DrawStack("mcstackOSOF","mll",nbins,min,max, xlabel, "events",cutOSOF&&specialjetcut&&additionalcut,mc,luminosity);
87     // datahistoOSOF->SetMinimum(0.4);
88 buchmann 1.1 datahistoOSOF->Draw();
89     mcstackOSOF.Draw("same");
90     datahistoOSOF->Draw("same");
91     TLegend *kinleg2 = allsamples.allbglegend();
92     kinleg2->AddEntry(datahistoOSOF,"OSOF (data)","p");
93     kinleg2->Draw();
94 buchmann 1.3 if(includejetcut) CompleteSave(c1,"sidebands/"+any2string(cutat)+"/OSOF");
95     else CompleteSave(c1,"sidebands/"+any2string(cutat)+"/OSOF_nojetcut");
96 buchmann 1.1
97 buchmann 1.2 TH1F *rawmlleemmData = allsamples.Draw("rawmlleemmData","mll",200,0,200, "mll [GeV]", "events", cutOSSF&&specialjetcut&&sidebandcut&&additionalcut,data, luminosity);
98     TH1F *rawmllemData = allsamples.Draw("rawmllemData" ,"mll",200,0,200, "mll [GeV]", "events", cutmass&&cutOSOF&&specialjetcut&&additionalcut,data, luminosity);
99 buchmann 1.4 dout << "Number of events in peak for OSOF: " << rawmllemData->GetEntries() << endl;
100     dout << "Number of events in SB for OSSF: " << rawmlleemmData->GetEntries() << endl;
101 buchmann 1.1
102 buchmann 1.2 TH1F *SFttbarZpeak = allsamples.Draw("SFttbarZpeak",mcjzb,100,-200,400, "JZB [GeV]", "events",cutmass&&cutOSSF&&specialjetcut&&additionalcut,mc,luminosity,allsamples.FindSample("TTJets"));
103     TH1F *OFttbarZpeak = allsamples.Draw("OFttbarZpeak",mcjzb,100,-200,400, "JZB [GeV]", "events",cutmass&&cutOSOF&&specialjetcut&&additionalcut,mc,luminosity,allsamples.FindSample("TTJets"));
104     TH1F *SFttbarsideb = allsamples.Draw("SFttbarsideb",mcjzb,100,-200,400, "JZB [GeV]", "events",cutOSSF&&specialjetcut&&sidebandcut&&additionalcut,mc,luminosity,allsamples.FindSample("TTJets"));
105 buchmann 1.1
106     SFttbarZpeak->SetLineColor(kBlack);
107     OFttbarZpeak->SetLineColor(kBlue);
108     OFttbarZpeak->SetMarkerColor(kBlue);
109     SFttbarsideb->SetLineColor(kPink);
110     SFttbarsideb->SetMarkerColor(kPink);
111    
112     SFttbarZpeak->Draw("histo");
113     OFttbarZpeak->Draw("histo,same");
114     SFttbarsideb->Draw("histo,same");
115    
116     TLegend *leg3 = new TLegend(0.6,0.8,0.89,0.89);
117     leg3->AddEntry(SFttbarZpeak,"SF ttbar Z peak","l");
118     leg3->AddEntry(OFttbarZpeak,"OF ttbar Z peak","l");
119     leg3->AddEntry(SFttbarsideb,"SF ttbar SB","l");
120     leg3->SetFillColor(kWhite);
121     leg3->SetLineColor(kWhite);
122     leg3->SetBorderSize(0);
123    
124     leg3->Draw();
125 buchmann 1.3 if(includejetcut) CompleteSave(c1,"sidebands/"+any2string(cutat)+"/ttbar_comparison");
126     else CompleteSave(c1,"sidebands/"+any2string(cutat)+"/ttbar_comparison_nojetcut");
127 buchmann 1.1
128    
129     c1->SetLogy(0);
130    
131     SFttbarsideb->SetFillColor(TColor::GetColor("#F5A9A9"));
132     SFttbarsideb->SetLineColor(TColor::GetColor("#F5A9A9"));
133     SFttbarsideb->SetFillStyle(3004);
134     OFttbarZpeak->SetFillColor(TColor::GetColor("#819FF7"));
135     OFttbarZpeak->SetLineColor(TColor::GetColor("#819FF7"));
136     OFttbarZpeak->SetFillColor(kBlue);
137     OFttbarZpeak->SetFillStyle(3005);
138    
139     OFttbarZpeak->Rebin(2);
140     SFttbarZpeak->Rebin(2);
141     SFttbarsideb->Rebin(2);
142     OFttbarZpeak->Divide(SFttbarZpeak);
143     SFttbarsideb->Divide(SFttbarZpeak);
144     OFttbarZpeak->GetYaxis()->SetRangeUser(0,5);
145     OFttbarZpeak->GetYaxis()->SetTitle("ratio");
146 buchmann 1.2 TF1 *centralfitO = new TF1("centralfitO","pol1",-40,120);
147     TF1 *centralfit1 = new TF1("centralfit1","pol1",-200,400);
148     // TF1 *centralfitS = new TF1("centralfitS","pol1",-40,120);
149     SFttbarsideb->Fit(centralfitO,"R");
150     //OFttbarZpeak->Fit(centralfitO,"R");
151     centralfit1->SetParameters(centralfitO->GetParameters());
152     // SFttbarZpeak->Fit(centralfitS,"R");
153 buchmann 1.1 OFttbarZpeak->Draw("e5");
154     SFttbarsideb->Draw("e5,same");
155     OFttbarZpeak->Draw("same");
156     SFttbarsideb->Draw("same");
157 buchmann 1.2 centralfit1->SetLineColor(kOrange);
158     // centralfitS->SetLineColor(kOrange);
159     centralfit1->SetLineWidth(2);
160     // centralfitS->SetLineWidth(2);
161     centralfit1->Draw("same");
162     // centralfitS->Draw("same");
163     TLine *oneline = new TLine(-200,1,400,1);
164     oneline->SetLineColor(kBlue);
165     TLine *point5 = new TLine(-200,0.5,400,0.5);
166     point5->SetLineStyle(2);
167     point5->SetLineColor(kGreen);
168     TLine *op5 = new TLine(-200,1.5,400,1.5);
169     op5->SetLineStyle(2);
170     op5->SetLineColor(kGreen);
171     TLine *point7 = new TLine(-200,0.7,400,0.7);
172     point7->SetLineStyle(2);
173     point7->SetLineColor(kBlack);
174     TLine *op7 = new TLine(-200,1.3,400,1.3);
175     op7->SetLineStyle(2);
176     op7->SetLineColor(kBlack);
177     oneline->Draw("same");
178     point5->Draw("same");
179     point7->Draw("same");
180     op5->Draw("same");
181     op7->Draw("same");
182     TLegend *leg4 = new TLegend(0.6,0.65,0.89,0.89);
183 buchmann 1.1 leg4->AddEntry(OFttbarZpeak,"OF ttbar Z peak / truth","l");
184     leg4->AddEntry(SFttbarsideb,"SF ttbar SB / truth","l");
185 buchmann 1.2 leg4->AddEntry(centralfit1,"Fit to [-40,120] GeV region (OF)","l");
186     leg4->AddEntry(point5,"50% systematic envelope","l");
187     leg4->AddEntry(point7,"30% systematic envelope","l");
188     // leg4->AddEntry(centralfitS,"Fit to [-40,120] GeV region (SF)","l");
189 buchmann 1.1 leg4->SetFillColor(kWhite);
190     leg4->SetLineColor(kWhite);
191     leg4->SetBorderSize(0);
192     leg4->Draw("same");
193 buchmann 1.3 if(includejetcut) CompleteSave(c1,"sidebands/"+any2string(cutat)+"/ttbar_comparison_ratio");
194     else CompleteSave(c1,"sidebands/"+any2string(cutat)+"/ttbar_comparison_ratio_nojetcut");
195 buchmann 1.4 dout << "Moving on to predicted / observed yields! " << endl;
196     dout << "Sideband definition: " << (const char*) sidebandcut << endl;
197 buchmann 1.1 /*
198     do_experimental_pred_obs_calculation(50,mcjzb,datajzb,mcordata);
199     do_experimental_pred_obs_calculation(75,mcjzb,datajzb,mcordata);
200     do_experimental_pred_obs_calculation(100,mcjzb,datajzb,mcordata);
201     do_experimental_pred_obs_calculation(125,mcjzb,datajzb,mcordata);
202     do_experimental_pred_obs_calculation(150,mcjzb,datajzb,mcordata);
203     */
204    
205 buchmann 1.2 delete rawmlleemmData;
206     delete rawmllemData;
207     delete SFttbarZpeak;
208     delete OFttbarZpeak;
209     delete SFttbarsideb;
210     delete datahistoOSOF;
211     delete datahistoOSSF;
212    
213 buchmann 1.1
214     }
215    
216     void look_at_sidebands(string mcjzb, string datajzb) {
217 buchmann 1.3 // for (int i=0;i<100;i+=10) {
218     int i=0;
219     {
220     look_at_sidebands(mcjzb,datajzb, true,i);
221     look_at_sidebands(mcjzb,datajzb, false,i);
222     }
223 buchmann 1.1 }
224 buchmann 1.2
225     void find_sideband_definition() {
226     TH1F *mllttbar = allsamples.Draw("mllttbar","mll",145,55,200, "mll [GeV]", "events",cutOSSF&&cutnJets&&!cutmass,mc,luminosity,allsamples.FindSample("TTJets"));
227     TH1F *mllttbarz = allsamples.Draw("mllttbarz","mll",1,50,200, "mll [GeV]", "events",cutOSSF&&cutnJets&&cutmass,mc,luminosity,allsamples.FindSample("TTJets"));
228     float leftstop=0;
229     float rightstop=0;
230     int pos90=mllttbar->FindBin(90);
231     float leftsum=0; float rightsum=0;
232     float peaksum=mllttbarz->Integral();
233     for(int i=0;i<mllttbar->GetNbinsX()&&!(leftstop&&rightstop);i++) {
234     if(pos90-i<1) leftstop=mllttbar->GetBinLowEdge(1);
235     if(mllttbar->GetBinLowEdge(pos90+i)+mllttbar->GetBinWidth(pos90+i)>190) rightstop=190;
236     if(!leftstop) leftsum+=mllttbar->GetBinContent(pos90-i);
237     if(!rightstop) rightsum+=mllttbar->GetBinContent(pos90+i);
238     if(leftsum+rightsum>peaksum) {
239     if(!leftstop) leftstop=mllttbar->GetBinLowEdge(pos90-i);
240     if(!rightstop) rightstop=mllttbar->GetBinLowEdge(pos90+i)+mllttbar->GetBinWidth(pos90+i);
241 buchmann 1.4 dout << "Found the boundaries! on the left: " << leftstop << " and on the right " << rightstop << endl;
242     dout << "Total sum : " << leftsum+rightsum << " which supposedly corresponds ~ to " << peaksum << endl;
243 buchmann 1.2 }
244     }
245     TH1F *mllttbart = allsamples.Draw("mllttbart","mll",1,55,155, "mll [GeV]", "events",cutOSSF&&cutnJets&&!cutmass,mc,luminosity,allsamples.FindSample("TTJets"));
246 buchmann 1.4 dout << mllttbart->Integral() << endl;
247 buchmann 1.2
248    
249 buchmann 1.5 }
250    
251     void calculate_upper_limits(string mcjzb, string datajzb) {
252     write_warning("calculate_upper_limits","Upper limit calculation temporarily deactivated");
253     // write_warning("calculate_upper_limits","Calculation of SUSY upper limits has been temporarily suspended in favor of top discovery");
254     // rediscover_the_top(mcjzb,datajzb);
255     /*
256     TCanvas *c3 = new TCanvas("c3","c3");
257     c3->SetLogy(1);
258     vector<float> binning;
259     //binning=allsamples.get_optimal_binsize(mcjzb,cutmass&&cutOSSF&&cutnJets,20,50,800);
260     binning.push_back(50);
261     binning.push_back(100);
262     binning.push_back(150);
263     binning.push_back(200);
264     binning.push_back(500);
265     TH1F *datapredictiona = allsamples.Draw("datapredictiona", "-"+datajzb, binning, "JZB [GeV]", "events", cutmass&&cutOSSF&&cutnJets,mc, luminosity);
266     TH1F *datapredictionb = allsamples.Draw("datapredictionb", "-"+datajzb, binning, "JZB [GeV]", "events", cutmass&&cutOSOF&&cutnJets,mc, luminosity);
267     TH1F *datapredictionc = allsamples.Draw("datapredictionc", datajzb, binning, "JZB [GeV]", "events", cutmass&&cutOSOF&&cutnJets,mc, luminosity);
268     TH1F *dataprediction = (TH1F*)datapredictiona->Clone();
269     dataprediction->Add(datapredictionb,-1);
270     dataprediction->Add(datapredictionc);
271     TH1F *puresignal = allsamples.Draw("puresignal", mcjzb, binning, "JZB [GeV]", "events", cutmass&&cutOSSF&&cutnJets,mc, luminosity,allsamples.FindSample("LM4"));
272     TH1F *signalpred = allsamples.Draw("signalpred", "-"+mcjzb, binning, "JZB [GeV]", "events", cutmass&&cutOSSF&&cutnJets,mc, luminosity,allsamples.FindSample("LM4"));
273     TH1F *signalpredlo = allsamples.Draw("signalpredlo", "-"+mcjzb, binning, "JZB [GeV]", "events", cutmass&&cutOSOF&&cutnJets,mc, luminosity,allsamples.FindSample("LM4"));
274     TH1F *signalpredro = allsamples.Draw("signalpredro", mcjzb, binning, "JZB [GeV]", "events", cutmass&&cutOSOF&&cutnJets,mc, luminosity,allsamples.FindSample("LM4"));
275     TH1F *puredata = allsamples.Draw("puredata", datajzb,binning, "JZB [GeV]", "events", cutmass&&cutOSSF&&cutnJets,data,luminosity);
276     signalpred->Add(signalpredlo,-1);
277     signalpred->Add(signalpredro);
278     puresignal->Add(signalpred,-1);//subtracting signal contamination
279     ofstream myfile;
280     myfile.open ("ShapeFit_log.txt");
281     establish_upper_limits(puredata,dataprediction,puresignal,"LM4",myfile);
282     myfile.close();
283     */
284     }
285    
286 buchmann 1.6 TH1F *runcheckhisto(string cut) {
287     string histoname=GetNumericHistoName();
288     TH1F *histo = new TH1F(histoname.c_str(),histoname.c_str(),100,163000,168000);
289     (allsamples.collection)[0].events->Draw(("runNum>>"+histoname).c_str(),cut.c_str());
290     return histo;
291     }
292    
293     void run_check() {
294     gROOT->SetStyle("Plain");
295     TCanvas *c1 = new TCanvas("runnum","runnum",800,1000);
296     c1->Divide(2,4);
297     c1->cd(1);
298     TH1F *ossfp = runcheckhisto((const char*)(cutmass&&cutOSSF&&cutnJets&&basiccut&&"((jzb[1]+0.06*pt-2.84727)>100)"));
299     ossfp->Draw();
300     TText *t1 = write_title("OSSF,P");t1->Draw();
301    
302     c1->cd(2);
303     TH1F *ossfn = runcheckhisto((const char*)(cutmass&&cutOSSF&&cutnJets&&basiccut&&"((jzb[1]+0.06*pt-2.84727)<-100)"));
304     ossfn->Draw();
305     TText *t2 = write_title("OSSF,N");t2->Draw();
306    
307     c1->cd(3);
308     TH1F *osofp = runcheckhisto((const char*)(cutmass&&cutOSOF&&cutnJets&&basiccut&&"((jzb[1]+0.06*pt-2.84727)>100)"));
309     osofp->Draw();
310     TText *t3 = write_title("OSOF,P");t3->Draw();
311     c1->cd(4);
312     TH1F *osofn = runcheckhisto((const char*)(cutmass&&cutOSOF&&cutnJets&&basiccut&&"((jzb[1]+0.06*pt-2.84727)<-100)"));
313     osofn->Draw();
314     TText *t4 = write_title("OSOF,N");t4->Draw();
315    
316     c1->cd(5);
317     TH1F *sbofp = runcheckhisto((const char*)(sidebandcut&&cutOSOF&&cutnJets&&basiccut&&"((jzb[1]+0.06*pt-2.84727)>100)"));
318     sbofp->Draw();
319     TText *t5 = write_title("SB,OSOF,P");t5->Draw();
320     c1->cd(6);
321     TH1F *sbofn = runcheckhisto((const char*)(cutOSOF&&cutnJets&&basiccut&&sidebandcut&&"((jzb[1]+0.06*pt-2.84727)<-100)"));
322     sbofn->Draw();
323     TText *t6 = write_title("SB,OSOF,N");t6->Draw();
324    
325     c1->cd(7);
326     TH1F *sbsfp = runcheckhisto((const char*)(sidebandcut&&cutOSSF&&cutnJets&&basiccut&&"((jzb[1]+0.06*pt-2.84727)>100)"));
327     sbsfp->Draw();
328     TText *t7 = write_title("SB,OSSF,P");t7->Draw();
329     c1->cd(8);
330     TH1F *sbsfn = runcheckhisto((const char*)(sidebandcut&&cutOSSF&&cutnJets&&basiccut&&"((jzb[1]+0.06*pt-2.84727)<-100)"));
331     sbsfn->Draw();
332     TText *t8 = write_title("SB,OSSF,N");t8->Draw();
333    
334     c1->SaveAs("runNumber.png");
335     }
336    
337     TH1F *give_boson_pred(TCut bcut,string mcjzb) {
338     int nbins=50;
339     TH1F *jzbn = allsamples.Draw("jzbn","-"+mcjzb,nbins,0,350, "JZB [GeV]", "events", bcut&&cutOSSF&&cutnJets&&cutmass,mc,luminosity,allsamples.FindSample("VVJetsTo4L_TuneD6T_7TeV"));
340     TH1F *jzbno = allsamples.Draw("jzbno","-"+mcjzb,nbins,0,350, "JZB [GeV]", "events",bcut&&cutOSOF&&cutnJets&&cutmass,mc,luminosity,allsamples.FindSample("VVJetsTo4L_TuneD6T_7TeV"));
341     TH1F *jzbpo = allsamples.Draw("jzbp",mcjzb,nbins,0,350, "JZB [GeV]", "events", bcut&&cutOSOF&&cutnJets&&cutmass,mc,luminosity,allsamples.FindSample("VVJetsTo4L_TuneD6T_7TeV"));
342    
343     //Sidebands
344     TH1F *jzbnos = allsamples.Draw("jzbnos","-"+mcjzb,nbins,0,350, "JZB [GeV]", "events",bcut&&cutOSOF&&cutnJets&&sidebandcut,mc,luminosity,allsamples.FindSample("VVJetsTo4L_TuneD6T_7TeV"));
345     TH1F *jzbpos = allsamples.Draw("jzbpos",mcjzb,nbins,0,350, "JZB [GeV]", "events", bcut&&cutOSOF&&cutnJets&&sidebandcut,mc,luminosity,allsamples.FindSample("VVJetsTo4L_TuneD6T_7TeV"));
346     TH1F *jzbnss = allsamples.Draw("jzbnss","-"+mcjzb,nbins,0,350, "JZB [GeV]", "events",bcut&&cutOSSF&&cutnJets&&sidebandcut,mc,luminosity,allsamples.FindSample("VVJetsTo4L_TuneD6T_7TeV"));
347     TH1F *jzbpss = allsamples.Draw("jzbpss",mcjzb,nbins,0,350, "JZB [GeV]", "events", bcut&&cutOSSF&&cutnJets&&sidebandcut,mc,luminosity,allsamples.FindSample("VVJetsTo4L_TuneD6T_7TeV"));
348    
349     TH1F *pred = (TH1F*)jzbn->Clone("pred");
350     pred->Add(jzbno,-1.0/3);
351     pred->Add(jzbpo,1.0/3);
352     pred->Add(jzbnos,-1.0/3);
353     pred->Add(jzbpos,1.0/3);
354     pred->Add(jzbnss,-1.0/3);
355     pred->Add(jzbpss,1.0/3);
356     pred->SetLineColor(kRed);
357     pred->SetMinimum(0);
358     delete jzbn;
359     delete jzbpo;
360     delete jzbno;
361     delete jzbpos;
362     delete jzbnos;
363     delete jzbpss;
364     delete jzbnss;
365    
366     return pred;
367     }
368    
369    
370     void show_dibosons(string datajzb, string mcjzb) {
371     TCut WW("(abs(genMID1)==24&&abs(genMID2)==24)||(abs(genGMID1)==24&&abs(genGMID2)==24)");
372     TCut ZZ("(abs(genMID1)==23&&abs(genMID2)==23)||(abs(genGMID1)==23&&abs(genGMID2)==23)");
373     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))");
374    
375     TCanvas *dibs = new TCanvas("dibs","dibs",900,900);
376     dibs->Divide(2,2);
377    
378     dibs->cd(1);
379     TH1F *wwjzbp = allsamples.Draw("wwjzbp",mcjzb,70,0,350, "JZB [GeV]", "events", WW&&cutOSSF&&cutnJets&&cutmass,mc,luminosity,allsamples.FindSample("VVJetsTo4L_TuneD6T_7TeV"));
380     TH1F *wwpred = (TH1F*) give_boson_pred(WW,mcjzb);
381     wwpred->Draw("histo");
382     wwjzbp->Draw("histo,same");
383 buchmann 1.11 TLegend *leg = make_legend("WW");
384 buchmann 1.6 leg->SetFillColor(kWhite);
385     leg->SetLineColor(kWhite);
386 buchmann 1.11 leg->SetHeader("WW (MC)");
387 buchmann 1.6 leg->AddEntry(wwjzbp,"Observed","l");
388     leg->AddEntry(wwpred,"Predicted","l");
389     leg->Draw("same");
390    
391     dibs->cd(2);
392     TH1F *wzjzbp = allsamples.Draw("wzjzbp",mcjzb,70,0,350, "JZB [GeV]", "events",WZ&&cutOSSF&&cutnJets&&cutmass,mc,luminosity,allsamples.FindSample("VVJetsTo4L_TuneD6T_7TeV"));
393     TH1F *wzpred = (TH1F*) give_boson_pred(WZ,mcjzb);
394     wzpred->Draw("histo");
395     wzjzbp->Draw("same,histo");
396 buchmann 1.11 TLegend *leg2 = (TLegend*)leg->Clone("leg2");
397     leg2->SetHeader("WZ (MC)");
398     leg2->Draw("same");
399     DrawPrelim();
400 buchmann 1.6
401     dibs->cd(3);
402     TH1F *zzjzbp = allsamples.Draw("zzjzbp",mcjzb,70,0,350, "JZB [GeV]", "events",ZZ&&cutOSSF&&cutnJets&&cutmass,mc,luminosity,allsamples.FindSample("VVJetsTo4L_TuneD6T_7TeV"));
403     TH1F *zzpred = (TH1F*) give_boson_pred(ZZ,mcjzb);
404     zzpred->Draw("histo");
405     zzjzbp->Draw("same,histo");
406 buchmann 1.11 TLegend *leg3 = (TLegend*)leg->Clone("leg2");
407     leg3->SetHeader("ZZ (MC)");
408     leg3->Draw("same");
409     leg3->Draw("same");
410     DrawPrelim();
411 buchmann 1.6
412     dibs->cd(4);
413     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"));
414     TH1F *allpred = (TH1F*) give_boson_pred((WW||WZ||ZZ),mcjzb);
415     allpred->Draw("histo");
416     alljzbp->Draw("same,histo");
417 buchmann 1.11 TLegend *leg4 = (TLegend*)leg->Clone("leg2");
418     leg4->SetHeader("All dibosons (MC)");
419     leg4->Draw("same");
420     DrawPrelim();
421 buchmann 1.6
422 buchmann 1.11 CompleteSave(dibs,"Studies/Dibosons");
423 buchmann 1.6
424 buchmann 1.7 }
425    
426     class signature {
427     public:
428     int runNum;
429     int eventNum;
430     int lumi;
431     };
432    
433     vector<signature> get_list_of_events(string cut) {
434     float jzb;
435     int runNum,lumi,eventNum;
436     (allsamples.collection)[0].events->SetBranchAddress("jzb",&jzb);
437     (allsamples.collection)[0].events->SetBranchAddress("eventNum",&eventNum);
438     (allsamples.collection)[0].events->SetBranchAddress("lumi",&lumi);
439     (allsamples.collection)[0].events->SetBranchAddress("runNum",&runNum);
440    
441     TTreeFormula *select = new TTreeFormula("select", cut.c_str()&&essentialcut, (allsamples.collection)[0].events);
442     vector<signature> allevents;
443     for (Int_t entry = 0 ; entry < (allsamples.collection)[0].events->GetEntries() ; entry++) {
444     (allsamples.collection)[0].events->LoadTree(entry);
445     if (select->EvalInstance()) {
446     (allsamples.collection)[0].events->GetEntry(entry);
447     signature newevent;
448     newevent.runNum=runNum;
449     newevent.eventNum=eventNum;
450     newevent.lumi=lumi;
451     allevents.push_back(newevent);
452     }
453     }
454     cout << "Done looping!" << endl;
455     return allevents;
456     }
457    
458 fronga 1.9 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) {
459 buchmann 1.7 TCut ibasiccut=basiccut;
460    
461     //Step 2: Refine the cut
462     TCanvas *ckin = new TCanvas("ckin","Kinematic Plots (in the making)",600,600);
463     ckin->SetLogy(logscale);
464    
465 fronga 1.9 TH1F *datahistoa = allsamples.Draw("datahistoa",variable,nbins,min,max, xlabel, "events",observed,is_data,luminosity);
466     TH1F *datahistob = allsamples.Draw("datahistob",variable,nbins,min,max, xlabel, "events",predicted,is_data,luminosity);
467 buchmann 1.7
468 buchmann 1.8 datahistoa->SetLineColor(kBlue);
469 buchmann 1.7 datahistob->SetLineColor(kRed);
470    
471 fronga 1.9 TLegend *kinleg = new TLegend(0.6,0.7,0.8,0.89);
472 buchmann 1.7 kinleg->SetFillColor(kWhite);
473     kinleg->SetLineColor(kWhite);
474     kinleg->SetBorderSize(0);
475 fronga 1.9 kinleg->AddEntry(datahistoa,"Observed "+TString(is_data?"Data":"MC"),"l");
476     kinleg->AddEntry(datahistob,"Predicted "+TString(is_data?"Data":"MC"),"l");
477    
478     datahistoa->SetMaximum(ymax);
479     datahistoa->Draw("histo");
480     datahistob->SetLineStyle(2);
481     if ( !noscale ) datahistob->Scale(0.3);
482     datahistob->Draw("histo,sames");
483     TVirtualPad::Pad()->Update();
484    
485     TPaveStats *sa = (TPaveStats*)datahistoa->GetListOfFunctions()->FindObject("stats");
486     TPaveStats *sb = (TPaveStats*)datahistob->GetListOfFunctions()->FindObject("stats");
487     if ( sa && sb ) {
488     sa->SetTextColor(datahistoa->GetLineColor());
489     sb->SetTextColor(datahistob->GetLineColor());
490     sb->SetY1NDC(sb->GetY1NDC()-0.25);
491     sb->SetY2NDC(sb->GetY2NDC()-0.25);
492     TVirtualPad::Pad()->Update();
493 buchmann 1.7 }
494     kinleg->Draw();
495     TText* write_cut = write_title(variable);
496     write_cut->Draw();
497     CompleteSave(ckin,"special_kin/"+filename);
498     datahistoa->Delete();
499     datahistob->Delete();
500 buchmann 1.11 delete ckin;
501 buchmann 1.7 }
502    
503    
504 buchmann 1.10 void kinematic_dist_of_pred_and_obs() {//former plot_list
505 fronga 1.9 gStyle->SetOptStat("oueMri");
506 buchmann 1.7 TCut observed=(cutmass&&cutOSSF&&cutnJets&&basiccut&&"((jzb[1]+0.06*pt-2.84727)>100)");
507 fronga 1.9
508     TCut predicted = (cutmass&&cutOSOF&&cutnJets&&basiccut&&"((jzb[1]+0.06*pt-2.84727)>100)")
509     || (sidebandcut&&cutOSOF&&cutnJets&&basiccut&&"((jzb[1]+0.06*pt-2.84727)>100)")
510     || (sidebandcut&&cutOSSF&&cutnJets&&basiccut&&"((jzb[1]+0.06*pt-2.84727)>100)");
511     TCut predictedMC = (cutmass&&cutOSOF&&cutnJets&&basiccut&&"((jzb[1]+0.04*pt-1.82559)>100)")
512     || (sidebandcut&&cutOSOF&&cutnJets&&basiccut&&"((jzb[1]+0.04*pt-1.82559)>100)")
513     || (sidebandcut&&cutOSSF&&cutnJets&&basiccut&&"((jzb[1]+0.04*pt-1.82559)>100)");
514    
515     // TCut predicted=((cutmass&&cutOSSF&&cutnJets&&basiccut&&"((jzb[1]+0.06*pt-2.84727)<-100)")
516     // ||(cutmass&&cutOSOF&&cutnJets&&basiccut&&"((jzb[1]+0.06*pt-2.84727)>100)")
517     // ||(cutmass&&cutOSOF&&cutnJets&&basiccut&&"((jzb[1]+0.06*pt-2.84727)<-100)")
518     // ||(sidebandcut&&cutOSOF&&cutnJets&&basiccut&&"((jzb[1]+0.06*pt-2.84727)>100)")
519     // ||(sidebandcut&&cutOSOF&&cutnJets&&basiccut&&"((jzb[1]+0.06*pt-2.84727)<-100)")
520     // ||(sidebandcut&&cutOSSF&&cutnJets&&basiccut&&"((jzb[1]+0.06*pt-2.84727)>100)")
521     // ||(sidebandcut&&cutOSSF&&cutnJets&&basiccut&&"((jzb[1]+0.06*pt-2.84727)<-100)"));
522 buchmann 1.7
523     bool doPF=false;
524     bool dolog=true;
525     bool nolog=false;
526    
527 fronga 1.9 // Mll: do not scale
528     make_double_plot("mll",20,50,150,11,nolog,"m_{ll} [GeV]","mll",observed,predicted,data,true);
529     make_double_plot("mll",20,50,150,11,nolog,"m_{ll} [GeV]","mll_MC",observed,predictedMC,mc,true);
530     make_double_plot("met[4]",20,0,400,11,nolog,"pfMET [GeV]","pfMET",observed,predicted,data);
531     make_double_plot("met[4]",20,0,400,11,nolog,"pfMET [GeV]","pfMET_MC",observed,predictedMC,mc);
532     make_double_plot("jetpt[0]",10,0,400,11,nolog,"leading jet p_{T} [GeV]","pfJetGoodPt_0",observed,predicted,data);
533     make_double_plot("jetpt[0]",10,0,400,11,nolog,"leading jet p_{T} [GeV]","pfJetGoodPt_0_MC",observed,predictedMC,mc);
534     make_double_plot("jeteta[0]",10,-5,5,11,nolog,"leading jet #eta","pfJetGoodEta_0",observed,predicted,data);
535     make_double_plot("jeteta[0]",10,-5,5,11,nolog,"leading jet #eta","pfJetGoodEta_0_MC",observed,predictedMC,mc);
536     make_double_plot("pt",10,0,300,11,nolog,"Z p_{T} [GeV]","Zpt",observed,predicted,data);
537     make_double_plot("pt",10,0,300,11,nolog,"Z p_{T} [GeV]","Zpt_MC",observed,predictedMC,mc);
538     make_double_plot("pt1",10,0,200,15,nolog,"p_{T} [GeV]","pt1",observed,predicted,data);
539     make_double_plot("pt1",10,0,200,15,nolog,"p_{T} [GeV]","pt1_MC",observed,predictedMC,mc);
540     make_double_plot("pt2",10,0,200,25,nolog,"p_{T} [GeV]","pt2",observed,predicted,data);
541     make_double_plot("pt2",10,0,200,25,nolog,"p_{T} [GeV]","pt2_MC",observed,predictedMC,mc);
542     make_double_plot("eta1",10,-5,5,11,nolog,"#eta_{1,l}","eta_1",observed,predicted,data);
543     make_double_plot("eta1",10,-5,5,11,nolog,"#eta_{1,l}","eta_1_MC",observed,predictedMC,mc);
544     make_double_plot("eta2",10,-5,5,11,nolog,"#eta_{2,l}","eta_2",observed,predicted,data);
545     make_double_plot("eta2",10,-5,5,11,nolog,"#eta_{2,l}","eta_2_MC",observed,predictedMC,mc);
546     make_double_plot("phi1-phi2",10,-6.0,6.0,11,nolog,"#phi_{1}-#phi_{2}","dphi",observed,predicted,data);
547     make_double_plot("phi1-phi2",10,-6.0,6.0,11,nolog,"#phi_{1}-#phi_{2}","dphi_MC",observed,predictedMC,mc);
548     make_double_plot("pfJetGoodNum",8,0.5,8.5,20,nolog,"nJets","nJets",observed,predicted,data);
549     make_double_plot("pfJetGoodNum",8,0.5,8.5,20,nolog,"nJets","nJets_MC",observed,predictedMC,mc);
550    
551     }