59 RooCategory extrap(
"extrapolation",
"Extrapolation procedure") ;
63 RooRealVar maxSteps(
"maxSteps",
"Maximum number of steps",20) ;
64 RooRealVar minSteps(
"minSteps",
"Minimum number of steps",999) ;
65 RooRealVar fixSteps(
"fixSteps",
"Fixed number of steps",0) ;
79 Int_t maxSteps,
double eps) :
80 RooAbsIntegrator(function), _rule(rule), _maxSteps(maxSteps), _minStepsZero(999), _fixSteps(0), _epsAbs(eps), _epsRel(eps), _doExtrap(true)
118 _epsAbs(config.epsAbs()),
119 _epsRel(config.epsRel())
130 oocoutE(
nullptr,Integration) <<
"RooIntegrator1D::ctor() ERROR: fixSteps>maxSteps, fixSteps set to maxSteps" << endl ;
147 _epsAbs(config.epsAbs()),
148 _epsRel(config.epsRel())
191 oocoutE(
nullptr,Integration) <<
"RooIntegrator1D::initialize: cannot integrate invalid function" << endl;
217 oocoutE(
nullptr,Integration) <<
"RooIntegrator1D::setLimits: cannot override integrand's limits" << endl;
239 oocoutE(
nullptr,Integration) <<
"RooIntegrator1D::checkLimits: bad range with min > max (_xmin = " <<
_xmin <<
" _xmax = " <<
_xmax <<
")" << endl;
272 for (
int jj=0 ; jj<=j ; jj++) {
273 if (
_s[j]>=zeroThresh) {
313 oocoutW(
nullptr,Integration) <<
"RooIntegrator1D::integral: integral of " <<
_function->
getName() <<
" over range (" <<
_xmin <<
"," <<
_xmax <<
") did not converge after "
316 ooccoutW(
nullptr,Integration) <<
" [" << j <<
"] h = " <<
_h[j] <<
" , s = " <<
_s[j] << endl;
340 for(it=1, j=1; j <
n-1; j++) it*= 3;
345 for(
sum= 0, j= 1; j <= it; j++) {
371 const int nInt = 1 << (
n-2);
377 for (
int j=0; j<nInt; ++j) {
396 double den,dif,dift,ho,hp,
w;
400 if ((dift=std::abs(xa[i])) < dif) {
413 if((den=ho-hp) == 0.0) {
414 oocoutE(
nullptr,Integration) <<
"RooIntegrator1D::extrapolate: internal error" << endl;
Option_t Option_t TPoint TPoint const char GetTextMagnitude GetFillStyle GetLineColor GetLineWidth GetMarkerStyle GetTextAlign GetTextColor GetTextSize void char Point_t Rectangle_t WindowAttributes_t Float_t Float_t Float_t Int_t Int_t UInt_t UInt_t Rectangle_t Int_t Int_t Window_t TString Int_t del
double getRealValue(const char *name, double defVal=0.0, bool verbose=false) const
Get value of a RooAbsReal stored in set with given name.
Int_t getCatIndex(const char *name, Int_t defVal=0, bool verbose=false) const
Get index value of a RooAbsCategory stored in set with given name.
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
UInt_t getDimension() const
virtual const char * getName() const
Name of function binding.
RooAbsIntegrator is the abstract interface for integrators of real-valued functions that implement th...
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?
RooArgSet is a container object that can hold multiple RooAbsArg objects.
RooCategory is an object to represent discrete states.
bool defineType(const std::string &label)
Define a state with given name.
bool setLabel(const char *label, bool printError=true) override
Set value by specifying the name of the desired state.
RooIntegrator1D implements an adaptive one-dimensional numerical integration algorithm.
std::vector< double > _c
! Integrator workspace
RooAbsIntegrator * clone(const RooAbsFunc &function, const RooNumIntConfig &config) const override
Clone integrator with new function binding and configuration. Needed by RooNumIntFactory.
void extrapolate(Int_t n)
Extrapolate result to final value.
double _xmax
! Upper integration bound
double addMidpoints(Int_t n)
Calculate the n-th stage of refinement of the Second Euler-Maclaurin summation rule which has the use...
double _extrapError
! Error on extrapolated value
bool _doExtrap
Apply conversion step?
Int_t _minStepsZero
Minimum number of steps to declare convergence to zero.
double * xvec(double &xx)
double addTrapezoids(Int_t n)
Calculate the n-th stage of refinement of the extended trapezoidal summation rule.
std::vector< double > _d
! Integrator workspace
double integral(const double *yvec=nullptr) override
Calculate numeric integral at given set of function binding parameters.
double _xmin
! Lower integration bound
bool _useIntegrandLimits
If true limits of function binding are used.
std::vector< double > _h
! Integrator workspace
double _epsRel
Relative convergence tolerance.
Int_t _maxSteps
Maximum number of steps.
Int_t _fixSteps
Fixed number of steps.
bool initialize()
Initialize the integrator.
double _savedResult
! Integrator workspace
double _range
! Size of integration range
static void registerIntegrator(RooNumIntFactory &fact)
Register RooIntegrator1D, is parameters and capabilities with RooNumIntFactory.
bool setLimits(double *xmin, double *xmax) override
Change our integration limits.
std::vector< double > _s
! Integrator workspace
bool checkLimits() const override
Check that our integration range is finite and otherwise return false.
double _epsAbs
Absolute convergence tolerance.
double _extrapValue
! Extrapolated value
RooNumIntConfig holds the configuration parameters of the various numeric integrators used by RooReal...
const RooArgSet & getConfigSection(const char *name) const
Retrieve configuration information specific to integrator with given name.
static RooNumIntConfig & defaultConfig()
Return reference to instance of default numeric integrator configuration object.
RooNumIntFactory is a factory to instantiate numeric integrators from a given function binding and a ...
bool storeProtoIntegrator(RooAbsIntegrator *proto, const RooArgSet &defConfig, const char *depName="")
Method accepting registration of a prototype numeric integrator along with a RooArgSet of its default...
static constexpr int isInfinite(double x)
Return true if x is infinite by RooNumber internal specification.
RooRealVar represents a variable that can be changed from the outside.
virtual const char * ClassName() const
Returns name of class to which the object belongs.
static uint64_t sum(uint64_t i)