00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033 #include "RooFit.h"
00034
00035 #include "Riostream.h"
00036 #include "RooSetProxy.h"
00037 #include "RooSetProxy.h"
00038 #include "RooArgSet.h"
00039 #include "RooAbsArg.h"
00040
00041 ClassImp(RooSetProxy)
00042 ;
00043
00044
00045 #ifdef USEMEMPOOL
00046
00047
00048 void* RooSetProxy::operator new (size_t bytes)
00049 {
00050
00051
00052
00053
00054 return malloc(bytes) ;
00055 }
00056
00057
00058
00059 void RooSetProxy::operator delete (void* ptr)
00060 {
00061 free(ptr) ;
00062 }
00063
00064 #endif
00065
00066
00067
00068 RooSetProxy::RooSetProxy(const char* inName, const char* , RooAbsArg* owner,
00069 Bool_t defValueServer, Bool_t defShapeServer) :
00070 RooArgSet(inName), _owner(owner),
00071 _defValueServer(defValueServer),
00072 _defShapeServer(defShapeServer)
00073 {
00074
00075
00076
00077
00078
00079 _owner->registerProxy(*this) ;
00080 _iter = createIterator() ;
00081 }
00082
00083
00084
00085
00086 RooSetProxy::RooSetProxy(const char* inName, RooAbsArg* owner, const RooSetProxy& other) :
00087 RooArgSet(other,inName), _owner(owner),
00088 _defValueServer(other._defValueServer),
00089 _defShapeServer(other._defShapeServer)
00090 {
00091
00092
00093 _owner->registerProxy(*this) ;
00094 _iter = createIterator() ;
00095 }
00096
00097
00098
00099
00100 RooSetProxy::~RooSetProxy()
00101 {
00102
00103 if (_owner) _owner->unRegisterProxy(*this) ;
00104 delete _iter ;
00105 }
00106
00107
00108
00109
00110 Bool_t RooSetProxy::add(const RooAbsArg& var, Bool_t valueServer, Bool_t shapeServer, Bool_t silent)
00111 {
00112
00113
00114
00115
00116 Bool_t ret=RooArgSet::add(var,silent) ;
00117 if (ret) {
00118 _owner->addServer((RooAbsArg&)var,valueServer,shapeServer) ;
00119 }
00120 return ret ;
00121 }
00122
00123
00124
00125
00126 Bool_t RooSetProxy::addOwned(RooAbsArg& var, Bool_t silent)
00127 {
00128
00129
00130
00131
00132 Bool_t ret=RooArgSet::addOwned(var,silent) ;
00133 if (ret) {
00134 _owner->addServer((RooAbsArg&)var,_defValueServer,_defShapeServer) ;
00135 }
00136 return ret ;
00137 }
00138
00139
00140
00141
00142 RooAbsArg* RooSetProxy::addClone(const RooAbsArg& var, Bool_t silent)
00143 {
00144
00145
00146
00147
00148 RooAbsArg* ret=RooArgSet::addClone(var,silent) ;
00149 if (ret) {
00150 _owner->addServer((RooAbsArg&)var,_defValueServer,_defShapeServer) ;
00151 }
00152 return ret ;
00153 }
00154
00155
00156
00157
00158 Bool_t RooSetProxy::add(const RooAbsArg& var, Bool_t silent)
00159 {
00160
00161
00162
00163
00164 return add(var,_defValueServer,_defShapeServer,silent) ;
00165 }
00166
00167
00168
00169
00170 Bool_t RooSetProxy::replace(const RooAbsArg& var1, const RooAbsArg& var2)
00171 {
00172
00173
00174
00175
00176 Bool_t ret=RooArgSet::replace(var1,var2) ;
00177 if (ret) {
00178 if (!isOwning()) _owner->removeServer((RooAbsArg&)var1) ;
00179 _owner->addServer((RooAbsArg&)var2,_owner->isValueServer(var1),
00180 _owner->isShapeServer(var2)) ;
00181 }
00182 return ret ;
00183 }
00184
00185
00186
00187
00188 Bool_t RooSetProxy::remove(const RooAbsArg& var, Bool_t silent, Bool_t matchByNameOnly)
00189 {
00190
00191
00192 Bool_t ret=RooArgSet::remove(var,silent,matchByNameOnly) ;
00193 if (ret && !isOwning()) {
00194 _owner->removeServer((RooAbsArg&)var) ;
00195 }
00196 return ret ;
00197 }
00198
00199
00200
00201
00202 Bool_t RooSetProxy::remove(const RooAbsCollection& list, Bool_t silent, Bool_t matchByNameOnly)
00203 {
00204
00205
00206
00207 Bool_t result(false) ;
00208
00209 TIterator* iter = list.createIterator() ;
00210 RooAbsArg* arg ;
00211 while((arg=(RooAbsArg*)iter->Next())) {
00212 result |= remove(*arg,silent,matchByNameOnly) ;
00213 }
00214 delete iter ;
00215
00216 return result;
00217 }
00218
00219
00220
00221
00222
00223 void RooSetProxy::removeAll()
00224 {
00225
00226
00227
00228 if (!isOwning()) {
00229 TIterator* iter = createIterator() ;
00230 RooAbsArg* arg ;
00231 while ((arg=(RooAbsArg*)iter->Next())) {
00232 if (!isOwning()) {
00233 _owner->removeServer(*arg) ;
00234 }
00235 }
00236 delete iter ;
00237 }
00238
00239 RooArgSet::removeAll() ;
00240 }
00241
00242
00243
00244
00245
00246 RooSetProxy& RooSetProxy::operator=(const RooArgSet& other)
00247 {
00248
00249 RooArgSet::operator=(other) ;
00250 return *this ;
00251 }
00252
00253
00254
00255
00256
00257 Bool_t RooSetProxy::changePointer(const RooAbsCollection& newServerList, Bool_t nameChange, Bool_t factoryInitMode)
00258 {
00259
00260
00261
00262 if (getSize()==0) {
00263 if (factoryInitMode) {
00264 TIterator* iter = newServerList.createIterator() ;
00265 RooAbsArg* arg ;
00266 while((arg=(RooAbsArg*)iter->Next())) {
00267 add(*arg,kTRUE) ;
00268 }
00269 delete iter ;
00270 } else {
00271 return kTRUE ;
00272 }
00273 }
00274
00275 _iter->Reset() ;
00276 RooAbsArg* arg ;
00277 Bool_t error(kFALSE) ;
00278 while ((arg=(RooAbsArg*)_iter->Next())) {
00279
00280 RooAbsArg* newArg= arg->findNewServer(newServerList, nameChange);
00281 if (newArg) error |= !RooArgSet::replace(*arg,*newArg) ;
00282 }
00283 return !error ;
00284 }
00285
00286
00287
00288
00289 void RooSetProxy::print(ostream& os, Bool_t addContents) const
00290 {
00291
00292
00293
00294 if (!addContents) {
00295 os << name() << "=" ; printStream(os,kValue,kInline) ;
00296 } else {
00297 os << name() << "=(" ;
00298 TIterator* iter = createIterator() ;
00299 RooAbsArg* arg ;
00300 Bool_t first2(kTRUE) ;
00301 while ((arg=(RooAbsArg*)iter->Next())) {
00302 if (first2) {
00303 first2 = kFALSE ;
00304 } else {
00305 os << "," ;
00306 }
00307 arg->printStream(os,kValue|kName,kInline) ;
00308 }
00309 os << ")" ;
00310 delete iter ;
00311 }
00312 }