Dear Wim,
Below, you can find a simplified code that is running fine, if the “unextended” lines are used (a plot is also produced). However, when I want to make it “extended”, either by putting :
data = model.generate(RooArgSet(x),RooFit.Extended())
OR
nexp=model.expectedEvents(RooArgSet(x))
data = model.generate(RooArgSet(x), NumEvent(nexp))
the fit gives me :
File “TEST_EXT.py”, line 44, in
data = model.generate(RooArgSet(x),RooFit.Extended())
TypeError: none of the 4 overloaded methods succeeded. Full details:
RooDataSet* RooAbsPdf::generate(const RooArgSet& whatVars, Int_t nEvents, const RooCmdArg& arg1, const RooCmdArg& arg2 = RooCmdArg::none(), const RooCmdArg& arg3 = RooCmdArg::none(), const RooCmdArg& arg4 = RooCmdArg::none(), const RooCmdArg& arg5 = RooCmdArg::none()) =>
takes at least 3 arguments (2 given)
problem in C++; program state has been reset
RooDataSet* RooAbsPdf::generate(const RooArgSet& whatVars, Int_t nEvents = 0, Bool_t verbose = kFALSE) =>
could not convert argument 2 (Objects/longobject.c:211: bad argument to internal function)
RooDataSet* RooAbsPdf::generate(const RooArgSet& whatVars, const RooDataSet& prototype, Int_t nEvents = 0, Bool_t verbose = kFALSE, Bool_t randProtoOrder = kFALSE, Bool_t resampleProto = kFALSE) =>
could not convert argument 2
OR
Traceback (most recent call last):
File “TEST_EXT.py”, line 45, in
nexp=model.expectedEvents(RooArgSet(x))
TypeError: none of the 2 overloaded methods succeeded. Full details:
problem in C++; program state has been reset
problem in C++; program state has been reset
Here is the code :
from ROOT import *
import math
from math import pi
from array import array
############################################
OBSERVABLE
x = RooRealVar(“x”,“x”,0,10)
#############################################
#SIGNAL
mean = RooRealVar(“mean”,“mean”,5)
sigma1 = RooRealVar(“sigma1”,“sigma1”,0.5)
sigma2 = RooRealVar(“sigma2”,“sigma2”,1)
sig1 = RooGaussian(“sig1”,“sig1”,x,mean,sigma1)
sig2 = RooGaussian(“sig2”,“sig2”,x,mean,sigma2)
sigfrac = RooRealVar(“sigfrac”,“sigfrac”,0.8,0,1)
sig = RooAddPdf(“sig”,“sig”,RooArgList(sig1,sig2),RooArgList(sigfrac))
#########################################################
#BACKGROUND
a0 = RooRealVar(“a0”,“a0”,0.5,0,1)
a1 = RooRealVar(“a1”,“a1”,-0.2,0,1)
bkg1 = RooChebychev(“bkg1”,“bkg1”,x,RooArgList(a0,a1))
alpha = RooRealVar(“alpha”,“alpha”,-1)
bkg2 = RooExponential(“bkg2”,“bkg2”,x,alpha)
bkgfrac = RooRealVar(“bkgfrac”,“bkgfrac”,0.2,0,1)
bkg = RooAddPdf(“bkg”,“bkg”,RooArgList(bkg1,bkg2),RooArgList(bkgfrac))
########################################################
#TOTAL PDF
nsig = RooRealVar(“nsig”,“nsig”,17000,0,20000)
nbkg = RooRealVar(“nbkg”,“nbkg”,13000,0,20000)
n_sig = RooRealVar(“nsig”,“nsig”,0.3)
########################################################
#UNEXTENDED VERSION
model = RooAddPdf(“model”,“model”,RooArgList(bkg,sig),RooArgList(n_sig))
data = RooDataSet()
data = model.generate(RooArgSet(x),10000)
print “Finished generating, now fitting”
model.fitTo(data,
RooFit.Minos(False),
RooFit.Hesse(False))
########################################################
##EXTENDED VERSION
#model = RooAddPdf(“model”,“model”,RooArgList(bkg,sig),RooArgList(nsig,nbkg))
#data = RooDataSet()
#data = model.generate(RooArgSet(x),RooFit.Extended(kTRUE))
##nexp=model.expectedEvents(RooArgSet(x))
##data = model.generate(RooArgSet(x), NumEvent(nexp))
#print “Finished generating, now fitting”
#model.fitTo(data,RooFit.Extended(),
RooFit.Minos(False),
RooFit.Hesse(False))
########################################################
#PLOTS
testxframe = x.frame()
data.plotOn(testxframe, RooLinkedList())
model.plotOn(testxframe)
testcanvas = TCanvas(“testcanvas”, “plot”, 1200, 900)
testcanvas.cd(1)
testxframe.Draw()
testcanvas.SaveAs(“test_extended.eps”)
Thank you very much for your precious help,
Best Greetings
Géraldine