ViewVC Help
View File | Revision Log | Show Annotations | Root Listing
root/cvsroot/UserCode/cbrown/AnalysisFramework/Plotting/Modules/Plotting_Functions.C
Revision: 1.114
Committed: Tue Jan 10 13:49:37 2012 UTC (13 years, 4 months ago) by pablom
Content type: text/plain
Branch: MAIN
Changes since 1.113: +12 -7 lines
Log Message:
Adapted range for efficiency_curve_jzb and new option in DrawPrelim. If the input argument is 0 no luminosity tag is added to the text.

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 buchmann 1.13 #include <TProfile.h>
17 fronga 1.24 #include <TLegendEntry.h>
18 buchmann 1.1
19     using namespace std;
20    
21     using namespace PlottingSetup;
22    
23 buchmann 1.22 void todo() {
24     dout << "My to do list: " << endl;
25 buchmann 1.38 dout << " - ExperimentalModule::Poisson_ratio_plot : Get the second part to work!" << endl;
26 buchmann 1.105 dout << "Info : The trigger requirement is currently set to " << (const char*) passtrig << endl;
27 buchmann 1.22 }
28 buchmann 1.102
29 fronga 1.98 void find_peaks(float &MCPeak,float &MCPeakError, float &DataPeak, float &DataPeakError, float &MCSigma, float &DataSigma, stringstream &result, bool doPUreweighting = true )
30 buchmann 1.1 {
31 fronga 1.98 // Temporarily switch off PU reweighting, if asked
32     TCut weightbackup=cutWeight;
33     if ( !doPUreweighting ) cutWeight="1.0";
34    
35 buchmann 1.21 TCanvas *tempcan = new TCanvas("tempcan","Temporary canvas for peak finding preparations");
36 buchmann 1.17 TH1F *rawJZBeemmMC = allsamples.Draw("rawJZBeemmMC",jzbvariablemc,100,-50,50, "JZB [GeV]", "events", cutmass&&cutOSSF&&cutnJets,mc, luminosity);
37     TH1F *rawJZBeemmData = allsamples.Draw("rawJZBeemmData",jzbvariabledata,100, -50,50, "JZB [GeV]", "events", cutmass&&cutOSSF&&cutnJets,data, luminosity);
38     TH1F *rawJZBemMC = allsamples.Draw("rawJZBemMC",jzbvariablemc,100,-50,50, "JZB [GeV]", "events", cutmass&&cutOSOF&&cutnJets,mc, luminosity);
39     TH1F *rawJZBemData = allsamples.Draw("rawJZBemData",jzbvariabledata,100, -50,50, "JZB [GeV]", "events", cutmass&&cutOSOF&&cutnJets,data, luminosity);
40 buchmann 1.1 TH1F *rawttbarjzbeemmMC;
41    
42     if(method==doKM) {
43     //we only need this histo for the KM fitting...
44 buchmann 1.17 rawttbarjzbeemmMC = allsamples.Draw("rawttbarjzbeemmMC",jzbvariablemc,100, -50,50, "JZB [GeV]", "events",cutmass&&cutOSSF&&cutnJets,mc,luminosity,allsamples.FindSample("TTJet"));
45 buchmann 1.1 MCPeak=find_peak(rawJZBeemmMC, rawttbarjzbeemmMC, -40, 40, mc, MCPeakError,MCSigma,method);
46     DataPeak=find_peak(rawJZBeemmData, rawJZBeemmData, -40, 40, data, DataPeakError,DataSigma,method);
47     }
48     else {
49     TH1F *reducedMC = (TH1F*)rawJZBeemmMC->Clone();
50     TH1F *reducedData = (TH1F*)rawJZBeemmData->Clone();
51     reducedMC->Add(rawJZBemMC,-1);
52     reducedData->Add(rawJZBemData,-1);
53     //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)
54     MCPeak=find_peak(reducedMC, rawttbarjzbeemmMC, -40, 40, mc, MCPeakError,MCSigma,method);
55     DataPeak=find_peak(reducedData, rawJZBeemmData, -40, 40, data, DataPeakError,DataSigma,method);
56 buchmann 1.11
57 buchmann 1.1 }
58 fronga 1.98
59     // Revert to original PU reweighting
60     if ( !doPUreweighting ) cutWeight = weightbackup;
61 buchmann 1.1
62     // MCPeak=find_peak(rawJZBeemmMC, rawttbarjzbeemmMC, -40, 40, mc, MCPeakError,MCSigma,method);
63     // DataPeak=find_peak(rawJZBeemmData, rawJZBeemmData, -40, 40, data, DataPeakError,DataSigma,method);
64 buchmann 1.21 dout << "We have found the peak in Data at " << DataPeak << " +/- " << DataPeakError << " with sigma=" << DataSigma << " +/- ?? (not impl.)" << endl;
65 buchmann 1.1 result << "We have found the peak in Data at " << DataPeak << " +/- " << DataPeakError << " with sigma=" << DataSigma << " +/- ?? (not impl.)" << endl;
66 buchmann 1.21 dout << "We have found the peak in MC at " << MCPeak << " +/- " << MCPeakError << " with sigma=" << MCSigma << " +/- ?? (not impl.)" << endl;
67 buchmann 1.1 result << "We have found the peak in MC at " << MCPeak << " +/- " << MCPeakError << " with sigma=" << MCSigma << " +/- ?? (not impl.)" << endl;
68 buchmann 1.111 delete tempcan;
69 buchmann 1.1 }
70    
71     void make_special_mll_plot(int nbins, float min, float max, bool logscale,string xlabel) {
72    
73     TCanvas *ckin = new TCanvas("ckin","Kinematic Plots (in the making)",600,600);
74    
75     TH1F *datahistoOSSF = allsamples.Draw("datahistoOSSF","mll",nbins,min,max, xlabel, "events",cutOSSF&&cutnJets&&basiccut,data,luminosity);
76     THStack mcstackOSSF = allsamples.DrawStack("mcstackOSSF","mll",nbins,min,max, xlabel, "events",cutOSSF&&cutnJets&&basiccut,mc,luminosity);
77 fronga 1.24 TH1F *datahistoOSOF = allsamples.Draw("datahistoOSOF","mll",nbins,min,max, xlabel, "events",cutOSOF&&cutnJets&&basiccut,data,luminosity);
78 buchmann 1.1
79     if(logscale) ckin->SetLogy(1);
80 buchmann 1.17 datahistoOSSF->SetMarkerSize(DataMarkerSize);
81 buchmann 1.1 datahistoOSSF->GetXaxis()->SetTitle(xlabel.c_str());
82     datahistoOSSF->GetXaxis()->CenterTitle();
83     datahistoOSSF->GetYaxis()->SetTitle("events");
84     datahistoOSSF->GetYaxis()->CenterTitle();
85 buchmann 1.17 datahistoOSOF->SetMarkerSize(DataMarkerSize);
86     datahistoOSSF->SetMarkerSize(DataMarkerSize);
87 buchmann 1.1 datahistoOSSF->Draw();
88 fronga 1.24
89 buchmann 1.1 mcstackOSSF.Draw("same");
90     datahistoOSSF->Draw("same");
91 fronga 1.24
92 buchmann 1.49 datahistoOSOF->SetMarkerColor(TColor::GetColor("#FE642E"));
93 fronga 1.24 datahistoOSOF->SetLineColor(kRed);
94 buchmann 1.17 datahistoOSOF->SetMarkerStyle(21);
95 buchmann 1.1 datahistoOSOF->Draw("same");
96 fronga 1.24
97     // Try to re-arrange legend...
98     TLegend *bgleg = allsamples.allbglegend("",datahistoOSSF);
99     TLegend *kinleg = make_legend();
100 fronga 1.41 kinleg->AddEntry(datahistoOSSF,"SF (data)","p");
101     kinleg->AddEntry(datahistoOSOF,"OF (data)","p");\
102 fronga 1.24 TIter next(bgleg->GetListOfPrimitives());
103     TObject* obj;
104     // Copy the nice bkgd legend skipping the "data"
105     while ( obj = next() )
106     if ( strcmp(((TLegendEntry*)obj)->GetObject()->GetName(),"datahistoOSSF") )
107     kinleg->GetListOfPrimitives()->Add(obj);
108    
109 buchmann 1.1 kinleg->Draw();
110     CompleteSave(ckin,"kin/mll_ossf_osof_distribution");
111 buchmann 1.18
112     delete datahistoOSOF;
113     delete datahistoOSSF;
114 buchmann 1.34 delete ckin;
115 buchmann 1.1 }
116    
117    
118 fronga 1.35 void draw_ratio_plot(TH1* hdata, THStack& hmc, float ymin=0.5, float ymax=1.5) {
119    
120     // Make a histogram from stack
121     TIter next(hmc.GetHists());
122     TObject* obj;
123     TH1* hratio = NULL;
124     while ( obj = next() ) {
125     if ( !hratio ) {
126     hratio = (TH1*)obj->Clone();
127     hratio->SetName("hratio");
128     } else hratio->Add( (TH1*)obj );
129     }
130     hratio->Divide(hdata);
131     hratio->SetMaximum(ymax);
132     hratio->SetMinimum(ymin);
133     hratio->SetMarkerStyle(2);
134     hratio->SetLineWidth(1);
135 buchmann 1.69 hratio->GetYaxis()->SetLabelSize(0.08);
136     hratio->GetXaxis()->SetLabelSize(0.0);
137 fronga 1.35
138 buchmann 1.69 TPad* rpad = new TPad("rpad","",0.15,0.73,0.4,0.88);
139     rpad->SetTopMargin(0.0);
140     rpad->SetBottomMargin(0.0);
141     rpad->SetRightMargin(0.0);
142 fronga 1.35 rpad->Draw();
143     rpad->cd();
144 buchmann 1.69 // hratio->GetXaxis()->SetNdivisions(0);
145     hratio->GetYaxis()->SetNdivisions(502,false);
146 fronga 1.35 hratio->Draw("e1x0");
147    
148     TF1* oneline = new TF1("","1.0",0,1000);
149     oneline->SetLineColor(kBlue);
150     oneline->SetLineStyle(1);
151     oneline->SetLineWidth(1);
152     oneline->Draw("same");
153     }
154    
155 buchmann 1.68 float lastrange_min=0;
156     float lastrange_max=0;
157    
158 fronga 1.25 void make_kin_plot(string variable, int nbins, float min, float max, bool logscale,
159 buchmann 1.100 string xlabel, string filename, bool isPF=true, bool plotratio=true, bool loadlastminmax=false ) {
160 buchmann 1.1 // TCut basiccut("(pfJetGoodNum>=2&&pfJetGoodID[0])&&(pfJetGoodNum>=2&&pfJetGoodID[1])&&(passed_triggers||!is_data)");
161     TCut ibasiccut=basiccut;
162 buchmann 1.78 bool draw_separation_lines=false;
163 buchmann 1.1
164     if(isPF) ibasiccut=basiccut&&"pfjzb[0]>-998";
165     //Step 1: Adapt the variable (if we're dealing with PF we need to adapt the variable!)
166     if(isPF) {
167     if(variable=="mll") variable="pfmll[0]";
168     if(variable=="jetpt[0]") variable="pfJetGoodPt[0]";
169     if(variable=="jeteta[0]") variable="pfJetGoodEta[0]";
170     if(variable=="pt") variable="pfpt[0]";
171     if(variable=="pt1") variable="pfpt1[0]";
172 buchmann 1.19 if(variable=="pt2") variable="pfpt2[0]";
173 buchmann 1.1 if(variable=="eta1") variable="pfeta1[0]";
174     if(variable=="jzb[1]") variable="pfjzb[0]";
175     //if(variable=="pfJetGoodNum") variable="pfJetGoodNum"; // pointless.
176     }
177    
178     //Step 2: Refine the cut
179     TCut cut;
180     cut=cutmass&&cutOSSF&&cutnJets&&ibasiccut;
181     if(filename=="nJets") cut=cutmass&&cutOSSF&&ibasiccut;
182     if(filename=="nJets_nocuts_except_mll_ossf") cut=cutmass&&cutOSSF;
183 buchmann 1.78 if(filename=="mll") {
184     cut=cutOSSF&&cutnJets&&ibasiccut;
185     draw_separation_lines=true;
186     }
187 buchmann 1.18 if(filename=="mll_ee") cut=cutOSSF&&cutnJets&&ibasiccut&&"id1==0";
188 buchmann 1.78 if(filename=="mll_osof") {
189     cut=cutOSOF&&cutnJets&&ibasiccut;
190     draw_separation_lines=true;
191     }
192 buchmann 1.18 if(filename=="mll_mm") cut=cutOSSF&&cutnJets&&ibasiccut&&"id1==1";
193 buchmann 1.17 if(filename=="mll_inclusive"||filename=="mll_inclusive_highrange") cut=cutOSSF;
194 buchmann 1.71 if(filename=="mll_inclusive_osof") cut=cutOSOF;
195 buchmann 1.18 if(filename=="mll_inclusive_ee") cut=cutOSSF&&"id1==0";
196     if(filename=="mll_inclusive_mm") cut=cutOSSF&&"id1==1";
197 buchmann 1.59 if(filename=="pfJetGoodEta_0") cut=cutOSSF&&cutmass&&ibasiccut&&cutnJets;
198     if(filename=="pfJetGoodPt_0") cut=cutOSSF&&cutmass&&ibasiccut&&cutnJets;
199 buchmann 1.1
200 fronga 1.25 TCanvas *ckin = new TCanvas("ckin","Kinematic Plots (in the making)",600,600);
201     ckin->SetLogy(logscale);
202 buchmann 1.1 TH1F *datahisto = allsamples.Draw("datahisto",variable,nbins,min,max, xlabel, "events",cut,data,luminosity);
203 buchmann 1.17 datahisto->SetMarkerSize(DataMarkerSize);
204 buchmann 1.1 THStack mcstack = allsamples.DrawStack("mcstack",variable,nbins,min,max, xlabel, "events",cut,mc,luminosity);
205     if(variable=="pfJetGoodPt[0]") datahisto->SetMaximum(10*datahisto->GetMaximum());
206     if(variable=="pt") datahisto->SetMaximum(10*datahisto->GetMaximum());
207     if(filename=="mll_inclusive") datahisto->SetMinimum(1);
208 buchmann 1.67 if(filename=="mll_osof") datahisto->SetMaximum(10*datahisto->GetMaximum());
209     if(filename=="mll_osof") datahisto->SetMinimum(9);
210 buchmann 1.68
211 buchmann 1.69 datahisto->SetMaximum(5.3*datahisto->GetMaximum());
212 buchmann 1.1 datahisto->Draw("e1");
213 buchmann 1.68 ckin->Update();
214     if(loadlastminmax) {
215     datahisto->SetMinimum(lastrange_min);
216     datahisto->SetMaximum(lastrange_max);
217     if(logscale) {
218     datahisto->SetMinimum(pow(10,lastrange_min));
219     datahisto->SetMaximum(pow(10,lastrange_max));
220     }
221     }
222    
223 buchmann 1.1 mcstack.Draw("same");
224     datahisto->Draw("same,e1");
225     TLegend *kinleg = allsamples.allbglegend();
226     kinleg->Draw();
227 buchmann 1.90 if(filename=="mll_osof") {
228     kinleg->SetHeader("Opposite flavor");
229     kinleg->SetX1(0.58);
230     }
231     if(filename=="mll") {
232     kinleg->SetHeader("Same flavor");
233     kinleg->SetX1(0.58);
234 fronga 1.98 }
235     TText* write_cut = write_cut_on_canvas(decipher_cut(cut,basicqualitycut));
236 buchmann 1.1 write_cut->Draw();
237     TText* write_variable = write_text(0.99,0.01,variable);
238     write_variable->SetTextAlign(31);
239     write_variable->SetTextSize(0.02);
240 fronga 1.35
241 buchmann 1.78 TLine *lowerboundary;
242     TLine *upperboundary;
243    
244 buchmann 1.79 if(RestrictToMassPeak&&draw_separation_lines) {
245 buchmann 1.78 Color_t linecolor=kBlue;
246     float linemin=pow(10,ckin->GetUymin());
247     if(filename=="mll_osof") linemin=pow(10,lastrange_min);
248     lowerboundary = new TLine(71,linemin,71,datahisto->GetMaximum());
249     upperboundary = new TLine(111,linemin,111,datahisto->GetMaximum());
250     lowerboundary->SetLineColor(linecolor);
251     lowerboundary->SetLineStyle(2);
252     upperboundary->SetLineColor(linecolor);
253     upperboundary->SetLineStyle(2);
254     }
255    
256     lastrange_min=ckin->GetUymin();
257     lastrange_max=ckin->GetUymax();
258    
259    
260 buchmann 1.67 if ( plotratio ) {
261 buchmann 1.79 TPad *kinpad = new TPad("kinpad","kinpad",0,0,1,1);
262     kinpad->cd();
263     kinpad->SetLogy(logscale);
264     datahisto->Draw("e1");
265     mcstack.Draw("same");
266     datahisto->Draw("same,e1");
267     datahisto->Draw("same,axis");
268 buchmann 1.108 if(RestrictToMassPeak&&draw_separation_lines) {
269     lowerboundary->Draw("same");
270     upperboundary->Draw("same");
271     }
272    
273 buchmann 1.79 kinleg->Draw();
274     write_cut->Draw();
275     DrawPrelim();
276 buchmann 1.99 string saveas="kin/"+filename;
277     if(isPF) saveas="kin/"+filename+"__PF";
278 buchmann 1.92 save_with_ratio(datahisto,mcstack,kinpad->cd(),saveas);
279     // if(isPF) CompleteSave(with_ratio,"kin/"+filename+"__PF_withratio");
280     // else CompleteSave(with_ratio,"kin/"+filename+"_withratio");
281     // delete with_ratio;
282     } else {
283     if(isPF) CompleteSave(ckin,"kin/"+filename+"__PF");
284     else CompleteSave(ckin,"kin/"+filename);
285 buchmann 1.67 }
286 buchmann 1.1 datahisto->Delete();
287 buchmann 1.47 delete ckin;
288 buchmann 1.1 }
289    
290 buchmann 1.95
291     void make_JES_plot() {
292    
293     int nbins=10;
294     float min=-0.5;
295     float max = 9.5;
296     bool logscale=true;
297     string xlabel="nJets";
298     TCut cut=cutmass&&cutOSSF&&basiccut;
299    
300     TCanvas *ckin = new TCanvas("ckin","Kinematic Plots (in the making)",600,600);
301     ckin->SetLogy(logscale);
302     TH1F *datahisto = allsamples.Draw("datahisto","pfJetGoodNum",nbins,min,max, xlabel, "events",cut,data,luminosity);
303     datahisto->SetMarkerSize(DataMarkerSize);
304     THStack mcstack = allsamples.DrawStack("mcstack","pfJetGoodNum",nbins,min,max, xlabel, "events",cut,mc,luminosity);
305     TH1F *JESup = allsamples.Draw("JESup","pfJetGoodNum315",nbins,min,max, xlabel, "events",cut,mc,luminosity);
306     TH1F *JESdn = allsamples.Draw("JESdn","pfJetGoodNum285",nbins,min,max, xlabel, "events",cut,mc,luminosity);
307    
308     datahisto->SetMinimum(1);
309     datahisto->SetMaximum(5.3*datahisto->GetMaximum()); // in line with kinematic plots style
310    
311     float xs[nbins],ys[nbins],exs[nbins],eys[nbins];
312     for(int i=1;i<JESup->GetNbinsX();i++) {
313     float up=JESup->GetBinContent(i);
314     float dn=JESdn->GetBinContent(i);
315     xs[i]=JESup->GetBinCenter(i);
316     ys[i]=0.5*(up+dn);
317     exs[i]=0.5*JESup->GetBinWidth(i);
318     eys[i]=0.5*TMath::Abs(up-dn);
319     }
320    
321     TGraphAsymmErrors *JESunc = new TGraphAsymmErrors(nbins, xs,ys,exs,exs,eys,eys);
322     JESunc->SetFillColor(TColor::GetColor("#00ADE1"));
323     JESunc->SetFillStyle(3002);
324     datahisto->Draw("e1");
325     mcstack.Draw("same");
326     JESunc->Draw("2");
327     datahisto->Draw("same,e1");
328     TLegend *kinleg = allsamples.allbglegend();
329     kinleg->AddEntry(JESunc,"JES uncertainty","f");
330     kinleg->Draw();
331     CompleteSave(ckin,"Systematics/JES");
332     datahisto->Delete();
333     delete ckin;
334    
335     }
336    
337 buchmann 1.1 void do_kinematic_plots(bool doPF=false)
338     {
339     bool dolog=true;
340     bool nolog=false;
341 buchmann 1.83 if(doPF) write_warning(__FUNCTION__,"Please use caution when trying to produce PF plots; not all versions of the JZB trees have these variables!");
342     float mll_low=40;
343     if(PlottingSetup::RestrictToMassPeak) mll_low=55;
344 buchmann 1.96 make_kin_plot("mll",(int)((160-mll_low)/5),mll_low,160,dolog,"m_{ll} [GeV]","mll",doPF,true);
345     make_kin_plot("mll",(int)((160-mll_low)/5),mll_low,160,dolog,"m_{ll} [GeV]","mll_osof",doPF,true,true);
346     make_kin_plot("mll",(int)((160-mll_low)/5),mll_low,160,dolog,"m_{ll} [GeV]","mll_ee",doPF,true);
347     make_kin_plot("mll",(int)((160-mll_low)/5),mll_low,160,dolog,"m_{ll} [GeV]","mll_mm",doPF,true);
348     make_kin_plot("mll",(int)((160-mll_low)),mll_low,160,dolog,"m_{ll} [GeV]","mll_inclusive",doPF,true);
349     make_kin_plot("mll",(int)((160-mll_low)),mll_low,160,dolog,"m_{ll} [GeV]","mll_inclusive_ee",doPF,true);
350     make_kin_plot("mll",(int)((160-mll_low)),mll_low,160,dolog,"m_{ll} [GeV]","mll_inclusive_mm",doPF,true);
351     make_kin_plot("mll",(int)((160-mll_low)),mll_low,160,dolog,"m_{ll} [GeV]","mll_inclusive_osof",doPF,true);
352     make_kin_plot("mll",(int)((350-mll_low)),mll_low,350,dolog,"m_{ll} [GeV]","mll_inclusive_highrange",doPF);
353 fronga 1.25 make_kin_plot("jetpt[0]",40,0,200,dolog,"leading jet p_{T} [GeV]","pfJetGoodPt_0",doPF);
354     make_kin_plot("jeteta[0]",40,-5,5,nolog,"leading jet #eta","pfJetGoodEta_0",doPF);
355     make_kin_plot("pt",50,0,200,dolog,"Z p_{T} [GeV]","Zpt",doPF);
356     make_kin_plot("pt1",50,0,100,nolog,"p_{T} [GeV]","pt1",doPF);
357     make_kin_plot("pt2",50,0,100,nolog,"p_{T} [GeV]","pt2",doPF);
358     make_kin_plot("eta1",40,-5,5,nolog,"#eta_{l}","eta",doPF);
359     make_kin_plot("jzb[1]",100,-150,150,dolog,"JZB [GeV]","jzb_ossf",doPF);
360     make_kin_plot("pfJetGoodNum",8,0.5,8.5,dolog,"nJets","nJets",doPF);
361     make_kin_plot("pfJetGoodNum",8,0.5,8.5,dolog,"nJets","nJets_nocuts_except_mll_ossf",doPF);
362 buchmann 1.96 if(!doPF) make_special_mll_plot((int)((160-mll_low)/5),mll_low,160,dolog,"m_{ll} [GeV]");
363 buchmann 1.1 }
364    
365 buchmann 1.83 void make_comp_plot( string var, string xlabel, string filename, float jzbcut, string mcjzb, string datajzb,
366 fronga 1.25 int nbins, float xmin, float xmax, bool log,
367 fronga 1.26 float ymin=0, float ymax=0, bool leftJustified=false ) {
368 buchmann 1.83 flag_this_change(__FUNCTION__,__LINE__,true);//PlottingSetup::RestrictToMassPeak ---- WATCH OUT: the argument in the function changed!
369    
370 buchmann 1.60 TCut weightbackup=cutWeight;//backing up the correct weight (restoring below!)
371     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__));
372     if(var=="numVtx") cutWeight=TCut("1.0");
373 buchmann 1.83 TCut jzbData[]= { TCut(TString(datajzb+">"+any2string(jzbcut))),TCut(TString(datajzb+"<-"+any2string(jzbcut))) };
374     TCut jzbMC[] = { TCut(TString(mcjzb+">"+any2string(jzbcut))),TCut(TString(mcjzb+"<-"+any2string(jzbcut))) };
375 fronga 1.25
376 buchmann 1.83 flag_this_change(__FUNCTION__,__LINE__,true);//PlottingSetup::RestrictToMassPeak ---- below: the next ~20 lines changed!
377     int nRegions=4;
378     if(!PlottingSetup::RestrictToMassPeak) {
379     nRegions=2;
380     }
381    
382 fronga 1.25 string sRegions[] = { "SFZP","OFZP","SFSB","OFSB" };
383     TCut kRegions[] = { cutOSSF&&cutnJets&&cutmass, cutOSOF&&cutnJets&&cutmass,
384     cutOSSF&&cutnJets&&sidebandcut, cutOSOF&&cutnJets&&sidebandcut };
385 buchmann 1.83
386     //find ymax
387     TH1F *Refdatahisto = allsamples.Draw("datahisto", var,nbins,xmin,xmax,xlabel,"events",kRegions[0]&&jzbData[0],data,luminosity);
388     ymax=int((Refdatahisto->GetMaximum()+2*TMath::Sqrt(Refdatahisto->GetMaximum()))*1.2+0.5);
389     delete Refdatahisto;
390    
391     for ( int iregion=0; iregion<nRegions; ++iregion )
392 fronga 1.25 for ( int ijzb=0; ijzb<2; ++ijzb ) {
393     TCanvas *ccomp = new TCanvas("ccomp","Comparison plot",600,400);
394     ccomp->SetLogy(log);
395     TH1F *datahisto = allsamples.Draw("datahisto", var,nbins,xmin,xmax,xlabel,"events",kRegions[iregion]&&jzbData[ijzb],data,luminosity);
396 buchmann 1.56 TH1F *lm4histo = signalsamples.Draw("lm4histo", var,nbins,xmin,xmax,xlabel,"events",kRegions[iregion]&&jzbData[ijzb],data,luminosity,signalsamples.FindSample("LM4"));
397 fronga 1.25 THStack mcstack = allsamples.DrawStack("mcstack",var,nbins,xmin,xmax,xlabel,"events",kRegions[iregion]&&jzbMC[ijzb], mc, luminosity);
398     datahisto->SetMarkerSize(DataMarkerSize);
399     if (ymax>ymin) datahisto->SetMaximum(ymax);
400 buchmann 1.56 lm4histo->SetLineStyle(2);
401 fronga 1.25 datahisto->Draw("e1");
402     mcstack.Draw("same");
403     datahisto->Draw("same,e1");
404 buchmann 1.57 // lm4histo->Draw("hist,same");
405 fronga 1.25 TLegend *kinleg = allsamples.allbglegend((sRegions[iregion]+(ijzb?"neg":"pos")).c_str());
406 fronga 1.26 if ( leftJustified ) {
407     Float_t w = kinleg->GetX2()-kinleg->GetX1();
408     kinleg->SetX1(0.2);
409     kinleg->SetX2(0.2+w);
410     }
411 buchmann 1.57 // kinleg->AddEntry(lm4histo,"LM4","l");
412 fronga 1.25 kinleg->Draw();
413     TText* write_variable = write_text(0.99,0.01,var);
414     write_variable->SetTextAlign(31);
415     write_variable->SetTextSize(0.02);
416     ccomp->RedrawAxis();
417 buchmann 1.83 CompleteSave(ccomp,"compare/JZBcut_at_"+any2string(jzbcut)+"/"+filename+"/"+filename+sRegions[iregion]+(ijzb?"neg":"pos"));
418 buchmann 1.27 delete datahisto;
419 buchmann 1.34 delete ccomp;
420 buchmann 1.56 delete lm4histo;
421 fronga 1.25 }
422 buchmann 1.60 cutWeight=weightbackup;
423 fronga 1.25 }
424    
425    
426 buchmann 1.83 void region_comparison_plots(string mcjzb, string datajzb, vector<float> jzb_cuts) {
427 fronga 1.25 dout << "Creating comparison plots for signal and control regions" << endl;
428     // Compare a few quantities in the signal region and all 7 control regions
429 buchmann 1.55
430     switch_overunderflow(true); // switching overflow/underflow bins on
431 buchmann 1.83
432    
433     flag_this_change(__FUNCTION__,__LINE__,true);//PlottingSetup::RestrictToMassPeak ---- the arguments changed
434     for(int ijzb=0;ijzb<jzb_cuts.size();ijzb++) {
435     float jzbcut=jzb_cuts[ijzb]; // Comparison plots are done for this JZB cut
436 buchmann 1.104 float mll_low=50;float mll_high=170;
437 buchmann 1.89 if(!PlottingSetup::RestrictToMassPeak) {
438     mll_high=200;
439     mll_low=50;
440     }
441 buchmann 1.83 make_comp_plot("mll","m_{ll} [GeV]","mll",jzbcut,mcjzb,datajzb,30,mll_low,mll_high,false,0,16.);
442     make_comp_plot("met[4]","pfMET [GeV]","pfmet",jzbcut,mcjzb,datajzb,18,0,360,false,0,16.);
443     make_comp_plot("pfJetGoodNum","#(jets)","njets",jzbcut,mcjzb,datajzb,10,0,10, false,0,35.);
444     make_comp_plot("pt","Z p_{T} [GeV]","Zpt",jzbcut,mcjzb,datajzb,26,0,525,false,0.,21.);
445     make_comp_plot("numVtx","#(prim. vertices)","nvtx",jzbcut,mcjzb,datajzb,20,0.,20.,false,0,16.);
446     make_comp_plot("TMath::Abs(dphi)","#Delta#phi(leptons)","dphilep",jzbcut,mcjzb,datajzb,10,0.,3.1415,false,0,16.,true);
447     make_comp_plot("TMath::Abs(dphi_sumJetVSZ[1])","#Delta#phi(Z,jets)","dphiZjets",jzbcut,mcjzb,datajzb,10,0.,3.1415,false,0,16.,true);
448     }
449 fronga 1.25
450 buchmann 1.55 switch_overunderflow(false); // switching overflow/underflow bins off
451 fronga 1.25 }
452    
453 buchmann 1.83
454    
455 buchmann 1.1 void do_kinematic_PF_plots()
456     {
457     do_kinematic_plots(true);
458     }
459    
460 buchmann 1.11 void signal_bg_comparison()
461 buchmann 1.1 {
462 buchmann 1.11 TCanvas *can = new TCanvas("can","Signal Background Comparison Canvas");
463 fronga 1.45 can->SetLogy(1);
464    
465     int sbg_nbins=130;
466     float sbg_min=-500; //-110;
467     float sbg_max=800; //jzbHigh;
468 buchmann 1.44
469 buchmann 1.58 float simulatedlumi=luminosity;//in pb please - adjust to your likings
470 buchmann 1.44
471     TH1F *JZBplotZJETs = allsamples.Draw("JZBplotZJETs",jzbvariablemc,sbg_nbins,sbg_min,sbg_max, "JZB [GeV]", "events",cutmass&&cutOSSF&&cutnJets,mc,simulatedlumi,allsamples.FindSample("DYJetsToLL"));
472     TH1F *JZBplotLM4 = allsamples.Draw("JZBplotLM4",jzbvariablemc,sbg_nbins,sbg_min,sbg_max, "JZB [GeV]", "events",cutmass&&cutOSSF&&cutnJets,mc,simulatedlumi,allsamples.FindSample("LM4"));
473     TH1F *JZBplotTtbar = allsamples.Draw("JZBplotTtbar",jzbvariablemc,sbg_nbins,sbg_min,sbg_max, "JZB [GeV]", "events",cutmass&&cutOSSF&&cutnJets,mc,simulatedlumi,allsamples.FindSample("TTJets"));
474 buchmann 1.1
475     JZBplotTtbar->SetLineColor(allsamples.GetColor("TTJet"));
476     JZBplotZJETs->SetFillColor(allsamples.GetColor("DY"));
477     JZBplotZJETs->SetLineColor(kBlack);
478     JZBplotLM4->SetLineStyle(2);
479 fronga 1.45 JZBplotZJETs->SetMaximum(JZBplotZJETs->GetMaximum()*5);
480     JZBplotZJETs->SetMinimum(1);
481    
482     JZBplotTtbar->SetMaximum(JZBplotZJETs->GetMaximum());
483     JZBplotTtbar->SetMinimum(0.01);
484     JZBplotTtbar->SetFillColor(allsamples.GetColor("TTJets"));
485     JZBplotTtbar->DrawClone("histo");
486     JZBplotZJETs->Draw("histo,same");
487     JZBplotTtbar->SetFillColor(0);
488     JZBplotTtbar->DrawClone("histo,same");
489     JZBplotTtbar->SetFillColor(allsamples.GetColor("TTJets"));
490 buchmann 1.44 JZBplotLM4->Draw("histo,same");
491 fronga 1.45
492    
493     TLegend *signal_bg_comparison_leg2 = make_legend("",0.55,0.75,false);
494 buchmann 1.1 signal_bg_comparison_leg2->AddEntry(JZBplotZJETs,"Z+Jets","f");
495     signal_bg_comparison_leg2->AddEntry(JZBplotTtbar,"t#bar{t}","f");
496     signal_bg_comparison_leg2->AddEntry(JZBplotLM4,"LM4","f");
497     signal_bg_comparison_leg2->Draw();
498 fronga 1.53 DrawMCPrelim(simulatedlumi);
499 buchmann 1.39 CompleteSave(can,"jzb_bg_vs_signal_distribution");
500 buchmann 1.31
501 fronga 1.45 // Define illustrative set of SMS points
502     TCut kSMS1("MassGlu==250&&MassLSP==75");
503     TCut kSMS2("MassGlu==800&&MassLSP==200");
504     TCut kSMS3("MassGlu==1050&&MassLSP==850");
505     TCut kSMS4("MassGlu==1200&&MassLSP==100");
506 buchmann 1.83
507     //If the scan samples haven't been loaded yet, this is a good point to load them (all of them!)
508 buchmann 1.110 if((scansample.collection).size()<2) define_SMS_sample(false, allsamples, signalsamples, scansample, true); // loading ALL zones for the scans, not only the basic one.
509 buchmann 1.83
510    
511 buchmann 1.47 TH1F *JZBplotSMS1 = scansample.Draw("JZBplotSMS1",jzbvariablemc,sbg_nbins,sbg_min,sbg_max, "JZB [GeV]", "events",cutmass&&cutOSSF&&cutnJets&&kSMS1,mc,simulatedlumi,scansample.FindSample("t"));
512 fronga 1.45 JZBplotSMS1->Scale(JZBplotLM4->Integral()/JZBplotSMS1->Integral());
513 buchmann 1.83
514 buchmann 1.47 TH1F *JZBplotSMS2 = scansample.Draw("JZBplotSMS2",jzbvariablemc,sbg_nbins,sbg_min,sbg_max, "JZB [GeV]", "events",cutmass&&cutOSSF&&cutnJets&&kSMS2,mc,simulatedlumi,scansample.FindSample("t"));
515 buchmann 1.31 JZBplotSMS2->Scale(JZBplotLM4->Integral()/JZBplotSMS2->Integral());
516 buchmann 1.47
517     TH1F *JZBplotSMS3 = scansample.Draw("JZBplotSMS3",jzbvariablemc,sbg_nbins,sbg_min,sbg_max, "JZB [GeV]", "events",cutmass&&cutOSSF&&cutnJets&&kSMS3,mc,simulatedlumi,scansample.FindSample("t"));
518 buchmann 1.31 JZBplotSMS3->Scale(JZBplotLM4->Integral()/JZBplotSMS3->Integral());
519    
520 buchmann 1.47 TH1F *JZBplotSMS4 = scansample.Draw("JZBplotSMS4",jzbvariablemc,sbg_nbins,sbg_min,sbg_max, "JZB [GeV]", "events",cutmass&&cutOSSF&&cutnJets&&kSMS4,mc,simulatedlumi,scansample.FindSample("t"));
521 buchmann 1.31 JZBplotSMS4->Scale(JZBplotLM4->Integral()/JZBplotSMS4->Integral());
522 fronga 1.45
523     // Draw all plots overlaid
524     JZBplotTtbar->SetMaximum(JZBplotZJETs->GetMaximum());
525     JZBplotTtbar->SetMinimum(0.01);
526     JZBplotTtbar->SetFillColor(allsamples.GetColor("TTJets"));
527     JZBplotTtbar->DrawClone("histo");
528     JZBplotZJETs->Draw("histo,same");
529     JZBplotTtbar->SetFillColor(0);
530     JZBplotTtbar->DrawClone("histo,same");
531     JZBplotTtbar->SetFillColor(allsamples.GetColor("TTJets"));
532    
533     JZBplotSMS1->SetLineColor(kRed+1);
534     JZBplotSMS2->SetLineColor(kBlue+1);
535     JZBplotSMS3->SetLineColor(kRed+1);
536     JZBplotSMS4->SetLineColor(kBlue+1);
537 buchmann 1.31 JZBplotSMS3->SetLineStyle(2);
538     JZBplotSMS4->SetLineStyle(2);
539    
540     JZBplotSMS1->Draw("histo,same");
541     JZBplotSMS2->Draw("histo,same");
542     JZBplotSMS3->Draw("histo,same");
543     JZBplotSMS4->Draw("histo,same");
544 buchmann 1.50 JZBplotLM4->SetLineColor(kGreen);JZBplotLM4->Draw("histo,same");
545 fronga 1.45 TLegend *signal_bg_comparison_leg6 = make_legend("",0.55,0.55,false);
546 buchmann 1.31 signal_bg_comparison_leg6->AddEntry(JZBplotZJETs,"Z+Jets","f");
547     signal_bg_comparison_leg6->AddEntry(JZBplotTtbar,"t#bar{t}","f");
548     signal_bg_comparison_leg6->AddEntry(JZBplotSMS1,"","");
549 fronga 1.45 signal_bg_comparison_leg6->AddEntry(JZBplotSMS1,"SMS parameters","");
550     signal_bg_comparison_leg6->AddEntry(JZBplotSMS1,"(250,75) [GeV]","f");
551     signal_bg_comparison_leg6->AddEntry(JZBplotSMS2,"(800,200) [GeV]","f");
552     signal_bg_comparison_leg6->AddEntry(JZBplotSMS3,"(1050,850) [GeV]","f");
553     signal_bg_comparison_leg6->AddEntry(JZBplotSMS4,"(1200,100) [GeV]","f");
554 buchmann 1.49 signal_bg_comparison_leg6->AddEntry(JZBplotLM4,"LM4","f");
555 buchmann 1.31 signal_bg_comparison_leg6->Draw();
556 buchmann 1.47 DrawMCPrelim(simulatedlumi);
557 buchmann 1.31 CompleteSave(can,"jzb_bg_vs_signal_distribution_SMS__summary");
558 buchmann 1.110
559     while((scansample.collection).size() > 1) scansample.RemoveLastSample();
560    
561 buchmann 1.1 }
562    
563 buchmann 1.9 vector<TF1*> do_cb_fit_to_plot(TH1F *histo, float Sigma, float doingfitacrosstheboard=false) {
564     TF1 *BpredFunc = new TF1("BpredFunc",InvCrystalBall,0,1000,5);
565 buchmann 1.1 BpredFunc->SetParameter(0,histo->GetBinContent(1));
566 buchmann 1.6 if(doingfitacrosstheboard) BpredFunc->SetParameter(0,histo->GetMaximum());
567 buchmann 1.1 BpredFunc->SetParameter(1,0.);
568     if(method==1) BpredFunc->SetParameter(2,10*Sigma);//KM
569     else BpredFunc->SetParameter(2,Sigma);//Gaussian based methods
570     if(method==-99) BpredFunc->SetParameter(2,2.0*Sigma);//Kostas
571     BpredFunc->SetParameter(3,1.8);
572     BpredFunc->SetParameter(4,2.5);
573 buchmann 1.11 histo->Fit(BpredFunc,"QN0");
574 buchmann 1.1 BpredFunc->SetLineColor(kBlue);
575    
576 buchmann 1.9 TF1 *BpredFuncP = new TF1("BpredFuncP",InvCrystalBallP,-1000,histo->GetBinLowEdge(histo->GetNbinsX())+histo->GetBinWidth(histo->GetNbinsX()),5);
577     TF1 *BpredFuncN = new TF1("BpredFuncN",InvCrystalBallN,-1000,histo->GetBinLowEdge(histo->GetNbinsX())+histo->GetBinWidth(histo->GetNbinsX()),5);
578 buchmann 1.1
579     BpredFuncP->SetParameters(BpredFunc->GetParameters());
580     BpredFuncP->SetLineColor(kBlue);
581     BpredFuncP->SetLineStyle(2);
582    
583     BpredFuncN->SetParameters(BpredFunc->GetParameters());
584     BpredFuncN->SetLineColor(kBlue);
585     BpredFuncN->SetLineStyle(2);
586 buchmann 1.9
587     vector<TF1*> functions;
588     functions.push_back(BpredFuncN);
589     functions.push_back(BpredFunc);
590     functions.push_back(BpredFuncP);
591     return functions;
592 buchmann 1.1 }
593 buchmann 1.38
594    
595     TF1* do_logpar_fit_to_plot(TH1F *osof) {
596     TCanvas *logpar_fit_can = new TCanvas("logpar_fit_can","Fit canvas for LogPar");
597 buchmann 1.39 TF1 *logparfunc = new TF1("logparfunc",LogParabola,0,300,3);
598 buchmann 1.38 TF1 *logparfunc2 = new TF1("logparfunc2",LogParabola,0,(osof->GetXaxis()->GetBinLowEdge(osof->GetNbinsX())+osof->GetXaxis()->GetBinWidth(osof->GetNbinsX())),3);
599     TF1 *logparfuncN = new TF1("logparfuncN",LogParabolaN,0,(osof->GetXaxis()->GetBinLowEdge(osof->GetNbinsX())+osof->GetXaxis()->GetBinWidth(osof->GetNbinsX())),3);
600     TF1 *logparfuncP = new TF1("logparfuncP",LogParabolaP,0,(osof->GetXaxis()->GetBinLowEdge(osof->GetNbinsX())+osof->GetXaxis()->GetBinWidth(osof->GetNbinsX())),3);
601     osof->SetMinimum(0);
602     osof->Fit(logparfunc,"QR");
603     osof->Draw();
604     logparfunc->SetLineWidth(2);
605     logparfunc2->SetParameters(logparfunc->GetParameters());
606     logparfuncN->SetParameters(logparfunc->GetParameters());
607     logparfuncP->SetParameters(logparfunc->GetParameters());
608     stringstream fitinfo;
609     fitinfo << "#Chi^{2} / NDF : " << logparfunc->GetChisquare() << " / " << logparfunc->GetNDF();
610     TText *writefitinfo = write_text(0.8,0.8,fitinfo.str());
611     writefitinfo->SetTextSize(0.03);
612     DrawPrelim();
613     writefitinfo->Draw();
614     logparfunc->Draw("same");
615     logparfunc2->Draw("same");
616     logparfuncN->SetLineStyle(2);
617     logparfuncP->SetLineStyle(2);
618     logparfuncN->Draw("same");
619     logparfuncP->Draw("same");
620 buchmann 1.93 CompleteSave(logpar_fit_can,"MakingOfBpredFunction/Bpred_Data_LogPar_Fit_To_TTbarPred");
621 buchmann 1.38 delete logpar_fit_can;
622     return logparfunc2;
623     }
624    
625 buchmann 1.42 vector<TF1*> do_extended_fit_to_plot(TH1F *prediction, TH1F *Tprediction, TH1F *ossf, TH1F *osof,int isdata) {
626 buchmann 1.38 /* there are mainly two background contributions: Z+Jets (a) and ttbar (b). So:
627     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.
628     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.
629     Once we have these two components, we use the combined parameters to get the final function and we're done.
630     */
631     //Step 1: take the OSSF prediction - OSOF prediction, and fit a crystal ball function to it
632     TH1F *step1cb = (TH1F*)ossf->Clone("step1cb");
633     step1cb->Add(osof,-1);
634     vector<TF1*> functions = do_cb_fit_to_plot(step1cb,PlottingSetup::JZBPeakWidthData);
635     TF1 *zjetscrystalball = functions[1];
636    
637     //Step 2: use the OSOF distribution and look at the [10,100] GeV JZB range, and fit our log parabola
638 buchmann 1.39 // TH1F *ttbarprediction=(TH1F*)prediction->Clone("ttbarprediction");
639     // ttbarprediction->Add(ossf,-1);//without the Z+Jets estimate, this is really just the ttbar estimate!
640     // 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)
641     TF1 *ttbarlogpar = do_logpar_fit_to_plot(Tprediction);
642 buchmann 1.83 flag_this_change(__FUNCTION__,__LINE__,true);//PlottingSetup::RestrictToMassPeak
643     if(PlottingSetup::RestrictToMassPeak) ttbarlogpar->SetParameter(0,1.0/3*ttbarlogpar->GetParameter(0));//correcting for the fact that we didn't multiply with (1.0/3);
644    
645 buchmann 1.39
646 buchmann 1.38 TF1 *ttbarlogparP = new TF1("ttbarlogparP",LogParabolaP,0,(prediction->GetXaxis()->GetBinLowEdge(prediction->GetNbinsX())+prediction->GetXaxis()->GetBinWidth(prediction->GetNbinsX())),8);
647     TF1 *ttbarlogparN = new TF1("ttbarlogparN",LogParabolaN,0,(prediction->GetXaxis()->GetBinLowEdge(prediction->GetNbinsX())+prediction->GetXaxis()->GetBinWidth(prediction->GetNbinsX())),8);
648    
649     //and now fuse the two!
650     TF1 *kmlp = new TF1("kmlp", CrystalBallPlusLogParabola, 0,(prediction->GetXaxis()->GetBinLowEdge(prediction->GetNbinsX())+prediction->GetXaxis()->GetBinWidth(prediction->GetNbinsX())),8);
651     TF1 *kmlpP= new TF1("kmlpP",CrystalBallPlusLogParabolaP,0,(prediction->GetXaxis()->GetBinLowEdge(prediction->GetNbinsX())+prediction->GetXaxis()->GetBinWidth(prediction->GetNbinsX())),8);
652     TF1 *kmlpN= new TF1("kmlpN",CrystalBallPlusLogParabolaN,0,(prediction->GetXaxis()->GetBinLowEdge(prediction->GetNbinsX())+prediction->GetXaxis()->GetBinWidth(prediction->GetNbinsX())),8);
653     double kmlp_pars[10];
654     for(int i=0;i<5;i++) kmlp_pars[i]=zjetscrystalball->GetParameter(i);
655     for(int i=0;i<3;i++) kmlp_pars[5+i]=ttbarlogpar->GetParameter(i);
656     ttbarlogparP->SetParameters(ttbarlogpar->GetParameters());
657     ttbarlogparN->SetParameters(ttbarlogpar->GetParameters());
658     kmlp->SetParameters(kmlp_pars);
659 buchmann 1.39 prediction->Fit(kmlp,"Q");//fitting the final result (done this in the past but kicked it)
660 buchmann 1.62 /*
661     if you want to start from scratch (without the partial fitting and only fitting the whole thing, some good start values could be :
662 buchmann 1.83 */
663 buchmann 1.62 kmlp_pars[0]=kmlp->GetParameter(0);
664     kmlp_pars[1]=3.6198;
665     kmlp_pars[2]=16.4664;
666     kmlp_pars[3]=1.92253;
667     kmlp_pars[4]=3.56099;
668     kmlp_pars[5]=5.83;
669     kmlp_pars[6]=0.000757479;
670     kmlp_pars[7]=95.6157;
671     kmlp_pars[8]=0;
672     kmlp_pars[9]=0;
673     kmlp->SetParameters(kmlp_pars);
674 buchmann 1.76 /**/
675 buchmann 1.83 prediction->Fit(kmlp,"Q");//fitting the final result (done this in the past but kicked it)
676 buchmann 1.62
677 buchmann 1.39 kmlpP->SetParameters(kmlp->GetParameters());
678     kmlpN->SetParameters(kmlp->GetParameters());
679 buchmann 1.38
680     // now that we're done, let's save all of this so we can have a look at it afterwards.
681     TCanvas *can = new TCanvas("can","Prediction Fit Canvas");
682     can->SetLogy(1);
683     prediction->SetMarkerColor(kRed);
684     prediction->Draw();
685    
686     kmlp->SetLineColor(TColor::GetColor("#04B404"));
687     kmlpP->SetLineColor(TColor::GetColor("#04B404"));
688     kmlpN->SetLineColor(TColor::GetColor("#04B404"));
689     kmlp->Draw("same");
690     kmlpN->SetLineStyle(2);
691     kmlpP->SetLineStyle(2);
692     kmlpN->Draw("same");
693     kmlpP->Draw("same");
694    
695     ttbarlogpar->SetLineColor(TColor::GetColor("#CC2EFA"));//purple
696     ttbarlogpar->Draw("same");
697     ttbarlogparP->SetLineColor(TColor::GetColor("#CC2EFA"));//purple
698     ttbarlogparN->SetLineColor(TColor::GetColor("#CC2EFA"));//purple
699     ttbarlogparP->SetLineStyle(2);
700     ttbarlogparN->SetLineStyle(2);
701     ttbarlogparP->Draw("same");
702     ttbarlogparN->Draw("same");
703    
704     functions[0]->Draw("same");functions[1]->Draw("same");functions[2]->Draw("same");
705 buchmann 1.62
706 buchmann 1.38 TLegend *analyticalBpredLEG = make_legend("",0.5,0.55);
707     analyticalBpredLEG->AddEntry(prediction,"predicted","p");
708     analyticalBpredLEG->AddEntry(functions[1],"Crystal Ball fit","l");
709     analyticalBpredLEG->AddEntry(functions[0],"1#sigma Crystal Ball fit","l");
710     analyticalBpredLEG->AddEntry(ttbarlogparN,"TTbar fit","l");
711     analyticalBpredLEG->AddEntry(ttbarlogpar,"1#sigma TTbar fit","l");
712     analyticalBpredLEG->AddEntry(kmlp,"Combined function","l");
713     analyticalBpredLEG->AddEntry(kmlpN,"1#sigma combined function","l");
714     analyticalBpredLEG->Draw("same");
715    
716 buchmann 1.42 if(isdata==0) CompleteSave(can,"MakingOfBpredFunction/Bpred_MC_Analytical_Function_Composition");
717     if(isdata==1) CompleteSave(can,"MakingOfBpredFunction/Bpred_data_Analytical_Function_Composition");
718     if(isdata==2) CompleteSave(can,"MakingOfBpredFunction/Bpred_MCBnS_Analytical_Function_Composition");
719 buchmann 1.38 delete can;
720    
721     //and finally: prep return functions
722     vector<TF1*> return_functions;
723     return_functions.push_back(kmlpN);
724     return_functions.push_back(kmlp);
725     return_functions.push_back(kmlpP);
726    
727     return_functions.push_back(ttbarlogparN);
728     return_functions.push_back(ttbarlogpar);
729     return_functions.push_back(ttbarlogparP);
730    
731     return_functions.push_back(functions[0]);
732     return_functions.push_back(functions[1]);
733     return_functions.push_back(functions[2]);
734    
735     return return_functions;
736     }
737    
738 buchmann 1.72 void do_prediction_plot(string jzb, TCanvas *globalcanvas, float sigma, float high, int use_data, bool overlay_signal = false )
739 buchmann 1.1 {
740 buchmann 1.72 bool is_data=false;
741     bool use_signal=false;
742     if(use_data==1) is_data=true;
743 buchmann 1.83 if(use_data==2) use_signal=true;
744 buchmann 1.1 int nbins=100;
745     if(is_data) nbins=50;
746     float low=0;
747     float hi=500;
748 buchmann 1.104 TH1F *blankback = new TH1F("blankback","blankback",int(high/10),0,high);
749 buchmann 1.72 TH1F *RcorrJZBeemm = allsamples.Draw("RcorrJZBeemm",jzb.c_str(),nbins,low,hi, "JZB [GeV]", "events", cutmass&&cutOSSF&&cutnJets,is_data, luminosity,use_signal);
750     TH1F *LcorrJZBeemm = allsamples.Draw("LcorrJZBeemm",("-"+jzb).c_str(),nbins,low,hi, "JZB [GeV]", "events", cutmass&&cutOSSF&&cutnJets,is_data, luminosity,use_signal);
751     TH1F *RcorrJZBem = allsamples.Draw("RcorrJZBem",jzb.c_str(),nbins,low,hi, "JZB [GeV]", "events", cutmass&&cutOSOF&&cutnJets,is_data, luminosity,use_signal);
752     TH1F *LcorrJZBem = allsamples.Draw("LcorrJZBem",("-"+jzb).c_str(),nbins,low,hi, "JZB [GeV]", "events", cutmass&&cutOSOF&&cutnJets,is_data, luminosity,use_signal);
753 buchmann 1.110 blankback->GetXaxis()->SetTitle(RcorrJZBeemm->GetXaxis()->GetTitle());
754     blankback->GetYaxis()->SetTitle(RcorrJZBeemm->GetYaxis()->GetTitle());
755     blankback->GetXaxis()->CenterTitle();
756     blankback->GetYaxis()->CenterTitle();
757 buchmann 1.1
758 buchmann 1.83 flag_this_change(__FUNCTION__,__LINE__,true);//PlottingSetup::RestrictToMassPeak ---- prediction changed.
759     TH1F *RcorrJZBSBem;
760     TH1F *LcorrJZBSBem;
761     TH1F *RcorrJZBSBeemm;
762     TH1F *LcorrJZBSBeemm;
763 buchmann 1.88
764     TH1F *RcorrJZBeemmNoS;
765 buchmann 1.92
766     //these are for the ratio
767     TH1F *JRcorrJZBeemm = allsamples.Draw("JRcorrJZBeemm",jzb.c_str(),PlottingSetup::global_ratio_binning, "JZB [GeV]", "events", cutmass&&cutOSSF&&cutnJets,is_data, luminosity,use_signal);
768     TH1F *JLcorrJZBeemm = allsamples.Draw("JLcorrJZBeemm",("-"+jzb).c_str(),PlottingSetup::global_ratio_binning, "JZB [GeV]", "events", cutmass&&cutOSSF&&cutnJets,is_data, luminosity,use_signal);
769     TH1F *JRcorrJZBem = allsamples.Draw("JRcorrJZBem",jzb.c_str(),PlottingSetup::global_ratio_binning, "JZB [GeV]", "events", cutmass&&cutOSOF&&cutnJets,is_data, luminosity,use_signal);
770     TH1F *JLcorrJZBem = allsamples.Draw("JLcorrJZBem",("-"+jzb).c_str(),PlottingSetup::global_ratio_binning, "JZB [GeV]", "events", cutmass&&cutOSOF&&cutnJets,is_data, luminosity,use_signal);
771    
772     TH1F *JRcorrJZBSBem;
773     TH1F *JLcorrJZBSBem;
774     TH1F *JRcorrJZBSBeemm;
775     TH1F *JLcorrJZBSBeemm;
776 buchmann 1.88
777     if(use_data==2 || overlay_signal) RcorrJZBeemmNoS = allsamples.Draw("RcorrJZBeemmNoS",jzb.c_str(),nbins,low,hi, "JZB [GeV]", "events", cutmass&&cutOSSF&&cutnJets,is_data, luminosity,false);
778    
779    
780 buchmann 1.83 if(PlottingSetup::RestrictToMassPeak) {
781     RcorrJZBSBem = allsamples.Draw("RcorrJZBSBem",jzb.c_str(),nbins,low,hi, "JZB [GeV]", "events", sidebandcut&&cutOSOF&&cutnJets,is_data, luminosity,use_signal);
782     LcorrJZBSBem = allsamples.Draw("LcorrJZBSBem",("-"+jzb).c_str(),nbins,low,hi, "JZB [GeV]", "events", sidebandcut&&cutOSOF&&cutnJets,is_data, luminosity,use_signal);
783     RcorrJZBSBeemm = allsamples.Draw("RcorrJZBSBeemm",jzb.c_str(),nbins,low,hi, "JZB [GeV]", "events", sidebandcut&&cutOSSF&&cutnJets,is_data, luminosity,use_signal);
784     LcorrJZBSBeemm = allsamples.Draw("LcorrJZBSBeemm",("-"+jzb).c_str(),nbins,low,hi, "JZB [GeV]", "events", sidebandcut&&cutOSSF&&cutnJets,is_data, luminosity,use_signal);
785 buchmann 1.92
786     //these are for the ratio
787     JRcorrJZBSBem = allsamples.Draw("JRcorrJZBSBem",jzb.c_str(),PlottingSetup::global_ratio_binning, "JZB [GeV]", "events", sidebandcut&&cutOSOF&&cutnJets,is_data, luminosity,use_signal);
788     JLcorrJZBSBem = allsamples.Draw("JLcorrJZBSBem",("-"+jzb).c_str(),PlottingSetup::global_ratio_binning, "JZB [GeV]", "events", sidebandcut&&cutOSOF&&cutnJets,is_data, luminosity,use_signal);
789     JRcorrJZBSBeemm = allsamples.Draw("JRcorrJZBSBeemm",jzb.c_str(),PlottingSetup::global_ratio_binning, "JZB [GeV]", "events", sidebandcut&&cutOSSF&&cutnJets,is_data, luminosity,use_signal);
790     JLcorrJZBSBeemm = allsamples.Draw("JLcorrJZBSBeemm",("-"+jzb).c_str(),PlottingSetup::global_ratio_binning, "JZB [GeV]", "events", sidebandcut&&cutOSSF&&cutnJets,is_data, luminosity,use_signal);
791    
792 buchmann 1.83 }
793 buchmann 1.13
794 buchmann 1.83 TH1F *lm4RcorrJZBeemm;
795 buchmann 1.88 if(overlay_signal || use_data == 2 ) lm4RcorrJZBeemm = allsamples.Draw("lm4RcorrJZBSBeemm",jzb.c_str(),nbins,low,hi, "JZB [GeV]", "events", cutmass&&cutOSSF&&cutnJets,is_data, luminosity,allsamples.FindSample("LM4"));
796 buchmann 1.64
797 buchmann 1.83 flag_this_change(__FUNCTION__,__LINE__,true);//PlottingSetup::RestrictToMassPeak ---- prediction changed.
798 buchmann 1.108
799 buchmann 1.110 TH1F *Zjetspred = (TH1F*)LcorrJZBeemm->Clone("Zjetspred");
800     TH1F *TTbarpred = (TH1F*)RcorrJZBem->Clone("TTbarpred");
801 buchmann 1.108
802 buchmann 1.17 TH1F *Bpred = (TH1F*)LcorrJZBeemm->Clone("Bpred");
803 buchmann 1.92 TH1F *JBpred = (TH1F*)JLcorrJZBeemm->Clone("Bpred");
804 buchmann 1.83 if(PlottingSetup::RestrictToMassPeak) {
805     Bpred->Add(RcorrJZBem,1.0/3.);
806     Bpred->Add(LcorrJZBem,-1.0/3.);
807     Bpred->Add(RcorrJZBSBem,1.0/3.);
808     Bpred->Add(LcorrJZBSBem,-1.0/3.);
809     Bpred->Add(RcorrJZBSBeemm,1.0/3.);
810     Bpred->Add(LcorrJZBSBeemm,-1.0/3.);
811 buchmann 1.108
812 buchmann 1.110 TTbarpred->Scale(1.0/3);
813     Zjetspred->Add(LcorrJZBem,-1.0/3.);
814     Zjetspred->Add(LcorrJZBSBem,-1.0/3.);
815     TTbarpred->Add(RcorrJZBSBem,1.0/3.);
816     Zjetspred->Add(LcorrJZBSBeemm,-1.0/3.);
817     TTbarpred->Add(RcorrJZBSBeemm,1.0/3.);
818    
819 buchmann 1.92 //these are for the ratio
820     JBpred->Add(JRcorrJZBem,1.0/3.);
821     JBpred->Add(JLcorrJZBem,-1.0/3.);
822     JBpred->Add(JRcorrJZBSBem,1.0/3.);
823     JBpred->Add(JLcorrJZBSBem,-1.0/3.);
824     JBpred->Add(JRcorrJZBSBeemm,1.0/3.);
825     JBpred->Add(JLcorrJZBSBeemm,-1.0/3.);
826 buchmann 1.83 } else {
827     Bpred->Add(RcorrJZBem,1.0);
828     Bpred->Add(LcorrJZBem,-1.0);
829 buchmann 1.108
830 buchmann 1.110 Zjetspred->Add(LcorrJZBem,-1.0);
831    
832 buchmann 1.92 //these are for the ratio
833     JBpred->Add(JRcorrJZBem,1.0);
834     JBpred->Add(JLcorrJZBem,-1.0);
835 buchmann 1.83 }
836    
837 buchmann 1.110
838 buchmann 1.108
839 buchmann 1.83 flag_this_change(__FUNCTION__,__LINE__,true);//PlottingSetup::RestrictToMassPeak ---- prediction changed
840 buchmann 1.39 TH1F *Tpred = (TH1F*)RcorrJZBem->Clone("Bpred");
841     Tpred->Add(LcorrJZBem,-1.0);
842 buchmann 1.83 if(PlottingSetup::RestrictToMassPeak) {
843     Tpred->Add(RcorrJZBSBem,1.0);
844     Tpred->Add(LcorrJZBSBem,-1.0);
845     Tpred->Add(RcorrJZBSBeemm,1.0);
846     Tpred->Add(LcorrJZBSBeemm,-1.0);
847     }
848 buchmann 1.39
849 buchmann 1.1 globalcanvas->cd();
850     globalcanvas->SetLogy(1);
851 fronga 1.24
852     RcorrJZBeemm->SetMarkerStyle(20);
853     RcorrJZBeemm->GetXaxis()->SetRangeUser(0,high);
854 fronga 1.46 RcorrJZBeemm->SetMinimum(0.1);
855 fronga 1.24
856 buchmann 1.1 Bpred->SetLineColor(kRed);
857     Bpred->SetStats(0);
858 buchmann 1.83
859     int versok=false;
860     if(gROOT->GetVersionInt()>=53000) versok=true;
861    
862 fronga 1.24
863 buchmann 1.92 if ( overlay_signal || use_data==2 ) lm4RcorrJZBeemm->SetLineColor(TColor::GetColor("#088A08"));
864 buchmann 1.17 RcorrJZBeemm->SetMarkerSize(DataMarkerSize);
865 buchmann 1.13
866 fronga 1.24 TLegend *legBpred = make_legend("",0.6,0.55);
867 buchmann 1.88 TLegend *legBpred2 = make_legend("",0.6,0.55);
868 buchmann 1.92
869    
870     vector<TF1*> analytical_function;
871     TPad *kinpad = new TPad("kinpad","kinpad",0,0,1,1);
872     kinpad->cd();
873     kinpad->SetLogy(1);
874    
875     string Bpredsaveas="Bpred_Data";
876 buchmann 1.104 blankback->SetMaximum(5*RcorrJZBeemm->GetMaximum());
877     blankback->SetMinimum(0.1);
878 buchmann 1.108 if(use_data!=1) blankback->SetMinimum(0.01);
879 buchmann 1.104 blankback->Draw();
880 buchmann 1.72 if(use_data==1)
881 buchmann 1.1 {
882 buchmann 1.92 analytical_function = do_extended_fit_to_plot(Bpred,Tpred,LcorrJZBeemm,LcorrJZBem,is_data);
883     kinpad->cd();//necessary because the extended fit function creates its own canvas
884 buchmann 1.104 RcorrJZBeemm->Draw("e1x0,same");
885 buchmann 1.108
886 buchmann 1.92 Bpred->Draw("hist,same");
887 buchmann 1.38 analytical_function[0]->Draw("same"); analytical_function[1]->Draw("same");analytical_function[2]->Draw("same");
888 buchmann 1.47 RcorrJZBeemm->Draw("e1x0,same");//HAVE IT ON TOP!
889 fronga 1.24 legBpred->AddEntry(RcorrJZBeemm,"observed","p");
890     legBpred->AddEntry(Bpred,"predicted","l");
891 buchmann 1.38 legBpred->AddEntry(analytical_function[1],"predicted fit","l");
892     legBpred->AddEntry(analytical_function[2],"stat. uncert.","l");
893 fronga 1.24 if ( overlay_signal ) legBpred->AddEntry(lm4RcorrJZBeemm,"LM4","l");
894 buchmann 1.1 legBpred->Draw();
895 buchmann 1.92 DrawPrelim();
896 buchmann 1.108
897     //this plot shows what the prediction is composed of
898     TCanvas *specialcanv = new TCanvas("specialcanv","specialcanv");
899     specialcanv->SetLogy(1);
900     Zjetspred->SetFillColor(kYellow);
901     Zjetspred->SetLineColor(kYellow);
902 buchmann 1.110 TTbarpred->SetFillColor(allsamples.GetColor((allsamples.FindSample("TTJets"))[0]));
903     TTbarpred->SetLineColor(allsamples.GetColor((allsamples.FindSample("TTJets"))[0]));
904 buchmann 1.108 THStack predcomposition("predcomposition","prediction composition");
905 buchmann 1.110 predcomposition.Add(TTbarpred);
906 buchmann 1.108 predcomposition.Add(Zjetspred);
907     blankback->Draw();
908     RcorrJZBeemm->Draw("e1x0,same");
909     predcomposition.Draw("histo,same");//
910     Bpred->Draw("hist,same");
911     analytical_function[0]->Draw("same"); analytical_function[1]->Draw("same");analytical_function[2]->Draw("same");
912     RcorrJZBeemm->Draw("e1x0,same");//HAVE IT ON TOP!
913     legBpred->Draw();
914     DrawPrelim();
915     TLegend *specialleg = new TLegend(0.6,0.4,0.89,0.55);
916     specialleg->SetFillColor(kWhite);specialleg->SetLineColor(kWhite);
917     specialleg->AddEntry(Zjetspred,"Z+Jets prediction","f");
918     specialleg->AddEntry(TTbarpred,"t#bar{t} prediction","f");
919     specialleg->Draw("same");
920 buchmann 1.109 CompleteSave(specialcanv,"Bpred_Data_____PredictionComposition");
921 buchmann 1.110
922     THStack kostack = allsamples.DrawStack("RcorrJZBeemm",jzb.c_str(),nbins,low,hi, "JZB [GeV]", "events", cutmass&&cutOSSF&&cutnJets,!is_data, luminosity,use_signal);
923     blankback->Draw();
924     kostack.Draw("same");
925     Bpred->Draw("hist,same");
926     analytical_function[0]->Draw("same"); analytical_function[1]->Draw("same");analytical_function[2]->Draw("same");
927     RcorrJZBeemm->Draw("e1x0,same");//HAVE IT ON TOP!
928     legBpred->Draw();
929     DrawPrelim();
930     CompleteSave(specialcanv,"Bpred_Data_____PredictionCompositioninMC");
931    
932 buchmann 1.108 delete specialcanv;
933 buchmann 1.109 delete specialleg;
934     delete Zjetspred;
935     delete TTbarpred;
936 buchmann 1.110
937 buchmann 1.108 kinpad->cd();
938 buchmann 1.1 }
939 buchmann 1.72 if(use_data==0) {
940 buchmann 1.104 RcorrJZBeemm->Draw("e1x0,same");
941 buchmann 1.92 Bpred->Draw("hist,same");
942 buchmann 1.47 RcorrJZBeemm->Draw("e1x0,same");//HAVE IT ON TOP!
943 fronga 1.24 legBpred->AddEntry(RcorrJZBeemm,"MC observed","p");
944     legBpred->AddEntry(Bpred,"MC predicted","l");
945 buchmann 1.83 if(versok) legBpred->AddEntry((TObject*)0,"",""); // Just for alignment // causes seg fault on root v5.18
946     if(versok) legBpred->AddEntry((TObject*)0,"",""); // causes seg fault on root v5.18
947 fronga 1.24 if ( overlay_signal ) legBpred->AddEntry(lm4RcorrJZBeemm,"LM4","l");
948 buchmann 1.1 legBpred->Draw();
949 buchmann 1.92 DrawPrelim();
950     Bpredsaveas="Bpred_MC";
951     // CompleteSave(globalcanvas,"Bpred_MC"); // done below in save_with_ratio
952 buchmann 1.1 }
953 buchmann 1.72 if(use_data==2) {
954 buchmann 1.104 RcorrJZBeemm->Draw("e1x0,same");
955 buchmann 1.92 Bpred->Draw("hist,same");
956 buchmann 1.72 RcorrJZBeemm->Draw("e1x0,same");//HAVE IT ON TOP!
957     legBpred->AddEntry(RcorrJZBeemm,"MC observed","p");
958     legBpred->AddEntry(Bpred,"MC predicted","l");
959 buchmann 1.88 legBpred2->AddEntry(RcorrJZBeemm,"MC observed","p");
960     legBpred2->AddEntry(Bpred,"MC predicted","l");
961     {
962     if(versok) legBpred->AddEntry((TObject*)0,"",""); // Just for alignment // causes seg fault on root v5.18 --> now only allowed for root >=v5.30
963     if(versok) legBpred->AddEntry((TObject*)0,"",""); // causes seg fault on root v5.18 --> now only allowed for root >=v5.30
964     legBpred->Draw();
965 buchmann 1.92 DrawPrelim();
966     Bpredsaveas="Bpred_MCwithS";
967     // CompleteSave(globalcanvas,"Bpred_MCwithS"); // done below in save_with_ratio
968 buchmann 1.88 }
969     {
970     RcorrJZBeemmNoS->SetLineStyle(2);
971     legBpred2->AddEntry(RcorrJZBeemmNoS,"MC B","l");
972     legBpred2->AddEntry(lm4RcorrJZBeemm,"MC S","l");
973     legBpred2->Draw();
974     RcorrJZBeemmNoS->SetLineColor(TColor::GetColor("#61210B"));
975     RcorrJZBeemmNoS->Draw("histo,same");
976     RcorrJZBeemm->Draw("e1x0,same");//HAVE IT ON TOP!
977     lm4RcorrJZBeemm->Draw("histo,same");
978 buchmann 1.92 DrawPrelim();
979     Bpredsaveas="Bpred_MCwithS__plus";
980     // CompleteSave(globalcanvas,"Bpred_MCwithS__plus"); // done below in save_with_ratio
981 buchmann 1.88 }
982 buchmann 1.72 }
983 buchmann 1.92
984    
985 buchmann 1.93 save_with_ratio(JRcorrJZBeemm,JBpred,kinpad,Bpredsaveas,true,use_data!=1);//2nd last argument: do special bpred ratio, last argument: extended range!
986 buchmann 1.92
987 buchmann 1.91
988 buchmann 1.83 flag_this_change(__FUNCTION__,__LINE__,true);//PlottingSetup::RestrictToMassPeak
989     /// The part below is meaningless for the offpeak analysis (it's a comparison of the different estimates but there is but one estimate!)
990     if(!PlottingSetup::RestrictToMassPeak) return;
991 buchmann 1.28 TH1F *Bpredem = (TH1F*)LcorrJZBeemm->Clone("Bpredem");
992 buchmann 1.13 Bpredem->Add(RcorrJZBem);
993     Bpredem->Add(LcorrJZBem,-1);
994 buchmann 1.28 TH1F *BpredSBem = (TH1F*)LcorrJZBeemm->Clone("BpredSBem");
995 buchmann 1.13 BpredSBem->Add(RcorrJZBSBem);
996     Bpred->Add(LcorrJZBSBem,-1);
997 buchmann 1.28 TH1F *BpredSBeemm = (TH1F*)LcorrJZBeemm->Clone("BpredSBeemm");
998 buchmann 1.17 BpredSBeemm->Add(RcorrJZBSBeemm);
999     BpredSBeemm->Add(LcorrJZBSBeemm,-1.0);
1000 buchmann 1.13 globalcanvas->cd();
1001     globalcanvas->SetLogy(1);
1002 fronga 1.24
1003     RcorrJZBeemm->SetMarkerStyle(20);
1004     RcorrJZBeemm->GetXaxis()->SetRangeUser(0,high);
1005 buchmann 1.104 blankback->Draw();
1006     RcorrJZBeemm->Draw("e1x0,same");
1007 fronga 1.24 RcorrJZBeemm->SetMarkerSize(DataMarkerSize);
1008    
1009     Bpredem->SetLineColor(kRed+1);
1010 buchmann 1.13 Bpredem->SetStats(0);
1011 fronga 1.24 Bpredem->Draw("hist,same");
1012    
1013     BpredSBem->SetLineColor(kGreen+2);//TColor::GetColor("#0B6138"));
1014     BpredSBem->SetLineStyle(2);
1015 buchmann 1.13 BpredSBem->Draw("hist,same");
1016 fronga 1.24
1017     BpredSBeemm->SetLineColor(kBlue+1);
1018     BpredSBeemm->SetLineStyle(3);
1019 buchmann 1.13 BpredSBeemm->Draw("hist,same");
1020 buchmann 1.47 RcorrJZBeemm->Draw("e1x0,same");//HAVE IT ON TOP!
1021 fronga 1.24
1022     TLegend *legBpredc = make_legend("",0.6,0.55);
1023 buchmann 1.72 if(use_data==1)
1024 buchmann 1.13 {
1025 fronga 1.24 legBpredc->AddEntry(RcorrJZBeemm,"observed","p");
1026     legBpredc->AddEntry(Bpredem,"OFZP","l");
1027     legBpredc->AddEntry(BpredSBem,"OFSB","l");
1028     legBpredc->AddEntry(BpredSBeemm,"SFSB","l");
1029 buchmann 1.13 legBpredc->Draw();
1030     CompleteSave(globalcanvas,"Bpred_Data_comparison");
1031     }
1032 buchmann 1.72 if(use_data==0) {
1033 fronga 1.24 legBpredc->AddEntry(RcorrJZBeemm,"MC observed","p");
1034     legBpredc->AddEntry(Bpredem,"MC OFZP","l");
1035     legBpredc->AddEntry(BpredSBem,"MC OFSB","l");
1036     legBpredc->AddEntry(BpredSBeemm,"MC SFSB","l");
1037 buchmann 1.13 legBpredc->Draw();
1038     CompleteSave(globalcanvas,"Bpred_MC_comparison");
1039     }
1040 buchmann 1.72 if(use_data==2) {
1041 buchmann 1.86 legBpredc->AddEntry(RcorrJZBeemm,"MC observed","p");
1042     legBpredc->AddEntry(Bpredem,"MC OFZP","l");
1043     legBpredc->AddEntry(BpredSBem,"MC OFSB","l");
1044     legBpredc->AddEntry(BpredSBeemm,"MC SFSB","l");
1045 buchmann 1.72 if ( overlay_signal ) legBpred->AddEntry(lm4RcorrJZBeemm,"LM4","l");
1046 buchmann 1.88 legBpredc->Draw();
1047 buchmann 1.83 CompleteSave(globalcanvas,"Bpred_MCwithS_comparison");
1048 buchmann 1.72 }
1049 buchmann 1.13 delete RcorrJZBeemm;
1050     delete LcorrJZBeemm;
1051     delete RcorrJZBem;
1052     delete LcorrJZBem;
1053 buchmann 1.84
1054 buchmann 1.92 delete JRcorrJZBeemm;
1055     delete JLcorrJZBeemm;
1056     delete JRcorrJZBem;
1057     delete JLcorrJZBem;
1058 buchmann 1.104
1059     delete blankback;
1060 buchmann 1.92
1061 buchmann 1.84 if(PlottingSetup::RestrictToMassPeak) {
1062     delete RcorrJZBSBem;
1063     delete LcorrJZBSBem;
1064     delete RcorrJZBSBeemm;
1065     delete LcorrJZBSBeemm;
1066 buchmann 1.92
1067     delete JRcorrJZBSBem;
1068     delete JLcorrJZBSBem;
1069     delete JRcorrJZBSBeemm;
1070     delete JLcorrJZBSBeemm;
1071 buchmann 1.84 }
1072 buchmann 1.88 if(overlay_signal || use_data==2) delete lm4RcorrJZBeemm;
1073 buchmann 1.1 }
1074    
1075 fronga 1.24 void do_prediction_plots(string mcjzb, string datajzb, float DataSigma, float MCSigma, bool overlay_signal ) {
1076 buchmann 1.11 TCanvas *globalcanvas = new TCanvas("globalcanvas","Prediction Canvas");
1077 fronga 1.24 do_prediction_plot(datajzb,globalcanvas,DataSigma,jzbHigh ,data,overlay_signal);
1078     do_prediction_plot(mcjzb,globalcanvas,MCSigma,jzbHigh ,mc,overlay_signal);
1079 buchmann 1.72 do_prediction_plot(mcjzb,globalcanvas,MCSigma,jzbHigh ,mcwithsignal,overlay_signal);
1080 buchmann 1.1 }
1081    
1082     void do_ratio_plot(int is_data,vector<float> binning, string jzb, TCanvas *can, float high=-9999) {
1083     bool do_data=0;
1084     bool dosignal=0;
1085     if(is_data==1) do_data=1;
1086     if(is_data==2) dosignal=1;
1087 buchmann 1.17 TH1F *RcorrJZBeemm = allsamples.Draw("RcorrJZBeemm",jzb.c_str(),binning, "JZB [GeV]", "events", cutmass&&cutOSSF&&cutnJets,do_data, luminosity,dosignal);
1088     TH1F *LcorrJZBeemm = allsamples.Draw("LcorrJZBeemm",("-"+jzb).c_str(),binning, "JZB [GeV]", "events", cutmass&&cutOSSF&&cutnJets,do_data, luminosity,dosignal);
1089     TH1F *RcorrJZBem = allsamples.Draw("RcorrJZBem",jzb.c_str(),binning, "JZB [GeV]", "events", cutmass&&cutOSOF&&cutnJets,do_data, luminosity,dosignal);
1090     TH1F *LcorrJZBem = allsamples.Draw("LcorrJZBem",("-"+jzb).c_str(),binning, "JZB [GeV]", "events", cutmass&&cutOSOF&&cutnJets,do_data, luminosity,dosignal);
1091    
1092 buchmann 1.92 TH1F *RcorrJZBSBem;
1093     TH1F *LcorrJZBSBem;
1094     TH1F *RcorrJZBSBeemm;
1095     TH1F *LcorrJZBSbeemm;
1096    
1097     if(PlottingSetup::RestrictToMassPeak) {
1098     RcorrJZBSBem = allsamples.Draw("RcorrJZBSbem",jzb.c_str(),binning, "JZB [GeV]", "events", sidebandcut&&cutOSOF&&cutnJets,do_data, luminosity,dosignal);
1099     LcorrJZBSBem = allsamples.Draw("LcorrJZBSbem",("-"+jzb).c_str(),binning, "JZB [GeV]", "events", sidebandcut&&cutOSOF&&cutnJets,do_data, luminosity,dosignal);
1100     RcorrJZBSBeemm = allsamples.Draw("RcorrJZBSbeemm",jzb.c_str(),binning, "JZB [GeV]", "events", sidebandcut&&cutOSSF&&cutnJets,do_data, luminosity,dosignal);
1101     LcorrJZBSbeemm = allsamples.Draw("LcorrJZBSbeemm",("-"+jzb).c_str(),binning, "JZB [GeV]", "events", sidebandcut&&cutOSSF&&cutnJets,do_data, luminosity,dosignal);
1102     }
1103 buchmann 1.13
1104 buchmann 1.92
1105    
1106    
1107 buchmann 1.83 flag_this_change(__FUNCTION__,__LINE__,true);//PlottingSetup::RestrictToMassPeak
1108 buchmann 1.17 TH1F *Bpred = (TH1F*)LcorrJZBeemm->Clone("Bpred");
1109 buchmann 1.83 if(PlottingSetup::RestrictToMassPeak) {
1110     Bpred->Add(RcorrJZBem,1.0/3);
1111     Bpred->Add(LcorrJZBem,-1.0/3);
1112     Bpred->Add(RcorrJZBSBem,1.0/3);
1113     Bpred->Add(LcorrJZBSBem,-1.0/3);
1114     Bpred->Add(RcorrJZBSBeemm,1.0/3);
1115     Bpred->Add(LcorrJZBSbeemm,-1.0/3);
1116     } else {
1117     Bpred->Add(RcorrJZBem,1.0);
1118     Bpred->Add(LcorrJZBem,-1.0);
1119     }
1120    
1121 buchmann 1.1 can->cd();
1122     can->SetLogy(0);
1123     Bpred->SetLineColor(kRed);
1124     Bpred->SetStats(0);
1125     if(high>0) Bpred->GetXaxis()->SetRangeUser(0,high);
1126 buchmann 1.17 TH1F *JZBratioforfitting=(TH1F*)RcorrJZBeemm->Clone("JZBratioforfitting");
1127     JZBratioforfitting->Divide(Bpred);
1128 buchmann 1.36 TGraphAsymmErrors *JZBratio = histRatio(RcorrJZBeemm,Bpred,is_data,binning,false);
1129 buchmann 1.17
1130 buchmann 1.1
1131     JZBratio->SetTitle("");
1132     JZBratio->GetYaxis()->SetRangeUser(0.0,9.0);
1133 fronga 1.24 // if(is_data==1) JZBratio->GetXaxis()->SetRangeUser(0,jzbHigh );
1134 buchmann 1.1
1135     TF1 *pol0 = new TF1("pol0","[0]",0,1000);
1136     TF1 *pol0d = new TF1("pol0","[0]",0,1000);
1137     // straightline_fit->SetParameter(0,1);
1138     JZBratioforfitting->Fit(pol0,"Q0R","",0,30);
1139     pol0d->SetParameter(0,pol0->GetParameter(0));
1140    
1141     JZBratio->GetYaxis()->SetTitle("Observed/Predicted");
1142 buchmann 1.17 JZBratio->GetXaxis()->SetTitle("JZB [GeV]");
1143 fronga 1.24 if ( high>0 ) JZBratio->GetXaxis()->SetRangeUser(0.0,high);
1144 buchmann 1.1 JZBratio->GetYaxis()->SetNdivisions(519);
1145 buchmann 1.59 JZBratio->GetYaxis()->SetRangeUser(0.0,4.0);
1146 buchmann 1.17 JZBratio->GetYaxis()->CenterTitle();
1147     JZBratio->GetXaxis()->CenterTitle();
1148     JZBratio->SetMarkerSize(DataMarkerSize);
1149 buchmann 1.1 JZBratio->Draw("AP");
1150     /////----------------------------
1151 fronga 1.24 TPaveText *writeresult = new TPaveText(0.15,0.78,0.49,0.91,"blNDC");
1152 buchmann 1.1 writeresult->SetFillStyle(4000);
1153     writeresult->SetFillColor(kWhite);
1154     writeresult->SetTextFont(42);
1155 fronga 1.24 writeresult->SetTextSize(0.03);
1156     writeresult->SetTextAlign(12);
1157 buchmann 1.1 ostringstream jzb_agreement_data_text;
1158     jzb_agreement_data_text<< setprecision(2) << "mean =" << pol0->GetParameter(0) << " #pm " << setprecision(1) << pol0->GetParError(0);
1159     if(is_data==1) fitresultconstdata=pol0->GetParameter(0);// data
1160     if(is_data==0) fitresultconstmc=pol0->GetParameter(0); // monte carlo, no signal
1161     /* if(is_data) writeresult->AddText("Data closure test");
1162     else writeresult->AddText("MC closure test");
1163     */
1164     writeresult->AddText(jzb_agreement_data_text.str().c_str());
1165 buchmann 1.60 // writeresult->Draw("same");
1166 buchmann 1.59 // pol0d->Draw("same");
1167 fronga 1.24 TF1 *topline = new TF1("","1.5",0,1000);
1168     TF1 *bottomline = new TF1("","0.5",0,1000);
1169 buchmann 1.1 topline->SetLineColor(kBlue);
1170     topline->SetLineStyle(2);
1171     bottomline->SetLineColor(kBlue);
1172     bottomline->SetLineStyle(2);
1173 buchmann 1.59 // topline->Draw("same");
1174     // bottomline->Draw("same");
1175 buchmann 1.1 TF1 *oneline = new TF1("","1.0",0,1000);
1176     oneline->SetLineColor(kBlue);
1177     oneline->SetLineStyle(1);
1178     oneline->Draw("same");
1179 buchmann 1.63 TLegend *phony_leg = make_legend("ratio",0.6,0.55,false);//this line is just to have the default CMS Preliminary (...) on the canvas as well.
1180     if(is_data==1) DrawPrelim();
1181     else DrawMCPrelim();
1182 buchmann 1.61 TLegend *leg = new TLegend(0.55,0.75,0.89,0.89);
1183 buchmann 1.1 leg->SetTextFont(42);
1184 fronga 1.24 leg->SetTextSize(0.04);
1185     // if(is_data==1) leg->SetHeader("Ratio (data)");
1186     // else leg->SetHeader("Ratio (MC)");
1187    
1188     TString MCtitle("MC ");
1189     if (is_data==1) MCtitle = "";
1190    
1191 buchmann 1.1 leg->SetFillStyle(4000);
1192     leg->SetFillColor(kWhite);
1193     leg->SetTextFont(42);
1194     // leg->AddEntry(topline,"+20\% sys envelope","l");
1195 fronga 1.24 leg->AddEntry(JZBratio,MCtitle+"obs / "+MCtitle+"pred","p");
1196 buchmann 1.1 leg->AddEntry(oneline,"ratio = 1","l");
1197 buchmann 1.59 // leg->AddEntry(pol0d,"fit in [0,30] GeV","l");
1198     // leg->AddEntry(bottomline,"#pm50% envelope","l");
1199 buchmann 1.61
1200    
1201     //leg->Draw("same"); // no longer drawing legend
1202    
1203 buchmann 1.1 if(is_data==1) CompleteSave(can, "jzb_ratio_data");
1204     if(is_data==0) CompleteSave(can, "jzb_ratio_mc");
1205     if(is_data==2) CompleteSave(can, "jzb_ratio_mc_BandS");//special case, MC with signal!
1206 buchmann 1.17
1207 buchmann 1.1 delete RcorrJZBeemm;
1208     delete LcorrJZBeemm;
1209     delete RcorrJZBem;
1210     delete LcorrJZBem;
1211 buchmann 1.17
1212     delete RcorrJZBSBem;
1213     delete LcorrJZBSBem;
1214     delete RcorrJZBSBeemm;
1215     delete LcorrJZBSbeemm;
1216 buchmann 1.1 }
1217    
1218 buchmann 1.23 void do_ratio_plots(string mcjzb,string datajzb,vector<float> ratio_binning) {
1219 buchmann 1.11 TCanvas *globalc = new TCanvas("globalc","Ratio Plot Canvas");
1220 buchmann 1.1 globalc->SetLogy(0);
1221    
1222 fronga 1.24 do_ratio_plot(mc,ratio_binning,mcjzb,globalc, jzbHigh );
1223     do_ratio_plot(data,ratio_binning,datajzb,globalc, jzbHigh );
1224     do_ratio_plot(mcwithsignal,ratio_binning,mcjzb,globalc, jzbHigh );
1225 buchmann 1.1 }
1226    
1227 buchmann 1.8 string give_jzb_expression(float peak, int type) {
1228 buchmann 1.1 stringstream val;
1229 buchmann 1.8 if(type==data) {
1230     if(peak<0) val << jzbvariabledata << "+" << TMath::Abs(peak);
1231     if(peak>0) val << jzbvariabledata << "-" << TMath::Abs(peak);
1232     if(peak==0) val << jzbvariabledata;
1233     }
1234     if(type==mc) {
1235     if(peak<0) val << jzbvariablemc << "+" << TMath::Abs(peak);
1236     if(peak>0) val << jzbvariablemc << "-" << TMath::Abs(peak);
1237     if(peak==0) val << jzbvariablemc;
1238     }
1239 buchmann 1.1 return val.str();
1240     }
1241    
1242    
1243 buchmann 1.11 void lepton_comparison_plots() {
1244 fronga 1.24 Float_t ymin = 1.e-5, ymax = 0.25;
1245 buchmann 1.11 TCanvas *can = new TCanvas("can","Lepton Comparison Canvas");
1246 buchmann 1.1 can->SetLogy(1);
1247 buchmann 1.17 TH1F *eemc = allsamples.Draw("eemc","mll",50,50,150, "mll [GeV]", "events", cutOSSF&&cutnJets&&"(id1==0)",mc, luminosity,allsamples.FindSample("DYJetsToLL"));
1248     TH1F *mmmc = allsamples.Draw("mmmc","mll",50,50,150, "mll [GeV]", "events", cutOSSF&&cutnJets&&"(id1==1)",mc, luminosity,allsamples.FindSample("DYJetsToLL"));
1249 buchmann 1.1 eemc->SetLineColor(kBlue);
1250     mmmc->SetLineColor(kRed);
1251     eemc->SetMinimum(0.1);
1252     eemc->SetMaximum(10*eemc->GetMaximum());
1253     eemc->Draw("histo");
1254     mmmc->Draw("histo,same");
1255     TLegend *leg = make_legend();
1256 buchmann 1.17 leg->AddEntry(eemc,"ZJets->ee (MC)","l");
1257     leg->AddEntry(mmmc,"ZJets->#mu#mu (MC)","l");
1258 buchmann 1.11 leg->Draw("same");
1259 buchmann 1.83 CompleteSave(can, "lepton_comparison/mll_effratio_mc");
1260 buchmann 1.1
1261 buchmann 1.17 TH1F *eed = allsamples.Draw("eed","mll",50,50,150, "mll [GeV]", "events", cutOSSF&&cutnJets&&"(id1==0)",data, luminosity);
1262     TH1F *mmd = allsamples.Draw("mmd","mll",50,50,150, "mll [GeV]", "events", cutOSSF&&cutnJets&&"(id1==1)",data, luminosity);
1263 buchmann 1.1 eed->SetLineColor(kBlue);
1264     mmd->SetLineColor(kRed);
1265     eed->SetMinimum(0.1);
1266     eed->SetMaximum(10*eed->GetMaximum());
1267     eed->Draw("histo");
1268     mmd->Draw("histo,same");
1269     TLegend *leg2 = make_legend();
1270 buchmann 1.17 leg2->AddEntry(eed,"ZJets->ee (data)","l");
1271     leg2->AddEntry(mmd,"ZJets->#mu#mu (data)","l");
1272 buchmann 1.1 leg2->Draw();
1273 buchmann 1.83 CompleteSave(can, "lepton_comparison/mll_effratio_data");
1274 buchmann 1.1
1275 buchmann 1.110 TH1F *jeed = allsamples.Draw("jeed",jzbvariabledata, int((jzbHigh+150)/5),-150,jzbHigh , "JZB [GeV]", "events", cutOSSF&&cutnJets&&"(id1==0)",data, luminosity);
1276     TH1F *jmmd = allsamples.Draw("jmmd",jzbvariabledata, int((jzbHigh+150)/5),-150,jzbHigh , "JZB [GeV]", "events", cutOSSF&&cutnJets&&"(id1==1)",data, luminosity);
1277     TH1F *jeemmd = allsamples.Draw("jeemmd",jzbvariabledata,int((jzbHigh+150)/5),-150,jzbHigh , "JZB [GeV]", "events", cutOSSF&&cutnJets,data, luminosity);
1278 buchmann 1.21 dout << "ee : " << jeed->GetMean() << "+/-" << jeed->GetMeanError() << endl;
1279     dout << "ee : " << jmmd->GetMean() << "+/-" << jmmd->GetMeanError() << endl;
1280     dout << "eemd : " << jeemmd->GetMean() << "+/-" << jeemmd->GetMeanError() << endl;
1281 buchmann 1.1 jeemmd->SetLineColor(kBlack);
1282     jeemmd->SetMarkerStyle(25);
1283     jeed->SetLineColor(kBlue);
1284     jmmd->SetLineColor(kRed);
1285     jeed->SetMinimum(0.1);
1286     jeed->SetMaximum(10*eed->GetMaximum());
1287 fronga 1.24 TH1* njeemmd = jeemmd->DrawNormalized();
1288     njeemmd->SetMinimum(ymin);
1289     njeemmd->SetMaximum(ymax);
1290    
1291 buchmann 1.1 jeed->DrawNormalized("histo,same");
1292     jmmd->DrawNormalized("histo,same");
1293     jeemmd->DrawNormalized("same");
1294 fronga 1.24 TLegend *jleg2 = make_legend(" ");
1295 buchmann 1.1 jleg2->AddEntry(jeemmd,"ee and #mu#mu","p");
1296     jleg2->AddEntry(jeed,"ee","l");
1297     jleg2->AddEntry(jmmd,"#mu#mu","l");
1298     jleg2->Draw();
1299 buchmann 1.83 CompleteSave(can,"lepton_comparison/jzb_effratio_data");
1300 buchmann 1.111
1301     TPad *eemmpad = new TPad("eemmpad","eemmpad",0,0,1,1);
1302     eemmpad->cd();
1303     eemmpad->SetLogy(1);
1304     jeed->Draw("histo");
1305     jmmd->Draw("histo,same");
1306     TLegend *eemmlegend = make_legend(" ");
1307     eemmlegend->AddEntry(jeed,"ee","l");
1308     eemmlegend->AddEntry(jmmd,"#mu#mu","l");
1309     eemmlegend->Draw();
1310     DrawPrelim();
1311     save_with_ratio(jeed,jmmd,eemmpad->cd(),"lepton_comparison/jzb_Comparing_ee_mm_data");
1312 buchmann 1.1
1313 buchmann 1.110 TH1F *zjeed = allsamples.Draw("zjeed",jzbvariablemc, int((jzbHigh+150)/5),-150,jzbHigh , "JZB [GeV]", "events", cutmass&&cutOSSF&&cutnJets&&"(id1==0)",mc, luminosity,allsamples.FindSample("DYJets"));
1314     TH1F *zjmmd = allsamples.Draw("zjmmd",jzbvariablemc, int((jzbHigh+150)/5),-150,jzbHigh , "JZB [GeV]", "events", cutmass&&cutOSSF&&cutnJets&&"(id1==1)",mc, luminosity,allsamples.FindSample("DYJets"));
1315     TH1F *zjeemmd = allsamples.Draw("zjeemmd",jzbvariablemc,int((jzbHigh+150)/5),-150,jzbHigh , "JZB [GeV]", "events", cutmass&&cutOSSF&&cutnJets, mc, luminosity,allsamples.FindSample("DYJets"));
1316 buchmann 1.21 dout << "Z+Jets ee : " << zjeed->GetMean() << "+/-" << zjeed->GetMeanError() << endl;
1317     dout << "Z+Jets ee : " << zjmmd->GetMean() << "+/-" << zjmmd->GetMeanError() << endl;
1318     dout << "Z+Jets eemd : " << zjeemmd->GetMean() << "+/-" << zjeemmd->GetMeanError() << endl;
1319 buchmann 1.11 zjeemmd->SetLineColor(kBlack);
1320     zjeemmd->SetMarkerStyle(25);
1321     zjeed->SetLineColor(kBlue);
1322     zjmmd->SetLineColor(kRed);
1323     zjeed->SetMinimum(0.1);
1324     zjeed->SetMaximum(10*eed->GetMaximum());
1325 fronga 1.24
1326     TH1* nzjeemmd = zjeemmd->DrawNormalized();
1327     nzjeemmd->SetMinimum(ymin);
1328     nzjeemmd->SetMaximum(ymax);
1329 buchmann 1.11 zjeed->DrawNormalized("histo,same");
1330     zjmmd->DrawNormalized("histo,same");
1331     zjeemmd->DrawNormalized("same");
1332 fronga 1.24 TLegend *zjleg2 = make_legend("Z+jets MC");
1333 buchmann 1.11 zjleg2->AddEntry(jeemmd,"ee and #mu#mu","p");
1334     zjleg2->AddEntry(jeed,"ee","l");
1335     zjleg2->AddEntry(jmmd,"#mu#mu","l");
1336     zjleg2->Draw();
1337 buchmann 1.83 CompleteSave(can,"lepton_comparison/jzb_effratio_ZJets");
1338 buchmann 1.11
1339 buchmann 1.17 TH1F *ld = allsamples.Draw("ld","mll",50,50,150, "mll [GeV]", "events", cutOSSF&&cutnJets,data, luminosity);
1340 buchmann 1.1 ld->DrawNormalized("e1");
1341     eed->DrawNormalized("histo,same");
1342     mmd->DrawNormalized("histo,same");
1343     TLegend *leg3 = make_legend();
1344     leg3->AddEntry(ld,"ZJets->ll (data)","p");
1345 buchmann 1.17 leg3->AddEntry(eed,"ZJets->ee (data)","l");
1346     leg3->AddEntry(mmd,"ZJets->#mu#mu (data)","l");
1347 buchmann 1.1 leg3->Draw();
1348 buchmann 1.83 CompleteSave(can,"lepton_comparison/mll_effratio_data__all_compared");
1349 buchmann 1.1 /*
1350 buchmann 1.17 TH1F *jzbld = allsamples.Draw("jzbld",jzbvariable,75,-150,150, "JZB [GeV]", "events", cutmass&&cutOSSF&&cutnJets,data, luminosity);
1351     TH1F *jzbemd = allsamples.Draw("jzbemd",jzbvariable,75,-150,150, "JZB [GeV]", "events", cutmass&&cutOSOF&&cutnJets,data, luminosity);
1352 buchmann 1.1 */
1353 buchmann 1.110 TH1F *jzbld = allsamples.Draw("jzbld",jzbvariabledata,int((jzbHigh+110)/5),-110,jzbHigh , "JZB [GeV]", "events", cutmass&&cutOSSF&&cutnJets,data, luminosity);
1354     TH1F *jzbemd = allsamples.Draw("jzbemd",jzbvariabledata,int((jzbHigh+110)/5),-110,jzbHigh , "JZB [GeV]", "events", cutmass&&cutOSOF&&cutnJets,data, luminosity);
1355 buchmann 1.1 jzbld->SetMarkerColor(kBlack);
1356     jzbld->SetMarkerStyle(26);
1357     jzbemd->SetMarkerStyle(25);
1358     jzbemd->SetMarkerColor(kRed);
1359     jzbemd->SetLineColor(kRed);
1360     jzbld->SetMinimum(0.35);
1361     jzbld->Draw("e1");
1362     jzbemd->Draw("e1,same");
1363 fronga 1.24 TLegend *leg4 = make_legend();
1364     leg4->AddEntry(jzbld,"SFZP","p");
1365     leg4->AddEntry(jzbemd,"OFZP","p");
1366 buchmann 1.29 leg4->AddEntry((TObject*)0,"",""); //causes segmentation violation
1367     leg4->AddEntry((TObject*)0,"",""); //causes segmentation violation
1368 buchmann 1.1 leg4->Draw();
1369 buchmann 1.83 CompleteSave(can,"lepton_comparison/jzb_eemumu_emu_data");
1370 buchmann 1.1
1371 buchmann 1.110 TH1F *ttbarjzbld = allsamples.Draw("ttbarjzbld",jzbvariablemc,int((jzbHigh+150)/5),-150,jzbHigh, "JZB [GeV]", "events", cutmass&&cutOSSF&&cutnJets,data, luminosity,allsamples.FindSample("TTJet"));
1372     TH1F *ttbarjzbemd = allsamples.Draw("ttbarjzbemd",jzbvariablemc,int((jzbHigh+150)/5),-150,jzbHigh, "JZB [GeV]", "events", cutmass&&cutOSOF&&cutnJets,data, luminosity,allsamples.FindSample("TTJet"));
1373 buchmann 1.1 ttbarjzbld->SetLineColor(allsamples.GetColor("TTJet"));
1374     ttbarjzbemd->SetLineColor(allsamples.GetColor("TTJet"));
1375     ttbarjzbld->Draw("histo");
1376     ttbarjzbemd->SetLineStyle(2);
1377     ttbarjzbemd->Draw("histo,same");
1378     TLegend *leg5 = make_legend();
1379 buchmann 1.17 leg5->AddEntry(ttbarjzbld,"t#bar{t}->(ee or #mu#mu)","l");
1380     leg5->AddEntry(ttbarjzbemd,"t#bar{t}->e#mu","l");
1381 buchmann 1.1 leg5->Draw();
1382 buchmann 1.83 CompleteSave(can,"lepton_comparison/ttbar_emu_mc");
1383 buchmann 1.1
1384     }
1385    
1386     bool is_OF(TCut cut) {
1387     string scut = (const char*) cut;
1388     if((int)scut.find("id1!=id2")>-1) return true;
1389     if((int)scut.find("id1==id2")>-1) return false;
1390     return false;
1391     }
1392    
1393 fronga 1.24 bool is_ZP(TCut cut) {
1394     string scut = (const char*) cut;
1395     if((int)scut.find("91")>-1) return true;
1396     return false;
1397     }
1398    
1399    
1400 buchmann 1.112 void draw_pure_jzb_histo(TCut cut,string datavariable, string mcvariable, string savename, TCanvas *can,vector<float> binning) {
1401 buchmann 1.111 TPad *jzbpad = new TPad("jzbpad","jzbpad",0,0,1,1);
1402     jzbpad->cd();
1403     jzbpad->SetLogy(1);
1404 buchmann 1.17 string xlabel="JZB [GeV]";
1405 buchmann 1.1
1406 buchmann 1.112 TH1F *datahisto = allsamples.Draw("datahisto",datavariable,binning, xlabel, "events",cut,data,luminosity);
1407     THStack mcstack = allsamples.DrawStack("mcstack",mcvariable,binning, xlabel, "events",cut,mc,luminosity);
1408 buchmann 1.1
1409     datahisto->SetMinimum(0.1);
1410 buchmann 1.17 datahisto->SetMarkerSize(DataMarkerSize);
1411 buchmann 1.1 datahisto->Draw("e1");
1412     mcstack.Draw("same");
1413     datahisto->Draw("same,e1");
1414    
1415     TLegend *leg;
1416 fronga 1.24 if(is_OF(cut) && is_ZP(cut)) leg = allsamples.allbglegend("OFZP",datahisto);
1417     else if(!is_OF(cut) && is_ZP(cut)) leg = allsamples.allbglegend("SFZP",datahisto);
1418     else if( is_OF(cut) && !is_ZP(cut)) leg = allsamples.allbglegend("OFSB",datahisto);
1419     else if(!is_OF(cut) && !is_ZP(cut)) leg = allsamples.allbglegend("SFSB",datahisto);
1420     else {
1421     std::cerr << "Unable to decode cut: " << cut.GetTitle() << std::endl;
1422     exit(-1);
1423     }
1424 buchmann 1.1 leg->Draw();
1425     string write_cut = decipher_cut(cut,"");
1426 buchmann 1.16 TText *writeline1 = write_cut_on_canvas(write_cut.c_str());
1427 buchmann 1.1 writeline1->SetTextSize(0.035);
1428     writeline1->Draw();
1429 buchmann 1.111 save_with_ratio(datahisto,mcstack,jzbpad->cd(),("jzb/"+savename));
1430 buchmann 1.112 TPad *jzbpad2 = new TPad("jzbpad2","jzbpad2",0,0,1,1);
1431     jzbpad2->cd();
1432     jzbpad2->SetLogy(1);
1433     datahisto->GetXaxis()->SetRangeUser(0,binning[binning.size()-1]);
1434     datahisto->SetMinimum(0.1);
1435     datahisto->SetMarkerSize(DataMarkerSize);
1436     datahisto->Draw("e1");
1437     mcstack.Draw("same");
1438     datahisto->Draw("same,e1");
1439 buchmann 1.113 leg->SetHeader("");
1440 buchmann 1.112 leg->Draw();
1441     writeline1->SetTextSize(0.035);
1442     writeline1->Draw();
1443 buchmann 1.113 DrawPrelim();
1444 buchmann 1.112 save_with_ratio(datahisto,mcstack,jzbpad2->cd(),("jzb/PositiveSideOnly/"+savename+""));
1445 buchmann 1.1 datahisto->Delete();
1446     mcstack.Delete();
1447     }
1448    
1449     Double_t GausR(Double_t *x, Double_t *par) {
1450     return gRandom->Gaus(x[0],par[0]);
1451     }
1452    
1453 buchmann 1.23 void jzb_plots(string mcjzb, string datajzb,vector<float> ratio_binning) {
1454 buchmann 1.11 TCanvas *can = new TCanvas("can","JZB Plots Canvas");
1455 fronga 1.24 float max=jzbHigh ;
1456 buchmann 1.1 float min=-120;
1457 buchmann 1.96 int nbins=(int)((max-min)/5.0); // we want 5 GeV/bin
1458 buchmann 1.23 int coarserbins=int(nbins/2.0);
1459     int rebinnedbins=int(nbins/4.0);
1460 buchmann 1.1
1461 buchmann 1.23 vector<float>binning;vector<float>coarse_binning;vector<float>coarsest_binning;
1462     for(int i=0;i<=nbins;i++)binning.push_back(min+i*(max-min)/((float)nbins));
1463     for(int i=0;i<=coarserbins;i++)coarse_binning.push_back(min+i*(max-min)/((float)coarserbins));
1464     for(int i=0;i<=rebinnedbins;i++)coarsest_binning.push_back(min+i*(max-min)/((float)rebinnedbins));
1465    
1466 buchmann 1.112 draw_pure_jzb_histo(cutOSSF&&cutnJets&&cutmass,datajzb,mcjzb,"jzb_OS_SFZP",can,binning);
1467     draw_pure_jzb_histo(cutOSOF&&cutnJets&&cutmass,datajzb,mcjzb,"jzb_OS_OFZP",can,binning);
1468     draw_pure_jzb_histo(cutOSSF&&cutnJets&&cutmass&&"id1==0",datajzb,mcjzb,"ee/jzb_OS_SFZP",can,binning);
1469     draw_pure_jzb_histo(cutOSSF&&cutnJets&&cutmass&&"id1==1",datajzb,mcjzb,"mm/jzb_OS_SFZP",can,binning);
1470     draw_pure_jzb_histo(cutOSOF&&cutnJets&&cutmass&&"id1==0",datajzb,mcjzb,"ee/jzb_OS_OFZP",can,binning);
1471     draw_pure_jzb_histo(cutOSOF&&cutnJets&&cutmass&&"id1==1",datajzb,mcjzb,"mm/jzb_OS_OFZP",can,binning);
1472 buchmann 1.83 flag_this_change(__FUNCTION__,__LINE__,true);//PlottingSetup::RestrictToMassPeak
1473 buchmann 1.112 if(PlottingSetup::RestrictToMassPeak) draw_pure_jzb_histo(cutOSSF&&cutnJets&&sidebandcut,datajzb,mcjzb,"jzb_OS_SFSB",can,binning);
1474     if(PlottingSetup::RestrictToMassPeak) draw_pure_jzb_histo(cutOSOF&&cutnJets&&sidebandcut,datajzb,mcjzb,"jzb_OS_OFSB",can,binning);
1475 fronga 1.24
1476 buchmann 1.112 draw_pure_jzb_histo(cutOSSF&&cutnJets&&cutmass,datajzb,mcjzb,"jzb_OS_SFZP_coarse",can,coarse_binning);
1477     draw_pure_jzb_histo(cutOSOF&&cutnJets&&cutmass,datajzb,mcjzb,"jzb_OS_OFZP_coarse",can,coarse_binning);
1478 buchmann 1.83 flag_this_change(__FUNCTION__,__LINE__,true);//PlottingSetup::RestrictToMassPeak
1479 buchmann 1.112 if(PlottingSetup::RestrictToMassPeak) draw_pure_jzb_histo(cutOSSF&&cutnJets&&sidebandcut,datajzb,mcjzb,"jzb_OS_SFSB_coarse",can,coarse_binning);
1480     if(PlottingSetup::RestrictToMassPeak) draw_pure_jzb_histo(cutOSOF&&cutnJets&&sidebandcut,datajzb,mcjzb,"jzb_OS_OFSB_coarse",can,coarse_binning);
1481 fronga 1.24
1482 buchmann 1.113 // draw_pure_jzb_histo(cutOSSF&&cutnJets&&cutmass,datajzb,mcjzb,"jzb_OS_SFZP_coarsest",can,coarsest_binning);
1483     // draw_pure_jzb_histo(cutOSOF&&cutnJets&&cutmass,datajzb,mcjzb,"jzb_OS_OFZP_coarsest",can,coarsest_binning);
1484     // flag_this_change(__FUNCTION__,__LINE__,true);//PlottingSetup::RestrictToMassPeak
1485     // if(PlottingSetup::RestrictToMassPeak) draw_pure_jzb_histo(cutOSSF&&cutnJets&&sidebandcut,datajzb,mcjzb,"jzb_OS_SFSB_coarsest",can,coarsest_binning);
1486     // if(PlottingSetup::RestrictToMassPeak) draw_pure_jzb_histo(cutOSOF&&cutnJets&&sidebandcut,datajzb,mcjzb,"jzb_OS_OFSB_coarsest",can,coarsest_binning);
1487 buchmann 1.1 }
1488    
1489 buchmann 1.83
1490 buchmann 1.1 void calculate_all_yields(string mcdrawcommand,vector<float> jzb_cuts) {
1491 buchmann 1.21 dout << "Calculating background yields in MC:" << endl;
1492 buchmann 1.1 jzb_cuts.push_back(14000);
1493 buchmann 1.17 TH1F *allbgs = allsamples.Draw("allbgs",jzbvariablemc,jzb_cuts, "JZB [GeV]", "events", cutmass&&cutOSSF&&cutnJets,mc,luminosity);
1494 buchmann 1.1 float cumulative=0;
1495     for(int i=allbgs->GetNbinsX();i>=1;i--) {
1496     cumulative+=allbgs->GetBinContent(i);
1497 buchmann 1.21 dout << "Above " << allbgs->GetBinLowEdge(i) << " GeV/c : " << cumulative << endl;
1498 buchmann 1.1 }
1499     }
1500    
1501 buchmann 1.81
1502     TCut give_jzb_expression(string mcjzb, float jzbcut, string posneg="pos") {
1503     stringstream res;
1504     res << "(" << mcjzb;
1505     if(posneg=="pos") res << ">";
1506     else res << "<-";
1507     res << jzbcut << ")";
1508     return TCut(res.str().c_str());
1509     }
1510    
1511     string sigdig(float number, int nsigdig=3, float min=0) {
1512     //this function tries to extract n significant digits, and if the number is below (min), it returns "<min"
1513     if(number<min) return "< "+any2string(min);
1514     stringstream sol;
1515     sol << setprecision(nsigdig) << number;
1516    
1517     return sol.str();
1518     }
1519    
1520     string jzb_tex_command(string region, string posneg) {
1521     if(posneg=="pos") posneg="POS";
1522     else posneg="NEG";
1523     stringstream texcommand;
1524     texcommand<<"\\"<<region <<"JZB"<<posneg;
1525     return texcommand.str();
1526     }
1527     // \SFZPJZBPOS
1528     // Sample & \OFZPJZBPOS & \OFZPJZBNEG & \SFZPJZBPOS & \SFZPJZBNEG & \OFSBJZBPOS & \OFSBJZBNEG & \SFSBJZBPOS & \SFSBJZBNEG \\\hline
1529    
1530     void compute_MC_yields(string mcjzb,vector<float> jzb_cuts) {
1531     dout << "Calculating background yields in MC:" << endl;
1532    
1533     TCanvas *yica = new TCanvas("yica","yield canvas");
1534    
1535     int nRegions=4;
1536     if(!PlottingSetup::RestrictToMassPeak) nRegions=2;
1537     string tsRegions[] = {"SFZP","OFZP","SFSB","OFSB"};
1538     string posneg[] = {"pos","neg"};
1539     TCut tkRegions[] = {cutOSSF&&cutnJets&&cutmass,cutOSOF&&cutnJets&&cutmass,cutOSSF&&cutnJets&&sidebandcut,cutOSOF&&cutnJets&&sidebandcut};
1540    
1541     for(int ijzb=0;ijzb<jzb_cuts.size();ijzb++) {
1542     TCut jzbMC[] = { give_jzb_expression(mcjzb,jzb_cuts[ijzb],"pos"), give_jzb_expression(mcjzb,jzb_cuts[ijzb],"neg") };
1543     dout << "_________________________________________________________" << endl;
1544     dout << "Table for JZB> " << jzb_cuts[ijzb] << endl;
1545     for(int isample=0;isample<(allsamples.collection).size();isample++) {
1546     if(!(allsamples.collection)[isample].is_data) dout << (allsamples.collection)[isample].samplename << " & ";
1547     else dout << "Sample & ";
1548     for(int iregion=0;iregion<nRegions;iregion++) {
1549     for(int ipos=0;ipos<2;ipos++) {
1550 buchmann 1.82 if((allsamples.collection)[isample].is_data) dout << jzb_tex_command(tsRegions[iregion],posneg[ipos]) << " & ";
1551 buchmann 1.81 else {
1552     vector<int> specific;specific.push_back(isample);
1553     TH1F *shisto = allsamples.Draw("shisto","mll",1,0,500,"tester","events",tkRegions[iregion]&&jzbMC[ipos],mc,luminosity,specific);
1554     dout << sigdig(shisto->Integral(),3,0.05) <<" & ";
1555     delete shisto;
1556     }
1557     }//end of ipos
1558     }//end of iregion
1559     dout << " \\\\" << endl;
1560     }//end of isample
1561     }//end of ijzb
1562     dout << " \\hline" << endl;
1563    
1564     delete yica;
1565     }
1566    
1567 buchmann 1.4 void draw_ttbar_and_zjets_shape_for_one_configuration(string mcjzb, string datajzb, int leptontype=-1, int scenario=0,bool floating=false) {
1568 buchmann 1.10 //Step 1: Establishing cuts
1569 buchmann 1.3 stringstream jetcutstring;
1570 buchmann 1.10 string writescenario="";
1571    
1572 buchmann 1.3 if(scenario==0) jetcutstring << "(pfJetGoodNum>=3)&&"<<(const char*) basicqualitycut;
1573     if(scenario==1) jetcutstring << "(pfJetPt[0]>50&&pfJetPt[1]>50)&&"<<(const char*)basicqualitycut;
1574     TCut jetcut(jetcutstring.str().c_str());
1575     string leptoncut="mll>0";
1576     if(leptontype==0||leptontype==1) {
1577 buchmann 1.10 if(leptontype==0) {
1578     leptoncut="id1==0";
1579     writescenario="__ee";
1580     }
1581     else {
1582     leptoncut="id1==1";
1583     writescenario="__ee";
1584     }
1585 buchmann 1.3 }
1586     TCut lepcut(leptoncut.c_str());
1587    
1588 buchmann 1.6 TCanvas *c5 = new TCanvas("c5","c5",1500,500);
1589 buchmann 1.10 TCanvas *c6 = new TCanvas("c6","c6");
1590 buchmann 1.3 c5->Divide(3,1);
1591 buchmann 1.10
1592     //STEP 2: Extract Zjets shape in data
1593     c5->cd(1);
1594 buchmann 1.3 c5->cd(1)->SetLogy(1);
1595     TCut massat40("mll>40");
1596 buchmann 1.17 TH1F *ossfleft = allsamples.Draw("ossfleft", "-"+datajzb,40,0,200, "JZB [GeV]", "events", massat40&&cutOSSF&&jetcut&&lepcut,data,luminosity);
1597     TH1F *osofleft = allsamples.Draw("osofleft", "-"+datajzb,40,0,200, "JZB [GeV]", "events", massat40&&cutOSOF&&jetcut&&lepcut,data,luminosity);
1598 buchmann 1.3 ossfleft->SetLineColor(kRed);
1599     ossfleft->SetMarkerColor(kRed);
1600     ossfleft->Add(osofleft,-1);
1601 buchmann 1.9 vector<TF1*> functions = do_cb_fit_to_plot(ossfleft,10);
1602 buchmann 1.17 ossfleft->SetMarkerSize(DataMarkerSize);
1603 buchmann 1.3 ossfleft->Draw();
1604 buchmann 1.9 functions[0]->Draw("same");functions[1]->Draw("same");functions[2]->Draw("same");
1605     TF1 *zjetsfunc = (TF1*) functions[1]->Clone();
1606     TF1 *zjetsfuncN = (TF1*) functions[0]->Clone();
1607     TF1 *zjetsfuncP = (TF1*) functions[2]->Clone();
1608 buchmann 1.6 zjetsfunc->Draw("same");zjetsfuncN->Draw("same");zjetsfuncP->Draw("same");
1609 buchmann 1.3 TLegend *leg1 = new TLegend(0.6,0.6,0.89,0.80);
1610     leg1->SetFillColor(kWhite);
1611     leg1->SetLineColor(kWhite);
1612     leg1->AddEntry(ossfleft,"OSSF (sub),JZB<peak","p");
1613 buchmann 1.6 leg1->AddEntry(zjetsfunc,"OSSF fit ('zjets')","l");
1614 buchmann 1.3 leg1->Draw("same");
1615     TText *titleleft = write_title("Extracting Z+Jets shape");
1616     titleleft->Draw();
1617    
1618 buchmann 1.10 //Step 3: Extract ttbar shape (in data or MC?)
1619     c5->cd(2);
1620 buchmann 1.3 c5->cd(2)->SetLogy(1);
1621 buchmann 1.4 TH1F *osof;
1622     TText *titlecenter;
1623 buchmann 1.10 bool frommc=false;
1624     if(frommc) {
1625 buchmann 1.17 osof = allsamples.Draw("osof",datajzb,40,-200,200, "JZB [GeV]", "events", massat40&&cutOSSF&&jetcut&&lepcut,mc,luminosity,allsamples.FindSample("TTJets"));
1626 buchmann 1.4 titlecenter = write_title("Extracting ttbar shape (from ossf MC)");
1627     }
1628     else {
1629 buchmann 1.17 osof = allsamples.Draw("osof",datajzb,40,-200,200, "JZB [GeV]", "events", massat40&&cutOSOF&&jetcut&&lepcut,data,luminosity);
1630 buchmann 1.4 titlecenter = write_title("Extracting ttbar shape (from osof data)");
1631     }
1632 buchmann 1.17 osof->SetMarkerSize(DataMarkerSize);
1633 buchmann 1.3 osof->Draw();
1634 buchmann 1.10 vector<TF1*> ttbarfunctions = do_cb_fit_to_plot(osof,35,true);
1635     ttbarfunctions[0]->SetLineColor(kRed); ttbarfunctions[0]->SetLineStyle(2); ttbarfunctions[0]->Draw("same");
1636     ttbarfunctions[1]->SetLineColor(kRed); ttbarfunctions[1]->Draw("same");
1637     ttbarfunctions[2]->SetLineColor(kRed); ttbarfunctions[2]->SetLineStyle(2); ttbarfunctions[2]->Draw("same");
1638    
1639 buchmann 1.3 TLegend *leg2 = new TLegend(0.15,0.8,0.4,0.89);
1640     leg2->SetFillColor(kWhite);
1641     leg2->SetLineColor(kWhite);
1642 buchmann 1.10 if(frommc) {
1643 buchmann 1.4 leg2->AddEntry(osof,"t#bar{t} OSSF, MC","p");
1644 buchmann 1.10 leg2->AddEntry(ttbarfunctions[1],"Fit to t#bar{t} OSSF,MC","l");
1645 buchmann 1.4 } else {
1646     leg2->AddEntry(osof,"OSOF","p");
1647 buchmann 1.10 leg2->AddEntry(ttbarfunctions[1],"Fit to OSOF","l");
1648 buchmann 1.4 }
1649 buchmann 1.3 leg2->Draw("same");
1650     titlecenter->Draw();
1651 buchmann 1.10
1652     //--------------------------------------------------------------------------------------------------------------------------------
1653 buchmann 1.4 //STEP 4: Present it!
1654     // actually: if we wanna let it float we need to do that first :-)
1655 buchmann 1.3 c5->cd(3);
1656     c5->cd(3)->SetLogy(1);
1657 buchmann 1.17 TH1F *observed = allsamples.Draw("observed",datajzb,100,0,500, "JZB [GeV]", "events", massat40&&cutOSSF&&jetcut&&lepcut,data,luminosity);
1658     observed->SetMarkerSize(DataMarkerSize);
1659 buchmann 1.4
1660 buchmann 1.6 TF1 *logparc = new TF1("logparc",InvCrystalBall,0,1000,5); logparc->SetLineColor(kRed);
1661 buchmann 1.8 TF1 *logparcn = new TF1("logparcn",InvCrystalBallN,0,1000,5); logparcn->SetLineColor(kRed); logparcn->SetLineStyle(2);
1662     TF1 *logparcp = new TF1("logparcp",InvCrystalBallP,0,1000,5); logparcp->SetLineColor(kRed); logparcp->SetLineStyle(2);
1663 buchmann 1.6
1664     TF1 *zjetsc = new TF1("zjetsc",InvCrystalBall,0,1000,5); zjetsc->SetLineColor(kBlue);
1665     TF1 *zjetscn = new TF1("zjetscn",InvCrystalBallN,0,1000,5); zjetscn->SetLineColor(kBlue); zjetscn->SetLineStyle(2);
1666     TF1 *zjetscp = new TF1("zjetscp",InvCrystalBallP,0,1000,5); zjetscp->SetLineColor(kBlue); zjetscp->SetLineStyle(2);
1667    
1668 buchmann 1.10 TF1 *ZplusJetsplusTTbar = new TF1("ZplusJetsplusTTbar", DoubleInvCrystalBall,0,1000,10); ZplusJetsplusTTbar->SetLineColor(kBlue);
1669     TF1 *ZplusJetsplusTTbarP= new TF1("ZplusJetsplusTTbarP",DoubleInvCrystalBallP,0,1000,10); ZplusJetsplusTTbarP->SetLineColor(kBlue); ZplusJetsplusTTbarP->SetLineStyle(2);
1670     TF1 *ZplusJetsplusTTbarN= new TF1("ZplusJetsplusTTbarN",DoubleInvCrystalBallN,0,1000,10); ZplusJetsplusTTbarN->SetLineColor(kBlue); ZplusJetsplusTTbarN->SetLineStyle(2);
1671    
1672 buchmann 1.6 zjetsc->SetParameters(zjetsfunc->GetParameters());
1673     zjetscp->SetParameters(zjetsfunc->GetParameters());
1674     zjetscn->SetParameters(zjetsfunc->GetParameters());
1675 buchmann 1.10
1676 fronga 1.24 TH1F *observeda = allsamples.Draw("observeda",datajzb,53,80,jzbHigh, "JZB [GeV]", "events", massat40&&cutOSSF&&jetcut&&lepcut,data,luminosity);
1677 buchmann 1.7 //blublu
1678 buchmann 1.10 logparc->SetParameters(ttbarfunctions[1]->GetParameters());
1679     logparcn->SetParameters(ttbarfunctions[1]->GetParameters());
1680     logparcp->SetParameters(ttbarfunctions[1]->GetParameters());
1681 buchmann 1.4 if(floating) {
1682 buchmann 1.21 dout << "TTbar contribution assumed (before fitting) : " << logparc->GetParameter(0) << endl;
1683 buchmann 1.10 logparc->SetParameters(ttbarfunctions[1]->GetParameters());
1684 buchmann 1.7 for(int i=0;i<10;i++) {
1685     if(i<5) ZplusJetsplusTTbar->FixParameter(i,zjetsfunc->GetParameter(i));
1686     if(i>=5) {
1687     if (i>5) ZplusJetsplusTTbar->FixParameter(i,logparc->GetParameter(i-5));
1688     if (i==5) ZplusJetsplusTTbar->SetParameter(i,logparc->GetParameter(i-5));
1689     }
1690     }//end of setting parameters
1691     observeda->Draw("same");
1692     ZplusJetsplusTTbar->Draw("same");
1693     observeda->Fit(ZplusJetsplusTTbar);
1694 buchmann 1.21 dout << "--> Quality of Z+Jets / TTbar fit : chi2/ndf = " << ZplusJetsplusTTbar->GetChisquare() << "/" << ZplusJetsplusTTbar->GetNDF() << endl;
1695 buchmann 1.7 ZplusJetsplusTTbar->Draw("same");
1696 buchmann 1.8 ZplusJetsplusTTbarP->SetParameters(ZplusJetsplusTTbar->GetParameters());
1697     ZplusJetsplusTTbarN->SetParameters(ZplusJetsplusTTbar->GetParameters());
1698 buchmann 1.21 dout << "TTbar contribution found (after fitting) : " << ZplusJetsplusTTbar->GetParameter(5) << endl;
1699 buchmann 1.7 float factor = ZplusJetsplusTTbar->GetParameter(5) / logparc->GetParameter(0);
1700 buchmann 1.21 dout << "FACTOR: " << factor << endl;
1701 buchmann 1.10 logparc->SetParameter(0,factor*ttbarfunctions[1]->GetParameter(0));
1702     logparcn->SetParameter(0,factor*ttbarfunctions[1]->GetParameter(0));
1703     logparcp->SetParameter(0,factor*ttbarfunctions[1]->GetParameter(0));
1704 buchmann 1.4 }
1705 buchmann 1.6
1706 buchmann 1.4 c5->cd(3);
1707 buchmann 1.6 c5->cd(3)->SetLogy(1);
1708     observed->Draw();
1709     zjetsc->Draw("same");zjetscn->Draw("same");zjetscp->Draw("same");
1710 buchmann 1.3 logparc->Draw("same");
1711 buchmann 1.6 logparcn->Draw("same");
1712     logparcp->Draw("same");
1713    
1714 buchmann 1.3 TLegend *leg3 = new TLegend(0.6,0.6,0.89,0.80);
1715     leg3->SetFillColor(kWhite);
1716     leg3->SetLineColor(kWhite);
1717     leg3->AddEntry(observed,"OSSF,JZB>peak","p");
1718 buchmann 1.10 leg3->AddEntry(ttbarfunctions[1],"OSOF fit ('ttbar')","l");
1719 buchmann 1.6 leg3->AddEntry(zjetsfunc,"OSSF,JZB<0 fit ('zjets')","l");
1720 buchmann 1.3 leg3->Draw("same");
1721     TText *titleright = write_title("Summary of shapes and observed shape");
1722     titleright->Draw();
1723    
1724     c6->cd()->SetLogy(1);
1725 buchmann 1.6 observed->Draw();
1726     zjetsc->Draw("same");zjetscn->Draw("same");zjetscp->Draw("same");
1727 buchmann 1.3 logparc->Draw("same");
1728 buchmann 1.6 logparcn->Draw("same");
1729     logparcp->Draw("same");
1730 buchmann 1.3 leg3->Draw("same");
1731     titleright->Draw();
1732    
1733     if(scenario==0) {
1734     CompleteSave(c5,"Shapes2/Making_of___3jetsabove30"+writescenario);
1735 buchmann 1.6 CompleteSave(c5->cd(1),"Shapes2/Making_of___3jetsabove30"+writescenario+"__cd1");
1736     CompleteSave(c5->cd(2),"Shapes2/Making_of___3jetsabove30"+writescenario+"__cd2");
1737     CompleteSave(c5->cd(3),"Shapes2/Making_of___3jetsabove30"+writescenario+"__cd3");
1738 buchmann 1.3 CompleteSave(c6,"Shapes2/Background_Shapes___3jetsabove30"+writescenario);
1739     } else {
1740     CompleteSave(c5,"Shapes2/Making_of___2jetsabove50"+writescenario);
1741 buchmann 1.6 CompleteSave(c5->cd(1),"Shapes2/Making_of___2jetsabove50"+writescenario+"__cd1");
1742     CompleteSave(c5->cd(2),"Shapes2/Making_of___2jetsabove50"+writescenario+"__cd2");
1743     CompleteSave(c5->cd(3),"Shapes2/Making_of___2jetsabove50"+writescenario+"__cd3");
1744 buchmann 1.3 CompleteSave(c6,"Shapes2/Background_Shapes___2jetsabove50"+writescenario);
1745     }
1746 buchmann 1.21 dout << "Statistics about our fits: " << endl;
1747     dout << "Z+Jets shape: Chi2/ndf = " << zjetsfunc->GetChisquare() << "/" << ossfleft->GetNbinsX() << endl;
1748     dout << "ttbar shape: Chi2/ndf = " << ttbarfunctions[1]->GetChisquare() << "/" << osof->GetNbinsX() << endl;
1749 buchmann 1.4
1750 buchmann 1.7 c6->cd();
1751 buchmann 1.8 TLegend *additionallegend = new TLegend(0.6,0.6,0.89,0.89);
1752     additionallegend->SetFillColor(kWhite);
1753     additionallegend->SetLineColor(kWhite);
1754     additionallegend->AddEntry(observed,"Data","p");
1755     additionallegend->AddEntry(ZplusJetsplusTTbar,"Fitted Z+jets & TTbar","l");
1756     additionallegend->AddEntry(zjetsc,"Z+jets","l");
1757     additionallegend->AddEntry(logparc,"TTbar","l");
1758 buchmann 1.7 observed->Draw();
1759     ZplusJetsplusTTbar->SetLineColor(kGreen);
1760 buchmann 1.8 ZplusJetsplusTTbarP->SetLineColor(kGreen);
1761     ZplusJetsplusTTbarN->SetLineColor(kGreen);
1762     ZplusJetsplusTTbarP->SetLineStyle(2);
1763     ZplusJetsplusTTbarN->SetLineStyle(2);
1764     TF1 *ZplusJetsplusTTbar2 = new TF1("ZplusJetsplusTTbar2",DoubleInvCrystalBall,0,1000,10);
1765     ZplusJetsplusTTbar2->SetParameters(ZplusJetsplusTTbar->GetParameters());
1766     ZplusJetsplusTTbar2->SetLineColor(kGreen);
1767     ZplusJetsplusTTbarP->SetFillColor(TColor::GetColor("#81F781"));
1768     ZplusJetsplusTTbarN->SetFillColor(kWhite);
1769     ZplusJetsplusTTbarP->Draw("fcsame");
1770     ZplusJetsplusTTbarN->Draw("fcsame");
1771     TH1F *hZplusJetsplusTTbar = (TH1F*)ZplusJetsplusTTbar2->GetHistogram();
1772     TH1F *hZplusJetsplusTTbarN = (TH1F*)ZplusJetsplusTTbarN->GetHistogram();
1773     TH1F *hZplusJetsplusTTbarP = (TH1F*)ZplusJetsplusTTbarP->GetHistogram();
1774     hZplusJetsplusTTbar->SetMarkerSize(0);
1775     hZplusJetsplusTTbarP->SetMarkerSize(0);
1776     hZplusJetsplusTTbarN->SetMarkerSize(0);
1777     for (int i=1;i<=hZplusJetsplusTTbar->GetNbinsX();i++) {
1778     float newerror=hZplusJetsplusTTbarP->GetBinContent(i)-hZplusJetsplusTTbar->GetBinContent(i);
1779     hZplusJetsplusTTbar->SetBinError(i,newerror);
1780     if(hZplusJetsplusTTbar->GetBinContent(i)<0.05) hZplusJetsplusTTbar->SetBinContent(i,0); //avoiding a displaying probolem
1781     }
1782     hZplusJetsplusTTbarP->SetFillColor(kGreen);
1783     hZplusJetsplusTTbarN->SetFillColor(kWhite);
1784     hZplusJetsplusTTbarN->Draw("same");
1785    
1786     ZplusJetsplusTTbar2->SetMarkerSize(0);
1787     ZplusJetsplusTTbar2->Draw("same");
1788    
1789 buchmann 1.7 zjetsc->Draw("same");zjetscn->Draw("same");zjetscp->Draw("same");
1790     logparc->Draw("same");
1791     logparcn->Draw("same");
1792     logparcp->Draw("same");
1793 buchmann 1.8 additionallegend->Draw("same");
1794     if(scenario==0) {
1795     CompleteSave(c6,"Shapes2/Background_Shapes___3jetsabove30__allfits__"+writescenario);
1796     } else {
1797     CompleteSave(c6,"Shapes2/Background_Shapes___2jetsabove50__allfits__"+writescenario);
1798     }
1799 buchmann 1.10 //--------------------------------------------------------------------------------------------------------------------------------
1800 buchmann 1.3 }
1801    
1802 buchmann 1.2 void draw_ttbar_and_zjets_shape(string mcjzb, string datajzb) {
1803 buchmann 1.3 int all_leptons=-1;
1804     int electrons_only=0;
1805     int mu_only=1;
1806     int twojetswith50gev=1;
1807     int threejetswith30gev=0;
1808 buchmann 1.4 /*
1809 buchmann 1.3 draw_ttbar_and_zjets_shape_for_one_configuration(mcjzb,datajzb,all_leptons,twojetswith50gev);
1810     draw_ttbar_and_zjets_shape_for_one_configuration(mcjzb,datajzb,all_leptons,threejetswith30gev);
1811    
1812     draw_ttbar_and_zjets_shape_for_one_configuration(mcjzb,datajzb,electrons_only,twojetswith50gev);
1813     draw_ttbar_and_zjets_shape_for_one_configuration(mcjzb,datajzb,electrons_only,threejetswith30gev);
1814    
1815     draw_ttbar_and_zjets_shape_for_one_configuration(mcjzb,datajzb,mu_only,twojetswith50gev);
1816     draw_ttbar_and_zjets_shape_for_one_configuration(mcjzb,datajzb,mu_only,threejetswith30gev);
1817 buchmann 1.4 */
1818 buchmann 1.2
1819 buchmann 1.10 draw_ttbar_and_zjets_shape_for_one_configuration(mcjzb,datajzb,all_leptons,threejetswith30gev,true);
1820 buchmann 1.2 }
1821 buchmann 1.6
1822 buchmann 1.8 void find_correction_factors(string &jzbvardata,string &jzbvarmc) {
1823 buchmann 1.13 //first: colorful plots
1824     TCanvas *cancorr = new TCanvas("cancorr","Canvas for Response Correction");
1825 buchmann 1.14 cancorr->SetLogz();
1826 fronga 1.26 cancorr->SetRightMargin(0.13);
1827 buchmann 1.83 flag_this_change(__FUNCTION__,__LINE__,false);//PlottingSetup::RestrictToMassPeak
1828     TCut zptforresponsepresentation("pt<600"&&cutmass&&cutOSSF&&"((sumJetPt[1]/pt)<5.0)");
1829 fronga 1.26 TH2F *niceresponseplotd = new TH2F("niceresponseplotd","",100,0,600,100,0,5);
1830 buchmann 1.48 (allsamples.collection)[allsamples.FindSample("Data")[0]].events->Draw("sumJetPt[1]/pt:pt>>niceresponseplotd",zptforresponsepresentation);
1831 buchmann 1.13 niceresponseplotd->SetStats(0);
1832 fronga 1.26 niceresponseplotd->GetXaxis()->SetTitle("Z p_{T} [GeV]");
1833 buchmann 1.13 niceresponseplotd->GetYaxis()->SetTitle("Response");
1834     niceresponseplotd->GetXaxis()->CenterTitle();
1835     niceresponseplotd->GetYaxis()->CenterTitle();
1836     niceresponseplotd->Draw("COLZ");
1837 fronga 1.26 TProfile * profd = (TProfile*)niceresponseplotd->ProfileX();
1838     profd->SetMarkerSize(DataMarkerSize);
1839     profd->Fit("pol0","","same,e1",30,400);
1840 buchmann 1.13 DrawPrelim();
1841 buchmann 1.32 TText* title = write_text(0.5,0.7,"Data");
1842     title->SetTextAlign(12);
1843 fronga 1.26 title->Draw();
1844 buchmann 1.32 TF1 *datapol=(TF1*)profd->GetFunction("pol0");
1845     float datacorrection=datapol->GetParameter(0);
1846     stringstream dataresstring;
1847     dataresstring<<"Response: "<<std::setprecision(2)<<100*datacorrection<<" %";
1848     TText* restitle = write_text(0.5,0.65,dataresstring.str());
1849     restitle->SetTextAlign(12);
1850     restitle->SetTextSize(0.03);
1851     restitle->Draw();
1852 buchmann 1.13 CompleteSave(cancorr,"ResponseCorrection/Response_Correction_Illustration_Data");
1853    
1854 fronga 1.26 TH2F *niceresponseplotm = new TH2F("niceresponseplotm","",100,0,600,100,0,5);
1855     (allsamples.collection)[allsamples.FindSample("DY")[0]].events->Draw("sumJetPt[1]/pt:pt>>niceresponseplotm",zptforresponsepresentation);
1856     niceresponseplotm->SetStats(0);
1857     niceresponseplotm->GetXaxis()->SetTitle("Z p_{T} [GeV]");
1858     niceresponseplotm->GetYaxis()->SetTitle("Response");
1859     niceresponseplotm->GetXaxis()->CenterTitle();
1860     niceresponseplotm->GetYaxis()->CenterTitle();
1861     niceresponseplotm->Draw("COLZ");
1862 buchmann 1.13 (allsamples.collection)[allsamples.FindSample("DY")[0]].events->Draw("sumJetPt[1]/pt:pt",zptforresponsepresentation,"PROF,same");
1863 fronga 1.26 TProfile * profm = (TProfile*)niceresponseplotm->ProfileX();
1864     profm->SetMarkerSize(DataMarkerSize);
1865     profm->Fit("pol0","","same,e1",30,400);
1866 buchmann 1.70 DrawMCPrelim();
1867 buchmann 1.32 title = write_text(0.5,0.7,"MC simulation");
1868     title->SetTextAlign(12);
1869 fronga 1.26 title->Draw();
1870 buchmann 1.32 TF1 *mcpol=(TF1*)profm->GetFunction("pol0");
1871     float mccorrection=mcpol->GetParameter(0);
1872     stringstream mcresstring;
1873     mcresstring<<"Response: "<<std::setprecision(2)<<100*mccorrection<<" %";
1874     TText* mcrestitle = write_text(0.5,0.65,mcresstring.str());
1875     mcrestitle->SetTextAlign(12);
1876     mcrestitle->SetTextSize(0.03);
1877     mcrestitle->Draw();
1878 buchmann 1.13 CompleteSave(cancorr,"ResponseCorrection/Response_Correction_Illustration_MC");
1879    
1880 buchmann 1.32
1881 buchmann 1.13 //Step 2: Getting the result
1882 buchmann 1.32 // TCut zptcutforresponse("pt>30&&pt<300&&TMath::Abs(91.2-mll)<20&&id1==id2&&(ch1*ch2<0)");
1883 buchmann 1.8 stringstream jzbvardatas;
1884 buchmann 1.9 if(datacorrection>1) jzbvardatas<<"(jzb[1]-"<<datacorrection-1<<"*pt)";
1885     if(datacorrection<1) jzbvardatas<<"(jzb[1]+"<<1-datacorrection<<"*pt)";
1886 buchmann 1.8 jzbvardata=jzbvardatas.str();
1887     stringstream jzbvarmcs;
1888 buchmann 1.33 if(mccorrection>1) jzbvarmcs<<"(jzb[1]-"<<mccorrection-1<<"*pt)";
1889 buchmann 1.9 if(mccorrection<1) jzbvarmcs<<"(jzb[1]+"<<1-mccorrection<<"*pt)";
1890 buchmann 1.8 jzbvarmc=jzbvarmcs.str();
1891 buchmann 1.21 dout << "JZB Z pt correction summary : " << endl;
1892 buchmann 1.32 dout << " Data: The response is " << datacorrection << " --> jzb variable is now : " << jzbvardata << endl;
1893     dout << " MC : The response is " << mccorrection << " --> jzb variable is now : " << jzbvarmc << endl;
1894 buchmann 1.8 }
1895 buchmann 1.11
1896 buchmann 1.12 void pick_up_events(string cut) {
1897 buchmann 1.21 dout << "Picking up events with cut " << cut << endl;
1898 buchmann 1.12 allsamples.PickUpEvents(cut);
1899 buchmann 1.11 }
1900    
1901 buchmann 1.38 void save_template(string mcjzb, string datajzb,vector<float> jzb_cuts,float MCPeakError) {
1902 buchmann 1.82 dout << "Saving configuration template!" << endl;
1903 buchmann 1.30 ofstream configfile;
1904 buchmann 1.31 configfile.open("../DistributedModelCalculations/last_configuration.C");
1905 buchmann 1.30 configfile<<"#include <iostream>\n";
1906     configfile<<"#include <vector>\n";
1907 buchmann 1.101 configfile<<"#ifndef SampleClassLoaded\n";
1908     configfile<<"#include \"SampleClass.C\"\n";
1909     configfile<<"#endif\n";
1910     configfile<<"#define SetupLoaded\n";
1911     configfile<<"#ifndef ResultLibraryClassLoaded\n";
1912     configfile<<"#include \"ResultLibraryClass.C\"\n";
1913     configfile<<"#endif\n";
1914    
1915 buchmann 1.30 configfile<<"\nusing namespace std;\n\n";
1916 buchmann 1.31
1917     configfile<<"namespace PlottingSetup { \n";
1918     configfile<<"string datajzb=\"datajzb_ERROR\";\n";
1919     configfile<<"string mcjzb=\"mcjzb_ERROR\";\n";
1920     configfile<<"vector<float>jzb_cuts;\n";
1921     configfile<<"float MCPeakError=-999;\n";
1922     configfile<<"}\n\n";
1923    
1924 buchmann 1.30 configfile<<"void read_config() {\n";
1925     configfile<<"datajzb=\""<<datajzb<<"\";\n";
1926     configfile<<"mcjzb=\""<<mcjzb<<"\";\n\n";
1927 buchmann 1.31 configfile<<"\n\nMCPeakError="<<MCPeakError<<";\n\n";
1928 buchmann 1.94 for(int i=0;i<jzb_cuts.size();i++) configfile<<"jzb_cuts.push_back("<<jzb_cuts[i]<<"); // JZB cut at " << jzb_cuts[i] << "\n";
1929 buchmann 1.30 configfile<<"\n\n";
1930 buchmann 1.94 for(int i=0;i<Nobs.size();i++) configfile<<"Nobs.push_back("<<Nobs[i]<<"); // JZB cut at " << jzb_cuts[i] << "\n";
1931     for(int i=0;i<Npred.size();i++) configfile<<"Npred.push_back("<<Npred[i]<<"); // JZB cut at " << jzb_cuts[i] << "\n";
1932     for(int i=0;i<Nprederr.size();i++) configfile<<"Nprederr.push_back("<<Nprederr[i]<<"); // JZB cut at " << jzb_cuts[i] << "\n";
1933 buchmann 1.37 configfile<<"\n\n";
1934 buchmann 1.94 for(int i=0;i<flippedNobs.size();i++) configfile<<"flippedNobs.push_back("<<flippedNobs[i]<<"); // JZB cut at " << jzb_cuts[i] << "\n";
1935     for(int i=0;i<flippedNpred.size();i++) configfile<<"flippedNpred.push_back("<<flippedNpred[i]<<"); // JZB cut at " << jzb_cuts[i] << "\n";
1936     for(int i=0;i<flippedNprederr.size();i++) configfile<<"flippedNprederr.push_back("<<flippedNprederr[i]<<"); // JZB cut at " << jzb_cuts[i] << "\n";
1937 buchmann 1.92 configfile<<"\n\n";
1938 buchmann 1.38 configfile<<"luminosity="<<luminosity<<";\n";
1939 buchmann 1.30
1940     configfile<<"\n\ncout << \"Configuration successfully loaded!\" << endl; \n \n } \n \n";
1941    
1942     configfile.close();
1943    
1944     }
1945    
1946 buchmann 1.40 float get_nonzero_minimum(TH1F *histo) {
1947     float min=histo->GetMaximum();
1948     for(int ibin=1;ibin<=histo->GetNbinsX();ibin++) {
1949     float curcont=histo->GetBinContent(ibin);
1950     if(curcont<min&&curcont>0) min=curcont;
1951     }
1952     return min;
1953     }
1954    
1955     void draw_all_ttbar_histos(TCanvas *can, vector<TH1F*> histos, string drawoption="", float manualmin=-9) {
1956     can->cd();
1957     float min=1;
1958     float max=histos[0]->GetMaximum();
1959     if(manualmin>=0) min=manualmin;
1960     else {
1961     for(int i=1;i<histos.size();i++) {
1962     float curmin=get_nonzero_minimum(histos[i]);
1963     float curmax=histos[i]->GetMaximum();
1964     if(curmin<min) min=curmin;
1965     if(curmax>max) max=curmax;
1966     }
1967     }
1968     histos[0]->GetYaxis()->SetRangeUser(min,4*max);
1969     histos[0]->Draw(drawoption.c_str());
1970     stringstream drawopt;
1971     drawopt << drawoption << ",same";
1972     for(int i=1;i<histos.size();i++) {
1973     histos[i]->Draw(drawopt.str().c_str());
1974     }
1975     }
1976    
1977 buchmann 1.102 void ttbar_sidebands_comparison(string mcjzb, vector<float> binning, string prestring) {
1978 buchmann 1.83 //in the case of the on peak analysis, we compare the 3 control regions to the real value
1979     //in the case of the OFF peak analysis, we compare our control region to the real value
1980 buchmann 1.60 TCut weightbackup=cutWeight;
1981     cutWeight="1.0";
1982 buchmann 1.58 float simulatedlumi = luminosity; //in pb please - adjust to your likings
1983 buchmann 1.40
1984 fronga 1.74
1985 buchmann 1.102 TH1F *TZem = systsamples.Draw("TZem",mcjzb,binning,"JZB [GeV]","events",cutmass&&cutOSOF&&cutnJets,mc,simulatedlumi,systsamples.FindSample("TTJets"));
1986     TH1F *nTZem = systsamples.Draw("nTZem","-"+mcjzb,binning,"JZB [GeV]","events",cutmass&&cutOSOF&&cutnJets,mc,simulatedlumi,systsamples.FindSample("TTJets"));
1987 buchmann 1.83 TH1F *TSem;
1988 buchmann 1.102 TH1F *nTSem;
1989     TH1F *TZeemm = systsamples.Draw("TZeemm",mcjzb,binning,"JZB [GeV]","events",cutmass&&cutOSSF&&cutnJets,mc,simulatedlumi,systsamples.FindSample("TTJets"));
1990     TH1F *nTZeemm = systsamples.Draw("nTZeemm","-"+mcjzb,binning,"JZB [GeV]","events",cutmass&&cutOSSF&&cutnJets,mc,simulatedlumi,systsamples.FindSample("TTJets"));
1991 buchmann 1.83 TH1F *TSeemm;
1992 buchmann 1.102 TH1F *nTSeemm;
1993 buchmann 1.83
1994     if(PlottingSetup::RestrictToMassPeak) {
1995 buchmann 1.102 TSem = systsamples.Draw("TSem",mcjzb,binning,"JZB [GeV]","events",sidebandcut&&cutOSOF&&cutnJets,mc,simulatedlumi,systsamples.FindSample("TTJets"));
1996     nTSem = systsamples.Draw("nTSem","-"+mcjzb,binning,"JZB [GeV]","events",sidebandcut&&cutOSOF&&cutnJets,mc,simulatedlumi,systsamples.FindSample("TTJets"));
1997     TSeemm = systsamples.Draw("TSeemm",mcjzb,binning,"JZB [GeV]","events",sidebandcut&&cutOSSF&&cutnJets,mc,simulatedlumi,systsamples.FindSample("TTJets"));
1998     nTSeemm = systsamples.Draw("nTSeemm","-"+mcjzb,binning,"JZB [GeV]","events",sidebandcut&&cutOSSF&&cutnJets,mc,simulatedlumi,systsamples.FindSample("TTJets"));
1999 buchmann 1.83 }
2000 fronga 1.74
2001 buchmann 1.40 TCanvas *tcan = new TCanvas("tcan","tcan");
2002    
2003     tcan->SetLogy(1);
2004    
2005     TZeemm->SetLineColor(kBlack);
2006     TZem->SetLineColor(kRed);
2007     TZeemm->SetMarkerColor(kBlack);
2008     TZem->SetMarkerColor(kRed);
2009    
2010 buchmann 1.87
2011     if(PlottingSetup::RestrictToMassPeak) {
2012     TSem->SetLineColor(TColor::GetColor("#00A616"));
2013     TSeemm->SetLineColor(kMagenta+2);
2014     TSem->SetMarkerColor(TColor::GetColor("#00A616"));
2015     TSeemm->SetMarkerColor(kMagenta+2);
2016     TSem->SetLineStyle(2);
2017     TSeemm->SetLineStyle(3);
2018     }
2019 buchmann 1.40
2020     vector<TH1F*> histos;
2021     histos.push_back(TZem);
2022     histos.push_back(TZeemm);
2023 buchmann 1.83 if(PlottingSetup::RestrictToMassPeak) {
2024     histos.push_back(TSem);
2025     histos.push_back(TSeemm);
2026     }
2027 buchmann 1.40 draw_all_ttbar_histos(tcan,histos,"histo",0.04);
2028    
2029 buchmann 1.102 TLegend *leg = make_legend("MC t#bar{t}",0.6,0.65,false);
2030 buchmann 1.42 leg->AddEntry(TZeemm,"SFZP","l");
2031     leg->AddEntry(TZem,"OFZP","l");
2032 buchmann 1.83 if(PlottingSetup::RestrictToMassPeak) {
2033     leg->AddEntry(TSeemm,"SFSB","l");
2034     leg->AddEntry(TSem,"OFSB","l");
2035     }
2036 buchmann 1.40 leg->Draw("same");
2037 fronga 1.51 DrawMCPrelim(simulatedlumi);
2038 buchmann 1.102 CompleteSave(tcan,"Systematics/"+prestring+"/ttbar_shape_comparison");
2039 buchmann 1.40
2040 buchmann 1.102 TH1F *TZemcopy = (TH1F*)TZem->Clone("TZemcopy");
2041     TH1F *TZeemmcopy = (TH1F*)TZeemm->Clone("TZeemmcopy");
2042     TH1F *TSeemmcopy = (TH1F*)TSeemm->Clone("TSeemmcopy");
2043     TH1F *TSemcopy = (TH1F*)TSem->Clone("TSemcopy");
2044    
2045 fronga 1.74 TZem->Divide(TZeemm);
2046 buchmann 1.87 TZem->SetMarkerStyle(21);
2047 buchmann 1.83 if(PlottingSetup::RestrictToMassPeak) {
2048     TSem->Divide(TZeemm);
2049     TSeemm->Divide(TZeemm);
2050 buchmann 1.87 TSem->SetMarkerStyle(24);
2051     TSeemm->SetMarkerStyle(32);
2052     }
2053 fronga 1.75
2054 buchmann 1.40 tcan->SetLogy(0);
2055 fronga 1.74 TZem->GetYaxis()->SetRangeUser(0,2.5);
2056 buchmann 1.77 TZem->GetYaxis()->SetTitle("ratio");
2057 fronga 1.74 TZem->Draw();
2058 buchmann 1.83 if(PlottingSetup::RestrictToMassPeak) {
2059     TSem->Draw("same");
2060     TSeemm->Draw("same");
2061     }
2062 buchmann 1.40
2063 buchmann 1.104 float linepos=0.25;
2064     if(PlottingSetup::RestrictToMassPeak) linepos=0.25;
2065 buchmann 1.102 TLine *top = new TLine(binning[0],1.0+linepos,binning[binning.size()-1],1.0+linepos);
2066     TLine *center = new TLine(binning[0],1.0,binning[binning.size()-1],1.0);
2067     TLine *bottom = new TLine(binning[0],1.0-linepos,binning[binning.size()-1],1.0-linepos);
2068 buchmann 1.40
2069     top->SetLineColor(kBlue);top->SetLineStyle(2);
2070     bottom->SetLineColor(kBlue);bottom->SetLineStyle(2);
2071     center->SetLineColor(kBlue);
2072    
2073     top->Draw("same");
2074     center->Draw("same");
2075     bottom->Draw("same");
2076    
2077 buchmann 1.102 TLegend *leg2 = make_legend("MC t#bar{t}",0.55,0.75,false);
2078 buchmann 1.43 leg2->AddEntry(TZem,"OFZP / SFZP","ple");
2079 buchmann 1.83 if(PlottingSetup::RestrictToMassPeak) {
2080     leg2->AddEntry(TSeemm,"SFSB / SFZP","ple");
2081     leg2->AddEntry(TSem,"OFSB / SFZP","ple");
2082     }
2083 buchmann 1.40 leg2->AddEntry(bottom,"syst. envelope","l");
2084 fronga 1.74 leg2->SetX1(0.25);leg2->SetX2(0.6);
2085 buchmann 1.40 leg2->SetY1(0.65);
2086    
2087     leg2->Draw("same");
2088    
2089 fronga 1.51 DrawMCPrelim(simulatedlumi);
2090 buchmann 1.102 CompleteSave(tcan,"Systematics/"+prestring+"/ttbar_shape_comparison_ratio");
2091    
2092    
2093    
2094     ///-------------- second part: only look at the quantity we actually care about!
2095     TH1F *leftsfzp = (TH1F*)nTZeemm->Clone("leftsfzp");
2096     TH1F *rightsfzp = (TH1F*)TZeemmcopy->Clone("rightsfzp");
2097     rightsfzp->Add(leftsfzp,-1);
2098     TH1F *leftofzp = (TH1F*)nTZem->Clone("leftofzp");
2099     TH1F *rightofzp = (TH1F*)TZemcopy->Clone("rightofzp");
2100     rightofzp->Add(leftofzp,-1);
2101     TH1F *leftofsb;
2102     TH1F *rightofsb;
2103     TH1F *leftsfsb;
2104     TH1F *rightsfsb;
2105     if(PlottingSetup::RestrictToMassPeak) {
2106     leftofsb = (TH1F*)nTSem->Clone("leftofsb");
2107     rightofsb = (TH1F*)TSemcopy->Clone("rightofsb");
2108     rightofsb->Add(leftofsb,-1);
2109     leftsfsb = (TH1F*)nTSeemm->Clone("leftsfsb");
2110     rightsfsb = (TH1F*)TSeemmcopy->Clone("rightsfsb");
2111     rightsfsb->Add(leftsfsb,-1);
2112     }
2113    
2114     tcan->SetLogy(1);
2115     rightsfzp->GetXaxis()->SetRangeUser(0,binning[binning.size()-1]);
2116 buchmann 1.104 rightsfzp->GetYaxis()->SetTitle("#deltaJZB / 25 GeV");
2117 buchmann 1.102 rightsfzp->Draw("histo");
2118     rightofzp->Draw("histo,same");
2119     if(PlottingSetup::RestrictToMassPeak) {
2120     rightofsb->Draw("histo,same");
2121     rightsfsb->Draw("histo,same");
2122     }
2123     DrawMCPrelim(simulatedlumi);
2124    
2125     TLegend *legA = make_legend("MC t#bar{t}",0.6,0.65,false);
2126     legA->AddEntry(rightsfzp,"SFZP","l");
2127     legA->AddEntry(rightofzp,"OFZP","l");
2128     if(PlottingSetup::RestrictToMassPeak) {
2129     legA->AddEntry(rightofsb,"SFSB","l");
2130     legA->AddEntry(rightsfsb,"OFSB","l");
2131     }
2132     legA->Draw();
2133 buchmann 1.103
2134 buchmann 1.104 CompleteSave(tcan,"Systematics/"+prestring+"/ttbar_deltajzb_comparison");
2135 buchmann 1.102
2136     tcan->SetLogy(0);
2137     rightofzp->Divide(rightsfzp);
2138     rightofzp->GetXaxis()->SetRangeUser(0.0,binning[binning.size()-1]);
2139 buchmann 1.104 rightofzp->GetYaxis()->SetRangeUser(0.0,2.0);
2140     rightofzp->GetYaxis()->SetTitle("#deltaJZB ratio");
2141 buchmann 1.102 rightofzp->Draw();
2142     if(PlottingSetup::RestrictToMassPeak) {
2143     rightofsb->Divide(rightsfzp);
2144     rightsfsb->Divide(rightsfzp);
2145     rightofsb->Draw("same");
2146     rightsfsb->Draw("same");
2147     }
2148    
2149     TLine *top2 = new TLine(0.0,1.0+linepos,binning[binning.size()-1],1.0+linepos);
2150     TLine *center2 = new TLine(0.0,1.0,binning[binning.size()-1],1.0);
2151     TLine *bottom2 = new TLine(0.0,1.0-linepos,binning[binning.size()-1],1.0-linepos);
2152    
2153     top2->SetLineColor(kBlue);top2->SetLineStyle(2);
2154     bottom2->SetLineColor(kBlue);bottom2->SetLineStyle(2);
2155     center2->SetLineColor(kBlue);
2156    
2157     top2->Draw("same");
2158     center2->Draw("same");
2159     bottom2->Draw("same");
2160    
2161     rightofzp->SetMarkerStyle(21);
2162     if(PlottingSetup::RestrictToMassPeak) {
2163     rightofsb->SetMarkerStyle(24);
2164     rightsfsb->SetMarkerStyle(32);
2165     }
2166    
2167     TLegend *leg3 = make_legend("MC t#bar{t}",0.55,0.75,false);
2168     leg3->AddEntry(rightofzp,"OFZP / SFZP","ple");
2169     if(PlottingSetup::RestrictToMassPeak) {
2170     leg3->AddEntry(rightsfsb,"SFSB / SFZP","ple");
2171     leg3->AddEntry(rightofsb,"OFSB / SFZP","ple");
2172     }
2173     leg3->AddEntry(bottom,"syst. envelope","l");
2174 buchmann 1.105 leg3->SetX1(0.25);leg3->SetX2(0.6);
2175 buchmann 1.102 leg3->SetY1(0.65);
2176    
2177     leg3->Draw("same");
2178 buchmann 1.40
2179 buchmann 1.102 DrawMCPrelim(simulatedlumi);
2180 buchmann 1.104 CompleteSave(tcan,"Systematics/"+prestring+"/ttbar_deltajzb_comparison_ratio");
2181 buchmann 1.102
2182     delete TZem;
2183     delete nTZem;
2184     delete TZeemm;
2185     delete nTZeemm;
2186     if(PlottingSetup::RestrictToMassPeak) {
2187     delete TSem;
2188     delete nTSem;
2189     delete TSeemm;
2190     delete nTSeemm;
2191     }
2192    
2193 buchmann 1.40 delete tcan;
2194 buchmann 1.60 cutWeight=weightbackup;
2195 buchmann 1.40 }
2196    
2197 buchmann 1.102 void ttbar_sidebands_comparison(string mcjzb, vector<float> jzb_binning) {
2198     vector<float> nicer_binning;
2199 buchmann 1.103 nicer_binning.push_back(-125);
2200     nicer_binning.push_back(-100);
2201     nicer_binning.push_back(-75);
2202     nicer_binning.push_back(-50);
2203     nicer_binning.push_back(-25);
2204 buchmann 1.102 nicer_binning.push_back(0);
2205     nicer_binning.push_back(25);
2206     nicer_binning.push_back(50);
2207     nicer_binning.push_back(75);
2208     nicer_binning.push_back(100);
2209     nicer_binning.push_back(125);
2210     nicer_binning.push_back(150);
2211     nicer_binning.push_back(175);
2212     nicer_binning.push_back(200);
2213     nicer_binning.push_back(230);
2214     nicer_binning.push_back(280);
2215 buchmann 1.107 nicer_binning.push_back(400);
2216 buchmann 1.102 ttbar_sidebands_comparison(mcjzb,nicer_binning, "ttbar/");
2217     }
2218    
2219    
2220 buchmann 1.111 void zjets_prediction_comparison() {
2221     // Do it without PU re-weighting
2222 buchmann 1.106 float MCPeakNoPU=0,MCPeakErrorNoPU=0,DataPeakNoPU=0,DataPeakErrorNoPU=0,MCSigma=0,DataSigma=0;
2223     stringstream resultsNoPU;
2224    
2225     stringstream mcjzbnoPU;
2226     find_peaks(MCPeakNoPU,MCPeakErrorNoPU, DataPeakNoPU, DataPeakErrorNoPU,MCSigma,DataSigma,resultsNoPU,false);
2227     if(MCPeakNoPU>0) mcjzbnoPU<<"("<<jzbvariablemc<<"-"<<TMath::Abs(MCPeakNoPU)<<")";
2228     else mcjzbnoPU<<"("<<jzbvariablemc<<"+"<<TMath::Abs(MCPeakNoPU)<<")";
2229    
2230     string mcjzb = mcjzbnoPU.str();
2231 buchmann 1.111 dout << "The peak corrected JZB expression for MC without pileup is : " << mcjzb << endl;
2232    
2233 buchmann 1.60 TCut weightbackup=cutWeight;
2234     cutWeight="1.0";
2235 fronga 1.45 float sbg_min=0.;
2236     float sbg_max=100.;
2237     int sbg_nbins=5;
2238 buchmann 1.58 float simulatedlumi = luminosity;//in pb please - adjust to your likings
2239 buchmann 1.111
2240     TCut kPos((mcjzb+">0").c_str());
2241     TCut kNeg((mcjzb+"<0").c_str());
2242     string var( "abs("+mcjzb+")" );
2243    
2244     TCut kcut(cutmass&&cutOSSF&&"pfJetGoodNum>2");
2245     TH1F *hJZBpos = systsamples.Draw("hJZBpos",var,sbg_nbins,sbg_min,sbg_max, "JZB [GeV]", "events",
2246     kcut&&kPos,mc,simulatedlumi,systsamples.FindSample("DYJets"));
2247     TH1F *hJZBneg = systsamples.Draw("hJZBneg",var,sbg_nbins,sbg_min,sbg_max, "JZB [GeV]", "events",
2248     kcut&&kNeg,mc,simulatedlumi,systsamples.FindSample("DYJets"));
2249 fronga 1.45 hJZBpos->SetLineColor(kBlack);
2250     hJZBneg->SetLineColor(kRed);
2251    
2252 buchmann 1.111 Int_t nbins = 5;
2253     Float_t xmax = 100.;
2254    
2255    
2256 fronga 1.45 TCanvas *zcan = new TCanvas("zcan","zcan");
2257     zcan->SetLogy(1);
2258    
2259     hJZBpos->Draw("e1");
2260     hJZBneg->Draw("same,hist");
2261     hJZBpos->Draw("same,e1"); // So it's on top...
2262    
2263 fronga 1.51 TLegend *leg = make_legend("MC Z+jets",0.55,0.75,false);
2264 fronga 1.45 leg->AddEntry(hJZBpos,"Observed","pe");
2265     leg->AddEntry(hJZBneg,"Predicted","l");
2266     leg->Draw("same");
2267 fronga 1.51 DrawMCPrelim(simulatedlumi);
2268 buchmann 1.95 CompleteSave(zcan,"Systematics/zjets_prediction");
2269 fronga 1.45
2270     TH1F* hratio = (TH1F*)hJZBpos->Clone("hratio");
2271     hratio->Divide(hJZBneg);
2272    
2273     zcan->SetLogy(0);
2274     hratio->GetYaxis()->SetRangeUser(0,2.5);
2275     hratio->GetYaxis()->SetTitle("Observed/Predicted");
2276     hratio->Draw("e1");
2277    
2278     TLine *top = new TLine(sbg_min,1.25,sbg_max,1.25);
2279     TLine *center = new TLine(sbg_min,1.0,sbg_max,1.0);
2280     TLine *bottom = new TLine(sbg_min,0.75,sbg_max,0.75);
2281    
2282    
2283     top->SetLineColor(kBlue);top->SetLineStyle(2);
2284     bottom->SetLineColor(kBlue);bottom->SetLineStyle(2);
2285     center->SetLineColor(kBlue);
2286    
2287     top->Draw("same");
2288     center->Draw("same");
2289     bottom->Draw("same");
2290    
2291 fronga 1.51 TLegend *leg2 = make_legend("MC Z+jets",0.25,0.75,false);
2292 fronga 1.45 leg2->AddEntry(hratio,"obs / pred","pe");
2293     leg2->AddEntry(bottom,"syst. envelope","l");
2294     leg2->Draw("same");
2295 fronga 1.51 DrawMCPrelim(simulatedlumi);
2296 buchmann 1.95 CompleteSave(zcan,"Systematics/zjets_prediction_ratio");
2297 fronga 1.45
2298     delete zcan;
2299 buchmann 1.60 cutWeight=weightbackup;
2300    
2301 fronga 1.45 }
2302    
2303 buchmann 1.102
2304    
2305 buchmann 1.90 void sideband_assessment(string datajzb, float min=30.0, float max=50.0) {
2306 buchmann 1.82 tout << endl << endl;
2307     stringstream bordercut;
2308     bordercut << "(TMath::Abs(" << datajzb << ")<" << max << ")&&(TMath::Abs(" << datajzb << ")>" << min << ")";
2309     tout << bordercut.str().c_str() << endl;
2310     TH1F *ofsb = allsamples.Draw("ofsb",datajzb,100, 0,100, "JZB [GeV]", "events", sidebandcut&&cutOSOF&&cutnJets&&bordercut.str().c_str(),data, luminosity);
2311     TH1F *ofzp = allsamples.Draw("ofzp",datajzb,100, 0,100, "JZB [GeV]", "events", cutmass&&cutOSOF&&cutnJets&&bordercut.str().c_str(),data, luminosity);
2312     float OFSB = ofsb->Integral();
2313     float OFZP = ofzp->Integral();
2314    
2315     tout << "\\begin{table}[hbtp]" << endl;
2316     tout << "\\renewcommand{\\arraystretch}{1.3}" << endl;
2317     tout << "\\begin{center}" << endl;
2318     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;
2319     tout << "\\begin{tabular}{l|cc}" << endl;
2320     tout << "\\hline" << endl;
2321     tout << "& {\\OFZP} & {\\OFSB} \\\\\\hline" << endl;
2322     tout << "\\#(events) & "<<OFSB<<" & "<<OFZP<<"\\\\ \\hline" << endl;
2323     tout << "\\end{tabular}" << endl;
2324     tout << "\\end{center}" << endl;
2325     tout << "\\end{table}" << endl;
2326    
2327    
2328     }
2329    
2330 buchmann 1.91 void make_table(samplecollection &coll, string jzbexpr, bool is_data, vector<float> jzb_cuts, string subselection="none") {
2331    
2332     vector<float> jzbcutprediction;
2333     vector<float> metcutprediction;
2334 buchmann 1.30
2335 buchmann 1.91 vector<float> jzbcutobservation;
2336     vector<float> metcutobservation;
2337    
2338     TCanvas *cannie = new TCanvas("cannie","cannie");
2339    
2340     for(int icut=0;icut<jzb_cuts.size();icut++) {
2341     float currcut=jzb_cuts[icut];
2342     int nbins=1;float low=currcut;
2343     vector<int> mysample;
2344     if(subselection!="none") mysample=coll.FindSample(subselection);
2345     TH1F *RcorrJZBeemm = coll.Draw("RcorrJZBeemm",jzbexpr,1,currcut,14000, "JZB [GeV]", "events", cutmass&&cutOSSF&&cutnJets,is_data, luminosity, mysample);
2346     TH1F *LcorrJZBeemm = coll.Draw("LcorrJZBeemm",("-("+jzbexpr+")").c_str(),nbins,low,14000, "JZB [GeV]", "events", cutmass&&cutOSSF&&cutnJets,is_data, luminosity, mysample);
2347     TH1F *RcorrJZBem = coll.Draw("RcorrJZBem",jzbexpr.c_str(),nbins,low,14000, "JZB [GeV]", "events", cutmass&&cutOSOF&&cutnJets,is_data, luminosity, mysample);
2348     TH1F *LcorrJZBem = coll.Draw("LcorrJZBem",("-("+jzbexpr+")").c_str(),nbins,low,14000, "JZB [GeV]", "events", cutmass&&cutOSOF&&cutnJets,is_data, luminosity, mysample);
2349    
2350     TH1F *RcorrJZBSBem;
2351     TH1F *LcorrJZBSBem;
2352     TH1F *RcorrJZBSBeemm;
2353     TH1F *LcorrJZBSBeemm;
2354    
2355     if(PlottingSetup::RestrictToMassPeak) {
2356     RcorrJZBSBem = coll.Draw("RcorrJZBSBem",jzbexpr.c_str(),nbins,low,14000, "JZB [GeV]", "events", sidebandcut&&cutOSOF&&cutnJets,is_data, luminosity, mysample);
2357     LcorrJZBSBem = coll.Draw("LcorrJZBSBem",("-("+jzbexpr+")").c_str(),nbins,low,14000, "JZB [GeV]", "events", sidebandcut&&cutOSOF&&cutnJets,is_data, luminosity, mysample);
2358     RcorrJZBSBeemm = coll.Draw("RcorrJZBSBeemm",jzbexpr.c_str(),nbins,low,14000, "JZB [GeV]", "events", sidebandcut&&cutOSSF&&cutnJets,is_data, luminosity, mysample);
2359     LcorrJZBSBeemm = coll.Draw("LcorrJZBSBeemm",("-("+jzbexpr+")").c_str(),nbins,low,14000, "JZB [GeV]", "events", sidebandcut&&cutOSSF&&cutnJets,is_data, luminosity, mysample);
2360     }
2361    
2362     TH1F *Bpred = (TH1F*)LcorrJZBeemm->Clone("Bpred");
2363     if(PlottingSetup::RestrictToMassPeak) {
2364     Bpred->Add(RcorrJZBem,1.0/3.);
2365     Bpred->Add(LcorrJZBem,-1.0/3.);
2366     Bpred->Add(RcorrJZBSBem,1.0/3.);
2367     Bpred->Add(LcorrJZBSBem,-1.0/3.);
2368     Bpred->Add(RcorrJZBSBeemm,1.0/3.);
2369     Bpred->Add(LcorrJZBSBeemm,-1.0/3.);
2370     } else {
2371     Bpred->Add(RcorrJZBem,1.0);
2372     Bpred->Add(LcorrJZBem,-1.0);
2373     }
2374    
2375     jzbcutobservation.push_back(RcorrJZBeemm->Integral());
2376     jzbcutprediction.push_back(Bpred->Integral());
2377    
2378     delete RcorrJZBeemm;
2379     delete LcorrJZBeemm;
2380     delete RcorrJZBem;
2381     delete LcorrJZBem;
2382     delete RcorrJZBSBem;
2383     delete LcorrJZBSBem;
2384     delete RcorrJZBSBeemm;
2385     delete LcorrJZBSBeemm;
2386    
2387     TH1F *MetObs = coll.Draw("MetObs",("met[4]"),nbins,low,14000, "JZB [GeV]", "events", cutmass&&cutOSSF&&cutnJets,is_data, luminosity, mysample);
2388     TH1F *MetPred = coll.Draw("MetPred",("met[4]"),nbins,low,14000, "JZB [GeV]", "events", cutmass&&cutOSOF&&cutnJets,is_data, luminosity, mysample);
2389    
2390     metcutobservation.push_back(MetObs->Integral());
2391     metcutprediction.push_back(MetPred->Integral());
2392     delete MetObs;
2393     delete MetPred;
2394     }//end of cut loop
2395    
2396     //prediction part
2397     if(is_data) cout << "Data prediction & ";
2398     if(subselection!="none") cout << subselection << " prediction &";
2399     for(int ij=0;ij<jzb_cuts.size();ij++) cout << jzbcutprediction[ij] << " vs " << metcutprediction[ij] << " & ";
2400    
2401     cout << endl;
2402     //observation part
2403     if(is_data) cout << "Data observation & ";
2404     if(subselection!="none") cout << subselection << " observation &";
2405     for(int ij=0;ij<jzb_cuts.size();ij++) cout << jzbcutobservation[ij] << " vs " << metcutobservation[ij] << " & ";
2406     cout << endl;
2407     cout << "_________________________________________________________________" << endl;
2408     delete cannie;
2409     }
2410    
2411     void met_jzb_cut(string datajzb, string mcjzb, vector<float> jzb_cut) {
2412     /*we want a table like this:
2413     __________________ 50 | 100 | ...
2414     | Data prediction | a vs b | a vs b | ...
2415     | Data observed | a vs b | a vs b | ...
2416     --------------------------------------
2417     --------------------------------------
2418     | LM4 prediction | a vs b | a vs b | ...
2419     | LM4 observed | a vs b | a vs b | ...
2420     | LM8 prediction | a vs b | a vs b | ...
2421     | LM8 observed | a vs b | a vs b | ...
2422    
2423     where a is the result for a jzb cut at X, and b is the result for a met cut at X
2424     */
2425     make_table(allsamples,datajzb, true,jzb_cut,"none");
2426     make_table(signalsamples,mcjzb, false,jzb_cut,"LM4");
2427     make_table(signalsamples,mcjzb, false,jzb_cut,"LM8");
2428     }
2429    
2430 fronga 1.98
2431     //________________________________________________________________________________________
2432     // JZB Efficiency plot (efficiency of passing reco. JZB cut as function of generator JZB cut)
2433     void JZBSelEff(string mcjzb, TTree* events, string informalname, vector<float> jzb_bins) {
2434    
2435     float min = 0, max = 400;
2436 pablom 1.114 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};
2437 fronga 1.98 int nbins = sizeof(xbins)/sizeof(float)-1;
2438     int markers[] = { 20, 26, 21, 24, 22, 25, 28 };
2439    
2440 pablom 1.114 TH1F* heff = new TH1F("heff", "JZB eff ; generator-level JZB [GeV]; efficiency",nbins,xbins);
2441     TH1F* hgen = new TH1F("hgen", "JZB gen ; generator-level JZB [GeV]; efficiency",nbins,xbins);
2442     TH1F* hreco = new TH1F("hreco","JZB reco ; generator-level JZB [GeV]; efficiency",nbins,xbins);
2443 fronga 1.98
2444     TCut kgen(genMassCut&&"genZPt>0&&genNjets>2&&abs(genMID)==23"&&cutOSSF);
2445     TCut kreco(cutmass);
2446    
2447     TF1* func = new TF1("func","0.5*[2]*(TMath::Erf((x-[1])/[0])+1)",min,max);
2448     func->SetParNames("epsilon","x_{1/2}","sigma");
2449 pablom 1.114 func->SetParameter(0,50.);
2450 fronga 1.98 func->SetParameter(1,0.);
2451     func->SetParameter(2,1.);
2452     gStyle->SetOptStat(0);
2453     gStyle->SetOptFit(0);
2454    
2455     TCanvas *can = new TCanvas("can","Canvas for JZB Efficiency",600,600);
2456 pablom 1.114 can->SetGridx(1);
2457     can->SetGridy(1);
2458 fronga 1.98 TLegend *leg = make_legend("",0.6,0.2,false,0.89,0.5);
2459    
2460 pablom 1.114
2461    
2462 fronga 1.98 for ( int icut=0; icut<jzb_bins.size(); ++icut ) {
2463    
2464     ostringstream selection;
2465     selection << mcjzb << ">" << jzb_bins[icut];
2466     TCut ksel(selection.str().c_str());
2467     events->Draw("genJZB>>hgen", kgen&&kreco, "goff");
2468     events->Draw("genJZB>>hreco",kgen&&kreco&&ksel,"goff");
2469    
2470     // Loop over steps to get efficiency curve
2471 pablom 1.114 for ( Int_t iBin = 0; iBin<nbins-1; ++iBin ) {
2472 fronga 1.98 Float_t eff = hreco->GetBinContent(iBin+1)/hgen->GetBinContent(iBin+1);
2473     heff->SetBinContent(iBin+1,eff);
2474     heff->SetBinError(iBin+1,TMath::Sqrt(eff*(1-eff)/hgen->GetBinContent(iBin+1)));
2475     }
2476 buchmann 1.91
2477 pablom 1.114 heff->GetXaxis()->SetRangeUser(min, max);
2478 fronga 1.98 heff->SetMarkerStyle(markers[icut]);
2479     heff->Fit("func","Q+","same");
2480    
2481     // Print values
2482     dout << "+++ For " << selection.str() << std::endl;
2483     for ( int i=0; i<func->GetNpar(); ++i )
2484     dout << " " << func->GetParName(i) << " " << func->GetParameter(i) << " \\pm " << func->GetParError(i) << std::endl;
2485     char hname[256]; sprintf(hname,"heff%d",icut);
2486    
2487     // Store plot
2488     TH1F* h = (TH1F*)heff->Clone(hname);
2489     if ( icut) h->Draw("same");
2490     else h->Draw();
2491     char htitle[256]; sprintf(htitle,"JZB > %3.0f GeV", jzb_bins[icut]);
2492     leg->AddEntry(h,htitle,"p");
2493    
2494     }
2495    
2496     leg->Draw();
2497 pablom 1.114 DrawMCPrelim(0.0);
2498 fronga 1.98 CompleteSave(can, "Systematics/jzb_efficiency_curve"+informalname );
2499    
2500     delete hgen;
2501     delete hreco;
2502     delete heff;
2503     }
2504    
2505     //________________________________________________________________________________________
2506     // Calls the above function for each signal sample
2507     void plot_jzb_sel_eff( string mcjzb, samplecollection &signalsamples, vector<float> bins )
2508     {
2509     for (int isignal=0; isignal<signalsamples.collection.size();isignal++) {
2510     dout << "JZB selection efficiency curve: " << std::endl;
2511     JZBSelEff(mcjzb,(signalsamples.collection)[isignal].events,(signalsamples.collection)[isignal].samplename,bins); // Only for some selected samples
2512     }
2513     }
2514 buchmann 1.91
2515 fronga 1.98
2516 buchmann 1.11 void test() {
2517 buchmann 1.19
2518 buchmann 1.11 TCanvas *testcanv = new TCanvas("testcanv","testcanv");
2519     testcanv->cd();
2520     switch_overunderflow(true);
2521 buchmann 1.17 TH1F *ptdistr = allsamples.Draw("ptdistr","pt1",100,30,200, "p_{T} [GeV]", "events", cutOSSF,data,luminosity);
2522 buchmann 1.11 switch_overunderflow(false);
2523     ptdistr->Draw();
2524     testcanv->SaveAs("test.png");
2525 buchmann 1.21 dout << "HELLO there!" << endl;
2526 buchmann 1.19
2527 buchmann 1.11 }