From $ROOTSYS/tutorials/roofit/rf209_anaconv.C

/////////////////////////////////////////////////////////////////////////
//
// 'ADDITION AND CONVOLUTION' RooFit tutorial macro #209
// 
// Decay function p.d.fs with optional B physics 
// effects (mixing and CP violation) that can be
// analytically convolved with e.g. Gaussian resolution 
// functions
// 
// pdf1 = decay(t,tau) (x) delta(t)
// pdf2 = decay(t,tau) (x) gauss(t,m,s)
// pdf3 = decay(t,tau) (x) (f*gauss1(t,m1,s1) + (1-f)*gauss2(t,m1,s1))
// 
// 07/2008 - Wouter Verkerke 
//
/////////////////////////////////////////////////////////////////////////

#ifndef __CINT__
#include "RooGlobalFunc.h"
#endif
#include "RooRealVar.h"
#include "RooDataSet.h"
#include "RooGaussModel.h"
#include "RooAddModel.h"
#include "RooTruthModel.h"
#include "RooDecay.h"
#include "RooPlot.h"
#include "TCanvas.h"
#include "TAxis.h"
#include "TH1.h"
using namespace RooFit ;



void rf209_anaconv()
{
  // B - p h y s i c s   p d f   w i t h   t r u t h   r e s o l u t i o n
  // ---------------------------------------------------------------------

  // Variables of decay p.d.f.
  RooRealVar dt("dt","dt",-10,10) ;
  RooRealVar tau("tau","tau",1.548) ;

  // Build a truth resolution model (delta function)
  RooTruthModel tm("tm","truth model",dt) ;

  // Construct decay(t) (x) delta(t)
  RooDecay decay_tm("decay_tm","decay",dt,tau,tm,RooDecay::DoubleSided) ;

  // Plot p.d.f. (dashed)
  RooPlot* frame = dt.frame(Title("Bdecay (x) resolution")) ;
  decay_tm.plotOn(frame,LineStyle(kDashed)) ;


  // B - p h y s i c s   p d f   w i t h   G a u s s i a n   r e s o l u t i o n
  // ----------------------------------------------------------------------------

  // Build a gaussian resolution model
  RooRealVar bias1("bias1","bias1",0) ;
  RooRealVar sigma1("sigma1","sigma1",1) ;
  RooGaussModel gm1("gm1","gauss model 1",dt,bias1,sigma1) ;

  // Construct decay(t) (x) gauss1(t)
  RooDecay decay_gm1("decay_gm1","decay",dt,tau,gm1,RooDecay::DoubleSided) ;

  // Plot p.d.f. 
  decay_gm1.plotOn(frame) ;


  // B - p h y s i c s   p d f   w i t h   d o u b l e   G a u s s i a n   r e s o l u t i o n
  // ------------------------------------------------------------------------------------------

  // Build another gaussian resolution model
  RooRealVar bias2("bias2","bias2",0) ;
  RooRealVar sigma2("sigma2","sigma2",5) ;
  RooGaussModel gm2("gm2","gauss model 2",dt,bias2,sigma2) ;

  // Build a composite resolution model f*gm1+(1-f)*gm2
  RooRealVar gm1frac("gm1frac","fraction of gm1",0.5) ;
  RooAddModel gmsum("gmsum","sum of gm1 and gm2",RooArgList(gm1,gm2),gm1frac) ;

  // Construct decay(t) (x) (f*gm1 + (1-f)*gm2)
  RooDecay decay_gmsum("decay_gmsum","decay",dt,tau,gmsum,RooDecay::DoubleSided) ;

  // Plot p.d.f. (red)
  decay_gmsum.plotOn(frame,LineColor(kRed)) ;


  // Draw all frames on canvas
  new TCanvas("rf209_anaconv","rf209_anaconv",600, 600);
  gPad->SetLeftMargin(0.15) ; frame->GetYaxis()->SetTitleOffset(1.6) ; frame->Draw() ;

}
 rf209_anaconv.C:1
 rf209_anaconv.C:2
 rf209_anaconv.C:3
 rf209_anaconv.C:4
 rf209_anaconv.C:5
 rf209_anaconv.C:6
 rf209_anaconv.C:7
 rf209_anaconv.C:8
 rf209_anaconv.C:9
 rf209_anaconv.C:10
 rf209_anaconv.C:11
 rf209_anaconv.C:12
 rf209_anaconv.C:13
 rf209_anaconv.C:14
 rf209_anaconv.C:15
 rf209_anaconv.C:16
 rf209_anaconv.C:17
 rf209_anaconv.C:18
 rf209_anaconv.C:19
 rf209_anaconv.C:20
 rf209_anaconv.C:21
 rf209_anaconv.C:22
 rf209_anaconv.C:23
 rf209_anaconv.C:24
 rf209_anaconv.C:25
 rf209_anaconv.C:26
 rf209_anaconv.C:27
 rf209_anaconv.C:28
 rf209_anaconv.C:29
 rf209_anaconv.C:30
 rf209_anaconv.C:31
 rf209_anaconv.C:32
 rf209_anaconv.C:33
 rf209_anaconv.C:34
 rf209_anaconv.C:35
 rf209_anaconv.C:36
 rf209_anaconv.C:37
 rf209_anaconv.C:38
 rf209_anaconv.C:39
 rf209_anaconv.C:40
 rf209_anaconv.C:41
 rf209_anaconv.C:42
 rf209_anaconv.C:43
 rf209_anaconv.C:44
 rf209_anaconv.C:45
 rf209_anaconv.C:46
 rf209_anaconv.C:47
 rf209_anaconv.C:48
 rf209_anaconv.C:49
 rf209_anaconv.C:50
 rf209_anaconv.C:51
 rf209_anaconv.C:52
 rf209_anaconv.C:53
 rf209_anaconv.C:54
 rf209_anaconv.C:55
 rf209_anaconv.C:56
 rf209_anaconv.C:57
 rf209_anaconv.C:58
 rf209_anaconv.C:59
 rf209_anaconv.C:60
 rf209_anaconv.C:61
 rf209_anaconv.C:62
 rf209_anaconv.C:63
 rf209_anaconv.C:64
 rf209_anaconv.C:65
 rf209_anaconv.C:66
 rf209_anaconv.C:67
 rf209_anaconv.C:68
 rf209_anaconv.C:69
 rf209_anaconv.C:70
 rf209_anaconv.C:71
 rf209_anaconv.C:72
 rf209_anaconv.C:73
 rf209_anaconv.C:74
 rf209_anaconv.C:75
 rf209_anaconv.C:76
 rf209_anaconv.C:77
 rf209_anaconv.C:78
 rf209_anaconv.C:79
 rf209_anaconv.C:80
 rf209_anaconv.C:81
 rf209_anaconv.C:82
 rf209_anaconv.C:83
 rf209_anaconv.C:84
 rf209_anaconv.C:85
 rf209_anaconv.C:86
 rf209_anaconv.C:87
 rf209_anaconv.C:88
 rf209_anaconv.C:89
 rf209_anaconv.C:90
 rf209_anaconv.C:91
 rf209_anaconv.C:92
 rf209_anaconv.C:93
 rf209_anaconv.C:94