16 #ifndef ROO_MC_INTEGRATOR
17 #define ROO_MC_INTEGRATOR
24 class RooMCIntegrator :
public RooAbsIntegrator {
28 enum SamplingMode { Importance, ImportanceOnly, Stratified };
29 enum GeneratorType { QuasiRandom, PseudoRandom };
31 RooMCIntegrator(
const RooAbsFunc&
function, SamplingMode mode= Importance,
32 GeneratorType genType= QuasiRandom, Bool_t verbose= kFALSE);
33 RooMCIntegrator(
const RooAbsFunc&
function,
const RooNumIntConfig& config);
34 virtual RooAbsIntegrator* clone(
const RooAbsFunc&
function,
const RooNumIntConfig& config)
const ;
35 virtual ~RooMCIntegrator();
37 virtual Bool_t checkLimits()
const;
38 virtual Double_t integral(
const Double_t* yvec=0);
40 enum Stage { AllStages, ReuseGrid, RefineGrid };
41 Double_t vegas(Stage stage, UInt_t calls, UInt_t iterations, Double_t *absError= 0);
43 Double_t getAlpha()
const {
return _alpha; }
44 void setAlpha(Double_t alpha) { _alpha= alpha; }
46 GeneratorType getGenType()
const {
return _genType; }
47 void setGenType(GeneratorType type) { _genType= type; }
49 const RooGrid &grid()
const {
return _grid; }
51 virtual Bool_t canIntegrate1D()
const {
return kTRUE ; }
52 virtual Bool_t canIntegrate2D()
const {
return kTRUE ; }
53 virtual Bool_t canIntegrateND()
const {
return kTRUE ; }
54 virtual Bool_t canIntegrateOpenEnded()
const {
return kFALSE ; }
58 friend class RooNumIntFactory ;
59 static void registerIntegrator(RooNumIntFactory& fact) ;
61 mutable RooGrid _grid;
67 GeneratorType _genType;
69 Int_t _nRefinePerDim ;
70 Int_t _nIntegratePerDim ;
74 Double_t _jac,_wtd_int_sum,_sum_wgts,_chi_sum,_chisq,_result,_sigma;
75 UInt_t _it_start,_it_num,_samples,_calls_per_box;
77 ClassDef(RooMCIntegrator,0)