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)