ViewVC Help
View File | Revision Log | Show Annotations | Root Listing
root/cvsroot/UserCode/cbrown/Development/Plotting/Modules/Plotting_Functions.C
Revision: 1.75
Committed: Tue Dec 4 12:31:52 2012 UTC (12 years, 5 months ago) by buchmann
Content type: text/plain
Branch: MAIN
Changes since 1.74: +4 -4 lines
Log Message:
Updated HT plots

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