Numeric algorithm tuning: configuration and customization of how numeric (partial) integrals are executed
from __future__ import print_function
import ROOT
ROOT.RooAbsReal.defaultIntegratorConfig().
Print(
"v")
ROOT.RooAbsReal.defaultIntegratorConfig().setEpsAbs(1e-6)
ROOT.RooAbsReal.defaultIntegratorConfig().setEpsRel(1e-6)
x = ROOT.RooRealVar("x", "x", -10, 10)
landau = ROOT.RooLandau("landau", "landau", x,
ROOT.RooFit.RooConst(0), ROOT.RooFit.RooConst(0.1))
ROOT.RooMsgService.instance().addStream(
ROOT.RooFit.DEBUG, ROOT.RooFit.Topic(ROOT.RooFit.Integration))
intLandau = landau.createIntegral(ROOT.RooArgSet(x))
val = intLandau.getVal()
print(" [1] int_dx landau(x) = ", val)
customConfig = ROOT.RooNumIntConfig(
ROOT.RooAbsReal.defaultIntegratorConfig())
integratorGKNotExisting = customConfig.method1D().setLabel("RooAdaptiveGaussKronrodIntegrator1D")
if (integratorGKNotExisting) :
print("WARNING: RooAdaptiveGaussKronrodIntegrator is not existing because ROOT is built without Mathmore support")
intLandau2 = landau.createIntegral(
ROOT.RooArgSet(x), ROOT.RooFit.NumIntConfig(customConfig))
val2 = intLandau2.getVal()
print(" [2] int_dx landau(x) = ", val2)
landau.setIntegratorConfig(customConfig)
intLandau3 = landau.createIntegral(ROOT.RooArgSet(x))
val3 = intLandau3.getVal()
print(" [3] int_dx landau(x) = ", val3)
if (not integratorGKNotExisting) :
ROOT.RooAbsReal.defaultIntegratorConfig().method1D().setLabel(
"RooAdaptiveGaussKronrodIntegrator1D")
ROOT.RooAbsReal.defaultIntegratorConfig().getConfigSection(
"RooIntegrator1D").setRealValue("maxSteps", 30)
customConfig.getConfigSection(
"RooAdaptiveGaussKronrodIntegrator1D").setRealValue("maxSeg", 50)
customConfig.getConfigSection(
"RooAdaptiveGaussKronrodIntegrator1D").setCatLabel("method", "15Points")
customConfig.getConfigSection(
"RooAdaptiveGaussKronrodIntegrator1D").find(
"method").
Print(
"v")
void Print(std::ostream &os, const OptionType &opt)