16 #ifndef ROO_ABS_INTEGRATOR
17 #define ROO_ABS_INTEGRATOR
22 class RooAbsIntegrator :
public TObject {
25 RooAbsIntegrator(
const RooAbsFunc&
function, Bool_t printEvalCounter=kFALSE);
26 inline virtual ~RooAbsIntegrator() {
29 virtual RooAbsIntegrator* clone(
const RooAbsFunc&
function,
const RooNumIntConfig& config)
const = 0 ;
31 inline Bool_t isValid()
const {
36 inline Double_t integrand(
const Double_t x[])
const {
38 return (*_function)(x);
40 inline const RooAbsFunc *integrand()
const {
45 inline virtual Bool_t checkLimits()
const {
50 Double_t calculate(
const Double_t *yvec=0) ;
51 virtual Double_t integral(
const Double_t *yvec=0)=0 ;
53 virtual Bool_t canIntegrate1D()
const = 0 ;
54 virtual Bool_t canIntegrate2D()
const = 0 ;
55 virtual Bool_t canIntegrateND()
const = 0 ;
56 virtual Bool_t canIntegrateOpenEnded()
const = 0 ;
58 Bool_t printEvalCounter()
const {
return _printEvalCounter ; }
59 void setPrintEvalCounter(Bool_t value) { _printEvalCounter = value ; }
61 virtual Bool_t setLimits(Double_t*, Double_t*) {
return kFALSE ; }
62 virtual Bool_t setLimits(Double_t xmin, Double_t xmax) ;
63 virtual Bool_t setUseIntegrandLimits(Bool_t flag) ;
67 const RooAbsFunc *_function;
69 Bool_t _printEvalCounter ;
71 ClassDef(RooAbsIntegrator,0)