ViewVC Help
View File | Revision Log | Show Annotations | Root Listing
root/cvsroot/UserCode/cbrown/Development/Plotting/Modules/Plotting_Functions.C
Revision: 1.86
Committed: Mon Feb 25 15:39:12 2013 UTC (12 years, 2 months ago) by buchmann
Content type: text/plain
Branch: MAIN
Changes since 1.85: +283 -21 lines
Log Message:
Updated systematics plots: now all samples are normalized to unit area and the shape is compared; to get a good picture of the actual systematic and not just statistical fluctuations we optimize the binning; to be able to still see trends we use 7 bins; the systematic is assumed to be symmetric about the central value, hence the variation is obtained solely based on up and down, not on the central value (as massivedecaybin sample is not recommended); also added illustration of PU dependence of width and peak position of JZB distribution

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