54#include <gsl/gsl_integration.h>
67namespace RooFit_internal {
70 static void registerIntegrator()
77struct Roo_reg_GKInteg1D {
78 Roo_reg_GKInteg1D() { Roo_internal_GKInteg1D::registerIntegrator(); }
93 return std::make_unique<RooGaussKronrodIntegrator1D>(function, config);
102 oocoutI(
nullptr, Integration) <<
"RooGaussKronrodIntegrator1D has been registered" << std::endl;
157 oocoutE(
nullptr,Eval) <<
"RooGaussKronrodIntegrator1D::setLimits: cannot override integrand's limits" << std::endl;
static Roo_reg_AGKInteg1D instance
struct gsl_function_struct gsl_function
double RooGaussKronrodIntegrator1D_GSL_GlueFunction(double x, void *data)
unsigned int UInt_t
Unsigned integer 4 bytes (unsigned int).
Abstract interface for evaluating a real-valued function of one real variable and performing numerica...
virtual double getMaxLimit(UInt_t dimension) const =0
virtual double getMinLimit(UInt_t dimension) const =0
bool isValid() const
Is integrator in valid state.
const RooAbsFunc * _function
Pointer to function binding of integrand.
const RooAbsFunc * integrand() const
Return integrand function binding.
bool _valid
Is integrator in valid state?
Implements the Gauss-Kronrod integration algorithm.
double integral(const double *yvec=nullptr) override
Calculate and return integral.
friend class RooNumIntFactory
double _xmax
! Upper integration bound
RooGaussKronrodIntegrator1D(const RooAbsFunc &function, const RooNumIntConfig &config)
Construct integral on 'function' using given configuration object.
std::vector< double > _x
! do not persist
friend double RooGaussKronrodIntegrator1D_GSL_GlueFunction(double x, void *data)
bool initialize()
Perform one-time initialization of integrator.
bool checkLimits() const override
Check that our integration range is finite and otherwise return false.
double _xmin
! Lower integration bound
bool setLimits(double *xmin, double *xmax) override
Change our integration limits.
static void registerIntegrator(RooNumIntFactory &fact)
Register RooGaussKronrodIntegrator1D, its parameters and capabilities with RooNumIntConfig.
Holds the configuration parameters of the various numeric integrators used by RooRealIntegral.
static RooNumIntFactory & instance()
Static method returning reference to singleton instance of factory.
bool registerPlugin(std::string const &name, Creator const &creator, const RooArgSet &defConfig, bool canIntegrate1D, bool canIntegrate2D, bool canIntegrateND, bool canIntegrateOpenEnded, const char *depName="")
Method accepting registration of a prototype numeric integrator along with a RooArgSet of its default...