ViewVC Help
View File | Revision Log | Show Annotations | Root Listing
root/cvsroot/UserCode/cbrown/AnalysisFramework/Plotting/Modules/Plotting_Functions.C
Revision: 1.18
Committed: Fri Jul 15 06:52:40 2011 UTC (13 years, 10 months ago) by buchmann
Content type: text/plain
Branch: MAIN
Changes since 1.17: +11 -0 lines
Log Message:
Added more plots (mll split up for ee/mm); fixed one potential memory leak

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 buchmann 1.1
18 buchmann 1.9 //#include "TTbar_stuff.C"
19 buchmann 1.1 using namespace std;
20    
21     using namespace PlottingSetup;
22    
23     void find_peaks(float &MCPeak,float &MCPeakError, float &DataPeak, float &DataPeakError, float &MCSigma, float &DataSigma, stringstream &result)
24     {
25 buchmann 1.17 TH1F *rawJZBeemmMC = allsamples.Draw("rawJZBeemmMC",jzbvariablemc,100,-50,50, "JZB [GeV]", "events", cutmass&&cutOSSF&&cutnJets,mc, luminosity);
26     TH1F *rawJZBeemmData = allsamples.Draw("rawJZBeemmData",jzbvariabledata,100, -50,50, "JZB [GeV]", "events", cutmass&&cutOSSF&&cutnJets,data, luminosity);
27     TH1F *rawJZBemMC = allsamples.Draw("rawJZBemMC",jzbvariablemc,100,-50,50, "JZB [GeV]", "events", cutmass&&cutOSOF&&cutnJets,mc, luminosity);
28     TH1F *rawJZBemData = allsamples.Draw("rawJZBemData",jzbvariabledata,100, -50,50, "JZB [GeV]", "events", cutmass&&cutOSOF&&cutnJets,data, luminosity);
29 buchmann 1.1 TH1F *rawttbarjzbeemmMC;
30    
31     if(method==doKM) {
32     //we only need this histo for the KM fitting...
33 buchmann 1.17 rawttbarjzbeemmMC = allsamples.Draw("rawttbarjzbeemmMC",jzbvariablemc,100, -50,50, "JZB [GeV]", "events",cutmass&&cutOSSF&&cutnJets,mc,luminosity,allsamples.FindSample("TTJet"));
34 buchmann 1.1 MCPeak=find_peak(rawJZBeemmMC, rawttbarjzbeemmMC, -40, 40, mc, MCPeakError,MCSigma,method);
35     DataPeak=find_peak(rawJZBeemmData, rawJZBeemmData, -40, 40, data, DataPeakError,DataSigma,method);
36     }
37     else {
38     TH1F *reducedMC = (TH1F*)rawJZBeemmMC->Clone();
39     TH1F *reducedData = (TH1F*)rawJZBeemmData->Clone();
40     reducedMC->Add(rawJZBemMC,-1);
41     reducedData->Add(rawJZBemData,-1);
42     //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)
43     MCPeak=find_peak(reducedMC, rawttbarjzbeemmMC, -40, 40, mc, MCPeakError,MCSigma,method);
44     DataPeak=find_peak(reducedData, rawJZBeemmData, -40, 40, data, DataPeakError,DataSigma,method);
45 buchmann 1.11
46 buchmann 1.1 }
47 buchmann 1.11
48 buchmann 1.1
49     // MCPeak=find_peak(rawJZBeemmMC, rawttbarjzbeemmMC, -40, 40, mc, MCPeakError,MCSigma,method);
50     // DataPeak=find_peak(rawJZBeemmData, rawJZBeemmData, -40, 40, data, DataPeakError,DataSigma,method);
51     cout << "We have found the peak in Data at " << DataPeak << " +/- " << DataPeakError << " with sigma=" << DataSigma << " +/- ?? (not impl.)" << endl;
52     result << "We have found the peak in Data at " << DataPeak << " +/- " << DataPeakError << " with sigma=" << DataSigma << " +/- ?? (not impl.)" << endl;
53     cout << "We have found the peak in MC at " << MCPeak << " +/- " << MCPeakError << " with sigma=" << MCSigma << " +/- ?? (not impl.)" << endl;
54     result << "We have found the peak in MC at " << MCPeak << " +/- " << MCPeakError << " with sigma=" << MCSigma << " +/- ?? (not impl.)" << endl;
55     }
56    
57     void make_special_mll_plot(int nbins, float min, float max, bool logscale,string xlabel) {
58    
59     TCanvas *ckin = new TCanvas("ckin","Kinematic Plots (in the making)",600,600);
60    
61     TH1F *datahistoOSSF = allsamples.Draw("datahistoOSSF","mll",nbins,min,max, xlabel, "events",cutOSSF&&cutnJets&&basiccut,data,luminosity);
62     THStack mcstackOSSF = allsamples.DrawStack("mcstackOSSF","mll",nbins,min,max, xlabel, "events",cutOSSF&&cutnJets&&basiccut,mc,luminosity);
63     TH1F *datahistoOSOF = allsamples.Draw("datahistoOSSF","mll",nbins,min,max, xlabel, "events",cutOSOF&&cutnJets&&basiccut,data,luminosity);
64    
65     if(logscale) ckin->SetLogy(1);
66 buchmann 1.17 datahistoOSSF->SetMarkerSize(DataMarkerSize);
67 buchmann 1.1 datahistoOSSF->GetXaxis()->SetTitle(xlabel.c_str());
68     datahistoOSSF->GetXaxis()->CenterTitle();
69     datahistoOSSF->GetYaxis()->SetTitle("events");
70     datahistoOSSF->GetYaxis()->CenterTitle();
71    
72 buchmann 1.17 datahistoOSOF->SetMarkerSize(DataMarkerSize);
73     datahistoOSSF->SetMarkerSize(DataMarkerSize);
74 buchmann 1.1 datahistoOSSF->Draw();
75     mcstackOSSF.Draw("same");
76     datahistoOSSF->Draw("same");
77 buchmann 1.17 datahistoOSOF->SetMarkerColor(TColor::GetColor("#FF4000"));
78     datahistoOSOF->SetLineColor(TColor::GetColor("#FF4000"));
79     datahistoOSOF->SetMarkerStyle(21);
80 buchmann 1.1 datahistoOSOF->Draw("same");
81 buchmann 1.17 TLegend *kinleg = allsamples.allbglegend("",datahistoOSSF);
82 buchmann 1.1 kinleg->AddEntry(datahistoOSOF,"OSOF (data)","p");
83     kinleg->Draw();
84     CompleteSave(ckin,"kin/mll_ossf_osof_distribution");
85 buchmann 1.18
86     delete datahistoOSOF;
87     delete datahistoOSSF;
88 buchmann 1.1 }
89    
90    
91     void make_plot(string variable, int nbins, float min, float max, bool logscale,string xlabel, string filename,bool isPF=true) {
92     // TCut basiccut("(pfJetGoodNum>=2&&pfJetGoodID[0])&&(pfJetGoodNum>=2&&pfJetGoodID[1])&&(passed_triggers||!is_data)");
93     TCut ibasiccut=basiccut;
94    
95     if(isPF) ibasiccut=basiccut&&"pfjzb[0]>-998";
96     //Step 1: Adapt the variable (if we're dealing with PF we need to adapt the variable!)
97     if(isPF) {
98     if(variable=="mll") variable="pfmll[0]";
99     if(variable=="jetpt[0]") variable="pfJetGoodPt[0]";
100     if(variable=="jeteta[0]") variable="pfJetGoodEta[0]";
101     if(variable=="pt") variable="pfpt[0]";
102     if(variable=="pt1") variable="pfpt1[0]";
103     if(variable=="eta1") variable="pfeta1[0]";
104     if(variable=="jzb[1]") variable="pfjzb[0]";
105     //if(variable=="pfJetGoodNum") variable="pfJetGoodNum"; // pointless.
106     }
107    
108     //Step 2: Refine the cut
109     TCanvas *ckin = new TCanvas("ckin","Kinematic Plots (in the making)",600,600);
110     ckin->SetLogy(logscale);
111     TCut cut;
112     cut=cutmass&&cutOSSF&&cutnJets&&ibasiccut;
113     if(filename=="nJets") cut=cutmass&&cutOSSF&&ibasiccut;
114     if(filename=="nJets_nocuts_except_mll_ossf") cut=cutmass&&cutOSSF;
115     if(filename=="mll") cut=cutOSSF&&cutnJets&&ibasiccut;
116 buchmann 1.18 if(filename=="mll_ee") cut=cutOSSF&&cutnJets&&ibasiccut&&"id1==0";
117     if(filename=="mll_mm") cut=cutOSSF&&cutnJets&&ibasiccut&&"id1==1";
118 buchmann 1.17 if(filename=="mll_inclusive"||filename=="mll_inclusive_highrange") cut=cutOSSF;
119 buchmann 1.18 if(filename=="mll_inclusive_ee") cut=cutOSSF&&"id1==0";
120     if(filename=="mll_inclusive_mm") cut=cutOSSF&&"id1==1";
121 buchmann 1.1 if(filename=="pfJetGoodEta_0") cut=cutOSSF&&cutmass&&ibasiccut;
122    
123     TH1F *datahisto = allsamples.Draw("datahisto",variable,nbins,min,max, xlabel, "events",cut,data,luminosity);
124 buchmann 1.17 datahisto->SetMarkerSize(DataMarkerSize);
125 buchmann 1.1 THStack mcstack = allsamples.DrawStack("mcstack",variable,nbins,min,max, xlabel, "events",cut,mc,luminosity);
126     if(variable=="pfJetGoodPt[0]") datahisto->SetMaximum(10*datahisto->GetMaximum());
127     if(variable=="pt") datahisto->SetMaximum(10*datahisto->GetMaximum());
128     if(filename=="mll_inclusive") datahisto->SetMinimum(1);
129     datahisto->Draw("e1");
130     mcstack.Draw("same");
131     datahisto->Draw("same,e1");
132     TLegend *kinleg = allsamples.allbglegend();
133     kinleg->Draw();
134 buchmann 1.16 TText* write_cut = write_cut_on_canvas(decipher_cut(cut,basicqualitycut));
135 buchmann 1.1 write_cut->Draw();
136     TText* write_variable = write_text(0.99,0.01,variable);
137     write_variable->SetTextAlign(31);
138     write_variable->SetTextSize(0.02);
139 buchmann 1.17 // write_variable->Draw();
140 buchmann 1.1 if(isPF) CompleteSave(ckin,"kin/"+filename+"__PF");
141     else CompleteSave(ckin,"kin/"+filename);
142     datahisto->Delete();
143     }
144    
145     void do_kinematic_plots(bool doPF=false)
146     {
147     bool dolog=true;
148     bool nolog=false;
149 buchmann 1.17 make_plot("mll",50,50,150,dolog,"m_{ll} [GeV]","mll",doPF);
150 buchmann 1.18 make_plot("mll",50,50,150,dolog,"m_{ll} [GeV]","mll_ee",doPF);
151     make_plot("mll",50,50,150,dolog,"m_{ll} [GeV]","mll_mm",doPF);
152 buchmann 1.17 make_plot("mll",100,50,150,dolog,"m_{ll} [GeV]","mll_inclusive",doPF);
153 buchmann 1.18 make_plot("mll",100,50,150,dolog,"m_{ll} [GeV]","mll_inclusive_ee",doPF);
154     make_plot("mll",100,50,150,dolog,"m_{ll} [GeV]","mll_inclusive_mm",doPF);
155 buchmann 1.17 make_plot("mll",300,50,350,dolog,"m_{ll} [GeV]","mll_inclusive_highrange",doPF);
156     make_plot("jetpt[0]",40,0,200,dolog,"leading jet p_{T} [GeV]","pfJetGoodPt_0",doPF);
157 buchmann 1.1 make_plot("jeteta[0]",40,-5,5,nolog,"leading jet #eta","pfJetGoodEta_0",doPF);
158 buchmann 1.17 make_plot("pt",50,0,200,dolog,"Z p_{T} [GeV]","Zpt",doPF);
159     make_plot("pt1",50,0,100,nolog,"p_{T} [GeV]","pt",doPF);
160 buchmann 1.1 make_plot("eta1",40,-5,5,nolog,"#eta_{l}","eta",doPF);
161 buchmann 1.17 make_plot("jzb[1]",100,-150,150,dolog,"JZB [GeV]","jzb_ossf",doPF);
162 buchmann 1.1 make_plot("pfJetGoodNum",8,0.5,8.5,dolog,"nJets","nJets",doPF);
163     make_plot("pfJetGoodNum",8,0.5,8.5,dolog,"nJets","nJets_nocuts_except_mll_ossf",doPF);
164 buchmann 1.17 make_special_mll_plot(30,50,150,dolog,"m_{ll} [GeV]");
165 buchmann 1.1 }
166    
167     void do_kinematic_PF_plots()
168     {
169     do_kinematic_plots(true);
170     }
171    
172 buchmann 1.11 void signal_bg_comparison()
173 buchmann 1.1 {
174 buchmann 1.11 TCanvas *can = new TCanvas("can","Signal Background Comparison Canvas");
175 buchmann 1.1 int sbg_nbins=100;
176     float sbg_min=-200;
177     float sbg_max=400;
178     can->SetLogy(1);
179 buchmann 1.17 TH1F *JZBplotZJETs = allsamples.Draw("JZBplotZJETs",jzbvariablemc,sbg_nbins,sbg_min,sbg_max, "JZB [GeV]", "events",cutmass&&cutOSSF&&cutnJets,mc,luminosity,allsamples.FindSample("DYJetsToLL"));
180     TH1F *JZBplotLM4 = allsamples.Draw("JZBplotLM4",jzbvariablemc,sbg_nbins,sbg_min,sbg_max, "JZB [GeV]", "events",cutmass&&cutOSSF&&cutnJets,mc,luminosity,allsamples.FindSample("LM4"));
181     TH1F *JZBplotTtbar = allsamples.Draw("JZBplotTtbar",jzbvariablemc,sbg_nbins,sbg_min,sbg_max, "JZB [GeV]", "events",cutmass&&cutOSSF&&cutnJets,mc,luminosity,allsamples.FindSample("TTJets"));
182 buchmann 1.1
183     JZBplotTtbar->SetLineColor(allsamples.GetColor("TTJet"));
184     JZBplotTtbar->SetLineColor(allsamples.GetColor("TTJet"));
185     JZBplotTtbar->SetLineWidth(2);
186     JZBplotZJETs->SetFillColor(allsamples.GetColor("DY"));
187     JZBplotZJETs->SetLineColor(kBlack);
188     JZBplotLM4->SetLineWidth(2);
189     JZBplotLM4->SetLineStyle(2);
190     JZBplotZJETs->SetMinimum(0.05);
191     JZBplotLM4->Scale(20.0);
192     JZBplotZJETs->Draw("histo");
193     JZBplotLM4->Draw("histo,same");
194     JZBplotTtbar->Draw("histo,same");
195     TLegend *signal_bg_comparison_leg = make_legend("MC:");
196     signal_bg_comparison_leg->AddEntry(JZBplotZJETs,"Z+Jets","f");
197     signal_bg_comparison_leg->AddEntry(JZBplotTtbar,"t#bar{t}","f");
198     signal_bg_comparison_leg->AddEntry(JZBplotLM4,"20xLM4","f");
199     signal_bg_comparison_leg->Draw();
200     CompleteSave(can,"jzb_bg_vs_signal_distribution");
201     JZBplotLM4->Scale(1.0/20);
202     JZBplotZJETs->SetMinimum(0.004);
203     JZBplotZJETs->Draw("histo");
204     JZBplotLM4->Draw("histo,same");
205     JZBplotTtbar->Draw("histo,same");
206     TLegend *signal_bg_comparison_leg2 = make_legend("MC:");
207     signal_bg_comparison_leg2->AddEntry(JZBplotZJETs,"Z+Jets","f");
208     signal_bg_comparison_leg2->AddEntry(JZBplotTtbar,"t#bar{t}","f");
209     signal_bg_comparison_leg2->AddEntry(JZBplotLM4,"LM4","f");
210     signal_bg_comparison_leg2->Draw();
211     CompleteSave(can,"jzb_bg_vs_signal_distribution_unscaled_LM4");
212     }
213    
214 buchmann 1.9 //TF1 *BpredFunc,*BpredFuncP,*BpredFuncN;
215 buchmann 1.1
216 buchmann 1.9 vector<TF1*> do_cb_fit_to_plot(TH1F *histo, float Sigma, float doingfitacrosstheboard=false) {
217 buchmann 1.1
218     // BpredFunc = new TF1("BpredFunc",InvCrystalBall,0,histo->GetBinLowEdge(histo->GetNbinsX())+histo->GetBinWidth(histo->GetNbinsX()),5);
219 buchmann 1.9 TF1 *BpredFunc = new TF1("BpredFunc",InvCrystalBall,0,1000,5);
220 buchmann 1.1 BpredFunc->SetParameter(0,histo->GetBinContent(1));
221 buchmann 1.6 if(doingfitacrosstheboard) BpredFunc->SetParameter(0,histo->GetMaximum());
222 buchmann 1.1 BpredFunc->SetParameter(1,0.);
223     if(method==1) BpredFunc->SetParameter(2,10*Sigma);//KM
224     else BpredFunc->SetParameter(2,Sigma);//Gaussian based methods
225     if(method==-99) BpredFunc->SetParameter(2,2.0*Sigma);//Kostas
226     BpredFunc->SetParameter(3,1.8);
227     BpredFunc->SetParameter(4,2.5);
228 buchmann 1.11 histo->Fit(BpredFunc,"QN0");
229 buchmann 1.1 BpredFunc->SetLineColor(kBlue);
230     BpredFunc->SetLineWidth(1);
231    
232 buchmann 1.9 TF1 *BpredFuncP = new TF1("BpredFuncP",InvCrystalBallP,-1000,histo->GetBinLowEdge(histo->GetNbinsX())+histo->GetBinWidth(histo->GetNbinsX()),5);
233     TF1 *BpredFuncN = new TF1("BpredFuncN",InvCrystalBallN,-1000,histo->GetBinLowEdge(histo->GetNbinsX())+histo->GetBinWidth(histo->GetNbinsX()),5);
234 buchmann 1.1
235     BpredFuncP->SetParameters(BpredFunc->GetParameters());
236     BpredFuncP->SetLineColor(kBlue);
237     BpredFuncP->SetLineWidth(1);
238     BpredFuncP->SetLineStyle(2);
239    
240     BpredFuncN->SetParameters(BpredFunc->GetParameters());
241     BpredFuncN->SetLineColor(kBlue);
242     BpredFuncN->SetLineWidth(1);
243     BpredFuncN->SetLineStyle(2);
244 buchmann 1.9
245     vector<TF1*> functions;
246     functions.push_back(BpredFuncN);
247     functions.push_back(BpredFunc);
248     functions.push_back(BpredFuncP);
249     return functions;
250 buchmann 1.1 }
251     void do_prediction_plot(string jzb, TCanvas *globalcanvas, float sigma, float high, bool is_data, bool do_fit=true)
252     {
253     int nbins=100;
254     if(is_data) nbins=50;
255     float low=0;
256     float hi=500;
257    
258 buchmann 1.17 TH1F *RcorrJZBeemm = allsamples.Draw("RcorrJZBeemm",jzb.c_str(),nbins,low,hi, "JZB [GeV]", "events", cutmass&&cutOSSF&&cutnJets,is_data, luminosity);
259     TH1F *LcorrJZBeemm = allsamples.Draw("LcorrJZBeemm",("-"+jzb).c_str(),nbins,low,hi, "JZB [GeV]", "events", cutmass&&cutOSSF&&cutnJets,is_data, luminosity);
260     TH1F *RcorrJZBem = allsamples.Draw("RcorrJZBem",jzb.c_str(),nbins,low,hi, "JZB [GeV]", "events", cutmass&&cutOSOF&&cutnJets,is_data, luminosity);
261     TH1F *LcorrJZBem = allsamples.Draw("LcorrJZBem",("-"+jzb).c_str(),nbins,low,hi, "JZB [GeV]", "events", cutmass&&cutOSOF&&cutnJets,is_data, luminosity);
262 buchmann 1.1
263 buchmann 1.17 TH1F *RcorrJZBSBem = allsamples.Draw("RcorrJZBSBem",jzb.c_str(),nbins,low,hi, "JZB [GeV]", "events", sidebandcut&&cutOSOF&&cutnJets,is_data, luminosity);
264     TH1F *LcorrJZBSBem = allsamples.Draw("LcorrJZBSBem",("-"+jzb).c_str(),nbins,low,hi, "JZB [GeV]", "events", sidebandcut&&cutOSOF&&cutnJets,is_data, luminosity);
265 buchmann 1.13
266 buchmann 1.17 TH1F *RcorrJZBSBeemm = allsamples.Draw("RcorrJZBSBeemm",jzb.c_str(),nbins,low,hi, "JZB [GeV]", "events", sidebandcut&&cutOSSF&&cutnJets,is_data, luminosity);
267     TH1F *LcorrJZBSBeemm = allsamples.Draw("LcorrJZBSBeemm",("-"+jzb).c_str(),nbins,low,hi, "JZB [GeV]", "events", sidebandcut&&cutOSSF&&cutnJets,is_data, luminosity);
268 buchmann 1.13
269 buchmann 1.17 TH1F *lm4RcorrJZBeemm = allsamples.Draw("lm4RcorrJZBeemm",jzb.c_str(),nbins,low,hi, "JZB [GeV]", "events", cutmass&&cutOSSF&&cutnJets,is_data, luminosity,allsamples.FindSample("LM4"));
270 buchmann 1.13
271 buchmann 1.17 TH1F *Bpred = (TH1F*)LcorrJZBeemm->Clone("Bpred");
272 buchmann 1.13 Bpred->Add(RcorrJZBem,1.0/3);
273     Bpred->Add(LcorrJZBem,-1.0/3);
274     Bpred->Add(RcorrJZBSBem,1.0/3);
275     Bpred->Add(LcorrJZBSBem,-1.0/3);
276     Bpred->Add(RcorrJZBSBeemm,1.0/3);
277     Bpred->Add(LcorrJZBSBeemm,-1.0/3);
278 buchmann 1.1 globalcanvas->cd();
279     globalcanvas->SetLogy(1);
280     Bpred->SetLineColor(kRed);
281     Bpred->SetStats(0);
282     Bpred->GetXaxis()->SetRangeUser(0,high);
283     Bpred->Draw("hist");
284     RcorrJZBeemm->SetMarkerStyle(20);
285     RcorrJZBeemm->Draw("e1x0,same");
286 buchmann 1.13 lm4RcorrJZBeemm->SetLineColor(TColor::GetColor("#088A08"));
287     lm4RcorrJZBeemm->Draw("histo,same");
288 buchmann 1.17 RcorrJZBeemm->SetMarkerSize(DataMarkerSize);
289 buchmann 1.13
290 buchmann 1.12 TLegend *legBpred = make_legend("",0.6,0.5);
291 buchmann 1.1 if(is_data)
292     {
293 buchmann 1.9 vector<TF1*> functions = do_cb_fit_to_plot(Bpred,sigma);
294     functions[0]->Draw("same");functions[1]->Draw("same");functions[2]->Draw("same");
295 buchmann 1.12 legBpred->AddEntry(RcorrJZBeemm,"observed (data)","p");
296 buchmann 1.1 legBpred->AddEntry(Bpred,"predicted (data)","l");
297 buchmann 1.9 legBpred->AddEntry(functions[0],"predicted fit (data)","l");
298     legBpred->AddEntry(functions[1],"stat. uncert.","l");
299 buchmann 1.13 legBpred->AddEntry(lm4RcorrJZBeemm,"LM4","l");
300 buchmann 1.1 legBpred->Draw();
301     CompleteSave(globalcanvas,"Bpred_Data");
302     }
303     else {
304     legBpred->AddEntry(RcorrJZBeemm,"MC true B","l");
305     legBpred->AddEntry(Bpred,"data-driven B","l");
306 buchmann 1.13 legBpred->AddEntry(lm4RcorrJZBeemm,"LM4","l");
307     legBpred->SetY1(0.65);
308 buchmann 1.1 legBpred->Draw();
309 buchmann 1.13
310 buchmann 1.1 CompleteSave(globalcanvas,"Bpred_MC");
311     }
312 buchmann 1.13
313     cout << "Splitting up the different estimates ... " << endl;
314    
315     TH1F *Bpredem = (TH1F*)LcorrJZBeemm->Clone();
316     Bpredem->Add(RcorrJZBem);
317     Bpredem->Add(LcorrJZBem,-1);
318     TH1F *BpredSBem = (TH1F*)LcorrJZBeemm->Clone();
319     BpredSBem->Add(RcorrJZBSBem);
320     Bpred->Add(LcorrJZBSBem,-1);
321     TH1F *BpredSBeemm = (TH1F*)LcorrJZBeemm->Clone();
322 buchmann 1.17 BpredSBeemm->Add(RcorrJZBSBeemm);
323     BpredSBeemm->Add(LcorrJZBSBeemm,-1.0);
324 buchmann 1.13 globalcanvas->cd();
325     globalcanvas->SetLogy(1);
326     Bpredem->SetLineColor(kRed);
327     Bpredem->SetStats(0);
328     Bpredem->GetXaxis()->SetRangeUser(0,high);
329     Bpredem->Draw("hist");
330     BpredSBem->SetLineColor(TColor::GetColor("#0B6138"));
331     BpredSBem->Draw("hist,same");
332     BpredSBeemm->SetLineColor(kBlue);
333     BpredSBeemm->Draw("hist,same");
334     RcorrJZBeemm->SetMarkerStyle(20);
335     RcorrJZBeemm->Draw("e1x0,same");
336 buchmann 1.17 RcorrJZBeemm->SetMarkerSize(DataMarkerSize);
337 buchmann 1.13
338     TLegend *legBpredc = make_legend("",0.6,0.5);
339     if(is_data)
340     {
341     legBpredc->AddEntry(RcorrJZBeemm,"observed (data)","p");
342     legBpredc->AddEntry(Bpredem,"predicted (e#mu method)","l");
343     legBpredc->AddEntry(BpredSBem,"predicted (OF sidebands)","l");
344     legBpredc->AddEntry(BpredSBeemm,"predicted (SF sidebands)","l");
345     legBpredc->Draw();
346     CompleteSave(globalcanvas,"Bpred_Data_comparison");
347     }
348     else {
349     legBpredc->AddEntry(RcorrJZBeemm,"observed (MC)","p");
350     legBpredc->AddEntry(Bpredem,"predicted (e#mu method)","l");
351     legBpredc->AddEntry(BpredSBem,"predicted (OF sidebands)","l");
352     legBpredc->AddEntry(BpredSBeemm,"predicted (SF sidebands)","l");
353     legBpredc->Draw();
354     legBpredc->Draw();
355     CompleteSave(globalcanvas,"Bpred_MC_comparison");
356     }
357     delete RcorrJZBeemm;
358     delete LcorrJZBeemm;
359     delete RcorrJZBem;
360     delete LcorrJZBem;
361     delete RcorrJZBSBem;
362     delete LcorrJZBSBem;
363     delete RcorrJZBSBeemm;
364     delete LcorrJZBSBeemm;
365     delete lm4RcorrJZBeemm;
366 buchmann 1.1 }
367    
368 buchmann 1.11 void do_prediction_plots(string mcjzb, string datajzb, float DataSigma, float MCSigma) {
369     TCanvas *globalcanvas = new TCanvas("globalcanvas","Prediction Canvas");
370 buchmann 1.1 do_prediction_plot(datajzb,globalcanvas,DataSigma,350,data);
371     do_prediction_plot(mcjzb,globalcanvas,MCSigma,300,mc);
372     }
373    
374     void do_ratio_plot(int is_data,vector<float> binning, string jzb, TCanvas *can, float high=-9999) {
375     bool do_data=0;
376     bool dosignal=0;
377     if(is_data==1) do_data=1;
378     if(is_data==2) dosignal=1;
379 buchmann 1.17 TH1F *RcorrJZBeemm = allsamples.Draw("RcorrJZBeemm",jzb.c_str(),binning, "JZB [GeV]", "events", cutmass&&cutOSSF&&cutnJets,do_data, luminosity,dosignal);
380     TH1F *LcorrJZBeemm = allsamples.Draw("LcorrJZBeemm",("-"+jzb).c_str(),binning, "JZB [GeV]", "events", cutmass&&cutOSSF&&cutnJets,do_data, luminosity,dosignal);
381     TH1F *RcorrJZBem = allsamples.Draw("RcorrJZBem",jzb.c_str(),binning, "JZB [GeV]", "events", cutmass&&cutOSOF&&cutnJets,do_data, luminosity,dosignal);
382     TH1F *LcorrJZBem = allsamples.Draw("LcorrJZBem",("-"+jzb).c_str(),binning, "JZB [GeV]", "events", cutmass&&cutOSOF&&cutnJets,do_data, luminosity,dosignal);
383    
384     TH1F *RcorrJZBSBem = allsamples.Draw("RcorrJZBSbem",jzb.c_str(),binning, "JZB [GeV]", "events", sidebandcut&&cutOSOF&&cutnJets,do_data, luminosity,dosignal);
385     TH1F *LcorrJZBSBem = allsamples.Draw("LcorrJZBSbem",("-"+jzb).c_str(),binning, "JZB [GeV]", "events", sidebandcut&&cutOSOF&&cutnJets,do_data, luminosity,dosignal);
386     TH1F *RcorrJZBSBeemm = allsamples.Draw("RcorrJZBSbeemm",jzb.c_str(),binning, "JZB [GeV]", "events", sidebandcut&&cutOSSF&&cutnJets,do_data, luminosity,dosignal);
387     TH1F *LcorrJZBSbeemm = allsamples.Draw("LcorrJZBSbeemm",("-"+jzb).c_str(),binning, "JZB [GeV]", "events", sidebandcut&&cutOSSF&&cutnJets,do_data, luminosity,dosignal);
388 buchmann 1.13
389 buchmann 1.17 TH1F *Bpred = (TH1F*)LcorrJZBeemm->Clone("Bpred");
390 buchmann 1.13 Bpred->Add(RcorrJZBem,1.0/3);
391     Bpred->Add(LcorrJZBem,-1.0/3);
392     Bpred->Add(RcorrJZBSBem,1.0/3);
393     Bpred->Add(LcorrJZBSBem,-1.0/3);
394     Bpred->Add(RcorrJZBSBeemm,1.0/3);
395     Bpred->Add(LcorrJZBSbeemm,-1.0/3);
396 buchmann 1.1 can->cd();
397     can->SetLogy(0);
398     Bpred->SetLineColor(kRed);
399     Bpred->SetStats(0);
400     if(high>0) Bpred->GetXaxis()->SetRangeUser(0,high);
401 buchmann 1.17 TH1F *JZBratioforfitting=(TH1F*)RcorrJZBeemm->Clone("JZBratioforfitting");
402     JZBratioforfitting->Divide(Bpred);
403 buchmann 1.1 TGraphAsymmErrors *JZBratio = histRatio(RcorrJZBeemm,Bpred,is_data,binning);
404 buchmann 1.17
405 buchmann 1.1
406     JZBratio->SetTitle("");
407     JZBratio->GetYaxis()->SetRangeUser(0.0,9.0);
408 buchmann 1.17 // if(is_data==1) JZBratio->GetXaxis()->SetRangeUser(0,350);
409 buchmann 1.1
410     TF1 *pol0 = new TF1("pol0","[0]",0,1000);
411     TF1 *pol0d = new TF1("pol0","[0]",0,1000);
412     // straightline_fit->SetParameter(0,1);
413     JZBratioforfitting->Fit(pol0,"Q0R","",0,30);
414     pol0d->SetParameter(0,pol0->GetParameter(0));
415    
416     JZBratio->GetYaxis()->SetTitle("Observed/Predicted");
417 buchmann 1.17 JZBratio->GetXaxis()->SetTitle("JZB [GeV]");
418 buchmann 1.1 JZBratio->GetYaxis()->SetNdivisions(519);
419     JZBratio->GetYaxis()->SetRangeUser(0.0,9.0);
420 buchmann 1.17 JZBratio->GetYaxis()->CenterTitle();
421     JZBratio->GetXaxis()->CenterTitle();
422     JZBratio->SetMarkerSize(DataMarkerSize);
423 buchmann 1.1 JZBratio->Draw("AP");
424     /////----------------------------
425     TPaveText *writeresult = new TPaveText(0.2,0.78,0.49,0.91,"blNDC");
426     writeresult->SetFillStyle(4000);
427     writeresult->SetFillColor(kWhite);
428     writeresult->SetTextFont(42);
429     ostringstream jzb_agreement_data_text;
430     jzb_agreement_data_text<< setprecision(2) << "mean =" << pol0->GetParameter(0) << " #pm " << setprecision(1) << pol0->GetParError(0);
431     if(is_data==1) fitresultconstdata=pol0->GetParameter(0);// data
432     if(is_data==0) fitresultconstmc=pol0->GetParameter(0); // monte carlo, no signal
433     /* if(is_data) writeresult->AddText("Data closure test");
434     else writeresult->AddText("MC closure test");
435     */
436     writeresult->AddText(jzb_agreement_data_text.str().c_str());
437     writeresult->Draw("same");
438     pol0d->Draw("same");
439     TF1 *topline = new TF1("","1.2",0,1000);
440     TF1 *bottomline = new TF1("","0.6",0,1000);
441     topline->SetLineColor(kBlue);
442     topline->SetLineStyle(2);
443     bottomline->SetLineColor(kBlue);
444     bottomline->SetLineStyle(2);
445     topline->Draw("same");
446     bottomline->Draw("same");
447     TF1 *oneline = new TF1("","1.0",0,1000);
448     oneline->SetLineColor(kBlue);
449     oneline->SetLineStyle(1);
450     oneline->Draw("same");
451 buchmann 1.17 TLegend *phony_leg = make_legend("ratio");//this line is just to have the default CMS Preliminary (...) on the canvas as well.
452     TLegend *leg = new TLegend(0.60,0.5,0.94,0.89);
453 buchmann 1.1 leg->SetTextFont(42);
454 buchmann 1.17 if(is_data==1) leg->SetHeader("Ratio (data)");
455     else leg->SetHeader("Ratio (MC)");
456 buchmann 1.1
457     leg->SetFillStyle(4000);
458     leg->SetFillColor(kWhite);
459     leg->SetTextFont(42);
460     // leg->AddEntry(topline,"+20\% sys envelope","l");
461     leg->AddEntry(JZBratio,"obs/pred","p");
462     leg->AddEntry(oneline,"ratio = 1","l");
463     leg->AddEntry(pol0d,"fit in [0,30] GeV","l");
464     leg->AddEntry(bottomline,"sys. envelope","l");
465     leg->Draw("same");
466     if(is_data==1) CompleteSave(can, "jzb_ratio_data");
467     if(is_data==0) CompleteSave(can, "jzb_ratio_mc");
468     if(is_data==2) CompleteSave(can, "jzb_ratio_mc_BandS");//special case, MC with signal!
469 buchmann 1.17
470 buchmann 1.1 delete RcorrJZBeemm;
471     delete LcorrJZBeemm;
472     delete RcorrJZBem;
473     delete LcorrJZBem;
474 buchmann 1.17
475     delete RcorrJZBSBem;
476     delete LcorrJZBSBem;
477     delete RcorrJZBSBeemm;
478     delete LcorrJZBSbeemm;
479 buchmann 1.1 }
480    
481 buchmann 1.11 void do_ratio_plots(string mcjzb,string datajzb) {
482     TCanvas *globalc = new TCanvas("globalc","Ratio Plot Canvas");
483 buchmann 1.1 globalc->SetLogy(0);
484     vector<float> ratio_binning;
485     ratio_binning.push_back(0);
486     ratio_binning.push_back(5);
487     ratio_binning.push_back(10);
488     ratio_binning.push_back(20);
489     ratio_binning.push_back(50);
490     ratio_binning.push_back(100);
491 buchmann 1.17 //ratio_binning.push_back(350);
492     ratio_binning.push_back(200);
493 buchmann 1.1 ratio_binning.push_back(500);
494    
495     do_ratio_plot(mc,ratio_binning,mcjzb,globalc);
496     do_ratio_plot(data,ratio_binning,datajzb,globalc);
497     do_ratio_plot(mcwithsignal,ratio_binning,mcjzb,globalc);
498     }
499    
500 buchmann 1.8 string give_jzb_expression(float peak, int type) {
501 buchmann 1.1 stringstream val;
502 buchmann 1.8 if(type==data) {
503     if(peak<0) val << jzbvariabledata << "+" << TMath::Abs(peak);
504     if(peak>0) val << jzbvariabledata << "-" << TMath::Abs(peak);
505     if(peak==0) val << jzbvariabledata;
506     }
507     if(type==mc) {
508     if(peak<0) val << jzbvariablemc << "+" << TMath::Abs(peak);
509     if(peak>0) val << jzbvariablemc << "-" << TMath::Abs(peak);
510     if(peak==0) val << jzbvariablemc;
511     }
512 buchmann 1.1 return val.str();
513     }
514    
515     string centralupdownname(int num) {
516     if (num==0) return "central";
517     if (num==1) return "down";
518     if (num==2) return "up";
519     return "centralupdownnameERROR";
520     }
521    
522     string dataormc(int isdata) {
523     if(isdata) return "Data";
524     else return "MC";
525     }
526    
527     int histocounter=0;
528     string give_histo_number(string basename="", int isdata=-1, int centralcounter=-1) {
529     histocounter++;
530     stringstream histocounternum;
531     if(isdata==-1) {
532     if(basename=="") histocounternum << histocounter;
533     else histocounternum << basename << "_" << histocounter;
534     }
535     else {
536     histocounternum << basename << "_" << dataormc(isdata) << "_" << centralupdownname(centralcounter);
537     }
538     return histocounternum.str();
539     }
540    
541     int central=0;
542     int down=1;
543     int up=2;
544    
545 buchmann 1.11 void lepton_comparison_plots() {
546     TCanvas *can = new TCanvas("can","Lepton Comparison Canvas");
547 buchmann 1.1 can->SetLogy(1);
548 buchmann 1.17 TH1F *eemc = allsamples.Draw("eemc","mll",50,50,150, "mll [GeV]", "events", cutOSSF&&cutnJets&&"(id1==0)",mc, luminosity,allsamples.FindSample("DYJetsToLL"));
549     TH1F *mmmc = allsamples.Draw("mmmc","mll",50,50,150, "mll [GeV]", "events", cutOSSF&&cutnJets&&"(id1==1)",mc, luminosity,allsamples.FindSample("DYJetsToLL"));
550 buchmann 1.1 eemc->SetLineColor(kBlue);
551     mmmc->SetLineColor(kRed);
552     eemc->SetMinimum(0.1);
553     eemc->SetMaximum(10*eemc->GetMaximum());
554     eemc->Draw("histo");
555     mmmc->Draw("histo,same");
556     TLegend *leg = make_legend();
557 buchmann 1.17 leg->AddEntry(eemc,"ZJets->ee (MC)","l");
558     leg->AddEntry(mmmc,"ZJets->#mu#mu (MC)","l");
559 buchmann 1.11 leg->Draw("same");
560 buchmann 1.1 CompleteSave(can, "mll_effratio_mc");
561    
562 buchmann 1.17 TH1F *eed = allsamples.Draw("eed","mll",50,50,150, "mll [GeV]", "events", cutOSSF&&cutnJets&&"(id1==0)",data, luminosity);
563     TH1F *mmd = allsamples.Draw("mmd","mll",50,50,150, "mll [GeV]", "events", cutOSSF&&cutnJets&&"(id1==1)",data, luminosity);
564 buchmann 1.1 eed->SetLineColor(kBlue);
565     mmd->SetLineColor(kRed);
566     eed->SetMinimum(0.1);
567     eed->SetMaximum(10*eed->GetMaximum());
568     eed->Draw("histo");
569     mmd->Draw("histo,same");
570     TLegend *leg2 = make_legend();
571 buchmann 1.17 leg2->AddEntry(eed,"ZJets->ee (data)","l");
572     leg2->AddEntry(mmd,"ZJets->#mu#mu (data)","l");
573 buchmann 1.1 leg2->Draw();
574     CompleteSave(can, "mll_effratio_data");
575    
576 buchmann 1.17 TH1F *jeed = allsamples.Draw("jeed",jzbvariabledata, 90,-100,350, "JZB [GeV]", "events", cutOSSF&&cutnJets&&"(id1==0)",data, luminosity);
577     TH1F *jmmd = allsamples.Draw("jmmd",jzbvariabledata, 90,-100,350, "JZB [GeV]", "events", cutOSSF&&cutnJets&&"(id1==1)",data, luminosity);
578     TH1F *jeemmd = allsamples.Draw("jeemmd",jzbvariabledata,90,-100,350, "JZB [GeV]", "events", cutOSSF&&cutnJets,data, luminosity);
579 buchmann 1.11 cout << "ee : " << jeed->GetMean() << "+/-" << jeed->GetMeanError() << endl;
580     cout << "ee : " << jmmd->GetMean() << "+/-" << jmmd->GetMeanError() << endl;
581     cout << "eemd : " << jeemmd->GetMean() << "+/-" << jeemmd->GetMeanError() << endl;
582 buchmann 1.1 jeemmd->SetLineColor(kBlack);
583     jeemmd->SetMarkerStyle(25);
584     jeed->SetLineColor(kBlue);
585     jmmd->SetLineColor(kRed);
586     jeed->SetMinimum(0.1);
587     jeed->SetMaximum(10*eed->GetMaximum());
588     jeemmd->DrawNormalized();
589     jeed->DrawNormalized("histo,same");
590     jmmd->DrawNormalized("histo,same");
591     jeemmd->DrawNormalized("same");
592     TLegend *jleg2 = make_legend("Data");
593     jleg2->AddEntry(jeemmd,"ee and #mu#mu","p");
594     jleg2->AddEntry(jeed,"ee","l");
595     jleg2->AddEntry(jmmd,"#mu#mu","l");
596     jleg2->Draw();
597     CompleteSave(can,"jzb_effratio_data");
598    
599 buchmann 1.17 TH1F *zjeed = allsamples.Draw("zjeed",jzbvariabledata, 90,-100,350, "JZB [GeV]", "events", cutOSSF&&cutnJets&&"(id1==0)",mc, luminosity,allsamples.FindSample("DYJetsToLL_TuneZ2"));
600     TH1F *zjmmd = allsamples.Draw("zjmmd",jzbvariabledata, 90,-100,350, "JZB [GeV]", "events", cutOSSF&&cutnJets&&"(id1==1)",mc, luminosity,allsamples.FindSample("DYJetsToLL_TuneZ2"));
601     TH1F *zjeemmd = allsamples.Draw("zjeemmd",jzbvariabledata,90,-100,350, "JZB [GeV]", "events", cutOSSF&&cutnJets,mc, luminosity,allsamples.FindSample("DYJetsToLL_TuneZ2"));
602 buchmann 1.11 cout << "Z+Jets ee : " << zjeed->GetMean() << "+/-" << zjeed->GetMeanError() << endl;
603     cout << "Z+Jets ee : " << zjmmd->GetMean() << "+/-" << zjmmd->GetMeanError() << endl;
604     cout << "Z+Jets eemd : " << zjeemmd->GetMean() << "+/-" << zjeemmd->GetMeanError() << endl;
605     zjeemmd->SetLineColor(kBlack);
606     zjeemmd->SetMarkerStyle(25);
607     zjeed->SetLineColor(kBlue);
608     zjmmd->SetLineColor(kRed);
609     zjeed->SetMinimum(0.1);
610     zjeed->SetMaximum(10*eed->GetMaximum());
611     zjeemmd->DrawNormalized();
612     zjeed->DrawNormalized("histo,same");
613     zjmmd->DrawNormalized("histo,same");
614     zjeemmd->DrawNormalized("same");
615     TLegend *zjleg2 = make_legend("Data");
616     zjleg2->AddEntry(jeemmd,"ee and #mu#mu","p");
617     zjleg2->AddEntry(jeed,"ee","l");
618     zjleg2->AddEntry(jmmd,"#mu#mu","l");
619     zjleg2->Draw();
620     CompleteSave(can,"jzb_effratio_ZJets");
621    
622 buchmann 1.17 TH1F *ld = allsamples.Draw("ld","mll",50,50,150, "mll [GeV]", "events", cutOSSF&&cutnJets,data, luminosity);
623 buchmann 1.1 ld->DrawNormalized("e1");
624     eed->DrawNormalized("histo,same");
625     mmd->DrawNormalized("histo,same");
626     TLegend *leg3 = make_legend();
627     leg3->AddEntry(ld,"ZJets->ll (data)","p");
628 buchmann 1.17 leg3->AddEntry(eed,"ZJets->ee (data)","l");
629     leg3->AddEntry(mmd,"ZJets->#mu#mu (data)","l");
630 buchmann 1.1 leg3->Draw();
631     CompleteSave(can,"mll_effratio_data__all_compared");
632     /*
633 buchmann 1.17 TH1F *jzbld = allsamples.Draw("jzbld",jzbvariable,75,-150,150, "JZB [GeV]", "events", cutmass&&cutOSSF&&cutnJets,data, luminosity);
634     TH1F *jzbemd = allsamples.Draw("jzbemd",jzbvariable,75,-150,150, "JZB [GeV]", "events", cutmass&&cutOSOF&&cutnJets,data, luminosity);
635 buchmann 1.1 */
636 buchmann 1.17 TH1F *jzbld = allsamples.Draw("jzbld",jzbvariabledata,92,-110,350, "JZB [GeV]", "events", cutmass&&cutOSSF&&cutnJets,data, luminosity);
637     TH1F *jzbemd = allsamples.Draw("jzbemd",jzbvariabledata,92,-110,350, "JZB [GeV]", "events", cutmass&&cutOSOF&&cutnJets,data, luminosity);
638 buchmann 1.1 jzbld->SetMarkerColor(kBlack);
639     jzbld->SetMarkerStyle(26);
640     jzbemd->SetMarkerStyle(25);
641     jzbemd->SetMarkerColor(kRed);
642     jzbemd->SetLineColor(kRed);
643     jzbld->SetMinimum(0.35);
644     jzbld->Draw("e1");
645     jzbemd->Draw("e1,same");
646     TLegend *leg4 = make_legend("Data");
647     leg4->AddEntry(jzbld,"ee or #mu#mu","p");
648     leg4->AddEntry(jzbemd,"e#mu","p");
649     leg4->Draw();
650     CompleteSave(can,"jzb_eemumu_emu_data");
651    
652 buchmann 1.17 TH1F *ttbarjzbld = allsamples.Draw("ttbarjzbld",jzbvariablemc,110,-150,400, "JZB [GeV]", "events", cutmass&&cutOSSF&&cutnJets,data, luminosity,allsamples.FindSample("TTJet"));
653     TH1F *ttbarjzbemd = allsamples.Draw("ttbarjzbemd",jzbvariablemc,110,-150,400, "JZB [GeV]", "events", cutmass&&cutOSOF&&cutnJets,data, luminosity,allsamples.FindSample("TTJet"));
654 buchmann 1.1 ttbarjzbld->SetLineColor(allsamples.GetColor("TTJet"));
655     ttbarjzbemd->SetLineColor(allsamples.GetColor("TTJet"));
656     ttbarjzbld->SetLineWidth(2);
657     ttbarjzbemd->SetLineWidth(2);
658     ttbarjzbld->Draw("histo");
659     ttbarjzbemd->SetLineStyle(2);
660     ttbarjzbemd->Draw("histo,same");
661     TLegend *leg5 = make_legend();
662 buchmann 1.17 leg5->AddEntry(ttbarjzbld,"t#bar{t}->(ee or #mu#mu)","l");
663     leg5->AddEntry(ttbarjzbemd,"t#bar{t}->e#mu","l");
664 buchmann 1.1 leg5->Draw();
665     CompleteSave(can,"ttbar_emu_mc");
666    
667    
668    
669     }
670    
671     bool is_OF(TCut cut) {
672     string scut = (const char*) cut;
673     if((int)scut.find("id1!=id2")>-1) return true;
674     if((int)scut.find("id1==id2")>-1) return false;
675     return false;
676     }
677    
678     void draw_pure_jzb_histo(TCut cut,string variable,string savename, TCanvas *can,float min,float max,int nbins) {
679     can->cd();
680     can->SetLogy(1);
681 buchmann 1.17 string xlabel="JZB [GeV]";
682 buchmann 1.1
683     TH1F *datahisto = allsamples.Draw("datahisto",variable,nbins,min,max, xlabel, "events",cut,data,luminosity);
684     THStack mcstack = allsamples.DrawStack("mcstack",variable,nbins,min,max, xlabel, "events",cut,mc,luminosity);
685    
686     datahisto->SetMinimum(0.1);
687 buchmann 1.12 //if(savename=="jzb_OSOF") datahisto->SetMaximum(10);
688 buchmann 1.17 datahisto->SetMarkerSize(DataMarkerSize);
689 buchmann 1.1 datahisto->Draw("e1");
690     mcstack.Draw("same");
691     datahisto->Draw("same,e1");
692    
693     TLegend *leg;
694     if(is_OF(cut)) leg = allsamples.allbglegend("Opposite Flavor",datahisto);
695     else leg = allsamples.allbglegend("Same Flavor",datahisto);
696     leg->Draw();
697     string write_cut = decipher_cut(cut,"");
698 buchmann 1.16 TText *writeline1 = write_cut_on_canvas(write_cut.c_str());
699 buchmann 1.1 writeline1->SetTextSize(0.035);
700     writeline1->Draw();
701     CompleteSave(can, ("jzb/"+savename));
702    
703     datahisto->Delete();
704     mcstack.Delete();
705     }
706    
707     Double_t GausR(Double_t *x, Double_t *par) {
708     return gRandom->Gaus(x[0],par[0]);
709     }
710    
711 buchmann 1.11 void jzb_plots(string mcjzb, string datajzb) {
712     TCanvas *can = new TCanvas("can","JZB Plots Canvas");
713 buchmann 1.1 float max=350;
714     float min=-120;
715     int nbins=(max-min)/5.0; // we want 5 GeV/bin
716    
717     stringstream ss;
718     // ss << "GausRandom(" << datajzb << ",0)";
719     draw_pure_jzb_histo(cutOSSF&&cutnJets&&cutmass,datajzb,"jzb_OSSF",can,min,max,nbins);
720     draw_pure_jzb_histo(cutOSOF&&cutnJets&&cutmass,datajzb,"jzb_OSOF",can,min,max,nbins);
721 buchmann 1.12 draw_pure_jzb_histo(cutOSSF&&cutnJets&&sidebandcut,datajzb,"jzb_OSSF_SB",can,min,max,nbins);
722     draw_pure_jzb_histo(cutOSOF&&cutnJets&&sidebandcut,datajzb,"jzb_OSOF_SB",can,min,max,nbins);
723 buchmann 1.1 draw_pure_jzb_histo(cutOSSF&&cutnJets&&cutmass,datajzb,"jzb_OSSF_rebin",can,min,max,nbins/4.0);
724     draw_pure_jzb_histo(cutOSOF&&cutnJets&&cutmass,datajzb,"jzb_OSOF_rebin",can,min,max,nbins/4.0);
725 buchmann 1.12 draw_pure_jzb_histo(cutOSSF&&cutnJets&&sidebandcut,datajzb,"jzb_OSSF_SB_rebin",can,min,max,nbins/4.0);
726     draw_pure_jzb_histo(cutOSOF&&cutnJets&&sidebandcut,datajzb,"jzb_OSOF_SB_rebin",can,min,max,nbins/4.0);
727 buchmann 1.1 }
728    
729     void calculate_all_yields(string mcdrawcommand,vector<float> jzb_cuts) {
730     cout << "Calculating background yields in MC:" << endl;
731     jzb_cuts.push_back(14000);
732 buchmann 1.17 TH1F *allbgs = allsamples.Draw("allbgs",jzbvariablemc,jzb_cuts, "JZB [GeV]", "events", cutmass&&cutOSSF&&cutnJets,mc,luminosity);
733 buchmann 1.1 float cumulative=0;
734     for(int i=allbgs->GetNbinsX();i>=1;i--) {
735     cumulative+=allbgs->GetBinContent(i);
736     cout << "Above " << allbgs->GetBinLowEdge(i) << " GeV/c : " << cumulative << endl;
737     }
738     }
739    
740     void rediscover_the_top(string mcjzb, string datajzb) {
741     cout << "Hi! today we are going to (try to) rediscover the top!" << endl;
742     TCanvas *c3 = new TCanvas("c3","c3");
743     c3->SetLogy(1);
744     vector<float> binning;
745     //binning=allsamples.get_optimal_binsize(mcjzb,cutmass&&cutOSSF&&cutnJets,20,50,800);
746     /*
747     binning.push_back(50);
748     binning.push_back(100);
749     binning.push_back(150);
750     binning.push_back(200);
751     binning.push_back(500);
752    
753    
754 buchmann 1.17 TH1F *dataprediction = allsamples.Draw("dataprediction", "-"+datajzb, binning, "JZB [GeV]", "events", cutmass&&cutOSSF&&cutnJets,data, luminosity);
755     TH1F *puresignal = allsamples.Draw("puresignal", datajzb, binning, "JZB [GeV]", "events", cutmass&&cutOSOF&&cutnJets,data, luminosity);
756     // TH1F *puresignal = allsamples.Draw("puresignal", mcjzb, binning, "JZB [GeV]", "events", cutmass&&cutOSSF&&cutnJets,mc, luminosity,allsamples.FindSample("TTJets"));
757     TH1F *observed = allsamples.Draw("observed", datajzb,binning, "JZB [GeV]", "events", cutmass&&cutOSSF&&cutnJets,data,luminosity);
758 buchmann 1.1 /*
759     ofstream myfile;
760     TH1F *ratio = (TH1F*)observed->Clone();
761     ratio->Divide(dataprediction);
762     ratio->GetYaxis()->SetTitle("Ratio obs/pred");
763     ratio->Draw();
764     c3->SaveAs("testratio.png");
765     myfile.open ("ShapeFit_log.txt");
766     establish_upper_limits(observed,dataprediction,puresignal,"LM4",myfile);
767     myfile.close();
768     */
769    
770    
771 buchmann 1.6 int nbins=100;
772 buchmann 1.1 float low=0;
773 buchmann 1.6 float hi=500;
774 buchmann 1.1 TCanvas *c4 = new TCanvas("c4","c4",900,900);
775     c4->Divide(2,2);
776     c4->cd(1);
777     c4->cd(1)->SetLogy(1);
778 buchmann 1.17 TH1F *datapredictiont = allsamples.Draw("datapredictiont", "-"+datajzb, nbins,low,hi, "JZB [GeV]", "events", cutmass&&cutOSSF&&cutnJets,data, luminosity);
779     TH1F *datapredictiono = allsamples.Draw("datapredictiono", "-"+datajzb, nbins,low,hi, "JZB [GeV]", "events", cutmass&&cutOSOF&&cutnJets,data, luminosity);
780 buchmann 1.6 datapredictiont->Add(datapredictiono,-1);
781 buchmann 1.1 cout << "Second way of doing this !!!! Analytical shape to the left :-D" << endl;
782 buchmann 1.9 vector<TF1*> functions = do_cb_fit_to_plot(datapredictiont,10);
783 buchmann 1.1 datapredictiont->SetMarkerColor(kRed);
784     datapredictiont->SetLineColor(kRed);
785     datapredictiont->Draw();
786 buchmann 1.9 functions[1]->Draw("same");
787 buchmann 1.6 TText *title1 = write_title("Top Background Prediction (JZB<0, with osof subtr)");
788 buchmann 1.1 title1->Draw();
789    
790     c4->cd(2);
791     c4->cd(2)->SetLogy(1);
792 buchmann 1.17 TH1F *observedt = allsamples.Draw("observedt", datajzb, nbins,low,hi, "JZB [GeV]", "events", cutmass&&cutOSSF&&cutnJets,data, luminosity);
793 buchmann 1.1 observedt->Draw();
794     datapredictiont->Draw("histo,same");
795 buchmann 1.9 functions[1]->Draw("same");
796 buchmann 1.6 TText *title2 = write_title("Observed and predicted background");
797 buchmann 1.1 title2->Draw();
798    
799     c4->cd(3);
800     c4->cd(3)->SetLogy(1);
801     // TH1F *ratio = (TH1F*)observedt->Clone();
802 buchmann 1.6
803 buchmann 1.1 TH1F *analytical_background_prediction= new TH1F("analytical_background_prediction","",nbins,low,hi);
804     for(int i=0;i<=nbins;i++) {
805 buchmann 1.9 analytical_background_prediction->SetBinContent(i+1,functions[1]->Eval(((hi-low)/((float)nbins))*(i+0.5)));
806     analytical_background_prediction->SetBinError(i+1,TMath::Sqrt(functions[1]->Eval(((hi-low)/((float)nbins))*(i+0.5))));
807 buchmann 1.1 }
808 buchmann 1.17 analytical_background_prediction->GetYaxis()->SetTitle("JZB [GeV]");
809 buchmann 1.1 analytical_background_prediction->GetYaxis()->CenterTitle();
810     TH1F *analyticaldrawonly = (TH1F*)analytical_background_prediction->Clone();
811     analytical_background_prediction->SetFillColor(TColor::GetColor("#3399FF"));
812     analytical_background_prediction->SetMarkerSize(0);
813     analytical_background_prediction->Draw("e5");
814     analyticaldrawonly->Draw("histo,same");
815 buchmann 1.9 functions[1]->Draw("same");
816 buchmann 1.1 TText *title3 = write_title("Analytical bg pred histo");
817     title3->Draw();
818    
819     c4->cd(4);
820     // c4->cd(4)->SetLogy(1);
821     vector<float> ratio_binning;
822     ratio_binning.push_back(0);
823     ratio_binning.push_back(5);
824     ratio_binning.push_back(10);
825     ratio_binning.push_back(20);
826     ratio_binning.push_back(50);
827 buchmann 1.6 // ratio_binning.push_back(60);
828     /*
829     ratio_binning.push_back(51);
830     ratio_binning.push_back(52);
831     ratio_binning.push_back(53);
832     ratio_binning.push_back(54);
833     ratio_binning.push_back(55);
834     ratio_binning.push_back(56);
835     ratio_binning.push_back(57);
836     ratio_binning.push_back(58);
837     ratio_binning.push_back(59);
838     ratio_binning.push_back(60);
839     // ratio_binning.push_back(70);*/
840     // ratio_binning.push_back(80);
841     // ratio_binning.push_back(90);
842     ratio_binning.push_back(80);
843     // ratio_binning.push_back(110);
844 buchmann 1.1 ratio_binning.push_back(500);
845    
846 buchmann 1.17 TH1F *observedtb = allsamples.Draw("observedtb", datajzb, ratio_binning, "JZB [GeV]", "events", cutmass&&cutOSSF&&cutnJets,data, luminosity);
847     TH1F *datapredictiontb = allsamples.Draw("datapredictiontb", "-"+datajzb, ratio_binning, "JZB [GeV]", "events", cutmass&&cutOSSF&&cutnJets,data, luminosity);
848     TH1F *datapredictiontbo = allsamples.Draw("datapredictiontbo", "-"+datajzb, ratio_binning, "JZB [GeV]", "events", cutmass&&cutOSOF&&cutnJets,data, luminosity);
849 buchmann 1.6 datapredictiontb->Add(datapredictiontbo,-1);
850 buchmann 1.17 TH1F *analytical_background_predictionb = allsamples.Draw("analytical_background_predictionb",datajzb, ratio_binning, "JZB [GeV]", "events", cutmass&&cutOSSF&&cutnJets&&"mll<2",data, luminosity);
851 buchmann 1.1 for(int i=0;i<=ratio_binning.size();i++) {
852 buchmann 1.9 analytical_background_predictionb->SetBinContent(i+1,functions[1]->Eval(analytical_background_predictionb->GetBinCenter(i)));
853     analytical_background_predictionb->SetBinError(i+1,TMath::Sqrt(functions[1]->Eval(analytical_background_predictionb->GetBinCenter(i))));
854 buchmann 1.1 }
855    
856     TH1F *ratio = (TH1F*) observedtb->Clone();
857     ratio->Divide(datapredictiontb);
858 buchmann 1.6
859     for (int i=0;i<=ratio_binning.size();i++) {
860     cout << observedtb->GetBinLowEdge(i+1) << ";"<<observedtb->GetBinContent(i+1) << ";" << datapredictiontb->GetBinContent(i+1) << " --> " << ratio->GetBinContent(i+1) << "+/-" << ratio->GetBinError(i+1) << endl;
861     }
862    
863     // ratio->Divide(datapredictiontb);
864 buchmann 1.1 // ratio->Divide(analytical_background_predictionb);
865     // TGraphAsymmErrors *JZBratio= histRatio(observedtb,analytical_background_predictionb,data,ratio_binning);
866     // ratio->Divide(analytical_background_prediction);
867     // ratio->Divide(datapredictiont);
868     // ratio->GetYaxis()->SetTitle("obs/pred");
869     // JZBratio->Draw("AP");
870     ratio->GetYaxis()->SetRangeUser(0,10);
871     ratio->Draw();
872     //analytical_background_predictionb->Draw();
873     // JZBratio->SetTitle("");
874     TText *title4 = write_title("Ratio of observed to predicted");
875     title4->Draw();
876    
877     // CompleteSave(c4,"test/ttbar_discovery_dataprediction___analytical_function");
878     CompleteSave(c4,"test/ttbar_discovery_dataprediction__analytical__new_binning_one_huge_bin_from_80");
879    
880    
881    
882    
883    
884     }
885    
886     void calculate_upper_limits(string mcjzb, string datajzb) {
887 buchmann 1.11 write_warning("calculate_upper_limits","Upper limit calculation temporarily deactivated");
888     // write_warning("calculate_upper_limits","Calculation of SUSY upper limits has been temporarily suspended in favor of top discovery");
889     // rediscover_the_top(mcjzb,datajzb);
890 buchmann 1.6 /*
891 buchmann 1.1 TCanvas *c3 = new TCanvas("c3","c3");
892     c3->SetLogy(1);
893     vector<float> binning;
894     //binning=allsamples.get_optimal_binsize(mcjzb,cutmass&&cutOSSF&&cutnJets,20,50,800);
895     binning.push_back(50);
896     binning.push_back(100);
897     binning.push_back(150);
898     binning.push_back(200);
899     binning.push_back(500);
900 buchmann 1.17 TH1F *datapredictiona = allsamples.Draw("datapredictiona", "-"+datajzb, binning, "JZB [GeV]", "events", cutmass&&cutOSSF&&cutnJets,mc, luminosity);
901     TH1F *datapredictionb = allsamples.Draw("datapredictionb", "-"+datajzb, binning, "JZB [GeV]", "events", cutmass&&cutOSOF&&cutnJets,mc, luminosity);
902     TH1F *datapredictionc = allsamples.Draw("datapredictionc", datajzb, binning, "JZB [GeV]", "events", cutmass&&cutOSOF&&cutnJets,mc, luminosity);
903 buchmann 1.5 TH1F *dataprediction = (TH1F*)datapredictiona->Clone();
904 buchmann 1.1 dataprediction->Add(datapredictionb,-1);
905     dataprediction->Add(datapredictionc);
906 buchmann 1.17 TH1F *puresignal = allsamples.Draw("puresignal", mcjzb, binning, "JZB [GeV]", "events", cutmass&&cutOSSF&&cutnJets,mc, luminosity,allsamples.FindSample("LM4"));
907     TH1F *signalpred = allsamples.Draw("signalpred", "-"+mcjzb, binning, "JZB [GeV]", "events", cutmass&&cutOSSF&&cutnJets,mc, luminosity,allsamples.FindSample("LM4"));
908     TH1F *signalpredlo = allsamples.Draw("signalpredlo", "-"+mcjzb, binning, "JZB [GeV]", "events", cutmass&&cutOSOF&&cutnJets,mc, luminosity,allsamples.FindSample("LM4"));
909     TH1F *signalpredro = allsamples.Draw("signalpredro", mcjzb, binning, "JZB [GeV]", "events", cutmass&&cutOSOF&&cutnJets,mc, luminosity,allsamples.FindSample("LM4"));
910     TH1F *puredata = allsamples.Draw("puredata", datajzb,binning, "JZB [GeV]", "events", cutmass&&cutOSSF&&cutnJets,data,luminosity);
911 buchmann 1.5 signalpred->Add(signalpredlo,-1);
912     signalpred->Add(signalpredro);
913     puresignal->Add(signalpred,-1);//subtracting signal contamination
914 buchmann 1.1 ofstream myfile;
915     myfile.open ("ShapeFit_log.txt");
916     establish_upper_limits(puredata,dataprediction,puresignal,"LM4",myfile);
917     myfile.close();
918 buchmann 1.6 */
919 buchmann 1.1 }
920    
921     void susy_scan_axis_labeling(TH2F *histo) {
922     histo->GetXaxis()->SetTitle("#Chi_{2}^{0}-LSP");
923     histo->GetXaxis()->CenterTitle();
924     histo->GetYaxis()->SetTitle("m_{#tilde{q}}");
925     histo->GetYaxis()->CenterTitle();
926     }
927    
928     void scan_susy_space(string mcjzb, string datajzb) {
929     TCanvas *c3 = new TCanvas("c3","c3");
930     vector<float> binning;
931     binning=allsamples.get_optimal_binsize(mcjzb,cutmass&&cutOSSF&&cutnJets,20,50,800);
932     /*
933     binning.push_back(50);
934     binning.push_back(75);
935     binning.push_back(100);
936     binning.push_back(150);
937     binning.push_back(200);
938     binning.push_back(500);
939     */
940     float arrbinning[binning.size()];
941     for(int i=0;i<binning.size();i++) arrbinning[i]=binning[i];
942 buchmann 1.17 TH1F *puredata = allsamples.Draw("puredata", datajzb,binning, "JZB [GeV]", "events", cutmass&&cutOSSF&&cutnJets,data,luminosity);
943     puredata->SetMarkerSize(DataMarkerSize);
944     TH1F *allbgs = allsamples.Draw("allbgs", "-"+datajzb,binning, "JZB [GeV]", "events", cutmass&&cutOSSF&&cutnJets,data,luminosity);
945     TH1F *allbgsb = allsamples.Draw("allbgsb", "-"+datajzb,binning, "JZB [GeV]", "events", cutmass&&cutOSOF&&cutnJets,data,luminosity);
946     TH1F *allbgsc = allsamples.Draw("allbgsc", datajzb,binning, "JZB [GeV]", "events", cutmass&&cutOSOF&&cutnJets,data,luminosity);
947 buchmann 1.2 allbgs->Add(allbgsb,-1);
948     allbgs->Add(allbgsc);
949 buchmann 1.1 int ndata=puredata->Integral();
950     ofstream myfile;
951     myfile.open ("susyscan_log.txt");
952     TFile *susyscanfile = new TFile("/scratch/fronga/SMS/T5z_SqSqToQZQZ_38xFall10.root");
953     TTree *suevents = (TTree*)susyscanfile->Get("events");
954     TH2F *exclusionmap = new TH2F("exclusionmap","",20,0,500,20,0,1000);
955     TH2F *exclusionmap1s = new TH2F("exclusionmap1s","",20,0,500,20,0,1000);
956     TH2F *exclusionmap2s = new TH2F("exclusionmap2s","",20,0,500,20,0,1000);
957     TH2F *exclusionmap3s = new TH2F("exclusionmap3s","",20,0,500,20,0,1000);
958    
959     susy_scan_axis_labeling(exclusionmap);
960     susy_scan_axis_labeling(exclusionmap1s);
961     susy_scan_axis_labeling(exclusionmap2s);
962     susy_scan_axis_labeling(exclusionmap3s);
963    
964     Int_t MyPalette[100];
965     Double_t r[] = {0., 0.0, 1.0, 1.0, 1.0};
966     Double_t g[] = {0., 0.0, 0.0, 1.0, 1.0};
967     Double_t b[] = {0., 1.0, 0.0, 0.0, 1.0};
968     Double_t stop[] = {0., .25, .50, .75, 1.0};
969     Int_t FI = TColor::CreateGradientColorTable(5, stop, r, g, b, 100);
970     for (int i=0;i<100;i++) MyPalette[i] = FI+i;
971    
972     gStyle->SetPalette(100, MyPalette);
973    
974     for(int m23=50;m23<500;m23+=25) {
975     for (int m0=(2*(m23-50)+150);m0<=1000;m0+=50)
976     {
977     c3->cd();
978     stringstream drawcondition;
979     drawcondition << "pfJetGoodNum>=3&&(TMath::Abs(masses[0]-"<<m0<<")<10&&TMath::Abs(masses[2]-masses[3]-"<<m23<<")<10)&&mll>5&&id1==id2";
980     TH1F *puresignal = new TH1F("puresignal","puresignal",binning.size()-1,arrbinning);
981 buchmann 1.4 TH1F *puresignall= new TH1F("puresignall","puresignal",binning.size()-1,arrbinning);
982     stringstream drawvar,drawvar2;
983 buchmann 1.1 drawvar<<mcjzb<<">>puresignal";
984 buchmann 1.4 drawvar2<<"-"<<mcjzb<<">>puresignall";
985 buchmann 1.1 suevents->Draw(drawvar.str().c_str(),drawcondition.str().c_str());
986 buchmann 1.4 suevents->Draw(drawvar2.str().c_str(),drawcondition.str().c_str());
987 buchmann 1.1 if(puresignal->Integral()<60) {
988     delete puresignal;
989     continue;
990     }
991 buchmann 1.4 puresignal->Add(puresignall,-1);//we need to correct for the signal contamination - we effectively only see (JZB>0)-(JZB<0) !!
992 buchmann 1.1 puresignal->Scale(ndata/(20*puresignal->Integral()));//normalizing it to 5% of the data
993     stringstream saveas;
994     saveas<<"Model_Scan/m0_"<<m0<<"__m23_"<<m23;
995 buchmann 1.5 cout << "PLEASE KEEP IN MIND THAT SIGNAL CONTAMINATION IS NOT REALLY TAKEN CARE OF YET DUE TO LOW STATISTICS! SHOULD BE SOMETHING LIKE THIS : "<< endl;
996 buchmann 1.17 // TH1F *signalpredlo = allsamples.Draw("signalpredlo", "-"+mcjzb, binning, "JZB [GeV]", "events", cutmass&&cutOSOF&&cutnJets,mc, luminosity,allsamples.FindSample("LM4"));
997     // TH1F *signalpredro = allsamples.Draw("signalpredro", mcjzb, binning, "JZB [GeV]", "events", cutmass&&cutOSOF&&cutnJets,mc, luminosity,allsamples.FindSample("LM4"));
998     // TH1F *puredata = allsamples.Draw("puredata", datajzb,binning, "JZB [GeV]", "events", cutmass&&cutOSSF&&cutnJets,data,luminosity);
999 buchmann 1.5 // signalpred->Add(signalpredlo,-1);
1000     // signalpred->Add(signalpredro);
1001     // puresignal->Add(signalpred,-1);//subtracting signal contamination
1002     //---------------------
1003 buchmann 1.1 // cout << "(m0,m23)=("<<m0<<","<<m23<<") contains " << puresignal->Integral() << endl;
1004 buchmann 1.17 // TH1F *puresignal = allsamples.Draw("puresignal",mcjzb, binning, "JZB [GeV]", "events", cutmass&&cutOSSF&&cutnJets,mc, luminosity,allsamples.FindSample("LM4"));
1005 buchmann 1.1 vector<float> results=establish_upper_limits(puredata,allbgs,puresignal,saveas.str(),myfile);
1006     if(results.size()==0) {
1007     delete puresignal;
1008     continue;
1009     }
1010     exclusionmap->Fill(m23,m0,results[0]);
1011     exclusionmap1s->Fill(m23,m0,results[1]);
1012     exclusionmap2s->Fill(m23,m0,results[2]);
1013     exclusionmap3s->Fill(m23,m0,results[3]);
1014     delete puresignal;
1015     cout << "(m0,m23)=("<<m0<<","<<m23<<") : 3 sigma at " << results[3] << endl;
1016     }
1017     }//end of model scan for loop
1018    
1019     cout << "Exclusion Map contains" << exclusionmap->Integral() << " (integral) and entries: " << exclusionmap->GetEntries() << endl;
1020     c3->cd();
1021     exclusionmap->Draw("CONTZ");
1022     CompleteSave(c3,"Model_Scan/CONT/Model_Scan_Mean_values");
1023     exclusionmap->Draw("COLZ");
1024     CompleteSave(c3,"Model_Scan/COL/Model_Scan_Mean_values");
1025    
1026     exclusionmap1s->Draw("CONTZ");
1027     CompleteSave(c3,"Model_Scan/CONT/Model_Scan_1sigma_values");
1028     exclusionmap1s->Draw("COLZ");
1029     CompleteSave(c3,"Model_Scan/COL/Model_Scan_1sigma_values");
1030    
1031     exclusionmap2s->Draw("CONTZ");
1032     CompleteSave(c3,"Model_Scan/CONT/Model_Scan_2sigma_values");
1033     exclusionmap2s->Draw("COLZ");
1034     CompleteSave(c3,"Model_Scan/COL/Model_Scan_2sigma_values");
1035    
1036     exclusionmap3s->Draw("CONTZ");
1037     CompleteSave(c3,"Model_Scan/CONT/Model_Scan_3sigma_values");
1038     exclusionmap3s->Draw("COLZ");
1039     CompleteSave(c3,"Model_Scan/COL/Model_Scan_3sigma_values");
1040    
1041     TFile *exclusion_limits = new TFile("exclusion_limits.root","RECREATE");
1042     exclusionmap->Write();
1043     exclusionmap1s->Write();
1044     exclusionmap2s->Write();
1045     exclusionmap3s->Write();
1046     exclusion_limits->Close();
1047     susyscanfile->Close();
1048    
1049     myfile.close();
1050     }
1051 buchmann 1.2
1052 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) {
1053 buchmann 1.10 //Step 1: Establishing cuts
1054 buchmann 1.3 stringstream jetcutstring;
1055 buchmann 1.10 string writescenario="";
1056    
1057 buchmann 1.3 if(scenario==0) jetcutstring << "(pfJetGoodNum>=3)&&"<<(const char*) basicqualitycut;
1058     if(scenario==1) jetcutstring << "(pfJetPt[0]>50&&pfJetPt[1]>50)&&"<<(const char*)basicqualitycut;
1059     TCut jetcut(jetcutstring.str().c_str());
1060     string leptoncut="mll>0";
1061     if(leptontype==0||leptontype==1) {
1062 buchmann 1.10 if(leptontype==0) {
1063     leptoncut="id1==0";
1064     writescenario="__ee";
1065     }
1066     else {
1067     leptoncut="id1==1";
1068     writescenario="__ee";
1069     }
1070 buchmann 1.3 }
1071     TCut lepcut(leptoncut.c_str());
1072    
1073 buchmann 1.6 TCanvas *c5 = new TCanvas("c5","c5",1500,500);
1074 buchmann 1.10 TCanvas *c6 = new TCanvas("c6","c6");
1075 buchmann 1.3 c5->Divide(3,1);
1076 buchmann 1.10
1077     //STEP 2: Extract Zjets shape in data
1078     c5->cd(1);
1079 buchmann 1.3 c5->cd(1)->SetLogy(1);
1080     TCut massat40("mll>40");
1081 buchmann 1.17 TH1F *ossfleft = allsamples.Draw("ossfleft", "-"+datajzb,40,0,200, "JZB [GeV]", "events", massat40&&cutOSSF&&jetcut&&lepcut,data,luminosity);
1082     TH1F *osofleft = allsamples.Draw("osofleft", "-"+datajzb,40,0,200, "JZB [GeV]", "events", massat40&&cutOSOF&&jetcut&&lepcut,data,luminosity);
1083 buchmann 1.3 ossfleft->SetLineColor(kRed);
1084     ossfleft->SetMarkerColor(kRed);
1085     ossfleft->Add(osofleft,-1);
1086 buchmann 1.9 vector<TF1*> functions = do_cb_fit_to_plot(ossfleft,10);
1087 buchmann 1.17 ossfleft->SetMarkerSize(DataMarkerSize);
1088 buchmann 1.3 ossfleft->Draw();
1089 buchmann 1.9 functions[0]->Draw("same");functions[1]->Draw("same");functions[2]->Draw("same");
1090     TF1 *zjetsfunc = (TF1*) functions[1]->Clone();
1091     TF1 *zjetsfuncN = (TF1*) functions[0]->Clone();
1092     TF1 *zjetsfuncP = (TF1*) functions[2]->Clone();
1093 buchmann 1.6 zjetsfunc->Draw("same");zjetsfuncN->Draw("same");zjetsfuncP->Draw("same");
1094 buchmann 1.3 TLegend *leg1 = new TLegend(0.6,0.6,0.89,0.80);
1095     leg1->SetFillColor(kWhite);
1096     leg1->SetLineColor(kWhite);
1097     leg1->AddEntry(ossfleft,"OSSF (sub),JZB<peak","p");
1098 buchmann 1.6 leg1->AddEntry(zjetsfunc,"OSSF fit ('zjets')","l");
1099 buchmann 1.3 leg1->Draw("same");
1100     TText *titleleft = write_title("Extracting Z+Jets shape");
1101     titleleft->Draw();
1102    
1103 buchmann 1.10 //Step 3: Extract ttbar shape (in data or MC?)
1104     c5->cd(2);
1105 buchmann 1.3 c5->cd(2)->SetLogy(1);
1106 buchmann 1.4 TH1F *osof;
1107     TText *titlecenter;
1108 buchmann 1.10 bool frommc=false;
1109     if(frommc) {
1110 buchmann 1.17 osof = allsamples.Draw("osof",datajzb,40,-200,200, "JZB [GeV]", "events", massat40&&cutOSSF&&jetcut&&lepcut,mc,luminosity,allsamples.FindSample("TTJets"));
1111 buchmann 1.4 titlecenter = write_title("Extracting ttbar shape (from ossf MC)");
1112     }
1113     else {
1114 buchmann 1.17 osof = allsamples.Draw("osof",datajzb,40,-200,200, "JZB [GeV]", "events", massat40&&cutOSOF&&jetcut&&lepcut,data,luminosity);
1115 buchmann 1.4 titlecenter = write_title("Extracting ttbar shape (from osof data)");
1116     }
1117 buchmann 1.17 osof->SetMarkerSize(DataMarkerSize);
1118 buchmann 1.3 osof->Draw();
1119 buchmann 1.10 vector<TF1*> ttbarfunctions = do_cb_fit_to_plot(osof,35,true);
1120     ttbarfunctions[0]->SetLineColor(kRed); ttbarfunctions[0]->SetLineStyle(2); ttbarfunctions[0]->Draw("same");
1121     ttbarfunctions[1]->SetLineColor(kRed); ttbarfunctions[1]->Draw("same");
1122     ttbarfunctions[2]->SetLineColor(kRed); ttbarfunctions[2]->SetLineStyle(2); ttbarfunctions[2]->Draw("same");
1123    
1124 buchmann 1.3 TLegend *leg2 = new TLegend(0.15,0.8,0.4,0.89);
1125     leg2->SetFillColor(kWhite);
1126     leg2->SetLineColor(kWhite);
1127 buchmann 1.10 if(frommc) {
1128 buchmann 1.4 leg2->AddEntry(osof,"t#bar{t} OSSF, MC","p");
1129 buchmann 1.10 leg2->AddEntry(ttbarfunctions[1],"Fit to t#bar{t} OSSF,MC","l");
1130 buchmann 1.4 } else {
1131     leg2->AddEntry(osof,"OSOF","p");
1132 buchmann 1.10 leg2->AddEntry(ttbarfunctions[1],"Fit to OSOF","l");
1133 buchmann 1.4 }
1134 buchmann 1.3 leg2->Draw("same");
1135     titlecenter->Draw();
1136 buchmann 1.10
1137     //--------------------------------------------------------------------------------------------------------------------------------
1138 buchmann 1.4 //STEP 4: Present it!
1139     // actually: if we wanna let it float we need to do that first :-)
1140 buchmann 1.3 c5->cd(3);
1141     c5->cd(3)->SetLogy(1);
1142 buchmann 1.17 TH1F *observed = allsamples.Draw("observed",datajzb,100,0,500, "JZB [GeV]", "events", massat40&&cutOSSF&&jetcut&&lepcut,data,luminosity);
1143     observed->SetMarkerSize(DataMarkerSize);
1144 buchmann 1.4
1145 buchmann 1.6 TF1 *logparc = new TF1("logparc",InvCrystalBall,0,1000,5); logparc->SetLineColor(kRed);
1146 buchmann 1.8 TF1 *logparcn = new TF1("logparcn",InvCrystalBallN,0,1000,5); logparcn->SetLineColor(kRed); logparcn->SetLineStyle(2);
1147     TF1 *logparcp = new TF1("logparcp",InvCrystalBallP,0,1000,5); logparcp->SetLineColor(kRed); logparcp->SetLineStyle(2);
1148 buchmann 1.6
1149     TF1 *zjetsc = new TF1("zjetsc",InvCrystalBall,0,1000,5); zjetsc->SetLineColor(kBlue);
1150     TF1 *zjetscn = new TF1("zjetscn",InvCrystalBallN,0,1000,5); zjetscn->SetLineColor(kBlue); zjetscn->SetLineStyle(2);
1151     TF1 *zjetscp = new TF1("zjetscp",InvCrystalBallP,0,1000,5); zjetscp->SetLineColor(kBlue); zjetscp->SetLineStyle(2);
1152    
1153 buchmann 1.10 TF1 *ZplusJetsplusTTbar = new TF1("ZplusJetsplusTTbar", DoubleInvCrystalBall,0,1000,10); ZplusJetsplusTTbar->SetLineColor(kBlue);
1154     TF1 *ZplusJetsplusTTbarP= new TF1("ZplusJetsplusTTbarP",DoubleInvCrystalBallP,0,1000,10); ZplusJetsplusTTbarP->SetLineColor(kBlue); ZplusJetsplusTTbarP->SetLineStyle(2);
1155     TF1 *ZplusJetsplusTTbarN= new TF1("ZplusJetsplusTTbarN",DoubleInvCrystalBallN,0,1000,10); ZplusJetsplusTTbarN->SetLineColor(kBlue); ZplusJetsplusTTbarN->SetLineStyle(2);
1156    
1157 buchmann 1.6 zjetsc->SetParameters(zjetsfunc->GetParameters());
1158     zjetscp->SetParameters(zjetsfunc->GetParameters());
1159     zjetscn->SetParameters(zjetsfunc->GetParameters());
1160 buchmann 1.10
1161 buchmann 1.17 TH1F *observeda = allsamples.Draw("observeda",datajzb,53,80,350, "JZB [GeV]", "events", massat40&&cutOSSF&&jetcut&&lepcut,data,luminosity);
1162 buchmann 1.7 //blublu
1163 buchmann 1.10 logparc->SetParameters(ttbarfunctions[1]->GetParameters());
1164     logparcn->SetParameters(ttbarfunctions[1]->GetParameters());
1165     logparcp->SetParameters(ttbarfunctions[1]->GetParameters());
1166 buchmann 1.4 if(floating) {
1167 buchmann 1.10 cout << "TTbar contribution assumed (before fitting) : " << logparc->GetParameter(0) << endl;
1168     logparc->SetParameters(ttbarfunctions[1]->GetParameters());
1169 buchmann 1.7 for(int i=0;i<10;i++) {
1170     if(i<5) ZplusJetsplusTTbar->FixParameter(i,zjetsfunc->GetParameter(i));
1171     if(i>=5) {
1172     if (i>5) ZplusJetsplusTTbar->FixParameter(i,logparc->GetParameter(i-5));
1173     if (i==5) ZplusJetsplusTTbar->SetParameter(i,logparc->GetParameter(i-5));
1174     }
1175     }//end of setting parameters
1176     observeda->Draw("same");
1177     ZplusJetsplusTTbar->Draw("same");
1178     observeda->Fit(ZplusJetsplusTTbar);
1179     cout << "--> Quality of Z+Jets / TTbar fit : chi2/ndf = " << ZplusJetsplusTTbar->GetChisquare() << "/" << ZplusJetsplusTTbar->GetNDF() << endl;
1180     ZplusJetsplusTTbar->Draw("same");
1181 buchmann 1.8 ZplusJetsplusTTbarP->SetParameters(ZplusJetsplusTTbar->GetParameters());
1182     ZplusJetsplusTTbarN->SetParameters(ZplusJetsplusTTbar->GetParameters());
1183 buchmann 1.10 cout << "TTbar contribution found (after fitting) : " << ZplusJetsplusTTbar->GetParameter(5) << endl;
1184 buchmann 1.7 float factor = ZplusJetsplusTTbar->GetParameter(5) / logparc->GetParameter(0);
1185     cout << "FACTOR: " << factor << endl;
1186 buchmann 1.10 logparc->SetParameter(0,factor*ttbarfunctions[1]->GetParameter(0));
1187     logparcn->SetParameter(0,factor*ttbarfunctions[1]->GetParameter(0));
1188     logparcp->SetParameter(0,factor*ttbarfunctions[1]->GetParameter(0));
1189 buchmann 1.4 }
1190 buchmann 1.6
1191 buchmann 1.4 c5->cd(3);
1192 buchmann 1.6 c5->cd(3)->SetLogy(1);
1193     observed->Draw();
1194     zjetsc->Draw("same");zjetscn->Draw("same");zjetscp->Draw("same");
1195 buchmann 1.3 logparc->Draw("same");
1196 buchmann 1.6 logparcn->Draw("same");
1197     logparcp->Draw("same");
1198    
1199 buchmann 1.3 TLegend *leg3 = new TLegend(0.6,0.6,0.89,0.80);
1200     leg3->SetFillColor(kWhite);
1201     leg3->SetLineColor(kWhite);
1202     leg3->AddEntry(observed,"OSSF,JZB>peak","p");
1203 buchmann 1.10 leg3->AddEntry(ttbarfunctions[1],"OSOF fit ('ttbar')","l");
1204 buchmann 1.6 leg3->AddEntry(zjetsfunc,"OSSF,JZB<0 fit ('zjets')","l");
1205 buchmann 1.3 leg3->Draw("same");
1206     TText *titleright = write_title("Summary of shapes and observed shape");
1207     titleright->Draw();
1208    
1209     c6->cd()->SetLogy(1);
1210 buchmann 1.6 observed->Draw();
1211     zjetsc->Draw("same");zjetscn->Draw("same");zjetscp->Draw("same");
1212 buchmann 1.3 logparc->Draw("same");
1213 buchmann 1.6 logparcn->Draw("same");
1214     logparcp->Draw("same");
1215 buchmann 1.3 leg3->Draw("same");
1216     titleright->Draw();
1217    
1218     if(scenario==0) {
1219     CompleteSave(c5,"Shapes2/Making_of___3jetsabove30"+writescenario);
1220 buchmann 1.6 CompleteSave(c5->cd(1),"Shapes2/Making_of___3jetsabove30"+writescenario+"__cd1");
1221     CompleteSave(c5->cd(2),"Shapes2/Making_of___3jetsabove30"+writescenario+"__cd2");
1222     CompleteSave(c5->cd(3),"Shapes2/Making_of___3jetsabove30"+writescenario+"__cd3");
1223 buchmann 1.3 CompleteSave(c6,"Shapes2/Background_Shapes___3jetsabove30"+writescenario);
1224     } else {
1225     CompleteSave(c5,"Shapes2/Making_of___2jetsabove50"+writescenario);
1226 buchmann 1.6 CompleteSave(c5->cd(1),"Shapes2/Making_of___2jetsabove50"+writescenario+"__cd1");
1227     CompleteSave(c5->cd(2),"Shapes2/Making_of___2jetsabove50"+writescenario+"__cd2");
1228     CompleteSave(c5->cd(3),"Shapes2/Making_of___2jetsabove50"+writescenario+"__cd3");
1229 buchmann 1.3 CompleteSave(c6,"Shapes2/Background_Shapes___2jetsabove50"+writescenario);
1230     }
1231 buchmann 1.6 cout << "Statistics about our fits: " << endl;
1232 buchmann 1.7 cout << "Z+Jets shape: Chi2/ndf = " << zjetsfunc->GetChisquare() << "/" << ossfleft->GetNbinsX() << endl;
1233 buchmann 1.10 cout << "ttbar shape: Chi2/ndf = " << ttbarfunctions[1]->GetChisquare() << "/" << osof->GetNbinsX() << endl;
1234 buchmann 1.4
1235 buchmann 1.7 c6->cd();
1236 buchmann 1.8 TLegend *additionallegend = new TLegend(0.6,0.6,0.89,0.89);
1237     additionallegend->SetFillColor(kWhite);
1238     additionallegend->SetLineColor(kWhite);
1239     additionallegend->AddEntry(observed,"Data","p");
1240     additionallegend->AddEntry(ZplusJetsplusTTbar,"Fitted Z+jets & TTbar","l");
1241     additionallegend->AddEntry(zjetsc,"Z+jets","l");
1242     additionallegend->AddEntry(logparc,"TTbar","l");
1243 buchmann 1.7 observed->Draw();
1244     ZplusJetsplusTTbar->SetLineColor(kGreen);
1245 buchmann 1.8 ZplusJetsplusTTbarP->SetLineColor(kGreen);
1246     ZplusJetsplusTTbarN->SetLineColor(kGreen);
1247     ZplusJetsplusTTbarP->SetLineStyle(2);
1248     ZplusJetsplusTTbarN->SetLineStyle(2);
1249     TF1 *ZplusJetsplusTTbar2 = new TF1("ZplusJetsplusTTbar2",DoubleInvCrystalBall,0,1000,10);
1250     ZplusJetsplusTTbar2->SetParameters(ZplusJetsplusTTbar->GetParameters());
1251     ZplusJetsplusTTbar2->SetLineColor(kGreen);
1252     ZplusJetsplusTTbarP->SetFillColor(TColor::GetColor("#81F781"));
1253     ZplusJetsplusTTbarN->SetFillColor(kWhite);
1254     ZplusJetsplusTTbarP->Draw("fcsame");
1255     ZplusJetsplusTTbarN->Draw("fcsame");
1256     TH1F *hZplusJetsplusTTbar = (TH1F*)ZplusJetsplusTTbar2->GetHistogram();
1257     TH1F *hZplusJetsplusTTbarN = (TH1F*)ZplusJetsplusTTbarN->GetHistogram();
1258     TH1F *hZplusJetsplusTTbarP = (TH1F*)ZplusJetsplusTTbarP->GetHistogram();
1259     hZplusJetsplusTTbar->SetMarkerSize(0);
1260     hZplusJetsplusTTbarP->SetMarkerSize(0);
1261     hZplusJetsplusTTbarN->SetMarkerSize(0);
1262     for (int i=1;i<=hZplusJetsplusTTbar->GetNbinsX();i++) {
1263     float newerror=hZplusJetsplusTTbarP->GetBinContent(i)-hZplusJetsplusTTbar->GetBinContent(i);
1264     hZplusJetsplusTTbar->SetBinError(i,newerror);
1265     if(hZplusJetsplusTTbar->GetBinContent(i)<0.05) hZplusJetsplusTTbar->SetBinContent(i,0); //avoiding a displaying probolem
1266     }
1267     hZplusJetsplusTTbarP->SetFillColor(kGreen);
1268     hZplusJetsplusTTbarN->SetFillColor(kWhite);
1269     hZplusJetsplusTTbarN->Draw("same");
1270    
1271     ZplusJetsplusTTbar2->SetMarkerSize(0);
1272     ZplusJetsplusTTbar2->Draw("same");
1273    
1274 buchmann 1.7 zjetsc->Draw("same");zjetscn->Draw("same");zjetscp->Draw("same");
1275     logparc->Draw("same");
1276     logparcn->Draw("same");
1277     logparcp->Draw("same");
1278 buchmann 1.8 additionallegend->Draw("same");
1279     if(scenario==0) {
1280     CompleteSave(c6,"Shapes2/Background_Shapes___3jetsabove30__allfits__"+writescenario);
1281     } else {
1282     CompleteSave(c6,"Shapes2/Background_Shapes___2jetsabove50__allfits__"+writescenario);
1283     }
1284 buchmann 1.10 //--------------------------------------------------------------------------------------------------------------------------------
1285 buchmann 1.3 }
1286    
1287 buchmann 1.9
1288    
1289 buchmann 1.2 void draw_ttbar_and_zjets_shape(string mcjzb, string datajzb) {
1290 buchmann 1.3 int all_leptons=-1;
1291     int electrons_only=0;
1292     int mu_only=1;
1293     int twojetswith50gev=1;
1294     int threejetswith30gev=0;
1295 buchmann 1.4 /*
1296 buchmann 1.3 draw_ttbar_and_zjets_shape_for_one_configuration(mcjzb,datajzb,all_leptons,twojetswith50gev);
1297     draw_ttbar_and_zjets_shape_for_one_configuration(mcjzb,datajzb,all_leptons,threejetswith30gev);
1298    
1299     draw_ttbar_and_zjets_shape_for_one_configuration(mcjzb,datajzb,electrons_only,twojetswith50gev);
1300     draw_ttbar_and_zjets_shape_for_one_configuration(mcjzb,datajzb,electrons_only,threejetswith30gev);
1301    
1302     draw_ttbar_and_zjets_shape_for_one_configuration(mcjzb,datajzb,mu_only,twojetswith50gev);
1303     draw_ttbar_and_zjets_shape_for_one_configuration(mcjzb,datajzb,mu_only,threejetswith30gev);
1304 buchmann 1.4 */
1305 buchmann 1.2
1306 buchmann 1.10 draw_ttbar_and_zjets_shape_for_one_configuration(mcjzb,datajzb,all_leptons,threejetswith30gev,true);
1307 buchmann 1.2 }
1308 buchmann 1.6
1309 buchmann 1.8 void find_correction_factors(string &jzbvardata,string &jzbvarmc) {
1310 buchmann 1.13 //first: colorful plots
1311     TCanvas *cancorr = new TCanvas("cancorr","Canvas for Response Correction");
1312 buchmann 1.14 cancorr->SetLogz();
1313 buchmann 1.13 gStyle->SetPalette(1);
1314     TCut zptforresponsepresentation("pt<600&&TMath::Abs(91.2-mll)<20&&id1==id2&&(ch1*ch2<0)&&((sumJetPt[1]/pt)<5.0)");
1315     TH2F *niceresponseplotd = new TH2F("niceresponseplotd","",400,0,600,400,0,5);
1316     (allsamples.collection)[allsamples.FindSample("AllData")[0]].events->Draw("sumJetPt[1]/pt:pt>>niceresponseplotd",zptforresponsepresentation);
1317     niceresponseplotd->SetStats(0);
1318 buchmann 1.17 niceresponseplotd->GetXaxis()->SetTitle("Z pt [GeV]");
1319 buchmann 1.13 niceresponseplotd->GetYaxis()->SetTitle("Response");
1320     niceresponseplotd->GetXaxis()->CenterTitle();
1321     niceresponseplotd->GetYaxis()->CenterTitle();
1322     niceresponseplotd->Draw("COLZ");
1323     TProfile * pro = (TProfile*)niceresponseplotd->ProfileX();
1324     pro->Rebin(4);
1325 buchmann 1.17 pro->SetMarkerSize(DataMarkerSize);
1326 buchmann 1.13 pro->Draw("same,e1");
1327     DrawPrelim();
1328     CompleteSave(cancorr,"ResponseCorrection/Response_Correction_Illustration_Data");
1329    
1330     (allsamples.collection)[allsamples.FindSample("DY")[0]].events->Draw("sumJetPt[1]/pt:pt>>niceresponseplotd",zptforresponsepresentation);
1331     niceresponseplotd->SetStats(0);
1332 buchmann 1.17 niceresponseplotd->GetXaxis()->SetTitle("Z pt [GeV]");
1333 buchmann 1.13 niceresponseplotd->GetYaxis()->SetTitle("Response");
1334     niceresponseplotd->Draw("COLZ");
1335     (allsamples.collection)[allsamples.FindSample("DY")[0]].events->Draw("sumJetPt[1]/pt:pt",zptforresponsepresentation,"PROF,same");
1336     TProfile * prof = (TProfile*)niceresponseplotd->ProfileX();
1337     // prof->Rebin(4);
1338 buchmann 1.17 prof->SetMarkerSize(DataMarkerSize);
1339 buchmann 1.13 prof->Draw("same,e1");
1340     DrawPrelim();
1341     CompleteSave(cancorr,"ResponseCorrection/Response_Correction_Illustration_MC");
1342    
1343     //Step 2: Getting the result
1344 buchmann 1.9 TCut zptcutforresponse("pt>30&&pt<300&&TMath::Abs(91.2-mll)<20&&id1==id2&&(ch1*ch2<0)");
1345 buchmann 1.17 TH1F *dresponse = allsamples.Draw("dresponse","sumJetPt[1]/pt",100,0,5, "JZB [GeV]", "events", zptcutforresponse,data,luminosity);
1346 buchmann 1.8 float datacorrection=dresponse->GetMean();
1347     stringstream jzbvardatas;
1348 buchmann 1.9 if(datacorrection>1) jzbvardatas<<"(jzb[1]-"<<datacorrection-1<<"*pt)";
1349     if(datacorrection<1) jzbvardatas<<"(jzb[1]+"<<1-datacorrection<<"*pt)";
1350 buchmann 1.8 jzbvardata=jzbvardatas.str();
1351 buchmann 1.17 TH1F *mcresponse = allsamples.Draw("mcresponse","sumJetPt[1]/pt",100,0,5, "JZB [GeV]", "events", zptcutforresponse,mc,luminosity,allsamples.FindSample("DYJetsToLL_TuneZ2_M"));
1352 buchmann 1.8 float mccorrection=mcresponse->GetMean();
1353     stringstream jzbvarmcs;
1354 buchmann 1.9 if(mccorrection>1) jzbvarmcs<<"(jzb[1]-"<<mccorrection-1<<"*pt)";
1355     if(mccorrection<1) jzbvarmcs<<"(jzb[1]+"<<1-mccorrection<<"*pt)";
1356 buchmann 1.8 jzbvarmc=jzbvarmcs.str();
1357     cout << "JZB Z pt correction summary : " << endl;
1358     cout << " Data: The response is " << dresponse->GetMean() << " --> jzb variable is now : " << jzbvardata << endl;
1359     cout << " MC : The response is " << mcresponse->GetMean() << " --> jzb variable is now : " << jzbvarmc << endl;
1360     }
1361 buchmann 1.11
1362 buchmann 1.12 void pick_up_events(string cut) {
1363     cout << "Picking up events with cut " << cut << endl;
1364     allsamples.PickUpEvents(cut);
1365 buchmann 1.11 }
1366    
1367     void test() {
1368     TCanvas *testcanv = new TCanvas("testcanv","testcanv");
1369     testcanv->cd();
1370     switch_overunderflow(true);
1371 buchmann 1.17 TH1F *ptdistr = allsamples.Draw("ptdistr","pt1",100,30,200, "p_{T} [GeV]", "events", cutOSSF,data,luminosity);
1372 buchmann 1.11 switch_overunderflow(false);
1373     ptdistr->Draw();
1374     testcanv->SaveAs("test.png");
1375     cout << "HELLO there!" << endl;
1376     }