Logo ROOT  
Reference Guide
 
Loading...
Searching...
No Matches
rf709_BarlowBeeston.py File Reference

Detailed Description

View in nbviewer Open in SWAN
Implementing the Barlow-Beeston method for taking into account the statistical uncertainty of a Monte-Carlo fit template.

import math
import ROOT
def create_constraints(gammas, samples, global_observables):
constraints = ROOT.RooArgSet()
for i, gamma in enumerate(gammas):
nom_name = "nom_" + gamma.GetName()
tau_name = gamma.GetName() + "_tau"
mean_name = gamma.GetName() + "_mean"
poisson_name = gamma.GetName() + "_constraint"
nom_val = sum(func.dataHist().weight(i) for func in samples)
# Like in HistFactory, the gamma of an empty bin is fixed and not
# constrained. Otherwise, it would be a flat direction of the likelihood.
# The other gammas get the relative Poisson uncertainty as initial error.
if nom_val == 0.0:
gamma.setConstant(True)
continue
gamma.setError(1.0 / math.sqrt(nom_val))
nominal = ROOT.RooRealVar(nom_name, nom_name, nom_val, 0.0, ROOT.RooNumber.infinity())
nominal.setConstant(True)
global_observables.add(nominal)
tau = ROOT.RooConstVar(tau_name, tau_name, nominal.getVal())
mean = ROOT.RooProduct(mean_name, mean_name, gamma, tau)
poisson = ROOT.RooPoisson(poisson_name, poisson_name, nominal, mean)
# The constraint pdf takes ownership of the objects it depends on, and
# the returned set takes ownership of the constraint pdf.
for helper in (nominal, tau, mean):
ROOT.SetOwnership(helper, False)
poisson.addOwnedComponents(ROOT.RooArgSet(nominal, tau, mean))
constraints.addOwned(poisson)
return constraints
ROOT.RooMsgService.instance().getStream(1).removeTopic(ROOT.RooFit.NumIntegration)
# First, construct a likelihood model with a Gaussian signal on top of a uniform background
x = ROOT.RooRealVar("x", "x", -20, 20)
x.setBins(25)
meanG = ROOT.RooRealVar("meanG", "meanG", 1, -10, 10)
sigG = ROOT.RooRealVar("sigG", "sigG", 1.5, -10, 10)
g = ROOT.RooGaussian("g", "Gauss", x, meanG, sigG)
u = ROOT.RooUniform("u", "Uniform", x)
# Generate the data to be fitted
sigData = g.generate(x, 50)
bkgData = u.generate(x, 1000)
sumData = ROOT.RooDataSet("sumData", "Gauss + Uniform", x)
sumData.append(sigData)
sumData.append(bkgData)
# Make histogram templates for signal and background.
# Let's take a signal distribution with low statistics and a more accurate
# background distribution.
# Normally, these come from Monte Carlo simulations, but we will just generate them.
dh_sig = g.generateBinned(x, 50)
dh_bkg = u.generateBinned(x, 10000)
# ***** Case 0 - 'Rigid templates' *****
# Construct histogram shapes for signal and background
p_h_sig = ROOT.RooHistFunc("p_h_sig", "p_h_sig", x, dh_sig)
p_h_bkg = ROOT.RooHistFunc("p_h_bkg", "p_h_bkg", x, dh_bkg)
# Construct scale factors for adding the two distributions
Asig0 = ROOT.RooRealVar("Asig", "Asig", 1, 0.01, 5000)
Abkg0 = ROOT.RooRealVar("Abkg", "Abkg", 1, 0.01, 5000)
# Construct the sum model
model0 = ROOT.RooRealSumPdf("model0", "model0", [p_h_sig, p_h_bkg], [Asig0, Abkg0], True)
# ***** Case 1 - 'Barlow Beeston' *****
# Construct parameterized histogram shapes for signal and background
gammas_sig1 = ROOT.ParamHistFunc.createParamSet("p_ph_sig_gamma", x.numBins(), 0, 10)
gammas_bkg1 = ROOT.ParamHistFunc.createParamSet("p_ph_bkg_gamma", x.numBins(), 0, 10)
p_phf_sig1 = ROOT.ParamHistFunc("p_phf_sig1", "p_phf_sig1", [x], gammas_sig1)
p_phf_bkg1 = ROOT.ParamHistFunc("p_phf_bkg1", "p_phf_bkg1", [x], gammas_bkg1)
p_p_sig1 = ROOT.RooProduct("p_p_sig1", "p_p_sig1", p_h_sig, p_phf_sig1)
p_p_bkg1 = ROOT.RooProduct("p_p_bkg1", "p_p_bkg1", p_h_bkg, p_phf_bkg1)
Asig1 = ROOT.RooRealVar("Asig", "Asig", 1, 0.01, 5000)
Abkg1 = ROOT.RooRealVar("Abkg", "Abkg", 1, 0.01, 5000)
# Construct the sum of these
model1_tmp = ROOT.RooRealSumPdf("sp_ph", "sp_ph", [p_p_sig1, p_p_bkg1], [Asig1, Abkg1], True)
# Construct the subsidiary poisson measurements constraining the histogram parameters
# These ensure that the bin contents of the histograms are only allowed to vary within
# the statistical uncertainty of the Monte Carlo.
globs1 = ROOT.RooArgSet()
constraints_sig1 = create_constraints(gammas_sig1, [p_h_sig], globs1)
constraints_bkg1 = create_constraints(gammas_bkg1, [p_h_bkg], globs1)
# Construct the joint model with template PDFs and constraints
model1 = ROOT.RooProdPdf("model1", "model1", [model1_tmp, *constraints_sig1, *constraints_bkg1])
# ***** Case 2 - 'Barlow Beeston' light (one parameter per bin for all samples) *****
# Construct the histogram shapes, using the same parameters for signal and background.
# There is one parameter per bin, such as `p_ph_gamma_bin_0`. This allows bin 0 to
# fluctuate up and down. The SAME ParamHistFunc scales both the signal and the background
# histogram, so the bins fluctuate synchronously. This reduces the number of parameters.
gammas2 = ROOT.ParamHistFunc.createParamSet("p_ph_gamma", x.numBins(), 0, 10)
p_phf2 = ROOT.ParamHistFunc("p_phf2", "p_phf2", [x], gammas2)
p_p_sig2 = ROOT.RooProduct("p_p_sig2", "p_p_sig2", p_h_sig, p_phf2)
p_p_bkg2 = ROOT.RooProduct("p_p_bkg2", "p_p_bkg2", p_h_bkg, p_phf2)
Asig2 = ROOT.RooRealVar("Asig", "Asig", 1, 0.01, 5000)
Abkg2 = ROOT.RooRealVar("Abkg", "Abkg", 1, 0.01, 5000)
# As before, construct the sum of signal2 and background2
model2_tmp = ROOT.RooRealSumPdf("sp_ph", "sp_ph", [p_p_sig2, p_p_bkg2], [Asig2, Abkg2], True)
# Construct the subsidiary poisson measurements constraining the statistical fluctuations
globs2 = ROOT.RooArgSet()
constraints2 = create_constraints(gammas2, [p_h_sig, p_h_bkg], globs2)
# Construct the joint model
model2 = ROOT.RooProdPdf("model2", "model2", [model2_tmp, *constraints2])
# ************ Fit all models to data and plot *********************
result0 = model0.fitTo(sumData, PrintLevel=0, Save=True)
result1 = model1.fitTo(sumData, PrintLevel=0, Save=True, GlobalObservables=globs1)
result2 = model2.fitTo(sumData, PrintLevel=0, Save=True, GlobalObservables=globs2)
can = ROOT.TCanvas("can", "", 1500, 600)
can.Divide(3, 1)
pt = ROOT.TPaveText(-19.5, 1, -2, 25)
pt.SetFillStyle(0)
pt.SetBorderSize(0)
can.cd(1)
frame = x.frame(Title="No template uncertainties")
# Plot data to enable automatic determination of model0 normalisation:
sumData.plotOn(frame)
model0.plotOn(frame, LineColor="b", VisualizeError=result0)
# Plot data again to show it on top of model0 error bands:
sumData.plotOn(frame)
# Plot model components
model0.plotOn(frame, LineColor="b")
model0.plotOn(frame, Components=[p_h_sig], LineColor="kAzure")
model0.plotOn(frame, Components=[p_h_bkg], LineColor="r")
model0.paramOn(frame)
sigData.plotOn(frame, MarkerColor="b")
frame.Draw()
for text in [
"No template uncertainties",
"are taken into account.",
"This leads to low errors",
"for the parameters A, since",
"the only source of errors",
"are the data statistics.",
]:
pt.AddText(text)
pt.DrawClone()
can.cd(2)
frame = x.frame(Title="Barlow Beeston for Sig & Bkg separately")
sumData.plotOn(frame)
model1.plotOn(frame, LineColor="b", VisualizeError=result1)
# Plot data again to show it on top of error bands:
sumData.plotOn(frame)
model1.plotOn(frame, LineColor="b")
model1.plotOn(frame, Components=[p_p_sig1], LineColor="kAzure")
model1.plotOn(frame, Components=[p_p_bkg1], LineColor="r")
model1.paramOn(frame, Parameters=[Asig1, Abkg1])
sigData.plotOn(frame, MarkerColor="b")
frame.Draw()
pt.Clear()
for text in [
"With gamma parameters, the",
"signal & background templates",
"can adapt to the data.",
"Note how the blue signal",
"template changes its shape.",
"This leads to higher errors",
"of the scale parameters A.",
]:
pt.AddText(text)
pt.DrawClone()
can.cd(3)
frame = x.frame(Title="Barlow Beeston light for (Sig+Bkg)")
sumData.plotOn(frame)
model2.plotOn(frame, LineColor="b", VisualizeError=result2)
# Plot data again to show it on top of model0 error bands:
sumData.plotOn(frame)
model2.plotOn(frame, LineColor="b")
model2.plotOn(frame, Components=[p_p_sig2], LineColor="kAzure")
model2.plotOn(frame, Components=[p_p_bkg2], LineColor="r")
model2.paramOn(frame, Parameters=[Asig2, Abkg2])
sigData.plotOn(frame, MarkerColor="b")
frame.Draw()
pt.Clear()
for text in [
"When signal and background",
"template share one gamma para-",
"meter per bin, they adapt less.",
"The errors of the A parameters",
"also shrink slightly.",
]:
pt.AddText(text)
pt.DrawClone()
print(f"Asig [normal ] = {Asig0.getVal()} +/- {Asig0.getError()}")
print(f"Asig [BB ] = {Asig1.getVal()} +/- {Asig1.getError()}")
print(f"Asig [BBlight] = {Asig2.getVal()} +/- {Asig2.getError()}")
can.SaveAs("rf709_BarlowBeeston.png")
static uint64_t sum(uint64_t i)
Definition Factory.cxx:2335
[#0] WARNING:InputArguments -- The parameter 'sigG' with range [-10, 10] of the RooGaussian 'g' exceeds the safe range of (0, inf). Advise to limit its range.
[#1] INFO:Minimization -- p.d.f. provides expected number of events, including extended term in likelihood.
[#1] INFO:Fitting -- RooAbsPdf::fitTo(model0_over_model0_Int[x]) fixing normalization set for coefficient determination to observables in data
[#1] INFO:Fitting -- using generic CPU library compiled with no vectorizations
[#1] INFO:Fitting -- Creation of NLL object took 831.354 μs
[#1] INFO:Fitting -- RooAddition::defaultErrorLevel(nll_model0_over_model0_Int[x]_sumData) Summation contains a RooNLLVar, using its error level
[#1] INFO:Minimization -- [fitFCN] No discrete parameters, performing continuous minimization only
Minuit2Minimizer: Minimize with max-calls 1000 convergence for edm < 1 strategy 1
Minuit2Minimizer : Valid minimum - status = 0
FVAL = -2388.31039421315518
Edm = 3.25299757922590944e-06
Nfcn = 60
Abkg = 0.0614547 +/- 0.00211669 (limited)
Asig = 0.833778 +/- 0.1898 (limited)
[#1] INFO:Minimization -- p.d.f. provides expected number of events, including extended term in likelihood.
[#1] INFO:Minimization -- Including the following constraint terms in minimization: (p_ph_sig_gamma_bin_11_constraint,p_ph_sig_gamma_bin_12_constraint,p_ph_sig_gamma_bin_13_constraint,p_ph_sig_gamma_bin_14_constraint,p_ph_sig_gamma_bin_15_constraint,p_ph_bkg_gamma_bin_0_constraint,p_ph_bkg_gamma_bin_1_constraint,p_ph_bkg_gamma_bin_2_constraint,p_ph_bkg_gamma_bin_3_constraint,p_ph_bkg_gamma_bin_4_constraint,p_ph_bkg_gamma_bin_5_constraint,p_ph_bkg_gamma_bin_6_constraint,p_ph_bkg_gamma_bin_7_constraint,p_ph_bkg_gamma_bin_8_constraint,p_ph_bkg_gamma_bin_9_constraint,p_ph_bkg_gamma_bin_10_constraint,p_ph_bkg_gamma_bin_11_constraint,p_ph_bkg_gamma_bin_12_constraint,p_ph_bkg_gamma_bin_13_constraint,p_ph_bkg_gamma_bin_14_constraint,p_ph_bkg_gamma_bin_15_constraint,p_ph_bkg_gamma_bin_16_constraint,p_ph_bkg_gamma_bin_17_constraint,p_ph_bkg_gamma_bin_18_constraint,p_ph_bkg_gamma_bin_19_constraint,p_ph_bkg_gamma_bin_20_constraint,p_ph_bkg_gamma_bin_21_constraint,p_ph_bkg_gamma_bin_22_constraint,p_ph_bkg_gamma_bin_23_constraint,p_ph_bkg_gamma_bin_24_constraint)
[#1] INFO:Minimization -- The following global observables have been defined and their values are taken from the model: (nom_p_ph_sig_gamma_bin_11,nom_p_ph_sig_gamma_bin_12,nom_p_ph_sig_gamma_bin_13,nom_p_ph_sig_gamma_bin_14,nom_p_ph_sig_gamma_bin_15,nom_p_ph_bkg_gamma_bin_0,nom_p_ph_bkg_gamma_bin_1,nom_p_ph_bkg_gamma_bin_2,nom_p_ph_bkg_gamma_bin_3,nom_p_ph_bkg_gamma_bin_4,nom_p_ph_bkg_gamma_bin_5,nom_p_ph_bkg_gamma_bin_6,nom_p_ph_bkg_gamma_bin_7,nom_p_ph_bkg_gamma_bin_8,nom_p_ph_bkg_gamma_bin_9,nom_p_ph_bkg_gamma_bin_10,nom_p_ph_bkg_gamma_bin_11,nom_p_ph_bkg_gamma_bin_12,nom_p_ph_bkg_gamma_bin_13,nom_p_ph_bkg_gamma_bin_14,nom_p_ph_bkg_gamma_bin_15,nom_p_ph_bkg_gamma_bin_16,nom_p_ph_bkg_gamma_bin_17,nom_p_ph_bkg_gamma_bin_18,nom_p_ph_bkg_gamma_bin_19,nom_p_ph_bkg_gamma_bin_20,nom_p_ph_bkg_gamma_bin_21,nom_p_ph_bkg_gamma_bin_22,nom_p_ph_bkg_gamma_bin_23,nom_p_ph_bkg_gamma_bin_24)
[#1] INFO:Fitting -- RooAbsPdf::fitTo(model1) fixing normalization set for coefficient determination to observables in data
[#1] INFO:Fitting -- Creation of NLL object took 5.41284 ms
[#1] INFO:Fitting -- RooAddition::defaultErrorLevel(nll_model1_sumData) Summation contains a RooNLLVar, using its error level
[#1] INFO:Minimization -- [fitFCN] No discrete parameters, performing continuous minimization only
Minuit2Minimizer: Minimize with max-calls 16000 convergence for edm < 1 strategy 1
Minuit2Minimizer : Valid minimum - status = 0
FVAL = -2282.22801982652527
Edm = 1.00286880153482931e-07
Nfcn = 1361
Abkg = 0.061372 +/- 0.00222727 (limited)
Asig = 0.850638 +/- 0.234536 (limited)
p_ph_bkg_gamma_bin_0 = 0.998055 +/- 0.0474257 (limited)
p_ph_bkg_gamma_bin_1 = 1.0003 +/- 0.0474792 (limited)
p_ph_bkg_gamma_bin_10 = 0.980305 +/- 0.0456236 (limited)
p_ph_bkg_gamma_bin_11 = 1.00631 +/- 0.0508578 (limited)
p_ph_bkg_gamma_bin_12 = 1.00477 +/- 0.0510208 (limited)
p_ph_bkg_gamma_bin_13 = 0.991229 +/- 0.0489404 (limited)
p_ph_bkg_gamma_bin_14 = 0.99605 +/- 0.0497176 (limited)
p_ph_bkg_gamma_bin_15 = 1.00899 +/- 0.047647 (limited)
p_ph_bkg_gamma_bin_16 = 1.02997 +/- 0.0492173 (limited)
p_ph_bkg_gamma_bin_17 = 1.00769 +/- 0.0467472 (limited)
p_ph_bkg_gamma_bin_18 = 1.01965 +/- 0.0509651 (limited)
p_ph_bkg_gamma_bin_19 = 0.975013 +/- 0.045872 (limited)
p_ph_bkg_gamma_bin_2 = 0.996158 +/- 0.0468663 (limited)
p_ph_bkg_gamma_bin_20 = 0.999858 +/- 0.0473528 (limited)
p_ph_bkg_gamma_bin_21 = 0.998271 +/- 0.0474891 (limited)
p_ph_bkg_gamma_bin_22 = 0.998324 +/- 0.0487655 (limited)
p_ph_bkg_gamma_bin_23 = 0.98395 +/- 0.0461911 (limited)
p_ph_bkg_gamma_bin_24 = 1.02664 +/- 0.0479852 (limited)
p_ph_bkg_gamma_bin_3 = 1.00554 +/- 0.0495891 (limited)
p_ph_bkg_gamma_bin_4 = 0.990585 +/- 0.0483877 (limited)
p_ph_bkg_gamma_bin_5 = 0.992304 +/- 0.048244 (limited)
p_ph_bkg_gamma_bin_6 = 1.01041 +/- 0.0497095 (limited)
p_ph_bkg_gamma_bin_7 = 0.997207 +/- 0.0460169 (limited)
p_ph_bkg_gamma_bin_8 = 0.980295 +/- 0.0463239 (limited)
p_ph_bkg_gamma_bin_9 = 1.00976 +/- 0.0478214 (limited)
p_ph_sig_gamma_bin_11 = 1.09508 +/- 0.337141 (limited)
p_ph_sig_gamma_bin_12 = 1.07036 +/- 0.220845 (limited)
p_ph_sig_gamma_bin_13 = 0.89073 +/- 0.202692 (limited)
p_ph_sig_gamma_bin_14 = 0.947873 +/- 0.357197 (limited)
p_ph_sig_gamma_bin_15 = 1.14083 +/- 1.08867 (limited)
[#1] INFO:Minimization -- p.d.f. provides expected number of events, including extended term in likelihood.
[#1] INFO:Minimization -- Including the following constraint terms in minimization: (p_ph_gamma_bin_0_constraint,p_ph_gamma_bin_1_constraint,p_ph_gamma_bin_2_constraint,p_ph_gamma_bin_3_constraint,p_ph_gamma_bin_4_constraint,p_ph_gamma_bin_5_constraint,p_ph_gamma_bin_6_constraint,p_ph_gamma_bin_7_constraint,p_ph_gamma_bin_8_constraint,p_ph_gamma_bin_9_constraint,p_ph_gamma_bin_10_constraint,p_ph_gamma_bin_11_constraint,p_ph_gamma_bin_12_constraint,p_ph_gamma_bin_13_constraint,p_ph_gamma_bin_14_constraint,p_ph_gamma_bin_15_constraint,p_ph_gamma_bin_16_constraint,p_ph_gamma_bin_17_constraint,p_ph_gamma_bin_18_constraint,p_ph_gamma_bin_19_constraint,p_ph_gamma_bin_20_constraint,p_ph_gamma_bin_21_constraint,p_ph_gamma_bin_22_constraint,p_ph_gamma_bin_23_constraint,p_ph_gamma_bin_24_constraint)
[#1] INFO:Minimization -- The following global observables have been defined and their values are taken from the model: (nom_p_ph_gamma_bin_0,nom_p_ph_gamma_bin_1,nom_p_ph_gamma_bin_2,nom_p_ph_gamma_bin_3,nom_p_ph_gamma_bin_4,nom_p_ph_gamma_bin_5,nom_p_ph_gamma_bin_6,nom_p_ph_gamma_bin_7,nom_p_ph_gamma_bin_8,nom_p_ph_gamma_bin_9,nom_p_ph_gamma_bin_10,nom_p_ph_gamma_bin_11,nom_p_ph_gamma_bin_12,nom_p_ph_gamma_bin_13,nom_p_ph_gamma_bin_14,nom_p_ph_gamma_bin_15,nom_p_ph_gamma_bin_16,nom_p_ph_gamma_bin_17,nom_p_ph_gamma_bin_18,nom_p_ph_gamma_bin_19,nom_p_ph_gamma_bin_20,nom_p_ph_gamma_bin_21,nom_p_ph_gamma_bin_22,nom_p_ph_gamma_bin_23,nom_p_ph_gamma_bin_24)
[#1] INFO:Fitting -- RooAbsPdf::fitTo(model2) fixing normalization set for coefficient determination to observables in data
[#1] INFO:Fitting -- Creation of NLL object took 1.56392 ms
[#1] INFO:Fitting -- RooAddition::defaultErrorLevel(nll_model2_sumData) Summation contains a RooNLLVar, using its error level
[#1] INFO:Minimization -- [fitFCN] No discrete parameters, performing continuous minimization only
Minuit2Minimizer: Minimize with max-calls 13500 convergence for edm < 1 strategy 1
Minuit2Minimizer : Valid minimum - status = 0
FVAL = -2291.45127624059842
Edm = 2.286074513756125e-05
Nfcn = 1035
Abkg = 0.0614405 +/- 0.00221883 (limited)
Asig = 0.834377 +/- 0.203007 (limited)
p_ph_gamma_bin_0 = 0.997974 +/- 0.0474163 (limited)
p_ph_gamma_bin_1 = 1.00021 +/- 0.0474697 (limited)
p_ph_gamma_bin_10 = 0.980238 +/- 0.0456146 (limited)
p_ph_gamma_bin_11 = 1.01068 +/- 0.0488736 (limited)
p_ph_gamma_bin_12 = 1.01177 +/- 0.04839 (limited)
p_ph_gamma_bin_13 = 0.983582 +/- 0.0466957 (limited)
p_ph_gamma_bin_14 = 0.994787 +/- 0.0483026 (limited)
p_ph_gamma_bin_15 = 1.00965 +/- 0.047329 (limited)
p_ph_gamma_bin_16 = 1.02985 +/- 0.0492072 (limited)
p_ph_gamma_bin_17 = 1.0076 +/- 0.0467377 (limited)
p_ph_gamma_bin_18 = 1.01955 +/- 0.050955 (limited)
p_ph_gamma_bin_19 = 0.97495 +/- 0.045863 (limited)
p_ph_gamma_bin_2 = 0.996078 +/- 0.046857 (limited)
p_ph_gamma_bin_20 = 0.999775 +/- 0.0473434 (limited)
p_ph_gamma_bin_21 = 0.998189 +/- 0.0474797 (limited)
p_ph_gamma_bin_22 = 0.998242 +/- 0.048756 (limited)
p_ph_gamma_bin_23 = 0.98388 +/- 0.046182 (limited)
p_ph_gamma_bin_24 = 1.02653 +/- 0.0479753 (limited)
p_ph_gamma_bin_3 = 1.00545 +/- 0.0495794 (limited)
p_ph_gamma_bin_4 = 0.99051 +/- 0.0483783 (limited)
p_ph_gamma_bin_5 = 0.992228 +/- 0.0482347 (limited)
p_ph_gamma_bin_6 = 1.01032 +/- 0.0496997 (limited)
p_ph_gamma_bin_7 = 0.997126 +/- 0.0460076 (limited)
p_ph_gamma_bin_8 = 0.980228 +/- 0.0463148 (limited)
p_ph_gamma_bin_9 = 1.00967 +/- 0.0478118 (limited)
[#0] WARNING:InputArguments -- RooAbsReal::plotOn(model0) WARNING: argument CurveNameSuffix is duplicated
[#0] WARNING:InputArguments -- RooAbsReal::plotOn(model0) WARNING: argument CurveNameSuffix is duplicated
[#0] WARNING:InputArguments -- RooAbsReal::plotOn(model0) WARNING: argument CurveNameSuffix is duplicated
[#0] WARNING:InputArguments -- RooAbsReal::plotOn(model0) WARNING: argument CurveNameSuffix is duplicated
[#0] WARNING:InputArguments -- RooAbsReal::plotOn(model0) WARNING: argument CurveNameSuffix is duplicated
[#1] INFO:Plotting -- RooAbsPdf::plotOn(model0) directly selected PDF components: (p_h_sig)
[#1] INFO:Plotting -- RooAbsPdf::plotOn(model0) indirectly selected PDF components: ()
[#1] INFO:Plotting -- RooAbsPdf::plotOn(model0) directly selected PDF components: (p_h_bkg)
[#1] INFO:Plotting -- RooAbsPdf::plotOn(model0) indirectly selected PDF components: ()
[#1] INFO:Plotting -- RooPlot::updateFitRangeNorm: New event count of 50 will supersede previous event count of 1050 for normalization of PDF projections
[#0] WARNING:InputArguments -- RooAbsReal::plotOn(model1) WARNING: argument CurveNameSuffix is duplicated
[#0] WARNING:InputArguments -- RooAbsReal::plotOn(model1) WARNING: argument CurveNameSuffix is duplicated
[#0] WARNING:InputArguments -- RooAbsReal::plotOn(model1) WARNING: argument CurveNameSuffix is duplicated
[#0] WARNING:InputArguments -- RooAbsReal::plotOn(model1) WARNING: argument CurveNameSuffix is duplicated
[#0] WARNING:InputArguments -- RooAbsReal::plotOn(model1) WARNING: argument CurveNameSuffix is duplicated
[#0] WARNING:InputArguments -- RooAbsReal::plotOn(model1) WARNING: argument CurveNameSuffix is duplicated
[#0] WARNING:InputArguments -- RooAbsReal::plotOn(model1) WARNING: argument CurveNameSuffix is duplicated
[#0] WARNING:InputArguments -- RooAbsReal::plotOn(model1) WARNING: argument CurveNameSuffix is duplicated
[#0] WARNING:InputArguments -- RooAbsReal::plotOn(model1) WARNING: argument CurveNameSuffix is duplicated
[#0] WARNING:InputArguments -- RooAbsReal::plotOn(model1) WARNING: argument CurveNameSuffix is duplicated
[#0] WARNING:InputArguments -- RooAbsReal::plotOn(model1) WARNING: argument CurveNameSuffix is duplicated
[#0] WARNING:InputArguments -- RooAbsReal::plotOn(model1) WARNING: argument CurveNameSuffix is duplicated
[#0] WARNING:InputArguments -- RooAbsReal::plotOn(model1) WARNING: argument CurveNameSuffix is duplicated
[#0] WARNING:InputArguments -- RooAbsReal::plotOn(model1) WARNING: argument CurveNameSuffix is duplicated
[#0] WARNING:InputArguments -- RooAbsReal::plotOn(model1) WARNING: argument CurveNameSuffix is duplicated
[#0] WARNING:InputArguments -- RooAbsReal::plotOn(model1) WARNING: argument CurveNameSuffix is duplicated
[#0] WARNING:InputArguments -- RooAbsReal::plotOn(model1) WARNING: argument CurveNameSuffix is duplicated
[#0] WARNING:InputArguments -- RooAbsReal::plotOn(model1) WARNING: argument CurveNameSuffix is duplicated
[#0] WARNING:InputArguments -- RooAbsReal::plotOn(model1) WARNING: argument CurveNameSuffix is duplicated
[#0] WARNING:InputArguments -- RooAbsReal::plotOn(model1) WARNING: argument CurveNameSuffix is duplicated
[#0] WARNING:InputArguments -- RooAbsReal::plotOn(model1) WARNING: argument CurveNameSuffix is duplicated
[#0] WARNING:InputArguments -- RooAbsReal::plotOn(model1) WARNING: argument CurveNameSuffix is duplicated
[#0] WARNING:InputArguments -- RooAbsReal::plotOn(model1) WARNING: argument CurveNameSuffix is duplicated
[#0] WARNING:InputArguments -- RooAbsReal::plotOn(model1) WARNING: argument CurveNameSuffix is duplicated
[#0] WARNING:InputArguments -- RooAbsReal::plotOn(model1) WARNING: argument CurveNameSuffix is duplicated
[#0] WARNING:InputArguments -- RooAbsReal::plotOn(model1) WARNING: argument CurveNameSuffix is duplicated
[#0] WARNING:InputArguments -- RooAbsReal::plotOn(model1) WARNING: argument CurveNameSuffix is duplicated
[#0] WARNING:InputArguments -- RooAbsReal::plotOn(model1) WARNING: argument CurveNameSuffix is duplicated
[#0] WARNING:InputArguments -- RooAbsReal::plotOn(model1) WARNING: argument CurveNameSuffix is duplicated
[#0] WARNING:InputArguments -- RooAbsReal::plotOn(model1) WARNING: argument CurveNameSuffix is duplicated
[#0] WARNING:InputArguments -- RooAbsReal::plotOn(model1) WARNING: argument CurveNameSuffix is duplicated
[#0] WARNING:InputArguments -- RooAbsReal::plotOn(model1) WARNING: argument CurveNameSuffix is duplicated
[#0] WARNING:InputArguments -- RooAbsReal::plotOn(model1) WARNING: argument CurveNameSuffix is duplicated
[#0] WARNING:InputArguments -- RooAbsReal::plotOn(model1) WARNING: argument CurveNameSuffix is duplicated
[#0] WARNING:InputArguments -- RooAbsReal::plotOn(model1) WARNING: argument CurveNameSuffix is duplicated
[#0] WARNING:InputArguments -- RooAbsReal::plotOn(model1) WARNING: argument CurveNameSuffix is duplicated
[#0] WARNING:InputArguments -- RooAbsReal::plotOn(model1) WARNING: argument CurveNameSuffix is duplicated
[#0] WARNING:InputArguments -- RooAbsReal::plotOn(model1) WARNING: argument CurveNameSuffix is duplicated
[#0] WARNING:InputArguments -- RooAbsReal::plotOn(model1) WARNING: argument CurveNameSuffix is duplicated
[#0] WARNING:InputArguments -- RooAbsReal::plotOn(model1) WARNING: argument CurveNameSuffix is duplicated
[#0] WARNING:InputArguments -- RooAbsReal::plotOn(model1) WARNING: argument CurveNameSuffix is duplicated
[#0] WARNING:InputArguments -- RooAbsReal::plotOn(model1) WARNING: argument CurveNameSuffix is duplicated
[#0] WARNING:InputArguments -- RooAbsReal::plotOn(model1) WARNING: argument CurveNameSuffix is duplicated
[#0] WARNING:InputArguments -- RooAbsReal::plotOn(model1) WARNING: argument CurveNameSuffix is duplicated
[#0] WARNING:InputArguments -- RooAbsReal::plotOn(model1) WARNING: argument CurveNameSuffix is duplicated
[#0] WARNING:InputArguments -- RooAbsReal::plotOn(model1) WARNING: argument CurveNameSuffix is duplicated
[#0] WARNING:InputArguments -- RooAbsReal::plotOn(model1) WARNING: argument CurveNameSuffix is duplicated
[#0] WARNING:InputArguments -- RooAbsReal::plotOn(model1) WARNING: argument CurveNameSuffix is duplicated
[#0] WARNING:InputArguments -- RooAbsReal::plotOn(model1) WARNING: argument CurveNameSuffix is duplicated
[#0] WARNING:InputArguments -- RooAbsReal::plotOn(model1) WARNING: argument CurveNameSuffix is duplicated
[#0] WARNING:InputArguments -- RooAbsReal::plotOn(model1) WARNING: argument CurveNameSuffix is duplicated
[#0] WARNING:InputArguments -- RooAbsReal::plotOn(model1) WARNING: argument CurveNameSuffix is duplicated
[#0] WARNING:InputArguments -- RooAbsReal::plotOn(model1) WARNING: argument CurveNameSuffix is duplicated
[#0] WARNING:InputArguments -- RooAbsReal::plotOn(model1) WARNING: argument CurveNameSuffix is duplicated
[#0] WARNING:InputArguments -- RooAbsReal::plotOn(model1) WARNING: argument CurveNameSuffix is duplicated
[#0] WARNING:InputArguments -- RooAbsReal::plotOn(model1) WARNING: argument CurveNameSuffix is duplicated
[#0] WARNING:InputArguments -- RooAbsReal::plotOn(model1) WARNING: argument CurveNameSuffix is duplicated
[#0] WARNING:InputArguments -- RooAbsReal::plotOn(model1) WARNING: argument CurveNameSuffix is duplicated
[#0] WARNING:InputArguments -- RooAbsReal::plotOn(model1) WARNING: argument CurveNameSuffix is duplicated
[#0] WARNING:InputArguments -- RooAbsReal::plotOn(model1) WARNING: argument CurveNameSuffix is duplicated
[#0] WARNING:InputArguments -- RooAbsReal::plotOn(model1) WARNING: argument CurveNameSuffix is duplicated
[#0] WARNING:InputArguments -- RooAbsReal::plotOn(model1) WARNING: argument CurveNameSuffix is duplicated
[#0] WARNING:InputArguments -- RooAbsReal::plotOn(model1) WARNING: argument CurveNameSuffix is duplicated
[#0] WARNING:InputArguments -- RooAbsReal::plotOn(model1) WARNING: argument CurveNameSuffix is duplicated
[#0] WARNING:InputArguments -- RooAbsReal::plotOn(model1) WARNING: argument CurveNameSuffix is duplicated
[#1] INFO:Plotting -- RooAbsPdf::plotOn(model1) directly selected PDF components: (p_p_sig1)
[#1] INFO:Plotting -- RooAbsPdf::plotOn(model1) indirectly selected PDF components: (p_h_sig,p_phf_sig1,sp_ph)
[#1] INFO:Plotting -- RooAbsPdf::plotOn(model1) directly selected PDF components: (p_p_bkg1)
[#1] INFO:Plotting -- RooAbsPdf::plotOn(model1) indirectly selected PDF components: (p_h_bkg,p_phf_bkg1,sp_ph)
[#1] INFO:Plotting -- RooPlot::updateFitRangeNorm: New event count of 50 will supersede previous event count of 1050 for normalization of PDF projections
[#0] WARNING:InputArguments -- RooAbsReal::plotOn(model2) WARNING: argument CurveNameSuffix is duplicated
[#0] WARNING:InputArguments -- RooAbsReal::plotOn(model2) WARNING: argument CurveNameSuffix is duplicated
[#0] WARNING:InputArguments -- RooAbsReal::plotOn(model2) WARNING: argument CurveNameSuffix is duplicated
[#0] WARNING:InputArguments -- RooAbsReal::plotOn(model2) WARNING: argument CurveNameSuffix is duplicated
[#0] WARNING:InputArguments -- RooAbsReal::plotOn(model2) WARNING: argument CurveNameSuffix is duplicated
[#0] WARNING:InputArguments -- RooAbsReal::plotOn(model2) WARNING: argument CurveNameSuffix is duplicated
[#0] WARNING:InputArguments -- RooAbsReal::plotOn(model2) WARNING: argument CurveNameSuffix is duplicated
[#0] WARNING:InputArguments -- RooAbsReal::plotOn(model2) WARNING: argument CurveNameSuffix is duplicated
[#0] WARNING:InputArguments -- RooAbsReal::plotOn(model2) WARNING: argument CurveNameSuffix is duplicated
[#0] WARNING:InputArguments -- RooAbsReal::plotOn(model2) WARNING: argument CurveNameSuffix is duplicated
[#0] WARNING:InputArguments -- RooAbsReal::plotOn(model2) WARNING: argument CurveNameSuffix is duplicated
[#0] WARNING:InputArguments -- RooAbsReal::plotOn(model2) WARNING: argument CurveNameSuffix is duplicated
[#0] WARNING:InputArguments -- RooAbsReal::plotOn(model2) WARNING: argument CurveNameSuffix is duplicated
[#0] WARNING:InputArguments -- RooAbsReal::plotOn(model2) WARNING: argument CurveNameSuffix is duplicated
[#0] WARNING:InputArguments -- RooAbsReal::plotOn(model2) WARNING: argument CurveNameSuffix is duplicated
[#0] WARNING:InputArguments -- RooAbsReal::plotOn(model2) WARNING: argument CurveNameSuffix is duplicated
[#0] WARNING:InputArguments -- RooAbsReal::plotOn(model2) WARNING: argument CurveNameSuffix is duplicated
[#0] WARNING:InputArguments -- RooAbsReal::plotOn(model2) WARNING: argument CurveNameSuffix is duplicated
[#0] WARNING:InputArguments -- RooAbsReal::plotOn(model2) WARNING: argument CurveNameSuffix is duplicated
[#0] WARNING:InputArguments -- RooAbsReal::plotOn(model2) WARNING: argument CurveNameSuffix is duplicated
[#0] WARNING:InputArguments -- RooAbsReal::plotOn(model2) WARNING: argument CurveNameSuffix is duplicated
[#0] WARNING:InputArguments -- RooAbsReal::plotOn(model2) WARNING: argument CurveNameSuffix is duplicated
[#0] WARNING:InputArguments -- RooAbsReal::plotOn(model2) WARNING: argument CurveNameSuffix is duplicated
[#0] WARNING:InputArguments -- RooAbsReal::plotOn(model2) WARNING: argument CurveNameSuffix is duplicated
[#0] WARNING:InputArguments -- RooAbsReal::plotOn(model2) WARNING: argument CurveNameSuffix is duplicated
[#0] WARNING:InputArguments -- RooAbsReal::plotOn(model2) WARNING: argument CurveNameSuffix is duplicated
[#0] WARNING:InputArguments -- RooAbsReal::plotOn(model2) WARNING: argument CurveNameSuffix is duplicated
[#0] WARNING:InputArguments -- RooAbsReal::plotOn(model2) WARNING: argument CurveNameSuffix is duplicated
[#0] WARNING:InputArguments -- RooAbsReal::plotOn(model2) WARNING: argument CurveNameSuffix is duplicated
[#0] WARNING:InputArguments -- RooAbsReal::plotOn(model2) WARNING: argument CurveNameSuffix is duplicated
[#0] WARNING:InputArguments -- RooAbsReal::plotOn(model2) WARNING: argument CurveNameSuffix is duplicated
[#0] WARNING:InputArguments -- RooAbsReal::plotOn(model2) WARNING: argument CurveNameSuffix is duplicated
[#0] WARNING:InputArguments -- RooAbsReal::plotOn(model2) WARNING: argument CurveNameSuffix is duplicated
[#0] WARNING:InputArguments -- RooAbsReal::plotOn(model2) WARNING: argument CurveNameSuffix is duplicated
[#0] WARNING:InputArguments -- RooAbsReal::plotOn(model2) WARNING: argument CurveNameSuffix is duplicated
[#0] WARNING:InputArguments -- RooAbsReal::plotOn(model2) WARNING: argument CurveNameSuffix is duplicated
[#0] WARNING:InputArguments -- RooAbsReal::plotOn(model2) WARNING: argument CurveNameSuffix is duplicated
[#0] WARNING:InputArguments -- RooAbsReal::plotOn(model2) WARNING: argument CurveNameSuffix is duplicated
[#0] WARNING:InputArguments -- RooAbsReal::plotOn(model2) WARNING: argument CurveNameSuffix is duplicated
[#0] WARNING:InputArguments -- RooAbsReal::plotOn(model2) WARNING: argument CurveNameSuffix is duplicated
[#0] WARNING:InputArguments -- RooAbsReal::plotOn(model2) WARNING: argument CurveNameSuffix is duplicated
[#0] WARNING:InputArguments -- RooAbsReal::plotOn(model2) WARNING: argument CurveNameSuffix is duplicated
[#0] WARNING:InputArguments -- RooAbsReal::plotOn(model2) WARNING: argument CurveNameSuffix is duplicated
[#0] WARNING:InputArguments -- RooAbsReal::plotOn(model2) WARNING: argument CurveNameSuffix is duplicated
[#0] WARNING:InputArguments -- RooAbsReal::plotOn(model2) WARNING: argument CurveNameSuffix is duplicated
[#0] WARNING:InputArguments -- RooAbsReal::plotOn(model2) WARNING: argument CurveNameSuffix is duplicated
[#0] WARNING:InputArguments -- RooAbsReal::plotOn(model2) WARNING: argument CurveNameSuffix is duplicated
[#0] WARNING:InputArguments -- RooAbsReal::plotOn(model2) WARNING: argument CurveNameSuffix is duplicated
[#0] WARNING:InputArguments -- RooAbsReal::plotOn(model2) WARNING: argument CurveNameSuffix is duplicated
[#0] WARNING:InputArguments -- RooAbsReal::plotOn(model2) WARNING: argument CurveNameSuffix is duplicated
[#0] WARNING:InputArguments -- RooAbsReal::plotOn(model2) WARNING: argument CurveNameSuffix is duplicated
[#0] WARNING:InputArguments -- RooAbsReal::plotOn(model2) WARNING: argument CurveNameSuffix is duplicated
[#0] WARNING:InputArguments -- RooAbsReal::plotOn(model2) WARNING: argument CurveNameSuffix is duplicated
[#0] WARNING:InputArguments -- RooAbsReal::plotOn(model2) WARNING: argument CurveNameSuffix is duplicated
[#0] WARNING:InputArguments -- RooAbsReal::plotOn(model2) WARNING: argument CurveNameSuffix is duplicated
[#1] INFO:Plotting -- RooAbsPdf::plotOn(model2) directly selected PDF components: (p_p_sig2)
[#1] INFO:Plotting -- RooAbsPdf::plotOn(model2) indirectly selected PDF components: (p_h_sig,p_phf2,sp_ph)
[#1] INFO:Plotting -- RooAbsPdf::plotOn(model2) directly selected PDF components: (p_p_bkg2)
[#1] INFO:Plotting -- RooAbsPdf::plotOn(model2) indirectly selected PDF components: (p_phf2,p_h_bkg,sp_ph)
[#1] INFO:Plotting -- RooPlot::updateFitRangeNorm: New event count of 50 will supersede previous event count of 1050 for normalization of PDF projections
Asig [normal ] = 0.8337778709310433 +/- 0.1898141852388937
Asig [BB ] = 0.8506382806350165 +/- 0.23582370564845373
Asig [BBlight] = 0.834377137233951 +/- 0.20297198550407047

Based on a demo by Wouter Verkerke

Date
June 2021
Author
Jonas Rembser, Harshal Shende, Stephan Hageboeck (C++ version)

Definition in file rf709_BarlowBeeston.py.