Rf 5 0 9_Wsinteractive¶

Organization and simultaneous fits: easy interactive access to workspace contents - CINT to CLING code migration

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 Wednesday, January 19, 2022 at 10:25 AM.

In [ ]:
import ROOT

def fillWorkspace(w):
# Create pdf and fill workspace
# --------------------------------------------------------

# Declare observable x
x = ROOT.RooRealVar("x", "x", 0, 10)

# Create two Gaussian PDFs g1(x,mean1,sigma) anf g2(x,mean2,sigma) and
# their parameters
mean = ROOT.RooRealVar("mean", "mean of gaussians", 5, 0, 10)
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)

# Build Chebychev polynomial pdf
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
sig1frac = ROOT.RooRealVar("sig1frac", "fraction of component 1 in signal", 0.8, 0.0, 1.0)
sig = ROOT.RooAddPdf("sig", "Signal", [sig1, sig2], [sig1frac])

# Sum the composite signal and background
bkgfrac = ROOT.RooRealVar("bkgfrac", "fraction of background", 0.5, 0.0, 1.0)
model = ROOT.RooAddPdf("model", "g1+g2+a", [bkg, sig], [bkgfrac])

w.Import(model)

Create and fill workspace¶

Create a workspace named 'w' With CINT w could exports its contents to a same-name C++ namespace in CINT 'namespace w'. but self does not work anymore in CLING. so self tutorial is an example on how to change the code

In [ ]:
w = ROOT.RooWorkspace("w", True)

Fill workspace with pdf and data in a separate function

In [ ]:
fillWorkspace(w)

Print workspace contents

In [ ]:
w.Print()

self does not work anymore with CLING use normal workspace functionality

Use workspace contents¶

Old syntax to use the name space prefix operator to access the workspace contents

d = w.model.generate(w.x,1000) r = w.model.fitTo(*d)

use normal workspace methods

In [ ]:
model = w["model"]
x = w["x"]

d = model.generate({x}, 1000)
r = model.fitTo(d)

old syntax to access the variable x frame = w.x.frame()

In [ ]:
frame = x.frame()
d.plotOn(frame)

OLD syntax to ommit x. NB: The 'w.' prefix can be omitted if namespace w is imported in local namespace in the usual C++ way

using namespace w model.plotOn(frame) model.plotOn(frame, ROOT.RooFit.Components(bkg), ROOT.RooFit.LineStyle(ROOT.kDashed))

correct syntax

In [ ]:
bkg = w["bkg"]
model.plotOn(frame)
model.plotOn(frame, Components=bkg, LineStyle="--")

Draw the frame on the canvas

In [ ]:
c = ROOT.TCanvas("rf509_wsinteractive", "rf509_wsinteractive", 600, 600)