rf314_paramfitrange¶

Multidimensional models: working with parametrized ranges in a fit. This an example of a fit with an acceptance that changes per-event

pdf = exp(-t/tau) with t[tmin,5]

where t and tmin are both observables in the dataset

Author: Wouter Verkerke
This notebook tutorial was automatically generated with ROOTBOOK-izer from the macro found in the ROOT repository on Wednesday, November 30, 2022 at 11:23 AM.

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

using namespace RooFit;


Define observables and decay pdf¶

Declare observables

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


Make parametrized range in t : [tmin,5]

In [3]:
t.setRange(tmin, RooConst(t.getMax()));


Make pdf

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


Create input data¶

Generate complete dataset without acceptance cuts (for reference)

In [5]:
RooDataSet *dall = model.generate(t, 10000);


Generate a (fake) prototype dataset for acceptance limit values

In [6]:
RooDataSet *tmp = RooGaussian("gmin", "gmin", tmin, RooConst(0), RooConst(0.5)).generate(tmin, 5000);


Generate dataset with t values that observe (t>tmin)

In [7]:
RooDataSet *dacc = model.generate(t, ProtoData(*tmp));


Fit pdf to data in acceptance region¶

In [8]:
RooFitResult *r = model.fitTo(*dacc, Save());

[#1] INFO:Minimization -- RooAbsMinimizerFcn::setOptimizeConst: activating const optimization
**********
**    1 **SET PRINT           1
**********
**********
**********
PARAMETER DEFINITIONS:
NO.   NAME         VALUE      STEP SIZE      LIMITS
1 tau         -1.54000e+00  7.20000e-01   -1.00000e+01 -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=2824.02 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   7.20000e-01   2.12947e-01  -4.56069e+01
ERR DEF= 0.5
MIGRAD WILL VERIFY CONVERGENCE AND ERROR MATRIX.
COVARIANCE MATRIX CALCULATED SUCCESSFULLY
FCN=2823.97 FROM MIGRAD    STATUS=CONVERGED      12 CALLS          13 TOTAL
EDM=6.75021e-08    STRATEGY= 1      ERROR MATRIX ACCURATE
EXT PARAMETER                                   STEP         FIRST
NO.   NAME      VALUE            ERROR          SIZE      DERIVATIVE
1  tau         -1.53353e+00   2.21980e-02   2.34054e-04   4.07752e-02
ERR DEF= 0.5
EXTERNAL ERROR MATRIX.    NDIM=  25    NPAR=  1    ERR DEF=0.5
4.928e-04
**********
**    7 **SET ERR         0.5
**********
**********
**    8 **SET PRINT           1
**********
**********
**    9 **HESSE         500
**********
COVARIANCE MATRIX CALCULATED SUCCESSFULLY
FCN=2823.97 FROM HESSE     STATUS=OK              5 CALLS          18 TOTAL
EDM=6.74739e-08    STRATEGY= 1      ERROR MATRIX ACCURATE
EXT PARAMETER                                INTERNAL      INTERNAL
NO.   NAME      VALUE            ERROR       STEP SIZE       VALUE
1  tau         -1.53353e+00   2.21980e-02   4.68108e-05   7.90063e-01
ERR DEF= 0.5
EXTERNAL ERROR MATRIX.    NDIM=  25    NPAR=  1    ERR DEF=0.5
4.928e-04
[#1] INFO:Minimization -- RooAbsMinimizerFcn::setOptimizeConst: deactivating const optimization


Plot fitted pdf on full and accepted data¶

Make plot frame, add datasets and overlay model

In [9]:
RooPlot *frame = t.frame(Title("Fit to data with per-event acceptance"));
dall->plotOn(frame, MarkerColor(kRed), LineColor(kRed));
model.plotOn(frame);
dacc->plotOn(frame);

[#1] INFO:Plotting -- RooPlot::updateFitRangeNorm: New event count of 5000 will supercede previous event count of 10000 for normalization of PDF projections


Print fit results to demonstrate absence of bias

In [10]:
r->Print("v");

new TCanvas("rf314_paramranges", "rf314_paramranges", 600, 600);
frame->GetYaxis()->SetTitleOffset(1.6);
frame->Draw();

return;

  RooFitResult: minimized FCN value: 2823.97, estimated distance to minimum: 6.74739e-08
covariance matrix quality: Full, accurate covariance matrix
Status : MINIMIZE=0 HESSE=0

Floating Parameter  InitialValue    FinalValue +/-  Error     GblCorr.
--------------------  ------------  --------------------------  --------
tau   -1.5400e+00   -1.5335e+00 +/-  2.22e-02  <none>



Draw all canvases

In [11]:
%jsroot on
gROOT->GetListOfCanvases()->Draw()