16 #ifndef ROO_IMPROPER_INTEGRATOR_1D
17 #define ROO_IMPROPER_INTEGRATOR_1D
22 class RooInvTransform;
23 class RooIntegrator1D;
25 class RooImproperIntegrator1D :
public RooAbsIntegrator {
28 RooImproperIntegrator1D() ;
29 RooImproperIntegrator1D(
const RooAbsFunc&
function);
30 RooImproperIntegrator1D(
const RooAbsFunc&
function,
const RooNumIntConfig& config);
31 RooImproperIntegrator1D(
const RooAbsFunc&
function, Double_t xmin, Double_t xmax,
const RooNumIntConfig& config);
32 virtual RooAbsIntegrator* clone(
const RooAbsFunc&
function,
const RooNumIntConfig& config)
const ;
33 virtual ~RooImproperIntegrator1D();
35 virtual Bool_t checkLimits()
const;
36 using RooAbsIntegrator::setLimits ;
37 Bool_t setLimits(Double_t* xmin, Double_t* xmax);
38 virtual Bool_t setUseIntegrandLimits(Bool_t flag) {_useIntegrandLimits = flag ;
return kTRUE ; }
39 virtual Double_t integral(
const Double_t* yvec=0) ;
41 virtual Bool_t canIntegrate1D()
const {
return kTRUE ; }
42 virtual Bool_t canIntegrate2D()
const {
return kFALSE ; }
43 virtual Bool_t canIntegrateND()
const {
return kFALSE ; }
44 virtual Bool_t canIntegrateOpenEnded()
const {
return kTRUE ; }
48 friend class RooNumIntFactory ;
49 static void registerIntegrator(RooNumIntFactory& fact) ;
51 void initialize(
const RooAbsFunc*
function=0) ;
53 enum LimitsCase { Invalid, ClosedBothEnds, OpenBothEnds, OpenBelowSpansZero, OpenBelow,
54 OpenAboveSpansZero, OpenAbove };
55 LimitsCase limitsCase()
const;
57 mutable Double_t _xmin, _xmax;
58 Bool_t _useIntegrandLimits;
60 RooAbsFunc* _origFunc ;
61 RooInvTransform *_function;
62 RooNumIntConfig _config ;
63 mutable RooIntegrator1D *_integrator1,*_integrator2,*_integrator3;
65 ClassDef(RooImproperIntegrator1D,0)