16 #ifndef ROO_INTEGRATOR_1D 
   17 #define ROO_INTEGRATOR_1D 
   22 class RooIntegrator1D : 
public RooAbsIntegrator {
 
   26   enum SummationRule { Trapezoid, Midpoint };
 
   29   RooIntegrator1D(
const RooAbsFunc& 
function, SummationRule rule= Trapezoid,
 
   30         Int_t maxSteps= 0, Double_t eps= 0) ; 
 
   31   RooIntegrator1D(
const RooAbsFunc& 
function, Double_t xmin, Double_t xmax,
 
   32         SummationRule rule= Trapezoid, Int_t maxSteps= 0, Double_t eps= 0) ; 
 
   34   RooIntegrator1D(
const RooAbsFunc& 
function, 
const RooNumIntConfig& config) ;
 
   35   RooIntegrator1D(
const RooAbsFunc& 
function, Double_t xmin, Double_t xmax, 
 
   36         const RooNumIntConfig& config) ;
 
   38   virtual RooAbsIntegrator* clone(
const RooAbsFunc& 
function, 
const RooNumIntConfig& config) 
const ;
 
   39   virtual ~RooIntegrator1D();
 
   41   virtual Bool_t checkLimits() 
const;
 
   42   virtual Double_t integral(
const Double_t *yvec=0) ;
 
   44   using RooAbsIntegrator::setLimits ;
 
   45   Bool_t setLimits(Double_t* xmin, Double_t* xmax);
 
   46   virtual Bool_t setUseIntegrandLimits(Bool_t flag) {_useIntegrandLimits = flag ; 
return kTRUE ; }
 
   48   virtual Bool_t canIntegrate1D()
 const { 
return kTRUE ; }
 
   49   virtual Bool_t canIntegrate2D()
 const { 
return kFALSE ; }
 
   50   virtual Bool_t canIntegrateND()
 const { 
return kFALSE ; }
 
   51   virtual Bool_t canIntegrateOpenEnded()
 const { 
return kFALSE ; }
 
   55   friend class RooNumIntFactory ;
 
   56   static void registerIntegrator(RooNumIntFactory& fact) ;  
 
   60   Bool_t _useIntegrandLimits;  
 
   70   enum { _nPoints = 5 };
 
   73   Double_t addTrapezoids(Int_t n) ;
 
   74   Double_t addMidpoints(Int_t n) ;
 
   75   void extrapolate(Int_t n) ;
 
   81   Double_t _extrapValue;               
 
   82   Double_t _extrapError;               
 
   87   Double_t _savedResult;               
 
   89   Double_t* xvec(Double_t& xx) { _x[0] = xx ; 
return _x ; }
 
   93   ClassDef(RooIntegrator1D,0)