ViewVC Help
View File | Revision Log | Show Annotations | Root Listing
root/cvsroot/UserCode/cbrown/Development/Plotting/Modules/Plotting_Functions.C
Revision: 1.96
Committed: Wed May 22 07:50:52 2013 UTC (11 years, 11 months ago) by buchmann
Content type: text/plain
Branch: MAIN
Changes since 1.95: +47 -5 lines
Log Message:
Added calculation of global significance

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 void Old_FindPeakPileUpCorrection() {
113     bool StoreResultsInSeparateFile=false;
114     PeakLibrary::StoreHistos=true;
115    
116    
117     dout << "Finding peak position as a function of PU" << endl;
118 buchmann 1.86 float MCPeak, MCPeakError, DataPeak, DataPeakError;
119     stringstream result, datajzb, mcjzb;
120     bool doPUreweighting=true;
121     bool SwitchOffNJetsCut=false;
122    
123 buchmann 1.87
124     TCanvas *can = new TCanvas("can","can");
125 buchmann 1.86 float mcSigma,mcSigmaError,dataSigma,dataSigmaError;
126    
127 buchmann 1.87 float NumVtxBin[6] = {0,5,10,15,20,30};
128 buchmann 1.86
129     stringstream NowCut;
130    
131     TGraphErrors *gMCPeak = new TGraphErrors();
132     gMCPeak->SetTitle("gMCPeak");
133 buchmann 1.87 gMCPeak->SetName("gMCPeak");
134 buchmann 1.86 TGraphErrors *gDataPeak = new TGraphErrors();
135     gDataPeak->SetTitle("gDataPeak");
136 buchmann 1.87 gDataPeak->SetName("gDataPeak");
137 buchmann 1.86 TGraphErrors *gMCWidth = new TGraphErrors();
138     gMCWidth->SetTitle("gMCWidth");
139 buchmann 1.87 gMCWidth->SetName("gMCWidth");
140 buchmann 1.86 TGraphErrors *gDataWidth = new TGraphErrors();
141     gDataWidth->SetTitle("gDataWidth");
142 buchmann 1.87 gDataWidth->SetName("gDataWidth");
143 buchmann 1.86
144 buchmann 1.94
145 buchmann 1.86 for(int i=0;i<5;i++) {
146     NowCut.str("");
147     NowCut << "numVtx>=" << NumVtxBin[i] << "&&numVtx<" << NumVtxBin[i+1];
148     find_one_peak_combination(TCut(NowCut.str().c_str()),SwitchOffNJetsCut,MCPeak,MCPeakError, DataPeak,DataPeakError,mcSigma,mcSigmaError, dataSigma,dataSigmaError,result,doPUreweighting,"");
149     cout << " " << MCPeak << " +/- " << MCPeakError << endl;
150     cout << " " << DataPeak << " +/- " << DataPeakError << endl;
151    
152     gMCPeak->SetPoint(i,0.5*(NumVtxBin[i]+NumVtxBin[i+1]),MCPeak);
153     gMCPeak->SetPointError(i,0.5*(NumVtxBin[i+1]-NumVtxBin[i]),MCPeakError);
154    
155     gDataPeak->SetPoint(i,0.5*(NumVtxBin[i]+NumVtxBin[i+1]),DataPeak);
156     gDataPeak->SetPointError(i,0.5*(NumVtxBin[i+1]-NumVtxBin[i]),DataPeakError);
157    
158     gMCWidth->SetPoint(i,0.5*(NumVtxBin[i]+NumVtxBin[i+1]),mcSigma);
159     gMCWidth->SetPointError(i,0.5*(NumVtxBin[i+1]-NumVtxBin[i]),mcSigmaError);
160    
161     gDataWidth->SetPoint(i,0.5*(NumVtxBin[i]+NumVtxBin[i+1]),dataSigma);
162     gDataWidth->SetPointError(i,0.5*(NumVtxBin[i+1]-NumVtxBin[i]),dataSigmaError);
163     }
164    
165 buchmann 1.87 can->cd();
166     gMCPeak->GetXaxis()->SetTitle("N(Vertices)");
167     gMCPeak->GetYaxis()->SetTitle("Peak position");
168     gMCPeak->GetXaxis()->CenterTitle();
169     gMCPeak->GetYaxis()->CenterTitle();
170     gDataPeak->GetXaxis()->SetTitle("N(Vertices)");
171     gDataPeak->GetYaxis()->SetTitle("Peak position");
172     gDataPeak->GetXaxis()->CenterTitle();
173     gDataPeak->GetYaxis()->CenterTitle();
174    
175     gDataWidth->GetXaxis()->SetTitle("N(Vertices)");
176     gDataWidth->GetYaxis()->SetTitle("#sigma_{JZB}");
177     gDataWidth->GetXaxis()->CenterTitle();
178     gDataWidth->GetYaxis()->CenterTitle();
179     gMCWidth->GetXaxis()->SetTitle("N(Vertices)");
180     gMCWidth->GetYaxis()->SetTitle("#sigma_{JZB}");
181     gMCWidth->GetXaxis()->CenterTitle();
182     gMCWidth->GetYaxis()->CenterTitle();
183    
184     gMCPeak->SetFillColor(TColor::GetColor("#2E9AFE"));
185     gDataPeak->SetFillColor(TColor::GetColor("#2E9AFE"));
186     gDataWidth->SetFillColor(TColor::GetColor("#2E9AFE"));
187     gMCWidth->SetFillColor(TColor::GetColor("#2E9AFE"));
188    
189     gMCPeak->Draw("A2");
190     DrawMCPrelim();
191     CompleteSave(can,"PUStudy/MCPeak");
192     can->cd();
193     gMCWidth->Draw("A2");
194     DrawMCPrelim();
195     CompleteSave(can,"PUStudy/MCWidth");
196 buchmann 1.94
197 buchmann 1.87 can->cd();
198 buchmann 1.94 gDataPeak->Draw("A2");
199 buchmann 1.87
200 buchmann 1.94 DrawPrelim();
201     CompleteSave(can,"PUStudy/DataPeak");
202     can->cd();
203     gDataWidth->Draw("A2");
204     DrawPrelim();
205     CompleteSave(can,"PUStudy/DataWidth");
206    
207     if(StoreResultsInSeparateFile) {
208     TFile *PeakFinding = new TFile("PeakFindingWithPeakCorrection.root","RECREATE");
209     gMCPeak->Write();
210     gDataPeak->Write();
211     gMCWidth->Write();
212     gDataWidth->Write();
213     PeakFinding->Close();
214     }
215    
216     gDataPeak->Fit("pol1","L");
217     TF1 *DataFit = (TF1*)gDataPeak->GetFunction("pol1");
218     gMCPeak->Fit("pol1","L");
219     TF1 *MCFit = (TF1*)gMCPeak->GetFunction("pol1");
220    
221    
222     can->cd();
223     gMCPeak->Draw("A2");
224     DrawMCPrelim();
225     CompleteSave(can,"PUStudy/MCPeak_WithFit");
226     can->cd();
227    
228     can->cd();
229 buchmann 1.87 gDataPeak->Draw("A2");
230     DrawPrelim();
231 buchmann 1.94 CompleteSave(can,"PUStudy/DataPeak_WithFit");
232    
233    
234    
235     dout << "The suggested correction for Data is : " << DataFit->GetParameter(1) << endl;
236     dout << "The suggested correction for MC is : " << MCFit->GetParameter(1) << endl;
237    
238     TLegend *leg = make_legend();
239     can->cd();
240     int j=0;
241     for(int i=PeakLibrary::DataHistogram.size()-5;i<PeakLibrary::DataHistogram.size();i++) {
242     PeakLibrary::DataHistogram[i]->Rebin(5);
243     PeakLibrary::DataHistogram[i]->SetLineColor(j+1);
244     if(i==PeakLibrary::DataHistogram.size()-5) PeakLibrary::DataHistogram[i]->DrawNormalized("histo");
245     else PeakLibrary::DataHistogram[i]->DrawNormalized("histo,same");
246     stringstream name;
247     name << NumVtxBin[j] << " < N_{vtx} < " << NumVtxBin[j+1];
248     leg->AddEntry(PeakLibrary::DataHistogram[i],name.str().c_str(),"l");
249     j++;
250     }
251    
252     leg->Draw();
253     DrawPrelim();
254     CompleteSave(can,"PUStudy/DataOverview");
255    
256     TLegend *leg2 = make_legend();
257     can->cd();
258     j=0;
259     for(int i=PeakLibrary::MCHistogram.size()-5;i<PeakLibrary::MCHistogram.size();i++) {
260     PeakLibrary::MCHistogram[i]->Rebin(5);
261     PeakLibrary::MCHistogram[i]->SetLineColor(j+1);
262     if(i==PeakLibrary::MCHistogram.size()-5) PeakLibrary::MCHistogram[i]->DrawNormalized("histo");
263     else PeakLibrary::MCHistogram[i]->DrawNormalized("histo,same");
264     stringstream name;
265     name << NumVtxBin[j] << " < N_{vtx} < " << NumVtxBin[j+1];
266     leg->AddEntry(PeakLibrary::MCHistogram[i],name.str().c_str(),"l");
267     j++;
268     }
269    
270     leg->Draw();
271     DrawPrelim();
272     CompleteSave(can,"PUStudy/MCOverview");
273    
274     delete can;
275     PeakLibrary::StoreHistos=false;
276     }
277    
278     void FindPeakPileUpCorrection() {
279     bool StoreResultsInSeparateFile=true;
280     PeakLibrary::StoreHistos=true;
281    
282    
283     dout << "Finding peak position as a function of PU" << endl;
284     float MCPeak, MCPeakError, DataPeak, DataPeakError;
285     stringstream result, datajzb, mcjzb;
286     bool doPUreweighting=true;
287     bool SwitchOffNJetsCut=false;
288    
289    
290     TCanvas *can = new TCanvas("can","can");
291     float mcSigma,mcSigmaError,dataSigma,dataSigmaError;
292    
293     const int nbins=11;
294     float NumVtxBin[nbins] = {0,7,9,11,13,15,17,19,21,24,50};
295    
296     stringstream NowCut;
297    
298    
299     Double_t mc_peak_x[nbins];
300     Double_t mc_peak_y[nbins];
301     Double_t mc_peak_dxh[nbins];
302     Double_t mc_peak_dxl[nbins];
303     Double_t mc_peak_dy[nbins];
304    
305     Double_t data_peak_x[nbins];
306     Double_t data_peak_y[nbins];
307     Double_t data_peak_dxh[nbins];
308     Double_t data_peak_dxl[nbins];
309     Double_t data_peak_dy[nbins];
310    
311     Double_t mc_width_x[nbins];
312     Double_t mc_width_y[nbins];
313     Double_t mc_width_dxh[nbins];
314     Double_t mc_width_dxl[nbins];
315     Double_t mc_width_dy[nbins];
316    
317     Double_t data_width_x[nbins];
318     Double_t data_width_y[nbins];
319     Double_t data_width_dxh[nbins];
320     Double_t data_width_dxl[nbins];
321     Double_t data_width_dy[nbins];
322    
323     for(int i=0;i<nbins-1;i++) {
324     NowCut.str("");
325     NowCut << "numVtx>" << NumVtxBin[i] << "&&numVtx<=" << NumVtxBin[i+1];
326     cout << "NVtx cut is now : " << NowCut.str() << endl;
327     find_one_peak_combination(TCut(NowCut.str().c_str()),SwitchOffNJetsCut,MCPeak,MCPeakError, DataPeak,DataPeakError,mcSigma,mcSigmaError, dataSigma,dataSigmaError,result,doPUreweighting,"");
328     cout << " " << MCPeak << " +/- " << MCPeakError << endl;
329     cout << " " << DataPeak << " +/- " << DataPeakError << endl;
330    
331     TH1F *hDataSFNumVtx = allsamples.Draw("hDataSFNumVtx","numVtx",100,-0.5,49.5, "N_{vtx}", "events", cutmass&&cutOSSF&&cutnJets&&TCut(NowCut.str().c_str()),data, luminosity);
332     TH1F *hDataOFNumVtx = allsamples.Draw("hDataOFNumVtx","numVtx",100,-0.5,49.5, "N_{vtx}", "events", cutmass&&cutOSOF&&cutnJets&&TCut(NowCut.str().c_str()),data, luminosity);
333     TH1F *hMCSFNumVtx = allsamples.Draw("hMCSFNumVtx","numVtx",100,-0.5,49.5, "N_{vtx}", "events", cutmass&&cutOSSF&&cutnJets&&TCut(NowCut.str().c_str()),mc, luminosity);
334     TH1F *hMCOFNumVtx = allsamples.Draw("hMCOFNumVtx","numVtx",100,-0.5,49.5, "N_{vtx}", "events", cutmass&&cutOSOF&&cutnJets&&TCut(NowCut.str().c_str()),mc, luminosity);
335    
336     hDataSFNumVtx->Add(hDataOFNumVtx,-1);
337     hMCSFNumVtx->Add(hMCOFNumVtx,-1);
338    
339     mc_peak_x[i]=hMCSFNumVtx->GetMean();
340     mc_peak_y[i]=MCPeak;
341     mc_peak_dy[i]=MCPeakError;
342    
343     data_peak_x[i]=hDataSFNumVtx->GetMean();
344     data_peak_y[i]=DataPeak;
345     data_peak_dy[i]=DataPeakError;
346    
347     mc_width_x[i]=hMCSFNumVtx->GetMean();
348     mc_width_y[i]=mcSigma;
349     mc_width_dy[i]=mcSigmaError;
350    
351     data_width_x[i]=hDataSFNumVtx->GetMean();
352     data_width_y[i]=dataSigma;
353     data_width_dy[i]=dataSigmaError;
354    
355     delete hDataSFNumVtx;
356     delete hDataOFNumVtx;
357     delete hMCSFNumVtx;
358     delete hMCOFNumVtx;
359     }
360    
361     for(int i=0;i<nbins-1;i++) {
362     if(i==0) {
363     data_width_dxl[i]=data_width_x[i];
364     data_peak_dxl[i]=data_peak_x[i];
365     data_width_dxh[i]=0.5*(data_width_x[i+1]-data_width_x[i]);
366     data_peak_dxh[i]=0.5*(data_peak_x[i+1]-data_peak_x[i]);
367    
368     mc_width_dxl[i]=mc_width_x[i];
369     mc_peak_dxl[i]=mc_peak_x[i];
370     mc_width_dxh[i]=0.5*(mc_width_x[i+1]-mc_width_x[i]);
371     mc_peak_dxh[i]=0.5*(mc_peak_x[i+1]-mc_peak_x[i]);
372     } else if(i==nbins-2) {
373     data_width_dxl[i]=0.5*(data_width_x[i]-data_width_x[i-1]);
374     data_peak_dxl[i]=0.5*(data_peak_x[i]-data_peak_x[i-1]);
375     data_width_dxh[i]=50-data_width_x[i];
376     data_peak_dxh[i]=50-data_peak_x[i];
377    
378     mc_width_dxl[i]=0.5*(mc_width_x[i]-mc_width_x[i-1]);
379     mc_peak_dxl[i]=0.5*(mc_peak_x[i]-mc_peak_x[i-1]);
380     mc_width_dxh[i]=50-mc_width_x[i];
381     mc_peak_dxh[i]=50-mc_peak_x[i];
382     } else {
383     data_width_dxl[i]=0.5*(data_width_x[i]-data_width_x[i-1]);
384     data_peak_dxl[i]=0.5*(data_peak_x[i]-data_peak_x[i-1]);
385     data_width_dxh[i]=0.5*(data_width_x[i+1]-data_width_x[i]);
386     data_peak_dxh[i]=0.5*(data_peak_x[i+1]-data_peak_x[i]);
387    
388     mc_width_dxl[i]=0.5*(mc_width_x[i]-mc_width_x[i-1]);
389     mc_peak_dxl[i]=0.5*(mc_peak_x[i]-mc_peak_x[i-1]);
390     mc_width_dxh[i]=0.5*(mc_width_x[i+1]-mc_width_x[i]);
391     mc_peak_dxh[i]=0.5*(mc_peak_x[i+1]-mc_peak_x[i]);
392     }
393     }
394    
395     TGraphAsymmErrors *gMCPeak = new TGraphAsymmErrors(nbins-1,mc_peak_x,mc_peak_y,mc_peak_dxl,mc_peak_dxh,mc_peak_dy,mc_peak_dy);
396     gMCPeak->SetTitle("gMCPeak");
397     gMCPeak->SetName("gMCPeak");
398    
399     TGraphAsymmErrors *gDataPeak = new TGraphAsymmErrors(nbins-1,data_peak_x,data_peak_y,data_peak_dxl,data_peak_dxh,data_peak_dy,data_peak_dy);
400     gDataPeak->SetTitle("gDataPeak");
401     gDataPeak->SetName("gDataPeak");
402    
403     TGraphAsymmErrors *gMCWidth = new TGraphAsymmErrors(nbins-1,mc_width_x,mc_width_y,mc_width_dxl,mc_width_dxh,mc_width_dy,mc_width_dy);
404     gMCWidth->SetTitle("gMCWidth");
405     gMCWidth->SetName("gMCWidth");
406    
407     TGraphAsymmErrors *gDataWidth = new TGraphAsymmErrors(nbins-1,data_width_x,data_width_y,data_width_dxl,data_width_dxh,data_width_dy,data_width_dy);
408     gDataWidth->SetTitle("gDataWidth");
409     gDataWidth->SetName("gDataWidth");
410    
411     can->cd();
412     gMCPeak->GetXaxis()->SetTitle("N(Vertices)");
413     gMCPeak->GetYaxis()->SetTitle("Peak position");
414     gMCPeak->GetXaxis()->CenterTitle();
415     gMCPeak->GetYaxis()->CenterTitle();
416     gDataPeak->GetXaxis()->SetTitle("N(Vertices)");
417     gDataPeak->GetYaxis()->SetTitle("Peak position");
418     gDataPeak->GetXaxis()->CenterTitle();
419     gDataPeak->GetYaxis()->CenterTitle();
420    
421     gDataWidth->GetXaxis()->SetTitle("N(Vertices)");
422     gDataWidth->GetYaxis()->SetTitle("#sigma_{JZB}");
423     gDataWidth->GetXaxis()->CenterTitle();
424     gDataWidth->GetYaxis()->CenterTitle();
425     gMCWidth->GetXaxis()->SetTitle("N(Vertices)");
426     gMCWidth->GetYaxis()->SetTitle("#sigma_{JZB}");
427     gMCWidth->GetXaxis()->CenterTitle();
428     gMCWidth->GetYaxis()->CenterTitle();
429    
430     gMCPeak->SetFillColor(TColor::GetColor("#2E9AFE"));
431     gDataPeak->SetFillColor(TColor::GetColor("#2E9AFE"));
432     gDataWidth->SetFillColor(TColor::GetColor("#2E9AFE"));
433     gMCWidth->SetFillColor(TColor::GetColor("#2E9AFE"));
434    
435     gMCPeak->Draw("A2");
436     DrawMCPrelim();
437     CompleteSave(can,"PUStudy/MCPeak");
438     can->cd();
439     gMCWidth->Draw("A2");
440     DrawMCPrelim();
441     CompleteSave(can,"PUStudy/MCWidth");
442    
443     can->cd();
444     gDataPeak->Draw("A2");
445    
446     DrawPrelim();
447 buchmann 1.87 CompleteSave(can,"PUStudy/DataPeak");
448     can->cd();
449     gDataWidth->Draw("A2");
450     DrawPrelim();
451     CompleteSave(can,"PUStudy/DataWidth");
452    
453 buchmann 1.94 if(StoreResultsInSeparateFile) {
454     TFile *PeakFinding = new TFile("PeakFindingWithPeakCorrection.root","RECREATE");
455     gMCPeak->Write();
456     gDataPeak->Write();
457     gMCWidth->Write();
458     gDataWidth->Write();
459     PeakFinding->Close();
460     }
461    
462     gDataPeak->Fit("pol1");
463     TF1 *DataFit = (TF1*)gDataPeak->GetFunction("pol1");
464     gMCPeak->Fit("pol1");
465     TF1 *MCFit = (TF1*)gMCPeak->GetFunction("pol1");
466 buchmann 1.87
467 buchmann 1.94 dout << "The suggested correction for Data is : " << DataFit->GetParameter(1) << endl;
468     dout << "The suggested correction for MC is : " << MCFit->GetParameter(1) << endl;
469    
470     TLegend *leg = make_legend();
471     can->cd();
472     int j=0;
473     for(int i=PeakLibrary::DataHistogram.size()-5;i<PeakLibrary::DataHistogram.size();i++) {
474     PeakLibrary::DataHistogram[i]->Rebin(5);
475     PeakLibrary::DataHistogram[i]->SetLineColor(j+1);
476     if(i==PeakLibrary::DataHistogram.size()-5) PeakLibrary::DataHistogram[i]->DrawNormalized("histo");
477     else PeakLibrary::DataHistogram[i]->DrawNormalized("histo,same");
478     stringstream name;
479     name << NumVtxBin[j] << " < N_{vtx} < " << NumVtxBin[j+1];
480     leg->AddEntry(PeakLibrary::DataHistogram[i],name.str().c_str(),"l");
481     j++;
482     }
483    
484     leg->Draw();
485     DrawPrelim();
486     CompleteSave(can,"PUStudy/DataOverview");
487    
488     TLegend *leg2 = make_legend();
489     can->cd();
490     j=0;
491     for(int i=PeakLibrary::MCHistogram.size()-5;i<PeakLibrary::MCHistogram.size();i++) {
492     PeakLibrary::MCHistogram[i]->Rebin(5);
493     PeakLibrary::MCHistogram[i]->SetLineColor(j+1);
494     if(i==PeakLibrary::MCHistogram.size()-5) PeakLibrary::MCHistogram[i]->DrawNormalized("histo");
495     else PeakLibrary::MCHistogram[i]->DrawNormalized("histo,same");
496     stringstream name;
497     name << NumVtxBin[j] << " < N_{vtx} < " << NumVtxBin[j+1];
498     leg->AddEntry(PeakLibrary::MCHistogram[i],name.str().c_str(),"l");
499     j++;
500     }
501    
502     leg->Draw();
503     DrawPrelim();
504     CompleteSave(can,"PUStudy/MCOverview");
505 buchmann 1.87
506     delete can;
507 buchmann 1.94 PeakLibrary::StoreHistos=false;
508 buchmann 1.86 }
509    
510 buchmann 1.94
511    
512 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)
513 buchmann 1.28 {
514 buchmann 1.66 bool overunderflowstatus=addoverunderflowbins;
515 buchmann 1.53 switch_overunderflow(false);
516 buchmann 1.57
517     TCut SpecialCut("mll>=0");
518     if(sSpecialCut!="") SpecialCut=TCut(sSpecialCut.c_str());
519    
520 buchmann 1.31 bool DoInvidualeemmPeaks=false;
521    
522 buchmann 1.28 float mcpeak, datapeak;
523     float mcpeakerr, datapeakerr;
524    
525     float mceepeak,mcmmpeak;
526     float mceepeakerr,mcmmpeakerr;
527    
528     float datammpeak,dataeepeak;
529     float datammpeakerr,dataeepeakerr;
530    
531 fronga 1.40 float mcSigma,mcSigmaError, dataSigma, dataSigmaError;
532 buchmann 1.28
533     dout << "Finding global peak : " << endl;
534 buchmann 1.57 find_one_peak_combination(SpecialCut,SwitchOffNJetsCut,mcpeak,mcpeakerr, datapeak,datapeakerr,mcSigma,mcSigmaError, dataSigma,dataSigmaError,result,doPUreweighting,"");
535 buchmann 1.30
536 buchmann 1.31 if(DoInvidualeemmPeaks) {
537     dout << "Finding peak for electrons : " << endl;
538 buchmann 1.57 find_one_peak_combination(SpecialCut&&TCut("id1==0"),SwitchOffNJetsCut,mceepeak,mceepeakerr,dataeepeak,dataeepeakerr,mcSigma,mcSigmaError,dataSigma,dataSigmaError,result,doPUreweighting,"_ele");
539 buchmann 1.31 dout << "Finding peak for muons : " << endl;
540 buchmann 1.57 find_one_peak_combination(SpecialCut&&TCut("id1==1"),SwitchOffNJetsCut,mcmmpeak,mcmmpeakerr,datammpeak,datammpeakerr,mcSigma,mcSigmaError,dataSigma,dataSigmaError,result,doPUreweighting,"_mu");
541 buchmann 1.31
542     datajzb << "(" << jzbvariabledata;
543     mcjzb << "(" << jzbvariablemc;
544    
545     if(dataeepeak>0) datajzb << "- (id1==id2)*(id1==0)*" << TMath::Abs(dataeepeak) << " ";
546     else datajzb << "+ (id1==id2)*(id1==0)*" << TMath::Abs(dataeepeak) << " ";
547    
548     if(datammpeak>0) datajzb << "- (id1==id2)*(id1==1)*" << TMath::Abs(datammpeak) << " ";
549     else datajzb << "+ (id1==id2)*(id1==1)*" << TMath::Abs(datammpeak) << " ";
550    
551     if(datapeak>0) datajzb << "- (id1!=id2)*" << TMath::Abs(datapeak) << " ";
552     else datajzb << "+ (id1!=id2)*" << TMath::Abs(datapeak) << " ";
553    
554     datajzb << ")";
555    
556     if(mceepeak>0) mcjzb << "- (id1==id2)*(id1==0)*" << TMath::Abs(mceepeak) << " ";
557     else mcjzb << "+ (id1==id2)*(id1==0)*" << TMath::Abs(mceepeak) << " ";
558    
559     if(mcmmpeak>0) mcjzb << "- (id1==id2)*(id1==1)*" << TMath::Abs(mcmmpeak) << " ";
560     else mcjzb << "+ (id1==id2)*(id1==1)*" << TMath::Abs(mcmmpeak) << " ";
561    
562     if(mcpeak>0) mcjzb << "- (id1!=id2)*" << TMath::Abs(mcpeak) << " ";
563     else mcjzb << "+ (id1!=id2)*" << TMath::Abs(mcpeak) << " ";
564    
565     mcjzb << ")";
566 buchmann 1.56
567 buchmann 1.31 } else {
568     datajzb << "(" << jzbvariabledata;
569 buchmann 1.93 mcjzb << "(" << jzbvariablemc;
570 buchmann 1.31
571     if(datapeak>0) datajzb << "- " << TMath::Abs(datapeak) << " ";
572     else datajzb << "+ " << TMath::Abs(datapeak) << " ";
573    
574     datajzb << ")";
575    
576     if(mcpeak>0) mcjzb << "- " << TMath::Abs(mcpeak) << " ";
577     else mcjzb << "+ " << TMath::Abs(mcpeak) << " ";
578    
579     mcjzb << ")";
580     }
581 buchmann 1.36
582 buchmann 1.56 MCPeak=mcpeak;
583     MCPeakError=mcpeakerr;
584     DataPeak=datapeak;
585     DataPeakError=datapeakerr;
586 buchmann 1.66 switch_overunderflow(overunderflowstatus);
587 buchmann 1.28 }
588    
589 buchmann 1.95 void make_special_obs_pred_mll_plot(string datajzb, string mcjzb, float jzbthreshold, float binWidth, int MCorData) {
590 buchmann 1.11 float min=70.0;
591     float max=115.0;
592     if(!PlottingSetup::RestrictToMassPeak) {
593 buchmann 1.34 min=20;
594 fronga 1.40 max=300;
595 buchmann 1.11 }
596 fronga 1.40 int nbins=int((max-min)/binWidth);
597 buchmann 1.11
598 buchmann 1.95 string prefix="";
599     if(MCorData==mc) prefix="MC__";
600    
601    
602     if(MCorData==mc) datajzb=mcjzb;
603    
604 buchmann 1.11 TCanvas *ckin = new TCanvas("ckin","Kinematic Plots (in the making)",600,600);
605    
606 buchmann 1.34 stringstream largerzeroS;
607     largerzeroS << "(" << datajzb << ">" << jzbthreshold << ")";
608     TCut largerzeroD(largerzeroS.str().c_str());
609 buchmann 1.11
610     stringstream smallerzeroS;
611 buchmann 1.34 smallerzeroS << "(" << datajzb << "<-" << jzbthreshold << ")";
612     TCut smallerzeroD(smallerzeroS.str().c_str());
613    
614    
615     stringstream largerzeroMS;
616     largerzeroMS << "(" << mcjzb << ">" << jzbthreshold << ")";
617     TCut largerzeroM(largerzeroMS.str().c_str());
618    
619 buchmann 1.95
620     stringstream smallerzeroMS;
621     smallerzeroMS << "(" << mcjzb << "<-" << jzbthreshold << ")";
622     TCut smallerzeroM(smallerzeroMS.str().c_str());
623    
624     TH1F *RcorrJZBeemm = allsamples.Draw("RcorrJZBeemm", "mll",nbins,min,max, "m_{ll} [GeV]", "events", cutmass&&cutOSSF&&cutnJets&&largerzeroD,MCorData,luminosity);
625 buchmann 1.93 THStack mcRcorrJZBeemm = allsamples.DrawStack("mcRcorrJZBeemm","mll",nbins,min,max, "m_{ll} [GeV]", "events", cutmass&&cutOSSF&&cutnJets&&largerzeroM,mc,luminosity);
626 buchmann 1.95 TH1F *LcorrJZBeemm = allsamples.Draw("LcorrJZBeemm", "mll",nbins,min,max, "m_{ll} [GeV]", "events", cutmass&&cutOSSF&&cutnJets&&smallerzeroD,MCorData,luminosity);
627     TH1F *RcorrJZBem = allsamples.Draw("RcorrJZBem", "mll",nbins,min,max, "m_{ll} [GeV]", "events", cutmass&&cutOSOF&&cutnJets&&largerzeroD,MCorData,luminosity);
628     TH1F *LcorrJZBem = allsamples.Draw("LcorrJZBem", "mll",nbins,min,max, "m_{ll} [GeV]", "events", cutmass&&cutOSOF&&cutnJets&&smallerzeroD,MCorData,luminosity);
629 buchmann 1.11
630     TH1F *RcorrJZBSBem;
631     TH1F *LcorrJZBSBem;
632     TH1F *RcorrJZBSBeemm;
633     TH1F *LcorrJZBSBeemm;
634    
635 buchmann 1.16 // TH1F *RcorrJZBeemmNoS;
636 buchmann 1.11
637 buchmann 1.50 if(PlottingSetup::RestrictToMassPeak&&PlottingSetup::UseSidebandsForcJZB) {
638 buchmann 1.95 RcorrJZBSBem = allsamples.Draw("RcorrJZBSBem", "mll",nbins,min,max, "JZB [GeV]", "events", sidebandcut&&cutOSOF&&cutnJets&&largerzeroD,MCorData, luminosity);
639     LcorrJZBSBem = allsamples.Draw("LcorrJZBSBem", "mll",nbins,min,max, "JZB [GeV]", "events", sidebandcut&&cutOSOF&&cutnJets&&smallerzeroD,MCorData, luminosity);
640     RcorrJZBSBeemm = allsamples.Draw("RcorrJZBSBeemm","mll",nbins,min,max, "JZB [GeV]", "events", sidebandcut&&cutOSSF&&cutnJets&&largerzeroD,MCorData, luminosity);
641     LcorrJZBSBeemm = allsamples.Draw("LcorrJZBSBeemm","mll",nbins,min,max, "JZB [GeV]", "events", sidebandcut&&cutOSSF&&cutnJets&&smallerzeroD,MCorData, luminosity);
642 buchmann 1.11 }
643 buchmann 1.95
644     // Separate predictions
645 fronga 1.43 TH1F* SFN = (TH1F*)LcorrJZBeemm->Clone("SFN");
646     TH1F* OFP = (TH1F*)RcorrJZBem->Clone("OFP");
647     TH1F* OFN = (TH1F*)LcorrJZBem->Clone("OFN");
648 buchmann 1.95
649 buchmann 1.96 TH1F *BpredSys = (TH1F*)SFN->Clone("BpredSys");
650     ClearHisto(BpredSys);
651     AddSquared(BpredSys,SFN,pow(PlottingSetup::zjetsestimateuncertOFFPEAK,2));
652    
653 buchmann 1.50 if(PlottingSetup::RestrictToMassPeak&&PlottingSetup::UseSidebandsForcJZB) {
654 fronga 1.43 OFP->Scale(1.0/3.0);
655     OFP->Add(RcorrJZBSBem,1.0/3.);
656     OFP->Add(RcorrJZBSBeemm,1.0/3.);
657     OFN->Scale(1.0/3.0);
658     OFN->Add(LcorrJZBSBem,1.0/3.);
659     OFN->Add(LcorrJZBSBeemm,1.0/3.);
660 buchmann 1.96 AddSquared(BpredSys,RcorrJZBem,pow((1.0/3) * PlottingSetup::emuncertOFFPEAK,2));
661     AddSquared(BpredSys,RcorrJZBSBem,pow((1.0/3) * PlottingSetup::emuncertOFFPEAK,2));
662     AddSquared(BpredSys,RcorrJZBSBeemm,pow((1.0/3) * PlottingSetup::emuncertOFFPEAK,2));
663     } else {
664     AddSquared(BpredSys,OFN,pow(PlottingSetup::emuncertOFFPEAK,2));
665     }
666 fronga 1.43
667 buchmann 1.96 SQRT(BpredSys);
668    
669     TGraphErrors *BpredSysBand = new TGraphErrors();
670     // TH1F *BpredSysBand = (TH1F*)BpredSys->Clone("BpredSysBand");
671    
672     for(int i=1;i<=BpredSys->GetNbinsX();i++) {
673     /*BpredSysBand->SetBinError(i,BpredSysBand->GetBinContent(i));
674     BpredSysBand->SetBinContent(i,0);*/
675     float dx=0.5*BpredSys->GetBinWidth(i);
676     float dy=BpredSys->GetBinContent(i);
677     BpredSysBand->SetPoint(i-1,BpredSys->GetBinCenter(i),0);
678     BpredSysBand->SetPointError(i-1,dx,dy);
679     }
680    
681     delete BpredSys;
682     BpredSysBand->SetFillColor(TColor::GetColor("#2E9AFE"));
683    
684 fronga 1.43 TH1F* Bpred = (TH1F*)SFN->Clone("Bpred");
685     Bpred->Add(OFP);
686     Bpred->Add(OFN,-1);
687 buchmann 1.11 Bpred->SetLineColor(kRed);
688    
689 fronga 1.40 RcorrJZBeemm->SetTitleOffset(1.3,"y");
690 buchmann 1.11 RcorrJZBeemm->Draw();
691 buchmann 1.77 mcRcorrJZBeemm.Draw("histo,same");
692 buchmann 1.11 Bpred->Draw("histo,same");
693     RcorrJZBeemm->Draw("same");
694    
695     TLegend *leg = allsamples.allbglegend();
696     leg->SetX1(0.58);
697 buchmann 1.88 // leg->AddEntry(RcorrJZBeemm,"observed (data)","l");
698 buchmann 1.11 leg->AddEntry(Bpred,"predicted (data)","l");
699     leg->Draw("same");
700    
701     stringstream saveas;
702 buchmann 1.95 saveas << "kin/Mll_After_Cut/" << prefix << "Cut_At" << jzbthreshold;
703 buchmann 1.11 CompleteSave(ckin,saveas.str());
704 buchmann 1.34
705 fronga 1.40 // Draw all predictions overlayed
706 fronga 1.43 unsigned int w = gStyle->GetHistLineWidth()+1; // Make line a bit wider, since we dash it
707     SFN->SetLineColor(kGreen+2);
708     SFN->SetLineStyle(2);
709     SFN->SetLineWidth(w);
710     OFP->SetLineColor(kBlue+2);
711     OFP->SetLineStyle(2);
712     OFP->SetLineWidth(w);
713     OFN->SetLineColor(kMagenta+2);
714     OFN->SetLineStyle(3);
715     OFN->SetLineWidth(w);
716 buchmann 1.34
717     RcorrJZBeemm->Draw();
718 fronga 1.43 SFN->Draw("histo,same");
719     OFP->Draw("histo,same");
720     OFN->Draw("histo,same");
721 buchmann 1.34 Bpred->Draw("histo,same");
722     RcorrJZBeemm->Draw("same");
723    
724 fronga 1.40 TLegend *leg2 = make_legend("",0.52,0.7);
725 buchmann 1.95 if(MCorData==data) {
726     leg2->AddEntry(RcorrJZBeemm,"observed (data)","lp");
727     leg2->AddEntry(Bpred,"predicted (data)","l");
728     } else {
729     leg2->AddEntry(RcorrJZBeemm,"true (MC)","lp");
730     leg2->AddEntry(Bpred,"predicted (MC)","l");
731     }
732    
733     if(jzbthreshold>0) {
734     leg2->AddEntry(SFN, (" SF JZB<-"+any2string(jzbthreshold)).c_str(),"l");
735     leg2->AddEntry(OFN, (" OF JZB<-"+any2string(jzbthreshold)).c_str(),"l");
736     } else {
737     leg2->AddEntry(SFN, " SF JZB<0","l");
738     leg2->AddEntry(OFN, " OF JZB<0","l");
739     }
740     leg2->AddEntry(OFP, (" OF JZB>"+any2string(jzbthreshold)).c_str(),"l");
741 buchmann 1.34 leg2->Draw("same");
742    
743     saveas.str("");
744 buchmann 1.95 saveas << "kin/Mll_After_Cut/" << prefix << "Cut_At" << jzbthreshold << "_nomc";
745     CompleteSave(ckin,saveas.str());
746    
747    
748     TH1F *diff = (TH1F*)RcorrJZBeemm->Clone("diff");
749     diff->Add(Bpred,-1);
750    
751 buchmann 1.96 TLegend *dleg = make_legend();
752     if(MCorData==data) dleg->AddEntry(diff,"True-predicted","p");
753     else dleg->AddEntry(diff,"True-predicted","p");
754     dleg->AddEntry(BpredSysBand,"Systematic envelope","f");
755    
756    
757 buchmann 1.95 diff->Draw("e1");
758 buchmann 1.96 BpredSysBand->Draw("e2");
759     diff->Draw("e1,same");
760     dleg->Draw();
761    
762 buchmann 1.95 if(MCorData==data) DrawPrelim();
763     else DrawMCPrelim();
764    
765     saveas.str("");
766     saveas << "kin/Mll_After_Cut/" << prefix << "Cut_At" << jzbthreshold << "_nomc_Diff";
767 buchmann 1.34 CompleteSave(ckin,saveas.str());
768 buchmann 1.95
769 buchmann 1.96 delete BpredSysBand;
770 buchmann 1.95 delete diff;
771    
772 buchmann 1.11 delete RcorrJZBeemm;
773     delete LcorrJZBeemm;
774     delete RcorrJZBem;
775     delete LcorrJZBem;
776 buchmann 1.95
777 buchmann 1.50 if(PlottingSetup::RestrictToMassPeak&&PlottingSetup::UseSidebandsForcJZB) {
778 buchmann 1.11 delete RcorrJZBSBeemm;
779     delete LcorrJZBSBeemm;
780     delete RcorrJZBSBem;
781     delete LcorrJZBSBem;
782     }
783     delete Bpred;
784     delete ckin;
785 buchmann 1.85 CleanLegends();
786 buchmann 1.11 }
787    
788 buchmann 1.1 void make_special_mll_plot(int nbins, float min, float max, bool logscale,string xlabel) {
789    
790     TCanvas *ckin = new TCanvas("ckin","Kinematic Plots (in the making)",600,600);
791    
792     TH1F *datahistoOSSF = allsamples.Draw("datahistoOSSF","mll",nbins,min,max, xlabel, "events",cutOSSF&&cutnJets&&basiccut,data,luminosity);
793     THStack mcstackOSSF = allsamples.DrawStack("mcstackOSSF","mll",nbins,min,max, xlabel, "events",cutOSSF&&cutnJets&&basiccut,mc,luminosity);
794     TH1F *datahistoOSOF = allsamples.Draw("datahistoOSOF","mll",nbins,min,max, xlabel, "events",cutOSOF&&cutnJets&&basiccut,data,luminosity);
795    
796     if(logscale) ckin->SetLogy(1);
797     datahistoOSSF->SetMarkerSize(DataMarkerSize);
798     datahistoOSSF->GetXaxis()->SetTitle(xlabel.c_str());
799     datahistoOSSF->GetXaxis()->CenterTitle();
800     datahistoOSSF->GetYaxis()->SetTitle("events");
801     datahistoOSSF->GetYaxis()->CenterTitle();
802     datahistoOSOF->SetMarkerSize(DataMarkerSize);
803     datahistoOSSF->SetMarkerSize(DataMarkerSize);
804     datahistoOSSF->Draw();
805    
806 buchmann 1.73 mcstackOSSF.Draw("histo,same");
807 buchmann 1.1 datahistoOSSF->Draw("same");
808    
809     datahistoOSOF->SetMarkerColor(TColor::GetColor("#FE642E"));
810     datahistoOSOF->SetLineColor(kRed);
811     datahistoOSOF->SetMarkerStyle(21);
812     datahistoOSOF->Draw("same");
813    
814     // Try to re-arrange legend...
815     TLegend *bgleg = allsamples.allbglegend("",datahistoOSSF);
816     TLegend *kinleg = make_legend();
817     kinleg->AddEntry(datahistoOSSF,"SF (data)","p");
818     kinleg->AddEntry(datahistoOSOF,"OF (data)","p");
819     TIter next(bgleg->GetListOfPrimitives());
820     TObject* obj;
821     // Copy the nice bkgd legend skipping the "data"
822 buchmann 1.16 while ( (obj = next()) )
823 buchmann 1.1 if ( strcmp(((TLegendEntry*)obj)->GetObject()->GetName(),"datahistoOSSF") )
824     kinleg->GetListOfPrimitives()->Add(obj);
825    
826     kinleg->Draw();
827     CompleteSave(ckin,"kin/mll_ossf_osof_distribution");
828    
829     delete datahistoOSOF;
830     delete datahistoOSSF;
831     delete ckin;
832 buchmann 1.85 CleanLegends();
833 buchmann 1.1 }
834    
835    
836     void draw_ratio_plot(TH1* hdata, THStack& hmc, float ymin=0.5, float ymax=1.5) {
837    
838     // Make a histogram from stack
839     TIter next(hmc.GetHists());
840     TObject* obj;
841     TH1* hratio = NULL;
842 buchmann 1.16 while ( (obj = next()) ) {
843 buchmann 1.1 if ( !hratio ) {
844     hratio = (TH1*)obj->Clone();
845     hratio->SetName("hratio");
846     } else hratio->Add( (TH1*)obj );
847     }
848     hratio->Divide(hdata);
849     hratio->SetMaximum(ymax);
850     hratio->SetMinimum(ymin);
851     hratio->SetMarkerStyle(2);
852     hratio->SetLineWidth(1);
853     hratio->GetYaxis()->SetLabelSize(0.08);
854     hratio->GetXaxis()->SetLabelSize(0.0);
855    
856     TPad* rpad = new TPad("rpad","",0.15,0.73,0.4,0.88);
857     rpad->SetTopMargin(0.0);
858     rpad->SetBottomMargin(0.0);
859     rpad->SetRightMargin(0.0);
860     rpad->Draw();
861     rpad->cd();
862     // hratio->GetXaxis()->SetNdivisions(0);
863     hratio->GetYaxis()->SetNdivisions(502,false);
864     hratio->Draw("e1x0");
865    
866     TF1* oneline = new TF1("","1.0",0,1000);
867     oneline->SetLineColor(kBlue);
868     oneline->SetLineStyle(1);
869     oneline->SetLineWidth(1);
870     oneline->Draw("same");
871     }
872 fronga 1.55
873 buchmann 1.51 float make_one_OFSF_plot(string variable, string addcut, string legendTitle, int nbins, float min, float max, float ymax, bool logscale,
874 fronga 1.58 string xlabel, string filename, float legendPosition=0.55) {
875 pablom 1.46
876     TCut ibasiccut=basiccut;
877     bool draw_separation_lines=false;
878    
879     if(addcut != "") ibasiccut = ibasiccut && addcut.c_str();
880    
881     TCut cutSF;
882     TCut cutOF;
883    
884 buchmann 1.91 cout << "Going to use cutOSSF " << (const char*) cutOSSF << " and cutnJets " << (const char*) cutnJets << " and ibasiccut " << (const char*) ibasiccut << endl;
885 buchmann 1.51 cutOF = cutOSOF&&cutnJets&&ibasiccut;
886     cutSF = cutOSSF&&cutnJets&&ibasiccut;
887 buchmann 1.81
888     TCanvas *ofsf_can = new TCanvas("ofsf_can","ofsf_can");
889 pablom 1.46
890 fronga 1.54 TPad* rcan = new TPad("rcan","rcan",0,0,1,1);
891     rcan->SetLogy(logscale);
892     rcan->cd();
893    
894 fronga 1.58 std::cout << "OF/SF comparison: variable = " << variable << ", cut = " << cutSF.GetTitle() << std::endl;
895 pablom 1.46 TH1F *datahistoSF = allsamples.Draw("datahistoSF",variable,nbins,min,max, xlabel, "events",cutSF,data,luminosity);
896     TH1F *datahistoOF = allsamples.Draw("datahistoOF",variable,nbins,min,max, xlabel, "events",cutOF,data,luminosity);
897 fronga 1.58 // string signal("LM3");
898     // TH1F* signalhisto = new TH1F("signalhisto",signal.c_str(),nbins,min,max);
899     // int idx = signalsamples.FindSample(signal)[0];
900     // (signalsamples.collection)[idx].events->Project("signalhisto",variable.c_str(),cutSF);
901     // signalhisto->Scale((signalsamples.collection)[idx].weight*luminosity);
902     // signalhisto->SetLineColor((signalsamples.collection)[idx].samplecolor);
903     // signalhisto->SetLineStyle(2);
904 pablom 1.46 datahistoSF->SetMarkerSize(DataMarkerSize);
905     datahistoOF->SetLineColor(kRed);
906    
907     if ( !logscale ) {
908     datahistoSF->SetMinimum(0); // Defaults
909     } else {
910     datahistoSF->SetMinimum(0.5);
911     }
912 buchmann 1.51 if (ymax<0) {
913     if ( logscale ) datahistoSF->SetMaximum(5.3*datahistoSF->GetMaximum());
914 buchmann 1.81 else datahistoSF->SetMaximum(0.8*datahistoSF->GetMaximum());
915 pablom 1.46 } else {
916 buchmann 1.51 datahistoSF->SetMaximum(ymax);
917 pablom 1.46 }
918    
919 buchmann 1.51 float ymaxSet = datahistoSF->GetMaximum();
920    
921 pablom 1.46 datahistoSF->GetXaxis()->SetTitle(xlabel.c_str());
922 buchmann 1.51 datahistoSF->GetYaxis()->SetTitle("Events");
923 pablom 1.46 datahistoSF->GetXaxis()->CenterTitle();
924     datahistoSF->GetYaxis()->CenterTitle();
925    
926 buchmann 1.51 TLegend *mleg = make_legend(legendTitle.c_str(),legendPosition,0.7,false,legendPosition+0.2);
927     mleg->AddEntry(datahistoSF, "Same-flavor", "PL");
928     if (datahistoOF->Integral()>0) {
929     mleg->AddEntry(datahistoOF, "Opposite-flavor", "L");
930     } else {
931     mleg->AddEntry((TObject*)0, "", "");
932     }
933 fronga 1.58 //mleg->AddEntry(signalhisto, "LM3", "L");
934 pablom 1.46
935     datahistoSF->Draw("E1");
936 buchmann 1.51 if (datahistoOF->Integral()>0) datahistoOF->Draw("HIST,SAMES");
937 fronga 1.58 //signalhisto->Draw("HIST,SAMES");
938 pablom 1.46 mleg->Draw();
939     DrawPrelim();
940 fronga 1.58 if (datahistoOF->Integral()>0) {
941 buchmann 1.79 Save_With_Ratio( datahistoSF, datahistoOF, rcan, "SFOF/" + filename, false, false, "SF/OF" );
942 fronga 1.58 } else {
943     CompleteSave(rcan, "SFOF/" + filename);
944     }
945 pablom 1.46
946     datahistoSF->Delete();
947     datahistoOF->Delete();
948 fronga 1.58 //signalhisto->Delete();
949 pablom 1.46 delete mleg;
950 buchmann 1.79 delete rcan;
951 buchmann 1.81 delete ofsf_can;
952 pablom 1.46
953 buchmann 1.51 return ymaxSet;
954    
955 pablom 1.46 }
956    
957 fronga 1.55 // Compare data to data
958     float make_data_comparison_plot(string variable, TCut cut, int nbins, float min, float max, float ymax, bool logscale,
959     string xlabel, string filename, float legendPosition=0.55) {
960    
961     TCut ibasiccut=basiccut&&cut;
962    
963     TCanvas *ckin = new TCanvas("ckin","Kinematic Plots (in the making)",600,600);
964     TPad* rcan = new TPad("rcan","rcan",0,0,1,1);
965     rcan->SetLogy(logscale);
966     rcan->cd();
967    
968     std::cout << "Data comparison: variable = " << variable << ", cut = " << ibasiccut.GetTitle() << std::endl;
969    
970     TH1F *data1 = allsamples.Draw("data1",variable,nbins,min,max, xlabel, "events",ibasiccut,data,luminosity);
971     TH1F *data2 = comparesamples.Draw("data2",variable,nbins,min,max, xlabel, "events",ibasiccut,data,luminosity);
972 buchmann 1.71 data1->Scale(5.0/9.2);
973 fronga 1.55
974     data1->SetMarkerSize(DataMarkerSize);
975     data2->SetLineColor(kRed);
976    
977     if ( !logscale ) {
978     data1->SetMinimum(0); // Defaults
979     } else {
980     data1->SetMinimum(0.5);
981     }
982     if (ymax<0) {
983     if ( logscale ) data1->SetMaximum(5.3*data1->GetMaximum());
984     else data1->SetMaximum(1.5*data1->GetMaximum());
985     } else {
986     data1->SetMaximum(ymax);
987     }
988    
989     float ymaxSet = data1->GetMaximum();
990    
991     data1->GetXaxis()->SetTitle(xlabel.c_str());
992     data1->GetYaxis()->SetTitle("Events");
993     data1->GetXaxis()->CenterTitle();
994     data1->GetYaxis()->CenterTitle();
995    
996     TLegend *mleg = make_legend("",legendPosition,0.7,false,legendPosition+0.2);
997 buchmann 1.71 mleg->AddEntry(data1, "2012 data (scaled)", "PL");
998     mleg->AddEntry(data2, "2011 data", "L");
999 fronga 1.55
1000     data1->Draw("E1");
1001     data2->Draw("HIST,SAMES");
1002     mleg->Draw();
1003     DrawPrelim();
1004 buchmann 1.79 Save_With_Ratio( data1, data2, rcan, "compareData/" + filename, false, false, "new/old" );
1005 fronga 1.55
1006     data1->Delete();
1007     data2->Delete();
1008     delete mleg;
1009 buchmann 1.79 delete rcan;
1010 fronga 1.55 delete ckin;
1011    
1012     }
1013    
1014     void make_OFSF_plots(string variable, string addcut, int nbins, float min, float max, bool logscale,
1015     string xlabel, string filename, float legendPosition=0.55) {
1016 buchmann 1.51
1017 buchmann 1.68 string mllcuts[] = { "mll>20","mll>15&&mll<70", "mll>75&&mll<105", "mll>120" };
1018     string mllcutname[] = { "m_{ll} > 20 GeV", "20 < m_{ll} < 70 GeV", "70 < m_{ll} < 110 GeV", "m_{ll} > 120 GeV" };
1019 buchmann 1.51 string plotname[] = {"_all","_low","_peak","_high"};
1020     float ymax;
1021 fronga 1.54
1022     int start = 0;
1023     if ( !PlottingSetup::openBox ) start = 3;
1024    
1025     for ( int i=start; i<4; ++i ) {
1026 buchmann 1.51 if ( addcut != "" ) mllcuts[i] += "&&"+addcut;
1027 fronga 1.54 if ( i==start ) {
1028 fronga 1.58 ymax = make_one_OFSF_plot(variable, mllcuts[i], mllcutname[i], nbins, min, max, -1, logscale, xlabel,
1029 fronga 1.55 filename+plotname[i], legendPosition );
1030 buchmann 1.51 } else {
1031 fronga 1.58 make_one_OFSF_plot(variable, mllcuts[i], mllcutname[i], nbins, min, max, ymax, logscale, xlabel,
1032 fronga 1.55 filename+plotname[i], legendPosition );
1033 buchmann 1.51 }
1034     make_one_OFSF_plot(variable, "id1==1&&id1==id2&&"+mllcuts[i], mllcutname[i], nbins, min, max, ymax, logscale, xlabel,
1035 fronga 1.55 filename+plotname[i]+"_mm", legendPosition );
1036 buchmann 1.51 make_one_OFSF_plot(variable, "id1==0&&id1==id2&&"+mllcuts[i], mllcutname[i], nbins, min, max, ymax, logscale, xlabel,
1037 fronga 1.55 filename+plotname[i]+"_ee", legendPosition );
1038 buchmann 1.51 }
1039    
1040     }
1041 pablom 1.46
1042 buchmann 1.76 TCut ReplaceInCut(TCut cut, string replacethis, string withthis) {
1043     string scut=(string)(const char*)cut;
1044     string acut=ReplaceAll(scut,replacethis,withthis);
1045     return TCut(acut.c_str());
1046     }
1047    
1048 buchmann 1.77 void DoMCSystPlot(string datavariable, string mcvariable, int nbins, float min, float max, TCut addcut, bool dolog, string xlabel, string filename) {
1049 buchmann 1.76 TCut cut=addcut&&basiccut;
1050    
1051     TCanvas *ckin = new TCanvas("ckin","Kinematic Plots (in the making)",600,600);
1052     ckin->SetLogy(dolog);
1053     cout << "\r Creating " << filename << " : data (1/6)" << std::flush;
1054 buchmann 1.77 TH1F *datahisto = allsamples.Draw("datahisto",datavariable,nbins,min,max, xlabel, "events",cut,data,luminosity);
1055 buchmann 1.76 datahisto->SetMarkerSize(DataMarkerSize);
1056     if ( !dolog ) datahisto->SetMinimum(0); // Defaults
1057     else datahisto->SetMinimum(0.5);
1058     if (dolog) datahisto->SetMaximum(5.3*datahisto->GetMaximum());
1059     else datahisto->SetMaximum(1.3*datahisto->GetMaximum());
1060     cout << "\r Creating " << filename << " : MC central (2/6)" << std::flush;
1061 buchmann 1.77 THStack mcstack = allsamples.DrawStack("mcstack", mcvariable,nbins,min,max,xlabel,"events",cut,mc,luminosity);
1062 buchmann 1.76 TH1F *MCcentral = CollapseStack(mcstack);
1063    
1064     TCut bkpcut = cut;
1065     cut = ReplaceInCut(cut,"pfJetGoodNum40","pfJetGoodNum40p1sigma");
1066     cout << "\r Creating " << filename << " : MC JES up (3/6)" << std::flush;
1067 buchmann 1.77 TH1F *MCJESup = allsamples.Draw("MCJESup", mcvariable,nbins,min,max,xlabel,"events",cut,mc,luminosity);
1068 buchmann 1.76
1069     cut = ReplaceInCut(cut,"pfJetGoodNum40p1sigma","pfJetGoodNum40n1sigma");
1070     cout << "\r Creating " << filename << " : MC JES down (4/6)" << std::flush;
1071 buchmann 1.77 TH1F *MCJESdn = allsamples.Draw("MCJESdn", mcvariable,nbins,min,max,xlabel,"events",cut,mc,luminosity);
1072 buchmann 1.76
1073     cut=bkpcut;
1074     TCut bkpweight = cutWeight;
1075     cutWeight= ReplaceInCut(cutWeight,"weight","PUweightUP");
1076     cout << "\r Creating " << filename << " : MC PU up (5/6)" << std::flush;
1077 buchmann 1.77 TH1F *MCPUup = allsamples.Draw("MCPUup", mcvariable,nbins,min,max,xlabel,"events",cut,mc,luminosity);
1078 buchmann 1.76
1079     cutWeight= ReplaceInCut(cutWeight,"PUweightUP","PUweightDOWN");
1080     cout << "\r Creating " << filename << " : MC PU down (6/6)" << std::flush;
1081 buchmann 1.77 TH1F *MCPUdn = allsamples.Draw("MCPUdn", mcvariable,nbins,min,max,xlabel,"events",cut,mc,luminosity);
1082 buchmann 1.76 cutWeight=bkpweight;
1083     cout << "\r Creating " << filename << " : Processing systematics ..." << std::flush;
1084     TH1F *Systematic = (TH1F*)MCPUdn->Clone("Systematic");
1085     for(int i=1;i<=Systematic->GetNbinsX();i++) {
1086     float jesdn = abs(MCcentral->GetBinContent(i)-MCJESdn->GetBinContent(i));
1087     float jesup = abs(MCcentral->GetBinContent(i)-MCJESup->GetBinContent(i));
1088     float jes = jesdn>jesup?jesdn:jesup;
1089    
1090     float PUup = abs(MCcentral->GetBinContent(i)-MCPUup->GetBinContent(i));
1091     float PUdn = abs(MCcentral->GetBinContent(i)-MCPUdn->GetBinContent(i));
1092     float pu = PUdn>PUup?PUdn:PUup;
1093    
1094     float sys=sqrt(jes*jes+pu*pu);
1095     sys/=MCcentral->GetBinContent(i);
1096     if(MCcentral->GetBinContent(i)==0) sys=0;
1097     Systematic->SetBinContent(i,sys);
1098     }
1099    
1100     datahisto->Draw("e1");
1101     ckin->Update();
1102     mcstack.Draw("histo,same");
1103    
1104     datahisto->Draw("same,e1");
1105     TLegend *kinleg = allsamples.allbglegend();
1106     kinleg->Draw();
1107    
1108     TPad *kinpad = new TPad("kinpad","kinpad",0,0,1,1);
1109 buchmann 1.77 kinpad->SetLogy(dolog);
1110 buchmann 1.76 kinpad->cd();
1111     datahisto->Draw("e1");
1112     mcstack.Draw("histo,same");
1113     datahisto->Draw("same,e1");
1114     datahisto->Draw("same,axis");
1115    
1116     kinleg->Draw("same");
1117     DrawPrelim();
1118     string saveas="kin/"+filename;
1119    
1120     cout << "Passing filename to be saved : " << filename << " as " << saveas << endl;
1121 buchmann 1.90 save_with_ratio_and_sys_band(0.0, datahisto, CollapseStack(mcstack), kinpad->cd(), saveas, false, false, "data/mc",Systematic );
1122 buchmann 1.76
1123     ckin->cd();
1124     MCcentral->SetFillColor(kWhite);
1125     MCcentral->SetLineColor(kBlack);
1126 buchmann 1.77 MCcentral->SetLineWidth(2);
1127 buchmann 1.76 MCPUdn->SetLineColor(kRed);
1128     MCPUup->SetLineColor(kYellow);
1129     MCJESdn->SetLineColor(kBlue);
1130     MCJESup->SetLineColor(kGreen);
1131    
1132 buchmann 1.77 TLegend *legsmall = new TLegend(0.0,0.85,1.0,1.00);
1133     legsmall->SetNColumns(5);
1134 buchmann 1.76 legsmall->AddEntry(MCcentral,"central","L");
1135     legsmall->AddEntry(MCPUdn,"PU down","L");
1136     legsmall->AddEntry(MCPUup,"PU up","L");
1137     legsmall->AddEntry(MCJESdn,"JES down","L");
1138     legsmall->AddEntry(MCJESup,"JES up","L");
1139 buchmann 1.77 legsmall->SetFillColor(kWhite);
1140     legsmall->SetBorderSize(0);
1141 buchmann 1.76
1142 buchmann 1.77 datahisto->Draw("e1");
1143     MCcentral->Draw("histo,same");
1144 buchmann 1.76 MCPUdn->Draw("histo,same");
1145     MCPUup->Draw("histo,same");
1146     MCJESdn->Draw("histo,same");
1147     MCJESup->Draw("histo,same");
1148     datahisto->Draw("e1,same");
1149     legsmall->Draw();
1150 buchmann 1.77 CompleteSave(ckin,saveas+"___AllLines");
1151 buchmann 1.76
1152 buchmann 1.77 delete datahisto;
1153     delete MCcentral;
1154     delete MCPUdn;
1155     delete MCPUup;
1156     delete MCJESdn;
1157     delete MCJESup;
1158 buchmann 1.76 delete ckin;
1159     }
1160    
1161 buchmann 1.77 void DoMCSystPlot(string variable, int nbins, float min, float max, TCut addcut, bool dolog, string xlabel, string filename) {
1162     DoMCSystPlot(variable, variable, nbins, min, max, addcut, dolog, xlabel, filename);
1163     }
1164    
1165 buchmann 1.1 float lastrange_min=0;
1166     float lastrange_max=0;
1167    
1168     void make_kin_plot(string variable, string addcut, int nbins, float min, float max, bool logscale,
1169     string xlabel, string filename, bool isPF=true, bool plotratio=true, bool loadlastminmax=false ) {
1170     // TCut basiccut("(pfJetGoodNum>=2&&pfJetGoodID[0])&&(pfJetGoodNum>=2&&pfJetGoodID[1])&&(passed_triggers||!is_data)");
1171     TCut ibasiccut=basiccut;
1172     bool draw_separation_lines=false;
1173 buchmann 1.67 bool drawsignal = false;
1174 buchmann 1.1
1175     if(isPF) ibasiccut=basiccut&&"pfjzb[0]>-998";
1176    
1177     if(addcut != "") ibasiccut = ibasiccut && addcut.c_str();
1178    
1179     //Step 1: Adapt the variable (if we're dealing with PF we need to adapt the variable!)
1180     if(isPF) {
1181     if(variable=="mll") variable="pfmll[0]";
1182     if(variable=="jetpt[0]") variable="pfJetGoodPt[0]";
1183     if(variable=="jeteta[0]") variable="pfJetGoodEta[0]";
1184     if(variable=="pt") variable="pfpt[0]";
1185     if(variable=="pt1") variable="pfpt1[0]";
1186     if(variable=="pt2") variable="pfpt2[0]";
1187     if(variable=="eta1") variable="pfeta1[0]";
1188     if(variable=="jzb[1]") variable="pfjzb[0]";
1189     //if(variable=="pfJetGoodNum") variable="pfJetGoodNum"; // pointless.
1190     }
1191    
1192     //Step 2: Refine the cut
1193     TCut cut;
1194     cut=cutmass&&cutOSSF&&cutnJets&&ibasiccut;
1195 buchmann 1.66 if(filename=="nJets" || filename=="nJets_inclusive" || filename=="nJets_met100" || filename=="nJets_inclusive_met100") cut=cutmass&&cutOSSF&&ibasiccut;
1196     if(filename=="nJets_osof" || filename=="nJets_osof_inclusive" || filename=="nJets_osof_met100" || filename=="nJets_osof_inclusive_met100") cut=cutmass&&cutOSOF&&ibasiccut;
1197 buchmann 1.1 if(filename=="nJets_nocuts_except_mll_ossf") cut=cutmass&&cutOSSF;
1198 buchmann 1.66 if(filename=="mll"||filename=="mll_met100") {
1199 buchmann 1.1 cut=cutOSSF&&cutnJets&&ibasiccut;
1200     draw_separation_lines=true;
1201     }
1202 buchmann 1.66 if(filename=="mll_ee"||filename=="mll_ee_met100") cut=cutOSSF&&cutnJets&&ibasiccut&&"id1==0";
1203     if(filename=="mll_mm"||filename=="mll_mm_met100") cut=cutOSSF&&cutnJets&&ibasiccut&&"id1==1";
1204     if(filename=="mll_osof"||filename=="mll_osof_met100") {
1205 buchmann 1.1 cut=cutOSOF&&cutnJets&&ibasiccut;
1206     draw_separation_lines=true;
1207     }
1208 buchmann 1.34 if(Contains(filename,"aboveJZB")) cut=cutOSSF&&cutnJets&&ibasiccut;
1209     if(Contains(filename,"mll_ee_above")) cut=cut&&"id1==0";
1210     if(Contains(filename,"mll_mm_above")) cut=cut&&"id1==1";
1211 buchmann 1.11 if(Contains(filename,"mll_osof_aboveJZB")) cut=cutOSOF&&cutnJets&&ibasiccut;
1212 buchmann 1.66 if(filename=="mll_inclusive"||filename=="mll_inclusive_highrange") cut=cutOSSF;
1213     if(filename=="mll_inclusive_osof") cut=cutOSOF;
1214     if(filename=="mll_inclusive_ee") cut=cutOSSF&&"id1==0";
1215     if(filename=="mll_inclusive_mm") cut=cutOSSF&&"id1==1";
1216 buchmann 1.1 if(filename=="pfJetGoodEta_0") cut=cutOSSF&&cutmass&&ibasiccut&&cutnJets;
1217     if(filename=="pfJetGoodPt_0") cut=cutOSSF&&cutmass&&ibasiccut&&cutnJets;
1218 fronga 1.54 if(filename=="numVtx") cut=cutmass&&ibasiccut;
1219 buchmann 1.1
1220     TCanvas *ckin = new TCanvas("ckin","Kinematic Plots (in the making)",600,600);
1221     ckin->SetLogy(logscale);
1222     TH1F *datahisto = allsamples.Draw("datahisto",variable,nbins,min,max, xlabel, "events",cut,data,luminosity);
1223     datahisto->SetMarkerSize(DataMarkerSize);
1224 fronga 1.40 if ( !logscale ) datahisto->SetMinimum(0); // Defaults
1225     else datahisto->SetMinimum(0.5);
1226     // Custom max.
1227     if(variable=="TMath::Abs(pfJetDphiMet[0])") datahisto->SetMaximum(1.5*datahisto->GetMaximum());
1228 buchmann 1.1 if(variable=="pfJetGoodPt[0]") datahisto->SetMaximum(10*datahisto->GetMaximum());
1229     if(variable=="pt") datahisto->SetMaximum(10*datahisto->GetMaximum());
1230 buchmann 1.22 if(filename=="mll_inclusive"||filename=="mll_inclusive_mm"||filename=="mll_inclusive_ee") datahisto->SetMinimum(1);
1231 buchmann 1.1 if(filename=="mll_osof") datahisto->SetMaximum(10*datahisto->GetMaximum());
1232     if(filename=="mll_osof") datahisto->SetMinimum(9);
1233 fronga 1.40 if (logscale) datahisto->SetMaximum(5.3*datahisto->GetMaximum());
1234     else datahisto->SetMaximum(1.3*datahisto->GetMaximum());
1235    
1236 buchmann 1.66 cout << "******** Cut used : " << (const char*) cut << " for plot " << filename << endl;
1237 buchmann 1.1 if(loadlastminmax) {
1238     datahisto->SetMinimum(lastrange_min);
1239     datahisto->SetMaximum(lastrange_max);
1240     if(logscale) {
1241     datahisto->SetMinimum(pow(10,lastrange_min));
1242     datahisto->SetMaximum(pow(10,lastrange_max));
1243     }
1244     }
1245    
1246 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!)
1247     string signal("LM3");
1248     TH1F* signalhisto = new TH1F("signalhisto",signal.c_str(),nbins,min,max);
1249     int idx = signalsamples.FindSample(signal)[0];
1250 buchmann 1.67 if(drawsignal) (signalsamples.collection)[idx].events->Project("signalhisto",variable.c_str(),cut);
1251     if(drawsignal) signalhisto->Scale((signalsamples.collection)[idx].weight*luminosity);
1252     if(drawsignal) signalhisto->SetLineColor(kOrange);
1253 fronga 1.40
1254     THStack mcstack = allsamples.DrawStack("mcstack", variable,nbins,min,max,xlabel,"events",cut,mc,luminosity);
1255     datahisto->Draw("e1");
1256     ckin->Update();
1257 buchmann 1.73 mcstack.Draw("histo,same");
1258 fronga 1.40
1259 buchmann 1.1 datahisto->Draw("same,e1");
1260     TLegend *kinleg = allsamples.allbglegend();
1261     kinleg->Draw();
1262     if(filename=="mll_osof") {
1263     kinleg->SetHeader("Opposite flavor");
1264     kinleg->SetX1(0.58);
1265     }
1266     if(filename=="mll") {
1267     kinleg->SetHeader("Same flavor");
1268     kinleg->SetX1(0.58);
1269     }
1270     TText* write_cut = write_cut_on_canvas(decipher_cut(cut,basicqualitycut));
1271     write_cut->Draw();
1272     TText* write_variable = write_text(0.99,0.01,variable);
1273     write_variable->SetTextAlign(31);
1274     write_variable->SetTextSize(0.02);
1275    
1276     TLine *lowerboundary;
1277     TLine *upperboundary;
1278    
1279     if(RestrictToMassPeak&&draw_separation_lines) {
1280     Color_t linecolor=kBlue;
1281     float linemin=pow(10,ckin->GetUymin());
1282     if(filename=="mll_osof") linemin=pow(10,lastrange_min);
1283     lowerboundary = new TLine(71,linemin,71,datahisto->GetMaximum());
1284     upperboundary = new TLine(111,linemin,111,datahisto->GetMaximum());
1285     lowerboundary->SetLineColor(linecolor);
1286     lowerboundary->SetLineStyle(2);
1287     upperboundary->SetLineColor(linecolor);
1288     upperboundary->SetLineStyle(2);
1289     }
1290    
1291     lastrange_min=ckin->GetUymin();
1292     lastrange_max=ckin->GetUymax();
1293    
1294    
1295     if ( plotratio ) {
1296     TPad *kinpad = new TPad("kinpad","kinpad",0,0,1,1);
1297     kinpad->cd();
1298     kinpad->SetLogy(logscale);
1299     datahisto->Draw("e1");
1300 buchmann 1.73 mcstack.Draw("histo,same");
1301 buchmann 1.67 if(drawsignal) signalhisto->Draw("same");
1302 buchmann 1.1 datahisto->Draw("same,e1");
1303     datahisto->Draw("same,axis");
1304     if(RestrictToMassPeak&&draw_separation_lines) {
1305     lowerboundary->Draw("same");
1306     upperboundary->Draw("same");
1307     }
1308    
1309 buchmann 1.67 if(drawsignal) kinleg->AddEntry("signalhisto",signal.c_str(),"l");
1310 buchmann 1.1 kinleg->Draw();
1311     write_cut->Draw();
1312     DrawPrelim();
1313     string saveas="kin/"+filename;
1314     if(isPF) saveas="kin/"+filename+"__PF";
1315 buchmann 1.79 Save_With_Ratio(datahisto,mcstack,kinpad->cd(),saveas);
1316 buchmann 1.1 // if(isPF) CompleteSave(with_ratio,"kin/"+filename+"__PF_withratio");
1317     // else CompleteSave(with_ratio,"kin/"+filename+"_withratio");
1318     // delete with_ratio;
1319     } else {
1320     if(isPF) CompleteSave(ckin,"kin/"+filename+"__PF");
1321     else CompleteSave(ckin,"kin/"+filename);
1322     }
1323     datahisto->Delete();
1324 buchmann 1.66 delete signalhisto;
1325 buchmann 1.1 delete ckin;
1326     }
1327    
1328 buchmann 1.72
1329     void make_plain_kin_plot(string variable, string addcut, int nbins, float min, float max, bool logscale,
1330     string xlabel, string filename, bool isPF=true, bool plotratio=true, bool loadlastminmax=false ) {
1331     TCut cut=TCut(addcut.c_str())&&basiccut;
1332    
1333     TCanvas *ckin = new TCanvas("ckin","Kinematic Plots (in the making)",600,600);
1334     ckin->SetLogy(logscale);
1335     TH1F *datahisto = allsamples.Draw("datahisto",variable,nbins,min,max, xlabel, "events",cut,data,luminosity);
1336     datahisto->SetMarkerSize(DataMarkerSize);
1337     if ( !logscale ) datahisto->SetMinimum(0); // Defaults
1338     else datahisto->SetMinimum(0.5);
1339     // Custom max.
1340     if (logscale) datahisto->SetMaximum(5.3*datahisto->GetMaximum());
1341     else datahisto->SetMaximum(1.3*datahisto->GetMaximum());
1342    
1343     cout << "******** Cut used : " << (const char*) cut << " for plot " << filename << endl;
1344     if(loadlastminmax) {
1345     datahisto->SetMinimum(lastrange_min);
1346     datahisto->SetMaximum(lastrange_max);
1347     if(logscale) {
1348     datahisto->SetMinimum(pow(10,lastrange_min));
1349     datahisto->SetMaximum(pow(10,lastrange_max));
1350     }
1351     }
1352    
1353     THStack mcstack = allsamples.DrawStack("mcstack", variable,nbins,min,max,xlabel,"events",cut,mc,luminosity);
1354     datahisto->Draw("e1");
1355     ckin->Update();
1356 buchmann 1.73 mcstack.Draw("histo,same");
1357 buchmann 1.72
1358     datahisto->Draw("same,e1");
1359     TLegend *kinleg = allsamples.allbglegend();
1360     kinleg->Draw();
1361    
1362     lastrange_min=ckin->GetUymin();
1363     lastrange_max=ckin->GetUymax();
1364    
1365     if ( plotratio ) {
1366     TPad *kinpad = new TPad("kinpad","kinpad",0,0,1,1);
1367     kinpad->cd();
1368     kinpad->SetLogy(logscale);
1369     datahisto->Draw("e1");
1370 buchmann 1.73 mcstack.Draw("histo,same");
1371 buchmann 1.72 datahisto->Draw("same,e1");
1372     datahisto->Draw("same,axis");
1373    
1374     kinleg->Draw();
1375     DrawPrelim();
1376     string saveas="kin/"+filename;
1377     if(isPF) saveas="kin/"+filename+"__PF";
1378 buchmann 1.79 Save_With_Ratio(datahisto,mcstack,kinpad->cd(),saveas);
1379 buchmann 1.72 } else {
1380     if(isPF) CompleteSave(ckin,"kin/"+filename+"__PF");
1381     else CompleteSave(ckin,"kin/"+filename);
1382     }
1383     datahisto->Delete();
1384     delete ckin;
1385     }
1386    
1387    
1388 fronga 1.40 void make_JES_plot(TCut cut, string name) {
1389 buchmann 1.1
1390     int nbins=10;
1391     float min=-0.5;
1392     float max = 9.5;
1393     bool logscale=true;
1394     string xlabel="nJets";
1395    
1396     TCanvas *ckin = new TCanvas("ckin","Kinematic Plots (in the making)",600,600);
1397     ckin->SetLogy(logscale);
1398 fronga 1.40 TH1F *datahisto = allsamples.Draw("datahisto","pfJetGoodNum40",nbins,min,max, xlabel, "events",cut,data,luminosity);
1399 buchmann 1.1 datahisto->SetMarkerSize(DataMarkerSize);
1400 fronga 1.40 THStack mcstack = allsamples.DrawStack("mcstack","pfJetGoodNum40",nbins,min,max, xlabel, "events",cut,mc,luminosity);
1401     TH1F *JESup = allsamples.Draw("JESup","pfJetGoodNum40p1sigma",nbins,min,max, xlabel, "events",cut,mc,luminosity);
1402     TH1F *JESdn = allsamples.Draw("JESdn","pfJetGoodNum40n1sigma",nbins,min,max, xlabel, "events",cut,mc,luminosity);
1403 buchmann 1.1
1404     datahisto->SetMinimum(1);
1405     datahisto->SetMaximum(5.3*datahisto->GetMaximum()); // in line with kinematic plots style
1406    
1407     float xs[nbins],ys[nbins],exs[nbins],eys[nbins];
1408     for(int i=1;i<JESup->GetNbinsX();i++) {
1409     float up=JESup->GetBinContent(i);
1410     float dn=JESdn->GetBinContent(i);
1411     xs[i]=JESup->GetBinCenter(i);
1412     ys[i]=0.5*(up+dn);
1413     exs[i]=0.5*JESup->GetBinWidth(i);
1414     eys[i]=0.5*TMath::Abs(up-dn);
1415     }
1416    
1417     TGraphAsymmErrors *JESunc = new TGraphAsymmErrors(nbins, xs,ys,exs,exs,eys,eys);
1418     JESunc->SetFillColor(TColor::GetColor("#00ADE1"));
1419     JESunc->SetFillStyle(3002);
1420     datahisto->Draw("e1");
1421 buchmann 1.73 mcstack.Draw("histo,same");
1422 buchmann 1.1 JESunc->Draw("2");
1423     datahisto->Draw("same,e1");
1424     TLegend *kinleg = allsamples.allbglegend();
1425     kinleg->AddEntry(JESunc,"JES uncertainty","f");
1426     kinleg->Draw();
1427 fronga 1.40 CompleteSave(ckin,"Systematics/JES"+name);
1428 buchmann 1.1 datahisto->Delete();
1429     delete ckin;
1430 buchmann 1.85 delete JESunc;
1431     delete JESup;
1432     delete JESdn;
1433     CleanLegends();
1434 buchmann 1.1 }
1435    
1436 buchmann 1.72 string Cut2Str(TCut cut) {
1437     return ((string)(const char*)cut);
1438     }
1439    
1440     void MakeElegantTwoThreeComparisons() {
1441    
1442 buchmann 1.73 TCut signal("met[4]>100&&met[4]<150&&mll>20"&&PlottingSetup::basicqualitycut);
1443 buchmann 1.72 TCut TwoJets("pfJetGoodNum40==2");
1444     TCut ThreeJets("pfJetGoodNum40>=3");
1445    
1446 buchmann 1.73 float min=20;
1447     float max=300;
1448     int nbins=int((max-min)/5.0);
1449     string xlabel="m_{ll} [GeV]";
1450 buchmann 1.72
1451     TCanvas *can2 = new TCanvas("can2","can2");
1452 buchmann 1.93 TH1F *TwoOF = allsamples.Draw("TwoOF","mll",nbins,min,max, xlabel, "events",cutOSOF&&signal&&TwoJets,mc,luminosity,allsamples.FindSample("/TT_"));
1453     TH1F *TwoSF = allsamples.Draw("TwoSF","mll",nbins,min,max, xlabel, "events",cutOSSF&&signal&&TwoJets,mc,luminosity,allsamples.FindSample("/TT_"));
1454     TH1F *ThreeOF = allsamples.Draw("ThreeOF","mll",nbins,min,max, xlabel, "events",cutOSOF&&signal&&ThreeJets,mc,luminosity,allsamples.FindSample("/TT_"));
1455     TH1F *ThreeSF = allsamples.Draw("ThreeSF","mll",nbins,min,max, xlabel, "events",cutOSSF&&signal&&ThreeJets,mc,luminosity,allsamples.FindSample("/TT_"));
1456 buchmann 1.72
1457     can2->cd(1);
1458    
1459     TwoSF->SetFillColor(kWhite);
1460     TwoOF->SetFillColor(kWhite);
1461     ThreeSF->SetFillColor(kWhite);
1462     ThreeOF->SetFillColor(kWhite);
1463    
1464     TPad *kin3 = new TPad("kin3","kin3",0,0,1,1);
1465     kin3->cd();
1466     TwoOF->Draw("histo");
1467     TwoSF->Draw("e1,same");
1468     TLegend *leg_SFOF_Two = make_legend();
1469     leg_SFOF_Two->SetHeader("t#bar{t} MC:");
1470     leg_SFOF_Two->AddEntry(TwoOF,"OF, nJets==2","l");
1471     leg_SFOF_Two->AddEntry(TwoSF,"SF, nJets==2","lp");
1472     leg_SFOF_Two->Draw();
1473 buchmann 1.79 Save_With_Ratio(TwoSF,TwoOF,kin3->cd(),"DoubleRatios/SFOF_Two");
1474 buchmann 1.72
1475     TPad *kin4 = new TPad("kin4","kin4",0,0,1,1);
1476     kin4->cd();
1477     ThreeOF->Draw("histo");
1478     ThreeSF->Draw("e1,same");
1479     TLegend *leg_SFOF_Three = make_legend();
1480     leg_SFOF_Three->SetHeader("t#bar{t} MC:");
1481     leg_SFOF_Three->AddEntry(TwoOF,"OF, nJet#geq3","l");
1482     leg_SFOF_Three->AddEntry(TwoSF,"SF, nJets#geq3","lp");
1483     leg_SFOF_Three->Draw();
1484 buchmann 1.79 Save_With_Ratio(ThreeSF,ThreeOF,kin4->cd(),"DoubleRatios/SFOF_Three");
1485 buchmann 1.72
1486 buchmann 1.73
1487     TwoSF->Scale(ThreeSF->Integral()/TwoSF->Integral());
1488     TPad *kin = new TPad("kin","kin",0,0,1,1);
1489     kin->cd();
1490     TwoSF->Draw("histo");
1491     ThreeSF->Draw("e1,same");
1492     TLegend *leg_SF_Two_Three = make_legend();
1493     leg_SF_Two_Three->SetHeader("t#bar{t} MC:");
1494     leg_SF_Two_Three->AddEntry(TwoSF,"#splitline{SF, nJets==2}{ (scaled)}","l");
1495     leg_SF_Two_Three->AddEntry(ThreeSF,"SF, nJets#geq3","lp");
1496     leg_SF_Two_Three->Draw();
1497 buchmann 1.79 Save_With_Ratio(TwoSF,ThreeSF,kin->cd(),"DoubleRatios/SF_Two_Three");
1498 buchmann 1.73
1499     TwoOF->Scale(ThreeOF->Integral()/TwoOF->Integral());
1500     TPad *kin2 = new TPad("kin2","kin2",0,0,1,1);
1501     kin2->cd();
1502     TwoOF->Draw("histo");
1503     ThreeOF->Draw("e1,same");
1504     TLegend *leg_OF_Two_Three = make_legend();
1505     leg_OF_Two_Three->SetHeader("t#bar{t} MC:");
1506     leg_OF_Two_Three->AddEntry(TwoSF,"#splitline{OF, nJets==2}{ (scaled)}","l");
1507     leg_OF_Two_Three->AddEntry(ThreeSF,"OF, nJets#geq3","lp");
1508     leg_OF_Two_Three->Draw();
1509 buchmann 1.79 Save_With_Ratio(TwoOF,ThreeOF,kin2->cd(),"DoubleRatios/OF_Two_Three");
1510 buchmann 1.73
1511 buchmann 1.72 }
1512    
1513 buchmann 1.78 void PresentRange(TH1F *Down, TH1F *Up, TH1F *central, TVirtualPad *pad, string title) {
1514     pad->cd();
1515     TGraphErrors *gr = new TGraphErrors(Down->GetNbinsX());
1516     for(int i=1;i<=Down->GetNbinsX();i++) {
1517     float average=0.5*(Down->GetBinContent(i)+Up->GetBinContent(i));
1518     float error=abs(Down->GetBinContent(i)-average);
1519     gr->SetPoint(i-1,Down->GetBinCenter(i),average);
1520     gr->SetPointError(i-1,Down->GetBinWidth(i)/2.0,error);
1521     }
1522     gr->SetFillColor(TColor::GetColor("#F79F81"));
1523     gr->GetYaxis()->SetRangeUser(0,2);
1524     gr->GetXaxis()->SetTitle(central->GetXaxis()->GetTitle());
1525     gr->GetYaxis()->SetTitle(central->GetYaxis()->GetTitle());
1526     gr->GetXaxis()->CenterTitle();
1527     gr->GetYaxis()->CenterTitle();
1528    
1529     gr->Draw("A2");
1530     central->Draw("e1,same");
1531     DrawMCPrelim();
1532     TText *rtitle = write_text(0.8,0.8,title);
1533     TLine *line = new TLine(Down->GetBinLowEdge(1),1.0,Down->GetBinLowEdge(Down->GetNbinsX())+Down->GetBinWidth(Down->GetNbinsX()),1.0);
1534     line->SetLineColor(kBlue);
1535     line->SetLineStyle(2);
1536     line->Draw("same");
1537     rtitle->Draw("same");
1538     }
1539    
1540     TH1F* ProduceTTbarRatio(TH1F *datahisto, TH1F *fullmc, TH1F *originalttbar, TH1F *httbar) {
1541     TH1F *basehisto = (TH1F*)fullmc->Clone("basehisto");
1542     basehisto->Add(originalttbar,-1);
1543     basehisto->Add(httbar);
1544    
1545     string sname=httbar->GetName();
1546     sname="R"+sname.substr(1,sname.length());
1547     TH1F *ratio = (TH1F*)datahisto->Clone(sname.c_str());
1548     ratio->Divide(basehisto);
1549     delete basehisto;
1550     return ratio;
1551     }
1552    
1553     void make_ttbar_comparison(string datavariable, string mcvariable, int nbins, float min, float max, TCut addcut, bool dolog, string xlabel, string filename) {
1554    
1555     TCut cut=addcut&&basiccut;
1556    
1557     TCanvas *ckin = new TCanvas("ckin","Kinematic Plots (in the making)",600,600);
1558     ckin->SetLogy(dolog);
1559 buchmann 1.86 cout << "\r Creating " << filename << " : data (1/7)" << std::flush;
1560 buchmann 1.78 TH1F *datahisto = allsamples.Draw("datahisto",datavariable,nbins,min,max, xlabel, "events",cut,data,luminosity);
1561     datahisto->SetMarkerSize(DataMarkerSize);
1562     if ( !dolog ) datahisto->SetMinimum(0); // Defaults
1563     else datahisto->SetMinimum(0.5);
1564     if (dolog) datahisto->SetMaximum(5.3*datahisto->GetMaximum());
1565     else datahisto->SetMaximum(1.3*datahisto->GetMaximum());
1566 buchmann 1.86 cout << "\r Creating " << filename << " : MC central (stack) (2/7)" << std::flush;
1567 buchmann 1.78 THStack mcstack = allsamples.DrawStack("mcstack", mcvariable,nbins,min,max,xlabel,"events",cut,mc,luminosity);
1568     TH1F *MCcentral = CollapseStack(mcstack);
1569    
1570 buchmann 1.86 cout << "\r Creating " << filename << " : MC central (histo) (3/7)" << std::flush;
1571 buchmann 1.93 TH1F *TCentral = allsamples.Draw ("TCentral", mcvariable,nbins,min,max,xlabel,"events",cut,mc,luminosity,allsamples.FindSample("/TT_"));
1572 buchmann 1.78 TH1F *RCentral = ProduceTTbarRatio(datahisto,MCcentral,TCentral,TCentral);
1573    
1574 buchmann 1.86 cout << "\r Creating " << filename << " : MC Matching up (4/7)" << std::flush;
1575 buchmann 1.78 TH1F *TMatchingUp = systsamples.Draw("TMatchingUp", mcvariable,nbins,min,max,xlabel,"events",cut,mc,luminosity,systsamples.FindSample("TTJets_matchingup"));
1576     TH1F *RMatchingUp = ProduceTTbarRatio(datahisto,MCcentral,TCentral,TMatchingUp);
1577    
1578 buchmann 1.86 cout << "\r Creating " << filename << " : MC Matching down (5/7)" << std::flush;
1579 buchmann 1.78 TH1F *TMatchingDown = systsamples.Draw("TMatchingDown",mcvariable,nbins,min,max,xlabel,"events",cut,mc,luminosity,systsamples.FindSample("TTJets_matchingdown"));
1580     TH1F *RMatchingDown = ProduceTTbarRatio(datahisto,MCcentral,TCentral,TMatchingDown);
1581    
1582 buchmann 1.86 cout << "\r Creating " << filename << " : MC Scale up (6/7)" << std::flush;
1583 buchmann 1.78 TH1F *TScaleUp = systsamples.Draw("TScaleUp", mcvariable,nbins,min,max,xlabel,"events",cut,mc,luminosity,systsamples.FindSample("TTJets_scaleup"));
1584     TH1F *RScaleUp = ProduceTTbarRatio(datahisto,MCcentral,TCentral,TScaleUp);
1585    
1586 buchmann 1.86 cout << "\r Creating " << filename << " : MC Scale down (7/7)" << std::flush;
1587 buchmann 1.78 TH1F *TScaleDown = systsamples.Draw("TScaleDown", mcvariable,nbins,min,max,xlabel,"events",cut,mc,luminosity,systsamples.FindSample("TTJets_scaledown"));
1588     TH1F *RScaleDown = ProduceTTbarRatio(datahisto,MCcentral,TCentral,TScaleDown);
1589    
1590     datahisto->Draw("e1");
1591     ckin->Update();
1592     mcstack.Draw("histo,same");
1593    
1594     datahisto->Draw("same,e1");
1595     TLegend *kinleg = allsamples.allbglegend();
1596     kinleg->Draw();
1597    
1598     TPad *kinpad = new TPad("kinpad","kinpad",0,0,1,1);
1599     kinpad->SetLogy(dolog);
1600     kinpad->cd();
1601     datahisto->Draw("e1");
1602     mcstack.Draw("histo,same");
1603     datahisto->Draw("same,e1");
1604     datahisto->Draw("same,axis");
1605    
1606     kinleg->Draw("same");
1607     DrawPrelim();
1608     string saveas="kin/"+filename;
1609    
1610     cout << "Passing filename to be saved : " << filename << " as " << saveas << endl;
1611 buchmann 1.79 Save_With_Ratio( datahisto, CollapseStack(mcstack), kinpad->cd(), saveas, false, false, "data/mc");
1612     delete kinpad;
1613 buchmann 1.78
1614     ckin->cd();
1615     TCentral->SetLineColor(kBlack);
1616    
1617     TMatchingUp->SetLineColor(TColor::GetColor("#2c17b1"));//blue
1618     TMatchingUp->SetLineStyle(2);//dashed
1619     TMatchingDown->SetLineColor(TColor::GetColor("#2c17b1"));
1620     TMatchingDown->SetLineStyle(3);//dotted
1621    
1622     TScaleUp->SetLineColor(TColor::GetColor("#FF8500"));//orange
1623     TScaleUp->SetLineStyle(2);//dashed
1624     TScaleDown->SetLineColor(TColor::GetColor("#FF8500"));
1625     TScaleDown->SetLineStyle(3);//dotted
1626    
1627     MCcentral->SetLineStyle(3);
1628     MCcentral->SetLineColor(kRed);
1629    
1630     TCentral->Draw("e1,same");
1631     TCentral->Draw("histo,same");
1632     TMatchingUp->Draw("histo,same");
1633     TMatchingDown->Draw("histo,same");
1634     TScaleUp->Draw("histo,same");
1635     TScaleDown->Draw("histo,same");
1636    
1637     TLegend *sleg = make_legend();
1638     sleg->AddEntry(TCentral,"Central","L");
1639     sleg->AddEntry(TMatchingUp,"matching up","L");
1640     sleg->AddEntry(TMatchingDown,"matching down","L");
1641     sleg->AddEntry(TScaleUp,"scale up","L");
1642     sleg->AddEntry(TScaleDown,"scale down","L");
1643     sleg->Draw();
1644    
1645     CompleteSave(ckin,saveas+"___AllLines");
1646     ckin->cd();
1647     ckin->SetLogy(0);
1648    
1649     RCentral->SetLineColor(kBlack);
1650    
1651     RMatchingUp->SetLineColor(TColor::GetColor("#2c17b1"));//blue
1652     RMatchingUp->SetLineStyle(2);//dashed
1653     RMatchingDown->SetLineColor(TColor::GetColor("#2c17b1"));
1654     RMatchingDown->SetLineStyle(3);//dotted
1655    
1656     RScaleUp->SetLineColor(TColor::GetColor("#FF8500"));//orange
1657     RScaleUp->SetLineStyle(2);//dashed
1658     RScaleDown->SetLineColor(TColor::GetColor("#FF8500"));
1659     RScaleDown->SetLineStyle(3);//dotted
1660    
1661     RCentral->GetYaxis()->SetRangeUser(0,2);
1662     RCentral->Draw("e1");
1663     RMatchingUp->Draw("histo,same");
1664     RMatchingDown->Draw("histo,same");
1665     RScaleUp->Draw("histo,same");
1666     RScaleDown->Draw("histo,same");
1667    
1668     CompleteSave(ckin,saveas+"___AllRatios");
1669    
1670 buchmann 1.85 TCanvas *multicanvas = new TCanvas("multicanvas","multicanvas",1400,700);
1671     multicanvas->Divide(2,1);
1672 buchmann 1.78 PresentRange(RMatchingUp,RMatchingDown,RCentral,multicanvas->cd(1),"Matching");
1673     PresentRange(RScaleUp,RScaleDown,RCentral,multicanvas->cd(2),"Scale");
1674     CompleteSave(multicanvas,saveas+"___RangeIllustration");
1675    
1676    
1677     delete datahisto;
1678     delete TCentral;
1679     delete TMatchingUp;
1680     delete TMatchingDown;
1681     delete TScaleUp;
1682     delete TScaleDown;
1683 buchmann 1.85 // delete Ttmass166;
1684     // delete Ttmass169;
1685     // delete Ttmass175;
1686     // delete Ttmass178;
1687 buchmann 1.78
1688     delete ckin;
1689    
1690     }
1691    
1692     void make_ttbar_comparison(string variable, int nbins, float min, float max, TCut addcut, bool dolog, string xlabel, string filename) {
1693     make_ttbar_comparison(variable, variable, nbins, min, max, addcut, dolog, xlabel, filename);
1694     }
1695 buchmann 1.72
1696 buchmann 1.79 void ProduceJanPlots() {
1697     TCanvas *c1 = new TCanvas("c1","c1");
1698     TH1F *metSF = allsamples.Draw("metSF","met[4]",30,100,400, "E_{T}^{miss} [GeV]", "events", cutmass&&cutOSSF&&cutnJets,data, luminosity);
1699     TH1F *metOF = allsamples.Draw("metOF","met[4]",30,100,400, "E_{T}^{miss} [GeV]", "events", cutmass&&cutOSOF&&cutnJets,data, luminosity);
1700    
1701     TPad* rcan = new TPad("rcan","rcan",0,0,1,1);
1702     rcan->cd();
1703    
1704     metOF->SetLineColor(kRed);
1705     metSF->Draw("e1");
1706     metOF->Draw("histo,same");
1707     metSF->Draw("e1,same");
1708    
1709     TLegend *leg = make_legend();
1710    
1711     leg->AddEntry(metSF,"Data SF","p");
1712     leg->AddEntry(metOF,"Data OF","l");
1713     leg->Draw();
1714    
1715     DrawPrelim();
1716    
1717     Save_With_Ratio(metSF,metOF,rcan,"JanPlots/ETHConfig",false,false,"SF/OF");
1718    
1719     delete rcan;
1720     delete metSF;
1721     delete metOF;
1722     delete c1;
1723     }
1724    
1725 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) {
1726 buchmann 1.79 THStack SystPlot = allsamples.DrawStack(variation,variable,nbins,bmin,bmax,label,"events",cut,mc,PlottingSetup::luminosity);
1727    
1728     //now need to process the plot (calculate the variation and set the member of thstack accordingly!)
1729     if(variation!="Central") {
1730     TH1F *varttbar;
1731     if(variation=="MatchingUp") varttbar = systsamples.Draw("varttbar",variable,nbins,bmin,bmax,label,"events",cut,mc,PlottingSetup::luminosity,systsamples.FindSample("TTJets_matchingup_TuneZ2s"));
1732     if(variation=="MatchingDown") varttbar = systsamples.Draw("varttbar",variable,nbins,bmin,bmax,label,"events",cut,mc,PlottingSetup::luminosity,systsamples.FindSample("TTJets_matchingdown"));
1733     if(variation=="ScaleUp") varttbar = systsamples.Draw("varttbar",variable,nbins,bmin,bmax,label,"events",cut,mc,PlottingSetup::luminosity,systsamples.FindSample("TTJets_scaleup"));
1734     if(variation=="ScaleDown") varttbar = systsamples.Draw("varttbar",variable,nbins,bmin,bmax,label,"events",cut,mc,PlottingSetup::luminosity,systsamples.FindSample("TTJets_scaledown"));
1735     assert(varttbar);
1736    
1737     TIter nextHisto(SystPlot.GetHists());
1738     TH1F* h;
1739     while ( h = (TH1F*)nextHisto() ) {
1740     if(Contains(h->GetName(),"t_bar_t")) {
1741     varttbar->Scale(h->Integral()/varttbar->Integral());
1742     for(int i=0;i<=h->GetNbinsX()+1;i++) {//note that we deliberatly consider the under/overflow bin as well!
1743     h->SetBinContent(i,varttbar->GetBinContent(i));
1744     h->SetBinError(i,varttbar->GetBinError(i));
1745     }
1746 buchmann 1.81 thisto=(TH1F*)varttbar->Clone(variation.c_str());
1747 buchmann 1.79 SystPlot.Modified();
1748     }
1749     }
1750     delete varttbar;
1751 buchmann 1.81 } else {
1752     TIter nextHisto(SystPlot.GetHists());
1753     TH1F* h;
1754     while ( h = (TH1F*)nextHisto() ) {
1755     if(Contains(h->GetName(),"t_bar_t")) thisto=(TH1F*)h->Clone(variation.c_str());
1756     }
1757 buchmann 1.79 }
1758 buchmann 1.81
1759 buchmann 1.79 TLegend *fullleg = allsamples.allbglegend();
1760     fullleg->SetHeader(variation.c_str());
1761     TPad *kinpad = new TPad("kinpad","kinpad",0,0,1,1);
1762     kinpad->SetLogy(1);
1763     kinpad->cd();
1764    
1765     hdata->Draw("e1");
1766     SystPlot.Draw("histo,same");
1767     hdata->Draw("e1,same");
1768     fullleg->Draw();
1769     DrawPrelim();
1770    
1771     Save_With_Ratio(hdata,SystPlot,kinpad,saveas+"_"+variation);
1772     CleanLegends();
1773    
1774     delete kinpad;
1775     return SystPlot;
1776     }
1777    
1778    
1779    
1780     void ProduceMCSystematicPlot(string variable, int nbins, float bmin, float bmax, string label, TCut thiscut, string saveas) {
1781     TCanvas *ca = new TCanvas("ca","ca");
1782     TH1F *hdata = allsamples.Draw("hdata",variable,nbins,bmin,bmax,label,"events",thiscut,data,luminosity);
1783    
1784 buchmann 1.81 TH1F *tScaleUp,*tScaleDown,*tMatchingUp,*tMatchingDown,*tCentral;
1785    
1786     THStack ScaleUp = MakeOneSystematicsPlot(thiscut,saveas,"ScaleUp",hdata,variable, nbins, bmin, bmax, label,tScaleUp);
1787     THStack ScaleDown = MakeOneSystematicsPlot(thiscut,saveas,"ScaleDown",hdata,variable, nbins, bmin, bmax, label,tScaleDown);
1788     THStack MatchingUp = MakeOneSystematicsPlot(thiscut,saveas,"MatchingUp",hdata,variable, nbins, bmin, bmax, label,tMatchingUp);
1789     THStack MatchingDown = MakeOneSystematicsPlot(thiscut,saveas,"MatchingDown",hdata,variable, nbins, bmin, bmax, label,tMatchingDown);
1790 buchmann 1.79
1791     TH1F *HScaleUp = CollapseStack(ScaleUp);
1792     TH1F *HScaleDown = CollapseStack(ScaleDown);
1793     TH1F *HMatchingUp = CollapseStack(MatchingUp);
1794     TH1F *HMatchingDown = CollapseStack(MatchingDown);
1795    
1796 buchmann 1.81 THStack Central = MakeOneSystematicsPlot(thiscut,saveas,"Central",hdata,variable, nbins, bmin, bmax, label,tCentral);
1797 buchmann 1.79 TH1F *HCentral = CollapseStack(Central);
1798    
1799     TH1F *Systematic = (TH1F*)hdata->Clone("Systematic");
1800     for(int i=1;i<=Systematic->GetNbinsX();i++) {
1801     float matchingup = abs(HMatchingUp->GetBinContent(i)-HCentral->GetBinContent(i));
1802     float matchingdown = abs(HMatchingDown->GetBinContent(i)-HCentral->GetBinContent(i));
1803     float scaleup = abs(HScaleUp->GetBinContent(i)-HCentral->GetBinContent(i));
1804     float scaledown = abs(HScaleDown->GetBinContent(i)-HCentral->GetBinContent(i));
1805    
1806     float matching = matchingup>matchingdown?matchingup:matchingdown;
1807     float scale = scaleup>scaledown?scaleup:scaledown;
1808    
1809     float sys=sqrt(matching*matching+scale*scale);
1810     sys/=HCentral->GetBinContent(i);
1811     if(HCentral->GetBinContent(i)==0) sys=0;
1812     Systematic->SetBinContent(i,sys);
1813     }
1814    
1815     TPad *kinpad = new TPad("kinpad","kinpad",0,0,1,1);
1816     kinpad->SetLogy(1);
1817     kinpad->cd();
1818 buchmann 1.81 if(variable=="genMET") {
1819     Central.Draw("histo");
1820     } else {
1821     hdata->Draw("e1");
1822     Central.Draw("histo,same");
1823     hdata->Draw("e1,same");
1824     }
1825    
1826 buchmann 1.79 DrawPrelim();
1827 buchmann 1.81
1828 buchmann 1.90 save_with_ratio_and_sys_band( 0.0, hdata, HCentral, kinpad->cd(), saveas, false, false, "data/mc",Systematic );
1829 buchmann 1.79
1830 buchmann 1.81 kinpad->cd();
1831     tCentral->SetFillColor(kWhite);
1832     tCentral->SetLineColor(kBlack);
1833     tScaleUp->SetLineColor(kRed);
1834     tScaleDown->SetLineColor(kRed);
1835     tMatchingUp->SetLineColor(kBlue);
1836     tMatchingDown->SetLineColor(kBlue);
1837     tScaleUp->SetLineStyle(2);
1838     tScaleDown->SetLineStyle(3);
1839     tMatchingUp->SetLineStyle(2);
1840     tMatchingDown->SetLineStyle(3);
1841    
1842     TLegend *leg2 = make_legend();
1843     leg2->AddEntry(hdata,"Data","p");
1844     leg2->AddEntry(tCentral,"Central (ttbar)","l");
1845     leg2->AddEntry(tScaleUp,"ScaleUp (ttbar)","l");
1846     leg2->AddEntry(tScaleDown,"ScaleDown (ttbar)","l");
1847     leg2->AddEntry(tMatchingUp,"MatchingUp (ttbar)","l");
1848     leg2->AddEntry(tMatchingDown,"MatchingDown (ttbar)","l");
1849     if(variable=="genMET") {
1850     Central.Draw("histo");
1851     }else {
1852     hdata->Draw("e1");
1853     Central.Draw("histo,same");
1854     hdata->Draw("e1,same");
1855     }
1856     tCentral->Draw("histo,same");
1857     tScaleUp->Draw("histo,same");
1858     tScaleDown->Draw("histo,same");
1859     tMatchingUp->Draw("histo,same");
1860     tMatchingDown->Draw("histo,same");
1861     leg2->Draw();
1862    
1863     CompleteSave(kinpad,saveas+"__TTbarComparison");
1864    
1865     gStyle->SetOptFit(0);
1866    
1867     kinpad->cd();
1868     kinpad->SetLogy(0);
1869     TH1F *MatchingRatio = (TH1F*)tMatchingUp->Clone("MatchingRatio");
1870     MatchingRatio->Divide(tMatchingDown);
1871     TLine *lone = new TLine(tScaleUp->GetBinLowEdge(1),1,tScaleUp->GetBinLowEdge(tScaleUp->GetNbinsX())+tScaleUp->GetBinWidth(tScaleUp->GetNbinsX()),1);
1872     lone->SetLineColor(TColor::GetColor("#01DF01"));
1873     lone->SetLineStyle(2);
1874     TH1F *ScaleRatio = (TH1F*)tScaleUp->Clone("ScaleRatio");
1875     ScaleRatio->Divide(tScaleDown);
1876     MatchingRatio->GetYaxis()->SetRangeUser(0,3);
1877     MatchingRatio->Draw("e1");
1878     TF1 *QP1 = new TF1("QP1","[0]+[1]*x",50,200);//simple linear function ranging from 50 to 200
1879     MatchingRatio->Fit("QP1","R");
1880     lone->Draw();
1881     stringstream summary;
1882     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);
1883     summary << " +/- " << DigitsAfterComma(QP1->GetParError(1),4) << "}}";
1884     TText *infobox = write_title(summary.str());
1885     infobox->SetX(0.75);
1886     infobox->SetTextSize(0.03);
1887     infobox->SetY(0.75);
1888     infobox->Draw();
1889     CompleteSave(kinpad,saveas+"__TTbarComparison_MatchingUpDividedMatchingDown");
1890     kinpad->cd();
1891     ScaleRatio->GetYaxis()->SetRangeUser(0,3);
1892     ScaleRatio->Draw("e1");
1893     ScaleRatio->Fit("QP1","R");
1894     summary.str("");
1895     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);
1896     summary << " +/- " << DigitsAfterComma(QP1->GetParError(1),4) << "}}";
1897     TText *infobox2 = write_title(summary.str());
1898     infobox2->SetX(0.75);
1899     infobox2->SetTextSize(0.03);
1900     infobox2->SetY(0.75);
1901     infobox2->Draw();
1902    
1903     lone->Draw();
1904     CompleteSave(kinpad,saveas+"__TTbarComparison_ScaleUpDividedScaleDown");
1905    
1906    
1907     delete QP1;
1908     delete infobox;
1909     delete infobox2;
1910     delete MatchingRatio;
1911     delete ScaleRatio;
1912     DeleteStack(ScaleUp);
1913     DeleteStack(ScaleDown);
1914     DeleteStack(MatchingUp);
1915     DeleteStack(MatchingDown);
1916     delete leg2;
1917 buchmann 1.79 CleanLegends();
1918     DeleteStack(Central);
1919     delete Systematic;
1920     delete HScaleUp;
1921     delete HScaleDown;
1922     delete HMatchingUp;
1923     delete HMatchingDown;
1924     delete hdata;
1925     delete HCentral;
1926     delete ca;
1927     }
1928    
1929 buchmann 1.86 TH1F* ImposeBinning(TH1F *binninghisto, TH1F* histo) {
1930     float val=0,err=0;
1931     vector<float> bins;
1932     vector<float> vals;
1933     vector<float> errs;
1934    
1935     bins.push_back(binninghisto->GetBinLowEdge(1));
1936     int iBin=1;
1937    
1938     for(unsigned int i=1;i<histo->GetNbinsX();i++) {//going to second last one on purpose!
1939     if((histo->GetBinLowEdge(i)+0.00001>=binninghisto->GetBinLowEdge(iBin)+binninghisto->GetBinWidth(iBin))) {
1940     bins.push_back(histo->GetBinLowEdge(i));
1941     vals.push_back(val);val=0;
1942     errs.push_back(err);err=0;
1943     iBin++;
1944     }
1945     val+=histo->GetBinContent(i);
1946     err=sqrt(err*err+histo->GetBinError(i)*histo->GetBinError(i));
1947     }
1948     bins.push_back(histo->GetBinLowEdge(histo->GetNbinsX())+histo->GetBinWidth(histo->GetNbinsX()));
1949     vals.push_back(val);val=0;
1950     errs.push_back(err);err=0;
1951    
1952     TH1F *h = new TH1F(("r"+(string)histo->GetName()).c_str(),("r"+(string)histo->GetName()).c_str(),bins.size()-1,&bins[0]);
1953     for(unsigned int i=0;i<vals.size();i++) {
1954     h->SetBinContent(i+1,vals[i]);
1955     h->SetBinError(i+1,errs[i]);
1956     }
1957    
1958     h->GetXaxis()->SetTitle(histo->GetXaxis()->GetTitle());
1959     h->GetYaxis()->SetTitle(histo->GetYaxis()->GetTitle());
1960    
1961     h->GetXaxis()->CenterTitle();
1962     h->GetYaxis()->CenterTitle();
1963    
1964     return h;
1965     }
1966    
1967    
1968     TH1F* ReBinOptimizingStats(int nbins, TH1F *histo) {
1969     float statsperbin = (1/(float)nbins) * histo->Integral();
1970     float val=0,err=0;
1971     vector<float> bins;
1972     vector<float> vals;
1973     vector<float> errs;
1974    
1975     bins.push_back(histo->GetBinLowEdge(1));
1976     for(unsigned int i=1;i<=histo->GetNbinsX();i++) {
1977     val+=histo->GetBinContent(i);
1978     err=sqrt(err*err+histo->GetBinError(i)*histo->GetBinError(i));
1979     if( val/statsperbin > 0.85) {
1980     if(bins.size()<nbins) {
1981     bins.push_back(histo->GetBinLowEdge(i)+histo->GetBinWidth(i));
1982     vals.push_back(val);val=0;
1983     errs.push_back(err);err=0;
1984     }
1985     }
1986     if(i==histo->GetNbinsX()) {
1987     bins.push_back(histo->GetBinLowEdge(i)+histo->GetBinWidth(i));
1988     vals.push_back(val);val=0;
1989     errs.push_back(err);err=0;
1990     }
1991     }
1992     TH1F *h = new TH1F(("r"+(string)histo->GetName()).c_str(),("r"+(string)histo->GetName()).c_str(),bins.size()-1,&bins[0]);
1993    
1994     h->GetXaxis()->SetTitle(histo->GetXaxis()->GetTitle());
1995     h->GetYaxis()->SetTitle(histo->GetYaxis()->GetTitle());
1996    
1997     h->GetXaxis()->CenterTitle();
1998     h->GetYaxis()->CenterTitle();
1999    
2000     for(unsigned int i=0;i<vals.size();i++) {
2001     h->SetBinContent(i+1,vals[i]);
2002     h->SetBinError(i+1,errs[i]);
2003     }
2004    
2005     return h;
2006     }
2007    
2008    
2009    
2010     void ShowBinning(TH1F *histo) {
2011     cout << "Showing binning for " << histo->GetName() << " (\" " << histo->GetTitle() << "\")" << endl;
2012     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;
2013     }
2014    
2015 buchmann 1.81 void QuickProduceMCSystematicPlot(string variable, int nbins, float bmin, float bmax, string label, TCut thiscut, string saveas) {
2016     TCanvas *ca = new TCanvas("ca","ca");
2017     TH1F *tScaleUp = systsamples.Draw("tScaleUp",variable,nbins,bmin,bmax,label,"events",thiscut,mc,luminosity,systsamples.FindSample("scaleup"));
2018     TH1F *tScaleDown = systsamples.Draw("tScaleDown",variable,nbins,bmin,bmax,label,"events",thiscut,mc,luminosity,systsamples.FindSample("scaledown"));
2019     TH1F *tMatchingUp = systsamples.Draw("tMatchingUp",variable,nbins,bmin,bmax,label,"events",thiscut,mc,luminosity,systsamples.FindSample("matchingup"));
2020     TH1F *tMatchingDown = systsamples.Draw("tMatchingDown",variable,nbins,bmin,bmax,label,"events",thiscut,mc,luminosity,systsamples.FindSample("matchingdown"));
2021     TH1F *tCentral = systsamples.Draw("tCentral",variable,nbins,bmin,bmax,label,"events",thiscut,mc,luminosity,systsamples.FindSample("TTJets_MassiveBinDECAY_TuneZ2sta"));
2022    
2023     tScaleUp->Scale(1.0/tScaleUp->Integral());
2024     tScaleDown->Scale(1.0/tScaleDown->Integral());
2025     tMatchingDown->Scale(1.0/tMatchingDown->Integral());
2026     tMatchingUp->Scale(1.0/tMatchingUp->Integral());
2027 buchmann 1.86 tCentral->Scale(1.0/tCentral->Integral());
2028    
2029     cout << "At this point we want to rebin the scale/matching histograms so we get decent stats!" << endl;
2030    
2031    
2032     TH1F *rtScaleUp = ReBinOptimizingStats(7,tScaleUp); // using the scale up sample to get the binning (shouldn't use the central one for obvious reasons)
2033     TH1F *rtScaleDown = ImposeBinning(rtScaleUp,tScaleDown);
2034     TH1F *rtMatchingDown = ImposeBinning(rtScaleUp,tMatchingDown);
2035     TH1F *rtMatchingUp = ImposeBinning(rtScaleUp,tMatchingUp);
2036     TH1F *rtCentral = ImposeBinning(rtScaleUp,tCentral);
2037    
2038     float min=rtScaleUp->GetMinimum();
2039     float max=rtScaleUp->GetMaximum();
2040    
2041     if(rtScaleDown->GetMinimum()<min) min=rtScaleDown->GetMinimum();
2042     if(rtMatchingDown->GetMinimum()<min) min=rtMatchingDown->GetMinimum();
2043     if(rtMatchingDown->GetMinimum()<min) min=rtMatchingDown->GetMinimum();
2044     if(rtMatchingUp->GetMinimum()<min) min=rtMatchingUp->GetMinimum();
2045     if(rtCentral->GetMinimum()<min) min=rtCentral->GetMinimum();
2046    
2047     if(rtScaleDown->GetMaximum()<min) max=rtScaleDown->GetMaximum();
2048     if(rtMatchingDown->GetMaximum()<min) max=rtMatchingDown->GetMaximum();
2049     if(rtMatchingDown->GetMaximum()<min) max=rtMatchingDown->GetMaximum();
2050     if(rtMatchingUp->GetMaximum()<min) max=rtMatchingUp->GetMaximum();
2051     if(rtCentral->GetMaximum()<min) max=rtCentral->GetMaximum();
2052    
2053     rtCentral->SetMaximum(1.2*max);
2054     rtCentral->SetMinimum(0.8*min);
2055    
2056     /* tScaleUp->Rebin(40);
2057     tScaleDown->Rebin(40);
2058     tMatchingDown->Rebin(40);
2059     tMatchingUp->Rebin(40);
2060     tCentral->Rebin(40);*/
2061 buchmann 1.81
2062     TPad *kinpad = new TPad("kinpad","kinpad",0,0,1,1);
2063     kinpad->SetLogy(1);
2064     kinpad->cd();
2065     tCentral->SetFillColor(kWhite);
2066     tCentral->SetLineColor(kBlack);
2067     tScaleUp->SetLineColor(kRed);
2068     tScaleDown->SetLineColor(kRed);
2069     tMatchingUp->SetLineColor(kBlue);
2070     tMatchingDown->SetLineColor(kBlue);
2071     tScaleUp->SetLineStyle(2);
2072     tScaleDown->SetLineStyle(3);
2073     tMatchingUp->SetLineStyle(2);
2074     tMatchingDown->SetLineStyle(3);
2075    
2076 buchmann 1.86 rtScaleDown->SetLineColor(kRed);
2077     rtMatchingUp->SetLineColor(kBlue);
2078     rtMatchingDown->SetLineColor(kBlue);
2079     rtScaleUp->SetLineStyle(2);
2080     rtScaleDown->SetLineStyle(3);
2081     rtMatchingUp->SetLineStyle(2);
2082     rtMatchingDown->SetLineStyle(3);
2083    
2084 buchmann 1.81 TLegend *leg2 = make_legend();
2085     leg2->AddEntry(tCentral,"Central (ttbar)","l");
2086     leg2->AddEntry(tScaleUp,"ScaleUp (ttbar)","l");
2087     leg2->AddEntry(tScaleDown,"ScaleDown (ttbar)","l");
2088     leg2->AddEntry(tMatchingUp,"MatchingUp (ttbar)","l");
2089     leg2->AddEntry(tMatchingDown,"MatchingDown (ttbar)","l");
2090    
2091     tCentral->Draw("histo");
2092     tScaleUp->Draw("histo,same");
2093     tScaleDown->Draw("histo,same");
2094     tMatchingUp->Draw("histo,same");
2095     tMatchingDown->Draw("histo,same");
2096     leg2->Draw();
2097 buchmann 1.86 DrawMCPrelim();
2098     CompleteSave(kinpad,saveas+"__TTbarComparison");
2099     kinpad->cd();
2100     kinpad->SetLogy(0);
2101     rtCentral->Draw("histo");
2102     rtScaleUp->Draw("histo,same");
2103     rtScaleDown->Draw("histo,same");
2104     rtMatchingUp->Draw("histo,same");
2105     rtMatchingDown->Draw("histo,same");
2106     leg2->Draw();
2107     DrawMCPrelim();
2108     CompleteSave(kinpad,saveas+"__TTbarComparison__REBINNED");
2109 buchmann 1.81
2110    
2111     gStyle->SetOptFit(0);
2112 buchmann 1.86
2113 buchmann 1.81 kinpad->cd();
2114     kinpad->SetLogy(0);
2115 buchmann 1.86 TH1F *MatchingRatio = (TH1F*)rtMatchingUp->Clone("MatchingRatio");
2116     MatchingRatio->Divide(rtMatchingDown);
2117 buchmann 1.81 TLine *lone = new TLine(tScaleUp->GetBinLowEdge(1),1,tScaleUp->GetBinLowEdge(tScaleUp->GetNbinsX())+tScaleUp->GetBinWidth(tScaleUp->GetNbinsX()),1);
2118     lone->SetLineColor(TColor::GetColor("#01DF01"));
2119     lone->SetLineStyle(2);
2120 buchmann 1.86 TH1F *ScaleRatio = (TH1F*)rtScaleUp->Clone("ScaleRatio");
2121     ScaleRatio->Divide(rtScaleDown);
2122 buchmann 1.81 MatchingRatio->GetYaxis()->SetRangeUser(0,3);
2123     MatchingRatio->Draw("e1");
2124     TF1 *QP1 = new TF1("QP1","[0]+[1]*x",50,200);//simple linear function ranging from 50 to 200
2125 buchmann 1.86 if(variable=="genMET" || variable=="met[4]" || variable=="met[1]") MatchingRatio->Fit("QP1","RQ");
2126 buchmann 1.81 lone->Draw();
2127     stringstream summary;
2128     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);
2129     summary << " +/- " << DigitsAfterComma(QP1->GetParError(1),4) << "}}";
2130     TText *infobox = write_title(summary.str());
2131     infobox->SetX(0.75);
2132     infobox->SetTextSize(0.03);
2133     infobox->SetY(0.75);
2134 buchmann 1.86 if(variable=="genMET" || variable=="met[4]" || variable=="met[1]") infobox->Draw();
2135     DrawMCPrelim();
2136 buchmann 1.81 CompleteSave(kinpad,saveas+"__TTbarComparison_MatchingUpDividedMatchingDown");
2137     kinpad->cd();
2138     ScaleRatio->GetYaxis()->SetRangeUser(0,3);
2139     ScaleRatio->Draw("e1");
2140 buchmann 1.86 if(variable=="genMET" || variable=="met[4]" || variable=="met[1]") ScaleRatio->Fit("QP1","RQ");
2141 buchmann 1.81 summary.str("");
2142     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);
2143     summary << " +/- " << DigitsAfterComma(QP1->GetParError(1),4) << "}}";
2144     TText *infobox2 = write_title(summary.str());
2145     infobox2->SetX(0.75);
2146     infobox2->SetTextSize(0.03);
2147     infobox2->SetY(0.75);
2148 buchmann 1.86 if(variable=="genMET" || variable=="met[4]" || variable=="met[1]") infobox2->Draw();
2149 buchmann 1.81
2150     lone->Draw();
2151 buchmann 1.86 DrawMCPrelim();
2152 buchmann 1.81 CompleteSave(kinpad,saveas+"__TTbarComparison_ScaleUpDividedScaleDown");
2153    
2154 buchmann 1.86 kinpad->cd();
2155     TH1F *SysMatching = (TH1F*)rtMatchingDown->Clone("SysMatching");
2156     TH1F *SysScale = (TH1F*)rtScaleDown->Clone("SysMatching");
2157     TH1F *SysHisto = (TH1F*)rtScaleDown->Clone("SysHisto");
2158    
2159     for(int i=1;i<=SysScale->GetNbinsX();i++) {
2160     float matching, scale;
2161     bool AssumeFactor=false;
2162     if(AssumeFactor) {
2163     // assume that an upward/downward variation means a change by a constant factor, i.e. f(up) = alpha * f(central)
2164     matching=0.;
2165     scale=0.;
2166     } else {
2167     // assume that the central value is exactly between up & down, i.e. central = (up-down)/2
2168     matching = fabs( ( rtMatchingUp->GetBinContent(i) - rtMatchingDown->GetBinContent(i)) / (rtMatchingUp->GetBinContent(i) + rtMatchingDown->GetBinContent(i)) );
2169     scale = fabs( ( rtScaleUp->GetBinContent(i) - rtScaleDown->GetBinContent(i)) / (rtScaleUp->GetBinContent(i) + rtScaleDown->GetBinContent(i)) );
2170     }
2171    
2172     SysMatching->SetBinContent(i,1+matching);
2173     SysScale->SetBinContent(i,1+scale);
2174     SysHisto->SetBinContent(i,sqrt(matching*matching+scale*scale)+1);
2175     }
2176    
2177     SysHisto->SetLineColor(kGreen);
2178    
2179     SysMatching->SetMaximum(3.0);
2180     SysMatching->SetMinimum(0.0);
2181     SysMatching->Draw("histo");
2182     SysScale->Draw("histo,same");
2183     SysHisto->Draw("histo,same");
2184     CompleteSave(kinpad,saveas+"__TTbarComparison_DerivedSystematic");
2185    
2186     delete SysMatching;
2187     delete SysScale;
2188    
2189     if(!Contains(variable,"gen")) {
2190     TH1F *hdata = allsamples.Draw("hdata", variable,nbins,bmin,bmax,label,"events",thiscut,data,luminosity);
2191     THStack smc = allsamples.DrawStack("smc",variable,nbins,bmin,bmax,label,"events",thiscut,mc,luminosity);
2192    
2193     TH1F *Systematic = (TH1F*)hdata->Clone("Systematic");
2194    
2195     for(int i=1;i<=Systematic->GetNbinsX();i++) {
2196     int iBin=SysHisto->FindBin(Systematic->GetBinCenter(i));
2197     if(iBin>SysHisto->GetNbinsX()) --iBin; // if we're over the end of the histo, use the last bin
2198     float sys = SysHisto->GetBinContent(iBin)-1;
2199     Systematic->SetBinContent(i,sys);
2200     }
2201    
2202     kinpad->cd();
2203     TLegend *leg = allsamples.allbglegend();
2204     hdata->Draw();
2205     smc.Draw("histo,same");
2206     hdata->Draw("same");
2207     leg->Draw();
2208     DrawPrelim();
2209 buchmann 1.90 save_with_ratio_and_sys_band( 0.0, hdata, CollapseStack(smc), kinpad->cd(), saveas+"__DataVsMC", false, false, "data/mc",Systematic );
2210 buchmann 1.86
2211     delete Systematic;
2212     delete hdata;
2213     }
2214    
2215    
2216     delete SysHisto;
2217 buchmann 1.81 delete tScaleUp;
2218     delete tScaleDown;
2219     delete tCentral;
2220     delete tMatchingUp;
2221     delete tMatchingDown;
2222 buchmann 1.86 delete rtScaleUp;
2223     delete rtScaleDown;
2224     delete rtCentral;
2225     delete rtMatchingUp;
2226     delete rtMatchingDown;
2227 buchmann 1.81 delete QP1;
2228     delete infobox;
2229     delete infobox2;
2230     delete MatchingRatio;
2231     delete ScaleRatio;
2232     delete leg2;
2233     CleanLegends();
2234     delete ca;
2235     }
2236    
2237 buchmann 1.79 void ProduceMCSystematicPlots() {
2238 buchmann 1.81 cout << "Getting ready to produce systematic plots " << endl;
2239 buchmann 1.79 TCut cutweightBKP = cutWeight;
2240    
2241 buchmann 1.89 QuickProduceMCSystematicPlot("genMET",20,0,200,"gen#slash{E}_{T} [GeV]",cutOSSF&&cutnJets&&TCut("mll>20&&mll<70"),"MCSystPlots/genMET/ETH_SameFlavor");
2242     QuickProduceMCSystematicPlot("genMET",20,0,200,"gen#slash{E}_{T} [GeV]",cutOSOF&&cutnJets&&TCut("mll>20&&mll<70"),"MCSystPlots/genMET/ETH_OppositeFlavor");
2243     QuickProduceMCSystematicPlot("met[4]",20,0,200,"PF#slash{E}_{T} [GeV]",cutOSSF&&cutnJets&&TCut("mll>20&&mll<70"),"MCSystPlots/MET/ETH_SameFlavor");
2244     QuickProduceMCSystematicPlot("met[4]",20,0,200,"PF#slash{E}_{T} [GeV]",cutOSOF&&cutnJets&&TCut("mll>20&&mll<70"),"MCSystPlots/MET/ETH_OppositeFlavor");
2245    
2246     QuickProduceMCSystematicPlot("genMET",20,0,200,"gen#slash{E}_{T} [GeV]",cutOSSF&&TCut("mll>20&&mll<70"),"MCSystPlots/genMET/ETH_SameFlavor_INCLUSIVE");
2247     QuickProduceMCSystematicPlot("genMET",20,0,200,"gen#slash{E}_{T} [GeV]",cutOSOF&&TCut("mll>20&&mll<70"),"MCSystPlots/genMET/ETH_OppositeFlavor_INCLUSIVE");
2248     QuickProduceMCSystematicPlot("genMET",20,0,200,"gen#slash{E}_{T} [GeV]",cutOSSF&&TCut("mll>120"),"MCSystPlots/genMET/ETH_SameFlavor_INCLUSIVE_HighMass");
2249     QuickProduceMCSystematicPlot("genMET",20,0,200,"gen#slash{E}_{T} [GeV]",cutOSOF&&TCut("mll>120"),"MCSystPlots/genMET/ETH_OppositeFlavor_INCLUSIVE_HighMass");
2250    
2251     QuickProduceMCSystematicPlot("met[4]",20,0,200,"PF#slash{E}_{T} [GeV]",cutOSSF&&TCut("mll>20&&mll<70"),"MCSystPlots/MET/ETH_SameFlavor_INCLUSIVE");
2252     QuickProduceMCSystematicPlot("met[4]",20,0,200,"PF#slash{E}_{T} [GeV]",cutOSOF&&TCut("mll>20&&mll<70"),"MCSystPlots/MET/ETH_OppositeFlavor_INCLUSIVE");
2253     QuickProduceMCSystematicPlot("met[4]",20,0,200,"PF#slash{E}_{T} [GeV]",cutOSSF&&TCut("mll>120"),"MCSystPlots/MET/ETH_SameFlavor_INCLUSIVE_HighMass");
2254     QuickProduceMCSystematicPlot("met[4]",20,0,200,"PF#slash{E}_{T} [GeV]",cutOSOF&&TCut("mll>120"),"MCSystPlots/MET/ETH_OppositeFlavor_INCLUSIVE_HighMass");
2255 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");
2256     QuickProduceMCSystematicPlot("pfJetGoodNum40",8,-0.5,7.5,"NJets",cutOSOF&&cutnJets&&TCut("mll>20&&mll<70&&met[4]>100"),"MCSystPlots/NJets/ETH_OppositeFlavor");
2257 buchmann 1.81
2258    
2259 buchmann 1.79
2260 buchmann 1.81 cout << "Kicking cutWeight " << (const char*) cutWeight << endl;
2261     cout << "Keeping OSSF cut " << (const char*)cutOSSF << endl;
2262     cutWeight="1.0";
2263    
2264 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");
2265     QuickProduceMCSystematicPlot("genMET",20,0,200,"gen#slash{E}_{T} [GeV]",cutOSOF&&TCut("mll>20&&mll<70"),"MCSystPlots/genMET/ETH_OppositeFlavor_INCLUSIVE__NOPURW");
2266     QuickProduceMCSystematicPlot("genMET",20,0,200,"gen#slash{E}_{T} [GeV]",cutOSSF&&TCut("mll>120"),"MCSystPlots/genMET/ETH_SameFlavor_INCLUSIVE_HighMass__NOPURW");
2267     QuickProduceMCSystematicPlot("genMET",20,0,200,"gen#slash{E}_{T} [GeV]",cutOSOF&&TCut("mll>120"),"MCSystPlots/genMET/ETH_OppositeFlavor_INCLUSIVE_HighMass__NOPURW");
2268    
2269     QuickProduceMCSystematicPlot("met[4]",20,0,200,"PF#slash{E}_{T} [GeV]",cutOSSF&&TCut("mll>20&&mll<70"),"MCSystPlots/MET/ETH_SameFlavor_INCLUSIVE__NOPURW");
2270     QuickProduceMCSystematicPlot("met[4]",20,0,200,"PF#slash{E}_{T} [GeV]",cutOSOF&&TCut("mll>20&&mll<70"),"MCSystPlots/MET/ETH_OppositeFlavor_INCLUSIVE__NOPURW");
2271     QuickProduceMCSystematicPlot("met[4]",20,0,200,"PF#slash{E}_{T} [GeV]",cutOSSF&&TCut("mll>120"),"MCSystPlots/MET/ETH_SameFlavor_INCLUSIVE_HighMass__NOPURW");
2272     QuickProduceMCSystematicPlot("met[4]",20,0,200,"PF#slash{E}_{T} [GeV]",cutOSOF&&TCut("mll>120"),"MCSystPlots/MET/ETH_OppositeFlavor_INCLUSIVE_HighMass__NOPURW");
2273 buchmann 1.84
2274 buchmann 1.81
2275 buchmann 1.82 // -------------------------------------- ***** AACHEN ***** --------------------------------------
2276    
2277 buchmann 1.86 /*
2278 buchmann 1.82 cutWeight=cutweightBKP;
2279     TCut essentialcutBKP = essentialcut;
2280     cout << (const char*) essentialcut << endl;
2281    
2282     essentialcut = TCut((ReplaceAll((const char*)essentialcut,"pt2>20","pt2>10")).c_str());
2283     essentialcut = TCut((ReplaceAll((const char*)essentialcut,"abs(eta1)<1.4","abs(eta1)<2.4")).c_str());
2284     essentialcut = TCut((ReplaceAll((const char*)essentialcut,"abs(eta2)<1.4","abs(eta2)<2.4")).c_str());
2285    
2286 buchmann 1.79 TCut cutnJetsBKP = cutnJets;
2287     cutnJets = TCut((ReplaceAll((const char*)cutnJets,"pt2>20","pt2>10")).c_str());
2288     cutnJets = TCut((ReplaceAll((const char*)cutnJets,"pfJetGoodNum40>=3","pfJetGoodNum40>=2")).c_str());
2289     cutnJets = TCut((ReplaceAll((const char*)cutnJets,"abs(eta2)<1.4","abs(eta2)<2.4")).c_str());
2290     cutnJets = TCut((ReplaceAll((const char*)cutnJets,"abs(eta1)<1.4","abs(eta1)<2.4")).c_str());
2291    
2292 buchmann 1.89 QuickProduceMCSystematicPlot("genMET",20,0,200,"gen#slash{E}_{T} [GeV]",cutOSSF&&cutnJets&&TCut("mll>20&&mll<70"),"MCSystPlots/genMET/Aachen_SameFlavor");
2293     QuickProduceMCSystematicPlot("genMET",20,0,200,"gen#slash{E}_{T} [GeV]",cutOSOF&&cutnJets&&TCut("mll>20&&mll<70"),"MCSystPlots/genMET/Aachen_OppositeFlavor");
2294     QuickProduceMCSystematicPlot("met[4]",20,0,200,"PF#slash{E}_{T} [GeV]",cutOSSF&&cutnJets&&TCut("mll>20&&mll<70"),"MCSystPlots/MET/Aachen_SameFlavor");
2295     QuickProduceMCSystematicPlot("met[4]",20,0,200,"PF#slash{E}_{T} [GeV]",cutOSOF&&cutnJets&&TCut("mll>20&&mll<70"),"MCSystPlots/MET/Aachen_OppositeFlavor");
2296    
2297     QuickProduceMCSystematicPlot("genMET",20,0,200,"gen#slash{E}_{T} [GeV]",cutOSSF&&TCut("mll>20&&mll<70"),"MCSystPlots/genMET/Aachen_SameFlavor_INCLUSIVE");
2298     QuickProduceMCSystematicPlot("genMET",20,0,200,"gen#slash{E}_{T} [GeV]",cutOSOF&&TCut("mll>20&&mll<70"),"MCSystPlots/genMET/Aachen_OppositeFlavor_INCLUSIVE");
2299     QuickProduceMCSystematicPlot("genMET",20,0,200,"gen#slash{E}_{T} [GeV]",cutOSSF&&TCut("mll>120"),"MCSystPlots/genMET/Aachen_SameFlavor_INCLUSIVE_HighMass");
2300     QuickProduceMCSystematicPlot("genMET",20,0,200,"gen#slash{E}_{T} [GeV]",cutOSOF&&TCut("mll>120"),"MCSystPlots/genMET/Aachen_OppositeFlavor_INCLUSIVE_HighMass");
2301    
2302     QuickProduceMCSystematicPlot("met[4]",20,0,200,"PF#slash{E}_{T} [GeV]",cutOSSF&&TCut("mll>20&&mll<70"),"MCSystPlots/MET/Aachen_SameFlavor_INCLUSIVE");
2303     QuickProduceMCSystematicPlot("met[4]",20,0,200,"PF#slash{E}_{T} [GeV]",cutOSOF&&TCut("mll>20&&mll<70"),"MCSystPlots/MET/Aachen_OppositeFlavor_INCLUSIVE");
2304     QuickProduceMCSystematicPlot("met[4]",20,0,200,"PF#slash{E}_{T} [GeV]",cutOSSF&&TCut("mll>120"),"MCSystPlots/MET/Aachen_SameFlavor_INCLUSIVE_HighMass");
2305     QuickProduceMCSystematicPlot("met[4]",20,0,200,"PF#slash{E}_{T} [GeV]",cutOSOF&&TCut("mll>120"),"MCSystPlots/MET/Aachen_OppositeFlavor_INCLUSIVE_HighMass");
2306 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");
2307     QuickProduceMCSystematicPlot("pfJetGoodNum40",8,-0.5,7.5,"NJets",cutOSOF&&cutnJets&&TCut("mll>20&&mll<70&&met[4]>100"),"MCSystPlots/NJets/Aachen_OppositeFlavor");
2308    
2309    
2310    
2311     cout << "Kicking cutWeight " << (const char*) cutWeight << endl;
2312     cout << "Keeping OSSF cut " << (const char*)cutOSSF << endl;
2313     cutWeight="1.0";
2314    
2315 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");
2316     QuickProduceMCSystematicPlot("genMET",20,0,200,"gen#slash{E}_{T} [GeV]",cutOSOF&&TCut("mll>20&&mll<70"),"MCSystPlots/genMET/Aachen_OppositeFlavor_INCLUSIVE__NOPURW");
2317     QuickProduceMCSystematicPlot("genMET",20,0,200,"gen#slash{E}_{T} [GeV]",cutOSSF&&TCut("mll>120"),"MCSystPlots/genMET/Aachen_SameFlavor_INCLUSIVE_HighMass__NOPURW");
2318     QuickProduceMCSystematicPlot("genMET",20,0,200,"gen#slash{E}_{T} [GeV]",cutOSOF&&TCut("mll>120"),"MCSystPlots/genMET/Aachen_OppositeFlavor_INCLUSIVE_HighMass__NOPURW");
2319    
2320     QuickProduceMCSystematicPlot("met[4]",20,0,200,"PF#slash{E}_{T} [GeV]",cutOSSF&&TCut("mll>20&&mll<70"),"MCSystPlots/MET/Aachen_SameFlavor_INCLUSIVE__NOPURW");
2321     QuickProduceMCSystematicPlot("met[4]",20,0,200,"PF#slash{E}_{T} [GeV]",cutOSOF&&TCut("mll>20&&mll<70"),"MCSystPlots/MET/Aachen_OppositeFlavor_INCLUSIVE__NOPURW");
2322     QuickProduceMCSystematicPlot("met[4]",20,0,200,"PF#slash{E}_{T} [GeV]",cutOSSF&&TCut("mll>120"),"MCSystPlots/MET/Aachen_SameFlavor_INCLUSIVE_HighMass__NOPURW");
2323     QuickProduceMCSystematicPlot("met[4]",20,0,200,"PF#slash{E}_{T} [GeV]",cutOSOF&&TCut("mll>120"),"MCSystPlots/MET/Aachen_OppositeFlavor_INCLUSIVE_HighMass__NOPURW");
2324 buchmann 1.82
2325 buchmann 1.79 cutnJets = cutnJetsBKP;
2326     cutWeight = cutweightBKP;
2327 buchmann 1.82 essentialcut = essentialcutBKP;
2328 buchmann 1.86 */
2329 buchmann 1.83 write_error(__FUNCTION__,"Still need to add systematic shape");assert(0);
2330 buchmann 1.81 }
2331    
2332     void MakeTauPlot(string label, TCut pcut, string filename, bool TauOnly) {
2333     TCut cut=pcut&&basiccut;
2334     string variable="mll";
2335     string xlabel="m_{ll} [GeV]";
2336     int nbins=40;
2337     float min=0;
2338     float max=200;
2339    
2340     TCanvas *ckin = new TCanvas("ckin","Kinematic Plots (in the making)",600,600);
2341     TH1F *datahistoSF = allsamples.Draw("datahistoSF",variable,nbins,min,max, xlabel, "events",cut&&cutOSSF,data,luminosity);
2342     TH1F *datahistoOF = allsamples.Draw("datahistoOF",variable,nbins,min,max, xlabel, "events",cut&&cutOSOF,data,luminosity);
2343     TH1F *tauSF = allsamples.Draw("tauSF",variable,nbins,min,max, xlabel, "events",cut&&cutOSSF,data,luminosity,systsamples.FindSample("DYToTauTau"));
2344     TH1F *tauOF = allsamples.Draw("tauOF",variable,nbins,min,max, xlabel, "events",cut&&cutOSOF,data,luminosity,systsamples.FindSample("DYToTauTau"));
2345     datahistoSF->SetMarkerSize(DataMarkerSize);
2346     datahistoSF->SetMaximum(1.3*datahistoSF->GetMaximum());
2347     datahistoOF->SetMarkerSize(DataMarkerSize);
2348     datahistoOF->SetMaximum(1.3*datahistoOF->GetMaximum());
2349    
2350     THStack mcstackSF = allsamples.DrawStack("mcstackSF", variable,nbins,min,max,xlabel,"events",cut&&cutOSSF,mc,luminosity);
2351     THStack mcstackOF = allsamples.DrawStack("mcstackOF", variable,nbins,min,max,xlabel,"events",cut&&cutOSOF,mc,luminosity);
2352     datahistoSF->Draw("e1");
2353     ckin->Update();
2354     mcstackSF.Draw("histo,same");
2355    
2356     datahistoSF->Draw("same,e1");
2357     TLegend *kinleg = allsamples.allbglegend();
2358     kinleg->Draw();
2359    
2360     TPad *kinpad = new TPad("kinpad","kinpad",0,0,1,1);
2361     kinpad->cd();
2362     datahistoSF->Draw("e1");
2363     mcstackSF.Draw("histo,same");
2364     datahistoSF->Draw("same,e1");
2365     datahistoSF->Draw("same,axis");
2366     kinleg->Draw();
2367     DrawPrelim();
2368     Save_With_Ratio(datahistoSF,mcstackSF,kinpad->cd(),filename+"__SF_mc");
2369    
2370     kinpad->cd();
2371     datahistoOF->Draw("e1");
2372     mcstackOF.Draw("histo,same");
2373     datahistoOF->Draw("same,e1");
2374     datahistoOF->Draw("same,axis");
2375     kinleg->Draw();
2376     DrawPrelim();
2377     Save_With_Ratio(datahistoOF,mcstackOF,kinpad->cd(),filename+"__OF_mc");
2378    
2379     kinpad->cd();
2380     tauSF->Draw("e1");
2381     tauOF->Draw("histo,same");
2382     tauSF->Draw("e1,same");
2383     TLegend *legtau = make_legend();
2384     legtau->AddEntry(tauSF,"DY->#tau#tau, SF","p");
2385     legtau->AddEntry(tauSF,"DY->#tau#tau, OF","l");
2386     legtau->Draw();
2387     DrawPrelim();
2388     Save_With_Ratio(tauSF,tauOF,kinpad->cd(),filename+"__Tau_SF_vs_OF");
2389    
2390     delete datahistoSF;
2391     delete datahistoOF;
2392     delete tauSF;
2393     delete tauOF;
2394     delete kinpad;
2395     delete ckin;
2396     CleanLegends();
2397     }
2398    
2399    
2400     void TauQuestion() {
2401     // MakeTauPlot("MET>100 GeV, #geq 3 jets",cutnJets&&TCut("met[4]>100"),"TauQ/MET100_3Jets",true);
2402     // MakeTauPlot("MET>100 GeV",TCut("met[4]>100"),"TauQ/MET100",true);
2403     // MakeTauPlot("MET>0 GeV",TCut("met[4]>0"),"TauQ/MET0",true);
2404     MakeTauPlot("b-tag veto, 50<MET<100",TCut("pfJetGoodNumBtag30==0&&met[4]>50&&met[4]<100"),"TauQ/ControlPlots",false);
2405 buchmann 1.79 }
2406    
2407 buchmann 1.91 void ProduceOFSFPlots(string mcjzb, string datajzb, bool isAachen) {
2408     string BaseMetCut="met[4]>100";
2409     string Prefix="ETH/";
2410     if(isAachen) {
2411     BaseMetCut="met[4]>150";
2412     Prefix="Aachen/";
2413     }
2414     // make_OFSF_plots("st", BaseMetCut, 20, 0, 2000., false, "S_{T}", Prefix+"FrankT");
2415     make_OFSF_plots("mt2j", BaseMetCut, 35, 0, 700., false, "M_{T2J}", Prefix+"MT2J");
2416    
2417     make_OFSF_plots("ml1b", BaseMetCut, 20, 0, 800., false, "m_{l_{1}b}", Prefix+"ML1B");
2418     make_OFSF_plots("ml2b", BaseMetCut, 20, 0, 400., false, "m_{l_{2}b}", Prefix+"ML2B");
2419     make_OFSF_plots("min(ml1b,ml2b)", BaseMetCut, 20, 0, 400., false, "m_{lb}", Prefix+"MLB");
2420    
2421     // make_OFSF_plots(datajzb, BaseMetCut, 55, -100, 450., false, "JZB", Prefix+"JZB_In_Signal_Region");
2422     make_OFSF_plots("mt2", BaseMetCut, 15, 0, 150., false, "M_{T2}", Prefix+"MT2");
2423     make_OFSF_plots("d2", BaseMetCut, 20, 0, 200., true, "D2", Prefix+"D2");
2424     make_OFSF_plots("pfJetGoodNum40", BaseMetCut, 10, -0.5, 9.5, true, "N_{jets}", Prefix+"nJets");
2425    
2426     // make_OFSF_plots("mll", BaseMetCut, 60, 20., 320., false, "m_{ll}", Prefix+"mll");
2427     // make_OFSF_plots("leptonNum", BaseMetCut, 3, 2, 5., false, "N(leptons)", Prefix+"NLeptons");
2428    
2429     // make_OFSF_plots("pfJetGoodNum40", BaseMetCut, 7, 3, 10, true, "#(jets)", Prefix+"njets");
2430     // make_OFSF_plots("pfJetGoodNum40", BaseMetCut+"&&pfJetGoodNumBtag30==0", 7, 3, 10, true, "#(jets)", Prefix+"njets_btagVeto");
2431     // make_OFSF_plots("pfJetGoodNum40", BaseMetCut"&&pfJetGoodNumBtag30>0", 7, 3, 10, true, "#(jets)", Prefix+"njets_AtLeastOneBJet30");
2432    
2433     // make_OFSF_plots("pfJetGoodNumBtag30", BaseMetCut, 5, -0.5, 4.5, true, "N_{b-jets}", Prefix+"nbjets");
2434     // make_OFSF_plots("pfJetGoodPtBtag[0]", BaseMetCut+"&&pfJetGoodNumBtag30>0", 20, 0, 400, true, "p_{T}(leading b-jet)", Prefix+"ptb1");
2435     // make_OFSF_plots("pfJetGoodPt", BaseMetCut, 30, 0., 400., true, "p_{T}^{J}", Prefix+"ptJet");
2436    
2437     // make_OFSF_plots("iso1", BaseMetCut, 20, 0, 0.3, true, "lepton 1 isolation", Prefix+"iso1");
2438     // make_OFSF_plots("iso2", BaseMetCut, 20, 0, 0.3, true, "lepton 2 isolation", Prefix+"iso2");
2439     make_OFSF_plots("pt", BaseMetCut, 30, 0., 300., true, "p_{ll}", Prefix+"pt");
2440     make_OFSF_plots("pt1", BaseMetCut, 30, 0., 300., true, "p_{T,1}", Prefix+"pt1");
2441     make_OFSF_plots("pt2", BaseMetCut, 22, 0., 220., true, "p_{T,2}", Prefix+"pt2");
2442     // make_OFSF_plots("eta1", BaseMetCut, 10, -2.5, 2.5, false, "#eta_{1}", Prefix+"eta1", 0.15);
2443     // make_OFSF_plots("eta2", BaseMetCut, 10, -2.5, 2.5, false, "#eta_{2}", Prefix+"eta2", 0.15);
2444     // make_OFSF_plots("phi1", BaseMetCut, 10, -TMath::Pi(), TMath::Pi(), false, "#phi_{1}", Prefix+"phi1", 0.2);
2445     // make_OFSF_plots("phi2", BaseMetCut, 10, -TMath::Pi(), TMath::Pi(), false, "#phi_{2}", Prefix+"phi2", 0.2);
2446     // make_OFSF_plots("pfJetGoodPt[0]/pfJetGoodPt[1]", BaseMetCut, 20, 1, 10, true, "pt_{j}^{1}/pt_{j}^{2}", Prefix+"jpt1pt2", 0.2);
2447     // make_OFSF_plots("TMath::Abs(pfJetDphiMet[0])", BaseMetCut, 16, 0, 3.2, false, "|#Delta#phi(jet1,MET)|", Prefix+"dphij1met", 0.2);
2448    
2449     // make_OFSF_plots("met[4]", BaseMetCut, 30, 100., 400., true, "E_{T}^{miss}", Prefix+"MET");
2450     // make_OFSF_plots("TMath::Abs(dphi)", BaseMetCut, 16, 0, 3.2, false, "|#Delta#phi(l1,l2)|", Prefix+"dphi", 0.2);
2451     // make_OFSF_plots("TMath::Abs(dphiMet1)", BaseMetCut, 16, 0, 3.2, false, "|#Delta#phi(l1,MET)|", Prefix+"dphiMet1", 0.2);
2452     // make_OFSF_plots("TMath::Abs(dphiMet2)", BaseMetCut, 16, 0, 3.2, false, "|#Delta#phi(l2,MET)|", Prefix+"dphiMet2", 0.2);
2453     // make_OFSF_plots("TMath::Min(TMath::Abs(dphiMet1), TMath::Abs(dphiMet2))", BaseMetCut, 16, 0, 3.2, false, "Min(|#Delta#phi(l,MET)|)", Prefix+"dphilc");
2454     // 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");
2455     // 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");
2456     // 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");
2457    
2458     }
2459    
2460     void ProduceOFSFPlots(string mcjzb, string datajzb) {
2461    
2462    
2463     //FIRST : ETH SELECTION
2464     ProduceOFSFPlots(mcjzb,datajzb,0); // this is the ETH selection
2465    
2466    
2467    
2468     string backup_cutnJets = (const char*)cutnJets;
2469     cutnJets = ReplaceInCut(cutnJets,"pfJetGoodNum40>=3","pfJetGoodNum40>=2");
2470     cutnJets = ReplaceInCut(cutnJets,"1.4","2.4");
2471    
2472     string backup_basiccut = (const char*)basiccut;
2473     basiccut = ReplaceInCut(basiccut,"1.4","2.4");
2474    
2475     string backup_essential = (const char*) essentialcut;
2476     essentialcut = ReplaceInCut(essentialcut,"1.4","2.4");
2477    
2478     ProduceOFSFPlots(mcjzb,datajzb,1); // this is the Aachen selection
2479    
2480     cutnJets = TCut(backup_cutnJets.c_str());
2481     basiccut = TCut(backup_basiccut.c_str());
2482     essentialcut = TCut(backup_essential.c_str());
2483     }
2484    
2485    
2486 buchmann 1.1 void do_kinematic_plots(string mcjzb, string datajzb, bool doPF=false)
2487     {
2488 buchmann 1.66 // switch_overunderflow(true);
2489 buchmann 1.1 bool dolog=true;
2490     bool nolog=false;
2491 fronga 1.54
2492 buchmann 1.95 bool doOFSF = false;
2493 buchmann 1.88 bool doKin = false;
2494 buchmann 1.81 bool doDataComp = false;
2495     bool MakeTwoThreeJetComparison = false;
2496 fronga 1.55
2497 fronga 1.54
2498 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!");
2499 buchmann 1.17 float mll_low=50;
2500 buchmann 1.2 float mll_hi=160;
2501     if(!PlottingSetup::RestrictToMassPeak) {
2502 buchmann 1.26 mll_low=20;
2503 fronga 1.54 mll_hi=320;
2504 buchmann 1.2 }
2505 buchmann 1.72
2506 buchmann 1.73 if(MakeTwoThreeJetComparison) MakeElegantTwoThreeComparisons();
2507 buchmann 1.81
2508     //TauQuestion();
2509 fronga 1.54
2510 buchmann 1.79 //ProduceJanPlots();
2511 buchmann 1.88 //ProduceMCSystematicPlots();
2512     //assert(0);
2513 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);
2514 buchmann 1.79
2515 buchmann 1.91 if ( doOFSF ) ProduceOFSFPlots(mcjzb,datajzb);
2516 fronga 1.55
2517 buchmann 1.70 if ( doDataComp) {
2518 fronga 1.55 TCut mllCut("");
2519 fronga 1.62 float massmin = 15.;
2520     float massmax = 315;
2521     int massnbins = 60;
2522 buchmann 1.70 /* if ( !PlottingSetup::openBox ) {
2523 buchmann 1.69 mllCut = "mll>70";
2524 fronga 1.62 massmin = 120;
2525     massmax = 360;
2526     massnbins = 14;
2527 buchmann 1.70 }*/
2528 fronga 1.55
2529     TCut cutSignal = cutmass&&cutnJets&&"met[4]>100";
2530 buchmann 1.70
2531 buchmann 1.80 make_data_comparison_plot("numVtx", "",40, -0.5, 39.5,-1., true, "N(Vertices)", "numVtx");
2532 buchmann 1.71 make_data_comparison_plot("pfJetGoodEta[0]", "",50, -3.0, 3.0,-1., true, "N(Jets)", "pfJetGoodEta0");
2533    
2534    
2535     make_data_comparison_plot("pfJetGoodNum40", cutOSOF,10, -0.5, 9.5,-1., true, "N(Jets)", "njets_OF");
2536     make_data_comparison_plot("met[4]", cutOSSF,60, 0., 300.,-1., true, "pfMET", "met_SF_inclusive");
2537 buchmann 1.70 make_data_comparison_plot("met[1]", cutOSSF,60, 0., 300.,-1., true, "type 1 corrected pfMET", "mett1_SF_inclusive");
2538     make_data_comparison_plot("met[4]", cutOSOF,60, 0., 300.,-1., true, "pfMET", "met_OF_inclusive");
2539     make_data_comparison_plot("met[1]", cutOSOF,60, 0., 300.,-1., true, "type 1 corrected pfMET", "mett1_OF_inclusive");
2540    
2541     make_data_comparison_plot("met[4]", cutnJets&&cutOSSF,60, 0., 300.,-1., true, "pfMET", "met_SF_exclusive");
2542 buchmann 1.80 make_data_comparison_plot("met[1]", cutnJets&&cutOSSF,60, 0., 300.,-1., true, "type 1 corrected pfMET", "mett1_SF_exclusive");
2543 buchmann 1.70 make_data_comparison_plot("met[4]", cutnJets&&cutOSOF,60, 0., 300.,-1., true, "pfMET", "met_OF_exclusive");
2544 buchmann 1.80 make_data_comparison_plot("met[1]", cutnJets&&cutOSOF,60, 0., 300.,-1., true, "type 1 corrected pfMET", "mett1_OF_exclusive");
2545    
2546 buchmann 1.70
2547     string basiccutsaved = (const char*)basiccut;
2548    
2549     string newbasiccut=basiccutsaved;
2550    
2551     size_t found;
2552     found = newbasiccut.find( "pt2>20" );
2553     while (found!=string::npos){
2554     newbasiccut.replace( found, string( "pt2>20" ).length(), "pt2>10" );
2555     found = newbasiccut.find( "pt2>20" );
2556     }
2557 buchmann 1.80 basiccut=TCut(newbasiccut.c_str());
2558     make_data_comparison_plot("mll", TCut("pfJetGoodNum40>=2&&met[4]>150")&&cutOSSF,60, 0., 300.,-1., false, "mll", "mll_SF_Aachen_pt2010_met");
2559     make_data_comparison_plot("mll", TCut("pfJetGoodNum40>=2&&met[4]>150")&&cutOSOF,60, 0., 300.,-1., false, "mll", "mll_OF_Aachen_pt2010_met");
2560     make_data_comparison_plot("mll", TCut("pfJetGoodNum40>=2&&met[1]>150")&&cutOSSF,60, 0., 300.,-1., true, "mll", "mll_SF_Aachen_pt2010_t1cpfmet");
2561     make_data_comparison_plot("mll", TCut("pfJetGoodNum40>=2&&met[1]>150")&&cutOSOF,60, 0., 300.,-1., true, "mll", "mll_OF_Aachen_pt2010_t1cpfmet");
2562     basiccut=TCut(basiccutsaved.c_str());
2563    
2564     make_data_comparison_plot("pfJetGoodNum40", cutOSSF, 8, 0., 8.,-1., true, "#(jets)", "njets_SF");
2565     make_data_comparison_plot("pfJetGoodNum40", cutOSOF, 8, 0., 8.,-1., true, "#(jets)", "njets_OF");
2566    
2567     make_data_comparison_plot("mll", TCut("pfJetGoodNum40>=3&&met[4]>100")&&cutOSSF,60, 0., 300.,-1., true, "mll", "mll_SF_ETH_met");
2568     make_data_comparison_plot("mll", TCut("pfJetGoodNum40>=3&&met[4]>100")&&cutOSOF,60, 0., 300.,-1., true, "mll", "mll_OF_ETH_met");
2569     make_data_comparison_plot("mll", TCut("pfJetGoodNum40>=3&&met[1]>100")&&cutOSSF,60, 0., 300.,-1., true, "mll", "mll_SF_ETH_t1cpfmet");
2570     make_data_comparison_plot("mll", TCut("pfJetGoodNum40>=3&&met[1]>100")&&cutOSOF,60, 0., 300.,-1., true, "mll", "mll_OF_ETH_t1cpfmet");
2571    
2572    
2573     make_data_comparison_plot("mll", cutOSSF,60, 15., 315.,-1., true, "m_{ll}", "mll_SF_inclusive");
2574     make_data_comparison_plot("mll", cutOSSF&&TCut("id1==0"),60, 15., 315.,-1., true, "m_{ll}", "mll_SF_inclusive_ee");
2575     make_data_comparison_plot("mll", cutOSSF&&TCut("id1==1"),60, 15., 315.,-1., true, "m_{ll}", "mll_SF_inclusive_mm");
2576     make_data_comparison_plot("mll", cutOSOF,60, 15., 315.,-1., true, "m_{ll}", "mll_OF_inclusive");
2577 buchmann 1.70 make_data_comparison_plot("mll", cutnJets&&cutOSSF&&TCut("id1==0"),60, 15., 315.,-1., true, "m_{ll}", "mll_SF_exclusive_ee");
2578     make_data_comparison_plot("mll", cutnJets&&cutOSSF&&TCut("id1==1"),60, 15., 315.,-1., true, "m_{ll}", "mll_SF_exclusive_mm");
2579     make_data_comparison_plot("mll", cutnJets&&cutOSSF,60, 15., 315.,-1., true, "m_{ll}", "mll_SF_exclusive");
2580     make_data_comparison_plot("mll", cutnJets&&cutOSOF,60, 15., 315.,-1., true, "m_{ll}", "mll_OF_exclusive");
2581 buchmann 1.80
2582 fronga 1.62 make_data_comparison_plot("mll", cutOSSF&&cutSignal&&mllCut, massnbins, 15., 315.,-1., false, "m_{ll}", "mll_SF_sig");
2583 buchmann 1.71 make_data_comparison_plot("mll", cutOSOF&&cutSignal&&mllCut, massnbins, 15., 315.,-1., false, "m_{ll}", "mll_OF_sig");
2584    
2585     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");
2586     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");
2587    
2588 fronga 1.62 make_data_comparison_plot("mll", cutOSSF&&cutSignal&&mllCut&&"pfJetGoodNumBtag30==0", massnbins, 15., 315.,-1., false, "m_{ll}", "mll_SF_sig_btagVeto");
2589 buchmann 1.71 make_data_comparison_plot("mll", cutOSOF&&cutSignal&&mllCut&&"pfJetGoodNumBtag30==0", massnbins, 15., 315.,-1., false, "m_{ll}", "mll_OF_sig_btagVeto");
2590    
2591 fronga 1.62 make_data_comparison_plot("mll", cutOSSF&&cutSignal&&mllCut&&"pfJetGoodNumBtag30>0", massnbins, 15., 315.,-1., false, "m_{ll}", "mll_SF_sig_AtLeastOneBJet");
2592 buchmann 1.71 make_data_comparison_plot("mll", cutOSOF&&cutSignal&&mllCut&&"pfJetGoodNumBtag30>0", massnbins, 15., 315.,-1., false, "m_{ll}", "mll_OF_sig_AtLeastOneBJet");
2593 fronga 1.55
2594 buchmann 1.80
2595 fronga 1.62 make_data_comparison_plot("mll", mllCut&&cutOSOF&&cutSignal, massnbins, 15., 315.,-1., false, "m_{ll}", "mll_OF_sig");
2596 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");
2597     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");
2598 fronga 1.60
2599     make_data_comparison_plot("pfJetGoodNum40", cutOSSF&&cutSignal&&mllCut, 8, 0., 8.,-1., false, "#(jets)", "njets_SF_sig");
2600     make_data_comparison_plot("pfJetGoodNum40", cutOSOF&&cutSignal&&mllCut, 8, 0., 8.,-1., false, "#(jets)", "njets_OF_sig");
2601     make_data_comparison_plot("pfJetGoodNumBtag30", cutOSSF&&cutSignal&&mllCut, 8, 0., 8.,-1., false, "#(b-jets)", "nbjets_SF_sig");
2602     make_data_comparison_plot("pfJetGoodNumBtag30", cutOSOF&&cutSignal&&mllCut, 8, 0., 8.,-1., false, "#(b-jets)", "nbjets_OF_sig");
2603 buchmann 1.80
2604 fronga 1.54 }
2605    
2606 fronga 1.55
2607 fronga 1.54 if ( doKin ) {
2608 fronga 1.55 string mllCut("");
2609 buchmann 1.95 /*
2610 buchmann 1.91 make_plain_kin_plot("mll",Cut2Str(cutOSSF&&TCut("mll>20")),56,20,300,dolog,"m_{ll}","NoPreselection/mll_SF",doPF,true);
2611     make_plain_kin_plot("mll",Cut2Str(cutOSOF&&TCut("mll>20")),56,20,300,dolog,"m_{ll}","NoPreselection/mll_OF",doPF,true);
2612    
2613     make_plain_kin_plot("met[4]",Cut2Str(cutOSSF&&TCut("mll>20")),80,0,400,dolog,"E_{T}^{miss}","NoPreselection/met_SF",doPF,true);
2614     make_plain_kin_plot("met[4]",Cut2Str(cutOSOF&&TCut("mll>20")),80,0,400,dolog,"E_{T}^{miss}","NoPreselection/met_OF",doPF,true);
2615    
2616     make_plain_kin_plot("pfTightHT",Cut2Str(cutOSSF&&TCut("mll>20")),20,0,800,dolog,"H_{T}","NoPreselection/HT_SF",doPF,true);
2617     make_plain_kin_plot("pfTightHT",Cut2Str(cutOSOF&&TCut("mll>20")),20,0,800,dolog,"H_{T}","NoPreselection/HT_OF",doPF,true);
2618    
2619     make_plain_kin_plot("pfJetGoodNum40",Cut2Str(cutOSSF&&TCut("mll>20")),10,-0.5,9.5,dolog,"n_{jets}","NoPreselection/NJets_SF",doPF,true);
2620     make_plain_kin_plot("pfJetGoodNum40",Cut2Str(cutOSOF&&TCut("mll>20")),10,-0.5,9.5,dolog,"n_{jets}","NoPreselection/NJets_OF",doPF,true);
2621    
2622     make_plain_kin_plot("pfJetGoodNumBtag30",Cut2Str(cutOSSF&&TCut("mll>20")),10,-0.5,9.5,dolog,"n_{btags}","NoPreselection/NBTags_SF",doPF,true);
2623     make_plain_kin_plot("pfJetGoodNumBtag30",Cut2Str(cutOSOF&&TCut("mll>20")),10,-0.5,9.5,dolog,"n_{btags}","NoPreselection/NBTags_OF",doPF,true);
2624    
2625     make_plain_kin_plot("pt1",Cut2Str(cutOSSF&&TCut("mll>20")),80,0,400,dolog,"p_{T}^{1}","NoPreselection/Pt1_SF",doPF,true);
2626     make_plain_kin_plot("pt1",Cut2Str(cutOSOF&&TCut("mll>20")),80,0,400,dolog,"p_{T}^{1}","NoPreselection/Pt1_OF",doPF,true);
2627    
2628     make_plain_kin_plot("pt2",Cut2Str(cutOSSF&&TCut("mll>20")),80,0,400,dolog,"p_{T}^{2}","NoPreselection/Pt2_SF",doPF,true);
2629     make_plain_kin_plot("pt2",Cut2Str(cutOSOF&&TCut("mll>20")),80,0,400,dolog,"p_{T}^{2}","NoPreselection/Pt2_OF",doPF,true);
2630    
2631    
2632     assert(0);
2633 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);
2634     make_plain_kin_plot("mll",Cut2Str(cutOSOF&&TCut("mll>60&&mll<120")),60,60,120,dolog,"m_{ll}","TestingLuminosity_OF",doPF,true);
2635 buchmann 1.80
2636 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);
2637     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);
2638     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);
2639     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);
2640    
2641     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);
2642     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);
2643     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);
2644     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);
2645 buchmann 1.77
2646 buchmann 1.74
2647 buchmann 1.75 make_plain_kin_plot("pfTightHT",Cut2Str(cutOSOF&&cutnJets),120,0,1200,dolog,"H_{T}","HT_3jets_OF",doPF,true);
2648     make_plain_kin_plot("pfTightHT",Cut2Str(cutOSSF&&cutnJets) ,120,0,1200,dolog,"H_{T}","HT_3jets_SF",doPF,true);
2649     make_plain_kin_plot("pfTightHT",Cut2Str(cutOSOF&&cutnJets&&TCut("met[4]>100")),120,0,1200,dolog,"H_{T}","HT_3jets_OF_MET100",doPF,true);
2650     make_plain_kin_plot("pfTightHT",Cut2Str(cutOSSF&&cutnJets&&TCut("met[4]>100")) ,120,0,1200,dolog,"H_{T}","HT_3jets_SF_MET100",doPF,true);
2651 buchmann 1.74
2652 buchmann 1.73
2653     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);
2654     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);
2655     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);
2656     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);
2657    
2658     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);
2659     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);
2660     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);
2661     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);
2662 fronga 1.55
2663 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);
2664     make_plain_kin_plot("met[4]",Cut2Str(cutOSOF&&cutnJets&&TCut("mll>20&&mll<70")),50,0,300,dolog,"PFMET","MET_OF_20to70",doPF,true);
2665 buchmann 1.72
2666 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);
2667     make_plain_kin_plot("met[4]",Cut2Str(cutOSOF&&cutnJets&&TCut("mll>120")),50,0,300,dolog,"PFMET","MET_OF_above120",doPF,true);
2668 buchmann 1.72
2669 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);
2670     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);
2671 buchmann 1.72
2672 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);
2673     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);
2674    
2675 buchmann 1.72
2676 buchmann 1.80 make_kin_plot("pfJetGoodPt[0]/pfJetGoodPt[1]","",45,1,10,dolog,"pt_{j}^{1}/pt_{j}^{2}","j1j2ratio",doPF,true);
2677     make_kin_plot("TMath::Abs(pfJetDphiMet[0])","",32,0,3.2,nolog,"|#Delta#phi(jet1,MET)|","dphiJ1MET",doPF,true);
2678 buchmann 1.77 // Plots in signal region
2679 buchmann 1.89 make_kin_plot("met[4]","",70,0,350,dolog,"#slash{E}_{T} [GeV]","met",doPF,true);
2680 buchmann 1.77
2681 buchmann 1.78
2682 buchmann 1.80 make_kin_plot("MetFactor","",20,0,2,nolog,"MetFactor","MetFactor",doPF,true);
2683 buchmann 1.78
2684 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");
2685 buchmann 1.84 /*
2686 buchmann 1.80 DoMCSystPlot("met[4]",40,0,400,(cutOSOF&&TCut("mll>30&&mll<70&&pfJetGoodNum40==0")),dolog,"PFMET","Debunking/MET_OF_30to70_0j");
2687     DoMCSystPlot("met[4]",40,0,400,(cutOSOF&&TCut("mll>30&&mll<70&&pfJetGoodNum40==1")),dolog,"PFMET","Debunking/MET_OF_30to70_1j");
2688     DoMCSystPlot("met[4]",40,0,400,(cutOSOF&&TCut("mll>30&&mll<70&&pfTightHT>100&&pfJetGoodNum40==2")),dolog,"PFMET","Debunking/MET_OF_30to70_2j");
2689     DoMCSystPlot("met[4]",40,0,400,(cutOSOF&&TCut("mll>30&&mll<70&&pfTightHT>100&&pfJetGoodNum40==3")),dolog,"PFMET","Debunking/MET_OF_30to70_3j");
2690    
2691 buchmann 1.81 DoMCSystPlot("met[4]",40,0,400,(cutOSSF&&TCut("mll>30&&mll<70&&pfJetGoodNum40==0")),dolog,"PFMET","Debunking/MET_SF_30to70_0j");
2692     DoMCSystPlot("met[4]",40,0,400,(cutOSSF&&TCut("mll>30&&mll<70&&pfJetGoodNum40==1")),dolog,"PFMET","Debunking/MET_SF_30to70_1j");
2693     DoMCSystPlot("met[4]",40,0,400,(cutOSSF&&TCut("mll>30&&mll<70&&pfTightHT>100&&pfJetGoodNum40==2")),dolog,"PFMET","Debunking/MET_SF_30to70_2j");
2694     DoMCSystPlot("met[4]",40,0,400,(cutOSSF&&TCut("mll>30&&mll<70&&pfTightHT>100&&pfJetGoodNum40==3")),dolog,"PFMET","Debunking/MET_SF_30to70_3j");
2695    
2696 buchmann 1.80 DoMCSystPlot("met[4]",40,0,400,(cutOSOF&&TCut("mll>80&&mll<100&&pfJetGoodNum40==0")),dolog,"PFMET","Debunking/MET_OF_Z_0j");
2697     DoMCSystPlot("met[4]",40,0,400,(cutOSOF&&TCut("mll>80&&mll<100&&pfJetGoodNum40==1")),dolog,"PFMET","Debunking/MET_OF_Z_1j");
2698     DoMCSystPlot("met[4]",40,0,400,(cutOSOF&&TCut("mll>80&&mll<100&&pfTightHT>100&&pfJetGoodNum40==2")),dolog,"PFMET","Debunking/MET_OF_Z_2j");
2699     DoMCSystPlot("met[4]",40,0,400,(cutOSOF&&TCut("mll>80&&mll<100&&pfTightHT>100&&pfJetGoodNum40==3")),dolog,"PFMET","Debunking/MET_OF_Z_3j");
2700    
2701    
2702     DoMCSystPlot("mll", (int)((mll_hi-mll_low)/5),mll_low,mll_hi,cutnJets&&cutOSSF,dolog,"m_{ll} [GeV]","kinSys/mll");
2703     DoMCSystPlot("mll", (int)((mll_hi-mll_low)/5),mll_low,mll_hi,cutnJets&&cutOSSF&&TCut("id1==0"),dolog,"m_{ll} [GeV]","kinSys/mll_ee");
2704     DoMCSystPlot("mll", (int)((mll_hi-mll_low)/5),mll_low,mll_hi,cutnJets&&cutOSSF&&TCut("id1==1"),dolog,"m_{ll} [GeV]","kinSys/mll_mm");
2705     DoMCSystPlot("mll", (int)((mll_hi-mll_low)/5),mll_low,mll_hi,cutnJets&&cutOSOF,dolog,"m_{ll} [GeV]","kinSys/mll_osof");
2706 buchmann 1.78
2707 buchmann 1.80 DoMCSystPlot("mll", (int)((mll_hi-mll_low)/5),mll_low,mll_hi,cutOSSF,dolog,"m_{ll} [GeV]","kinSys/mll_inclusive");
2708     DoMCSystPlot("mll", (int)((mll_hi-mll_low)/5),mll_low,mll_hi,cutOSOF,dolog,"m_{ll} [GeV]","kinSys/mll_inclusive_osof");
2709 buchmann 1.77
2710 buchmann 1.80 DoMCSystPlot("pfJetGoodNum40", 9,-0.5,8.5,cutOSSF,dolog,"nJets","kinSys/nJets_ossf");
2711     DoMCSystPlot("pfJetGoodNum40", 9,-0.5,8.5,cutOSOF,dolog,"nJets","kinSys/nJets_osof");
2712 buchmann 1.72
2713 buchmann 1.80 DoMCSystPlot("pfJetGoodPt[0]/pfJetGoodPt[1]",45,1,10,cutnJets&&cutOSSF,dolog,"p_{T}^{J1} / p_{T}^{J2}","kinSys/j1j2ratio");
2714     DoMCSystPlot("TMath::Abs(pfJetDphiMet[0])",32,0,3.2,cutnJets&&cutOSSF,dolog,"|#Delta#phi(jet1,MET)|","kinSys/dphiJ1MET");
2715     DoMCSystPlot(datajzb,mcjzb, (int)((PlottingSetup::jzbHigh+110)/10),-110,PlottingSetup::jzbHigh,cutnJets&&cutOSSF&&Restrmasscut,dolog,"m_{ll} [GeV]","kinSys/jzb_OS_SFZP");
2716     DoMCSystPlot(datajzb,mcjzb, (int)((PlottingSetup::jzbHigh+110)/10),-110,PlottingSetup::jzbHigh,cutnJets&&cutOSOF&&Restrmasscut,dolog,"m_{ll} [GeV]","kinSys/jzb_OS_OFZP");
2717    
2718     make_kin_plot("mll","mll>20"+mllCut,(int)((mll_hi-mll_low)/5),mll_low,mll_hi,dolog,"m_{ll} [GeV]","mll",doPF,true);
2719     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);
2720     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);
2721     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);
2722    
2723     make_kin_plot("pfJetGoodNum40",mllCut,9,-0.5,8.5,dolog,"nJets","nJets",doPF);
2724     make_kin_plot("pfJetGoodNum40","",9,-0.5,8.5,dolog,"nJets","nJets_osof",doPF);
2725    
2726     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);
2727     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);
2728     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);
2729     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);
2730 fronga 1.54
2731 buchmann 1.69
2732 buchmann 1.80 make_kin_plot("pfJetGoodNum40","met[4]>100"+mllCut,9,-0.5,8.5,dolog,"nJets","nJets_met100",doPF);
2733     make_kin_plot("pfJetGoodNum40","met[4]>100",9,-0.5,8.5,dolog,"nJets","nJets_osof_met100",doPF);
2734 fronga 1.54
2735     // Further inclusive invariant mass plots
2736 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);
2737 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);
2738     make_kin_plot("mll","",(int)((mll_hi-mll_low))/5,mll_low,mll_hi,dolog,"m_{ll} [GeV]","mll_inclusive_mm",doPF,true);
2739 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);
2740 fronga 1.54
2741 buchmann 1.80 make_kin_plot("mll","",(int)((350-mll_low))/5,mll_low,350,dolog,"m_{ll} [GeV]","mll_inclusive_highrange",doPF);
2742 fronga 1.54 //if(!doPF) make_special_mll_plot((int)((mll_hi-mll_low)/5),mll_low,mll_hi,dolog,"m_{ll} [GeV]");
2743    
2744    
2745     // Number of jets
2746     make_kin_plot("pfJetGoodNum40","",9,-0.5,8.5,dolog,"nJets","nJets_inclusive",doPF);
2747     make_kin_plot("pfJetGoodNum40","",9,-0.5,8.5,dolog,"nJets","nJets_osof_inclusive",doPF);
2748 buchmann 1.80 make_kin_plot("pfJetGoodNum40","",9,-0.5,8.5,dolog,"nJets","nJets_nocuts_except_mll_ossf",doPF);
2749 fronga 1.54
2750     // Others
2751     make_kin_plot("numVtx","",(int)(30.5-(-0.5)),-0.5,30.5,nolog,"N(Vtx)","numVtx",doPF);
2752     // make_kin_plot("jetpt[0]","",40,0,200,dolog,"leading jet p_{T} [GeV]","pfJetGoodPt_0",doPF);
2753     // make_kin_plot("jeteta[0]","",40,-5,5,nolog,"leading jet #eta","pfJetGoodEta_0",doPF);
2754     make_kin_plot("pt","",50,0,500,dolog,"Z p_{T} [GeV]","Zpt",doPF);
2755     make_kin_plot("pt1","",50,0,200,nolog,"p_{T} [GeV]","pt1",doPF);
2756     make_kin_plot("pt2","",50,0,200,nolog,"p_{T} [GeV]","pt2",doPF);
2757     make_kin_plot("eta1","",40,-3,3,nolog,"#eta_{l}","eta",doPF);
2758     make_kin_plot("jzb[1]","",100,-150,200,dolog,"JZB [GeV]","jzb_ossf",doPF);
2759     // stringstream jzbcut;
2760     // jzbcut << "((is_data&&("<<datajzb<<")>100)||(!is_data&&("<<mcjzb<<")>100))";
2761     // make_kin_plot("mll",jzbcut.str(),(int)((mll_hi-mll_low)/5),mll_low,mll_hi,nolog,"m_{ll} [GeV]","mll_aboveJZB100",doPF,true);
2762     // 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);
2763     // 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);
2764     // 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);
2765     // stringstream jzbcut2;
2766     // jzbcut2 << "((is_data&&("<<datajzb<<")>150)||(!is_data&&("<<mcjzb<<")>150))";
2767     // make_kin_plot("mll",jzbcut2.str(),(int)((mll_hi-mll_low)/5),mll_low,mll_hi,nolog,"m_{ll} [GeV]","mll_aboveJZB150",doPF,true);
2768     // 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);
2769     // 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);
2770     // 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);
2771     // stringstream jzbcut3;
2772     // jzbcut3 << "((is_data&&("<<datajzb<<")>50)||(!is_data&&("<<mcjzb<<")>50))";
2773     // make_kin_plot("mll",jzbcut3.str(),(int)((mll_hi-mll_low)/5),mll_low,mll_hi,nolog,"m_{ll} [GeV]","mll_aboveJZB50",doPF,true);
2774     // 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);
2775     // 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);
2776     // 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);
2777    
2778     // 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);
2779     //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);
2780 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);*/
2781 fronga 1.54 }
2782 buchmann 1.88
2783 buchmann 1.95 int jzbcuts[7]={0,50,80,100,150,200,250};
2784     int MCorData[2]={data,mc};
2785    
2786     write_warning(__FUNCTION__,"Skipping data altogether");
2787     for(int d=1;d<2;d++) {
2788     for(int j=0;j<7;j++) {
2789     make_special_obs_pred_mll_plot(datajzb,mcjzb,jzbcuts[j],5.0,MCorData[d]); // 5.0 is the binwidth
2790     }
2791     }
2792    
2793 buchmann 1.88 /*
2794 buchmann 1.80 make_JES_plot(cutmass&&cutOSSF&&basiccut,"_ossf");
2795     make_JES_plot(cutmass&&cutOSOF&&basiccut,"_osof");
2796 buchmann 1.84 */
2797 buchmann 1.65 switch_overunderflow(false);
2798 buchmann 1.1 }
2799    
2800     void make_comp_plot( string var, string xlabel, string filename, float jzbcut, string mcjzb, string datajzb,
2801     int nbins, float xmin, float xmax, bool log,
2802     float ymin=0, float ymax=0, bool leftJustified=false ) {
2803 fronga 1.40 flag_this_change(__FUNCTION__,__LINE__,true);//PlottingSetup::RestrictToMassPeak ---- WATCH OUT: the argument in the function changed!
2804 buchmann 1.1
2805     TCut weightbackup=cutWeight;//backing up the correct weight (restoring below!)
2806     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__));
2807 fronga 1.40 //if(var=="numVtx") cutWeight=TCut("1.0");
2808 buchmann 1.1 TCut jzbData[]= { TCut(TString(datajzb+">"+any2string(jzbcut))),TCut(TString(datajzb+"<-"+any2string(jzbcut))) };
2809     TCut jzbMC[] = { TCut(TString(mcjzb+">"+any2string(jzbcut))),TCut(TString(mcjzb+"<-"+any2string(jzbcut))) };
2810    
2811     flag_this_change(__FUNCTION__,__LINE__,true);//PlottingSetup::RestrictToMassPeak ---- below: the next ~20 lines changed!
2812     int nRegions=4;
2813 buchmann 1.50 if(!PlottingSetup::RestrictToMassPeak||!PlottingSetup::UseSidebandsForcJZB) {
2814 buchmann 1.1 nRegions=2;
2815     }
2816    
2817     string sRegions[] = { "SFZP","OFZP","SFSB","OFSB" };
2818 buchmann 1.94 if(!RestrictToMassPeak) {
2819     sRegions[0]="SF";
2820     sRegions[1]="OF";
2821     }
2822 buchmann 1.1 TCut kRegions[] = { cutOSSF&&cutnJets&&cutmass, cutOSOF&&cutnJets&&cutmass,
2823     cutOSSF&&cutnJets&&sidebandcut, cutOSOF&&cutnJets&&sidebandcut };
2824    
2825     //find ymax
2826     TH1F *Refdatahisto = allsamples.Draw("datahisto", var,nbins,xmin,xmax,xlabel,"events",kRegions[0]&&jzbData[0],data,luminosity);
2827     ymax=int((Refdatahisto->GetMaximum()+2*TMath::Sqrt(Refdatahisto->GetMaximum()))*1.2+0.5);
2828     delete Refdatahisto;
2829    
2830     for ( int iregion=0; iregion<nRegions; ++iregion )
2831     for ( int ijzb=0; ijzb<2; ++ijzb ) {
2832     TCanvas *ccomp = new TCanvas("ccomp","Comparison plot",600,400);
2833     ccomp->SetLogy(log);
2834     TH1F *datahisto = allsamples.Draw("datahisto", var,nbins,xmin,xmax,xlabel,"events",kRegions[iregion]&&jzbData[ijzb],data,luminosity);
2835 fronga 1.40 TH1F *lm3histo = signalsamples.Draw("lm3histo", var,nbins,xmin,xmax,xlabel,"events",kRegions[iregion]&&jzbMC[ijzb],data,luminosity,signalsamples.FindSample("LM3"));
2836 buchmann 1.1 THStack mcstack = allsamples.DrawStack("mcstack",var,nbins,xmin,xmax,xlabel,"events",kRegions[iregion]&&jzbMC[ijzb], mc, luminosity);
2837     datahisto->SetMarkerSize(DataMarkerSize);
2838     if (ymax>ymin) datahisto->SetMaximum(ymax);
2839 fronga 1.40 lm3histo->SetLineStyle(2);
2840 buchmann 1.1 datahisto->Draw("e1");
2841 buchmann 1.73 mcstack.Draw("histo,same");
2842 buchmann 1.1 datahisto->Draw("same,e1");
2843 fronga 1.40 lm3histo->Draw("hist,same");
2844 buchmann 1.1 TLegend *kinleg = allsamples.allbglegend((sRegions[iregion]+(ijzb?"neg":"pos")).c_str());
2845     if ( leftJustified ) {
2846     Float_t w = kinleg->GetX2()-kinleg->GetX1();
2847     kinleg->SetX1(0.2);
2848     kinleg->SetX2(0.2+w);
2849     }
2850 fronga 1.40 kinleg->AddEntry(lm3histo,"LM3","l");
2851 buchmann 1.1 kinleg->Draw();
2852     TText* write_variable = write_text(0.99,0.01,var);
2853     write_variable->SetTextAlign(31);
2854     write_variable->SetTextSize(0.02);
2855     ccomp->RedrawAxis();
2856     CompleteSave(ccomp,"compare/JZBcut_at_"+any2string(jzbcut)+"/"+filename+"/"+filename+sRegions[iregion]+(ijzb?"neg":"pos"));
2857     delete datahisto;
2858     delete ccomp;
2859 fronga 1.40 delete lm3histo;
2860 buchmann 1.1 }
2861     cutWeight=weightbackup;
2862     }
2863    
2864    
2865     void region_comparison_plots(string mcjzb, string datajzb, vector<float> jzb_cuts) {
2866     dout << "Creating comparison plots for signal and control regions" << endl;
2867     // Compare a few quantities in the signal region and all 7 control regions
2868    
2869 buchmann 1.33 // switch_overunderflow(true); // switching overflow/underflow bins on
2870 buchmann 1.1
2871 buchmann 1.65 switch_overunderflow(true);
2872 buchmann 1.1 flag_this_change(__FUNCTION__,__LINE__,true);//PlottingSetup::RestrictToMassPeak ---- the arguments changed
2873 buchmann 1.16 for(int ijzb=0;ijzb<(int)jzb_cuts.size();ijzb++) {
2874 buchmann 1.1 float jzbcut=jzb_cuts[ijzb]; // Comparison plots are done for this JZB cut
2875     float mll_low=50;float mll_high=170;
2876     if(!PlottingSetup::RestrictToMassPeak) {
2877 fronga 1.40 mll_high=300;
2878     mll_low=20;
2879 buchmann 1.1 }
2880 fronga 1.40 make_comp_plot("pfJetGoodPt[0]/pfJetGoodPt[1]","pt_{j}^{1}/pt_{j}^{2}","j1j2ratio",jzbcut,mcjzb,datajzb,100,0,10,true);
2881     make_comp_plot("TMath::Abs(pfJetDphiMet[0])","|#Delta#phi(jet1,MET)|","dphiJ1MET",jzbcut,mcjzb,datajzb,32,0,3.2,false,0,0,true);
2882    
2883     make_comp_plot("mll","m_{ll} [GeV]","mll",jzbcut,mcjzb,datajzb,56,mll_low,mll_high,false,0,16.);
2884 buchmann 1.91 make_comp_plot("met[4]","E_{T}^{miss} [GeV]","pfmet",jzbcut,mcjzb,datajzb,18,0,360,false,0,16.);
2885 fronga 1.40 make_comp_plot("pfJetGoodNum40","#(jets)","njets",jzbcut,mcjzb,datajzb,10,0,10, false,0,35.);
2886     make_comp_plot("pfJetGoodNumBtag","#(b-jets)","nBjets",jzbcut,mcjzb,datajzb,10,0,10, false,0,35.);
2887 buchmann 1.1 make_comp_plot("pt","Z p_{T} [GeV]","Zpt",jzbcut,mcjzb,datajzb,26,0,525,false,0.,21.);
2888 fronga 1.40 make_comp_plot("numVtx","#(prim. vertices)","nvtx",jzbcut,mcjzb,datajzb,40,0.,40.,false,0,16.);
2889 buchmann 1.1 make_comp_plot("TMath::Abs(dphi)","#Delta#phi(leptons)","dphilep",jzbcut,mcjzb,datajzb,10,0.,3.1415,false,0,16.,true);
2890     make_comp_plot("TMath::Abs(dphi_sumJetVSZ[1])","#Delta#phi(Z,jets)","dphiZjets",jzbcut,mcjzb,datajzb,10,0.,3.1415,false,0,16.,true);
2891 fronga 1.40 make_comp_plot("eta1","#eta_1","eta1",jzbcut,mcjzb,datajzb,10,0.,2.5,false,0,16.);
2892     make_comp_plot("eta2","#eta_2","eta2",jzbcut,mcjzb,datajzb,10,0.,2.5,false,0,16.);
2893 buchmann 1.1 }
2894    
2895     switch_overunderflow(false); // switching overflow/underflow bins off
2896     }
2897    
2898    
2899    
2900     void do_kinematic_PF_plots(string mcjzb, string datajzb)
2901     {
2902     do_kinematic_plots(mcjzb,datajzb,true);
2903     }
2904    
2905     void signal_bg_comparison()
2906     {
2907     TCanvas *can = new TCanvas("can","Signal Background Comparison Canvas");
2908     can->SetLogy(1);
2909    
2910     int sbg_nbins=130;
2911     float sbg_min=-500; //-110;
2912     float sbg_max=800; //jzbHigh;
2913    
2914     float simulatedlumi=luminosity;//in pb please - adjust to your likings
2915    
2916 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"));
2917 buchmann 1.7 TH1F *JZBplotLM4;
2918     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"));
2919     else JZBplotLM4 = allsamples.Draw("JZBplotLM4",jzbvariablemc,sbg_nbins,sbg_min,sbg_max, "JZB [GeV]", "events",cutmass&&cutOSSF&&cutnJets,mc,simulatedlumi,allsamples.FindSample("LM3"));
2920 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_"));
2921 buchmann 1.1
2922     JZBplotTtbar->SetLineColor(allsamples.GetColor("TTJet"));
2923     JZBplotZJETs->SetFillColor(allsamples.GetColor("DY"));
2924     JZBplotZJETs->SetLineColor(kBlack);
2925     JZBplotLM4->SetLineStyle(2);
2926     JZBplotZJETs->SetMaximum(JZBplotZJETs->GetMaximum()*5);
2927     JZBplotZJETs->SetMinimum(1);
2928    
2929     JZBplotTtbar->SetMaximum(JZBplotZJETs->GetMaximum());
2930     JZBplotTtbar->SetMinimum(0.01);
2931 buchmann 1.94 JZBplotTtbar->SetFillColor(allsamples.GetColor("TT_"));
2932 buchmann 1.1 JZBplotTtbar->DrawClone("histo");
2933     JZBplotZJETs->Draw("histo,same");
2934     JZBplotTtbar->SetFillColor(0);
2935     JZBplotTtbar->DrawClone("histo,same");
2936 buchmann 1.94 JZBplotTtbar->SetFillColor(allsamples.GetColor("TT_"));
2937 buchmann 1.1 JZBplotLM4->Draw("histo,same");
2938    
2939    
2940     TLegend *signal_bg_comparison_leg2 = make_legend("",0.55,0.75,false);
2941     signal_bg_comparison_leg2->AddEntry(JZBplotZJETs,"Z+Jets","f");
2942     signal_bg_comparison_leg2->AddEntry(JZBplotTtbar,"t#bar{t}","f");
2943 buchmann 1.7 if(PlottingSetup::RestrictToMassPeak) signal_bg_comparison_leg2->AddEntry(JZBplotLM4,"LM4","f");
2944     else signal_bg_comparison_leg2->AddEntry(JZBplotLM4,"LM3","f");
2945 buchmann 1.1 signal_bg_comparison_leg2->Draw();
2946     DrawMCPrelim(simulatedlumi);
2947     CompleteSave(can,"jzb_bg_vs_signal_distribution");
2948    
2949     // Define illustrative set of SMS points
2950     TCut kSMS1("MassGlu==250&&MassLSP==75");
2951     TCut kSMS2("MassGlu==800&&MassLSP==200");
2952     TCut kSMS3("MassGlu==1050&&MassLSP==850");
2953     TCut kSMS4("MassGlu==1200&&MassLSP==100");
2954    
2955     //If the scan samples haven't been loaded yet, this is a good point to load them (all of them!)
2956     if((scansample.collection).size()<2) define_SMS_sample(false, allsamples, signalsamples, scansample, true); // loading ALL zones for the scans, not only the basic one.
2957    
2958    
2959     TH1F *JZBplotSMS1 = scansample.Draw("JZBplotSMS1",jzbvariablemc,sbg_nbins,sbg_min,sbg_max, "JZB [GeV]", "events",cutmass&&cutOSSF&&cutnJets&&kSMS1,mc,simulatedlumi,scansample.FindSample("t"));
2960     JZBplotSMS1->Scale(JZBplotLM4->Integral()/JZBplotSMS1->Integral());
2961    
2962     TH1F *JZBplotSMS2 = scansample.Draw("JZBplotSMS2",jzbvariablemc,sbg_nbins,sbg_min,sbg_max, "JZB [GeV]", "events",cutmass&&cutOSSF&&cutnJets&&kSMS2,mc,simulatedlumi,scansample.FindSample("t"));
2963     JZBplotSMS2->Scale(JZBplotLM4->Integral()/JZBplotSMS2->Integral());
2964    
2965     TH1F *JZBplotSMS3 = scansample.Draw("JZBplotSMS3",jzbvariablemc,sbg_nbins,sbg_min,sbg_max, "JZB [GeV]", "events",cutmass&&cutOSSF&&cutnJets&&kSMS3,mc,simulatedlumi,scansample.FindSample("t"));
2966     JZBplotSMS3->Scale(JZBplotLM4->Integral()/JZBplotSMS3->Integral());
2967    
2968     TH1F *JZBplotSMS4 = scansample.Draw("JZBplotSMS4",jzbvariablemc,sbg_nbins,sbg_min,sbg_max, "JZB [GeV]", "events",cutmass&&cutOSSF&&cutnJets&&kSMS4,mc,simulatedlumi,scansample.FindSample("t"));
2969     JZBplotSMS4->Scale(JZBplotLM4->Integral()/JZBplotSMS4->Integral());
2970    
2971     // Draw all plots overlaid
2972     JZBplotTtbar->SetMaximum(JZBplotZJETs->GetMaximum());
2973     JZBplotTtbar->SetMinimum(0.01);
2974 buchmann 1.94 JZBplotTtbar->SetFillColor(allsamples.GetColor("TT_"));
2975 buchmann 1.1 JZBplotTtbar->DrawClone("histo");
2976     JZBplotZJETs->Draw("histo,same");
2977     JZBplotTtbar->SetFillColor(0);
2978     JZBplotTtbar->DrawClone("histo,same");
2979 buchmann 1.94 JZBplotTtbar->SetFillColor(allsamples.GetColor("TT_"));
2980 buchmann 1.1
2981     JZBplotSMS1->SetLineColor(kRed+1);
2982     JZBplotSMS2->SetLineColor(kBlue+1);
2983     JZBplotSMS3->SetLineColor(kRed+1);
2984     JZBplotSMS4->SetLineColor(kBlue+1);
2985     JZBplotSMS3->SetLineStyle(2);
2986     JZBplotSMS4->SetLineStyle(2);
2987    
2988     JZBplotSMS1->Draw("histo,same");
2989     JZBplotSMS2->Draw("histo,same");
2990     JZBplotSMS3->Draw("histo,same");
2991     JZBplotSMS4->Draw("histo,same");
2992     JZBplotLM4->SetLineColor(kGreen);JZBplotLM4->Draw("histo,same");
2993     TLegend *signal_bg_comparison_leg6 = make_legend("",0.55,0.55,false);
2994     signal_bg_comparison_leg6->AddEntry(JZBplotZJETs,"Z+Jets","f");
2995     signal_bg_comparison_leg6->AddEntry(JZBplotTtbar,"t#bar{t}","f");
2996     signal_bg_comparison_leg6->AddEntry(JZBplotSMS1,"","");
2997     signal_bg_comparison_leg6->AddEntry(JZBplotSMS1,"SMS parameters","");
2998     signal_bg_comparison_leg6->AddEntry(JZBplotSMS1,"(250,75) [GeV]","f");
2999     signal_bg_comparison_leg6->AddEntry(JZBplotSMS2,"(800,200) [GeV]","f");
3000     signal_bg_comparison_leg6->AddEntry(JZBplotSMS3,"(1050,850) [GeV]","f");
3001     signal_bg_comparison_leg6->AddEntry(JZBplotSMS4,"(1200,100) [GeV]","f");
3002     signal_bg_comparison_leg6->AddEntry(JZBplotLM4,"LM4","f");
3003     signal_bg_comparison_leg6->Draw();
3004     DrawMCPrelim(simulatedlumi);
3005     CompleteSave(can,"jzb_bg_vs_signal_distribution_SMS__summary");
3006    
3007     while((scansample.collection).size() > 1) scansample.RemoveLastSample();
3008    
3009     }
3010    
3011     vector<TF1*> do_cb_fit_to_plot(TH1F *histo, float Sigma, float doingfitacrosstheboard=false) {
3012     TF1 *BpredFunc = new TF1("BpredFunc",InvCrystalBall,0,1000,5);
3013     BpredFunc->SetParameter(0,histo->GetBinContent(1));
3014     if(doingfitacrosstheboard) BpredFunc->SetParameter(0,histo->GetMaximum());
3015     BpredFunc->SetParameter(1,0.);
3016     if(method==1) BpredFunc->SetParameter(2,10*Sigma);//KM
3017     else BpredFunc->SetParameter(2,Sigma);//Gaussian based methods
3018     if(method==-99) BpredFunc->SetParameter(2,2.0*Sigma);//Kostas
3019     BpredFunc->SetParameter(3,1.8);
3020     BpredFunc->SetParameter(4,2.5);
3021     histo->Fit(BpredFunc,"QN0");
3022     BpredFunc->SetLineColor(kBlue);
3023    
3024     TF1 *BpredFuncP = new TF1("BpredFuncP",InvCrystalBallP,-1000,histo->GetBinLowEdge(histo->GetNbinsX())+histo->GetBinWidth(histo->GetNbinsX()),5);
3025     TF1 *BpredFuncN = new TF1("BpredFuncN",InvCrystalBallN,-1000,histo->GetBinLowEdge(histo->GetNbinsX())+histo->GetBinWidth(histo->GetNbinsX()),5);
3026    
3027     BpredFuncP->SetParameters(BpredFunc->GetParameters());
3028     BpredFuncP->SetLineColor(kBlue);
3029     BpredFuncP->SetLineStyle(2);
3030    
3031     BpredFuncN->SetParameters(BpredFunc->GetParameters());
3032     BpredFuncN->SetLineColor(kBlue);
3033     BpredFuncN->SetLineStyle(2);
3034    
3035     vector<TF1*> functions;
3036     functions.push_back(BpredFuncN);
3037     functions.push_back(BpredFunc);
3038     functions.push_back(BpredFuncP);
3039     return functions;
3040     }
3041    
3042    
3043     TF1* do_logpar_fit_to_plot(TH1F *osof) {
3044     TCanvas *logpar_fit_can = new TCanvas("logpar_fit_can","Fit canvas for LogPar");
3045     TF1 *logparfunc = new TF1("logparfunc",LogParabola,0,300,3);
3046     TF1 *logparfunc2 = new TF1("logparfunc2",LogParabola,0,(osof->GetXaxis()->GetBinLowEdge(osof->GetNbinsX())+osof->GetXaxis()->GetBinWidth(osof->GetNbinsX())),3);
3047     TF1 *logparfuncN = new TF1("logparfuncN",LogParabolaN,0,(osof->GetXaxis()->GetBinLowEdge(osof->GetNbinsX())+osof->GetXaxis()->GetBinWidth(osof->GetNbinsX())),3);
3048     TF1 *logparfuncP = new TF1("logparfuncP",LogParabolaP,0,(osof->GetXaxis()->GetBinLowEdge(osof->GetNbinsX())+osof->GetXaxis()->GetBinWidth(osof->GetNbinsX())),3);
3049     osof->SetMinimum(0);
3050     osof->Fit(logparfunc,"QR");
3051     osof->Draw();
3052     logparfunc->SetLineWidth(2);
3053     logparfunc2->SetParameters(logparfunc->GetParameters());
3054     logparfuncN->SetParameters(logparfunc->GetParameters());
3055     logparfuncP->SetParameters(logparfunc->GetParameters());
3056     stringstream fitinfo;
3057     fitinfo << "#Chi^{2} / NDF : " << logparfunc->GetChisquare() << " / " << logparfunc->GetNDF();
3058     TText *writefitinfo = write_text(0.8,0.8,fitinfo.str());
3059     writefitinfo->SetTextSize(0.03);
3060     DrawPrelim();
3061     writefitinfo->Draw();
3062     logparfunc->Draw("same");
3063     logparfunc2->Draw("same");
3064     logparfuncN->SetLineStyle(2);
3065     logparfuncP->SetLineStyle(2);
3066     logparfuncN->Draw("same");
3067     logparfuncP->Draw("same");
3068     CompleteSave(logpar_fit_can,"MakingOfBpredFunction/Bpred_Data_LogPar_Fit_To_TTbarPred");
3069     delete logpar_fit_can;
3070     return logparfunc2;
3071     }
3072    
3073     vector<TF1*> do_extended_fit_to_plot(TH1F *prediction, TH1F *Tprediction, TH1F *ossf, TH1F *osof,int isdata) {
3074     /* there are mainly two background contributions: Z+Jets (a) and ttbar (b). So:
3075     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.
3076     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.
3077     Once we have these two components, we use the combined parameters to get the final function and we're done.
3078     */
3079     //Step 1: take the OSSF prediction - OSOF prediction, and fit a crystal ball function to it
3080     TH1F *step1cb = (TH1F*)ossf->Clone("step1cb");
3081     step1cb->Add(osof,-1);
3082     vector<TF1*> functions = do_cb_fit_to_plot(step1cb,PlottingSetup::JZBPeakWidthData);
3083     TF1 *zjetscrystalball = functions[1];
3084    
3085     //Step 2: use the OSOF distribution and look at the [10,100] GeV JZB range, and fit our log parabola
3086     // TH1F *ttbarprediction=(TH1F*)prediction->Clone("ttbarprediction");
3087     // ttbarprediction->Add(ossf,-1);//without the Z+Jets estimate, this is really just the ttbar estimate!
3088     // 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)
3089     TF1 *ttbarlogpar = do_logpar_fit_to_plot(Tprediction);
3090     flag_this_change(__FUNCTION__,__LINE__,true);//PlottingSetup::RestrictToMassPeak
3091 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);
3092 buchmann 1.1
3093    
3094     TF1 *ttbarlogparP = new TF1("ttbarlogparP",LogParabolaP,0,(prediction->GetXaxis()->GetBinLowEdge(prediction->GetNbinsX())+prediction->GetXaxis()->GetBinWidth(prediction->GetNbinsX())),8);
3095     TF1 *ttbarlogparN = new TF1("ttbarlogparN",LogParabolaN,0,(prediction->GetXaxis()->GetBinLowEdge(prediction->GetNbinsX())+prediction->GetXaxis()->GetBinWidth(prediction->GetNbinsX())),8);
3096    
3097     //and now fuse the two!
3098     TF1 *kmlp = new TF1("kmlp", CrystalBallPlusLogParabola, 0,(prediction->GetXaxis()->GetBinLowEdge(prediction->GetNbinsX())+prediction->GetXaxis()->GetBinWidth(prediction->GetNbinsX())),8);
3099     TF1 *kmlpP= new TF1("kmlpP",CrystalBallPlusLogParabolaP,0,(prediction->GetXaxis()->GetBinLowEdge(prediction->GetNbinsX())+prediction->GetXaxis()->GetBinWidth(prediction->GetNbinsX())),8);
3100     TF1 *kmlpN= new TF1("kmlpN",CrystalBallPlusLogParabolaN,0,(prediction->GetXaxis()->GetBinLowEdge(prediction->GetNbinsX())+prediction->GetXaxis()->GetBinWidth(prediction->GetNbinsX())),8);
3101     double kmlp_pars[10];
3102     for(int i=0;i<5;i++) kmlp_pars[i]=zjetscrystalball->GetParameter(i);
3103     for(int i=0;i<3;i++) kmlp_pars[5+i]=ttbarlogpar->GetParameter(i);
3104     ttbarlogparP->SetParameters(ttbarlogpar->GetParameters());
3105     ttbarlogparN->SetParameters(ttbarlogpar->GetParameters());
3106     kmlp->SetParameters(kmlp_pars);
3107     prediction->Fit(kmlp,"Q");//fitting the final result (done this in the past but kicked it)
3108     /*
3109     if you want to start from scratch (without the partial fitting and only fitting the whole thing, some good start values could be :
3110     */
3111     kmlp_pars[0]=kmlp->GetParameter(0);
3112     kmlp_pars[1]=3.6198;
3113     kmlp_pars[2]=16.4664;
3114     kmlp_pars[3]=1.92253;
3115     kmlp_pars[4]=3.56099;
3116     kmlp_pars[5]=5.83;
3117     kmlp_pars[6]=0.000757479;
3118     kmlp_pars[7]=95.6157;
3119     kmlp_pars[8]=0;
3120     kmlp_pars[9]=0;
3121     kmlp->SetParameters(kmlp_pars);
3122     /**/
3123     prediction->Fit(kmlp,"Q");//fitting the final result (done this in the past but kicked it)
3124    
3125     kmlpP->SetParameters(kmlp->GetParameters());
3126     kmlpN->SetParameters(kmlp->GetParameters());
3127    
3128     // now that we're done, let's save all of this so we can have a look at it afterwards.
3129     TCanvas *can = new TCanvas("can","Prediction Fit Canvas");
3130     can->SetLogy(1);
3131     prediction->SetMarkerColor(kRed);
3132     prediction->Draw();
3133    
3134     kmlp->SetLineColor(TColor::GetColor("#04B404"));
3135     kmlpP->SetLineColor(TColor::GetColor("#04B404"));
3136     kmlpN->SetLineColor(TColor::GetColor("#04B404"));
3137     kmlp->Draw("same");
3138     kmlpN->SetLineStyle(2);
3139     kmlpP->SetLineStyle(2);
3140     kmlpN->Draw("same");
3141     kmlpP->Draw("same");
3142    
3143     ttbarlogpar->SetLineColor(TColor::GetColor("#CC2EFA"));//purple
3144     ttbarlogpar->Draw("same");
3145     ttbarlogparP->SetLineColor(TColor::GetColor("#CC2EFA"));//purple
3146     ttbarlogparN->SetLineColor(TColor::GetColor("#CC2EFA"));//purple
3147     ttbarlogparP->SetLineStyle(2);
3148     ttbarlogparN->SetLineStyle(2);
3149     ttbarlogparP->Draw("same");
3150     ttbarlogparN->Draw("same");
3151    
3152     functions[0]->Draw("same");functions[1]->Draw("same");functions[2]->Draw("same");
3153    
3154     TLegend *analyticalBpredLEG = make_legend("",0.5,0.55);
3155     analyticalBpredLEG->AddEntry(prediction,"predicted","p");
3156     analyticalBpredLEG->AddEntry(functions[1],"Crystal Ball fit","l");
3157     analyticalBpredLEG->AddEntry(functions[0],"1#sigma Crystal Ball fit","l");
3158     analyticalBpredLEG->AddEntry(ttbarlogparN,"TTbar fit","l");
3159     analyticalBpredLEG->AddEntry(ttbarlogpar,"1#sigma TTbar fit","l");
3160     analyticalBpredLEG->AddEntry(kmlp,"Combined function","l");
3161     analyticalBpredLEG->AddEntry(kmlpN,"1#sigma combined function","l");
3162     analyticalBpredLEG->Draw("same");
3163    
3164     if(isdata==0) CompleteSave(can,"MakingOfBpredFunction/Bpred_MC_Analytical_Function_Composition");
3165     if(isdata==1) CompleteSave(can,"MakingOfBpredFunction/Bpred_data_Analytical_Function_Composition");
3166     if(isdata==2) CompleteSave(can,"MakingOfBpredFunction/Bpred_MCBnS_Analytical_Function_Composition");
3167     delete can;
3168    
3169     //and finally: prep return functions
3170     vector<TF1*> return_functions;
3171     return_functions.push_back(kmlpN);
3172     return_functions.push_back(kmlp);
3173     return_functions.push_back(kmlpP);
3174    
3175     return_functions.push_back(ttbarlogparN);
3176     return_functions.push_back(ttbarlogpar);
3177     return_functions.push_back(ttbarlogparP);
3178    
3179     return_functions.push_back(functions[0]);
3180     return_functions.push_back(functions[1]);
3181     return_functions.push_back(functions[2]);
3182    
3183     return return_functions;
3184     }
3185    
3186 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="" )
3187 buchmann 1.1 {
3188 buchmann 1.65
3189 buchmann 1.1 bool is_data=false;
3190     bool use_signal=false;
3191     if(use_data==1) is_data=true;
3192     if(use_data==2) use_signal=true;
3193 buchmann 1.65 int nbins=int(high/10);//100;
3194     if(is_data) nbins=int(high/10);
3195 buchmann 1.1 float low=0;
3196 buchmann 1.65 float hi=high;
3197    
3198     stringstream cutpositiveS;
3199     cutpositiveS << "(" << jzb << ">0)";
3200     TCut cutpositive(cutpositiveS.str().c_str());
3201     stringstream cutnegativeS;
3202     cutnegativeS << "(" << jzb << "<0)";
3203     TCut cutnegative(cutnegativeS.str().c_str());
3204    
3205 buchmann 1.10
3206 buchmann 1.1 TH1F *blankback = new TH1F("blankback","blankback",int(high/10),0,high);
3207 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);
3208     TH1F *LcorrJZBeemm = allsamples.Draw("LcorrJZBeemm",("-"+jzb).c_str(),nbins,low,hi, "JZB [GeV]", "events", addcut&&cutnegative&&cutmass&&cutOSSF&&cutnJets,is_data, luminosity,use_signal);
3209     TH1F *RcorrJZBem = allsamples.Draw("RcorrJZBem",jzb.c_str(),nbins,low,hi, "JZB [GeV]", "events", addcut&&cutpositive&&cutmass&&cutOSOF&&cutnJets,is_data, luminosity,use_signal);
3210     TH1F *LcorrJZBem = allsamples.Draw("LcorrJZBem",("-"+jzb).c_str(),nbins,low,hi, "JZB [GeV]", "events", addcut&&cutnegative&&cutmass&&cutOSOF&&cutnJets,is_data, luminosity,use_signal);
3211 buchmann 1.10
3212 buchmann 1.1 blankback->GetXaxis()->SetTitle(RcorrJZBeemm->GetXaxis()->GetTitle());
3213     blankback->GetYaxis()->SetTitle(RcorrJZBeemm->GetYaxis()->GetTitle());
3214     blankback->GetXaxis()->CenterTitle();
3215     blankback->GetYaxis()->CenterTitle();
3216    
3217     flag_this_change(__FUNCTION__,__LINE__,true);//PlottingSetup::RestrictToMassPeak ---- prediction changed.
3218     TH1F *RcorrJZBSBem;
3219     TH1F *LcorrJZBSBem;
3220     TH1F *RcorrJZBSBeemm;
3221     TH1F *LcorrJZBSBeemm;
3222    
3223     TH1F *RcorrJZBeemmNoS;
3224    
3225 buchmann 1.65 //these are for the ratio
3226 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);
3227     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);
3228     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);
3229     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);
3230 buchmann 1.1
3231     TH1F *JRcorrJZBSBem;
3232     TH1F *JLcorrJZBSBem;
3233     TH1F *JRcorrJZBSBeemm;
3234     TH1F *JLcorrJZBSBeemm;
3235    
3236 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);
3237 buchmann 1.1
3238    
3239 buchmann 1.50 if(PlottingSetup::RestrictToMassPeak&&PlottingSetup::UseSidebandsForcJZB) {
3240 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);
3241     LcorrJZBSBem = allsamples.Draw("LcorrJZBSBem",("-"+jzb).c_str(),nbins,low,hi, "JZB [GeV]", "events", addcut&&cutnegative&&sidebandcut&&cutOSOF&&cutnJets,is_data, luminosity,use_signal);
3242     RcorrJZBSBeemm = allsamples.Draw("RcorrJZBSBeemm",jzb.c_str(),nbins,low,hi, "JZB [GeV]", "events", addcut&&cutpositive&&sidebandcut&&cutOSSF&&cutnJets,is_data, luminosity,use_signal);
3243     LcorrJZBSBeemm = allsamples.Draw("LcorrJZBSBeemm",("-"+jzb).c_str(),nbins,low,hi, "JZB [GeV]", "events", addcut&&cutnegative&&sidebandcut&&cutOSSF&&cutnJets,is_data, luminosity,use_signal);
3244 buchmann 1.10
3245 buchmann 1.1 //these are for the ratio
3246 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);
3247     JLcorrJZBSBem = allsamples.Draw("JLcorrJZBSBem",("-"+jzb).c_str(),PlottingSetup::global_ratio_binning, "JZB [GeV]", "events", addcut&&cutnegative&&sidebandcut&&cutOSOF&&cutnJets,is_data, luminosity,use_signal);
3248     JRcorrJZBSBeemm = allsamples.Draw("JRcorrJZBSBeemm",jzb.c_str(),PlottingSetup::global_ratio_binning, "JZB [GeV]", "events", addcut&&cutpositive&&sidebandcut&&cutOSSF&&cutnJets,is_data, luminosity,use_signal);
3249     JLcorrJZBSBeemm = allsamples.Draw("JLcorrJZBSBeemm",("-"+jzb).c_str(),PlottingSetup::global_ratio_binning, "JZB [GeV]", "events", addcut&&cutnegative&&sidebandcut&&cutOSSF&&cutnJets,is_data, luminosity,use_signal);
3250 buchmann 1.1 }
3251    
3252     TH1F *lm4RcorrJZBeemm;
3253 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"));
3254 buchmann 1.1
3255     flag_this_change(__FUNCTION__,__LINE__,true);//PlottingSetup::RestrictToMassPeak ---- prediction changed.
3256    
3257     TH1F *Zjetspred = (TH1F*)LcorrJZBeemm->Clone("Zjetspred");
3258     TH1F *TTbarpred = (TH1F*)RcorrJZBem->Clone("TTbarpred");
3259    
3260     TH1F *Bpred = (TH1F*)LcorrJZBeemm->Clone("Bpred");
3261     TH1F *JBpred = (TH1F*)JLcorrJZBeemm->Clone("Bpred");
3262 buchmann 1.23
3263 buchmann 1.26 TH1F *BpredSys = new TH1F("Bpredsys","Bpredsys",PlottingSetup::global_ratio_binning.size()-1,&PlottingSetup::global_ratio_binning[0]);
3264 buchmann 1.23 ClearHisto(BpredSys);
3265    
3266 buchmann 1.50 if(PlottingSetup::RestrictToMassPeak&&PlottingSetup::UseSidebandsForcJZB) {
3267 buchmann 1.1 Bpred->Add(RcorrJZBem,1.0/3.);
3268     Bpred->Add(LcorrJZBem,-1.0/3.);
3269     Bpred->Add(RcorrJZBSBem,1.0/3.);
3270     Bpred->Add(LcorrJZBSBem,-1.0/3.);
3271     Bpred->Add(RcorrJZBSBeemm,1.0/3.);
3272     Bpred->Add(LcorrJZBSBeemm,-1.0/3.);
3273    
3274     TTbarpred->Scale(1.0/3);
3275     Zjetspred->Add(LcorrJZBem,-1.0/3.);
3276     Zjetspred->Add(LcorrJZBSBem,-1.0/3.);
3277     TTbarpred->Add(RcorrJZBSBem,1.0/3.);
3278     Zjetspred->Add(LcorrJZBSBeemm,-1.0/3.);
3279     TTbarpred->Add(RcorrJZBSBeemm,1.0/3.);
3280    
3281     //these are for the ratio
3282     JBpred->Add(JRcorrJZBem,1.0/3.);
3283     JBpred->Add(JLcorrJZBem,-1.0/3.);
3284     JBpred->Add(JRcorrJZBSBem,1.0/3.);
3285     JBpred->Add(JLcorrJZBSBem,-1.0/3.);
3286     JBpred->Add(JRcorrJZBSBeemm,1.0/3.);
3287     JBpred->Add(JLcorrJZBSBeemm,-1.0/3.);
3288 buchmann 1.23
3289     //Systematics:
3290 buchmann 1.26 AddSquared(BpredSys,JLcorrJZBeemm,zjetsestimateuncertONPEAK*zjetsestimateuncertONPEAK);
3291     AddSquared(BpredSys,JRcorrJZBem,emuncertONPEAK*emuncertONPEAK*(1.0/9));
3292     AddSquared(BpredSys,JLcorrJZBem,emuncertONPEAK*emuncertONPEAK*(1.0/9));
3293     AddSquared(BpredSys,JRcorrJZBSBem,emsidebanduncertONPEAK*emsidebanduncertONPEAK*(1.0/9));
3294     AddSquared(BpredSys,JLcorrJZBSBem,emsidebanduncertONPEAK*emsidebanduncertONPEAK*(1.0/9));
3295     AddSquared(BpredSys,JRcorrJZBSBeemm,eemmsidebanduncertONPEAK*eemmsidebanduncertONPEAK*(1.0/9));
3296     AddSquared(BpredSys,JLcorrJZBSBeemm,eemmsidebanduncertONPEAK*eemmsidebanduncertONPEAK*(1.0/9));
3297 buchmann 1.1 } else {
3298     Bpred->Add(RcorrJZBem,1.0);
3299     Bpred->Add(LcorrJZBem,-1.0);
3300    
3301     Zjetspred->Add(LcorrJZBem,-1.0);
3302    
3303     //these are for the ratio
3304     JBpred->Add(JRcorrJZBem,1.0);
3305     JBpred->Add(JLcorrJZBem,-1.0);
3306 buchmann 1.23
3307     //Systematics
3308 buchmann 1.26 AddSquared(BpredSys,JLcorrJZBeemm,zjetsestimateuncertOFFPEAK*zjetsestimateuncertOFFPEAK);
3309     AddSquared(BpredSys,JRcorrJZBem,emuncertOFFPEAK*emuncertOFFPEAK);
3310     AddSquared(BpredSys,JLcorrJZBem,emuncertOFFPEAK*emuncertOFFPEAK);
3311 buchmann 1.23
3312 buchmann 1.1 }
3313    
3314 buchmann 1.23 SQRT(BpredSys);
3315 buchmann 1.26 BpredSys->Divide(JBpred);
3316 buchmann 1.23
3317 buchmann 1.1 flag_this_change(__FUNCTION__,__LINE__,true);//PlottingSetup::RestrictToMassPeak ---- prediction changed
3318     TH1F *Tpred = (TH1F*)RcorrJZBem->Clone("Bpred");
3319     Tpred->Add(LcorrJZBem,-1.0);
3320 buchmann 1.50 if(PlottingSetup::RestrictToMassPeak&&PlottingSetup::UseSidebandsForcJZB) {
3321 buchmann 1.1 Tpred->Add(RcorrJZBSBem,1.0);
3322     Tpred->Add(LcorrJZBSBem,-1.0);
3323     Tpred->Add(RcorrJZBSBeemm,1.0);
3324     Tpred->Add(LcorrJZBSBeemm,-1.0);
3325     }
3326    
3327     globalcanvas->cd();
3328     globalcanvas->SetLogy(1);
3329    
3330     RcorrJZBeemm->SetMarkerStyle(20);
3331     RcorrJZBeemm->GetXaxis()->SetRangeUser(0,high);
3332     RcorrJZBeemm->SetMinimum(0.1);
3333    
3334     Bpred->SetLineColor(kRed);
3335     Bpred->SetStats(0);
3336    
3337     int versok=false;
3338     if(gROOT->GetVersionInt()>=53000) versok=true;
3339    
3340    
3341     if ( overlay_signal || use_data==2 ) lm4RcorrJZBeemm->SetLineColor(TColor::GetColor("#088A08"));
3342     RcorrJZBeemm->SetMarkerSize(DataMarkerSize);
3343    
3344     TLegend *legBpred = make_legend("",0.6,0.55);
3345     TLegend *legBpred2 = make_legend("",0.6,0.55);
3346    
3347    
3348     vector<TF1*> analytical_function;
3349     TPad *kinpad = new TPad("kinpad","kinpad",0,0,1,1);
3350     kinpad->cd();
3351     kinpad->SetLogy(1);
3352    
3353     string Bpredsaveas="Bpred_Data";
3354     blankback->SetMaximum(5*RcorrJZBeemm->GetMaximum());
3355     blankback->SetMinimum(0.1);
3356     if(use_data!=1) blankback->SetMinimum(0.1);
3357     blankback->Draw();
3358     if(use_data==1)
3359     {
3360 buchmann 1.14 //Bpred->SetLineWidth(3); //paper style.overruled.
3361     //lm4RcorrJZBeemm->SetLineWidth(3); //paper style.overruled.
3362 buchmann 1.1 analytical_function = do_extended_fit_to_plot(Bpred,Tpred,LcorrJZBeemm,LcorrJZBem,is_data);
3363     kinpad->cd();//necessary because the extended fit function creates its own canvas
3364     RcorrJZBeemm->Draw("e1x0,same");
3365    
3366     Bpred->Draw("hist,same");
3367 buchmann 1.14 //analytical_function[0]->Draw("same"); analytical_function[1]->Draw("same");analytical_function[2]->Draw("same");
3368 buchmann 1.1 RcorrJZBeemm->Draw("e1x0,same");//HAVE IT ON TOP!
3369 buchmann 1.66 //lm4RcorrJZBeemm->Draw("hist,same");
3370 buchmann 1.1 legBpred->AddEntry(RcorrJZBeemm,"observed","p");
3371     legBpred->AddEntry(Bpred,"predicted","l");
3372 buchmann 1.24 // legBpred->AddEntry(analytical_function[1],"predicted fit","l");
3373     // legBpred->AddEntry(analytical_function[2],"stat. uncert.","l");
3374 buchmann 1.66 // legBpred->AddEntry(lm4RcorrJZBeemm,(allsamples.collection[allsamples.FindSample("LM")[0]].samplename).c_str(),"l");
3375 buchmann 1.1 legBpred->Draw();
3376     DrawPrelim();
3377    
3378     //this plot shows what the prediction is composed of
3379 buchmann 1.10 TPad *predcomppad = new TPad("predcomppad","predcomppad",0,0,1,1);
3380     float CurrentBpredLineWidth=Bpred->GetLineWidth();
3381     Bpred->SetLineWidth(2);
3382     predcomppad->cd();
3383     predcomppad->SetLogy(1);
3384     TH1F *jzbnegative = (TH1F*)LcorrJZBeemm->Clone("jzbnegative");
3385     TH1F *sidebandsemu = (TH1F*)Bpred->Clone("sidebandsemu");
3386     sidebandsemu->Add(jzbnegative,-1);
3387    
3388     jzbnegative->SetFillColor(allsamples.GetColor((allsamples.FindSample("DY"))[0]));
3389     jzbnegative->SetLineColor(allsamples.GetColor((allsamples.FindSample("DY"))[0]));
3390 buchmann 1.94 sidebandsemu->SetLineColor(allsamples.GetColor((allsamples.FindSample("TT_"))[0]));
3391     sidebandsemu->SetFillColor(allsamples.GetColor((allsamples.FindSample("TT_"))[0]));
3392 buchmann 1.10
3393 buchmann 1.1 THStack predcomposition("predcomposition","prediction composition");
3394 buchmann 1.10 predcomposition.Add(sidebandsemu);
3395     predcomposition.Add(jzbnegative);
3396 buchmann 1.1 blankback->Draw();
3397     RcorrJZBeemm->Draw("e1x0,same");
3398     predcomposition.Draw("histo,same");//
3399     Bpred->Draw("hist,same");
3400 buchmann 1.10 // analytical_function[0]->Draw("same"); analytical_function[1]->Draw("same");analytical_function[2]->Draw("same");
3401 buchmann 1.1 RcorrJZBeemm->Draw("e1x0,same");//HAVE IT ON TOP!
3402 buchmann 1.14 // lm4RcorrJZBeemm->SetLineColor(kOrange+1);
3403 buchmann 1.10 lm4RcorrJZBeemm->SetLineWidth(2);
3404 buchmann 1.14 //lm4RcorrJZBeemm->SetLineWidth(2); // paper style. overruled.
3405 buchmann 1.66 // lm4RcorrJZBeemm->Draw("histo,same");
3406 buchmann 1.1 DrawPrelim();
3407 buchmann 1.10 TLegend *speciallegBpred = make_legend("",0.45,0.55);
3408 buchmann 1.14 //TLegend *speciallegBpred = make_legend("",0.35,0.55); // paper style. overruled.
3409 buchmann 1.10 speciallegBpred->AddEntry(RcorrJZBeemm,"Data","pl");
3410     speciallegBpred->AddEntry(Bpred,"Total background","l");
3411     speciallegBpred->AddEntry(jzbnegative,"JZB<0 (data)","f");
3412 buchmann 1.50 if(PlottingSetup::RestrictToMassPeak&&PlottingSetup::UseSidebandsForcJZB) speciallegBpred->AddEntry(sidebandsemu,"Sidebands/e#mu (data)","f");
3413 buchmann 1.30 else speciallegBpred->AddEntry(sidebandsemu,"e#mu (data)","f");
3414 buchmann 1.10 // speciallegBpred->AddEntry(lm4RcorrJZBeemmC,"LM4","l");
3415 buchmann 1.66 // speciallegBpred->AddEntry(lm4RcorrJZBeemm,"LM4","l");
3416 buchmann 1.10 speciallegBpred->Draw();
3417 buchmann 1.95 Save_With_Ratio(JRcorrJZBeemm,JBpred,predcomppad,subdir+"Bpred_Data_____PredictionComposition"+Cname,true,true,"data/pred",BpredSys);
3418 buchmann 1.79 delete predcomppad;
3419 buchmann 1.10
3420     TCanvas *specialcanv = new TCanvas("specialcanv","specialcanv");
3421 buchmann 1.30 specialcanv->SetLogy(1);
3422     // THStack kostack = allsamples.DrawStack("RcorrJZBeemm",jzb.c_str(),nbins,low,hi, "JZB [GeV]", "events", cutmass&&cutOSSF&&cutnJets,!is_data, luminosity,use_signal);
3423 buchmann 1.1 blankback->Draw();
3424 buchmann 1.30 // kostack.Draw("same");
3425 buchmann 1.73 predcomposition.Draw("hist");
3426 buchmann 1.1 Bpred->Draw("hist,same");
3427 buchmann 1.30 //analytical_function[0]->Draw("same"); analytical_function[1]->Draw("same");analytical_function[2]->Draw("same");
3428 buchmann 1.1 RcorrJZBeemm->Draw("e1x0,same");//HAVE IT ON TOP!
3429     legBpred->Draw();
3430     DrawPrelim();
3431 buchmann 1.12 CompleteSave(specialcanv,subdir+"Bpred_Data_____PredictionCompositioninMC");
3432 buchmann 1.10 Bpred->SetLineWidth((int)CurrentBpredLineWidth);
3433 buchmann 1.1
3434 buchmann 1.34
3435     //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;
3436    
3437 buchmann 1.10 delete speciallegBpred;
3438 buchmann 1.1 delete Zjetspred;
3439     delete TTbarpred;
3440    
3441     kinpad->cd();
3442     }
3443     if(use_data==0) {
3444     RcorrJZBeemm->Draw("e1x0,same");
3445 buchmann 1.14 //Bpred->SetLineWidth(3); // paper style. overruled.
3446 buchmann 1.1 Bpred->Draw("hist,same");
3447     RcorrJZBeemm->Draw("e1x0,same");//HAVE IT ON TOP!
3448 buchmann 1.10 legBpred->AddEntry(RcorrJZBeemm,"MC true","p");
3449 buchmann 1.18 legBpred->AddEntry(Bpred,"MC predicted","l");
3450 buchmann 1.1 if(versok) legBpred->AddEntry((TObject*)0,"",""); // Just for alignment // causes seg fault on root v5.18
3451     if(versok) legBpred->AddEntry((TObject*)0,"",""); // causes seg fault on root v5.18
3452 buchmann 1.66 // if ( overlay_signal ) legBpred->AddEntry(lm4RcorrJZBeemm,"LM4","l");
3453 buchmann 1.1 legBpred->Draw();
3454     DrawMCPrelim();
3455     Bpredsaveas="Bpred_MC";
3456     // CompleteSave(globalcanvas,"Bpred_MC"); // done below in save_with_ratio
3457     }
3458     if(use_data==2) {
3459     RcorrJZBeemm->Draw("e1x0,same");
3460 buchmann 1.14 //Bpred->SetLineWidth(3); // paper style. overruled.
3461 buchmann 1.1 Bpred->Draw("hist,same");
3462     RcorrJZBeemm->Draw("e1x0,same");//HAVE IT ON TOP!
3463 buchmann 1.10 legBpred->AddEntry(RcorrJZBeemm,"MC true","p");
3464 buchmann 1.1 legBpred->AddEntry(Bpred,"MC predicted","l");
3465 buchmann 1.10 legBpred2->AddEntry(RcorrJZBeemm,"MC true","p");
3466 buchmann 1.1 legBpred2->AddEntry(Bpred,"MC predicted","l");
3467     {
3468     if(versok) legBpred->AddEntry((TObject*)0,"",""); // Just for alignment // causes seg fault on root v5.18 --> now only allowed for root >=v5.30
3469     if(versok) legBpred->AddEntry((TObject*)0,"",""); // causes seg fault on root v5.18 --> now only allowed for root >=v5.30
3470     legBpred->Draw();
3471     DrawMCPrelim();
3472     Bpredsaveas="Bpred_MCwithS";
3473     // CompleteSave(globalcanvas,"Bpred_MCwithS"); // done below in save_with_ratio
3474     }
3475     {
3476 buchmann 1.14 //lm4RcorrJZBeemm->SetLineWidth(3); //paper style. overruled.
3477     //RcorrJZBeemmNoS->SetLineWidth(3); //paper style. overruled.
3478     //lm4RcorrJZBeemm->SetLineStyle(2); //paper style. overruled.
3479     //RcorrJZBeemmNoS->SetLineStyle(3); //paper style. overruled.
3480     //lm4RcorrJZBeemm->SetLineColor(kOrange+1); //paper style. overruled.
3481    
3482 buchmann 1.1 RcorrJZBeemmNoS->SetLineStyle(2);
3483     legBpred2->AddEntry(RcorrJZBeemmNoS,"MC B","l");
3484 buchmann 1.95 legBpred2->AddEntry(lm4RcorrJZBeemm,"MC S","l");
3485 buchmann 1.1 legBpred2->Draw();
3486     RcorrJZBeemmNoS->SetLineColor(TColor::GetColor("#61210B"));
3487     RcorrJZBeemmNoS->Draw("histo,same");
3488     RcorrJZBeemm->Draw("e1x0,same");//HAVE IT ON TOP!
3489     lm4RcorrJZBeemm->Draw("histo,same");
3490     DrawMCPrelim();
3491     Bpredsaveas="Bpred_MCwithS__plus";
3492     // CompleteSave(globalcanvas,"Bpred_MCwithS__plus"); // done below in save_with_ratio
3493     }
3494     }
3495    
3496    
3497 buchmann 1.93 Bpredsaveas+="_"+Cname+"_";
3498 buchmann 1.1 //3rd last argument: do special bpred ratio, 2nd last argument: extended range!, last: y-axis title
3499     string ytitle("ratio");
3500     if ( use_data==1 ) ytitle = "data/pred";
3501 buchmann 1.8 //save_with_ratio(JRcorrJZBeemm,JBpred,kinpad,Bpredsaveas,true,use_data!=1,ytitle);
3502 buchmann 1.79 Save_With_Ratio(JRcorrJZBeemm,JBpred,kinpad,subdir+Bpredsaveas,true,false,ytitle,BpredSys);//not extending the y range anymore up to 4
3503    
3504     delete kinpad;
3505 buchmann 1.1
3506 buchmann 1.65
3507 buchmann 1.1
3508     flag_this_change(__FUNCTION__,__LINE__,true);//PlottingSetup::RestrictToMassPeak
3509 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!)
3510 buchmann 1.50 if(PlottingSetup::RestrictToMassPeak&&PlottingSetup::UseSidebandsForcJZB) {
3511 buchmann 1.11 TH1F *Bpredem = (TH1F*)LcorrJZBeemm->Clone("Bpredem");
3512     Bpredem->Add(RcorrJZBem);
3513     Bpredem->Add(LcorrJZBem,-1);
3514     TH1F *BpredSBem = (TH1F*)LcorrJZBeemm->Clone("BpredSBem");
3515     BpredSBem->Add(RcorrJZBSBem);
3516     Bpred->Add(LcorrJZBSBem,-1);
3517     TH1F *BpredSBeemm = (TH1F*)LcorrJZBeemm->Clone("BpredSBeemm");
3518     BpredSBeemm->Add(RcorrJZBSBeemm);
3519     BpredSBeemm->Add(LcorrJZBSBeemm,-1.0);
3520     globalcanvas->cd();
3521     globalcanvas->SetLogy(1);
3522    
3523     RcorrJZBeemm->SetMarkerStyle(20);
3524     RcorrJZBeemm->GetXaxis()->SetRangeUser(0,high);
3525     blankback->Draw();
3526     RcorrJZBeemm->Draw("e1x0,same");
3527     RcorrJZBeemm->SetMarkerSize(DataMarkerSize);
3528    
3529     Bpredem->SetLineColor(kRed+1);
3530     Bpredem->SetStats(0);
3531     Bpredem->Draw("hist,same");
3532    
3533     BpredSBem->SetLineColor(kGreen+2);//TColor::GetColor("#0B6138"));
3534     BpredSBem->SetLineStyle(2);
3535     BpredSBem->Draw("hist,same");
3536    
3537     BpredSBeemm->SetLineColor(kBlue+1);
3538     BpredSBeemm->SetLineStyle(3);
3539     BpredSBeemm->Draw("hist,same");
3540     RcorrJZBeemm->Draw("e1x0,same");//HAVE IT ON TOP!
3541    
3542     TLegend *legBpredc = make_legend("",0.6,0.55);
3543     if(use_data==1)
3544     {
3545     legBpredc->AddEntry(RcorrJZBeemm,"observed","p");
3546 buchmann 1.94 if(RestrictToMassPeak) {
3547     legBpredc->AddEntry(Bpredem,"OFZP","l");
3548     legBpredc->AddEntry(BpredSBem,"OFSB","l");
3549     legBpredc->AddEntry(BpredSBeemm,"SFSB","l");
3550     } else legBpredc->AddEntry(Bpredem,"OF","l");
3551    
3552    
3553 buchmann 1.11 legBpredc->Draw();
3554 buchmann 1.12 CompleteSave(globalcanvas,subdir+"Bpred_Data_comparison");
3555 buchmann 1.11 }
3556     if(use_data==0) {
3557     legBpredc->AddEntry(RcorrJZBeemm,"MC true","p");
3558 buchmann 1.94 if(RestrictToMassPeak) {
3559     legBpredc->AddEntry(Bpredem,"MC OFZP","l");
3560     legBpredc->AddEntry(BpredSBem,"MC OFSB","l");
3561     legBpredc->AddEntry(BpredSBeemm,"MC SFSB","l");
3562     } else legBpredc->AddEntry(Bpredem,"MC OF","l");
3563    
3564 buchmann 1.11 legBpredc->Draw();
3565 buchmann 1.12 CompleteSave(globalcanvas,subdir+"Bpred_MC_comparison");
3566 buchmann 1.11 }
3567     if(use_data==2) {
3568     legBpredc->AddEntry(RcorrJZBeemm,"MC true","p");
3569 buchmann 1.94 if(RestrictToMassPeak) {
3570     legBpredc->AddEntry(Bpredem,"MC OFZP","l");
3571     legBpredc->AddEntry(BpredSBem,"MC OFSB","l");
3572     legBpredc->AddEntry(BpredSBeemm,"MC SFSB","l");
3573     } else {
3574     legBpredc->AddEntry(Bpredem,"MC OF","l");
3575     }
3576 buchmann 1.66 // if ( overlay_signal ) legBpred->AddEntry(lm4RcorrJZBeemm,"LM4","l");
3577 buchmann 1.11 legBpredc->Draw();
3578 buchmann 1.12 CompleteSave(globalcanvas,subdir+"Bpred_MCwithS_comparison");
3579 buchmann 1.11 }
3580     }
3581 buchmann 1.1
3582     delete RcorrJZBeemm;
3583     delete LcorrJZBeemm;
3584     delete RcorrJZBem;
3585     delete LcorrJZBem;
3586    
3587     delete JRcorrJZBeemm;
3588     delete JLcorrJZBeemm;
3589     delete JRcorrJZBem;
3590     delete JLcorrJZBem;
3591    
3592     delete blankback;
3593    
3594 buchmann 1.30 delete BpredSys;
3595 buchmann 1.50 if(PlottingSetup::RestrictToMassPeak&&PlottingSetup::UseSidebandsForcJZB) {
3596 buchmann 1.1 delete RcorrJZBSBem;
3597     delete LcorrJZBSBem;
3598     delete RcorrJZBSBeemm;
3599     delete LcorrJZBSBeemm;
3600    
3601     delete JRcorrJZBSBem;
3602     delete JLcorrJZBSBem;
3603     delete JRcorrJZBSBeemm;
3604     delete JLcorrJZBSBeemm;
3605     }
3606     if(overlay_signal || use_data==2) delete lm4RcorrJZBeemm;
3607     }
3608    
3609     void do_prediction_plots(string mcjzb, string datajzb, float DataSigma, float MCSigma, bool overlay_signal ) {
3610 buchmann 1.65 switch_overunderflow(true);
3611 buchmann 1.93
3612     TCut cuts[3] = {TCut("mll>0"),Restrmasscut,TCut("mll>20&&mll<70")};
3613     string cutnames[3] = {"NoMassCut","ZWindow","LowMassRegion2070"};
3614    
3615 buchmann 1.1 TCanvas *globalcanvas = new TCanvas("globalcanvas","Prediction Canvas");
3616 buchmann 1.93 for(int i=0;i<3;i++) {
3617     do_prediction_plot(cuts[i],cutnames[i],datajzb,globalcanvas,jzbHigh ,data,overlay_signal);
3618     if ( !PlottingSetup::Approved ) {
3619     do_prediction_plot(cuts[i],cutnames[i],mcjzb,globalcanvas,jzbHigh ,mc,overlay_signal);
3620     do_prediction_plot(cuts[i],cutnames[i],mcjzb,globalcanvas,jzbHigh ,mcwithsignal,overlay_signal);
3621     } else {
3622     write_info(__FUNCTION__,"You set approved to true, therefore not producing prediction/observation plots for MC with and without signal.");
3623     }
3624 buchmann 1.15 }
3625 buchmann 1.93
3626 buchmann 1.65 delete globalcanvas;
3627     switch_overunderflow(false);
3628 buchmann 1.1 }
3629    
3630     string give_jzb_expression(float peak, int type) {
3631     stringstream val;
3632     if(type==data) {
3633     if(peak<0) val << jzbvariabledata << "+" << TMath::Abs(peak);
3634     if(peak>0) val << jzbvariabledata << "-" << TMath::Abs(peak);
3635     if(peak==0) val << jzbvariabledata;
3636     }
3637     if(type==mc) {
3638     if(peak<0) val << jzbvariablemc << "+" << TMath::Abs(peak);
3639     if(peak>0) val << jzbvariablemc << "-" << TMath::Abs(peak);
3640     if(peak==0) val << jzbvariablemc;
3641     }
3642     return val.str();
3643     }
3644    
3645    
3646     void lepton_comparison_plots() {
3647     Float_t ymin = 1.e-5, ymax = 0.25;
3648     TCanvas *can = new TCanvas("can","Lepton Comparison Canvas");
3649     can->SetLogy(1);
3650 buchmann 1.95 TH1F *eemc = allsamples.Draw("eemc","mll",50,50,150, "mll [GeV]", "events", cutOSSF&&cutnJets&&"(id1==0)",mc, luminosity,allsamples.FindSample("DYJetsToLL"));
3651     TH1F *mmmc = allsamples.Draw("mmmc","mll",50,50,150, "mll [GeV]", "events", cutOSSF&&cutnJets&&"(id1==1)",mc, luminosity,allsamples.FindSample("DYJetsToLL"));
3652 buchmann 1.1 eemc->SetLineColor(kBlue);
3653     mmmc->SetLineColor(kRed);
3654     eemc->SetMinimum(0.1);
3655     eemc->SetMaximum(10*eemc->GetMaximum());
3656     eemc->Draw("histo");
3657     mmmc->Draw("histo,same");
3658     TLegend *leg = make_legend();
3659     leg->AddEntry(eemc,"ZJets->ee (MC)","l");
3660     leg->AddEntry(mmmc,"ZJets->#mu#mu (MC)","l");
3661     leg->Draw("same");
3662     CompleteSave(can, "lepton_comparison/mll_effratio_mc");
3663    
3664     TH1F *eed = allsamples.Draw("eed","mll",50,50,150, "mll [GeV]", "events", cutOSSF&&cutnJets&&"(id1==0)",data, luminosity);
3665     TH1F *mmd = allsamples.Draw("mmd","mll",50,50,150, "mll [GeV]", "events", cutOSSF&&cutnJets&&"(id1==1)",data, luminosity);
3666     eed->SetLineColor(kBlue);
3667     mmd->SetLineColor(kRed);
3668     eed->SetMinimum(0.1);
3669     eed->SetMaximum(10*eed->GetMaximum());
3670     eed->Draw("histo");
3671     mmd->Draw("histo,same");
3672     TLegend *leg2 = make_legend();
3673     leg2->AddEntry(eed,"ZJets->ee (data)","l");
3674     leg2->AddEntry(mmd,"ZJets->#mu#mu (data)","l");
3675     leg2->Draw();
3676     CompleteSave(can, "lepton_comparison/mll_effratio_data");
3677    
3678     TH1F *jeed = allsamples.Draw("jeed",jzbvariabledata, int((jzbHigh+150)/5),-150,jzbHigh , "JZB [GeV]", "events", cutOSSF&&cutnJets&&"(id1==0)",data, luminosity);
3679     TH1F *jmmd = allsamples.Draw("jmmd",jzbvariabledata, int((jzbHigh+150)/5),-150,jzbHigh , "JZB [GeV]", "events", cutOSSF&&cutnJets&&"(id1==1)",data, luminosity);
3680     TH1F *jeemmd = allsamples.Draw("jeemmd",jzbvariabledata,int((jzbHigh+150)/5),-150,jzbHigh , "JZB [GeV]", "events", cutOSSF&&cutnJets,data, luminosity);
3681     dout << "ee : " << jeed->GetMean() << "+/-" << jeed->GetMeanError() << endl;
3682     dout << "ee : " << jmmd->GetMean() << "+/-" << jmmd->GetMeanError() << endl;
3683     dout << "eemd : " << jeemmd->GetMean() << "+/-" << jeemmd->GetMeanError() << endl;
3684     jeemmd->SetLineColor(kBlack);
3685     jeemmd->SetMarkerStyle(25);
3686     jeed->SetLineColor(kBlue);
3687     jmmd->SetLineColor(kRed);
3688     jeed->SetMinimum(0.1);
3689     jeed->SetMaximum(10*eed->GetMaximum());
3690     TH1* njeemmd = jeemmd->DrawNormalized();
3691     njeemmd->SetMinimum(ymin);
3692     njeemmd->SetMaximum(ymax);
3693    
3694     jeed->DrawNormalized("histo,same");
3695     jmmd->DrawNormalized("histo,same");
3696     jeemmd->DrawNormalized("same");
3697     TLegend *jleg2 = make_legend(" ");
3698     jleg2->AddEntry(jeemmd,"ee and #mu#mu","p");
3699     jleg2->AddEntry(jeed,"ee","l");
3700     jleg2->AddEntry(jmmd,"#mu#mu","l");
3701     jleg2->Draw();
3702     CompleteSave(can,"lepton_comparison/jzb_effratio_data");
3703    
3704     TPad *eemmpad = new TPad("eemmpad","eemmpad",0,0,1,1);
3705     eemmpad->cd();
3706     eemmpad->SetLogy(1);
3707     jeed->Draw("histo");
3708     jmmd->Draw("histo,same");
3709     TLegend *eemmlegend = make_legend(" ");
3710     eemmlegend->AddEntry(jeed,"ee","l");
3711     eemmlegend->AddEntry(jmmd,"#mu#mu","l");
3712     eemmlegend->Draw();
3713     DrawPrelim();
3714 buchmann 1.79 Save_With_Ratio(jeed,jmmd,eemmpad->cd(),"lepton_comparison/jzb_Comparing_ee_mm_data");
3715 buchmann 1.1
3716 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"));
3717     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"));
3718     TH1F *zjeemmd = allsamples.Draw("zjeemmd",jzbvariablemc,int((jzbHigh+150)/5),-150,jzbHigh , "JZB [GeV]", "events", cutmass&&cutOSSF&&cutnJets, mc, luminosity,allsamples.FindSample("DYJetsToLL"));
3719 buchmann 1.1 dout << "Z+Jets ee : " << zjeed->GetMean() << "+/-" << zjeed->GetMeanError() << endl;
3720     dout << "Z+Jets ee : " << zjmmd->GetMean() << "+/-" << zjmmd->GetMeanError() << endl;
3721     dout << "Z+Jets eemd : " << zjeemmd->GetMean() << "+/-" << zjeemmd->GetMeanError() << endl;
3722     zjeemmd->SetLineColor(kBlack);
3723     zjeemmd->SetMarkerStyle(25);
3724     zjeed->SetLineColor(kBlue);
3725     zjmmd->SetLineColor(kRed);
3726     zjeed->SetMinimum(0.1);
3727     zjeed->SetMaximum(10*eed->GetMaximum());
3728    
3729     TH1* nzjeemmd = zjeemmd->DrawNormalized();
3730     nzjeemmd->SetMinimum(ymin);
3731     nzjeemmd->SetMaximum(ymax);
3732     zjeed->DrawNormalized("histo,same");
3733     zjmmd->DrawNormalized("histo,same");
3734     zjeemmd->DrawNormalized("same");
3735     TLegend *zjleg2 = make_legend("Z+jets MC");
3736     zjleg2->AddEntry(jeemmd,"ee and #mu#mu","p");
3737     zjleg2->AddEntry(jeed,"ee","l");
3738     zjleg2->AddEntry(jmmd,"#mu#mu","l");
3739     zjleg2->Draw();
3740     CompleteSave(can,"lepton_comparison/jzb_effratio_ZJets");
3741    
3742     TH1F *ld = allsamples.Draw("ld","mll",50,50,150, "mll [GeV]", "events", cutOSSF&&cutnJets,data, luminosity);
3743     ld->DrawNormalized("e1");
3744     eed->DrawNormalized("histo,same");
3745     mmd->DrawNormalized("histo,same");
3746     TLegend *leg3 = make_legend();
3747     leg3->AddEntry(ld,"ZJets->ll (data)","p");
3748     leg3->AddEntry(eed,"ZJets->ee (data)","l");
3749     leg3->AddEntry(mmd,"ZJets->#mu#mu (data)","l");
3750     leg3->Draw();
3751     CompleteSave(can,"lepton_comparison/mll_effratio_data__all_compared");
3752     /*
3753     TH1F *jzbld = allsamples.Draw("jzbld",jzbvariable,75,-150,150, "JZB [GeV]", "events", cutmass&&cutOSSF&&cutnJets,data, luminosity);
3754     TH1F *jzbemd = allsamples.Draw("jzbemd",jzbvariable,75,-150,150, "JZB [GeV]", "events", cutmass&&cutOSOF&&cutnJets,data, luminosity);
3755     */
3756     TH1F *jzbld = allsamples.Draw("jzbld",jzbvariabledata,int((jzbHigh+110)/5),-110,jzbHigh , "JZB [GeV]", "events", cutmass&&cutOSSF&&cutnJets,data, luminosity);
3757     TH1F *jzbemd = allsamples.Draw("jzbemd",jzbvariabledata,int((jzbHigh+110)/5),-110,jzbHigh , "JZB [GeV]", "events", cutmass&&cutOSOF&&cutnJets,data, luminosity);
3758     jzbld->SetMarkerColor(kBlack);
3759     jzbld->SetMarkerStyle(26);
3760     jzbemd->SetMarkerStyle(25);
3761     jzbemd->SetMarkerColor(kRed);
3762     jzbemd->SetLineColor(kRed);
3763     jzbld->SetMinimum(0.35);
3764     jzbld->Draw("e1");
3765     jzbemd->Draw("e1,same");
3766     TLegend *leg4 = make_legend();
3767     leg4->AddEntry(jzbld,"SFZP","p");
3768     leg4->AddEntry(jzbemd,"OFZP","p");
3769     leg4->AddEntry((TObject*)0,"",""); //causes segmentation violation
3770     leg4->AddEntry((TObject*)0,"",""); //causes segmentation violation
3771     leg4->Draw();
3772     CompleteSave(can,"lepton_comparison/jzb_eemumu_emu_data");
3773    
3774     TH1F *ttbarjzbld = allsamples.Draw("ttbarjzbld",jzbvariablemc,int((jzbHigh+150)/5),-150,jzbHigh, "JZB [GeV]", "events", cutmass&&cutOSSF&&cutnJets,data, luminosity,allsamples.FindSample("TTJet"));
3775     TH1F *ttbarjzbemd = allsamples.Draw("ttbarjzbemd",jzbvariablemc,int((jzbHigh+150)/5),-150,jzbHigh, "JZB [GeV]", "events", cutmass&&cutOSOF&&cutnJets,data, luminosity,allsamples.FindSample("TTJet"));
3776     ttbarjzbld->SetLineColor(allsamples.GetColor("TTJet"));
3777     ttbarjzbemd->SetLineColor(allsamples.GetColor("TTJet"));
3778     ttbarjzbld->Draw("histo");
3779     ttbarjzbemd->SetLineStyle(2);
3780     ttbarjzbemd->Draw("histo,same");
3781     TLegend *leg5 = make_legend();
3782     leg5->AddEntry(ttbarjzbld,"t#bar{t}->(ee or #mu#mu)","l");
3783     leg5->AddEntry(ttbarjzbemd,"t#bar{t}->e#mu","l");
3784     leg5->Draw();
3785     CompleteSave(can,"lepton_comparison/ttbar_emu_mc");
3786    
3787     }
3788    
3789     bool is_OF(TCut cut) {
3790     string scut = (const char*) cut;
3791     if((int)scut.find("id1!=id2")>-1) return true;
3792     if((int)scut.find("id1==id2")>-1) return false;
3793     return false;
3794     }
3795    
3796     bool is_ZP(TCut cut) {
3797     string scut = (const char*) cut;
3798     if((int)scut.find("91")>-1) return true;
3799     return false;
3800     }
3801    
3802    
3803     void draw_pure_jzb_histo(TCut cut,string datavariable, string mcvariable, string savename, TCanvas *can,vector<float> binning) {
3804     TPad *jzbpad = new TPad("jzbpad","jzbpad",0,0,1,1);
3805     jzbpad->cd();
3806     jzbpad->SetLogy(1);
3807     string xlabel="JZB [GeV]";
3808    
3809     TH1F *datahisto = allsamples.Draw("datahisto",datavariable,binning, xlabel, "events",cut,data,luminosity);
3810     THStack mcstack = allsamples.DrawStack("mcstack",mcvariable,binning, xlabel, "events",cut,mc,luminosity);
3811    
3812     datahisto->SetMinimum(0.1);
3813     datahisto->SetMarkerSize(DataMarkerSize);
3814     datahisto->Draw("e1");
3815 buchmann 1.73 mcstack.Draw("histo,same");
3816 buchmann 1.1 datahisto->Draw("same,e1");
3817    
3818     TLegend *leg;
3819 buchmann 1.50 if (!PlottingSetup::RestrictToMassPeak||!PlottingSetup::UseSidebandsForcJZB) {
3820 fronga 1.41 if(is_OF(cut)) leg = allsamples.allbglegend("Opposite flavor",datahisto);
3821     else leg = allsamples.allbglegend("Same flavor",datahisto);
3822     } else {
3823     if(is_OF(cut) && is_ZP(cut)) leg = allsamples.allbglegend("OFZP",datahisto);
3824     else if(!is_OF(cut) && is_ZP(cut)) leg = allsamples.allbglegend("SFZP",datahisto);
3825     else if( is_OF(cut) && !is_ZP(cut)) leg = allsamples.allbglegend("OFSB",datahisto);
3826     else if(!is_OF(cut) && !is_ZP(cut)) leg = allsamples.allbglegend("SFSB",datahisto);
3827     else {
3828     std::cerr << "Unable to decode cut: " << cut.GetTitle() << std::endl;
3829     exit(-1);
3830     }
3831     }
3832 buchmann 1.1 leg->Draw();
3833     string write_cut = decipher_cut(cut,"");
3834     TText *writeline1 = write_cut_on_canvas(write_cut.c_str());
3835     writeline1->SetTextSize(0.035);
3836     writeline1->Draw();
3837 buchmann 1.79 if(!Contains(savename,"Dibosons")) Save_With_Ratio(datahisto,mcstack,jzbpad->cd(),("jzb/"+savename));
3838     else Save_With_Ratio(datahisto,mcstack,jzbpad->cd(),savename);
3839 buchmann 1.1 TPad *jzbpad2 = new TPad("jzbpad2","jzbpad2",0,0,1,1);
3840     jzbpad2->cd();
3841     jzbpad2->SetLogy(1);
3842     datahisto->GetXaxis()->SetRangeUser(0,binning[binning.size()-1]);
3843     datahisto->SetMinimum(0.1);
3844     datahisto->SetMarkerSize(DataMarkerSize);
3845     datahisto->Draw("e1");
3846 buchmann 1.73 mcstack.Draw("histo,same");
3847 buchmann 1.1 datahisto->Draw("same,e1");
3848     leg->SetHeader("");
3849     leg->Draw();
3850     writeline1->SetTextSize(0.035);
3851     writeline1->Draw();
3852     DrawPrelim();
3853 buchmann 1.79 if(!Contains(savename,"Dibosons")) Save_With_Ratio(datahisto,mcstack,jzbpad2->cd(),("jzb/PositiveSideOnly/"+savename+""));
3854     else Save_With_Ratio(datahisto,mcstack,jzbpad2->cd(),(savename+"__PosOnly"));
3855 buchmann 1.1 datahisto->Delete();
3856     mcstack.Delete();
3857     }
3858    
3859     Double_t GausR(Double_t *x, Double_t *par) {
3860     return gRandom->Gaus(x[0],par[0]);
3861     }
3862 buchmann 1.12
3863     void produce_stretched_jzb_plots(string mcjzb, string datajzb,vector<float> ratio_binning) {
3864     TCanvas *dican = new TCanvas("dican","JZB Plots Canvas");
3865     float max=jzbHigh ;
3866     float min=-120;
3867     int nbins=(int)((max-min)/5.0); // we want 5 GeV/bin
3868     int coarserbins=int(nbins/2.0);
3869     int rebinnedbins=int(nbins/4.0);
3870 buchmann 1.1
3871 buchmann 1.12 vector<float>binning;vector<float>coarse_binning;vector<float>coarsest_binning;
3872     for(int i=0;i<=nbins;i++)binning.push_back(min+i*(max-min)/((float)nbins));
3873     for(int i=0;i<=coarserbins;i++)coarse_binning.push_back(min+i*(max-min)/((float)coarserbins));
3874     for(int i=0;i<=rebinnedbins;i++)coarsest_binning.push_back(min+i*(max-min)/((float)rebinnedbins));
3875    
3876     draw_pure_jzb_histo(cutOSSF&&cutnJets&&cutmass,datajzb,mcjzb,"Dibosons/jzb_OS_SFZP",dican,binning);
3877     draw_pure_jzb_histo(cutOSOF&&cutnJets&&cutmass,datajzb,mcjzb,"Dibosons/jzb_OS_OFZP",dican,binning);
3878     draw_pure_jzb_histo(cutOSSF&&cutnJets&&cutmass&&"id1==0",datajzb,mcjzb,"Dibosons/ee/jzb_OS_SFZP",dican,binning);
3879     draw_pure_jzb_histo(cutOSSF&&cutnJets&&cutmass&&"id1==1",datajzb,mcjzb,"Dibosons/mm/jzb_OS_SFZP",dican,binning);
3880     draw_pure_jzb_histo(cutOSOF&&cutnJets&&cutmass&&"id1==0",datajzb,mcjzb,"Dibosons/ee/jzb_OS_OFZP",dican,binning);
3881     draw_pure_jzb_histo(cutOSOF&&cutnJets&&cutmass&&"id1==1",datajzb,mcjzb,"Dibosons/mm/jzb_OS_OFZP",dican,binning);
3882 buchmann 1.50 if(PlottingSetup::RestrictToMassPeak&&PlottingSetup::UseSidebandsForcJZB) draw_pure_jzb_histo(cutOSSF&&cutnJets&&sidebandcut,datajzb,mcjzb,"Dibosons/jzb_OS_SFSB",dican,binning);
3883     if(PlottingSetup::RestrictToMassPeak&&PlottingSetup::UseSidebandsForcJZB) draw_pure_jzb_histo(cutOSOF&&cutnJets&&sidebandcut,datajzb,mcjzb,"Dibosons/jzb_OS_OFSB",dican,binning);
3884 buchmann 1.12
3885     draw_pure_jzb_histo(cutOSSF&&cutnJets&&cutmass,datajzb,mcjzb,"Dibosons/jzb_OS_SFZP_coarse",dican,coarse_binning);
3886     draw_pure_jzb_histo(cutOSOF&&cutnJets&&cutmass,datajzb,mcjzb,"Dibosons/jzb_OS_OFZP_coarse",dican,coarse_binning);
3887 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);
3888     if(PlottingSetup::RestrictToMassPeak&&PlottingSetup::UseSidebandsForcJZB) draw_pure_jzb_histo(cutOSOF&&cutnJets&&sidebandcut,datajzb,mcjzb,"Dibosons/jzb_OS_OFSB_coarse",dican,coarse_binning);
3889 buchmann 1.12
3890     delete dican;
3891     }
3892    
3893    
3894     void diboson_plots(string mcjzb, string datajzb,vector<float> ratio_binning) {
3895 buchmann 1.65 switch_overunderflow(true);
3896 buchmann 1.12 vector<int> SamplesToBeModified = allsamples.FindSampleBySampleName("WW/WZ/ZZ");
3897    
3898     if(SamplesToBeModified.size()==0 || SamplesToBeModified[0]==-1) {
3899     write_error(__FUNCTION__,"Could not find any diboson samples - aborting diboson plots");
3900     return;
3901     }
3902    
3903     float stretchfactor = 100.0;
3904     vector<string> labels;
3905    
3906    
3907     dout << "Going to increase the cross section for diboson samples ... " << endl;
3908 buchmann 1.16 for(int i=0;i<(int)SamplesToBeModified.size();i++) {
3909 buchmann 1.12 float origxs=(allsamples.collection)[SamplesToBeModified[i]].xs;
3910     (allsamples.collection)[SamplesToBeModified[i]].xs=origxs*stretchfactor;
3911     dout << " Increased xs for sample " << (allsamples.collection)[SamplesToBeModified[i]].filename << " from " << origxs << " to " << (allsamples.collection)[SamplesToBeModified[i]].xs << " (by a factor of " << stretchfactor << ")" << endl;
3912     labels.push_back((allsamples.collection)[SamplesToBeModified[i]].samplename);
3913     (allsamples.collection)[SamplesToBeModified[i]].samplename=any2string(int(stretchfactor))+" x "+(allsamples.collection)[SamplesToBeModified[i]].samplename;
3914     dout << " (also renamed it to " << (allsamples.collection)[SamplesToBeModified[i]].samplename << " )" << endl;
3915     }
3916    
3917     dout << "Going to produce JZB plots" << endl;
3918 buchmann 1.13 produce_stretched_jzb_plots(mcjzb,datajzb,ratio_binning);
3919 buchmann 1.12 TCanvas *gloca = new TCanvas("gloca","gloca");
3920    
3921     dout << "Going to produce prediction plots" << endl;
3922 buchmann 1.93 do_prediction_plot(TCut("mll>0"),"",mcjzb, gloca, PlottingSetup::jzbHigh, 0, false,"Dibosons/Bpred/" ); // do only MC plots, no signal
3923     do_prediction_plot(TCut("mll>0"),"",mcjzb, gloca, PlottingSetup::jzbHigh, 0, false,"Dibosons/Bpred/" ); // do MC plots with signal
3924 buchmann 1.12 delete gloca;
3925    
3926     dout << "Going to reset the cross section for diboson samples ... " << endl;
3927 buchmann 1.16 for(int i=0;i<(int)SamplesToBeModified.size();i++) {
3928 buchmann 1.12 float Upxs=(allsamples.collection)[SamplesToBeModified[i]].xs;
3929     (allsamples.collection)[SamplesToBeModified[i]].xs=(allsamples.collection)[SamplesToBeModified[i]].xs*(1.0/stretchfactor);
3930     string Upname=(allsamples.collection)[SamplesToBeModified[i]].samplename;
3931     (allsamples.collection)[SamplesToBeModified[i]].samplename=labels[i];
3932     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;
3933    
3934     }
3935 buchmann 1.65 // switch_overunderflow(false);
3936 buchmann 1.12 }
3937 buchmann 1.35
3938    
3939     void draw_normalized_data_vs_data_histo(TCut cut1, TCut cut2, string variable, string legentry1, string legentry2, string savename, TCanvas *can,vector<float> binning) {
3940     TPad *jzbpad = new TPad("jzbpad","jzbpad",0,0,1,1);
3941     jzbpad->cd();
3942     jzbpad->SetLogy(1);
3943     string xlabel="JZB [GeV]";
3944    
3945     TH1F *datahisto1 = allsamples.Draw("datahisto1",variable,binning, xlabel, "events",cut1,data,luminosity);
3946     datahisto1->SetLineColor(kRed);
3947     datahisto1->SetMarkerColor(kRed);
3948     TH1F *datahisto2 = allsamples.Draw("datahisto2",variable,binning, xlabel, "events",cut2,data,luminosity);
3949     datahisto2->SetLineColor(kBlue);
3950     datahisto2->SetMarkerColor(kBlue);
3951    
3952     datahisto2->SetMarkerSize(DataMarkerSize);
3953     datahisto1->DrawNormalized("e1");
3954     datahisto2->DrawNormalized("histo,same");
3955     datahisto1->DrawNormalized("same,e1");
3956    
3957     TLegend *leg = make_legend();
3958     leg->AddEntry(datahisto1,legentry1.c_str());
3959     leg->AddEntry(datahisto2,legentry2.c_str());
3960     leg->Draw();
3961    
3962 buchmann 1.79 Save_With_Ratio(datahisto1,datahisto2,jzbpad->cd(),("jzb/"+savename));
3963 buchmann 1.35
3964     datahisto1->Delete();
3965     datahisto2->Delete();
3966     }
3967    
3968    
3969 buchmann 1.1 void jzb_plots(string mcjzb, string datajzb,vector<float> ratio_binning) {
3970 buchmann 1.65 switch_overunderflow(true);
3971 buchmann 1.1 TCanvas *can = new TCanvas("can","JZB Plots Canvas");
3972     float max=jzbHigh ;
3973     float min=-120;
3974     int nbins=(int)((max-min)/5.0); // we want 5 GeV/bin
3975     int coarserbins=int(nbins/2.0);
3976     int rebinnedbins=int(nbins/4.0);
3977    
3978     vector<float>binning;vector<float>coarse_binning;vector<float>coarsest_binning;
3979     for(int i=0;i<=nbins;i++)binning.push_back(min+i*(max-min)/((float)nbins));
3980     for(int i=0;i<=coarserbins;i++)coarse_binning.push_back(min+i*(max-min)/((float)coarserbins));
3981     for(int i=0;i<=rebinnedbins;i++)coarsest_binning.push_back(min+i*(max-min)/((float)rebinnedbins));
3982    
3983 buchmann 1.14 if ( !PlottingSetup::Approved ) {
3984     draw_pure_jzb_histo(cutOSSF&&cutnJets&&cutmass,datajzb,mcjzb,"jzb_OS_SFZP",can,binning);
3985     draw_pure_jzb_histo(cutOSOF&&cutnJets&&cutmass,datajzb,mcjzb,"jzb_OS_OFZP",can,binning);
3986     draw_pure_jzb_histo(cutOSSF&&cutnJets&&cutmass&&"id1==0",datajzb,mcjzb,"ee/jzb_OS_SFZP",can,binning);
3987     draw_pure_jzb_histo(cutOSSF&&cutnJets&&cutmass&&"id1==1",datajzb,mcjzb,"mm/jzb_OS_SFZP",can,binning);
3988     draw_pure_jzb_histo(cutOSOF&&cutnJets&&cutmass&&"id1==0",datajzb,mcjzb,"ee/jzb_OS_OFZP",can,binning);
3989     draw_pure_jzb_histo(cutOSOF&&cutnJets&&cutmass&&"id1==1",datajzb,mcjzb,"mm/jzb_OS_OFZP",can,binning);
3990     flag_this_change(__FUNCTION__,__LINE__,true);//PlottingSetup::RestrictToMassPeak
3991 buchmann 1.50 if(PlottingSetup::RestrictToMassPeak&&PlottingSetup::UseSidebandsForcJZB) draw_pure_jzb_histo(cutOSSF&&cutnJets&&sidebandcut,datajzb,mcjzb,"jzb_OS_SFSB",can,binning);
3992     if(PlottingSetup::RestrictToMassPeak&&PlottingSetup::UseSidebandsForcJZB) draw_pure_jzb_histo(cutOSOF&&cutnJets&&sidebandcut,datajzb,mcjzb,"jzb_OS_OFSB",can,binning);
3993 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);
3994     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);
3995 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);
3996 buchmann 1.35
3997 buchmann 1.14 }
3998 buchmann 1.1
3999     draw_pure_jzb_histo(cutOSSF&&cutnJets&&cutmass,datajzb,mcjzb,"jzb_OS_SFZP_coarse",can,coarse_binning);
4000 buchmann 1.14 if ( !PlottingSetup::Approved ) {
4001     draw_pure_jzb_histo(cutOSOF&&cutnJets&&cutmass,datajzb,mcjzb,"jzb_OS_OFZP_coarse",can,coarse_binning);
4002     flag_this_change(__FUNCTION__,__LINE__,true);//PlottingSetup::RestrictToMassPeak
4003 buchmann 1.50 if(PlottingSetup::RestrictToMassPeak&&PlottingSetup::UseSidebandsForcJZB) draw_pure_jzb_histo(cutOSSF&&cutnJets&&sidebandcut,datajzb,mcjzb,"jzb_OS_SFSB_coarse",can,coarse_binning);
4004     if(PlottingSetup::RestrictToMassPeak&&PlottingSetup::UseSidebandsForcJZB) draw_pure_jzb_histo(cutOSOF&&cutnJets&&sidebandcut,datajzb,mcjzb,"jzb_OS_OFSB_coarse",can,coarse_binning);
4005 buchmann 1.14 }
4006 buchmann 1.12 delete can;
4007 buchmann 1.65 switch_overunderflow(false);
4008 buchmann 1.1 }
4009    
4010    
4011     void calculate_all_yields(string mcdrawcommand,vector<float> jzb_cuts) {
4012     dout << "Calculating background yields in MC:" << endl;
4013     jzb_cuts.push_back(14000);
4014     TH1F *allbgs = allsamples.Draw("allbgs",jzbvariablemc,jzb_cuts, "JZB [GeV]", "events", cutmass&&cutOSSF&&cutnJets,mc,luminosity);
4015     float cumulative=0;
4016     for(int i=allbgs->GetNbinsX();i>=1;i--) {
4017     cumulative+=allbgs->GetBinContent(i);
4018     dout << "Above " << allbgs->GetBinLowEdge(i) << " GeV/c : " << cumulative << endl;
4019     }
4020     }
4021    
4022    
4023     TCut give_jzb_expression(string mcjzb, float jzbcut, string posneg="pos") {
4024     stringstream res;
4025     res << "(" << mcjzb;
4026     if(posneg=="pos") res << ">";
4027     else res << "<-";
4028     res << jzbcut << ")";
4029     return TCut(res.str().c_str());
4030     }
4031    
4032     string sigdig(float number, int nsigdig=3, float min=0) {
4033     //this function tries to extract n significant digits, and if the number is below (min), it returns "<min"
4034     if(number<min) return "< "+any2string(min);
4035     stringstream sol;
4036     sol << setprecision(nsigdig) << number;
4037    
4038     return sol.str();
4039     }
4040    
4041     string jzb_tex_command(string region, string posneg) {
4042     if(posneg=="pos") posneg="POS";
4043     else posneg="NEG";
4044     stringstream texcommand;
4045     texcommand<<"\\"<<region <<"JZB"<<posneg;
4046     return texcommand.str();
4047     }
4048     // \SFZPJZBPOS
4049     // Sample & \OFZPJZBPOS & \OFZPJZBNEG & \SFZPJZBPOS & \SFZPJZBNEG & \OFSBJZBPOS & \OFSBJZBNEG & \SFSBJZBPOS & \SFSBJZBNEG \\\hline
4050    
4051 buchmann 1.95
4052     void compute_Improved_MC_yields(string mcjzb,vector<float> jzb_cuts) {
4053     dout << "Calculating background yields in MC:" << endl;
4054    
4055     TCanvas *yica = new TCanvas("yica","yield canvas");
4056    
4057     int nRegions=2;
4058     if(!PlottingSetup::RestrictToMassPeak||!PlottingSetup::UseSidebandsForcJZB) nRegions=2;
4059     string tsRegions[] = {"SFZP","OFZP"};
4060     string posneg[] = {"pos","neg"};
4061     TCut tkRegions[] = {cutOSSF&&cutnJets&&cutmass,cutOSOF&&cutnJets&&cutmass};
4062    
4063    
4064    
4065     for(int ijzb=0;ijzb<(int)jzb_cuts.size();ijzb++) {
4066     TCut posJZB = give_jzb_expression(mcjzb,jzb_cuts[ijzb],"pos");
4067     TCut negJZB = give_jzb_expression(mcjzb,jzb_cuts[ijzb],"neg");
4068    
4069     dout << "_________________________________________________________" << endl;
4070     dout << "Table for JZB> " << jzb_cuts[ijzb] << endl;
4071    
4072    
4073     THStack *spstack = new THStack(allsamples.DrawStack("spstack","mll<10e6||mll>1",1,0,500,"tester","events",cutOSSF&&cutnJets&&cutmass&&posJZB,mc,luminosity));
4074     THStack *snstack = new THStack(allsamples.DrawStack("snstack","mll<10e6||mll>1",1,0,500,"tester","events",cutOSSF&&cutnJets&&cutmass&&negJZB,mc,luminosity));
4075     THStack *opstack = new THStack(allsamples.DrawStack("opstack","mll<10e6||mll>1",1,0,500,"tester","events",cutOSOF&&cutnJets&&cutmass&&posJZB,mc,luminosity));
4076     THStack *onstack = new THStack(allsamples.DrawStack("onstack","mll<10e6||mll>1",1,0,500,"tester","events",cutOSOF&&cutnJets&&cutmass&&negJZB,mc,luminosity));
4077    
4078    
4079     vector<pair<string,Value> > obs_yields = WriteYield(spstack, -10, 10, true);
4080     vector<pair<string,Value> > neg_sf_yields = WriteYield(snstack, -10, 10, true);
4081     vector<pair<string,Value> > pos_of_yields = WriteYield(opstack, -10, 10, true);
4082     vector<pair<string,Value> > neg_of_yields = WriteYield(onstack, -10, 10, true);
4083    
4084     Value TotObs=Value(0,0);
4085     Value TotPred=Value(0,0);
4086    
4087     for(int ientry=0;ientry<obs_yields.size();ientry++) {
4088     if(Contains(obs_yields[ientry].first,"t_bar_t")) continue; // ttbar
4089     if(Contains(obs_yields[ientry].first,"W_Jets")) continue; // W+Jets
4090     if(Contains(obs_yields[ientry].first,"WW_")) continue; // WW (fully flavor symmetric)
4091     if(Contains(obs_yields[ientry].first,"Single_top")) continue; // Single Top
4092     if(Contains(obs_yields[ientry].first,"ee_mumu")) continue; // DY
4093     if(Contains(obs_yields[ientry].first,"tau_tau")) continue; // DY
4094     Value pred = neg_sf_yields[ientry].second + pos_of_yields[ientry].second - neg_of_yields[ientry].second;
4095     Value obs=obs_yields[ientry].second;
4096     Value diff=obs-pred;
4097     dout << obs_yields[ientry].first << "\t & \t " << obs << " \t & \t " << pred << "\t & \t " << diff << endl;
4098     TotObs=TotObs+obs_yields[ientry].second;
4099     TotPred=TotPred+pred;
4100     }
4101    
4102     float Systematic=sqrt(pow(TotPred.getValue(),2)*0.5*0.5 + pow(TotObs.getValue(),2)*0.5*0.5);
4103    
4104    
4105     }
4106    
4107     delete yica;
4108     }
4109    
4110 buchmann 1.1 void compute_MC_yields(string mcjzb,vector<float> jzb_cuts) {
4111     dout << "Calculating background yields in MC:" << endl;
4112    
4113     TCanvas *yica = new TCanvas("yica","yield canvas");
4114    
4115     int nRegions=4;
4116 buchmann 1.50 if(!PlottingSetup::RestrictToMassPeak||!PlottingSetup::UseSidebandsForcJZB) nRegions=2;
4117 buchmann 1.1 string tsRegions[] = {"SFZP","OFZP","SFSB","OFSB"};
4118     string posneg[] = {"pos","neg"};
4119     TCut tkRegions[] = {cutOSSF&&cutnJets&&cutmass,cutOSOF&&cutnJets&&cutmass,cutOSSF&&cutnJets&&sidebandcut,cutOSOF&&cutnJets&&sidebandcut};
4120    
4121 buchmann 1.16 for(int ijzb=0;ijzb<(int)jzb_cuts.size();ijzb++) {
4122 buchmann 1.1 TCut jzbMC[] = { give_jzb_expression(mcjzb,jzb_cuts[ijzb],"pos"), give_jzb_expression(mcjzb,jzb_cuts[ijzb],"neg") };
4123     dout << "_________________________________________________________" << endl;
4124     dout << "Table for JZB> " << jzb_cuts[ijzb] << endl;
4125 buchmann 1.16 for(int isample=0;isample<(int)(allsamples.collection).size();isample++) {
4126 buchmann 1.1 if(!(allsamples.collection)[isample].is_data) dout << (allsamples.collection)[isample].samplename << " & ";
4127     else dout << "Sample & ";
4128     for(int iregion=0;iregion<nRegions;iregion++) {
4129     for(int ipos=0;ipos<2;ipos++) {
4130     if((allsamples.collection)[isample].is_data) dout << jzb_tex_command(tsRegions[iregion],posneg[ipos]) << " & ";
4131     else {
4132     vector<int> specific;specific.push_back(isample);
4133     TH1F *shisto = allsamples.Draw("shisto","mll",1,0,500,"tester","events",tkRegions[iregion]&&jzbMC[ipos],mc,luminosity,specific);
4134     dout << sigdig(shisto->Integral(),3,0.05) <<" & ";
4135     delete shisto;
4136     }
4137     }//end of ipos
4138     }//end of iregion
4139     dout << " \\\\" << endl;
4140     }//end of isample
4141     }//end of ijzb
4142     dout << " \\hline" << endl;
4143    
4144     delete yica;
4145     }
4146    
4147     void draw_ttbar_and_zjets_shape_for_one_configuration(string mcjzb, string datajzb, int leptontype=-1, int scenario=0,bool floating=false) {
4148     //Step 1: Establishing cuts
4149     stringstream jetcutstring;
4150     string writescenario="";
4151    
4152     if(scenario==0) jetcutstring << "(pfJetGoodNum>=3)&&"<<(const char*) basicqualitycut;
4153     if(scenario==1) jetcutstring << "(pfJetPt[0]>50&&pfJetPt[1]>50)&&"<<(const char*)basicqualitycut;
4154     TCut jetcut(jetcutstring.str().c_str());
4155     string leptoncut="mll>0";
4156     if(leptontype==0||leptontype==1) {
4157     if(leptontype==0) {
4158     leptoncut="id1==0";
4159     writescenario="__ee";
4160     }
4161     else {
4162     leptoncut="id1==1";
4163     writescenario="__ee";
4164     }
4165     }
4166     TCut lepcut(leptoncut.c_str());
4167    
4168     TCanvas *c5 = new TCanvas("c5","c5",1500,500);
4169     TCanvas *c6 = new TCanvas("c6","c6");
4170     c5->Divide(3,1);
4171    
4172     //STEP 2: Extract Zjets shape in data
4173     c5->cd(1);
4174     c5->cd(1)->SetLogy(1);
4175     TCut massat40("mll>40");
4176     TH1F *ossfleft = allsamples.Draw("ossfleft", "-"+datajzb,40,0,200, "JZB [GeV]", "events", massat40&&cutOSSF&&jetcut&&lepcut,data,luminosity);
4177     TH1F *osofleft = allsamples.Draw("osofleft", "-"+datajzb,40,0,200, "JZB [GeV]", "events", massat40&&cutOSOF&&jetcut&&lepcut,data,luminosity);
4178     ossfleft->SetLineColor(kRed);
4179     ossfleft->SetMarkerColor(kRed);
4180     ossfleft->Add(osofleft,-1);
4181     vector<TF1*> functions = do_cb_fit_to_plot(ossfleft,10);
4182     ossfleft->SetMarkerSize(DataMarkerSize);
4183     ossfleft->Draw();
4184     functions[0]->Draw("same");functions[1]->Draw("same");functions[2]->Draw("same");
4185     TF1 *zjetsfunc = (TF1*) functions[1]->Clone();
4186     TF1 *zjetsfuncN = (TF1*) functions[0]->Clone();
4187     TF1 *zjetsfuncP = (TF1*) functions[2]->Clone();
4188     zjetsfunc->Draw("same");zjetsfuncN->Draw("same");zjetsfuncP->Draw("same");
4189     TLegend *leg1 = new TLegend(0.6,0.6,0.89,0.80);
4190     leg1->SetFillColor(kWhite);
4191     leg1->SetLineColor(kWhite);
4192     leg1->AddEntry(ossfleft,"OSSF (sub),JZB<peak","p");
4193     leg1->AddEntry(zjetsfunc,"OSSF fit ('zjets')","l");
4194     leg1->Draw("same");
4195     TText *titleleft = write_title("Extracting Z+Jets shape");
4196     titleleft->Draw();
4197    
4198     //Step 3: Extract ttbar shape (in data or MC?)
4199     c5->cd(2);
4200     c5->cd(2)->SetLogy(1);
4201     TH1F *osof;
4202     TText *titlecenter;
4203     bool frommc=false;
4204     if(frommc) {
4205 buchmann 1.93 osof = allsamples.Draw("osof",datajzb,40,-200,200, "JZB [GeV]", "events", massat40&&cutOSSF&&jetcut&&lepcut,mc,luminosity,allsamples.FindSample("TT_"));
4206 buchmann 1.1 titlecenter = write_title("Extracting ttbar shape (from ossf MC)");
4207     }
4208     else {
4209     osof = allsamples.Draw("osof",datajzb,40,-200,200, "JZB [GeV]", "events", massat40&&cutOSOF&&jetcut&&lepcut,data,luminosity);
4210     titlecenter = write_title("Extracting ttbar shape (from osof data)");
4211     }
4212     osof->SetMarkerSize(DataMarkerSize);
4213     osof->Draw();
4214     vector<TF1*> ttbarfunctions = do_cb_fit_to_plot(osof,35,true);
4215     ttbarfunctions[0]->SetLineColor(kRed); ttbarfunctions[0]->SetLineStyle(2); ttbarfunctions[0]->Draw("same");
4216     ttbarfunctions[1]->SetLineColor(kRed); ttbarfunctions[1]->Draw("same");
4217     ttbarfunctions[2]->SetLineColor(kRed); ttbarfunctions[2]->SetLineStyle(2); ttbarfunctions[2]->Draw("same");
4218    
4219     TLegend *leg2 = new TLegend(0.15,0.8,0.4,0.89);
4220     leg2->SetFillColor(kWhite);
4221     leg2->SetLineColor(kWhite);
4222     if(frommc) {
4223     leg2->AddEntry(osof,"t#bar{t} OSSF, MC","p");
4224     leg2->AddEntry(ttbarfunctions[1],"Fit to t#bar{t} OSSF,MC","l");
4225     } else {
4226     leg2->AddEntry(osof,"OSOF","p");
4227     leg2->AddEntry(ttbarfunctions[1],"Fit to OSOF","l");
4228     }
4229     leg2->Draw("same");
4230     titlecenter->Draw();
4231    
4232     //--------------------------------------------------------------------------------------------------------------------------------
4233     //STEP 4: Present it!
4234     // actually: if we wanna let it float we need to do that first :-)
4235     c5->cd(3);
4236     c5->cd(3)->SetLogy(1);
4237     TH1F *observed = allsamples.Draw("observed",datajzb,100,0,500, "JZB [GeV]", "events", massat40&&cutOSSF&&jetcut&&lepcut,data,luminosity);
4238     observed->SetMarkerSize(DataMarkerSize);
4239    
4240     TF1 *logparc = new TF1("logparc",InvCrystalBall,0,1000,5); logparc->SetLineColor(kRed);
4241     TF1 *logparcn = new TF1("logparcn",InvCrystalBallN,0,1000,5); logparcn->SetLineColor(kRed); logparcn->SetLineStyle(2);
4242     TF1 *logparcp = new TF1("logparcp",InvCrystalBallP,0,1000,5); logparcp->SetLineColor(kRed); logparcp->SetLineStyle(2);
4243    
4244     TF1 *zjetsc = new TF1("zjetsc",InvCrystalBall,0,1000,5); zjetsc->SetLineColor(kBlue);
4245     TF1 *zjetscn = new TF1("zjetscn",InvCrystalBallN,0,1000,5); zjetscn->SetLineColor(kBlue); zjetscn->SetLineStyle(2);
4246     TF1 *zjetscp = new TF1("zjetscp",InvCrystalBallP,0,1000,5); zjetscp->SetLineColor(kBlue); zjetscp->SetLineStyle(2);
4247    
4248     TF1 *ZplusJetsplusTTbar = new TF1("ZplusJetsplusTTbar", DoubleInvCrystalBall,0,1000,10); ZplusJetsplusTTbar->SetLineColor(kBlue);
4249     TF1 *ZplusJetsplusTTbarP= new TF1("ZplusJetsplusTTbarP",DoubleInvCrystalBallP,0,1000,10); ZplusJetsplusTTbarP->SetLineColor(kBlue); ZplusJetsplusTTbarP->SetLineStyle(2);
4250     TF1 *ZplusJetsplusTTbarN= new TF1("ZplusJetsplusTTbarN",DoubleInvCrystalBallN,0,1000,10); ZplusJetsplusTTbarN->SetLineColor(kBlue); ZplusJetsplusTTbarN->SetLineStyle(2);
4251    
4252     zjetsc->SetParameters(zjetsfunc->GetParameters());
4253     zjetscp->SetParameters(zjetsfunc->GetParameters());
4254     zjetscn->SetParameters(zjetsfunc->GetParameters());
4255    
4256     TH1F *observeda = allsamples.Draw("observeda",datajzb,53,80,jzbHigh, "JZB [GeV]", "events", massat40&&cutOSSF&&jetcut&&lepcut,data,luminosity);
4257     //blublu
4258     logparc->SetParameters(ttbarfunctions[1]->GetParameters());
4259     logparcn->SetParameters(ttbarfunctions[1]->GetParameters());
4260     logparcp->SetParameters(ttbarfunctions[1]->GetParameters());
4261     if(floating) {
4262     dout << "TTbar contribution assumed (before fitting) : " << logparc->GetParameter(0) << endl;
4263     logparc->SetParameters(ttbarfunctions[1]->GetParameters());
4264     for(int i=0;i<10;i++) {
4265     if(i<5) ZplusJetsplusTTbar->FixParameter(i,zjetsfunc->GetParameter(i));
4266     if(i>=5) {
4267     if (i>5) ZplusJetsplusTTbar->FixParameter(i,logparc->GetParameter(i-5));
4268     if (i==5) ZplusJetsplusTTbar->SetParameter(i,logparc->GetParameter(i-5));
4269     }
4270     }//end of setting parameters
4271     observeda->Draw("same");
4272     ZplusJetsplusTTbar->Draw("same");
4273     observeda->Fit(ZplusJetsplusTTbar);
4274     dout << "--> Quality of Z+Jets / TTbar fit : chi2/ndf = " << ZplusJetsplusTTbar->GetChisquare() << "/" << ZplusJetsplusTTbar->GetNDF() << endl;
4275     ZplusJetsplusTTbar->Draw("same");
4276     ZplusJetsplusTTbarP->SetParameters(ZplusJetsplusTTbar->GetParameters());
4277     ZplusJetsplusTTbarN->SetParameters(ZplusJetsplusTTbar->GetParameters());
4278     dout << "TTbar contribution found (after fitting) : " << ZplusJetsplusTTbar->GetParameter(5) << endl;
4279     float factor = ZplusJetsplusTTbar->GetParameter(5) / logparc->GetParameter(0);
4280     dout << "FACTOR: " << factor << endl;
4281     logparc->SetParameter(0,factor*ttbarfunctions[1]->GetParameter(0));
4282     logparcn->SetParameter(0,factor*ttbarfunctions[1]->GetParameter(0));
4283     logparcp->SetParameter(0,factor*ttbarfunctions[1]->GetParameter(0));
4284     }
4285    
4286     c5->cd(3);
4287     c5->cd(3)->SetLogy(1);
4288     observed->Draw();
4289     zjetsc->Draw("same");zjetscn->Draw("same");zjetscp->Draw("same");
4290     logparc->Draw("same");
4291     logparcn->Draw("same");
4292     logparcp->Draw("same");
4293    
4294     TLegend *leg3 = new TLegend(0.6,0.6,0.89,0.80);
4295     leg3->SetFillColor(kWhite);
4296     leg3->SetLineColor(kWhite);
4297     leg3->AddEntry(observed,"OSSF,JZB>peak","p");
4298     leg3->AddEntry(ttbarfunctions[1],"OSOF fit ('ttbar')","l");
4299     leg3->AddEntry(zjetsfunc,"OSSF,JZB<0 fit ('zjets')","l");
4300     leg3->Draw("same");
4301     TText *titleright = write_title("Summary of shapes and observed shape");
4302     titleright->Draw();
4303    
4304     c6->cd()->SetLogy(1);
4305     observed->Draw();
4306     zjetsc->Draw("same");zjetscn->Draw("same");zjetscp->Draw("same");
4307     logparc->Draw("same");
4308     logparcn->Draw("same");
4309     logparcp->Draw("same");
4310     leg3->Draw("same");
4311     titleright->Draw();
4312    
4313     if(scenario==0) {
4314     CompleteSave(c5,"Shapes2/Making_of___3jetsabove30"+writescenario);
4315     CompleteSave(c5->cd(1),"Shapes2/Making_of___3jetsabove30"+writescenario+"__cd1");
4316     CompleteSave(c5->cd(2),"Shapes2/Making_of___3jetsabove30"+writescenario+"__cd2");
4317     CompleteSave(c5->cd(3),"Shapes2/Making_of___3jetsabove30"+writescenario+"__cd3");
4318     CompleteSave(c6,"Shapes2/Background_Shapes___3jetsabove30"+writescenario);
4319     } else {
4320     CompleteSave(c5,"Shapes2/Making_of___2jetsabove50"+writescenario);
4321     CompleteSave(c5->cd(1),"Shapes2/Making_of___2jetsabove50"+writescenario+"__cd1");
4322     CompleteSave(c5->cd(2),"Shapes2/Making_of___2jetsabove50"+writescenario+"__cd2");
4323     CompleteSave(c5->cd(3),"Shapes2/Making_of___2jetsabove50"+writescenario+"__cd3");
4324     CompleteSave(c6,"Shapes2/Background_Shapes___2jetsabove50"+writescenario);
4325     }
4326     dout << "Statistics about our fits: " << endl;
4327     dout << "Z+Jets shape: Chi2/ndf = " << zjetsfunc->GetChisquare() << "/" << ossfleft->GetNbinsX() << endl;
4328     dout << "ttbar shape: Chi2/ndf = " << ttbarfunctions[1]->GetChisquare() << "/" << osof->GetNbinsX() << endl;
4329    
4330     c6->cd();
4331     TLegend *additionallegend = new TLegend(0.6,0.6,0.89,0.89);
4332     additionallegend->SetFillColor(kWhite);
4333     additionallegend->SetLineColor(kWhite);
4334     additionallegend->AddEntry(observed,"Data","p");
4335     additionallegend->AddEntry(ZplusJetsplusTTbar,"Fitted Z+jets & TTbar","l");
4336     additionallegend->AddEntry(zjetsc,"Z+jets","l");
4337     additionallegend->AddEntry(logparc,"TTbar","l");
4338     observed->Draw();
4339     ZplusJetsplusTTbar->SetLineColor(kGreen);
4340     ZplusJetsplusTTbarP->SetLineColor(kGreen);
4341     ZplusJetsplusTTbarN->SetLineColor(kGreen);
4342     ZplusJetsplusTTbarP->SetLineStyle(2);
4343     ZplusJetsplusTTbarN->SetLineStyle(2);
4344     TF1 *ZplusJetsplusTTbar2 = new TF1("ZplusJetsplusTTbar2",DoubleInvCrystalBall,0,1000,10);
4345     ZplusJetsplusTTbar2->SetParameters(ZplusJetsplusTTbar->GetParameters());
4346     ZplusJetsplusTTbar2->SetLineColor(kGreen);
4347     ZplusJetsplusTTbarP->SetFillColor(TColor::GetColor("#81F781"));
4348     ZplusJetsplusTTbarN->SetFillColor(kWhite);
4349     ZplusJetsplusTTbarP->Draw("fcsame");
4350     ZplusJetsplusTTbarN->Draw("fcsame");
4351     TH1F *hZplusJetsplusTTbar = (TH1F*)ZplusJetsplusTTbar2->GetHistogram();
4352     TH1F *hZplusJetsplusTTbarN = (TH1F*)ZplusJetsplusTTbarN->GetHistogram();
4353     TH1F *hZplusJetsplusTTbarP = (TH1F*)ZplusJetsplusTTbarP->GetHistogram();
4354     hZplusJetsplusTTbar->SetMarkerSize(0);
4355     hZplusJetsplusTTbarP->SetMarkerSize(0);
4356     hZplusJetsplusTTbarN->SetMarkerSize(0);
4357     for (int i=1;i<=hZplusJetsplusTTbar->GetNbinsX();i++) {
4358     float newerror=hZplusJetsplusTTbarP->GetBinContent(i)-hZplusJetsplusTTbar->GetBinContent(i);
4359     hZplusJetsplusTTbar->SetBinError(i,newerror);
4360     if(hZplusJetsplusTTbar->GetBinContent(i)<0.05) hZplusJetsplusTTbar->SetBinContent(i,0); //avoiding a displaying probolem
4361     }
4362     hZplusJetsplusTTbarP->SetFillColor(kGreen);
4363     hZplusJetsplusTTbarN->SetFillColor(kWhite);
4364     hZplusJetsplusTTbarN->Draw("same");
4365    
4366     ZplusJetsplusTTbar2->SetMarkerSize(0);
4367     ZplusJetsplusTTbar2->Draw("same");
4368    
4369     zjetsc->Draw("same");zjetscn->Draw("same");zjetscp->Draw("same");
4370     logparc->Draw("same");
4371     logparcn->Draw("same");
4372     logparcp->Draw("same");
4373     additionallegend->Draw("same");
4374     if(scenario==0) {
4375     CompleteSave(c6,"Shapes2/Background_Shapes___3jetsabove30__allfits__"+writescenario);
4376     } else {
4377     CompleteSave(c6,"Shapes2/Background_Shapes___2jetsabove50__allfits__"+writescenario);
4378     }
4379     //--------------------------------------------------------------------------------------------------------------------------------
4380     }
4381    
4382     void draw_ttbar_and_zjets_shape(string mcjzb, string datajzb) {
4383     int all_leptons=-1;
4384 buchmann 1.16 int threejetswith30gev=0;
4385     /*
4386     int twojetswith50gev=1;
4387 buchmann 1.1 int electrons_only=0;
4388     int mu_only=1;
4389 buchmann 1.16
4390 buchmann 1.1 draw_ttbar_and_zjets_shape_for_one_configuration(mcjzb,datajzb,all_leptons,twojetswith50gev);
4391     draw_ttbar_and_zjets_shape_for_one_configuration(mcjzb,datajzb,all_leptons,threejetswith30gev);
4392    
4393     draw_ttbar_and_zjets_shape_for_one_configuration(mcjzb,datajzb,electrons_only,twojetswith50gev);
4394     draw_ttbar_and_zjets_shape_for_one_configuration(mcjzb,datajzb,electrons_only,threejetswith30gev);
4395    
4396     draw_ttbar_and_zjets_shape_for_one_configuration(mcjzb,datajzb,mu_only,twojetswith50gev);
4397     draw_ttbar_and_zjets_shape_for_one_configuration(mcjzb,datajzb,mu_only,threejetswith30gev);
4398     */
4399    
4400     draw_ttbar_and_zjets_shape_for_one_configuration(mcjzb,datajzb,all_leptons,threejetswith30gev,true);
4401     }
4402    
4403 buchmann 1.32 float find_one_correction_factor(string FindKeyword, bool dodata, TCut SpecialCut, string SaveAs) {
4404 buchmann 1.1 TCanvas *cancorr = new TCanvas("cancorr","Canvas for Response Correction");
4405     cancorr->SetLogz();
4406     cancorr->SetRightMargin(0.13);
4407 buchmann 1.45 TCut zptforresponsepresentation(Restrmasscut&&SpecialCut&&passtrig);
4408 fronga 1.40
4409     if(PlottingSetup::DoBTag) zptforresponsepresentation=zptforresponsepresentation&&PlottingSetup::bTagRequirement;
4410     TH2F *niceresponseplotd = new TH2F("niceresponseplotd","",100,0,600,100,0,5);
4411     niceresponseplotd->Sumw2();
4412     TH2F* emuResponse = (TH2F*)niceresponseplotd->Clone("emuResponse");
4413 buchmann 1.27 vector<int> SampleIndices=allsamples.FindSample(FindKeyword);
4414 buchmann 1.33 for(int iSample=0;iSample<(int)SampleIndices.size();iSample++) {
4415 buchmann 1.32 if((allsamples.collection)[SampleIndices[iSample]].is_data && !dodata) continue;
4416     if((allsamples.collection)[SampleIndices[iSample]].is_data ==false && dodata) continue;
4417    
4418 buchmann 1.30 dout << " Response correction : Using sample " << (allsamples.collection)[SampleIndices[iSample]].filename << " for " << FindKeyword << endl;
4419 fronga 1.40 (allsamples.collection)[SampleIndices[iSample]].events->Draw("sumJetPt[1]/pt:pt>>+niceresponseplotd",(zptforresponsepresentation&&cutOSSF)*cutWeight);
4420     (allsamples.collection)[SampleIndices[iSample]].events->Draw("sumJetPt[1]/pt:pt>>+emuResponse",(zptforresponsepresentation&&cutOSOF)*cutWeight);
4421 buchmann 1.27 }
4422 fronga 1.40 niceresponseplotd->Add(emuResponse,-1);
4423    
4424 buchmann 1.95 //TF1 *resp_func = new TF1("resp_func","[0]+[1]/x + [2]/pow(x,2)",10,600);
4425    
4426 buchmann 1.1 niceresponseplotd->SetStats(0);
4427     niceresponseplotd->GetXaxis()->SetTitle("Z p_{T} [GeV]");
4428     niceresponseplotd->GetYaxis()->SetTitle("Response");
4429     niceresponseplotd->GetXaxis()->CenterTitle();
4430     niceresponseplotd->GetYaxis()->CenterTitle();
4431     niceresponseplotd->Draw("COLZ");
4432     TProfile * profd = (TProfile*)niceresponseplotd->ProfileX();
4433 fronga 1.40 profd->Rebin(2);
4434 buchmann 1.1 profd->SetMarkerSize(DataMarkerSize);
4435 buchmann 1.95 //profd->Fit(resp_func,"","same,e1",10,400);
4436 buchmann 1.94 profd->Fit("pol2","","same,e1",10,400);
4437 buchmann 1.95 //resp_func->SetLineColor(kBlue);
4438 buchmann 1.1 DrawPrelim();
4439 buchmann 1.27 string stitle="Data";
4440     if(!Contains(FindKeyword,"Data")) stitle="MC";
4441     TText* title = write_text(0.5,0.7,stitle.c_str());
4442 buchmann 1.1 title->SetTextAlign(12);
4443     title->Draw();
4444 buchmann 1.95 // TF1 *datapol=(TF1*)profd->GetFunction("pol0");
4445 buchmann 1.1 TF1 *datapol=(TF1*)profd->GetFunction("pol0");
4446 buchmann 1.27 float correction=datapol->GetParameter(0);
4447 buchmann 1.95
4448     // float correction=resp_func->GetParameter(0);
4449 buchmann 1.27 stringstream resstring;
4450     resstring<<"Response: "<<std::setprecision(2)<<100*correction<<" %";
4451     TText* restitle = write_text(0.5,0.65,resstring.str());
4452 buchmann 1.1 restitle->SetTextAlign(12);
4453     restitle->SetTextSize(0.03);
4454     restitle->Draw();
4455 buchmann 1.27 CompleteSave(cancorr,"ResponseCorrection/Response_Correction_Illustration_New_"+SaveAs);
4456     delete cancorr;
4457     delete niceresponseplotd;
4458 fronga 1.40 delete profd;
4459 buchmann 1.27 return correction;
4460     }
4461    
4462     void find_correction_factors(string &jzbvardata,string &jzbvarmc) {
4463    
4464 buchmann 1.30 dout << "Computing response corrections: " << endl;
4465 buchmann 1.27 //Step 1 : Get results
4466 buchmann 1.32 float datacorrection=find_one_correction_factor("Data",true,"","Data");
4467     float mccorrection=find_one_correction_factor("DY",false,"","MC");
4468 buchmann 1.1
4469 buchmann 1.93 /* float dataEEcorrection=find_one_correction_factor("Data",true,"id1==0","Data_ee");
4470 buchmann 1.32 float mcEEcorrection=find_one_correction_factor("DY",false,"id1==0","MC_ee");
4471 buchmann 1.27
4472 buchmann 1.32 float dataMMcorrection=find_one_correction_factor("Data",true,"id1==1","Data_mm");
4473     float mcMMcorrection=find_one_correction_factor("DY",false,"id1==1","MC_mm");
4474 buchmann 1.93 */
4475 buchmann 1.27 cout << "Corrections : " << endl;
4476     cout << " Data : " << datacorrection << endl;
4477 buchmann 1.93 // cout << " ee (" << dataEEcorrection << ") , mm (" << dataMMcorrection << ")" << endl;
4478 buchmann 1.27 cout << " MC : " << mccorrection << endl;
4479 buchmann 1.93 // cout << " ee (" << mcEEcorrection << ") , mm (" << mcMMcorrection << ")" << endl;
4480 buchmann 1.27
4481     //Step 2: Processing the result and making it into something useful :-)
4482 buchmann 1.1 stringstream jzbvardatas;
4483 buchmann 1.27 jzbvardatas << "(";
4484    
4485 buchmann 1.93 /*
4486 buchmann 1.27 if(dataEEcorrection>=1) jzbvardatas<<"((id1==0&&id1==id2)*(jzb[1]-" << dataEEcorrection-1 << "*pt))";
4487     if(dataEEcorrection<1) jzbvardatas<<"((id1==0&&id1==id2)*(jzb[1]+" << 1-dataEEcorrection << "*pt))";
4488    
4489     if(dataMMcorrection>=1) jzbvardatas<<"+((id1==1&&id1==id2)*(jzb[1]-" << dataMMcorrection-1 << "*pt))";
4490     if(dataMMcorrection<1) jzbvardatas<<"+((id1==1&&id1==id2)*(jzb[1]+" << 1-dataMMcorrection << "*pt))";
4491    
4492     float averagecorrection=(dataMMcorrection+dataEEcorrection)/2.0;
4493    
4494 buchmann 1.30 if(datacorrection>=1) jzbvardatas<<"+((id1!=id2)*(jzb[1]-" << datacorrection-1 << "*pt))";
4495     if(datacorrection<1) jzbvardatas<<"+((id1!=id2)*(jzb[1]+" << 1-datacorrection << "*pt))";
4496 buchmann 1.27
4497     jzbvardatas << ")";
4498 buchmann 1.1 jzbvardata=jzbvardatas.str();
4499 buchmann 1.93 */
4500 buchmann 1.1 stringstream jzbvarmcs;
4501 buchmann 1.27 jzbvarmcs << "(";
4502 buchmann 1.93 /*
4503 buchmann 1.27 if(mcEEcorrection>=1) jzbvarmcs<<"((id1==0&&id1==id2)*(jzb[1]-" << mcEEcorrection-1 << "*pt))";
4504     if(mcEEcorrection<1) jzbvarmcs<<"((id1==0&&id1==id2)*(jzb[1]+" << 1-mcEEcorrection << "*pt))";
4505    
4506     if(mcMMcorrection>=1) jzbvarmcs<<"+((id1==1&&id1==id2)*(jzb[1]-" << mcMMcorrection-1 << "*pt))";
4507     if(mcMMcorrection<1) jzbvarmcs<<"+((id1==1&&id1==id2)*(jzb[1]+" << 1-mcMMcorrection << "*pt))";
4508    
4509     float averagemccorrection=(mcMMcorrection+mcEEcorrection)/2.0;
4510    
4511 buchmann 1.30 if(mccorrection>=1) jzbvarmcs<<"+((id1!=id2)*(jzb[1]-" << mccorrection-1 << "*pt))";
4512     if(mccorrection<1) jzbvarmcs<<"+((id1!=id2)*(jzb[1]+" << 1-mccorrection << "*pt))";
4513 buchmann 1.27
4514     jzbvarmcs << ")";
4515 buchmann 1.1 jzbvarmc=jzbvarmcs.str();
4516 buchmann 1.93 */
4517    
4518     if(datacorrection>=1) jzbvardatas<<"(jzb[1]-" << datacorrection-1 << "*pt)";
4519     if(datacorrection<1) jzbvardatas<<"(jzb[1]+" << 1-datacorrection << "*pt)";
4520    
4521     if(mccorrection>=1) jzbvarmcs<<"(jzb[1]-" << mccorrection-1 << "*pt)";
4522     if(mccorrection<1) jzbvarmcs<<"(jzb[1]+" << 1-mccorrection << "*pt)";
4523    
4524     jzbvardata = jzbvardatas.str();
4525     jzbvarmc = jzbvarmcs.str();
4526    
4527 buchmann 1.1 dout << "JZB Z pt correction summary : " << endl;
4528     dout << " Data: The response is " << datacorrection << " --> jzb variable is now : " << jzbvardata << endl;
4529     dout << " MC : The response is " << mccorrection << " --> jzb variable is now : " << jzbvarmc << endl;
4530 buchmann 1.27
4531 buchmann 1.1 }
4532    
4533 buchmann 1.88 void pick_up_events(string cut, string filename, bool QuietMode=false) {
4534     allsamples.PickUpEvents(cut,filename,QuietMode);
4535 buchmann 1.1 }
4536    
4537 buchmann 1.18 void save_template(string mcjzb, string datajzb,vector<float> jzb_cuts,float MCPeakError,float DataPeakError, vector<float> jzb_shape_limit_bins) {
4538 buchmann 1.1 dout << "Saving configuration template!" << endl;
4539     ofstream configfile;
4540     configfile.open("../DistributedModelCalculations/last_configuration.C");
4541     configfile<<"#include <iostream>\n";
4542     configfile<<"#include <vector>\n";
4543     configfile<<"#ifndef SampleClassLoaded\n";
4544     configfile<<"#include \"SampleClass.C\"\n";
4545     configfile<<"#endif\n";
4546     configfile<<"#define SetupLoaded\n";
4547     configfile<<"#ifndef ResultLibraryClassLoaded\n";
4548     configfile<<"#include \"ResultLibraryClass.C\"\n";
4549     configfile<<"#endif\n";
4550    
4551     configfile<<"\nusing namespace std;\n\n";
4552    
4553     configfile<<"namespace PlottingSetup { \n";
4554     configfile<<"string datajzb=\"datajzb_ERROR\";\n";
4555     configfile<<"string mcjzb=\"mcjzb_ERROR\";\n";
4556     configfile<<"vector<float>jzb_cuts;\n";
4557 buchmann 1.18 configfile<<"vector<float>jzb_shape_limit_bins;\n";
4558 buchmann 1.1 configfile<<"float MCPeakError=-999;\n";
4559 buchmann 1.11 configfile<<"float DataPeakError=-999;\n";
4560 buchmann 1.1 configfile<<"}\n\n";
4561    
4562     configfile<<"void read_config() {\n";
4563     configfile<<"datajzb=\""<<datajzb<<"\";\n";
4564     configfile<<"mcjzb=\""<<mcjzb<<"\";\n\n";
4565 buchmann 1.11 configfile<<"\n\nMCPeakError="<<MCPeakError<<";\n";
4566     configfile<<"DataPeakError="<<DataPeakError<<";\n\n";
4567 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";
4568 buchmann 1.1 configfile<<"\n\n";
4569 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";
4570     for(int i=0;i<(int)Npred.size();i++) configfile<<"Npred.push_back("<<Npred[i]<<"); // JZB cut at " << jzb_cuts[i] << "\n";
4571     for(int i=0;i<(int)Nprederr.size();i++) configfile<<"Nprederr.push_back("<<Nprederr[i]<<"); // JZB cut at " << jzb_cuts[i] << "\n";
4572 buchmann 1.1 configfile<<"\n\n";
4573 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";
4574     for(int i=0;i<(int)flippedNpred.size();i++) configfile<<"flippedNpred.push_back("<<flippedNpred[i]<<"); // JZB cut at " << jzb_cuts[i] << "\n";
4575 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";
4576 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";
4577     configfile<<"\n\n";
4578 buchmann 1.1 configfile<<"\n\n";
4579     configfile<<"luminosity="<<luminosity<<";\n";
4580 buchmann 1.5 configfile<<"RestrictToMassPeak="<<RestrictToMassPeak<<";//defines the type of analysis we're running\n";
4581 buchmann 1.52 configfile<<"UseSidebandsForcJZB="<<UseSidebandsForcJZB<<";//tells us whether to use the sidebands or not\n";
4582 buchmann 1.1
4583     configfile<<"\n\ncout << \"Configuration successfully loaded!\" << endl; \n \n } \n \n";
4584    
4585     configfile.close();
4586    
4587     }
4588    
4589     float get_nonzero_minimum(TH1F *histo) {
4590     float min=histo->GetMaximum();
4591     for(int ibin=1;ibin<=histo->GetNbinsX();ibin++) {
4592     float curcont=histo->GetBinContent(ibin);
4593     if(curcont<min&&curcont>0) min=curcont;
4594     }
4595     return min;
4596     }
4597    
4598     void draw_all_ttbar_histos(TCanvas *can, vector<TH1F*> histos, string drawoption="", float manualmin=-9) {
4599     can->cd();
4600     float min=1;
4601     float max=histos[0]->GetMaximum();
4602     if(manualmin>=0) min=manualmin;
4603     else {
4604 buchmann 1.16 for(int i=1;i<(int)histos.size();i++) {
4605 buchmann 1.1 float curmin=get_nonzero_minimum(histos[i]);
4606     float curmax=histos[i]->GetMaximum();
4607     if(curmin<min) min=curmin;
4608     if(curmax>max) max=curmax;
4609     }
4610     }
4611     histos[0]->GetYaxis()->SetRangeUser(min,4*max);
4612     histos[0]->Draw(drawoption.c_str());
4613     stringstream drawopt;
4614     drawopt << drawoption << ",same";
4615 buchmann 1.16 for(int i=1;i<(int)histos.size();i++) {
4616 buchmann 1.1 histos[i]->Draw(drawopt.str().c_str());
4617     }
4618     }
4619    
4620 buchmann 1.93 void ttbar_sidebands_comparison(string mcjzb, vector<float> binning, string prestring, TCut cut) {
4621 buchmann 1.1 //in the case of the on peak analysis, we compare the 3 control regions to the real value
4622     //in the case of the OFF peak analysis, we compare our control region to the real value
4623     TCut weightbackup=cutWeight;
4624 buchmann 1.65 switch_overunderflow(true);
4625 buchmann 1.34
4626 buchmann 1.93 bool doPURW=true;
4627 buchmann 1.34
4628    
4629     if(!doPURW) {
4630 fronga 1.40 dout << "Not doing PU reweighting for ttbar closure test" << endl;
4631 buchmann 1.34 cutWeight="1.0";
4632     // Do it without PU re-weighting
4633     float MCPeakNoPU=0,MCPeakErrorNoPU=0,DataPeakNoPU=0,DataPeakErrorNoPU=0,MCSigma=0,DataSigma=0;
4634     stringstream resultsNoPU;
4635     stringstream noPUdatajzb;
4636     stringstream noPUmcjzb;
4637    
4638     stringstream mcjzbnoPU;
4639     find_peaks(MCPeakNoPU,MCPeakErrorNoPU, DataPeakNoPU, DataPeakErrorNoPU,resultsNoPU,true,noPUdatajzb,noPUmcjzb);
4640 buchmann 1.36 mcjzb = noPUmcjzb.str();
4641 buchmann 1.34 }
4642    
4643 fronga 1.40
4644 buchmann 1.1 float simulatedlumi = luminosity; //in pb please - adjust to your likings
4645    
4646 buchmann 1.93 TH1F *TZem = allsamples.Draw("TZem", mcjzb,binning,"JZB [GeV]","events",cutmass&&cutOSOF&&cutnJets&&cut,mc,simulatedlumi,allsamples.FindSample("/TT"));
4647     TH1F *nTZem = allsamples.Draw("nTZem","-"+mcjzb,binning,"JZB [GeV]","events",cutmass&&cutOSOF&&cutnJets&&cut,mc,simulatedlumi,allsamples.FindSample("/TT"));
4648 buchmann 1.1 TH1F *TSem;
4649     TH1F *nTSem;
4650 buchmann 1.93 TH1F *TZeemm = allsamples.Draw("TZeemm", mcjzb,binning,"JZB [GeV]","events",cutmass&&cutOSSF&&cutnJets&&cut,mc,simulatedlumi,allsamples.FindSample("/TT"));
4651     TH1F *nTZeemm = allsamples.Draw("nTZeemm","-"+mcjzb,binning,"JZB [GeV]","events",cutmass&&cutOSSF&&cutnJets&&cut,mc,simulatedlumi,allsamples.FindSample("/TT"));
4652 buchmann 1.1 TH1F *TSeemm;
4653     TH1F *nTSeemm;
4654    
4655 buchmann 1.50 if(PlottingSetup::RestrictToMassPeak&&PlottingSetup::UseSidebandsForcJZB) {
4656 buchmann 1.93 TSem = allsamples.Draw("TSem", mcjzb,binning,"JZB [GeV]","events",sidebandcut&&cutOSOF&&cutnJets&&cut,mc,simulatedlumi,allsamples.FindSample("/TT"));
4657     nTSem = allsamples.Draw("nTSem", "-"+mcjzb,binning,"JZB [GeV]","events",sidebandcut&&cutOSOF&&cutnJets&&cut,mc,simulatedlumi,allsamples.FindSample("/TT"));
4658     TSeemm = allsamples.Draw("TSeemm", mcjzb,binning,"JZB [GeV]","events",sidebandcut&&cutOSSF&&cutnJets&&cut,mc,simulatedlumi,allsamples.FindSample("/TT"));
4659     nTSeemm = allsamples.Draw("nTSeemm","-"+mcjzb,binning,"JZB [GeV]","events",sidebandcut&&cutOSSF&&cutnJets&&cut,mc,simulatedlumi,allsamples.FindSample("/TT"));
4660 buchmann 1.1 }
4661    
4662     TCanvas *tcan = new TCanvas("tcan","tcan");
4663     tcan->SetLogy(1);
4664    
4665     TZeemm->SetLineColor(kBlack);
4666     TZem->SetLineColor(kRed);
4667     TZeemm->SetMarkerColor(kBlack);
4668     TZem->SetMarkerColor(kRed);
4669    
4670    
4671 buchmann 1.50 if(PlottingSetup::RestrictToMassPeak&&PlottingSetup::UseSidebandsForcJZB) {
4672 buchmann 1.1 TSem->SetLineColor(TColor::GetColor("#00A616"));
4673     TSeemm->SetLineColor(kMagenta+2);
4674     TSem->SetMarkerColor(TColor::GetColor("#00A616"));
4675     TSeemm->SetMarkerColor(kMagenta+2);
4676     TSem->SetLineStyle(2);
4677     TSeemm->SetLineStyle(3);
4678     }
4679    
4680     vector<TH1F*> histos;
4681 buchmann 1.31 TZem->GetXaxis()->SetRangeUser(-100,binning[binning.size()-1]);
4682     TZeemm->GetXaxis()->SetRangeUser(-100,binning[binning.size()-1]);
4683 buchmann 1.1 histos.push_back(TZem);
4684     histos.push_back(TZeemm);
4685 buchmann 1.50 if(PlottingSetup::RestrictToMassPeak&&PlottingSetup::UseSidebandsForcJZB) {
4686 buchmann 1.31 TSeemm->GetXaxis()->SetRangeUser(-100,binning[binning.size()-1]);
4687     TSem->GetXaxis()->SetRangeUser(-100,binning[binning.size()-1]);
4688 buchmann 1.1 histos.push_back(TSem);
4689     histos.push_back(TSeemm);
4690     }
4691 buchmann 1.67 draw_all_ttbar_histos(tcan,histos,"histo",8);
4692 buchmann 1.1
4693     TLegend *leg = make_legend("MC t#bar{t}",0.6,0.65,false);
4694     leg->AddEntry(TZeemm,"SFZP","l");
4695     leg->AddEntry(TZem,"OFZP","l");
4696 buchmann 1.50 if(PlottingSetup::RestrictToMassPeak&&PlottingSetup::UseSidebandsForcJZB) {
4697 buchmann 1.1 leg->AddEntry(TSeemm,"SFSB","l");
4698     leg->AddEntry(TSem,"OFSB","l");
4699     }
4700     leg->Draw("same");
4701     DrawMCPrelim(simulatedlumi);
4702     CompleteSave(tcan,"Systematics/"+prestring+"/ttbar_shape_comparison");
4703 buchmann 1.66
4704 buchmann 1.1 TH1F *TZemcopy = (TH1F*)TZem->Clone("TZemcopy");
4705     TH1F *TZeemmcopy = (TH1F*)TZeemm->Clone("TZeemmcopy");
4706 buchmann 1.11 TH1F *TSeemmcopy;
4707     TH1F *TSemcopy;
4708 buchmann 1.50 if(PlottingSetup::RestrictToMassPeak&&PlottingSetup::UseSidebandsForcJZB) {
4709 buchmann 1.11 TSeemmcopy = (TH1F*)TSeemm->Clone("TSeemmcopy");
4710     TSemcopy = (TH1F*)TSem->Clone("TSemcopy");
4711     }
4712 buchmann 1.1
4713     TZem->Divide(TZeemm);
4714     TZem->SetMarkerStyle(21);
4715 buchmann 1.50 if(PlottingSetup::RestrictToMassPeak&&PlottingSetup::UseSidebandsForcJZB) {
4716 buchmann 1.1 TSem->Divide(TZeemm);
4717     TSeemm->Divide(TZeemm);
4718     TSem->SetMarkerStyle(24);
4719     TSeemm->SetMarkerStyle(32);
4720 fronga 1.40 }
4721 buchmann 1.1
4722     tcan->SetLogy(0);
4723     TZem->GetYaxis()->SetRangeUser(0,2.5);
4724     TZem->GetYaxis()->SetTitle("ratio");
4725     TZem->Draw();
4726 buchmann 1.50 if(PlottingSetup::RestrictToMassPeak&&PlottingSetup::UseSidebandsForcJZB) {
4727 buchmann 1.1 TSem->Draw("same");
4728     TSeemm->Draw("same");
4729     }
4730    
4731 buchmann 1.33 float linepos=emuncertONPEAK;
4732 buchmann 1.51 if(!PlottingSetup::RestrictToMassPeak) linepos=emuncertOFFPEAK;
4733 buchmann 1.33
4734 buchmann 1.1 TLine *top = new TLine(binning[0],1.0+linepos,binning[binning.size()-1],1.0+linepos);
4735     TLine *center = new TLine(binning[0],1.0,binning[binning.size()-1],1.0);
4736     TLine *bottom = new TLine(binning[0],1.0-linepos,binning[binning.size()-1],1.0-linepos);
4737    
4738 buchmann 1.11 /*write_warning(__FUNCTION__,"These two lines are to be removed!");
4739     TLine *topalt = new TLine(binning[0],1.0+0.1,binning[binning.size()-1],1.0+0.1);
4740     TLine *bottomalt = new TLine(binning[0],1.0-0.1,binning[binning.size()-1],1.0-0.1);
4741     topalt->SetLineColor(kRed);topalt->SetLineStyle(3);
4742     bottomalt->SetLineColor(kRed);bottomalt->SetLineStyle(3);
4743     topalt->Draw("same");bottomalt->Draw("same");*/
4744    
4745    
4746 buchmann 1.1 top->SetLineColor(kBlue);top->SetLineStyle(2);
4747     bottom->SetLineColor(kBlue);bottom->SetLineStyle(2);
4748     center->SetLineColor(kBlue);
4749    
4750     top->Draw("same");
4751     center->Draw("same");
4752     bottom->Draw("same");
4753    
4754     TLegend *leg2 = make_legend("MC t#bar{t}",0.55,0.75,false);
4755     leg2->AddEntry(TZem,"OFZP / SFZP","ple");
4756 buchmann 1.50 if(PlottingSetup::RestrictToMassPeak&&PlottingSetup::UseSidebandsForcJZB) {
4757 buchmann 1.1 leg2->AddEntry(TSeemm,"SFSB / SFZP","ple");
4758     leg2->AddEntry(TSem,"OFSB / SFZP","ple");
4759     }
4760     leg2->AddEntry(bottom,"syst. envelope","l");
4761     leg2->SetX1(0.25);leg2->SetX2(0.6);
4762     leg2->SetY1(0.65);
4763    
4764     leg2->Draw("same");
4765    
4766     DrawMCPrelim(simulatedlumi);
4767     CompleteSave(tcan,"Systematics/"+prestring+"/ttbar_shape_comparison_ratio");
4768    
4769 buchmann 1.66
4770 fronga 1.40 if (0) { // Turn this off: we don't need this
4771    
4772     ///-------------- second part: only look at the quantity we actually care about!
4773     TH1F *leftsfzp = (TH1F*)nTZeemm->Clone("leftsfzp");
4774     TH1F *rightsfzp = (TH1F*)TZeemmcopy->Clone("rightsfzp");
4775     rightsfzp->Add(leftsfzp,-1);
4776     TH1F *leftofzp = (TH1F*)nTZem->Clone("leftofzp");
4777     TH1F *rightofzp = (TH1F*)TZemcopy->Clone("rightofzp");
4778     rightofzp->Add(leftofzp,-1);
4779     TH1F *leftofsb;
4780     TH1F *rightofsb;
4781     TH1F *leftsfsb;
4782     TH1F *rightsfsb;
4783 buchmann 1.50 if(PlottingSetup::RestrictToMassPeak&&PlottingSetup::UseSidebandsForcJZB) {
4784 fronga 1.40 leftofsb = (TH1F*)nTSem->Clone("leftofsb");
4785     rightofsb = (TH1F*)TSemcopy->Clone("rightofsb");
4786     rightofsb->Add(leftofsb,-1);
4787     leftsfsb = (TH1F*)nTSeemm->Clone("leftsfsb");
4788     rightsfsb = (TH1F*)TSeemmcopy->Clone("rightsfsb");
4789     rightsfsb->Add(leftsfsb,-1);
4790     }
4791 buchmann 1.1
4792 fronga 1.40 tcan->SetLogy(1);
4793     rightsfzp->GetXaxis()->SetRangeUser(0,binning[binning.size()-1]);
4794     rightsfzp->GetYaxis()->SetTitle("#deltaJZB / 25 GeV");
4795     rightsfzp->Draw("histo");
4796     rightofzp->Draw("histo,same");
4797 buchmann 1.50 if(PlottingSetup::RestrictToMassPeak&&PlottingSetup::UseSidebandsForcJZB) {
4798 fronga 1.40 rightofsb->Draw("histo,same");
4799     rightsfsb->Draw("histo,same");
4800     }
4801     DrawMCPrelim(simulatedlumi);
4802    
4803     TLegend *legA = make_legend("MC t#bar{t}",0.6,0.65,false);
4804     legA->AddEntry(rightsfzp,"SFZP","l");
4805     legA->AddEntry(rightofzp,"OFZP","l");
4806 buchmann 1.50 if(PlottingSetup::RestrictToMassPeak&&PlottingSetup::UseSidebandsForcJZB) {
4807 fronga 1.40 legA->AddEntry(rightofsb,"SFSB","l");
4808     legA->AddEntry(rightsfsb,"OFSB","l");
4809     }
4810     legA->Draw();
4811 buchmann 1.1
4812 fronga 1.40 CompleteSave(tcan,"Systematics/"+prestring+"/ttbar_deltajzb_comparison");
4813 buchmann 1.1
4814 fronga 1.40 tcan->SetLogy(0);
4815     rightofzp->Divide(rightsfzp);
4816     rightofzp->GetXaxis()->SetRangeUser(0.0,binning[binning.size()-1]);
4817     rightofzp->GetYaxis()->SetRangeUser(0.0,2.5);
4818     rightofzp->GetYaxis()->SetTitle("#deltaJZB ratio");
4819     rightofzp->Draw();
4820 buchmann 1.50 if(PlottingSetup::RestrictToMassPeak&&PlottingSetup::UseSidebandsForcJZB) {
4821 fronga 1.40 rightofsb->Divide(rightsfzp);
4822     rightsfsb->Divide(rightsfzp);
4823     rightofsb->Draw("same");
4824     rightsfsb->Draw("same");
4825     }
4826 buchmann 1.1
4827 fronga 1.40 TLine *top2 = new TLine(0.0,1.0+linepos,binning[binning.size()-1],1.0+linepos);
4828     TLine *center2 = new TLine(0.0,1.0,binning[binning.size()-1],1.0);
4829     TLine *bottom2 = new TLine(0.0,1.0-linepos,binning[binning.size()-1],1.0-linepos);
4830    
4831     top2->SetLineColor(kBlue);top2->SetLineStyle(2);
4832     bottom2->SetLineColor(kBlue);bottom2->SetLineStyle(2);
4833     center2->SetLineColor(kBlue);
4834    
4835     top2->Draw("same");
4836     center2->Draw("same");
4837     bottom2->Draw("same");
4838 buchmann 1.1
4839 fronga 1.40 rightofzp->SetMarkerStyle(21);
4840 buchmann 1.50 if(PlottingSetup::RestrictToMassPeak&&PlottingSetup::UseSidebandsForcJZB) {
4841 fronga 1.40 rightofsb->SetMarkerStyle(24);
4842     rightsfsb->SetMarkerStyle(32);
4843     }
4844 buchmann 1.1
4845 fronga 1.40 TLegend *leg3 = make_legend("MC t#bar{t}",0.55,0.75,false);
4846     leg3->AddEntry(rightofzp,"OFZP / SFZP","ple");
4847 buchmann 1.50 if(PlottingSetup::RestrictToMassPeak&&PlottingSetup::UseSidebandsForcJZB) {
4848 fronga 1.40 leg3->AddEntry(rightsfsb,"SFSB / SFZP","ple");
4849     leg3->AddEntry(rightofsb,"OFSB / SFZP","ple");
4850     }
4851     leg3->AddEntry(bottom,"syst. envelope","l");
4852     leg3->SetX1(0.25);leg3->SetX2(0.6);
4853     leg3->SetY1(0.65);
4854 buchmann 1.1
4855 fronga 1.40 leg3->Draw("same");
4856 buchmann 1.1
4857 fronga 1.40 DrawMCPrelim(simulatedlumi);
4858     CompleteSave(tcan,"Systematics/"+prestring+"/ttbar_deltajzb_comparison_ratio");
4859 buchmann 1.1
4860     }
4861    
4862     delete TZem;
4863     delete nTZem;
4864     delete TZeemm;
4865     delete nTZeemm;
4866 buchmann 1.50 if(PlottingSetup::RestrictToMassPeak&&PlottingSetup::UseSidebandsForcJZB) {
4867 buchmann 1.1 delete TSem;
4868     delete nTSem;
4869     delete TSeemm;
4870     delete nTSeemm;
4871     }
4872    
4873     delete tcan;
4874     cutWeight=weightbackup;
4875 buchmann 1.65 switch_overunderflow(false);
4876 buchmann 1.1 }
4877    
4878     void ttbar_sidebands_comparison(string mcjzb, vector<float> jzb_binning) {
4879     vector<float> nicer_binning;
4880 buchmann 1.32
4881 buchmann 1.33 /* nicer_binning.push_back(-400);
4882 buchmann 1.31 nicer_binning.push_back(-250);
4883     nicer_binning.push_back(-200);
4884     nicer_binning.push_back(-150);
4885     nicer_binning.push_back(-100);
4886     nicer_binning.push_back(-50);
4887     nicer_binning.push_back(-20);
4888    
4889     nicer_binning.push_back(0);
4890     nicer_binning.push_back(20);
4891     nicer_binning.push_back(50);
4892     nicer_binning.push_back(100);
4893     nicer_binning.push_back(150);
4894     nicer_binning.push_back(200);
4895     nicer_binning.push_back(250);
4896 buchmann 1.33 nicer_binning.push_back(400);*/
4897    
4898 buchmann 1.1 nicer_binning.push_back(-100);
4899     nicer_binning.push_back(-50);
4900     nicer_binning.push_back(-25);
4901     nicer_binning.push_back(0);
4902     nicer_binning.push_back(25);
4903     nicer_binning.push_back(50);
4904     nicer_binning.push_back(75);
4905     nicer_binning.push_back(100);
4906     nicer_binning.push_back(125);
4907     nicer_binning.push_back(150);
4908 fronga 1.40 //nicer_binning.push_back(175);
4909 buchmann 1.1 nicer_binning.push_back(200);
4910 buchmann 1.66 // nicer_binning.push_back(250);
4911     // nicer_binning.push_back(300);
4912     // nicer_binning.push_back(400);
4913 buchmann 1.33
4914 buchmann 1.93 ttbar_sidebands_comparison(mcjzb,nicer_binning, "ttbar/",TCut("mll>0"));
4915     ttbar_sidebands_comparison(mcjzb,nicer_binning, "ttbar/LowMassRegion2070",TCut("mll>20&&mll<70"));
4916     ttbar_sidebands_comparison(mcjzb,nicer_binning, "ttbar/ZWindow",Restrmasscut);
4917    
4918 buchmann 1.1 }
4919    
4920    
4921 buchmann 1.70 void zjets_prediction_comparison(string mcjzbWithPUa, TCut massregioncut, string massregionname) {
4922 buchmann 1.66 cout << "****************************************************************************************************************************************************************" << endl;
4923 buchmann 1.20 TCanvas *zcan = new TCanvas("zcan","zcan");
4924     TCut weightbackup=cutWeight;
4925 buchmann 1.36
4926 buchmann 1.66 bool UsePURW=true;
4927 buchmann 1.36
4928    
4929     string mcjzb;
4930     if(UsePURW) {
4931     mcjzb=mcjzbWithPUa;
4932 buchmann 1.66 cout << "Using PURW peak positions" << endl;
4933 buchmann 1.36 } else {
4934     // Do it without PU re-weighting
4935 buchmann 1.66 cutWeight="1.0";
4936 buchmann 1.36 float MCPeakNoPU=0,MCPeakErrorNoPU=0,DataPeakNoPU=0,DataPeakErrorNoPU=0,MCSigma=0,DataSigma=0;
4937     stringstream resultsNoPU;
4938     stringstream noPUdatajzb;
4939     stringstream noPUmcjzb;
4940    
4941     find_peaks(MCPeakNoPU,MCPeakErrorNoPU, DataPeakNoPU, DataPeakErrorNoPU,resultsNoPU,false,noPUdatajzb,noPUmcjzb);
4942     dout << "The peak corrected JZB expression for MC without pileup is : " << noPUmcjzb.str() << endl;
4943    
4944     mcjzb = noPUmcjzb.str();
4945    
4946     }
4947 buchmann 1.34
4948 buchmann 1.25
4949 buchmann 1.92
4950 buchmann 1.25 vector<float> binning;
4951     binning.push_back(0);
4952 buchmann 1.33 binning.push_back(10);
4953 buchmann 1.93 binning.push_back(30);
4954     // binning.push_back(40);
4955     // binning.push_back(60);
4956     binning.push_back(50);
4957 buchmann 1.36 // binning.push_back(60);
4958     // binning.push_back(70);
4959     // binning.push_back(80);
4960     // binning.push_back(90);
4961 buchmann 1.25 binning.push_back(100);
4962 buchmann 1.36
4963 buchmann 1.1 float simulatedlumi = luminosity;//in pb please - adjust to your likings
4964    
4965     TCut kPos((mcjzb+">0").c_str());
4966     TCut kNeg((mcjzb+"<0").c_str());
4967 buchmann 1.92 TCut reducedNJets(cutnJets);
4968 buchmann 1.1 string var( "abs("+mcjzb+")" );
4969 buchmann 1.36
4970 buchmann 1.92
4971 buchmann 1.93 TCut notTau("!EventZToTaus");
4972 buchmann 1.66 TCut ee_mm_tautau("mll>0");
4973 buchmann 1.36
4974 buchmann 1.95 TH1F *hJZBpos = allsamples.Draw("hJZBpos",var,binning, "JZB [GeV]", "events",cutmass&&cutOSSF&&cutnJets&&notTau&&kPos&&massregioncut,mc,simulatedlumi,allsamples.FindSample("DYJetsToLL"));
4975     TH1F *hJZBneg = allsamples.Draw("hJZBneg",var,binning, "JZB [GeV]", "events",cutmass&&cutOSSF&&cutnJets&&notTau&&kNeg&&massregioncut,mc,simulatedlumi,allsamples.FindSample("DYJetsToLL"));
4976 buchmann 1.36
4977 buchmann 1.1 hJZBpos->SetLineColor(kBlack);
4978     hJZBneg->SetLineColor(kRed);
4979    
4980 buchmann 1.25 hJZBpos->SetMinimum(1.0);
4981 buchmann 1.1 hJZBpos->Draw("e1");
4982     hJZBneg->Draw("same,hist");
4983     hJZBpos->Draw("same,e1"); // So it's on top...
4984    
4985 buchmann 1.36 TLegend *leg = make_legend("MC Z+jets #rightarrow ee,#mu#mu",0.55,0.75,false);
4986 buchmann 1.1 leg->AddEntry(hJZBpos,"Observed","pe");
4987     leg->AddEntry(hJZBneg,"Predicted","l");
4988     leg->Draw("same");
4989     DrawMCPrelim(simulatedlumi);
4990 buchmann 1.70 CompleteSave(zcan,"Systematics/ZJets/zjets_eemm_prediction"+any2string(massregionname));
4991 buchmann 1.1
4992     TH1F* hratio = (TH1F*)hJZBpos->Clone("hratio");
4993     hratio->Divide(hJZBneg);
4994    
4995 buchmann 1.30 for(int i=1;i<=hJZBpos->GetNbinsX();i++) {
4996 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;
4997 buchmann 1.30 }
4998    
4999 buchmann 1.70 // zcan->SetLogy(0);
5000 buchmann 1.66 hratio->GetYaxis()->SetRangeUser(0,2.5);
5001 buchmann 1.1 hratio->GetYaxis()->SetTitle("Observed/Predicted");
5002     hratio->Draw("e1");
5003    
5004 buchmann 1.92 TLine *top = new TLine(binning[0],1.2,binning[binning.size()-1],1.2);
5005 buchmann 1.25 TLine *center = new TLine(binning[0],1.0,binning[binning.size()-1],1.0);
5006 buchmann 1.92 TLine *bottom = new TLine(binning[0],0.8,binning[binning.size()-1],0.8);
5007 buchmann 1.1
5008    
5009     top->SetLineColor(kBlue);top->SetLineStyle(2);
5010     bottom->SetLineColor(kBlue);bottom->SetLineStyle(2);
5011     center->SetLineColor(kBlue);
5012    
5013     top->Draw("same");
5014     center->Draw("same");
5015     bottom->Draw("same");
5016    
5017 buchmann 1.36 TLegend *leg2 = make_legend("MC Z+jets #rightarrow ee,#mu#mu",0.25,0.75,false);
5018 buchmann 1.1 leg2->AddEntry(hratio,"obs / pred","pe");
5019     leg2->AddEntry(bottom,"syst. envelope","l");
5020     leg2->Draw("same");
5021     DrawMCPrelim(simulatedlumi);
5022 buchmann 1.70 CompleteSave(zcan,"Systematics/ZJets/zjets_eemm_prediction_ratio"+any2string(massregionname));
5023 buchmann 1.36
5024 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"));
5025     TH1F *LcorrJZBeemm = allsamples.Draw("LcorrJZBeemm",var,binning, "JZB [GeV]", "events",cutmass&&cutOSSF&&reducedNJets&&ee_mm_tautau&&kNeg&&massregioncut,mc,simulatedlumi,allsamples.FindSample("DYJetsToLL"));
5026     TH1F *RcorrJZBem = allsamples.Draw("RcorrJZBem",var,binning, "JZB [GeV]", "events",cutmass&&cutOSOF&&reducedNJets&&ee_mm_tautau&&kPos&&massregioncut,mc,simulatedlumi,allsamples.FindSample("DYJetsToLL"));
5027     TH1F *LcorrJZBem = allsamples.Draw("LcorrJZBem",var,binning, "JZB [GeV]", "events",cutmass&&cutOSOF&&reducedNJets&&ee_mm_tautau&&kNeg&&massregioncut,mc,simulatedlumi,allsamples.FindSample("DYJetsToLL"));
5028 buchmann 1.36
5029     TH1F *RcorrJZBSBem;
5030     TH1F *LcorrJZBSBem;
5031     TH1F *RcorrJZBSBeemm;
5032     TH1F *LcorrJZBSBeemm;
5033    
5034 buchmann 1.50 if(PlottingSetup::RestrictToMassPeak&&PlottingSetup::UseSidebandsForcJZB) {
5035 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"));
5036     LcorrJZBSBem = allsamples.Draw("LcorrJZBSBem",var,binning, "JZB [GeV]", "events",sidebandcut&&cutOSOF&&reducedNJets&&ee_mm_tautau&&kNeg&&massregioncut,mc,simulatedlumi,allsamples.FindSample("DYJetsToLL"));
5037     RcorrJZBSBeemm = allsamples.Draw("RcorrJZBSBeemm",var,binning, "JZB [GeV]", "events",sidebandcut&&cutOSSF&&reducedNJets&&ee_mm_tautau&&kPos&&massregioncut,mc,simulatedlumi,allsamples.FindSample("DYJetsToLL"));
5038     LcorrJZBSBeemm = allsamples.Draw("LcorrJZBSBeemm",var,binning, "JZB [GeV]", "events",sidebandcut&&cutOSSF&&reducedNJets&&ee_mm_tautau&&kNeg&&massregioncut,mc,simulatedlumi,allsamples.FindSample("DYJetsToLL"));
5039 buchmann 1.36 }
5040    
5041     TH1F *Bpred = (TH1F*)LcorrJZBeemm->Clone("Bpred");
5042 buchmann 1.50 if(PlottingSetup::RestrictToMassPeak&&PlottingSetup::UseSidebandsForcJZB) {
5043 buchmann 1.36 Bpred->Add(RcorrJZBem,1.0/3.);
5044     Bpred->Add(LcorrJZBem,-1.0/3.);
5045     Bpred->Add(RcorrJZBSBem,1.0/3.);
5046     Bpred->Add(LcorrJZBSBem,-1.0/3.);
5047     Bpred->Add(RcorrJZBSBeemm,1.0/3.);
5048     Bpred->Add(LcorrJZBSBeemm,-1.0/3.);
5049     } else {
5050     Bpred->Add(RcorrJZBem,1.0);
5051     Bpred->Add(LcorrJZBem,-1.0);
5052     }
5053    
5054     Bpred->SetLineColor(kRed);
5055    
5056     TAUhJZBpos->SetLineColor(kBlack);
5057     Bpred->SetLineColor(kRed);
5058    
5059     TAUhJZBpos->SetMinimum(1.0);
5060     TAUhJZBpos->Draw("e1");
5061     Bpred->Draw("same,hist");
5062     TAUhJZBpos->Draw("same,e1");
5063    
5064     TLegend *TAUleg = make_legend("MC Z+jets #rightarrow ee,#mu#mu,#tau#tau",0.55,0.75,false);
5065     TAUleg->AddEntry(TAUhJZBpos,"Observed","pe");
5066     TAUleg->AddEntry(Bpred,"Predicted","l");
5067     TAUleg->Draw("same");
5068     DrawMCPrelim(simulatedlumi);
5069 buchmann 1.70 CompleteSave(zcan,"Systematics/ZJets/zjets_eemumutautau_prediction__"+any2string(massregionname));
5070 buchmann 1.36
5071     TH1F* TAUhratio = (TH1F*)TAUhJZBpos->Clone("TAUhratio");
5072     TAUhratio->Divide(Bpred);
5073    
5074     for(int i=1;i<=TAUhJZBpos->GetNbinsX();i++) {
5075 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;
5076    
5077    
5078 buchmann 1.36 }
5079    
5080     zcan->SetLogy(0);
5081     TAUhratio->GetYaxis()->SetRangeUser(0,2.5);
5082     TAUhratio->GetYaxis()->SetTitle("Observed/Predicted");
5083     TAUhratio->Draw("e1");
5084    
5085     top->Draw("same");
5086     center->Draw("same");
5087     bottom->Draw("same");
5088    
5089 buchmann 1.66 TLegend *TAUleg2 = make_legend("MC Z+jets #rightarrow ee,#mu#mu",0.25,0.75,false);
5090 buchmann 1.36 TAUleg2->AddEntry(TAUhratio,"obs / pred","pe");
5091     TAUleg2->AddEntry(bottom,"syst. envelope","l");
5092     TAUleg2->Draw("same");
5093     DrawMCPrelim(simulatedlumi);
5094 buchmann 1.70 CompleteSave(zcan,"Systematics/ZJets/zjets_eemumutautau_prediction_ratio"+any2string(massregionname));
5095 buchmann 1.36
5096     delete Bpred;
5097     delete TAUhJZBpos;
5098     delete LcorrJZBeemm;
5099     delete RcorrJZBem;
5100     delete LcorrJZBem;
5101 buchmann 1.70 delete hJZBpos;
5102     delete hJZBneg;
5103 buchmann 1.36
5104 buchmann 1.50 if(PlottingSetup::RestrictToMassPeak&&PlottingSetup::UseSidebandsForcJZB) {
5105 buchmann 1.36 delete RcorrJZBSBem;
5106     delete LcorrJZBSBem;
5107     delete RcorrJZBSBeemm;
5108     delete LcorrJZBSBeemm;
5109     }
5110    
5111 buchmann 1.92 //***************************************************************************************************
5112    
5113     string jzbvar=var;
5114 buchmann 1.93 /*
5115 buchmann 1.92 for(int i=0;i<60;i+=10) {
5116     stringstream sSpecialJZBCut;
5117     sSpecialJZBCut << jzbvar << ">" << i;
5118     TCut SpecialJZBCut(sSpecialJZBCut.str().c_str());
5119    
5120     var="mll";
5121    
5122 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"));
5123     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"));
5124     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"));
5125     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"));
5126 buchmann 1.92
5127     TH1F *RcorrJZBPlusSBem;
5128     TH1F *LcorrJZBPlusSBem;
5129     TH1F *RcorrJZBPlusSBeemm;
5130     TH1F *LcorrJZBPlusSBeemm;
5131    
5132    
5133     if(PlottingSetup::RestrictToMassPeak&&PlottingSetup::UseSidebandsForcJZB) {
5134 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"));
5135     LcorrJZBPlusSBem = allsamples.Draw("LcorrJZBPlusSBem",var,10,0,200, "m_{ll} [GeV]", "events",sidebandcut&&cutOSOF&&reducedNJets&&notTau&&kNeg&&massregioncut&&SpecialJZBCut,mc,simulatedlumi,allsamples.FindSample("DYJetsToLL"));
5136     RcorrJZBPlusSBeemm = allsamples.Draw("RcorrJZBPlusSBeemm",var,10,0,200, "m_{ll} [GeV]", "events",sidebandcut&&cutOSSF&&reducedNJets&&notTau&&kPos&&massregioncut&&SpecialJZBCut,mc,simulatedlumi,allsamples.FindSample("DYJetsToLL"));
5137     LcorrJZBPlusSBeemm = allsamples.Draw("LcorrJZBPlusSBeemm",var,10,0,200, "m_{ll} [GeV]", "events",sidebandcut&&cutOSSF&&reducedNJets&&notTau&&kNeg&&massregioncut&&SpecialJZBCut,mc,simulatedlumi,allsamples.FindSample("DYJetsToLL"));
5138 buchmann 1.92 }
5139    
5140     TH1F *BpredPrime = (TH1F*)LcorrJZBPluseemm->Clone("BpredPrime");
5141     if(PlottingSetup::RestrictToMassPeak&&PlottingSetup::UseSidebandsForcJZB) {
5142     BpredPrime->Add(RcorrJZBPlusem,1.0/3.);
5143     BpredPrime->Add(LcorrJZBPlusem,-1.0/3.);
5144     BpredPrime->Add(RcorrJZBPlusSBem,1.0/3.);
5145     BpredPrime->Add(LcorrJZBPlusSBem,-1.0/3.);
5146     BpredPrime->Add(RcorrJZBPlusSBeemm,1.0/3.);
5147     BpredPrime->Add(LcorrJZBPlusSBeemm,-1.0/3.);
5148     } else {
5149     BpredPrime->Add(RcorrJZBPlusem,1.0);
5150     BpredPrime->Add(LcorrJZBPlusem,-1.0);
5151     }
5152    
5153     BpredPrime->SetLineColor(kRed);
5154    
5155     FullJZBhJZBpos->SetLineColor(kBlack);
5156     BpredPrime->SetLineColor(kRed);
5157    
5158     FullJZBhJZBpos->SetMinimum(1.0);
5159     FullJZBhJZBpos->Draw("e1");
5160     BpredPrime->Draw("same,hist");
5161     FullJZBhJZBpos->Draw("same,e1");
5162    
5163     TLegend *FullJZBleg = make_legend("MC Z+jets #rightarrow ee,#mu#mu",0.55,0.75,false);
5164     FullJZBleg->AddEntry(FullJZBhJZBpos,"Observed","pe");
5165     FullJZBleg->AddEntry(BpredPrime,"Predicted","l");
5166     FullJZBleg->Draw("same");
5167     DrawMCPrelim(simulatedlumi);
5168     CompleteSave(zcan,"Systematics/ZJets/Mll_Distribution_JZB"+any2string(i)+"_zjets_eemumu_prediction__"+any2string(massregionname));
5169    
5170     TH1F* FullJZBhratio = (TH1F*)FullJZBhJZBpos->Clone("FullJZBhratio");
5171     FullJZBhratio->Divide(BpredPrime);
5172    
5173     zcan->SetLogy(0);
5174     FullJZBhratio->GetYaxis()->SetRangeUser(0,2.5);
5175     FullJZBhratio->GetYaxis()->SetTitle("Observed/Predicted");
5176     FullJZBhratio->Draw("e1");
5177    
5178     TLine *atop = new TLine(0,1.2,200,1.2);
5179     TLine *acenter = new TLine(0,1.0,200,1.0);
5180     TLine *abottom = new TLine(0,0.8,200,0.8);
5181    
5182     atop->SetLineColor(kBlue);
5183     atop->SetLineStyle(2);
5184     acenter->SetLineColor(kBlue);
5185     abottom->SetLineColor(kBlue);
5186     abottom->SetLineStyle(2);
5187    
5188     atop->Draw("same");
5189     acenter->Draw("same");
5190     abottom->Draw("same");
5191    
5192     TLegend *FullJZBleg2 = make_legend("MC Z+jets #rightarrow ee,#mu#mu",0.25,0.75,false);
5193     FullJZBleg2->AddEntry(FullJZBhratio,"obs / pred","pe");
5194     FullJZBleg2->AddEntry(abottom,"syst. envelope","l");
5195     FullJZBleg2->Draw("same");
5196     DrawMCPrelim(simulatedlumi);
5197     CompleteSave(zcan,"Systematics/ZJets/Mll_Distribution_JZB"+any2string(i)+"zjets_eemumu_prediction_ratio"+any2string(massregionname));
5198    
5199    
5200     delete BpredPrime;
5201     delete FullJZBhJZBpos;
5202     delete LcorrJZBPluseemm;
5203     delete RcorrJZBPlusem;
5204     delete LcorrJZBPlusem;
5205     // delete FullJZBhJZBpos;
5206    
5207     if(PlottingSetup::RestrictToMassPeak&&PlottingSetup::UseSidebandsForcJZB) {
5208     delete RcorrJZBPlusSBem;
5209     delete LcorrJZBPlusSBem;
5210     delete RcorrJZBPlusSBeemm;
5211     delete LcorrJZBPlusSBeemm;
5212     }
5213    
5214     }
5215     //***************************************************************************************************
5216 buchmann 1.93 */
5217 buchmann 1.1 delete zcan;
5218     cutWeight=weightbackup;
5219     }
5220    
5221    
5222 buchmann 1.70 void zjets_prediction_comparison(string mcjzbWithPUa) {
5223 buchmann 1.93 zjets_prediction_comparison(mcjzbWithPUa, TCut("mll>20"), "nomasscut");
5224 buchmann 1.92 zjets_prediction_comparison(mcjzbWithPUa, TCut("abs(mll-91)<10"), "Zwindow_10");
5225 buchmann 1.70 zjets_prediction_comparison(mcjzbWithPUa, TCut("mll>20&&mll<70"), "LowMassRegion2070");
5226 buchmann 1.93 // zjets_prediction_comparison(mcjzbWithPUa, TCut("abs(mll-91)>10&&mll>20"), "Outside_Zwindow_10");
5227     // zjets_prediction_comparison(mcjzbWithPUa, TCut("mll>110"), "HighMassRegion110");
5228 buchmann 1.70 }
5229    
5230 buchmann 1.1 void sideband_assessment(string datajzb, float min=30.0, float max=50.0) {
5231     tout << endl << endl;
5232     stringstream bordercut;
5233     bordercut << "(TMath::Abs(" << datajzb << ")<" << max << ")&&(TMath::Abs(" << datajzb << ")>" << min << ")";
5234     tout << bordercut.str().c_str() << endl;
5235     TH1F *ofsb = allsamples.Draw("ofsb",datajzb,100, 0,100, "JZB [GeV]", "events", sidebandcut&&cutOSOF&&cutnJets&&bordercut.str().c_str(),data, luminosity);
5236     TH1F *ofzp = allsamples.Draw("ofzp",datajzb,100, 0,100, "JZB [GeV]", "events", cutmass&&cutOSOF&&cutnJets&&bordercut.str().c_str(),data, luminosity);
5237     float OFSB = ofsb->Integral();
5238     float OFZP = ofzp->Integral();
5239    
5240     tout << "\\begin{table}[hbtp]" << endl;
5241     tout << "\\renewcommand{\\arraystretch}{1.3}" << endl;
5242     tout << "\\begin{center}" << endl;
5243     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;
5244     tout << "\\begin{tabular}{l|cc}" << endl;
5245     tout << "\\hline" << endl;
5246     tout << "& {\\OFZP} & {\\OFSB} \\\\\\hline" << endl;
5247 buchmann 1.25 tout << "\\#(events) & "<<OFZP<<" & "<<OFSB<<"\\\\ \\hline" << endl;
5248 buchmann 1.1 tout << "\\end{tabular}" << endl;
5249     tout << "\\end{center}" << endl;
5250     tout << "\\end{table}" << endl;
5251    
5252    
5253     }
5254    
5255     void make_table(samplecollection &coll, string jzbexpr, bool is_data, vector<float> jzb_cuts, string subselection="none") {
5256    
5257     vector<float> jzbcutprediction;
5258     vector<float> metcutprediction;
5259    
5260     vector<float> jzbcutobservation;
5261     vector<float> metcutobservation;
5262    
5263     TCanvas *cannie = new TCanvas("cannie","cannie");
5264    
5265 buchmann 1.16 for(int icut=0;icut<(int)jzb_cuts.size();icut++) {
5266 buchmann 1.1 float currcut=jzb_cuts[icut];
5267     int nbins=1;float low=currcut;
5268     vector<int> mysample;
5269     if(subselection!="none") mysample=coll.FindSample(subselection);
5270     TH1F *RcorrJZBeemm = coll.Draw("RcorrJZBeemm",jzbexpr,1,currcut,14000, "JZB [GeV]", "events", cutmass&&cutOSSF&&cutnJets,is_data, luminosity, mysample);
5271     TH1F *LcorrJZBeemm = coll.Draw("LcorrJZBeemm",("-("+jzbexpr+")").c_str(),nbins,low,14000, "JZB [GeV]", "events", cutmass&&cutOSSF&&cutnJets,is_data, luminosity, mysample);
5272     TH1F *RcorrJZBem = coll.Draw("RcorrJZBem",jzbexpr.c_str(),nbins,low,14000, "JZB [GeV]", "events", cutmass&&cutOSOF&&cutnJets,is_data, luminosity, mysample);
5273     TH1F *LcorrJZBem = coll.Draw("LcorrJZBem",("-("+jzbexpr+")").c_str(),nbins,low,14000, "JZB [GeV]", "events", cutmass&&cutOSOF&&cutnJets,is_data, luminosity, mysample);
5274    
5275     TH1F *RcorrJZBSBem;
5276     TH1F *LcorrJZBSBem;
5277     TH1F *RcorrJZBSBeemm;
5278     TH1F *LcorrJZBSBeemm;
5279    
5280 buchmann 1.50 if(PlottingSetup::RestrictToMassPeak&&PlottingSetup::UseSidebandsForcJZB) {
5281 buchmann 1.1 RcorrJZBSBem = coll.Draw("RcorrJZBSBem",jzbexpr.c_str(),nbins,low,14000, "JZB [GeV]", "events", sidebandcut&&cutOSOF&&cutnJets,is_data, luminosity, mysample);
5282     LcorrJZBSBem = coll.Draw("LcorrJZBSBem",("-("+jzbexpr+")").c_str(),nbins,low,14000, "JZB [GeV]", "events", sidebandcut&&cutOSOF&&cutnJets,is_data, luminosity, mysample);
5283     RcorrJZBSBeemm = coll.Draw("RcorrJZBSBeemm",jzbexpr.c_str(),nbins,low,14000, "JZB [GeV]", "events", sidebandcut&&cutOSSF&&cutnJets,is_data, luminosity, mysample);
5284     LcorrJZBSBeemm = coll.Draw("LcorrJZBSBeemm",("-("+jzbexpr+")").c_str(),nbins,low,14000, "JZB [GeV]", "events", sidebandcut&&cutOSSF&&cutnJets,is_data, luminosity, mysample);
5285     }
5286    
5287     TH1F *Bpred = (TH1F*)LcorrJZBeemm->Clone("Bpred");
5288 buchmann 1.50 if(PlottingSetup::RestrictToMassPeak&&PlottingSetup::UseSidebandsForcJZB) {
5289 buchmann 1.1 Bpred->Add(RcorrJZBem,1.0/3.);
5290     Bpred->Add(LcorrJZBem,-1.0/3.);
5291     Bpred->Add(RcorrJZBSBem,1.0/3.);
5292     Bpred->Add(LcorrJZBSBem,-1.0/3.);
5293     Bpred->Add(RcorrJZBSBeemm,1.0/3.);
5294     Bpred->Add(LcorrJZBSBeemm,-1.0/3.);
5295     } else {
5296     Bpred->Add(RcorrJZBem,1.0);
5297     Bpred->Add(LcorrJZBem,-1.0);
5298     }
5299    
5300     jzbcutobservation.push_back(RcorrJZBeemm->Integral());
5301     jzbcutprediction.push_back(Bpred->Integral());
5302    
5303     delete RcorrJZBeemm;
5304     delete LcorrJZBeemm;
5305     delete RcorrJZBem;
5306     delete LcorrJZBem;
5307     delete RcorrJZBSBem;
5308     delete LcorrJZBSBem;
5309     delete RcorrJZBSBeemm;
5310     delete LcorrJZBSBeemm;
5311    
5312     TH1F *MetObs = coll.Draw("MetObs",("met[4]"),nbins,low,14000, "JZB [GeV]", "events", cutmass&&cutOSSF&&cutnJets,is_data, luminosity, mysample);
5313     TH1F *MetPred = coll.Draw("MetPred",("met[4]"),nbins,low,14000, "JZB [GeV]", "events", cutmass&&cutOSOF&&cutnJets,is_data, luminosity, mysample);
5314    
5315     metcutobservation.push_back(MetObs->Integral());
5316     metcutprediction.push_back(MetPred->Integral());
5317     delete MetObs;
5318     delete MetPred;
5319     }//end of cut loop
5320    
5321     //prediction part
5322     if(is_data) cout << "Data prediction & ";
5323     if(subselection!="none") cout << subselection << " prediction &";
5324 buchmann 1.16 for(int ij=0;ij<(int)jzb_cuts.size();ij++) cout << jzbcutprediction[ij] << " vs " << metcutprediction[ij] << " & ";
5325 buchmann 1.1
5326     cout << endl;
5327     //observation part
5328     if(is_data) cout << "Data observation & ";
5329     if(subselection!="none") cout << subselection << " observation &";
5330 buchmann 1.16 for(int ij=0;ij<(int)jzb_cuts.size();ij++) cout << jzbcutobservation[ij] << " vs " << metcutobservation[ij] << " & ";
5331 buchmann 1.1 cout << endl;
5332     cout << "_________________________________________________________________" << endl;
5333     delete cannie;
5334     }
5335    
5336     void met_jzb_cut(string datajzb, string mcjzb, vector<float> jzb_cut) {
5337 buchmann 1.79 cout << "You probably don't want --met, you want --metplots ... " << endl;
5338     assert(0);
5339 buchmann 1.1 /*we want a table like this:
5340     __________________ 50 | 100 | ...
5341     | Data prediction | a vs b | a vs b | ...
5342     | Data observed | a vs b | a vs b | ...
5343     --------------------------------------
5344     --------------------------------------
5345     | LM4 prediction | a vs b | a vs b | ...
5346     | LM4 observed | a vs b | a vs b | ...
5347     | LM8 prediction | a vs b | a vs b | ...
5348     | LM8 observed | a vs b | a vs b | ...
5349    
5350     where a is the result for a jzb cut at X, and b is the result for a met cut at X
5351     */
5352     make_table(allsamples,datajzb, true,jzb_cut,"none");
5353     make_table(signalsamples,mcjzb, false,jzb_cut,"LM4");
5354     make_table(signalsamples,mcjzb, false,jzb_cut,"LM8");
5355     }
5356    
5357    
5358     //________________________________________________________________________________________
5359     // JZB Efficiency plot (efficiency of passing reco. JZB cut as function of generator JZB cut)
5360     void JZBSelEff(string mcjzb, TTree* events, string informalname, vector<float> jzb_bins) {
5361    
5362     float min = 0, max = 400;
5363     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};
5364     int nbins = sizeof(xbins)/sizeof(float)-1;
5365     int markers[] = { 20, 26, 21, 24, 22, 25, 28 };
5366    
5367 buchmann 1.14
5368     TH1F* heff = new TH1F("heff", "JZB eff ; generator JZB [GeV]; efficiency",nbins,xbins);
5369     TH1F* hgen = new TH1F("hgen", "JZB gen ; generator JZB [GeV]; efficiency",nbins,xbins);
5370     TH1F* hreco = new TH1F("hreco","JZB reco ; generator JZB [GeV]; efficiency",nbins,xbins);
5371 buchmann 1.1
5372     TCut kgen(genMassCut&&"genZPt>0&&genNjets>2&&abs(genMID)==23"&&cutOSSF);
5373     TCut kreco(cutmass);
5374    
5375     TF1* func = new TF1("func","0.5*[2]*(TMath::Erf((x-[1])/[0])+1)",min,max);
5376     func->SetParNames("epsilon","x_{1/2}","sigma");
5377     func->SetParameter(0,50.);
5378     func->SetParameter(1,0.);
5379     func->SetParameter(2,1.);
5380     gStyle->SetOptStat(0);
5381     gStyle->SetOptFit(0);
5382    
5383     TCanvas *can = new TCanvas("can","Canvas for JZB Efficiency",600,600);
5384     can->SetGridx(1);
5385     can->SetGridy(1);
5386 buchmann 1.14 can->SetLeftMargin(0.16);
5387     can->SetRightMargin(0.05);
5388 buchmann 1.1 TLegend *leg = make_legend("",0.6,0.2,false,0.89,0.5);
5389 buchmann 1.14 leg->SetBorderSize(1);
5390     leg->SetLineColor(kBlack);
5391     leg->SetTextFont(62);
5392 buchmann 1.1
5393 buchmann 1.16 for ( int icut=0; icut<(int)jzb_bins.size(); ++icut ) {
5394 buchmann 1.1
5395     ostringstream selection;
5396     selection << mcjzb << ">" << jzb_bins[icut];
5397     TCut ksel(selection.str().c_str());
5398     events->Draw("genJZB>>hgen", kgen&&kreco, "goff");
5399     events->Draw("genJZB>>hreco",kgen&&kreco&&ksel,"goff");
5400    
5401     // Loop over steps to get efficiency curve
5402     for ( Int_t iBin = 0; iBin<nbins-1; ++iBin ) {
5403     Float_t eff = hreco->GetBinContent(iBin+1)/hgen->GetBinContent(iBin+1);
5404     heff->SetBinContent(iBin+1,eff);
5405     heff->SetBinError(iBin+1,TMath::Sqrt(eff*(1-eff)/hgen->GetBinContent(iBin+1)));
5406     }
5407    
5408     heff->GetXaxis()->SetRangeUser(min, max);
5409 buchmann 1.14 // heff->GetXaxis()->SetLabelSize(0.05); // paper style. overruled.
5410     // heff->GetYaxis()->SetLabelSize(0.05); // paper style. overruled.
5411     // heff->GetXaxis()->SetTitleSize(0.06); // paper style. overruled.
5412     // heff->GetYaxis()->SetTitleSize(0.06); // paper style. overruled.
5413 buchmann 1.1 heff->SetMarkerStyle(markers[icut]);
5414     heff->Fit("func","Q+","same");
5415    
5416     // Print values
5417     dout << "+++ For " << selection.str() << std::endl;
5418     for ( int i=0; i<func->GetNpar(); ++i )
5419     dout << " " << func->GetParName(i) << " " << func->GetParameter(i) << " \\pm " << func->GetParError(i) << std::endl;
5420     char hname[256]; sprintf(hname,"heff%d",icut);
5421    
5422     // Store plot
5423     TH1F* h = (TH1F*)heff->Clone(hname);
5424 buchmann 1.14 h->SetNdivisions(505,"X");
5425 buchmann 1.1 if ( icut) h->Draw("same");
5426     else h->Draw();
5427     char htitle[256]; sprintf(htitle,"JZB > %3.0f GeV", jzb_bins[icut]);
5428     leg->AddEntry(h,htitle,"p");
5429    
5430     }
5431    
5432     leg->Draw();
5433     DrawMCPrelim(0.0);
5434     CompleteSave(can, "Systematics/jzb_efficiency_curve"+informalname );
5435    
5436     delete hgen;
5437     delete hreco;
5438     delete heff;
5439     }
5440    
5441     //________________________________________________________________________________________
5442     // Calls the above function for each signal sample
5443     void plot_jzb_sel_eff(string mcjzb, samplecollection &signalsamples, vector<float> bins )
5444     {
5445 buchmann 1.16 for (int isignal=0; isignal<(int)signalsamples.collection.size();isignal++) {
5446 buchmann 1.1 dout << "JZB selection efficiency curve: " << std::endl;
5447     JZBSelEff(mcjzb,(signalsamples.collection)[isignal].events,(signalsamples.collection)[isignal].samplename,bins); // Only for some selected samples
5448     }
5449     }
5450 buchmann 1.3
5451     void qcd_plots(string datajzb, string mcjzb, vector<float> bins) {
5452     // What this function aims to do:
5453     // Illustrate cut flow for QCD (requiring only one lepton, requiring etc.)
5454     // 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.
5455     TCanvas *can = new TCanvas("can","can");
5456     TPad *kinpad = new TPad("kinpad","kinpad",0,0,1,1);
5457     kinpad->cd();
5458    
5459     string jzb=mcjzb;
5460    
5461     float hi=400;
5462     bool use_signal=false;
5463     bool use_data=false;
5464    
5465     bool is_data=false;
5466     int nbins=50;//100;
5467     float low=0;
5468     float high=500;
5469     int versok=false;
5470     if(gROOT->GetVersionInt()>=53000) versok=true;
5471    
5472     TH1F *blankback = new TH1F("blankback","blankback",int(high/10),0,high);
5473     TH1F *RcorrJZBeemm = qcdsamples.Draw("RcorrJZBeemm",jzb.c_str(),nbins,low,hi, "JZB [GeV]", "events", cutmass&&cutOSSF&&cutnJets,is_data, luminosity,use_signal);
5474     TH1F *LcorrJZBeemm = qcdsamples.Draw("LcorrJZBeemm",("-"+jzb).c_str(),nbins,low,hi, "JZB [GeV]", "events", cutmass&&cutOSSF&&cutnJets,is_data, luminosity,use_signal);
5475     TH1F *RcorrJZBem = qcdsamples.Draw("RcorrJZBem",jzb.c_str(),nbins,low,hi, "JZB [GeV]", "events", cutmass&&cutOSOF&&cutnJets,is_data, luminosity,use_signal);
5476     TH1F *LcorrJZBem = qcdsamples.Draw("LcorrJZBem",("-"+jzb).c_str(),nbins,low,hi, "JZB [GeV]", "events", cutmass&&cutOSOF&&cutnJets,is_data, luminosity,use_signal);
5477     blankback->GetXaxis()->SetTitle(RcorrJZBeemm->GetXaxis()->GetTitle());
5478     blankback->GetYaxis()->SetTitle(RcorrJZBeemm->GetYaxis()->GetTitle());
5479     blankback->GetXaxis()->CenterTitle();
5480     blankback->GetYaxis()->CenterTitle();
5481    
5482     flag_this_change(__FUNCTION__,__LINE__,true);//PlottingSetup::RestrictToMassPeak ---- prediction changed.
5483     TH1F *RcorrJZBSBem;
5484     TH1F *LcorrJZBSBem;
5485     TH1F *RcorrJZBSBeemm;
5486     TH1F *LcorrJZBSBeemm;
5487    
5488 buchmann 1.16 // TH1F *RcorrJZBeemmNoS;
5489 buchmann 1.3
5490     //these are for the ratio
5491     TH1F *JRcorrJZBeemm = qcdsamples.Draw("JRcorrJZBeemm",jzb.c_str(),PlottingSetup::global_ratio_binning, "JZB [GeV]", "events", cutmass&&cutOSSF&&cutnJets,is_data, luminosity,use_signal);
5492     TH1F *JLcorrJZBeemm = qcdsamples.Draw("JLcorrJZBeemm",("-"+jzb).c_str(),PlottingSetup::global_ratio_binning, "JZB [GeV]", "events", cutmass&&cutOSSF&&cutnJets,is_data, luminosity,use_signal);
5493     TH1F *JRcorrJZBem = qcdsamples.Draw("JRcorrJZBem",jzb.c_str(),PlottingSetup::global_ratio_binning, "JZB [GeV]", "events", cutmass&&cutOSOF&&cutnJets,is_data, luminosity,use_signal);
5494     TH1F *JLcorrJZBem = qcdsamples.Draw("JLcorrJZBem",("-"+jzb).c_str(),PlottingSetup::global_ratio_binning, "JZB [GeV]", "events", cutmass&&cutOSOF&&cutnJets,is_data, luminosity,use_signal);
5495    
5496     TH1F *JRcorrJZBSBem;
5497     TH1F *JLcorrJZBSBem;
5498     TH1F *JRcorrJZBSBeemm;
5499     TH1F *JLcorrJZBSBeemm;
5500    
5501 buchmann 1.50 if(PlottingSetup::RestrictToMassPeak&&PlottingSetup::UseSidebandsForcJZB) {
5502 buchmann 1.3 RcorrJZBSBem = qcdsamples.Draw("RcorrJZBSBem",jzb.c_str(),nbins,low,hi, "JZB [GeV]", "events", sidebandcut&&cutOSOF&&cutnJets,is_data, luminosity,use_signal);
5503     LcorrJZBSBem = qcdsamples.Draw("LcorrJZBSBem",("-"+jzb).c_str(),nbins,low,hi, "JZB [GeV]", "events", sidebandcut&&cutOSOF&&cutnJets,is_data, luminosity,use_signal);
5504     RcorrJZBSBeemm = qcdsamples.Draw("RcorrJZBSBeemm",jzb.c_str(),nbins,low,hi, "JZB [GeV]", "events", sidebandcut&&cutOSSF&&cutnJets,is_data, luminosity,use_signal);
5505     LcorrJZBSBeemm = qcdsamples.Draw("LcorrJZBSBeemm",("-"+jzb).c_str(),nbins,low,hi, "JZB [GeV]", "events", sidebandcut&&cutOSSF&&cutnJets,is_data, luminosity,use_signal);
5506    
5507     //these are for the ratio
5508     JRcorrJZBSBem = qcdsamples.Draw("JRcorrJZBSBem",jzb.c_str(),PlottingSetup::global_ratio_binning, "JZB [GeV]", "events", sidebandcut&&cutOSOF&&cutnJets,is_data, luminosity,use_signal);
5509     JLcorrJZBSBem = qcdsamples.Draw("JLcorrJZBSBem",("-"+jzb).c_str(),PlottingSetup::global_ratio_binning, "JZB [GeV]", "events", sidebandcut&&cutOSOF&&cutnJets,is_data, luminosity,use_signal);
5510     JRcorrJZBSBeemm = qcdsamples.Draw("JRcorrJZBSBeemm",jzb.c_str(),PlottingSetup::global_ratio_binning, "JZB [GeV]", "events", sidebandcut&&cutOSSF&&cutnJets,is_data, luminosity,use_signal);
5511     JLcorrJZBSBeemm = qcdsamples.Draw("JLcorrJZBSBeemm",("-"+jzb).c_str(),PlottingSetup::global_ratio_binning, "JZB [GeV]", "events", sidebandcut&&cutOSSF&&cutnJets,is_data, luminosity,use_signal);
5512    
5513     }
5514    
5515     flag_this_change(__FUNCTION__,__LINE__,true);//PlottingSetup::RestrictToMassPeak ---- prediction changed.
5516    
5517     TH1F *Zjetspred = (TH1F*)LcorrJZBeemm->Clone("Zjetspred");
5518     TH1F *TTbarpred = (TH1F*)RcorrJZBem->Clone("TTbarpred");
5519    
5520     TH1F *Bpred = (TH1F*)LcorrJZBeemm->Clone("Bpred");
5521     TH1F *JBpred = (TH1F*)JLcorrJZBeemm->Clone("Bpred");
5522 buchmann 1.50 if(PlottingSetup::RestrictToMassPeak&&PlottingSetup::UseSidebandsForcJZB) {
5523 buchmann 1.3 Bpred->Add(RcorrJZBem,1.0/3.);
5524     Bpred->Add(LcorrJZBem,-1.0/3.);
5525     Bpred->Add(RcorrJZBSBem,1.0/3.);
5526     Bpred->Add(LcorrJZBSBem,-1.0/3.);
5527     Bpred->Add(RcorrJZBSBeemm,1.0/3.);
5528     Bpred->Add(LcorrJZBSBeemm,-1.0/3.);
5529    
5530     TTbarpred->Scale(1.0/3);
5531     Zjetspred->Add(LcorrJZBem,-1.0/3.);
5532     Zjetspred->Add(LcorrJZBSBem,-1.0/3.);
5533     TTbarpred->Add(RcorrJZBSBem,1.0/3.);
5534     Zjetspred->Add(LcorrJZBSBeemm,-1.0/3.);
5535     TTbarpred->Add(RcorrJZBSBeemm,1.0/3.);
5536    
5537     //these are for the ratio
5538     JBpred->Add(JRcorrJZBem,1.0/3.);
5539     JBpred->Add(JLcorrJZBem,-1.0/3.);
5540     JBpred->Add(JRcorrJZBSBem,1.0/3.);
5541     JBpred->Add(JLcorrJZBSBem,-1.0/3.);
5542     JBpred->Add(JRcorrJZBSBeemm,1.0/3.);
5543     JBpred->Add(JLcorrJZBSBeemm,-1.0/3.);
5544     } else {
5545     Bpred->Add(RcorrJZBem,1.0);
5546     Bpred->Add(LcorrJZBem,-1.0);
5547    
5548     Zjetspred->Add(LcorrJZBem,-1.0);
5549    
5550     //these are for the ratio
5551     JBpred->Add(JRcorrJZBem,1.0);
5552     JBpred->Add(JLcorrJZBem,-1.0);
5553     }
5554    
5555    
5556     flag_this_change(__FUNCTION__,__LINE__,true);//PlottingSetup::RestrictToMassPeak ---- prediction changed
5557 buchmann 1.1
5558 buchmann 1.3 TLegend *legBpred = make_legend("",0.6,0.55,false);
5559     RcorrJZBeemm->Draw("e1x0,same");
5560     Bpred->Draw("hist,same");
5561     RcorrJZBeemm->Draw("e1x0,same");//HAVE IT ON TOP!
5562     legBpred->AddEntry(RcorrJZBeemm,"MC observed","p");
5563     legBpred->AddEntry(Bpred,"MC predicted","l");
5564     if(versok) legBpred->AddEntry((TObject*)0,"",""); // Just for alignment // causes seg fault on root v5.18
5565     if(versok) legBpred->AddEntry((TObject*)0,"",""); // causes seg fault on root v5.18
5566     legBpred->Draw();
5567     DrawMCPrelim();
5568    
5569     //3rd last argument: do special bpred ratio, 2nd last argument: extended range!, last: y-axis title
5570     string ytitle("ratio");
5571     if ( use_data==1 ) ytitle = "data/pred";
5572 buchmann 1.79 Save_With_Ratio(JRcorrJZBeemm,JBpred,kinpad,"QCD/Bpred",true,false,ytitle);
5573     delete kinpad;
5574 buchmann 1.3
5575     TH1F *allevents = qcdsamples.Draw("allevents","pfJetGoodNum",1,0,100, "internal code", "events", "" ,mc, luminosity);
5576     TH1F *ossf = qcdsamples.Draw("ossf","pfJetGoodNum",1,0,100, "internal code", "events", cutOSSF ,mc, luminosity);
5577     TH1F *osof = qcdsamples.Draw("osof","pfJetGoodNum",1,0,100, "internal code", "events", cutOSOF ,mc, luminosity);
5578     TH1F *njossf = qcdsamples.Draw("njossf","pfJetGoodNum",1,0,100, "internal code", "events", cutnJets&&cutOSSF ,mc, luminosity);
5579     TH1F *njosof = qcdsamples.Draw("njosof","pfJetGoodNum",1,0,100, "internal code", "events", cutnJets&&cutOSOF ,mc, luminosity);
5580    
5581     dout << "______________________________________________" << endl;
5582     dout << "QCD contribution: " << endl;
5583     dout << "Total number of events: " << allevents->Integral() << endl;
5584     dout << "OSSF events: " << ossf->Integral() << endl;
5585     dout << "OSOF events: " << osof->Integral() << endl;
5586     dout << "OSSF events with >=3 jets:" << njossf->Integral() << endl;
5587     dout << "OSOF events with >=3 jets:" << njosof->Integral() << endl;
5588     dout << "(note that no mass requirement has been imposed)" << endl;
5589    
5590     dout << "______________________________________________" << endl;
5591     dout << "How QCD shows up in the different regions: " << endl;
5592     dout << "OSSF: " << endl;
5593 buchmann 1.50 if(PlottingSetup::RestrictToMassPeak&&PlottingSetup::UseSidebandsForcJZB) {
5594 buchmann 1.3 dout << " Z window: \t" << RcorrJZBeemm->Integral() << " (JZB>0) , " << LcorrJZBeemm->Integral() << " (JZB<0) --> total: " << RcorrJZBeemm->Integral() + LcorrJZBeemm->Integral() << endl;
5595     dout << " sideband: \t" << RcorrJZBSBeemm->Integral() << " (JZB>0) , " << LcorrJZBSBeemm->Integral() << " (JZB<0) --> total: " << RcorrJZBSBeemm->Integral() + LcorrJZBSBeemm->Integral() << endl;
5596     } else {
5597     dout << " " << RcorrJZBeemm->Integral() << " (JZB>0) , " << LcorrJZBeemm->Integral() << " (JZB<0) --> total: " << RcorrJZBeemm->Integral() + LcorrJZBeemm->Integral() << endl;
5598     }
5599     dout << "OSOF: " << endl;
5600 buchmann 1.50 if(PlottingSetup::RestrictToMassPeak&&PlottingSetup::UseSidebandsForcJZB) {
5601 buchmann 1.3 dout << " Z window: \t" << RcorrJZBem->Integral() << " (JZB>0) , " << LcorrJZBem->Integral() << " (JZB<0) --> total: " << RcorrJZBem->Integral() + LcorrJZBem->Integral() << endl;
5602     dout << " sideband: \t" << RcorrJZBSBem->Integral() << " (JZB>0) , " << LcorrJZBSBem->Integral() << " (JZB<0) --> total: " << RcorrJZBSBem->Integral() + LcorrJZBSBem->Integral() << endl;
5603     } else {
5604     dout << " Z window: \t" << RcorrJZBem->Integral() << " (JZB>0) , " << LcorrJZBem->Integral() << " (JZB<0) --> total: " << RcorrJZBem->Integral() + LcorrJZBem->Integral() << endl;
5605     }
5606     dout << "Therefore: " << endl;
5607 buchmann 1.50 if(PlottingSetup::RestrictToMassPeak&&PlottingSetup::UseSidebandsForcJZB) {
5608 buchmann 1.3 dout << " Prediction increases by : " << LcorrJZBeemm->Integral() << " + (1.0/3)*(" << RcorrJZBSBeemm->Integral() <<"-"<< LcorrJZBSBeemm->Integral() << ") (SFSB) ";
5609     dout << " + (1.0/3)*(" << RcorrJZBem->Integral() <<"-"<< LcorrJZBem->Integral() << ") (OFZP) ";
5610     dout << " + (1.0/3)*(" << RcorrJZBSBem->Integral() <<"-"<< LcorrJZBSBem->Integral() << ") (OFSB) ";
5611     dout << " = " << LcorrJZBeemm->Integral() + (1.0/3)*(RcorrJZBSBeemm->Integral() - LcorrJZBSBeemm->Integral() + RcorrJZBem->Integral() - LcorrJZBem->Integral() + RcorrJZBSBem->Integral() - LcorrJZBSBem->Integral()) << endl;
5612     } else {
5613     dout << " Prediction increases by : " << LcorrJZBeemm->Integral();
5614     dout << " + (" << RcorrJZBem->Integral() <<"-"<< LcorrJZBem->Integral() << ") (OFZP) ";
5615     dout << " = " << LcorrJZBeemm->Integral() + RcorrJZBem->Integral() - LcorrJZBem->Integral() << endl;
5616     }
5617     dout << " Observation increases by : " << RcorrJZBeemm->Integral() << endl;
5618    
5619     dout << endl;
5620 buchmann 1.16 for(int i=0;i<(int)bins.size();i++) {
5621 buchmann 1.3 dout << " JZB > " << bins[i] << " : " << endl;
5622     dout << " Observation increases by : " << RcorrJZBeemm->Integral(RcorrJZBeemm->FindBin(bins[i]),RcorrJZBeemm->GetNbinsX()) << endl;
5623 buchmann 1.50 if(PlottingSetup::RestrictToMassPeak&&PlottingSetup::UseSidebandsForcJZB) {
5624 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;
5625     } else {
5626     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;
5627     }
5628     }
5629    
5630     delete can;
5631     delete allevents;
5632     if(ossf) delete ossf;
5633     if(RcorrJZBem) delete RcorrJZBem;
5634     if(LcorrJZBem) delete LcorrJZBem;
5635     if(RcorrJZBeemm) delete RcorrJZBeemm;
5636     if(LcorrJZBeemm) delete LcorrJZBeemm;
5637 buchmann 1.50 if(PlottingSetup::RestrictToMassPeak&&PlottingSetup::UseSidebandsForcJZB&&RcorrJZBSBem) delete RcorrJZBSBem;
5638     if(PlottingSetup::RestrictToMassPeak&&PlottingSetup::UseSidebandsForcJZB&&LcorrJZBSBem) delete LcorrJZBSBem;
5639     if(PlottingSetup::RestrictToMassPeak&&PlottingSetup::UseSidebandsForcJZB&&RcorrJZBSBeemm) delete RcorrJZBSBeemm;
5640     if(PlottingSetup::RestrictToMassPeak&&PlottingSetup::UseSidebandsForcJZB&&LcorrJZBSBeemm) delete LcorrJZBSBeemm;
5641 buchmann 1.3 }
5642 buchmann 1.1
5643 buchmann 1.4 void check_ptsanity() {
5644     TCanvas *ptsancan = new TCanvas("ptsancan","ptsancan",600,1800);
5645     TH1F *individualpt1histos[allsamples.collection.size()];
5646     TH1F *individualpt2histos[allsamples.collection.size()];
5647     TH1F *fpt1 = new TH1F("fpt1","fpt1",50,0,50);
5648     fpt1->GetYaxis()->SetRangeUser(0,1);
5649     fpt1->GetXaxis()->SetTitle("p_{T,1}");
5650     fpt1->GetXaxis()->CenterTitle();
5651    
5652     TH1F *fpt2 = new TH1F("fpt2","fpt2",50,0,50);
5653     fpt2->GetXaxis()->SetTitle("p_{T,2}");
5654     fpt2->GetXaxis()->CenterTitle();
5655    
5656     ptsancan->Divide(1,3);
5657     ptsancan->cd(1);
5658     float maxpt1entry=0;
5659     float maxpt2entry=0;
5660    
5661     TLegend *leg = make_legend();
5662     leg->SetX1(0.0);
5663     leg->SetY1(0.0);
5664     leg->SetX2(1.0);
5665     leg->SetY2(1.0);
5666    
5667    
5668 buchmann 1.16 for(int isample=0;isample<(int)allsamples.collection.size();isample++) {
5669 buchmann 1.4 string nowname=(allsamples.collection)[isample].filename;
5670     cout << "Drawing: " << nowname << " (sample " << isample+1 << " / " << allsamples.collection.size() << ")" << endl;
5671     individualpt1histos[isample] = allsamples.Draw(GetNumericHistoName(),"pt1",50,0,50, "p_{T,1}", "events",cutOSSF&&cutnJets,mc,luminosity,allsamples.FindSample(nowname));
5672     individualpt2histos[isample] = allsamples.Draw(GetNumericHistoName(),"pt2",50,0,50, "p_{T,2}", "events",cutOSSF&&cutnJets,mc,luminosity,allsamples.FindSample(nowname));
5673     individualpt1histos[isample]->SetLineColor(isample+1);
5674     individualpt2histos[isample]->SetLineColor(isample+1);
5675     float currmaxpt1entry=individualpt1histos[isample]->GetMaximum()/individualpt1histos[isample]->Integral();
5676     float currmaxpt2entry=individualpt2histos[isample]->GetMaximum()/individualpt2histos[isample]->Integral();
5677     cout << " pt 1 histo contains; " << individualpt1histos[isample]->Integral() << endl;
5678     cout << " pt 2 histo contains; " << individualpt2histos[isample]->Integral() << endl;
5679     if(currmaxpt1entry>maxpt1entry)maxpt1entry=currmaxpt1entry;
5680     if(currmaxpt2entry>maxpt2entry)maxpt2entry=currmaxpt2entry;
5681     leg->AddEntry(individualpt2histos[isample],((allsamples.collection)[isample].filename).c_str(),"f");
5682     }
5683    
5684     fpt1->GetYaxis()->SetRangeUser(0,maxpt1entry);
5685     fpt2->GetYaxis()->SetRangeUser(0,maxpt2entry);
5686    
5687     ptsancan->cd(1);
5688     fpt1->Draw();
5689     ptsancan->cd(2);
5690     fpt2->Draw();
5691    
5692 buchmann 1.16 for(int isample=0;isample<(int)allsamples.collection.size();isample++) {
5693 buchmann 1.4 ptsancan->cd(1);
5694     individualpt1histos[isample]->DrawNormalized("same,histo");
5695     ptsancan->cd(2);
5696     individualpt2histos[isample]->DrawNormalized("same,histo");
5697     }
5698     ptsancan->cd(3);
5699     leg->Draw();
5700     CompleteSave(ptsancan,"PtSanityCheck");
5701    
5702     delete ptsancan;
5703     }
5704    
5705 buchmann 1.6 void do_mlls_plot(string mcjzb) {
5706     cout << "At this point we'd plot the mll distribution" << endl;
5707     TCanvas *sigcan = new TCanvas("sigcan","sigcan");
5708 buchmann 1.16 for(int isig=0;isig<(int)(signalsamples.collection).size();isig++) {
5709 buchmann 1.6 if(!(signalsamples.collection)[isig].events) continue;
5710     string nowname=(signalsamples.collection)[isig].filename;
5711     TH1F *mll = signalsamples.Draw("mllhisto","mll",150,0,150, "m_{ll}", "events",cutOSSF&&cutnJets,mc,luminosity,signalsamples.FindSample(nowname));
5712     // TH1F *mll = signalsamples.Draw("mllhisto","mll",150,0,150, "m_{ll}", "events","",mc,luminosity,signalsamples.FindSample(nowname));
5713     mll->SetLineColor(TColor::GetColor("#04B404"));
5714     stringstream poscutS;
5715     poscutS << "((" << mcjzb <<")>50)";
5716     TCut poscut(poscutS.str().c_str());
5717     TH1F *mllP = signalsamples.Draw("mllhistoP","mll",150,0,150, "m_{ll}", "events",cutOSSF&&cutnJets&&poscut,mc,luminosity,signalsamples.FindSample(nowname));
5718     mllP->SetLineColor(TColor::GetColor("#0040FF"));
5719     mll->Draw("histo");
5720     mllP->Draw("histo,same");
5721     TLegend *leg = make_legend();
5722     leg->SetY1(0.8);
5723     leg->AddEntry(mll,(signalsamples.collection)[isig].samplename.c_str(),"L");
5724     leg->AddEntry(mllP,((signalsamples.collection)[isig].samplename+", JZB>50").c_str(),"L");
5725     leg->Draw();
5726     TLine *lin = new TLine(71.2,0,71.2,mll->GetMaximum());
5727     TLine *lin2 = new TLine(111.2,0,111.2,mll->GetMaximum());
5728     lin->Draw("same");
5729     lin2->Draw("same");
5730    
5731     CompleteSave(sigcan,"MllShape/"+(signalsamples.collection)[isig].samplename);
5732     delete mll;
5733     delete mllP;
5734     }
5735     }
5736    
5737 buchmann 1.47 void met_vs_jzb_plots(string datajzb, string mcjzb) {
5738 buchmann 1.9
5739     TCanvas *canmetjzb = new TCanvas("canmet","MET vs JZB canvas");
5740     canmetjzb->SetRightMargin(0.16);
5741    
5742     vector<string> findme;
5743     findme.push_back("DY");
5744 buchmann 1.93 findme.push_back("TT_");
5745 buchmann 1.9 findme.push_back("LM");
5746 buchmann 1.48 /*
5747 buchmann 1.16 for(int ifind=0;ifind<(int)findme.size();ifind++) {
5748 buchmann 1.9 vector<int> selsamples = allsamples.FindSample(findme[ifind]);
5749     TH2F *metvsjzb = new TH2F("metvsjzb","metvsjzb",200,0,100,400,-100,100);
5750 buchmann 1.16 for(int isel=0;isel<(int)selsamples.size();isel++) {
5751 buchmann 1.47 dout << "Producing MET:JZB plot ... working on sample: " << allsamples.collection[selsamples[isel]].filename << endl;
5752     allsamples.collection[selsamples[isel]].events->Draw("jzb[1]:met[4]>>+metvsjzb",cutmass&&cutOSSF&&cutnJets);
5753 buchmann 1.9 }
5754     metvsjzb->Scale(allsamples.collection[selsamples[0]].weight);
5755     metvsjzb->SetStats(0);
5756     metvsjzb->GetXaxis()->SetTitle("MET (GeV)");
5757     metvsjzb->GetYaxis()->SetTitle("JZB (GeV)");
5758     metvsjzb->GetXaxis()->CenterTitle();
5759     metvsjzb->GetYaxis()->CenterTitle();
5760     metvsjzb->Draw("COLZ");
5761     TText* title = write_text(0.5,0.95,allsamples.collection[selsamples[0]].samplename);
5762     title->SetTextAlign(12);
5763     title->Draw();
5764     CompleteSave(canmetjzb,(string)"METvsJZBplots/"+findme[ifind]);
5765     }
5766 buchmann 1.48 */
5767 buchmann 1.47
5768     dout << "About to produce MET plot for DY split up by JZB" << endl;
5769    
5770     int nbins=14;
5771     float low=0;
5772     float high=140;
5773    
5774     stringstream sLEFT;
5775     sLEFT << "((" << mcjzb << ")<0)";
5776     TCut LEFT(sLEFT.str().c_str());
5777     stringstream sRIGHT;
5778     sRIGHT << "((" << mcjzb << ")>0)";
5779     TCut RIGHT(sRIGHT.str().c_str());
5780    
5781 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"));
5782     TH1F *metleftO = allsamples.Draw("metleftO","met[4]",nbins,low,high, "#slash{E}_{T} [GeV]", "events", cutmass&&cutOSOF&&cutnJets&&LEFT,mc, luminosity, allsamples.FindSample("DYJets"));
5783     TH1F *metright = allsamples.Draw("metright","met[4]",nbins,low,high, "#slash{E}_{T} [GeV]", "events", cutmass&&cutOSSF&&cutnJets&&RIGHT,mc, luminosity, allsamples.FindSample("DYJets"));
5784     TH1F *metrightO = allsamples.Draw("metrightO","met[4]",nbins,low,high, "#slash{E}_{T} [GeV]", "events", cutmass&&cutOSOF&&cutnJets&&RIGHT,mc, luminosity, allsamples.FindSample("DYJets"));
5785 buchmann 1.47
5786 buchmann 1.48
5787     TH1F *Bpred = (TH1F*)metleft->Clone("Bpred");
5788     Bpred->Add(metleftO,-1);
5789     Bpred->Add(metrightO);
5790     TH1F *obs = (TH1F*)metright->Clone("obs");
5791    
5792 buchmann 1.47 metleft->Add(metleftO,-1);
5793     metright->Add(metrightO,-1);
5794    
5795     metleft->SetLineColor(kRed);
5796     metright->SetLineColor(kBlack);
5797     TPad *metpad = new TPad("metpad","metpad",0,0,1,1);
5798     metpad->cd();
5799     metpad->SetLogy(1);
5800     metleft->Draw("histo");
5801     metright->Draw("same");
5802     TLegend *lg = make_legend();
5803     lg->SetX1(0.5);
5804 buchmann 1.48 lg->SetY1(0.7);
5805 buchmann 1.47 lg->AddEntry(metright,"JZB>0 (OSOF corrected)","P");
5806     lg->AddEntry(metleft,"JZB<0 (OSOF corrected)","L");
5807 buchmann 1.48 lg->SetHeader("DY");
5808    
5809 buchmann 1.47 lg->Draw();
5810 buchmann 1.79 Save_With_Ratio(metright,metleft,metpad->cd(),"METvsJZBplots/ComparingLeftToRightinMETspectrum");
5811 buchmann 1.48
5812     TPad *metpad3 = new TPad("metpad3","metpad3",0,0,1,1);
5813     metpad3->cd();
5814     metpad3->SetLogy(1);
5815     Bpred->SetLineColor(kRed);
5816     Bpred->Draw("histo");
5817     obs->SetLineColor(kBlack);
5818     obs->Draw("same");
5819     TLegend *lg2 = make_legend();
5820     lg2->SetX1(0.5);
5821     lg2->SetY1(0.7);
5822     lg2->AddEntry(obs,"observed","P");
5823     lg2->AddEntry(Bpred,"predicted","L");
5824     lg2->SetHeader("DY");
5825    
5826     lg2->Draw();
5827    
5828 buchmann 1.79 Save_With_Ratio(obs,Bpred,metpad3->cd(),"METvsJZBplots/ComparingPredObsinMET");
5829 buchmann 1.48
5830 buchmann 1.47 TPad *metpad2 = new TPad("metpad2","metpad2",0,0,1,1);
5831 buchmann 1.48 metpad2->cd();
5832     metpad2->SetLogy(1);
5833 buchmann 1.47
5834 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"));
5835     TH1F *metleftOa = allsamples.Draw("metleftOa","met[2]",nbins,low,high, "#slash{E}_{T} [GeV]", "events", cutmass&&cutOSOF&&cutnJets&&LEFT,mc, luminosity, allsamples.FindSample("DYJets"));
5836     TH1F *metrighta = allsamples.Draw("metrighta","met[2]",nbins,low,high, "#slash{E}_{T} [GeV]", "events", cutmass&&cutOSSF&&cutnJets&&RIGHT,mc, luminosity, allsamples.FindSample("DYJets"));
5837     TH1F *metrightOa = allsamples.Draw("metrightOa","met[2]",nbins,low,high, "#slash{E}_{T} [GeV]", "events", cutmass&&cutOSOF&&cutnJets&&RIGHT,mc, luminosity, allsamples.FindSample("DYJets"));
5838 buchmann 1.47
5839     metlefta->Add(metleftOa,-1);
5840     metrighta->Add(metrightOa,-1);
5841    
5842     metlefta->SetLineColor(kRed);
5843     metpad2->cd();
5844     metlefta->Draw("histo");
5845     metrighta->Draw("same");
5846     lg->Draw();
5847 buchmann 1.79 Save_With_Ratio(metrighta,metlefta,metpad2->cd(),"METvsJZBplots/ComparingLeftToRightinMET_type1_spectrum");
5848 buchmann 1.47
5849 buchmann 1.48 delete Bpred;
5850     delete obs;
5851    
5852     float newhigh=300;
5853     int newNBins=30;
5854    
5855     TPad *metpad4 = new TPad("metpad4","metpad4",0,0,1,1);
5856 buchmann 1.89 TH1F *Ametleft = allsamples.Draw("Ametleft","met[4]",newNBins,low,newhigh, "#slash{E}_{T} [GeV]", "events", cutmass&&cutOSSF&&cutnJets&&LEFT,mc, luminosity);
5857     TH1F *AmetleftO = allsamples.Draw("AmetleftO","met[4]",newNBins,low,newhigh, "#slash{E}_{T} [GeV]", "events", cutmass&&cutOSOF&&cutnJets&&LEFT,mc, luminosity);
5858     TH1F *Ametright = allsamples.Draw("Ametright","met[4]",newNBins,low,newhigh, "#slash{E}_{T} [GeV]", "events", cutmass&&cutOSSF&&cutnJets&&RIGHT,mc, luminosity);
5859     TH1F *AmetrightO = allsamples.Draw("AmetrightO","met[4]",newNBins,low,newhigh, "#slash{E}_{T} [GeV]", "events", cutmass&&cutOSOF&&cutnJets&&RIGHT,mc, luminosity);
5860 buchmann 1.48
5861     TH1F *aBpred = (TH1F*)Ametleft->Clone("aBpred");
5862     aBpred->Add(AmetleftO,-1);
5863     aBpred->Add(AmetrightO);
5864     aBpred->SetLineColor(kRed);
5865    
5866     TH1F *aobs = (TH1F*)Ametright->Clone("aobs");
5867     metpad4->cd();
5868     metpad4->SetLogy(1);
5869     aobs->Draw();
5870     aBpred->Draw("histo,same");
5871     aobs->Draw("same");
5872     lg->SetHeader("All MC");
5873     lg->Draw();
5874 buchmann 1.79 Save_With_Ratio(aobs,aBpred,metpad4->cd(),"METvsJZBplots/ComparingPredObsinMET_ALLSAMPLES");
5875 buchmann 1.48
5876 buchmann 1.47
5877     delete lg;
5878     delete canmetjzb;
5879     delete metleft;
5880     delete metleftO;
5881     delete metright;
5882     delete metrightO;
5883 buchmann 1.9 }
5884 buchmann 1.88
5885    
5886     void do_one_ttbar_test(TH1F* &observed, TH1F* &predicted, TH1F* &ratio, TH1F* &ratio2, string mcjzb, string prestring) {
5887    
5888     if(PlottingSetup::RestrictToMassPeak) {
5889     write_error(__FUNCTION__,"This function (ttbar_tests) was not written for on-peak studies - sorry.");
5890     assert(!PlottingSetup::RestrictToMassPeak);
5891     }
5892    
5893     vector<float> binning;
5894    
5895     binning.push_back(-200);
5896     binning.push_back(-150);
5897     binning.push_back(-125);
5898     binning.push_back(-100);
5899     binning.push_back(-75);
5900     binning.push_back(-50);
5901     binning.push_back(-25);
5902     binning.push_back(0);
5903     binning.push_back(25);
5904     binning.push_back(50);
5905     binning.push_back(75);
5906     binning.push_back(100);
5907     binning.push_back(125);
5908     binning.push_back(150);
5909     binning.push_back(200);
5910    
5911     switch_overunderflow(true);
5912    
5913     TH1F *TZem = allsamples.Draw("TZem", mcjzb,binning,"JZB [GeV]","events",cutmass&&cutOSOF&&cutnJets,mc,luminosity,allsamples.FindSample("/TT"));
5914     TH1F *nTZem = allsamples.Draw("nTZem","-"+mcjzb,binning,"JZB [GeV]","events",cutmass&&cutOSOF&&cutnJets,mc,luminosity,allsamples.FindSample("/TT"));
5915     TH1F *TZeemm = allsamples.Draw("TZeemm", mcjzb,binning,"JZB [GeV]","events",cutmass&&cutOSSF&&cutnJets,mc,luminosity,allsamples.FindSample("/TT"));
5916     TH1F *nTZeemm = allsamples.Draw("nTZeemm","-"+mcjzb,binning,"JZB [GeV]","events",cutmass&&cutOSSF&&cutnJets,mc,luminosity,allsamples.FindSample("/TT"));
5917    
5918     TCanvas *tcan = new TCanvas("tcan","tcan");
5919     tcan->SetLogy(1);
5920    
5921     TZeemm->SetLineColor(kBlack);
5922     TZem->SetLineColor(kRed);
5923     TZeemm->SetMarkerColor(kBlack);
5924     TZem->SetMarkerColor(kRed);
5925    
5926     vector<TH1F*> histos;
5927     // TZem->GetXaxis()->SetRangeUser(-100,binning[binning.size()-1]);
5928     // TZeemm->GetXaxis()->SetRangeUser(-100,binning[binning.size()-1]);
5929     histos.push_back(TZem);
5930     histos.push_back(TZeemm);
5931     draw_all_ttbar_histos(tcan,histos,"histo",8);
5932    
5933     TLegend *leg = make_legend("MC t#bar{t}",0.6,0.65,false);
5934     leg->AddEntry(TZeemm,"SFZP","l");
5935     leg->AddEntry(TZem,"OFZP","l");
5936     leg->Draw("same");
5937     DrawMCPrelim();
5938     CompleteSave(tcan,"Systematics/TtbarTests/"+prestring+"/ttbar_shape_comparison");
5939    
5940     TH1F *TZemcopy = (TH1F*)TZem->Clone("TZemcopy");
5941     TH1F *TZeemmcopy = (TH1F*)TZeemm->Clone("TZeemmcopy");
5942     TH1F *TSeemmcopy;
5943     TH1F *TSemcopy;
5944    
5945     predicted=(TH1F*)TZem->Clone(((string)"predicted_"+prestring).c_str());
5946     observed=(TH1F*)TZeemm->Clone(((string)"observed_"+prestring).c_str());
5947    
5948     vector<float> posbinning;
5949     for(unsigned int i=0;i<binning.size();i++) {
5950     if(binning[i]<0) continue;
5951     posbinning.push_back(binning[i]);
5952     }
5953    
5954     TH1F *pred2 = new TH1F("pred2","pred2",posbinning.size()-1,&posbinning[0]);pred2->Sumw2();
5955     TH1F *obs2 = new TH1F("obs2","obs2",posbinning.size()-1,&posbinning[0]);obs2->Sumw2();
5956    
5957     for(unsigned int i=1;i<=predicted->GetNbinsX();i++) {
5958     int index=pred2->FindBin(abs(TZem->GetBinCenter(i)));
5959     if(TZem->GetBinCenter(i)<0) {
5960     //we're on the left: subtract em!
5961     pred2->SetBinContent(index,pred2->GetBinContent(index)-TZem->GetBinContent(i));
5962     pred2->SetBinError(index,sqrt(pow(pred2->GetBinError(index),2)+pow(TZem->GetBinError(i),2)));
5963     //we're on the left: add eemm!
5964     pred2->SetBinContent(index,pred2->GetBinContent(index)+TZeemm->GetBinContent(i));
5965     pred2->SetBinError(index,sqrt(pow(pred2->GetBinError(index),2)+pow(TZeemm->GetBinError(i),2)));
5966     } else {
5967     //we're on the right: add em!
5968     pred2->SetBinContent(index,pred2->GetBinContent(index)+TZem->GetBinContent(i));
5969     pred2->SetBinError(index,sqrt(pow(pred2->GetBinError(index),2)+pow(TZem->GetBinError(i),2)));
5970     //we're on the left: add eemm!
5971     obs2->SetBinContent(index,obs2->GetBinContent(index)+TZeemm->GetBinContent(i));
5972     obs2->SetBinError(index,sqrt(pow(pred2->GetBinError(index),2)+pow(TZeemm->GetBinError(i),2)));
5973     }
5974     }
5975    
5976     ratio2 = (TH1F*)pred2->Clone(((string)"ratio2_"+prestring).c_str());
5977     ratio2->Divide(obs2);
5978    
5979     TZem->Divide(TZeemm);
5980     TZem->SetMarkerStyle(21);
5981    
5982     TZem->SetTitle("OF / SF");
5983     ratio = (TH1F*)TZem->Clone(((string)"ratio_"+prestring).c_str());
5984    
5985     tcan->SetLogy(0);
5986     TZem->GetYaxis()->SetRangeUser(0,2.5);
5987     TZem->GetYaxis()->SetTitle("ratio");
5988     TZem->Draw();
5989    
5990     float linepos=emuncertOFFPEAK;
5991    
5992     TLine *top = new TLine(binning[0],1.0+linepos,binning[binning.size()-1],1.0+linepos);
5993     TLine *center = new TLine(binning[0],1.0,binning[binning.size()-1],1.0);
5994     TLine *bottom = new TLine(binning[0],1.0-linepos,binning[binning.size()-1],1.0-linepos);
5995    
5996     top->SetLineColor(kBlue);top->SetLineStyle(2);
5997     bottom->SetLineColor(kBlue);bottom->SetLineStyle(2);
5998     center->SetLineColor(kBlue);
5999    
6000     top->Draw("same");
6001     center->Draw("same");
6002     bottom->Draw("same");
6003    
6004     TLegend *leg2 = make_legend("MC t#bar{t}",0.55,0.75,false);
6005     leg2->AddEntry(TZem,"OFZP / SFZP","ple");
6006     leg2->AddEntry(bottom,"syst. envelope","l");
6007     leg2->SetX1(0.25);leg2->SetX2(0.6);
6008     leg2->SetY1(0.65);
6009    
6010     leg2->Draw("same");
6011    
6012     DrawMCPrelim();
6013     CompleteSave(tcan,"Systematics/TtbarTests/"+prestring+"/ttbar_shape_comparison_ratio");
6014    
6015     ratio2->SetLineColor(TZem->GetLineColor());
6016     ratio2->SetMarkerColor(TZem->GetMarkerColor());
6017     ratio2->GetYaxis()->SetRangeUser(0,2.5);
6018     ratio2->GetYaxis()->SetTitle("ratio");
6019     ratio2->Draw();
6020    
6021     TLine *top2 = new TLine(0,1.0+linepos,binning[binning.size()-1],1.0+linepos);
6022     TLine *center2 = new TLine(0,1.0,binning[binning.size()-1],1.0);
6023     TLine *bottom2 = new TLine(0,1.0-linepos,binning[binning.size()-1],1.0-linepos);
6024    
6025     top2->SetLineColor(kBlue);top->SetLineStyle(2);
6026     bottom2->SetLineColor(kBlue);bottom->SetLineStyle(2);
6027     center2->SetLineColor(kBlue);
6028    
6029     top2->Draw("same");
6030     center2->Draw("same");
6031     bottom2->Draw("same");
6032    
6033     leg2->Draw("same");
6034    
6035     DrawMCPrelim();
6036     CompleteSave(tcan,"Systematics/TtbarTests/"+prestring+"/ttbar_shape_comparison_FINALratio");
6037    
6038     delete TZem;
6039     delete nTZem;
6040     delete TZeemm;
6041     delete nTZeemm;
6042     delete obs2;
6043     delete pred2;
6044     delete tcan;
6045     switch_overunderflow(false);
6046     }
6047    
6048     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) {
6049    
6050    
6051     TCanvas *ttcan2 = new TCanvas("ttcan2","ttcan2");
6052 buchmann 1.93 vanilla_ratio->GetYaxis()->SetRangeUser(0.5,1.5);
6053 buchmann 1.88 vanilla_ratio->SetFillColor(kGreen);
6054     vanilla_ratio->SetLineColor(kGreen);
6055     vanilla_ratio->SetMarkerColor(kGreen);
6056     vanilla_ratio->SetFillStyle(3001);
6057     vanilla_ratio->Draw("e3");
6058    
6059     response_only_up_ratio->SetFillColor(kRed);
6060     response_only_up_ratio->SetMarkerColor(kRed);
6061     response_only_up_ratio->SetLineColor(kRed);
6062     response_only_up_ratio->SetFillStyle(3003);
6063     response_only_up_ratio->Draw("e3,same");
6064    
6065     response_only_down_ratio->SetFillColor(kOrange);
6066     response_only_down_ratio->SetMarkerColor(kOrange);
6067     response_only_down_ratio->SetLineColor(kOrange);
6068     response_only_down_ratio->SetFillStyle(3004);
6069     response_only_down_ratio->Draw("e3,same");
6070    
6071     reponse_plus_peak_up_ratio->SetFillColor(TColor::GetColor("#BDBDBD"));
6072     reponse_plus_peak_up_ratio->SetMarkerColor(TColor::GetColor("#BDBDBD"));
6073     reponse_plus_peak_up_ratio->SetLineColor(TColor::GetColor("#BDBDBD"));
6074     reponse_plus_peak_up_ratio->SetFillStyle(3005);
6075     reponse_plus_peak_up_ratio->Draw("e3,same");
6076    
6077     reponse_plus_peak_down_ratio->SetFillColor(kBlue);
6078     reponse_plus_peak_down_ratio->SetMarkerColor(kBlue);
6079     reponse_plus_peak_down_ratio->SetLineColor(kBlue);
6080     reponse_plus_peak_down_ratio->SetFillStyle(3006);
6081     reponse_plus_peak_down_ratio->Draw("e3,same");
6082    
6083     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);
6084     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);
6085     TLine *lOne = new TLine(vanilla_ratio->GetBinLowEdge(1),1.0,vanilla_ratio->GetBinLowEdge(vanilla_ratio->GetNbinsX())+vanilla_ratio->GetBinWidth(vanilla_ratio->GetNbinsX()),1.0);
6086    
6087     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);
6088     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);
6089    
6090     lhiA->SetLineColor(kRed);
6091     lhiA->SetLineStyle(2);
6092     llowA->SetLineColor(kRed);
6093     llowA->SetLineStyle(2);
6094    
6095     llow->SetLineColor(kBlue);
6096     llow->SetLineStyle(2);
6097     lhi->SetLineColor(kBlue);
6098     lhi->SetLineStyle(2);
6099     lOne->SetLineColor(kBlue);
6100    
6101     llow->Draw();
6102     lhi->Draw();
6103     lOne->Draw();
6104    
6105     llowA->Draw();
6106     lhiA->Draw();
6107    
6108     TLegend *leg = make_legend();
6109     leg->SetX1(0.15);
6110     leg->SetY1(0.7);
6111     leg->AddEntry(vanilla_ratio,"Raw JZB","pf");
6112     leg->AddEntry(response_only_up_ratio,"With response correction","pf");
6113     leg->AddEntry(response_only_down_ratio,"With inverted response correction","pf");
6114     leg->AddEntry(reponse_plus_peak_up_ratio,"With response and peak correction","pf");
6115     leg->AddEntry(reponse_plus_peak_down_ratio,"With response and inverted peak corr.","pf");
6116     leg->AddEntry(lhi,"Systematic envelope","l");
6117     // leg->SetNColumns(2);
6118     leg->Draw();
6119    
6120     CompleteSave(ttcan2,"Systematics/TtbarTests/Comparison"+PostString);
6121    
6122     vanilla_ratio->GetYaxis()->SetRangeUser(0.6,1.4);
6123     vanilla_ratio->Draw("e3");
6124     response_only_up_ratio->Draw("e3 same");
6125     response_only_down_ratio->Draw("e3 same");
6126     TLegend *leg2 = make_legend();
6127     leg2->SetX1(0.15);
6128     leg2->SetY1(0.7);
6129     leg2->AddEntry(vanilla_ratio,"Raw JZB","pf");
6130     leg2->AddEntry(response_only_up_ratio,"With response correction","pf");
6131     leg2->AddEntry(response_only_down_ratio,"With inverted response correction","pf");
6132     leg2->AddEntry(lhi,"Systematic envelope","l");
6133     leg2->Draw();
6134     llow->Draw();
6135     lOne->Draw();
6136     llowA->Draw();
6137     lhiA->Draw();
6138    
6139     CompleteSave(ttcan2,"Systematics/TtbarTests/Comparison_Response"+PostString);
6140    
6141     response_only_up_ratio->GetYaxis()->SetRangeUser(0.6,1.4);
6142     response_only_up_ratio->Draw("e3");
6143     reponse_plus_peak_up_ratio->Draw("e3 same");
6144     reponse_plus_peak_down_ratio->Draw("e3 same");
6145     TLegend *leg3 = make_legend();
6146     leg3->SetX1(0.15);
6147     leg3->SetY1(0.7);
6148     leg3->AddEntry(response_only_up_ratio,"With response correction","pf");
6149     leg3->AddEntry(reponse_plus_peak_up_ratio,"With response and peak correction","pf");
6150     leg3->AddEntry(reponse_plus_peak_down_ratio,"With response and inverted peak corr.","pf");
6151     leg3->AddEntry(lhi,"Systematic envelope","l");
6152     leg3->Draw();
6153     llow->Draw();
6154     lOne->Draw();
6155     llowA->Draw();
6156     lhiA->Draw();
6157    
6158     CompleteSave(ttcan2,"Systematics/TtbarTests/Comparison_Peak"+PostString);
6159    
6160     delete ttcan2;
6161     }
6162    
6163     void ttbar_correction_tests() {
6164     TCanvas *ttcan = new TCanvas("ttcan","ttcan");
6165    
6166     TH1F *vanilla_observed, *response_only_up_observed, *response_only_down_observed, *reponse_plus_peak_up_observed, *reponse_plus_peak_down_observed;
6167    
6168     TH1F *vanilla_predicted, *response_only_up_predicted, *response_only_down_predicted, *reponse_plus_peak_up_predicted, *reponse_plus_peak_down_predicted;
6169    
6170     TH1F *vanilla_ratio, *response_only_up_ratio, *response_only_down_ratio, *reponse_plus_peak_up_ratio, *reponse_plus_peak_down_ratio;
6171    
6172     TH1F *vanilla_ratio2, *response_only_up_ratio2, *response_only_down_ratio2, *reponse_plus_peak_up_ratio2, *reponse_plus_peak_down_ratio2;
6173    
6174     string vanilla="jzb[1]";
6175     string response_only_up="((jzb[1]+0.034665*pt))";
6176     string response_only_down="((jzb[1]-0.034665*pt))";
6177     string reponse_plus_peak_up="((jzb[1]+0.034665*pt)- 3.58273 )";
6178     string reponse_plus_peak_down="((jzb[1]+0.034665*pt)+ 3.58273 )";
6179    
6180     do_one_ttbar_test(vanilla_observed,vanilla_predicted,vanilla_ratio,vanilla_ratio2,vanilla,"vanilla");
6181     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");
6182     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");
6183     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");
6184     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");
6185    
6186     ttcan->cd();
6187    
6188     IllustrateVariation(vanilla_ratio,response_only_up_ratio,response_only_down_ratio,reponse_plus_peak_up_ratio,reponse_plus_peak_down_ratio,"PartialRatio");
6189     IllustrateVariation(vanilla_ratio2,response_only_up_ratio2,response_only_down_ratio2,reponse_plus_peak_up_ratio2,reponse_plus_peak_down_ratio2,"FullRatio");
6190    
6191     delete vanilla_observed;
6192     delete response_only_up_observed;
6193     delete response_only_down_observed;
6194     delete reponse_plus_peak_up_observed;
6195     delete reponse_plus_peak_down_observed;
6196    
6197     delete vanilla_predicted;
6198     delete response_only_up_predicted;
6199     delete response_only_down_predicted;
6200     delete reponse_plus_peak_up_predicted;
6201     delete reponse_plus_peak_down_predicted;
6202    
6203     delete vanilla_ratio;
6204     delete response_only_up_ratio;
6205     delete response_only_down_ratio;
6206     delete reponse_plus_peak_up_ratio;
6207     delete reponse_plus_peak_down_ratio;
6208    
6209     delete ttcan;
6210     }
6211    
6212     void ttbar_region_search(string mcjzb) {
6213     cout << "Looking for a nice control region" << endl;
6214     TCanvas *can = new TCanvas("can","can",1200,1200);
6215     can->Divide(2,2);
6216     can->cd(1);
6217     can->cd(1)->SetLogy(1);
6218    
6219     THStack JZBdistSF = allsamples.DrawStack("JZBdistSF",mcjzb,100,-150,150, "JZB [GeV]", "events", cutmass&&cutOSSF&&TCut("pfJetGoodNum40==2"),mc, luminosity);
6220     THStack JZBdistOF = allsamples.DrawStack("JZBdistOF",mcjzb,100,-150,150, "JZB [GeV]", "events", cutmass&&cutOSOF&&TCut("pfJetGoodNum40==2"),mc, luminosity);
6221    
6222     JZBdistSF.Draw("histo");
6223     JZBdistSF.SetMaximum(1000);
6224     JZBdistSF.SetMinimum(0.1);
6225     JZBdistSF.Draw("histo");
6226     DrawMCPrelim();
6227    
6228     can->cd(2);
6229     can->cd(2)->SetLogy(1);
6230     JZBdistOF.Draw("histo");
6231     JZBdistOF.SetMaximum(1000);
6232     JZBdistOF.SetMinimum(0.1);
6233     JZBdistOF.Draw("histo");
6234     DrawMCPrelim();
6235    
6236     can->cd(3);
6237    
6238    
6239     write_warning(__FUNCTION__,"Missing negative JZB subtraction ");
6240    
6241     DrawMCPrelim();
6242    
6243     /*
6244     THStack *Subtracted = new THStack();
6245    
6246     TIter nextSF(JZBdistSF.GetHists());
6247     TIter nextOF(JZBdistOF.GetHists());
6248     TObject* SFobj;
6249     TObject* OFobj;
6250    
6251     TH1* sfh = NULL;
6252     TH1* ofh = NULL;
6253    
6254     while ( (SFobj = nextSF()) && (OFobj = nextOF()) ) {
6255     TH1F *sfstart = (TH1*)SFobj->Clone();
6256     TH1F *ofstart = (TH1*)OFobj->Clone();
6257     TH1F *obs, *pred;
6258     MakeObservationPrediction(obs,pred,sfstart,ofstart);
6259    
6260     if ( !hratio ) {
6261     hratio = (TH1*)obj->Clone();
6262     hratio->SetName("hratio");
6263     } else hratio->Add( (TH1*)obj );
6264 buchmann 1.9
6265 buchmann 1.88 }
6266     hratio->Divide(hdata);
6267     */
6268    
6269    
6270     can->cd(4);
6271     JZBdistOF.Draw("histo");
6272     DrawMCPrelim();
6273    
6274    
6275    
6276     CompleteSave(can,"Systematics/TtbarTests/ControlRegion");
6277    
6278     CleanLegends();
6279     delete can;
6280     }
6281    
6282     void ttbar_tests(string mcjzb) {
6283     //ttbar_correction_tests();
6284     ttbar_region_search(mcjzb);
6285     }
6286 buchmann 1.9
6287 buchmann 1.93 Value GetYieldBetween(TH1F *h, float low, float high) {
6288     float Yield=0;
6289     float YieldErr=0;
6290     for(int i=1;i<=h->GetNbinsX()+1;i++) {
6291     if(h->GetBinLowEdge(i)+h->GetBinWidth(i)<=low) continue;// considered in the next bin
6292     if(h->GetBinLowEdge(i)>=high) continue;//above the threshold, out!
6293     Yield+=h->GetBinContent(i);
6294     YieldErr=sqrt(YieldErr*YieldErr+h->GetBinError(i)*h->GetBinError(i));
6295     }
6296    
6297     Value a(Yield,YieldErr);
6298     return a;
6299     }
6300    
6301    
6302     void make_SF_over_OF_plot(string datajzb, string mcjzb, TCut cut, string variable, int nbins, float xmin, float ymin, string varname, string filename) {
6303     TCanvas *SFoOF_can = new TCanvas("SFoOF_can","SFoOF_can");
6304     TH1F *data_sf = allsamples.Draw("data_sf","mll",20,0,200, "m_{ll} [GeV]", "events", cut&&cutOSSF,data,luminosity);
6305     TH1F *data_of = allsamples.Draw("data_of","mll",20,0,200, "m_{ll} [GeV]", "events", cut&&cutOSOF,data,luminosity);
6306    
6307     TH1F *mc_sf = allsamples.Draw("mc_sf","mll",20,0,200, "m_{ll} [GeV]", "events", cut&&cutOSSF,mc,luminosity);
6308     TH1F *mc_of = allsamples.Draw("mc_of","mll",20,0,200, "m_{ll} [GeV]", "events", cut&&cutOSOF,mc,luminosity);
6309    
6310     TH1F *mc_ratio = (TH1F*)mc_sf->Clone("mc_ratio");
6311     mc_ratio->Divide(mc_of);
6312    
6313     TH1F *data_ratio = (TH1F*)data_sf->Clone("data_ratio");
6314     data_ratio->Divide(data_of);
6315    
6316     mc_ratio->SetFillColor(TColor::GetColor("#00ADE1"));
6317     mc_ratio->SetMarkerColor(TColor::GetColor("#00ADE1"));
6318     mc_ratio->GetYaxis()->SetRangeUser(0.5,1.5);
6319    
6320     mc_ratio->GetYaxis()->SetTitle("R(SF / OF)");
6321    
6322    
6323     Value R_sf_of_low_mass = GetYieldBetween(data_sf,20,70)/GetYieldBetween(data_of,20,70);
6324     Value R_sf_of_high_mass = GetYieldBetween(data_sf,120,200)/GetYieldBetween(data_of,120,200);
6325    
6326     Value R_sf_of_low_mass_mc = GetYieldBetween(mc_sf,20,70)/GetYieldBetween(mc_of,20,70);
6327     Value R_sf_of_high_mass_mc = GetYieldBetween(mc_sf,120,200)/GetYieldBetween(mc_of,120,200);
6328    
6329     dout << "Ratio at low mass : " << R_sf_of_low_mass << " (mc : " << R_sf_of_low_mass_mc << " )" << endl;
6330     dout << "Ratio at high mass : " << R_sf_of_high_mass << " (mc : " << R_sf_of_high_mass_mc << " )" << endl;
6331    
6332     TGraphAsymmErrors *gra = produce_ratio_graph(mc_ratio);
6333     gra->Draw();
6334     mc_ratio->Draw();
6335     gra->Draw("e20");
6336     gra->SetFillColor(TColor::GetColor("#00ADE1"));
6337     gra->SetMarkerColor(TColor::GetColor("#00ADE1"));
6338     data_ratio->Draw("e1,same");
6339    
6340     TLegend *leg = new TLegend(0.17,0.16,0.53,0.31);
6341     // leg->SetHeader("R( SF / OF )");
6342     leg->SetFillColor(kWhite);
6343     leg->SetBorderSize(0);
6344     leg->AddEntry(data_ratio,"Data","p");
6345     leg->AddEntry(gra,"MC","fp");
6346     leg->Draw();
6347    
6348 buchmann 1.95 TLine *g = new TLine(0,1.01,200,1.01);
6349 buchmann 1.93 g->SetLineColor(kBlue);
6350     g->Draw();
6351    
6352     TLine *l = new TLine(70,0.5,70,1.5);
6353     l->SetLineStyle(2);
6354     l->SetLineColor(TColor::GetColor("#00ADE1"));
6355 buchmann 1.95 TLine *m = new TLine(120,0.5,120,1.5);
6356 buchmann 1.93 m->SetLineStyle(2);
6357     m->SetLineColor(TColor::GetColor("#00ADE1"));
6358     l->Draw();
6359     m->Draw();
6360    
6361    
6362     DrawPrelim();
6363    
6364     CompleteSave(SFoOF_can,"iTTbar/"+filename+"SF_vs_OF");
6365    
6366     delete leg;
6367     delete mc_sf;
6368     delete mc_of;
6369     delete mc_ratio;
6370     delete data_sf;
6371     delete data_of;
6372     delete data_ratio;
6373     delete SFoOF_can;
6374     }
6375    
6376     void make_iTTbar_JZB_plot(string datajzb, string mcjzb, TCut cut) {
6377     TCanvas *can = new TCanvas("can","can");
6378     vector<float> binning;
6379     binning.push_back(-100);
6380     binning.push_back(-50);
6381     binning.push_back(-20);
6382     binning.push_back(0);
6383     // binning.push_back(10);
6384     binning.push_back(20);
6385     // binning.push_back(30);
6386     binning.push_back(50);
6387     binning.push_back(100);
6388     binning.push_back(300);
6389    
6390     TH1F *hdata = allsamples.Draw("hdata", datajzb, binning, "JZB [GeV]", "events", cut&&cutOSSF,data,luminosity);
6391     TH1F *hodata = allsamples.Draw("hodata", datajzb, binning, "JZB [GeV]", "events", cut&&cutOSOF,data,luminosity);
6392     TH1F *hndata = allsamples.Draw("hndata", "-"+datajzb,binning, "JZB [GeV]", "events", cut&&cutOSSF,data,luminosity);
6393     TH1F *hnodata = allsamples.Draw("hnodata","-"+datajzb,binning, "JZB [GeV]", "events", cut&&cutOSOF,data,luminosity);
6394    
6395     TH1F *hmc = allsamples.Draw("hmc", datajzb, binning, "JZB [GeV]", "events", cut&&cutOSSF,mc,luminosity);
6396     TH1F *homc = allsamples.Draw("homc", datajzb, binning, "JZB [GeV]", "events", cut&&cutOSOF,mc,luminosity);
6397    
6398     hodata->SetLineColor(kRed);
6399     hmc->SetLineColor(kRed);
6400     // hodata->Add(hndata);
6401     // hodata->Add(hnodata,-1);
6402    
6403     if(hdata->GetMaximum()>hodata->GetMaximum()) {
6404     hdata->SetMinimum(1.0);
6405     hdata->Draw();
6406     hodata->Draw("histo,same");
6407     hdata->Draw("same");
6408     } else {
6409     hodata->SetMinimum(1.0);
6410     hodata->Draw("histo");
6411     hdata->Draw("same");
6412     }
6413    
6414     CompleteSave(can,"iTTbar/JZB_plot");
6415     TH1F *ratio = (TH1F*)hdata->Clone("ratio");
6416     ratio->Divide(hodata);
6417     ratio->GetYaxis()->SetTitle("obs/pred");
6418     ratio->GetYaxis()->SetRangeUser(0,2);
6419    
6420     ratio->Draw();
6421     TLine *l = new TLine(-100,1.0,300,1.0);
6422     l->SetLineColor(kBlue);
6423     l->SetLineStyle(2);
6424     l->Draw();
6425     TLine *llow = new TLine(-100,1.0-0.07,300,1.0-0.07);
6426     TLine *lhi = new TLine(-100,1.0+0.07,300,1.0+0.07);
6427     llow->SetLineColor(kBlue);
6428     llow->SetLineStyle(2);
6429     llow->Draw();
6430     lhi->SetLineColor(kBlue);
6431     lhi->SetLineStyle(2);
6432     lhi->Draw();
6433    
6434     CompleteSave(can,"iTTbar/JZB_plot_ratio");
6435    
6436     delete hdata;
6437     delete hodata;
6438     delete ratio;
6439     delete can;
6440     // THStack *hmc = new THStack(allsamples.DrawStack("hmc","mll",40,0,200, "m_{ll} [GeV]", "events", cut&&cutOSSF,mc,luminosity));
6441     // THStack *homc = new THStack(allsamples.DrawStack("homc","mll",40,0,200, "m_{ll} [GeV]", "events", cut&&cutOSOF,mc,luminosity));
6442     }
6443 buchmann 1.94
6444    
6445    
6446     void MakeSpecialiTTbarClosurePlot(TCut fullcut, string datajzb, string mcjzb, string MassRegion) {
6447     TCanvas *iTTbarClosureTestCanvas = new TCanvas("iTTbarClosureTestCanvas","iTTbarClosureTestCanvas");
6448    
6449     vector<float> binning;
6450     /*
6451     binning.push_back(0);
6452     binning.push_back(20);
6453     binning.push_back(50);
6454     binning.push_back(100);
6455     // binning.push_back(200);
6456     */
6457     binning.push_back(0);
6458     binning.push_back(10);
6459     binning.push_back(30);
6460     binning.push_back(50);
6461     binning.push_back(100);
6462     // binning.push_back(200);
6463    
6464    
6465     TH1F *hdata = allsamples.Draw("hdata", datajzb,binning, "JZB [GeV]", "events", fullcut&&TCut("id1==id2"),data,luminosity);
6466     TH1F *hodata = allsamples.Draw("hodata",datajzb,binning, "JZB [GeV]", "events", fullcut&&TCut("id1!=id2"),data,luminosity);
6467     TH1F *hmc = allsamples.Draw("hmc", mcjzb,binning, "JZB [GeV]", "events", fullcut&&TCut("id1==id2"),mc,luminosity);
6468     TH1F *homc = allsamples.Draw("homc", mcjzb,binning, "JZB [GeV]", "events", fullcut&&TCut("id1!=id2"),mc,luminosity);
6469    
6470     hdata->SetLineColor(kBlack);
6471     hmc->SetLineColor(kBlack);
6472     hodata->SetLineColor(kRed);
6473     homc->SetLineColor(kRed);
6474     hodata->SetMarkerColor(kRed);
6475    
6476     hdata->GetYaxis()->SetTitle("events");
6477    
6478     float maximum=hdata->GetMaximum()+1.2*sqrt(hdata->GetMaximum());
6479     float minimum=hdata->GetMinimum()-1.2*sqrt(hdata->GetMinimum());
6480     if(hmc->GetMinimum()<minimum) minimum=hmc->GetMinimum()-1.2*sqrt(hmc->GetMinimum());
6481     if(hmc->GetMaximum()>maximum) maximum=hmc->GetMaximum()+1.2*sqrt(hmc->GetMaximum());
6482     if(homc->GetMinimum()<minimum) minimum=homc->GetMinimum()-1.2*sqrt(homc->GetMinimum());
6483     if(homc->GetMaximum()>maximum) maximum=homc->GetMaximum()+1.2*sqrt(homc->GetMaximum());
6484     if(hodata->GetMinimum()<minimum) minimum=hodata->GetMinimum()-1.2*sqrt(hodata->GetMinimum());
6485     if(hodata->GetMaximum()>maximum) maximum=hodata->GetMaximum()+1.2*sqrt(hodata->GetMaximum());
6486    
6487     hdata->SetMaximum(maximum);
6488     hdata->SetMinimum(minimum);
6489    
6490    
6491     hdata->Draw();
6492     hmc->Draw("same,histo");
6493     homc->Draw("same,histo");
6494     hdata->Draw("same");
6495     hodata->Draw("same");
6496    
6497     TLegend *leg = make_legend();
6498     leg->AddEntry(hdata,"SF data","pe");
6499     leg->AddEntry(hodata,"OF data","pe");
6500     leg->AddEntry(hmc,"SF MC","l");
6501     leg->AddEntry(homc,"OF MC","l");
6502     leg->Draw();
6503    
6504     DrawPrelim();
6505    
6506     CompleteSave(iTTbarClosureTestCanvas,"iTTbar/TTbar_CR_Closure_"+MassRegion);
6507    
6508     TH1F *ratio_data = (TH1F*)hdata->Clone("ratio_data");
6509     ratio_data->Divide(hodata);
6510     TH1F *ratio_mc = (TH1F*)hmc->Clone("ratio_mc");
6511     ratio_mc->Divide(homc);
6512    
6513     ratio_mc->SetFillColor(kBlue);
6514     ratio_mc->SetMarkerSize(0);
6515    
6516     TGraphAsymmErrors *eratio = produce_ratio_graph(ratio_mc);
6517    
6518     eratio->SetFillColor(TColor::GetColor("#00ADE1"));
6519     ratio_data->GetYaxis()->SetRangeUser(0.5,1.5);
6520     ratio_data->Draw("e1");
6521     eratio->Draw("20");
6522     ratio_data->Draw("e1,same");
6523    
6524     TLegend *leg2 = make_legend();
6525     leg2->AddEntry(ratio_data,"R(SF/OF) in #bar{t}t CR, data","pe");
6526     leg2->AddEntry(eratio ,"R(SF/OF) in #bar{t}t CR, MC" ,"f");
6527     leg2->SetY1(0.8);
6528     leg2->SetX1(0.45);
6529     leg2->Draw();
6530    
6531     DrawPrelim();
6532     CompleteSave(iTTbarClosureTestCanvas,"iTTbar/TTbar_CR_Closure_Ratio_"+MassRegion);
6533    
6534     TFile *f = new TFile("fout.root","RECREATE");
6535     eratio->Write();
6536     ratio_data->Write();
6537     leg2->Write();
6538     f->Close();
6539    
6540    
6541     delete leg;
6542     delete leg2;
6543     delete ratio_data;
6544     delete ratio_mc;
6545     delete hdata;
6546     delete hmc;
6547     delete hodata;
6548     delete iTTbarClosureTestCanvas;
6549     }
6550    
6551    
6552 buchmann 1.93
6553     void make_ijzb_ttbar_closure_test(string datajzb, string mcjzb) {
6554     TCut tt_nJets("pfJetGoodNum40==2");
6555 buchmann 1.96 TCut tt_bJet("pfJetGoodNumBtag40==2 && met[4]>20");
6556 buchmann 1.94 TCut tt_LowMass("mll>20&&mll<70");
6557     TCut tt_HighMass("mll>120&&mll<200");
6558     TCut tt_noZ(tt_LowMass || tt_HighMass);
6559 buchmann 1.93
6560 buchmann 1.95 /*
6561 buchmann 1.93 make_iTTbar_JZB_plot(datajzb, mcjzb,tt_nJets&&tt_bJet&&tt_noZ);
6562 buchmann 1.95 */
6563 buchmann 1.93 TCanvas *can = new TCanvas("can","can");
6564    
6565 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);
6566     THStack *hmc = new THStack( allsamples.DrawStack( "hmc", "mll",40,0,200, "m_{ll} [GeV]", "events", tt_nJets&&tt_bJet&&tt_noZ&&cutOSSF,mc, luminosity));
6567     TH1F *hodata = allsamples.Draw( "hodata","mll",40,0,200, "m_{ll} [GeV]", "events", tt_nJets&&tt_bJet&&tt_noZ&&cutOSOF,data,luminosity);
6568     THStack *homc = new THStack( allsamples.DrawStack( "homc", "mll",40,0,200, "m_{ll} [GeV]", "events", tt_nJets&&tt_bJet&&tt_noZ&&cutOSOF,mc, luminosity));
6569 buchmann 1.93
6570     TH1F *coll_hmc = CollapseStack(hmc);
6571     TH1F *coll_homc = CollapseStack(homc);
6572    
6573     bool dolog=true;
6574     bool nolog=false;
6575    
6576     dout << " SF: " << endl;
6577 buchmann 1.95 dout << " Data : " << hdata->Integral() << endl;
6578 buchmann 1.93 WriteYield(hmc, 0, 10000);
6579     dout << " OF: " << endl;
6580 buchmann 1.95 dout << " Data : " << hodata->Integral() << endl;
6581 buchmann 1.93 WriteYield(homc, 0, 10000);
6582     hodata->SetLineColor(kRed);
6583     hdata->Draw();
6584     hmc->Draw("histo,same");
6585     hodata->Draw("histo,same");
6586     hdata->Draw("e1,same");
6587     DrawPrelim();
6588     CompleteSave(can,"TestingPrediction");
6589    
6590     dout << "We get an expected ratio of " << coll_hmc->Integral()/coll_homc->Integral() << endl;
6591     dout << "In data we find " << hdata->Integral()/hodata->Integral() << endl;
6592    
6593     Value R_sf_of_low_mass = GetYieldBetween(hdata,20,70)/GetYieldBetween(hodata,20,70);
6594     Value R_sf_of_high_mass = GetYieldBetween(hdata,120,200)/GetYieldBetween(hodata,120,200);
6595    
6596     Value R_sf_of_low_mass_mc = GetYieldBetween(coll_hmc,20,70)/GetYieldBetween(coll_homc,20,70);
6597     Value R_sf_of_high_mass_mc = GetYieldBetween(coll_hmc,120,200)/GetYieldBetween(coll_homc,120,200);
6598    
6599     dout << "Ratio at low mass : " << R_sf_of_low_mass << " (mc : " << R_sf_of_low_mass_mc << " )" << endl;
6600     dout << "Ratio at high mass : " << R_sf_of_high_mass << " (mc : " << R_sf_of_high_mass_mc << " )" << endl;
6601    
6602     dout << "Composition at low mass : " << endl;
6603     dout << "Same flavor: " << endl;
6604     ProduceYields(20, 70, hdata, hmc);
6605     dout << "Opposite flavor: " << endl;
6606     ProduceYields(20, 70, hodata, homc);
6607    
6608     dout << endl << endl;
6609    
6610     dout << "Composition at high mass : " << endl;
6611     dout << "Same flavor: " << endl;
6612     ProduceYields(120, 200, hdata, hmc);
6613     dout << "Opposite flavor: " << endl;
6614     ProduceYields(120, 200, hodata, homc);
6615    
6616    
6617    
6618    
6619     make_plain_kin_plot(mcjzb,(const char*) (tt_nJets&&tt_bJet&&tt_noZ&&cutOSSF),20,-200,200,dolog,"JZB","iTTbar/JZB_SF",false,true);
6620     make_plain_kin_plot(mcjzb,(const char*) (tt_nJets&&tt_bJet&&tt_noZ&&cutOSOF),20,-200,200,dolog,"JZB","iTTbar/JZB_OF",false,true);
6621    
6622     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);
6623     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);
6624    
6625     make_SF_over_OF_plot(datajzb, mcjzb,tt_nJets&&tt_bJet&&tt_noZ,"mll",20,0,200,"m_{ll} [GeV]","mll");
6626    
6627 buchmann 1.94 MakeSpecialiTTbarClosurePlot((tt_nJets&&tt_bJet&&tt_LowMass),datajzb,mcjzb,"LowMassRegion2070");
6628     MakeSpecialiTTbarClosurePlot((tt_nJets&&tt_bJet&&tt_HighMass),datajzb,mcjzb,"HighMassRegion");
6629     MakeSpecialiTTbarClosurePlot((tt_nJets&&tt_bJet&&tt_noZ),datajzb,mcjzb,"NoZ");
6630 buchmann 1.95
6631 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);
6632     // 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);
6633     //
6634     // 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);
6635     // 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);
6636    
6637    
6638     delete coll_hmc;
6639     delete coll_homc;
6640     delete hmc;
6641     delete homc;
6642     delete hdata;
6643     delete hodata;
6644 buchmann 1.95 delete can;
6645 buchmann 1.93 }
6646 buchmann 1.96
6647     void compute_global_significance(float local_significance) {
6648     float global_sigificance = ROOT::Math::normal_quantile_c(ROOT::Math::normal_cdf_c(local_significance,1)*4,1);
6649     dout << "local significance : " << local_significance << endl;
6650     dout << "global significance : " << global_sigificance << endl;
6651     }
6652 buchmann 1.93
6653    
6654 buchmann 1.1 void test() {
6655    
6656 buchmann 1.92
6657     float MCPeak, MCPeakError, DataPeak, DataPeakError;
6658     stringstream result, datajzb, mcjzb;
6659     bool doPUreweighting=true;
6660     bool SwitchOffNJetsCut=false;
6661    
6662    
6663     TCanvas *can = new TCanvas("can","can");
6664     float mcSigma,mcSigmaError,dataSigma,dataSigmaError;
6665    
6666     float NumVtxBin[6] = {0,5,10,15,20,30};
6667    
6668     stringstream NowCut;
6669    
6670     TGraphErrors *gMCPeak = new TGraphErrors();
6671     gMCPeak->SetTitle("gMCPeak");
6672     gMCPeak->SetName("gMCPeak");
6673     TGraphErrors *gDataPeak = new TGraphErrors();
6674     gDataPeak->SetTitle("gDataPeak");
6675     gDataPeak->SetName("gDataPeak");
6676     TGraphErrors *gMCWidth = new TGraphErrors();
6677     gMCWidth->SetTitle("gMCWidth");
6678     gMCWidth->SetName("gMCWidth");
6679     TGraphErrors *gDataWidth = new TGraphErrors();
6680     gDataWidth->SetTitle("gDataWidth");
6681     gDataWidth->SetName("gDataWidth");
6682    
6683     float AllMCPeaks[200];
6684     float AllMCPeaksErrors[200];
6685    
6686     for(int i=10;i<180;i+=20) {
6687     NowCut.str("");
6688     NowCut << "mll>=" << i << "&&mll<" << i+20;
6689     find_one_peak_combination(TCut(NowCut.str().c_str()),SwitchOffNJetsCut,MCPeak,MCPeakError, DataPeak,DataPeakError,mcSigma,mcSigmaError, dataSigma,dataSigmaError,result,doPUreweighting,"");
6690     AllMCPeaks[i]=MCPeak;
6691     AllMCPeaksErrors[i]=MCPeakError;
6692     }
6693    
6694     dout << "Summary : " << endl;
6695     for(int i=10;i<180;i+=20) {
6696     dout << "For the slice at [" << i << " , " << i+20 << "] we get a peak at " << AllMCPeaks[i] << " +/- " << AllMCPeaksErrors[i] << endl;
6697     }
6698     /*
6699 buchmann 1.1 TCanvas *testcanv = new TCanvas("testcanv","testcanv");
6700     testcanv->cd();
6701 buchmann 1.33 // switch_overunderflow(true);
6702 buchmann 1.91 TH1F *histo1 = new TH1F("histo","histo",100,0,1);
6703     histo1->Sumw2();
6704     TH1F *histo2 = new TH1F("histo2","histo2",100,0,1);
6705     histo2->Sumw2();
6706    
6707     for(int i=0;i<100;i++) {
6708     histo1->Fill(1.0/i,i);
6709     histo2->Fill(1.0/(i*i),i);
6710     }
6711    
6712     histo1->Draw();
6713     histo2->Draw("e1,same");
6714    
6715     Save_With_Ratio( histo1, histo2, testcanv->cd(), "Bullshit", false, false, "AnyCrap" );
6716    
6717    
6718 buchmann 1.1 dout << "HELLO there!" << endl;
6719 buchmann 1.92 */
6720 buchmann 1.1 }