18#ifndef ROO_IMPROPER_INTEGRATOR_1D
19#define ROO_IMPROPER_INTEGRATOR_1D
25class RooRombergIntegrator;
29 RooImproperIntegrator1D(
const RooAbsFunc &function);
30 RooImproperIntegrator1D(
const RooAbsFunc &function,
const RooNumIntConfig &config);
31 RooImproperIntegrator1D(
const RooAbsFunc &function,
double xmin,
double xmax,
const RooNumIntConfig &config);
38 _useIntegrandLimits = flag;
41 double integral(
const double *yvec =
nullptr)
override;
44 friend class RooNumIntFactory;
45 static void registerIntegrator(RooNumIntFactory &fact);
47 void initialize(
const RooAbsFunc *function =
nullptr);
58 LimitsCase limitsCase()
const;
60 mutable double _xmin, _xmax;
61 bool _useIntegrandLimits;
63 RooAbsFunc *_origFunc =
nullptr;
64 std::unique_ptr<RooInvTransform> _function;
65 RooNumIntConfig _config;
66 mutable std::unique_ptr<RooRombergIntegrator> _integrator1;
67 mutable std::unique_ptr<RooRombergIntegrator> _integrator2;
68 mutable std::unique_ptr<RooRombergIntegrator> _integrator3;
Abstract interface for integrators of real-valued functions that implement the RooAbsFunc interface.
virtual bool setUseIntegrandLimits(bool flag)
Interface function that allows to defer limit definition to integrand definition.
virtual bool checkLimits() const
If true, finite limits are required on the observable range.
virtual double integral(const double *yvec=nullptr)=0
virtual bool setLimits(double *, double *)