# Rf 7 0 3_Effpdfprod¶

Special pdf's: using a product of an (acceptance) efficiency and a pdf as pdf

Author: Wouter Verkerke
This notebook tutorial was automatically generated with ROOTBOOK-izer from the macro found in the ROOT repository on Saturday, November 28, 2020 at 11:07 AM.

In [1]:
%%cpp -d
#include "RooRealVar.h"
#include "RooDataSet.h"
#include "RooGaussian.h"
#include "RooConstVar.h"
#include "RooExponential.h"
#include "RooEffProd.h"
#include "RooFormulaVar.h"
#include "TCanvas.h"
#include "TAxis.h"
#include "RooPlot.h"

In [2]:
%%cpp -d
// This is a workaround to make sure the namespace is used inside functions
using namespace RooFit;


## Define observables and decay pdf¶

Declare observables

In [3]:
RooRealVar t("t", "t", 0, 5);

RooFit v3.60 -- Developed by Wouter Verkerke and David Kirkby
Copyright (C) 2000-2013 NIKHEF, University of California & Stanford University



Make pdf

In [4]:
RooRealVar tau("tau", "tau", -1.54, -4, -0.1);
RooExponential model("model", "model", t, tau);


## Define efficiency function¶

Use error function to simulate turn-on slope

In [5]:
RooFormulaVar eff("eff", "0.5*(TMath::Erf((t-1)/0.5)+1)", t);


## Define decay pdf with efficiency¶

Multiply pdf(t) with efficiency in t

In [6]:
RooEffProd modelEff("modelEff", "model with efficiency", model, eff);


## Plot efficiency, pdf¶

In [7]:
RooPlot *frame1 = t.frame(Title("Efficiency"));
eff.plotOn(frame1, LineColor(kRed));

RooPlot *frame2 = t.frame(Title("Pdf with and without efficiency"));

model.plotOn(frame2, LineStyle(kDashed));
modelEff.plotOn(frame2);

[#1] INFO:NumericIntegration -- RooRealIntegral::init(modelEff_clone_Int[t]) using numeric integrator RooIntegrator1D to calculate Int(t)


## Generate toy data, fit modeleff to data¶

Generate events. if the input pdf has an internal generator, the internal generator is used and an accept/reject sampling on the efficiency is applied.

In [8]:
RooDataSet *data = modelEff.generate(t, 10000);


Fit pdf. the normalization integral is calculated numerically.

In [9]:
modelEff.fitTo(*data);

[#1] INFO:NumericIntegration -- RooRealIntegral::init(modelEff_clone_Int[t]) using numeric integrator RooIntegrator1D to calculate Int(t)
[#1] INFO:Minization -- RooMinimizer::optimizeConst: activating const optimization
[#1] INFO:Minization --  The following expressions have been identified as constant and will be precalculated and cached: (eff)
**********
**    1 **SET PRINT           1
**********
**********
**********
PARAMETER DEFINITIONS:
NO.   NAME         VALUE      STEP SIZE      LIMITS
1 tau         -1.54000e+00  3.90000e-01   -4.00000e+00 -1.00000e-01
**********
**    3 **SET ERR         0.5
**********
**********
**    4 **SET PRINT           1
**********
**********
**    5 **SET STR           1
**********
NOW USING STRATEGY  1: TRY TO BALANCE SPEED AGAINST RELIABILITY
**********
**********
FIRST CALL TO USER FUNCTION AT NEW START POINT, WITH IFLAG=4.
START MIGRAD MINIMIZATION.  STRATEGY  1.  CONVERGENCE WHEN EDM .LT. 1.00e-03
FCN=9696.74 FROM MIGRAD    STATUS=INITIATE        4 CALLS           5 TOTAL
EDM= unknown      STRATEGY= 1      NO ERROR MATRIX
EXT PARAMETER               CURRENT GUESS       STEP         FIRST
NO.   NAME      VALUE            ERROR          SIZE      DERIVATIVE
1  tau         -1.54000e+00   3.90000e-01   2.09076e-01   1.80888e+02
ERR DEF= 0.5
MIGRAD WILL VERIFY CONVERGENCE AND ERROR MATRIX.
COVARIANCE MATRIX CALCULATED SUCCESSFULLY
FCN=9695.84 FROM MIGRAD    STATUS=CONVERGED      12 CALLS          13 TOTAL
EDM=2.41592e-05    STRATEGY= 1      ERROR MATRIX ACCURATE
EXT PARAMETER                                   STEP         FIRST
NO.   NAME      VALUE            ERROR          SIZE      DERIVATIVE
1  tau         -1.55887e+00   1.40931e-02   5.05936e-04   6.58163e-01
ERR DEF= 0.5
EXTERNAL ERROR MATRIX.    NDIM=  25    NPAR=  1    ERR DEF=0.5
1.986e-04
**********
**    7 **SET ERR         0.5
**********
**********
**    8 **SET PRINT           1
**********
**********
**    9 **HESSE         500
**********
COVARIANCE MATRIX CALCULATED SUCCESSFULLY
FCN=9695.84 FROM HESSE     STATUS=OK              5 CALLS          18 TOTAL
EDM=2.41576e-05    STRATEGY= 1      ERROR MATRIX ACCURATE
EXT PARAMETER                                INTERNAL      INTERNAL
NO.   NAME      VALUE            ERROR       STEP SIZE       VALUE
1  tau         -1.55887e+00   1.40931e-02   1.01187e-04   2.54601e-01
ERR DEF= 0.5
EXTERNAL ERROR MATRIX.    NDIM=  25    NPAR=  1    ERR DEF=0.5
1.986e-04
[#1] INFO:Minization -- RooMinimizer::optimizeConst: deactivating const optimization


Plot generated data and overlay fitted pdf

In [10]:
RooPlot *frame3 = t.frame(Title("Fitted pdf with efficiency"));
data->plotOn(frame3);
modelEff.plotOn(frame3);

TCanvas *c = new TCanvas("rf703_effpdfprod", "rf703_effpdfprod", 1200, 400);
c->Divide(3);
c->cd(1);
frame1->GetYaxis()->SetTitleOffset(1.4);
frame1->Draw();
c->cd(2);
frame2->GetYaxis()->SetTitleOffset(1.6);
frame2->Draw();
c->cd(3);

[#1] INFO:NumericIntegration -- RooRealIntegral::init(modelEff_clone_Int[t]) using numeric integrator RooIntegrator1D to calculate Int(t)

%jsroot on