ViewVC Help
View File | Revision Log | Show Annotations | Root Listing
root/cvsroot/UserCode/LJMet/MultivariateAnalysis/root/toyMC.C
Revision: 1.5
Committed: Mon May 11 16:11:54 2009 UTC (16 years ago) by kukartse
Content type: text/plain
Branch: MAIN
CVS Tags: V00-01-14, V00-01-13
Changes since 1.4: +107 -29 lines
Log Message:
*** empty log message ***

File Contents

# User Rev Content
1 kukartse 1.1 #include <iostream>
2     #include "TH1F.h"
3     #include "TObjArray.h"
4     #include "TFractionFitter.h"
5     #include "TFile.h"
6     #include "TTree.h"
7     #include "TRandom3.h"
8 kukartse 1.2 #include "TCanvas.h"
9 kukartse 1.5 #include "TSlider.h"
10    
11     //gROOT->SetStyle("Plain");
12     //gStyle->SetOptStat(0);
13 kukartse 1.1
14     using namespace std;
15    
16     class toyMC
17     {
18     public:
19    
20     toyMC();
21 kukartse 1.5 toyMC(int nbins);
22 kukartse 1.1 ~toyMC();
23    
24     void load_templates();
25 kukartse 1.3 void load_ejets_templates();
26 kukartse 1.1 int do_fit(TH1F * _data);
27     int generate_toy(int n_sig, int n_phys, int n_qcd);
28 kukartse 1.2 void set_overflow_bins(TH1F * h);
29     void debug_hist(TH1F * h);
30     int fit_data(void);
31 kukartse 1.1
32     TH1F * data;
33     TH1F * ttbar;
34     TH1F * wzjets;
35     TH1F * qcd;
36    
37 kukartse 1.5 int n_bins;
38    
39 kukartse 1.1 TObjArray * mc;
40     TFractionFitter * fit;
41    
42 kukartse 1.4 int n_gen_sig,n_gen_bkg1,n_gen_bkg2;
43    
44 kukartse 1.1 TH1F * toy_data;
45    
46     private:
47     TRandom3 _random;
48     };
49    
50    
51     toyMC::toyMC(){
52     data = 0;
53     ttbar = 0;
54     wzjets = 0;
55     qcd = 0;
56     mc = 0;
57     fit = 0;
58     toy_data = 0;
59 kukartse 1.5 n_bins = 50;
60     }
61    
62    
63     toyMC::toyMC(int nbins){
64     data = 0;
65     ttbar = 0;
66     wzjets = 0;
67     qcd = 0;
68     mc = 0;
69     fit = 0;
70     toy_data = 0;
71     n_bins = nbins;
72 kukartse 1.1 }
73    
74    
75     toyMC::~toyMC(){
76     delete data;
77     delete ttbar;
78     delete wzjets;
79     delete qcd;
80     delete mc;
81     delete fit;
82     delete toy_data;
83     }
84    
85    
86     void toyMC::load_templates(){
87 kukartse 1.5 TFile * data_file = new TFile("./TMVApp-data-06may2009.root","READ");
88 kukartse 1.2 TFile * ttbar_phys_template_file = new TFile("./TMVA.root","READ");
89 kukartse 1.5 TFile * qcd_template_file = new TFile("./TMVApp-qcd-06may2009.root","READ");
90 kukartse 1.1
91     TTree * t_data = (TTree *)data_file->Get("classifier");
92     TTree * t_ttbar_phys = (TTree *)ttbar_phys_template_file->Get("TestTree");
93     TTree * t_qcd = (TTree *)qcd_template_file->Get("classifier");
94    
95     delete data;
96     delete ttbar;
97     delete wzjets;
98     delete qcd;
99    
100 kukartse 1.2 delete data;
101     delete ttbar;
102     delete wzjets;
103     delete qcd;
104 kukartse 1.5 data = new TH1F("data" ,"data" ,n_bins, -0.8, 0.8);
105     ttbar = new TH1F("ttbar" ,"ttbar" ,n_bins, -0.8, 0.8);
106     wzjets = new TH1F("wzjets","wzjets",n_bins, -0.8, 0.8);
107     qcd = new TH1F("qcd" ,"qcd" ,n_bins, -0.8, 0.8);
108    
109     //
110     data->SetMarkerStyle(21);
111     data->SetMarkerSize(0.7);
112     //data->SetFillStyle(4050);
113     ttbar->SetFillColor(42);
114     //ttbar->SetFillStyle(4050);
115     wzjets->SetFillColor(46);
116     //wzjets->SetFillStyle(4050);
117     qcd->SetFillColor(48);
118     //TSlider *slider = 0;
119     //
120 kukartse 1.2
121     TCanvas * c1 = new TCanvas("canvas1","canvas1",800,600);
122     c1->Divide(2,2);
123 kukartse 1.5 TVirtualPad * pad = c1->cd(1);
124 kukartse 1.1 t_data -> Draw("MVA_BDT>>data");
125 kukartse 1.5 pad->SaveAs("mu_data.eps");
126     pad = c1->cd(2);
127 kukartse 1.1 t_ttbar_phys -> Draw("MVA_BDT>>ttbar","type==1");
128 kukartse 1.5 pad->SaveAs("mu_ttbar_template.eps");
129     pad = c1->cd(3);
130 kukartse 1.1 t_ttbar_phys -> Draw("MVA_BDT>>wzjets","type==0");
131 kukartse 1.5 pad->SaveAs("mu_wzjets_template.eps");
132     pad = c1->cd(4);
133 kukartse 1.1 t_qcd -> Draw("MVA_BDT>>qcd");
134 kukartse 1.5 pad->SaveAs("mu_qcd_template.eps");
135 kukartse 1.1
136 kukartse 1.2 set_overflow_bins(data);
137     set_overflow_bins(ttbar);
138     set_overflow_bins(wzjets);
139     set_overflow_bins(qcd);
140    
141 kukartse 1.1 //data_file->Close();
142     //ttbar_phys_template_file->Close();
143     //qcd_template_file->Close();
144    
145     delete mc;
146     mc = new TObjArray(3); // MC histograms are put in this array
147     mc->Add(ttbar);
148     mc->Add(wzjets);
149     mc->Add(qcd);
150     }
151    
152    
153 kukartse 1.3 void toyMC::load_ejets_templates(){
154 kukartse 1.5 TFile * data_file = new TFile("./TMVApp-data-electron-08may2009.root","READ");
155     //TFile * data_file = new TFile("./TMVApp-data-electron_wzfastsim-08may2009.root","READ");
156     TFile * ttbar_phys_template_file = new TFile("./TMVA.root","READ");
157     TFile * qcd_template_file = new TFile("./TMVApp-qcd-electron-08may2009.root","READ");
158 kukartse 1.3
159     TTree * t_data = (TTree *)data_file->Get("classifier");
160     TTree * t_ttbar_phys = (TTree *)ttbar_phys_template_file->Get("TestTree");
161     TTree * t_qcd = (TTree *)qcd_template_file->Get("classifier");
162    
163     delete data;
164     delete ttbar;
165     delete wzjets;
166     delete qcd;
167    
168 kukartse 1.5 data = new TH1F("data" ,"data" ,n_bins, -0.9, 0.9);
169     ttbar = new TH1F("ttbar" ,"ttbar" ,n_bins, -0.9, 0.9);
170     wzjets = new TH1F("wzjets","wzjets",n_bins, -0.9, 0.9);
171     qcd = new TH1F("qcd" ,"qcd" ,n_bins, -0.9, 0.9);
172    
173     //
174     data->SetMarkerStyle(21);
175     data->SetMarkerSize(0.7);
176     //data->SetFillStyle(4050);
177     ttbar->SetFillColor(42);
178     //ttbar->SetFillStyle(4050);
179     wzjets->SetFillColor(46);
180     //wzjets->SetFillStyle(4050);
181     qcd->SetFillColor(48);
182     //TSlider *slider = 0;
183     //
184 kukartse 1.3
185 kukartse 1.5 TCanvas * c1 = new TCanvas("canvas1","canvas1",800,600);
186     c1->Divide(2,2);
187     TVirtualPad * pad = c1->cd(1);
188 kukartse 1.3 t_data -> Draw("MVA_BDT>>data");
189 kukartse 1.5 pad->SaveAs("e_data.eps");
190     pad = c1->cd(2);
191 kukartse 1.3 t_ttbar_phys -> Draw("MVA_BDT>>ttbar","type==1");
192 kukartse 1.5 pad->SaveAs("e_ttbar_template.eps");
193     pad = c1->cd(3);
194 kukartse 1.3 t_ttbar_phys -> Draw("MVA_BDT>>wzjets","type==0");
195 kukartse 1.5 pad->SaveAs("e_wzjets_template.eps");
196     pad = c1->cd(4);
197 kukartse 1.3 t_qcd -> Draw("MVA_BDT>>qcd");
198 kukartse 1.5 pad->SaveAs("e_qcd_template.eps");
199 kukartse 1.3
200     //data_file->Close();
201     //ttbar_phys_template_file->Close();
202     //qcd_template_file->Close();
203    
204     delete mc;
205     mc = new TObjArray(3); // MC histograms are put in this array
206     mc->Add(ttbar);
207     mc->Add(wzjets);
208     mc->Add(qcd);
209     }
210    
211    
212 kukartse 1.1 int toyMC::do_fit(TH1F * _data){
213     delete fit;
214     fit = new TFractionFitter(_data, mc); // initialise
215 kukartse 1.4
216 kukartse 1.1 fit->Constrain(1,0.0,1.0); // constrain fraction 1 to be between 0 and 1
217     fit->Constrain(2,0.0,1.0); // constrain fraction 1 to be between 0 and 1
218 kukartse 1.4 //fit->Constrain(3,0.0,1.0); // constrain fraction 1 to be between 0 and 1
219    
220     //fit->Constrain(1,0.15,0.85); // constrain fraction 1 to be between 0 and 1
221 kukartse 1.5 //fit->Constrain(2,0.1651865,0.1651866); // constrain fraction 1 to be between 0 and 1
222 kukartse 1.4 //fit->Constrain(3,0.15,0.85); // constrain fraction 1 to be between 0 and 1
223 kukartse 1.5 //fit->Constrain(3,0.024999,0.025001); // constrain fraction 1 to be between 0 and 1
224     fit->Constrain(3,0.4422735,0.4422736); // constrain fraction 1 to be between 0 and 1
225     //double qcd_frac = (double)n_gen_bkg2/(double)(n_gen_sig+n_gen_bkg1+n_gen_bkg2);
226     //fit->Constrain(3,qcd_frac-0.000001,qcd_frac+0.000001); // constrain fraction 1 to be between 0 and 1
227     fit->SetRangeX(1,n_bins); // use only some bins to fit
228 kukartse 1.1 Int_t status = fit->Fit(); // perform the fit
229 kukartse 1.3 if (status!=0) status = fit->Fit();
230 kukartse 1.1 cout << "fit status: " << status << endl;
231     return status;
232     }
233    
234 kukartse 1.5 /*
235     int toyMC::fit1(TH1F * _data, double bkg2_low = 0.0, bkg2_high = 1.0){
236     delete fit;
237     fit = new TFractionFitter(_data, mc); // initialise
238    
239     fit->Constrain(1,data_low,data_high); // constrain fraction 1 to be between 0 and 1
240     fit->Constrain(2,bkg1_low,bkg1_high); // constrain fraction 1 to be between 0 and 1
241     fit->Constrain(3,bkg2_low,bkg2_high); // constrain fraction 1 to be between 0 and 1
242     fit->SetRangeX(first_bin,last_bin); // use only some bins to fit
243     Int_t status = fit->Fit(); // perform the fit
244     if (status!=0) status = fit->Fit(); // make one more attempt to fit if the first one fails
245     cout << "fit status: " << status << endl;
246     return status;
247     }
248     */
249 kukartse 1.1
250     int toyMC::generate_toy(int n_sig, int n_bg, int n_qcd){
251     int n_events=0;
252     delete toy_data;
253 kukartse 1.3
254 kukartse 1.5 toy_data = new TH1F("toy_data" ,"toy_data" ,n_bins, -0.9, 0.9);
255 kukartse 1.1
256     int _nsig = _random.Poisson(n_sig);
257     int _nbg = _random.Poisson(n_bg);
258     int _nqcd = _random.Poisson(n_qcd);
259 kukartse 1.2 //int _nqcd = n_qcd;
260 kukartse 1.4
261     n_gen_sig = _nsig;
262     n_gen_bkg1 = _nbg;
263     n_gen_bkg2 = _nqcd;
264 kukartse 1.2 n_events = _nsig+_nbg+_nqcd;
265 kukartse 1.1
266     for (int i=0;i<_nsig;i++){
267     toy_data->Fill(ttbar->GetRandom());
268     }
269     for (int i=0;i<_nbg;i++){
270     toy_data->Fill(wzjets->GetRandom());
271     }
272     for (int i=0;i<_nqcd;i++){
273     toy_data->Fill(qcd->GetRandom());
274     }
275 kukartse 1.2 //toy_data->Draw();
276     set_overflow_bins(toy_data);
277 kukartse 1.1 return n_events;
278 kukartse 1.4 //return _nsig;
279 kukartse 1.1 }
280 kukartse 1.2
281     void toyMC::set_overflow_bins(TH1F * h){
282     Int_t _last_bin = h->GetNbinsX();
283     Double_t _overflow = h->GetBinContent(_last_bin+1);
284     Int_t n_entries = h->GetEntries();
285     //h->ResetBit(TH1::kCanRebin);
286     h->AddBinContent(1,h->GetBinContent(0));
287     h->AddBinContent(_last_bin,_overflow);
288     h->SetBinContent(0,0);
289     h->SetBinContent(_last_bin+1,0);
290     h->SetEntries(n_entries);
291     }
292    
293    
294     void toyMC::debug_hist(TH1F * h){
295     cout << "DEBUG: number of entries: " << h->GetEntries() << endl;
296     cout << "DEBUG: underflow: " << h->GetBinContent(0) << endl;
297     cout << "DEBUG: bin1: " << h->GetBinContent(1) << endl;
298     Int_t _last_bin = h->GetNbinsX();
299     cout << "DEBUG: last bin: " << h->GetBinContent(_last_bin) << endl;
300     cout << "DEBUG: overflow: " << h->GetBinContent(_last_bin+1) << endl;
301     }
302    
303    
304     int toyMC::fit_data(){
305 kukartse 1.5 //load_templates();
306 kukartse 1.4 //load_ejets_templates();
307 kukartse 1.2 int _res = do_fit(data);
308     int n_data = data->GetEntries();
309     TH1F * result = (TH1F*) fit->GetPlot();
310 kukartse 1.5 result->SetFillColor(16);
311     //result->SetFillStyle(4050);
312 kukartse 1.2 data->SetMinimum(0);
313     TCanvas * c = new TCanvas("canvas2","canvas2",800,600);
314     data->Draw("Ep");
315     result->Draw("same");
316     //
317     Double_t value,error;
318     fit->GetResult(0,value,error);
319     ttbar->Scale(n_data*value/ttbar->Integral());
320     ttbar->Draw("same");
321     //
322 kukartse 1.5 fit->GetResult(2,value,error);
323     qcd->Scale(n_data*value/qcd->Integral());
324     qcd->Draw("same");
325     data->Draw("Ep:same");
326     //
327 kukartse 1.2 fit->GetResult(1,value,error);
328     wzjets->Scale(n_data*value/wzjets->Integral());
329     wzjets->Draw("same");
330     //
331 kukartse 1.5 c->SaveAs("fit.eps");
332 kukartse 1.2 return _res;
333     }