Logo ROOT  
Reference Guide
 
Loading...
Searching...
No Matches
RooAbsIntegrator.cxx
Go to the documentation of this file.
1/*****************************************************************************
2 * Project: RooFit *
3 * Package: RooFitCore *
4 * @(#)root/roofitcore:$Id$
5 * Authors: *
6 * WV, Wouter Verkerke, UC Santa Barbara, verkerke@slac.stanford.edu *
7 * DK, David Kirkby, UC Irvine, dkirkby@uci.edu *
8 * *
9 * Copyright (c) 2000-2005, Regents of the University of California *
10 * and Stanford University. All rights reserved. *
11 * *
12 * Redistribution and use in source and binary forms, *
13 * with or without modification, are permitted according to the terms *
14 * listed in LICENSE (http://roofit.sourceforge.net/license.txt) *
15 *****************************************************************************/
16
17/**
18\file RooAbsIntegrator.cxx
19\class RooAbsIntegrator
20\ingroup Roofitcore
21
22Abstract interface for integrators of real-valued
23functions that implement the RooAbsFunc interface.
24**/
25
26#include "Riostream.h"
27
28#include "RooAbsIntegrator.h"
29#include "RooMsgService.h"
30#include "TClass.h"
31
32using std::endl;
33
35
36////////////////////////////////////////////////////////////////////////////////
37/// Copy constructor
38
39RooAbsIntegrator::RooAbsIntegrator(const RooAbsFunc& function, bool doPrintEvalCounter) :
40 _function(&function), _valid(function.isValid()), _printEvalCounter(doPrintEvalCounter)
41{
42}
43
44
45
46////////////////////////////////////////////////////////////////////////////////
47/// Calculate integral value with given array of parameter values
48
49double RooAbsIntegrator::calculate(const double *yvec)
50{
52
53 integrand()->saveXVec() ;
54 double ret = integral(yvec) ;
56
57 oocxcoutD(static_cast<TObject*>(nullptr), NumIntegration) << "RooAbsIntegrator::calculate(" << _function->getName() << ") number of function calls = " << integrand()->numCall()<<", result = "<<ret << endl ;
58 return ret ;
59}
60
61
62
63////////////////////////////////////////////////////////////////////////////////
64/// Interface to set limits on integration
65
67{
68 return setLimits(&xmin,&xmax) ;
69}
70
71
72
73////////////////////////////////////////////////////////////////////////////////
74/// Interface function that allows to defer limit definition to integrand definition
75
77{
78 return false ;
79}
RooAbsReal & function()
#define oocxcoutD(o, a)
float xmin
float xmax
Abstract interface for evaluating a real-valued function of one real variable and performing numerica...
Definition RooAbsFunc.h:27
virtual void saveXVec() const
Definition RooAbsFunc.h:56
void resetNumCall() const
Reset function call counter.
Definition RooAbsFunc.h:52
Int_t numCall() const
Return number of function calls since last reset.
Definition RooAbsFunc.h:47
virtual void restoreXVec() const
Definition RooAbsFunc.h:59
virtual const char * getName() const
Name of function binding.
Definition RooAbsFunc.h:65
virtual bool setUseIntegrandLimits(bool flag)
Interface function that allows to defer limit definition to integrand definition.
double calculate(const double *yvec=nullptr)
Calculate integral value with given array of parameter values.
virtual double integral(const double *yvec=nullptr)=0
const RooAbsFunc * _function
Pointer to function binding of integrand.
const RooAbsFunc * integrand() const
Return integrand function binding.
virtual bool setLimits(double *, double *)
Mother of all ROOT objects.
Definition TObject.h:41