00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012 #ifndef ROOABSCACHEDREAL
00013 #define ROOABSCACHEDREAL
00014
00015 #include "RooAbsPdf.h"
00016 #include "RooRealProxy.h"
00017 #include "RooAbsReal.h"
00018 #include "RooHistFunc.h"
00019 #include "RooObjCacheManager.h"
00020 #include <map>
00021 class RooChangeTracker ;
00022 class RooArgSet ;
00023
00024 class RooAbsCachedReal : public RooAbsReal {
00025 public:
00026
00027 RooAbsCachedReal() {} ;
00028 RooAbsCachedReal(const char *name, const char *title, Int_t ipOrder=0);
00029 RooAbsCachedReal(const RooAbsCachedReal& other, const char* name=0) ;
00030 virtual ~RooAbsCachedReal() ;
00031
00032 virtual Double_t getVal(const RooArgSet* set=0) const ;
00033 virtual Bool_t selfNormalized() const {
00034
00035 return kTRUE ;
00036 }
00037
00038 void setInterpolationOrder(Int_t order) ;
00039 Int_t getInterpolationOrder() const {
00040
00041 return _ipOrder ;
00042 }
00043
00044 virtual Bool_t forceAnalyticalInt(const RooAbsArg& ) const {
00045
00046 return kTRUE ;
00047 }
00048
00049 virtual Int_t getAnalyticalIntegralWN(RooArgSet& allVars, RooArgSet& analVars, const RooArgSet* normSet, const char* rangeName=0) const ;
00050 virtual Double_t analyticalIntegralWN(Int_t code, const RooArgSet* normSet, const char* rangeName=0) const ;
00051
00052 protected:
00053
00054 class FuncCacheElem : public RooAbsCacheElement {
00055 public:
00056 FuncCacheElem(const RooAbsCachedReal& self, const RooArgSet* nset) ;
00057 virtual ~FuncCacheElem() {} ;
00058
00059
00060 virtual RooArgList containedArgs(Action) ;
00061 virtual void printCompactTreeHook(std::ostream&, const char *, Int_t, Int_t) ;
00062
00063 RooHistFunc* func() { return _func ; }
00064 RooDataHist* hist() { return _hist ; }
00065 RooChangeTracker* paramTracker() { return _paramTracker ; }
00066
00067 private:
00068
00069 RooHistFunc* _func ;
00070 RooChangeTracker* _paramTracker ;
00071 RooDataHist* _hist ;
00072 } ;
00073
00074 FuncCacheElem* getCache(const RooArgSet* nset) const ;
00075 void clearCacheObject(FuncCacheElem& cache) const ;
00076
00077 virtual const char* payloadUniqueSuffix() const { return 0 ; }
00078
00079 friend class FuncCacheElem ;
00080 virtual const char* binningName() const {
00081
00082 return "cache" ;
00083 }
00084 virtual FuncCacheElem* createCache(const RooArgSet* nset) const ;
00085 virtual const char* inputBaseName() const = 0 ;
00086 virtual RooArgSet* actualObservables(const RooArgSet& nset) const = 0 ;
00087 virtual RooArgSet* actualParameters(const RooArgSet& nset) const = 0 ;
00088 virtual void fillCacheObject(FuncCacheElem& cache) const = 0 ;
00089
00090 mutable RooObjCacheManager _cacheMgr ;
00091
00092
00093 Int_t _ipOrder ;
00094
00095 TString cacheNameSuffix(const RooArgSet& nset) const ;
00096 void disableCache(Bool_t flag) {
00097
00098 _disableCache = flag ;
00099 }
00100
00101 mutable std::map<Int_t,std::pair<const RooArgSet*,const RooArgSet*> > _anaIntMap ;
00102
00103
00104 private:
00105
00106 Bool_t _disableCache ;
00107
00108 ClassDef(RooAbsCachedReal,1)
00109 };
00110
00111 #endif