# rf204a_extendedLikelihood¶

Extended maximum likelihood fit in multiple ranges.

Author: Harshal Shende, Stephan Hageboeck (C++ version)
This notebook tutorial was automatically generated with ROOTBOOK-izer from the macro found in the ROOT repository on Wednesday, November 30, 2022 at 11:22 AM.

In [1]:
import ROOT

Welcome to JupyROOT 6.27/01


## Setup component pdfs¶

Declare observable x

In [2]:
x = ROOT.RooRealVar("x", "x", 0, 11)


Create two Gaussian PDFs g1(x,mean1,sigma) anf g2(x,mean2,sigma) and their parameters

In [3]:
mean = ROOT.RooRealVar("mean", "mean of gaussians", 5)
sigma1 = ROOT.RooRealVar("sigma1", "width of gaussians", 0.5)
sigma2 = ROOT.RooRealVar("sigma2", "width of gaussians", 1)

sig1 = ROOT.RooGaussian("sig1", "Signal component 1", x, mean, sigma1)
sig2 = ROOT.RooGaussian("sig2", "Signal component 2", x, mean, sigma2)

[#0] WARNING:InputArguments -- The parameter 'sigma1' with range [-1e+30, 1e+30] of the RooGaussian 'sig1' exceeds the safe range of (0, inf). Advise to limit its range.
[#0] WARNING:InputArguments -- The parameter 'sigma2' with range [-1e+30, 1e+30] of the RooGaussian 'sig2' exceeds the safe range of (0, inf). Advise to limit its range.


Build Chebychev polynomial pdf

In [4]:
a0 = ROOT.RooRealVar("a0", "a0", 0.5, 0.0, 1.0)
a1 = ROOT.RooRealVar("a1", "a1", 0.2, 0.0, 1.0)
bkg = ROOT.RooChebychev("bkg", "Background", x, [a0, a1])


Sum the signal components into a composite signal pdf

In [5]:
sig1frac = ROOT.RooRealVar("sig1frac", "fraction of component 1 in signal", 0.8, 0.0, 1.0)
sig = ROOT.RooAddPdf("sig", "Signal", [sig1, sig2], sig1frac)


## Extend the pdfs¶

Define signal range in which events counts are to be defined

In [6]:
x.setRange("signalRange", 4, 6)

[#1] INFO:Eval -- RooRealVar::setRange(x) new range named 'signalRange' created with bounds [4,6]


Associated nsig/nbkg as expected number of events with sig/bkg _in_therange "signalRange"

In [7]:
nsig = ROOT.RooRealVar("nsig", "number of signal events in signalRange", 500, 0.0, 10000)
nbkg = ROOT.RooRealVar("nbkg", "number of background events in signalRange", 500, 0, 10000)


Use AddPdf to extend the model. Giving as many coefficients as pdfs switches on extension.

In [8]:
model = ROOT.RooAddPdf("model", "(g1+g2)+a", [bkg, sig], [nbkg, nsig])


## Sample data, fit model¶

Generate 1000 events from model so that nsig,nbkg come out to numbers <<500 in fit

In [9]:
data = model.generate(x, 1000)

canv = ROOT.TCanvas("Canvas", "Canvas", 1500, 600)
canv.Divide(3, 1)


## Fit full range¶

Perform unbinned ML fit to data, full range

IMPORTANT: The model needs to be copied when fitting with different ranges because the interpretation of the coefficients is tied to the fit range that's used in the first fit

In [10]:
canv.cd(1)

r = model1.fitTo(data, Save=True)
r.Print()

frame = x.frame(Title="Full range fitted")
data.plotOn(frame)
model1.plotOn(frame, VisualizeError=r)
model1.plotOn(frame)
model1.paramOn(frame)
frame.Draw()

[#1] INFO:Minimization -- p.d.f. provides expected number of events, including extended term in likelihood.
[#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: (sig1,sig2)
[#1] INFO:Minimization --  The following expressions will be evaluated in cache-and-track mode: (bkg)
**********
**    1 **SET PRINT           1
**********
**********
**********
PARAMETER DEFINITIONS:
NO.   NAME         VALUE      STEP SIZE      LIMITS
1 a0           5.00000e-01  1.00000e-01    0.00000e+00  1.00000e+00
2 a1           2.00000e-01  1.00000e-01    0.00000e+00  1.00000e+00
3 nbkg         5.00000e+02  2.50000e+02    0.00000e+00  1.00000e+04
4 nsig         5.00000e+02  2.50000e+02    0.00000e+00  1.00000e+04
5 sig1frac     8.00000e-01  1.00000e-01    0.00000e+00  1.00000e+00
**********
**    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=-3871.89 FROM MIGRAD    STATUS=INITIATE       14 CALLS          15 TOTAL
EDM= unknown      STRATEGY= 1      NO ERROR MATRIX
EXT PARAMETER               CURRENT GUESS       STEP         FIRST
NO.   NAME      VALUE            ERROR          SIZE      DERIVATIVE
1  a0           5.00000e-01   1.00000e-01   2.01358e-01   6.22718e+00
2  a1           2.00000e-01   1.00000e-01   2.57889e-01  -1.46786e+00
3  nbkg         5.00000e+02   2.50000e+02   1.18625e-01   3.78614e+00
4  nsig         5.00000e+02   2.50000e+02   1.18625e-01  -3.78710e+00
5  sig1frac     8.00000e-01   1.00000e-01   2.57889e-01  -2.60731e+00
ERR DEF= 0.5
MIGRAD WILL VERIFY CONVERGENCE AND ERROR MATRIX.
COVARIANCE MATRIX CALCULATED SUCCESSFULLY
FCN=-3872.49 FROM MIGRAD    STATUS=CONVERGED      92 CALLS          93 TOTAL
EDM=8.63054e-05    STRATEGY= 1      ERROR MATRIX ACCURATE
EXT PARAMETER                                   STEP         FIRST
NO.   NAME      VALUE            ERROR          SIZE      DERIVATIVE
1  a0           4.26471e-01   7.58981e-02   6.35013e-03   2.23263e-02
2  a1           1.75944e-01   1.10401e-01   8.49976e-03  -2.48705e-02
3  nbkg         5.11008e+02   3.60346e+01   4.85975e-04  -2.28107e-01
4  nsig         4.88988e+02   3.57357e+01   4.87261e-04   2.14226e-01
5  sig1frac     8.63918e-01   1.08330e-01   8.79881e-03  -1.87106e-02
ERR DEF= 0.5
EXTERNAL ERROR MATRIX.    NDIM=  25    NPAR=  5    ERR DEF=0.5
5.806e-03  2.284e-03 -6.486e-01  6.487e-01 -2.172e-03
2.284e-03  1.255e-02 -2.540e+00  2.540e+00 -8.020e-03
-6.486e-01 -2.540e+00  1.299e+03 -7.878e+02  2.592e+00
6.487e-01  2.540e+00 -7.878e+02  1.277e+03 -2.593e+00
-2.172e-03 -8.020e-03  2.592e+00 -2.593e+00  1.215e-02
PARAMETER  CORRELATION COEFFICIENTS
NO.  GLOBAL      1      2      3      4      5
1  0.29577   1.000  0.268 -0.236  0.238 -0.259
2  0.73433   0.268  1.000 -0.629  0.635 -0.650
3  0.72344  -0.236 -0.629  1.000 -0.612  0.653
4  0.72920   0.238  0.635 -0.612  1.000 -0.658
5  0.75608  -0.259 -0.650  0.653 -0.658  1.000
**********
**    7 **SET ERR         0.5
**********
**********
**    8 **SET PRINT           1
**********
**********
**    9 **HESSE        2500
**********
COVARIANCE MATRIX CALCULATED SUCCESSFULLY
FCN=-3872.49 FROM HESSE     STATUS=OK             31 CALLS         124 TOTAL
EDM=8.60976e-05    STRATEGY= 1      ERROR MATRIX ACCURATE
EXT PARAMETER                                INTERNAL      INTERNAL
NO.   NAME      VALUE            ERROR       STEP SIZE       VALUE
1  a0           4.26471e-01   7.58562e-02   1.27003e-03  -1.47593e-01
2  a1           1.75944e-01   1.10000e-01   1.69995e-03  -7.05103e-01
3  nbkg         5.11008e+02   3.59610e+01   9.71951e-05  -1.11474e+00
4  nsig         4.88988e+02   3.56576e+01   9.74523e-05  -1.12485e+00
5  sig1frac     8.63918e-01   1.08098e-01   1.75976e-03   8.15160e-01
ERR DEF= 0.5
EXTERNAL ERROR MATRIX.    NDIM=  25    NPAR=  5    ERR DEF=0.5
5.800e-03  2.258e-03 -6.425e-01  6.425e-01 -2.152e-03
2.258e-03  1.245e-02 -2.515e+00  2.516e+00 -7.942e-03
-6.425e-01 -2.515e+00  1.293e+03 -7.824e+02  2.576e+00
6.425e-01  2.516e+00 -7.824e+02  1.272e+03 -2.576e+00
-2.152e-03 -7.942e-03  2.576e+00 -2.576e+00  1.209e-02
PARAMETER  CORRELATION COEFFICIENTS
NO.  GLOBAL      1      2      3      4      5
1  0.29405   1.000  0.266 -0.235  0.237 -0.257
2  0.73196   0.266  1.000 -0.627  0.632 -0.647
3  0.72209  -0.235 -0.627  1.000 -0.610  0.651
4  0.72779   0.237  0.632 -0.610  1.000 -0.657
5  0.75482  -0.257 -0.647  0.651 -0.657  1.000
[#1] INFO:Minimization -- RooAbsMinimizerFcn::setOptimizeConst: deactivating const optimization

RooFitResult: minimized FCN value: -3872.49, estimated distance to minimum: 8.60976e-05
covariance matrix quality: Full, accurate covariance matrix
Status : MINIMIZE=0 HESSE=0

Floating Parameter    FinalValue +/-  Error
--------------------  --------------------------
a0    4.2647e-01 +/-  7.59e-02
a1    1.7594e-01 +/-  1.10e-01
nbkg    5.1101e+02 +/-  3.60e+01
nsig    4.8899e+02 +/-  3.57e+01
sig1frac    8.6392e-01 +/-  1.08e-01



## Fit in two regions¶

In [11]:
canv.cd(2)
x.setRange("left", 0.0, 4.0)
x.setRange("right", 6.0, 10.0)

r2 = model2.fitTo(data, Range="left,right", Save=True)
r2.Print()

frame2 = x.frame(Title="Fit in left/right sideband")
data.plotOn(frame2)
model2.plotOn(frame2, VisualizeError=r2)
model2.plotOn(frame2)
model2.paramOn(frame2)
frame2.Draw()

[#1] INFO:Eval -- RooRealVar::setRange(x) new range named 'left' created with bounds [0,4]
[#1] INFO:Eval -- RooRealVar::setRange(x) new range named 'right' created with bounds [6,10]
[#1] INFO:Minimization -- p.d.f. provides expected number of events, including extended term in likelihood.
[#1] INFO:Eval -- RooRealVar::setRange(x) new range named 'fit_nll_model_modelData_left' created with bounds [0,4]
[#1] INFO:Eval -- RooRealVar::setRange(x) new range named 'fit_nll_model_modelData_right' created with bounds [6,10]
[#1] INFO:Fitting -- RooAbsOptTestStatistic::ctor(nll_model_modelData) constructing test statistic for sub-range named left,right
[#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: (sig1,sig2)
[#1] INFO:Minimization --  The following expressions will be evaluated in cache-and-track mode: (bkg)
**********
**   10 **SET PRINT           1
**********
**********
**********
PARAMETER DEFINITIONS:
NO.   NAME         VALUE      STEP SIZE      LIMITS
1 a0           4.26471e-01  7.58562e-02    0.00000e+00  1.00000e+00
2 a1           1.75944e-01  1.10000e-01    0.00000e+00  1.00000e+00
3 nbkg         5.11008e+02  3.59610e+01    0.00000e+00  1.00000e+04
4 nsig         4.88988e+02  3.56576e+01    0.00000e+00  1.00000e+04
5 sig1frac     8.63918e-01  1.08098e-01    0.00000e+00  1.00000e+00
**********
**   12 **SET ERR         0.5
**********
**********
**   13 **SET PRINT           1
**********
**********
**   14 **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=-1133.19 FROM MIGRAD    STATUS=INITIATE       14 CALLS          15 TOTAL
EDM= unknown      STRATEGY= 1      NO ERROR MATRIX
EXT PARAMETER               CURRENT GUESS       STEP         FIRST
NO.   NAME      VALUE            ERROR          SIZE      DERIVATIVE
1  a0           4.26471e-01   7.58562e-02   1.54029e-01   2.97025e+00
2  a1           1.75944e-01   1.10000e-01   3.04490e-01   3.05683e+00
3  nbkg         5.11008e+02   3.59610e+01   1.63406e-02   4.24214e+01
4  nsig         4.88988e+02   3.56576e+01   1.65451e-02   5.45919e-01
5  sig1frac     8.63918e-01   1.08098e-01   3.48778e-01   7.27615e-01
ERR DEF= 0.5
MIGRAD WILL VERIFY CONVERGENCE AND ERROR MATRIX.
COVARIANCE MATRIX CALCULATED SUCCESSFULLY
FCN=-1134.15 FROM MIGRAD    STATUS=CONVERGED     149 CALLS         150 TOTAL
EDM=1.94982e-05    STRATEGY= 1      ERROR MATRIX ACCURATE
EXT PARAMETER                                   STEP         FIRST
NO.   NAME      VALUE            ERROR          SIZE      DERIVATIVE
1  a0           3.23929e-01   1.10404e-01   4.10351e-03   8.17015e-03
2  a1           2.88453e-02   5.45830e-01   1.39787e-02  -5.49618e-03
3  nbkg         5.01892e+02   3.98714e+01   2.93870e-04  -1.33300e-01
4  nsig         4.10983e+02   2.63611e+02   1.44231e-03  -6.59247e-03
5  sig1frac     8.58940e-01   2.76155e-01   7.42299e-03   1.70743e-03
ERR DEF= 0.5
EXTERNAL ERROR MATRIX.    NDIM=  25    NPAR=  5    ERR DEF=0.5
1.242e-02  1.300e-02 -1.353e+00 -5.302e+00 -1.528e-02
1.300e-02  3.091e-02 -3.948e+00 -1.123e+01 -3.495e-02
-1.353e+00 -3.948e+00  1.590e+03  2.791e+03  7.770e+00
-5.302e+00 -1.123e+01  2.791e+03  6.990e+04  6.730e+01
-1.528e-02 -3.495e-02  7.770e+00  6.730e+01  1.017e-01
PARAMETER  CORRELATION COEFFICIENTS
NO.  GLOBAL      1      2      3      4      5
1  0.67241   1.000  0.664 -0.304 -0.180 -0.430
2  0.82439   0.664  1.000 -0.563 -0.242 -0.623
3  0.72220  -0.304 -0.563  1.000  0.265  0.611
4  0.88430  -0.180 -0.242  0.265  1.000  0.798
5  0.93740  -0.430 -0.623  0.611  0.798  1.000
**********
**   16 **SET ERR         0.5
**********
**********
**   17 **SET PRINT           1
**********
**********
**   18 **HESSE        2500
**********
COVARIANCE MATRIX CALCULATED SUCCESSFULLY
FCN=-1134.15 FROM HESSE     STATUS=OK             31 CALLS         181 TOTAL
EDM=1.87888e-05    STRATEGY= 1      ERROR MATRIX ACCURATE
EXT PARAMETER                                INTERNAL      INTERNAL
NO.   NAME      VALUE            ERROR       STEP SIZE       VALUE
1  a0           3.23929e-01   1.08109e-01   8.20702e-04  -3.59858e-01
2  a1           2.88453e-02   5.40605e-01   5.59149e-04  -1.22946e+00
3  nbkg         5.01892e+02   3.94666e+01   5.87740e-05  -1.11890e+00
4  nsig         4.10983e+02   2.68024e+02   2.88462e-04  -1.16251e+00
5  sig1frac     8.58940e-01   2.76393e-01   2.96920e-04   8.00751e-01
ERR DEF= 0.5
EXTERNAL ERROR MATRIX.    NDIM=  25    NPAR=  5    ERR DEF=0.5
1.190e-02  1.198e-02 -1.213e+00 -5.251e+00 -1.425e-02
1.198e-02  2.901e-02 -3.680e+00 -1.127e+01 -3.307e-02
-1.213e+00 -3.680e+00  1.558e+03  2.890e+03  7.605e+00
-5.251e+00 -1.127e+01  2.890e+03  7.228e+04  6.954e+01
-1.425e-02 -3.307e-02  7.605e+00  6.954e+01  1.020e-01
PARAMETER  CORRELATION COEFFICIENTS
NO.  GLOBAL      1      2      3      4      5
1  0.65435   1.000  0.645 -0.282 -0.179 -0.409
2  0.81152   0.645  1.000 -0.547 -0.246 -0.608
3  0.71533  -0.282 -0.547  1.000  0.272  0.603
4  0.88834  -0.179 -0.246  0.272  1.000  0.810
5  0.93756  -0.409 -0.608  0.603  0.810  1.000
[#1] INFO:Minimization -- RooAbsMinimizerFcn::setOptimizeConst: deactivating const optimization

RooFitResult: minimized FCN value: -1134.15, estimated distance to minimum: 1.87888e-05
covariance matrix quality: Full, accurate covariance matrix
Status : MINIMIZE=0 HESSE=0

Floating Parameter    FinalValue +/-  Error
--------------------  --------------------------
a0    3.2393e-01 +/-  1.08e-01
a1    2.8845e-02 +/-  5.41e-01
nbkg    5.0189e+02 +/-  3.95e+01
nsig    4.1098e+02 +/-  2.68e+02
sig1frac    8.5894e-01 +/-  2.76e-01

[#1] INFO:Plotting -- RooAbsPdf::plotOn(model) p.d.f was fitted in a subrange and no explicit Range() and NormRange() was specified. Plotting / normalising in fit range. To override, do one of the following
- Clear the automatic fit range attribute: <pdf>.removeStringAttribute("fitrange");
- Explicitly specify the plotting range: Range("<rangeName>").
- Explicitly specify where to compute the normalisation: NormRange("<rangeName>").
The default (full) range can be denoted with Range("") / NormRange("").
[#1] INFO:Plotting -- RooAbsPdf::plotOn(model) only plotting range 'fit_nll_model_modelData_left,fit_nll_model_modelData_right'
[#1] INFO:Plotting -- RooAbsPdf::plotOn(model) p.d.f. curve is normalized using explicit choice of ranges 'fit_nll_model_modelData_left,fit_nll_model_modelData_right'
[#1] INFO:Plotting -- RooAbsPdf::plotOn(model) only plotting range 'fit_nll_model_modelData_left'
[#1] INFO:Plotting -- RooAbsPdf::plotOn(model) p.d.f. curve is normalized using explicit choice of ranges 'fit_nll_model_modelData_left,fit_nll_model_modelData_right'
[#1] INFO:Plotting -- RooAbsPdf::plotOn(model) only plotting range 'fit_nll_model_modelData_left'
[#1] INFO:Plotting -- RooAbsPdf::plotOn(model) p.d.f. curve is normalized using explicit choice of ranges 'fit_nll_model_modelData_left,fit_nll_model_modelData_right'
[#1] INFO:Plotting -- RooAbsPdf::plotOn(model) only plotting range 'fit_nll_model_modelData_left'
[#1] INFO:Plotting -- RooAbsPdf::plotOn(model) p.d.f. curve is normalized using explicit choice of ranges 'fit_nll_model_modelData_left,fit_nll_model_modelData_right'
[#1] INFO:Plotting -- RooAbsPdf::plotOn(model) only plotting range 'fit_nll_model_modelData_left'
[#1] INFO:Plotting -- RooAbsPdf::plotOn(model) p.d.f. curve is normalized using explicit choice of ranges 'fit_nll_model_modelData_left,fit_nll_model_modelData_right'
[#1] INFO:Plotting -- RooAbsPdf::plotOn(model) only plotting range 'fit_nll_model_modelData_left'
[#1] INFO:Plotting -- RooAbsPdf::plotOn(model) p.d.f. curve is normalized using explicit choice of ranges 'fit_nll_model_modelData_left,fit_nll_model_modelData_right'
[#1] INFO:Plotting -- RooAbsPdf::plotOn(model) only plotting range 'fit_nll_model_modelData_left'
[#1] INFO:Plotting -- RooAbsPdf::plotOn(model) p.d.f. curve is normalized using explicit choice of ranges 'fit_nll_model_modelData_left,fit_nll_model_modelData_right'
[#1] INFO:Plotting -- RooAbsPdf::plotOn(model) only plotting range 'fit_nll_model_modelData_left'
[#1] INFO:Plotting -- RooAbsPdf::plotOn(model) p.d.f. curve is normalized using explicit choice of ranges 'fit_nll_model_modelData_left,fit_nll_model_modelData_right'
[#1] INFO:Plotting -- RooAbsPdf::plotOn(model) only plotting range 'fit_nll_model_modelData_left'
[#1] INFO:Plotting -- RooAbsPdf::plotOn(model) p.d.f. curve is normalized using explicit choice of ranges 'fit_nll_model_modelData_left,fit_nll_model_modelData_right'
[#1] INFO:Plotting -- RooAbsPdf::plotOn(model) only plotting range 'fit_nll_model_modelData_left'
[#1] INFO:Plotting -- RooAbsPdf::plotOn(model) p.d.f. curve is normalized using explicit choice of ranges 'fit_nll_model_modelData_left,fit_nll_model_modelData_right'
[#1] INFO:Plotting -- RooAbsPdf::plotOn(model) only plotting range 'fit_nll_model_modelData_left'
[#1] INFO:Plotting -- RooAbsPdf::plotOn(model) p.d.f. curve is normalized using explicit choice of ranges 'fit_nll_model_modelData_left,fit_nll_model_modelData_right'
[#1] INFO:Plotting -- RooAbsPdf::plotOn(model) only plotting range 'fit_nll_model_modelData_left'
[#1] INFO:Plotting -- RooAbsPdf::plotOn(model) p.d.f. curve is normalized using explicit choice of ranges 'fit_nll_model_modelData_left,fit_nll_model_modelData_right'
[#1] INFO:Plotting -- RooAbsPdf::plotOn(model) only plotting range 'fit_nll_model_modelData_right'
[#1] INFO:Plotting -- RooAbsPdf::plotOn(model) p.d.f. curve is normalized using explicit choice of ranges 'fit_nll_model_modelData_left,fit_nll_model_modelData_right'
[#1] INFO:Plotting -- RooAbsPdf::plotOn(model) only plotting range 'fit_nll_model_modelData_right'
[#1] INFO:Plotting -- RooAbsPdf::plotOn(model) p.d.f. curve is normalized using explicit choice of ranges 'fit_nll_model_modelData_left,fit_nll_model_modelData_right'
[#1] INFO:Plotting -- RooAbsPdf::plotOn(model) only plotting range 'fit_nll_model_modelData_right'
[#1] INFO:Plotting -- RooAbsPdf::plotOn(model) p.d.f. curve is normalized using explicit choice of ranges 'fit_nll_model_modelData_left,fit_nll_model_modelData_right'
[#1] INFO:Plotting -- RooAbsPdf::plotOn(model) only plotting range 'fit_nll_model_modelData_right'
[#1] INFO:Plotting -- RooAbsPdf::plotOn(model) p.d.f. curve is normalized using explicit choice of ranges 'fit_nll_model_modelData_left,fit_nll_model_modelData_right'
[#1] INFO:Plotting -- RooAbsPdf::plotOn(model) only plotting range 'fit_nll_model_modelData_right'
[#1] INFO:Plotting -- RooAbsPdf::plotOn(model) p.d.f. curve is normalized using explicit choice of ranges 'fit_nll_model_modelData_left,fit_nll_model_modelData_right'
[#1] INFO:Plotting -- RooAbsPdf::plotOn(model) only plotting range 'fit_nll_model_modelData_right'
[#1] INFO:Plotting -- RooAbsPdf::plotOn(model) p.d.f. curve is normalized using explicit choice of ranges 'fit_nll_model_modelData_left,fit_nll_model_modelData_right'
[#1] INFO:Plotting -- RooAbsPdf::plotOn(model) only plotting range 'fit_nll_model_modelData_right'
[#1] INFO:Plotting -- RooAbsPdf::plotOn(model) p.d.f. curve is normalized using explicit choice of ranges 'fit_nll_model_modelData_left,fit_nll_model_modelData_right'
[#1] INFO:Plotting -- RooAbsPdf::plotOn(model) only plotting range 'fit_nll_model_modelData_right'
[#1] INFO:Plotting -- RooAbsPdf::plotOn(model) p.d.f. curve is normalized using explicit choice of ranges 'fit_nll_model_modelData_left,fit_nll_model_modelData_right'
[#1] INFO:Plotting -- RooAbsPdf::plotOn(model) only plotting range 'fit_nll_model_modelData_right'
[#1] INFO:Plotting -- RooAbsPdf::plotOn(model) p.d.f. curve is normalized using explicit choice of ranges 'fit_nll_model_modelData_left,fit_nll_model_modelData_right'
[#1] INFO:Plotting -- RooAbsPdf::plotOn(model) only plotting range 'fit_nll_model_modelData_right'
[#1] INFO:Plotting -- RooAbsPdf::plotOn(model) p.d.f. curve is normalized using explicit choice of ranges 'fit_nll_model_modelData_left,fit_nll_model_modelData_right'
[#1] INFO:Plotting -- RooAbsPdf::plotOn(model) only plotting range 'fit_nll_model_modelData_right'
[#1] INFO:Plotting -- RooAbsPdf::plotOn(model) p.d.f. curve is normalized using explicit choice of ranges 'fit_nll_model_modelData_left,fit_nll_model_modelData_right'
[#1] INFO:Plotting -- RooAbsPdf::plotOn(model) p.d.f was fitted in a subrange and no explicit Range() and NormRange() was specified. Plotting / normalising in fit range. To override, do one of the following
- Clear the automatic fit range attribute: <pdf>.removeStringAttribute("fitrange");
- Explicitly specify the plotting range: Range("<rangeName>").
- Explicitly specify where to compute the normalisation: NormRange("<rangeName>").
The default (full) range can be denoted with Range("") / NormRange("").
[#1] INFO:Plotting -- RooAbsPdf::plotOn(model) only plotting range 'fit_nll_model_modelData_left,fit_nll_model_modelData_right'
[#1] INFO:Plotting -- RooAbsPdf::plotOn(model) p.d.f. curve is normalized using explicit choice of ranges 'fit_nll_model_modelData_left,fit_nll_model_modelData_right'


## Fit in one region¶

Note how restricting the region to only the left tail increases the fit uncertainty

In [12]:
canv.cd(3)
x.setRange("leftToMiddle", 0.0, 5.0)

r3 = model3.fitTo(data, Range="leftToMiddle", Save=True)
r3.Print()

frame3 = x.frame(Title="Fit from left to middle")
data.plotOn(frame3)
model3.plotOn(frame3, VisualizeError=r3)
model3.plotOn(frame3)
model3.paramOn(frame3)
frame3.Draw()

canv.Draw()

canv.SaveAs("rf204a_extendedLikelihood.png")

[#1] INFO:Eval -- RooRealVar::setRange(x) new range named 'leftToMiddle' created with bounds [0,5]
[#1] INFO:Minimization -- p.d.f. provides expected number of events, including extended term in likelihood.
[#1] INFO:Eval -- RooRealVar::setRange(x) new range named 'fit_nll_model_modelData' created with bounds [0,5]
[#1] INFO:Fitting -- RooAbsOptTestStatistic::ctor(nll_model_modelData) constructing test statistic for sub-range named leftToMiddle
[#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: (sig1,sig2)
[#1] INFO:Minimization --  The following expressions will be evaluated in cache-and-track mode: (bkg)
**********
**   19 **SET PRINT           1
**********
**********
**********
PARAMETER DEFINITIONS:
NO.   NAME         VALUE      STEP SIZE      LIMITS
1 a0           3.23929e-01  1.08109e-01    0.00000e+00  1.00000e+00
2 a1           2.88453e-02  5.40605e-01    0.00000e+00  1.00000e+00
MINUIT WARNING IN PARAMETR
============== VARIABLE2 BROUGHT BACK INSIDE LIMITS.
3 nbkg         5.01892e+02  3.94666e+01    0.00000e+00  1.00000e+04
4 nsig         4.10983e+02  2.68024e+02    0.00000e+00  1.00000e+04
5 sig1frac     8.58940e-01  2.76393e-01    0.00000e+00  1.00000e+00
MINUIT WARNING IN PARAMETR
============== VARIABLE5 BROUGHT BACK INSIDE LIMITS.
**********
**   21 **SET ERR         0.5
**********
**********
**   22 **SET PRINT           1
**********
**********
**   23 **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=-1618.32 FROM MIGRAD    STATUS=INITIATE       14 CALLS          15 TOTAL
EDM= unknown      STRATEGY= 1      NO ERROR MATRIX
EXT PARAMETER               CURRENT GUESS       STEP         FIRST
NO.   NAME      VALUE            ERROR          SIZE      DERIVATIVE
1  a0           3.23929e-01   1.08109e-01   2.34083e-01   4.08551e-01
2  a1           2.88453e-02   5.40605e-01   8.54098e-01  -2.73477e-01
3  nbkg         5.01892e+02   3.94666e+01   1.80897e-02  -6.58003e+00
4  nsig         4.10983e+02   2.68024e+02   1.43768e-01  -1.02034e+02
5  sig1frac     8.58940e-01   2.76393e-01   7.01496e-01  -4.26596e+00
ERR DEF= 0.5
MIGRAD WILL VERIFY CONVERGENCE AND ERROR MATRIX.
EIGENVALUES OF SECOND-DERIVATIVE MATRIX:
-1.9268e-03  1.4073e-01  1.2202e+00  1.3132e+00  2.3278e+00
MINUIT WARNING IN HESSE
============== MATRIX FORCED POS-DEF BY ADDING 0.004255 TO DIAGONAL.
FCN=-1620.15 FROM HESSE     STATUS=NOT POSDEF     35 CALLS         127 TOTAL
EDM=0.00100154    STRATEGY= 1      ERR MATRIX NOT POS-DEF
EXT PARAMETER                APPROXIMATE        STEP         FIRST
NO.   NAME      VALUE            ERROR          SIZE      DERIVATIVE
1  a0           3.43232e-01   6.29734e-01   5.61952e-03  -2.08276e-02
2  a1           1.02853e-01   5.84687e-01   1.07156e-02   4.02420e-03
3  nbkg         4.96425e+02   5.58143e+02   5.33145e-04   4.79276e-02
4  nsig         4.64995e+02   7.12947e+01   4.44597e-04  -9.78209e-02
5  sig1frac     9.25999e-01   1.76430e-01   1.11400e-02  -7.64957e-03
ERR DEF= 0.5
MIGRAD WILL VERIFY CONVERGENCE AND ERROR MATRIX.
COVARIANCE MATRIX CALCULATED SUCCESSFULLY
FCN=-1620.17 FROM MIGRAD    STATUS=CONVERGED     342 CALLS         343 TOTAL
EDM=0.000217441    STRATEGY= 1      ERROR MATRIX ACCURATE
EXT PARAMETER                                   STEP         FIRST
NO.   NAME      VALUE            ERROR          SIZE      DERIVATIVE
1  a0           7.69361e-01   8.83057e-01   3.86565e-03  -2.13936e-02
2  a1           2.46425e-01   2.97584e-01   4.87451e-03  -2.30491e-02
3  nbkg         7.73200e+02   8.70057e+02   6.44465e-04   2.32140e-01
4  nsig         4.38086e+02   8.85580e+01   4.50255e-04  -8.74796e-02
5  sig1frac     9.85817e-01   8.72235e-01   2.19213e-02  -1.54609e-02
ERR DEF= 0.5
EXTERNAL ERROR MATRIX.    NDIM=  25    NPAR=  5    ERR DEF=0.5
7.281e-01  2.677e-01  7.525e+02 -6.291e+01  1.261e-01
2.677e-01  1.079e-01  2.722e+02 -2.028e+01  3.655e-02
7.525e+02  2.722e+02  7.854e+05 -6.768e+04  1.398e+02
-6.291e+01 -2.028e+01 -6.768e+04  7.847e+03 -1.635e+01
1.261e-01  3.655e-02  1.398e+02 -1.635e+01  4.920e-02
PARAMETER  CORRELATION COEFFICIENTS
NO.  GLOBAL      1      2      3      4      5
1  0.99765   1.000  0.955  0.995 -0.832  0.666
2  0.97507   0.955  1.000  0.935 -0.697  0.502
3  0.99750   0.995  0.935  1.000 -0.862  0.711
4  0.92717  -0.832 -0.697 -0.862  1.000 -0.832
5  0.87584   0.666  0.502  0.711 -0.832  1.000
**********
**   25 **SET ERR         0.5
**********
**********
**   26 **SET PRINT           1
**********
**********
**   27 **HESSE        2500
**********
COVARIANCE MATRIX CALCULATED SUCCESSFULLY
FCN=-1620.17 FROM HESSE     STATUS=OK             31 CALLS         374 TOTAL
EDM=0.000231402    STRATEGY= 1      ERROR MATRIX ACCURATE
EXT PARAMETER                                INTERNAL      INTERNAL
NO.   NAME      VALUE            ERROR       STEP SIZE       VALUE
1  a0           7.69361e-01   7.93363e-01   7.73130e-04   5.68919e-01
2  a1           2.46425e-01   6.23108e-01   9.74903e-04  -5.31876e-01
3  nbkg         7.73200e+02   1.28458e+03   1.28893e-04  -1.00724e+00
4  nsig         4.38086e+02   1.32095e+02   9.00510e-05  -1.14907e+00
5  sig1frac     9.85817e-01   9.88105e-01   8.76851e-04   1.33204e+00
ERR DEF= 0.5
EXTERNAL ERROR MATRIX.    NDIM=  25    NPAR=  5    ERR DEF=0.5
1.621e+00  5.715e-01  1.702e+03 -1.549e+02  3.399e-01
5.715e-01  2.118e-01  5.948e+02 -5.131e+01  1.082e-01
1.702e+03  5.948e+02  1.796e+06 -1.658e+05  3.682e+02
-1.549e+02 -5.131e+01 -1.658e+05  1.747e+04 -3.895e+01
3.399e-01  1.082e-01  3.682e+02 -3.895e+01  1.024e-01
PARAMETER  CORRELATION COEFFICIENTS
NO.  GLOBAL      1      2      3      4      5
1  0.99894   1.000  0.975  0.998 -0.920  0.834
2  0.98737   0.975  1.000  0.965 -0.844  0.735
3  0.99891   0.998  0.965  1.000 -0.936  0.858
4  0.96797  -0.920 -0.844 -0.936  1.000 -0.921
5  0.94231   0.834  0.735  0.858 -0.921  1.000
[#1] INFO:Minimization -- RooAbsMinimizerFcn::setOptimizeConst: deactivating const optimization

RooFitResult: minimized FCN value: -1620.17, estimated distance to minimum: 0.000231402
covariance matrix quality: Full, accurate covariance matrix
Status : MINIMIZE=0 HESSE=0

Floating Parameter    FinalValue +/-  Error
--------------------  --------------------------
a0    7.6936e-01 +/-  7.93e-01
a1    2.4642e-01 +/-  6.23e-01
nbkg    7.7320e+02 +/-  1.28e+03
nsig    4.3809e+02 +/-  1.32e+02
sig1frac    9.8582e-01 +/-  9.88e-01

[#1] INFO:Plotting -- RooAbsPdf::plotOn(model) p.d.f was fitted in a subrange and no explicit Range() and NormRange() was specified. Plotting / normalising in fit range. To override, do one of the following
- Clear the automatic fit range attribute: <pdf>.removeStringAttribute("fitrange");
- Explicitly specify the plotting range: Range("<rangeName>").
- Explicitly specify where to compute the normalisation: NormRange("<rangeName>").
The default (full) range can be denoted with Range("") / NormRange("").
[#1] INFO:Plotting -- RooAbsPdf::plotOn(model) only plotting range 'fit_nll_model_modelData'
[#1] INFO:Plotting -- RooAbsPdf::plotOn(model) p.d.f. curve is normalized using explicit choice of ranges 'fit_nll_model_modelData'
[#1] INFO:Plotting -- RooAbsPdf::plotOn(model) only plotting range 'fit_nll_model_modelData'
[#1] INFO:Plotting -- RooAbsPdf::plotOn(model) p.d.f. curve is normalized using explicit choice of ranges 'fit_nll_model_modelData'
[#1] INFO:Plotting -- RooAbsPdf::plotOn(model) only plotting range 'fit_nll_model_modelData'
[#1] INFO:Plotting -- RooAbsPdf::plotOn(model) p.d.f. curve is normalized using explicit choice of ranges 'fit_nll_model_modelData'
[#1] INFO:Plotting -- RooAbsPdf::plotOn(model) only plotting range 'fit_nll_model_modelData'
[#1] INFO:Plotting -- RooAbsPdf::plotOn(model) p.d.f. curve is normalized using explicit choice of ranges 'fit_nll_model_modelData'
[#1] INFO:Plotting -- RooAbsPdf::plotOn(model) only plotting range 'fit_nll_model_modelData'
[#1] INFO:Plotting -- RooAbsPdf::plotOn(model) p.d.f. curve is normalized using explicit choice of ranges 'fit_nll_model_modelData'
[#1] INFO:Plotting -- RooAbsPdf::plotOn(model) only plotting range 'fit_nll_model_modelData'
[#1] INFO:Plotting -- RooAbsPdf::plotOn(model) p.d.f. curve is normalized using explicit choice of ranges 'fit_nll_model_modelData'
[#1] INFO:Plotting -- RooAbsPdf::plotOn(model) only plotting range 'fit_nll_model_modelData'
[#1] INFO:Plotting -- RooAbsPdf::plotOn(model) p.d.f. curve is normalized using explicit choice of ranges 'fit_nll_model_modelData'
[#1] INFO:Plotting -- RooAbsPdf::plotOn(model) only plotting range 'fit_nll_model_modelData'
[#1] INFO:Plotting -- RooAbsPdf::plotOn(model) p.d.f. curve is normalized using explicit choice of ranges 'fit_nll_model_modelData'
[#1] INFO:Plotting -- RooAbsPdf::plotOn(model) only plotting range 'fit_nll_model_modelData'
[#1] INFO:Plotting -- RooAbsPdf::plotOn(model) p.d.f. curve is normalized using explicit choice of ranges 'fit_nll_model_modelData'
[#1] INFO:Plotting -- RooAbsPdf::plotOn(model) only plotting range 'fit_nll_model_modelData'
[#1] INFO:Plotting -- RooAbsPdf::plotOn(model) p.d.f. curve is normalized using explicit choice of ranges 'fit_nll_model_modelData'
[#1] INFO:Plotting -- RooAbsPdf::plotOn(model) only plotting range 'fit_nll_model_modelData'
[#1] INFO:Plotting -- RooAbsPdf::plotOn(model) p.d.f. curve is normalized using explicit choice of ranges 'fit_nll_model_modelData'
[#1] INFO:Plotting -- RooAbsPdf::plotOn(model) only plotting range 'fit_nll_model_modelData'
[#1] INFO:Plotting -- RooAbsPdf::plotOn(model) p.d.f. curve is normalized using explicit choice of ranges 'fit_nll_model_modelData'
[#1] INFO:Plotting -- RooAbsPdf::plotOn(model) p.d.f was fitted in a subrange and no explicit Range() and NormRange() was specified. Plotting / normalising in fit range. To override, do one of the following
- Clear the automatic fit range attribute: <pdf>.removeStringAttribute("fitrange");
- Explicitly specify the plotting range: Range("<rangeName>").
- Explicitly specify where to compute the normalisation: NormRange("<rangeName>").
The default (full) range can be denoted with Range("") / NormRange("").
[#1] INFO:Plotting -- RooAbsPdf::plotOn(model) only plotting range 'fit_nll_model_modelData'
[#1] INFO:Plotting -- RooAbsPdf::plotOn(model) p.d.f. curve is normalized using explicit choice of ranges 'fit_nll_model_modelData'

Info in <TCanvas::Print>: png file rf204a_extendedLikelihood.png has been created


Draw all canvases

In [13]:
from ROOT import gROOT
gROOT.GetListOfCanvases().Draw()