Hi Enrico,
I still have problem with the fit.
Let me describe my program a bit.
I’m trying to fit a target histogram by the sum of 2 other histogram which I call signal and background.
All three histograms are created by TH1::FillRandom()
hist_sig -> FillRandom ("gaus", nRandom);
hist_bkg -> FillRandom ("landau", nRandom);
float scale_target_sig = 1.5;
float scale_target_bkg = 1.1;
hist_target -> FillRandom ("gaus", nRandom*scale_target_sig);
hist_target -> FillRandom ("landau", nRandom*scale_target_bkg);
The Target histogram is converted into RooDataHist
while the signal and background are converted to RooHistPdf
RooRealVar *varX = new RooRealVar ("varX", "x-variable", -5, 10);
varX -> setBins (30);
RooDataHist *roohist_target = new RooDataHist ("roohist_target", "conversion of target", *varX, RooFit::Import(*hist_target));
RooDataHist *roohist_sig = new RooDataHist ("roohist_sig", "conversion of sig", *varX, RooFit::Import(*hist_sig));
RooDataHist *roohist_bkg = new RooDataHist ("roohist_bkg", "conversion of bkg", *varX, RooFit::Import(*hist_bkg));
RooHistPdf *template_sig = new RooHistPdf ("template_sig", "histogram-pdf for signal", *varX, *roohist_sig);
RooHistPdf *template_bkg = new RooHistPdf ("template_bkg", "histogram-pdf for background", *varX, *roohist_bkg);
I tried two different ways to fits:
Model 1
RooRealVar *fracsig = new RooRealVar ("fracsig", "fraction of Sig", 15000, 0.0, 30000);
RooRealVar *fracbkg = new RooRealVar ("fracbkg", "fraction of Bkg", 10000, 0.0, 30000);
RooAddPdf *fitmodel = new RooAddPdf (
"fitmodel", "",
RooArgList(*template_sig, *template_bkg),
RooArgList(*fracsig, *fracbkg));
fitmodel -> fitTo (*roohist_target);
Model 2
RooRealVar *fracsig = new RooRealVar ("fracsig", "fraction of Sig", 0.5, 0.1, 0.9);
RooAddPdf *fitmodel = new RooAddPdf (
"fitmodel", "",
RooArgList(*template_sig, *template_bkg),
RooArgList(*fracsig));
fitmodel -> fitTo (*roohist_target);
Both models will fail if I set scale_target_sig
(in the first code block) to be larger than 1.0.
The error RooFit returns is:
RooMinimizerFcn: Minimized function has error status.
Returning maximum FCN so far (-inf) to force MIGRAD to back out of this region. Error log follows.
Parameter values: fracsig=0.5
RooAddPdf::fitmodel[ fracsig * template_sig + [%] * template_bkg ]
getLogVal() top-level p.d.f evaluates to zero @ !refCoefNorm=(), !pdfs=(template_sig = 0/1,template_bkg = 0/1), !coefficients=(fracsig = 0.5)
RooNLLVar::nll_fitmodel_roohist_target[ paramSet=(fracsig) ]
function value is NAN @ paramSet=(fracsig = 0.5)
Furthermore, if I change the order of event generation, the scale_target_bkg
will affect the results.
Here is the new version of my code, you can use it to reproduce the result:
fitter_RooFitQuestion.C (3.8 KB)
Thank you very much,
Hoa.