Multidimensional models: usage of full pdf with per-event errors
Author: Clemens Lange, Wouter Verkerke (C++ version)
This notebook tutorial was automatically generated with ROOTBOOK-izer from the macro found in the ROOT repository on Sunday, February 05, 2023 at 11:14 AM.
import ROOT
Welcome to JupyROOT 6.29/01
Observables
dt = ROOT.RooRealVar("dt", "dt", -10, 10)
dterr = ROOT.RooRealVar("dterr", "per-event error on dt", 0.01, 10)
Build a gaussian resolution model scaled by the per-error = gauss(dt,bias,sigma*dterr)
bias = ROOT.RooRealVar("bias", "bias", 0, -10, 10)
sigma = ROOT.RooRealVar("sigma", "per-event error scale factor", 1, 0.1, 10)
gm = ROOT.RooGaussModel("gm1", "gauss model scaled bt per-event error", dt, bias, sigma, dterr)
Construct decay(dt) (x) gauss1(dt|dterr)
tau = ROOT.RooRealVar("tau", "tau", 1.548)
decay_gm = ROOT.RooDecay("decay_gm", "decay", dt, tau, gm, type="DoubleSided")
Use landau pdf to get empirical distribution with long tail
pdfDtErr = ROOT.RooLandau("pdfDtErr", "pdfDtErr", dterr, 1.0, 0.25)
expDataDterr = pdfDtErr.generate({dterr}, 10000)
Construct a histogram pdf to describe the shape of the dtErr distribution
expHistDterr = expDataDterr.binnedClone()
pdfErr = ROOT.RooHistPdf("pdfErr", "pdfErr", {dterr}, expHistDterr)
Construct production of conditional decay_dm(dt|dterr) with empirical pdfErr(dterr)
model = ROOT.RooProdPdf("model", "model", {pdfErr}, Conditional=({decay_gm}, {dt}))
(Alternatively you could also use the landau shape pdfDtErr) ROOT.RooProdPdf model("model", "model",pdfDtErr, ROOT.RooFit.Conditional(decay_gm,dt))
Specify external dataset with dterr values to use model_dm as conditional pdf
data = model.generate({dt, dterr}, 10000)
Specify dterr as conditional observable
model.fitTo(data)
<cppyy.gbl.RooFitResult object at 0x(nil)>
[#1] INFO:Minimization -- RooAbsMinimizerFcn::setOptimizeConst: activating const optimization [#1] INFO:Minimization -- The following expressions have been identified as constant and will be precalculated and cached: (pdfErr) [#1] INFO:Minimization -- The following expressions will be evaluated in cache-and-track mode: (decay_gm) ********** ** 1 **SET PRINT 1 ********** ********** ** 2 **SET NOGRAD ********** PARAMETER DEFINITIONS: NO. NAME VALUE STEP SIZE LIMITS 1 bias 0.00000e+00 2.00000e+00 -1.00000e+01 1.00000e+01 2 sigma 1.00000e+00 4.50000e-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 ********** ** 6 **MIGRAD 1000 1 ********** 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=36045.2 FROM MIGRAD STATUS=INITIATE 8 CALLS 9 TOTAL EDM= unknown STRATEGY= 1 NO ERROR MATRIX EXT PARAMETER CURRENT GUESS STEP FIRST NO. NAME VALUE ERROR SIZE DERIVATIVE 1 bias 0.00000e+00 2.00000e+00 2.01358e-01 3.32978e+02 2 sigma 1.00000e+00 4.50000e-01 1.63378e-01 6.12092e+01 ERR DEF= 0.5 MIGRAD MINIMIZATION HAS CONVERGED. MIGRAD WILL VERIFY CONVERGENCE AND ERROR MATRIX. COVARIANCE MATRIX CALCULATED SUCCESSFULLY FCN=36045 FROM MIGRAD STATUS=CONVERGED 23 CALLS 24 TOTAL EDM=2.04968e-05 STRATEGY= 1 ERROR MATRIX ACCURATE EXT PARAMETER STEP FIRST NO. NAME VALUE ERROR SIZE DERIVATIVE 1 bias -1.00111e-02 1.72603e-02 2.27324e-04 -2.30901e+00 2 sigma 9.91174e-01 2.01705e-02 9.34196e-04 -3.06111e-01 ERR DEF= 0.5 EXTERNAL ERROR MATRIX. NDIM= 25 NPAR= 2 ERR DEF=0.5 2.979e-04 -2.717e-06 -2.717e-06 4.069e-04 PARAMETER CORRELATION COEFFICIENTS NO. GLOBAL 1 2 1 0.00780 1.000 -0.008 2 0.00780 -0.008 1.000 ********** ** 7 **SET ERR 0.5 ********** ********** ** 8 **SET PRINT 1 ********** ********** ** 9 **HESSE 1000 ********** COVARIANCE MATRIX CALCULATED SUCCESSFULLY FCN=36045 FROM HESSE STATUS=OK 10 CALLS 34 TOTAL EDM=2.04778e-05 STRATEGY= 1 ERROR MATRIX ACCURATE EXT PARAMETER INTERNAL INTERNAL NO. NAME VALUE ERROR STEP SIZE VALUE 1 bias -1.00111e-02 1.72605e-02 4.54647e-05 -1.00111e-03 2 sigma 9.91174e-01 2.01710e-02 1.86839e-04 -9.61350e-01 ERR DEF= 0.5 EXTERNAL ERROR MATRIX. NDIM= 25 NPAR= 2 ERR DEF=0.5 2.979e-04 -3.110e-06 -3.110e-06 4.069e-04 PARAMETER CORRELATION COEFFICIENTS NO. GLOBAL 1 2 1 0.00893 1.000 -0.009 2 0.00893 -0.009 1.000 [#1] INFO:Minimization -- RooAbsMinimizerFcn::setOptimizeConst: deactivating const optimization
Make two-dimensional plot of conditional pdf in (dt,dterr)
hh_model = model.createHistogram("hh_model", dt, Binning=50, YVar=dict(var=dterr, Binning=50))
hh_model.SetLineColor(ROOT.kBlue)
Make projection of data an dt
frame = dt.frame(Title="Projection of model(dt|dterr) on dt")
data.plotOn(frame)
model.plotOn(frame)
<cppyy.gbl.RooPlot object at 0x10b7eff0>
[#1] INFO:Plotting -- RooAbsReal::plotOn(model) plot on dt integrates over variables (dterr) [#1] INFO:NumericIntegration -- RooRealIntegral::init([pdfErr_NORM[dterr]_X_decay_gm_NORM[dt]]_Int[dterr]) using numeric integrator RooIntegrator1D to calculate Int(dterr)
Draw all frames on canvas
c = ROOT.TCanvas("rf307_fullpereventerrors", "rf307_fullpereventerrors", 800, 400)
c.Divide(2)
c.cd(1)
ROOT.gPad.SetLeftMargin(0.20)
hh_model.GetZaxis().SetTitleOffset(2.5)
hh_model.Draw("surf")
c.cd(2)
ROOT.gPad.SetLeftMargin(0.15)
frame.GetYaxis().SetTitleOffset(1.6)
frame.Draw()
c.SaveAs("rf307_fullpereventerrors.png")
Info in <TCanvas::Print>: png file rf307_fullpereventerrors.png has been created
Draw all canvases
from ROOT import gROOT
gROOT.GetListOfCanvases().Draw()