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)