ROOT  6.06/09
Reference Guide
RooSetProxy.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 //
19 // BEGIN_HTML
20 // RooSetProxy is the concrete proxy for RooArgSet objects.
21 // A RooSetProxy is the general mechanism to store a RooArgSet
22 // with RooAbsArgs in a RooAbsArg.
23 //
24 // Creating a RooSetProxy adds all members of the proxied RooArgSet to the proxy owners
25 // server list (thus receiving value/shape dirty flags from it) and
26 // registers itself with the owning class. The latter allows the
27 // owning class to update the pointers of RooArgSet contents to reflect
28 // the serverRedirect changes.
29 // END_HTML
30 //
31 
32 
33 #include "RooFit.h"
34 
35 #include "Riostream.h"
36 #include "RooSetProxy.h"
37 #include "RooSetProxy.h"
38 #include "RooArgSet.h"
39 #include "RooAbsArg.h"
40 
41 using namespace std;
42 
44 ;
45 
46 
47 #ifdef USEMEMPOOL
48 
49 ////////////////////////////////////////////////////////////////////////////////
50 /// Overload new operator must be implemented because it is overloaded
51 /// in the RooArgSet base class. Perform standard memory allocation
52 /// here instead of memory pool management performed in RooArgSet
53 
54 void* RooSetProxy::operator new (size_t bytes)
55 {
56  return malloc(bytes) ;
57 }
58 
59 
60 ////////////////////////////////////////////////////////////////////////////////
61 
62 void RooSetProxy::operator delete (void* ptr)
63 {
64  free(ptr) ;
65 }
66 
67 #endif
68 
69 
70 ////////////////////////////////////////////////////////////////////////////////
71 /// Construct proxy with given name and description, with given owner
72 /// The default value and shape dirty propagation of the set contents
73 /// to the set owner is controlled by flags defValueServer and defShapeServer
74 
75 RooSetProxy::RooSetProxy(const char* inName, const char* /*desc*/, RooAbsArg* owner,
76  Bool_t defValueServer, Bool_t defShapeServer) :
77  RooArgSet(inName), _owner(owner),
78  _defValueServer(defValueServer),
79  _defShapeServer(defShapeServer)
80 {
81  //SetTitle(desc) ;
82  _owner->registerProxy(*this) ;
83  _iter = createIterator() ;
84 }
85 
86 
87 
88 ////////////////////////////////////////////////////////////////////////////////
89 /// Copy constructor
90 
91 RooSetProxy::RooSetProxy(const char* inName, RooAbsArg* owner, const RooSetProxy& other) :
92  RooArgSet(other,inName), _owner(owner),
93  _defValueServer(other._defValueServer),
94  _defShapeServer(other._defShapeServer)
95 {
96  _owner->registerProxy(*this) ;
97  _iter = createIterator() ;
98 }
99 
100 
101 
102 ////////////////////////////////////////////////////////////////////////////////
103 /// Destructor
104 
106 {
107  if (_owner) _owner->unRegisterProxy(*this) ;
108  delete _iter ;
109 }
110 
111 
112 
113 ////////////////////////////////////////////////////////////////////////////////
114 /// Overloaded RooArgSet::add() method insert object into set
115 /// and registers object as server to owner with given value
116 /// and shape dirty flag propagation requests
117 
118 Bool_t RooSetProxy::add(const RooAbsArg& var, Bool_t valueServer, Bool_t shapeServer, Bool_t silent)
119 {
120  Bool_t ret=RooArgSet::add(var,silent) ;
121  if (ret) {
122  _owner->addServer((RooAbsArg&)var,valueServer,shapeServer) ;
123  }
124  return ret ;
125 }
126 
127 
128 
129 ////////////////////////////////////////////////////////////////////////////////
130 /// Overloaded RooArgSet::addOwned() method insert object into owning set
131 /// and registers object as server to owner with default value
132 /// and shape dirty flag propagation
133 
135 {
136  Bool_t ret=RooArgSet::addOwned(var,silent) ;
137  if (ret) {
139  }
140  return ret ;
141 }
142 
143 
144 
145 ////////////////////////////////////////////////////////////////////////////////
146 /// Overloaded RooArgSet::addClone() method insert clone of object into owning set
147 /// and registers cloned object as server to owner with default value
148 /// and shape dirty flag propagation
149 
151 {
152  RooAbsArg* ret=RooArgSet::addClone(var,silent) ;
153  if (ret) {
155  }
156  return ret ;
157 }
158 
159 
160 
161 ////////////////////////////////////////////////////////////////////////////////
162 /// Overloaded RooArgSet::add() method inserts 'var' into set
163 /// and registers 'var' as server to owner with default value
164 /// and shape dirty flag propagation
165 
167 {
168  return add(var,_defValueServer,_defShapeServer,silent) ;
169 }
170 
171 
172 
173 ////////////////////////////////////////////////////////////////////////////////
174 /// Replace object 'var1' in set with 'var2'. Deregister var1 as
175 /// server from owner and register var2 as server to owner with
176 /// default value and shape dirty propagation flags
177 
178 Bool_t RooSetProxy::replace(const RooAbsArg& var1, const RooAbsArg& var2)
179 {
180  Bool_t ret=RooArgSet::replace(var1,var2) ;
181  if (ret) {
182  if (!isOwning()) _owner->removeServer((RooAbsArg&)var1) ;
184  _owner->isShapeServer(var2)) ;
185  }
186  return ret ;
187 }
188 
189 
190 
191 ////////////////////////////////////////////////////////////////////////////////
192 /// Remove object 'var' from set and deregister 'var' as server to owner.
193 
194 Bool_t RooSetProxy::remove(const RooAbsArg& var, Bool_t silent, Bool_t matchByNameOnly)
195 {
196  Bool_t ret=RooArgSet::remove(var,silent,matchByNameOnly) ;
197  if (ret && !isOwning()) {
198  _owner->removeServer((RooAbsArg&)var) ;
199  }
200  return ret ;
201 }
202 
203 
204 
205 ////////////////////////////////////////////////////////////////////////////////
206 /// Remove each argument in the input list from our list using remove(const RooAbsArg&).
207 /// and remove each argument as server to owner
208 
209 Bool_t RooSetProxy::remove(const RooAbsCollection& list, Bool_t silent, Bool_t matchByNameOnly)
210 {
211  Bool_t result(false) ;
212 
213  TIterator* iter = list.createIterator() ;
214  RooAbsArg* arg ;
215  while((arg=(RooAbsArg*)iter->Next())) {
216  result |= remove(*arg,silent,matchByNameOnly) ;
217  }
218  delete iter ;
219 
220  return result;
221 }
222 
223 
224 
225 
226 ////////////////////////////////////////////////////////////////////////////////
227 /// Remove all argument inset using remove(const RooAbsArg&).
228 /// and remove each argument as server to owner
229 
231 {
232  if (!isOwning()) {
234  RooAbsArg* arg ;
235  while ((arg=(RooAbsArg*)iter->Next())) {
236  if (!isOwning()) {
237  _owner->removeServer(*arg) ;
238  }
239  }
240  delete iter ;
241  }
242 
244 }
245 
246 
247 
248 
249 ////////////////////////////////////////////////////////////////////////////////
250 /// Assign values of arguments on other set to arguments in this set
251 
253 {
254  RooArgSet::operator=(other) ;
255  return *this ;
256 }
257 
258 
259 
260 
261 ////////////////////////////////////////////////////////////////////////////////
262 /// Process server change operation on owner. Replace elements in set with equally
263 /// named objects in 'newServerList'
264 
265 Bool_t RooSetProxy::changePointer(const RooAbsCollection& newServerList, Bool_t nameChange, Bool_t factoryInitMode)
266 {
267  if (getSize()==0) {
268  if (factoryInitMode) {
269  TIterator* iter = newServerList.createIterator() ;
270  RooAbsArg* arg ;
271  while((arg=(RooAbsArg*)iter->Next())) {
272  if (arg!=_owner) {
273  add(*arg,kTRUE) ;
274  }
275  }
276  delete iter ;
277  } else {
278  return kTRUE ;
279  }
280  }
281 
282  _iter->Reset() ;
283  RooAbsArg* arg ;
284  Bool_t error(kFALSE) ;
285  while ((arg=(RooAbsArg*)_iter->Next())) {
286 
287  RooAbsArg* newArg= arg->findNewServer(newServerList, nameChange);
288  if (newArg && newArg!=_owner) error |= !RooArgSet::replace(*arg,*newArg) ;
289  }
290  return !error ;
291 }
292 
293 
294 
295 ////////////////////////////////////////////////////////////////////////////////
296 /// Printing name of proxy on ostream. If addContents is true
297 /// also print names of objects in set
298 
299 void RooSetProxy::print(ostream& os, Bool_t addContents) const
300 {
301  if (!addContents) {
302  os << name() << "=" ; printStream(os,kValue,kInline) ;
303  } else {
304  os << name() << "=(" ;
306  RooAbsArg* arg ;
307  Bool_t first2(kTRUE) ;
308  while ((arg=(RooAbsArg*)iter->Next())) {
309  if (first2) {
310  first2 = kFALSE ;
311  } else {
312  os << "," ;
313  }
314  arg->printStream(os,kValue|kName,kInline) ;
315  }
316  os << ")" ;
317  delete iter ;
318  }
319 }
RooArgSet & operator=(const RooArgSet &other)
Definition: RooArgSet.h:84
void unRegisterProxy(RooArgProxy &proxy)
Remove proxy from proxy list.
Definition: RooAbsArg.cxx:1172
Bool_t _defValueServer
Definition: RooSetProxy.h:65
virtual void Reset()=0
Bool_t isOwning() const
virtual void printStream(std::ostream &os, Int_t contents, StyleOption style, TString indent="") const
Print description of object on ostream, printing contents set by contents integer, which is interpreted as an OR of 'enum ContentsOptions' values and in the style given by 'enum StyleOption'.
virtual Bool_t changePointer(const RooAbsCollection &newServerSet, Bool_t nameChange=kFALSE, Bool_t factoryInitMode=kFALSE)
do not persist
virtual Bool_t replace(const RooAbsArg &var1, const RooAbsArg &var2)
Replace var1 with var2 and return kTRUE for success.
virtual void removeAll()
Remove all argument inset using remove(const RooAbsArg&).
void registerProxy(RooArgProxy &proxy)
Register an RooArgProxy in the proxy list.
Definition: RooAbsArg.cxx:1144
bool Bool_t
Definition: RtypesCore.h:59
const Bool_t kFALSE
Definition: Rtypes.h:92
STL namespace.
Iterator abstract base class.
Definition: TIterator.h:32
Vc_ALWAYS_INLINE void free(T *p)
Frees memory that was allocated with Vc::malloc.
Definition: memory.h:94
virtual void removeAll()
Remove all arguments from our set, deleting them if we own them.
virtual Bool_t addOwned(RooAbsArg &var, Bool_t silent=kFALSE)
Add element to an owning set.
Definition: RooArgSet.cxx:461
std::map< std::string, std::string >::const_iterator iter
Definition: TAlienJob.cxx:54
TIterator * createIterator(Bool_t dir=kIterForward) const
virtual Bool_t remove(const RooAbsArg &var, Bool_t silent=kFALSE, Bool_t matchByNameOnly=kFALSE)
Remove object 'var' from set and deregister 'var' as server to owner.
virtual void print(std::ostream &os, Bool_t addContents=kFALSE) const
Printing name of proxy on ostream.
virtual Bool_t replace(const RooAbsArg &var1, const RooAbsArg &var2)
Replace object 'var1' in set with 'var2'.
Bool_t isShapeServer(const RooAbsArg &arg) const
Definition: RooAbsArg.h:142
virtual Bool_t addOwned(RooAbsArg &var, Bool_t silent=kFALSE)
Overloaded RooArgSet::addOwned() method insert object into owning set and registers object as server ...
RooAbsArg * _owner
Definition: RooSetProxy.h:64
RooSetProxy & operator=(const RooArgSet &other)
Assign values of arguments on other set to arguments in this set.
TIterator * _iter
Definition: RooSetProxy.h:67
Bool_t _defShapeServer
Definition: RooSetProxy.h:66
Bool_t isValueServer(const RooAbsArg &arg) const
Definition: RooAbsArg.h:134
virtual const char * name() const
Definition: RooSetProxy.h:43
virtual Bool_t remove(const RooAbsArg &var, Bool_t silent=kFALSE, Bool_t matchByNameOnly=kFALSE)
Remove the specified argument from our list.
virtual ~RooSetProxy()
Destructor.
RooAbsArg * findNewServer(const RooAbsCollection &newSet, Bool_t nameChange) const
Find the new server in the specified set that matches the old server.
Definition: RooAbsArg.cxx:1050
virtual TObject * Next()=0
virtual RooAbsArg * addClone(const RooAbsArg &var, Bool_t silent=kFALSE)
Add clone of specified element to an owning set.
Definition: RooArgSet.cxx:475
double result[121]
Int_t getSize() const
RooAbsArg is the common abstract base class for objects that represent a value (of arbitrary type) an...
Definition: RooAbsArg.h:66
virtual RooAbsArg * addClone(const RooAbsArg &var, Bool_t silent=kFALSE)
Overloaded RooArgSet::addClone() method insert clone of object into owning set and registers cloned o...
void addServer(RooAbsArg &server, Bool_t valueProp=kTRUE, Bool_t shapeProp=kFALSE)
Register another RooAbsArg as a server to us, ie, declare that we depend on it.
Definition: RooAbsArg.cxx:361
ClassImp(RooSetProxy)
const Bool_t kTRUE
Definition: Rtypes.h:91
Vc_ALWAYS_INLINE_L T *Vc_ALWAYS_INLINE_R malloc(size_t n)
Allocates memory on the Heap with alignment and padding suitable for vectorized access.
Definition: memory.h:67
void removeServer(RooAbsArg &server, Bool_t force=kFALSE)
Unregister another RooAbsArg as a server to us, ie, declare that we no longer depend on its value and...
Definition: RooAbsArg.cxx:412
virtual Bool_t add(const RooAbsArg &var, Bool_t silent=kFALSE)
Add element to non-owning set.
Definition: RooArgSet.cxx:448
virtual Bool_t add(const RooAbsArg &var, Bool_t silent=kFALSE)
Overloaded RooArgSet::add() method inserts 'var' into set and registers 'var' as server to owner with...