ViewVC Help
View File | Revision Log | Show Annotations | Root Listing
root/cvsroot/UserCode/cbrown/Development/Plotting/Modules/Plotting_Functions.C
Revision: 1.87
Committed: Mon Feb 25 18:00:09 2013 UTC (12 years, 2 months ago) by buchmann
Content type: text/plain
Branch: MAIN
Changes since 1.86: +51 -8 lines
Log Message:
Finalized PU study

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