ViewVC Help
View File | Revision Log | Show Annotations | Root Listing
root/cvsroot/UserCode/cbrown/Development/Plotting/Modules/MetPlotting.C
Revision: 1.9
Committed: Mon Aug 27 13:12:58 2012 UTC (12 years, 8 months ago) by fronga
Content type: text/plain
Branch: MAIN
Changes since 1.8: +2 -2 lines
Log Message:
Re-instantiate fine binning (5 GeV) by default (sorry).

File Contents

# User Rev Content
1 buchmann 1.1 #include <iostream>
2    
3     using namespace std;
4    
5     TGraphErrors* MakeErrorGraph(TH1F *histo) {
6    
7     float dx[histo->GetNbinsX()];
8     float dy[histo->GetNbinsX()];
9     float x[histo->GetNbinsX()];
10     float y[histo->GetNbinsX()];
11     for(int i=1;i<=histo->GetNbinsX();i++) {
12     x[i-1]=histo->GetBinCenter(i);
13     y[i-1]=histo->GetBinContent(i);
14     if(i>1) dx[i-1]=(histo->GetBinCenter(i)-histo->GetBinCenter(i-1))/2.0;
15     else dx[i-1]=(histo->GetBinCenter(i+1)-histo->GetBinCenter(i))/2.0;
16     dy[i-1]=histo->GetBinError(i);
17     }
18    
19     TGraphErrors *gr = new TGraphErrors(histo->GetNbinsX(),x,y,dx,dy);
20     gr->SetFillColor(TColor::GetColor("#2E9AFE"));
21     return gr;
22     }
23    
24 fronga 1.7 void ProduceMetPlotsWithCut(TCut cut, string name, float cutat, int njets, bool doMC = false ) {
25 buchmann 1.1 TCanvas *tcan = new TCanvas("tcan","tcan");
26     cout << "Doing met plots" << endl;
27 buchmann 1.2 stringstream MetBaseCuts;
28 fronga 1.7 MetBaseCuts << "met[4]>" << cutat << "&&" << cut.GetTitle();
29     stringstream snjets;
30     snjets << njets;
31 buchmann 1.2 TCut MetBaseCut(MetBaseCuts.str().c_str());
32 fronga 1.7 TCut nJetsSignal(("pfJetGoodNum40>="+snjets.str()).c_str());
33     TCut nJetsControl(("pfJetGoodNum40<"+snjets.str()).c_str());
34 buchmann 1.1
35     //compute SF / OF rate in (CR1+CR2), should give 0.941 +/- 0.05
36 fronga 1.7
37     // Create histograms
38 fronga 1.9 //int nbins = 30;
39     int nbins = 60;
40 fronga 1.7 float xmin=20., xmax = 320.;
41 fronga 1.8 TH1F *mllsigEE =allsamples.Draw("mllsigEE","mll",nbins,xmin,xmax,"m_{ee} [GeV]", "events",TCut(cutOSSF&&MetBaseCut&&nJetsSignal&&"id1==0"),data,PlottingSetup::luminosity);
42     TH1F *mllsigMM =allsamples.Draw("mllsigMM","mll",nbins,xmin,xmax,"m_{#mu#mu} [GeV]","events",TCut(cutOSSF&&MetBaseCut&&nJetsSignal&&"id1==1"),data,PlottingSetup::luminosity);
43     TH1F *mllscon=allsamples.Draw("mllscon","mll",nbins,xmin,xmax,"m_{ll} [GeV]", "events",TCut(cutOSSF&&MetBaseCut&&nJetsControl),data,PlottingSetup::luminosity);
44 fronga 1.7 TH1F *mllOsig = allsamples.Draw("mllOsig", "mll",nbins,xmin,xmax,"m_{ll} [GeV]","events",TCut(cutOSOF&&MetBaseCut&&nJetsSignal),data,PlottingSetup::luminosity);
45     TH1F *mllOscon = allsamples.Draw("mllOscon","mll",nbins,xmin,xmax,"m_{ll} [GeV]","events",TCut(cutOSOF&&MetBaseCut&&nJetsControl),data,PlottingSetup::luminosity);
46    
47 fronga 1.8 TH1F* mllsig = (TH1F*)mllsigEE->Clone("mllsig");
48     mllsig->Add(mllsigMM);
49     mllsig->GetXaxis()->SetTitle("m_{ll} [GeV]");
50    
51     THStack *mcMllsig, *mcMllsigEE,*mcMllsigMM,*mcMllscon,*mcMllsconEE,*mcMllsconMM, *mcMllOsig, *mcMllOscon;
52 fronga 1.7 if ( doMC ) {
53     name += "_mc";
54 fronga 1.8 mcMllsig = new THStack(allsamples.DrawStack("mcMllsig","mll",nbins,xmin,xmax,"m_{ll} [GeV]","events",TCut(cutOSSF&&MetBaseCut&&nJetsSignal),mc,PlottingSetup::luminosity));
55     mcMllsigEE = new THStack(allsamples.DrawStack("mcMllsigEE","mll",nbins,xmin,xmax,"m_{ee} [GeV]","events",TCut(cutOSSF&&MetBaseCut&&nJetsSignal&&"id1==0"),mc,PlottingSetup::luminosity));
56     mcMllsigMM = new THStack(allsamples.DrawStack("mcMllsigMM","mll",nbins,xmin,xmax,"m_{#mu#mu} [GeV]","events",TCut(cutOSSF&&MetBaseCut&&nJetsSignal&&"id1==1"),mc,PlottingSetup::luminosity));
57     mcMllscon = new THStack(allsamples.DrawStack("mcMllscon","mll",nbins,xmin,xmax,"m_{ll} [GeV]","events",TCut(cutOSSF&&MetBaseCut&&nJetsControl),mc,PlottingSetup::luminosity));
58     mcMllOsig = new THStack(allsamples.DrawStack("mcMllOsig","mll",nbins,xmin,xmax,"m_{ll} [GeV]","events",TCut(cutOSOF&&MetBaseCut&&nJetsSignal),mc,PlottingSetup::luminosity));
59 fronga 1.7 mcMllOscon= new THStack(allsamples.DrawStack("mcMllOscon","mll",nbins,xmin,xmax,"m_{ll} [GeV]","events",TCut(cutOSOF&&MetBaseCut&&nJetsControl),mc,PlottingSetup::luminosity));
60 fronga 1.8
61 fronga 1.7 }
62 fronga 1.8
63 buchmann 1.1 mllOsig->SetLineColor(kRed);
64     mllOscon->SetLineColor(kRed);
65    
66 fronga 1.7 TH1F *zlineshape = allsamples.Draw("zlineshape","mll",nbins,xmin,xmax,"m_{ll} (GeV)","events",cutOSSF&&TCut("pfJetGoodNum40==1")&&cut,data,PlottingSetup::luminosity);
67 fronga 1.4 //float scalefactor=(mllsig->GetBinContent(mllsig->GetMaximumBin()-1)+mllsig->GetBinContent(mllsig->GetMaximumBin())+mllsig->GetBinContent(mllsig->GetMaximumBin()+1)-mllOsig->GetBinContent(mllsig->GetMaximumBin()-1)-mllOsig->GetBinContent(mllsig->GetMaximumBin())-mllOsig->GetBinContent(mllsig->GetMaximumBin())+1);
68     //scalefactor/=(zlineshape->GetBinContent(zlineshape->GetMaximumBin()-1)+zlineshape->GetBinContent(zlineshape->GetMaximumBin())+zlineshape->GetBinContent(zlineshape->GetMaximumBin()+1));
69     // Alternative scale factor: use 90+-5 GeV
70 buchmann 1.6 Int_t scaleBinLow = mllsig->FindBin(86);
71     Int_t scaleBinHigh = mllsig->FindBin(94);
72 fronga 1.4 float scalefactor = (mllsig->Integral(scaleBinLow,scaleBinHigh)-mllOsig->Integral(scaleBinLow,scaleBinHigh));
73     scalefactor /= zlineshape->Integral(scaleBinLow,scaleBinHigh);
74 buchmann 1.6
75     cout << "Bins for scaling : " << scaleBinLow << " : " << scaleBinHigh << endl;
76    
77 buchmann 1.3 zlineshape->Scale(scalefactor);
78     zlineshape->SetLineColor(kBlue);
79     zlineshape->SetLineStyle(2);
80    
81     TH1F *subtracted = (TH1F*)mllsig->Clone("subtracted");
82     TH1F *baseline = (TH1F*)mllOsig->Clone("baseline");
83     for(int i=1;i<=subtracted->GetNbinsX();i++) {
84     subtracted->SetBinContent(i,mllsig->GetBinContent(i)-mllOsig->GetBinContent(i));
85     baseline->SetBinContent(i,0);
86     }
87    
88     TH1F *prediction = (TH1F*)mllOsig->Clone("prediction");
89     prediction->Add(zlineshape);
90     prediction->SetLineColor(TColor::GetColor("#CF35CA"));
91 fronga 1.7
92     TH1F *control_prediction = (TH1F*)mllOscon->Clone("control_prediction");
93     control_prediction->SetLineColor(TColor::GetColor("#CF35CA"));
94    
95     // FIX Y RANGE TO EASE COMPARISON
96     mllsig->SetMaximum(120);
97 fronga 1.8 mllsigEE->SetMaximum(120);
98     mllsigMM->SetMaximum(120);
99 fronga 1.7 mllOsig->SetMaximum(120);
100     mllOscon->SetMaximum(280);
101     subtracted->SetMaximum(50);
102     subtracted->SetMinimum(-30);
103    
104 buchmann 1.3
105 fronga 1.7 // 1.- Signal region comparison
106     TGraphErrors *stat3j;
107     ////mllsig->GetYaxis()->SetRangeUser(0,mllsig->GetMaximum()*1.2);
108 buchmann 1.1 mllsig->Draw();
109 fronga 1.7 // Do not draw errors on prediction when overlaying MC.
110     if ( doMC ) {
111     mcMllsig->Draw("same");
112     } else {
113     stat3j = MakeErrorGraph(prediction);
114     stat3j->Draw("2,same");
115     mllOsig->Draw("histo,same");
116     zlineshape->Draw("histo,same");
117     }
118 buchmann 1.3 prediction->Draw("histo,same");
119 buchmann 1.1 mllsig->Draw("same");
120     DrawPrelim();
121    
122     TBox *srbox = new TBox(20,0,70,mllsig->GetMaximum());
123     srbox->SetFillStyle(0);
124     srbox->SetLineColor(TColor::GetColor("#298A08"));
125     srbox->SetLineWidth(3);
126    
127 fronga 1.7 TLegend *leg;
128     if ( doMC ) {
129     leg = allsamples.allbglegend();
130     } else {
131     leg = make_legend();
132     }
133 buchmann 1.1 leg->SetX1(0.54);
134 buchmann 1.2 stringstream MetHeader;
135     MetHeader << "MET>" << cutat << " GeV";
136 fronga 1.7 leg->SetHeader(((string)"N_{jets}#geq"+snjets.str()+", "+MetHeader.str()).c_str());
137     if (!doMC) leg->AddEntry(mllsig,"Data","PL");
138     leg->AddEntry(prediction,"All bg prediction","L");
139     if (!doMC) {
140     leg->AddEntry(mllOsig,"bg without Z","L");
141     leg->AddEntry(zlineshape,"Z lineshape","L");
142     leg->AddEntry(stat3j,"stat. uncert.","F");
143     }
144 buchmann 1.1 leg->AddEntry(srbox,"SR","F");
145     leg->Draw();
146    
147     srbox->Draw();
148    
149     stringstream saveasSig;
150 buchmann 1.3 saveasSig << "MetPlots/mll_sig" << cutat << "__" << name;
151 buchmann 1.1 CompleteSave(tcan,saveasSig.str());
152 fronga 1.8
153     // 1b. MC: split ee and mumu
154     if ( doMC ) {
155     mllsigEE->Draw();
156     mcMllsigEE->Draw("same");
157     mllsigEE->Draw("same");
158     DrawPrelim();
159     leg->Draw();
160     srbox->Draw();
161     CompleteSave(tcan,saveasSig.str()+"_ee");
162    
163     mllsigMM->Draw();
164     mcMllsigMM->Draw("same");
165     mllsigMM->Draw("same");
166     DrawPrelim();
167     leg->Draw();
168     srbox->Draw();
169     CompleteSave(tcan,saveasSig.str()+"_mm");
170     }
171 buchmann 1.1
172 fronga 1.7 // 2.- Signal region comparison - LOG scale
173     mllsig->SetMinimum(0.2); // FIX Y RANGE TO EASE COMPARISON
174     //mllsig->SetMaximum(mllsig->GetMaximum()*4.0);
175 fronga 1.4 srbox->SetY2(mllsig->GetMaximum());
176 buchmann 1.6
177 buchmann 1.1 tcan->SetLogy(1);
178     stringstream saveasSig2;
179 buchmann 1.3 saveasSig2 << "MetPlots/mll_sig_ZLINESHAPE_" << cutat << "__" << name;
180    
181 buchmann 1.1 CompleteSave(tcan,saveasSig2.str());
182     tcan->SetLogy(0);
183    
184 fronga 1.7
185     // 3.- Signal region, background subtracted
186 fronga 1.8 if ( !doMC ) {
187     for(int i=1;i<subtracted->GetNbinsX();i++) {
188     subtracted->SetBinContent(i,subtracted->GetBinContent(i)-zlineshape->GetBinContent(i));
189     }
190 buchmann 1.3
191 fronga 1.8 TGraphErrors *subtrerr = MakeErrorGraph(baseline);
192     subtracted->Draw();
193     subtrerr->Draw("2,same");
194     subtracted->Draw("same");
195     DrawPrelim();
196     TLegend *DiffLeg = make_legend();
197     DiffLeg->SetX1(0.3);
198     DiffLeg->SetFillStyle(0);
199     DiffLeg->AddEntry(subtracted,"observed - predicted","PL");
200     DiffLeg->AddEntry(subtrerr,"stat. uncert on prediction","F");
201     DiffLeg->AddEntry((TObject*)0,"","");
202     DiffLeg->AddEntry((TObject*)0,"","");
203     DiffLeg->Draw();
204    
205     stringstream saveasSigSub;
206     saveasSigSub << "MetPlots/mll_sig_SUBTRACTED_" << cutat << "__" << name;
207    
208     CompleteSave(tcan,saveasSigSub.str());
209 fronga 1.5
210 fronga 1.8 // 4.- Signal region, background subtracted, errors added in quadrature
211     TGraphErrors *subtrerr2 = (TGraphErrors*)subtrerr->Clone("subtrerr2");
212     for(int i=0;i<subtrerr2->GetN();i++) {
213     subtrerr2->SetPoint(i,subtracted->GetBinCenter(i),subtracted->GetBinContent(i));
214     subtrerr2->SetPointError(i,subtrerr2->GetErrorX(i),TMath::Sqrt(subtrerr2->GetErrorY(i)*subtrerr2->GetErrorY(i)+subtracted->GetBinError(i)*subtracted->GetBinError(i)));
215     }
216     TLine* l = new TLine(subtracted->GetBinLowEdge(1),0.,subtracted->GetBinLowEdge(subtracted->GetNbinsX()-1)+subtracted->GetBinWidth(1),0.);
217     l->SetLineWidth(subtracted->GetLineWidth());
218     subtracted->Draw();
219     subtrerr2->Draw("2,same");
220     l->Draw("same");
221     subtracted->Draw("same");
222     DrawPrelim();
223     TLegend *DiffLeg2 = make_legend();
224     DiffLeg2->SetX1(0.3);
225     DiffLeg2->SetFillStyle(0);
226     DiffLeg2->AddEntry(subtracted,"observed - predicted","PL");
227     DiffLeg2->AddEntry(subtrerr2,"stat. uncert on prediction","F");
228     DiffLeg2->AddEntry((TObject*)0,"","");
229     DiffLeg2->AddEntry((TObject*)0,"","");
230     DiffLeg2->Draw();
231    
232     stringstream saveasSigSub2;
233     saveasSigSub2 << "MetPlots/mll_sig_SUBTRACTED_quadr_" << cutat << "__" << name;
234 fronga 1.5
235 fronga 1.8 CompleteSave(tcan,saveasSigSub2.str());
236 fronga 1.5
237 fronga 1.8 delete DiffLeg;
238     delete DiffLeg2;
239     } // !doMC
240 buchmann 1.3
241    
242 fronga 1.7 // 5.- Control region comparison
243 buchmann 1.6 scalefactor = (mllscon->Integral(scaleBinLow,scaleBinHigh)-mllOscon->Integral(scaleBinLow,scaleBinHigh));
244     scalefactor /= zlineshape->Integral(scaleBinLow,scaleBinHigh);
245     zlineshape->Scale(scalefactor);
246     control_prediction->Add(zlineshape);
247 fronga 1.7 control_prediction->SetMaximum(280); // FIX Y RANGE TO EASE COMPARISON
248    
249     //control_prediction->GetYaxis()->SetRangeUser(0,control_prediction->GetMaximum()*1.3);
250     TGraphErrors *stat2j;
251     control_prediction->Draw("hist");
252     if(doMC) {
253     mcMllscon->Draw("same");
254     } else {
255     stat2j = MakeErrorGraph(control_prediction);
256     stat2j->Draw("2,same");
257     mllOscon->Draw("same,hist");
258     zlineshape->Draw("histo,same");
259     }
260 buchmann 1.6 control_prediction->Draw("histo,same");
261 buchmann 1.1 mllscon->Draw("same");
262     DrawPrelim();
263    
264 buchmann 1.6 TBox *cr1box = new TBox(20,0,70,control_prediction->GetMaximum());
265 buchmann 1.1 cr1box->SetFillStyle(0);
266     cr1box->SetLineColor(TColor::GetColor("#0404B4"));
267     cr1box->SetLineWidth(3);
268    
269 buchmann 1.6 TBox *cr2box = new TBox(150,0,320,control_prediction->GetMaximum());
270 buchmann 1.1 cr2box->SetFillStyle(0);
271     cr2box->SetLineColor(TColor::GetColor("#0404B4"));
272     cr2box->SetLineWidth(3);
273     cr2box->SetLineStyle(2);
274    
275 fronga 1.7 TLegend *legc;
276     if ( doMC ) {
277     legc = allsamples.allbglegend();
278     } else {
279     legc = make_legend();
280     }
281 buchmann 1.1 legc->SetX1(0.54);
282 fronga 1.7 legc->SetHeader(((string)"N_{jets} < "+snjets.str()+", "+MetHeader.str()).c_str());
283     if ( !doMC ) legc->AddEntry(mllscon,"Data","PL");
284 buchmann 1.6 legc->AddEntry(control_prediction,"All bg","L");
285 fronga 1.7 if ( !doMC ) {
286     legc->AddEntry(zlineshape,"Z lineshape","L");
287     legc->AddEntry(mllOscon,"bg without Z","L");
288     legc->AddEntry(stat2j,"stat. uncert.","F");
289     }
290 buchmann 1.1 legc->AddEntry(cr1box,"CR1","F");
291     legc->AddEntry(cr2box,"CR2","F");
292     legc->Draw();
293    
294     cr1box->Draw();
295     cr2box->Draw();
296    
297     stringstream saveasCon;
298 buchmann 1.3 saveasCon << "MetPlots/mll_con" << cutat << "__" << name;
299 buchmann 1.1 CompleteSave(tcan,saveasCon.str());
300 fronga 1.7
301     // 6. - Opposite-flavour data/MC comparison
302     if ( doMC ) {
303     mllOsig->SetLineColor(kBlack);
304     mllOsig->Draw();
305     mcMllOsig->Draw("same");
306     mllOsig->Draw("same");
307     TLegend *legsdm = allsamples.allbglegend();
308     legsdm->SetHeader(((string)"N_{jets}#geq"+snjets.str()+", "+MetHeader.str()+", OF").c_str());
309     legsdm->SetX1(0.54);
310     legsdm->Draw();
311     stringstream saveasSigOF;
312     saveasSigOF << "MetPlots/mll_sig_of_" << cutat << "__" << name;
313     CompleteSave(tcan,saveasSigOF.str());
314    
315     mllOscon->SetLineColor(kBlack);
316     mllOscon->Draw();
317     mcMllOscon->Draw("same");
318     mllOscon->Draw("same");
319     TLegend *legcdm = allsamples.allbglegend();
320     legcdm->SetHeader(((string)"N_{jets}<"+snjets.str()+", "+MetHeader.str()+", OF").c_str());
321     legcdm->SetX1(0.54);
322     legcdm->Draw();
323     stringstream saveasConOF;
324     saveasConOF << "MetPlots/mll_con_of_" << cutat << "__" << name;
325     CompleteSave(tcan,saveasConOF.str());
326    
327     delete legsdm;
328     delete legcdm;
329    
330     delete mcMllscon;
331     delete mcMllOscon;
332     delete mcMllsig;
333 fronga 1.8 delete mcMllsigEE;
334     delete mcMllsigMM;
335 fronga 1.7 delete mcMllOsig;
336     }
337 buchmann 1.1
338     delete cr1box;
339     delete cr2box;
340     delete srbox;
341     delete legc;
342     delete leg;
343 fronga 1.7
344 buchmann 1.1 delete mllscon;
345     delete mllOscon;
346     delete mllsig;
347 fronga 1.8 delete mllsigEE;
348     delete mllsigMM;
349 buchmann 1.1 delete mllOsig;
350 fronga 1.7 delete zlineshape;
351 buchmann 1.6 delete tcan;
352 buchmann 1.1 }
353    
354     void DoMetPlots() {
355 fronga 1.7 float metCuts[] = { 100., 150. };
356     int jetCuts[] = { 3, 2 };
357     string leptCuts[] = { "pt1>20&&pt2>20&&abs(eta1)<1.4&&abs(eta2)<1.4",
358     "pt1>20&&pt2>10"
359     };
360     bool nomc(0),domc(1);
361     for ( int i=0; i<2; ++i ) {
362     ProduceMetPlotsWithCut(TCut(("mll>20&&"+leptCuts[i]).c_str()),"",metCuts[i], jetCuts[i],nomc);
363     ProduceMetPlotsWithCut(TCut(("mll>20&&"+leptCuts[i]).c_str()),"",metCuts[i], jetCuts[i],domc);
364     if (!PlottingSetup::is53reco) { // Old 5_2
365     ProduceMetPlotsWithCut(TCut(("mll>20&&pfJetGoodNumBtag==0&&"+leptCuts[i]).c_str()),"bTagVeto30",metCuts[i], jetCuts[i]);
366     ProduceMetPlotsWithCut(TCut(("mll>20&&pfJetGoodNumBtag>0&&"+leptCuts[i]).c_str()),"AtLeastOneBJet30",metCuts[i], jetCuts[i]);
367     } else {
368     ProduceMetPlotsWithCut(TCut(("mll>20&&pfJetGoodNumBtag30==0&&"+leptCuts[i]).c_str()),"bTagVeto30",metCuts[i], jetCuts[i],nomc);
369     ProduceMetPlotsWithCut(TCut(("mll>20&&pfJetGoodNumBtag30>0&&"+leptCuts[i]).c_str()),"AtLeastOneBJet30",metCuts[i], jetCuts[i],nomc);
370     ProduceMetPlotsWithCut(TCut(("mll>20&&pfJetGoodNumBtag30==0&&"+leptCuts[i]).c_str()),"bTagVeto30",metCuts[i], jetCuts[i],domc);
371     ProduceMetPlotsWithCut(TCut(("mll>20&&pfJetGoodNumBtag30>0&&"+leptCuts[i]).c_str()),"AtLeastOneBJet30",metCuts[i], jetCuts[i],domc);
372     ProduceMetPlotsWithCut(TCut(("mll>20&&pfJetGoodNumBtag40==0&&"+leptCuts[i]).c_str()),"bTagVeto40",metCuts[i], jetCuts[i]);
373     ProduceMetPlotsWithCut(TCut(("mll>20&&pfJetGoodNumBtag40>0&&"+leptCuts[i]).c_str()),"AtLeastOneBJet40",metCuts[i], jetCuts[i]);
374     }
375     }
376 buchmann 1.1 }