ViewVC Help
View File | Revision Log | Show Annotations | Root Listing
root/cvsroot/UserCode/LJMet/MultivariateAnalysis/root/toyMC.C
(Generate patch)

Comparing UserCode/LJMet/MultivariateAnalysis/root/toyMC.C (file contents):
Revision 1.3 by kukartse, Fri May 1 07:54:10 2009 UTC vs.
Revision 1.7 by kukartse, Tue May 19 19:12:58 2009 UTC

# Line 4 | Line 4
4   #include "TFractionFitter.h"
5   #include "TFile.h"
6   #include "TTree.h"
7 + #include "TChain.h"
8   #include "TRandom3.h"
9   #include "TCanvas.h"
10 + #include "TSlider.h"
11 +
12 + //gROOT->SetStyle("Plain");
13 + //gStyle->SetOptStat(0);
14  
15   using namespace std;
16  
# Line 14 | Line 19 | class toyMC
19   public:
20    
21    toyMC();
22 +  toyMC(int nbins);
23    ~toyMC();
24    
25    void load_templates();
# Line 23 | Line 29 | public:
29    void set_overflow_bins(TH1F * h);
30    void debug_hist(TH1F * h);
31    int fit_data(void);
32 +
33 +  // returns pair<mean,width>
34 +  std::pair<double,double> do_toys(double n_sig, double n_bkg1, double n_bkg2, int n_exp=100);
35    
36    TH1F * data;
37    TH1F * ttbar;
38    TH1F * wzjets;
39    TH1F * qcd;
40  
41 +  int n_bins;
42 +
43    TObjArray * mc;
44    TFractionFitter * fit;
45  
46 +  int n_gen_sig,n_gen_bkg1,n_gen_bkg2;
47 +
48    TH1F * toy_data;
49  
50   private:
# Line 47 | Line 60 | toyMC::toyMC(){
60    mc = 0;
61    fit = 0;
62    toy_data = 0;
63 +  n_bins = 50;
64 + }
65 +
66 +
67 + toyMC::toyMC(int nbins){
68 +  data = 0;
69 +  ttbar = 0;
70 +  wzjets = 0;
71 +  qcd = 0;
72 +  mc = 0;
73 +  fit = 0;
74 +  toy_data = 0;
75 +  n_bins = nbins;
76   }
77  
78  
# Line 62 | Line 88 | toyMC::~toyMC(){
88  
89  
90   void toyMC::load_templates(){
91 <  TFile * data_file = new TFile("./TMVApp-data-27apr2009.root","READ");
91 >  TFile * data_file = new TFile("./TMVApp-data-16may2009.root","READ");
92    TFile * ttbar_phys_template_file = new TFile("./TMVA.root","READ");
93 <  TFile * qcd_template_file = new TFile("./TMVApp-qcd-27apr2009.root","READ");
93 >  TFile * qcd_template_file = new TFile("./TMVApp-qcd-16may2009.root","READ");
94    
95    TTree * t_data       = (TTree *)data_file->Get("classifier");
96    TTree * t_ttbar_phys = (TTree *)ttbar_phys_template_file->Get("TestTree");
# Line 79 | Line 105 | void toyMC::load_templates(){
105    delete ttbar;
106    delete wzjets;
107    delete qcd;
108 <  data   = new TH1F("data"  ,"data"  ,30, -0.8, 0.8);
109 <  ttbar  = new TH1F("ttbar" ,"ttbar" ,30, -0.8, 0.8);
110 <  wzjets = new TH1F("wzjets","wzjets",30, -0.8, 0.8);
111 <  qcd    = new TH1F("qcd"   ,"qcd"   ,30, -0.8, 0.8);
108 >  data   = new TH1F("data"  ,"data"  ,n_bins, -0.8, 0.8);
109 >  ttbar  = new TH1F("ttbar" ,"ttbar" ,n_bins, -0.8, 0.8);
110 >  wzjets = new TH1F("wzjets","wzjets",n_bins, -0.8, 0.8);
111 >  qcd    = new TH1F("qcd"   ,"qcd"   ,n_bins, -0.8, 0.8);
112 >
113 >  //
114 >  data->SetMarkerStyle(21);
115 >  data->SetMarkerSize(0.7);
116 >  //data->SetFillStyle(4050);
117 >  ttbar->SetFillColor(42);
118 >  //ttbar->SetFillStyle(4050);
119 >  wzjets->SetFillColor(46);
120 >  //wzjets->SetFillStyle(4050);
121 >  qcd->SetFillColor(48);
122 >  //TSlider *slider = 0;
123 >  //
124  
125    TCanvas * c1 = new TCanvas("canvas1","canvas1",800,600);
126    c1->Divide(2,2);
127 <  c1->cd(1);
127 >  TVirtualPad * pad = c1->cd(1);
128    t_data   -> Draw("MVA_BDT>>data");
129 <  c1->cd(2);
129 >  pad->SaveAs("mu_data.eps");
130 >  pad = c1->cd(2);
131    t_ttbar_phys  -> Draw("MVA_BDT>>ttbar","type==1");
132 <  c1->cd(3);
132 >  pad->SaveAs("mu_ttbar_template.eps");
133 >  pad = c1->cd(3);
134    t_ttbar_phys -> Draw("MVA_BDT>>wzjets","type==0");
135 <  c1->cd(4);
135 >  pad->SaveAs("mu_wzjets_template.eps");
136 >  pad = c1->cd(4);
137    t_qcd    -> Draw("MVA_BDT>>qcd");
138 +  pad->SaveAs("mu_qcd_template.eps");
139  
140    set_overflow_bins(data);
141    set_overflow_bins(ttbar);
# Line 113 | Line 155 | void toyMC::load_templates(){
155  
156  
157   void toyMC::load_ejets_templates(){
158 <  //TFile * data_file = new TFile("./TMVApp-data-electron-01may2009.root","READ");
159 <  TFile * data_file = new TFile("./TMVApp-data-wzfastsim-electron-01may2009.root","READ");
160 <  TFile * ttbar_phys_template_file = new TFile("./TMVA-el.root","READ");
161 <  TFile * qcd_template_file = new TFile("./TMVApp-qcd-electron-01may2009.root","READ");
158 >  TFile * data_file = new TFile("./TMVApp-data-electron-18may2009.root","READ");
159 >  //TFile * data_file = new TFile("./TMVApp-data-electron_noqcd.root","READ");
160 >  //TFile * data_file = new TFile("./TMVApp-data-electron_wzfastsim-08may2009.root","READ");
161 >  //TFile * data_file = new TFile("./TMVApp-data-electron_wzfastsim-08may2009.root","READ");
162 >  TFile * ttbar_phys_template_file = new TFile("./TMVA_wjets.root","READ");
163 >  TFile * qcd_template_file = new TFile("TMVApp-qcd-electron-18may2009.root","READ");
164    
165 +   //TChain * t_data       = new TChain("classifier");
166 +   //t_data->Add("./TMVApp-data-electron_noqcd.root");
167 +   //t_data->Add("./TMVApp-data-electron_qcdonly.root");
168 +   //t_data->Add("./TMVApp-data-electron_200.root");
169 +  
170    TTree * t_data       = (TTree *)data_file->Get("classifier");
171    TTree * t_ttbar_phys = (TTree *)ttbar_phys_template_file->Get("TestTree");
172    TTree * t_qcd        = (TTree *)qcd_template_file->Get("classifier");
# Line 127 | Line 176 | void toyMC::load_ejets_templates(){
176    delete wzjets;
177    delete qcd;
178  
179 <  data   = new TH1F("data"  ,"data"  ,50, -0.9, 0.9);
180 <  ttbar  = new TH1F("ttbar" ,"ttbar" ,50, -0.9, 0.9);
181 <  wzjets = new TH1F("wzjets","wzjets",50, -0.9, 0.9);
182 <  qcd    = new TH1F("qcd"   ,"qcd"   ,50, -0.9, 0.9);
179 >  data   = new TH1F("data"  ,"data"  ,n_bins, -0.8, 0.8);
180 >  ttbar  = new TH1F("ttbar" ,"ttbar" ,n_bins, -0.8, 0.8);
181 >  wzjets = new TH1F("wzjets","wzjets",n_bins, -0.8, 0.8);
182 >  qcd    = new TH1F("qcd"   ,"qcd"   ,n_bins, -0.8, 0.8);
183  
184 +  //
185 +  data->SetMarkerStyle(21);
186 +  data->SetMarkerSize(0.7);
187 +  //data->SetFillStyle(4050);
188 +  ttbar->SetFillColor(42);
189 +  //ttbar->SetFillStyle(4050);
190 +  wzjets->SetFillColor(46);
191 +  //wzjets->SetFillStyle(4050);
192 +  qcd->SetFillColor(48);
193 +  //TSlider *slider = 0;
194 +  //
195 +
196 +  TCanvas * c1 = new TCanvas("canvas1","canvas1",800,600);
197 +  c1->Divide(2,2);
198 +  TVirtualPad * pad = c1->cd(1);
199    t_data   -> Draw("MVA_BDT>>data");
200 +  pad->SaveAs("e_data.eps");
201 +  pad = c1->cd(2);
202    t_ttbar_phys  -> Draw("MVA_BDT>>ttbar","type==1");
203 +  pad->SaveAs("e_ttbar_template.eps");
204 +  pad = c1->cd(3);
205    t_ttbar_phys -> Draw("MVA_BDT>>wzjets","type==0");
206 +  pad->SaveAs("e_wzjets_template.eps");
207 +  pad = c1->cd(4);
208    t_qcd    -> Draw("MVA_BDT>>qcd");
209 +  pad->SaveAs("e_qcd_template.eps");
210  
211    //data_file->Close();
212    //ttbar_phys_template_file->Close();
# Line 152 | Line 223 | void toyMC::load_ejets_templates(){
223   int toyMC::do_fit(TH1F * _data){
224    delete fit;
225    fit = new TFractionFitter(_data, mc); // initialise
226 +
227    fit->Constrain(1,0.0,1.0);               // constrain fraction 1 to be between 0 and 1
228 <  fit->Constrain(2,0.0,1.0);               // constrain fraction 1 to be between 0 and 1
229 <  fit->Constrain(3,0.0,1.0);               // constrain fraction 1 to be between 0 and 1
230 <  //fit->Constrain(3,0.07298,0.07299);               // constrain fraction 1 to be between 0 and 1
231 <  //fit->Constrain(3,0.2981,0.2982);               // constrain fraction 1 to be between 0 and 1
232 <  //fit->SetRangeX(1,30);                    // use only the first 15 bins in the fit
228 >  fit->Constrain(2,0.0,1.0);
229 >  //fit->Constrain(3,0.0,1.0);
230 >
231 >  //fit->Constrain(2,0.1651865,0.1651866);
232 >  //fit->Constrain(3,0.024999,0.025001);
233 >  fit->Constrain(3,0.176895306858,0.176895306860);
234 >  //fit->Constrain(3,0.37259,0.37261);
235 >  //fit->Constrain(3,0.036759,0.036761); // mu+jets true
236 >  //fit->Constrain(3,0.017379,0.017381); // mu+jets ABCD
237 >  //fit->Constrain(3,0.4422735,0.4422736);
238 >  //
239 >  //double qcd_frac = (double)n_gen_bkg2/(double)(n_gen_sig+n_gen_bkg1+n_gen_bkg2);
240 >  //fit->Constrain(3,qcd_frac-0.000001,qcd_frac+0.000001);               // constrain fraction 1 to be between 0 and 1
241 >  //
242 >  fit->SetRangeX(1,n_bins);                    // use only some bins to fit
243    Int_t status = fit->Fit();               // perform the fit
244    if (status!=0) status = fit->Fit();
245    cout << "fit status: " << status << endl;
246    return status;
247   }
248  
249 + /*
250 + int toyMC::fit1(TH1F * _data, double bkg2_low = 0.0, bkg2_high = 1.0){
251 +  delete fit;
252 +  fit = new TFractionFitter(_data, mc); // initialise
253 +
254 +  fit->Constrain(1,data_low,data_high); // constrain fraction 1 to be between 0 and 1
255 +  fit->Constrain(2,bkg1_low,bkg1_high); // constrain fraction 1 to be between 0 and 1
256 +  fit->Constrain(3,bkg2_low,bkg2_high); // constrain fraction 1 to be between 0 and 1
257 +  fit->SetRangeX(first_bin,last_bin);   // use only some bins to fit
258 +  Int_t status = fit->Fit();            // perform the fit
259 +  if (status!=0) status = fit->Fit();   // make one more attempt to fit if the first one fails
260 +  cout << "fit status: " << status << endl;
261 +  return status;
262 + }
263 + */
264  
265   int toyMC::generate_toy(int n_sig, int n_bg, int n_qcd){
266    int n_events=0;
267    delete toy_data;
268  
269 <  toy_data = new TH1F("toy_data"  ,"toy_data"  ,50, -0.9, 0.9);
269 >  toy_data = new TH1F("toy_data"  ,"toy_data"  ,n_bins, -0.8, 0.8);
270  
271    int _nsig = _random.Poisson(n_sig);
272    int _nbg  = _random.Poisson(n_bg);
273    int _nqcd = _random.Poisson(n_qcd);
274    //int _nqcd = n_qcd;
275 +
276 +  n_gen_sig = _nsig;
277 +  n_gen_bkg1 = _nbg;
278 +  n_gen_bkg2 = _nqcd;  
279    n_events = _nsig+_nbg+_nqcd;
280  
281    for (int i=0;i<_nsig;i++){
# Line 189 | Line 290 | int toyMC::generate_toy(int n_sig, int n
290    //toy_data->Draw();
291    set_overflow_bins(toy_data);  
292    return n_events;
293 +  //return _nsig;
294   }
295  
296   void toyMC::set_overflow_bins(TH1F * h){
# Line 216 | Line 318 | void toyMC::debug_hist(TH1F * h){
318  
319   int toyMC::fit_data(){
320    //load_templates();
321 <  load_ejets_templates();
321 >  //load_ejets_templates();
322    int _res = do_fit(data);
323    int n_data = data->GetEntries();
324    TH1F * result = (TH1F*) fit->GetPlot();
325 +  result->SetFillColor(16);
326 +  //result->SetFillStyle(4050);
327    data->SetMinimum(0);
328    TCanvas * c = new TCanvas("canvas2","canvas2",800,600);
329    data->Draw("Ep");
# Line 238 | Line 342 | int toyMC::fit_data(){
342    qcd->Scale(n_data*value/qcd->Integral());
343    qcd->Draw("same");
344    data->Draw("Ep:same");
345 +  //
346 +  c->SaveAs("fit.eps");
347    return _res;
348   }
349 +
350 +
351 +
352 + std::pair<double,double> toyMC::do_toys(double n_sig, double n_bkg1, double n_bkg2, int n_exp=100){
353 +  double n_total = n_sig+n_bkg1+n_bkg2;
354 +
355 +  //load_templates();
356 +  //load_ejets_templates();
357 +  TH1F * toy_mean   = new TH1F("mean"  ,"ttbar signal yield"  ,50, n_sig-5.0*sqrt(n_sig), n_sig+5.0*sqrt(n_sig));
358 +  TH1F * toy_error   = new TH1F("error"  ,"ttbar signal yield error"  ,50, 0, 3.0*sqrt(n_sig));
359 +  TH1F * toy_pull   = new TH1F("pull"  ,"pull"  ,50, -3, 3);
360 +  toy_mean->SetFillColor(44);
361 +  toy_error->SetFillColor(44);
362 +  toy_pull->SetFillColor(44);
363 +  for (int i=0;i<n_exp;i++){
364 +    generate_toy(n_sig,n_bkg1,n_bkg2);
365 +    int _ttbar = n_gen_sig;
366 +    int status = do_fit(toy_data);
367 +    if (status==0){
368 +      Double_t value,error;
369 +      fit->GetResult(0,value,error);
370 +      toy_mean->Fill(value*n_total);
371 +      toy_error->Fill(error*n_total);
372 +      //toy_pull->Fill((value-n_sig/n_total)/error);
373 +      toy_pull->Fill((value-(Double_t)_ttbar/n_total)/error);
374 +    }
375 +  }
376 +  TCanvas * c = new TCanvas("canvas","canvas",800,600);
377 +  c->Divide(2,2);
378 +  TVirtualPad * pad = c->cd(1);
379 +  toy_mean->Fit("gaus");
380 +  pad->SaveAs("mean.eps");
381 +  pad = c->cd(2);
382 +  toy_error->Draw();
383 +  pad->SaveAs("error.eps");
384 +  pad = c->cd(3);
385 +  toy_pull->Fit("gaus");
386 +  pad->SaveAs("pull.eps");
387 +
388 + }

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines