ViewVC Help
View File | Revision Log | Show Annotations | Root Listing
root/cvsroot/UserCode/cbrown/Development/Plotting/Modules/Plotting_Functions.C
Revision: 1.92
Committed: Tue Apr 30 09:49:05 2013 UTC (12 years ago) by buchmann
Content type: text/plain
Branch: MAIN
Changes since 1.91: +173 -23 lines
Log Message:
Added mll distribution after JZB cut in DY closure test; added quick test of peak position as a function of mll in testing

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