Likelihood and minimization: fitting with constraints
from __future__ import print_function
import ROOT
x = ROOT.RooRealVar("x", "x", -10, 10)
m = ROOT.RooRealVar("m", "m", 0, -10, 10)
s = ROOT.RooRealVar("s", "s", 2, 0.1, 10)
gauss = ROOT.RooGaussian("gauss", "gauss(x,m,s)", x, m, s)
poly = ROOT.RooPolynomial("poly", "poly(x)", x)
f = ROOT.RooRealVar("f", "f", 0.5, 0.0, 1.0)
model = ROOT.RooAddPdf("model", "model", [gauss, poly], [f])
d = model.generate({x}, 50)
fconstraint = ROOT.RooGaussian("fconstraint", "fconstraint", f, 0.8, 0.1)
modelc = ROOT.RooProdPdf("modelc", "model with constraint", [model, fconstraint])
r1 = model.fitTo(d, Save=True, PrintLevel=-1)
r2 = modelc.fitTo(d, Constrain={f}, Save=True, PrintLevel=-1)
fconstext = ROOT.RooGaussian("fconstext", "fconstext", f, 0.2, 0.1)
r3 = model.fitTo(d, ExternalConstraints={fconstext}, Save=True, PrintLevel=-1)
print("fit result without constraint (data generated at f=0.5)")
r1.Print("v")
print("fit result with internal constraint (data generated at f=0.5, is f=0.8+/-0.2)")
r2.Print("v")
print("fit result with (another) external constraint (data generated at f=0.5, is f=0.2+/-0.1)")
r3.Print("v")
[#1] INFO:Fitting -- RooAbsPdf::fitTo(model) fixing normalization set for coefficient determination to observables in data
[#1] INFO:Fitting -- using CPU computation library compiled with -mavx2
[#1] INFO:Fitting -- RooAddition::defaultErrorLevel(nll_model_modelData) Summation contains a RooNLLVar, using its error level
[#1] INFO:Minimization -- RooAbsMinimizerFcn::setOptimizeConst: activating const optimization
[#1] INFO:Minimization -- RooAbsMinimizerFcn::setOptimizeConst: deactivating const optimization
[#1] INFO:Minimization -- Including the following constraint terms in minimization: (fconstraint)
[#1] INFO:Minimization -- The global observables are not defined , normalize constraints with respect to the parameters (f)
[#1] INFO:Fitting -- RooAbsPdf::fitTo(modelc) fixing normalization set for coefficient determination to observables in data
[#1] INFO:Fitting -- RooAddition::defaultErrorLevel(nll_modelc_modelData) Summation contains a RooNLLVar, using its error level
[#1] INFO:Minimization -- RooAbsMinimizerFcn::setOptimizeConst: activating const optimization
[#1] INFO:Minimization -- RooAbsMinimizerFcn::setOptimizeConst: deactivating const optimization
[#1] INFO:Minimization -- Including the following constraint terms in minimization: (fconstext)
[#1] INFO:Minimization -- The global observables are not defined , normalize constraints with respect to the parameters (f,m,s)
[#1] INFO:Fitting -- RooAbsPdf::fitTo(model) fixing normalization set for coefficient determination to observables in data
[#1] INFO:Fitting -- RooAddition::defaultErrorLevel(nll_model_modelData) Summation contains a RooNLLVar, using its error level
[#1] INFO:Minimization -- RooAbsMinimizerFcn::setOptimizeConst: activating const optimization
[#1] INFO:Minimization -- RooAbsMinimizerFcn::setOptimizeConst: deactivating const optimization
RooFitResult: minimized FCN value: 134.849, estimated distance to minimum: 2.11658e-05
covariance matrix quality: Full, accurate covariance matrix
Status : MINIMIZE=0 HESSE=0
Floating Parameter InitialValue FinalValue +/- Error GblCorr.
-------------------- ------------ -------------------------- --------
f 5.0000e-01 6.4987e-01 +/- 1.21e-01 <none>
m 0.0000e+00 7.1824e-01 +/- 4.97e-01 <none>
s 2.0000e+00 2.1880e+00 +/- 4.61e-01 <none>
RooFitResult: minimized FCN value: 133.901, estimated distance to minimum: 5.96672e-06
covariance matrix quality: Full, accurate covariance matrix
Status : MINIMIZE=0 HESSE=0
Floating Parameter InitialValue FinalValue +/- Error GblCorr.
-------------------- ------------ -------------------------- --------
f 6.4987e-01 7.3784e-01 +/- 7.53e-02 <none>
m 7.1824e-01 6.6350e-01 +/- 5.04e-01 <none>
s 2.1880e+00 2.3885e+00 +/- 4.95e-01 <none>
RooFitResult: minimized FCN value: 137.195, estimated distance to minimum: 0.000153955
covariance matrix quality: Full, accurate covariance matrix
Status : MINIMIZE=0 HESSE=0
Floating Parameter InitialValue FinalValue +/- Error GblCorr.
-------------------- ------------ -------------------------- --------
f 7.3784e-01 3.6215e-01 +/- 8.17e-02 <none>
m 6.6350e-01 7.0071e-01 +/- 5.88e-01 <none>
s 2.3885e+00 1.6987e+00 +/- 4.78e-01 <none>
fit result without constraint (data generated at f=0.5)
fit result with internal constraint (data generated at f=0.5, is f=0.8+/-0.2)
fit result with (another) external constraint (data generated at f=0.5, is f=0.2+/-0.1)
- Date
- February 2018
- Authors
- Clemens Lange, Wouter Verkerke (C++ version)
Definition in file rf604_constraints.py.