34 ClassImp(RooCachedReal);
43 RooCachedReal::RooCachedReal(
const char *name,
const char *title, RooAbsReal& _func) :
44 RooAbsCachedReal(name,title),
45 func(
"func",
"func",this,_func),
46 _useCdfBoundaries(kFALSE),
50 setExpensiveObjectCache(_func.expensiveObjectCache()) ;
69 RooCachedReal::RooCachedReal(
const char *name,
const char *title, RooAbsReal& _func,
const RooArgSet& cacheObs) :
70 RooAbsCachedReal(name,title),
71 func(
"func",
"func",this,_func),
72 _cacheObs(
"cacheObs",
"cacheObs",this,kFALSE,kFALSE),
73 _useCdfBoundaries(kFALSE),
76 _cacheObs.add(cacheObs) ;
79 setExpensiveObjectCache(_func.expensiveObjectCache()) ;
88 RooCachedReal::RooCachedReal(
const RooCachedReal& other,
const char* name) :
89 RooAbsCachedReal(other,name),
90 func(
"func",this,other.func),
91 _cacheObs(
"cacheObs",this,other._cacheObs),
92 _useCdfBoundaries(other._useCdfBoundaries),
93 _cacheSource(other._cacheSource)
102 RooCachedReal::~RooCachedReal()
114 RooAbsCachedReal::FuncCacheElem* RooCachedReal::createCache(
const RooArgSet* nset)
const
116 FuncCacheElem* ret = RooAbsCachedReal::createCache(nset) ;
118 ret->setCacheSource(kTRUE) ;
128 void RooCachedReal::fillCacheObject(RooAbsCachedReal::FuncCacheElem& cache)
const
130 unsigned nDim = cache.hist()->get()->getSize();
132 RooFIter iter = cache.hist()->get()->fwdIterator();
135 while((arg=iter.next()))
if (dynamic_cast<RooAbsCategory*>(arg)) ++nCat;
137 coutP(Eval) <<
"RooCachedReal::fillCacheObject(" << GetName() <<
") filling "
138 << nCat <<
" + " << nDim-nCat <<
" dimensional cache (" << cache.hist()->numEntries() <<
" points)" <<endl;
143 if (!cache.sourceClone()) {
144 RooAbsArg* sourceClone = func.arg().cloneTree() ;
145 cache.setSourceClone((RooAbsReal*)sourceClone) ;
146 cache.sourceClone()->recursiveRedirectServers(*cache.hist()->get()) ;
147 cache.sourceClone()->recursiveRedirectServers(cache.paramTracker()->parameters());
151 for (Int_t i=0 ; i<cache.hist()->numEntries() ; i++) {
152 const RooArgSet* obs = cache.hist()->get(i) ;
153 Double_t binVal = cache.sourceClone()->getVal(obs) ;
154 cache.hist()->set(binVal) ;
158 if (!cache.cacheSource()) {
159 cache.setSourceClone(0) ;
162 cache.func()->setCdfBoundaries(_useCdfBoundaries) ;
176 RooArgSet* RooCachedReal::actualObservables(
const RooArgSet& nset)
const
178 if (_cacheObs.getSize()>0) {
179 return func.arg().getObservables(_cacheObs) ;
182 return func.arg().getObservables(nset) ;
193 RooArgSet* RooCachedReal::actualParameters(
const RooArgSet& nset)
const
195 if (_cacheObs.getSize()>0) {
196 return func.arg().getParameters(_cacheObs) ;
198 return func.arg().getParameters(nset) ;
202 void RooCachedReal::operModeHook()
204 if (operMode()==ADirty) {
205 ((RooAbsArg*)func.absArg())->setOperMode(ADirty) ;