41using std::endl, std::list;
 
   50   RooRealVar numBins(
"numBins",
"Number of bins in range",100) ;
 
   52   std::string 
name = 
"RooBinIntegrator";
 
   55      return std::make_unique<RooBinIntegrator>(function, config);
 
   58   fact.registerPlugin(
name, creator, {numBins},
 
   71RooBinIntegrator::RooBinIntegrator(
const RooAbsFunc &function, 
int numBins)
 
   74  assert(_function && _function->isValid());
 
   77  _x.resize(_function->getDimension());
 
   80  _xmin.resize(_function->getDimension()) ;
 
   81  _xmax.resize(_function->getDimension()) ;
 
   83  for (
UInt_t i=0 ; i<_function->getDimension() ; i++) {
 
   84    _xmin[i]= _function->getMinLimit(i);
 
   85    _xmax[i]= _function->getMaxLimit(i);
 
   88    std::unique_ptr<list<double>> tmp{ _function->binBoundaries(i) };
 
   90      oocoutW(
nullptr,Integration) << 
"RooBinIntegrator::RooBinIntegrator WARNING: integrand provide no binning definition observable #" 
   91          << i << 
" substituting default binning of " << _numBins << 
" bins" << std::endl ;
 
   92      tmp = std::make_unique<list<double>>( );
 
   93      for (
Int_t j=0 ; 
j<=_numBins ; 
j++) {
 
  119bool RooBinIntegrator::setLimits(
double *
xmin, 
double *
xmax)
 
  121  if(_useIntegrandLimits) {
 
  122    oocoutE(
nullptr,Integration) << 
"RooBinIntegrator::setLimits: cannot override integrand's limits" << std::endl;
 
  127  return checkLimits();
 
  135bool RooBinIntegrator::checkLimits()
 const 
  137  if(_useIntegrandLimits) {
 
  138    assert(
nullptr != integrand() && integrand()->isValid());
 
  139    _xmin.resize(_function->getDimension()) ;
 
  140    _xmax.resize(_function->getDimension()) ;
 
  141    for (
UInt_t i=0 ; i<_function->getDimension() ; i++) {
 
  142      _xmin[i]= integrand()->getMinLimit(i);
 
  143      _xmax[i]= integrand()->getMaxLimit(i);
 
  146  for (
UInt_t i=0 ; i<_function->getDimension() ; i++) {
 
  147    if (_xmax[i]<=_xmin[i]) {
 
  148      oocoutE(
nullptr,Integration) << 
"RooBinIntegrator::checkLimits: bad range with min >= max (_xmin = " << _xmin[i] << 
" _xmax = " << _xmax[i] << 
")" << std::endl;
 
  163double RooBinIntegrator::integral(
const double *)
 
  166   if (_function->getDimension() < 1) 
return 0.;
 
  183   const bool isLastDim = 
d+1 == _function->getDimension();
 
  187      const double mid = (
hi+lo)/2.;
 
  190         const double binInt = integrand(_x.data())*(
hi-lo)*delta;
 
int Int_t
Signed integer 4 bytes (int)
 
unsigned int UInt_t
Unsigned integer 4 bytes (unsigned int)
 
ROOT::Detail::TRangeCast< T, true > TRangeDynCast
TRangeDynCast is an adapter class that allows the typed iteration through a TCollection.
 
The Kahan summation is a compensated summation algorithm, which significantly reduces numerical error...
 
Abstract interface for evaluating a real-valued function of one real variable and performing numerica...
 
Abstract interface for integrators of real-valued functions that implement the RooAbsFunc interface.
 
Holds the configuration parameters of the various numeric integrators used by RooRealIntegral.
 
static RooNumIntConfig & defaultConfig()
Return reference to instance of default numeric integrator configuration object.
 
Factory to instantiate numeric integrators from a given function binding and a given configuration.
 
static constexpr int isInfinite(double x)
Return true if x is infinite by RooNumber internal specification.
 
Variable that can be changed from the outside.
 
void function(const Char_t *name_, T fun, const Char_t *docstring=0)
 
static uint64_t sum(uint64_t i)