I’m trying to run a complex fit using RooFit, but I’m running into severe performance problems.
I have two samples using the same fit model structure, with the only difference being that in one of the samples the range of a variable (x in the example below) is reduced (due to acceptance there are no events there).
The core of the model is essentially (in pseudocode):
pdf_sig = RooProdPdf([pdf_sx(sx), pdf_m(m), pdf_physics(x, a | sx, m), <other>]) pdf_bkg = RooProdPdf([<various bkg pdf>]) fit_model = RooAddPdf([pdf_sig, pdf_bkg], [N_sig, N_bkg])
The fit completes fine in the full range sample, but when ran on the limited range sample it seems to be extremely slow.
In the logs I see mentions of numerical integrals:
[#1] INFO:NumericIntegration -- RooRealIntegral::init(SUBPROD_pdf_sx_NORM[sx]_X_pdf_physics_Int[a,x|NormalizationRangeFor<subrange>]_Norm[a,x]_X_pdf_m_NORM[m]_Int[sx,m|NormalizationRangeFor<subrange>]) using numeric integrator RooAdaptiveIntegratorND to calculate Int(sx,m)
which may be the problem, since they probably depend on x and a and thus change at each event (and
pdf_physics is very much not meant to be integrated in
m, hence the numerical integral).
What are those exactly? I think they come from
RooAbsOptTestStatistics and are related to the
RooAddPdf coefficients but I’m not sure about the details.
Currently I’m fitting each sample on its own, but eventually they are supposed to go into a
Can anything be done to make the fit faster, possibly avoiding those integrals?