ViewVC Help
View File | Revision Log | Show Annotations | Root Listing
root/cvsroot/UserCode/cbrown/Development/Plotting/Modules/Plotting_Functions.C
Revision: 1.99
Committed: Fri Jun 28 15:03:02 2013 UTC (11 years, 10 months ago) by buchmann
Content type: text/plain
Branch: MAIN
CVS Tags: HEAD
Changes since 1.98: +216 -45 lines
Log Message:
Updated files for migration to git (sync)

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     #include <TLegendEntry.h>
18 buchmann 1.96 #include "TMath.h"
19     #include "Math/DistFunc.h"
20 buchmann 1.1
21     using namespace std;
22    
23     using namespace PlottingSetup;
24    
25     void todo() {
26     dout << "My to do list: " << endl;
27     dout << " - ExperimentalModule::Poisson_ratio_plot : Get the second part to work!" << endl;
28 buchmann 1.5 dout << " - compare_onpeak_offpeak_signal_distributions: Implement this function ... " << endl;
29 buchmann 1.1 dout << "Info : The trigger requirement is currently set to " << (const char*) passtrig << endl;
30 buchmann 1.4 dout << "Info : The pt requirement is currently set to " << (const char*) passtrig << endl;
31     dout << "Info : The mll requirement is currently set to " << (const char*) cutmass << endl;
32     dout << "Info : The lepton requirement is currently set to " << (const char*) leptoncut << endl;
33 buchmann 1.30 dout << "Info : The weight applied to all MC is " << (const char*) cutWeight << endl;
34 buchmann 1.1 }
35    
36 buchmann 1.28
37 buchmann 1.94 namespace PeakLibrary {
38     bool StoreHistos=false;
39     vector<TH1F*> DataHistogram;
40     vector<TH1F*> MCHistogram;
41     }
42    
43 buchmann 1.28
44 buchmann 1.57 void find_one_peak_combination(TCut specialcut, bool SwitchOffNJetsCut, float &MCPeak,float &MCPeakError, float &DataPeak, float &DataPeakError, float &MCSigma, float &MCSigmaError, float &DataSigma, float& DataSigmaError, stringstream &result, bool doPUreweighting = true, string saveas="")
45 buchmann 1.1 {
46     // Temporarily switch off PU reweighting, if asked
47     TCut weightbackup=cutWeight;
48     if ( !doPUreweighting ) cutWeight="1.0";
49 buchmann 1.21
50 buchmann 1.24 int nbins=100;
51     if(PlottingSetup::DoBTag) nbins=25;
52    
53 buchmann 1.57 TCut nJetsCut(cutnJets);
54     if(SwitchOffNJetsCut) nJetsCut=specialcut;
55    
56 buchmann 1.94
57 buchmann 1.1 TCanvas *tempcan = new TCanvas("tempcan","Temporary canvas for peak finding preparations");
58 buchmann 1.57 TH1F *rawJZBeemmMC = allsamples.Draw("rawJZBeemmMC",jzbvariablemc,nbins,-50,50, "JZB [GeV]", "events", cutmass&&cutOSSF&&nJetsCut&&specialcut,mc, luminosity);
59     TH1F *rawJZBeemmData = allsamples.Draw("rawJZBeemmData",jzbvariabledata,nbins, -50,50, "JZB [GeV]", "events", cutmass&&cutOSSF&&nJetsCut&&specialcut,data, luminosity);
60     TH1F *rawJZBemMC = allsamples.Draw("rawJZBemMC",jzbvariablemc,nbins,-50,50, "JZB [GeV]", "events", cutmass&&cutOSOF&&nJetsCut&&specialcut,mc, luminosity);
61     TH1F *rawJZBemData = allsamples.Draw("rawJZBemData",jzbvariabledata,nbins, -50,50, "JZB [GeV]", "events", cutmass&&cutOSOF&&nJetsCut&&specialcut,data, luminosity);
62 buchmann 1.1 TH1F *rawttbarjzbeemmMC;
63    
64     if(method==doKM) {
65     //we only need this histo for the KM fitting...
66 buchmann 1.57 rawttbarjzbeemmMC = allsamples.Draw("rawttbarjzbeemmMC",jzbvariablemc,nbins, -50,50, "JZB [GeV]", "events",cutmass&&cutOSSF&&nJetsCut&&specialcut,mc,luminosity,allsamples.FindSample("TTJet"));
67 fronga 1.40 MCPeak=find_peak(rawJZBeemmMC, rawttbarjzbeemmMC, -40, 40, mc, MCPeakError,MCSigma,MCSigmaError,method,saveas);
68     DataPeak=find_peak(rawJZBeemmData, rawJZBeemmData, -40, 40, data, DataPeakError,DataSigma,DataSigmaError,method,saveas);
69 buchmann 1.28 delete rawttbarjzbeemmMC;
70 buchmann 1.1 }
71     else {
72     TH1F *reducedMC = (TH1F*)rawJZBeemmMC->Clone();
73     TH1F *reducedData = (TH1F*)rawJZBeemmData->Clone();
74     reducedMC->Add(rawJZBemMC,-1);
75     reducedData->Add(rawJZBemData,-1);
76     //this is Kostas' way of doing it - we subtract em to get rid of some of the ttbar contribution (in reality, of flavor-symmetric contribution)
77 fronga 1.40 MCPeak=find_peak(reducedMC, rawttbarjzbeemmMC, -40, 40, mc, MCPeakError,MCSigma,MCSigmaError,method,saveas);
78     DataPeak=find_peak(reducedData, rawJZBeemmData, -40, 40, data, DataPeakError,DataSigma,DataSigmaError,method,saveas);
79 buchmann 1.28 delete reducedMC;
80     delete reducedData;
81 buchmann 1.1 }
82    
83     // Revert to original PU reweighting
84     if ( !doPUreweighting ) cutWeight = weightbackup;
85    
86     // MCPeak=find_peak(rawJZBeemmMC, rawttbarjzbeemmMC, -40, 40, mc, MCPeakError,MCSigma,method);
87     // DataPeak=find_peak(rawJZBeemmData, rawJZBeemmData, -40, 40, data, DataPeakError,DataSigma,method);
88 fronga 1.40 dout << " We have found the peak in Data at " << DataPeak << " +/- " << DataPeakError << " with sigma=" << DataSigma << " +/- " << DataSigmaError << endl;
89     result << " We have found the peak in Data at " << DataPeak << " +/- " << DataPeakError << " with sigma=" << DataSigma << " +/- " << DataSigmaError << endl;
90     dout << " We have found the peak in MC at " << MCPeak << " +/- " << MCPeakError << " with sigma=" << MCSigma << " +/- " << MCSigmaError << endl;
91     result << " We have found the peak in MC at " << MCPeak << " +/- " << MCPeakError << " with sigma=" << MCSigma << " +/- " << MCSigmaError << endl;
92 buchmann 1.94
93     if(!PeakLibrary::StoreHistos) {
94     delete rawJZBeemmData;
95     delete rawJZBeemmMC;
96     } else {
97     rawJZBeemmMC->SetName(GetNumericHistoName().c_str());
98     rawJZBeemmData->SetName(GetNumericHistoName().c_str());
99     rawJZBeemmMC->Add(rawJZBemMC,-1);
100     rawJZBeemmData->Add(rawJZBemData,-1);
101     PeakLibrary::DataHistogram.push_back(rawJZBeemmData);
102     PeakLibrary::MCHistogram.push_back(rawJZBeemmMC);
103     }
104    
105    
106    
107 buchmann 1.28 delete rawJZBemData;
108     delete rawJZBemMC;
109 buchmann 1.1 delete tempcan;
110     }
111    
112 buchmann 1.94
113     void FindPeakPileUpCorrection() {
114     bool StoreResultsInSeparateFile=true;
115     PeakLibrary::StoreHistos=true;
116    
117    
118     dout << "Finding peak position as a function of PU" << endl;
119     float MCPeak, MCPeakError, DataPeak, DataPeakError;
120     stringstream result, datajzb, mcjzb;
121     bool doPUreweighting=true;
122     bool SwitchOffNJetsCut=false;
123    
124    
125     TCanvas *can = new TCanvas("can","can");
126     float mcSigma,mcSigmaError,dataSigma,dataSigmaError;
127    
128 buchmann 1.98 const int nbins=10;
129 buchmann 1.99 float NumVtxBin[nbins] = {0,7,9,11,13,15,17,19,21,30};
130 buchmann 1.94
131     stringstream NowCut;
132    
133    
134     Double_t mc_peak_x[nbins];
135     Double_t mc_peak_y[nbins];
136     Double_t mc_peak_dxh[nbins];
137     Double_t mc_peak_dxl[nbins];
138     Double_t mc_peak_dy[nbins];
139    
140     Double_t data_peak_x[nbins];
141     Double_t data_peak_y[nbins];
142     Double_t data_peak_dxh[nbins];
143     Double_t data_peak_dxl[nbins];
144     Double_t data_peak_dy[nbins];
145    
146     Double_t mc_width_x[nbins];
147     Double_t mc_width_y[nbins];
148     Double_t mc_width_dxh[nbins];
149     Double_t mc_width_dxl[nbins];
150     Double_t mc_width_dy[nbins];
151    
152     Double_t data_width_x[nbins];
153     Double_t data_width_y[nbins];
154     Double_t data_width_dxh[nbins];
155     Double_t data_width_dxl[nbins];
156     Double_t data_width_dy[nbins];
157    
158     for(int i=0;i<nbins-1;i++) {
159     NowCut.str("");
160     NowCut << "numVtx>" << NumVtxBin[i] << "&&numVtx<=" << NumVtxBin[i+1];
161     cout << "NVtx cut is now : " << NowCut.str() << endl;
162     find_one_peak_combination(TCut(NowCut.str().c_str()),SwitchOffNJetsCut,MCPeak,MCPeakError, DataPeak,DataPeakError,mcSigma,mcSigmaError, dataSigma,dataSigmaError,result,doPUreweighting,"");
163     cout << " " << MCPeak << " +/- " << MCPeakError << endl;
164     cout << " " << DataPeak << " +/- " << DataPeakError << endl;
165    
166     TH1F *hDataSFNumVtx = allsamples.Draw("hDataSFNumVtx","numVtx",100,-0.5,49.5, "N_{vtx}", "events", cutmass&&cutOSSF&&cutnJets&&TCut(NowCut.str().c_str()),data, luminosity);
167     TH1F *hDataOFNumVtx = allsamples.Draw("hDataOFNumVtx","numVtx",100,-0.5,49.5, "N_{vtx}", "events", cutmass&&cutOSOF&&cutnJets&&TCut(NowCut.str().c_str()),data, luminosity);
168     TH1F *hMCSFNumVtx = allsamples.Draw("hMCSFNumVtx","numVtx",100,-0.5,49.5, "N_{vtx}", "events", cutmass&&cutOSSF&&cutnJets&&TCut(NowCut.str().c_str()),mc, luminosity);
169     TH1F *hMCOFNumVtx = allsamples.Draw("hMCOFNumVtx","numVtx",100,-0.5,49.5, "N_{vtx}", "events", cutmass&&cutOSOF&&cutnJets&&TCut(NowCut.str().c_str()),mc, luminosity);
170    
171     hDataSFNumVtx->Add(hDataOFNumVtx,-1);
172     hMCSFNumVtx->Add(hMCOFNumVtx,-1);
173    
174     mc_peak_x[i]=hMCSFNumVtx->GetMean();
175     mc_peak_y[i]=MCPeak;
176     mc_peak_dy[i]=MCPeakError;
177    
178     data_peak_x[i]=hDataSFNumVtx->GetMean();
179     data_peak_y[i]=DataPeak;
180     data_peak_dy[i]=DataPeakError;
181    
182     mc_width_x[i]=hMCSFNumVtx->GetMean();
183     mc_width_y[i]=mcSigma;
184     mc_width_dy[i]=mcSigmaError;
185    
186     data_width_x[i]=hDataSFNumVtx->GetMean();
187     data_width_y[i]=dataSigma;
188     data_width_dy[i]=dataSigmaError;
189    
190     delete hDataSFNumVtx;
191     delete hDataOFNumVtx;
192     delete hMCSFNumVtx;
193     delete hMCOFNumVtx;
194     }
195    
196     for(int i=0;i<nbins-1;i++) {
197     if(i==0) {
198     data_width_dxl[i]=data_width_x[i];
199     data_peak_dxl[i]=data_peak_x[i];
200     data_width_dxh[i]=0.5*(data_width_x[i+1]-data_width_x[i]);
201     data_peak_dxh[i]=0.5*(data_peak_x[i+1]-data_peak_x[i]);
202    
203     mc_width_dxl[i]=mc_width_x[i];
204     mc_peak_dxl[i]=mc_peak_x[i];
205     mc_width_dxh[i]=0.5*(mc_width_x[i+1]-mc_width_x[i]);
206     mc_peak_dxh[i]=0.5*(mc_peak_x[i+1]-mc_peak_x[i]);
207     } else if(i==nbins-2) {
208     data_width_dxl[i]=0.5*(data_width_x[i]-data_width_x[i-1]);
209     data_peak_dxl[i]=0.5*(data_peak_x[i]-data_peak_x[i-1]);
210 buchmann 1.99 data_width_dxh[i]=30-data_width_x[i];
211     data_peak_dxh[i]=30-data_peak_x[i];
212 buchmann 1.94
213     mc_width_dxl[i]=0.5*(mc_width_x[i]-mc_width_x[i-1]);
214     mc_peak_dxl[i]=0.5*(mc_peak_x[i]-mc_peak_x[i-1]);
215 buchmann 1.99 mc_width_dxh[i]=30-mc_width_x[i];
216     mc_peak_dxh[i]=30-mc_peak_x[i];
217 buchmann 1.94 } else {
218     data_width_dxl[i]=0.5*(data_width_x[i]-data_width_x[i-1]);
219     data_peak_dxl[i]=0.5*(data_peak_x[i]-data_peak_x[i-1]);
220     data_width_dxh[i]=0.5*(data_width_x[i+1]-data_width_x[i]);
221     data_peak_dxh[i]=0.5*(data_peak_x[i+1]-data_peak_x[i]);
222    
223     mc_width_dxl[i]=0.5*(mc_width_x[i]-mc_width_x[i-1]);
224     mc_peak_dxl[i]=0.5*(mc_peak_x[i]-mc_peak_x[i-1]);
225     mc_width_dxh[i]=0.5*(mc_width_x[i+1]-mc_width_x[i]);
226     mc_peak_dxh[i]=0.5*(mc_peak_x[i+1]-mc_peak_x[i]);
227     }
228     }
229    
230     TGraphAsymmErrors *gMCPeak = new TGraphAsymmErrors(nbins-1,mc_peak_x,mc_peak_y,mc_peak_dxl,mc_peak_dxh,mc_peak_dy,mc_peak_dy);
231     gMCPeak->SetTitle("gMCPeak");
232     gMCPeak->SetName("gMCPeak");
233    
234     TGraphAsymmErrors *gDataPeak = new TGraphAsymmErrors(nbins-1,data_peak_x,data_peak_y,data_peak_dxl,data_peak_dxh,data_peak_dy,data_peak_dy);
235     gDataPeak->SetTitle("gDataPeak");
236     gDataPeak->SetName("gDataPeak");
237    
238     TGraphAsymmErrors *gMCWidth = new TGraphAsymmErrors(nbins-1,mc_width_x,mc_width_y,mc_width_dxl,mc_width_dxh,mc_width_dy,mc_width_dy);
239     gMCWidth->SetTitle("gMCWidth");
240     gMCWidth->SetName("gMCWidth");
241    
242     TGraphAsymmErrors *gDataWidth = new TGraphAsymmErrors(nbins-1,data_width_x,data_width_y,data_width_dxl,data_width_dxh,data_width_dy,data_width_dy);
243     gDataWidth->SetTitle("gDataWidth");
244     gDataWidth->SetName("gDataWidth");
245    
246     can->cd();
247     gMCPeak->GetXaxis()->SetTitle("N(Vertices)");
248     gMCPeak->GetYaxis()->SetTitle("Peak position");
249     gMCPeak->GetXaxis()->CenterTitle();
250     gMCPeak->GetYaxis()->CenterTitle();
251     gDataPeak->GetXaxis()->SetTitle("N(Vertices)");
252     gDataPeak->GetYaxis()->SetTitle("Peak position");
253     gDataPeak->GetXaxis()->CenterTitle();
254     gDataPeak->GetYaxis()->CenterTitle();
255    
256     gDataWidth->GetXaxis()->SetTitle("N(Vertices)");
257     gDataWidth->GetYaxis()->SetTitle("#sigma_{JZB}");
258     gDataWidth->GetXaxis()->CenterTitle();
259     gDataWidth->GetYaxis()->CenterTitle();
260     gMCWidth->GetXaxis()->SetTitle("N(Vertices)");
261     gMCWidth->GetYaxis()->SetTitle("#sigma_{JZB}");
262     gMCWidth->GetXaxis()->CenterTitle();
263     gMCWidth->GetYaxis()->CenterTitle();
264    
265     gMCPeak->SetFillColor(TColor::GetColor("#2E9AFE"));
266     gDataPeak->SetFillColor(TColor::GetColor("#2E9AFE"));
267     gDataWidth->SetFillColor(TColor::GetColor("#2E9AFE"));
268     gMCWidth->SetFillColor(TColor::GetColor("#2E9AFE"));
269    
270 buchmann 1.98 can->cd();
271 buchmann 1.94 gMCPeak->Draw("A2");
272     DrawMCPrelim();
273     CompleteSave(can,"PUStudy/MCPeak");
274 buchmann 1.98
275 buchmann 1.94 can->cd();
276 buchmann 1.98 gStyle->SetOptFit(0);
277     gMCPeak->Fit("pol1");
278     TF1 *MCFit = (TF1*)gMCPeak->GetFunction("pol1");
279    
280     gMCPeak->Draw("A2");
281     MCFit->SetLineColor(kBlue);
282     MCFit->SetLineWidth(2);
283     MCFit->Draw("same");
284     stringstream mresult;
285 buchmann 1.99 mresult << "Slope: " << DigitsAfterComma(MCFit->GetParameter(1),2) << " +/- " << DigitsAfterComma(MCFit->GetParError(1),2);
286 buchmann 1.98 TText* mrestitle = write_text(0.7,0.2,mresult.str());
287     mrestitle->Draw();
288     DrawMCPrelim();
289     CompleteSave(can,"PUStudy/MCPeak_Fit");
290    
291 buchmann 1.99 gMCWidth->Draw("A2");
292 buchmann 1.94 DrawMCPrelim();
293     CompleteSave(can,"PUStudy/MCWidth");
294    
295 buchmann 1.98
296 buchmann 1.94 can->cd();
297     gDataPeak->Draw("A2");
298 buchmann 1.98 DrawPrelim();
299     CompleteSave(can,"PUStudy/DataPeak");
300    
301     can->cd();
302     gStyle->SetOptFit(0);
303     gDataPeak->Fit("pol1");
304 buchmann 1.94
305 buchmann 1.98 TF1 *DataFit = (TF1*)gDataPeak->GetFunction("pol1");
306     DataFit->SetLineColor(kBlue);
307     DataFit->SetLineWidth(2);
308     DataFit->Draw("same");
309     stringstream dresult;
310 buchmann 1.99 dresult << "Slope: " << DigitsAfterComma(DataFit->GetParameter(1),2) << " +/- " << DigitsAfterComma(DataFit->GetParError(1),2);
311 buchmann 1.98 TText* drestitle = write_text(0.7,0.2,dresult.str());
312     drestitle->Draw();
313 buchmann 1.94 DrawPrelim();
314 buchmann 1.98 CompleteSave(can,"PUStudy/DataPeak_Fit");
315    
316 buchmann 1.87 can->cd();
317     gDataWidth->Draw("A2");
318     DrawPrelim();
319     CompleteSave(can,"PUStudy/DataWidth");
320    
321 buchmann 1.94 if(StoreResultsInSeparateFile) {
322     TFile *PeakFinding = new TFile("PeakFindingWithPeakCorrection.root","RECREATE");
323     gMCPeak->Write();
324     gDataPeak->Write();
325     gMCWidth->Write();
326     gDataWidth->Write();
327     PeakFinding->Close();
328     }
329    
330 buchmann 1.87
331 buchmann 1.94 dout << "The suggested correction for Data is : " << DataFit->GetParameter(1) << endl;
332     dout << "The suggested correction for MC is : " << MCFit->GetParameter(1) << endl;
333    
334 buchmann 1.99 dout << "Suggested variables : " << endl;
335     dout << " jzbvariabledata=\"( " << jzbvariabledata << " - numVtx * " << DataFit->GetParameter(1) << " - " << DataFit->GetParameter(0) << " )\";" << endl;
336     dout << " jzbvariablemc= \"( " << jzbvariablemc << " - numVtx * " << MCFit->GetParameter(1) << " - " << MCFit->GetParameter(0) << " )\";" << endl;
337    
338 buchmann 1.94 TLegend *leg = make_legend();
339     can->cd();
340     int j=0;
341     for(int i=PeakLibrary::DataHistogram.size()-5;i<PeakLibrary::DataHistogram.size();i++) {
342     PeakLibrary::DataHistogram[i]->Rebin(5);
343     PeakLibrary::DataHistogram[i]->SetLineColor(j+1);
344     if(i==PeakLibrary::DataHistogram.size()-5) PeakLibrary::DataHistogram[i]->DrawNormalized("histo");
345     else PeakLibrary::DataHistogram[i]->DrawNormalized("histo,same");
346     stringstream name;
347     name << NumVtxBin[j] << " < N_{vtx} < " << NumVtxBin[j+1];
348     leg->AddEntry(PeakLibrary::DataHistogram[i],name.str().c_str(),"l");
349     j++;
350     }
351    
352     leg->Draw();
353     DrawPrelim();
354     CompleteSave(can,"PUStudy/DataOverview");
355    
356     TLegend *leg2 = make_legend();
357     can->cd();
358     j=0;
359     for(int i=PeakLibrary::MCHistogram.size()-5;i<PeakLibrary::MCHistogram.size();i++) {
360     PeakLibrary::MCHistogram[i]->Rebin(5);
361     PeakLibrary::MCHistogram[i]->SetLineColor(j+1);
362     if(i==PeakLibrary::MCHistogram.size()-5) PeakLibrary::MCHistogram[i]->DrawNormalized("histo");
363     else PeakLibrary::MCHistogram[i]->DrawNormalized("histo,same");
364     stringstream name;
365     name << NumVtxBin[j] << " < N_{vtx} < " << NumVtxBin[j+1];
366     leg->AddEntry(PeakLibrary::MCHistogram[i],name.str().c_str(),"l");
367     j++;
368     }
369    
370     leg->Draw();
371     DrawPrelim();
372     CompleteSave(can,"PUStudy/MCOverview");
373 buchmann 1.87
374     delete can;
375 buchmann 1.94 PeakLibrary::StoreHistos=false;
376 buchmann 1.86 }
377    
378 buchmann 1.94
379    
380 buchmann 1.57 void find_peaks(float &MCPeak,float &MCPeakError, float &DataPeak, float &DataPeakError, stringstream &result, bool doPUreweighting, stringstream &datajzb, stringstream &mcjzb, string sSpecialCut="", bool SwitchOffNJetsCut=false)
381 buchmann 1.28 {
382 buchmann 1.66 bool overunderflowstatus=addoverunderflowbins;
383 buchmann 1.53 switch_overunderflow(false);
384 buchmann 1.57
385     TCut SpecialCut("mll>=0");
386     if(sSpecialCut!="") SpecialCut=TCut(sSpecialCut.c_str());
387    
388 buchmann 1.31 bool DoInvidualeemmPeaks=false;
389    
390 buchmann 1.28 float mcpeak, datapeak;
391     float mcpeakerr, datapeakerr;
392    
393     float mceepeak,mcmmpeak;
394     float mceepeakerr,mcmmpeakerr;
395    
396     float datammpeak,dataeepeak;
397     float datammpeakerr,dataeepeakerr;
398    
399 fronga 1.40 float mcSigma,mcSigmaError, dataSigma, dataSigmaError;
400 buchmann 1.28
401     dout << "Finding global peak : " << endl;
402 buchmann 1.57 find_one_peak_combination(SpecialCut,SwitchOffNJetsCut,mcpeak,mcpeakerr, datapeak,datapeakerr,mcSigma,mcSigmaError, dataSigma,dataSigmaError,result,doPUreweighting,"");
403 buchmann 1.30
404 buchmann 1.31 if(DoInvidualeemmPeaks) {
405     dout << "Finding peak for electrons : " << endl;
406 buchmann 1.57 find_one_peak_combination(SpecialCut&&TCut("id1==0"),SwitchOffNJetsCut,mceepeak,mceepeakerr,dataeepeak,dataeepeakerr,mcSigma,mcSigmaError,dataSigma,dataSigmaError,result,doPUreweighting,"_ele");
407 buchmann 1.31 dout << "Finding peak for muons : " << endl;
408 buchmann 1.57 find_one_peak_combination(SpecialCut&&TCut("id1==1"),SwitchOffNJetsCut,mcmmpeak,mcmmpeakerr,datammpeak,datammpeakerr,mcSigma,mcSigmaError,dataSigma,dataSigmaError,result,doPUreweighting,"_mu");
409 buchmann 1.31
410     datajzb << "(" << jzbvariabledata;
411     mcjzb << "(" << jzbvariablemc;
412    
413     if(dataeepeak>0) datajzb << "- (id1==id2)*(id1==0)*" << TMath::Abs(dataeepeak) << " ";
414     else datajzb << "+ (id1==id2)*(id1==0)*" << TMath::Abs(dataeepeak) << " ";
415    
416     if(datammpeak>0) datajzb << "- (id1==id2)*(id1==1)*" << TMath::Abs(datammpeak) << " ";
417     else datajzb << "+ (id1==id2)*(id1==1)*" << TMath::Abs(datammpeak) << " ";
418    
419     if(datapeak>0) datajzb << "- (id1!=id2)*" << TMath::Abs(datapeak) << " ";
420     else datajzb << "+ (id1!=id2)*" << TMath::Abs(datapeak) << " ";
421    
422     datajzb << ")";
423    
424     if(mceepeak>0) mcjzb << "- (id1==id2)*(id1==0)*" << TMath::Abs(mceepeak) << " ";
425     else mcjzb << "+ (id1==id2)*(id1==0)*" << TMath::Abs(mceepeak) << " ";
426    
427     if(mcmmpeak>0) mcjzb << "- (id1==id2)*(id1==1)*" << TMath::Abs(mcmmpeak) << " ";
428     else mcjzb << "+ (id1==id2)*(id1==1)*" << TMath::Abs(mcmmpeak) << " ";
429    
430     if(mcpeak>0) mcjzb << "- (id1!=id2)*" << TMath::Abs(mcpeak) << " ";
431     else mcjzb << "+ (id1!=id2)*" << TMath::Abs(mcpeak) << " ";
432    
433     mcjzb << ")";
434 buchmann 1.56
435 buchmann 1.31 } else {
436     datajzb << "(" << jzbvariabledata;
437 buchmann 1.93 mcjzb << "(" << jzbvariablemc;
438 buchmann 1.31
439     if(datapeak>0) datajzb << "- " << TMath::Abs(datapeak) << " ";
440     else datajzb << "+ " << TMath::Abs(datapeak) << " ";
441    
442     datajzb << ")";
443    
444     if(mcpeak>0) mcjzb << "- " << TMath::Abs(mcpeak) << " ";
445     else mcjzb << "+ " << TMath::Abs(mcpeak) << " ";
446    
447     mcjzb << ")";
448     }
449 buchmann 1.36
450 buchmann 1.56 MCPeak=mcpeak;
451     MCPeakError=mcpeakerr;
452     DataPeak=datapeak;
453     DataPeakError=datapeakerr;
454 buchmann 1.66 switch_overunderflow(overunderflowstatus);
455 buchmann 1.28 }
456    
457 buchmann 1.95 void make_special_obs_pred_mll_plot(string datajzb, string mcjzb, float jzbthreshold, float binWidth, int MCorData) {
458 buchmann 1.11 float min=70.0;
459     float max=115.0;
460     if(!PlottingSetup::RestrictToMassPeak) {
461 buchmann 1.34 min=20;
462 fronga 1.40 max=300;
463 buchmann 1.11 }
464 fronga 1.40 int nbins=int((max-min)/binWidth);
465 buchmann 1.11
466 buchmann 1.95 string prefix="";
467     if(MCorData==mc) prefix="MC__";
468    
469    
470     if(MCorData==mc) datajzb=mcjzb;
471    
472 buchmann 1.11 TCanvas *ckin = new TCanvas("ckin","Kinematic Plots (in the making)",600,600);
473    
474 buchmann 1.34 stringstream largerzeroS;
475     largerzeroS << "(" << datajzb << ">" << jzbthreshold << ")";
476     TCut largerzeroD(largerzeroS.str().c_str());
477 buchmann 1.11
478     stringstream smallerzeroS;
479 buchmann 1.34 smallerzeroS << "(" << datajzb << "<-" << jzbthreshold << ")";
480     TCut smallerzeroD(smallerzeroS.str().c_str());
481    
482    
483     stringstream largerzeroMS;
484     largerzeroMS << "(" << mcjzb << ">" << jzbthreshold << ")";
485     TCut largerzeroM(largerzeroMS.str().c_str());
486    
487 buchmann 1.95
488     stringstream smallerzeroMS;
489     smallerzeroMS << "(" << mcjzb << "<-" << jzbthreshold << ")";
490     TCut smallerzeroM(smallerzeroMS.str().c_str());
491    
492     TH1F *RcorrJZBeemm = allsamples.Draw("RcorrJZBeemm", "mll",nbins,min,max, "m_{ll} [GeV]", "events", cutmass&&cutOSSF&&cutnJets&&largerzeroD,MCorData,luminosity);
493 buchmann 1.93 THStack mcRcorrJZBeemm = allsamples.DrawStack("mcRcorrJZBeemm","mll",nbins,min,max, "m_{ll} [GeV]", "events", cutmass&&cutOSSF&&cutnJets&&largerzeroM,mc,luminosity);
494 buchmann 1.95 TH1F *LcorrJZBeemm = allsamples.Draw("LcorrJZBeemm", "mll",nbins,min,max, "m_{ll} [GeV]", "events", cutmass&&cutOSSF&&cutnJets&&smallerzeroD,MCorData,luminosity);
495     TH1F *RcorrJZBem = allsamples.Draw("RcorrJZBem", "mll",nbins,min,max, "m_{ll} [GeV]", "events", cutmass&&cutOSOF&&cutnJets&&largerzeroD,MCorData,luminosity);
496     TH1F *LcorrJZBem = allsamples.Draw("LcorrJZBem", "mll",nbins,min,max, "m_{ll} [GeV]", "events", cutmass&&cutOSOF&&cutnJets&&smallerzeroD,MCorData,luminosity);
497 buchmann 1.11
498     TH1F *RcorrJZBSBem;
499     TH1F *LcorrJZBSBem;
500     TH1F *RcorrJZBSBeemm;
501     TH1F *LcorrJZBSBeemm;
502    
503 buchmann 1.16 // TH1F *RcorrJZBeemmNoS;
504 buchmann 1.11
505 buchmann 1.50 if(PlottingSetup::RestrictToMassPeak&&PlottingSetup::UseSidebandsForcJZB) {
506 buchmann 1.95 RcorrJZBSBem = allsamples.Draw("RcorrJZBSBem", "mll",nbins,min,max, "JZB [GeV]", "events", sidebandcut&&cutOSOF&&cutnJets&&largerzeroD,MCorData, luminosity);
507     LcorrJZBSBem = allsamples.Draw("LcorrJZBSBem", "mll",nbins,min,max, "JZB [GeV]", "events", sidebandcut&&cutOSOF&&cutnJets&&smallerzeroD,MCorData, luminosity);
508     RcorrJZBSBeemm = allsamples.Draw("RcorrJZBSBeemm","mll",nbins,min,max, "JZB [GeV]", "events", sidebandcut&&cutOSSF&&cutnJets&&largerzeroD,MCorData, luminosity);
509     LcorrJZBSBeemm = allsamples.Draw("LcorrJZBSBeemm","mll",nbins,min,max, "JZB [GeV]", "events", sidebandcut&&cutOSSF&&cutnJets&&smallerzeroD,MCorData, luminosity);
510 buchmann 1.11 }
511 buchmann 1.95
512     // Separate predictions
513 fronga 1.43 TH1F* SFN = (TH1F*)LcorrJZBeemm->Clone("SFN");
514     TH1F* OFP = (TH1F*)RcorrJZBem->Clone("OFP");
515     TH1F* OFN = (TH1F*)LcorrJZBem->Clone("OFN");
516 buchmann 1.95
517 buchmann 1.96 TH1F *BpredSys = (TH1F*)SFN->Clone("BpredSys");
518     ClearHisto(BpredSys);
519     AddSquared(BpredSys,SFN,pow(PlottingSetup::zjetsestimateuncertOFFPEAK,2));
520    
521 buchmann 1.50 if(PlottingSetup::RestrictToMassPeak&&PlottingSetup::UseSidebandsForcJZB) {
522 fronga 1.43 OFP->Scale(1.0/3.0);
523     OFP->Add(RcorrJZBSBem,1.0/3.);
524     OFP->Add(RcorrJZBSBeemm,1.0/3.);
525     OFN->Scale(1.0/3.0);
526     OFN->Add(LcorrJZBSBem,1.0/3.);
527     OFN->Add(LcorrJZBSBeemm,1.0/3.);
528 buchmann 1.96 AddSquared(BpredSys,RcorrJZBem,pow((1.0/3) * PlottingSetup::emuncertOFFPEAK,2));
529     AddSquared(BpredSys,RcorrJZBSBem,pow((1.0/3) * PlottingSetup::emuncertOFFPEAK,2));
530     AddSquared(BpredSys,RcorrJZBSBeemm,pow((1.0/3) * PlottingSetup::emuncertOFFPEAK,2));
531     } else {
532     AddSquared(BpredSys,OFN,pow(PlottingSetup::emuncertOFFPEAK,2));
533     }
534 fronga 1.43
535 buchmann 1.96 SQRT(BpredSys);
536    
537     TGraphErrors *BpredSysBand = new TGraphErrors();
538     // TH1F *BpredSysBand = (TH1F*)BpredSys->Clone("BpredSysBand");
539    
540     for(int i=1;i<=BpredSys->GetNbinsX();i++) {
541     /*BpredSysBand->SetBinError(i,BpredSysBand->GetBinContent(i));
542     BpredSysBand->SetBinContent(i,0);*/
543     float dx=0.5*BpredSys->GetBinWidth(i);
544     float dy=BpredSys->GetBinContent(i);
545     BpredSysBand->SetPoint(i-1,BpredSys->GetBinCenter(i),0);
546     BpredSysBand->SetPointError(i-1,dx,dy);
547     }
548    
549     delete BpredSys;
550     BpredSysBand->SetFillColor(TColor::GetColor("#2E9AFE"));
551    
552 fronga 1.43 TH1F* Bpred = (TH1F*)SFN->Clone("Bpred");
553 buchmann 1.99 Bpred->Add(OFP,1.02);
554     Bpred->Add(OFN,-1.02);
555 buchmann 1.11 Bpred->SetLineColor(kRed);
556    
557 fronga 1.40 RcorrJZBeemm->SetTitleOffset(1.3,"y");
558 buchmann 1.11 RcorrJZBeemm->Draw();
559 buchmann 1.77 mcRcorrJZBeemm.Draw("histo,same");
560 buchmann 1.11 Bpred->Draw("histo,same");
561     RcorrJZBeemm->Draw("same");
562    
563     TLegend *leg = allsamples.allbglegend();
564     leg->SetX1(0.58);
565 buchmann 1.88 // leg->AddEntry(RcorrJZBeemm,"observed (data)","l");
566 buchmann 1.11 leg->AddEntry(Bpred,"predicted (data)","l");
567     leg->Draw("same");
568    
569     stringstream saveas;
570 buchmann 1.95 saveas << "kin/Mll_After_Cut/" << prefix << "Cut_At" << jzbthreshold;
571 buchmann 1.11 CompleteSave(ckin,saveas.str());
572 buchmann 1.34
573 fronga 1.40 // Draw all predictions overlayed
574 fronga 1.43 unsigned int w = gStyle->GetHistLineWidth()+1; // Make line a bit wider, since we dash it
575     SFN->SetLineColor(kGreen+2);
576     SFN->SetLineStyle(2);
577     SFN->SetLineWidth(w);
578     OFP->SetLineColor(kBlue+2);
579     OFP->SetLineStyle(2);
580     OFP->SetLineWidth(w);
581     OFN->SetLineColor(kMagenta+2);
582     OFN->SetLineStyle(3);
583     OFN->SetLineWidth(w);
584 buchmann 1.34
585     RcorrJZBeemm->Draw();
586 fronga 1.43 SFN->Draw("histo,same");
587     OFP->Draw("histo,same");
588     OFN->Draw("histo,same");
589 buchmann 1.34 Bpred->Draw("histo,same");
590     RcorrJZBeemm->Draw("same");
591    
592 fronga 1.40 TLegend *leg2 = make_legend("",0.52,0.7);
593 buchmann 1.95 if(MCorData==data) {
594     leg2->AddEntry(RcorrJZBeemm,"observed (data)","lp");
595     leg2->AddEntry(Bpred,"predicted (data)","l");
596     } else {
597     leg2->AddEntry(RcorrJZBeemm,"true (MC)","lp");
598     leg2->AddEntry(Bpred,"predicted (MC)","l");
599     }
600    
601     if(jzbthreshold>0) {
602     leg2->AddEntry(SFN, (" SF JZB<-"+any2string(jzbthreshold)).c_str(),"l");
603     leg2->AddEntry(OFN, (" OF JZB<-"+any2string(jzbthreshold)).c_str(),"l");
604     } else {
605     leg2->AddEntry(SFN, " SF JZB<0","l");
606     leg2->AddEntry(OFN, " OF JZB<0","l");
607     }
608     leg2->AddEntry(OFP, (" OF JZB>"+any2string(jzbthreshold)).c_str(),"l");
609 buchmann 1.34 leg2->Draw("same");
610    
611     saveas.str("");
612 buchmann 1.95 saveas << "kin/Mll_After_Cut/" << prefix << "Cut_At" << jzbthreshold << "_nomc";
613     CompleteSave(ckin,saveas.str());
614    
615    
616     TH1F *diff = (TH1F*)RcorrJZBeemm->Clone("diff");
617     diff->Add(Bpred,-1);
618    
619 buchmann 1.96 TLegend *dleg = make_legend();
620 buchmann 1.97 if(MCorData==data) dleg->AddEntry(diff,"Obs-predicted","p");
621 buchmann 1.96 else dleg->AddEntry(diff,"True-predicted","p");
622 buchmann 1.97 dleg->AddEntry(BpredSysBand,"Sys. envelope","f");
623     dleg->SetY1(0.7);
624 buchmann 1.96
625    
626 buchmann 1.98 diff->GetYaxis()->SetTitle("true - predicted");
627     if(MCorData==data) diff->GetYaxis()->SetTitle("observed - predicted");
628 buchmann 1.95 diff->Draw("e1");
629 buchmann 1.96 BpredSysBand->Draw("e2");
630     diff->Draw("e1,same");
631     dleg->Draw();
632    
633 buchmann 1.95 if(MCorData==data) DrawPrelim();
634     else DrawMCPrelim();
635    
636     saveas.str("");
637     saveas << "kin/Mll_After_Cut/" << prefix << "Cut_At" << jzbthreshold << "_nomc_Diff";
638 buchmann 1.34 CompleteSave(ckin,saveas.str());
639 buchmann 1.95
640 buchmann 1.96 delete BpredSysBand;
641 buchmann 1.95 delete diff;
642    
643 buchmann 1.11 delete RcorrJZBeemm;
644     delete LcorrJZBeemm;
645     delete RcorrJZBem;
646     delete LcorrJZBem;
647 buchmann 1.95
648 buchmann 1.50 if(PlottingSetup::RestrictToMassPeak&&PlottingSetup::UseSidebandsForcJZB) {
649 buchmann 1.11 delete RcorrJZBSBeemm;
650     delete LcorrJZBSBeemm;
651     delete RcorrJZBSBem;
652     delete LcorrJZBSBem;
653     }
654     delete Bpred;
655     delete ckin;
656 buchmann 1.85 CleanLegends();
657 buchmann 1.11 }
658    
659 buchmann 1.1 void make_special_mll_plot(int nbins, float min, float max, bool logscale,string xlabel) {
660    
661     TCanvas *ckin = new TCanvas("ckin","Kinematic Plots (in the making)",600,600);
662    
663     TH1F *datahistoOSSF = allsamples.Draw("datahistoOSSF","mll",nbins,min,max, xlabel, "events",cutOSSF&&cutnJets&&basiccut,data,luminosity);
664     THStack mcstackOSSF = allsamples.DrawStack("mcstackOSSF","mll",nbins,min,max, xlabel, "events",cutOSSF&&cutnJets&&basiccut,mc,luminosity);
665     TH1F *datahistoOSOF = allsamples.Draw("datahistoOSOF","mll",nbins,min,max, xlabel, "events",cutOSOF&&cutnJets&&basiccut,data,luminosity);
666    
667     if(logscale) ckin->SetLogy(1);
668     datahistoOSSF->SetMarkerSize(DataMarkerSize);
669     datahistoOSSF->GetXaxis()->SetTitle(xlabel.c_str());
670     datahistoOSSF->GetXaxis()->CenterTitle();
671     datahistoOSSF->GetYaxis()->SetTitle("events");
672     datahistoOSSF->GetYaxis()->CenterTitle();
673     datahistoOSOF->SetMarkerSize(DataMarkerSize);
674     datahistoOSSF->SetMarkerSize(DataMarkerSize);
675     datahistoOSSF->Draw();
676    
677 buchmann 1.73 mcstackOSSF.Draw("histo,same");
678 buchmann 1.1 datahistoOSSF->Draw("same");
679    
680     datahistoOSOF->SetMarkerColor(TColor::GetColor("#FE642E"));
681     datahistoOSOF->SetLineColor(kRed);
682     datahistoOSOF->SetMarkerStyle(21);
683     datahistoOSOF->Draw("same");
684    
685     // Try to re-arrange legend...
686     TLegend *bgleg = allsamples.allbglegend("",datahistoOSSF);
687     TLegend *kinleg = make_legend();
688     kinleg->AddEntry(datahistoOSSF,"SF (data)","p");
689     kinleg->AddEntry(datahistoOSOF,"OF (data)","p");
690     TIter next(bgleg->GetListOfPrimitives());
691     TObject* obj;
692     // Copy the nice bkgd legend skipping the "data"
693 buchmann 1.16 while ( (obj = next()) )
694 buchmann 1.1 if ( strcmp(((TLegendEntry*)obj)->GetObject()->GetName(),"datahistoOSSF") )
695     kinleg->GetListOfPrimitives()->Add(obj);
696    
697     kinleg->Draw();
698     CompleteSave(ckin,"kin/mll_ossf_osof_distribution");
699    
700     delete datahistoOSOF;
701     delete datahistoOSSF;
702     delete ckin;
703 buchmann 1.85 CleanLegends();
704 buchmann 1.1 }
705    
706    
707     void draw_ratio_plot(TH1* hdata, THStack& hmc, float ymin=0.5, float ymax=1.5) {
708    
709     // Make a histogram from stack
710     TIter next(hmc.GetHists());
711     TObject* obj;
712     TH1* hratio = NULL;
713 buchmann 1.16 while ( (obj = next()) ) {
714 buchmann 1.1 if ( !hratio ) {
715     hratio = (TH1*)obj->Clone();
716     hratio->SetName("hratio");
717     } else hratio->Add( (TH1*)obj );
718     }
719     hratio->Divide(hdata);
720     hratio->SetMaximum(ymax);
721     hratio->SetMinimum(ymin);
722     hratio->SetMarkerStyle(2);
723     hratio->SetLineWidth(1);
724     hratio->GetYaxis()->SetLabelSize(0.08);
725     hratio->GetXaxis()->SetLabelSize(0.0);
726    
727     TPad* rpad = new TPad("rpad","",0.15,0.73,0.4,0.88);
728     rpad->SetTopMargin(0.0);
729     rpad->SetBottomMargin(0.0);
730     rpad->SetRightMargin(0.0);
731     rpad->Draw();
732     rpad->cd();
733     // hratio->GetXaxis()->SetNdivisions(0);
734     hratio->GetYaxis()->SetNdivisions(502,false);
735     hratio->Draw("e1x0");
736    
737     TF1* oneline = new TF1("","1.0",0,1000);
738     oneline->SetLineColor(kBlue);
739     oneline->SetLineStyle(1);
740     oneline->SetLineWidth(1);
741     oneline->Draw("same");
742     }
743 fronga 1.55
744 buchmann 1.51 float make_one_OFSF_plot(string variable, string addcut, string legendTitle, int nbins, float min, float max, float ymax, bool logscale,
745 buchmann 1.99 string xlabel, string filename, float legendPosition=0.55, int dataormc=data) {
746 pablom 1.46
747     TCut ibasiccut=basiccut;
748     bool draw_separation_lines=false;
749    
750     if(addcut != "") ibasiccut = ibasiccut && addcut.c_str();
751    
752     TCut cutSF;
753     TCut cutOF;
754    
755 buchmann 1.91 cout << "Going to use cutOSSF " << (const char*) cutOSSF << " and cutnJets " << (const char*) cutnJets << " and ibasiccut " << (const char*) ibasiccut << endl;
756 buchmann 1.51 cutOF = cutOSOF&&cutnJets&&ibasiccut;
757     cutSF = cutOSSF&&cutnJets&&ibasiccut;
758 buchmann 1.81
759     TCanvas *ofsf_can = new TCanvas("ofsf_can","ofsf_can");
760 pablom 1.46
761 fronga 1.54 TPad* rcan = new TPad("rcan","rcan",0,0,1,1);
762     rcan->SetLogy(logscale);
763     rcan->cd();
764    
765 fronga 1.58 std::cout << "OF/SF comparison: variable = " << variable << ", cut = " << cutSF.GetTitle() << std::endl;
766 buchmann 1.99 TH1F *datahistoOF,*datahistoSF;
767     if(dataormc==data || dataormc==mc) {
768     datahistoSF = allsamples.Draw("datahistoSF",variable,nbins,min,max, xlabel, "events",cutSF,dataormc,luminosity);
769     datahistoOF = allsamples.Draw("datahistoOF",variable,nbins,min,max, xlabel, "events",cutOF,dataormc,luminosity);
770     } else {
771     datahistoSF = allsamples.Draw("datahistoSF",variable,nbins,min,max, xlabel, "events",cutSF,mc,luminosity,allsamples.FindSample("/TTJets"));
772     datahistoOF = allsamples.Draw("datahistoOF",variable,nbins,min,max, xlabel, "events",cutOF,mc,luminosity,allsamples.FindSample("/TTJets"));
773     }
774 fronga 1.58 // string signal("LM3");
775     // TH1F* signalhisto = new TH1F("signalhisto",signal.c_str(),nbins,min,max);
776     // int idx = signalsamples.FindSample(signal)[0];
777     // (signalsamples.collection)[idx].events->Project("signalhisto",variable.c_str(),cutSF);
778     // signalhisto->Scale((signalsamples.collection)[idx].weight*luminosity);
779     // signalhisto->SetLineColor((signalsamples.collection)[idx].samplecolor);
780     // signalhisto->SetLineStyle(2);
781 pablom 1.46 datahistoSF->SetMarkerSize(DataMarkerSize);
782     datahistoOF->SetLineColor(kRed);
783 buchmann 1.97 datahistoOF->SetLineWidth(2);
784    
785     datahistoOF->Scale(1.02); // R(SF/OF)
786 pablom 1.46
787     if ( !logscale ) {
788     datahistoSF->SetMinimum(0); // Defaults
789     } else {
790     datahistoSF->SetMinimum(0.5);
791     }
792 buchmann 1.51 if (ymax<0) {
793     if ( logscale ) datahistoSF->SetMaximum(5.3*datahistoSF->GetMaximum());
794 buchmann 1.81 else datahistoSF->SetMaximum(0.8*datahistoSF->GetMaximum());
795 pablom 1.46 } else {
796 buchmann 1.51 datahistoSF->SetMaximum(ymax);
797 pablom 1.46 }
798    
799 buchmann 1.51 float ymaxSet = datahistoSF->GetMaximum();
800    
801 pablom 1.46 datahistoSF->GetXaxis()->SetTitle(xlabel.c_str());
802 buchmann 1.51 datahistoSF->GetYaxis()->SetTitle("Events");
803 pablom 1.46 datahistoSF->GetXaxis()->CenterTitle();
804     datahistoSF->GetYaxis()->CenterTitle();
805    
806 buchmann 1.97 TLegend *mleg = make_legend(legendTitle.c_str(),legendPosition,0.6,false,legendPosition+0.2);
807 buchmann 1.99 if(dataormc!=data && dataormc!=mc) mleg->SetHeader("t#bar{t} MC only");
808 buchmann 1.51 mleg->AddEntry(datahistoSF, "Same-flavor", "PL");
809     if (datahistoOF->Integral()>0) {
810 buchmann 1.97 mleg->AddEntry(datahistoOF, "OF based estimate", "L");
811 buchmann 1.51 } else {
812     mleg->AddEntry((TObject*)0, "", "");
813     }
814 fronga 1.58 //mleg->AddEntry(signalhisto, "LM3", "L");
815 pablom 1.46
816     datahistoSF->Draw("E1");
817 buchmann 1.97
818     TH1F *syshisto = (TH1F*)datahistoOF->Clone("syshisto");
819     TGraphAsymmErrors *datahistoOFboxes = produce_ratio_graph(datahistoOF);
820     for(int i=0;i<datahistoOFboxes->GetN();i++) {
821     float ex=datahistoOFboxes->GetErrorX(i);
822     float ey=datahistoOFboxes->GetErrorY(i);
823     double x,y;
824     datahistoOFboxes->GetPoint(i,x,y);
825     float pey = sqrt(pow(y*0.07,2)+pow(datahistoOF->GetBinError(i+1),2));
826     datahistoOFboxes->SetPointError(ex,ex,pey,pey);
827     syshisto->SetBinContent(i+1,0.07);
828     syshisto->SetBinError(i+1,0.07);
829     if(y<0.01) datahistoOF->SetBinContent(i+1,0);
830     }
831     mleg->AddEntry(datahistoOFboxes,"Total uncert.","F");
832     datahistoOFboxes->SetFillColor(TColor::GetColor("#2E9AFE"));
833    
834     if (datahistoOF->Integral()>0) datahistoOFboxes->Draw("20");
835 buchmann 1.51 if (datahistoOF->Integral()>0) datahistoOF->Draw("HIST,SAMES");
836 buchmann 1.97
837     datahistoSF->Draw("E1,same");
838    
839 fronga 1.58 //signalhisto->Draw("HIST,SAMES");
840 pablom 1.46 mleg->Draw();
841 buchmann 1.99 if(dataormc==data) DrawPrelim();
842     else DrawMCPrelim();
843 fronga 1.58 if (datahistoOF->Integral()>0) {
844 buchmann 1.97 // Save_With_Ratio( datahistoSF, datahistoOF, rcan, "SFOF/" + filename, false, false, "SF/OF" );
845     save_with_ratio_and_sys_band(0, datahistoSF, datahistoOF, rcan, "SFOF/" + filename, false, false, "SF/OF",syshisto);
846 fronga 1.58 } else {
847     CompleteSave(rcan, "SFOF/" + filename);
848     }
849 pablom 1.46
850     datahistoSF->Delete();
851     datahistoOF->Delete();
852 fronga 1.58 //signalhisto->Delete();
853 buchmann 1.97 delete datahistoOFboxes;
854     delete syshisto;
855 pablom 1.46 delete mleg;
856 buchmann 1.79 delete rcan;
857 buchmann 1.81 delete ofsf_can;
858 buchmann 1.51 return ymaxSet;
859 pablom 1.46 }
860    
861 buchmann 1.99 void make_one_OFSF_plot_DataMC(string variable, string addcut, string legendTitle, int nbins, float min, float max, float ymax, bool logscale,
862     string xlabel, string filename, float legendPosition=0.55, int dataormc=data) {
863    
864     TCut ibasiccut=basiccut;
865     bool draw_separation_lines=false;
866    
867     if(addcut != "") ibasiccut = ibasiccut && addcut.c_str();
868    
869     TCut ThisCut;
870    
871     cout << "Going to use cutnJets " << (const char*) cutnJets << " and ibasiccut " << (const char*) ibasiccut << endl;
872     ThisCut = cutnJets&&ibasiccut;
873    
874     TCanvas *ofsf_can = new TCanvas("ofsf_can","ofsf_can");
875    
876     TPad* rcan = new TPad("rcan","rcan",0,0,1,1);
877     rcan->SetLogy(logscale);
878     rcan->cd();
879    
880     std::cout << "OF/SF comparison: variable = " << variable << ", cut = " << ThisCut.GetTitle() << std::endl;
881     TH1F *datahisto = allsamples.Draw("datahisto", variable,nbins,min,max, xlabel, "events",ThisCut,data,luminosity);
882     TH1F *signalhisto = allsamples.Draw("signalhisto",variable,nbins,min,max, xlabel, "events",ThisCut,mc,luminosity,allsamples.FindSample("SUSY_ETH_Edge"));
883     signalhisto->SetLineColor(TColor::GetColor("#FF8000"));
884    
885     THStack *mchisto = new THStack(allsamples.DrawStack("mchisto", variable,nbins,min,max, xlabel, "events",ThisCut,mc,luminosity));
886    
887     datahisto->SetMarkerSize(DataMarkerSize);
888    
889     if ( !logscale ) {
890     datahisto->SetMinimum(0); // Defaults
891     } else {
892     datahisto->SetMinimum(0.5);
893     }
894     if (ymax<0) {
895     if ( logscale ) datahisto->SetMaximum(5.3*datahisto->GetMaximum());
896     else datahisto->SetMaximum(0.8*datahisto->GetMaximum());
897     } else {
898     datahisto->SetMaximum(ymax);
899     }
900    
901     float ymaxSet = datahisto->GetMaximum();
902    
903     datahisto->GetXaxis()->SetTitle(xlabel.c_str());
904     datahisto->GetYaxis()->SetTitle("Events");
905     datahisto->GetXaxis()->CenterTitle();
906     datahisto->GetYaxis()->CenterTitle();
907    
908     TH1F *CollapsedStack = CollapseStack(mchisto);
909     signalhisto->Scale((1.0/signalhisto->GetBinContent(signalhisto->FindBin(1.0))) * ( datahisto->GetBinContent(datahisto->FindBin(1.0)) - CollapsedStack->GetBinContent(CollapsedStack->FindBin(1.0))));
910     mchisto->Add(signalhisto);
911     CollapsedStack = CollapseStack(mchisto);
912    
913    
914     TLegend *mleg = allsamples.allbglegend(legendTitle.c_str(),datahisto, legendPosition,0.6);
915     mleg->AddEntry(signalhisto,"Sample signal","f");
916     datahisto->Draw("E1");
917     mchisto->Draw("HIST,SAMES");
918     datahisto->Draw("E1,same");
919     // signalhisto->Draw("histo,same");
920     mleg->Draw();
921    
922     DrawPrelim();
923    
924     Save_With_Ratio(datahisto, CollapsedStack, rcan, "SFOF/" + filename+"_dataMC", false, false);
925    
926     THStack *tempstack = new THStack();
927     tempstack->Add(datahisto);
928    
929     write_info(__FUNCTION__,"0 btag bin : ");
930     WriteYield(tempstack, 0.1, 0.5);
931     WriteYield(mchisto, 0.1, 0.5);
932     write_info(__FUNCTION__,">=1 btag bin : ");
933     WriteYield(tempstack, 1.0, 1000);
934     WriteYield(mchisto, 1.0, 1000);
935     datahisto->Delete();
936     mchisto->Delete();
937    
938     delete signalhisto;
939     delete tempstack;
940     delete CollapsedStack;
941     delete mleg;
942     delete rcan;
943     delete ofsf_can;
944     }
945    
946 fronga 1.55 // Compare data to data
947     float make_data_comparison_plot(string variable, TCut cut, int nbins, float min, float max, float ymax, bool logscale,
948     string xlabel, string filename, float legendPosition=0.55) {
949    
950     TCut ibasiccut=basiccut&&cut;
951    
952     TCanvas *ckin = new TCanvas("ckin","Kinematic Plots (in the making)",600,600);
953     TPad* rcan = new TPad("rcan","rcan",0,0,1,1);
954     rcan->SetLogy(logscale);
955     rcan->cd();
956    
957     std::cout << "Data comparison: variable = " << variable << ", cut = " << ibasiccut.GetTitle() << std::endl;
958    
959     TH1F *data1 = allsamples.Draw("data1",variable,nbins,min,max, xlabel, "events",ibasiccut,data,luminosity);
960     TH1F *data2 = comparesamples.Draw("data2",variable,nbins,min,max, xlabel, "events",ibasiccut,data,luminosity);
961 buchmann 1.71 data1->Scale(5.0/9.2);
962 fronga 1.55
963     data1->SetMarkerSize(DataMarkerSize);
964     data2->SetLineColor(kRed);
965    
966     if ( !logscale ) {
967     data1->SetMinimum(0); // Defaults
968     } else {
969     data1->SetMinimum(0.5);
970     }
971     if (ymax<0) {
972     if ( logscale ) data1->SetMaximum(5.3*data1->GetMaximum());
973     else data1->SetMaximum(1.5*data1->GetMaximum());
974     } else {
975     data1->SetMaximum(ymax);
976     }
977    
978     float ymaxSet = data1->GetMaximum();
979    
980     data1->GetXaxis()->SetTitle(xlabel.c_str());
981     data1->GetYaxis()->SetTitle("Events");
982     data1->GetXaxis()->CenterTitle();
983     data1->GetYaxis()->CenterTitle();
984    
985     TLegend *mleg = make_legend("",legendPosition,0.7,false,legendPosition+0.2);
986 buchmann 1.71 mleg->AddEntry(data1, "2012 data (scaled)", "PL");
987     mleg->AddEntry(data2, "2011 data", "L");
988 fronga 1.55
989     data1->Draw("E1");
990     data2->Draw("HIST,SAMES");
991     mleg->Draw();
992     DrawPrelim();
993 buchmann 1.79 Save_With_Ratio( data1, data2, rcan, "compareData/" + filename, false, false, "new/old" );
994 fronga 1.55
995     data1->Delete();
996     data2->Delete();
997     delete mleg;
998 buchmann 1.79 delete rcan;
999 fronga 1.55 delete ckin;
1000    
1001     }
1002    
1003 buchmann 1.99 void make_OFSF_plots(string variable, string addcut, int nbins, float min, float max, bool logscale,
1004     string xlabel, string filename, float tymax=-1, float legendPosition=0.55, int dataormc=data) {
1005 buchmann 1.51
1006 buchmann 1.99 string mllcuts[] = { "mll>20","mll>20&&mll<70", "mll>75&&mll<105", "mll>120" };
1007 buchmann 1.68 string mllcutname[] = { "m_{ll} > 20 GeV", "20 < m_{ll} < 70 GeV", "70 < m_{ll} < 110 GeV", "m_{ll} > 120 GeV" };
1008 buchmann 1.51 string plotname[] = {"_all","_low","_peak","_high"};
1009     float ymax;
1010 buchmann 1.98 if(tymax>0) ymax=tymax;
1011 fronga 1.54
1012     int start = 0;
1013 buchmann 1.99 write_info(__FUNCTION__,"Taking a short cut on line 916 or so");start=1;
1014 fronga 1.54 if ( !PlottingSetup::openBox ) start = 3;
1015    
1016 buchmann 1.99 for ( int i=start; i<2; ++i ) {
1017     if(i==2) continue;
1018 buchmann 1.51 if ( addcut != "" ) mllcuts[i] += "&&"+addcut;
1019 buchmann 1.98 if ( i==start && !(tymax>0) ) {
1020 buchmann 1.99 ymax = make_one_OFSF_plot(variable, mllcuts[i], mllcutname[i], nbins, min, max, -1, logscale, xlabel,
1021     filename+plotname[i], legendPosition,dataormc );
1022    
1023 buchmann 1.51 } else {
1024 fronga 1.58 make_one_OFSF_plot(variable, mllcuts[i], mllcutname[i], nbins, min, max, ymax, logscale, xlabel,
1025 buchmann 1.99 filename+plotname[i], legendPosition , dataormc);
1026 buchmann 1.51 }
1027 buchmann 1.99 if(dataormc==data) {
1028     make_one_OFSF_plot_DataMC(variable, mllcuts[i]+"&&id1==id2", mllcutname[i], nbins, min, max, ymax, logscale, xlabel,
1029     filename+plotname[i]+"_SF", legendPosition , dataormc);
1030     make_one_OFSF_plot_DataMC(variable, mllcuts[i]+"&&id1!=id2", mllcutname[i], nbins, min, max, ymax, logscale, xlabel,
1031     filename+plotname[i]+"_OF", legendPosition , dataormc);
1032     }
1033     /* make_one_OFSF_plot(variable, "id1==1&&id1==id2&&"+mllcuts[i], mllcutname[i], nbins, min, max, ymax, logscale, xlabel,
1034 fronga 1.55 filename+plotname[i]+"_mm", legendPosition );
1035 buchmann 1.51 make_one_OFSF_plot(variable, "id1==0&&id1==id2&&"+mllcuts[i], mllcutname[i], nbins, min, max, ymax, logscale, xlabel,
1036 buchmann 1.99 filename+plotname[i]+"_ee", legendPosition );*/
1037 buchmann 1.51 }
1038    
1039     }
1040 pablom 1.46
1041 buchmann 1.76 TCut ReplaceInCut(TCut cut, string replacethis, string withthis) {
1042     string scut=(string)(const char*)cut;
1043     string acut=ReplaceAll(scut,replacethis,withthis);
1044     return TCut(acut.c_str());
1045     }
1046    
1047 buchmann 1.77 void DoMCSystPlot(string datavariable, string mcvariable, int nbins, float min, float max, TCut addcut, bool dolog, string xlabel, string filename) {
1048 buchmann 1.76 TCut cut=addcut&&basiccut;
1049    
1050     TCanvas *ckin = new TCanvas("ckin","Kinematic Plots (in the making)",600,600);
1051     ckin->SetLogy(dolog);
1052     cout << "\r Creating " << filename << " : data (1/6)" << std::flush;
1053 buchmann 1.77 TH1F *datahisto = allsamples.Draw("datahisto",datavariable,nbins,min,max, xlabel, "events",cut,data,luminosity);
1054 buchmann 1.76 datahisto->SetMarkerSize(DataMarkerSize);
1055     if ( !dolog ) datahisto->SetMinimum(0); // Defaults
1056     else datahisto->SetMinimum(0.5);
1057     if (dolog) datahisto->SetMaximum(5.3*datahisto->GetMaximum());
1058     else datahisto->SetMaximum(1.3*datahisto->GetMaximum());
1059     cout << "\r Creating " << filename << " : MC central (2/6)" << std::flush;
1060 buchmann 1.77 THStack mcstack = allsamples.DrawStack("mcstack", mcvariable,nbins,min,max,xlabel,"events",cut,mc,luminosity);
1061 buchmann 1.76 TH1F *MCcentral = CollapseStack(mcstack);
1062    
1063     TCut bkpcut = cut;
1064     cut = ReplaceInCut(cut,"pfJetGoodNum40","pfJetGoodNum40p1sigma");
1065     cout << "\r Creating " << filename << " : MC JES up (3/6)" << std::flush;
1066 buchmann 1.77 TH1F *MCJESup = allsamples.Draw("MCJESup", mcvariable,nbins,min,max,xlabel,"events",cut,mc,luminosity);
1067 buchmann 1.76
1068     cut = ReplaceInCut(cut,"pfJetGoodNum40p1sigma","pfJetGoodNum40n1sigma");
1069     cout << "\r Creating " << filename << " : MC JES down (4/6)" << std::flush;
1070 buchmann 1.77 TH1F *MCJESdn = allsamples.Draw("MCJESdn", mcvariable,nbins,min,max,xlabel,"events",cut,mc,luminosity);
1071 buchmann 1.76
1072     cut=bkpcut;
1073     TCut bkpweight = cutWeight;
1074     cutWeight= ReplaceInCut(cutWeight,"weight","PUweightUP");
1075     cout << "\r Creating " << filename << " : MC PU up (5/6)" << std::flush;
1076 buchmann 1.77 TH1F *MCPUup = allsamples.Draw("MCPUup", mcvariable,nbins,min,max,xlabel,"events",cut,mc,luminosity);
1077 buchmann 1.76
1078     cutWeight= ReplaceInCut(cutWeight,"PUweightUP","PUweightDOWN");
1079     cout << "\r Creating " << filename << " : MC PU down (6/6)" << std::flush;
1080 buchmann 1.77 TH1F *MCPUdn = allsamples.Draw("MCPUdn", mcvariable,nbins,min,max,xlabel,"events",cut,mc,luminosity);
1081 buchmann 1.76 cutWeight=bkpweight;
1082     cout << "\r Creating " << filename << " : Processing systematics ..." << std::flush;
1083     TH1F *Systematic = (TH1F*)MCPUdn->Clone("Systematic");
1084     for(int i=1;i<=Systematic->GetNbinsX();i++) {
1085     float jesdn = abs(MCcentral->GetBinContent(i)-MCJESdn->GetBinContent(i));
1086     float jesup = abs(MCcentral->GetBinContent(i)-MCJESup->GetBinContent(i));
1087     float jes = jesdn>jesup?jesdn:jesup;
1088    
1089     float PUup = abs(MCcentral->GetBinContent(i)-MCPUup->GetBinContent(i));
1090     float PUdn = abs(MCcentral->GetBinContent(i)-MCPUdn->GetBinContent(i));
1091     float pu = PUdn>PUup?PUdn:PUup;
1092    
1093     float sys=sqrt(jes*jes+pu*pu);
1094     sys/=MCcentral->GetBinContent(i);
1095     if(MCcentral->GetBinContent(i)==0) sys=0;
1096     Systematic->SetBinContent(i,sys);
1097     }
1098    
1099     datahisto->Draw("e1");
1100     ckin->Update();
1101     mcstack.Draw("histo,same");
1102    
1103     datahisto->Draw("same,e1");
1104     TLegend *kinleg = allsamples.allbglegend();
1105     kinleg->Draw();
1106    
1107     TPad *kinpad = new TPad("kinpad","kinpad",0,0,1,1);
1108 buchmann 1.77 kinpad->SetLogy(dolog);
1109 buchmann 1.76 kinpad->cd();
1110     datahisto->Draw("e1");
1111     mcstack.Draw("histo,same");
1112     datahisto->Draw("same,e1");
1113     datahisto->Draw("same,axis");
1114    
1115     kinleg->Draw("same");
1116     DrawPrelim();
1117     string saveas="kin/"+filename;
1118    
1119     cout << "Passing filename to be saved : " << filename << " as " << saveas << endl;
1120 buchmann 1.90 save_with_ratio_and_sys_band(0.0, datahisto, CollapseStack(mcstack), kinpad->cd(), saveas, false, false, "data/mc",Systematic );
1121 buchmann 1.76
1122     ckin->cd();
1123     MCcentral->SetFillColor(kWhite);
1124     MCcentral->SetLineColor(kBlack);
1125 buchmann 1.77 MCcentral->SetLineWidth(2);
1126 buchmann 1.76 MCPUdn->SetLineColor(kRed);
1127     MCPUup->SetLineColor(kYellow);
1128     MCJESdn->SetLineColor(kBlue);
1129     MCJESup->SetLineColor(kGreen);
1130    
1131 buchmann 1.77 TLegend *legsmall = new TLegend(0.0,0.85,1.0,1.00);
1132     legsmall->SetNColumns(5);
1133 buchmann 1.76 legsmall->AddEntry(MCcentral,"central","L");
1134     legsmall->AddEntry(MCPUdn,"PU down","L");
1135     legsmall->AddEntry(MCPUup,"PU up","L");
1136     legsmall->AddEntry(MCJESdn,"JES down","L");
1137     legsmall->AddEntry(MCJESup,"JES up","L");
1138 buchmann 1.77 legsmall->SetFillColor(kWhite);
1139     legsmall->SetBorderSize(0);
1140 buchmann 1.76
1141 buchmann 1.77 datahisto->Draw("e1");
1142     MCcentral->Draw("histo,same");
1143 buchmann 1.76 MCPUdn->Draw("histo,same");
1144     MCPUup->Draw("histo,same");
1145     MCJESdn->Draw("histo,same");
1146     MCJESup->Draw("histo,same");
1147     datahisto->Draw("e1,same");
1148     legsmall->Draw();
1149 buchmann 1.77 CompleteSave(ckin,saveas+"___AllLines");
1150 buchmann 1.76
1151 buchmann 1.77 delete datahisto;
1152     delete MCcentral;
1153     delete MCPUdn;
1154     delete MCPUup;
1155     delete MCJESdn;
1156     delete MCJESup;
1157 buchmann 1.76 delete ckin;
1158     }
1159    
1160 buchmann 1.77 void DoMCSystPlot(string variable, int nbins, float min, float max, TCut addcut, bool dolog, string xlabel, string filename) {
1161     DoMCSystPlot(variable, variable, nbins, min, max, addcut, dolog, xlabel, filename);
1162     }
1163    
1164 buchmann 1.1 float lastrange_min=0;
1165     float lastrange_max=0;
1166    
1167     void make_kin_plot(string variable, string addcut, int nbins, float min, float max, bool logscale,
1168     string xlabel, string filename, bool isPF=true, bool plotratio=true, bool loadlastminmax=false ) {
1169     // TCut basiccut("(pfJetGoodNum>=2&&pfJetGoodID[0])&&(pfJetGoodNum>=2&&pfJetGoodID[1])&&(passed_triggers||!is_data)");
1170     TCut ibasiccut=basiccut;
1171     bool draw_separation_lines=false;
1172 buchmann 1.67 bool drawsignal = false;
1173 buchmann 1.1
1174     if(isPF) ibasiccut=basiccut&&"pfjzb[0]>-998";
1175    
1176     if(addcut != "") ibasiccut = ibasiccut && addcut.c_str();
1177    
1178     //Step 1: Adapt the variable (if we're dealing with PF we need to adapt the variable!)
1179     if(isPF) {
1180     if(variable=="mll") variable="pfmll[0]";
1181     if(variable=="jetpt[0]") variable="pfJetGoodPt[0]";
1182     if(variable=="jeteta[0]") variable="pfJetGoodEta[0]";
1183     if(variable=="pt") variable="pfpt[0]";
1184     if(variable=="pt1") variable="pfpt1[0]";
1185     if(variable=="pt2") variable="pfpt2[0]";
1186     if(variable=="eta1") variable="pfeta1[0]";
1187     if(variable=="jzb[1]") variable="pfjzb[0]";
1188     //if(variable=="pfJetGoodNum") variable="pfJetGoodNum"; // pointless.
1189     }
1190    
1191     //Step 2: Refine the cut
1192     TCut cut;
1193     cut=cutmass&&cutOSSF&&cutnJets&&ibasiccut;
1194 buchmann 1.66 if(filename=="nJets" || filename=="nJets_inclusive" || filename=="nJets_met100" || filename=="nJets_inclusive_met100") cut=cutmass&&cutOSSF&&ibasiccut;
1195     if(filename=="nJets_osof" || filename=="nJets_osof_inclusive" || filename=="nJets_osof_met100" || filename=="nJets_osof_inclusive_met100") cut=cutmass&&cutOSOF&&ibasiccut;
1196 buchmann 1.1 if(filename=="nJets_nocuts_except_mll_ossf") cut=cutmass&&cutOSSF;
1197 buchmann 1.66 if(filename=="mll"||filename=="mll_met100") {
1198 buchmann 1.1 cut=cutOSSF&&cutnJets&&ibasiccut;
1199     draw_separation_lines=true;
1200     }
1201 buchmann 1.66 if(filename=="mll_ee"||filename=="mll_ee_met100") cut=cutOSSF&&cutnJets&&ibasiccut&&"id1==0";
1202     if(filename=="mll_mm"||filename=="mll_mm_met100") cut=cutOSSF&&cutnJets&&ibasiccut&&"id1==1";
1203     if(filename=="mll_osof"||filename=="mll_osof_met100") {
1204 buchmann 1.1 cut=cutOSOF&&cutnJets&&ibasiccut;
1205     draw_separation_lines=true;
1206     }
1207 buchmann 1.34 if(Contains(filename,"aboveJZB")) cut=cutOSSF&&cutnJets&&ibasiccut;
1208     if(Contains(filename,"mll_ee_above")) cut=cut&&"id1==0";
1209     if(Contains(filename,"mll_mm_above")) cut=cut&&"id1==1";
1210 buchmann 1.11 if(Contains(filename,"mll_osof_aboveJZB")) cut=cutOSOF&&cutnJets&&ibasiccut;
1211 buchmann 1.66 if(filename=="mll_inclusive"||filename=="mll_inclusive_highrange") cut=cutOSSF;
1212     if(filename=="mll_inclusive_osof") cut=cutOSOF;
1213     if(filename=="mll_inclusive_ee") cut=cutOSSF&&"id1==0";
1214     if(filename=="mll_inclusive_mm") cut=cutOSSF&&"id1==1";
1215 buchmann 1.1 if(filename=="pfJetGoodEta_0") cut=cutOSSF&&cutmass&&ibasiccut&&cutnJets;
1216     if(filename=="pfJetGoodPt_0") cut=cutOSSF&&cutmass&&ibasiccut&&cutnJets;
1217 fronga 1.54 if(filename=="numVtx") cut=cutmass&&ibasiccut;
1218 buchmann 1.1
1219     TCanvas *ckin = new TCanvas("ckin","Kinematic Plots (in the making)",600,600);
1220     ckin->SetLogy(logscale);
1221     TH1F *datahisto = allsamples.Draw("datahisto",variable,nbins,min,max, xlabel, "events",cut,data,luminosity);
1222     datahisto->SetMarkerSize(DataMarkerSize);
1223 fronga 1.40 if ( !logscale ) datahisto->SetMinimum(0); // Defaults
1224     else datahisto->SetMinimum(0.5);
1225     // Custom max.
1226     if(variable=="TMath::Abs(pfJetDphiMet[0])") datahisto->SetMaximum(1.5*datahisto->GetMaximum());
1227 buchmann 1.1 if(variable=="pfJetGoodPt[0]") datahisto->SetMaximum(10*datahisto->GetMaximum());
1228     if(variable=="pt") datahisto->SetMaximum(10*datahisto->GetMaximum());
1229 buchmann 1.22 if(filename=="mll_inclusive"||filename=="mll_inclusive_mm"||filename=="mll_inclusive_ee") datahisto->SetMinimum(1);
1230 buchmann 1.1 if(filename=="mll_osof") datahisto->SetMaximum(10*datahisto->GetMaximum());
1231     if(filename=="mll_osof") datahisto->SetMinimum(9);
1232 fronga 1.40 if (logscale) datahisto->SetMaximum(5.3*datahisto->GetMaximum());
1233     else datahisto->SetMaximum(1.3*datahisto->GetMaximum());
1234    
1235 buchmann 1.66 cout << "******** Cut used : " << (const char*) cut << " for plot " << filename << endl;
1236 buchmann 1.1 if(loadlastminmax) {
1237     datahisto->SetMinimum(lastrange_min);
1238     datahisto->SetMaximum(lastrange_max);
1239     if(logscale) {
1240     datahisto->SetMinimum(pow(10,lastrange_min));
1241     datahisto->SetMaximum(pow(10,lastrange_max));
1242     }
1243     }
1244    
1245 fronga 1.40 // Draw signal by hand (for some reason I don't manage to use the sample class: it adds it to the stack!)
1246     string signal("LM3");
1247     TH1F* signalhisto = new TH1F("signalhisto",signal.c_str(),nbins,min,max);
1248     int idx = signalsamples.FindSample(signal)[0];
1249 buchmann 1.67 if(drawsignal) (signalsamples.collection)[idx].events->Project("signalhisto",variable.c_str(),cut);
1250     if(drawsignal) signalhisto->Scale((signalsamples.collection)[idx].weight*luminosity);
1251     if(drawsignal) signalhisto->SetLineColor(kOrange);
1252 fronga 1.40
1253     THStack mcstack = allsamples.DrawStack("mcstack", variable,nbins,min,max,xlabel,"events",cut,mc,luminosity);
1254     datahisto->Draw("e1");
1255     ckin->Update();
1256 buchmann 1.73 mcstack.Draw("histo,same");
1257 fronga 1.40
1258 buchmann 1.1 datahisto->Draw("same,e1");
1259     TLegend *kinleg = allsamples.allbglegend();
1260     kinleg->Draw();
1261     if(filename=="mll_osof") {
1262     kinleg->SetHeader("Opposite flavor");
1263     kinleg->SetX1(0.58);
1264     }
1265     if(filename=="mll") {
1266     kinleg->SetHeader("Same flavor");
1267     kinleg->SetX1(0.58);
1268     }
1269     TText* write_cut = write_cut_on_canvas(decipher_cut(cut,basicqualitycut));
1270     write_cut->Draw();
1271     TText* write_variable = write_text(0.99,0.01,variable);
1272     write_variable->SetTextAlign(31);
1273     write_variable->SetTextSize(0.02);
1274    
1275     TLine *lowerboundary;
1276     TLine *upperboundary;
1277    
1278     if(RestrictToMassPeak&&draw_separation_lines) {
1279     Color_t linecolor=kBlue;
1280     float linemin=pow(10,ckin->GetUymin());
1281     if(filename=="mll_osof") linemin=pow(10,lastrange_min);
1282     lowerboundary = new TLine(71,linemin,71,datahisto->GetMaximum());
1283     upperboundary = new TLine(111,linemin,111,datahisto->GetMaximum());
1284     lowerboundary->SetLineColor(linecolor);
1285     lowerboundary->SetLineStyle(2);
1286     upperboundary->SetLineColor(linecolor);
1287     upperboundary->SetLineStyle(2);
1288     }
1289    
1290     lastrange_min=ckin->GetUymin();
1291     lastrange_max=ckin->GetUymax();
1292    
1293    
1294     if ( plotratio ) {
1295     TPad *kinpad = new TPad("kinpad","kinpad",0,0,1,1);
1296     kinpad->cd();
1297     kinpad->SetLogy(logscale);
1298     datahisto->Draw("e1");
1299 buchmann 1.73 mcstack.Draw("histo,same");
1300 buchmann 1.67 if(drawsignal) signalhisto->Draw("same");
1301 buchmann 1.1 datahisto->Draw("same,e1");
1302     datahisto->Draw("same,axis");
1303     if(RestrictToMassPeak&&draw_separation_lines) {
1304     lowerboundary->Draw("same");
1305     upperboundary->Draw("same");
1306     }
1307    
1308 buchmann 1.67 if(drawsignal) kinleg->AddEntry("signalhisto",signal.c_str(),"l");
1309 buchmann 1.1 kinleg->Draw();
1310     write_cut->Draw();
1311     DrawPrelim();
1312     string saveas="kin/"+filename;
1313     if(isPF) saveas="kin/"+filename+"__PF";
1314 buchmann 1.79 Save_With_Ratio(datahisto,mcstack,kinpad->cd(),saveas);
1315 buchmann 1.1 // if(isPF) CompleteSave(with_ratio,"kin/"+filename+"__PF_withratio");
1316     // else CompleteSave(with_ratio,"kin/"+filename+"_withratio");
1317     // delete with_ratio;
1318     } else {
1319     if(isPF) CompleteSave(ckin,"kin/"+filename+"__PF");
1320     else CompleteSave(ckin,"kin/"+filename);
1321     }
1322     datahisto->Delete();
1323 buchmann 1.66 delete signalhisto;
1324 buchmann 1.1 delete ckin;
1325     }
1326    
1327 buchmann 1.72
1328     void make_plain_kin_plot(string variable, string addcut, int nbins, float min, float max, bool logscale,
1329     string xlabel, string filename, bool isPF=true, bool plotratio=true, bool loadlastminmax=false ) {
1330     TCut cut=TCut(addcut.c_str())&&basiccut;
1331    
1332     TCanvas *ckin = new TCanvas("ckin","Kinematic Plots (in the making)",600,600);
1333     ckin->SetLogy(logscale);
1334     TH1F *datahisto = allsamples.Draw("datahisto",variable,nbins,min,max, xlabel, "events",cut,data,luminosity);
1335     datahisto->SetMarkerSize(DataMarkerSize);
1336     if ( !logscale ) datahisto->SetMinimum(0); // Defaults
1337     else datahisto->SetMinimum(0.5);
1338     // Custom max.
1339     if (logscale) datahisto->SetMaximum(5.3*datahisto->GetMaximum());
1340     else datahisto->SetMaximum(1.3*datahisto->GetMaximum());
1341    
1342     cout << "******** Cut used : " << (const char*) cut << " for plot " << filename << endl;
1343     if(loadlastminmax) {
1344     datahisto->SetMinimum(lastrange_min);
1345     datahisto->SetMaximum(lastrange_max);
1346     if(logscale) {
1347     datahisto->SetMinimum(pow(10,lastrange_min));
1348     datahisto->SetMaximum(pow(10,lastrange_max));
1349     }
1350     }
1351    
1352     THStack mcstack = allsamples.DrawStack("mcstack", variable,nbins,min,max,xlabel,"events",cut,mc,luminosity);
1353     datahisto->Draw("e1");
1354     ckin->Update();
1355 buchmann 1.73 mcstack.Draw("histo,same");
1356 buchmann 1.72
1357     datahisto->Draw("same,e1");
1358     TLegend *kinleg = allsamples.allbglegend();
1359     kinleg->Draw();
1360    
1361     lastrange_min=ckin->GetUymin();
1362     lastrange_max=ckin->GetUymax();
1363    
1364     if ( plotratio ) {
1365     TPad *kinpad = new TPad("kinpad","kinpad",0,0,1,1);
1366     kinpad->cd();
1367     kinpad->SetLogy(logscale);
1368     datahisto->Draw("e1");
1369 buchmann 1.73 mcstack.Draw("histo,same");
1370 buchmann 1.72 datahisto->Draw("same,e1");
1371     datahisto->Draw("same,axis");
1372    
1373     kinleg->Draw();
1374     DrawPrelim();
1375     string saveas="kin/"+filename;
1376     if(isPF) saveas="kin/"+filename+"__PF";
1377 buchmann 1.79 Save_With_Ratio(datahisto,mcstack,kinpad->cd(),saveas);
1378 buchmann 1.72 } else {
1379     if(isPF) CompleteSave(ckin,"kin/"+filename+"__PF");
1380     else CompleteSave(ckin,"kin/"+filename);
1381     }
1382     datahisto->Delete();
1383     delete ckin;
1384     }
1385    
1386    
1387 fronga 1.40 void make_JES_plot(TCut cut, string name) {
1388 buchmann 1.1
1389     int nbins=10;
1390     float min=-0.5;
1391     float max = 9.5;
1392     bool logscale=true;
1393     string xlabel="nJets";
1394    
1395     TCanvas *ckin = new TCanvas("ckin","Kinematic Plots (in the making)",600,600);
1396     ckin->SetLogy(logscale);
1397 fronga 1.40 TH1F *datahisto = allsamples.Draw("datahisto","pfJetGoodNum40",nbins,min,max, xlabel, "events",cut,data,luminosity);
1398 buchmann 1.1 datahisto->SetMarkerSize(DataMarkerSize);
1399 fronga 1.40 THStack mcstack = allsamples.DrawStack("mcstack","pfJetGoodNum40",nbins,min,max, xlabel, "events",cut,mc,luminosity);
1400     TH1F *JESup = allsamples.Draw("JESup","pfJetGoodNum40p1sigma",nbins,min,max, xlabel, "events",cut,mc,luminosity);
1401     TH1F *JESdn = allsamples.Draw("JESdn","pfJetGoodNum40n1sigma",nbins,min,max, xlabel, "events",cut,mc,luminosity);
1402 buchmann 1.1
1403     datahisto->SetMinimum(1);
1404     datahisto->SetMaximum(5.3*datahisto->GetMaximum()); // in line with kinematic plots style
1405    
1406     float xs[nbins],ys[nbins],exs[nbins],eys[nbins];
1407     for(int i=1;i<JESup->GetNbinsX();i++) {
1408     float up=JESup->GetBinContent(i);
1409     float dn=JESdn->GetBinContent(i);
1410     xs[i]=JESup->GetBinCenter(i);
1411     ys[i]=0.5*(up+dn);
1412     exs[i]=0.5*JESup->GetBinWidth(i);
1413     eys[i]=0.5*TMath::Abs(up-dn);
1414     }
1415    
1416     TGraphAsymmErrors *JESunc = new TGraphAsymmErrors(nbins, xs,ys,exs,exs,eys,eys);
1417     JESunc->SetFillColor(TColor::GetColor("#00ADE1"));
1418     JESunc->SetFillStyle(3002);
1419     datahisto->Draw("e1");
1420 buchmann 1.73 mcstack.Draw("histo,same");
1421 buchmann 1.1 JESunc->Draw("2");
1422     datahisto->Draw("same,e1");
1423     TLegend *kinleg = allsamples.allbglegend();
1424     kinleg->AddEntry(JESunc,"JES uncertainty","f");
1425     kinleg->Draw();
1426 fronga 1.40 CompleteSave(ckin,"Systematics/JES"+name);
1427 buchmann 1.1 datahisto->Delete();
1428     delete ckin;
1429 buchmann 1.85 delete JESunc;
1430     delete JESup;
1431     delete JESdn;
1432     CleanLegends();
1433 buchmann 1.1 }
1434    
1435 buchmann 1.72 string Cut2Str(TCut cut) {
1436     return ((string)(const char*)cut);
1437     }
1438    
1439     void MakeElegantTwoThreeComparisons() {
1440    
1441 buchmann 1.73 TCut signal("met[4]>100&&met[4]<150&&mll>20"&&PlottingSetup::basicqualitycut);
1442 buchmann 1.72 TCut TwoJets("pfJetGoodNum40==2");
1443     TCut ThreeJets("pfJetGoodNum40>=3");
1444    
1445 buchmann 1.73 float min=20;
1446     float max=300;
1447     int nbins=int((max-min)/5.0);
1448     string xlabel="m_{ll} [GeV]";
1449 buchmann 1.72
1450     TCanvas *can2 = new TCanvas("can2","can2");
1451 buchmann 1.93 TH1F *TwoOF = allsamples.Draw("TwoOF","mll",nbins,min,max, xlabel, "events",cutOSOF&&signal&&TwoJets,mc,luminosity,allsamples.FindSample("/TT_"));
1452     TH1F *TwoSF = allsamples.Draw("TwoSF","mll",nbins,min,max, xlabel, "events",cutOSSF&&signal&&TwoJets,mc,luminosity,allsamples.FindSample("/TT_"));
1453     TH1F *ThreeOF = allsamples.Draw("ThreeOF","mll",nbins,min,max, xlabel, "events",cutOSOF&&signal&&ThreeJets,mc,luminosity,allsamples.FindSample("/TT_"));
1454     TH1F *ThreeSF = allsamples.Draw("ThreeSF","mll",nbins,min,max, xlabel, "events",cutOSSF&&signal&&ThreeJets,mc,luminosity,allsamples.FindSample("/TT_"));
1455 buchmann 1.72
1456     can2->cd(1);
1457    
1458     TwoSF->SetFillColor(kWhite);
1459     TwoOF->SetFillColor(kWhite);
1460     ThreeSF->SetFillColor(kWhite);
1461     ThreeOF->SetFillColor(kWhite);
1462    
1463     TPad *kin3 = new TPad("kin3","kin3",0,0,1,1);
1464     kin3->cd();
1465     TwoOF->Draw("histo");
1466     TwoSF->Draw("e1,same");
1467     TLegend *leg_SFOF_Two = make_legend();
1468     leg_SFOF_Two->SetHeader("t#bar{t} MC:");
1469     leg_SFOF_Two->AddEntry(TwoOF,"OF, nJets==2","l");
1470     leg_SFOF_Two->AddEntry(TwoSF,"SF, nJets==2","lp");
1471     leg_SFOF_Two->Draw();
1472 buchmann 1.79 Save_With_Ratio(TwoSF,TwoOF,kin3->cd(),"DoubleRatios/SFOF_Two");
1473 buchmann 1.72
1474     TPad *kin4 = new TPad("kin4","kin4",0,0,1,1);
1475     kin4->cd();
1476     ThreeOF->Draw("histo");
1477     ThreeSF->Draw("e1,same");
1478     TLegend *leg_SFOF_Three = make_legend();
1479     leg_SFOF_Three->SetHeader("t#bar{t} MC:");
1480     leg_SFOF_Three->AddEntry(TwoOF,"OF, nJet#geq3","l");
1481     leg_SFOF_Three->AddEntry(TwoSF,"SF, nJets#geq3","lp");
1482     leg_SFOF_Three->Draw();
1483 buchmann 1.79 Save_With_Ratio(ThreeSF,ThreeOF,kin4->cd(),"DoubleRatios/SFOF_Three");
1484 buchmann 1.72
1485 buchmann 1.73
1486     TwoSF->Scale(ThreeSF->Integral()/TwoSF->Integral());
1487     TPad *kin = new TPad("kin","kin",0,0,1,1);
1488     kin->cd();
1489     TwoSF->Draw("histo");
1490     ThreeSF->Draw("e1,same");
1491     TLegend *leg_SF_Two_Three = make_legend();
1492     leg_SF_Two_Three->SetHeader("t#bar{t} MC:");
1493     leg_SF_Two_Three->AddEntry(TwoSF,"#splitline{SF, nJets==2}{ (scaled)}","l");
1494     leg_SF_Two_Three->AddEntry(ThreeSF,"SF, nJets#geq3","lp");
1495     leg_SF_Two_Three->Draw();
1496 buchmann 1.79 Save_With_Ratio(TwoSF,ThreeSF,kin->cd(),"DoubleRatios/SF_Two_Three");
1497 buchmann 1.73
1498     TwoOF->Scale(ThreeOF->Integral()/TwoOF->Integral());
1499     TPad *kin2 = new TPad("kin2","kin2",0,0,1,1);
1500     kin2->cd();
1501     TwoOF->Draw("histo");
1502     ThreeOF->Draw("e1,same");
1503     TLegend *leg_OF_Two_Three = make_legend();
1504     leg_OF_Two_Three->SetHeader("t#bar{t} MC:");
1505     leg_OF_Two_Three->AddEntry(TwoSF,"#splitline{OF, nJets==2}{ (scaled)}","l");
1506     leg_OF_Two_Three->AddEntry(ThreeSF,"OF, nJets#geq3","lp");
1507     leg_OF_Two_Three->Draw();
1508 buchmann 1.79 Save_With_Ratio(TwoOF,ThreeOF,kin2->cd(),"DoubleRatios/OF_Two_Three");
1509 buchmann 1.73
1510 buchmann 1.72 }
1511    
1512 buchmann 1.78 void PresentRange(TH1F *Down, TH1F *Up, TH1F *central, TVirtualPad *pad, string title) {
1513     pad->cd();
1514     TGraphErrors *gr = new TGraphErrors(Down->GetNbinsX());
1515     for(int i=1;i<=Down->GetNbinsX();i++) {
1516     float average=0.5*(Down->GetBinContent(i)+Up->GetBinContent(i));
1517     float error=abs(Down->GetBinContent(i)-average);
1518     gr->SetPoint(i-1,Down->GetBinCenter(i),average);
1519     gr->SetPointError(i-1,Down->GetBinWidth(i)/2.0,error);
1520     }
1521     gr->SetFillColor(TColor::GetColor("#F79F81"));
1522     gr->GetYaxis()->SetRangeUser(0,2);
1523     gr->GetXaxis()->SetTitle(central->GetXaxis()->GetTitle());
1524     gr->GetYaxis()->SetTitle(central->GetYaxis()->GetTitle());
1525     gr->GetXaxis()->CenterTitle();
1526     gr->GetYaxis()->CenterTitle();
1527    
1528     gr->Draw("A2");
1529     central->Draw("e1,same");
1530     DrawMCPrelim();
1531     TText *rtitle = write_text(0.8,0.8,title);
1532     TLine *line = new TLine(Down->GetBinLowEdge(1),1.0,Down->GetBinLowEdge(Down->GetNbinsX())+Down->GetBinWidth(Down->GetNbinsX()),1.0);
1533     line->SetLineColor(kBlue);
1534     line->SetLineStyle(2);
1535     line->Draw("same");
1536     rtitle->Draw("same");
1537     }
1538    
1539     TH1F* ProduceTTbarRatio(TH1F *datahisto, TH1F *fullmc, TH1F *originalttbar, TH1F *httbar) {
1540     TH1F *basehisto = (TH1F*)fullmc->Clone("basehisto");
1541     basehisto->Add(originalttbar,-1);
1542     basehisto->Add(httbar);
1543    
1544     string sname=httbar->GetName();
1545     sname="R"+sname.substr(1,sname.length());
1546     TH1F *ratio = (TH1F*)datahisto->Clone(sname.c_str());
1547     ratio->Divide(basehisto);
1548     delete basehisto;
1549     return ratio;
1550     }
1551    
1552     void make_ttbar_comparison(string datavariable, string mcvariable, int nbins, float min, float max, TCut addcut, bool dolog, string xlabel, string filename) {
1553    
1554     TCut cut=addcut&&basiccut;
1555    
1556     TCanvas *ckin = new TCanvas("ckin","Kinematic Plots (in the making)",600,600);
1557     ckin->SetLogy(dolog);
1558 buchmann 1.86 cout << "\r Creating " << filename << " : data (1/7)" << std::flush;
1559 buchmann 1.78 TH1F *datahisto = allsamples.Draw("datahisto",datavariable,nbins,min,max, xlabel, "events",cut,data,luminosity);
1560     datahisto->SetMarkerSize(DataMarkerSize);
1561     if ( !dolog ) datahisto->SetMinimum(0); // Defaults
1562     else datahisto->SetMinimum(0.5);
1563     if (dolog) datahisto->SetMaximum(5.3*datahisto->GetMaximum());
1564     else datahisto->SetMaximum(1.3*datahisto->GetMaximum());
1565 buchmann 1.86 cout << "\r Creating " << filename << " : MC central (stack) (2/7)" << std::flush;
1566 buchmann 1.78 THStack mcstack = allsamples.DrawStack("mcstack", mcvariable,nbins,min,max,xlabel,"events",cut,mc,luminosity);
1567     TH1F *MCcentral = CollapseStack(mcstack);
1568    
1569 buchmann 1.86 cout << "\r Creating " << filename << " : MC central (histo) (3/7)" << std::flush;
1570 buchmann 1.93 TH1F *TCentral = allsamples.Draw ("TCentral", mcvariable,nbins,min,max,xlabel,"events",cut,mc,luminosity,allsamples.FindSample("/TT_"));
1571 buchmann 1.78 TH1F *RCentral = ProduceTTbarRatio(datahisto,MCcentral,TCentral,TCentral);
1572    
1573 buchmann 1.86 cout << "\r Creating " << filename << " : MC Matching up (4/7)" << std::flush;
1574 buchmann 1.78 TH1F *TMatchingUp = systsamples.Draw("TMatchingUp", mcvariable,nbins,min,max,xlabel,"events",cut,mc,luminosity,systsamples.FindSample("TTJets_matchingup"));
1575     TH1F *RMatchingUp = ProduceTTbarRatio(datahisto,MCcentral,TCentral,TMatchingUp);
1576    
1577 buchmann 1.86 cout << "\r Creating " << filename << " : MC Matching down (5/7)" << std::flush;
1578 buchmann 1.78 TH1F *TMatchingDown = systsamples.Draw("TMatchingDown",mcvariable,nbins,min,max,xlabel,"events",cut,mc,luminosity,systsamples.FindSample("TTJets_matchingdown"));
1579     TH1F *RMatchingDown = ProduceTTbarRatio(datahisto,MCcentral,TCentral,TMatchingDown);
1580    
1581 buchmann 1.86 cout << "\r Creating " << filename << " : MC Scale up (6/7)" << std::flush;
1582 buchmann 1.78 TH1F *TScaleUp = systsamples.Draw("TScaleUp", mcvariable,nbins,min,max,xlabel,"events",cut,mc,luminosity,systsamples.FindSample("TTJets_scaleup"));
1583     TH1F *RScaleUp = ProduceTTbarRatio(datahisto,MCcentral,TCentral,TScaleUp);
1584    
1585 buchmann 1.86 cout << "\r Creating " << filename << " : MC Scale down (7/7)" << std::flush;
1586 buchmann 1.78 TH1F *TScaleDown = systsamples.Draw("TScaleDown", mcvariable,nbins,min,max,xlabel,"events",cut,mc,luminosity,systsamples.FindSample("TTJets_scaledown"));
1587     TH1F *RScaleDown = ProduceTTbarRatio(datahisto,MCcentral,TCentral,TScaleDown);
1588    
1589     datahisto->Draw("e1");
1590     ckin->Update();
1591     mcstack.Draw("histo,same");
1592    
1593     datahisto->Draw("same,e1");
1594     TLegend *kinleg = allsamples.allbglegend();
1595     kinleg->Draw();
1596    
1597     TPad *kinpad = new TPad("kinpad","kinpad",0,0,1,1);
1598     kinpad->SetLogy(dolog);
1599     kinpad->cd();
1600     datahisto->Draw("e1");
1601     mcstack.Draw("histo,same");
1602     datahisto->Draw("same,e1");
1603     datahisto->Draw("same,axis");
1604    
1605     kinleg->Draw("same");
1606     DrawPrelim();
1607     string saveas="kin/"+filename;
1608    
1609     cout << "Passing filename to be saved : " << filename << " as " << saveas << endl;
1610 buchmann 1.79 Save_With_Ratio( datahisto, CollapseStack(mcstack), kinpad->cd(), saveas, false, false, "data/mc");
1611     delete kinpad;
1612 buchmann 1.78
1613     ckin->cd();
1614     TCentral->SetLineColor(kBlack);
1615    
1616     TMatchingUp->SetLineColor(TColor::GetColor("#2c17b1"));//blue
1617     TMatchingUp->SetLineStyle(2);//dashed
1618     TMatchingDown->SetLineColor(TColor::GetColor("#2c17b1"));
1619     TMatchingDown->SetLineStyle(3);//dotted
1620    
1621     TScaleUp->SetLineColor(TColor::GetColor("#FF8500"));//orange
1622     TScaleUp->SetLineStyle(2);//dashed
1623     TScaleDown->SetLineColor(TColor::GetColor("#FF8500"));
1624     TScaleDown->SetLineStyle(3);//dotted
1625    
1626     MCcentral->SetLineStyle(3);
1627     MCcentral->SetLineColor(kRed);
1628    
1629     TCentral->Draw("e1,same");
1630     TCentral->Draw("histo,same");
1631     TMatchingUp->Draw("histo,same");
1632     TMatchingDown->Draw("histo,same");
1633     TScaleUp->Draw("histo,same");
1634     TScaleDown->Draw("histo,same");
1635    
1636     TLegend *sleg = make_legend();
1637     sleg->AddEntry(TCentral,"Central","L");
1638     sleg->AddEntry(TMatchingUp,"matching up","L");
1639     sleg->AddEntry(TMatchingDown,"matching down","L");
1640     sleg->AddEntry(TScaleUp,"scale up","L");
1641     sleg->AddEntry(TScaleDown,"scale down","L");
1642     sleg->Draw();
1643    
1644     CompleteSave(ckin,saveas+"___AllLines");
1645     ckin->cd();
1646     ckin->SetLogy(0);
1647    
1648     RCentral->SetLineColor(kBlack);
1649    
1650     RMatchingUp->SetLineColor(TColor::GetColor("#2c17b1"));//blue
1651     RMatchingUp->SetLineStyle(2);//dashed
1652     RMatchingDown->SetLineColor(TColor::GetColor("#2c17b1"));
1653     RMatchingDown->SetLineStyle(3);//dotted
1654    
1655     RScaleUp->SetLineColor(TColor::GetColor("#FF8500"));//orange
1656     RScaleUp->SetLineStyle(2);//dashed
1657     RScaleDown->SetLineColor(TColor::GetColor("#FF8500"));
1658     RScaleDown->SetLineStyle(3);//dotted
1659    
1660     RCentral->GetYaxis()->SetRangeUser(0,2);
1661     RCentral->Draw("e1");
1662     RMatchingUp->Draw("histo,same");
1663     RMatchingDown->Draw("histo,same");
1664     RScaleUp->Draw("histo,same");
1665     RScaleDown->Draw("histo,same");
1666    
1667     CompleteSave(ckin,saveas+"___AllRatios");
1668    
1669 buchmann 1.85 TCanvas *multicanvas = new TCanvas("multicanvas","multicanvas",1400,700);
1670     multicanvas->Divide(2,1);
1671 buchmann 1.78 PresentRange(RMatchingUp,RMatchingDown,RCentral,multicanvas->cd(1),"Matching");
1672     PresentRange(RScaleUp,RScaleDown,RCentral,multicanvas->cd(2),"Scale");
1673     CompleteSave(multicanvas,saveas+"___RangeIllustration");
1674    
1675    
1676     delete datahisto;
1677     delete TCentral;
1678     delete TMatchingUp;
1679     delete TMatchingDown;
1680     delete TScaleUp;
1681     delete TScaleDown;
1682 buchmann 1.85 // delete Ttmass166;
1683     // delete Ttmass169;
1684     // delete Ttmass175;
1685     // delete Ttmass178;
1686 buchmann 1.78
1687     delete ckin;
1688    
1689     }
1690    
1691     void make_ttbar_comparison(string variable, int nbins, float min, float max, TCut addcut, bool dolog, string xlabel, string filename) {
1692     make_ttbar_comparison(variable, variable, nbins, min, max, addcut, dolog, xlabel, filename);
1693     }
1694 buchmann 1.72
1695 buchmann 1.79 void ProduceJanPlots() {
1696     TCanvas *c1 = new TCanvas("c1","c1");
1697     TH1F *metSF = allsamples.Draw("metSF","met[4]",30,100,400, "E_{T}^{miss} [GeV]", "events", cutmass&&cutOSSF&&cutnJets,data, luminosity);
1698     TH1F *metOF = allsamples.Draw("metOF","met[4]",30,100,400, "E_{T}^{miss} [GeV]", "events", cutmass&&cutOSOF&&cutnJets,data, luminosity);
1699    
1700     TPad* rcan = new TPad("rcan","rcan",0,0,1,1);
1701     rcan->cd();
1702    
1703     metOF->SetLineColor(kRed);
1704     metSF->Draw("e1");
1705     metOF->Draw("histo,same");
1706     metSF->Draw("e1,same");
1707    
1708     TLegend *leg = make_legend();
1709    
1710     leg->AddEntry(metSF,"Data SF","p");
1711     leg->AddEntry(metOF,"Data OF","l");
1712     leg->Draw();
1713    
1714     DrawPrelim();
1715    
1716     Save_With_Ratio(metSF,metOF,rcan,"JanPlots/ETHConfig",false,false,"SF/OF");
1717    
1718     delete rcan;
1719     delete metSF;
1720     delete metOF;
1721     delete c1;
1722     }
1723    
1724 buchmann 1.81 THStack MakeOneSystematicsPlot(TCut cut, string saveas, string variation, TH1F *hdata, string variable, int nbins, float bmin, float bmax, string label, TH1F* &thisto) {
1725 buchmann 1.79 THStack SystPlot = allsamples.DrawStack(variation,variable,nbins,bmin,bmax,label,"events",cut,mc,PlottingSetup::luminosity);
1726    
1727     //now need to process the plot (calculate the variation and set the member of thstack accordingly!)
1728     if(variation!="Central") {
1729     TH1F *varttbar;
1730     if(variation=="MatchingUp") varttbar = systsamples.Draw("varttbar",variable,nbins,bmin,bmax,label,"events",cut,mc,PlottingSetup::luminosity,systsamples.FindSample("TTJets_matchingup_TuneZ2s"));
1731     if(variation=="MatchingDown") varttbar = systsamples.Draw("varttbar",variable,nbins,bmin,bmax,label,"events",cut,mc,PlottingSetup::luminosity,systsamples.FindSample("TTJets_matchingdown"));
1732     if(variation=="ScaleUp") varttbar = systsamples.Draw("varttbar",variable,nbins,bmin,bmax,label,"events",cut,mc,PlottingSetup::luminosity,systsamples.FindSample("TTJets_scaleup"));
1733     if(variation=="ScaleDown") varttbar = systsamples.Draw("varttbar",variable,nbins,bmin,bmax,label,"events",cut,mc,PlottingSetup::luminosity,systsamples.FindSample("TTJets_scaledown"));
1734     assert(varttbar);
1735    
1736     TIter nextHisto(SystPlot.GetHists());
1737     TH1F* h;
1738     while ( h = (TH1F*)nextHisto() ) {
1739     if(Contains(h->GetName(),"t_bar_t")) {
1740     varttbar->Scale(h->Integral()/varttbar->Integral());
1741     for(int i=0;i<=h->GetNbinsX()+1;i++) {//note that we deliberatly consider the under/overflow bin as well!
1742     h->SetBinContent(i,varttbar->GetBinContent(i));
1743     h->SetBinError(i,varttbar->GetBinError(i));
1744     }
1745 buchmann 1.81 thisto=(TH1F*)varttbar->Clone(variation.c_str());
1746 buchmann 1.79 SystPlot.Modified();
1747     }
1748     }
1749     delete varttbar;
1750 buchmann 1.81 } else {
1751     TIter nextHisto(SystPlot.GetHists());
1752     TH1F* h;
1753     while ( h = (TH1F*)nextHisto() ) {
1754     if(Contains(h->GetName(),"t_bar_t")) thisto=(TH1F*)h->Clone(variation.c_str());
1755     }
1756 buchmann 1.79 }
1757 buchmann 1.81
1758 buchmann 1.79 TLegend *fullleg = allsamples.allbglegend();
1759     fullleg->SetHeader(variation.c_str());
1760     TPad *kinpad = new TPad("kinpad","kinpad",0,0,1,1);
1761     kinpad->SetLogy(1);
1762     kinpad->cd();
1763    
1764     hdata->Draw("e1");
1765     SystPlot.Draw("histo,same");
1766     hdata->Draw("e1,same");
1767     fullleg->Draw();
1768     DrawPrelim();
1769    
1770     Save_With_Ratio(hdata,SystPlot,kinpad,saveas+"_"+variation);
1771     CleanLegends();
1772    
1773     delete kinpad;
1774     return SystPlot;
1775     }
1776    
1777    
1778    
1779     void ProduceMCSystematicPlot(string variable, int nbins, float bmin, float bmax, string label, TCut thiscut, string saveas) {
1780     TCanvas *ca = new TCanvas("ca","ca");
1781     TH1F *hdata = allsamples.Draw("hdata",variable,nbins,bmin,bmax,label,"events",thiscut,data,luminosity);
1782    
1783 buchmann 1.81 TH1F *tScaleUp,*tScaleDown,*tMatchingUp,*tMatchingDown,*tCentral;
1784    
1785     THStack ScaleUp = MakeOneSystematicsPlot(thiscut,saveas,"ScaleUp",hdata,variable, nbins, bmin, bmax, label,tScaleUp);
1786     THStack ScaleDown = MakeOneSystematicsPlot(thiscut,saveas,"ScaleDown",hdata,variable, nbins, bmin, bmax, label,tScaleDown);
1787     THStack MatchingUp = MakeOneSystematicsPlot(thiscut,saveas,"MatchingUp",hdata,variable, nbins, bmin, bmax, label,tMatchingUp);
1788     THStack MatchingDown = MakeOneSystematicsPlot(thiscut,saveas,"MatchingDown",hdata,variable, nbins, bmin, bmax, label,tMatchingDown);
1789 buchmann 1.79
1790     TH1F *HScaleUp = CollapseStack(ScaleUp);
1791     TH1F *HScaleDown = CollapseStack(ScaleDown);
1792     TH1F *HMatchingUp = CollapseStack(MatchingUp);
1793     TH1F *HMatchingDown = CollapseStack(MatchingDown);
1794    
1795 buchmann 1.81 THStack Central = MakeOneSystematicsPlot(thiscut,saveas,"Central",hdata,variable, nbins, bmin, bmax, label,tCentral);
1796 buchmann 1.79 TH1F *HCentral = CollapseStack(Central);
1797    
1798     TH1F *Systematic = (TH1F*)hdata->Clone("Systematic");
1799     for(int i=1;i<=Systematic->GetNbinsX();i++) {
1800     float matchingup = abs(HMatchingUp->GetBinContent(i)-HCentral->GetBinContent(i));
1801     float matchingdown = abs(HMatchingDown->GetBinContent(i)-HCentral->GetBinContent(i));
1802     float scaleup = abs(HScaleUp->GetBinContent(i)-HCentral->GetBinContent(i));
1803     float scaledown = abs(HScaleDown->GetBinContent(i)-HCentral->GetBinContent(i));
1804    
1805     float matching = matchingup>matchingdown?matchingup:matchingdown;
1806     float scale = scaleup>scaledown?scaleup:scaledown;
1807    
1808     float sys=sqrt(matching*matching+scale*scale);
1809     sys/=HCentral->GetBinContent(i);
1810     if(HCentral->GetBinContent(i)==0) sys=0;
1811     Systematic->SetBinContent(i,sys);
1812     }
1813    
1814     TPad *kinpad = new TPad("kinpad","kinpad",0,0,1,1);
1815     kinpad->SetLogy(1);
1816     kinpad->cd();
1817 buchmann 1.81 if(variable=="genMET") {
1818     Central.Draw("histo");
1819     } else {
1820     hdata->Draw("e1");
1821     Central.Draw("histo,same");
1822     hdata->Draw("e1,same");
1823     }
1824    
1825 buchmann 1.79 DrawPrelim();
1826 buchmann 1.81
1827 buchmann 1.90 save_with_ratio_and_sys_band( 0.0, hdata, HCentral, kinpad->cd(), saveas, false, false, "data/mc",Systematic );
1828 buchmann 1.79
1829 buchmann 1.81 kinpad->cd();
1830     tCentral->SetFillColor(kWhite);
1831     tCentral->SetLineColor(kBlack);
1832     tScaleUp->SetLineColor(kRed);
1833     tScaleDown->SetLineColor(kRed);
1834     tMatchingUp->SetLineColor(kBlue);
1835     tMatchingDown->SetLineColor(kBlue);
1836     tScaleUp->SetLineStyle(2);
1837     tScaleDown->SetLineStyle(3);
1838     tMatchingUp->SetLineStyle(2);
1839     tMatchingDown->SetLineStyle(3);
1840    
1841     TLegend *leg2 = make_legend();
1842     leg2->AddEntry(hdata,"Data","p");
1843     leg2->AddEntry(tCentral,"Central (ttbar)","l");
1844     leg2->AddEntry(tScaleUp,"ScaleUp (ttbar)","l");
1845     leg2->AddEntry(tScaleDown,"ScaleDown (ttbar)","l");
1846     leg2->AddEntry(tMatchingUp,"MatchingUp (ttbar)","l");
1847     leg2->AddEntry(tMatchingDown,"MatchingDown (ttbar)","l");
1848     if(variable=="genMET") {
1849     Central.Draw("histo");
1850     }else {
1851     hdata->Draw("e1");
1852     Central.Draw("histo,same");
1853     hdata->Draw("e1,same");
1854     }
1855     tCentral->Draw("histo,same");
1856     tScaleUp->Draw("histo,same");
1857     tScaleDown->Draw("histo,same");
1858     tMatchingUp->Draw("histo,same");
1859     tMatchingDown->Draw("histo,same");
1860     leg2->Draw();
1861    
1862     CompleteSave(kinpad,saveas+"__TTbarComparison");
1863    
1864     gStyle->SetOptFit(0);
1865    
1866     kinpad->cd();
1867     kinpad->SetLogy(0);
1868     TH1F *MatchingRatio = (TH1F*)tMatchingUp->Clone("MatchingRatio");
1869     MatchingRatio->Divide(tMatchingDown);
1870     TLine *lone = new TLine(tScaleUp->GetBinLowEdge(1),1,tScaleUp->GetBinLowEdge(tScaleUp->GetNbinsX())+tScaleUp->GetBinWidth(tScaleUp->GetNbinsX()),1);
1871     lone->SetLineColor(TColor::GetColor("#01DF01"));
1872     lone->SetLineStyle(2);
1873     TH1F *ScaleRatio = (TH1F*)tScaleUp->Clone("ScaleRatio");
1874     ScaleRatio->Divide(tScaleDown);
1875     MatchingRatio->GetYaxis()->SetRangeUser(0,3);
1876     MatchingRatio->Draw("e1");
1877     TF1 *QP1 = new TF1("QP1","[0]+[1]*x",50,200);//simple linear function ranging from 50 to 200
1878     MatchingRatio->Fit("QP1","R");
1879     lone->Draw();
1880     stringstream summary;
1881     summary << " #splitline{Fit result for f(x) = a+bx :}{#splitline{a=" << DigitsAfterComma(QP1->GetParameter(0),4) << " +/- " << DigitsAfterComma(QP1->GetParError(0),4) << "}{b=" << DigitsAfterComma(QP1->GetParameter(1),4);
1882     summary << " +/- " << DigitsAfterComma(QP1->GetParError(1),4) << "}}";
1883     TText *infobox = write_title(summary.str());
1884     infobox->SetX(0.75);
1885     infobox->SetTextSize(0.03);
1886     infobox->SetY(0.75);
1887     infobox->Draw();
1888     CompleteSave(kinpad,saveas+"__TTbarComparison_MatchingUpDividedMatchingDown");
1889     kinpad->cd();
1890     ScaleRatio->GetYaxis()->SetRangeUser(0,3);
1891     ScaleRatio->Draw("e1");
1892     ScaleRatio->Fit("QP1","R");
1893     summary.str("");
1894     summary << " #splitline{Fit result for f(x) = a+bx :}{#splitline{a=" << DigitsAfterComma(QP1->GetParameter(0),4) << " +/- " << DigitsAfterComma(QP1->GetParError(0),4) << "}{b=" << DigitsAfterComma(QP1->GetParameter(1),4);
1895     summary << " +/- " << DigitsAfterComma(QP1->GetParError(1),4) << "}}";
1896     TText *infobox2 = write_title(summary.str());
1897     infobox2->SetX(0.75);
1898     infobox2->SetTextSize(0.03);
1899     infobox2->SetY(0.75);
1900     infobox2->Draw();
1901    
1902     lone->Draw();
1903     CompleteSave(kinpad,saveas+"__TTbarComparison_ScaleUpDividedScaleDown");
1904    
1905    
1906     delete QP1;
1907     delete infobox;
1908     delete infobox2;
1909     delete MatchingRatio;
1910     delete ScaleRatio;
1911     DeleteStack(ScaleUp);
1912     DeleteStack(ScaleDown);
1913     DeleteStack(MatchingUp);
1914     DeleteStack(MatchingDown);
1915     delete leg2;
1916 buchmann 1.79 CleanLegends();
1917     DeleteStack(Central);
1918     delete Systematic;
1919     delete HScaleUp;
1920     delete HScaleDown;
1921     delete HMatchingUp;
1922     delete HMatchingDown;
1923     delete hdata;
1924     delete HCentral;
1925     delete ca;
1926     }
1927    
1928 buchmann 1.86 TH1F* ImposeBinning(TH1F *binninghisto, TH1F* histo) {
1929     float val=0,err=0;
1930     vector<float> bins;
1931     vector<float> vals;
1932     vector<float> errs;
1933    
1934     bins.push_back(binninghisto->GetBinLowEdge(1));
1935     int iBin=1;
1936    
1937     for(unsigned int i=1;i<histo->GetNbinsX();i++) {//going to second last one on purpose!
1938     if((histo->GetBinLowEdge(i)+0.00001>=binninghisto->GetBinLowEdge(iBin)+binninghisto->GetBinWidth(iBin))) {
1939     bins.push_back(histo->GetBinLowEdge(i));
1940     vals.push_back(val);val=0;
1941     errs.push_back(err);err=0;
1942     iBin++;
1943     }
1944     val+=histo->GetBinContent(i);
1945     err=sqrt(err*err+histo->GetBinError(i)*histo->GetBinError(i));
1946     }
1947     bins.push_back(histo->GetBinLowEdge(histo->GetNbinsX())+histo->GetBinWidth(histo->GetNbinsX()));
1948     vals.push_back(val);val=0;
1949     errs.push_back(err);err=0;
1950    
1951     TH1F *h = new TH1F(("r"+(string)histo->GetName()).c_str(),("r"+(string)histo->GetName()).c_str(),bins.size()-1,&bins[0]);
1952     for(unsigned int i=0;i<vals.size();i++) {
1953     h->SetBinContent(i+1,vals[i]);
1954     h->SetBinError(i+1,errs[i]);
1955     }
1956    
1957     h->GetXaxis()->SetTitle(histo->GetXaxis()->GetTitle());
1958     h->GetYaxis()->SetTitle(histo->GetYaxis()->GetTitle());
1959    
1960     h->GetXaxis()->CenterTitle();
1961     h->GetYaxis()->CenterTitle();
1962    
1963     return h;
1964     }
1965    
1966    
1967     TH1F* ReBinOptimizingStats(int nbins, TH1F *histo) {
1968     float statsperbin = (1/(float)nbins) * histo->Integral();
1969     float val=0,err=0;
1970     vector<float> bins;
1971     vector<float> vals;
1972     vector<float> errs;
1973    
1974     bins.push_back(histo->GetBinLowEdge(1));
1975     for(unsigned int i=1;i<=histo->GetNbinsX();i++) {
1976     val+=histo->GetBinContent(i);
1977     err=sqrt(err*err+histo->GetBinError(i)*histo->GetBinError(i));
1978     if( val/statsperbin > 0.85) {
1979     if(bins.size()<nbins) {
1980     bins.push_back(histo->GetBinLowEdge(i)+histo->GetBinWidth(i));
1981     vals.push_back(val);val=0;
1982     errs.push_back(err);err=0;
1983     }
1984     }
1985     if(i==histo->GetNbinsX()) {
1986     bins.push_back(histo->GetBinLowEdge(i)+histo->GetBinWidth(i));
1987     vals.push_back(val);val=0;
1988     errs.push_back(err);err=0;
1989     }
1990     }
1991     TH1F *h = new TH1F(("r"+(string)histo->GetName()).c_str(),("r"+(string)histo->GetName()).c_str(),bins.size()-1,&bins[0]);
1992    
1993     h->GetXaxis()->SetTitle(histo->GetXaxis()->GetTitle());
1994     h->GetYaxis()->SetTitle(histo->GetYaxis()->GetTitle());
1995    
1996     h->GetXaxis()->CenterTitle();
1997     h->GetYaxis()->CenterTitle();
1998    
1999     for(unsigned int i=0;i<vals.size();i++) {
2000     h->SetBinContent(i+1,vals[i]);
2001     h->SetBinError(i+1,errs[i]);
2002     }
2003    
2004     return h;
2005     }
2006    
2007    
2008    
2009     void ShowBinning(TH1F *histo) {
2010     cout << "Showing binning for " << histo->GetName() << " (\" " << histo->GetTitle() << "\")" << endl;
2011     for(unsigned int i=1;i<=histo->GetNbinsX();i++) cout << " Bin " << i << " : " << histo->GetBinLowEdge(i) << " , " << histo->GetBinLowEdge(i) + histo->GetBinWidth(i) << " : " << histo->GetBinContent(i) << endl;
2012     }
2013    
2014 buchmann 1.81 void QuickProduceMCSystematicPlot(string variable, int nbins, float bmin, float bmax, string label, TCut thiscut, string saveas) {
2015     TCanvas *ca = new TCanvas("ca","ca");
2016     TH1F *tScaleUp = systsamples.Draw("tScaleUp",variable,nbins,bmin,bmax,label,"events",thiscut,mc,luminosity,systsamples.FindSample("scaleup"));
2017     TH1F *tScaleDown = systsamples.Draw("tScaleDown",variable,nbins,bmin,bmax,label,"events",thiscut,mc,luminosity,systsamples.FindSample("scaledown"));
2018     TH1F *tMatchingUp = systsamples.Draw("tMatchingUp",variable,nbins,bmin,bmax,label,"events",thiscut,mc,luminosity,systsamples.FindSample("matchingup"));
2019     TH1F *tMatchingDown = systsamples.Draw("tMatchingDown",variable,nbins,bmin,bmax,label,"events",thiscut,mc,luminosity,systsamples.FindSample("matchingdown"));
2020     TH1F *tCentral = systsamples.Draw("tCentral",variable,nbins,bmin,bmax,label,"events",thiscut,mc,luminosity,systsamples.FindSample("TTJets_MassiveBinDECAY_TuneZ2sta"));
2021    
2022     tScaleUp->Scale(1.0/tScaleUp->Integral());
2023     tScaleDown->Scale(1.0/tScaleDown->Integral());
2024     tMatchingDown->Scale(1.0/tMatchingDown->Integral());
2025     tMatchingUp->Scale(1.0/tMatchingUp->Integral());
2026 buchmann 1.86 tCentral->Scale(1.0/tCentral->Integral());
2027    
2028     cout << "At this point we want to rebin the scale/matching histograms so we get decent stats!" << endl;
2029    
2030    
2031     TH1F *rtScaleUp = ReBinOptimizingStats(7,tScaleUp); // using the scale up sample to get the binning (shouldn't use the central one for obvious reasons)
2032     TH1F *rtScaleDown = ImposeBinning(rtScaleUp,tScaleDown);
2033     TH1F *rtMatchingDown = ImposeBinning(rtScaleUp,tMatchingDown);
2034     TH1F *rtMatchingUp = ImposeBinning(rtScaleUp,tMatchingUp);
2035     TH1F *rtCentral = ImposeBinning(rtScaleUp,tCentral);
2036    
2037     float min=rtScaleUp->GetMinimum();
2038     float max=rtScaleUp->GetMaximum();
2039    
2040     if(rtScaleDown->GetMinimum()<min) min=rtScaleDown->GetMinimum();
2041     if(rtMatchingDown->GetMinimum()<min) min=rtMatchingDown->GetMinimum();
2042     if(rtMatchingDown->GetMinimum()<min) min=rtMatchingDown->GetMinimum();
2043     if(rtMatchingUp->GetMinimum()<min) min=rtMatchingUp->GetMinimum();
2044     if(rtCentral->GetMinimum()<min) min=rtCentral->GetMinimum();
2045    
2046     if(rtScaleDown->GetMaximum()<min) max=rtScaleDown->GetMaximum();
2047     if(rtMatchingDown->GetMaximum()<min) max=rtMatchingDown->GetMaximum();
2048     if(rtMatchingDown->GetMaximum()<min) max=rtMatchingDown->GetMaximum();
2049     if(rtMatchingUp->GetMaximum()<min) max=rtMatchingUp->GetMaximum();
2050     if(rtCentral->GetMaximum()<min) max=rtCentral->GetMaximum();
2051    
2052     rtCentral->SetMaximum(1.2*max);
2053     rtCentral->SetMinimum(0.8*min);
2054    
2055     /* tScaleUp->Rebin(40);
2056     tScaleDown->Rebin(40);
2057     tMatchingDown->Rebin(40);
2058     tMatchingUp->Rebin(40);
2059     tCentral->Rebin(40);*/
2060 buchmann 1.81
2061     TPad *kinpad = new TPad("kinpad","kinpad",0,0,1,1);
2062     kinpad->SetLogy(1);
2063     kinpad->cd();
2064     tCentral->SetFillColor(kWhite);
2065     tCentral->SetLineColor(kBlack);
2066     tScaleUp->SetLineColor(kRed);
2067     tScaleDown->SetLineColor(kRed);
2068     tMatchingUp->SetLineColor(kBlue);
2069     tMatchingDown->SetLineColor(kBlue);
2070     tScaleUp->SetLineStyle(2);
2071     tScaleDown->SetLineStyle(3);
2072     tMatchingUp->SetLineStyle(2);
2073     tMatchingDown->SetLineStyle(3);
2074    
2075 buchmann 1.86 rtScaleDown->SetLineColor(kRed);
2076     rtMatchingUp->SetLineColor(kBlue);
2077     rtMatchingDown->SetLineColor(kBlue);
2078     rtScaleUp->SetLineStyle(2);
2079     rtScaleDown->SetLineStyle(3);
2080     rtMatchingUp->SetLineStyle(2);
2081     rtMatchingDown->SetLineStyle(3);
2082    
2083 buchmann 1.81 TLegend *leg2 = make_legend();
2084     leg2->AddEntry(tCentral,"Central (ttbar)","l");
2085     leg2->AddEntry(tScaleUp,"ScaleUp (ttbar)","l");
2086     leg2->AddEntry(tScaleDown,"ScaleDown (ttbar)","l");
2087     leg2->AddEntry(tMatchingUp,"MatchingUp (ttbar)","l");
2088     leg2->AddEntry(tMatchingDown,"MatchingDown (ttbar)","l");
2089    
2090     tCentral->Draw("histo");
2091     tScaleUp->Draw("histo,same");
2092     tScaleDown->Draw("histo,same");
2093     tMatchingUp->Draw("histo,same");
2094     tMatchingDown->Draw("histo,same");
2095     leg2->Draw();
2096 buchmann 1.86 DrawMCPrelim();
2097     CompleteSave(kinpad,saveas+"__TTbarComparison");
2098     kinpad->cd();
2099     kinpad->SetLogy(0);
2100     rtCentral->Draw("histo");
2101     rtScaleUp->Draw("histo,same");
2102     rtScaleDown->Draw("histo,same");
2103     rtMatchingUp->Draw("histo,same");
2104     rtMatchingDown->Draw("histo,same");
2105     leg2->Draw();
2106     DrawMCPrelim();
2107     CompleteSave(kinpad,saveas+"__TTbarComparison__REBINNED");
2108 buchmann 1.81
2109    
2110     gStyle->SetOptFit(0);
2111 buchmann 1.86
2112 buchmann 1.81 kinpad->cd();
2113     kinpad->SetLogy(0);
2114 buchmann 1.86 TH1F *MatchingRatio = (TH1F*)rtMatchingUp->Clone("MatchingRatio");
2115     MatchingRatio->Divide(rtMatchingDown);
2116 buchmann 1.81 TLine *lone = new TLine(tScaleUp->GetBinLowEdge(1),1,tScaleUp->GetBinLowEdge(tScaleUp->GetNbinsX())+tScaleUp->GetBinWidth(tScaleUp->GetNbinsX()),1);
2117     lone->SetLineColor(TColor::GetColor("#01DF01"));
2118     lone->SetLineStyle(2);
2119 buchmann 1.86 TH1F *ScaleRatio = (TH1F*)rtScaleUp->Clone("ScaleRatio");
2120     ScaleRatio->Divide(rtScaleDown);
2121 buchmann 1.81 MatchingRatio->GetYaxis()->SetRangeUser(0,3);
2122     MatchingRatio->Draw("e1");
2123     TF1 *QP1 = new TF1("QP1","[0]+[1]*x",50,200);//simple linear function ranging from 50 to 200
2124 buchmann 1.86 if(variable=="genMET" || variable=="met[4]" || variable=="met[1]") MatchingRatio->Fit("QP1","RQ");
2125 buchmann 1.81 lone->Draw();
2126     stringstream summary;
2127     summary << " #splitline{Fit result for f(x) = a+bx :}{#splitline{a=" << DigitsAfterComma(QP1->GetParameter(0),4) << " +/- " << DigitsAfterComma(QP1->GetParError(0),4) << "}{b=" << DigitsAfterComma(QP1->GetParameter(1),4);
2128     summary << " +/- " << DigitsAfterComma(QP1->GetParError(1),4) << "}}";
2129     TText *infobox = write_title(summary.str());
2130     infobox->SetX(0.75);
2131     infobox->SetTextSize(0.03);
2132     infobox->SetY(0.75);
2133 buchmann 1.86 if(variable=="genMET" || variable=="met[4]" || variable=="met[1]") infobox->Draw();
2134     DrawMCPrelim();
2135 buchmann 1.81 CompleteSave(kinpad,saveas+"__TTbarComparison_MatchingUpDividedMatchingDown");
2136     kinpad->cd();
2137     ScaleRatio->GetYaxis()->SetRangeUser(0,3);
2138     ScaleRatio->Draw("e1");
2139 buchmann 1.86 if(variable=="genMET" || variable=="met[4]" || variable=="met[1]") ScaleRatio->Fit("QP1","RQ");
2140 buchmann 1.81 summary.str("");
2141     summary << " #splitline{Fit result for f(x) = a+bx :}{#splitline{a=" << DigitsAfterComma(QP1->GetParameter(0),4) << " +/- " << DigitsAfterComma(QP1->GetParError(0),4) << "}{b=" << DigitsAfterComma(QP1->GetParameter(1),4);
2142     summary << " +/- " << DigitsAfterComma(QP1->GetParError(1),4) << "}}";
2143     TText *infobox2 = write_title(summary.str());
2144     infobox2->SetX(0.75);
2145     infobox2->SetTextSize(0.03);
2146     infobox2->SetY(0.75);
2147 buchmann 1.86 if(variable=="genMET" || variable=="met[4]" || variable=="met[1]") infobox2->Draw();
2148 buchmann 1.81
2149     lone->Draw();
2150 buchmann 1.86 DrawMCPrelim();
2151 buchmann 1.81 CompleteSave(kinpad,saveas+"__TTbarComparison_ScaleUpDividedScaleDown");
2152    
2153 buchmann 1.86 kinpad->cd();
2154     TH1F *SysMatching = (TH1F*)rtMatchingDown->Clone("SysMatching");
2155     TH1F *SysScale = (TH1F*)rtScaleDown->Clone("SysMatching");
2156     TH1F *SysHisto = (TH1F*)rtScaleDown->Clone("SysHisto");
2157    
2158     for(int i=1;i<=SysScale->GetNbinsX();i++) {
2159     float matching, scale;
2160     bool AssumeFactor=false;
2161     if(AssumeFactor) {
2162     // assume that an upward/downward variation means a change by a constant factor, i.e. f(up) = alpha * f(central)
2163     matching=0.;
2164     scale=0.;
2165     } else {
2166     // assume that the central value is exactly between up & down, i.e. central = (up-down)/2
2167     matching = fabs( ( rtMatchingUp->GetBinContent(i) - rtMatchingDown->GetBinContent(i)) / (rtMatchingUp->GetBinContent(i) + rtMatchingDown->GetBinContent(i)) );
2168     scale = fabs( ( rtScaleUp->GetBinContent(i) - rtScaleDown->GetBinContent(i)) / (rtScaleUp->GetBinContent(i) + rtScaleDown->GetBinContent(i)) );
2169     }
2170    
2171     SysMatching->SetBinContent(i,1+matching);
2172     SysScale->SetBinContent(i,1+scale);
2173     SysHisto->SetBinContent(i,sqrt(matching*matching+scale*scale)+1);
2174     }
2175    
2176     SysHisto->SetLineColor(kGreen);
2177    
2178     SysMatching->SetMaximum(3.0);
2179     SysMatching->SetMinimum(0.0);
2180     SysMatching->Draw("histo");
2181     SysScale->Draw("histo,same");
2182     SysHisto->Draw("histo,same");
2183     CompleteSave(kinpad,saveas+"__TTbarComparison_DerivedSystematic");
2184    
2185     delete SysMatching;
2186     delete SysScale;
2187    
2188     if(!Contains(variable,"gen")) {
2189     TH1F *hdata = allsamples.Draw("hdata", variable,nbins,bmin,bmax,label,"events",thiscut,data,luminosity);
2190     THStack smc = allsamples.DrawStack("smc",variable,nbins,bmin,bmax,label,"events",thiscut,mc,luminosity);
2191    
2192     TH1F *Systematic = (TH1F*)hdata->Clone("Systematic");
2193    
2194     for(int i=1;i<=Systematic->GetNbinsX();i++) {
2195     int iBin=SysHisto->FindBin(Systematic->GetBinCenter(i));
2196     if(iBin>SysHisto->GetNbinsX()) --iBin; // if we're over the end of the histo, use the last bin
2197     float sys = SysHisto->GetBinContent(iBin)-1;
2198     Systematic->SetBinContent(i,sys);
2199     }
2200    
2201     kinpad->cd();
2202     TLegend *leg = allsamples.allbglegend();
2203     hdata->Draw();
2204     smc.Draw("histo,same");
2205     hdata->Draw("same");
2206     leg->Draw();
2207     DrawPrelim();
2208 buchmann 1.90 save_with_ratio_and_sys_band( 0.0, hdata, CollapseStack(smc), kinpad->cd(), saveas+"__DataVsMC", false, false, "data/mc",Systematic );
2209 buchmann 1.86
2210     delete Systematic;
2211     delete hdata;
2212     }
2213    
2214    
2215     delete SysHisto;
2216 buchmann 1.81 delete tScaleUp;
2217     delete tScaleDown;
2218     delete tCentral;
2219     delete tMatchingUp;
2220     delete tMatchingDown;
2221 buchmann 1.86 delete rtScaleUp;
2222     delete rtScaleDown;
2223     delete rtCentral;
2224     delete rtMatchingUp;
2225     delete rtMatchingDown;
2226 buchmann 1.81 delete QP1;
2227     delete infobox;
2228     delete infobox2;
2229     delete MatchingRatio;
2230     delete ScaleRatio;
2231     delete leg2;
2232     CleanLegends();
2233     delete ca;
2234     }
2235    
2236 buchmann 1.79 void ProduceMCSystematicPlots() {
2237 buchmann 1.81 cout << "Getting ready to produce systematic plots " << endl;
2238 buchmann 1.79 TCut cutweightBKP = cutWeight;
2239    
2240 buchmann 1.89 QuickProduceMCSystematicPlot("genMET",20,0,200,"gen#slash{E}_{T} [GeV]",cutOSSF&&cutnJets&&TCut("mll>20&&mll<70"),"MCSystPlots/genMET/ETH_SameFlavor");
2241     QuickProduceMCSystematicPlot("genMET",20,0,200,"gen#slash{E}_{T} [GeV]",cutOSOF&&cutnJets&&TCut("mll>20&&mll<70"),"MCSystPlots/genMET/ETH_OppositeFlavor");
2242     QuickProduceMCSystematicPlot("met[4]",20,0,200,"PF#slash{E}_{T} [GeV]",cutOSSF&&cutnJets&&TCut("mll>20&&mll<70"),"MCSystPlots/MET/ETH_SameFlavor");
2243     QuickProduceMCSystematicPlot("met[4]",20,0,200,"PF#slash{E}_{T} [GeV]",cutOSOF&&cutnJets&&TCut("mll>20&&mll<70"),"MCSystPlots/MET/ETH_OppositeFlavor");
2244    
2245     QuickProduceMCSystematicPlot("genMET",20,0,200,"gen#slash{E}_{T} [GeV]",cutOSSF&&TCut("mll>20&&mll<70"),"MCSystPlots/genMET/ETH_SameFlavor_INCLUSIVE");
2246     QuickProduceMCSystematicPlot("genMET",20,0,200,"gen#slash{E}_{T} [GeV]",cutOSOF&&TCut("mll>20&&mll<70"),"MCSystPlots/genMET/ETH_OppositeFlavor_INCLUSIVE");
2247     QuickProduceMCSystematicPlot("genMET",20,0,200,"gen#slash{E}_{T} [GeV]",cutOSSF&&TCut("mll>120"),"MCSystPlots/genMET/ETH_SameFlavor_INCLUSIVE_HighMass");
2248     QuickProduceMCSystematicPlot("genMET",20,0,200,"gen#slash{E}_{T} [GeV]",cutOSOF&&TCut("mll>120"),"MCSystPlots/genMET/ETH_OppositeFlavor_INCLUSIVE_HighMass");
2249    
2250     QuickProduceMCSystematicPlot("met[4]",20,0,200,"PF#slash{E}_{T} [GeV]",cutOSSF&&TCut("mll>20&&mll<70"),"MCSystPlots/MET/ETH_SameFlavor_INCLUSIVE");
2251     QuickProduceMCSystematicPlot("met[4]",20,0,200,"PF#slash{E}_{T} [GeV]",cutOSOF&&TCut("mll>20&&mll<70"),"MCSystPlots/MET/ETH_OppositeFlavor_INCLUSIVE");
2252     QuickProduceMCSystematicPlot("met[4]",20,0,200,"PF#slash{E}_{T} [GeV]",cutOSSF&&TCut("mll>120"),"MCSystPlots/MET/ETH_SameFlavor_INCLUSIVE_HighMass");
2253     QuickProduceMCSystematicPlot("met[4]",20,0,200,"PF#slash{E}_{T} [GeV]",cutOSOF&&TCut("mll>120"),"MCSystPlots/MET/ETH_OppositeFlavor_INCLUSIVE_HighMass");
2254 buchmann 1.82 QuickProduceMCSystematicPlot("pfJetGoodNum40",8,-0.5,7.5,"NJets",cutOSSF&&cutnJets&&TCut("mll>20&&mll<70&&met[4]>100"),"MCSystPlots/NJets/ETH_SameFlavor");
2255     QuickProduceMCSystematicPlot("pfJetGoodNum40",8,-0.5,7.5,"NJets",cutOSOF&&cutnJets&&TCut("mll>20&&mll<70&&met[4]>100"),"MCSystPlots/NJets/ETH_OppositeFlavor");
2256 buchmann 1.81
2257    
2258 buchmann 1.79
2259 buchmann 1.81 cout << "Kicking cutWeight " << (const char*) cutWeight << endl;
2260     cout << "Keeping OSSF cut " << (const char*)cutOSSF << endl;
2261     cutWeight="1.0";
2262    
2263 buchmann 1.89 QuickProduceMCSystematicPlot("genMET",20,0,200,"gen#slash{E}_{T} [GeV]",cutOSSF&&TCut("mll>20&&mll<70"),"MCSystPlots/genMET/ETH_SameFlavor_INCLUSIVE__NOPURW");
2264     QuickProduceMCSystematicPlot("genMET",20,0,200,"gen#slash{E}_{T} [GeV]",cutOSOF&&TCut("mll>20&&mll<70"),"MCSystPlots/genMET/ETH_OppositeFlavor_INCLUSIVE__NOPURW");
2265     QuickProduceMCSystematicPlot("genMET",20,0,200,"gen#slash{E}_{T} [GeV]",cutOSSF&&TCut("mll>120"),"MCSystPlots/genMET/ETH_SameFlavor_INCLUSIVE_HighMass__NOPURW");
2266     QuickProduceMCSystematicPlot("genMET",20,0,200,"gen#slash{E}_{T} [GeV]",cutOSOF&&TCut("mll>120"),"MCSystPlots/genMET/ETH_OppositeFlavor_INCLUSIVE_HighMass__NOPURW");
2267    
2268     QuickProduceMCSystematicPlot("met[4]",20,0,200,"PF#slash{E}_{T} [GeV]",cutOSSF&&TCut("mll>20&&mll<70"),"MCSystPlots/MET/ETH_SameFlavor_INCLUSIVE__NOPURW");
2269     QuickProduceMCSystematicPlot("met[4]",20,0,200,"PF#slash{E}_{T} [GeV]",cutOSOF&&TCut("mll>20&&mll<70"),"MCSystPlots/MET/ETH_OppositeFlavor_INCLUSIVE__NOPURW");
2270     QuickProduceMCSystematicPlot("met[4]",20,0,200,"PF#slash{E}_{T} [GeV]",cutOSSF&&TCut("mll>120"),"MCSystPlots/MET/ETH_SameFlavor_INCLUSIVE_HighMass__NOPURW");
2271     QuickProduceMCSystematicPlot("met[4]",20,0,200,"PF#slash{E}_{T} [GeV]",cutOSOF&&TCut("mll>120"),"MCSystPlots/MET/ETH_OppositeFlavor_INCLUSIVE_HighMass__NOPURW");
2272 buchmann 1.84
2273 buchmann 1.81
2274 buchmann 1.82 // -------------------------------------- ***** AACHEN ***** --------------------------------------
2275    
2276 buchmann 1.86 /*
2277 buchmann 1.82 cutWeight=cutweightBKP;
2278     TCut essentialcutBKP = essentialcut;
2279     cout << (const char*) essentialcut << endl;
2280    
2281     essentialcut = TCut((ReplaceAll((const char*)essentialcut,"pt2>20","pt2>10")).c_str());
2282     essentialcut = TCut((ReplaceAll((const char*)essentialcut,"abs(eta1)<1.4","abs(eta1)<2.4")).c_str());
2283     essentialcut = TCut((ReplaceAll((const char*)essentialcut,"abs(eta2)<1.4","abs(eta2)<2.4")).c_str());
2284    
2285 buchmann 1.79 TCut cutnJetsBKP = cutnJets;
2286     cutnJets = TCut((ReplaceAll((const char*)cutnJets,"pt2>20","pt2>10")).c_str());
2287     cutnJets = TCut((ReplaceAll((const char*)cutnJets,"pfJetGoodNum40>=3","pfJetGoodNum40>=2")).c_str());
2288     cutnJets = TCut((ReplaceAll((const char*)cutnJets,"abs(eta2)<1.4","abs(eta2)<2.4")).c_str());
2289     cutnJets = TCut((ReplaceAll((const char*)cutnJets,"abs(eta1)<1.4","abs(eta1)<2.4")).c_str());
2290    
2291 buchmann 1.89 QuickProduceMCSystematicPlot("genMET",20,0,200,"gen#slash{E}_{T} [GeV]",cutOSSF&&cutnJets&&TCut("mll>20&&mll<70"),"MCSystPlots/genMET/Aachen_SameFlavor");
2292     QuickProduceMCSystematicPlot("genMET",20,0,200,"gen#slash{E}_{T} [GeV]",cutOSOF&&cutnJets&&TCut("mll>20&&mll<70"),"MCSystPlots/genMET/Aachen_OppositeFlavor");
2293     QuickProduceMCSystematicPlot("met[4]",20,0,200,"PF#slash{E}_{T} [GeV]",cutOSSF&&cutnJets&&TCut("mll>20&&mll<70"),"MCSystPlots/MET/Aachen_SameFlavor");
2294     QuickProduceMCSystematicPlot("met[4]",20,0,200,"PF#slash{E}_{T} [GeV]",cutOSOF&&cutnJets&&TCut("mll>20&&mll<70"),"MCSystPlots/MET/Aachen_OppositeFlavor");
2295    
2296     QuickProduceMCSystematicPlot("genMET",20,0,200,"gen#slash{E}_{T} [GeV]",cutOSSF&&TCut("mll>20&&mll<70"),"MCSystPlots/genMET/Aachen_SameFlavor_INCLUSIVE");
2297     QuickProduceMCSystematicPlot("genMET",20,0,200,"gen#slash{E}_{T} [GeV]",cutOSOF&&TCut("mll>20&&mll<70"),"MCSystPlots/genMET/Aachen_OppositeFlavor_INCLUSIVE");
2298     QuickProduceMCSystematicPlot("genMET",20,0,200,"gen#slash{E}_{T} [GeV]",cutOSSF&&TCut("mll>120"),"MCSystPlots/genMET/Aachen_SameFlavor_INCLUSIVE_HighMass");
2299     QuickProduceMCSystematicPlot("genMET",20,0,200,"gen#slash{E}_{T} [GeV]",cutOSOF&&TCut("mll>120"),"MCSystPlots/genMET/Aachen_OppositeFlavor_INCLUSIVE_HighMass");
2300    
2301     QuickProduceMCSystematicPlot("met[4]",20,0,200,"PF#slash{E}_{T} [GeV]",cutOSSF&&TCut("mll>20&&mll<70"),"MCSystPlots/MET/Aachen_SameFlavor_INCLUSIVE");
2302     QuickProduceMCSystematicPlot("met[4]",20,0,200,"PF#slash{E}_{T} [GeV]",cutOSOF&&TCut("mll>20&&mll<70"),"MCSystPlots/MET/Aachen_OppositeFlavor_INCLUSIVE");
2303     QuickProduceMCSystematicPlot("met[4]",20,0,200,"PF#slash{E}_{T} [GeV]",cutOSSF&&TCut("mll>120"),"MCSystPlots/MET/Aachen_SameFlavor_INCLUSIVE_HighMass");
2304     QuickProduceMCSystematicPlot("met[4]",20,0,200,"PF#slash{E}_{T} [GeV]",cutOSOF&&TCut("mll>120"),"MCSystPlots/MET/Aachen_OppositeFlavor_INCLUSIVE_HighMass");
2305 buchmann 1.82 QuickProduceMCSystematicPlot("pfJetGoodNum40",8,-0.5,7.5,"NJets",cutOSSF&&cutnJets&&TCut("mll>20&&mll<70&&met[4]>100"),"MCSystPlots/NJets/Aachen_SameFlavor");
2306     QuickProduceMCSystematicPlot("pfJetGoodNum40",8,-0.5,7.5,"NJets",cutOSOF&&cutnJets&&TCut("mll>20&&mll<70&&met[4]>100"),"MCSystPlots/NJets/Aachen_OppositeFlavor");
2307    
2308    
2309    
2310     cout << "Kicking cutWeight " << (const char*) cutWeight << endl;
2311     cout << "Keeping OSSF cut " << (const char*)cutOSSF << endl;
2312     cutWeight="1.0";
2313    
2314 buchmann 1.89 QuickProduceMCSystematicPlot("genMET",20,0,200,"gen#slash{E}_{T} [GeV]",cutOSSF&&TCut("mll>20&&mll<70"),"MCSystPlots/genMET/Aachen_SameFlavor_INCLUSIVE__NOPURW");
2315     QuickProduceMCSystematicPlot("genMET",20,0,200,"gen#slash{E}_{T} [GeV]",cutOSOF&&TCut("mll>20&&mll<70"),"MCSystPlots/genMET/Aachen_OppositeFlavor_INCLUSIVE__NOPURW");
2316     QuickProduceMCSystematicPlot("genMET",20,0,200,"gen#slash{E}_{T} [GeV]",cutOSSF&&TCut("mll>120"),"MCSystPlots/genMET/Aachen_SameFlavor_INCLUSIVE_HighMass__NOPURW");
2317     QuickProduceMCSystematicPlot("genMET",20,0,200,"gen#slash{E}_{T} [GeV]",cutOSOF&&TCut("mll>120"),"MCSystPlots/genMET/Aachen_OppositeFlavor_INCLUSIVE_HighMass__NOPURW");
2318    
2319     QuickProduceMCSystematicPlot("met[4]",20,0,200,"PF#slash{E}_{T} [GeV]",cutOSSF&&TCut("mll>20&&mll<70"),"MCSystPlots/MET/Aachen_SameFlavor_INCLUSIVE__NOPURW");
2320     QuickProduceMCSystematicPlot("met[4]",20,0,200,"PF#slash{E}_{T} [GeV]",cutOSOF&&TCut("mll>20&&mll<70"),"MCSystPlots/MET/Aachen_OppositeFlavor_INCLUSIVE__NOPURW");
2321     QuickProduceMCSystematicPlot("met[4]",20,0,200,"PF#slash{E}_{T} [GeV]",cutOSSF&&TCut("mll>120"),"MCSystPlots/MET/Aachen_SameFlavor_INCLUSIVE_HighMass__NOPURW");
2322     QuickProduceMCSystematicPlot("met[4]",20,0,200,"PF#slash{E}_{T} [GeV]",cutOSOF&&TCut("mll>120"),"MCSystPlots/MET/Aachen_OppositeFlavor_INCLUSIVE_HighMass__NOPURW");
2323 buchmann 1.82
2324 buchmann 1.79 cutnJets = cutnJetsBKP;
2325     cutWeight = cutweightBKP;
2326 buchmann 1.82 essentialcut = essentialcutBKP;
2327 buchmann 1.86 */
2328 buchmann 1.83 write_error(__FUNCTION__,"Still need to add systematic shape");assert(0);
2329 buchmann 1.81 }
2330    
2331     void MakeTauPlot(string label, TCut pcut, string filename, bool TauOnly) {
2332     TCut cut=pcut&&basiccut;
2333     string variable="mll";
2334     string xlabel="m_{ll} [GeV]";
2335     int nbins=40;
2336     float min=0;
2337     float max=200;
2338    
2339     TCanvas *ckin = new TCanvas("ckin","Kinematic Plots (in the making)",600,600);
2340     TH1F *datahistoSF = allsamples.Draw("datahistoSF",variable,nbins,min,max, xlabel, "events",cut&&cutOSSF,data,luminosity);
2341     TH1F *datahistoOF = allsamples.Draw("datahistoOF",variable,nbins,min,max, xlabel, "events",cut&&cutOSOF,data,luminosity);
2342     TH1F *tauSF = allsamples.Draw("tauSF",variable,nbins,min,max, xlabel, "events",cut&&cutOSSF,data,luminosity,systsamples.FindSample("DYToTauTau"));
2343     TH1F *tauOF = allsamples.Draw("tauOF",variable,nbins,min,max, xlabel, "events",cut&&cutOSOF,data,luminosity,systsamples.FindSample("DYToTauTau"));
2344     datahistoSF->SetMarkerSize(DataMarkerSize);
2345     datahistoSF->SetMaximum(1.3*datahistoSF->GetMaximum());
2346     datahistoOF->SetMarkerSize(DataMarkerSize);
2347     datahistoOF->SetMaximum(1.3*datahistoOF->GetMaximum());
2348    
2349     THStack mcstackSF = allsamples.DrawStack("mcstackSF", variable,nbins,min,max,xlabel,"events",cut&&cutOSSF,mc,luminosity);
2350     THStack mcstackOF = allsamples.DrawStack("mcstackOF", variable,nbins,min,max,xlabel,"events",cut&&cutOSOF,mc,luminosity);
2351     datahistoSF->Draw("e1");
2352     ckin->Update();
2353     mcstackSF.Draw("histo,same");
2354    
2355     datahistoSF->Draw("same,e1");
2356     TLegend *kinleg = allsamples.allbglegend();
2357     kinleg->Draw();
2358    
2359     TPad *kinpad = new TPad("kinpad","kinpad",0,0,1,1);
2360     kinpad->cd();
2361     datahistoSF->Draw("e1");
2362     mcstackSF.Draw("histo,same");
2363     datahistoSF->Draw("same,e1");
2364     datahistoSF->Draw("same,axis");
2365     kinleg->Draw();
2366     DrawPrelim();
2367     Save_With_Ratio(datahistoSF,mcstackSF,kinpad->cd(),filename+"__SF_mc");
2368    
2369     kinpad->cd();
2370     datahistoOF->Draw("e1");
2371     mcstackOF.Draw("histo,same");
2372     datahistoOF->Draw("same,e1");
2373     datahistoOF->Draw("same,axis");
2374     kinleg->Draw();
2375     DrawPrelim();
2376     Save_With_Ratio(datahistoOF,mcstackOF,kinpad->cd(),filename+"__OF_mc");
2377    
2378     kinpad->cd();
2379     tauSF->Draw("e1");
2380     tauOF->Draw("histo,same");
2381     tauSF->Draw("e1,same");
2382     TLegend *legtau = make_legend();
2383     legtau->AddEntry(tauSF,"DY->#tau#tau, SF","p");
2384     legtau->AddEntry(tauSF,"DY->#tau#tau, OF","l");
2385     legtau->Draw();
2386     DrawPrelim();
2387     Save_With_Ratio(tauSF,tauOF,kinpad->cd(),filename+"__Tau_SF_vs_OF");
2388    
2389     delete datahistoSF;
2390     delete datahistoOF;
2391     delete tauSF;
2392     delete tauOF;
2393     delete kinpad;
2394     delete ckin;
2395     CleanLegends();
2396     }
2397    
2398    
2399     void TauQuestion() {
2400     // MakeTauPlot("MET>100 GeV, #geq 3 jets",cutnJets&&TCut("met[4]>100"),"TauQ/MET100_3Jets",true);
2401     // MakeTauPlot("MET>100 GeV",TCut("met[4]>100"),"TauQ/MET100",true);
2402     // MakeTauPlot("MET>0 GeV",TCut("met[4]>0"),"TauQ/MET0",true);
2403     MakeTauPlot("b-tag veto, 50<MET<100",TCut("pfJetGoodNumBtag30==0&&met[4]>50&&met[4]<100"),"TauQ/ControlPlots",false);
2404 buchmann 1.79 }
2405    
2406 buchmann 1.91 void ProduceOFSFPlots(string mcjzb, string datajzb, bool isAachen) {
2407     string BaseMetCut="met[4]>100";
2408     string Prefix="ETH/";
2409     if(isAachen) {
2410     BaseMetCut="met[4]>150";
2411     Prefix="Aachen/";
2412     }
2413 buchmann 1.97
2414 buchmann 1.99 // make_OFSF_plots("met[4]", BaseMetCut, 20, 100., 300., true, "E_{T}^{miss}", Prefix+"MET_allmc",1500,0.55,mc);
2415     // make_OFSF_plots("pfTightHT", BaseMetCut, 20, 0., 800., true, "H_{T}", Prefix+"HT_allmc",1500,0.55,mc);
2416    
2417     // make_OFSF_plots("met[4]", BaseMetCut, 20, 100., 300., true, "E_{T}^{miss}", Prefix+"MET_onlyttbar",1500,0.55,123);
2418     // make_OFSF_plots("pfTightHT", BaseMetCut, 20, 0., 800., true, "H_{T}", Prefix+"HT_onlyttbar",1500,0.55,123);
2419    
2420     // make_OFSF_plots("mll", BaseMetCut, 36, 20., 200., false, "m_{ll}", Prefix+"Mll_onlyttbar",120,0.55,123);
2421     // make_OFSF_plots("mll", BaseMetCut, 36, 20., 200., false, "m_{ll}", Prefix+"Mll_allmc",120,0.55,mc);
2422    
2423     // make_OFSF_plots("pfTightHT", BaseMetCut, 20, 0., 800., true, "H_{T}", Prefix+"HT",1500);
2424 buchmann 1.98 // make_OFSF_plots("met[4]", BaseMetCut, 30, 100., 400., true, "E_{T}^{miss}", Prefix+"MET",1500);
2425 buchmann 1.99 make_OFSF_plots("pfJetGoodNumBtag30", BaseMetCut, 6, -0.5, 5.5, true, "N_{b-jets}", Prefix+"nbjets",5000);
2426     return;
2427     // make_OFSF_plots("max(abs(eta1),abs(eta2))", BaseMetCut, 14, 0.0, 3.5, true, "max(|#eta_{l1}|,|#eta_{l2}|)", Prefix+"MaxAbsEta",-1);
2428     // make_OFSF_plots("min(abs(eta1),abs(eta2))", BaseMetCut, 14, 0.0, 3.5, true, "min(|#eta_{l1}|,|#eta_{l2}|)", Prefix+"MinAbsEta",-1);
2429 buchmann 1.98 // make_OFSF_plots("st", BaseMetCut, 20, 0, 2000., false, "#tilde{S}_{T}", Prefix+"FrankT",120);
2430     // make_OFSF_plots("pt1+pt2+met[4]+Sum$(pfJetGoodPt)", BaseMetCut, 20, 0, 2000., false, "#tilde{S}_{T}", Prefix+"POOR_FrankT",120);
2431    
2432    
2433     // make_OFSF_plots("mt2j", BaseMetCut, 35, 0, 700., false, "M_{T2J}", Prefix+"MT2J");
2434     //
2435     // make_OFSF_plots("ml1b", BaseMetCut, 20, 0, 800., false, "m_{l_{1}b}", Prefix+"ML1B");
2436     // make_OFSF_plots("ml2b", BaseMetCut, 20, 0, 400., false, "m_{l_{2}b}", Prefix+"ML2B");
2437     // make_OFSF_plots("min(ml1b,ml2b)", BaseMetCut, 20, 0, 400., false, "m_{lb}", Prefix+"MLB");
2438     //
2439     // make_OFSF_plots(datajzb, BaseMetCut, 55, -100, 450., false, "JZB", Prefix+"JZB_In_Signal_Region");
2440 buchmann 1.99 // make_OFSF_plots("mt2", BaseMetCut, 15, 0, 150., false, "M_{T2}", Prefix+"MT2");
2441     // make_OFSF_plots("d2", BaseMetCut, 20, 0, 200., true, "D2", Prefix+"D2");
2442     // make_OFSF_plots("pfJetGoodNum40", BaseMetCut, 10, -0.5, 9.5, true, "N_{jets}", Prefix+"nJets");
2443 buchmann 1.98 //
2444     // make_OFSF_plots("mll", BaseMetCut, 60, 20., 320., false, "m_{ll}", Prefix+"mll");
2445     // make_OFSF_plots("leptonNum", BaseMetCut, 3, 2, 5., false, "N(leptons)", Prefix+"NLeptons");
2446     //
2447     // make_OFSF_plots("pfJetGoodNum40", BaseMetCut, 7, 3, 10, true, "#(jets)", Prefix+"njets");
2448     // make_OFSF_plots("pfJetGoodNum40", BaseMetCut+"&&pfJetGoodNumBtag30==0", 7, 3, 10, true, "#(jets)", Prefix+"njets_btagVeto");
2449     // make_OFSF_plots("pfJetGoodNum40", BaseMetCut"&&pfJetGoodNumBtag30>0", 7, 3, 10, true, "#(jets)", Prefix+"njets_AtLeastOneBJet30");
2450     //
2451     // make_OFSF_plots("pfJetGoodPtBtag[0]", BaseMetCut+"&&pfJetGoodNumBtag30>0", 20, 0, 400, true, "p_{T}(leading b-jet)", Prefix+"ptb1");
2452 buchmann 1.99 // make_OFSF_plots("pfJetGoodPt", BaseMetCut, 30, 0., 400., true, "p_{T}^{J}", Prefix+"ptJet");
2453 buchmann 1.98 //
2454     // make_OFSF_plots("iso1", BaseMetCut, 20, 0, 0.3, true, "lepton 1 isolation", Prefix+"iso1");
2455     // make_OFSF_plots("iso2", BaseMetCut, 20, 0, 0.3, true, "lepton 2 isolation", Prefix+"iso2");
2456 buchmann 1.99 // make_OFSF_plots("pt", BaseMetCut, 30, 0., 300., true, "p_{ll}", Prefix+"pt");
2457     // make_OFSF_plots("pt1", BaseMetCut, 30, 0., 300., true, "p_{T,1}", Prefix+"pt1");
2458     // make_OFSF_plots("pt2", BaseMetCut, 22, 0., 220., true, "p_{T,2}", Prefix+"pt2");
2459     make_OFSF_plots("abs(eta1)", BaseMetCut, 10, 0, 3.5, false, "#eta_{1}", Prefix+"eta1", 200);
2460     make_OFSF_plots("abs(eta2)", BaseMetCut, 10, 0, 3.5, false, "#eta_{2}", Prefix+"eta2", 200);
2461     return;
2462 buchmann 1.98 // make_OFSF_plots("phi1", BaseMetCut, 10, -TMath::Pi(), TMath::Pi(), false, "#phi_{1}", Prefix+"phi1", -1, 0.2);
2463     // make_OFSF_plots("phi2", BaseMetCut, 10, -TMath::Pi(), TMath::Pi(), false, "#phi_{2}", Prefix+"phi2", -1, 0.2);
2464     // make_OFSF_plots("pfJetGoodPt[0]/pfJetGoodPt[1]", BaseMetCut, 20, 1, 10, true, "pt_{j}^{1}/pt_{j}^{2}", Prefix+"jpt1pt2", -1, 0.2);
2465 buchmann 1.99 // make_OFSF_plots("TMath::Abs(pfJetDphiMet[0])", BaseMetCut, 16, 0, 3.2, false, "|#Delta#phi(jet1,MET)|", Prefix+"dphij1met", -1, 0.2);
2466 buchmann 1.91
2467 buchmann 1.98 // make_OFSF_plots("TMath::Abs(dphi)", BaseMetCut, 16, 0, 3.2, false, "|#Delta#phi(l1,l2)|", Prefix+"dphi", -1, 0.2);
2468     // make_OFSF_plots("TMath::Abs(dphiMet1)", BaseMetCut, 16, 0, 3.2, false, "|#Delta#phi(l1,MET)|", Prefix+"dphiMet1", -1, 0.2);
2469     // make_OFSF_plots("TMath::Abs(dphiMet2)", BaseMetCut, 16, 0, 3.2, false, "|#Delta#phi(l2,MET)|", Prefix+"dphiMet2", -1, 0.2);
2470 buchmann 1.91 // make_OFSF_plots("TMath::Min(TMath::Abs(dphiMet1), TMath::Abs(dphiMet2))", BaseMetCut, 16, 0, 3.2, false, "Min(|#Delta#phi(l,MET)|)", Prefix+"dphilc");
2471     // make_OFSF_plots("TMath::Min(TMath::Abs(pfJetDphiMet[0]), TMath::Min(TMath::Abs(pfJetDphiMet[1]), TMath::Abs(pfJetDphiMet[2])))", BaseMetCut, 16, 0, 3.2, false, "Min(|#Delta#phi(jet,MET)|)", Prefix+"dphijc");
2472     // make_OFSF_plots("TMath::Min((TMath::Pi()-TMath::Abs(dphiMet1)), (TMath::Pi() - TMath::Abs(dphiMet2)))", BaseMetCut, 16, 0, 3.2, false, "Min(#pi - |#Delta#phi(l,MET)|)", Prefix+"dphilco");
2473     // make_OFSF_plots("TMath::Min((TMath::Pi()-TMath::Abs(pfJetDphiMet[0])), TMath::Min( (TMath::Pi()-TMath::Abs(pfJetDphiMet[1])), (TMath::Pi() - TMath::Abs(pfJetDphiMet[2]))))", BaseMetCut, 16, 0, 3.2, false, "Min(#pi - |#Delta#phi(jet,MET)|)", Prefix+"dphijco");
2474    
2475     }
2476    
2477     void ProduceOFSFPlots(string mcjzb, string datajzb) {
2478    
2479    
2480     //FIRST : ETH SELECTION
2481     ProduceOFSFPlots(mcjzb,datajzb,0); // this is the ETH selection
2482    
2483     string backup_cutnJets = (const char*)cutnJets;
2484     cutnJets = ReplaceInCut(cutnJets,"pfJetGoodNum40>=3","pfJetGoodNum40>=2");
2485     cutnJets = ReplaceInCut(cutnJets,"1.4","2.4");
2486    
2487     string backup_basiccut = (const char*)basiccut;
2488     basiccut = ReplaceInCut(basiccut,"1.4","2.4");
2489    
2490     string backup_essential = (const char*) essentialcut;
2491     essentialcut = ReplaceInCut(essentialcut,"1.4","2.4");
2492    
2493     ProduceOFSFPlots(mcjzb,datajzb,1); // this is the Aachen selection
2494    
2495     cutnJets = TCut(backup_cutnJets.c_str());
2496     basiccut = TCut(backup_basiccut.c_str());
2497     essentialcut = TCut(backup_essential.c_str());
2498     }
2499    
2500 buchmann 1.99 void produce_OF_SF_ZlineShapePlot() {
2501     TCut cut=TCut("pfJetGoodNum40==2 && met[4]<100 && pt1>20 && pt2>20");
2502     TCanvas *ckin = new TCanvas("ckin","Kinematic Plots (in the making)",600,600);
2503     ckin->SetLogy(1);
2504     TH1F *datahistoSF = allsamples.Draw("datahistoSF","mll",37,15,200, "m_{ll}", "events",cut&&cutOSSF,data,luminosity);
2505     TH1F *datahistoOF = allsamples.Draw("datahistoOF","mll",37,15,200, "m_{ll}", "events",cut&&cutOSOF,data,luminosity);
2506    
2507    
2508     float min=25;
2509     datahistoSF->SetMinimum(min);
2510     float max = datahistoSF->GetMaximum()*10;
2511     datahistoSF->SetMaximum(max);
2512     datahistoSF->Draw("e1");
2513     datahistoOF->SetLineColor(TColor::GetColor("#2E9AFE"));
2514     datahistoOF->SetFillColor(TColor::GetColor("#2E9AFE"));
2515     datahistoOF->Draw("histo,same");
2516     datahistoSF->Draw("same,e1");
2517    
2518     TLegend *leg = make_legend();
2519     leg->AddEntry(datahistoSF,"SF events","p");
2520     leg->AddEntry(datahistoOF,"OF events","f");
2521     leg->Draw();
2522    
2523     TLine *k = new TLine(20,min,20,max);
2524     k->Draw();
2525     TLine *l = new TLine(70,min,70,max);
2526     l->Draw();
2527     TLine *m = new TLine(81,min,81,max);
2528     m->SetLineColor(TColor::GetColor("#FE642E"));
2529     m->Draw();
2530     TLine *n = new TLine(101,min,101,max);
2531     n->SetLineColor(TColor::GetColor("#FE642E"));
2532     n->Draw();
2533    
2534     CompleteSave(ckin,"ZLineShape_SF_OF");
2535    
2536     delete leg;
2537     delete ckin;
2538     delete datahistoSF;
2539     delete datahistoOF;
2540     }
2541 buchmann 1.91
2542 buchmann 1.1 void do_kinematic_plots(string mcjzb, string datajzb, bool doPF=false)
2543     {
2544 buchmann 1.66 // switch_overunderflow(true);
2545 buchmann 1.99
2546     produce_OF_SF_ZlineShapePlot();
2547    
2548 buchmann 1.1 bool dolog=true;
2549     bool nolog=false;
2550 fronga 1.54
2551 buchmann 1.98 bool doOFSF = false;
2552 buchmann 1.88 bool doKin = false;
2553 buchmann 1.81 bool doDataComp = false;
2554     bool MakeTwoThreeJetComparison = false;
2555 fronga 1.55
2556 fronga 1.54
2557 buchmann 1.1 if(doPF) write_warning(__FUNCTION__,"Please use caution when trying to produce PF plots; not all versions of the JZB trees have these variables!");
2558 buchmann 1.17 float mll_low=50;
2559 buchmann 1.2 float mll_hi=160;
2560     if(!PlottingSetup::RestrictToMassPeak) {
2561 buchmann 1.26 mll_low=20;
2562 fronga 1.54 mll_hi=320;
2563 buchmann 1.2 }
2564 buchmann 1.72
2565 buchmann 1.73 if(MakeTwoThreeJetComparison) MakeElegantTwoThreeComparisons();
2566 buchmann 1.81
2567     //TauQuestion();
2568 fronga 1.54
2569 buchmann 1.79 //ProduceJanPlots();
2570 buchmann 1.88 //ProduceMCSystematicPlots();
2571     //assert(0);
2572 buchmann 1.81 // make_plain_kin_plot("pt",Cut2Str(cutOSSF&&TCut("mll>20&&pfJetGoodNumBtag30>=2")),40,0,200,nolog,"Z p_{T}","PlotForKostas",doPF,true);
2573 buchmann 1.79
2574 buchmann 1.91 if ( doOFSF ) ProduceOFSFPlots(mcjzb,datajzb);
2575 buchmann 1.70 if ( doDataComp) {
2576 fronga 1.55 TCut mllCut("");
2577 buchmann 1.99 float massmin = 20.;
2578     float massmax = 320;
2579 fronga 1.62 int massnbins = 60;
2580 buchmann 1.70 /* if ( !PlottingSetup::openBox ) {
2581 buchmann 1.69 mllCut = "mll>70";
2582 fronga 1.62 massmin = 120;
2583     massmax = 360;
2584     massnbins = 14;
2585 buchmann 1.70 }*/
2586 fronga 1.55
2587     TCut cutSignal = cutmass&&cutnJets&&"met[4]>100";
2588 buchmann 1.70
2589 buchmann 1.80 make_data_comparison_plot("numVtx", "",40, -0.5, 39.5,-1., true, "N(Vertices)", "numVtx");
2590 buchmann 1.71 make_data_comparison_plot("pfJetGoodEta[0]", "",50, -3.0, 3.0,-1., true, "N(Jets)", "pfJetGoodEta0");
2591    
2592    
2593     make_data_comparison_plot("pfJetGoodNum40", cutOSOF,10, -0.5, 9.5,-1., true, "N(Jets)", "njets_OF");
2594     make_data_comparison_plot("met[4]", cutOSSF,60, 0., 300.,-1., true, "pfMET", "met_SF_inclusive");
2595 buchmann 1.70 make_data_comparison_plot("met[1]", cutOSSF,60, 0., 300.,-1., true, "type 1 corrected pfMET", "mett1_SF_inclusive");
2596     make_data_comparison_plot("met[4]", cutOSOF,60, 0., 300.,-1., true, "pfMET", "met_OF_inclusive");
2597     make_data_comparison_plot("met[1]", cutOSOF,60, 0., 300.,-1., true, "type 1 corrected pfMET", "mett1_OF_inclusive");
2598    
2599     make_data_comparison_plot("met[4]", cutnJets&&cutOSSF,60, 0., 300.,-1., true, "pfMET", "met_SF_exclusive");
2600 buchmann 1.80 make_data_comparison_plot("met[1]", cutnJets&&cutOSSF,60, 0., 300.,-1., true, "type 1 corrected pfMET", "mett1_SF_exclusive");
2601 buchmann 1.70 make_data_comparison_plot("met[4]", cutnJets&&cutOSOF,60, 0., 300.,-1., true, "pfMET", "met_OF_exclusive");
2602 buchmann 1.80 make_data_comparison_plot("met[1]", cutnJets&&cutOSOF,60, 0., 300.,-1., true, "type 1 corrected pfMET", "mett1_OF_exclusive");
2603    
2604 buchmann 1.70
2605     string basiccutsaved = (const char*)basiccut;
2606    
2607     string newbasiccut=basiccutsaved;
2608    
2609     size_t found;
2610     found = newbasiccut.find( "pt2>20" );
2611     while (found!=string::npos){
2612     newbasiccut.replace( found, string( "pt2>20" ).length(), "pt2>10" );
2613     found = newbasiccut.find( "pt2>20" );
2614     }
2615 buchmann 1.80 basiccut=TCut(newbasiccut.c_str());
2616     make_data_comparison_plot("mll", TCut("pfJetGoodNum40>=2&&met[4]>150")&&cutOSSF,60, 0., 300.,-1., false, "mll", "mll_SF_Aachen_pt2010_met");
2617     make_data_comparison_plot("mll", TCut("pfJetGoodNum40>=2&&met[4]>150")&&cutOSOF,60, 0., 300.,-1., false, "mll", "mll_OF_Aachen_pt2010_met");
2618     make_data_comparison_plot("mll", TCut("pfJetGoodNum40>=2&&met[1]>150")&&cutOSSF,60, 0., 300.,-1., true, "mll", "mll_SF_Aachen_pt2010_t1cpfmet");
2619     make_data_comparison_plot("mll", TCut("pfJetGoodNum40>=2&&met[1]>150")&&cutOSOF,60, 0., 300.,-1., true, "mll", "mll_OF_Aachen_pt2010_t1cpfmet");
2620     basiccut=TCut(basiccutsaved.c_str());
2621    
2622     make_data_comparison_plot("pfJetGoodNum40", cutOSSF, 8, 0., 8.,-1., true, "#(jets)", "njets_SF");
2623     make_data_comparison_plot("pfJetGoodNum40", cutOSOF, 8, 0., 8.,-1., true, "#(jets)", "njets_OF");
2624    
2625     make_data_comparison_plot("mll", TCut("pfJetGoodNum40>=3&&met[4]>100")&&cutOSSF,60, 0., 300.,-1., true, "mll", "mll_SF_ETH_met");
2626     make_data_comparison_plot("mll", TCut("pfJetGoodNum40>=3&&met[4]>100")&&cutOSOF,60, 0., 300.,-1., true, "mll", "mll_OF_ETH_met");
2627     make_data_comparison_plot("mll", TCut("pfJetGoodNum40>=3&&met[1]>100")&&cutOSSF,60, 0., 300.,-1., true, "mll", "mll_SF_ETH_t1cpfmet");
2628     make_data_comparison_plot("mll", TCut("pfJetGoodNum40>=3&&met[1]>100")&&cutOSOF,60, 0., 300.,-1., true, "mll", "mll_OF_ETH_t1cpfmet");
2629    
2630    
2631     make_data_comparison_plot("mll", cutOSSF,60, 15., 315.,-1., true, "m_{ll}", "mll_SF_inclusive");
2632     make_data_comparison_plot("mll", cutOSSF&&TCut("id1==0"),60, 15., 315.,-1., true, "m_{ll}", "mll_SF_inclusive_ee");
2633     make_data_comparison_plot("mll", cutOSSF&&TCut("id1==1"),60, 15., 315.,-1., true, "m_{ll}", "mll_SF_inclusive_mm");
2634     make_data_comparison_plot("mll", cutOSOF,60, 15., 315.,-1., true, "m_{ll}", "mll_OF_inclusive");
2635 buchmann 1.70 make_data_comparison_plot("mll", cutnJets&&cutOSSF&&TCut("id1==0"),60, 15., 315.,-1., true, "m_{ll}", "mll_SF_exclusive_ee");
2636     make_data_comparison_plot("mll", cutnJets&&cutOSSF&&TCut("id1==1"),60, 15., 315.,-1., true, "m_{ll}", "mll_SF_exclusive_mm");
2637     make_data_comparison_plot("mll", cutnJets&&cutOSSF,60, 15., 315.,-1., true, "m_{ll}", "mll_SF_exclusive");
2638     make_data_comparison_plot("mll", cutnJets&&cutOSOF,60, 15., 315.,-1., true, "m_{ll}", "mll_OF_exclusive");
2639 buchmann 1.80
2640 fronga 1.62 make_data_comparison_plot("mll", cutOSSF&&cutSignal&&mllCut, massnbins, 15., 315.,-1., false, "m_{ll}", "mll_SF_sig");
2641 buchmann 1.71 make_data_comparison_plot("mll", cutOSOF&&cutSignal&&mllCut, massnbins, 15., 315.,-1., false, "m_{ll}", "mll_OF_sig");
2642    
2643     make_data_comparison_plot("mll", TCut("abs(eta1)<1.4&&abs(eta2)<1.4") && cutOSSF&&cutSignal&&mllCut, massnbins, 15., 315.,-1., false, "m_{ll}", "mll_SF_sig_central");
2644     make_data_comparison_plot("mll", TCut("abs(eta1)<1.4&&abs(eta2)<1.4") && cutOSOF&&cutSignal&&mllCut, massnbins, 15., 315.,-1., false, "m_{ll}", "mll_OF_sig_central");
2645    
2646 fronga 1.62 make_data_comparison_plot("mll", cutOSSF&&cutSignal&&mllCut&&"pfJetGoodNumBtag30==0", massnbins, 15., 315.,-1., false, "m_{ll}", "mll_SF_sig_btagVeto");
2647 buchmann 1.71 make_data_comparison_plot("mll", cutOSOF&&cutSignal&&mllCut&&"pfJetGoodNumBtag30==0", massnbins, 15., 315.,-1., false, "m_{ll}", "mll_OF_sig_btagVeto");
2648    
2649 fronga 1.62 make_data_comparison_plot("mll", cutOSSF&&cutSignal&&mllCut&&"pfJetGoodNumBtag30>0", massnbins, 15., 315.,-1., false, "m_{ll}", "mll_SF_sig_AtLeastOneBJet");
2650 buchmann 1.71 make_data_comparison_plot("mll", cutOSOF&&cutSignal&&mllCut&&"pfJetGoodNumBtag30>0", massnbins, 15., 315.,-1., false, "m_{ll}", "mll_OF_sig_AtLeastOneBJet");
2651 fronga 1.55
2652 buchmann 1.80
2653 fronga 1.62 make_data_comparison_plot("mll", mllCut&&cutOSOF&&cutSignal, massnbins, 15., 315.,-1., false, "m_{ll}", "mll_OF_sig");
2654 fronga 1.63 make_data_comparison_plot("mll", cutmass&&cutOSSF&&"met[4]>100&&met[4]<150&&pfJetGoodNum40==2", massnbins, 15., 315.,-1., false, "m_{ll}", "mll_SF_CR");
2655     make_data_comparison_plot("mll", cutmass&&cutOSOF&&"met[4]>100&&met[4]<150&&pfJetGoodNum40==2", massnbins, 15., 315.,-1., false, "m_{ll}", "mll_OF_CR");
2656 fronga 1.60
2657     make_data_comparison_plot("pfJetGoodNum40", cutOSSF&&cutSignal&&mllCut, 8, 0., 8.,-1., false, "#(jets)", "njets_SF_sig");
2658     make_data_comparison_plot("pfJetGoodNum40", cutOSOF&&cutSignal&&mllCut, 8, 0., 8.,-1., false, "#(jets)", "njets_OF_sig");
2659     make_data_comparison_plot("pfJetGoodNumBtag30", cutOSSF&&cutSignal&&mllCut, 8, 0., 8.,-1., false, "#(b-jets)", "nbjets_SF_sig");
2660     make_data_comparison_plot("pfJetGoodNumBtag30", cutOSOF&&cutSignal&&mllCut, 8, 0., 8.,-1., false, "#(b-jets)", "nbjets_OF_sig");
2661 buchmann 1.80
2662 fronga 1.54 }
2663    
2664 fronga 1.55
2665 fronga 1.54 if ( doKin ) {
2666 fronga 1.55 string mllCut("");
2667 buchmann 1.99
2668 buchmann 1.91 make_plain_kin_plot("mll",Cut2Str(cutOSSF&&TCut("mll>20")),56,20,300,dolog,"m_{ll}","NoPreselection/mll_SF",doPF,true);
2669 buchmann 1.99 make_plain_kin_plot("mll",Cut2Str(cutOSSF&&TCut("mll>20&&id1==0")),56,20,300,dolog,"m_{ll}","NoPreselection/mll_SF_ee",doPF,true);
2670     make_plain_kin_plot("mll",Cut2Str(cutOSSF&&TCut("mll>20&&id1==1")),56,20,300,dolog,"m_{ll}","NoPreselection/mll_SF_mm",doPF,true);
2671 buchmann 1.91 make_plain_kin_plot("mll",Cut2Str(cutOSOF&&TCut("mll>20")),56,20,300,dolog,"m_{ll}","NoPreselection/mll_OF",doPF,true);
2672 buchmann 1.99
2673     make_plain_kin_plot("pfTightHT",Cut2Str(cutOSSF&&TCut("mll>20")),20,0,800,dolog,"H_{T}","NoPreselection/HT_SF",doPF,true);
2674     make_plain_kin_plot("pfTightHT",Cut2Str(cutOSSF&&TCut("mll>20&&id1==0")),20,0,800,dolog,"H_{T}","NoPreselection/HT_SF_ee",doPF,true);
2675     make_plain_kin_plot("pfTightHT",Cut2Str(cutOSSF&&TCut("mll>20&&id1==1")),20,0,800,dolog,"H_{T}","NoPreselection/HT_SF_mm",doPF,true);
2676     make_plain_kin_plot("pfTightHT",Cut2Str(cutOSOF&&TCut("mll>20")),20,0,800,dolog,"H_{T}","NoPreselection/HT_OF",doPF,true);
2677    
2678     assert(0);
2679 buchmann 1.91 make_plain_kin_plot("met[4]",Cut2Str(cutOSSF&&TCut("mll>20")),80,0,400,dolog,"E_{T}^{miss}","NoPreselection/met_SF",doPF,true);
2680     make_plain_kin_plot("met[4]",Cut2Str(cutOSOF&&TCut("mll>20")),80,0,400,dolog,"E_{T}^{miss}","NoPreselection/met_OF",doPF,true);
2681    
2682     make_plain_kin_plot("pfTightHT",Cut2Str(cutOSSF&&TCut("mll>20")),20,0,800,dolog,"H_{T}","NoPreselection/HT_SF",doPF,true);
2683     make_plain_kin_plot("pfTightHT",Cut2Str(cutOSOF&&TCut("mll>20")),20,0,800,dolog,"H_{T}","NoPreselection/HT_OF",doPF,true);
2684    
2685     make_plain_kin_plot("pfJetGoodNum40",Cut2Str(cutOSSF&&TCut("mll>20")),10,-0.5,9.5,dolog,"n_{jets}","NoPreselection/NJets_SF",doPF,true);
2686     make_plain_kin_plot("pfJetGoodNum40",Cut2Str(cutOSOF&&TCut("mll>20")),10,-0.5,9.5,dolog,"n_{jets}","NoPreselection/NJets_OF",doPF,true);
2687    
2688     make_plain_kin_plot("pfJetGoodNumBtag30",Cut2Str(cutOSSF&&TCut("mll>20")),10,-0.5,9.5,dolog,"n_{btags}","NoPreselection/NBTags_SF",doPF,true);
2689     make_plain_kin_plot("pfJetGoodNumBtag30",Cut2Str(cutOSOF&&TCut("mll>20")),10,-0.5,9.5,dolog,"n_{btags}","NoPreselection/NBTags_OF",doPF,true);
2690    
2691     make_plain_kin_plot("pt1",Cut2Str(cutOSSF&&TCut("mll>20")),80,0,400,dolog,"p_{T}^{1}","NoPreselection/Pt1_SF",doPF,true);
2692     make_plain_kin_plot("pt1",Cut2Str(cutOSOF&&TCut("mll>20")),80,0,400,dolog,"p_{T}^{1}","NoPreselection/Pt1_OF",doPF,true);
2693    
2694     make_plain_kin_plot("pt2",Cut2Str(cutOSSF&&TCut("mll>20")),80,0,400,dolog,"p_{T}^{2}","NoPreselection/Pt2_SF",doPF,true);
2695     make_plain_kin_plot("pt2",Cut2Str(cutOSOF&&TCut("mll>20")),80,0,400,dolog,"p_{T}^{2}","NoPreselection/Pt2_OF",doPF,true);
2696    
2697    
2698 buchmann 1.88 make_plain_kin_plot("mll",Cut2Str(cutOSSF&&TCut("mll>60&&mll<120")),60,60,120,dolog,"m_{ll}","TestingLuminosity_SF",doPF,true);
2699     make_plain_kin_plot("mll",Cut2Str(cutOSOF&&TCut("mll>60&&mll<120")),60,60,120,dolog,"m_{ll}","TestingLuminosity_OF",doPF,true);
2700 buchmann 1.80
2701 buchmann 1.73 make_plain_kin_plot("met[4]",Cut2Str(cutOSOF&&TCut("mll>30&&mll<70&&pfJetGoodNum40==0")),40,0,400,dolog,"PFMET","Debunking/MET_OF_30to70_0j",doPF,true);
2702     make_plain_kin_plot("met[4]",Cut2Str(cutOSOF&&TCut("mll>30&&mll<70&&pfJetGoodNum40==1")),40,0,400,dolog,"PFMET","Debunking/MET_OF_30to70_1j",doPF,true);
2703     make_plain_kin_plot("met[4]",Cut2Str(cutOSOF&&TCut("mll>30&&mll<70&&pfTightHT>100&&pfJetGoodNum40==2")),40,0,400,dolog,"PFMET","Debunking/MET_OF_30to70_2j",doPF,true);
2704     make_plain_kin_plot("met[4]",Cut2Str(cutOSOF&&TCut("mll>30&&mll<70&&pfTightHT>100&&pfJetGoodNum40==3")),40,0,400,dolog,"PFMET","Debunking/MET_OF_30to70_3j",doPF,true);
2705    
2706     make_plain_kin_plot("met[4]",Cut2Str(cutOSOF&&TCut("mll>80&&mll<100&&pfJetGoodNum40==0")),40,0,400,dolog,"PFMET","Debunking/MET_OF_Z_0j",doPF,true);
2707     make_plain_kin_plot("met[4]",Cut2Str(cutOSOF&&TCut("mll>80&&mll<100&&pfJetGoodNum40==1")),40,0,400,dolog,"PFMET","Debunking/MET_OF_Z_1j",doPF,true);
2708     make_plain_kin_plot("met[4]",Cut2Str(cutOSOF&&TCut("mll>80&&mll<100&&pfTightHT>100&&pfJetGoodNum40==2")),40,0,400,dolog,"PFMET","Debunking/MET_OF_Z_2j",doPF,true);
2709     make_plain_kin_plot("met[4]",Cut2Str(cutOSOF&&TCut("mll>80&&mll<100&&pfTightHT>100&&pfJetGoodNum40==3")),40,0,400,dolog,"PFMET","Debunking/MET_OF_Z_3j",doPF,true);
2710 buchmann 1.77
2711 buchmann 1.74
2712 buchmann 1.75 make_plain_kin_plot("pfTightHT",Cut2Str(cutOSOF&&cutnJets),120,0,1200,dolog,"H_{T}","HT_3jets_OF",doPF,true);
2713     make_plain_kin_plot("pfTightHT",Cut2Str(cutOSSF&&cutnJets) ,120,0,1200,dolog,"H_{T}","HT_3jets_SF",doPF,true);
2714     make_plain_kin_plot("pfTightHT",Cut2Str(cutOSOF&&cutnJets&&TCut("met[4]>100")),120,0,1200,dolog,"H_{T}","HT_3jets_OF_MET100",doPF,true);
2715     make_plain_kin_plot("pfTightHT",Cut2Str(cutOSSF&&cutnJets&&TCut("met[4]>100")) ,120,0,1200,dolog,"H_{T}","HT_3jets_SF_MET100",doPF,true);
2716 buchmann 1.74
2717 buchmann 1.73
2718     make_plain_kin_plot("met[1]",Cut2Str(cutOSOF&&TCut("mll>30&&mll<70&&pfJetGoodNum40==0")),40,0,400,dolog,"PFMET","Debunking/T1MET_OF_30to70_0j",doPF,true);
2719     make_plain_kin_plot("met[1]",Cut2Str(cutOSOF&&TCut("mll>30&&mll<70&&pfJetGoodNum40==1")),40,0,400,dolog,"PFMET","Debunking/T1MET_OF_30to70_1j",doPF,true);
2720     make_plain_kin_plot("met[1]",Cut2Str(cutOSOF&&TCut("mll>30&&mll<70&&pfTightHT>100&&pfJetGoodNum40==2")),40,0,400,dolog,"PFMET","Debunking/T1MET_OF_30to70_2j",doPF,true);
2721     make_plain_kin_plot("met[1]",Cut2Str(cutOSOF&&TCut("mll>30&&mll<70&&pfTightHT>100&&pfJetGoodNum40==3")),40,0,400,dolog,"PFMET","Debunking/T1MET_OF_30to70_3j",doPF,true);
2722    
2723     make_plain_kin_plot("met[1]",Cut2Str(cutOSOF&&TCut("mll>80&&mll<100&&pfJetGoodNum40==0")),40,0,400,dolog,"PFMET","Debunking/T1MET_OF_Z_0j",doPF,true);
2724     make_plain_kin_plot("met[1]",Cut2Str(cutOSOF&&TCut("mll>80&&mll<100&&pfJetGoodNum40==1")),40,0,400,dolog,"PFMET","Debunking/T1MET_OF_Z_1j",doPF,true);
2725     make_plain_kin_plot("met[1]",Cut2Str(cutOSOF&&TCut("mll>80&&mll<100&&pfTightHT>100&&pfJetGoodNum40==2")),40,0,400,dolog,"PFMET","Debunking/T1MET_OF_Z_2j",doPF,true);
2726     make_plain_kin_plot("met[1]",Cut2Str(cutOSOF&&TCut("mll>80&&mll<100&&pfTightHT>100&&pfJetGoodNum40==3")),40,0,400,dolog,"PFMET","Debunking/T1MET_OF_Z_3j",doPF,true);
2727 fronga 1.55
2728 buchmann 1.80 make_plain_kin_plot("met[4]",Cut2Str(cutOSSF&&cutnJets&&TCut("mll>20&&mll<70")),50,0,300,dolog,"PFMET","MET_SF_20to70",doPF,true);
2729     make_plain_kin_plot("met[4]",Cut2Str(cutOSOF&&cutnJets&&TCut("mll>20&&mll<70")),50,0,300,dolog,"PFMET","MET_OF_20to70",doPF,true);
2730 buchmann 1.72
2731 buchmann 1.80 make_plain_kin_plot("met[4]",Cut2Str(cutOSSF&&cutnJets&&TCut("mll>120")),50,0,300,dolog,"PFMET","MET_SF_above120",doPF,true);
2732     make_plain_kin_plot("met[4]",Cut2Str(cutOSOF&&cutnJets&&TCut("mll>120")),50,0,300,dolog,"PFMET","MET_OF_above120",doPF,true);
2733 buchmann 1.72
2734 buchmann 1.80 make_plain_kin_plot("met[4]",Cut2Str(cutOSSF&&TCut("pfJetGoodNum40==2")&&TCut("mll>20&&mll<70")),50,0,300,dolog,"PFMET","MET_SF_20to70___2jetsonly",doPF,true);
2735     make_plain_kin_plot("met[4]",Cut2Str(cutOSOF&&TCut("pfJetGoodNum40==2")&&TCut("mll>20&&mll<70")),50,0,300,dolog,"PFMET","MET_OF_20to70___2jetsonly",doPF,true);
2736 buchmann 1.72
2737 buchmann 1.80 make_plain_kin_plot("met[4]",Cut2Str(cutOSSF&&TCut("pfJetGoodNum40==2")&&TCut("mll>120")),50,0,300,dolog,"PFMET","MET_SF_above120___2jetsonly",doPF,true);
2738     make_plain_kin_plot("met[4]",Cut2Str(cutOSOF&&TCut("pfJetGoodNum40==2")&&TCut("mll>120")),50,0,300,dolog,"PFMET","MET_OF_above120___2jetsonly",doPF,true);
2739    
2740 buchmann 1.72
2741 buchmann 1.80 make_kin_plot("pfJetGoodPt[0]/pfJetGoodPt[1]","",45,1,10,dolog,"pt_{j}^{1}/pt_{j}^{2}","j1j2ratio",doPF,true);
2742     make_kin_plot("TMath::Abs(pfJetDphiMet[0])","",32,0,3.2,nolog,"|#Delta#phi(jet1,MET)|","dphiJ1MET",doPF,true);
2743 buchmann 1.77 // Plots in signal region
2744 buchmann 1.89 make_kin_plot("met[4]","",70,0,350,dolog,"#slash{E}_{T} [GeV]","met",doPF,true);
2745 buchmann 1.77
2746 buchmann 1.78
2747 buchmann 1.80 make_kin_plot("MetFactor","",20,0,2,nolog,"MetFactor","MetFactor",doPF,true);
2748 buchmann 1.78
2749 buchmann 1.80 make_ttbar_comparison("met[4]",40,0,400,(cutOSOF&&TCut("mll>30&&mll<70&&pfTightHT>100&&pfJetGoodNum40==2")),dolog,"PFMET","Debunking/MET_OF_30to70_2j__ALLMCSAMPLES");
2750 buchmann 1.99
2751 buchmann 1.80 DoMCSystPlot("met[4]",40,0,400,(cutOSOF&&TCut("mll>30&&mll<70&&pfJetGoodNum40==0")),dolog,"PFMET","Debunking/MET_OF_30to70_0j");
2752     DoMCSystPlot("met[4]",40,0,400,(cutOSOF&&TCut("mll>30&&mll<70&&pfJetGoodNum40==1")),dolog,"PFMET","Debunking/MET_OF_30to70_1j");
2753     DoMCSystPlot("met[4]",40,0,400,(cutOSOF&&TCut("mll>30&&mll<70&&pfTightHT>100&&pfJetGoodNum40==2")),dolog,"PFMET","Debunking/MET_OF_30to70_2j");
2754     DoMCSystPlot("met[4]",40,0,400,(cutOSOF&&TCut("mll>30&&mll<70&&pfTightHT>100&&pfJetGoodNum40==3")),dolog,"PFMET","Debunking/MET_OF_30to70_3j");
2755    
2756 buchmann 1.81 DoMCSystPlot("met[4]",40,0,400,(cutOSSF&&TCut("mll>30&&mll<70&&pfJetGoodNum40==0")),dolog,"PFMET","Debunking/MET_SF_30to70_0j");
2757     DoMCSystPlot("met[4]",40,0,400,(cutOSSF&&TCut("mll>30&&mll<70&&pfJetGoodNum40==1")),dolog,"PFMET","Debunking/MET_SF_30to70_1j");
2758     DoMCSystPlot("met[4]",40,0,400,(cutOSSF&&TCut("mll>30&&mll<70&&pfTightHT>100&&pfJetGoodNum40==2")),dolog,"PFMET","Debunking/MET_SF_30to70_2j");
2759     DoMCSystPlot("met[4]",40,0,400,(cutOSSF&&TCut("mll>30&&mll<70&&pfTightHT>100&&pfJetGoodNum40==3")),dolog,"PFMET","Debunking/MET_SF_30to70_3j");
2760    
2761 buchmann 1.80 DoMCSystPlot("met[4]",40,0,400,(cutOSOF&&TCut("mll>80&&mll<100&&pfJetGoodNum40==0")),dolog,"PFMET","Debunking/MET_OF_Z_0j");
2762     DoMCSystPlot("met[4]",40,0,400,(cutOSOF&&TCut("mll>80&&mll<100&&pfJetGoodNum40==1")),dolog,"PFMET","Debunking/MET_OF_Z_1j");
2763     DoMCSystPlot("met[4]",40,0,400,(cutOSOF&&TCut("mll>80&&mll<100&&pfTightHT>100&&pfJetGoodNum40==2")),dolog,"PFMET","Debunking/MET_OF_Z_2j");
2764     DoMCSystPlot("met[4]",40,0,400,(cutOSOF&&TCut("mll>80&&mll<100&&pfTightHT>100&&pfJetGoodNum40==3")),dolog,"PFMET","Debunking/MET_OF_Z_3j");
2765    
2766    
2767     DoMCSystPlot("mll", (int)((mll_hi-mll_low)/5),mll_low,mll_hi,cutnJets&&cutOSSF,dolog,"m_{ll} [GeV]","kinSys/mll");
2768     DoMCSystPlot("mll", (int)((mll_hi-mll_low)/5),mll_low,mll_hi,cutnJets&&cutOSSF&&TCut("id1==0"),dolog,"m_{ll} [GeV]","kinSys/mll_ee");
2769     DoMCSystPlot("mll", (int)((mll_hi-mll_low)/5),mll_low,mll_hi,cutnJets&&cutOSSF&&TCut("id1==1"),dolog,"m_{ll} [GeV]","kinSys/mll_mm");
2770     DoMCSystPlot("mll", (int)((mll_hi-mll_low)/5),mll_low,mll_hi,cutnJets&&cutOSOF,dolog,"m_{ll} [GeV]","kinSys/mll_osof");
2771 buchmann 1.78
2772 buchmann 1.80 DoMCSystPlot("mll", (int)((mll_hi-mll_low)/5),mll_low,mll_hi,cutOSSF,dolog,"m_{ll} [GeV]","kinSys/mll_inclusive");
2773     DoMCSystPlot("mll", (int)((mll_hi-mll_low)/5),mll_low,mll_hi,cutOSOF,dolog,"m_{ll} [GeV]","kinSys/mll_inclusive_osof");
2774 buchmann 1.77
2775 buchmann 1.80 DoMCSystPlot("pfJetGoodNum40", 9,-0.5,8.5,cutOSSF,dolog,"nJets","kinSys/nJets_ossf");
2776     DoMCSystPlot("pfJetGoodNum40", 9,-0.5,8.5,cutOSOF,dolog,"nJets","kinSys/nJets_osof");
2777 buchmann 1.72
2778 buchmann 1.80 DoMCSystPlot("pfJetGoodPt[0]/pfJetGoodPt[1]",45,1,10,cutnJets&&cutOSSF,dolog,"p_{T}^{J1} / p_{T}^{J2}","kinSys/j1j2ratio");
2779     DoMCSystPlot("TMath::Abs(pfJetDphiMet[0])",32,0,3.2,cutnJets&&cutOSSF,dolog,"|#Delta#phi(jet1,MET)|","kinSys/dphiJ1MET");
2780     DoMCSystPlot(datajzb,mcjzb, (int)((PlottingSetup::jzbHigh+110)/10),-110,PlottingSetup::jzbHigh,cutnJets&&cutOSSF&&Restrmasscut,dolog,"m_{ll} [GeV]","kinSys/jzb_OS_SFZP");
2781     DoMCSystPlot(datajzb,mcjzb, (int)((PlottingSetup::jzbHigh+110)/10),-110,PlottingSetup::jzbHigh,cutnJets&&cutOSOF&&Restrmasscut,dolog,"m_{ll} [GeV]","kinSys/jzb_OS_OFZP");
2782    
2783     make_kin_plot("mll","mll>20"+mllCut,(int)((mll_hi-mll_low)/5),mll_low,mll_hi,dolog,"m_{ll} [GeV]","mll",doPF,true);
2784     make_kin_plot("mll","mll>20",(int)((mll_hi-mll_low)/5),mll_low,mll_hi,dolog,"m_{ll} [GeV]","mll_osof",doPF,true,true);
2785     make_kin_plot("mll","mll>20"+mllCut,(int)((mll_hi-mll_low)/5),mll_low,mll_hi,dolog,"m_{ll} [GeV]","mll_ee",doPF,true);
2786     make_kin_plot("mll","mll>20"+mllCut,(int)((mll_hi-mll_low)/5),mll_low,mll_hi,dolog,"m_{ll} [GeV]","mll_mm",doPF,true);
2787    
2788     make_kin_plot("pfJetGoodNum40",mllCut,9,-0.5,8.5,dolog,"nJets","nJets",doPF);
2789     make_kin_plot("pfJetGoodNum40","",9,-0.5,8.5,dolog,"nJets","nJets_osof",doPF);
2790    
2791     make_kin_plot("mll","mll>20&&met[4]>100"+mllCut,(int)((mll_hi-mll_low)/5),mll_low,mll_hi,dolog,"m_{ll} [GeV]","mll_met100",doPF,true);
2792     make_kin_plot("mll","mll>20&&met[4]>100",(int)((mll_hi-mll_low)/5),mll_low,mll_hi,dolog,"m_{ll} [GeV]","mll_osof_met100",doPF,true,true);
2793     make_kin_plot("mll","mll>20&&met[4]>100"+mllCut,(int)((mll_hi-mll_low)/5),mll_low,mll_hi,dolog,"m_{ll} [GeV]","mll_ee_met100",doPF,true);
2794     make_kin_plot("mll","mll>20&&met[4]>100"+mllCut,(int)((mll_hi-mll_low)/5),mll_low,mll_hi,dolog,"m_{ll} [GeV]","mll_mm_met100",doPF,true);
2795 fronga 1.54
2796 buchmann 1.69
2797 buchmann 1.80 make_kin_plot("pfJetGoodNum40","met[4]>100"+mllCut,9,-0.5,8.5,dolog,"nJets","nJets_met100",doPF);
2798     make_kin_plot("pfJetGoodNum40","met[4]>100",9,-0.5,8.5,dolog,"nJets","nJets_osof_met100",doPF);
2799 fronga 1.54
2800     // Further inclusive invariant mass plots
2801 buchmann 1.70 make_kin_plot("mll",mllCut,(int)((mll_hi-mll_low))/5,mll_low,mll_hi,dolog,"m_{ll} [GeV]","mll_inclusive",doPF,true);
2802 buchmann 1.80 make_kin_plot("mll","",(int)((mll_hi-mll_low))/5,mll_low,mll_hi,dolog,"m_{ll} [GeV]","mll_inclusive_ee",doPF,true);
2803     make_kin_plot("mll","",(int)((mll_hi-mll_low))/5,mll_low,mll_hi,dolog,"m_{ll} [GeV]","mll_inclusive_mm",doPF,true);
2804 buchmann 1.70 make_kin_plot("mll",mllCut,(int)((mll_hi-mll_low))/5,mll_low,mll_hi,dolog,"m_{ll} [GeV]","mll_inclusive_osof",doPF,true);
2805 fronga 1.54
2806 buchmann 1.80 make_kin_plot("mll","",(int)((350-mll_low))/5,mll_low,350,dolog,"m_{ll} [GeV]","mll_inclusive_highrange",doPF);
2807 fronga 1.54 //if(!doPF) make_special_mll_plot((int)((mll_hi-mll_low)/5),mll_low,mll_hi,dolog,"m_{ll} [GeV]");
2808    
2809    
2810     // Number of jets
2811     make_kin_plot("pfJetGoodNum40","",9,-0.5,8.5,dolog,"nJets","nJets_inclusive",doPF);
2812     make_kin_plot("pfJetGoodNum40","",9,-0.5,8.5,dolog,"nJets","nJets_osof_inclusive",doPF);
2813 buchmann 1.80 make_kin_plot("pfJetGoodNum40","",9,-0.5,8.5,dolog,"nJets","nJets_nocuts_except_mll_ossf",doPF);
2814 fronga 1.54
2815     // Others
2816     make_kin_plot("numVtx","",(int)(30.5-(-0.5)),-0.5,30.5,nolog,"N(Vtx)","numVtx",doPF);
2817     // make_kin_plot("jetpt[0]","",40,0,200,dolog,"leading jet p_{T} [GeV]","pfJetGoodPt_0",doPF);
2818     // make_kin_plot("jeteta[0]","",40,-5,5,nolog,"leading jet #eta","pfJetGoodEta_0",doPF);
2819     make_kin_plot("pt","",50,0,500,dolog,"Z p_{T} [GeV]","Zpt",doPF);
2820     make_kin_plot("pt1","",50,0,200,nolog,"p_{T} [GeV]","pt1",doPF);
2821     make_kin_plot("pt2","",50,0,200,nolog,"p_{T} [GeV]","pt2",doPF);
2822     make_kin_plot("eta1","",40,-3,3,nolog,"#eta_{l}","eta",doPF);
2823     make_kin_plot("jzb[1]","",100,-150,200,dolog,"JZB [GeV]","jzb_ossf",doPF);
2824     // stringstream jzbcut;
2825     // jzbcut << "((is_data&&("<<datajzb<<")>100)||(!is_data&&("<<mcjzb<<")>100))";
2826     // make_kin_plot("mll",jzbcut.str(),(int)((mll_hi-mll_low)/5),mll_low,mll_hi,nolog,"m_{ll} [GeV]","mll_aboveJZB100",doPF,true);
2827     // make_kin_plot("mll",jzbcut.str(),(int)((mll_hi-mll_low)/5),mll_low,mll_hi,nolog,"m_{ll} [GeV]","mll_osof_aboveJZB100",doPF,true);
2828     // make_kin_plot("mll",jzbcut.str(),(int)((mll_hi-mll_low)/5),mll_low,mll_hi,nolog,"m_{ll} [GeV]","mll_ee_aboveJZB100",doPF,true);
2829     // make_kin_plot("mll",jzbcut.str(),(int)((mll_hi-mll_low)/5),mll_low,mll_hi,nolog,"m_{ll} [GeV]","mll_mm_aboveJZB100",doPF,true);
2830     // stringstream jzbcut2;
2831     // jzbcut2 << "((is_data&&("<<datajzb<<")>150)||(!is_data&&("<<mcjzb<<")>150))";
2832     // make_kin_plot("mll",jzbcut2.str(),(int)((mll_hi-mll_low)/5),mll_low,mll_hi,nolog,"m_{ll} [GeV]","mll_aboveJZB150",doPF,true);
2833     // make_kin_plot("mll",jzbcut2.str(),(int)((mll_hi-mll_low)/5),mll_low,mll_hi,nolog,"m_{ll} [GeV]","mll_osof_aboveJZB150",doPF,true);
2834     // make_kin_plot("mll",jzbcut2.str(),(int)((mll_hi-mll_low)/5),mll_low,mll_hi,nolog,"m_{ll} [GeV]","mll_ee_aboveJZB150",doPF,true);
2835     // make_kin_plot("mll",jzbcut2.str(),(int)((mll_hi-mll_low)/5),mll_low,mll_hi,nolog,"m_{ll} [GeV]","mll_mm_aboveJZB150",doPF,true);
2836     // stringstream jzbcut3;
2837     // jzbcut3 << "((is_data&&("<<datajzb<<")>50)||(!is_data&&("<<mcjzb<<")>50))";
2838     // make_kin_plot("mll",jzbcut3.str(),(int)((mll_hi-mll_low)/5),mll_low,mll_hi,nolog,"m_{ll} [GeV]","mll_aboveJZB50",doPF,true);
2839     // make_kin_plot("mll",jzbcut3.str(),(int)((mll_hi-mll_low)/5),mll_low,mll_hi,nolog,"m_{ll} [GeV]","mll_osof_aboveJZB50",doPF,true,true);
2840     // make_kin_plot("mll",jzbcut3.str(),(int)((mll_hi-mll_low)/5),mll_low,mll_hi,nolog,"m_{ll} [GeV]","mll_ee_aboveJZB50",doPF,true);
2841     // make_kin_plot("mll",jzbcut3.str(),(int)((mll_hi-mll_low)/5),mll_low,mll_hi,nolog,"m_{ll} [GeV]","mll_mm_aboveJZB50",doPF,true);
2842    
2843     // make_kin_plot("mll","met[4]>100",(int)((mll_hi-mll_low)/5),mll_low,mll_hi,nolog,"m_{ll} [GeV] (MET>100GeV)","mll_met100_ll",doPF,true);
2844     //make_kin_plot("mll","met[4]>150&&id1==0",(int)((mll_hi-mll_low)/5),mll_low,mll_hi,nolog,"m_{ee} [GeV] (MET>150GeV)","mll_met150_ee",doPF,true);
2845 buchmann 1.84 //make_kin_plot("mll","met[4]>150&&id1==1",(int)((mll_hi-mll_low)/5),mll_low,mll_hi,nolog,"m_{#mu#mu} [GeV] (MET>150GeV)","mll_met150_mm",doPF,true);*/
2846 fronga 1.54 }
2847 buchmann 1.88
2848 buchmann 1.95 int jzbcuts[7]={0,50,80,100,150,200,250};
2849     int MCorData[2]={data,mc};
2850    
2851 buchmann 1.97 for(int d=0;d<2;d++) {
2852 buchmann 1.95 for(int j=0;j<7;j++) {
2853     make_special_obs_pred_mll_plot(datajzb,mcjzb,jzbcuts[j],5.0,MCorData[d]); // 5.0 is the binwidth
2854     }
2855     }
2856    
2857 buchmann 1.88 /*
2858 buchmann 1.80 make_JES_plot(cutmass&&cutOSSF&&basiccut,"_ossf");
2859     make_JES_plot(cutmass&&cutOSOF&&basiccut,"_osof");
2860 buchmann 1.84 */
2861 buchmann 1.65 switch_overunderflow(false);
2862 buchmann 1.1 }
2863    
2864     void make_comp_plot( string var, string xlabel, string filename, float jzbcut, string mcjzb, string datajzb,
2865     int nbins, float xmin, float xmax, bool log,
2866     float ymin=0, float ymax=0, bool leftJustified=false ) {
2867 fronga 1.40 flag_this_change(__FUNCTION__,__LINE__,true);//PlottingSetup::RestrictToMassPeak ---- WATCH OUT: the argument in the function changed!
2868 buchmann 1.1
2869     TCut weightbackup=cutWeight;//backing up the correct weight (restoring below!)
2870     if(weightbackup==TCut("1.0")||weightbackup==TCut("1")) write_warning(__FUNCTION__,"WATCH OUT THE WEIGHT HAS POSSIBLY NOT BEEN RESET!!!! PLEASE CHANGE LINE "+any2string(__LINE__));
2871 fronga 1.40 //if(var=="numVtx") cutWeight=TCut("1.0");
2872 buchmann 1.1 TCut jzbData[]= { TCut(TString(datajzb+">"+any2string(jzbcut))),TCut(TString(datajzb+"<-"+any2string(jzbcut))) };
2873     TCut jzbMC[] = { TCut(TString(mcjzb+">"+any2string(jzbcut))),TCut(TString(mcjzb+"<-"+any2string(jzbcut))) };
2874    
2875     flag_this_change(__FUNCTION__,__LINE__,true);//PlottingSetup::RestrictToMassPeak ---- below: the next ~20 lines changed!
2876     int nRegions=4;
2877 buchmann 1.50 if(!PlottingSetup::RestrictToMassPeak||!PlottingSetup::UseSidebandsForcJZB) {
2878 buchmann 1.1 nRegions=2;
2879     }
2880    
2881     string sRegions[] = { "SFZP","OFZP","SFSB","OFSB" };
2882 buchmann 1.94 if(!RestrictToMassPeak) {
2883     sRegions[0]="SF";
2884     sRegions[1]="OF";
2885     }
2886 buchmann 1.1 TCut kRegions[] = { cutOSSF&&cutnJets&&cutmass, cutOSOF&&cutnJets&&cutmass,
2887     cutOSSF&&cutnJets&&sidebandcut, cutOSOF&&cutnJets&&sidebandcut };
2888    
2889     //find ymax
2890     TH1F *Refdatahisto = allsamples.Draw("datahisto", var,nbins,xmin,xmax,xlabel,"events",kRegions[0]&&jzbData[0],data,luminosity);
2891     ymax=int((Refdatahisto->GetMaximum()+2*TMath::Sqrt(Refdatahisto->GetMaximum()))*1.2+0.5);
2892     delete Refdatahisto;
2893    
2894     for ( int iregion=0; iregion<nRegions; ++iregion )
2895     for ( int ijzb=0; ijzb<2; ++ijzb ) {
2896     TCanvas *ccomp = new TCanvas("ccomp","Comparison plot",600,400);
2897     ccomp->SetLogy(log);
2898     TH1F *datahisto = allsamples.Draw("datahisto", var,nbins,xmin,xmax,xlabel,"events",kRegions[iregion]&&jzbData[ijzb],data,luminosity);
2899 fronga 1.40 TH1F *lm3histo = signalsamples.Draw("lm3histo", var,nbins,xmin,xmax,xlabel,"events",kRegions[iregion]&&jzbMC[ijzb],data,luminosity,signalsamples.FindSample("LM3"));
2900 buchmann 1.1 THStack mcstack = allsamples.DrawStack("mcstack",var,nbins,xmin,xmax,xlabel,"events",kRegions[iregion]&&jzbMC[ijzb], mc, luminosity);
2901     datahisto->SetMarkerSize(DataMarkerSize);
2902     if (ymax>ymin) datahisto->SetMaximum(ymax);
2903 fronga 1.40 lm3histo->SetLineStyle(2);
2904 buchmann 1.1 datahisto->Draw("e1");
2905 buchmann 1.73 mcstack.Draw("histo,same");
2906 buchmann 1.1 datahisto->Draw("same,e1");
2907 fronga 1.40 lm3histo->Draw("hist,same");
2908 buchmann 1.1 TLegend *kinleg = allsamples.allbglegend((sRegions[iregion]+(ijzb?"neg":"pos")).c_str());
2909     if ( leftJustified ) {
2910     Float_t w = kinleg->GetX2()-kinleg->GetX1();
2911     kinleg->SetX1(0.2);
2912     kinleg->SetX2(0.2+w);
2913     }
2914 fronga 1.40 kinleg->AddEntry(lm3histo,"LM3","l");
2915 buchmann 1.1 kinleg->Draw();
2916     TText* write_variable = write_text(0.99,0.01,var);
2917     write_variable->SetTextAlign(31);
2918     write_variable->SetTextSize(0.02);
2919     ccomp->RedrawAxis();
2920     CompleteSave(ccomp,"compare/JZBcut_at_"+any2string(jzbcut)+"/"+filename+"/"+filename+sRegions[iregion]+(ijzb?"neg":"pos"));
2921     delete datahisto;
2922     delete ccomp;
2923 fronga 1.40 delete lm3histo;
2924 buchmann 1.1 }
2925     cutWeight=weightbackup;
2926     }
2927    
2928    
2929     void region_comparison_plots(string mcjzb, string datajzb, vector<float> jzb_cuts) {
2930     dout << "Creating comparison plots for signal and control regions" << endl;
2931     // Compare a few quantities in the signal region and all 7 control regions
2932    
2933 buchmann 1.33 // switch_overunderflow(true); // switching overflow/underflow bins on
2934 buchmann 1.1
2935 buchmann 1.65 switch_overunderflow(true);
2936 buchmann 1.1 flag_this_change(__FUNCTION__,__LINE__,true);//PlottingSetup::RestrictToMassPeak ---- the arguments changed
2937 buchmann 1.16 for(int ijzb=0;ijzb<(int)jzb_cuts.size();ijzb++) {
2938 buchmann 1.1 float jzbcut=jzb_cuts[ijzb]; // Comparison plots are done for this JZB cut
2939     float mll_low=50;float mll_high=170;
2940     if(!PlottingSetup::RestrictToMassPeak) {
2941 fronga 1.40 mll_high=300;
2942     mll_low=20;
2943 buchmann 1.1 }
2944 fronga 1.40 make_comp_plot("pfJetGoodPt[0]/pfJetGoodPt[1]","pt_{j}^{1}/pt_{j}^{2}","j1j2ratio",jzbcut,mcjzb,datajzb,100,0,10,true);
2945     make_comp_plot("TMath::Abs(pfJetDphiMet[0])","|#Delta#phi(jet1,MET)|","dphiJ1MET",jzbcut,mcjzb,datajzb,32,0,3.2,false,0,0,true);
2946    
2947     make_comp_plot("mll","m_{ll} [GeV]","mll",jzbcut,mcjzb,datajzb,56,mll_low,mll_high,false,0,16.);
2948 buchmann 1.91 make_comp_plot("met[4]","E_{T}^{miss} [GeV]","pfmet",jzbcut,mcjzb,datajzb,18,0,360,false,0,16.);
2949 fronga 1.40 make_comp_plot("pfJetGoodNum40","#(jets)","njets",jzbcut,mcjzb,datajzb,10,0,10, false,0,35.);
2950     make_comp_plot("pfJetGoodNumBtag","#(b-jets)","nBjets",jzbcut,mcjzb,datajzb,10,0,10, false,0,35.);
2951 buchmann 1.1 make_comp_plot("pt","Z p_{T} [GeV]","Zpt",jzbcut,mcjzb,datajzb,26,0,525,false,0.,21.);
2952 fronga 1.40 make_comp_plot("numVtx","#(prim. vertices)","nvtx",jzbcut,mcjzb,datajzb,40,0.,40.,false,0,16.);
2953 buchmann 1.1 make_comp_plot("TMath::Abs(dphi)","#Delta#phi(leptons)","dphilep",jzbcut,mcjzb,datajzb,10,0.,3.1415,false,0,16.,true);
2954     make_comp_plot("TMath::Abs(dphi_sumJetVSZ[1])","#Delta#phi(Z,jets)","dphiZjets",jzbcut,mcjzb,datajzb,10,0.,3.1415,false,0,16.,true);
2955 fronga 1.40 make_comp_plot("eta1","#eta_1","eta1",jzbcut,mcjzb,datajzb,10,0.,2.5,false,0,16.);
2956     make_comp_plot("eta2","#eta_2","eta2",jzbcut,mcjzb,datajzb,10,0.,2.5,false,0,16.);
2957 buchmann 1.1 }
2958    
2959     switch_overunderflow(false); // switching overflow/underflow bins off
2960     }
2961    
2962    
2963    
2964     void do_kinematic_PF_plots(string mcjzb, string datajzb)
2965     {
2966     do_kinematic_plots(mcjzb,datajzb,true);
2967     }
2968    
2969     void signal_bg_comparison()
2970     {
2971     TCanvas *can = new TCanvas("can","Signal Background Comparison Canvas");
2972     can->SetLogy(1);
2973    
2974     int sbg_nbins=130;
2975     float sbg_min=-500; //-110;
2976     float sbg_max=800; //jzbHigh;
2977    
2978     float simulatedlumi=luminosity;//in pb please - adjust to your likings
2979    
2980 buchmann 1.95 TH1F *JZBplotZJETs = allsamples.Draw("JZBplotZJETs",jzbvariablemc,sbg_nbins,sbg_min,sbg_max, "JZB [GeV]", "events",cutmass&&cutOSSF&&cutnJets,mc,simulatedlumi,allsamples.FindSample("DYJetsToLL"));
2981 buchmann 1.7 TH1F *JZBplotLM4;
2982     if(PlottingSetup::RestrictToMassPeak) JZBplotLM4 = allsamples.Draw("JZBplotLM4",jzbvariablemc,sbg_nbins,sbg_min,sbg_max, "JZB [GeV]", "events",cutmass&&cutOSSF&&cutnJets,mc,simulatedlumi,allsamples.FindSample("LM4"));
2983     else JZBplotLM4 = allsamples.Draw("JZBplotLM4",jzbvariablemc,sbg_nbins,sbg_min,sbg_max, "JZB [GeV]", "events",cutmass&&cutOSSF&&cutnJets,mc,simulatedlumi,allsamples.FindSample("LM3"));
2984 buchmann 1.93 TH1F *JZBplotTtbar = allsamples.Draw("JZBplotTtbar",jzbvariablemc,sbg_nbins,sbg_min,sbg_max, "JZB [GeV]", "events",cutmass&&cutOSSF&&cutnJets,mc,simulatedlumi,allsamples.FindSample("TT_"));
2985 buchmann 1.1
2986     JZBplotTtbar->SetLineColor(allsamples.GetColor("TTJet"));
2987     JZBplotZJETs->SetFillColor(allsamples.GetColor("DY"));
2988     JZBplotZJETs->SetLineColor(kBlack);
2989     JZBplotLM4->SetLineStyle(2);
2990     JZBplotZJETs->SetMaximum(JZBplotZJETs->GetMaximum()*5);
2991     JZBplotZJETs->SetMinimum(1);
2992    
2993     JZBplotTtbar->SetMaximum(JZBplotZJETs->GetMaximum());
2994     JZBplotTtbar->SetMinimum(0.01);
2995 buchmann 1.94 JZBplotTtbar->SetFillColor(allsamples.GetColor("TT_"));
2996 buchmann 1.1 JZBplotTtbar->DrawClone("histo");
2997     JZBplotZJETs->Draw("histo,same");
2998     JZBplotTtbar->SetFillColor(0);
2999     JZBplotTtbar->DrawClone("histo,same");
3000 buchmann 1.94 JZBplotTtbar->SetFillColor(allsamples.GetColor("TT_"));
3001 buchmann 1.1 JZBplotLM4->Draw("histo,same");
3002    
3003    
3004     TLegend *signal_bg_comparison_leg2 = make_legend("",0.55,0.75,false);
3005     signal_bg_comparison_leg2->AddEntry(JZBplotZJETs,"Z+Jets","f");
3006     signal_bg_comparison_leg2->AddEntry(JZBplotTtbar,"t#bar{t}","f");
3007 buchmann 1.7 if(PlottingSetup::RestrictToMassPeak) signal_bg_comparison_leg2->AddEntry(JZBplotLM4,"LM4","f");
3008     else signal_bg_comparison_leg2->AddEntry(JZBplotLM4,"LM3","f");
3009 buchmann 1.1 signal_bg_comparison_leg2->Draw();
3010     DrawMCPrelim(simulatedlumi);
3011     CompleteSave(can,"jzb_bg_vs_signal_distribution");
3012    
3013     // Define illustrative set of SMS points
3014     TCut kSMS1("MassGlu==250&&MassLSP==75");
3015     TCut kSMS2("MassGlu==800&&MassLSP==200");
3016     TCut kSMS3("MassGlu==1050&&MassLSP==850");
3017     TCut kSMS4("MassGlu==1200&&MassLSP==100");
3018    
3019     //If the scan samples haven't been loaded yet, this is a good point to load them (all of them!)
3020     if((scansample.collection).size()<2) define_SMS_sample(false, allsamples, signalsamples, scansample, true); // loading ALL zones for the scans, not only the basic one.
3021    
3022    
3023     TH1F *JZBplotSMS1 = scansample.Draw("JZBplotSMS1",jzbvariablemc,sbg_nbins,sbg_min,sbg_max, "JZB [GeV]", "events",cutmass&&cutOSSF&&cutnJets&&kSMS1,mc,simulatedlumi,scansample.FindSample("t"));
3024     JZBplotSMS1->Scale(JZBplotLM4->Integral()/JZBplotSMS1->Integral());
3025    
3026     TH1F *JZBplotSMS2 = scansample.Draw("JZBplotSMS2",jzbvariablemc,sbg_nbins,sbg_min,sbg_max, "JZB [GeV]", "events",cutmass&&cutOSSF&&cutnJets&&kSMS2,mc,simulatedlumi,scansample.FindSample("t"));
3027     JZBplotSMS2->Scale(JZBplotLM4->Integral()/JZBplotSMS2->Integral());
3028    
3029     TH1F *JZBplotSMS3 = scansample.Draw("JZBplotSMS3",jzbvariablemc,sbg_nbins,sbg_min,sbg_max, "JZB [GeV]", "events",cutmass&&cutOSSF&&cutnJets&&kSMS3,mc,simulatedlumi,scansample.FindSample("t"));
3030     JZBplotSMS3->Scale(JZBplotLM4->Integral()/JZBplotSMS3->Integral());
3031    
3032     TH1F *JZBplotSMS4 = scansample.Draw("JZBplotSMS4",jzbvariablemc,sbg_nbins,sbg_min,sbg_max, "JZB [GeV]", "events",cutmass&&cutOSSF&&cutnJets&&kSMS4,mc,simulatedlumi,scansample.FindSample("t"));
3033     JZBplotSMS4->Scale(JZBplotLM4->Integral()/JZBplotSMS4->Integral());
3034    
3035     // Draw all plots overlaid
3036     JZBplotTtbar->SetMaximum(JZBplotZJETs->GetMaximum());
3037     JZBplotTtbar->SetMinimum(0.01);
3038 buchmann 1.94 JZBplotTtbar->SetFillColor(allsamples.GetColor("TT_"));
3039 buchmann 1.1 JZBplotTtbar->DrawClone("histo");
3040     JZBplotZJETs->Draw("histo,same");
3041     JZBplotTtbar->SetFillColor(0);
3042     JZBplotTtbar->DrawClone("histo,same");
3043 buchmann 1.94 JZBplotTtbar->SetFillColor(allsamples.GetColor("TT_"));
3044 buchmann 1.1
3045     JZBplotSMS1->SetLineColor(kRed+1);
3046     JZBplotSMS2->SetLineColor(kBlue+1);
3047     JZBplotSMS3->SetLineColor(kRed+1);
3048     JZBplotSMS4->SetLineColor(kBlue+1);
3049     JZBplotSMS3->SetLineStyle(2);
3050     JZBplotSMS4->SetLineStyle(2);
3051    
3052     JZBplotSMS1->Draw("histo,same");
3053     JZBplotSMS2->Draw("histo,same");
3054     JZBplotSMS3->Draw("histo,same");
3055     JZBplotSMS4->Draw("histo,same");
3056     JZBplotLM4->SetLineColor(kGreen);JZBplotLM4->Draw("histo,same");
3057     TLegend *signal_bg_comparison_leg6 = make_legend("",0.55,0.55,false);
3058     signal_bg_comparison_leg6->AddEntry(JZBplotZJETs,"Z+Jets","f");
3059     signal_bg_comparison_leg6->AddEntry(JZBplotTtbar,"t#bar{t}","f");
3060     signal_bg_comparison_leg6->AddEntry(JZBplotSMS1,"","");
3061     signal_bg_comparison_leg6->AddEntry(JZBplotSMS1,"SMS parameters","");
3062     signal_bg_comparison_leg6->AddEntry(JZBplotSMS1,"(250,75) [GeV]","f");
3063     signal_bg_comparison_leg6->AddEntry(JZBplotSMS2,"(800,200) [GeV]","f");
3064     signal_bg_comparison_leg6->AddEntry(JZBplotSMS3,"(1050,850) [GeV]","f");
3065     signal_bg_comparison_leg6->AddEntry(JZBplotSMS4,"(1200,100) [GeV]","f");
3066     signal_bg_comparison_leg6->AddEntry(JZBplotLM4,"LM4","f");
3067     signal_bg_comparison_leg6->Draw();
3068     DrawMCPrelim(simulatedlumi);
3069     CompleteSave(can,"jzb_bg_vs_signal_distribution_SMS__summary");
3070    
3071     while((scansample.collection).size() > 1) scansample.RemoveLastSample();
3072    
3073     }
3074    
3075     vector<TF1*> do_cb_fit_to_plot(TH1F *histo, float Sigma, float doingfitacrosstheboard=false) {
3076     TF1 *BpredFunc = new TF1("BpredFunc",InvCrystalBall,0,1000,5);
3077     BpredFunc->SetParameter(0,histo->GetBinContent(1));
3078     if(doingfitacrosstheboard) BpredFunc->SetParameter(0,histo->GetMaximum());
3079     BpredFunc->SetParameter(1,0.);
3080     if(method==1) BpredFunc->SetParameter(2,10*Sigma);//KM
3081     else BpredFunc->SetParameter(2,Sigma);//Gaussian based methods
3082     if(method==-99) BpredFunc->SetParameter(2,2.0*Sigma);//Kostas
3083     BpredFunc->SetParameter(3,1.8);
3084     BpredFunc->SetParameter(4,2.5);
3085     histo->Fit(BpredFunc,"QN0");
3086     BpredFunc->SetLineColor(kBlue);
3087    
3088     TF1 *BpredFuncP = new TF1("BpredFuncP",InvCrystalBallP,-1000,histo->GetBinLowEdge(histo->GetNbinsX())+histo->GetBinWidth(histo->GetNbinsX()),5);
3089     TF1 *BpredFuncN = new TF1("BpredFuncN",InvCrystalBallN,-1000,histo->GetBinLowEdge(histo->GetNbinsX())+histo->GetBinWidth(histo->GetNbinsX()),5);
3090    
3091     BpredFuncP->SetParameters(BpredFunc->GetParameters());
3092     BpredFuncP->SetLineColor(kBlue);
3093     BpredFuncP->SetLineStyle(2);
3094    
3095     BpredFuncN->SetParameters(BpredFunc->GetParameters());
3096     BpredFuncN->SetLineColor(kBlue);
3097     BpredFuncN->SetLineStyle(2);
3098    
3099     vector<TF1*> functions;
3100     functions.push_back(BpredFuncN);
3101     functions.push_back(BpredFunc);
3102     functions.push_back(BpredFuncP);
3103     return functions;
3104     }
3105    
3106    
3107     TF1* do_logpar_fit_to_plot(TH1F *osof) {
3108     TCanvas *logpar_fit_can = new TCanvas("logpar_fit_can","Fit canvas for LogPar");
3109     TF1 *logparfunc = new TF1("logparfunc",LogParabola,0,300,3);
3110     TF1 *logparfunc2 = new TF1("logparfunc2",LogParabola,0,(osof->GetXaxis()->GetBinLowEdge(osof->GetNbinsX())+osof->GetXaxis()->GetBinWidth(osof->GetNbinsX())),3);
3111     TF1 *logparfuncN = new TF1("logparfuncN",LogParabolaN,0,(osof->GetXaxis()->GetBinLowEdge(osof->GetNbinsX())+osof->GetXaxis()->GetBinWidth(osof->GetNbinsX())),3);
3112     TF1 *logparfuncP = new TF1("logparfuncP",LogParabolaP,0,(osof->GetXaxis()->GetBinLowEdge(osof->GetNbinsX())+osof->GetXaxis()->GetBinWidth(osof->GetNbinsX())),3);
3113     osof->SetMinimum(0);
3114     osof->Fit(logparfunc,"QR");
3115     osof->Draw();
3116     logparfunc->SetLineWidth(2);
3117     logparfunc2->SetParameters(logparfunc->GetParameters());
3118     logparfuncN->SetParameters(logparfunc->GetParameters());
3119     logparfuncP->SetParameters(logparfunc->GetParameters());
3120     stringstream fitinfo;
3121     fitinfo << "#Chi^{2} / NDF : " << logparfunc->GetChisquare() << " / " << logparfunc->GetNDF();
3122     TText *writefitinfo = write_text(0.8,0.8,fitinfo.str());
3123     writefitinfo->SetTextSize(0.03);
3124     DrawPrelim();
3125     writefitinfo->Draw();
3126     logparfunc->Draw("same");
3127     logparfunc2->Draw("same");
3128     logparfuncN->SetLineStyle(2);
3129     logparfuncP->SetLineStyle(2);
3130     logparfuncN->Draw("same");
3131     logparfuncP->Draw("same");
3132     CompleteSave(logpar_fit_can,"MakingOfBpredFunction/Bpred_Data_LogPar_Fit_To_TTbarPred");
3133     delete logpar_fit_can;
3134     return logparfunc2;
3135     }
3136    
3137     vector<TF1*> do_extended_fit_to_plot(TH1F *prediction, TH1F *Tprediction, TH1F *ossf, TH1F *osof,int isdata) {
3138     /* there are mainly two background contributions: Z+Jets (a) and ttbar (b). So:
3139     a) The case is clear - we take the OSSF prediction - OSOF prediction, and fit a crystal ball function to it. We then extract the CB parameters.
3140     b) For ttbar, we use the OSOF distribution and look at the [10,100] GeV JZB range, and fit our log parabola. We then extract the LP parameters.
3141     Once we have these two components, we use the combined parameters to get the final function and we're done.
3142     */
3143     //Step 1: take the OSSF prediction - OSOF prediction, and fit a crystal ball function to it
3144     TH1F *step1cb = (TH1F*)ossf->Clone("step1cb");
3145     step1cb->Add(osof,-1);
3146     vector<TF1*> functions = do_cb_fit_to_plot(step1cb,PlottingSetup::JZBPeakWidthData);
3147     TF1 *zjetscrystalball = functions[1];
3148    
3149     //Step 2: use the OSOF distribution and look at the [10,100] GeV JZB range, and fit our log parabola
3150     // TH1F *ttbarprediction=(TH1F*)prediction->Clone("ttbarprediction");
3151     // ttbarprediction->Add(ossf,-1);//without the Z+Jets estimate, this is really just the ttbar estimate!
3152     // the line above is not necessary anymore as we're now looking at a prediction without Z+Jets, and not multiplied with (1.0/3)
3153     TF1 *ttbarlogpar = do_logpar_fit_to_plot(Tprediction);
3154     flag_this_change(__FUNCTION__,__LINE__,true);//PlottingSetup::RestrictToMassPeak
3155 buchmann 1.50 if(PlottingSetup::RestrictToMassPeak&&PlottingSetup::UseSidebandsForcJZB) ttbarlogpar->SetParameter(0,1.0/3*ttbarlogpar->GetParameter(0));//correcting for the fact that we didn't multiply with (1.0/3);
3156 buchmann 1.1
3157    
3158     TF1 *ttbarlogparP = new TF1("ttbarlogparP",LogParabolaP,0,(prediction->GetXaxis()->GetBinLowEdge(prediction->GetNbinsX())+prediction->GetXaxis()->GetBinWidth(prediction->GetNbinsX())),8);
3159     TF1 *ttbarlogparN = new TF1("ttbarlogparN",LogParabolaN,0,(prediction->GetXaxis()->GetBinLowEdge(prediction->GetNbinsX())+prediction->GetXaxis()->GetBinWidth(prediction->GetNbinsX())),8);
3160    
3161     //and now fuse the two!
3162     TF1 *kmlp = new TF1("kmlp", CrystalBallPlusLogParabola, 0,(prediction->GetXaxis()->GetBinLowEdge(prediction->GetNbinsX())+prediction->GetXaxis()->GetBinWidth(prediction->GetNbinsX())),8);
3163     TF1 *kmlpP= new TF1("kmlpP",CrystalBallPlusLogParabolaP,0,(prediction->GetXaxis()->GetBinLowEdge(prediction->GetNbinsX())+prediction->GetXaxis()->GetBinWidth(prediction->GetNbinsX())),8);
3164     TF1 *kmlpN= new TF1("kmlpN",CrystalBallPlusLogParabolaN,0,(prediction->GetXaxis()->GetBinLowEdge(prediction->GetNbinsX())+prediction->GetXaxis()->GetBinWidth(prediction->GetNbinsX())),8);
3165     double kmlp_pars[10];
3166     for(int i=0;i<5;i++) kmlp_pars[i]=zjetscrystalball->GetParameter(i);
3167     for(int i=0;i<3;i++) kmlp_pars[5+i]=ttbarlogpar->GetParameter(i);
3168     ttbarlogparP->SetParameters(ttbarlogpar->GetParameters());
3169     ttbarlogparN->SetParameters(ttbarlogpar->GetParameters());
3170     kmlp->SetParameters(kmlp_pars);
3171     prediction->Fit(kmlp,"Q");//fitting the final result (done this in the past but kicked it)
3172     /*
3173     if you want to start from scratch (without the partial fitting and only fitting the whole thing, some good start values could be :
3174     */
3175     kmlp_pars[0]=kmlp->GetParameter(0);
3176     kmlp_pars[1]=3.6198;
3177     kmlp_pars[2]=16.4664;
3178     kmlp_pars[3]=1.92253;
3179     kmlp_pars[4]=3.56099;
3180     kmlp_pars[5]=5.83;
3181     kmlp_pars[6]=0.000757479;
3182     kmlp_pars[7]=95.6157;
3183     kmlp_pars[8]=0;
3184     kmlp_pars[9]=0;
3185     kmlp->SetParameters(kmlp_pars);
3186     /**/
3187     prediction->Fit(kmlp,"Q");//fitting the final result (done this in the past but kicked it)
3188    
3189     kmlpP->SetParameters(kmlp->GetParameters());
3190     kmlpN->SetParameters(kmlp->GetParameters());
3191    
3192     // now that we're done, let's save all of this so we can have a look at it afterwards.
3193     TCanvas *can = new TCanvas("can","Prediction Fit Canvas");
3194     can->SetLogy(1);
3195     prediction->SetMarkerColor(kRed);
3196     prediction->Draw();
3197    
3198     kmlp->SetLineColor(TColor::GetColor("#04B404"));
3199     kmlpP->SetLineColor(TColor::GetColor("#04B404"));
3200     kmlpN->SetLineColor(TColor::GetColor("#04B404"));
3201     kmlp->Draw("same");
3202     kmlpN->SetLineStyle(2);
3203     kmlpP->SetLineStyle(2);
3204     kmlpN->Draw("same");
3205     kmlpP->Draw("same");
3206    
3207     ttbarlogpar->SetLineColor(TColor::GetColor("#CC2EFA"));//purple
3208     ttbarlogpar->Draw("same");
3209     ttbarlogparP->SetLineColor(TColor::GetColor("#CC2EFA"));//purple
3210     ttbarlogparN->SetLineColor(TColor::GetColor("#CC2EFA"));//purple
3211     ttbarlogparP->SetLineStyle(2);
3212     ttbarlogparN->SetLineStyle(2);
3213     ttbarlogparP->Draw("same");
3214     ttbarlogparN->Draw("same");
3215    
3216     functions[0]->Draw("same");functions[1]->Draw("same");functions[2]->Draw("same");
3217    
3218     TLegend *analyticalBpredLEG = make_legend("",0.5,0.55);
3219     analyticalBpredLEG->AddEntry(prediction,"predicted","p");
3220     analyticalBpredLEG->AddEntry(functions[1],"Crystal Ball fit","l");
3221     analyticalBpredLEG->AddEntry(functions[0],"1#sigma Crystal Ball fit","l");
3222     analyticalBpredLEG->AddEntry(ttbarlogparN,"TTbar fit","l");
3223     analyticalBpredLEG->AddEntry(ttbarlogpar,"1#sigma TTbar fit","l");
3224     analyticalBpredLEG->AddEntry(kmlp,"Combined function","l");
3225     analyticalBpredLEG->AddEntry(kmlpN,"1#sigma combined function","l");
3226     analyticalBpredLEG->Draw("same");
3227    
3228     if(isdata==0) CompleteSave(can,"MakingOfBpredFunction/Bpred_MC_Analytical_Function_Composition");
3229     if(isdata==1) CompleteSave(can,"MakingOfBpredFunction/Bpred_data_Analytical_Function_Composition");
3230     if(isdata==2) CompleteSave(can,"MakingOfBpredFunction/Bpred_MCBnS_Analytical_Function_Composition");
3231     delete can;
3232    
3233     //and finally: prep return functions
3234     vector<TF1*> return_functions;
3235     return_functions.push_back(kmlpN);
3236     return_functions.push_back(kmlp);
3237     return_functions.push_back(kmlpP);
3238    
3239     return_functions.push_back(ttbarlogparN);
3240     return_functions.push_back(ttbarlogpar);
3241     return_functions.push_back(ttbarlogparP);
3242    
3243     return_functions.push_back(functions[0]);
3244     return_functions.push_back(functions[1]);
3245     return_functions.push_back(functions[2]);
3246    
3247     return return_functions;
3248     }
3249    
3250 buchmann 1.93 void do_prediction_plot(TCut addcut, string Cname, string jzb, TCanvas *globalcanvas, float high, int use_data, bool overlay_signal = false,string subdir="" )
3251 buchmann 1.1 {
3252 buchmann 1.65
3253 buchmann 1.1 bool is_data=false;
3254     bool use_signal=false;
3255     if(use_data==1) is_data=true;
3256     if(use_data==2) use_signal=true;
3257 buchmann 1.65 int nbins=int(high/10);//100;
3258     if(is_data) nbins=int(high/10);
3259 buchmann 1.1 float low=0;
3260 buchmann 1.65 float hi=high;
3261    
3262     stringstream cutpositiveS;
3263     cutpositiveS << "(" << jzb << ">0)";
3264     TCut cutpositive(cutpositiveS.str().c_str());
3265     stringstream cutnegativeS;
3266     cutnegativeS << "(" << jzb << "<0)";
3267     TCut cutnegative(cutnegativeS.str().c_str());
3268    
3269 buchmann 1.10
3270 buchmann 1.1 TH1F *blankback = new TH1F("blankback","blankback",int(high/10),0,high);
3271 buchmann 1.93 TH1F *RcorrJZBeemm = allsamples.Draw("RcorrJZBeemm",jzb.c_str(),nbins,low,hi, "JZB [GeV]", "events", addcut&&cutpositive&&cutmass&&cutOSSF&&cutnJets,is_data, luminosity,use_signal);
3272     TH1F *LcorrJZBeemm = allsamples.Draw("LcorrJZBeemm",("-"+jzb).c_str(),nbins,low,hi, "JZB [GeV]", "events", addcut&&cutnegative&&cutmass&&cutOSSF&&cutnJets,is_data, luminosity,use_signal);
3273     TH1F *RcorrJZBem = allsamples.Draw("RcorrJZBem",jzb.c_str(),nbins,low,hi, "JZB [GeV]", "events", addcut&&cutpositive&&cutmass&&cutOSOF&&cutnJets,is_data, luminosity,use_signal);
3274     TH1F *LcorrJZBem = allsamples.Draw("LcorrJZBem",("-"+jzb).c_str(),nbins,low,hi, "JZB [GeV]", "events", addcut&&cutnegative&&cutmass&&cutOSOF&&cutnJets,is_data, luminosity,use_signal);
3275 buchmann 1.10
3276 buchmann 1.1 blankback->GetXaxis()->SetTitle(RcorrJZBeemm->GetXaxis()->GetTitle());
3277     blankback->GetYaxis()->SetTitle(RcorrJZBeemm->GetYaxis()->GetTitle());
3278     blankback->GetXaxis()->CenterTitle();
3279     blankback->GetYaxis()->CenterTitle();
3280    
3281     flag_this_change(__FUNCTION__,__LINE__,true);//PlottingSetup::RestrictToMassPeak ---- prediction changed.
3282     TH1F *RcorrJZBSBem;
3283     TH1F *LcorrJZBSBem;
3284     TH1F *RcorrJZBSBeemm;
3285     TH1F *LcorrJZBSBeemm;
3286    
3287     TH1F *RcorrJZBeemmNoS;
3288    
3289 buchmann 1.65 //these are for the ratio
3290 buchmann 1.93 TH1F *JRcorrJZBeemm = allsamples.Draw("JRcorrJZBeemm",jzb.c_str(),PlottingSetup::global_ratio_binning, "JZB [GeV]", "events", addcut&&cutpositive&&cutmass&&cutOSSF&&cutnJets,is_data, luminosity,use_signal);
3291     TH1F *JLcorrJZBeemm = allsamples.Draw("JLcorrJZBeemm",("-"+jzb).c_str(),PlottingSetup::global_ratio_binning, "JZB [GeV]", "events", addcut&&cutnegative&&cutmass&&cutOSSF&&cutnJets,is_data, luminosity,use_signal);
3292     TH1F *JRcorrJZBem = allsamples.Draw("JRcorrJZBem",jzb.c_str(),PlottingSetup::global_ratio_binning, "JZB [GeV]", "events", addcut&&cutpositive&&cutmass&&cutOSOF&&cutnJets,is_data, luminosity,use_signal);
3293     TH1F *JLcorrJZBem = allsamples.Draw("JLcorrJZBem",("-"+jzb).c_str(),PlottingSetup::global_ratio_binning, "JZB [GeV]", "events", addcut&&cutnegative&&cutmass&&cutOSOF&&cutnJets,is_data, luminosity,use_signal);
3294 buchmann 1.1
3295     TH1F *JRcorrJZBSBem;
3296     TH1F *JLcorrJZBSBem;
3297     TH1F *JRcorrJZBSBeemm;
3298     TH1F *JLcorrJZBSBeemm;
3299    
3300 buchmann 1.93 if(use_data==2 || overlay_signal) RcorrJZBeemmNoS = allsamples.Draw("RcorrJZBeemmNoS",jzb.c_str(),nbins,low,hi, "JZB [GeV]", "events", addcut&&cutpositive&&cutmass&&cutOSSF&&cutnJets,is_data, luminosity,false);
3301 buchmann 1.1
3302    
3303 buchmann 1.50 if(PlottingSetup::RestrictToMassPeak&&PlottingSetup::UseSidebandsForcJZB) {
3304 buchmann 1.93 RcorrJZBSBem = allsamples.Draw("RcorrJZBSBem",jzb.c_str(),nbins,low,hi, "JZB [GeV]", "events", addcut&&cutpositive&&sidebandcut&&cutOSOF&&cutnJets,is_data, luminosity,use_signal);
3305     LcorrJZBSBem = allsamples.Draw("LcorrJZBSBem",("-"+jzb).c_str(),nbins,low,hi, "JZB [GeV]", "events", addcut&&cutnegative&&sidebandcut&&cutOSOF&&cutnJets,is_data, luminosity,use_signal);
3306     RcorrJZBSBeemm = allsamples.Draw("RcorrJZBSBeemm",jzb.c_str(),nbins,low,hi, "JZB [GeV]", "events", addcut&&cutpositive&&sidebandcut&&cutOSSF&&cutnJets,is_data, luminosity,use_signal);
3307     LcorrJZBSBeemm = allsamples.Draw("LcorrJZBSBeemm",("-"+jzb).c_str(),nbins,low,hi, "JZB [GeV]", "events", addcut&&cutnegative&&sidebandcut&&cutOSSF&&cutnJets,is_data, luminosity,use_signal);
3308 buchmann 1.10
3309 buchmann 1.1 //these are for the ratio
3310 buchmann 1.93 JRcorrJZBSBem = allsamples.Draw("JRcorrJZBSBem",jzb.c_str(),PlottingSetup::global_ratio_binning, "JZB [GeV]", "events", addcut&&cutpositive&&sidebandcut&&cutOSOF&&cutnJets,is_data, luminosity,use_signal);
3311     JLcorrJZBSBem = allsamples.Draw("JLcorrJZBSBem",("-"+jzb).c_str(),PlottingSetup::global_ratio_binning, "JZB [GeV]", "events", addcut&&cutnegative&&sidebandcut&&cutOSOF&&cutnJets,is_data, luminosity,use_signal);
3312     JRcorrJZBSBeemm = allsamples.Draw("JRcorrJZBSBeemm",jzb.c_str(),PlottingSetup::global_ratio_binning, "JZB [GeV]", "events", addcut&&cutpositive&&sidebandcut&&cutOSSF&&cutnJets,is_data, luminosity,use_signal);
3313     JLcorrJZBSBeemm = allsamples.Draw("JLcorrJZBSBeemm",("-"+jzb).c_str(),PlottingSetup::global_ratio_binning, "JZB [GeV]", "events", addcut&&cutnegative&&sidebandcut&&cutOSSF&&cutnJets,is_data, luminosity,use_signal);
3314 buchmann 1.1 }
3315    
3316     TH1F *lm4RcorrJZBeemm;
3317 buchmann 1.93 if(overlay_signal || use_data == 2 || use_data == 1) lm4RcorrJZBeemm = allsamples.Draw("lm4RcorrJZBSBeemm",jzb.c_str(),nbins,low,hi, "JZB [GeV]", "events", addcut&&cutpositive&&cutmass&&cutOSSF&&cutnJets,is_data, luminosity,allsamples.FindSample("LM"));
3318 buchmann 1.1
3319     flag_this_change(__FUNCTION__,__LINE__,true);//PlottingSetup::RestrictToMassPeak ---- prediction changed.
3320    
3321     TH1F *Zjetspred = (TH1F*)LcorrJZBeemm->Clone("Zjetspred");
3322     TH1F *TTbarpred = (TH1F*)RcorrJZBem->Clone("TTbarpred");
3323    
3324     TH1F *Bpred = (TH1F*)LcorrJZBeemm->Clone("Bpred");
3325     TH1F *JBpred = (TH1F*)JLcorrJZBeemm->Clone("Bpred");
3326 buchmann 1.23
3327 buchmann 1.26 TH1F *BpredSys = new TH1F("Bpredsys","Bpredsys",PlottingSetup::global_ratio_binning.size()-1,&PlottingSetup::global_ratio_binning[0]);
3328 buchmann 1.23 ClearHisto(BpredSys);
3329    
3330 buchmann 1.50 if(PlottingSetup::RestrictToMassPeak&&PlottingSetup::UseSidebandsForcJZB) {
3331 buchmann 1.1 Bpred->Add(RcorrJZBem,1.0/3.);
3332     Bpred->Add(LcorrJZBem,-1.0/3.);
3333     Bpred->Add(RcorrJZBSBem,1.0/3.);
3334     Bpred->Add(LcorrJZBSBem,-1.0/3.);
3335     Bpred->Add(RcorrJZBSBeemm,1.0/3.);
3336     Bpred->Add(LcorrJZBSBeemm,-1.0/3.);
3337    
3338     TTbarpred->Scale(1.0/3);
3339     Zjetspred->Add(LcorrJZBem,-1.0/3.);
3340     Zjetspred->Add(LcorrJZBSBem,-1.0/3.);
3341     TTbarpred->Add(RcorrJZBSBem,1.0/3.);
3342     Zjetspred->Add(LcorrJZBSBeemm,-1.0/3.);
3343     TTbarpred->Add(RcorrJZBSBeemm,1.0/3.);
3344    
3345     //these are for the ratio
3346     JBpred->Add(JRcorrJZBem,1.0/3.);
3347     JBpred->Add(JLcorrJZBem,-1.0/3.);
3348     JBpred->Add(JRcorrJZBSBem,1.0/3.);
3349     JBpred->Add(JLcorrJZBSBem,-1.0/3.);
3350     JBpred->Add(JRcorrJZBSBeemm,1.0/3.);
3351     JBpred->Add(JLcorrJZBSBeemm,-1.0/3.);
3352 buchmann 1.23
3353     //Systematics:
3354 buchmann 1.26 AddSquared(BpredSys,JLcorrJZBeemm,zjetsestimateuncertONPEAK*zjetsestimateuncertONPEAK);
3355     AddSquared(BpredSys,JRcorrJZBem,emuncertONPEAK*emuncertONPEAK*(1.0/9));
3356     AddSquared(BpredSys,JLcorrJZBem,emuncertONPEAK*emuncertONPEAK*(1.0/9));
3357     AddSquared(BpredSys,JRcorrJZBSBem,emsidebanduncertONPEAK*emsidebanduncertONPEAK*(1.0/9));
3358     AddSquared(BpredSys,JLcorrJZBSBem,emsidebanduncertONPEAK*emsidebanduncertONPEAK*(1.0/9));
3359     AddSquared(BpredSys,JRcorrJZBSBeemm,eemmsidebanduncertONPEAK*eemmsidebanduncertONPEAK*(1.0/9));
3360     AddSquared(BpredSys,JLcorrJZBSBeemm,eemmsidebanduncertONPEAK*eemmsidebanduncertONPEAK*(1.0/9));
3361 buchmann 1.1 } else {
3362     Bpred->Add(RcorrJZBem,1.0);
3363     Bpred->Add(LcorrJZBem,-1.0);
3364    
3365     Zjetspred->Add(LcorrJZBem,-1.0);
3366    
3367     //these are for the ratio
3368     JBpred->Add(JRcorrJZBem,1.0);
3369     JBpred->Add(JLcorrJZBem,-1.0);
3370 buchmann 1.23
3371     //Systematics
3372 buchmann 1.26 AddSquared(BpredSys,JLcorrJZBeemm,zjetsestimateuncertOFFPEAK*zjetsestimateuncertOFFPEAK);
3373     AddSquared(BpredSys,JRcorrJZBem,emuncertOFFPEAK*emuncertOFFPEAK);
3374     AddSquared(BpredSys,JLcorrJZBem,emuncertOFFPEAK*emuncertOFFPEAK);
3375 buchmann 1.23
3376 buchmann 1.1 }
3377    
3378 buchmann 1.23 SQRT(BpredSys);
3379 buchmann 1.26 BpredSys->Divide(JBpred);
3380 buchmann 1.23
3381 buchmann 1.1 flag_this_change(__FUNCTION__,__LINE__,true);//PlottingSetup::RestrictToMassPeak ---- prediction changed
3382     TH1F *Tpred = (TH1F*)RcorrJZBem->Clone("Bpred");
3383     Tpred->Add(LcorrJZBem,-1.0);
3384 buchmann 1.50 if(PlottingSetup::RestrictToMassPeak&&PlottingSetup::UseSidebandsForcJZB) {
3385 buchmann 1.1 Tpred->Add(RcorrJZBSBem,1.0);
3386     Tpred->Add(LcorrJZBSBem,-1.0);
3387     Tpred->Add(RcorrJZBSBeemm,1.0);
3388     Tpred->Add(LcorrJZBSBeemm,-1.0);
3389     }
3390    
3391     globalcanvas->cd();
3392     globalcanvas->SetLogy(1);
3393    
3394     RcorrJZBeemm->SetMarkerStyle(20);
3395     RcorrJZBeemm->GetXaxis()->SetRangeUser(0,high);
3396     RcorrJZBeemm->SetMinimum(0.1);
3397    
3398     Bpred->SetLineColor(kRed);
3399     Bpred->SetStats(0);
3400    
3401     int versok=false;
3402     if(gROOT->GetVersionInt()>=53000) versok=true;
3403    
3404    
3405     if ( overlay_signal || use_data==2 ) lm4RcorrJZBeemm->SetLineColor(TColor::GetColor("#088A08"));
3406     RcorrJZBeemm->SetMarkerSize(DataMarkerSize);
3407    
3408     TLegend *legBpred = make_legend("",0.6,0.55);
3409     TLegend *legBpred2 = make_legend("",0.6,0.55);
3410    
3411    
3412     vector<TF1*> analytical_function;
3413     TPad *kinpad = new TPad("kinpad","kinpad",0,0,1,1);
3414     kinpad->cd();
3415     kinpad->SetLogy(1);
3416    
3417     string Bpredsaveas="Bpred_Data";
3418     blankback->SetMaximum(5*RcorrJZBeemm->GetMaximum());
3419     blankback->SetMinimum(0.1);
3420     if(use_data!=1) blankback->SetMinimum(0.1);
3421     blankback->Draw();
3422     if(use_data==1)
3423     {
3424 buchmann 1.14 //Bpred->SetLineWidth(3); //paper style.overruled.
3425     //lm4RcorrJZBeemm->SetLineWidth(3); //paper style.overruled.
3426 buchmann 1.1 analytical_function = do_extended_fit_to_plot(Bpred,Tpred,LcorrJZBeemm,LcorrJZBem,is_data);
3427     kinpad->cd();//necessary because the extended fit function creates its own canvas
3428     RcorrJZBeemm->Draw("e1x0,same");
3429    
3430     Bpred->Draw("hist,same");
3431 buchmann 1.14 //analytical_function[0]->Draw("same"); analytical_function[1]->Draw("same");analytical_function[2]->Draw("same");
3432 buchmann 1.1 RcorrJZBeemm->Draw("e1x0,same");//HAVE IT ON TOP!
3433 buchmann 1.66 //lm4RcorrJZBeemm->Draw("hist,same");
3434 buchmann 1.1 legBpred->AddEntry(RcorrJZBeemm,"observed","p");
3435     legBpred->AddEntry(Bpred,"predicted","l");
3436 buchmann 1.24 // legBpred->AddEntry(analytical_function[1],"predicted fit","l");
3437     // legBpred->AddEntry(analytical_function[2],"stat. uncert.","l");
3438 buchmann 1.66 // legBpred->AddEntry(lm4RcorrJZBeemm,(allsamples.collection[allsamples.FindSample("LM")[0]].samplename).c_str(),"l");
3439 buchmann 1.1 legBpred->Draw();
3440     DrawPrelim();
3441    
3442     //this plot shows what the prediction is composed of
3443 buchmann 1.10 TPad *predcomppad = new TPad("predcomppad","predcomppad",0,0,1,1);
3444     float CurrentBpredLineWidth=Bpred->GetLineWidth();
3445     Bpred->SetLineWidth(2);
3446     predcomppad->cd();
3447     predcomppad->SetLogy(1);
3448     TH1F *jzbnegative = (TH1F*)LcorrJZBeemm->Clone("jzbnegative");
3449     TH1F *sidebandsemu = (TH1F*)Bpred->Clone("sidebandsemu");
3450     sidebandsemu->Add(jzbnegative,-1);
3451    
3452     jzbnegative->SetFillColor(allsamples.GetColor((allsamples.FindSample("DY"))[0]));
3453     jzbnegative->SetLineColor(allsamples.GetColor((allsamples.FindSample("DY"))[0]));
3454 buchmann 1.94 sidebandsemu->SetLineColor(allsamples.GetColor((allsamples.FindSample("TT_"))[0]));
3455     sidebandsemu->SetFillColor(allsamples.GetColor((allsamples.FindSample("TT_"))[0]));
3456 buchmann 1.10
3457 buchmann 1.1 THStack predcomposition("predcomposition","prediction composition");
3458 buchmann 1.10 predcomposition.Add(sidebandsemu);
3459     predcomposition.Add(jzbnegative);
3460 buchmann 1.1 blankback->Draw();
3461     RcorrJZBeemm->Draw("e1x0,same");
3462     predcomposition.Draw("histo,same");//
3463     Bpred->Draw("hist,same");
3464 buchmann 1.10 // analytical_function[0]->Draw("same"); analytical_function[1]->Draw("same");analytical_function[2]->Draw("same");
3465 buchmann 1.1 RcorrJZBeemm->Draw("e1x0,same");//HAVE IT ON TOP!
3466 buchmann 1.14 // lm4RcorrJZBeemm->SetLineColor(kOrange+1);
3467 buchmann 1.10 lm4RcorrJZBeemm->SetLineWidth(2);
3468 buchmann 1.14 //lm4RcorrJZBeemm->SetLineWidth(2); // paper style. overruled.
3469 buchmann 1.66 // lm4RcorrJZBeemm->Draw("histo,same");
3470 buchmann 1.1 DrawPrelim();
3471 buchmann 1.10 TLegend *speciallegBpred = make_legend("",0.45,0.55);
3472 buchmann 1.14 //TLegend *speciallegBpred = make_legend("",0.35,0.55); // paper style. overruled.
3473 buchmann 1.10 speciallegBpred->AddEntry(RcorrJZBeemm,"Data","pl");
3474     speciallegBpred->AddEntry(Bpred,"Total background","l");
3475     speciallegBpred->AddEntry(jzbnegative,"JZB<0 (data)","f");
3476 buchmann 1.50 if(PlottingSetup::RestrictToMassPeak&&PlottingSetup::UseSidebandsForcJZB) speciallegBpred->AddEntry(sidebandsemu,"Sidebands/e#mu (data)","f");
3477 buchmann 1.30 else speciallegBpred->AddEntry(sidebandsemu,"e#mu (data)","f");
3478 buchmann 1.10 // speciallegBpred->AddEntry(lm4RcorrJZBeemmC,"LM4","l");
3479 buchmann 1.66 // speciallegBpred->AddEntry(lm4RcorrJZBeemm,"LM4","l");
3480 buchmann 1.10 speciallegBpred->Draw();
3481 buchmann 1.95 Save_With_Ratio(JRcorrJZBeemm,JBpred,predcomppad,subdir+"Bpred_Data_____PredictionComposition"+Cname,true,true,"data/pred",BpredSys);
3482 buchmann 1.79 delete predcomppad;
3483 buchmann 1.10
3484     TCanvas *specialcanv = new TCanvas("specialcanv","specialcanv");
3485 buchmann 1.30 specialcanv->SetLogy(1);
3486     // THStack kostack = allsamples.DrawStack("RcorrJZBeemm",jzb.c_str(),nbins,low,hi, "JZB [GeV]", "events", cutmass&&cutOSSF&&cutnJets,!is_data, luminosity,use_signal);
3487 buchmann 1.1 blankback->Draw();
3488 buchmann 1.30 // kostack.Draw("same");
3489 buchmann 1.73 predcomposition.Draw("hist");
3490 buchmann 1.1 Bpred->Draw("hist,same");
3491 buchmann 1.30 //analytical_function[0]->Draw("same"); analytical_function[1]->Draw("same");analytical_function[2]->Draw("same");
3492 buchmann 1.1 RcorrJZBeemm->Draw("e1x0,same");//HAVE IT ON TOP!
3493     legBpred->Draw();
3494     DrawPrelim();
3495 buchmann 1.12 CompleteSave(specialcanv,subdir+"Bpred_Data_____PredictionCompositioninMC");
3496 buchmann 1.10 Bpred->SetLineWidth((int)CurrentBpredLineWidth);
3497 buchmann 1.1
3498 buchmann 1.34
3499     //for(int i=1;i<=Bpred->GetNbinsX();i++) cout << Bpred->GetBinLowEdge(i) << ";" << Bpred->GetBinLowEdge(i)+Bpred->GetBinWidth(i) << ";;" << RcorrJZBeemm->GetBinContent(i) << ";" << LcorrJZBeemm->GetBinContent(i) << ";" << RcorrJZBem->GetBinContent(i) << ";" << LcorrJZBem->GetBinContent(i) << endl;
3500    
3501 buchmann 1.10 delete speciallegBpred;
3502 buchmann 1.1 delete Zjetspred;
3503     delete TTbarpred;
3504    
3505     kinpad->cd();
3506     }
3507     if(use_data==0) {
3508     RcorrJZBeemm->Draw("e1x0,same");
3509 buchmann 1.14 //Bpred->SetLineWidth(3); // paper style. overruled.
3510 buchmann 1.1 Bpred->Draw("hist,same");
3511     RcorrJZBeemm->Draw("e1x0,same");//HAVE IT ON TOP!
3512 buchmann 1.10 legBpred->AddEntry(RcorrJZBeemm,"MC true","p");
3513 buchmann 1.18 legBpred->AddEntry(Bpred,"MC predicted","l");
3514 buchmann 1.1 if(versok) legBpred->AddEntry((TObject*)0,"",""); // Just for alignment // causes seg fault on root v5.18
3515     if(versok) legBpred->AddEntry((TObject*)0,"",""); // causes seg fault on root v5.18
3516 buchmann 1.66 // if ( overlay_signal ) legBpred->AddEntry(lm4RcorrJZBeemm,"LM4","l");
3517 buchmann 1.1 legBpred->Draw();
3518     DrawMCPrelim();
3519     Bpredsaveas="Bpred_MC";
3520     // CompleteSave(globalcanvas,"Bpred_MC"); // done below in save_with_ratio
3521     }
3522     if(use_data==2) {
3523     RcorrJZBeemm->Draw("e1x0,same");
3524 buchmann 1.14 //Bpred->SetLineWidth(3); // paper style. overruled.
3525 buchmann 1.1 Bpred->Draw("hist,same");
3526     RcorrJZBeemm->Draw("e1x0,same");//HAVE IT ON TOP!
3527 buchmann 1.10 legBpred->AddEntry(RcorrJZBeemm,"MC true","p");
3528 buchmann 1.1 legBpred->AddEntry(Bpred,"MC predicted","l");
3529 buchmann 1.10 legBpred2->AddEntry(RcorrJZBeemm,"MC true","p");
3530 buchmann 1.1 legBpred2->AddEntry(Bpred,"MC predicted","l");
3531     {
3532     if(versok) legBpred->AddEntry((TObject*)0,"",""); // Just for alignment // causes seg fault on root v5.18 --> now only allowed for root >=v5.30
3533     if(versok) legBpred->AddEntry((TObject*)0,"",""); // causes seg fault on root v5.18 --> now only allowed for root >=v5.30
3534     legBpred->Draw();
3535     DrawMCPrelim();
3536     Bpredsaveas="Bpred_MCwithS";
3537     // CompleteSave(globalcanvas,"Bpred_MCwithS"); // done below in save_with_ratio
3538     }
3539     {
3540 buchmann 1.14 //lm4RcorrJZBeemm->SetLineWidth(3); //paper style. overruled.
3541     //RcorrJZBeemmNoS->SetLineWidth(3); //paper style. overruled.
3542     //lm4RcorrJZBeemm->SetLineStyle(2); //paper style. overruled.
3543     //RcorrJZBeemmNoS->SetLineStyle(3); //paper style. overruled.
3544     //lm4RcorrJZBeemm->SetLineColor(kOrange+1); //paper style. overruled.
3545    
3546 buchmann 1.1 RcorrJZBeemmNoS->SetLineStyle(2);
3547     legBpred2->AddEntry(RcorrJZBeemmNoS,"MC B","l");
3548 buchmann 1.95 legBpred2->AddEntry(lm4RcorrJZBeemm,"MC S","l");
3549 buchmann 1.1 legBpred2->Draw();
3550     RcorrJZBeemmNoS->SetLineColor(TColor::GetColor("#61210B"));
3551     RcorrJZBeemmNoS->Draw("histo,same");
3552     RcorrJZBeemm->Draw("e1x0,same");//HAVE IT ON TOP!
3553     lm4RcorrJZBeemm->Draw("histo,same");
3554     DrawMCPrelim();
3555     Bpredsaveas="Bpred_MCwithS__plus";
3556     // CompleteSave(globalcanvas,"Bpred_MCwithS__plus"); // done below in save_with_ratio
3557     }
3558     }
3559    
3560    
3561 buchmann 1.93 Bpredsaveas+="_"+Cname+"_";
3562 buchmann 1.1 //3rd last argument: do special bpred ratio, 2nd last argument: extended range!, last: y-axis title
3563     string ytitle("ratio");
3564     if ( use_data==1 ) ytitle = "data/pred";
3565 buchmann 1.8 //save_with_ratio(JRcorrJZBeemm,JBpred,kinpad,Bpredsaveas,true,use_data!=1,ytitle);
3566 buchmann 1.79 Save_With_Ratio(JRcorrJZBeemm,JBpred,kinpad,subdir+Bpredsaveas,true,false,ytitle,BpredSys);//not extending the y range anymore up to 4
3567    
3568     delete kinpad;
3569 buchmann 1.1
3570 buchmann 1.65
3571 buchmann 1.1
3572     flag_this_change(__FUNCTION__,__LINE__,true);//PlottingSetup::RestrictToMassPeak
3573 buchmann 1.24 // The part below is meaningless for the offpeak analysis (it's a comparison of the different estimates but there is but one estimate!)
3574 buchmann 1.50 if(PlottingSetup::RestrictToMassPeak&&PlottingSetup::UseSidebandsForcJZB) {
3575 buchmann 1.11 TH1F *Bpredem = (TH1F*)LcorrJZBeemm->Clone("Bpredem");
3576     Bpredem->Add(RcorrJZBem);
3577     Bpredem->Add(LcorrJZBem,-1);
3578     TH1F *BpredSBem = (TH1F*)LcorrJZBeemm->Clone("BpredSBem");
3579     BpredSBem->Add(RcorrJZBSBem);
3580     Bpred->Add(LcorrJZBSBem,-1);
3581     TH1F *BpredSBeemm = (TH1F*)LcorrJZBeemm->Clone("BpredSBeemm");
3582     BpredSBeemm->Add(RcorrJZBSBeemm);
3583     BpredSBeemm->Add(LcorrJZBSBeemm,-1.0);
3584     globalcanvas->cd();
3585     globalcanvas->SetLogy(1);
3586    
3587     RcorrJZBeemm->SetMarkerStyle(20);
3588     RcorrJZBeemm->GetXaxis()->SetRangeUser(0,high);
3589     blankback->Draw();
3590     RcorrJZBeemm->Draw("e1x0,same");
3591     RcorrJZBeemm->SetMarkerSize(DataMarkerSize);
3592    
3593     Bpredem->SetLineColor(kRed+1);
3594     Bpredem->SetStats(0);
3595     Bpredem->Draw("hist,same");
3596    
3597     BpredSBem->SetLineColor(kGreen+2);//TColor::GetColor("#0B6138"));
3598     BpredSBem->SetLineStyle(2);
3599     BpredSBem->Draw("hist,same");
3600    
3601     BpredSBeemm->SetLineColor(kBlue+1);
3602     BpredSBeemm->SetLineStyle(3);
3603     BpredSBeemm->Draw("hist,same");
3604     RcorrJZBeemm->Draw("e1x0,same");//HAVE IT ON TOP!
3605    
3606     TLegend *legBpredc = make_legend("",0.6,0.55);
3607     if(use_data==1)
3608     {
3609     legBpredc->AddEntry(RcorrJZBeemm,"observed","p");
3610 buchmann 1.94 if(RestrictToMassPeak) {
3611     legBpredc->AddEntry(Bpredem,"OFZP","l");
3612     legBpredc->AddEntry(BpredSBem,"OFSB","l");
3613     legBpredc->AddEntry(BpredSBeemm,"SFSB","l");
3614     } else legBpredc->AddEntry(Bpredem,"OF","l");
3615    
3616    
3617 buchmann 1.11 legBpredc->Draw();
3618 buchmann 1.12 CompleteSave(globalcanvas,subdir+"Bpred_Data_comparison");
3619 buchmann 1.11 }
3620     if(use_data==0) {
3621     legBpredc->AddEntry(RcorrJZBeemm,"MC true","p");
3622 buchmann 1.94 if(RestrictToMassPeak) {
3623     legBpredc->AddEntry(Bpredem,"MC OFZP","l");
3624     legBpredc->AddEntry(BpredSBem,"MC OFSB","l");
3625     legBpredc->AddEntry(BpredSBeemm,"MC SFSB","l");
3626     } else legBpredc->AddEntry(Bpredem,"MC OF","l");
3627    
3628 buchmann 1.11 legBpredc->Draw();
3629 buchmann 1.12 CompleteSave(globalcanvas,subdir+"Bpred_MC_comparison");
3630 buchmann 1.11 }
3631     if(use_data==2) {
3632     legBpredc->AddEntry(RcorrJZBeemm,"MC true","p");
3633 buchmann 1.94 if(RestrictToMassPeak) {
3634     legBpredc->AddEntry(Bpredem,"MC OFZP","l");
3635     legBpredc->AddEntry(BpredSBem,"MC OFSB","l");
3636     legBpredc->AddEntry(BpredSBeemm,"MC SFSB","l");
3637     } else {
3638     legBpredc->AddEntry(Bpredem,"MC OF","l");
3639     }
3640 buchmann 1.66 // if ( overlay_signal ) legBpred->AddEntry(lm4RcorrJZBeemm,"LM4","l");
3641 buchmann 1.11 legBpredc->Draw();
3642 buchmann 1.12 CompleteSave(globalcanvas,subdir+"Bpred_MCwithS_comparison");
3643 buchmann 1.11 }
3644     }
3645 buchmann 1.1
3646     delete RcorrJZBeemm;
3647     delete LcorrJZBeemm;
3648     delete RcorrJZBem;
3649     delete LcorrJZBem;
3650    
3651     delete JRcorrJZBeemm;
3652     delete JLcorrJZBeemm;
3653     delete JRcorrJZBem;
3654     delete JLcorrJZBem;
3655    
3656     delete blankback;
3657    
3658 buchmann 1.30 delete BpredSys;
3659 buchmann 1.50 if(PlottingSetup::RestrictToMassPeak&&PlottingSetup::UseSidebandsForcJZB) {
3660 buchmann 1.1 delete RcorrJZBSBem;
3661     delete LcorrJZBSBem;
3662     delete RcorrJZBSBeemm;
3663     delete LcorrJZBSBeemm;
3664    
3665     delete JRcorrJZBSBem;
3666     delete JLcorrJZBSBem;
3667     delete JRcorrJZBSBeemm;
3668     delete JLcorrJZBSBeemm;
3669     }
3670     if(overlay_signal || use_data==2) delete lm4RcorrJZBeemm;
3671     }
3672    
3673     void do_prediction_plots(string mcjzb, string datajzb, float DataSigma, float MCSigma, bool overlay_signal ) {
3674 buchmann 1.65 switch_overunderflow(true);
3675 buchmann 1.93
3676     TCut cuts[3] = {TCut("mll>0"),Restrmasscut,TCut("mll>20&&mll<70")};
3677     string cutnames[3] = {"NoMassCut","ZWindow","LowMassRegion2070"};
3678    
3679 buchmann 1.1 TCanvas *globalcanvas = new TCanvas("globalcanvas","Prediction Canvas");
3680 buchmann 1.93 for(int i=0;i<3;i++) {
3681     do_prediction_plot(cuts[i],cutnames[i],datajzb,globalcanvas,jzbHigh ,data,overlay_signal);
3682     if ( !PlottingSetup::Approved ) {
3683     do_prediction_plot(cuts[i],cutnames[i],mcjzb,globalcanvas,jzbHigh ,mc,overlay_signal);
3684     do_prediction_plot(cuts[i],cutnames[i],mcjzb,globalcanvas,jzbHigh ,mcwithsignal,overlay_signal);
3685     } else {
3686     write_info(__FUNCTION__,"You set approved to true, therefore not producing prediction/observation plots for MC with and without signal.");
3687     }
3688 buchmann 1.15 }
3689 buchmann 1.93
3690 buchmann 1.65 delete globalcanvas;
3691     switch_overunderflow(false);
3692 buchmann 1.1 }
3693    
3694     string give_jzb_expression(float peak, int type) {
3695     stringstream val;
3696     if(type==data) {
3697     if(peak<0) val << jzbvariabledata << "+" << TMath::Abs(peak);
3698     if(peak>0) val << jzbvariabledata << "-" << TMath::Abs(peak);
3699     if(peak==0) val << jzbvariabledata;
3700     }
3701     if(type==mc) {
3702     if(peak<0) val << jzbvariablemc << "+" << TMath::Abs(peak);
3703     if(peak>0) val << jzbvariablemc << "-" << TMath::Abs(peak);
3704     if(peak==0) val << jzbvariablemc;
3705     }
3706     return val.str();
3707     }
3708    
3709    
3710     void lepton_comparison_plots() {
3711     Float_t ymin = 1.e-5, ymax = 0.25;
3712     TCanvas *can = new TCanvas("can","Lepton Comparison Canvas");
3713     can->SetLogy(1);
3714 buchmann 1.95 TH1F *eemc = allsamples.Draw("eemc","mll",50,50,150, "mll [GeV]", "events", cutOSSF&&cutnJets&&"(id1==0)",mc, luminosity,allsamples.FindSample("DYJetsToLL"));
3715     TH1F *mmmc = allsamples.Draw("mmmc","mll",50,50,150, "mll [GeV]", "events", cutOSSF&&cutnJets&&"(id1==1)",mc, luminosity,allsamples.FindSample("DYJetsToLL"));
3716 buchmann 1.1 eemc->SetLineColor(kBlue);
3717     mmmc->SetLineColor(kRed);
3718     eemc->SetMinimum(0.1);
3719     eemc->SetMaximum(10*eemc->GetMaximum());
3720     eemc->Draw("histo");
3721     mmmc->Draw("histo,same");
3722     TLegend *leg = make_legend();
3723     leg->AddEntry(eemc,"ZJets->ee (MC)","l");
3724     leg->AddEntry(mmmc,"ZJets->#mu#mu (MC)","l");
3725     leg->Draw("same");
3726     CompleteSave(can, "lepton_comparison/mll_effratio_mc");
3727    
3728     TH1F *eed = allsamples.Draw("eed","mll",50,50,150, "mll [GeV]", "events", cutOSSF&&cutnJets&&"(id1==0)",data, luminosity);
3729     TH1F *mmd = allsamples.Draw("mmd","mll",50,50,150, "mll [GeV]", "events", cutOSSF&&cutnJets&&"(id1==1)",data, luminosity);
3730     eed->SetLineColor(kBlue);
3731     mmd->SetLineColor(kRed);
3732     eed->SetMinimum(0.1);
3733     eed->SetMaximum(10*eed->GetMaximum());
3734     eed->Draw("histo");
3735     mmd->Draw("histo,same");
3736     TLegend *leg2 = make_legend();
3737     leg2->AddEntry(eed,"ZJets->ee (data)","l");
3738     leg2->AddEntry(mmd,"ZJets->#mu#mu (data)","l");
3739     leg2->Draw();
3740     CompleteSave(can, "lepton_comparison/mll_effratio_data");
3741    
3742     TH1F *jeed = allsamples.Draw("jeed",jzbvariabledata, int((jzbHigh+150)/5),-150,jzbHigh , "JZB [GeV]", "events", cutOSSF&&cutnJets&&"(id1==0)",data, luminosity);
3743     TH1F *jmmd = allsamples.Draw("jmmd",jzbvariabledata, int((jzbHigh+150)/5),-150,jzbHigh , "JZB [GeV]", "events", cutOSSF&&cutnJets&&"(id1==1)",data, luminosity);
3744     TH1F *jeemmd = allsamples.Draw("jeemmd",jzbvariabledata,int((jzbHigh+150)/5),-150,jzbHigh , "JZB [GeV]", "events", cutOSSF&&cutnJets,data, luminosity);
3745     dout << "ee : " << jeed->GetMean() << "+/-" << jeed->GetMeanError() << endl;
3746     dout << "ee : " << jmmd->GetMean() << "+/-" << jmmd->GetMeanError() << endl;
3747     dout << "eemd : " << jeemmd->GetMean() << "+/-" << jeemmd->GetMeanError() << endl;
3748     jeemmd->SetLineColor(kBlack);
3749     jeemmd->SetMarkerStyle(25);
3750     jeed->SetLineColor(kBlue);
3751     jmmd->SetLineColor(kRed);
3752     jeed->SetMinimum(0.1);
3753     jeed->SetMaximum(10*eed->GetMaximum());
3754     TH1* njeemmd = jeemmd->DrawNormalized();
3755     njeemmd->SetMinimum(ymin);
3756     njeemmd->SetMaximum(ymax);
3757    
3758     jeed->DrawNormalized("histo,same");
3759     jmmd->DrawNormalized("histo,same");
3760     jeemmd->DrawNormalized("same");
3761     TLegend *jleg2 = make_legend(" ");
3762     jleg2->AddEntry(jeemmd,"ee and #mu#mu","p");
3763     jleg2->AddEntry(jeed,"ee","l");
3764     jleg2->AddEntry(jmmd,"#mu#mu","l");
3765     jleg2->Draw();
3766     CompleteSave(can,"lepton_comparison/jzb_effratio_data");
3767    
3768     TPad *eemmpad = new TPad("eemmpad","eemmpad",0,0,1,1);
3769     eemmpad->cd();
3770     eemmpad->SetLogy(1);
3771     jeed->Draw("histo");
3772     jmmd->Draw("histo,same");
3773     TLegend *eemmlegend = make_legend(" ");
3774     eemmlegend->AddEntry(jeed,"ee","l");
3775     eemmlegend->AddEntry(jmmd,"#mu#mu","l");
3776     eemmlegend->Draw();
3777     DrawPrelim();
3778 buchmann 1.79 Save_With_Ratio(jeed,jmmd,eemmpad->cd(),"lepton_comparison/jzb_Comparing_ee_mm_data");
3779 buchmann 1.1
3780 buchmann 1.95 TH1F *zjeed = allsamples.Draw("zjeed",jzbvariablemc, int((jzbHigh+150)/5),-150,jzbHigh , "JZB [GeV]", "events", cutmass&&cutOSSF&&cutnJets&&"(id1==0)",mc, luminosity,allsamples.FindSample("DYJetsToLL"));
3781     TH1F *zjmmd = allsamples.Draw("zjmmd",jzbvariablemc, int((jzbHigh+150)/5),-150,jzbHigh , "JZB [GeV]", "events", cutmass&&cutOSSF&&cutnJets&&"(id1==1)",mc, luminosity,allsamples.FindSample("DYJetsToLL"));
3782     TH1F *zjeemmd = allsamples.Draw("zjeemmd",jzbvariablemc,int((jzbHigh+150)/5),-150,jzbHigh , "JZB [GeV]", "events", cutmass&&cutOSSF&&cutnJets, mc, luminosity,allsamples.FindSample("DYJetsToLL"));
3783 buchmann 1.1 dout << "Z+Jets ee : " << zjeed->GetMean() << "+/-" << zjeed->GetMeanError() << endl;
3784     dout << "Z+Jets ee : " << zjmmd->GetMean() << "+/-" << zjmmd->GetMeanError() << endl;
3785     dout << "Z+Jets eemd : " << zjeemmd->GetMean() << "+/-" << zjeemmd->GetMeanError() << endl;
3786     zjeemmd->SetLineColor(kBlack);
3787     zjeemmd->SetMarkerStyle(25);
3788     zjeed->SetLineColor(kBlue);
3789     zjmmd->SetLineColor(kRed);
3790     zjeed->SetMinimum(0.1);
3791     zjeed->SetMaximum(10*eed->GetMaximum());
3792    
3793     TH1* nzjeemmd = zjeemmd->DrawNormalized();
3794     nzjeemmd->SetMinimum(ymin);
3795     nzjeemmd->SetMaximum(ymax);
3796     zjeed->DrawNormalized("histo,same");
3797     zjmmd->DrawNormalized("histo,same");
3798     zjeemmd->DrawNormalized("same");
3799     TLegend *zjleg2 = make_legend("Z+jets MC");
3800     zjleg2->AddEntry(jeemmd,"ee and #mu#mu","p");
3801     zjleg2->AddEntry(jeed,"ee","l");
3802     zjleg2->AddEntry(jmmd,"#mu#mu","l");
3803     zjleg2->Draw();
3804     CompleteSave(can,"lepton_comparison/jzb_effratio_ZJets");
3805    
3806     TH1F *ld = allsamples.Draw("ld","mll",50,50,150, "mll [GeV]", "events", cutOSSF&&cutnJets,data, luminosity);
3807     ld->DrawNormalized("e1");
3808     eed->DrawNormalized("histo,same");
3809     mmd->DrawNormalized("histo,same");
3810     TLegend *leg3 = make_legend();
3811     leg3->AddEntry(ld,"ZJets->ll (data)","p");
3812     leg3->AddEntry(eed,"ZJets->ee (data)","l");
3813     leg3->AddEntry(mmd,"ZJets->#mu#mu (data)","l");
3814     leg3->Draw();
3815     CompleteSave(can,"lepton_comparison/mll_effratio_data__all_compared");
3816     /*
3817     TH1F *jzbld = allsamples.Draw("jzbld",jzbvariable,75,-150,150, "JZB [GeV]", "events", cutmass&&cutOSSF&&cutnJets,data, luminosity);
3818     TH1F *jzbemd = allsamples.Draw("jzbemd",jzbvariable,75,-150,150, "JZB [GeV]", "events", cutmass&&cutOSOF&&cutnJets,data, luminosity);
3819     */
3820     TH1F *jzbld = allsamples.Draw("jzbld",jzbvariabledata,int((jzbHigh+110)/5),-110,jzbHigh , "JZB [GeV]", "events", cutmass&&cutOSSF&&cutnJets,data, luminosity);
3821     TH1F *jzbemd = allsamples.Draw("jzbemd",jzbvariabledata,int((jzbHigh+110)/5),-110,jzbHigh , "JZB [GeV]", "events", cutmass&&cutOSOF&&cutnJets,data, luminosity);
3822     jzbld->SetMarkerColor(kBlack);
3823     jzbld->SetMarkerStyle(26);
3824     jzbemd->SetMarkerStyle(25);
3825     jzbemd->SetMarkerColor(kRed);
3826     jzbemd->SetLineColor(kRed);
3827     jzbld->SetMinimum(0.35);
3828     jzbld->Draw("e1");
3829     jzbemd->Draw("e1,same");
3830     TLegend *leg4 = make_legend();
3831     leg4->AddEntry(jzbld,"SFZP","p");
3832     leg4->AddEntry(jzbemd,"OFZP","p");
3833     leg4->AddEntry((TObject*)0,"",""); //causes segmentation violation
3834     leg4->AddEntry((TObject*)0,"",""); //causes segmentation violation
3835     leg4->Draw();
3836     CompleteSave(can,"lepton_comparison/jzb_eemumu_emu_data");
3837    
3838     TH1F *ttbarjzbld = allsamples.Draw("ttbarjzbld",jzbvariablemc,int((jzbHigh+150)/5),-150,jzbHigh, "JZB [GeV]", "events", cutmass&&cutOSSF&&cutnJets,data, luminosity,allsamples.FindSample("TTJet"));
3839     TH1F *ttbarjzbemd = allsamples.Draw("ttbarjzbemd",jzbvariablemc,int((jzbHigh+150)/5),-150,jzbHigh, "JZB [GeV]", "events", cutmass&&cutOSOF&&cutnJets,data, luminosity,allsamples.FindSample("TTJet"));
3840     ttbarjzbld->SetLineColor(allsamples.GetColor("TTJet"));
3841     ttbarjzbemd->SetLineColor(allsamples.GetColor("TTJet"));
3842     ttbarjzbld->Draw("histo");
3843     ttbarjzbemd->SetLineStyle(2);
3844     ttbarjzbemd->Draw("histo,same");
3845     TLegend *leg5 = make_legend();
3846     leg5->AddEntry(ttbarjzbld,"t#bar{t}->(ee or #mu#mu)","l");
3847     leg5->AddEntry(ttbarjzbemd,"t#bar{t}->e#mu","l");
3848     leg5->Draw();
3849     CompleteSave(can,"lepton_comparison/ttbar_emu_mc");
3850    
3851     }
3852    
3853     bool is_OF(TCut cut) {
3854     string scut = (const char*) cut;
3855     if((int)scut.find("id1!=id2")>-1) return true;
3856     if((int)scut.find("id1==id2")>-1) return false;
3857     return false;
3858     }
3859    
3860     bool is_ZP(TCut cut) {
3861     string scut = (const char*) cut;
3862     if((int)scut.find("91")>-1) return true;
3863     return false;
3864     }
3865    
3866    
3867     void draw_pure_jzb_histo(TCut cut,string datavariable, string mcvariable, string savename, TCanvas *can,vector<float> binning) {
3868     TPad *jzbpad = new TPad("jzbpad","jzbpad",0,0,1,1);
3869     jzbpad->cd();
3870     jzbpad->SetLogy(1);
3871     string xlabel="JZB [GeV]";
3872    
3873     TH1F *datahisto = allsamples.Draw("datahisto",datavariable,binning, xlabel, "events",cut,data,luminosity);
3874     THStack mcstack = allsamples.DrawStack("mcstack",mcvariable,binning, xlabel, "events",cut,mc,luminosity);
3875    
3876     datahisto->SetMinimum(0.1);
3877     datahisto->SetMarkerSize(DataMarkerSize);
3878     datahisto->Draw("e1");
3879 buchmann 1.73 mcstack.Draw("histo,same");
3880 buchmann 1.1 datahisto->Draw("same,e1");
3881    
3882     TLegend *leg;
3883 buchmann 1.50 if (!PlottingSetup::RestrictToMassPeak||!PlottingSetup::UseSidebandsForcJZB) {
3884 fronga 1.41 if(is_OF(cut)) leg = allsamples.allbglegend("Opposite flavor",datahisto);
3885     else leg = allsamples.allbglegend("Same flavor",datahisto);
3886     } else {
3887     if(is_OF(cut) && is_ZP(cut)) leg = allsamples.allbglegend("OFZP",datahisto);
3888     else if(!is_OF(cut) && is_ZP(cut)) leg = allsamples.allbglegend("SFZP",datahisto);
3889     else if( is_OF(cut) && !is_ZP(cut)) leg = allsamples.allbglegend("OFSB",datahisto);
3890     else if(!is_OF(cut) && !is_ZP(cut)) leg = allsamples.allbglegend("SFSB",datahisto);
3891     else {
3892     std::cerr << "Unable to decode cut: " << cut.GetTitle() << std::endl;
3893     exit(-1);
3894     }
3895     }
3896 buchmann 1.1 leg->Draw();
3897     string write_cut = decipher_cut(cut,"");
3898     TText *writeline1 = write_cut_on_canvas(write_cut.c_str());
3899     writeline1->SetTextSize(0.035);
3900     writeline1->Draw();
3901 buchmann 1.79 if(!Contains(savename,"Dibosons")) Save_With_Ratio(datahisto,mcstack,jzbpad->cd(),("jzb/"+savename));
3902     else Save_With_Ratio(datahisto,mcstack,jzbpad->cd(),savename);
3903 buchmann 1.1 TPad *jzbpad2 = new TPad("jzbpad2","jzbpad2",0,0,1,1);
3904     jzbpad2->cd();
3905     jzbpad2->SetLogy(1);
3906     datahisto->GetXaxis()->SetRangeUser(0,binning[binning.size()-1]);
3907     datahisto->SetMinimum(0.1);
3908     datahisto->SetMarkerSize(DataMarkerSize);
3909     datahisto->Draw("e1");
3910 buchmann 1.73 mcstack.Draw("histo,same");
3911 buchmann 1.1 datahisto->Draw("same,e1");
3912     leg->SetHeader("");
3913     leg->Draw();
3914     writeline1->SetTextSize(0.035);
3915     writeline1->Draw();
3916     DrawPrelim();
3917 buchmann 1.79 if(!Contains(savename,"Dibosons")) Save_With_Ratio(datahisto,mcstack,jzbpad2->cd(),("jzb/PositiveSideOnly/"+savename+""));
3918     else Save_With_Ratio(datahisto,mcstack,jzbpad2->cd(),(savename+"__PosOnly"));
3919 buchmann 1.1 datahisto->Delete();
3920     mcstack.Delete();
3921     }
3922    
3923     Double_t GausR(Double_t *x, Double_t *par) {
3924     return gRandom->Gaus(x[0],par[0]);
3925     }
3926 buchmann 1.12
3927     void produce_stretched_jzb_plots(string mcjzb, string datajzb,vector<float> ratio_binning) {
3928     TCanvas *dican = new TCanvas("dican","JZB Plots Canvas");
3929     float max=jzbHigh ;
3930     float min=-120;
3931     int nbins=(int)((max-min)/5.0); // we want 5 GeV/bin
3932     int coarserbins=int(nbins/2.0);
3933     int rebinnedbins=int(nbins/4.0);
3934 buchmann 1.1
3935 buchmann 1.12 vector<float>binning;vector<float>coarse_binning;vector<float>coarsest_binning;
3936     for(int i=0;i<=nbins;i++)binning.push_back(min+i*(max-min)/((float)nbins));
3937     for(int i=0;i<=coarserbins;i++)coarse_binning.push_back(min+i*(max-min)/((float)coarserbins));
3938     for(int i=0;i<=rebinnedbins;i++)coarsest_binning.push_back(min+i*(max-min)/((float)rebinnedbins));
3939    
3940     draw_pure_jzb_histo(cutOSSF&&cutnJets&&cutmass,datajzb,mcjzb,"Dibosons/jzb_OS_SFZP",dican,binning);
3941     draw_pure_jzb_histo(cutOSOF&&cutnJets&&cutmass,datajzb,mcjzb,"Dibosons/jzb_OS_OFZP",dican,binning);
3942     draw_pure_jzb_histo(cutOSSF&&cutnJets&&cutmass&&"id1==0",datajzb,mcjzb,"Dibosons/ee/jzb_OS_SFZP",dican,binning);
3943     draw_pure_jzb_histo(cutOSSF&&cutnJets&&cutmass&&"id1==1",datajzb,mcjzb,"Dibosons/mm/jzb_OS_SFZP",dican,binning);
3944     draw_pure_jzb_histo(cutOSOF&&cutnJets&&cutmass&&"id1==0",datajzb,mcjzb,"Dibosons/ee/jzb_OS_OFZP",dican,binning);
3945     draw_pure_jzb_histo(cutOSOF&&cutnJets&&cutmass&&"id1==1",datajzb,mcjzb,"Dibosons/mm/jzb_OS_OFZP",dican,binning);
3946 buchmann 1.50 if(PlottingSetup::RestrictToMassPeak&&PlottingSetup::UseSidebandsForcJZB) draw_pure_jzb_histo(cutOSSF&&cutnJets&&sidebandcut,datajzb,mcjzb,"Dibosons/jzb_OS_SFSB",dican,binning);
3947     if(PlottingSetup::RestrictToMassPeak&&PlottingSetup::UseSidebandsForcJZB) draw_pure_jzb_histo(cutOSOF&&cutnJets&&sidebandcut,datajzb,mcjzb,"Dibosons/jzb_OS_OFSB",dican,binning);
3948 buchmann 1.12
3949     draw_pure_jzb_histo(cutOSSF&&cutnJets&&cutmass,datajzb,mcjzb,"Dibosons/jzb_OS_SFZP_coarse",dican,coarse_binning);
3950     draw_pure_jzb_histo(cutOSOF&&cutnJets&&cutmass,datajzb,mcjzb,"Dibosons/jzb_OS_OFZP_coarse",dican,coarse_binning);
3951 buchmann 1.50 if(PlottingSetup::RestrictToMassPeak&&PlottingSetup::UseSidebandsForcJZB) draw_pure_jzb_histo(cutOSSF&&cutnJets&&sidebandcut,datajzb,mcjzb,"Dibosons/jzb_OS_SFSB_coarse",dican,coarse_binning);
3952     if(PlottingSetup::RestrictToMassPeak&&PlottingSetup::UseSidebandsForcJZB) draw_pure_jzb_histo(cutOSOF&&cutnJets&&sidebandcut,datajzb,mcjzb,"Dibosons/jzb_OS_OFSB_coarse",dican,coarse_binning);
3953 buchmann 1.12
3954     delete dican;
3955     }
3956    
3957    
3958     void diboson_plots(string mcjzb, string datajzb,vector<float> ratio_binning) {
3959 buchmann 1.65 switch_overunderflow(true);
3960 buchmann 1.12 vector<int> SamplesToBeModified = allsamples.FindSampleBySampleName("WW/WZ/ZZ");
3961    
3962     if(SamplesToBeModified.size()==0 || SamplesToBeModified[0]==-1) {
3963     write_error(__FUNCTION__,"Could not find any diboson samples - aborting diboson plots");
3964     return;
3965     }
3966    
3967     float stretchfactor = 100.0;
3968     vector<string> labels;
3969    
3970    
3971     dout << "Going to increase the cross section for diboson samples ... " << endl;
3972 buchmann 1.16 for(int i=0;i<(int)SamplesToBeModified.size();i++) {
3973 buchmann 1.12 float origxs=(allsamples.collection)[SamplesToBeModified[i]].xs;
3974     (allsamples.collection)[SamplesToBeModified[i]].xs=origxs*stretchfactor;
3975     dout << " Increased xs for sample " << (allsamples.collection)[SamplesToBeModified[i]].filename << " from " << origxs << " to " << (allsamples.collection)[SamplesToBeModified[i]].xs << " (by a factor of " << stretchfactor << ")" << endl;
3976     labels.push_back((allsamples.collection)[SamplesToBeModified[i]].samplename);
3977     (allsamples.collection)[SamplesToBeModified[i]].samplename=any2string(int(stretchfactor))+" x "+(allsamples.collection)[SamplesToBeModified[i]].samplename;
3978     dout << " (also renamed it to " << (allsamples.collection)[SamplesToBeModified[i]].samplename << " )" << endl;
3979     }
3980    
3981     dout << "Going to produce JZB plots" << endl;
3982 buchmann 1.13 produce_stretched_jzb_plots(mcjzb,datajzb,ratio_binning);
3983 buchmann 1.12 TCanvas *gloca = new TCanvas("gloca","gloca");
3984    
3985     dout << "Going to produce prediction plots" << endl;
3986 buchmann 1.93 do_prediction_plot(TCut("mll>0"),"",mcjzb, gloca, PlottingSetup::jzbHigh, 0, false,"Dibosons/Bpred/" ); // do only MC plots, no signal
3987     do_prediction_plot(TCut("mll>0"),"",mcjzb, gloca, PlottingSetup::jzbHigh, 0, false,"Dibosons/Bpred/" ); // do MC plots with signal
3988 buchmann 1.12 delete gloca;
3989    
3990     dout << "Going to reset the cross section for diboson samples ... " << endl;
3991 buchmann 1.16 for(int i=0;i<(int)SamplesToBeModified.size();i++) {
3992 buchmann 1.12 float Upxs=(allsamples.collection)[SamplesToBeModified[i]].xs;
3993     (allsamples.collection)[SamplesToBeModified[i]].xs=(allsamples.collection)[SamplesToBeModified[i]].xs*(1.0/stretchfactor);
3994     string Upname=(allsamples.collection)[SamplesToBeModified[i]].samplename;
3995     (allsamples.collection)[SamplesToBeModified[i]].samplename=labels[i];
3996     dout << " Reset xs for sample " << (allsamples.collection)[SamplesToBeModified[i]].samplename << " from " << Upxs << " to " << (allsamples.collection)[SamplesToBeModified[i]].xs << " (by a factor of " << stretchfactor << ") and reset the correct name (from " << Upname << ")" << endl;
3997    
3998     }
3999 buchmann 1.65 // switch_overunderflow(false);
4000 buchmann 1.12 }
4001 buchmann 1.35
4002    
4003     void draw_normalized_data_vs_data_histo(TCut cut1, TCut cut2, string variable, string legentry1, string legentry2, string savename, TCanvas *can,vector<float> binning) {
4004     TPad *jzbpad = new TPad("jzbpad","jzbpad",0,0,1,1);
4005     jzbpad->cd();
4006     jzbpad->SetLogy(1);
4007     string xlabel="JZB [GeV]";
4008    
4009     TH1F *datahisto1 = allsamples.Draw("datahisto1",variable,binning, xlabel, "events",cut1,data,luminosity);
4010     datahisto1->SetLineColor(kRed);
4011     datahisto1->SetMarkerColor(kRed);
4012     TH1F *datahisto2 = allsamples.Draw("datahisto2",variable,binning, xlabel, "events",cut2,data,luminosity);
4013     datahisto2->SetLineColor(kBlue);
4014     datahisto2->SetMarkerColor(kBlue);
4015    
4016     datahisto2->SetMarkerSize(DataMarkerSize);
4017     datahisto1->DrawNormalized("e1");
4018     datahisto2->DrawNormalized("histo,same");
4019     datahisto1->DrawNormalized("same,e1");
4020    
4021     TLegend *leg = make_legend();
4022     leg->AddEntry(datahisto1,legentry1.c_str());
4023     leg->AddEntry(datahisto2,legentry2.c_str());
4024     leg->Draw();
4025    
4026 buchmann 1.79 Save_With_Ratio(datahisto1,datahisto2,jzbpad->cd(),("jzb/"+savename));
4027 buchmann 1.35
4028     datahisto1->Delete();
4029     datahisto2->Delete();
4030     }
4031    
4032    
4033 buchmann 1.1 void jzb_plots(string mcjzb, string datajzb,vector<float> ratio_binning) {
4034 buchmann 1.65 switch_overunderflow(true);
4035 buchmann 1.1 TCanvas *can = new TCanvas("can","JZB Plots Canvas");
4036     float max=jzbHigh ;
4037     float min=-120;
4038     int nbins=(int)((max-min)/5.0); // we want 5 GeV/bin
4039     int coarserbins=int(nbins/2.0);
4040     int rebinnedbins=int(nbins/4.0);
4041    
4042     vector<float>binning;vector<float>coarse_binning;vector<float>coarsest_binning;
4043     for(int i=0;i<=nbins;i++)binning.push_back(min+i*(max-min)/((float)nbins));
4044     for(int i=0;i<=coarserbins;i++)coarse_binning.push_back(min+i*(max-min)/((float)coarserbins));
4045     for(int i=0;i<=rebinnedbins;i++)coarsest_binning.push_back(min+i*(max-min)/((float)rebinnedbins));
4046    
4047 buchmann 1.14 if ( !PlottingSetup::Approved ) {
4048     draw_pure_jzb_histo(cutOSSF&&cutnJets&&cutmass,datajzb,mcjzb,"jzb_OS_SFZP",can,binning);
4049     draw_pure_jzb_histo(cutOSOF&&cutnJets&&cutmass,datajzb,mcjzb,"jzb_OS_OFZP",can,binning);
4050     draw_pure_jzb_histo(cutOSSF&&cutnJets&&cutmass&&"id1==0",datajzb,mcjzb,"ee/jzb_OS_SFZP",can,binning);
4051     draw_pure_jzb_histo(cutOSSF&&cutnJets&&cutmass&&"id1==1",datajzb,mcjzb,"mm/jzb_OS_SFZP",can,binning);
4052     draw_pure_jzb_histo(cutOSOF&&cutnJets&&cutmass&&"id1==0",datajzb,mcjzb,"ee/jzb_OS_OFZP",can,binning);
4053     draw_pure_jzb_histo(cutOSOF&&cutnJets&&cutmass&&"id1==1",datajzb,mcjzb,"mm/jzb_OS_OFZP",can,binning);
4054     flag_this_change(__FUNCTION__,__LINE__,true);//PlottingSetup::RestrictToMassPeak
4055 buchmann 1.50 if(PlottingSetup::RestrictToMassPeak&&PlottingSetup::UseSidebandsForcJZB) draw_pure_jzb_histo(cutOSSF&&cutnJets&&sidebandcut,datajzb,mcjzb,"jzb_OS_SFSB",can,binning);
4056     if(PlottingSetup::RestrictToMassPeak&&PlottingSetup::UseSidebandsForcJZB) draw_pure_jzb_histo(cutOSOF&&cutnJets&&sidebandcut,datajzb,mcjzb,"jzb_OS_OFSB",can,binning);
4057 buchmann 1.35 draw_normalized_data_vs_data_histo(cutOSOF&&cutnJets&&cutmass&&"id1==0",cutOSOF&&cutnJets&&cutmass&&"id1==1",datajzb,"ee","mm","jzb_ee_vs_mm",can,binning);
4058     draw_normalized_data_vs_data_histo(cutOSOF&&cutnJets&&cutmass&&"id1==0",cutOSOF&&cutnJets&&cutmass&&"id1==1",datajzb,"ee","mm","jzb_ee_vs_mm_coarse",can,coarse_binning);
4059 buchmann 1.36 draw_normalized_data_vs_data_histo(cutOSOF&&cutnJets&&cutmass&&"id1==0",cutOSOF&&cutnJets&&cutmass&&"id1==1",datajzb,"ee","mm","jzb_ee_vs_mm_coarsest",can,coarsest_binning);
4060 buchmann 1.35
4061 buchmann 1.14 }
4062 buchmann 1.1
4063     draw_pure_jzb_histo(cutOSSF&&cutnJets&&cutmass,datajzb,mcjzb,"jzb_OS_SFZP_coarse",can,coarse_binning);
4064 buchmann 1.14 if ( !PlottingSetup::Approved ) {
4065     draw_pure_jzb_histo(cutOSOF&&cutnJets&&cutmass,datajzb,mcjzb,"jzb_OS_OFZP_coarse",can,coarse_binning);
4066     flag_this_change(__FUNCTION__,__LINE__,true);//PlottingSetup::RestrictToMassPeak
4067 buchmann 1.50 if(PlottingSetup::RestrictToMassPeak&&PlottingSetup::UseSidebandsForcJZB) draw_pure_jzb_histo(cutOSSF&&cutnJets&&sidebandcut,datajzb,mcjzb,"jzb_OS_SFSB_coarse",can,coarse_binning);
4068     if(PlottingSetup::RestrictToMassPeak&&PlottingSetup::UseSidebandsForcJZB) draw_pure_jzb_histo(cutOSOF&&cutnJets&&sidebandcut,datajzb,mcjzb,"jzb_OS_OFSB_coarse",can,coarse_binning);
4069 buchmann 1.14 }
4070 buchmann 1.12 delete can;
4071 buchmann 1.65 switch_overunderflow(false);
4072 buchmann 1.1 }
4073    
4074    
4075     void calculate_all_yields(string mcdrawcommand,vector<float> jzb_cuts) {
4076     dout << "Calculating background yields in MC:" << endl;
4077     jzb_cuts.push_back(14000);
4078     TH1F *allbgs = allsamples.Draw("allbgs",jzbvariablemc,jzb_cuts, "JZB [GeV]", "events", cutmass&&cutOSSF&&cutnJets,mc,luminosity);
4079     float cumulative=0;
4080     for(int i=allbgs->GetNbinsX();i>=1;i--) {
4081     cumulative+=allbgs->GetBinContent(i);
4082     dout << "Above " << allbgs->GetBinLowEdge(i) << " GeV/c : " << cumulative << endl;
4083     }
4084     }
4085    
4086    
4087     TCut give_jzb_expression(string mcjzb, float jzbcut, string posneg="pos") {
4088     stringstream res;
4089     res << "(" << mcjzb;
4090     if(posneg=="pos") res << ">";
4091     else res << "<-";
4092     res << jzbcut << ")";
4093     return TCut(res.str().c_str());
4094     }
4095    
4096     string sigdig(float number, int nsigdig=3, float min=0) {
4097     //this function tries to extract n significant digits, and if the number is below (min), it returns "<min"
4098     if(number<min) return "< "+any2string(min);
4099     stringstream sol;
4100     sol << setprecision(nsigdig) << number;
4101    
4102     return sol.str();
4103     }
4104    
4105     string jzb_tex_command(string region, string posneg) {
4106     if(posneg=="pos") posneg="POS";
4107     else posneg="NEG";
4108     stringstream texcommand;
4109     texcommand<<"\\"<<region <<"JZB"<<posneg;
4110     return texcommand.str();
4111     }
4112     // \SFZPJZBPOS
4113     // Sample & \OFZPJZBPOS & \OFZPJZBNEG & \SFZPJZBPOS & \SFZPJZBNEG & \OFSBJZBPOS & \OFSBJZBNEG & \SFSBJZBPOS & \SFSBJZBNEG \\\hline
4114    
4115 buchmann 1.95
4116     void compute_Improved_MC_yields(string mcjzb,vector<float> jzb_cuts) {
4117     dout << "Calculating background yields in MC:" << endl;
4118    
4119     TCanvas *yica = new TCanvas("yica","yield canvas");
4120    
4121     int nRegions=2;
4122     if(!PlottingSetup::RestrictToMassPeak||!PlottingSetup::UseSidebandsForcJZB) nRegions=2;
4123     string tsRegions[] = {"SFZP","OFZP"};
4124     string posneg[] = {"pos","neg"};
4125     TCut tkRegions[] = {cutOSSF&&cutnJets&&cutmass,cutOSOF&&cutnJets&&cutmass};
4126    
4127    
4128    
4129     for(int ijzb=0;ijzb<(int)jzb_cuts.size();ijzb++) {
4130     TCut posJZB = give_jzb_expression(mcjzb,jzb_cuts[ijzb],"pos");
4131     TCut negJZB = give_jzb_expression(mcjzb,jzb_cuts[ijzb],"neg");
4132    
4133     dout << "_________________________________________________________" << endl;
4134     dout << "Table for JZB> " << jzb_cuts[ijzb] << endl;
4135    
4136    
4137     THStack *spstack = new THStack(allsamples.DrawStack("spstack","mll<10e6||mll>1",1,0,500,"tester","events",cutOSSF&&cutnJets&&cutmass&&posJZB,mc,luminosity));
4138     THStack *snstack = new THStack(allsamples.DrawStack("snstack","mll<10e6||mll>1",1,0,500,"tester","events",cutOSSF&&cutnJets&&cutmass&&negJZB,mc,luminosity));
4139     THStack *opstack = new THStack(allsamples.DrawStack("opstack","mll<10e6||mll>1",1,0,500,"tester","events",cutOSOF&&cutnJets&&cutmass&&posJZB,mc,luminosity));
4140     THStack *onstack = new THStack(allsamples.DrawStack("onstack","mll<10e6||mll>1",1,0,500,"tester","events",cutOSOF&&cutnJets&&cutmass&&negJZB,mc,luminosity));
4141    
4142    
4143     vector<pair<string,Value> > obs_yields = WriteYield(spstack, -10, 10, true);
4144     vector<pair<string,Value> > neg_sf_yields = WriteYield(snstack, -10, 10, true);
4145     vector<pair<string,Value> > pos_of_yields = WriteYield(opstack, -10, 10, true);
4146     vector<pair<string,Value> > neg_of_yields = WriteYield(onstack, -10, 10, true);
4147    
4148     Value TotObs=Value(0,0);
4149     Value TotPred=Value(0,0);
4150    
4151     for(int ientry=0;ientry<obs_yields.size();ientry++) {
4152     if(Contains(obs_yields[ientry].first,"t_bar_t")) continue; // ttbar
4153     if(Contains(obs_yields[ientry].first,"W_Jets")) continue; // W+Jets
4154     if(Contains(obs_yields[ientry].first,"WW_")) continue; // WW (fully flavor symmetric)
4155     if(Contains(obs_yields[ientry].first,"Single_top")) continue; // Single Top
4156     if(Contains(obs_yields[ientry].first,"ee_mumu")) continue; // DY
4157     if(Contains(obs_yields[ientry].first,"tau_tau")) continue; // DY
4158     Value pred = neg_sf_yields[ientry].second + pos_of_yields[ientry].second - neg_of_yields[ientry].second;
4159     Value obs=obs_yields[ientry].second;
4160     Value diff=obs-pred;
4161     dout << obs_yields[ientry].first << "\t & \t " << obs << " \t & \t " << pred << "\t & \t " << diff << endl;
4162     TotObs=TotObs+obs_yields[ientry].second;
4163     TotPred=TotPred+pred;
4164     }
4165    
4166     float Systematic=sqrt(pow(TotPred.getValue(),2)*0.5*0.5 + pow(TotObs.getValue(),2)*0.5*0.5);
4167    
4168    
4169     }
4170    
4171     delete yica;
4172     }
4173    
4174 buchmann 1.1 void compute_MC_yields(string mcjzb,vector<float> jzb_cuts) {
4175     dout << "Calculating background yields in MC:" << endl;
4176    
4177     TCanvas *yica = new TCanvas("yica","yield canvas");
4178    
4179     int nRegions=4;
4180 buchmann 1.50 if(!PlottingSetup::RestrictToMassPeak||!PlottingSetup::UseSidebandsForcJZB) nRegions=2;
4181 buchmann 1.1 string tsRegions[] = {"SFZP","OFZP","SFSB","OFSB"};
4182     string posneg[] = {"pos","neg"};
4183     TCut tkRegions[] = {cutOSSF&&cutnJets&&cutmass,cutOSOF&&cutnJets&&cutmass,cutOSSF&&cutnJets&&sidebandcut,cutOSOF&&cutnJets&&sidebandcut};
4184    
4185 buchmann 1.16 for(int ijzb=0;ijzb<(int)jzb_cuts.size();ijzb++) {
4186 buchmann 1.1 TCut jzbMC[] = { give_jzb_expression(mcjzb,jzb_cuts[ijzb],"pos"), give_jzb_expression(mcjzb,jzb_cuts[ijzb],"neg") };
4187     dout << "_________________________________________________________" << endl;
4188     dout << "Table for JZB> " << jzb_cuts[ijzb] << endl;
4189 buchmann 1.16 for(int isample=0;isample<(int)(allsamples.collection).size();isample++) {
4190 buchmann 1.1 if(!(allsamples.collection)[isample].is_data) dout << (allsamples.collection)[isample].samplename << " & ";
4191     else dout << "Sample & ";
4192     for(int iregion=0;iregion<nRegions;iregion++) {
4193     for(int ipos=0;ipos<2;ipos++) {
4194     if((allsamples.collection)[isample].is_data) dout << jzb_tex_command(tsRegions[iregion],posneg[ipos]) << " & ";
4195     else {
4196     vector<int> specific;specific.push_back(isample);
4197     TH1F *shisto = allsamples.Draw("shisto","mll",1,0,500,"tester","events",tkRegions[iregion]&&jzbMC[ipos],mc,luminosity,specific);
4198     dout << sigdig(shisto->Integral(),3,0.05) <<" & ";
4199     delete shisto;
4200     }
4201     }//end of ipos
4202     }//end of iregion
4203     dout << " \\\\" << endl;
4204     }//end of isample
4205     }//end of ijzb
4206     dout << " \\hline" << endl;
4207    
4208     delete yica;
4209     }
4210    
4211     void draw_ttbar_and_zjets_shape_for_one_configuration(string mcjzb, string datajzb, int leptontype=-1, int scenario=0,bool floating=false) {
4212     //Step 1: Establishing cuts
4213     stringstream jetcutstring;
4214     string writescenario="";
4215    
4216     if(scenario==0) jetcutstring << "(pfJetGoodNum>=3)&&"<<(const char*) basicqualitycut;
4217     if(scenario==1) jetcutstring << "(pfJetPt[0]>50&&pfJetPt[1]>50)&&"<<(const char*)basicqualitycut;
4218     TCut jetcut(jetcutstring.str().c_str());
4219     string leptoncut="mll>0";
4220     if(leptontype==0||leptontype==1) {
4221     if(leptontype==0) {
4222     leptoncut="id1==0";
4223     writescenario="__ee";
4224     }
4225     else {
4226     leptoncut="id1==1";
4227     writescenario="__ee";
4228     }
4229     }
4230     TCut lepcut(leptoncut.c_str());
4231    
4232     TCanvas *c5 = new TCanvas("c5","c5",1500,500);
4233     TCanvas *c6 = new TCanvas("c6","c6");
4234     c5->Divide(3,1);
4235    
4236     //STEP 2: Extract Zjets shape in data
4237     c5->cd(1);
4238     c5->cd(1)->SetLogy(1);
4239     TCut massat40("mll>40");
4240     TH1F *ossfleft = allsamples.Draw("ossfleft", "-"+datajzb,40,0,200, "JZB [GeV]", "events", massat40&&cutOSSF&&jetcut&&lepcut,data,luminosity);
4241     TH1F *osofleft = allsamples.Draw("osofleft", "-"+datajzb,40,0,200, "JZB [GeV]", "events", massat40&&cutOSOF&&jetcut&&lepcut,data,luminosity);
4242     ossfleft->SetLineColor(kRed);
4243     ossfleft->SetMarkerColor(kRed);
4244     ossfleft->Add(osofleft,-1);
4245     vector<TF1*> functions = do_cb_fit_to_plot(ossfleft,10);
4246     ossfleft->SetMarkerSize(DataMarkerSize);
4247     ossfleft->Draw();
4248     functions[0]->Draw("same");functions[1]->Draw("same");functions[2]->Draw("same");
4249     TF1 *zjetsfunc = (TF1*) functions[1]->Clone();
4250     TF1 *zjetsfuncN = (TF1*) functions[0]->Clone();
4251     TF1 *zjetsfuncP = (TF1*) functions[2]->Clone();
4252     zjetsfunc->Draw("same");zjetsfuncN->Draw("same");zjetsfuncP->Draw("same");
4253     TLegend *leg1 = new TLegend(0.6,0.6,0.89,0.80);
4254     leg1->SetFillColor(kWhite);
4255     leg1->SetLineColor(kWhite);
4256     leg1->AddEntry(ossfleft,"OSSF (sub),JZB<peak","p");
4257     leg1->AddEntry(zjetsfunc,"OSSF fit ('zjets')","l");
4258     leg1->Draw("same");
4259     TText *titleleft = write_title("Extracting Z+Jets shape");
4260     titleleft->Draw();
4261    
4262     //Step 3: Extract ttbar shape (in data or MC?)
4263     c5->cd(2);
4264     c5->cd(2)->SetLogy(1);
4265     TH1F *osof;
4266     TText *titlecenter;
4267     bool frommc=false;
4268     if(frommc) {
4269 buchmann 1.93 osof = allsamples.Draw("osof",datajzb,40,-200,200, "JZB [GeV]", "events", massat40&&cutOSSF&&jetcut&&lepcut,mc,luminosity,allsamples.FindSample("TT_"));
4270 buchmann 1.1 titlecenter = write_title("Extracting ttbar shape (from ossf MC)");
4271     }
4272     else {
4273     osof = allsamples.Draw("osof",datajzb,40,-200,200, "JZB [GeV]", "events", massat40&&cutOSOF&&jetcut&&lepcut,data,luminosity);
4274     titlecenter = write_title("Extracting ttbar shape (from osof data)");
4275     }
4276     osof->SetMarkerSize(DataMarkerSize);
4277     osof->Draw();
4278     vector<TF1*> ttbarfunctions = do_cb_fit_to_plot(osof,35,true);
4279     ttbarfunctions[0]->SetLineColor(kRed); ttbarfunctions[0]->SetLineStyle(2); ttbarfunctions[0]->Draw("same");
4280     ttbarfunctions[1]->SetLineColor(kRed); ttbarfunctions[1]->Draw("same");
4281     ttbarfunctions[2]->SetLineColor(kRed); ttbarfunctions[2]->SetLineStyle(2); ttbarfunctions[2]->Draw("same");
4282    
4283     TLegend *leg2 = new TLegend(0.15,0.8,0.4,0.89);
4284     leg2->SetFillColor(kWhite);
4285     leg2->SetLineColor(kWhite);
4286     if(frommc) {
4287     leg2->AddEntry(osof,"t#bar{t} OSSF, MC","p");
4288     leg2->AddEntry(ttbarfunctions[1],"Fit to t#bar{t} OSSF,MC","l");
4289     } else {
4290     leg2->AddEntry(osof,"OSOF","p");
4291     leg2->AddEntry(ttbarfunctions[1],"Fit to OSOF","l");
4292     }
4293     leg2->Draw("same");
4294     titlecenter->Draw();
4295    
4296     //--------------------------------------------------------------------------------------------------------------------------------
4297     //STEP 4: Present it!
4298     // actually: if we wanna let it float we need to do that first :-)
4299     c5->cd(3);
4300     c5->cd(3)->SetLogy(1);
4301     TH1F *observed = allsamples.Draw("observed",datajzb,100,0,500, "JZB [GeV]", "events", massat40&&cutOSSF&&jetcut&&lepcut,data,luminosity);
4302     observed->SetMarkerSize(DataMarkerSize);
4303    
4304     TF1 *logparc = new TF1("logparc",InvCrystalBall,0,1000,5); logparc->SetLineColor(kRed);
4305     TF1 *logparcn = new TF1("logparcn",InvCrystalBallN,0,1000,5); logparcn->SetLineColor(kRed); logparcn->SetLineStyle(2);
4306     TF1 *logparcp = new TF1("logparcp",InvCrystalBallP,0,1000,5); logparcp->SetLineColor(kRed); logparcp->SetLineStyle(2);
4307    
4308     TF1 *zjetsc = new TF1("zjetsc",InvCrystalBall,0,1000,5); zjetsc->SetLineColor(kBlue);
4309     TF1 *zjetscn = new TF1("zjetscn",InvCrystalBallN,0,1000,5); zjetscn->SetLineColor(kBlue); zjetscn->SetLineStyle(2);
4310     TF1 *zjetscp = new TF1("zjetscp",InvCrystalBallP,0,1000,5); zjetscp->SetLineColor(kBlue); zjetscp->SetLineStyle(2);
4311    
4312     TF1 *ZplusJetsplusTTbar = new TF1("ZplusJetsplusTTbar", DoubleInvCrystalBall,0,1000,10); ZplusJetsplusTTbar->SetLineColor(kBlue);
4313     TF1 *ZplusJetsplusTTbarP= new TF1("ZplusJetsplusTTbarP",DoubleInvCrystalBallP,0,1000,10); ZplusJetsplusTTbarP->SetLineColor(kBlue); ZplusJetsplusTTbarP->SetLineStyle(2);
4314     TF1 *ZplusJetsplusTTbarN= new TF1("ZplusJetsplusTTbarN",DoubleInvCrystalBallN,0,1000,10); ZplusJetsplusTTbarN->SetLineColor(kBlue); ZplusJetsplusTTbarN->SetLineStyle(2);
4315    
4316     zjetsc->SetParameters(zjetsfunc->GetParameters());
4317     zjetscp->SetParameters(zjetsfunc->GetParameters());
4318     zjetscn->SetParameters(zjetsfunc->GetParameters());
4319    
4320     TH1F *observeda = allsamples.Draw("observeda",datajzb,53,80,jzbHigh, "JZB [GeV]", "events", massat40&&cutOSSF&&jetcut&&lepcut,data,luminosity);
4321     //blublu
4322     logparc->SetParameters(ttbarfunctions[1]->GetParameters());
4323     logparcn->SetParameters(ttbarfunctions[1]->GetParameters());
4324     logparcp->SetParameters(ttbarfunctions[1]->GetParameters());
4325     if(floating) {
4326     dout << "TTbar contribution assumed (before fitting) : " << logparc->GetParameter(0) << endl;
4327     logparc->SetParameters(ttbarfunctions[1]->GetParameters());
4328     for(int i=0;i<10;i++) {
4329     if(i<5) ZplusJetsplusTTbar->FixParameter(i,zjetsfunc->GetParameter(i));
4330     if(i>=5) {
4331     if (i>5) ZplusJetsplusTTbar->FixParameter(i,logparc->GetParameter(i-5));
4332     if (i==5) ZplusJetsplusTTbar->SetParameter(i,logparc->GetParameter(i-5));
4333     }
4334     }//end of setting parameters
4335     observeda->Draw("same");
4336     ZplusJetsplusTTbar->Draw("same");
4337     observeda->Fit(ZplusJetsplusTTbar);
4338     dout << "--> Quality of Z+Jets / TTbar fit : chi2/ndf = " << ZplusJetsplusTTbar->GetChisquare() << "/" << ZplusJetsplusTTbar->GetNDF() << endl;
4339     ZplusJetsplusTTbar->Draw("same");
4340     ZplusJetsplusTTbarP->SetParameters(ZplusJetsplusTTbar->GetParameters());
4341     ZplusJetsplusTTbarN->SetParameters(ZplusJetsplusTTbar->GetParameters());
4342     dout << "TTbar contribution found (after fitting) : " << ZplusJetsplusTTbar->GetParameter(5) << endl;
4343     float factor = ZplusJetsplusTTbar->GetParameter(5) / logparc->GetParameter(0);
4344     dout << "FACTOR: " << factor << endl;
4345     logparc->SetParameter(0,factor*ttbarfunctions[1]->GetParameter(0));
4346     logparcn->SetParameter(0,factor*ttbarfunctions[1]->GetParameter(0));
4347     logparcp->SetParameter(0,factor*ttbarfunctions[1]->GetParameter(0));
4348     }
4349    
4350     c5->cd(3);
4351     c5->cd(3)->SetLogy(1);
4352     observed->Draw();
4353     zjetsc->Draw("same");zjetscn->Draw("same");zjetscp->Draw("same");
4354     logparc->Draw("same");
4355     logparcn->Draw("same");
4356     logparcp->Draw("same");
4357    
4358     TLegend *leg3 = new TLegend(0.6,0.6,0.89,0.80);
4359     leg3->SetFillColor(kWhite);
4360     leg3->SetLineColor(kWhite);
4361     leg3->AddEntry(observed,"OSSF,JZB>peak","p");
4362     leg3->AddEntry(ttbarfunctions[1],"OSOF fit ('ttbar')","l");
4363     leg3->AddEntry(zjetsfunc,"OSSF,JZB<0 fit ('zjets')","l");
4364     leg3->Draw("same");
4365     TText *titleright = write_title("Summary of shapes and observed shape");
4366     titleright->Draw();
4367    
4368     c6->cd()->SetLogy(1);
4369     observed->Draw();
4370     zjetsc->Draw("same");zjetscn->Draw("same");zjetscp->Draw("same");
4371     logparc->Draw("same");
4372     logparcn->Draw("same");
4373     logparcp->Draw("same");
4374     leg3->Draw("same");
4375     titleright->Draw();
4376    
4377     if(scenario==0) {
4378     CompleteSave(c5,"Shapes2/Making_of___3jetsabove30"+writescenario);
4379     CompleteSave(c5->cd(1),"Shapes2/Making_of___3jetsabove30"+writescenario+"__cd1");
4380     CompleteSave(c5->cd(2),"Shapes2/Making_of___3jetsabove30"+writescenario+"__cd2");
4381     CompleteSave(c5->cd(3),"Shapes2/Making_of___3jetsabove30"+writescenario+"__cd3");
4382     CompleteSave(c6,"Shapes2/Background_Shapes___3jetsabove30"+writescenario);
4383     } else {
4384     CompleteSave(c5,"Shapes2/Making_of___2jetsabove50"+writescenario);
4385     CompleteSave(c5->cd(1),"Shapes2/Making_of___2jetsabove50"+writescenario+"__cd1");
4386     CompleteSave(c5->cd(2),"Shapes2/Making_of___2jetsabove50"+writescenario+"__cd2");
4387     CompleteSave(c5->cd(3),"Shapes2/Making_of___2jetsabove50"+writescenario+"__cd3");
4388     CompleteSave(c6,"Shapes2/Background_Shapes___2jetsabove50"+writescenario);
4389     }
4390     dout << "Statistics about our fits: " << endl;
4391     dout << "Z+Jets shape: Chi2/ndf = " << zjetsfunc->GetChisquare() << "/" << ossfleft->GetNbinsX() << endl;
4392     dout << "ttbar shape: Chi2/ndf = " << ttbarfunctions[1]->GetChisquare() << "/" << osof->GetNbinsX() << endl;
4393    
4394     c6->cd();
4395     TLegend *additionallegend = new TLegend(0.6,0.6,0.89,0.89);
4396     additionallegend->SetFillColor(kWhite);
4397     additionallegend->SetLineColor(kWhite);
4398     additionallegend->AddEntry(observed,"Data","p");
4399     additionallegend->AddEntry(ZplusJetsplusTTbar,"Fitted Z+jets & TTbar","l");
4400     additionallegend->AddEntry(zjetsc,"Z+jets","l");
4401     additionallegend->AddEntry(logparc,"TTbar","l");
4402     observed->Draw();
4403     ZplusJetsplusTTbar->SetLineColor(kGreen);
4404     ZplusJetsplusTTbarP->SetLineColor(kGreen);
4405     ZplusJetsplusTTbarN->SetLineColor(kGreen);
4406     ZplusJetsplusTTbarP->SetLineStyle(2);
4407     ZplusJetsplusTTbarN->SetLineStyle(2);
4408     TF1 *ZplusJetsplusTTbar2 = new TF1("ZplusJetsplusTTbar2",DoubleInvCrystalBall,0,1000,10);
4409     ZplusJetsplusTTbar2->SetParameters(ZplusJetsplusTTbar->GetParameters());
4410     ZplusJetsplusTTbar2->SetLineColor(kGreen);
4411     ZplusJetsplusTTbarP->SetFillColor(TColor::GetColor("#81F781"));
4412     ZplusJetsplusTTbarN->SetFillColor(kWhite);
4413     ZplusJetsplusTTbarP->Draw("fcsame");
4414     ZplusJetsplusTTbarN->Draw("fcsame");
4415     TH1F *hZplusJetsplusTTbar = (TH1F*)ZplusJetsplusTTbar2->GetHistogram();
4416     TH1F *hZplusJetsplusTTbarN = (TH1F*)ZplusJetsplusTTbarN->GetHistogram();
4417     TH1F *hZplusJetsplusTTbarP = (TH1F*)ZplusJetsplusTTbarP->GetHistogram();
4418     hZplusJetsplusTTbar->SetMarkerSize(0);
4419     hZplusJetsplusTTbarP->SetMarkerSize(0);
4420     hZplusJetsplusTTbarN->SetMarkerSize(0);
4421     for (int i=1;i<=hZplusJetsplusTTbar->GetNbinsX();i++) {
4422     float newerror=hZplusJetsplusTTbarP->GetBinContent(i)-hZplusJetsplusTTbar->GetBinContent(i);
4423     hZplusJetsplusTTbar->SetBinError(i,newerror);
4424     if(hZplusJetsplusTTbar->GetBinContent(i)<0.05) hZplusJetsplusTTbar->SetBinContent(i,0); //avoiding a displaying probolem
4425     }
4426     hZplusJetsplusTTbarP->SetFillColor(kGreen);
4427     hZplusJetsplusTTbarN->SetFillColor(kWhite);
4428     hZplusJetsplusTTbarN->Draw("same");
4429    
4430     ZplusJetsplusTTbar2->SetMarkerSize(0);
4431     ZplusJetsplusTTbar2->Draw("same");
4432    
4433     zjetsc->Draw("same");zjetscn->Draw("same");zjetscp->Draw("same");
4434     logparc->Draw("same");
4435     logparcn->Draw("same");
4436     logparcp->Draw("same");
4437     additionallegend->Draw("same");
4438     if(scenario==0) {
4439     CompleteSave(c6,"Shapes2/Background_Shapes___3jetsabove30__allfits__"+writescenario);
4440     } else {
4441     CompleteSave(c6,"Shapes2/Background_Shapes___2jetsabove50__allfits__"+writescenario);
4442     }
4443     //--------------------------------------------------------------------------------------------------------------------------------
4444     }
4445    
4446     void draw_ttbar_and_zjets_shape(string mcjzb, string datajzb) {
4447     int all_leptons=-1;
4448 buchmann 1.16 int threejetswith30gev=0;
4449     /*
4450     int twojetswith50gev=1;
4451 buchmann 1.1 int electrons_only=0;
4452     int mu_only=1;
4453 buchmann 1.16
4454 buchmann 1.1 draw_ttbar_and_zjets_shape_for_one_configuration(mcjzb,datajzb,all_leptons,twojetswith50gev);
4455     draw_ttbar_and_zjets_shape_for_one_configuration(mcjzb,datajzb,all_leptons,threejetswith30gev);
4456    
4457     draw_ttbar_and_zjets_shape_for_one_configuration(mcjzb,datajzb,electrons_only,twojetswith50gev);
4458     draw_ttbar_and_zjets_shape_for_one_configuration(mcjzb,datajzb,electrons_only,threejetswith30gev);
4459    
4460     draw_ttbar_and_zjets_shape_for_one_configuration(mcjzb,datajzb,mu_only,twojetswith50gev);
4461     draw_ttbar_and_zjets_shape_for_one_configuration(mcjzb,datajzb,mu_only,threejetswith30gev);
4462     */
4463    
4464     draw_ttbar_and_zjets_shape_for_one_configuration(mcjzb,datajzb,all_leptons,threejetswith30gev,true);
4465     }
4466    
4467 buchmann 1.32 float find_one_correction_factor(string FindKeyword, bool dodata, TCut SpecialCut, string SaveAs) {
4468 buchmann 1.1 TCanvas *cancorr = new TCanvas("cancorr","Canvas for Response Correction");
4469     cancorr->SetLogz();
4470     cancorr->SetRightMargin(0.13);
4471 buchmann 1.45 TCut zptforresponsepresentation(Restrmasscut&&SpecialCut&&passtrig);
4472 fronga 1.40
4473     if(PlottingSetup::DoBTag) zptforresponsepresentation=zptforresponsepresentation&&PlottingSetup::bTagRequirement;
4474     TH2F *niceresponseplotd = new TH2F("niceresponseplotd","",100,0,600,100,0,5);
4475     niceresponseplotd->Sumw2();
4476     TH2F* emuResponse = (TH2F*)niceresponseplotd->Clone("emuResponse");
4477 buchmann 1.27 vector<int> SampleIndices=allsamples.FindSample(FindKeyword);
4478 buchmann 1.33 for(int iSample=0;iSample<(int)SampleIndices.size();iSample++) {
4479 buchmann 1.32 if((allsamples.collection)[SampleIndices[iSample]].is_data && !dodata) continue;
4480     if((allsamples.collection)[SampleIndices[iSample]].is_data ==false && dodata) continue;
4481    
4482 buchmann 1.30 dout << " Response correction : Using sample " << (allsamples.collection)[SampleIndices[iSample]].filename << " for " << FindKeyword << endl;
4483 fronga 1.40 (allsamples.collection)[SampleIndices[iSample]].events->Draw("sumJetPt[1]/pt:pt>>+niceresponseplotd",(zptforresponsepresentation&&cutOSSF)*cutWeight);
4484     (allsamples.collection)[SampleIndices[iSample]].events->Draw("sumJetPt[1]/pt:pt>>+emuResponse",(zptforresponsepresentation&&cutOSOF)*cutWeight);
4485 buchmann 1.27 }
4486 buchmann 1.97
4487 fronga 1.40 niceresponseplotd->Add(emuResponse,-1);
4488    
4489 buchmann 1.95 //TF1 *resp_func = new TF1("resp_func","[0]+[1]/x + [2]/pow(x,2)",10,600);
4490    
4491 buchmann 1.1 niceresponseplotd->SetStats(0);
4492     niceresponseplotd->GetXaxis()->SetTitle("Z p_{T} [GeV]");
4493     niceresponseplotd->GetYaxis()->SetTitle("Response");
4494     niceresponseplotd->GetXaxis()->CenterTitle();
4495     niceresponseplotd->GetYaxis()->CenterTitle();
4496     niceresponseplotd->Draw("COLZ");
4497     TProfile * profd = (TProfile*)niceresponseplotd->ProfileX();
4498 fronga 1.40 profd->Rebin(2);
4499 buchmann 1.1 profd->SetMarkerSize(DataMarkerSize);
4500 buchmann 1.95 //profd->Fit(resp_func,"","same,e1",10,400);
4501 buchmann 1.97 profd->Fit("pol0","","same,e1",100,400);
4502 buchmann 1.95 //resp_func->SetLineColor(kBlue);
4503 buchmann 1.1 DrawPrelim();
4504 buchmann 1.27 string stitle="Data";
4505     if(!Contains(FindKeyword,"Data")) stitle="MC";
4506     TText* title = write_text(0.5,0.7,stitle.c_str());
4507 buchmann 1.1 title->SetTextAlign(12);
4508     title->Draw();
4509 buchmann 1.95 // TF1 *datapol=(TF1*)profd->GetFunction("pol0");
4510 buchmann 1.1 TF1 *datapol=(TF1*)profd->GetFunction("pol0");
4511 buchmann 1.27 float correction=datapol->GetParameter(0);
4512 buchmann 1.95
4513     // float correction=resp_func->GetParameter(0);
4514 buchmann 1.27 stringstream resstring;
4515     resstring<<"Response: "<<std::setprecision(2)<<100*correction<<" %";
4516     TText* restitle = write_text(0.5,0.65,resstring.str());
4517 buchmann 1.1 restitle->SetTextAlign(12);
4518     restitle->SetTextSize(0.03);
4519     restitle->Draw();
4520 buchmann 1.27 CompleteSave(cancorr,"ResponseCorrection/Response_Correction_Illustration_New_"+SaveAs);
4521     delete cancorr;
4522     delete niceresponseplotd;
4523 fronga 1.40 delete profd;
4524 buchmann 1.27 return correction;
4525     }
4526    
4527     void find_correction_factors(string &jzbvardata,string &jzbvarmc) {
4528    
4529 buchmann 1.30 dout << "Computing response corrections: " << endl;
4530 buchmann 1.27 //Step 1 : Get results
4531 buchmann 1.32 float datacorrection=find_one_correction_factor("Data",true,"","Data");
4532     float mccorrection=find_one_correction_factor("DY",false,"","MC");
4533 buchmann 1.1
4534 buchmann 1.93 /* float dataEEcorrection=find_one_correction_factor("Data",true,"id1==0","Data_ee");
4535 buchmann 1.32 float mcEEcorrection=find_one_correction_factor("DY",false,"id1==0","MC_ee");
4536 buchmann 1.27
4537 buchmann 1.32 float dataMMcorrection=find_one_correction_factor("Data",true,"id1==1","Data_mm");
4538     float mcMMcorrection=find_one_correction_factor("DY",false,"id1==1","MC_mm");
4539 buchmann 1.93 */
4540 buchmann 1.27 cout << "Corrections : " << endl;
4541     cout << " Data : " << datacorrection << endl;
4542 buchmann 1.93 // cout << " ee (" << dataEEcorrection << ") , mm (" << dataMMcorrection << ")" << endl;
4543 buchmann 1.27 cout << " MC : " << mccorrection << endl;
4544 buchmann 1.93 // cout << " ee (" << mcEEcorrection << ") , mm (" << mcMMcorrection << ")" << endl;
4545 buchmann 1.27
4546     //Step 2: Processing the result and making it into something useful :-)
4547 buchmann 1.1 stringstream jzbvardatas;
4548 buchmann 1.97 /*
4549 buchmann 1.27 jzbvardatas << "(";
4550    
4551     if(dataEEcorrection>=1) jzbvardatas<<"((id1==0&&id1==id2)*(jzb[1]-" << dataEEcorrection-1 << "*pt))";
4552     if(dataEEcorrection<1) jzbvardatas<<"((id1==0&&id1==id2)*(jzb[1]+" << 1-dataEEcorrection << "*pt))";
4553    
4554     if(dataMMcorrection>=1) jzbvardatas<<"+((id1==1&&id1==id2)*(jzb[1]-" << dataMMcorrection-1 << "*pt))";
4555     if(dataMMcorrection<1) jzbvardatas<<"+((id1==1&&id1==id2)*(jzb[1]+" << 1-dataMMcorrection << "*pt))";
4556    
4557     float averagecorrection=(dataMMcorrection+dataEEcorrection)/2.0;
4558    
4559 buchmann 1.30 if(datacorrection>=1) jzbvardatas<<"+((id1!=id2)*(jzb[1]-" << datacorrection-1 << "*pt))";
4560     if(datacorrection<1) jzbvardatas<<"+((id1!=id2)*(jzb[1]+" << 1-datacorrection << "*pt))";
4561 buchmann 1.27
4562     jzbvardatas << ")";
4563 buchmann 1.1 jzbvardata=jzbvardatas.str();
4564 buchmann 1.93 */
4565 buchmann 1.1 stringstream jzbvarmcs;
4566 buchmann 1.97 /*
4567 buchmann 1.27 jzbvarmcs << "(";
4568 buchmann 1.97
4569 buchmann 1.27 if(mcEEcorrection>=1) jzbvarmcs<<"((id1==0&&id1==id2)*(jzb[1]-" << mcEEcorrection-1 << "*pt))";
4570     if(mcEEcorrection<1) jzbvarmcs<<"((id1==0&&id1==id2)*(jzb[1]+" << 1-mcEEcorrection << "*pt))";
4571    
4572     if(mcMMcorrection>=1) jzbvarmcs<<"+((id1==1&&id1==id2)*(jzb[1]-" << mcMMcorrection-1 << "*pt))";
4573     if(mcMMcorrection<1) jzbvarmcs<<"+((id1==1&&id1==id2)*(jzb[1]+" << 1-mcMMcorrection << "*pt))";
4574    
4575     float averagemccorrection=(mcMMcorrection+mcEEcorrection)/2.0;
4576    
4577 buchmann 1.30 if(mccorrection>=1) jzbvarmcs<<"+((id1!=id2)*(jzb[1]-" << mccorrection-1 << "*pt))";
4578     if(mccorrection<1) jzbvarmcs<<"+((id1!=id2)*(jzb[1]+" << 1-mccorrection << "*pt))";
4579 buchmann 1.27
4580     jzbvarmcs << ")";
4581 buchmann 1.1 jzbvarmc=jzbvarmcs.str();
4582 buchmann 1.93 */
4583    
4584     if(datacorrection>=1) jzbvardatas<<"(jzb[1]-" << datacorrection-1 << "*pt)";
4585     if(datacorrection<1) jzbvardatas<<"(jzb[1]+" << 1-datacorrection << "*pt)";
4586    
4587     if(mccorrection>=1) jzbvarmcs<<"(jzb[1]-" << mccorrection-1 << "*pt)";
4588     if(mccorrection<1) jzbvarmcs<<"(jzb[1]+" << 1-mccorrection << "*pt)";
4589    
4590     jzbvardata = jzbvardatas.str();
4591     jzbvarmc = jzbvarmcs.str();
4592    
4593 buchmann 1.1 dout << "JZB Z pt correction summary : " << endl;
4594     dout << " Data: The response is " << datacorrection << " --> jzb variable is now : " << jzbvardata << endl;
4595     dout << " MC : The response is " << mccorrection << " --> jzb variable is now : " << jzbvarmc << endl;
4596 buchmann 1.27
4597 buchmann 1.1 }
4598    
4599 buchmann 1.88 void pick_up_events(string cut, string filename, bool QuietMode=false) {
4600     allsamples.PickUpEvents(cut,filename,QuietMode);
4601 buchmann 1.1 }
4602    
4603 buchmann 1.18 void save_template(string mcjzb, string datajzb,vector<float> jzb_cuts,float MCPeakError,float DataPeakError, vector<float> jzb_shape_limit_bins) {
4604 buchmann 1.1 dout << "Saving configuration template!" << endl;
4605     ofstream configfile;
4606     configfile.open("../DistributedModelCalculations/last_configuration.C");
4607     configfile<<"#include <iostream>\n";
4608     configfile<<"#include <vector>\n";
4609     configfile<<"#ifndef SampleClassLoaded\n";
4610     configfile<<"#include \"SampleClass.C\"\n";
4611     configfile<<"#endif\n";
4612     configfile<<"#define SetupLoaded\n";
4613     configfile<<"#ifndef ResultLibraryClassLoaded\n";
4614     configfile<<"#include \"ResultLibraryClass.C\"\n";
4615     configfile<<"#endif\n";
4616    
4617     configfile<<"\nusing namespace std;\n\n";
4618    
4619     configfile<<"namespace PlottingSetup { \n";
4620     configfile<<"string datajzb=\"datajzb_ERROR\";\n";
4621     configfile<<"string mcjzb=\"mcjzb_ERROR\";\n";
4622     configfile<<"vector<float>jzb_cuts;\n";
4623 buchmann 1.18 configfile<<"vector<float>jzb_shape_limit_bins;\n";
4624 buchmann 1.1 configfile<<"float MCPeakError=-999;\n";
4625 buchmann 1.11 configfile<<"float DataPeakError=-999;\n";
4626 buchmann 1.1 configfile<<"}\n\n";
4627    
4628     configfile<<"void read_config() {\n";
4629     configfile<<"datajzb=\""<<datajzb<<"\";\n";
4630     configfile<<"mcjzb=\""<<mcjzb<<"\";\n\n";
4631 buchmann 1.11 configfile<<"\n\nMCPeakError="<<MCPeakError<<";\n";
4632     configfile<<"DataPeakError="<<DataPeakError<<";\n\n";
4633 buchmann 1.16 for(int i=0;i<(int)jzb_cuts.size();i++) configfile<<"jzb_cuts.push_back("<<jzb_cuts[i]<<"); // JZB cut at " << jzb_cuts[i] << "\n";
4634 buchmann 1.1 configfile<<"\n\n";
4635 buchmann 1.16 for(int i=0;i<(int)Nobs.size();i++) configfile<<"Nobs.push_back("<<Nobs[i]<<"); // JZB cut at " << jzb_cuts[i] << "\n";
4636     for(int i=0;i<(int)Npred.size();i++) configfile<<"Npred.push_back("<<Npred[i]<<"); // JZB cut at " << jzb_cuts[i] << "\n";
4637     for(int i=0;i<(int)Nprederr.size();i++) configfile<<"Nprederr.push_back("<<Nprederr[i]<<"); // JZB cut at " << jzb_cuts[i] << "\n";
4638 buchmann 1.1 configfile<<"\n\n";
4639 buchmann 1.16 for(int i=0;i<(int)flippedNobs.size();i++) configfile<<"flippedNobs.push_back("<<flippedNobs[i]<<"); // JZB cut at " << jzb_cuts[i] << "\n";
4640     for(int i=0;i<(int)flippedNpred.size();i++) configfile<<"flippedNpred.push_back("<<flippedNpred[i]<<"); // JZB cut at " << jzb_cuts[i] << "\n";
4641 buchmann 1.21 for(int i=0;i<(int)flippedNprederr.size();i++) configfile<<"flippedNprederr.push_back("<<flippedNprederr[i]<<"); // JZB cut at " << jzb_cuts[i] << "\n";
4642 buchmann 1.18 for(int i=0;i<(int)jzb_shape_limit_bins.size();i++) configfile<<"jzb_shape_limit_bins.push_back("<<jzb_shape_limit_bins[i]<<"); // JZB shape bin boundary at " << jzb_shape_limit_bins[i] << "\n";
4643     configfile<<"\n\n";
4644 buchmann 1.1 configfile<<"\n\n";
4645     configfile<<"luminosity="<<luminosity<<";\n";
4646 buchmann 1.5 configfile<<"RestrictToMassPeak="<<RestrictToMassPeak<<";//defines the type of analysis we're running\n";
4647 buchmann 1.52 configfile<<"UseSidebandsForcJZB="<<UseSidebandsForcJZB<<";//tells us whether to use the sidebands or not\n";
4648 buchmann 1.1
4649     configfile<<"\n\ncout << \"Configuration successfully loaded!\" << endl; \n \n } \n \n";
4650    
4651     configfile.close();
4652    
4653     }
4654    
4655     float get_nonzero_minimum(TH1F *histo) {
4656     float min=histo->GetMaximum();
4657     for(int ibin=1;ibin<=histo->GetNbinsX();ibin++) {
4658     float curcont=histo->GetBinContent(ibin);
4659     if(curcont<min&&curcont>0) min=curcont;
4660     }
4661     return min;
4662     }
4663    
4664     void draw_all_ttbar_histos(TCanvas *can, vector<TH1F*> histos, string drawoption="", float manualmin=-9) {
4665     can->cd();
4666     float min=1;
4667     float max=histos[0]->GetMaximum();
4668     if(manualmin>=0) min=manualmin;
4669     else {
4670 buchmann 1.16 for(int i=1;i<(int)histos.size();i++) {
4671 buchmann 1.1 float curmin=get_nonzero_minimum(histos[i]);
4672     float curmax=histos[i]->GetMaximum();
4673     if(curmin<min) min=curmin;
4674     if(curmax>max) max=curmax;
4675     }
4676     }
4677     histos[0]->GetYaxis()->SetRangeUser(min,4*max);
4678     histos[0]->Draw(drawoption.c_str());
4679     stringstream drawopt;
4680     drawopt << drawoption << ",same";
4681 buchmann 1.16 for(int i=1;i<(int)histos.size();i++) {
4682 buchmann 1.1 histos[i]->Draw(drawopt.str().c_str());
4683     }
4684     }
4685    
4686 buchmann 1.93 void ttbar_sidebands_comparison(string mcjzb, vector<float> binning, string prestring, TCut cut) {
4687 buchmann 1.1 //in the case of the on peak analysis, we compare the 3 control regions to the real value
4688     //in the case of the OFF peak analysis, we compare our control region to the real value
4689     TCut weightbackup=cutWeight;
4690 buchmann 1.65 switch_overunderflow(true);
4691 buchmann 1.34
4692 buchmann 1.93 bool doPURW=true;
4693 buchmann 1.34
4694    
4695     if(!doPURW) {
4696 fronga 1.40 dout << "Not doing PU reweighting for ttbar closure test" << endl;
4697 buchmann 1.34 cutWeight="1.0";
4698     // Do it without PU re-weighting
4699     float MCPeakNoPU=0,MCPeakErrorNoPU=0,DataPeakNoPU=0,DataPeakErrorNoPU=0,MCSigma=0,DataSigma=0;
4700     stringstream resultsNoPU;
4701     stringstream noPUdatajzb;
4702     stringstream noPUmcjzb;
4703    
4704     stringstream mcjzbnoPU;
4705     find_peaks(MCPeakNoPU,MCPeakErrorNoPU, DataPeakNoPU, DataPeakErrorNoPU,resultsNoPU,true,noPUdatajzb,noPUmcjzb);
4706 buchmann 1.36 mcjzb = noPUmcjzb.str();
4707 buchmann 1.34 }
4708    
4709 fronga 1.40
4710 buchmann 1.1 float simulatedlumi = luminosity; //in pb please - adjust to your likings
4711    
4712 buchmann 1.93 TH1F *TZem = allsamples.Draw("TZem", mcjzb,binning,"JZB [GeV]","events",cutmass&&cutOSOF&&cutnJets&&cut,mc,simulatedlumi,allsamples.FindSample("/TT"));
4713     TH1F *nTZem = allsamples.Draw("nTZem","-"+mcjzb,binning,"JZB [GeV]","events",cutmass&&cutOSOF&&cutnJets&&cut,mc,simulatedlumi,allsamples.FindSample("/TT"));
4714 buchmann 1.1 TH1F *TSem;
4715     TH1F *nTSem;
4716 buchmann 1.93 TH1F *TZeemm = allsamples.Draw("TZeemm", mcjzb,binning,"JZB [GeV]","events",cutmass&&cutOSSF&&cutnJets&&cut,mc,simulatedlumi,allsamples.FindSample("/TT"));
4717     TH1F *nTZeemm = allsamples.Draw("nTZeemm","-"+mcjzb,binning,"JZB [GeV]","events",cutmass&&cutOSSF&&cutnJets&&cut,mc,simulatedlumi,allsamples.FindSample("/TT"));
4718 buchmann 1.1 TH1F *TSeemm;
4719     TH1F *nTSeemm;
4720    
4721 buchmann 1.50 if(PlottingSetup::RestrictToMassPeak&&PlottingSetup::UseSidebandsForcJZB) {
4722 buchmann 1.93 TSem = allsamples.Draw("TSem", mcjzb,binning,"JZB [GeV]","events",sidebandcut&&cutOSOF&&cutnJets&&cut,mc,simulatedlumi,allsamples.FindSample("/TT"));
4723     nTSem = allsamples.Draw("nTSem", "-"+mcjzb,binning,"JZB [GeV]","events",sidebandcut&&cutOSOF&&cutnJets&&cut,mc,simulatedlumi,allsamples.FindSample("/TT"));
4724     TSeemm = allsamples.Draw("TSeemm", mcjzb,binning,"JZB [GeV]","events",sidebandcut&&cutOSSF&&cutnJets&&cut,mc,simulatedlumi,allsamples.FindSample("/TT"));
4725     nTSeemm = allsamples.Draw("nTSeemm","-"+mcjzb,binning,"JZB [GeV]","events",sidebandcut&&cutOSSF&&cutnJets&&cut,mc,simulatedlumi,allsamples.FindSample("/TT"));
4726 buchmann 1.1 }
4727    
4728     TCanvas *tcan = new TCanvas("tcan","tcan");
4729     tcan->SetLogy(1);
4730    
4731     TZeemm->SetLineColor(kBlack);
4732     TZem->SetLineColor(kRed);
4733     TZeemm->SetMarkerColor(kBlack);
4734     TZem->SetMarkerColor(kRed);
4735    
4736    
4737 buchmann 1.50 if(PlottingSetup::RestrictToMassPeak&&PlottingSetup::UseSidebandsForcJZB) {
4738 buchmann 1.1 TSem->SetLineColor(TColor::GetColor("#00A616"));
4739     TSeemm->SetLineColor(kMagenta+2);
4740     TSem->SetMarkerColor(TColor::GetColor("#00A616"));
4741     TSeemm->SetMarkerColor(kMagenta+2);
4742     TSem->SetLineStyle(2);
4743     TSeemm->SetLineStyle(3);
4744     }
4745    
4746     vector<TH1F*> histos;
4747 buchmann 1.31 TZem->GetXaxis()->SetRangeUser(-100,binning[binning.size()-1]);
4748     TZeemm->GetXaxis()->SetRangeUser(-100,binning[binning.size()-1]);
4749 buchmann 1.1 histos.push_back(TZem);
4750     histos.push_back(TZeemm);
4751 buchmann 1.50 if(PlottingSetup::RestrictToMassPeak&&PlottingSetup::UseSidebandsForcJZB) {
4752 buchmann 1.31 TSeemm->GetXaxis()->SetRangeUser(-100,binning[binning.size()-1]);
4753     TSem->GetXaxis()->SetRangeUser(-100,binning[binning.size()-1]);
4754 buchmann 1.1 histos.push_back(TSem);
4755     histos.push_back(TSeemm);
4756     }
4757 buchmann 1.67 draw_all_ttbar_histos(tcan,histos,"histo",8);
4758 buchmann 1.1
4759     TLegend *leg = make_legend("MC t#bar{t}",0.6,0.65,false);
4760     leg->AddEntry(TZeemm,"SFZP","l");
4761     leg->AddEntry(TZem,"OFZP","l");
4762 buchmann 1.50 if(PlottingSetup::RestrictToMassPeak&&PlottingSetup::UseSidebandsForcJZB) {
4763 buchmann 1.1 leg->AddEntry(TSeemm,"SFSB","l");
4764     leg->AddEntry(TSem,"OFSB","l");
4765     }
4766     leg->Draw("same");
4767     DrawMCPrelim(simulatedlumi);
4768     CompleteSave(tcan,"Systematics/"+prestring+"/ttbar_shape_comparison");
4769 buchmann 1.66
4770 buchmann 1.1 TH1F *TZemcopy = (TH1F*)TZem->Clone("TZemcopy");
4771     TH1F *TZeemmcopy = (TH1F*)TZeemm->Clone("TZeemmcopy");
4772 buchmann 1.11 TH1F *TSeemmcopy;
4773     TH1F *TSemcopy;
4774 buchmann 1.50 if(PlottingSetup::RestrictToMassPeak&&PlottingSetup::UseSidebandsForcJZB) {
4775 buchmann 1.11 TSeemmcopy = (TH1F*)TSeemm->Clone("TSeemmcopy");
4776     TSemcopy = (TH1F*)TSem->Clone("TSemcopy");
4777     }
4778 buchmann 1.1
4779     TZem->Divide(TZeemm);
4780     TZem->SetMarkerStyle(21);
4781 buchmann 1.50 if(PlottingSetup::RestrictToMassPeak&&PlottingSetup::UseSidebandsForcJZB) {
4782 buchmann 1.1 TSem->Divide(TZeemm);
4783     TSeemm->Divide(TZeemm);
4784     TSem->SetMarkerStyle(24);
4785     TSeemm->SetMarkerStyle(32);
4786 fronga 1.40 }
4787 buchmann 1.1
4788     tcan->SetLogy(0);
4789     TZem->GetYaxis()->SetRangeUser(0,2.5);
4790     TZem->GetYaxis()->SetTitle("ratio");
4791     TZem->Draw();
4792 buchmann 1.50 if(PlottingSetup::RestrictToMassPeak&&PlottingSetup::UseSidebandsForcJZB) {
4793 buchmann 1.1 TSem->Draw("same");
4794     TSeemm->Draw("same");
4795     }
4796    
4797 buchmann 1.33 float linepos=emuncertONPEAK;
4798 buchmann 1.51 if(!PlottingSetup::RestrictToMassPeak) linepos=emuncertOFFPEAK;
4799 buchmann 1.33
4800 buchmann 1.1 TLine *top = new TLine(binning[0],1.0+linepos,binning[binning.size()-1],1.0+linepos);
4801     TLine *center = new TLine(binning[0],1.0,binning[binning.size()-1],1.0);
4802     TLine *bottom = new TLine(binning[0],1.0-linepos,binning[binning.size()-1],1.0-linepos);
4803    
4804 buchmann 1.11 /*write_warning(__FUNCTION__,"These two lines are to be removed!");
4805     TLine *topalt = new TLine(binning[0],1.0+0.1,binning[binning.size()-1],1.0+0.1);
4806     TLine *bottomalt = new TLine(binning[0],1.0-0.1,binning[binning.size()-1],1.0-0.1);
4807     topalt->SetLineColor(kRed);topalt->SetLineStyle(3);
4808     bottomalt->SetLineColor(kRed);bottomalt->SetLineStyle(3);
4809     topalt->Draw("same");bottomalt->Draw("same");*/
4810    
4811    
4812 buchmann 1.1 top->SetLineColor(kBlue);top->SetLineStyle(2);
4813     bottom->SetLineColor(kBlue);bottom->SetLineStyle(2);
4814     center->SetLineColor(kBlue);
4815    
4816     top->Draw("same");
4817     center->Draw("same");
4818     bottom->Draw("same");
4819    
4820     TLegend *leg2 = make_legend("MC t#bar{t}",0.55,0.75,false);
4821     leg2->AddEntry(TZem,"OFZP / SFZP","ple");
4822 buchmann 1.50 if(PlottingSetup::RestrictToMassPeak&&PlottingSetup::UseSidebandsForcJZB) {
4823 buchmann 1.1 leg2->AddEntry(TSeemm,"SFSB / SFZP","ple");
4824     leg2->AddEntry(TSem,"OFSB / SFZP","ple");
4825     }
4826     leg2->AddEntry(bottom,"syst. envelope","l");
4827     leg2->SetX1(0.25);leg2->SetX2(0.6);
4828     leg2->SetY1(0.65);
4829    
4830     leg2->Draw("same");
4831    
4832     DrawMCPrelim(simulatedlumi);
4833     CompleteSave(tcan,"Systematics/"+prestring+"/ttbar_shape_comparison_ratio");
4834    
4835 buchmann 1.66
4836 fronga 1.40 if (0) { // Turn this off: we don't need this
4837    
4838     ///-------------- second part: only look at the quantity we actually care about!
4839     TH1F *leftsfzp = (TH1F*)nTZeemm->Clone("leftsfzp");
4840     TH1F *rightsfzp = (TH1F*)TZeemmcopy->Clone("rightsfzp");
4841     rightsfzp->Add(leftsfzp,-1);
4842     TH1F *leftofzp = (TH1F*)nTZem->Clone("leftofzp");
4843     TH1F *rightofzp = (TH1F*)TZemcopy->Clone("rightofzp");
4844     rightofzp->Add(leftofzp,-1);
4845     TH1F *leftofsb;
4846     TH1F *rightofsb;
4847     TH1F *leftsfsb;
4848     TH1F *rightsfsb;
4849 buchmann 1.50 if(PlottingSetup::RestrictToMassPeak&&PlottingSetup::UseSidebandsForcJZB) {
4850 fronga 1.40 leftofsb = (TH1F*)nTSem->Clone("leftofsb");
4851     rightofsb = (TH1F*)TSemcopy->Clone("rightofsb");
4852     rightofsb->Add(leftofsb,-1);
4853     leftsfsb = (TH1F*)nTSeemm->Clone("leftsfsb");
4854     rightsfsb = (TH1F*)TSeemmcopy->Clone("rightsfsb");
4855     rightsfsb->Add(leftsfsb,-1);
4856     }
4857 buchmann 1.1
4858 fronga 1.40 tcan->SetLogy(1);
4859     rightsfzp->GetXaxis()->SetRangeUser(0,binning[binning.size()-1]);
4860     rightsfzp->GetYaxis()->SetTitle("#deltaJZB / 25 GeV");
4861     rightsfzp->Draw("histo");
4862     rightofzp->Draw("histo,same");
4863 buchmann 1.50 if(PlottingSetup::RestrictToMassPeak&&PlottingSetup::UseSidebandsForcJZB) {
4864 fronga 1.40 rightofsb->Draw("histo,same");
4865     rightsfsb->Draw("histo,same");
4866     }
4867     DrawMCPrelim(simulatedlumi);
4868    
4869     TLegend *legA = make_legend("MC t#bar{t}",0.6,0.65,false);
4870     legA->AddEntry(rightsfzp,"SFZP","l");
4871     legA->AddEntry(rightofzp,"OFZP","l");
4872 buchmann 1.50 if(PlottingSetup::RestrictToMassPeak&&PlottingSetup::UseSidebandsForcJZB) {
4873 fronga 1.40 legA->AddEntry(rightofsb,"SFSB","l");
4874     legA->AddEntry(rightsfsb,"OFSB","l");
4875     }
4876     legA->Draw();
4877 buchmann 1.1
4878 fronga 1.40 CompleteSave(tcan,"Systematics/"+prestring+"/ttbar_deltajzb_comparison");
4879 buchmann 1.1
4880 fronga 1.40 tcan->SetLogy(0);
4881     rightofzp->Divide(rightsfzp);
4882     rightofzp->GetXaxis()->SetRangeUser(0.0,binning[binning.size()-1]);
4883     rightofzp->GetYaxis()->SetRangeUser(0.0,2.5);
4884     rightofzp->GetYaxis()->SetTitle("#deltaJZB ratio");
4885     rightofzp->Draw();
4886 buchmann 1.50 if(PlottingSetup::RestrictToMassPeak&&PlottingSetup::UseSidebandsForcJZB) {
4887 fronga 1.40 rightofsb->Divide(rightsfzp);
4888     rightsfsb->Divide(rightsfzp);
4889     rightofsb->Draw("same");
4890     rightsfsb->Draw("same");
4891     }
4892 buchmann 1.1
4893 fronga 1.40 TLine *top2 = new TLine(0.0,1.0+linepos,binning[binning.size()-1],1.0+linepos);
4894     TLine *center2 = new TLine(0.0,1.0,binning[binning.size()-1],1.0);
4895     TLine *bottom2 = new TLine(0.0,1.0-linepos,binning[binning.size()-1],1.0-linepos);
4896    
4897     top2->SetLineColor(kBlue);top2->SetLineStyle(2);
4898     bottom2->SetLineColor(kBlue);bottom2->SetLineStyle(2);
4899     center2->SetLineColor(kBlue);
4900    
4901     top2->Draw("same");
4902     center2->Draw("same");
4903     bottom2->Draw("same");
4904 buchmann 1.1
4905 fronga 1.40 rightofzp->SetMarkerStyle(21);
4906 buchmann 1.50 if(PlottingSetup::RestrictToMassPeak&&PlottingSetup::UseSidebandsForcJZB) {
4907 fronga 1.40 rightofsb->SetMarkerStyle(24);
4908     rightsfsb->SetMarkerStyle(32);
4909     }
4910 buchmann 1.1
4911 fronga 1.40 TLegend *leg3 = make_legend("MC t#bar{t}",0.55,0.75,false);
4912     leg3->AddEntry(rightofzp,"OFZP / SFZP","ple");
4913 buchmann 1.50 if(PlottingSetup::RestrictToMassPeak&&PlottingSetup::UseSidebandsForcJZB) {
4914 fronga 1.40 leg3->AddEntry(rightsfsb,"SFSB / SFZP","ple");
4915     leg3->AddEntry(rightofsb,"OFSB / SFZP","ple");
4916     }
4917     leg3->AddEntry(bottom,"syst. envelope","l");
4918     leg3->SetX1(0.25);leg3->SetX2(0.6);
4919     leg3->SetY1(0.65);
4920 buchmann 1.1
4921 fronga 1.40 leg3->Draw("same");
4922 buchmann 1.1
4923 fronga 1.40 DrawMCPrelim(simulatedlumi);
4924     CompleteSave(tcan,"Systematics/"+prestring+"/ttbar_deltajzb_comparison_ratio");
4925 buchmann 1.1
4926     }
4927    
4928     delete TZem;
4929     delete nTZem;
4930     delete TZeemm;
4931     delete nTZeemm;
4932 buchmann 1.50 if(PlottingSetup::RestrictToMassPeak&&PlottingSetup::UseSidebandsForcJZB) {
4933 buchmann 1.1 delete TSem;
4934     delete nTSem;
4935     delete TSeemm;
4936     delete nTSeemm;
4937     }
4938    
4939     delete tcan;
4940     cutWeight=weightbackup;
4941 buchmann 1.65 switch_overunderflow(false);
4942 buchmann 1.1 }
4943    
4944     void ttbar_sidebands_comparison(string mcjzb, vector<float> jzb_binning) {
4945     vector<float> nicer_binning;
4946 buchmann 1.32
4947 buchmann 1.33 /* nicer_binning.push_back(-400);
4948 buchmann 1.31 nicer_binning.push_back(-250);
4949     nicer_binning.push_back(-200);
4950     nicer_binning.push_back(-150);
4951     nicer_binning.push_back(-100);
4952     nicer_binning.push_back(-50);
4953     nicer_binning.push_back(-20);
4954    
4955     nicer_binning.push_back(0);
4956     nicer_binning.push_back(20);
4957     nicer_binning.push_back(50);
4958     nicer_binning.push_back(100);
4959     nicer_binning.push_back(150);
4960     nicer_binning.push_back(200);
4961     nicer_binning.push_back(250);
4962 buchmann 1.33 nicer_binning.push_back(400);*/
4963    
4964 buchmann 1.1 nicer_binning.push_back(-100);
4965     nicer_binning.push_back(-50);
4966     nicer_binning.push_back(-25);
4967     nicer_binning.push_back(0);
4968     nicer_binning.push_back(25);
4969     nicer_binning.push_back(50);
4970     nicer_binning.push_back(75);
4971     nicer_binning.push_back(100);
4972     nicer_binning.push_back(125);
4973     nicer_binning.push_back(150);
4974 fronga 1.40 //nicer_binning.push_back(175);
4975 buchmann 1.1 nicer_binning.push_back(200);
4976 buchmann 1.66 // nicer_binning.push_back(250);
4977     // nicer_binning.push_back(300);
4978     // nicer_binning.push_back(400);
4979 buchmann 1.33
4980 buchmann 1.93 ttbar_sidebands_comparison(mcjzb,nicer_binning, "ttbar/",TCut("mll>0"));
4981 buchmann 1.97 ttbar_sidebands_comparison(mcjzb,nicer_binning, "ttbar/CutAt20",TCut("mll>20"));
4982 buchmann 1.93 ttbar_sidebands_comparison(mcjzb,nicer_binning, "ttbar/LowMassRegion2070",TCut("mll>20&&mll<70"));
4983     ttbar_sidebands_comparison(mcjzb,nicer_binning, "ttbar/ZWindow",Restrmasscut);
4984    
4985 buchmann 1.1 }
4986    
4987    
4988 buchmann 1.70 void zjets_prediction_comparison(string mcjzbWithPUa, TCut massregioncut, string massregionname) {
4989 buchmann 1.66 cout << "****************************************************************************************************************************************************************" << endl;
4990 buchmann 1.20 TCanvas *zcan = new TCanvas("zcan","zcan");
4991     TCut weightbackup=cutWeight;
4992 buchmann 1.36
4993 buchmann 1.66 bool UsePURW=true;
4994 buchmann 1.36
4995    
4996     string mcjzb;
4997     if(UsePURW) {
4998     mcjzb=mcjzbWithPUa;
4999 buchmann 1.66 cout << "Using PURW peak positions" << endl;
5000 buchmann 1.36 } else {
5001     // Do it without PU re-weighting
5002 buchmann 1.66 cutWeight="1.0";
5003 buchmann 1.36 float MCPeakNoPU=0,MCPeakErrorNoPU=0,DataPeakNoPU=0,DataPeakErrorNoPU=0,MCSigma=0,DataSigma=0;
5004     stringstream resultsNoPU;
5005     stringstream noPUdatajzb;
5006     stringstream noPUmcjzb;
5007    
5008     find_peaks(MCPeakNoPU,MCPeakErrorNoPU, DataPeakNoPU, DataPeakErrorNoPU,resultsNoPU,false,noPUdatajzb,noPUmcjzb);
5009     dout << "The peak corrected JZB expression for MC without pileup is : " << noPUmcjzb.str() << endl;
5010    
5011     mcjzb = noPUmcjzb.str();
5012    
5013     }
5014 buchmann 1.34
5015 buchmann 1.25
5016 buchmann 1.92
5017 buchmann 1.25 vector<float> binning;
5018     binning.push_back(0);
5019 buchmann 1.33 binning.push_back(10);
5020 buchmann 1.93 binning.push_back(30);
5021     // binning.push_back(40);
5022     // binning.push_back(60);
5023     binning.push_back(50);
5024 buchmann 1.36 // binning.push_back(60);
5025     // binning.push_back(70);
5026     // binning.push_back(80);
5027     // binning.push_back(90);
5028 buchmann 1.25 binning.push_back(100);
5029 buchmann 1.36
5030 buchmann 1.1 float simulatedlumi = luminosity;//in pb please - adjust to your likings
5031    
5032     TCut kPos((mcjzb+">0").c_str());
5033     TCut kNeg((mcjzb+"<0").c_str());
5034 buchmann 1.92 TCut reducedNJets(cutnJets);
5035 buchmann 1.1 string var( "abs("+mcjzb+")" );
5036 buchmann 1.36
5037 buchmann 1.92
5038 buchmann 1.93 TCut notTau("!EventZToTaus");
5039 buchmann 1.66 TCut ee_mm_tautau("mll>0");
5040 buchmann 1.36
5041 buchmann 1.95 TH1F *hJZBpos = allsamples.Draw("hJZBpos",var,binning, "JZB [GeV]", "events",cutmass&&cutOSSF&&cutnJets&&notTau&&kPos&&massregioncut,mc,simulatedlumi,allsamples.FindSample("DYJetsToLL"));
5042     TH1F *hJZBneg = allsamples.Draw("hJZBneg",var,binning, "JZB [GeV]", "events",cutmass&&cutOSSF&&cutnJets&&notTau&&kNeg&&massregioncut,mc,simulatedlumi,allsamples.FindSample("DYJetsToLL"));
5043 buchmann 1.36
5044 buchmann 1.1 hJZBpos->SetLineColor(kBlack);
5045     hJZBneg->SetLineColor(kRed);
5046    
5047 buchmann 1.25 hJZBpos->SetMinimum(1.0);
5048 buchmann 1.1 hJZBpos->Draw("e1");
5049     hJZBneg->Draw("same,hist");
5050     hJZBpos->Draw("same,e1"); // So it's on top...
5051    
5052 buchmann 1.36 TLegend *leg = make_legend("MC Z+jets #rightarrow ee,#mu#mu",0.55,0.75,false);
5053 buchmann 1.1 leg->AddEntry(hJZBpos,"Observed","pe");
5054     leg->AddEntry(hJZBneg,"Predicted","l");
5055     leg->Draw("same");
5056     DrawMCPrelim(simulatedlumi);
5057 buchmann 1.70 CompleteSave(zcan,"Systematics/ZJets/zjets_eemm_prediction"+any2string(massregionname));
5058 buchmann 1.1
5059     TH1F* hratio = (TH1F*)hJZBpos->Clone("hratio");
5060     hratio->Divide(hJZBneg);
5061    
5062 buchmann 1.30 for(int i=1;i<=hJZBpos->GetNbinsX();i++) {
5063 buchmann 1.93 cout << "Positive: " << hJZBpos->GetBinContent(i) << " +/- " << hJZBpos->GetBinError(i) << " vs Negative : " << hJZBneg->GetBinContent(i) << " +/- " << hJZBneg->GetBinError(i) << " (ratio : " << hJZBpos->GetBinContent(i) / hJZBneg->GetBinContent(i) << " +/- " << (hJZBpos->GetBinContent(i) / hJZBneg->GetBinContent(i)) * sqrt(pow(hJZBpos->GetBinError(i)/hJZBpos->GetBinContent(i),2) + pow(hJZBneg->GetBinError(i)/hJZBneg->GetBinContent(i),2)) << ")" << endl;
5064 buchmann 1.30 }
5065    
5066 buchmann 1.70 // zcan->SetLogy(0);
5067 buchmann 1.66 hratio->GetYaxis()->SetRangeUser(0,2.5);
5068 buchmann 1.1 hratio->GetYaxis()->SetTitle("Observed/Predicted");
5069     hratio->Draw("e1");
5070    
5071 buchmann 1.92 TLine *top = new TLine(binning[0],1.2,binning[binning.size()-1],1.2);
5072 buchmann 1.25 TLine *center = new TLine(binning[0],1.0,binning[binning.size()-1],1.0);
5073 buchmann 1.92 TLine *bottom = new TLine(binning[0],0.8,binning[binning.size()-1],0.8);
5074 buchmann 1.1
5075    
5076     top->SetLineColor(kBlue);top->SetLineStyle(2);
5077     bottom->SetLineColor(kBlue);bottom->SetLineStyle(2);
5078     center->SetLineColor(kBlue);
5079    
5080     top->Draw("same");
5081     center->Draw("same");
5082     bottom->Draw("same");
5083    
5084 buchmann 1.36 TLegend *leg2 = make_legend("MC Z+jets #rightarrow ee,#mu#mu",0.25,0.75,false);
5085 buchmann 1.1 leg2->AddEntry(hratio,"obs / pred","pe");
5086     leg2->AddEntry(bottom,"syst. envelope","l");
5087     leg2->Draw("same");
5088     DrawMCPrelim(simulatedlumi);
5089 buchmann 1.70 CompleteSave(zcan,"Systematics/ZJets/zjets_eemm_prediction_ratio"+any2string(massregionname));
5090 buchmann 1.36
5091 buchmann 1.95 TH1F *TAUhJZBpos = allsamples.Draw("TAUhJZBpos",var,binning, "JZB [GeV]", "events",cutmass&&cutOSSF&&reducedNJets&&ee_mm_tautau&&kPos&&massregioncut,mc,simulatedlumi,allsamples.FindSample("DYJetsToLL"));
5092     TH1F *LcorrJZBeemm = allsamples.Draw("LcorrJZBeemm",var,binning, "JZB [GeV]", "events",cutmass&&cutOSSF&&reducedNJets&&ee_mm_tautau&&kNeg&&massregioncut,mc,simulatedlumi,allsamples.FindSample("DYJetsToLL"));
5093     TH1F *RcorrJZBem = allsamples.Draw("RcorrJZBem",var,binning, "JZB [GeV]", "events",cutmass&&cutOSOF&&reducedNJets&&ee_mm_tautau&&kPos&&massregioncut,mc,simulatedlumi,allsamples.FindSample("DYJetsToLL"));
5094     TH1F *LcorrJZBem = allsamples.Draw("LcorrJZBem",var,binning, "JZB [GeV]", "events",cutmass&&cutOSOF&&reducedNJets&&ee_mm_tautau&&kNeg&&massregioncut,mc,simulatedlumi,allsamples.FindSample("DYJetsToLL"));
5095 buchmann 1.36
5096     TH1F *RcorrJZBSBem;
5097     TH1F *LcorrJZBSBem;
5098     TH1F *RcorrJZBSBeemm;
5099     TH1F *LcorrJZBSBeemm;
5100    
5101 buchmann 1.50 if(PlottingSetup::RestrictToMassPeak&&PlottingSetup::UseSidebandsForcJZB) {
5102 buchmann 1.95 RcorrJZBSBem = allsamples.Draw("RcorrJZBSBem",var,binning, "JZB [GeV]", "events",sidebandcut&&cutOSOF&&reducedNJets&&ee_mm_tautau&&kPos&&massregioncut,mc,simulatedlumi,allsamples.FindSample("DYJetsToLL"));
5103     LcorrJZBSBem = allsamples.Draw("LcorrJZBSBem",var,binning, "JZB [GeV]", "events",sidebandcut&&cutOSOF&&reducedNJets&&ee_mm_tautau&&kNeg&&massregioncut,mc,simulatedlumi,allsamples.FindSample("DYJetsToLL"));
5104     RcorrJZBSBeemm = allsamples.Draw("RcorrJZBSBeemm",var,binning, "JZB [GeV]", "events",sidebandcut&&cutOSSF&&reducedNJets&&ee_mm_tautau&&kPos&&massregioncut,mc,simulatedlumi,allsamples.FindSample("DYJetsToLL"));
5105     LcorrJZBSBeemm = allsamples.Draw("LcorrJZBSBeemm",var,binning, "JZB [GeV]", "events",sidebandcut&&cutOSSF&&reducedNJets&&ee_mm_tautau&&kNeg&&massregioncut,mc,simulatedlumi,allsamples.FindSample("DYJetsToLL"));
5106 buchmann 1.36 }
5107    
5108     TH1F *Bpred = (TH1F*)LcorrJZBeemm->Clone("Bpred");
5109 buchmann 1.50 if(PlottingSetup::RestrictToMassPeak&&PlottingSetup::UseSidebandsForcJZB) {
5110 buchmann 1.36 Bpred->Add(RcorrJZBem,1.0/3.);
5111     Bpred->Add(LcorrJZBem,-1.0/3.);
5112     Bpred->Add(RcorrJZBSBem,1.0/3.);
5113     Bpred->Add(LcorrJZBSBem,-1.0/3.);
5114     Bpred->Add(RcorrJZBSBeemm,1.0/3.);
5115     Bpred->Add(LcorrJZBSBeemm,-1.0/3.);
5116     } else {
5117     Bpred->Add(RcorrJZBem,1.0);
5118     Bpred->Add(LcorrJZBem,-1.0);
5119     }
5120    
5121     Bpred->SetLineColor(kRed);
5122    
5123     TAUhJZBpos->SetLineColor(kBlack);
5124     Bpred->SetLineColor(kRed);
5125    
5126     TAUhJZBpos->SetMinimum(1.0);
5127     TAUhJZBpos->Draw("e1");
5128     Bpred->Draw("same,hist");
5129     TAUhJZBpos->Draw("same,e1");
5130    
5131     TLegend *TAUleg = make_legend("MC Z+jets #rightarrow ee,#mu#mu,#tau#tau",0.55,0.75,false);
5132     TAUleg->AddEntry(TAUhJZBpos,"Observed","pe");
5133     TAUleg->AddEntry(Bpred,"Predicted","l");
5134     TAUleg->Draw("same");
5135     DrawMCPrelim(simulatedlumi);
5136 buchmann 1.70 CompleteSave(zcan,"Systematics/ZJets/zjets_eemumutautau_prediction__"+any2string(massregionname));
5137 buchmann 1.36
5138     TH1F* TAUhratio = (TH1F*)TAUhJZBpos->Clone("TAUhratio");
5139     TAUhratio->Divide(Bpred);
5140    
5141     for(int i=1;i<=TAUhJZBpos->GetNbinsX();i++) {
5142 buchmann 1.94 cout << "ee/mm/tautau observed: " << TAUhJZBpos->GetBinContent(i) << " +/- " << TAUhJZBpos->GetBinError(i) << " vs Negative : " << Bpred->GetBinContent(i) << " +/- " << Bpred->GetBinError(i) << " (ratio : " << TAUhJZBpos->GetBinContent(i) / Bpred->GetBinContent(i) << " +/- " << (TAUhJZBpos->GetBinContent(i) / Bpred->GetBinContent(i)) * sqrt(pow(TAUhJZBpos->GetBinError(i)/TAUhJZBpos->GetBinContent(i),2) + pow(Bpred->GetBinError(i)/Bpred->GetBinContent(i),2)) << ")" << endl;
5143    
5144    
5145 buchmann 1.36 }
5146    
5147     zcan->SetLogy(0);
5148     TAUhratio->GetYaxis()->SetRangeUser(0,2.5);
5149     TAUhratio->GetYaxis()->SetTitle("Observed/Predicted");
5150     TAUhratio->Draw("e1");
5151    
5152     top->Draw("same");
5153     center->Draw("same");
5154     bottom->Draw("same");
5155    
5156 buchmann 1.66 TLegend *TAUleg2 = make_legend("MC Z+jets #rightarrow ee,#mu#mu",0.25,0.75,false);
5157 buchmann 1.36 TAUleg2->AddEntry(TAUhratio,"obs / pred","pe");
5158     TAUleg2->AddEntry(bottom,"syst. envelope","l");
5159     TAUleg2->Draw("same");
5160     DrawMCPrelim(simulatedlumi);
5161 buchmann 1.70 CompleteSave(zcan,"Systematics/ZJets/zjets_eemumutautau_prediction_ratio"+any2string(massregionname));
5162 buchmann 1.36
5163     delete Bpred;
5164     delete TAUhJZBpos;
5165     delete LcorrJZBeemm;
5166     delete RcorrJZBem;
5167     delete LcorrJZBem;
5168 buchmann 1.70 delete hJZBpos;
5169     delete hJZBneg;
5170 buchmann 1.36
5171 buchmann 1.50 if(PlottingSetup::RestrictToMassPeak&&PlottingSetup::UseSidebandsForcJZB) {
5172 buchmann 1.36 delete RcorrJZBSBem;
5173     delete LcorrJZBSBem;
5174     delete RcorrJZBSBeemm;
5175     delete LcorrJZBSBeemm;
5176     }
5177    
5178 buchmann 1.92 //***************************************************************************************************
5179    
5180     string jzbvar=var;
5181 buchmann 1.93 /*
5182 buchmann 1.92 for(int i=0;i<60;i+=10) {
5183     stringstream sSpecialJZBCut;
5184     sSpecialJZBCut << jzbvar << ">" << i;
5185     TCut SpecialJZBCut(sSpecialJZBCut.str().c_str());
5186    
5187     var="mll";
5188    
5189 buchmann 1.95 TH1F *FullJZBhJZBpos = allsamples.Draw("FullJZBhJZBpos",var,10,0,200, "m_{ll} [GeV]", "events",cutmass&&cutOSSF&&reducedNJets&&notTau&&kPos&&massregioncut&&SpecialJZBCut,mc,simulatedlumi,allsamples.FindSample("DYJetsToLL"));
5190     TH1F *LcorrJZBPluseemm = allsamples.Draw("LcorrJZBPluseemm",var,10,0,200, "m_{ll} [GeV]", "events",cutmass&&cutOSSF&&reducedNJets&&notTau&&kNeg&&massregioncut&&SpecialJZBCut,mc,simulatedlumi,allsamples.FindSample("DYJetsToLL"));
5191     TH1F *RcorrJZBPlusem = allsamples.Draw("RcorrJZBPlusem",var,10,0,200, "m_{ll} [GeV]", "events",cutmass&&cutOSOF&&reducedNJets&&notTau&&kPos&&massregioncut&&SpecialJZBCut,mc,simulatedlumi,allsamples.FindSample("DYJetsToLL"));
5192     TH1F *LcorrJZBPlusem = allsamples.Draw("LcorrJZBPlusem",var,10,0,200, "m_{ll} [GeV]", "events",cutmass&&cutOSOF&&reducedNJets&&notTau&&kNeg&&massregioncut&&SpecialJZBCut,mc,simulatedlumi,allsamples.FindSample("DYJetsToLL"));
5193 buchmann 1.92
5194     TH1F *RcorrJZBPlusSBem;
5195     TH1F *LcorrJZBPlusSBem;
5196     TH1F *RcorrJZBPlusSBeemm;
5197     TH1F *LcorrJZBPlusSBeemm;
5198    
5199    
5200     if(PlottingSetup::RestrictToMassPeak&&PlottingSetup::UseSidebandsForcJZB) {
5201 buchmann 1.95 RcorrJZBPlusSBem = allsamples.Draw("RcorrJZBPlusSBem",var,10,0,200, "m_{ll} [GeV]", "events",sidebandcut&&cutOSOF&&reducedNJets&&notTau&&kPos&&massregioncut&&SpecialJZBCut,mc,simulatedlumi,allsamples.FindSample("DYJetsToLL"));
5202     LcorrJZBPlusSBem = allsamples.Draw("LcorrJZBPlusSBem",var,10,0,200, "m_{ll} [GeV]", "events",sidebandcut&&cutOSOF&&reducedNJets&&notTau&&kNeg&&massregioncut&&SpecialJZBCut,mc,simulatedlumi,allsamples.FindSample("DYJetsToLL"));
5203     RcorrJZBPlusSBeemm = allsamples.Draw("RcorrJZBPlusSBeemm",var,10,0,200, "m_{ll} [GeV]", "events",sidebandcut&&cutOSSF&&reducedNJets&&notTau&&kPos&&massregioncut&&SpecialJZBCut,mc,simulatedlumi,allsamples.FindSample("DYJetsToLL"));
5204     LcorrJZBPlusSBeemm = allsamples.Draw("LcorrJZBPlusSBeemm",var,10,0,200, "m_{ll} [GeV]", "events",sidebandcut&&cutOSSF&&reducedNJets&&notTau&&kNeg&&massregioncut&&SpecialJZBCut,mc,simulatedlumi,allsamples.FindSample("DYJetsToLL"));
5205 buchmann 1.92 }
5206    
5207     TH1F *BpredPrime = (TH1F*)LcorrJZBPluseemm->Clone("BpredPrime");
5208     if(PlottingSetup::RestrictToMassPeak&&PlottingSetup::UseSidebandsForcJZB) {
5209     BpredPrime->Add(RcorrJZBPlusem,1.0/3.);
5210     BpredPrime->Add(LcorrJZBPlusem,-1.0/3.);
5211     BpredPrime->Add(RcorrJZBPlusSBem,1.0/3.);
5212     BpredPrime->Add(LcorrJZBPlusSBem,-1.0/3.);
5213     BpredPrime->Add(RcorrJZBPlusSBeemm,1.0/3.);
5214     BpredPrime->Add(LcorrJZBPlusSBeemm,-1.0/3.);
5215     } else {
5216     BpredPrime->Add(RcorrJZBPlusem,1.0);
5217     BpredPrime->Add(LcorrJZBPlusem,-1.0);
5218     }
5219    
5220     BpredPrime->SetLineColor(kRed);
5221    
5222     FullJZBhJZBpos->SetLineColor(kBlack);
5223     BpredPrime->SetLineColor(kRed);
5224    
5225     FullJZBhJZBpos->SetMinimum(1.0);
5226     FullJZBhJZBpos->Draw("e1");
5227     BpredPrime->Draw("same,hist");
5228     FullJZBhJZBpos->Draw("same,e1");
5229    
5230     TLegend *FullJZBleg = make_legend("MC Z+jets #rightarrow ee,#mu#mu",0.55,0.75,false);
5231     FullJZBleg->AddEntry(FullJZBhJZBpos,"Observed","pe");
5232     FullJZBleg->AddEntry(BpredPrime,"Predicted","l");
5233     FullJZBleg->Draw("same");
5234     DrawMCPrelim(simulatedlumi);
5235     CompleteSave(zcan,"Systematics/ZJets/Mll_Distribution_JZB"+any2string(i)+"_zjets_eemumu_prediction__"+any2string(massregionname));
5236    
5237     TH1F* FullJZBhratio = (TH1F*)FullJZBhJZBpos->Clone("FullJZBhratio");
5238     FullJZBhratio->Divide(BpredPrime);
5239    
5240     zcan->SetLogy(0);
5241     FullJZBhratio->GetYaxis()->SetRangeUser(0,2.5);
5242     FullJZBhratio->GetYaxis()->SetTitle("Observed/Predicted");
5243     FullJZBhratio->Draw("e1");
5244    
5245     TLine *atop = new TLine(0,1.2,200,1.2);
5246     TLine *acenter = new TLine(0,1.0,200,1.0);
5247     TLine *abottom = new TLine(0,0.8,200,0.8);
5248    
5249     atop->SetLineColor(kBlue);
5250     atop->SetLineStyle(2);
5251     acenter->SetLineColor(kBlue);
5252     abottom->SetLineColor(kBlue);
5253     abottom->SetLineStyle(2);
5254    
5255     atop->Draw("same");
5256     acenter->Draw("same");
5257     abottom->Draw("same");
5258    
5259     TLegend *FullJZBleg2 = make_legend("MC Z+jets #rightarrow ee,#mu#mu",0.25,0.75,false);
5260     FullJZBleg2->AddEntry(FullJZBhratio,"obs / pred","pe");
5261     FullJZBleg2->AddEntry(abottom,"syst. envelope","l");
5262     FullJZBleg2->Draw("same");
5263     DrawMCPrelim(simulatedlumi);
5264     CompleteSave(zcan,"Systematics/ZJets/Mll_Distribution_JZB"+any2string(i)+"zjets_eemumu_prediction_ratio"+any2string(massregionname));
5265    
5266    
5267     delete BpredPrime;
5268     delete FullJZBhJZBpos;
5269     delete LcorrJZBPluseemm;
5270     delete RcorrJZBPlusem;
5271     delete LcorrJZBPlusem;
5272     // delete FullJZBhJZBpos;
5273    
5274     if(PlottingSetup::RestrictToMassPeak&&PlottingSetup::UseSidebandsForcJZB) {
5275     delete RcorrJZBPlusSBem;
5276     delete LcorrJZBPlusSBem;
5277     delete RcorrJZBPlusSBeemm;
5278     delete LcorrJZBPlusSBeemm;
5279     }
5280    
5281     }
5282     //***************************************************************************************************
5283 buchmann 1.93 */
5284 buchmann 1.1 delete zcan;
5285     cutWeight=weightbackup;
5286     }
5287    
5288    
5289 buchmann 1.70 void zjets_prediction_comparison(string mcjzbWithPUa) {
5290 buchmann 1.93 zjets_prediction_comparison(mcjzbWithPUa, TCut("mll>20"), "nomasscut");
5291 buchmann 1.92 zjets_prediction_comparison(mcjzbWithPUa, TCut("abs(mll-91)<10"), "Zwindow_10");
5292 buchmann 1.70 zjets_prediction_comparison(mcjzbWithPUa, TCut("mll>20&&mll<70"), "LowMassRegion2070");
5293 buchmann 1.93 // zjets_prediction_comparison(mcjzbWithPUa, TCut("abs(mll-91)>10&&mll>20"), "Outside_Zwindow_10");
5294     // zjets_prediction_comparison(mcjzbWithPUa, TCut("mll>110"), "HighMassRegion110");
5295 buchmann 1.70 }
5296    
5297 buchmann 1.1 void sideband_assessment(string datajzb, float min=30.0, float max=50.0) {
5298     tout << endl << endl;
5299     stringstream bordercut;
5300     bordercut << "(TMath::Abs(" << datajzb << ")<" << max << ")&&(TMath::Abs(" << datajzb << ")>" << min << ")";
5301     tout << bordercut.str().c_str() << endl;
5302     TH1F *ofsb = allsamples.Draw("ofsb",datajzb,100, 0,100, "JZB [GeV]", "events", sidebandcut&&cutOSOF&&cutnJets&&bordercut.str().c_str(),data, luminosity);
5303     TH1F *ofzp = allsamples.Draw("ofzp",datajzb,100, 0,100, "JZB [GeV]", "events", cutmass&&cutOSOF&&cutnJets&&bordercut.str().c_str(),data, luminosity);
5304     float OFSB = ofsb->Integral();
5305     float OFZP = ofzp->Integral();
5306    
5307     tout << "\\begin{table}[hbtp]" << endl;
5308     tout << "\\renewcommand{\\arraystretch}{1.3}" << endl;
5309     tout << "\\begin{center}" << endl;
5310     tout << "\\caption{Total number of events observed in the auxiliary region $|JZB|>"<<min<<"\\GeV \\cup |JZB|<"<<max<<"\\GeV$ for the {\\OFZP} and {\\OFSB}.}\\label{tab:auxcounts}" << endl;
5311     tout << "\\begin{tabular}{l|cc}" << endl;
5312     tout << "\\hline" << endl;
5313     tout << "& {\\OFZP} & {\\OFSB} \\\\\\hline" << endl;
5314 buchmann 1.25 tout << "\\#(events) & "<<OFZP<<" & "<<OFSB<<"\\\\ \\hline" << endl;
5315 buchmann 1.1 tout << "\\end{tabular}" << endl;
5316     tout << "\\end{center}" << endl;
5317     tout << "\\end{table}" << endl;
5318    
5319    
5320     }
5321    
5322     void make_table(samplecollection &coll, string jzbexpr, bool is_data, vector<float> jzb_cuts, string subselection="none") {
5323    
5324     vector<float> jzbcutprediction;
5325     vector<float> metcutprediction;
5326    
5327     vector<float> jzbcutobservation;
5328     vector<float> metcutobservation;
5329    
5330     TCanvas *cannie = new TCanvas("cannie","cannie");
5331    
5332 buchmann 1.16 for(int icut=0;icut<(int)jzb_cuts.size();icut++) {
5333 buchmann 1.1 float currcut=jzb_cuts[icut];
5334     int nbins=1;float low=currcut;
5335     vector<int> mysample;
5336     if(subselection!="none") mysample=coll.FindSample(subselection);
5337     TH1F *RcorrJZBeemm = coll.Draw("RcorrJZBeemm",jzbexpr,1,currcut,14000, "JZB [GeV]", "events", cutmass&&cutOSSF&&cutnJets,is_data, luminosity, mysample);
5338     TH1F *LcorrJZBeemm = coll.Draw("LcorrJZBeemm",("-("+jzbexpr+")").c_str(),nbins,low,14000, "JZB [GeV]", "events", cutmass&&cutOSSF&&cutnJets,is_data, luminosity, mysample);
5339     TH1F *RcorrJZBem = coll.Draw("RcorrJZBem",jzbexpr.c_str(),nbins,low,14000, "JZB [GeV]", "events", cutmass&&cutOSOF&&cutnJets,is_data, luminosity, mysample);
5340     TH1F *LcorrJZBem = coll.Draw("LcorrJZBem",("-("+jzbexpr+")").c_str(),nbins,low,14000, "JZB [GeV]", "events", cutmass&&cutOSOF&&cutnJets,is_data, luminosity, mysample);
5341    
5342     TH1F *RcorrJZBSBem;
5343     TH1F *LcorrJZBSBem;
5344     TH1F *RcorrJZBSBeemm;
5345     TH1F *LcorrJZBSBeemm;
5346    
5347 buchmann 1.50 if(PlottingSetup::RestrictToMassPeak&&PlottingSetup::UseSidebandsForcJZB) {
5348 buchmann 1.1 RcorrJZBSBem = coll.Draw("RcorrJZBSBem",jzbexpr.c_str(),nbins,low,14000, "JZB [GeV]", "events", sidebandcut&&cutOSOF&&cutnJets,is_data, luminosity, mysample);
5349     LcorrJZBSBem = coll.Draw("LcorrJZBSBem",("-("+jzbexpr+")").c_str(),nbins,low,14000, "JZB [GeV]", "events", sidebandcut&&cutOSOF&&cutnJets,is_data, luminosity, mysample);
5350     RcorrJZBSBeemm = coll.Draw("RcorrJZBSBeemm",jzbexpr.c_str(),nbins,low,14000, "JZB [GeV]", "events", sidebandcut&&cutOSSF&&cutnJets,is_data, luminosity, mysample);
5351     LcorrJZBSBeemm = coll.Draw("LcorrJZBSBeemm",("-("+jzbexpr+")").c_str(),nbins,low,14000, "JZB [GeV]", "events", sidebandcut&&cutOSSF&&cutnJets,is_data, luminosity, mysample);
5352     }
5353    
5354     TH1F *Bpred = (TH1F*)LcorrJZBeemm->Clone("Bpred");
5355 buchmann 1.50 if(PlottingSetup::RestrictToMassPeak&&PlottingSetup::UseSidebandsForcJZB) {
5356 buchmann 1.1 Bpred->Add(RcorrJZBem,1.0/3.);
5357     Bpred->Add(LcorrJZBem,-1.0/3.);
5358     Bpred->Add(RcorrJZBSBem,1.0/3.);
5359     Bpred->Add(LcorrJZBSBem,-1.0/3.);
5360     Bpred->Add(RcorrJZBSBeemm,1.0/3.);
5361     Bpred->Add(LcorrJZBSBeemm,-1.0/3.);
5362     } else {
5363     Bpred->Add(RcorrJZBem,1.0);
5364     Bpred->Add(LcorrJZBem,-1.0);
5365     }
5366    
5367     jzbcutobservation.push_back(RcorrJZBeemm->Integral());
5368     jzbcutprediction.push_back(Bpred->Integral());
5369    
5370     delete RcorrJZBeemm;
5371     delete LcorrJZBeemm;
5372     delete RcorrJZBem;
5373     delete LcorrJZBem;
5374     delete RcorrJZBSBem;
5375     delete LcorrJZBSBem;
5376     delete RcorrJZBSBeemm;
5377     delete LcorrJZBSBeemm;
5378    
5379     TH1F *MetObs = coll.Draw("MetObs",("met[4]"),nbins,low,14000, "JZB [GeV]", "events", cutmass&&cutOSSF&&cutnJets,is_data, luminosity, mysample);
5380     TH1F *MetPred = coll.Draw("MetPred",("met[4]"),nbins,low,14000, "JZB [GeV]", "events", cutmass&&cutOSOF&&cutnJets,is_data, luminosity, mysample);
5381    
5382     metcutobservation.push_back(MetObs->Integral());
5383     metcutprediction.push_back(MetPred->Integral());
5384     delete MetObs;
5385     delete MetPred;
5386     }//end of cut loop
5387    
5388     //prediction part
5389     if(is_data) cout << "Data prediction & ";
5390     if(subselection!="none") cout << subselection << " prediction &";
5391 buchmann 1.16 for(int ij=0;ij<(int)jzb_cuts.size();ij++) cout << jzbcutprediction[ij] << " vs " << metcutprediction[ij] << " & ";
5392 buchmann 1.1
5393     cout << endl;
5394     //observation part
5395     if(is_data) cout << "Data observation & ";
5396     if(subselection!="none") cout << subselection << " observation &";
5397 buchmann 1.16 for(int ij=0;ij<(int)jzb_cuts.size();ij++) cout << jzbcutobservation[ij] << " vs " << metcutobservation[ij] << " & ";
5398 buchmann 1.1 cout << endl;
5399     cout << "_________________________________________________________________" << endl;
5400     delete cannie;
5401     }
5402    
5403     void met_jzb_cut(string datajzb, string mcjzb, vector<float> jzb_cut) {
5404 buchmann 1.79 cout << "You probably don't want --met, you want --metplots ... " << endl;
5405     assert(0);
5406 buchmann 1.1 /*we want a table like this:
5407     __________________ 50 | 100 | ...
5408     | Data prediction | a vs b | a vs b | ...
5409     | Data observed | a vs b | a vs b | ...
5410     --------------------------------------
5411     --------------------------------------
5412     | LM4 prediction | a vs b | a vs b | ...
5413     | LM4 observed | a vs b | a vs b | ...
5414     | LM8 prediction | a vs b | a vs b | ...
5415     | LM8 observed | a vs b | a vs b | ...
5416    
5417     where a is the result for a jzb cut at X, and b is the result for a met cut at X
5418     */
5419     make_table(allsamples,datajzb, true,jzb_cut,"none");
5420     make_table(signalsamples,mcjzb, false,jzb_cut,"LM4");
5421     make_table(signalsamples,mcjzb, false,jzb_cut,"LM8");
5422     }
5423    
5424    
5425     //________________________________________________________________________________________
5426     // JZB Efficiency plot (efficiency of passing reco. JZB cut as function of generator JZB cut)
5427     void JZBSelEff(string mcjzb, TTree* events, string informalname, vector<float> jzb_bins) {
5428    
5429     float min = 0, max = 400;
5430     float xbins[] = {min,10,20,30,40,50,60,70,80,90,100,110,120,140,150,160,170,180,190,200,210,220,250,300,max,max+100};
5431     int nbins = sizeof(xbins)/sizeof(float)-1;
5432     int markers[] = { 20, 26, 21, 24, 22, 25, 28 };
5433    
5434 buchmann 1.14
5435     TH1F* heff = new TH1F("heff", "JZB eff ; generator JZB [GeV]; efficiency",nbins,xbins);
5436     TH1F* hgen = new TH1F("hgen", "JZB gen ; generator JZB [GeV]; efficiency",nbins,xbins);
5437     TH1F* hreco = new TH1F("hreco","JZB reco ; generator JZB [GeV]; efficiency",nbins,xbins);
5438 buchmann 1.1
5439     TCut kgen(genMassCut&&"genZPt>0&&genNjets>2&&abs(genMID)==23"&&cutOSSF);
5440     TCut kreco(cutmass);
5441    
5442     TF1* func = new TF1("func","0.5*[2]*(TMath::Erf((x-[1])/[0])+1)",min,max);
5443     func->SetParNames("epsilon","x_{1/2}","sigma");
5444     func->SetParameter(0,50.);
5445     func->SetParameter(1,0.);
5446     func->SetParameter(2,1.);
5447     gStyle->SetOptStat(0);
5448     gStyle->SetOptFit(0);
5449    
5450     TCanvas *can = new TCanvas("can","Canvas for JZB Efficiency",600,600);
5451     can->SetGridx(1);
5452     can->SetGridy(1);
5453 buchmann 1.14 can->SetLeftMargin(0.16);
5454     can->SetRightMargin(0.05);
5455 buchmann 1.1 TLegend *leg = make_legend("",0.6,0.2,false,0.89,0.5);
5456 buchmann 1.14 leg->SetBorderSize(1);
5457     leg->SetLineColor(kBlack);
5458     leg->SetTextFont(62);
5459 buchmann 1.1
5460 buchmann 1.16 for ( int icut=0; icut<(int)jzb_bins.size(); ++icut ) {
5461 buchmann 1.1
5462     ostringstream selection;
5463     selection << mcjzb << ">" << jzb_bins[icut];
5464     TCut ksel(selection.str().c_str());
5465     events->Draw("genJZB>>hgen", kgen&&kreco, "goff");
5466     events->Draw("genJZB>>hreco",kgen&&kreco&&ksel,"goff");
5467    
5468     // Loop over steps to get efficiency curve
5469     for ( Int_t iBin = 0; iBin<nbins-1; ++iBin ) {
5470     Float_t eff = hreco->GetBinContent(iBin+1)/hgen->GetBinContent(iBin+1);
5471     heff->SetBinContent(iBin+1,eff);
5472     heff->SetBinError(iBin+1,TMath::Sqrt(eff*(1-eff)/hgen->GetBinContent(iBin+1)));
5473     }
5474    
5475     heff->GetXaxis()->SetRangeUser(min, max);
5476 buchmann 1.14 // heff->GetXaxis()->SetLabelSize(0.05); // paper style. overruled.
5477     // heff->GetYaxis()->SetLabelSize(0.05); // paper style. overruled.
5478     // heff->GetXaxis()->SetTitleSize(0.06); // paper style. overruled.
5479     // heff->GetYaxis()->SetTitleSize(0.06); // paper style. overruled.
5480 buchmann 1.1 heff->SetMarkerStyle(markers[icut]);
5481     heff->Fit("func","Q+","same");
5482    
5483     // Print values
5484     dout << "+++ For " << selection.str() << std::endl;
5485     for ( int i=0; i<func->GetNpar(); ++i )
5486     dout << " " << func->GetParName(i) << " " << func->GetParameter(i) << " \\pm " << func->GetParError(i) << std::endl;
5487     char hname[256]; sprintf(hname,"heff%d",icut);
5488    
5489     // Store plot
5490     TH1F* h = (TH1F*)heff->Clone(hname);
5491 buchmann 1.14 h->SetNdivisions(505,"X");
5492 buchmann 1.1 if ( icut) h->Draw("same");
5493     else h->Draw();
5494     char htitle[256]; sprintf(htitle,"JZB > %3.0f GeV", jzb_bins[icut]);
5495     leg->AddEntry(h,htitle,"p");
5496    
5497     }
5498    
5499     leg->Draw();
5500     DrawMCPrelim(0.0);
5501     CompleteSave(can, "Systematics/jzb_efficiency_curve"+informalname );
5502    
5503     delete hgen;
5504     delete hreco;
5505     delete heff;
5506     }
5507    
5508     //________________________________________________________________________________________
5509     // Calls the above function for each signal sample
5510     void plot_jzb_sel_eff(string mcjzb, samplecollection &signalsamples, vector<float> bins )
5511     {
5512 buchmann 1.16 for (int isignal=0; isignal<(int)signalsamples.collection.size();isignal++) {
5513 buchmann 1.1 dout << "JZB selection efficiency curve: " << std::endl;
5514     JZBSelEff(mcjzb,(signalsamples.collection)[isignal].events,(signalsamples.collection)[isignal].samplename,bins); // Only for some selected samples
5515     }
5516     }
5517 buchmann 1.3
5518     void qcd_plots(string datajzb, string mcjzb, vector<float> bins) {
5519     // What this function aims to do:
5520     // Illustrate cut flow for QCD (requiring only one lepton, requiring etc.)
5521     // Illustrate how little QCD is left over! i.e. make some pointless JZB plot with only QCD to visualize the fact that there's not much really.
5522     TCanvas *can = new TCanvas("can","can");
5523     TPad *kinpad = new TPad("kinpad","kinpad",0,0,1,1);
5524     kinpad->cd();
5525    
5526     string jzb=mcjzb;
5527    
5528     float hi=400;
5529     bool use_signal=false;
5530     bool use_data=false;
5531    
5532     bool is_data=false;
5533     int nbins=50;//100;
5534     float low=0;
5535     float high=500;
5536     int versok=false;
5537     if(gROOT->GetVersionInt()>=53000) versok=true;
5538    
5539     TH1F *blankback = new TH1F("blankback","blankback",int(high/10),0,high);
5540     TH1F *RcorrJZBeemm = qcdsamples.Draw("RcorrJZBeemm",jzb.c_str(),nbins,low,hi, "JZB [GeV]", "events", cutmass&&cutOSSF&&cutnJets,is_data, luminosity,use_signal);
5541     TH1F *LcorrJZBeemm = qcdsamples.Draw("LcorrJZBeemm",("-"+jzb).c_str(),nbins,low,hi, "JZB [GeV]", "events", cutmass&&cutOSSF&&cutnJets,is_data, luminosity,use_signal);
5542     TH1F *RcorrJZBem = qcdsamples.Draw("RcorrJZBem",jzb.c_str(),nbins,low,hi, "JZB [GeV]", "events", cutmass&&cutOSOF&&cutnJets,is_data, luminosity,use_signal);
5543     TH1F *LcorrJZBem = qcdsamples.Draw("LcorrJZBem",("-"+jzb).c_str(),nbins,low,hi, "JZB [GeV]", "events", cutmass&&cutOSOF&&cutnJets,is_data, luminosity,use_signal);
5544     blankback->GetXaxis()->SetTitle(RcorrJZBeemm->GetXaxis()->GetTitle());
5545     blankback->GetYaxis()->SetTitle(RcorrJZBeemm->GetYaxis()->GetTitle());
5546     blankback->GetXaxis()->CenterTitle();
5547     blankback->GetYaxis()->CenterTitle();
5548    
5549     flag_this_change(__FUNCTION__,__LINE__,true);//PlottingSetup::RestrictToMassPeak ---- prediction changed.
5550     TH1F *RcorrJZBSBem;
5551     TH1F *LcorrJZBSBem;
5552     TH1F *RcorrJZBSBeemm;
5553     TH1F *LcorrJZBSBeemm;
5554    
5555 buchmann 1.16 // TH1F *RcorrJZBeemmNoS;
5556 buchmann 1.3
5557     //these are for the ratio
5558     TH1F *JRcorrJZBeemm = qcdsamples.Draw("JRcorrJZBeemm",jzb.c_str(),PlottingSetup::global_ratio_binning, "JZB [GeV]", "events", cutmass&&cutOSSF&&cutnJets,is_data, luminosity,use_signal);
5559     TH1F *JLcorrJZBeemm = qcdsamples.Draw("JLcorrJZBeemm",("-"+jzb).c_str(),PlottingSetup::global_ratio_binning, "JZB [GeV]", "events", cutmass&&cutOSSF&&cutnJets,is_data, luminosity,use_signal);
5560     TH1F *JRcorrJZBem = qcdsamples.Draw("JRcorrJZBem",jzb.c_str(),PlottingSetup::global_ratio_binning, "JZB [GeV]", "events", cutmass&&cutOSOF&&cutnJets,is_data, luminosity,use_signal);
5561     TH1F *JLcorrJZBem = qcdsamples.Draw("JLcorrJZBem",("-"+jzb).c_str(),PlottingSetup::global_ratio_binning, "JZB [GeV]", "events", cutmass&&cutOSOF&&cutnJets,is_data, luminosity,use_signal);
5562    
5563     TH1F *JRcorrJZBSBem;
5564     TH1F *JLcorrJZBSBem;
5565     TH1F *JRcorrJZBSBeemm;
5566     TH1F *JLcorrJZBSBeemm;
5567    
5568 buchmann 1.50 if(PlottingSetup::RestrictToMassPeak&&PlottingSetup::UseSidebandsForcJZB) {
5569 buchmann 1.3 RcorrJZBSBem = qcdsamples.Draw("RcorrJZBSBem",jzb.c_str(),nbins,low,hi, "JZB [GeV]", "events", sidebandcut&&cutOSOF&&cutnJets,is_data, luminosity,use_signal);
5570     LcorrJZBSBem = qcdsamples.Draw("LcorrJZBSBem",("-"+jzb).c_str(),nbins,low,hi, "JZB [GeV]", "events", sidebandcut&&cutOSOF&&cutnJets,is_data, luminosity,use_signal);
5571     RcorrJZBSBeemm = qcdsamples.Draw("RcorrJZBSBeemm",jzb.c_str(),nbins,low,hi, "JZB [GeV]", "events", sidebandcut&&cutOSSF&&cutnJets,is_data, luminosity,use_signal);
5572     LcorrJZBSBeemm = qcdsamples.Draw("LcorrJZBSBeemm",("-"+jzb).c_str(),nbins,low,hi, "JZB [GeV]", "events", sidebandcut&&cutOSSF&&cutnJets,is_data, luminosity,use_signal);
5573    
5574     //these are for the ratio
5575     JRcorrJZBSBem = qcdsamples.Draw("JRcorrJZBSBem",jzb.c_str(),PlottingSetup::global_ratio_binning, "JZB [GeV]", "events", sidebandcut&&cutOSOF&&cutnJets,is_data, luminosity,use_signal);
5576     JLcorrJZBSBem = qcdsamples.Draw("JLcorrJZBSBem",("-"+jzb).c_str(),PlottingSetup::global_ratio_binning, "JZB [GeV]", "events", sidebandcut&&cutOSOF&&cutnJets,is_data, luminosity,use_signal);
5577     JRcorrJZBSBeemm = qcdsamples.Draw("JRcorrJZBSBeemm",jzb.c_str(),PlottingSetup::global_ratio_binning, "JZB [GeV]", "events", sidebandcut&&cutOSSF&&cutnJets,is_data, luminosity,use_signal);
5578     JLcorrJZBSBeemm = qcdsamples.Draw("JLcorrJZBSBeemm",("-"+jzb).c_str(),PlottingSetup::global_ratio_binning, "JZB [GeV]", "events", sidebandcut&&cutOSSF&&cutnJets,is_data, luminosity,use_signal);
5579    
5580     }
5581    
5582     flag_this_change(__FUNCTION__,__LINE__,true);//PlottingSetup::RestrictToMassPeak ---- prediction changed.
5583    
5584     TH1F *Zjetspred = (TH1F*)LcorrJZBeemm->Clone("Zjetspred");
5585     TH1F *TTbarpred = (TH1F*)RcorrJZBem->Clone("TTbarpred");
5586    
5587     TH1F *Bpred = (TH1F*)LcorrJZBeemm->Clone("Bpred");
5588     TH1F *JBpred = (TH1F*)JLcorrJZBeemm->Clone("Bpred");
5589 buchmann 1.50 if(PlottingSetup::RestrictToMassPeak&&PlottingSetup::UseSidebandsForcJZB) {
5590 buchmann 1.3 Bpred->Add(RcorrJZBem,1.0/3.);
5591     Bpred->Add(LcorrJZBem,-1.0/3.);
5592     Bpred->Add(RcorrJZBSBem,1.0/3.);
5593     Bpred->Add(LcorrJZBSBem,-1.0/3.);
5594     Bpred->Add(RcorrJZBSBeemm,1.0/3.);
5595     Bpred->Add(LcorrJZBSBeemm,-1.0/3.);
5596    
5597     TTbarpred->Scale(1.0/3);
5598     Zjetspred->Add(LcorrJZBem,-1.0/3.);
5599     Zjetspred->Add(LcorrJZBSBem,-1.0/3.);
5600     TTbarpred->Add(RcorrJZBSBem,1.0/3.);
5601     Zjetspred->Add(LcorrJZBSBeemm,-1.0/3.);
5602     TTbarpred->Add(RcorrJZBSBeemm,1.0/3.);
5603    
5604     //these are for the ratio
5605     JBpred->Add(JRcorrJZBem,1.0/3.);
5606     JBpred->Add(JLcorrJZBem,-1.0/3.);
5607     JBpred->Add(JRcorrJZBSBem,1.0/3.);
5608     JBpred->Add(JLcorrJZBSBem,-1.0/3.);
5609     JBpred->Add(JRcorrJZBSBeemm,1.0/3.);
5610     JBpred->Add(JLcorrJZBSBeemm,-1.0/3.);
5611     } else {
5612     Bpred->Add(RcorrJZBem,1.0);
5613     Bpred->Add(LcorrJZBem,-1.0);
5614    
5615     Zjetspred->Add(LcorrJZBem,-1.0);
5616    
5617     //these are for the ratio
5618     JBpred->Add(JRcorrJZBem,1.0);
5619     JBpred->Add(JLcorrJZBem,-1.0);
5620     }
5621    
5622    
5623     flag_this_change(__FUNCTION__,__LINE__,true);//PlottingSetup::RestrictToMassPeak ---- prediction changed
5624 buchmann 1.1
5625 buchmann 1.3 TLegend *legBpred = make_legend("",0.6,0.55,false);
5626     RcorrJZBeemm->Draw("e1x0,same");
5627     Bpred->Draw("hist,same");
5628     RcorrJZBeemm->Draw("e1x0,same");//HAVE IT ON TOP!
5629     legBpred->AddEntry(RcorrJZBeemm,"MC observed","p");
5630     legBpred->AddEntry(Bpred,"MC predicted","l");
5631     if(versok) legBpred->AddEntry((TObject*)0,"",""); // Just for alignment // causes seg fault on root v5.18
5632     if(versok) legBpred->AddEntry((TObject*)0,"",""); // causes seg fault on root v5.18
5633     legBpred->Draw();
5634     DrawMCPrelim();
5635    
5636     //3rd last argument: do special bpred ratio, 2nd last argument: extended range!, last: y-axis title
5637     string ytitle("ratio");
5638     if ( use_data==1 ) ytitle = "data/pred";
5639 buchmann 1.79 Save_With_Ratio(JRcorrJZBeemm,JBpred,kinpad,"QCD/Bpred",true,false,ytitle);
5640     delete kinpad;
5641 buchmann 1.3
5642     TH1F *allevents = qcdsamples.Draw("allevents","pfJetGoodNum",1,0,100, "internal code", "events", "" ,mc, luminosity);
5643     TH1F *ossf = qcdsamples.Draw("ossf","pfJetGoodNum",1,0,100, "internal code", "events", cutOSSF ,mc, luminosity);
5644     TH1F *osof = qcdsamples.Draw("osof","pfJetGoodNum",1,0,100, "internal code", "events", cutOSOF ,mc, luminosity);
5645     TH1F *njossf = qcdsamples.Draw("njossf","pfJetGoodNum",1,0,100, "internal code", "events", cutnJets&&cutOSSF ,mc, luminosity);
5646     TH1F *njosof = qcdsamples.Draw("njosof","pfJetGoodNum",1,0,100, "internal code", "events", cutnJets&&cutOSOF ,mc, luminosity);
5647    
5648     dout << "______________________________________________" << endl;
5649     dout << "QCD contribution: " << endl;
5650     dout << "Total number of events: " << allevents->Integral() << endl;
5651     dout << "OSSF events: " << ossf->Integral() << endl;
5652     dout << "OSOF events: " << osof->Integral() << endl;
5653     dout << "OSSF events with >=3 jets:" << njossf->Integral() << endl;
5654     dout << "OSOF events with >=3 jets:" << njosof->Integral() << endl;
5655     dout << "(note that no mass requirement has been imposed)" << endl;
5656    
5657     dout << "______________________________________________" << endl;
5658     dout << "How QCD shows up in the different regions: " << endl;
5659     dout << "OSSF: " << endl;
5660 buchmann 1.50 if(PlottingSetup::RestrictToMassPeak&&PlottingSetup::UseSidebandsForcJZB) {
5661 buchmann 1.3 dout << " Z window: \t" << RcorrJZBeemm->Integral() << " (JZB>0) , " << LcorrJZBeemm->Integral() << " (JZB<0) --> total: " << RcorrJZBeemm->Integral() + LcorrJZBeemm->Integral() << endl;
5662     dout << " sideband: \t" << RcorrJZBSBeemm->Integral() << " (JZB>0) , " << LcorrJZBSBeemm->Integral() << " (JZB<0) --> total: " << RcorrJZBSBeemm->Integral() + LcorrJZBSBeemm->Integral() << endl;
5663     } else {
5664     dout << " " << RcorrJZBeemm->Integral() << " (JZB>0) , " << LcorrJZBeemm->Integral() << " (JZB<0) --> total: " << RcorrJZBeemm->Integral() + LcorrJZBeemm->Integral() << endl;
5665     }
5666     dout << "OSOF: " << endl;
5667 buchmann 1.50 if(PlottingSetup::RestrictToMassPeak&&PlottingSetup::UseSidebandsForcJZB) {
5668 buchmann 1.3 dout << " Z window: \t" << RcorrJZBem->Integral() << " (JZB>0) , " << LcorrJZBem->Integral() << " (JZB<0) --> total: " << RcorrJZBem->Integral() + LcorrJZBem->Integral() << endl;
5669     dout << " sideband: \t" << RcorrJZBSBem->Integral() << " (JZB>0) , " << LcorrJZBSBem->Integral() << " (JZB<0) --> total: " << RcorrJZBSBem->Integral() + LcorrJZBSBem->Integral() << endl;
5670     } else {
5671     dout << " Z window: \t" << RcorrJZBem->Integral() << " (JZB>0) , " << LcorrJZBem->Integral() << " (JZB<0) --> total: " << RcorrJZBem->Integral() + LcorrJZBem->Integral() << endl;
5672     }
5673     dout << "Therefore: " << endl;
5674 buchmann 1.50 if(PlottingSetup::RestrictToMassPeak&&PlottingSetup::UseSidebandsForcJZB) {
5675 buchmann 1.3 dout << " Prediction increases by : " << LcorrJZBeemm->Integral() << " + (1.0/3)*(" << RcorrJZBSBeemm->Integral() <<"-"<< LcorrJZBSBeemm->Integral() << ") (SFSB) ";
5676     dout << " + (1.0/3)*(" << RcorrJZBem->Integral() <<"-"<< LcorrJZBem->Integral() << ") (OFZP) ";
5677     dout << " + (1.0/3)*(" << RcorrJZBSBem->Integral() <<"-"<< LcorrJZBSBem->Integral() << ") (OFSB) ";
5678     dout << " = " << LcorrJZBeemm->Integral() + (1.0/3)*(RcorrJZBSBeemm->Integral() - LcorrJZBSBeemm->Integral() + RcorrJZBem->Integral() - LcorrJZBem->Integral() + RcorrJZBSBem->Integral() - LcorrJZBSBem->Integral()) << endl;
5679     } else {
5680     dout << " Prediction increases by : " << LcorrJZBeemm->Integral();
5681     dout << " + (" << RcorrJZBem->Integral() <<"-"<< LcorrJZBem->Integral() << ") (OFZP) ";
5682     dout << " = " << LcorrJZBeemm->Integral() + RcorrJZBem->Integral() - LcorrJZBem->Integral() << endl;
5683     }
5684     dout << " Observation increases by : " << RcorrJZBeemm->Integral() << endl;
5685    
5686     dout << endl;
5687 buchmann 1.16 for(int i=0;i<(int)bins.size();i++) {
5688 buchmann 1.3 dout << " JZB > " << bins[i] << " : " << endl;
5689     dout << " Observation increases by : " << RcorrJZBeemm->Integral(RcorrJZBeemm->FindBin(bins[i]),RcorrJZBeemm->GetNbinsX()) << endl;
5690 buchmann 1.50 if(PlottingSetup::RestrictToMassPeak&&PlottingSetup::UseSidebandsForcJZB) {
5691 buchmann 1.3 dout << " Prediction increases by : " << LcorrJZBeemm->Integral(RcorrJZBeemm->FindBin(bins[i]),RcorrJZBeemm->GetNbinsX()) + (1.0/3)*(RcorrJZBSBeemm->Integral(RcorrJZBeemm->FindBin(bins[i]),RcorrJZBeemm->GetNbinsX()) - LcorrJZBSBeemm->Integral(RcorrJZBeemm->FindBin(bins[i]),RcorrJZBeemm->GetNbinsX()) + RcorrJZBem->Integral(RcorrJZBeemm->FindBin(bins[i]),RcorrJZBeemm->GetNbinsX()) - LcorrJZBem->Integral(RcorrJZBeemm->FindBin(bins[i]),RcorrJZBeemm->GetNbinsX()) + RcorrJZBSBem->Integral(RcorrJZBeemm->FindBin(bins[i]),RcorrJZBeemm->GetNbinsX()) - LcorrJZBSBem->Integral(RcorrJZBeemm->FindBin(bins[i]),RcorrJZBeemm->GetNbinsX())) << endl;
5692     } else {
5693     dout << " Prediction increases by : " << LcorrJZBeemm->Integral(RcorrJZBeemm->FindBin(bins[i]),RcorrJZBeemm->GetNbinsX()) + RcorrJZBem->Integral(RcorrJZBeemm->FindBin(bins[i]),RcorrJZBeemm->GetNbinsX()) - LcorrJZBem->Integral(RcorrJZBeemm->FindBin(bins[i]),RcorrJZBeemm->GetNbinsX()) << endl;
5694     }
5695     }
5696    
5697     delete can;
5698     delete allevents;
5699     if(ossf) delete ossf;
5700     if(RcorrJZBem) delete RcorrJZBem;
5701     if(LcorrJZBem) delete LcorrJZBem;
5702     if(RcorrJZBeemm) delete RcorrJZBeemm;
5703     if(LcorrJZBeemm) delete LcorrJZBeemm;
5704 buchmann 1.50 if(PlottingSetup::RestrictToMassPeak&&PlottingSetup::UseSidebandsForcJZB&&RcorrJZBSBem) delete RcorrJZBSBem;
5705     if(PlottingSetup::RestrictToMassPeak&&PlottingSetup::UseSidebandsForcJZB&&LcorrJZBSBem) delete LcorrJZBSBem;
5706     if(PlottingSetup::RestrictToMassPeak&&PlottingSetup::UseSidebandsForcJZB&&RcorrJZBSBeemm) delete RcorrJZBSBeemm;
5707     if(PlottingSetup::RestrictToMassPeak&&PlottingSetup::UseSidebandsForcJZB&&LcorrJZBSBeemm) delete LcorrJZBSBeemm;
5708 buchmann 1.3 }
5709 buchmann 1.1
5710 buchmann 1.4 void check_ptsanity() {
5711     TCanvas *ptsancan = new TCanvas("ptsancan","ptsancan",600,1800);
5712     TH1F *individualpt1histos[allsamples.collection.size()];
5713     TH1F *individualpt2histos[allsamples.collection.size()];
5714     TH1F *fpt1 = new TH1F("fpt1","fpt1",50,0,50);
5715     fpt1->GetYaxis()->SetRangeUser(0,1);
5716     fpt1->GetXaxis()->SetTitle("p_{T,1}");
5717     fpt1->GetXaxis()->CenterTitle();
5718    
5719     TH1F *fpt2 = new TH1F("fpt2","fpt2",50,0,50);
5720     fpt2->GetXaxis()->SetTitle("p_{T,2}");
5721     fpt2->GetXaxis()->CenterTitle();
5722    
5723     ptsancan->Divide(1,3);
5724     ptsancan->cd(1);
5725     float maxpt1entry=0;
5726     float maxpt2entry=0;
5727    
5728     TLegend *leg = make_legend();
5729     leg->SetX1(0.0);
5730     leg->SetY1(0.0);
5731     leg->SetX2(1.0);
5732     leg->SetY2(1.0);
5733    
5734    
5735 buchmann 1.16 for(int isample=0;isample<(int)allsamples.collection.size();isample++) {
5736 buchmann 1.4 string nowname=(allsamples.collection)[isample].filename;
5737     cout << "Drawing: " << nowname << " (sample " << isample+1 << " / " << allsamples.collection.size() << ")" << endl;
5738     individualpt1histos[isample] = allsamples.Draw(GetNumericHistoName(),"pt1",50,0,50, "p_{T,1}", "events",cutOSSF&&cutnJets,mc,luminosity,allsamples.FindSample(nowname));
5739     individualpt2histos[isample] = allsamples.Draw(GetNumericHistoName(),"pt2",50,0,50, "p_{T,2}", "events",cutOSSF&&cutnJets,mc,luminosity,allsamples.FindSample(nowname));
5740     individualpt1histos[isample]->SetLineColor(isample+1);
5741     individualpt2histos[isample]->SetLineColor(isample+1);
5742     float currmaxpt1entry=individualpt1histos[isample]->GetMaximum()/individualpt1histos[isample]->Integral();
5743     float currmaxpt2entry=individualpt2histos[isample]->GetMaximum()/individualpt2histos[isample]->Integral();
5744     cout << " pt 1 histo contains; " << individualpt1histos[isample]->Integral() << endl;
5745     cout << " pt 2 histo contains; " << individualpt2histos[isample]->Integral() << endl;
5746     if(currmaxpt1entry>maxpt1entry)maxpt1entry=currmaxpt1entry;
5747     if(currmaxpt2entry>maxpt2entry)maxpt2entry=currmaxpt2entry;
5748     leg->AddEntry(individualpt2histos[isample],((allsamples.collection)[isample].filename).c_str(),"f");
5749     }
5750    
5751     fpt1->GetYaxis()->SetRangeUser(0,maxpt1entry);
5752     fpt2->GetYaxis()->SetRangeUser(0,maxpt2entry);
5753    
5754     ptsancan->cd(1);
5755     fpt1->Draw();
5756     ptsancan->cd(2);
5757     fpt2->Draw();
5758    
5759 buchmann 1.16 for(int isample=0;isample<(int)allsamples.collection.size();isample++) {
5760 buchmann 1.4 ptsancan->cd(1);
5761     individualpt1histos[isample]->DrawNormalized("same,histo");
5762     ptsancan->cd(2);
5763     individualpt2histos[isample]->DrawNormalized("same,histo");
5764     }
5765     ptsancan->cd(3);
5766     leg->Draw();
5767     CompleteSave(ptsancan,"PtSanityCheck");
5768    
5769     delete ptsancan;
5770     }
5771    
5772 buchmann 1.6 void do_mlls_plot(string mcjzb) {
5773     cout << "At this point we'd plot the mll distribution" << endl;
5774     TCanvas *sigcan = new TCanvas("sigcan","sigcan");
5775 buchmann 1.16 for(int isig=0;isig<(int)(signalsamples.collection).size();isig++) {
5776 buchmann 1.6 if(!(signalsamples.collection)[isig].events) continue;
5777     string nowname=(signalsamples.collection)[isig].filename;
5778     TH1F *mll = signalsamples.Draw("mllhisto","mll",150,0,150, "m_{ll}", "events",cutOSSF&&cutnJets,mc,luminosity,signalsamples.FindSample(nowname));
5779     // TH1F *mll = signalsamples.Draw("mllhisto","mll",150,0,150, "m_{ll}", "events","",mc,luminosity,signalsamples.FindSample(nowname));
5780     mll->SetLineColor(TColor::GetColor("#04B404"));
5781     stringstream poscutS;
5782     poscutS << "((" << mcjzb <<")>50)";
5783     TCut poscut(poscutS.str().c_str());
5784     TH1F *mllP = signalsamples.Draw("mllhistoP","mll",150,0,150, "m_{ll}", "events",cutOSSF&&cutnJets&&poscut,mc,luminosity,signalsamples.FindSample(nowname));
5785     mllP->SetLineColor(TColor::GetColor("#0040FF"));
5786     mll->Draw("histo");
5787     mllP->Draw("histo,same");
5788     TLegend *leg = make_legend();
5789     leg->SetY1(0.8);
5790     leg->AddEntry(mll,(signalsamples.collection)[isig].samplename.c_str(),"L");
5791     leg->AddEntry(mllP,((signalsamples.collection)[isig].samplename+", JZB>50").c_str(),"L");
5792     leg->Draw();
5793     TLine *lin = new TLine(71.2,0,71.2,mll->GetMaximum());
5794     TLine *lin2 = new TLine(111.2,0,111.2,mll->GetMaximum());
5795     lin->Draw("same");
5796     lin2->Draw("same");
5797    
5798     CompleteSave(sigcan,"MllShape/"+(signalsamples.collection)[isig].samplename);
5799     delete mll;
5800     delete mllP;
5801     }
5802     }
5803    
5804 buchmann 1.47 void met_vs_jzb_plots(string datajzb, string mcjzb) {
5805 buchmann 1.9
5806     TCanvas *canmetjzb = new TCanvas("canmet","MET vs JZB canvas");
5807     canmetjzb->SetRightMargin(0.16);
5808    
5809     vector<string> findme;
5810     findme.push_back("DY");
5811 buchmann 1.93 findme.push_back("TT_");
5812 buchmann 1.9 findme.push_back("LM");
5813 buchmann 1.48 /*
5814 buchmann 1.16 for(int ifind=0;ifind<(int)findme.size();ifind++) {
5815 buchmann 1.9 vector<int> selsamples = allsamples.FindSample(findme[ifind]);
5816     TH2F *metvsjzb = new TH2F("metvsjzb","metvsjzb",200,0,100,400,-100,100);
5817 buchmann 1.16 for(int isel=0;isel<(int)selsamples.size();isel++) {
5818 buchmann 1.47 dout << "Producing MET:JZB plot ... working on sample: " << allsamples.collection[selsamples[isel]].filename << endl;
5819     allsamples.collection[selsamples[isel]].events->Draw("jzb[1]:met[4]>>+metvsjzb",cutmass&&cutOSSF&&cutnJets);
5820 buchmann 1.9 }
5821     metvsjzb->Scale(allsamples.collection[selsamples[0]].weight);
5822     metvsjzb->SetStats(0);
5823     metvsjzb->GetXaxis()->SetTitle("MET (GeV)");
5824     metvsjzb->GetYaxis()->SetTitle("JZB (GeV)");
5825     metvsjzb->GetXaxis()->CenterTitle();
5826     metvsjzb->GetYaxis()->CenterTitle();
5827     metvsjzb->Draw("COLZ");
5828     TText* title = write_text(0.5,0.95,allsamples.collection[selsamples[0]].samplename);
5829     title->SetTextAlign(12);
5830     title->Draw();
5831     CompleteSave(canmetjzb,(string)"METvsJZBplots/"+findme[ifind]);
5832     }
5833 buchmann 1.48 */
5834 buchmann 1.47
5835     dout << "About to produce MET plot for DY split up by JZB" << endl;
5836    
5837     int nbins=14;
5838     float low=0;
5839     float high=140;
5840    
5841     stringstream sLEFT;
5842     sLEFT << "((" << mcjzb << ")<0)";
5843     TCut LEFT(sLEFT.str().c_str());
5844     stringstream sRIGHT;
5845     sRIGHT << "((" << mcjzb << ")>0)";
5846     TCut RIGHT(sRIGHT.str().c_str());
5847    
5848 buchmann 1.89 TH1F *metleft = allsamples.Draw("metleft","met[4]",nbins,low,high, "#slash{E}_{T} [GeV]", "events", cutmass&&cutOSSF&&cutnJets&&LEFT,mc, luminosity, allsamples.FindSample("DYJets"));
5849     TH1F *metleftO = allsamples.Draw("metleftO","met[4]",nbins,low,high, "#slash{E}_{T} [GeV]", "events", cutmass&&cutOSOF&&cutnJets&&LEFT,mc, luminosity, allsamples.FindSample("DYJets"));
5850     TH1F *metright = allsamples.Draw("metright","met[4]",nbins,low,high, "#slash{E}_{T} [GeV]", "events", cutmass&&cutOSSF&&cutnJets&&RIGHT,mc, luminosity, allsamples.FindSample("DYJets"));
5851     TH1F *metrightO = allsamples.Draw("metrightO","met[4]",nbins,low,high, "#slash{E}_{T} [GeV]", "events", cutmass&&cutOSOF&&cutnJets&&RIGHT,mc, luminosity, allsamples.FindSample("DYJets"));
5852 buchmann 1.47
5853 buchmann 1.48
5854     TH1F *Bpred = (TH1F*)metleft->Clone("Bpred");
5855     Bpred->Add(metleftO,-1);
5856     Bpred->Add(metrightO);
5857     TH1F *obs = (TH1F*)metright->Clone("obs");
5858    
5859 buchmann 1.47 metleft->Add(metleftO,-1);
5860     metright->Add(metrightO,-1);
5861    
5862     metleft->SetLineColor(kRed);
5863     metright->SetLineColor(kBlack);
5864     TPad *metpad = new TPad("metpad","metpad",0,0,1,1);
5865     metpad->cd();
5866     metpad->SetLogy(1);
5867     metleft->Draw("histo");
5868     metright->Draw("same");
5869     TLegend *lg = make_legend();
5870     lg->SetX1(0.5);
5871 buchmann 1.48 lg->SetY1(0.7);
5872 buchmann 1.47 lg->AddEntry(metright,"JZB>0 (OSOF corrected)","P");
5873     lg->AddEntry(metleft,"JZB<0 (OSOF corrected)","L");
5874 buchmann 1.48 lg->SetHeader("DY");
5875    
5876 buchmann 1.47 lg->Draw();
5877 buchmann 1.79 Save_With_Ratio(metright,metleft,metpad->cd(),"METvsJZBplots/ComparingLeftToRightinMETspectrum");
5878 buchmann 1.48
5879     TPad *metpad3 = new TPad("metpad3","metpad3",0,0,1,1);
5880     metpad3->cd();
5881     metpad3->SetLogy(1);
5882     Bpred->SetLineColor(kRed);
5883     Bpred->Draw("histo");
5884     obs->SetLineColor(kBlack);
5885     obs->Draw("same");
5886     TLegend *lg2 = make_legend();
5887     lg2->SetX1(0.5);
5888     lg2->SetY1(0.7);
5889     lg2->AddEntry(obs,"observed","P");
5890     lg2->AddEntry(Bpred,"predicted","L");
5891     lg2->SetHeader("DY");
5892    
5893     lg2->Draw();
5894    
5895 buchmann 1.79 Save_With_Ratio(obs,Bpred,metpad3->cd(),"METvsJZBplots/ComparingPredObsinMET");
5896 buchmann 1.48
5897 buchmann 1.47 TPad *metpad2 = new TPad("metpad2","metpad2",0,0,1,1);
5898 buchmann 1.48 metpad2->cd();
5899     metpad2->SetLogy(1);
5900 buchmann 1.47
5901 buchmann 1.89 TH1F *metlefta = allsamples.Draw("metlefta","met[2]",nbins,low,high, "#slash{E}_{T} [GeV]", "events", cutmass&&cutOSSF&&cutnJets&&LEFT,mc, luminosity, allsamples.FindSample("DYJets"));
5902     TH1F *metleftOa = allsamples.Draw("metleftOa","met[2]",nbins,low,high, "#slash{E}_{T} [GeV]", "events", cutmass&&cutOSOF&&cutnJets&&LEFT,mc, luminosity, allsamples.FindSample("DYJets"));
5903     TH1F *metrighta = allsamples.Draw("metrighta","met[2]",nbins,low,high, "#slash{E}_{T} [GeV]", "events", cutmass&&cutOSSF&&cutnJets&&RIGHT,mc, luminosity, allsamples.FindSample("DYJets"));
5904     TH1F *metrightOa = allsamples.Draw("metrightOa","met[2]",nbins,low,high, "#slash{E}_{T} [GeV]", "events", cutmass&&cutOSOF&&cutnJets&&RIGHT,mc, luminosity, allsamples.FindSample("DYJets"));
5905 buchmann 1.47
5906     metlefta->Add(metleftOa,-1);
5907     metrighta->Add(metrightOa,-1);
5908    
5909     metlefta->SetLineColor(kRed);
5910     metpad2->cd();
5911     metlefta->Draw("histo");
5912     metrighta->Draw("same");
5913     lg->Draw();
5914 buchmann 1.79 Save_With_Ratio(metrighta,metlefta,metpad2->cd(),"METvsJZBplots/ComparingLeftToRightinMET_type1_spectrum");
5915 buchmann 1.47
5916 buchmann 1.48 delete Bpred;
5917     delete obs;
5918    
5919     float newhigh=300;
5920     int newNBins=30;
5921    
5922     TPad *metpad4 = new TPad("metpad4","metpad4",0,0,1,1);
5923 buchmann 1.89 TH1F *Ametleft = allsamples.Draw("Ametleft","met[4]",newNBins,low,newhigh, "#slash{E}_{T} [GeV]", "events", cutmass&&cutOSSF&&cutnJets&&LEFT,mc, luminosity);
5924     TH1F *AmetleftO = allsamples.Draw("AmetleftO","met[4]",newNBins,low,newhigh, "#slash{E}_{T} [GeV]", "events", cutmass&&cutOSOF&&cutnJets&&LEFT,mc, luminosity);
5925     TH1F *Ametright = allsamples.Draw("Ametright","met[4]",newNBins,low,newhigh, "#slash{E}_{T} [GeV]", "events", cutmass&&cutOSSF&&cutnJets&&RIGHT,mc, luminosity);
5926     TH1F *AmetrightO = allsamples.Draw("AmetrightO","met[4]",newNBins,low,newhigh, "#slash{E}_{T} [GeV]", "events", cutmass&&cutOSOF&&cutnJets&&RIGHT,mc, luminosity);
5927 buchmann 1.48
5928     TH1F *aBpred = (TH1F*)Ametleft->Clone("aBpred");
5929     aBpred->Add(AmetleftO,-1);
5930     aBpred->Add(AmetrightO);
5931     aBpred->SetLineColor(kRed);
5932    
5933     TH1F *aobs = (TH1F*)Ametright->Clone("aobs");
5934     metpad4->cd();
5935     metpad4->SetLogy(1);
5936     aobs->Draw();
5937     aBpred->Draw("histo,same");
5938     aobs->Draw("same");
5939     lg->SetHeader("All MC");
5940     lg->Draw();
5941 buchmann 1.79 Save_With_Ratio(aobs,aBpred,metpad4->cd(),"METvsJZBplots/ComparingPredObsinMET_ALLSAMPLES");
5942 buchmann 1.48
5943 buchmann 1.47
5944     delete lg;
5945     delete canmetjzb;
5946     delete metleft;
5947     delete metleftO;
5948     delete metright;
5949     delete metrightO;
5950 buchmann 1.9 }
5951 buchmann 1.88
5952    
5953     void do_one_ttbar_test(TH1F* &observed, TH1F* &predicted, TH1F* &ratio, TH1F* &ratio2, string mcjzb, string prestring) {
5954    
5955     if(PlottingSetup::RestrictToMassPeak) {
5956     write_error(__FUNCTION__,"This function (ttbar_tests) was not written for on-peak studies - sorry.");
5957     assert(!PlottingSetup::RestrictToMassPeak);
5958     }
5959    
5960     vector<float> binning;
5961    
5962     binning.push_back(-200);
5963     binning.push_back(-150);
5964     binning.push_back(-125);
5965     binning.push_back(-100);
5966     binning.push_back(-75);
5967     binning.push_back(-50);
5968     binning.push_back(-25);
5969     binning.push_back(0);
5970     binning.push_back(25);
5971     binning.push_back(50);
5972     binning.push_back(75);
5973     binning.push_back(100);
5974     binning.push_back(125);
5975     binning.push_back(150);
5976     binning.push_back(200);
5977    
5978     switch_overunderflow(true);
5979    
5980     TH1F *TZem = allsamples.Draw("TZem", mcjzb,binning,"JZB [GeV]","events",cutmass&&cutOSOF&&cutnJets,mc,luminosity,allsamples.FindSample("/TT"));
5981     TH1F *nTZem = allsamples.Draw("nTZem","-"+mcjzb,binning,"JZB [GeV]","events",cutmass&&cutOSOF&&cutnJets,mc,luminosity,allsamples.FindSample("/TT"));
5982     TH1F *TZeemm = allsamples.Draw("TZeemm", mcjzb,binning,"JZB [GeV]","events",cutmass&&cutOSSF&&cutnJets,mc,luminosity,allsamples.FindSample("/TT"));
5983     TH1F *nTZeemm = allsamples.Draw("nTZeemm","-"+mcjzb,binning,"JZB [GeV]","events",cutmass&&cutOSSF&&cutnJets,mc,luminosity,allsamples.FindSample("/TT"));
5984    
5985     TCanvas *tcan = new TCanvas("tcan","tcan");
5986     tcan->SetLogy(1);
5987    
5988     TZeemm->SetLineColor(kBlack);
5989     TZem->SetLineColor(kRed);
5990     TZeemm->SetMarkerColor(kBlack);
5991     TZem->SetMarkerColor(kRed);
5992    
5993     vector<TH1F*> histos;
5994     // TZem->GetXaxis()->SetRangeUser(-100,binning[binning.size()-1]);
5995     // TZeemm->GetXaxis()->SetRangeUser(-100,binning[binning.size()-1]);
5996     histos.push_back(TZem);
5997     histos.push_back(TZeemm);
5998     draw_all_ttbar_histos(tcan,histos,"histo",8);
5999    
6000     TLegend *leg = make_legend("MC t#bar{t}",0.6,0.65,false);
6001     leg->AddEntry(TZeemm,"SFZP","l");
6002     leg->AddEntry(TZem,"OFZP","l");
6003     leg->Draw("same");
6004     DrawMCPrelim();
6005     CompleteSave(tcan,"Systematics/TtbarTests/"+prestring+"/ttbar_shape_comparison");
6006    
6007     TH1F *TZemcopy = (TH1F*)TZem->Clone("TZemcopy");
6008     TH1F *TZeemmcopy = (TH1F*)TZeemm->Clone("TZeemmcopy");
6009     TH1F *TSeemmcopy;
6010     TH1F *TSemcopy;
6011    
6012     predicted=(TH1F*)TZem->Clone(((string)"predicted_"+prestring).c_str());
6013     observed=(TH1F*)TZeemm->Clone(((string)"observed_"+prestring).c_str());
6014    
6015     vector<float> posbinning;
6016     for(unsigned int i=0;i<binning.size();i++) {
6017     if(binning[i]<0) continue;
6018     posbinning.push_back(binning[i]);
6019     }
6020    
6021     TH1F *pred2 = new TH1F("pred2","pred2",posbinning.size()-1,&posbinning[0]);pred2->Sumw2();
6022     TH1F *obs2 = new TH1F("obs2","obs2",posbinning.size()-1,&posbinning[0]);obs2->Sumw2();
6023    
6024     for(unsigned int i=1;i<=predicted->GetNbinsX();i++) {
6025     int index=pred2->FindBin(abs(TZem->GetBinCenter(i)));
6026     if(TZem->GetBinCenter(i)<0) {
6027     //we're on the left: subtract em!
6028     pred2->SetBinContent(index,pred2->GetBinContent(index)-TZem->GetBinContent(i));
6029     pred2->SetBinError(index,sqrt(pow(pred2->GetBinError(index),2)+pow(TZem->GetBinError(i),2)));
6030     //we're on the left: add eemm!
6031     pred2->SetBinContent(index,pred2->GetBinContent(index)+TZeemm->GetBinContent(i));
6032     pred2->SetBinError(index,sqrt(pow(pred2->GetBinError(index),2)+pow(TZeemm->GetBinError(i),2)));
6033     } else {
6034     //we're on the right: add em!
6035     pred2->SetBinContent(index,pred2->GetBinContent(index)+TZem->GetBinContent(i));
6036     pred2->SetBinError(index,sqrt(pow(pred2->GetBinError(index),2)+pow(TZem->GetBinError(i),2)));
6037     //we're on the left: add eemm!
6038     obs2->SetBinContent(index,obs2->GetBinContent(index)+TZeemm->GetBinContent(i));
6039     obs2->SetBinError(index,sqrt(pow(pred2->GetBinError(index),2)+pow(TZeemm->GetBinError(i),2)));
6040     }
6041     }
6042    
6043     ratio2 = (TH1F*)pred2->Clone(((string)"ratio2_"+prestring).c_str());
6044     ratio2->Divide(obs2);
6045    
6046     TZem->Divide(TZeemm);
6047     TZem->SetMarkerStyle(21);
6048    
6049     TZem->SetTitle("OF / SF");
6050     ratio = (TH1F*)TZem->Clone(((string)"ratio_"+prestring).c_str());
6051    
6052     tcan->SetLogy(0);
6053     TZem->GetYaxis()->SetRangeUser(0,2.5);
6054     TZem->GetYaxis()->SetTitle("ratio");
6055     TZem->Draw();
6056    
6057     float linepos=emuncertOFFPEAK;
6058    
6059     TLine *top = new TLine(binning[0],1.0+linepos,binning[binning.size()-1],1.0+linepos);
6060     TLine *center = new TLine(binning[0],1.0,binning[binning.size()-1],1.0);
6061     TLine *bottom = new TLine(binning[0],1.0-linepos,binning[binning.size()-1],1.0-linepos);
6062    
6063     top->SetLineColor(kBlue);top->SetLineStyle(2);
6064     bottom->SetLineColor(kBlue);bottom->SetLineStyle(2);
6065     center->SetLineColor(kBlue);
6066    
6067     top->Draw("same");
6068     center->Draw("same");
6069     bottom->Draw("same");
6070    
6071     TLegend *leg2 = make_legend("MC t#bar{t}",0.55,0.75,false);
6072     leg2->AddEntry(TZem,"OFZP / SFZP","ple");
6073     leg2->AddEntry(bottom,"syst. envelope","l");
6074     leg2->SetX1(0.25);leg2->SetX2(0.6);
6075     leg2->SetY1(0.65);
6076    
6077     leg2->Draw("same");
6078    
6079     DrawMCPrelim();
6080     CompleteSave(tcan,"Systematics/TtbarTests/"+prestring+"/ttbar_shape_comparison_ratio");
6081    
6082     ratio2->SetLineColor(TZem->GetLineColor());
6083     ratio2->SetMarkerColor(TZem->GetMarkerColor());
6084     ratio2->GetYaxis()->SetRangeUser(0,2.5);
6085     ratio2->GetYaxis()->SetTitle("ratio");
6086     ratio2->Draw();
6087    
6088     TLine *top2 = new TLine(0,1.0+linepos,binning[binning.size()-1],1.0+linepos);
6089     TLine *center2 = new TLine(0,1.0,binning[binning.size()-1],1.0);
6090     TLine *bottom2 = new TLine(0,1.0-linepos,binning[binning.size()-1],1.0-linepos);
6091    
6092     top2->SetLineColor(kBlue);top->SetLineStyle(2);
6093     bottom2->SetLineColor(kBlue);bottom->SetLineStyle(2);
6094     center2->SetLineColor(kBlue);
6095    
6096     top2->Draw("same");
6097     center2->Draw("same");
6098     bottom2->Draw("same");
6099    
6100     leg2->Draw("same");
6101    
6102     DrawMCPrelim();
6103     CompleteSave(tcan,"Systematics/TtbarTests/"+prestring+"/ttbar_shape_comparison_FINALratio");
6104    
6105     delete TZem;
6106     delete nTZem;
6107     delete TZeemm;
6108     delete nTZeemm;
6109     delete obs2;
6110     delete pred2;
6111     delete tcan;
6112     switch_overunderflow(false);
6113     }
6114    
6115     void IllustrateVariation(TH1F *vanilla_ratio, TH1F *response_only_up_ratio, TH1F *response_only_down_ratio, TH1F *reponse_plus_peak_up_ratio, TH1F *reponse_plus_peak_down_ratio, string PostString) {
6116    
6117    
6118     TCanvas *ttcan2 = new TCanvas("ttcan2","ttcan2");
6119 buchmann 1.93 vanilla_ratio->GetYaxis()->SetRangeUser(0.5,1.5);
6120 buchmann 1.88 vanilla_ratio->SetFillColor(kGreen);
6121     vanilla_ratio->SetLineColor(kGreen);
6122     vanilla_ratio->SetMarkerColor(kGreen);
6123     vanilla_ratio->SetFillStyle(3001);
6124     vanilla_ratio->Draw("e3");
6125    
6126     response_only_up_ratio->SetFillColor(kRed);
6127     response_only_up_ratio->SetMarkerColor(kRed);
6128     response_only_up_ratio->SetLineColor(kRed);
6129     response_only_up_ratio->SetFillStyle(3003);
6130     response_only_up_ratio->Draw("e3,same");
6131    
6132     response_only_down_ratio->SetFillColor(kOrange);
6133     response_only_down_ratio->SetMarkerColor(kOrange);
6134     response_only_down_ratio->SetLineColor(kOrange);
6135     response_only_down_ratio->SetFillStyle(3004);
6136     response_only_down_ratio->Draw("e3,same");
6137    
6138     reponse_plus_peak_up_ratio->SetFillColor(TColor::GetColor("#BDBDBD"));
6139     reponse_plus_peak_up_ratio->SetMarkerColor(TColor::GetColor("#BDBDBD"));
6140     reponse_plus_peak_up_ratio->SetLineColor(TColor::GetColor("#BDBDBD"));
6141     reponse_plus_peak_up_ratio->SetFillStyle(3005);
6142     reponse_plus_peak_up_ratio->Draw("e3,same");
6143    
6144     reponse_plus_peak_down_ratio->SetFillColor(kBlue);
6145     reponse_plus_peak_down_ratio->SetMarkerColor(kBlue);
6146     reponse_plus_peak_down_ratio->SetLineColor(kBlue);
6147     reponse_plus_peak_down_ratio->SetFillStyle(3006);
6148     reponse_plus_peak_down_ratio->Draw("e3,same");
6149    
6150     TLine *llow = new TLine(vanilla_ratio->GetBinLowEdge(1),1.0-emuncertOFFPEAK,vanilla_ratio->GetBinLowEdge(vanilla_ratio->GetNbinsX())+vanilla_ratio->GetBinWidth(vanilla_ratio->GetNbinsX()),1.0-emuncertOFFPEAK);
6151     TLine *lhi = new TLine(vanilla_ratio->GetBinLowEdge(1),1.0+emuncertOFFPEAK,vanilla_ratio->GetBinLowEdge(vanilla_ratio->GetNbinsX())+vanilla_ratio->GetBinWidth(vanilla_ratio->GetNbinsX()),1.0+emuncertOFFPEAK);
6152     TLine *lOne = new TLine(vanilla_ratio->GetBinLowEdge(1),1.0,vanilla_ratio->GetBinLowEdge(vanilla_ratio->GetNbinsX())+vanilla_ratio->GetBinWidth(vanilla_ratio->GetNbinsX()),1.0);
6153    
6154     TLine *llowA = new TLine(vanilla_ratio->GetBinLowEdge(1),1.0-0.07,vanilla_ratio->GetBinLowEdge(vanilla_ratio->GetNbinsX())+vanilla_ratio->GetBinWidth(vanilla_ratio->GetNbinsX()),1.0-0.07);
6155     TLine *lhiA = new TLine(vanilla_ratio->GetBinLowEdge(1),1.0+0.07,vanilla_ratio->GetBinLowEdge(vanilla_ratio->GetNbinsX())+vanilla_ratio->GetBinWidth(vanilla_ratio->GetNbinsX()),1.0+0.07);
6156    
6157     lhiA->SetLineColor(kRed);
6158     lhiA->SetLineStyle(2);
6159     llowA->SetLineColor(kRed);
6160     llowA->SetLineStyle(2);
6161    
6162     llow->SetLineColor(kBlue);
6163     llow->SetLineStyle(2);
6164     lhi->SetLineColor(kBlue);
6165     lhi->SetLineStyle(2);
6166     lOne->SetLineColor(kBlue);
6167    
6168     llow->Draw();
6169     lhi->Draw();
6170     lOne->Draw();
6171    
6172     llowA->Draw();
6173     lhiA->Draw();
6174    
6175     TLegend *leg = make_legend();
6176     leg->SetX1(0.15);
6177     leg->SetY1(0.7);
6178     leg->AddEntry(vanilla_ratio,"Raw JZB","pf");
6179     leg->AddEntry(response_only_up_ratio,"With response correction","pf");
6180     leg->AddEntry(response_only_down_ratio,"With inverted response correction","pf");
6181     leg->AddEntry(reponse_plus_peak_up_ratio,"With response and peak correction","pf");
6182     leg->AddEntry(reponse_plus_peak_down_ratio,"With response and inverted peak corr.","pf");
6183     leg->AddEntry(lhi,"Systematic envelope","l");
6184     // leg->SetNColumns(2);
6185     leg->Draw();
6186    
6187     CompleteSave(ttcan2,"Systematics/TtbarTests/Comparison"+PostString);
6188    
6189     vanilla_ratio->GetYaxis()->SetRangeUser(0.6,1.4);
6190     vanilla_ratio->Draw("e3");
6191     response_only_up_ratio->Draw("e3 same");
6192     response_only_down_ratio->Draw("e3 same");
6193     TLegend *leg2 = make_legend();
6194     leg2->SetX1(0.15);
6195     leg2->SetY1(0.7);
6196     leg2->AddEntry(vanilla_ratio,"Raw JZB","pf");
6197     leg2->AddEntry(response_only_up_ratio,"With response correction","pf");
6198     leg2->AddEntry(response_only_down_ratio,"With inverted response correction","pf");
6199     leg2->AddEntry(lhi,"Systematic envelope","l");
6200     leg2->Draw();
6201     llow->Draw();
6202     lOne->Draw();
6203     llowA->Draw();
6204     lhiA->Draw();
6205    
6206     CompleteSave(ttcan2,"Systematics/TtbarTests/Comparison_Response"+PostString);
6207    
6208     response_only_up_ratio->GetYaxis()->SetRangeUser(0.6,1.4);
6209     response_only_up_ratio->Draw("e3");
6210     reponse_plus_peak_up_ratio->Draw("e3 same");
6211     reponse_plus_peak_down_ratio->Draw("e3 same");
6212     TLegend *leg3 = make_legend();
6213     leg3->SetX1(0.15);
6214     leg3->SetY1(0.7);
6215     leg3->AddEntry(response_only_up_ratio,"With response correction","pf");
6216     leg3->AddEntry(reponse_plus_peak_up_ratio,"With response and peak correction","pf");
6217     leg3->AddEntry(reponse_plus_peak_down_ratio,"With response and inverted peak corr.","pf");
6218     leg3->AddEntry(lhi,"Systematic envelope","l");
6219     leg3->Draw();
6220     llow->Draw();
6221     lOne->Draw();
6222     llowA->Draw();
6223     lhiA->Draw();
6224    
6225     CompleteSave(ttcan2,"Systematics/TtbarTests/Comparison_Peak"+PostString);
6226    
6227     delete ttcan2;
6228     }
6229    
6230     void ttbar_correction_tests() {
6231     TCanvas *ttcan = new TCanvas("ttcan","ttcan");
6232    
6233     TH1F *vanilla_observed, *response_only_up_observed, *response_only_down_observed, *reponse_plus_peak_up_observed, *reponse_plus_peak_down_observed;
6234    
6235     TH1F *vanilla_predicted, *response_only_up_predicted, *response_only_down_predicted, *reponse_plus_peak_up_predicted, *reponse_plus_peak_down_predicted;
6236    
6237     TH1F *vanilla_ratio, *response_only_up_ratio, *response_only_down_ratio, *reponse_plus_peak_up_ratio, *reponse_plus_peak_down_ratio;
6238    
6239     TH1F *vanilla_ratio2, *response_only_up_ratio2, *response_only_down_ratio2, *reponse_plus_peak_up_ratio2, *reponse_plus_peak_down_ratio2;
6240    
6241     string vanilla="jzb[1]";
6242     string response_only_up="((jzb[1]+0.034665*pt))";
6243     string response_only_down="((jzb[1]-0.034665*pt))";
6244     string reponse_plus_peak_up="((jzb[1]+0.034665*pt)- 3.58273 )";
6245     string reponse_plus_peak_down="((jzb[1]+0.034665*pt)+ 3.58273 )";
6246    
6247     do_one_ttbar_test(vanilla_observed,vanilla_predicted,vanilla_ratio,vanilla_ratio2,vanilla,"vanilla");
6248     do_one_ttbar_test(response_only_up_observed,response_only_up_predicted,response_only_up_ratio,response_only_up_ratio2,response_only_up,"response_only_up");
6249     do_one_ttbar_test(response_only_down_observed,response_only_down_predicted,response_only_down_ratio,response_only_down_ratio2,response_only_down,"response_only_down");
6250     do_one_ttbar_test(reponse_plus_peak_up_observed,reponse_plus_peak_up_predicted,reponse_plus_peak_up_ratio,reponse_plus_peak_up_ratio2,reponse_plus_peak_up,"reponse_plus_peak_up");
6251     do_one_ttbar_test(reponse_plus_peak_down_observed,reponse_plus_peak_down_predicted,reponse_plus_peak_down_ratio,reponse_plus_peak_down_ratio2,reponse_plus_peak_down,"reponse_plus_peak_down");
6252    
6253     ttcan->cd();
6254    
6255     IllustrateVariation(vanilla_ratio,response_only_up_ratio,response_only_down_ratio,reponse_plus_peak_up_ratio,reponse_plus_peak_down_ratio,"PartialRatio");
6256     IllustrateVariation(vanilla_ratio2,response_only_up_ratio2,response_only_down_ratio2,reponse_plus_peak_up_ratio2,reponse_plus_peak_down_ratio2,"FullRatio");
6257    
6258     delete vanilla_observed;
6259     delete response_only_up_observed;
6260     delete response_only_down_observed;
6261     delete reponse_plus_peak_up_observed;
6262     delete reponse_plus_peak_down_observed;
6263    
6264     delete vanilla_predicted;
6265     delete response_only_up_predicted;
6266     delete response_only_down_predicted;
6267     delete reponse_plus_peak_up_predicted;
6268     delete reponse_plus_peak_down_predicted;
6269    
6270     delete vanilla_ratio;
6271     delete response_only_up_ratio;
6272     delete response_only_down_ratio;
6273     delete reponse_plus_peak_up_ratio;
6274     delete reponse_plus_peak_down_ratio;
6275    
6276     delete ttcan;
6277     }
6278    
6279     void ttbar_region_search(string mcjzb) {
6280     cout << "Looking for a nice control region" << endl;
6281     TCanvas *can = new TCanvas("can","can",1200,1200);
6282     can->Divide(2,2);
6283     can->cd(1);
6284     can->cd(1)->SetLogy(1);
6285    
6286     THStack JZBdistSF = allsamples.DrawStack("JZBdistSF",mcjzb,100,-150,150, "JZB [GeV]", "events", cutmass&&cutOSSF&&TCut("pfJetGoodNum40==2"),mc, luminosity);
6287     THStack JZBdistOF = allsamples.DrawStack("JZBdistOF",mcjzb,100,-150,150, "JZB [GeV]", "events", cutmass&&cutOSOF&&TCut("pfJetGoodNum40==2"),mc, luminosity);
6288    
6289     JZBdistSF.Draw("histo");
6290     JZBdistSF.SetMaximum(1000);
6291     JZBdistSF.SetMinimum(0.1);
6292     JZBdistSF.Draw("histo");
6293     DrawMCPrelim();
6294    
6295     can->cd(2);
6296     can->cd(2)->SetLogy(1);
6297     JZBdistOF.Draw("histo");
6298     JZBdistOF.SetMaximum(1000);
6299     JZBdistOF.SetMinimum(0.1);
6300     JZBdistOF.Draw("histo");
6301     DrawMCPrelim();
6302    
6303     can->cd(3);
6304    
6305    
6306     write_warning(__FUNCTION__,"Missing negative JZB subtraction ");
6307    
6308     DrawMCPrelim();
6309    
6310     /*
6311     THStack *Subtracted = new THStack();
6312    
6313     TIter nextSF(JZBdistSF.GetHists());
6314     TIter nextOF(JZBdistOF.GetHists());
6315     TObject* SFobj;
6316     TObject* OFobj;
6317    
6318     TH1* sfh = NULL;
6319     TH1* ofh = NULL;
6320    
6321     while ( (SFobj = nextSF()) && (OFobj = nextOF()) ) {
6322     TH1F *sfstart = (TH1*)SFobj->Clone();
6323     TH1F *ofstart = (TH1*)OFobj->Clone();
6324     TH1F *obs, *pred;
6325     MakeObservationPrediction(obs,pred,sfstart,ofstart);
6326    
6327     if ( !hratio ) {
6328     hratio = (TH1*)obj->Clone();
6329     hratio->SetName("hratio");
6330     } else hratio->Add( (TH1*)obj );
6331 buchmann 1.9
6332 buchmann 1.88 }
6333     hratio->Divide(hdata);
6334     */
6335    
6336    
6337     can->cd(4);
6338     JZBdistOF.Draw("histo");
6339     DrawMCPrelim();
6340    
6341    
6342    
6343     CompleteSave(can,"Systematics/TtbarTests/ControlRegion");
6344    
6345     CleanLegends();
6346     delete can;
6347     }
6348    
6349     void ttbar_tests(string mcjzb) {
6350     //ttbar_correction_tests();
6351     ttbar_region_search(mcjzb);
6352     }
6353 buchmann 1.9
6354 buchmann 1.93 Value GetYieldBetween(TH1F *h, float low, float high) {
6355     float Yield=0;
6356     float YieldErr=0;
6357     for(int i=1;i<=h->GetNbinsX()+1;i++) {
6358     if(h->GetBinLowEdge(i)+h->GetBinWidth(i)<=low) continue;// considered in the next bin
6359     if(h->GetBinLowEdge(i)>=high) continue;//above the threshold, out!
6360     Yield+=h->GetBinContent(i);
6361     YieldErr=sqrt(YieldErr*YieldErr+h->GetBinError(i)*h->GetBinError(i));
6362     }
6363    
6364     Value a(Yield,YieldErr);
6365     return a;
6366     }
6367    
6368    
6369     void make_SF_over_OF_plot(string datajzb, string mcjzb, TCut cut, string variable, int nbins, float xmin, float ymin, string varname, string filename) {
6370     TCanvas *SFoOF_can = new TCanvas("SFoOF_can","SFoOF_can");
6371     TH1F *data_sf = allsamples.Draw("data_sf","mll",20,0,200, "m_{ll} [GeV]", "events", cut&&cutOSSF,data,luminosity);
6372     TH1F *data_of = allsamples.Draw("data_of","mll",20,0,200, "m_{ll} [GeV]", "events", cut&&cutOSOF,data,luminosity);
6373    
6374     TH1F *mc_sf = allsamples.Draw("mc_sf","mll",20,0,200, "m_{ll} [GeV]", "events", cut&&cutOSSF,mc,luminosity);
6375     TH1F *mc_of = allsamples.Draw("mc_of","mll",20,0,200, "m_{ll} [GeV]", "events", cut&&cutOSOF,mc,luminosity);
6376    
6377     TH1F *mc_ratio = (TH1F*)mc_sf->Clone("mc_ratio");
6378     mc_ratio->Divide(mc_of);
6379    
6380     TH1F *data_ratio = (TH1F*)data_sf->Clone("data_ratio");
6381     data_ratio->Divide(data_of);
6382    
6383     mc_ratio->SetFillColor(TColor::GetColor("#00ADE1"));
6384     mc_ratio->SetMarkerColor(TColor::GetColor("#00ADE1"));
6385     mc_ratio->GetYaxis()->SetRangeUser(0.5,1.5);
6386    
6387     mc_ratio->GetYaxis()->SetTitle("R(SF / OF)");
6388    
6389    
6390     Value R_sf_of_low_mass = GetYieldBetween(data_sf,20,70)/GetYieldBetween(data_of,20,70);
6391     Value R_sf_of_high_mass = GetYieldBetween(data_sf,120,200)/GetYieldBetween(data_of,120,200);
6392    
6393     Value R_sf_of_low_mass_mc = GetYieldBetween(mc_sf,20,70)/GetYieldBetween(mc_of,20,70);
6394     Value R_sf_of_high_mass_mc = GetYieldBetween(mc_sf,120,200)/GetYieldBetween(mc_of,120,200);
6395    
6396     dout << "Ratio at low mass : " << R_sf_of_low_mass << " (mc : " << R_sf_of_low_mass_mc << " )" << endl;
6397     dout << "Ratio at high mass : " << R_sf_of_high_mass << " (mc : " << R_sf_of_high_mass_mc << " )" << endl;
6398    
6399     TGraphAsymmErrors *gra = produce_ratio_graph(mc_ratio);
6400     gra->Draw();
6401     mc_ratio->Draw();
6402     gra->Draw("e20");
6403     gra->SetFillColor(TColor::GetColor("#00ADE1"));
6404     gra->SetMarkerColor(TColor::GetColor("#00ADE1"));
6405     data_ratio->Draw("e1,same");
6406    
6407     TLegend *leg = new TLegend(0.17,0.16,0.53,0.31);
6408     // leg->SetHeader("R( SF / OF )");
6409     leg->SetFillColor(kWhite);
6410     leg->SetBorderSize(0);
6411     leg->AddEntry(data_ratio,"Data","p");
6412     leg->AddEntry(gra,"MC","fp");
6413     leg->Draw();
6414    
6415 buchmann 1.98 TLine *g = new TLine(0,1.0,200,1.0);
6416 buchmann 1.93 g->SetLineColor(kBlue);
6417     g->Draw();
6418    
6419     TLine *l = new TLine(70,0.5,70,1.5);
6420     l->SetLineStyle(2);
6421     l->SetLineColor(TColor::GetColor("#00ADE1"));
6422 buchmann 1.95 TLine *m = new TLine(120,0.5,120,1.5);
6423 buchmann 1.93 m->SetLineStyle(2);
6424     m->SetLineColor(TColor::GetColor("#00ADE1"));
6425     l->Draw();
6426     m->Draw();
6427    
6428    
6429     DrawPrelim();
6430    
6431     CompleteSave(SFoOF_can,"iTTbar/"+filename+"SF_vs_OF");
6432    
6433     delete leg;
6434     delete mc_sf;
6435     delete mc_of;
6436     delete mc_ratio;
6437     delete data_sf;
6438     delete data_of;
6439     delete data_ratio;
6440     delete SFoOF_can;
6441     }
6442    
6443     void make_iTTbar_JZB_plot(string datajzb, string mcjzb, TCut cut) {
6444     TCanvas *can = new TCanvas("can","can");
6445     vector<float> binning;
6446     binning.push_back(-100);
6447     binning.push_back(-50);
6448     binning.push_back(-20);
6449     binning.push_back(0);
6450     // binning.push_back(10);
6451     binning.push_back(20);
6452     // binning.push_back(30);
6453     binning.push_back(50);
6454     binning.push_back(100);
6455     binning.push_back(300);
6456    
6457     TH1F *hdata = allsamples.Draw("hdata", datajzb, binning, "JZB [GeV]", "events", cut&&cutOSSF,data,luminosity);
6458     TH1F *hodata = allsamples.Draw("hodata", datajzb, binning, "JZB [GeV]", "events", cut&&cutOSOF,data,luminosity);
6459     TH1F *hndata = allsamples.Draw("hndata", "-"+datajzb,binning, "JZB [GeV]", "events", cut&&cutOSSF,data,luminosity);
6460     TH1F *hnodata = allsamples.Draw("hnodata","-"+datajzb,binning, "JZB [GeV]", "events", cut&&cutOSOF,data,luminosity);
6461    
6462     TH1F *hmc = allsamples.Draw("hmc", datajzb, binning, "JZB [GeV]", "events", cut&&cutOSSF,mc,luminosity);
6463     TH1F *homc = allsamples.Draw("homc", datajzb, binning, "JZB [GeV]", "events", cut&&cutOSOF,mc,luminosity);
6464    
6465     hodata->SetLineColor(kRed);
6466     hmc->SetLineColor(kRed);
6467     // hodata->Add(hndata);
6468     // hodata->Add(hnodata,-1);
6469    
6470     if(hdata->GetMaximum()>hodata->GetMaximum()) {
6471     hdata->SetMinimum(1.0);
6472     hdata->Draw();
6473     hodata->Draw("histo,same");
6474     hdata->Draw("same");
6475     } else {
6476     hodata->SetMinimum(1.0);
6477     hodata->Draw("histo");
6478     hdata->Draw("same");
6479     }
6480    
6481     CompleteSave(can,"iTTbar/JZB_plot");
6482     TH1F *ratio = (TH1F*)hdata->Clone("ratio");
6483     ratio->Divide(hodata);
6484     ratio->GetYaxis()->SetTitle("obs/pred");
6485     ratio->GetYaxis()->SetRangeUser(0,2);
6486    
6487     ratio->Draw();
6488     TLine *l = new TLine(-100,1.0,300,1.0);
6489     l->SetLineColor(kBlue);
6490     l->SetLineStyle(2);
6491     l->Draw();
6492     TLine *llow = new TLine(-100,1.0-0.07,300,1.0-0.07);
6493     TLine *lhi = new TLine(-100,1.0+0.07,300,1.0+0.07);
6494     llow->SetLineColor(kBlue);
6495     llow->SetLineStyle(2);
6496     llow->Draw();
6497     lhi->SetLineColor(kBlue);
6498     lhi->SetLineStyle(2);
6499     lhi->Draw();
6500    
6501     CompleteSave(can,"iTTbar/JZB_plot_ratio");
6502    
6503     delete hdata;
6504     delete hodata;
6505     delete ratio;
6506     delete can;
6507     // THStack *hmc = new THStack(allsamples.DrawStack("hmc","mll",40,0,200, "m_{ll} [GeV]", "events", cut&&cutOSSF,mc,luminosity));
6508     // THStack *homc = new THStack(allsamples.DrawStack("homc","mll",40,0,200, "m_{ll} [GeV]", "events", cut&&cutOSOF,mc,luminosity));
6509     }
6510 buchmann 1.94
6511    
6512    
6513     void MakeSpecialiTTbarClosurePlot(TCut fullcut, string datajzb, string mcjzb, string MassRegion) {
6514     TCanvas *iTTbarClosureTestCanvas = new TCanvas("iTTbarClosureTestCanvas","iTTbarClosureTestCanvas");
6515    
6516     vector<float> binning;
6517     /*
6518     binning.push_back(0);
6519     binning.push_back(20);
6520     binning.push_back(50);
6521     binning.push_back(100);
6522     // binning.push_back(200);
6523     */
6524 buchmann 1.99 binning.push_back(-100);
6525     binning.push_back(-50);
6526     binning.push_back(-30);
6527     binning.push_back(-10);
6528 buchmann 1.94 binning.push_back(0);
6529     binning.push_back(10);
6530     binning.push_back(30);
6531     binning.push_back(50);
6532     binning.push_back(100);
6533 buchmann 1.99 binning.push_back(200);
6534 buchmann 1.94
6535    
6536     TH1F *hdata = allsamples.Draw("hdata", datajzb,binning, "JZB [GeV]", "events", fullcut&&TCut("id1==id2"),data,luminosity);
6537     TH1F *hodata = allsamples.Draw("hodata",datajzb,binning, "JZB [GeV]", "events", fullcut&&TCut("id1!=id2"),data,luminosity);
6538     TH1F *hmc = allsamples.Draw("hmc", mcjzb,binning, "JZB [GeV]", "events", fullcut&&TCut("id1==id2"),mc,luminosity);
6539     TH1F *homc = allsamples.Draw("homc", mcjzb,binning, "JZB [GeV]", "events", fullcut&&TCut("id1!=id2"),mc,luminosity);
6540    
6541     hdata->SetLineColor(kBlack);
6542     hmc->SetLineColor(kBlack);
6543     hodata->SetLineColor(kRed);
6544     homc->SetLineColor(kRed);
6545     hodata->SetMarkerColor(kRed);
6546    
6547     hdata->GetYaxis()->SetTitle("events");
6548    
6549     float maximum=hdata->GetMaximum()+1.2*sqrt(hdata->GetMaximum());
6550     float minimum=hdata->GetMinimum()-1.2*sqrt(hdata->GetMinimum());
6551     if(hmc->GetMinimum()<minimum) minimum=hmc->GetMinimum()-1.2*sqrt(hmc->GetMinimum());
6552     if(hmc->GetMaximum()>maximum) maximum=hmc->GetMaximum()+1.2*sqrt(hmc->GetMaximum());
6553     if(homc->GetMinimum()<minimum) minimum=homc->GetMinimum()-1.2*sqrt(homc->GetMinimum());
6554     if(homc->GetMaximum()>maximum) maximum=homc->GetMaximum()+1.2*sqrt(homc->GetMaximum());
6555     if(hodata->GetMinimum()<minimum) minimum=hodata->GetMinimum()-1.2*sqrt(hodata->GetMinimum());
6556     if(hodata->GetMaximum()>maximum) maximum=hodata->GetMaximum()+1.2*sqrt(hodata->GetMaximum());
6557    
6558     hdata->SetMaximum(maximum);
6559     hdata->SetMinimum(minimum);
6560    
6561    
6562     hdata->Draw();
6563     hmc->Draw("same,histo");
6564     homc->Draw("same,histo");
6565     hdata->Draw("same");
6566     hodata->Draw("same");
6567    
6568     TLegend *leg = make_legend();
6569     leg->AddEntry(hdata,"SF data","pe");
6570     leg->AddEntry(hodata,"OF data","pe");
6571     leg->AddEntry(hmc,"SF MC","l");
6572     leg->AddEntry(homc,"OF MC","l");
6573     leg->Draw();
6574    
6575     DrawPrelim();
6576    
6577     CompleteSave(iTTbarClosureTestCanvas,"iTTbar/TTbar_CR_Closure_"+MassRegion);
6578    
6579     TH1F *ratio_data = (TH1F*)hdata->Clone("ratio_data");
6580     ratio_data->Divide(hodata);
6581     TH1F *ratio_mc = (TH1F*)hmc->Clone("ratio_mc");
6582     ratio_mc->Divide(homc);
6583    
6584     ratio_mc->SetFillColor(kBlue);
6585     ratio_mc->SetMarkerSize(0);
6586    
6587     TGraphAsymmErrors *eratio = produce_ratio_graph(ratio_mc);
6588    
6589     eratio->SetFillColor(TColor::GetColor("#00ADE1"));
6590     ratio_data->GetYaxis()->SetRangeUser(0.5,1.5);
6591     ratio_data->Draw("e1");
6592     eratio->Draw("20");
6593     ratio_data->Draw("e1,same");
6594    
6595     TLegend *leg2 = make_legend();
6596     leg2->AddEntry(ratio_data,"R(SF/OF) in #bar{t}t CR, data","pe");
6597     leg2->AddEntry(eratio ,"R(SF/OF) in #bar{t}t CR, MC" ,"f");
6598     leg2->SetY1(0.8);
6599     leg2->SetX1(0.45);
6600     leg2->Draw();
6601    
6602     DrawPrelim();
6603     CompleteSave(iTTbarClosureTestCanvas,"iTTbar/TTbar_CR_Closure_Ratio_"+MassRegion);
6604    
6605     TFile *f = new TFile("fout.root","RECREATE");
6606     eratio->Write();
6607     ratio_data->Write();
6608     leg2->Write();
6609     f->Close();
6610    
6611    
6612     delete leg;
6613     delete leg2;
6614     delete ratio_data;
6615     delete ratio_mc;
6616     delete hdata;
6617     delete hmc;
6618     delete hodata;
6619     delete iTTbarClosureTestCanvas;
6620     }
6621    
6622    
6623 buchmann 1.93
6624     void make_ijzb_ttbar_closure_test(string datajzb, string mcjzb) {
6625     TCut tt_nJets("pfJetGoodNum40==2");
6626 buchmann 1.97 TCut tt_bJet("pfJetGoodNumBtag40==2 && met[4]>10");
6627 buchmann 1.94 TCut tt_LowMass("mll>20&&mll<70");
6628     TCut tt_HighMass("mll>120&&mll<200");
6629     TCut tt_noZ(tt_LowMass || tt_HighMass);
6630 buchmann 1.93
6631 buchmann 1.95 /*
6632 buchmann 1.93 make_iTTbar_JZB_plot(datajzb, mcjzb,tt_nJets&&tt_bJet&&tt_noZ);
6633 buchmann 1.95 */
6634 buchmann 1.93 TCanvas *can = new TCanvas("can","can");
6635    
6636 buchmann 1.95 TH1F *hdata = allsamples.Draw( "hdata", "mll",40,0,200, "m_{ll} [GeV]", "events", tt_nJets&&tt_bJet&&tt_noZ&&cutOSSF,data,luminosity);
6637     THStack *hmc = new THStack( allsamples.DrawStack( "hmc", "mll",40,0,200, "m_{ll} [GeV]", "events", tt_nJets&&tt_bJet&&tt_noZ&&cutOSSF,mc, luminosity));
6638     TH1F *hodata = allsamples.Draw( "hodata","mll",40,0,200, "m_{ll} [GeV]", "events", tt_nJets&&tt_bJet&&tt_noZ&&cutOSOF,data,luminosity);
6639     THStack *homc = new THStack( allsamples.DrawStack( "homc", "mll",40,0,200, "m_{ll} [GeV]", "events", tt_nJets&&tt_bJet&&tt_noZ&&cutOSOF,mc, luminosity));
6640 buchmann 1.93
6641     TH1F *coll_hmc = CollapseStack(hmc);
6642     TH1F *coll_homc = CollapseStack(homc);
6643    
6644     bool dolog=true;
6645     bool nolog=false;
6646    
6647     dout << " SF: " << endl;
6648 buchmann 1.95 dout << " Data : " << hdata->Integral() << endl;
6649 buchmann 1.93 WriteYield(hmc, 0, 10000);
6650     dout << " OF: " << endl;
6651 buchmann 1.95 dout << " Data : " << hodata->Integral() << endl;
6652 buchmann 1.93 WriteYield(homc, 0, 10000);
6653     hodata->SetLineColor(kRed);
6654     hdata->Draw();
6655     hmc->Draw("histo,same");
6656     hodata->Draw("histo,same");
6657     hdata->Draw("e1,same");
6658     DrawPrelim();
6659     CompleteSave(can,"TestingPrediction");
6660    
6661     dout << "We get an expected ratio of " << coll_hmc->Integral()/coll_homc->Integral() << endl;
6662     dout << "In data we find " << hdata->Integral()/hodata->Integral() << endl;
6663    
6664     Value R_sf_of_low_mass = GetYieldBetween(hdata,20,70)/GetYieldBetween(hodata,20,70);
6665     Value R_sf_of_high_mass = GetYieldBetween(hdata,120,200)/GetYieldBetween(hodata,120,200);
6666    
6667     Value R_sf_of_low_mass_mc = GetYieldBetween(coll_hmc,20,70)/GetYieldBetween(coll_homc,20,70);
6668     Value R_sf_of_high_mass_mc = GetYieldBetween(coll_hmc,120,200)/GetYieldBetween(coll_homc,120,200);
6669    
6670     dout << "Ratio at low mass : " << R_sf_of_low_mass << " (mc : " << R_sf_of_low_mass_mc << " )" << endl;
6671     dout << "Ratio at high mass : " << R_sf_of_high_mass << " (mc : " << R_sf_of_high_mass_mc << " )" << endl;
6672    
6673     dout << "Composition at low mass : " << endl;
6674     dout << "Same flavor: " << endl;
6675     ProduceYields(20, 70, hdata, hmc);
6676     dout << "Opposite flavor: " << endl;
6677     ProduceYields(20, 70, hodata, homc);
6678    
6679     dout << endl << endl;
6680    
6681     dout << "Composition at high mass : " << endl;
6682     dout << "Same flavor: " << endl;
6683     ProduceYields(120, 200, hdata, hmc);
6684     dout << "Opposite flavor: " << endl;
6685     ProduceYields(120, 200, hodata, homc);
6686    
6687    
6688    
6689    
6690     make_plain_kin_plot(mcjzb,(const char*) (tt_nJets&&tt_bJet&&tt_noZ&&cutOSSF),20,-200,200,dolog,"JZB","iTTbar/JZB_SF",false,true);
6691     make_plain_kin_plot(mcjzb,(const char*) (tt_nJets&&tt_bJet&&tt_noZ&&cutOSOF),20,-200,200,dolog,"JZB","iTTbar/JZB_OF",false,true);
6692    
6693     make_plain_kin_plot("mll",(const char*) (tt_nJets&&tt_bJet&&tt_noZ&&cutOSSF),40,0,200,nolog,"m_{ll} [GeV]","iTTbar/mll_SF",false,true);
6694     make_plain_kin_plot("mll",(const char*) (tt_nJets&&tt_bJet&&tt_noZ&&cutOSOF),40,0,200,nolog,"m_{ll} [GeV]","iTTbar/mll_OF",false,true);
6695    
6696     make_SF_over_OF_plot(datajzb, mcjzb,tt_nJets&&tt_bJet&&tt_noZ,"mll",20,0,200,"m_{ll} [GeV]","mll");
6697    
6698 buchmann 1.94 MakeSpecialiTTbarClosurePlot((tt_nJets&&tt_bJet&&tt_LowMass),datajzb,mcjzb,"LowMassRegion2070");
6699     MakeSpecialiTTbarClosurePlot((tt_nJets&&tt_bJet&&tt_HighMass),datajzb,mcjzb,"HighMassRegion");
6700     MakeSpecialiTTbarClosurePlot((tt_nJets&&tt_bJet&&tt_noZ),datajzb,mcjzb,"NoZ");
6701 buchmann 1.95
6702 buchmann 1.93 // make_plain_kin_plot("pfJetGoodNum40",(const char*) (tt_nJets&&tt_bJet&&tt_noZ&&cutOSSF),10,-0.5,9.5,dolog,"n_{jets}","iTTbar/nJets_SF",false,true);
6703     // make_plain_kin_plot("pfJetGoodNum40",(const char*) (tt_nJets&&tt_bJet&&tt_noZ&&cutOSOF),10,-0.5,9.5,dolog,"n_{jets}","iTTbar/nJets_OF",false,true);
6704     //
6705     // make_plain_kin_plot("pfJetGoodNumBtag40",(const char*) (tt_nJets&&tt_bJet&&tt_noZ&&cutOSSF),10,-0.5,9.5,dolog,"n_{btags}","iTTbar/nBtags_SF",false,true);
6706     // make_plain_kin_plot("pfJetGoodNumBtag40",(const char*) (tt_nJets&&tt_bJet&&tt_noZ&&cutOSOF),10,-0.5,9.5,dolog,"n_{btags}","iTTbar/nBtags_OF",false,true);
6707    
6708    
6709     delete coll_hmc;
6710     delete coll_homc;
6711     delete hmc;
6712     delete homc;
6713     delete hdata;
6714     delete hodata;
6715 buchmann 1.95 delete can;
6716 buchmann 1.93 }
6717 buchmann 1.96
6718     void compute_global_significance(float local_significance) {
6719     float global_sigificance = ROOT::Math::normal_quantile_c(ROOT::Math::normal_cdf_c(local_significance,1)*4,1);
6720     dout << "local significance : " << local_significance << endl;
6721     dout << "global significance : " << global_sigificance << endl;
6722     }
6723 buchmann 1.93
6724    
6725 buchmann 1.1 void test() {
6726    
6727 buchmann 1.92
6728     float MCPeak, MCPeakError, DataPeak, DataPeakError;
6729     stringstream result, datajzb, mcjzb;
6730     bool doPUreweighting=true;
6731     bool SwitchOffNJetsCut=false;
6732    
6733    
6734     TCanvas *can = new TCanvas("can","can");
6735     float mcSigma,mcSigmaError,dataSigma,dataSigmaError;
6736    
6737     float NumVtxBin[6] = {0,5,10,15,20,30};
6738    
6739     stringstream NowCut;
6740    
6741     TGraphErrors *gMCPeak = new TGraphErrors();
6742     gMCPeak->SetTitle("gMCPeak");
6743     gMCPeak->SetName("gMCPeak");
6744     TGraphErrors *gDataPeak = new TGraphErrors();
6745     gDataPeak->SetTitle("gDataPeak");
6746     gDataPeak->SetName("gDataPeak");
6747     TGraphErrors *gMCWidth = new TGraphErrors();
6748     gMCWidth->SetTitle("gMCWidth");
6749     gMCWidth->SetName("gMCWidth");
6750     TGraphErrors *gDataWidth = new TGraphErrors();
6751     gDataWidth->SetTitle("gDataWidth");
6752     gDataWidth->SetName("gDataWidth");
6753    
6754     float AllMCPeaks[200];
6755     float AllMCPeaksErrors[200];
6756    
6757     for(int i=10;i<180;i+=20) {
6758     NowCut.str("");
6759     NowCut << "mll>=" << i << "&&mll<" << i+20;
6760     find_one_peak_combination(TCut(NowCut.str().c_str()),SwitchOffNJetsCut,MCPeak,MCPeakError, DataPeak,DataPeakError,mcSigma,mcSigmaError, dataSigma,dataSigmaError,result,doPUreweighting,"");
6761     AllMCPeaks[i]=MCPeak;
6762     AllMCPeaksErrors[i]=MCPeakError;
6763     }
6764    
6765     dout << "Summary : " << endl;
6766     for(int i=10;i<180;i+=20) {
6767     dout << "For the slice at [" << i << " , " << i+20 << "] we get a peak at " << AllMCPeaks[i] << " +/- " << AllMCPeaksErrors[i] << endl;
6768     }
6769     /*
6770 buchmann 1.1 TCanvas *testcanv = new TCanvas("testcanv","testcanv");
6771     testcanv->cd();
6772 buchmann 1.33 // switch_overunderflow(true);
6773 buchmann 1.91 TH1F *histo1 = new TH1F("histo","histo",100,0,1);
6774     histo1->Sumw2();
6775     TH1F *histo2 = new TH1F("histo2","histo2",100,0,1);
6776     histo2->Sumw2();
6777    
6778     for(int i=0;i<100;i++) {
6779     histo1->Fill(1.0/i,i);
6780     histo2->Fill(1.0/(i*i),i);
6781     }
6782    
6783     histo1->Draw();
6784     histo2->Draw("e1,same");
6785    
6786     Save_With_Ratio( histo1, histo2, testcanv->cd(), "Bullshit", false, false, "AnyCrap" );
6787    
6788    
6789 buchmann 1.1 dout << "HELLO there!" << endl;
6790 buchmann 1.92 */
6791 buchmann 1.1 }