ViewVC Help
View File | Revision Log | Show Annotations | Root Listing
root/cvsroot/UserCode/cbrown/Development/Plotting/Modules/Plotting_Functions.C
Revision: 1.98
Committed: Fri May 31 09:45:15 2013 UTC (11 years, 11 months ago) by buchmann
Content type: text/plain
Branch: MAIN
Changes since 1.97: +88 -216 lines
Log Message:
Improved iTTbar region plots; activated all plots for Appendix B; removed old way to get peak as a function of pileup; improved fitting for new way of getting pileup peak correction

File Contents

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