ROOT logo
//////////////////////////////////////////////////////////////////////////
//
// 'MULTIDIMENSIONAL MODELS' RooFit tutorial macro #302
// 
//  Utility functions classes available for use in tailoring
//  of composite (multidimensional) pdfs
//
//
// 07/2008 - Wouter Verkerke 
// 
/////////////////////////////////////////////////////////////////////////

#ifndef __CINT__
#include "RooGlobalFunc.h"
#endif
#include "RooRealVar.h"
#include "RooDataSet.h"
#include "RooGaussian.h"
#include "TCanvas.h"
#include "TAxis.h"
#include "RooPlot.h"
#include "RooFormulaVar.h"
#include "RooAddition.h"
#include "RooProduct.h"
#include "RooPolyVar.h"
#include "TCanvas.h"
#include "TAxis.h"
#include "TH1.h"

using namespace RooFit ;


void rf302_utilfuncs()
{
  // C r e a t e   o b s e r v a b l e s ,   p a r a m e t e r s 
  // -----------------------------------------------------------

  // Create observables
  RooRealVar x("x","x",-5,5) ;
  RooRealVar y("y","y",-5,5) ;

  // Create parameters
  RooRealVar a0("a0","a0",-1.5,-5,5) ;
  RooRealVar a1("a1","a1",-0.5,-1,1) ;
  RooRealVar sigma("sigma","width of gaussian",0.5) ;


  // U s i n g   R o o F o r m u l a V a r   t o   t a i l o r   p d f 
  // -----------------------------------------------------------------------

  // Create interpreted function f(y) = a0 - a1*sqrt(10*abs(y))
  RooFormulaVar fy_1("fy_1","a0-a1*sqrt(10*abs(y))",RooArgSet(y,a0,a1)) ;

  // Create gauss(x,f(y),s)
  RooGaussian model_1("model_1","Gaussian with shifting mean",x,fy_1,sigma) ;  



  // U s i n g   R o o P o l y V a r   t o   t a i l o r   p d f
  // -----------------------------------------------------------------------

  // Create polynomial function f(y) = a0 + a1*y
  RooPolyVar fy_2("fy_2","fy_2",y,RooArgSet(a0,a1)) ;

  // Create gauss(x,f(y),s)
  RooGaussian model_2("model_2","Gaussian with shifting mean",x,fy_2,sigma) ;  



  // U s i n g   R o o A d d i t i o n   t o   t a i l o r   p d f 
  // -----------------------------------------------------------------------

  // Create sum function f(y) = a0 + y
  RooAddition fy_3("fy_3","a0+y",RooArgSet(a0,y)) ;

  // Create gauss(x,f(y),s)
  RooGaussian model_3("model_3","Gaussian with shifting mean",x,fy_3,sigma) ;  



  // U s i n g   R o o P r o d u c t   t o   t a i l o r   p d f 
  // -----------------------------------------------------------------------

  // Create product function f(y) = a1*y
  RooProduct fy_4("fy_4","a1*y",RooArgSet(a1,y)) ;

  // Create gauss(x,f(y),s)
  RooGaussian model_4("model_4","Gaussian with shifting mean",x,fy_4,sigma) ;  



  // P l o t   a l l   p d f s 
  // ----------------------------

  // Make two-dimensional plots in x vs y
  TH1* hh_model_1 = model_1.createHistogram("hh_model_1",x,Binning(50),YVar(y,Binning(50))) ;
  TH1* hh_model_2 = model_2.createHistogram("hh_model_2",x,Binning(50),YVar(y,Binning(50))) ;
  TH1* hh_model_3 = model_3.createHistogram("hh_model_3",x,Binning(50),YVar(y,Binning(50))) ;
  TH1* hh_model_4 = model_4.createHistogram("hh_model_4",x,Binning(50),YVar(y,Binning(50))) ;
  hh_model_1->SetLineColor(kBlue) ;
  hh_model_2->SetLineColor(kBlue) ;
  hh_model_3->SetLineColor(kBlue) ;
  hh_model_4->SetLineColor(kBlue) ;

  // Make canvas and draw RooPlots
  TCanvas *c = new TCanvas("rf302_utilfuncs","rf302_utilfuncs",800, 800);
  c->Divide(2,2);
  c->cd(1) ; gPad->SetLeftMargin(0.20) ; hh_model_1->GetZaxis()->SetTitleOffset(2.5) ; hh_model_1->Draw("surf") ;
  c->cd(2) ; gPad->SetLeftMargin(0.20) ; hh_model_2->GetZaxis()->SetTitleOffset(2.5) ; hh_model_2->Draw("surf") ;
  c->cd(3) ; gPad->SetLeftMargin(0.20) ; hh_model_3->GetZaxis()->SetTitleOffset(2.5) ; hh_model_3->Draw("surf") ;
  c->cd(4) ; gPad->SetLeftMargin(0.20) ; hh_model_4->GetZaxis()->SetTitleOffset(2.5) ; hh_model_4->Draw("surf") ;
    
}
 rf302_utilfuncs.C:1
 rf302_utilfuncs.C:2
 rf302_utilfuncs.C:3
 rf302_utilfuncs.C:4
 rf302_utilfuncs.C:5
 rf302_utilfuncs.C:6
 rf302_utilfuncs.C:7
 rf302_utilfuncs.C:8
 rf302_utilfuncs.C:9
 rf302_utilfuncs.C:10
 rf302_utilfuncs.C:11
 rf302_utilfuncs.C:12
 rf302_utilfuncs.C:13
 rf302_utilfuncs.C:14
 rf302_utilfuncs.C:15
 rf302_utilfuncs.C:16
 rf302_utilfuncs.C:17
 rf302_utilfuncs.C:18
 rf302_utilfuncs.C:19
 rf302_utilfuncs.C:20
 rf302_utilfuncs.C:21
 rf302_utilfuncs.C:22
 rf302_utilfuncs.C:23
 rf302_utilfuncs.C:24
 rf302_utilfuncs.C:25
 rf302_utilfuncs.C:26
 rf302_utilfuncs.C:27
 rf302_utilfuncs.C:28
 rf302_utilfuncs.C:29
 rf302_utilfuncs.C:30
 rf302_utilfuncs.C:31
 rf302_utilfuncs.C:32
 rf302_utilfuncs.C:33
 rf302_utilfuncs.C:34
 rf302_utilfuncs.C:35
 rf302_utilfuncs.C:36
 rf302_utilfuncs.C:37
 rf302_utilfuncs.C:38
 rf302_utilfuncs.C:39
 rf302_utilfuncs.C:40
 rf302_utilfuncs.C:41
 rf302_utilfuncs.C:42
 rf302_utilfuncs.C:43
 rf302_utilfuncs.C:44
 rf302_utilfuncs.C:45
 rf302_utilfuncs.C:46
 rf302_utilfuncs.C:47
 rf302_utilfuncs.C:48
 rf302_utilfuncs.C:49
 rf302_utilfuncs.C:50
 rf302_utilfuncs.C:51
 rf302_utilfuncs.C:52
 rf302_utilfuncs.C:53
 rf302_utilfuncs.C:54
 rf302_utilfuncs.C:55
 rf302_utilfuncs.C:56
 rf302_utilfuncs.C:57
 rf302_utilfuncs.C:58
 rf302_utilfuncs.C:59
 rf302_utilfuncs.C:60
 rf302_utilfuncs.C:61
 rf302_utilfuncs.C:62
 rf302_utilfuncs.C:63
 rf302_utilfuncs.C:64
 rf302_utilfuncs.C:65
 rf302_utilfuncs.C:66
 rf302_utilfuncs.C:67
 rf302_utilfuncs.C:68
 rf302_utilfuncs.C:69
 rf302_utilfuncs.C:70
 rf302_utilfuncs.C:71
 rf302_utilfuncs.C:72
 rf302_utilfuncs.C:73
 rf302_utilfuncs.C:74
 rf302_utilfuncs.C:75
 rf302_utilfuncs.C:76
 rf302_utilfuncs.C:77
 rf302_utilfuncs.C:78
 rf302_utilfuncs.C:79
 rf302_utilfuncs.C:80
 rf302_utilfuncs.C:81
 rf302_utilfuncs.C:82
 rf302_utilfuncs.C:83
 rf302_utilfuncs.C:84
 rf302_utilfuncs.C:85
 rf302_utilfuncs.C:86
 rf302_utilfuncs.C:87
 rf302_utilfuncs.C:88
 rf302_utilfuncs.C:89
 rf302_utilfuncs.C:90
 rf302_utilfuncs.C:91
 rf302_utilfuncs.C:92
 rf302_utilfuncs.C:93
 rf302_utilfuncs.C:94
 rf302_utilfuncs.C:95
 rf302_utilfuncs.C:96
 rf302_utilfuncs.C:97
 rf302_utilfuncs.C:98
 rf302_utilfuncs.C:99
 rf302_utilfuncs.C:100
 rf302_utilfuncs.C:101
 rf302_utilfuncs.C:102
 rf302_utilfuncs.C:103
 rf302_utilfuncs.C:104
 rf302_utilfuncs.C:105
 rf302_utilfuncs.C:106
 rf302_utilfuncs.C:107
 rf302_utilfuncs.C:108
 rf302_utilfuncs.C:109
 rf302_utilfuncs.C:110
 rf302_utilfuncs.C:111
 rf302_utilfuncs.C:112
 rf302_utilfuncs.C:113
 rf302_utilfuncs.C:114