'ORGANIZATION AND SIMULTANEOUS FITS' RooFit tutorial macro #510
Working with named parameter sets and parameter snapshots in workspaces
 
  
 
import ROOT
 
 
def fillWorkspace(w):
    
    
 
    
    x = ROOT.RooRealVar("x", "x", 0, 10)
 
    
    
    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)
 
    
    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])
 
    
    sig1frac = ROOT.RooRealVar("sig1frac", "fraction of component 1 in signal", 0.8, 0.0, 1.0)
    sig = ROOT.RooAddPdf("sig", "Signal", [sig1, sig2], [sig1frac])
 
    
    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)
 
    
    
 
    
    
    
    
    
    
    
    params = model.getParameters({x})
    w.defineSet("parameters", params)
    w.defineSet("observables", {x})
 
    
    
 
    
    
    
    
    
    
    
 
    
    
    refData = model.generate({x}, 10000)
    model.fitTo(refData, PrintLevel=-1)
 
    
    
    w.saveSnapshot("reference_fit", params, True)
 
    
    
 
    bkgfrac.setVal(1)
    bkgfrac.setConstant(True)
    bkgfrac.removeError()
    model.fitTo(refData, PrintLevel=-1)
 
    w.saveSnapshot("reference_fit_bkgonly", params, True)
 
 
 
w = ROOT.RooWorkspace("w")
fillWorkspace(w)
 
model = w["model"]
 
data = model.generate(w.set("observables"), 1000)
 
model.fitTo(data, PrintLevel=-1)
 
frame = (w.set(
"observables").
first()).frame()
 
data.plotOn(frame)
model.plotOn(frame)
 
w.loadSnapshot("reference_fit")
model.plotOn(frame, LineColor="r")
w.loadSnapshot("reference_fit_bkgonly")
model.plotOn(frame, LineColor="r", LineStyle="--")
 
c = ROOT.TCanvas("rf510_wsnamedsets", "rf503_wsnamedsets", 600, 600)
ROOT.gPad.SetLeftMargin(0.15)
frame.GetYaxis().SetTitleOffset(1.4)
frame.Draw()
 
c.SaveAs("rf510_wsnamedsets.png")
 
w.Print()
 
ROOT.gDirectory.Add(w)
  [#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.
[#1] INFO:ObjectHandling -- RooWorkspace::import(w) importing RooAddPdf::model
[#1] INFO:ObjectHandling -- RooWorkspace::import(w) importing RooChebychev::bkg
[#1] INFO:ObjectHandling -- RooWorkspace::import(w) importing RooRealVar::x
[#1] INFO:ObjectHandling -- RooWorkspace::import(w) importing RooRealVar::a0
[#1] INFO:ObjectHandling -- RooWorkspace::import(w) importing RooRealVar::a1
[#1] INFO:ObjectHandling -- RooWorkspace::import(w) importing RooRealVar::bkgfrac
[#1] INFO:ObjectHandling -- RooWorkspace::import(w) importing RooAddPdf::sig
[#1] INFO:ObjectHandling -- RooWorkspace::import(w) importing RooGaussian::sig1
[#1] INFO:ObjectHandling -- RooWorkspace::import(w) importing RooRealVar::mean
[#1] INFO:ObjectHandling -- RooWorkspace::import(w) importing RooRealVar::sigma1
[#1] INFO:ObjectHandling -- RooWorkspace::import(w) importing RooRealVar::sig1frac
[#1] INFO:ObjectHandling -- RooWorkspace::import(w) importing RooGaussian::sig2
[#1] INFO:ObjectHandling -- RooWorkspace::import(w) importing RooRealVar::sigma2
[#1] INFO:Minimization -- RooAbsMinimizerFcn::setOptimizeConst: activating const optimization
[#1] INFO:Minimization --  The following expressions will be evaluated in cache-and-track mode: (bkg,sig1,sig2)
[#1] INFO:Minimization -- RooAbsMinimizerFcn::setOptimizeConst: deactivating const optimization
[#1] INFO:Minimization -- RooAbsMinimizerFcn::setOptimizeConst: activating const optimization
[#1] INFO:Minimization --  The following expressions will be evaluated in cache-and-track mode: (bkg,sig1,sig2)
[#1] INFO:Minimization -- RooAbsMinimizerFcn::setOptimizeConst: deactivating const optimization
[#1] INFO:Minimization -- RooAbsMinimizerFcn::setOptimizeConst: activating const optimization
[#1] INFO:Minimization --  The following expressions will be evaluated in cache-and-track mode: (bkg,sig1,sig2)
[#1] INFO:Minimization -- RooAbsMinimizerFcn::setOptimizeConst: deactivating const optimization
 
RooWorkspace(w) w contents
 
variables
---------
(a0,a1,bkgfrac,mean,sig1frac,sigma1,sigma2,x)
 
p.d.f.s
-------
RooChebychev::bkg[ x=x coefList=(a0,a1) ] = 1
RooAddPdf::model[ bkgfrac * bkg + [%] * sig ] = 1/1
RooAddPdf::sig[ sig1frac * sig1 + [%] * sig2 ] = 0.0131991/1
RooGaussian::sig1[ x=x mean=mean sigma=sigma1 ] = 1.11947e-05
RooGaussian::sig2[ x=x mean=mean sigma=sigma2 ] = 0.0578433
 
parameter snapshots
-------------------
reference_fit = (a0=0.484427 +/- 0.0229437,a1=1.85852e-06 +/- 0.615506,bkgfrac=0.489779 +/- 0.00797979,mean=5.01099 +/- 0.0103497,sigma1=0.5[C],sig1frac=0.771962 +/- 0.0274623,sigma2=1[C])
reference_fit_bkgonly = (a0=0.469238 +/- 0.0224872,a1=0 +/- 0.000154899,bkgfrac=1[C],mean=2.61253 +/- 2.39847,sigma1=0.5[C],sig1frac=0.771962 +/- 0.353053,sigma2=1[C])
 
named sets
----------
observables:(x)
parameters:(a0,a1,bkgfrac,mean,sig1frac,sigma1,sigma2)
 
- Date
 - February 2018 
 
- Authors
 - Clemens Lange, Wouter Verkerke (C version) 
 
Definition in file rf510_wsnamedsets.py.