00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016 #ifndef ROO_ACCEPT_REJECT
00017 #define ROO_ACCEPT_REJECT
00018
00019 #include "RooAbsNumGenerator.h"
00020 #include "RooPrintable.h"
00021 #include "RooArgSet.h"
00022
00023 class RooAbsReal;
00024 class RooRealVar;
00025 class RooDataSet;
00026 class RooRealBinding;
00027 class RooNumGenFactory ;
00028
00029 class RooAcceptReject : public RooAbsNumGenerator {
00030 public:
00031 RooAcceptReject() : _nextCatVar(0), _nextRealVar(0) {
00032
00033 } ;
00034 RooAcceptReject(const RooAbsReal &func, const RooArgSet &genVars, const RooNumGenConfig& config, Bool_t verbose=kFALSE, const RooAbsReal* maxFuncVal=0);
00035 RooAbsNumGenerator* clone(const RooAbsReal& func, const RooArgSet& genVars, const RooArgSet& ,
00036 const RooNumGenConfig& config, Bool_t verbose=kFALSE, const RooAbsReal* maxFuncVal=0) const {
00037 return new RooAcceptReject(func,genVars,config,verbose,maxFuncVal) ;
00038 }
00039 virtual ~RooAcceptReject();
00040
00041 const RooArgSet *generateEvent(UInt_t remaining, Double_t& resampleRatio);
00042 Double_t getFuncMax() ;
00043
00044
00045
00046 virtual Bool_t canSampleConditional() const { return kTRUE ; }
00047 virtual Bool_t canSampleCategories() const { return kTRUE ; }
00048
00049
00050 protected:
00051
00052 friend class RooNumGenFactory ;
00053 static void registerSampler(RooNumGenFactory& fact) ;
00054
00055 void addEventToCache();
00056 const RooArgSet *nextAcceptedEvent();
00057
00058 Double_t _maxFuncVal, _funcSum;
00059 UInt_t _realSampleDim,_catSampleMult;
00060 UInt_t _minTrials;
00061 UInt_t _totalEvents;
00062 UInt_t _eventsUsed;
00063 TIterator *_nextCatVar;
00064 TIterator *_nextRealVar;
00065
00066 UInt_t _minTrialsArray[4];
00067
00068 ClassDef(RooAcceptReject,0)
00069 };
00070
00071 #endif