ViewVC Help
View File | Revision Log | Show Annotations | Root Listing
root/cvsroot/UserCode/cbrown/Development/Plotting/Modules/Plotting_Functions.C
Revision: 1.83
Committed: Mon Feb 11 13:32:18 2013 UTC (12 years, 2 months ago) by buchmann
Content type: text/plain
Branch: MAIN
Changes since 1.82: +13 -2 lines
Log Message:
Added generator level plots (gen leptons and gen met)

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