Organization and simultaneous fits: basic use of the 'object factory' associated with a workspace to rapidly build p.d.f.s functions and their parameter components
import ROOT
compact = ROOT.kFALSE
w = ROOT.RooWorkspace("w")
if not compact:
w.factory("Gaussian::sig1(x[-10,10],mean[5,0,10],0.5)")
w.factory("Gaussian::sig2(x,mean,1)")
w.factory("Chebychev::bkg(x,{a0[0.5,0.,1],a1[-0.2,0.,1.]})")
w.factory("SUM::sig(sig1frac[0.8,0.,1.]*sig1,sig2)")
w.factory("SUM::model(bkgfrac[0.5,0.,1.]*bkg,sig)")
else:
w.factory(
"SUM::model(bkgfrac[0.5,0.,1.]*Chebychev::bkg(x[-10,10],{a0[0.5,0.,1],a1[-0.2,0.,1.]}), "
"SUM(sig1frac[0.8,0.,1.]*Gaussian(x,mean[5,0,10],0.5), Gaussian(x,mean,1)))")
data = w.pdf("model").generate(ROOT.RooArgSet(w.var("x")), 1000)
getattr(w, 'import')(data, ROOT.RooFit.Rename("data"))
x = w.var("x")
k = ROOT.RooKeysPdf("k", "k", x, data, ROOT.RooKeysPdf.NoMirror, 0.2)
getattr(w, 'import')(k, ROOT.RooFit.RenameAllNodes("workspace"))
w.Print()