16#ifndef ROO_CACHE_MANAGER
17#define ROO_CACHE_MANAGER
45 return getObj(nset,
nullptr,sterileIndex,isetRangeName) ;
50 return setObj(nset,
nullptr,obj,isetRangeName) ;
75 bool ,
bool )
override {
96 }
else if (
_size==1) {
100 oocoutI(
_owner,Optimization) <<
"RooCacheManager::wireCache(" <<
_owner->
GetName() <<
") cache cannot be wired because it contains more than one element" << std::endl ;
169 for (i=0 ; i<other.
_size ; i++) {
183 for (
int i=0 ; i<_size ; i++) {
193 for (
int i=0 ; i<_maxSize ; i++) {
196 _nsetCache[i].clear() ;
209 for (i=0 ; i<_maxSize ; i++) {
221 Int_t sterileIdx(-1) ;
222 if (getObj(nset,iset,&sterileIdx,isetRangeName)) {
231 if (sterileIdx>=_maxSize) {
233 _maxSize = sterileIdx+4;
234 _object.resize(_maxSize,
nullptr) ;
235 _nsetCache.resize(_maxSize) ;
239 _object[sterileIdx] = obj ;
242 insertObjectHook(*obj) ;
247 if (_size>=_maxSize-1) {
250 _object.resize(_maxSize,
nullptr) ;
251 _nsetCache.resize(_maxSize) ;
255 _nsetCache[_size].autoCache(_owner,nset,iset,isetRangeName,
true) ;
256 if (_object[_size]) {
257 delete _object[_size] ;
260 _object[_size] = obj ;
264 insertObjectHook(*obj) ;
281 if(_object[0]==
nullptr && sterileIdx) *sterileIdx=0 ;
286 for (i=0 ; i<_size ; i++) {
287 if (_nsetCache[i].contains(nset,iset,isetRangeName)==
true) {
289 if(_object[i]==
nullptr && sterileIdx) *sterileIdx=i ;
294 for (i=0 ; i<_size ; i++) {
295 if (_nsetCache[i].autoCache(_owner,nset,iset,isetRangeName,
false)==
false) {
297 if(_object[i]==
nullptr && sterileIdx) *sterileIdx=i ;
310 if (index<0||index>=_size) {
311 oocoutE(_owner,ObjectHandling) <<
"RooCacheManager::getNormListByIndex: ERROR index ("
312 <<
index <<
") out of range [0," << _size-1 <<
"]" << std::endl ;
315 return _object[
index] ;
#define ClassDefOverride(name, id)
Option_t Option_t TPoint TPoint const char GetTextMagnitude GetFillStyle GetLineColor GetLineWidth GetMarkerStyle GetTextAlign GetTextColor GetTextSize void char Point_t Rectangle_t WindowAttributes_t index
RooAbsArg is the common abstract base class for objects that represent a value and a "shape" in RooFi...
RooAbsCache is the abstract base class for data members of RooAbsArgs that cache other (composite) Ro...
RooAbsArg * _owner
Pointer to owning RooAbsArg.
RooAbsCollection is an abstract container object that can hold multiple RooAbsArg objects.
RooArgSet is a container object that can hold multiple RooAbsArg objects.
Template class RooCacheManager manages the storage of any type of data indexed on the choice of norma...
Int_t setObj(const RooArgSet *nset, const RooArgSet *iset, T *obj, const TNamed *isetRangeName=nullptr)
Insert payload object 'obj' in cache indexed on nset,iset and isetRangeName.
Int_t setObj(const RooArgSet *nset, T *obj, const TNamed *isetRangeName=nullptr)
Setter function without integration set.
RooCacheManager(Int_t maxSize=2)
Constructor for simple caches without RooAbsArg payload.
RooCacheManager(const RooCacheManager &other, RooAbsArg *owner=nullptr)
Copy constructor.
Int_t cacheSize() const
Return size of cache.
void printCompactTreeHook(std::ostream &, const char *) override
Interface function to cache add contents to output in tree printing mode.
virtual void insertObjectHook(T &)
Interface function to perform post-insert operations on cached object.
virtual void sterilize()
Clear the cache payload but retain slot mapping w.r.t to normalization and integration sets.
std::vector< T * > _object
! Payload
std::vector< RooNormSetCache > _nsetCache
! Normalization/Integration set manager
~RooCacheManager() override
Destructor.
RooArgSet selectFromSet1(RooArgSet const &argSet, int index) const
Create RooArgSet contatining the objects that are both in the cached set 1.
T * getObjByIndex(Int_t index) const
Retrieve payload object by slot index.
RooArgSet selectFromSet2(RooArgSet const &argSet, int index) const
Create RooArgSet contatining the objects that are both in the cached set 2.
bool redirectServersHook(const RooAbsCollection &, bool, bool, bool) override
Interface function to intercept server redirects.
void reset()
Clear the cache.
Int_t lastIndex() const
Return index of slot used in last get or set operation.
void operModeHook() override
Interface function to intercept cache operation mode changes.
T * getObj(const RooArgSet *nset, const RooArgSet *iset, Int_t *sterileIndex=nullptr, const TNamed *isetRangeName=nullptr)
Retrieve payload object indexed on nset,uset amd isetRangeName If sterileIdx is not null,...
Int_t _maxSize
! Maximum size
T * getObj(const RooArgSet *nset, Int_t *sterileIndex=nullptr, const TNamed *isetRangeName=nullptr)
Getter function without integration set.
void wireCache() override
T * getObj(const RooArgSet *nset, const RooArgSet *iset, Int_t *sterileIdx, const char *isetRangeName)
RooCacheManager(RooAbsArg *owner, Int_t maxSize=2)
Constructor for simple caches with RooAbsArg derived payload.
Int_t _lastIndex
! Last slot accessed
bool _wired
! In wired mode, there is a single payload which is returned always
static const TNamed * ptr(const char *stringPtr)
Return a unique TNamed pointer for given C++ string.
The TNamed class is the base class for all named ROOT classes.
const char * GetName() const override
Returns name of object.
RooArgSet selectFromArgSet(RooArgSet const &, std::string const &names)
Construct a RooArgSet of objects in a RooArgSet whose names match to those in the names string.