Logo ROOT  
Reference Guide
 
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Modules Pages
Loading...
Searching...
No Matches
RooObjCacheManager.cxx
Go to the documentation of this file.
1/*****************************************************************************
2 * Project: RooFit *
3 * Package: RooFitCore *
4 * @(#)root/roofitcore:$Id$
5 * Authors: *
6 * WV, Wouter Verkerke, UC Santa Barbara, verkerke@slac.stanford.edu *
7 * DK, David Kirkby, UC Irvine, dkirkby@uci.edu *
8 * *
9 * Copyright (c) 2000-2005, Regents of the University of California *
10 * and Stanford University. All rights reserved. *
11 * *
12 * Redistribution and use in source and binary forms, *
13 * with or without modification, are permitted according to the terms *
14 * listed in LICENSE (http://roofit.sourceforge.net/license.txt) *
15 *****************************************************************************/
16
17/**
18\file RooObjCacheManager.cxx
19\class RooObjCacheManager
20\ingroup Roofitcore
21
22Implementation of a RooCacheManager<RooAbsCacheElement>
23that specializes in the storage of cache elements that contain RooAbsArg objects.
24Caches with RooAbsArg derived payload require special care as server redirects
25cache operation mode changes and constant term optimization calls may need to be
26forwarded to such cache payload. This cache manager takes care of all these operations
27by forwarding these calls to the RooAbsCacheElement interface functions, which
28have a sensible default implementation.
29**/
30
31#include "Riostream.h"
32#include <vector>
33#include "RooObjCacheManager.h"
34#include "RooMsgService.h"
35
36
38
39////////////////////////////////////////////////////////////////////////////////
40/// Constructor of object cache manager for given owner. If clearCacheOnServerRedirect is true
41/// all cache elements will be cleared when a server redirect is intercepted by the cache manager.
42/// This is the default strategy and should only be overridden when you really understand
43/// what you're doing as properly implementing server redirect in cache elements can get very
44/// complicated, especially if there are (cyclical) reference back to the owning object
45
53
54
55////////////////////////////////////////////////////////////////////////////////
56/// Copy constructor
57
60 _clearOnRedirect(other._clearOnRedirect),
61 _allowOptimize(other._allowOptimize),
62 _optCacheModeSeen(false) // cache mode properties are not transferred in copy constructor
63{
64}
65
66
67////////////////////////////////////////////////////////////////////////////////
68/// Destructor
69
76
77
78////////////////////////////////////////////////////////////////////////////////
79/// Intercept server redirect calls. If clearOnRedirect was set, sterilize
80/// the cache (i.e. keep the structure but delete all contents). If not
81/// forward serverRedirect to cache elements
82
84{
85 if (_clearOnRedirect) {
86
87 sterilize() ;
88
89 } else {
90
91 for (Int_t i=0 ; i<cacheSize() ; i++) {
92 if (_object[i]) {
94 }
95 }
96
97 }
98
99 return false ;
100}
101
102
103
104////////////////////////////////////////////////////////////////////////////////
105/// Intercept changes to cache operation mode and forward to cache elements
106
108{
109 if (!_owner) {
110 return ;
111 }
112
113 for (Int_t i=0 ; i<cacheSize() ; i++) {
114 if (_object[i]) {
115 _object[i]->operModeHook(_owner->operMode()) ;
116 }
117 }
118}
119
120
121
122////////////////////////////////////////////////////////////////////////////////
123/// Intercept calls to perform automatic optimization of cache mode operation.
124/// Forward calls to existing cache elements and save configuration of
125/// cache mode optimization so that it can be applied on new cache elements
126/// upon insertion
127
129{
130 oocxcoutD(_owner,Caching) << "RooObjCacheManager::optimizeCacheMode(owner=" << _owner->GetName() << ") obs = " << obs << std::endl;
131
133
137 } else {
139 }
140
141 for (Int_t i=0 ; i<cacheSize() ; i++) {
142 if (_object[i]) {
143 _object[i]->optimizeCacheMode(obs,optNodes,processedNodes) ;
144 }
145 }
146}
147
148
149////////////////////////////////////////////////////////////////////////////////
150
152{
154
155 // WVE - adding this causes trouble with IntegralMorpht????
156 // Perhaps this should not be done in sterilize, but be a separate operation
157 // called specially from RooAbsObsTestStatistic::setData()
158
160 delete _optCacheObservables ;
161 _optCacheObservables = nullptr ;
163 }
164
165}
166
167
168
169////////////////////////////////////////////////////////////////////////////////
170/// Set owner link on all object inserted into cache.
171/// Also if cache mode optimization was requested, apply
172/// it now to cache element being inserted
173
175{
176 obj.setOwner(_owner) ;
177
178 // If value caching mode optimization has happened, process it now on object being inserted
179 if (_optCacheModeSeen) {
181 RooArgSet s ;
183 }
184
185}
186
187
188
189
190////////////////////////////////////////////////////////////////////////////////
191/// Add details on cache contents when printing in tree mode
192
193void RooObjCacheManager::printCompactTreeHook(std::ostream& os, const char *indent)
194{
195 for (Int_t i=0 ; i<cacheSize() ; i++) {
196 if (_object[i]) {
197 _object[i]->printCompactTreeHook(os,indent,i,cacheSize()-1) ;
198 }
199 }
200}
201
202
203
204////////////////////////////////////////////////////////////////////////////////
205/// If clearOnRedirect is false, forward constant term optimization calls to
206/// cache elements
207
209{
210 if (!_allowOptimize) {
211 return ;
212 }
213
214 for (Int_t i=0 ; i<cacheSize() ; i++) {
215 if (_object[i]) {
216 _object[i]->findConstantNodes(obs,cacheList, processedNodes) ;
217 }
218 }
219}
220
221
#define oocxcoutD(o, a)
static void indent(ostringstream &buf, int indent_level)
ROOT::Detail::TRangeCast< T, true > TRangeDynCast
TRangeDynCast is an adapter class that allows the typed iteration through a TCollection.
Common abstract base class for objects that represent a value and a "shape" in RooFit.
Definition RooAbsArg.h:77
OperMode operMode() const
Query the operation mode of this node.
Definition RooAbsArg.h:425
Abstract base class for objects to be stored in RooAbsCache cache manager objects.
virtual void optimizeCacheMode(const RooArgSet &obs, RooArgSet &optNodes, RooLinkedList &processedNodes)
Interface for cache optimization calls.
void setOwner(RooAbsArg *owner)
RooAbsArg * _owner
Pointer to owning RooAbsArg.
Definition RooAbsCache.h:61
Abstract container object that can hold multiple RooAbsArg objects.
virtual void removeAll()
Remove all arguments from our set, deleting them if we own them.
virtual bool add(const RooAbsArg &var, bool silent=false)
Add the specified argument to list.
RooArgSet is a container object that can hold multiple RooAbsArg objects.
Definition RooArgSet.h:24
Manages the storage of any type of data indexed on the choice of normalization and optionally the set...
Int_t cacheSize() const
Return size of cache.
virtual void sterilize()
Clear the cache payload but retain slot mapping w.r.t to normalization and integration sets.
std::vector< RooAbsCacheElement * > _object
! Payload
Collection class for internal use, storing a collection of RooAbsArg pointers in a doubly linked list...
Implementation of a RooCacheManager<RooAbsCacheElement> that specializes in the storage of cache elem...
void operModeHook() override
Intercept changes to cache operation mode and forward to cache elements.
RooObjCacheManager(RooAbsArg *owner=nullptr, Int_t maxSize=2, bool clearCacheOnServerRedirect=true, bool allowOptimize=false)
Constructor of object cache manager for given owner.
~RooObjCacheManager() override
Destructor.
void insertObjectHook(RooAbsCacheElement &) override
Set owner link on all object inserted into cache.
void printCompactTreeHook(std::ostream &, const char *) override
Add details on cache contents when printing in tree mode.
bool redirectServersHook(const RooAbsCollection &, bool, bool, bool) override
Intercept server redirect calls.
static bool _clearObsList
Clear obslist on sterilize?
void findConstantNodes(const RooArgSet &, RooArgSet &, RooLinkedList &) override
If clearOnRedirect is false, forward constant term optimization calls to cache elements.
RooArgSet * _optCacheObservables
! current optCacheObservables
void sterilize() override
Clear the cache payload but retain slot mapping w.r.t to normalization and integration sets.
void optimizeCacheMode(const RooArgSet &, RooArgSet &, RooLinkedList &) override
Intercept calls to perform automatic optimization of cache mode operation.
const char * GetName() const override
Returns name of object.
Definition TNamed.h:49
TLine l
Definition textangle.C:4