00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017 #include "RooFit.h"
00018
00019 #include "RooArgProxy.h"
00020 #include "RooArgProxy.h"
00021 #include "RooArgSet.h"
00022 #include "RooAbsArg.h"
00023 #include <iostream>
00024 using namespace std ;
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037
00038
00039
00040
00041
00042 ClassImp(RooArgProxy)
00043 ;
00044
00045
00046
00047 RooArgProxy::RooArgProxy(const char* inName, const char* desc, RooAbsArg* owner,
00048 Bool_t valueServer, Bool_t shapeServer, Bool_t proxyOwnsArg) :
00049 TNamed(inName,desc), _owner(owner), _arg(0),
00050 _valueServer(valueServer), _shapeServer(shapeServer), _ownArg(proxyOwnsArg)
00051 {
00052
00053 _owner->registerProxy(*this) ;
00054 }
00055
00056
00057
00058
00059 RooArgProxy::RooArgProxy(const char* inName, const char* desc, RooAbsArg* owner, RooAbsArg& arg,
00060 Bool_t valueServer, Bool_t shapeServer, Bool_t proxyOwnsArg) :
00061 TNamed(inName,desc), _owner(owner), _arg(&arg),
00062 _valueServer(valueServer), _shapeServer(shapeServer), _ownArg(proxyOwnsArg)
00063 {
00064
00065
00066
00067
00068 _owner->registerProxy(*this) ;
00069 _isFund = _arg->isFundamental() ;
00070 }
00071
00072
00073
00074
00075 RooArgProxy::RooArgProxy(const char* inName, RooAbsArg* owner, const RooArgProxy& other) :
00076 TNamed(inName,inName), RooAbsProxy(other), _owner(owner), _arg(other._arg),
00077 _valueServer(other._valueServer), _shapeServer(other._shapeServer),
00078 _isFund(other._isFund), _ownArg(other._ownArg)
00079 {
00080
00081
00082 if (_ownArg) {
00083 _arg = _arg ? (RooAbsArg*) _arg->Clone() : 0 ;
00084 }
00085
00086 _owner->registerProxy(*this) ;
00087 }
00088
00089
00090
00091
00092 RooArgProxy::~RooArgProxy()
00093 {
00094
00095
00096 if (_owner) _owner->unRegisterProxy(*this) ;
00097 if (_ownArg) delete _arg ;
00098 }
00099
00100
00101
00102
00103 Bool_t RooArgProxy::changePointer(const RooAbsCollection& newServerList, Bool_t nameChange, Bool_t factoryInitMode)
00104 {
00105
00106
00107
00108
00109 RooAbsArg* newArg ;
00110 Bool_t initEmpty = _arg ? kFALSE : kTRUE ;
00111 if (_arg) {
00112 newArg= _arg->findNewServer(newServerList, nameChange);
00113 } else if (factoryInitMode) {
00114 newArg = newServerList.first() ;
00115 _owner->addServer(*newArg,_valueServer,_shapeServer) ;
00116 } else {
00117 newArg = 0 ;
00118 }
00119 if (newArg) {
00120 _arg = newArg ;
00121 _isFund = _arg->isFundamental() ;
00122 }
00123 if (initEmpty && !factoryInitMode) return kTRUE ;
00124 return newArg?kTRUE:kFALSE ;
00125 }
00126
00127
00128
00129
00130 void RooArgProxy::changeDataSet(const RooArgSet* newNormSet)
00131 {
00132
00133
00134
00135 RooAbsProxy::changeNormSet(newNormSet) ;
00136 _arg->setProxyNormSet(newNormSet) ;
00137 }
00138
00139
00140
00141
00142 void RooArgProxy::print(ostream& os, Bool_t addContents) const
00143 {
00144
00145
00146
00147 os << name() << "=" << (_arg?_arg->GetName():"NULL") ;
00148 if (_arg && addContents) {
00149 os << "=" ;
00150 _arg->printStream(os,RooPrintable::kValue,RooPrintable::kInline) ;
00151 }
00152 }