Logo ROOT   6.30.04
Reference Guide
 All Namespaces Files Pages
RooAbsCachedReal.h
Go to the documentation of this file.
1 /*****************************************************************************
2  * Project: RooFit *
3  * *
4  * Copyright (c) 2000-2005, Regents of the University of California *
5  * and Stanford University. All rights reserved. *
6  * *
7  * Redistribution and use in source and binary forms, *
8  * with or without modification, are permitted according to the terms *
9  * listed in LICENSE (http://roofit.sourceforge.net/license.txt) *
10  *****************************************************************************/
11 
12 #ifndef ROOABSCACHEDREAL
13 #define ROOABSCACHEDREAL
14 
15 #include "RooAbsPdf.h"
16 #include "RooRealProxy.h"
17 #include "RooAbsReal.h"
18 #include "RooHistFunc.h"
19 #include "RooObjCacheManager.h"
20 #include <map>
21 class RooChangeTracker ;
22 class RooArgSet ;
23 
24 class RooAbsCachedReal : public RooAbsReal {
25 public:
26 
27  RooAbsCachedReal() {} ;
28  RooAbsCachedReal(const char *name, const char *title, Int_t ipOrder=0);
29  RooAbsCachedReal(const RooAbsCachedReal& other, const char* name=0) ;
30  virtual ~RooAbsCachedReal() ;
31 
32  virtual Double_t getValV(const RooArgSet* set=0) const ;
33  virtual Bool_t selfNormalized() const {
34  // Declares function self normalized
35  return kTRUE ;
36  }
37 
38  void setInterpolationOrder(Int_t order) ;
39  Int_t getInterpolationOrder() const {
40  // Set interpolation order in RooHistFuncs that represent cache histograms
41  return _ipOrder ;
42  }
43 
44  virtual Bool_t forceAnalyticalInt(const RooAbsArg& /*dep*/) const {
45  // Force all observables to be offered for internal integration
46  return kTRUE ;
47  }
48 
49  virtual Int_t getAnalyticalIntegralWN(RooArgSet& allVars, RooArgSet& analVars, const RooArgSet* normSet, const char* rangeName=0) const ;
50  virtual Double_t analyticalIntegralWN(Int_t code, const RooArgSet* normSet, const char* rangeName=0) const ;
51 
52  void disableCache(Bool_t flag) {
53  // Switch to disable caching mechanism
54  _disableCache = flag ;
55  }
56 
57 protected:
58 
59  class FuncCacheElem : public RooAbsCacheElement {
60  public:
61  FuncCacheElem(const RooAbsCachedReal& self, const RooArgSet* nset) ;
62  virtual ~FuncCacheElem() ;
63 
64  // Cache management functions
65  virtual RooArgList containedArgs(Action) ;
66  virtual void printCompactTreeHook(std::ostream&, const char *, Int_t, Int_t) ;
67 
68  RooHistFunc* func() { return _func ; }
69  RooDataHist* hist() { return _hist ; }
70  RooChangeTracker* paramTracker() { return _paramTracker ; }
71 
72  RooAbsReal* sourceClone() { return _sourceClone ; }
73  void setSourceClone(RooAbsReal* newSource) { delete _sourceClone ; _sourceClone = newSource ; }
74 
75  Bool_t cacheSource() { return _cacheSource ; }
76  void setCacheSource(Bool_t flag) { _cacheSource = flag ; }
77 
78  private:
79  // Payload
80  RooHistFunc* _func ;
81  RooChangeTracker* _paramTracker ;
82  RooDataHist* _hist ;
83  RooAbsReal* _sourceClone ;
84  Bool_t _cacheSource ;
85  } ;
86 
87  FuncCacheElem* getCache(const RooArgSet* nset) const ;
88  void clearCacheObject(FuncCacheElem& cache) const ;
89 
90  virtual const char* payloadUniqueSuffix() const { return 0 ; }
91 
92  friend class FuncCacheElem ;
93  virtual const char* binningName() const {
94  // Returns name of binning to be used for cache histogram creation
95  return "cache" ;
96  }
97  virtual FuncCacheElem* createCache(const RooArgSet* nset) const ;
98  virtual const char* inputBaseName() const = 0 ;
99  virtual RooArgSet* actualObservables(const RooArgSet& nset) const = 0 ;
100  virtual RooArgSet* actualParameters(const RooArgSet& nset) const = 0 ;
101  virtual void fillCacheObject(FuncCacheElem& cache) const = 0 ;
102 
103  mutable RooObjCacheManager _cacheMgr ; //! The cache manager
104 
105 
106  Int_t _ipOrder ; // Interpolation order for cache histograms
107 
108  TString cacheNameSuffix(const RooArgSet& nset) const ;
109 
110  mutable std::map<Int_t,std::pair<const RooArgSet*,const RooArgSet*> > _anaIntMap ; //! Map for analytical integration codes
111 
112 
113 private:
114 
115  Bool_t _disableCache ; // Flag to run object in passthrough (= non-caching mode)
116 
117  ClassDef(RooAbsCachedReal,1) // Abstract base class for cached p.d.f.s
118 };
119 
120 #endif