rf803_mcstudy_addons2.cxx

Go to the documentation of this file.
00001 /////////////////////////////////////////////////////////////////////////
00002 //
00003 // 'VALIDATION AND MC STUDIES' RooFit tutorial macro #803
00004 // 
00005 // RooMCStudy: Using the randomizer and profile likelihood add-on models
00006 //
00007 // 
00008 // 07/2008 - Wouter Verkerke 
00009 //
00010 /////////////////////////////////////////////////////////////////////////
00011 
00012 #ifndef __CINT__
00013 #include "RooGlobalFunc.h"
00014 #endif
00015 #include "RooRealVar.h"
00016 #include "RooDataSet.h"
00017 #include "RooGaussian.h"
00018 #include "RooChebychev.h"
00019 #include "RooAddPdf.h"
00020 #include "RooMCStudy.h"
00021 #include "RooRandomizeParamMCSModule.h"
00022 #include "RooDLLSignificanceMCSModule.h"
00023 #include "RooPlot.h"
00024 #include "TCanvas.h"
00025 #include "TH1.h"
00026 #include "TDirectory.h"
00027 
00028 using namespace RooFit ;
00029 
00030 
00031 class TestBasic803 : public RooFitTestUnit
00032 {
00033 public: 
00034   TestBasic803(TFile* refFile, Bool_t writeRef, Int_t verbose) : RooFitTestUnit("MC Study with param rand. and Z calc",refFile,writeRef,verbose) {} ;
00035   Bool_t testCode() {
00036 
00037   // C r e a t e   m o d e l 
00038   // -----------------------
00039 
00040   // Simulation of signal and background of top quark decaying into
00041   // 3 jets with background
00042 
00043   // Observable
00044   RooRealVar mjjj("mjjj","m(3jet) (GeV)",100,85.,350.) ;
00045 
00046   // Signal component (Gaussian)
00047   RooRealVar mtop("mtop","m(top)",162) ;
00048   RooRealVar wtop("wtop","m(top) resolution",15.2) ;
00049   RooGaussian sig("sig","top signal",mjjj,mtop,wtop) ;
00050 
00051   // Background component (Chebychev)
00052   RooRealVar c0("c0","Chebychev coefficient 0",-0.846,-1.,1.) ;
00053   RooRealVar c1("c1","Chebychev coefficient 1", 0.112,-1.,1.) ;
00054   RooRealVar c2("c2","Chebychev coefficient 2", 0.076,-1.,1.) ;
00055   RooChebychev bkg("bkg","combinatorial background",mjjj,RooArgList(c0,c1,c2)) ;
00056 
00057   // Composite model
00058   RooRealVar nsig("nsig","number of signal events",53,0,1e3) ;
00059   RooRealVar nbkg("nbkg","number of background events",103,0,5e3) ;
00060   RooAddPdf model("model","model",RooArgList(sig,bkg),RooArgList(nsig,nbkg)) ;
00061 
00062 
00063 
00064   // C r e a t e   m a n a g e r
00065   // ---------------------------
00066 
00067   // Configure manager to perform binned extended likelihood fits (Binned(),Extended()) on data generated
00068   // with a Poisson fluctuation on Nobs (Extended())
00069   RooMCStudy* mcs = new RooMCStudy(model,mjjj,Binned(),Silence(),Extended(kTRUE),
00070                                    FitOptions(Extended(kTRUE),PrintEvalErrors(-1))) ;
00071 
00072 
00073 
00074   // C u s t o m i z e   m a n a g e r
00075   // ---------------------------------
00076 
00077   // Add module that randomizes the summed value of nsig+nbkg 
00078   // sampling from a uniform distribution between 0 and 1000
00079   //
00080   // In general one can randomize a single parameter, or a 
00081   // sum of N parameters, using either a uniform or a Gaussian
00082   // distribution. Multiple randomization can be executed
00083   // by a single randomizer module
00084   
00085   RooRandomizeParamMCSModule randModule ;
00086   randModule.sampleSumUniform(RooArgSet(nsig,nbkg),50,500) ;
00087   mcs->addModule(randModule) ;  
00088 
00089 
00090   // Add profile likelihood calculation of significance. Redo each
00091   // fit while keeping parameter nsig fixed to zero. For each toy,
00092   // the difference in -log(L) of both fits is stored, as well
00093   // a simple significance interpretation of the delta(-logL)
00094   // using Dnll = 0.5 sigma^2
00095 
00096   RooDLLSignificanceMCSModule sigModule(nsig,0) ;
00097   mcs->addModule(sigModule) ;
00098 
00099 
00100 
00101   // R u n   m a n a g e r ,   m a k e   p l o t s
00102   // ---------------------------------------------
00103 
00104   mcs->generateAndFit(50) ;
00105 
00106   // Make some plots  
00107   RooRealVar* ngen    = (RooRealVar*) mcs->fitParDataSet().get()->find("ngen") ;
00108   RooRealVar* dll     = (RooRealVar*) mcs->fitParDataSet().get()->find("dll_nullhypo_nsig") ;
00109   RooRealVar* z       = (RooRealVar*) mcs->fitParDataSet().get()->find("significance_nullhypo_nsig") ;
00110   RooRealVar* nsigerr = (RooRealVar*) mcs->fitParDataSet().get()->find("nsigerr") ;
00111 
00112   TH1* dll_vs_ngen     = new TH2F("h_dll_vs_ngen"    ,"",40,0,500,40,0,50) ;
00113   TH1* z_vs_ngen       = new TH2F("h_z_vs_ngen"      ,"",40,0,500,40,0,10) ;
00114   TH1* errnsig_vs_ngen = new TH2F("h_nsigerr_vs_ngen","",40,0,500,40,0,30) ;
00115   TH1* errnsig_vs_nsig = new TH2F("h_nsigerr_vs_nsig","",40,0,200,40,0,30) ;
00116 
00117   mcs->fitParDataSet().fillHistogram(dll_vs_ngen,RooArgList(*ngen,*dll)) ;
00118   mcs->fitParDataSet().fillHistogram(z_vs_ngen,RooArgList(*ngen,*z)) ;
00119   mcs->fitParDataSet().fillHistogram(errnsig_vs_ngen,RooArgList(*ngen,*nsigerr)) ;
00120   mcs->fitParDataSet().fillHistogram(errnsig_vs_nsig,RooArgList(nsig,*nsigerr)) ;
00121 
00122   regTH(dll_vs_ngen,"rf803_dll_vs_ngen") ;
00123   regTH(z_vs_ngen,"rf803_z_vs_ngen") ;
00124   regTH(errnsig_vs_ngen,"rf803_errnsig_vs_ngen") ;
00125   regTH(errnsig_vs_nsig,"rf803_errnsig_vs_nsig") ;
00126 
00127   delete mcs ;
00128 
00129   return kTRUE ;
00130 
00131   }
00132 } ;
00133 
00134 
00135 
00136 

Generated on Tue Jul 5 15:07:51 2011 for ROOT_528-00b_version by  doxygen 1.5.1