111std::map<RooAbsArg*,std::unique_ptr<TRefArray>> RooAbsArg::_ioEvoList;
112std::stack<RooAbsArg*> RooAbsArg::_ioReadStack ;
119 :
TNamed(), _deleteWatch(false), _valueDirty(true), _shapeDirty(true), _operMode(Auto), _fast(false), _ownedComponents(nullptr),
120 _prohibitServerRedirect(false), _namePtr(0), _isConstant(false), _localNoInhibitDirty(false),
133 :
TNamed(
name, title), _deleteWatch(false), _valueDirty(true), _shapeDirty(true), _operMode(Auto), _fast(false),
134 _ownedComponents(0), _prohibitServerRedirect(false), _namePtr(0), _isConstant(false),
135 _localNoInhibitDirty(false), _myws(0)
137 if (
name ==
nullptr || strlen(
name) == 0) {
138 throw std::logic_error(
"Each RooFit object needs a name. "
139 "Objects representing the same entity (e.g. an observable 'x') are identified using their name.");
150 _boolAttrib(other._boolAttrib),
151 _stringAttrib(other._stringAttrib), _deleteWatch(other._deleteWatch), _operMode(Auto), _fast(false),
152 _ownedComponents(0), _prohibitServerRedirect(false),
154 _isConstant(other._isConstant), _localNoInhibitDirty(other._localNoInhibitDirty), _myws(0)
158 bool valueProp, shapeProp ;
160 valueProp = server->_clientListValue.containsByNamePtr(&other);
161 shapeProp = server->_clientListShape.containsByNamePtr(&other);
187 for (
auto client : clientListTmp) {
188 client->setAttribute(
"ServerDied") ;
189 std::stringstream
attr;
190 attr <<
"ServerDied:" <<
GetName() <<
"(" <<
reinterpret_cast<std::size_t
>(
this) <<
")";
191 client->setAttribute(
attr.str().c_str());
192 client->removeServer(*
this,
true);
197 cxcoutD(
Tracing) <<
"RooAbsArg::dtor(" <<
GetName() <<
"," <<
this <<
") DeleteWatch: object is being destroyed" << endl ;
202 << client->GetName() <<
"\" should have been deleted first" << endl ;
248 if(
string(
"Constant")==
name) {
300 map<string,string>::const_iterator iter =
_stringAttrib.find(key) ;
302 return iter->second.c_str() ;
354 <<
"): PROHIBITED SERVER ADDITION REQUESTED: adding server " << server.
GetName()
355 <<
"(" << &server <<
") for " << (valueProp?
"value ":
"") << (shapeProp?
"shape":
"") << endl ;
356 throw std::logic_error(
"PROHIBITED SERVER ADDITION REQUESTED in RooAbsArg::addServer");
360 <<
"(" << &server <<
") for " << (valueProp?
"value ":
"") << (shapeProp?
"shape":
"") << endl ;
390 for (
const auto arg : serverList) {
404 cxcoutF(
LinkStateMgmt) <<
"RooAbsArg::addServer(" <<
this <<
"," <<
GetName() <<
"): PROHIBITED SERVER REMOVAL REQUESTED: removing server "
405 << server.
GetName() <<
"(" << &server <<
")" << endl ;
411 << server.
GetName() <<
"(" << &server <<
")" << endl ;
445 <<
" is unsafe, because the server list will be out of sync with the proxy objects!"
446 <<
" If you want to safely replace a server, use RooAbsArg::redirectServers()."
447 <<
" See the docs to replaceServers() for more info." << std::endl;
452 addServer(newServer, propValue, propShape, count);
463 << server.
GetName() <<
" not registered" << endl ;
470 << server.
GetName() <<
" doesn't have us registered as client" << endl ;
532 if ((doBranch&&doLeaf) ||
537 list->
add(*arg,
true) ;
545 bool isValueSrv = server->_clientListValue.containsByNamePtr(arg);
546 if (valueOnly && !isValueSrv) {
578 std::vector<RooAbsArg*> branchList;
580 if (server->isValueServer(*
this)) {
581 if (server->isFundamental()) {
582 if (!nset || !server->dependsOn(*nset)) {
583 nodeParamServers.
add(*server);
586 branchList.push_back(server);
595 params.
add(nodeParamServers,
true) ;
598 std::sort(branchList.begin(), branchList.end());
599 const auto last = std::unique(branchList.begin(), branchList.end());
600 for (
auto serverIt = branchList.begin(); serverIt < last; ++serverIt) {
601 (*serverIt)->addParameters(params, nset);
617 std::vector<RooAbsArg*> branchList;
619 if (server->isValueServer(*
this)) {
620 if (server->isFundamental()) {
621 if (!nset || !server->dependsOn(*nset)) {
625 branchList.push_back(server);
631 std::sort(branchList.begin(), branchList.end());
632 const auto last = std::unique(branchList.begin(), branchList.end());
633 for (
auto serverIt = branchList.begin(); serverIt < last; ++serverIt) {
634 res += (*serverIt)->getParametersSizeEstimate(nset);
672 outputSet.
add(*paramSet);
678 outputSet.
setName(
"parameters");
689 outputSet.
add(tempList,
true);
746 outputSet.
setName(
"dependents");
748 if (!dataList)
return false;
751 RooArgSet leafList(
"leafNodeServerList") ;
755 for (
const auto arg : leafList) {
756 if (arg->dependsOnValue(*dataList) && arg->isLValue()) {
757 outputSet.
add(*arg) ;
761 for (
const auto arg : leafList) {
762 if (arg->dependsOn(*dataList) && arg->isLValue()) {
763 outputSet.
add(*arg) ;
778 name.Append(
"_components") ;
809 if (arg->getAttribute(
"ServerDied")) {
811 << arg->GetName() <<
" no longer exists!" << endl ;
815 ret |= arg->checkObservables(nset) ;
831 for (
auto server : serverList) {
832 if (
dependsOn(*server,ignoreArg,valueOnly)) {
847 if (
this==ignoreArg)
return false ;
866 if ( !valueOnly || server->isValueServer(*
this)) {
867 if (server->dependsOn(testArg,ignoreArg,valueOnly)) {
933 }
else if (source==
this) {
936 <<
"): cyclical dependency detected, source = " << source->
GetName() << endl ;
944 <<
"): dirty flag " << (
_valueDirty?
"already ":
"") <<
"raised" << endl ;
951 client->setValueDirty(source) ;
966 <<
"): dirty flag " << (
_shapeDirty?
"already ":
"") <<
"raised" << endl ;
977 }
else if (source==
this) {
980 <<
"): cyclical dependency detected" << endl ;
988 client->setShapeDirty(source) ;
989 client->setValueDirty(source) ;
1028 if (newSetOrig.
empty() || (newSetOrig.
size() == 1 && newSetOrig[0] ==
this))
return false ;
1031 std::unique_ptr<RooArgSet> newSetOwned;
1035 newSetOwned = std::make_unique<RooArgSet>();
1036 for (
auto arg : *newSet) {
1038 if (
string(
"REMOVAL_DUMMY")==arg->GetName()) {
1040 if (arg->getAttribute(
"REMOVE_ALL")) {
1041 newSetOwned->add(*arg) ;
1043 newSetOwned->add(*arg) ;
1046 newSetOwned->add(*arg) ;
1049 newSet = newSetOwned.get();
1058 cxcoutD(
LinkStateMgmt) <<
"RooAbsArg::redirectServers(" << (
void*)
this <<
"," <<
GetName() <<
"): server " << oldServer->GetName()
1059 <<
" redirected from " << oldServer <<
" to " << newServer << endl ;
1063 if (mustReplaceAll) {
1064 std::stringstream ss;
1065 ss <<
"RooAbsArg::redirectServers(" << (
void*)
this <<
"," <<
GetName() <<
"): server " << oldServer->GetName()
1066 <<
" (" << (
void*)oldServer <<
") not redirected" << (nameChange?
"[nameChange]":
"");
1067 const std::string errorMsg = ss.str();
1069 throw std::runtime_error(errorMsg);
1074 if (newServer !=
this) {
1077 const int clientListRefCount = oldServer->_clientList.Remove(
this,
true);
1078 const int clientListValueRefCount = oldServer->_clientListValue.Remove(
this,
true);
1079 const int clientListShapeRefCount = oldServer->_clientListShape.Remove(
this,
true);
1101 bool ret2 =
p->changePointer(*newSet,nameChange,
false) ;
1103 if (mustReplaceAll && !ret2) {
1106 <<
"): ERROR, proxy '" <<
p->name()
1107 <<
"' with arg '" << (ap ? ap->absArg()->GetName() :
"<could not cast>") <<
"' could not be adjusted" << endl;
1133 newServer = newSet.
find(*
this) ;
1138 TString nameAttrib(
"ORIGNAME:") ;
1141 if (
auto tmp = std::unique_ptr<RooAbsCollection>{newSet.
selectByAttrib(nameAttrib,
true)}) {
1150 coutF(
LinkStateMgmt) <<
"RooAbsArg::redirectServers(" <<
GetName() <<
"): FATAL Error, " << tmp->size() <<
" servers with "
1151 << nameAttrib <<
" attribute" << endl ;
1157 newServer= tmp->first();
1167 bool recurseInNewSet, std::set<RooAbsArg const *> &callStack)
1171 auto it = callStack.lower_bound(arg);
1172 if (it != callStack.end() && arg == *it) {
1175 callStack.insert(it, arg);
1187 <<
") newSet = " << newSet <<
" mustReplaceAll = " << (mustReplaceAll ?
"T" :
"F")
1188 <<
" nameChange = " << (nameChange ?
"T" :
"F")
1189 <<
" recurseInNewSet = " << (recurseInNewSet ?
"T" :
"F") << endl;
1192 ret |= arg->
redirectServers(newSet, mustReplaceAll, nameChange,
true);
1195 for (
const auto server : arg->
servers()) {
1196 ret |= recursiveRedirectServersImpl(server, newSet, mustReplaceAll, nameChange, recurseInNewSet, callStack);
1199 callStack.erase(arg);
1216 bool recurseInNewSet)
1219 std::set<const RooAbsArg *> callStack;
1221 return recursiveRedirectServersImpl(
this, newSet, mustReplaceAll, nameChange, recurseInNewSet, callStack);
1261 <<
" already registered" << endl ;
1304 << proxy.
GetName() <<
" already registered" << endl ;
1339 << proxy.
GetName() <<
" already registered" << endl ;
1348 cout <<
"RooAbsArg::registerProxy(" <<
GetName() <<
") proxy registration failure! nold=" << nProxyOld <<
" nnew=" <<
_proxyList.
GetEntries() << endl ;
1409 p->changeNormSet(nset);
1426 <<
"): Cannot be attached to a TTree" << endl ;
1490 if (
p==0) continue ;
1517 os <<
indent <<
"--- RooAbsArg ---" << endl;
1519 os <<
indent <<
" Value State: " ;
1521 case ADirty: os <<
"FORCED DIRTY" ; break ;
1522 case AClean: os <<
"FORCED clean" ; break ;
1528 os <<
indent <<
" Attributes: " ;
1532 os <<
indent <<
" Address: " << (
void*)
this << endl;
1534 os <<
indent <<
" Clients: " << endl;
1536 os <<
indent <<
" (" << (
void*)client <<
","
1544 os <<
indent <<
" Servers: " << endl;
1546 os <<
indent <<
" (" << (
void*)server <<
","
1547 << (server->_clientListValue.containsByNamePtr(
this)?
"V":
"-")
1548 << (server->_clientListShape.containsByNamePtr(
this)?
"S":
"-")
1554 os <<
indent <<
" Proxies: " << std::endl;
1557 if (!proxy) continue ;
1558 os <<
indent <<
" " << proxy->
name() <<
" -> " ;
1559 if(
auto * argProxy =
dynamic_cast<RooArgProxy*
>(proxy)) {
1560 if (
RooAbsArg* parg = argProxy->absArg()) {
1563 os <<
" (empty)" << std::endl;
1574 throw std::runtime_error(
"Unsupported proxy type.");
1612 set<string>::const_iterator iter =
_boolAttrib.begin() ;
1615 os << (
first?
" [":
",") << *iter ;
1619 if (!
first) os <<
"] " ;
1636 for(
auto const& branch : branches) {
1637 branch->redirectServers(set,
false,
false);
1685 branch->printDirty(
false) ;
1691 case AClean: cout <<
"FORCED clean" ; break ;
1692 case ADirty: cout <<
"FORCED DIRTY" ; break ;
1714 coutI(
Optimization) <<
"RooAbsArg::optimizeCacheMode(" <<
GetName() <<
") nodes " << opt <<
" depend on observables, "
1715 <<
"changing cache operation mode from change tracking to unconditional evaluation" << endl ;
1746 auto obj = processedNodes.
findArg(
this);
1747 assert(obj !=
this);
1751 <<
" node " <<
this <<
" exists already as " << obj <<
" but with the SAME name !" << endl;
1753 processedNodes.
Add(
this);
1759 cxcoutI(
Integration) <<
"RooAbsArg::optimizeCacheMode(" <<
GetName() <<
") integral depends on value of one or more observables and will be evaluated for every event" << endl ;
1761 optimizedNodes.
add(*
this,
true) ;
1775 server->optimizeCacheMode(observables,optimizedNodes,processedNodes) ;
1791 << cacheList <<
" depend exclusively on constant parameters and will be precalculated and cached" << endl ;
1810 if (processedNodes.
findArg(
this)) {
1813 processedNodes.
Add(
this) ;
1820 if (!param->isConstant()) {
1845 cacheList.
add(*
this,
false) ;
1853 if (server->isDerived()) {
1854 server->findConstantNodes(observables,cacheList,processedNodes) ;
1878 server->constOptimizeTestStatistic(opcode,doAlsoTrackingOpt) ;
1903 clientV->setOperMode(
mode) ;
1948 case Auto: os <<
" [Auto," << (
isValueDirty()?
"Dirty":
"Clean") <<
"] " ; break ;
1949 case AClean: os <<
" [ACLEAN] " ; break ;
1950 case ADirty: os <<
" [ADIRTY] " ; break ;
1977 if (nLevel==0) return ;
1980 if (rmodel && rmodel->isConvolved())
return ;
2008 TString cleanName(rawBranchName) ;
2093 set<string>::const_iterator iter=
_boolAttrib.begin() ;
2097 strlcpy(buf,iter->c_str(),128) ;
2099 char* ptrToken = strtok(0,
")") ;
2120 ofstream ofs(fileName) ;
2122 coutE(
InputArguments) <<
"RooAbsArg::graphVizTree() ERROR: Cannot open graphViz output file with name " << fileName << endl ;
2139 coutE(
InputArguments) <<
"RooAbsArg::graphVizTree() ERROR: output stream provided as input argument is in invalid state" << endl ;
2146 os <<
"digraph \"" <<
GetName() <<
"\"{" << endl ;
2154 string nodeName = node->GetName();
2155 string nodeTitle = node->GetTitle();
2156 string nodeLabel = (useTitle && !nodeTitle.empty()) ? nodeTitle : nodeName;
2159 string::size_type position = nodeLabel.find(
"#") ;
2160 while(useLatex && position!=nodeLabel.npos){
2161 nodeLabel.replace(position, 1,
"\\");
2164 string typeFormat =
"\\texttt{";
2165 string nodeType = (useLatex) ? typeFormat+node->ClassName()+
"}" : node->ClassName();
2167 if (
auto realNode =
dynamic_cast<RooAbsReal*
>(node)) {
2168 nodeLabel += delimiter + std::to_string(realNode->getVal());
2171 os <<
"\"" << nodeName <<
"\" [ color=" << (node->isFundamental()?
"blue":
"red")
2172 <<
", label=\"" << nodeType << delimiter << nodeLabel <<
"\"];" << endl ;
2177 set<pair<RooAbsArg*,RooAbsArg*> > links ;
2181 for(
auto const& link : links) {
2182 os <<
"\"" << link.first->GetName() <<
"\" -> \"" << link.second->GetName() <<
"\";" << endl ;
2198 linkSet.insert(make_pair(
this,server)) ;
2199 server->graphVizAddConnections(linkSet) ;
2261 clonedNodes.
remove(*head) ;
2268 head->TNamed::SetName(newname) ;
2313 if (tmp) suffix += tmp ;
2315 return Form(
"%s",suffix.c_str()) ;
2325 for(
auto const& arg : branches) {
2366 _ioReadStack.push(
this) ;
2368 _ioReadStack.pop() ;
2390 auto iter = _ioEvoList.find(
this);
2391 if (iter != _ioEvoList.end()) {
2396 for (
int i = 0; i < iter->second->GetEntriesFast(); i++) {
2400 _ioEvoList.erase(iter);
2418 for (
const auto& iter : _ioEvoList) {
2421 if (!iter.first->_proxyList.GetEntriesFast())
2422 iter.first->_proxyList.Expand(iter.second->GetEntriesFast());
2423 for (
int i = 0; i < iter.second->GetEntriesFast(); i++) {
2424 iter.first->_proxyList.Add(iter.second->At(i));
2448 auto refArray = std::make_unique<TRefArray>();
2449 refArray->Streamer(R__b) ;
2453 RooAbsArg::_ioEvoList[RooAbsArg::_ioReadStack.top()] = std::move(refArray);
2461 for(
TObject * tmpObj : *
this) {
2462 refArray.
Add(tmpObj) ;
2475 std::stringstream
s;
2477 s <<
"An instance of " << raa->
ClassName() <<
".";
2489 for(
auto * server :
servers()) {
2490 server->applyWeightSquared(flag);
2497 auto newArg = std::unique_ptr<RooAbsArg>{
static_cast<RooAbsArg *
>(
Clone())};
2515 std::stringstream errorMsg;
2516 errorMsg <<
"Translate function for class \"" <<
ClassName() <<
"\" has not yet been implemented.";
2518 throw std::runtime_error(errorMsg.str().c_str());
istream & operator>>(istream &is, RooAbsArg &arg)
Istream operator.
ostream & operator<<(ostream &os, RooAbsArg const &arg)
Ostream operator.
static void indent(ostringstream &buf, int indent_level)
winID h TVirtualViewer3D TVirtualGLPainter p
Option_t Option_t TPoint TPoint const char GetTextMagnitude GetFillStyle GetLineColor GetLineWidth GetMarkerStyle GetTextAlign GetTextColor GetTextSize void data
Option_t Option_t TPoint TPoint const char GetTextMagnitude GetFillStyle GetLineColor GetLineWidth GetMarkerStyle GetTextAlign GetTextColor GetTextSize void char Point_t Rectangle_t WindowAttributes_t Float_t Float_t Float_t Int_t Int_t UInt_t UInt_t Rectangle_t Int_t Int_t Window_t TString Int_t GCValues_t GetPrimarySelectionOwner GetDisplay GetScreen GetColormap GetNativeEvent const char const char dpyName wid window const char font_name cursor keysym reg const char only_if_exist regb h Point_t winding char text const char depth char const char Int_t count const char ColorStruct_t color const char filename
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
Option_t Option_t TPoint TPoint const char GetTextMagnitude GetFillStyle GetLineColor GetLineWidth GetMarkerStyle GetTextAlign GetTextColor GetTextSize void value
Option_t Option_t TPoint TPoint const char GetTextMagnitude GetFillStyle GetLineColor GetLineWidth GetMarkerStyle GetTextAlign GetTextColor GetTextSize void char Point_t Rectangle_t WindowAttributes_t attr
Option_t Option_t TPoint TPoint const char mode
char * Form(const char *fmt,...)
Formats a string in a circular formatting buffer.
RooAbsArg is the common abstract base class for objects that represent a value and a "shape" in RooFi...
RooExpensiveObjectCache & expensiveObjectCache() const
bool overlaps(const RooAbsArg &testArg, bool valueOnly=false) const
Test if any of the nodes of tree are shared with that of the given tree.
void replaceServer(RooAbsArg &oldServer, RooAbsArg &newServer, bool valueProp, bool shapeProp)
Replace 'oldServer' with 'newServer', specifying whether the new server has value or shape server pro...
bool _isConstant
De-duplicated name pointer. This will be equal for all objects with the same name.
void Print(Option_t *options=nullptr) const override
Print the object to the defaultPrintStream().
bool dependsOn(const RooAbsCollection &serverList, const RooAbsArg *ignoreArg=nullptr, bool valueOnly=false) const
Test whether we depend on (ie, are served by) any object in the specified collection.
void attachToStore(RooAbsDataStore &store)
Attach this argument to the data store such that it reads data from there.
bool recursiveRedirectServers(const RooAbsCollection &newServerList, bool mustReplaceAll=false, bool nameChange=false, bool recurseInNewSet=true)
Recursively replace all servers with the new servers in newSet.
const TNamed * namePtr() const
De-duplicated pointer to this object's name.
const char * aggregateCacheUniqueSuffix() const
void printArgs(std::ostream &os) const override
Print object arguments, ie its proxies.
void printClassName(std::ostream &os) const override
Print object class name.
ProxyListCache _proxyListCache
RooWorkspace * _myws
Prevent 'AlwaysDirty' mode for this node.
~RooAbsArg() override
Destructor.
void attachDataStore(const RooAbsDataStore &set)
Replace server nodes with names matching the dataset variable names with those data set variables,...
RooArgSet * _ownedComponents
void printAddress(std::ostream &os) const override
Print class name of object.
void setShapeDirty()
Notify that a shape-like property (e.g. binning) has changed.
void registerProxy(RooArgProxy &proxy)
Register an RooArgProxy in the proxy list.
void setOperMode(OperMode mode, bool recurseADirty=true)
Set the operation mode of this node.
void attachArgs(const RooAbsCollection &set)
Bind this node to objects in set.
void setStringAttribute(const Text_t *key, const Text_t *value)
Associate string 'value' to this object under key 'key'.
bool isShapeServer(const RooAbsArg &arg) const
Check if this is serving shape to arg.
bool isShapeDirty() const
static void ioStreamerPass2Finalize()
Method called by workspace container to finalize schema evolution issues that cannot be handled in a ...
void addParameters(RooAbsCollection ¶ms, const RooArgSet *nset=nullptr, bool stripDisconnected=true) const
Add all parameters of the function and its daughters to params.
void removeServer(RooAbsArg &server, bool force=false)
Unregister another RooAbsArg as a server to us, ie, declare that we no longer depend on its value and...
void setTransientAttribute(const Text_t *name, bool value=true)
Set (default) or clear a named boolean attribute of this object.
void graphVizAddConnections(std::set< std::pair< RooAbsArg *, RooAbsArg * > > &)
Utility function that inserts all point-to-point client-server connections between any two RooAbsArgs...
void unRegisterProxy(RooArgProxy &proxy)
Remove proxy from proxy list.
RooArgSet * getObservables(const RooArgSet &set, bool valueOnly=true) const
Given a set of possible observables, return the observables that this PDF depends on.
void SetName(const char *name) override
Set the name of the TNamed.
std::set< std::string > _boolAttrib
void unRegisterCache(RooAbsCache &cache)
Unregister a RooAbsCache. Called from the RooAbsCache destructor.
RefCountList_t _clientListValue
bool addOwnedComponents(const RooAbsCollection &comps)
Take ownership of the contents of 'comps'.
void printAttribList(std::ostream &os) const
Transient boolean attributes (not copied in ctor)
void printTree(std::ostream &os, TString indent="") const override
Print object tree structure.
void SetNameTitle(const char *name, const char *title) override
Set all the TNamed parameters (name and title).
const Text_t * getStringAttribute(const Text_t *key) const
Get string attribute mapped under key 'key'.
bool findConstantNodes(const RooArgSet &observables, RooArgSet &cacheList)
Find branch nodes with all-constant parameters, and add them to the list of nodes that can be cached ...
static bool _verboseDirty
cache of the list of proxies. Avoids type casting.
void addServerList(RooAbsCollection &serverList, bool valueProp=true, bool shapeProp=false)
Register a list of RooAbsArg as servers to us by calling addServer() for each arg in the list.
virtual bool readFromStream(std::istream &is, bool compact, bool verbose=false)=0
bool redirectServers(const RooAbsCollection &newServerList, bool mustReplaceAll=false, bool nameChange=false, bool isRecursionStep=false)
Replace all direct servers of this object with the new servers in newServerList.
static void setDirtyInhibit(bool flag)
Control global dirty inhibit mode.
virtual void printCompactTreeHook(std::ostream &os, const char *ind="")
Hook function interface for object to insert additional information when printed in the context of a ...
const TNamed * _namePtr
Pointer to global cache manager for any expensive components created by this object.
void printCompactTree(const char *indent="", const char *fileName=nullptr, const char *namePat=nullptr, RooAbsArg *client=nullptr)
Print tree structure of expression tree on stdout, or to file if filename is specified.
virtual std::unique_ptr< RooAbsArg > compileForNormSet(RooArgSet const &normSet, RooFit::Detail::CompileContext &ctx) const
virtual void getParametersHook(const RooArgSet *, RooArgSet *, bool) const
virtual void ioStreamerPass2()
Method called by workspace container to finalize schema evolution issues that cannot be handled in a ...
bool _prohibitServerRedirect
Set of owned component.
virtual const char * cacheUniqueSuffix() const
RefCountListLegacyIterator_t * makeLegacyIterator(const RefCountList_t &list) const
const RefCountList_t & servers() const
List of all servers of this object.
bool dependsOnValue(const RooAbsCollection &serverList, const RooAbsArg *ignoreArg=nullptr) const
Check whether this object depends on values from an element in the serverList.
void addServer(RooAbsArg &server, bool valueProp=true, bool shapeProp=false, std::size_t refCount=1)
Register another RooAbsArg as a server to us, ie, declare that we depend on it.
virtual void translate(RooFit::Detail::CodeSquashContext &ctx) const
This function defines a translation for each RooAbsReal based object that can be used to express the ...
void removeStringAttribute(const Text_t *key)
Delete a string attribute with a given key.
RooArgSet * getVariables(bool stripDisconnected=true) const
Return RooArgSet with all variables (tree leaf nodes of expresssion tree)
Int_t Compare(const TObject *other) const override
Utility function used by TCollection::Sort to compare contained TObjects We implement comparison by n...
Int_t defaultPrintContents(Option_t *opt) const override
Define default contents to print.
virtual bool isDerived() const
Does value or shape of this arg depend on any other arg?
virtual void attachToTree(TTree &t, Int_t bufSize=32000)=0
Overloadable function for derived classes to implement attachment as branch to a TTree.
void printComponentTree(const char *indent="", const char *namePat=nullptr, Int_t nLevel=999)
Print tree structure of expression tree on given ostream, only branch nodes are printed.
virtual void constOptimizeTestStatistic(ConstOpCode opcode, bool doAlsoTrackingOpt=true)
Interface function signaling a request to perform constant term optimization.
RooLinkedList getCloningAncestors() const
Return ancestors in cloning chain of this RooAbsArg.
void setValueDirty()
Mark the element dirty. This forces a re-evaluation when a value is requested.
bool getAttribute(const Text_t *name) const
Check if a named attribute is set. By default, all attributes are unset.
static void verboseDirty(bool flag)
Activate verbose messaging related to dirty flag propagation.
RooAbsCache * getCache(Int_t index) const
Return registered cache object by index.
virtual void writeToStream(std::ostream &os, bool compact) const =0
void printMultiline(std::ostream &os, Int_t contents, bool verbose=false, TString indent="") const override
Implement multi-line detailed printing.
virtual RooAbsArg * cloneTree(const char *newname=nullptr) const
Clone tree expression of objects.
void registerCache(RooAbsCache &cache)
Register RooAbsCache with this object.
virtual void optimizeCacheMode(const RooArgSet &observables)
Activate cache mode optimization with given definition of observables.
RefCountList_t _clientListShape
virtual void attachToVStore(RooVectorDataStore &vstore)=0
TString cleanBranchName() const
Construct a mangled name from the actual name that is free of any math symbols that might be interpre...
bool inhibitDirty() const
Delete watch flag.
bool observableOverlaps(const RooAbsData *dset, const RooAbsArg &testArg) const
Test if any of the dependents of the arg tree (as determined by getObservables) overlaps with those o...
void changeServer(RooAbsArg &server, bool valueProp, bool shapeProp)
Change dirty flag propagation mask for specified server.
Int_t numProxies() const
Return the number of registered proxies.
void printName(std::ostream &os) const override
Print object name.
bool isValueDirty() const
bool _localNoInhibitDirty
Cached isConstant status.
virtual void printMetaArgs(std::ostream &) const
virtual void applyWeightSquared(bool flag)
Disables or enables the usage of squared weights.
static bool _inhibitDirty
void setAttribute(const Text_t *name, bool value=true)
Set (default) or clear a named boolean attribute of this object.
void setProxyNormSet(const RooArgSet *nset)
Forward a change in the cached normalization argset to all the registered proxies.
void branchNodeServerList(RooAbsCollection *list, const RooAbsArg *arg=nullptr, bool recurseNonDerived=false) const
Fill supplied list with all branch nodes of the arg tree starting with ourself as top node.
RefCountList_t _clientList
void printDirty(bool depth=true) const
Print information about current value dirty state information.
RooAbsProxy * getProxy(Int_t index) const
Return the nth proxy from the proxy list.
TObject * Clone(const char *newname=nullptr) const override
Make a clone of an object using the Streamer facility.
RefCountList_t _serverList
void leafNodeServerList(RooAbsCollection *list, const RooAbsArg *arg=nullptr, bool recurseNonDerived=false) const
Fill supplied list with all leaf nodes of the arg tree, starting with ourself as top node.
RooExpensiveObjectCache * _eocache
Prohibit server redirects – Debugging tool.
virtual bool isFundamental() const
Is this object a fundamental type that can be added to a dataset? Fundamental-type subclasses overrid...
RooArgSet * getComponents() const
Create a RooArgSet with all components (branch nodes) of the expression tree headed by this object.
virtual bool isValid() const
WVE (08/21/01) Probably obsolete now.
std::set< std::string > _boolAttribTransient
bool isCloneOf(const RooAbsArg &other) const
Check if this object was created as a clone of 'other'.
RooArgSet * getParameters(const RooAbsData *data, bool stripDisconnected=true) const
Create a list of leaf nodes in the arg tree starting with ourself as top node that don't match any of...
void printTitle(std::ostream &os) const override
Print object title.
virtual bool redirectServersHook(const RooAbsCollection &newServerList, bool mustReplaceAll, bool nameChange, bool isRecursiveStep)
Function that is called at the end of redirectServers().
std::size_t getParametersSizeEstimate(const RooArgSet *nset=nullptr) const
Obtain an estimate of the number of parameters of the function and its daughters.
void graphVizTree(const char *fileName, const char *delimiter="\n", bool useTitle=false, bool useLatex=false)
Create a GraphViz .dot file visualizing the expression tree headed by this RooAbsArg object.
bool getTransientAttribute(const Text_t *name) const
Check if a named attribute is set.
virtual void operModeHook()
bool recursiveCheckObservables(const RooArgSet *nset) const
Recursively call checkObservables on all nodes in the expression tree.
bool isValueServer(const RooAbsArg &arg) const
Check if this is serving values to arg.
std::map< std::string, std::string > _stringAttrib
Int_t numCaches() const
Return number of registered caches.
virtual bool checkObservables(const RooArgSet *nset) const
Overloadable function in which derived classes can implement consistency checks of the variables.
RooAbsArg()
Default constructor.
void attachDataSet(const RooAbsData &set)
Replace server nodes with names matching the dataset variable names with those data set variables,...
TIteratorToSTLInterface< RefCountList_t::Container_t > RefCountListLegacyIterator_t
RooAbsArg * findServer(const char *name) const
Return server of this with name name. Returns nullptr if not found.
std::vector< RooAbsCache * > _cacheList
void treeNodeServerList(RooAbsCollection *list, const RooAbsArg *arg=nullptr, bool doBranch=true, bool doLeaf=true, bool valueOnly=false, bool recurseNonDerived=false) const
Fill supplied list with nodes of the arg tree, following all server links, starting with ourself as t...
RooAbsArg * findNewServer(const RooAbsCollection &newSet, bool nameChange) const
Find the new server in the specified set that matches the old server.
OperMode operMode() const
Query the operation mode of this node.
RooAbsCache is the abstract base class for data members of RooAbsArgs that cache other (composite) Ro...
virtual void operModeHook()
Interface for operation mode changes.
virtual void findConstantNodes(const RooArgSet &, RooArgSet &, RooLinkedList &)
Interface for constant term node finding calls.
virtual void printCompactTreeHook(std::ostream &, const char *)
Interface for printing of cache guts in tree mode printing.
virtual bool redirectServersHook(const RooAbsCollection &, bool, bool, bool)
Interface for server redirect calls.
virtual void optimizeCacheMode(const RooArgSet &, RooArgSet &, RooLinkedList &)
Interface for processing of cache mode optimization calls.
RooAbsCollection is an abstract container object that can hold multiple RooAbsArg objects.
RooAbsCollection * selectByAttrib(const char *name, bool value) const
Create a subset of the current collection, consisting only of those elements with the specified attri...
virtual bool remove(const RooAbsArg &var, bool silent=false, bool matchByNameOnly=false)
Remove the specified argument from our list.
const char * GetName() const override
Returns name of object.
virtual bool add(const RooAbsArg &var, bool silent=false)
Add the specified argument to list.
Storage_t::size_type size() const
void reserve(Storage_t::size_type count)
void clear()
Clear contents. If the collection is owning, it will also delete the contents.
virtual bool addOwned(RooAbsArg &var, bool silent=false)
Add an argument and transfer the ownership to the collection.
void sort(bool reverse=false)
Sort collection using std::sort and name comparison.
void setName(const char *name)
RooAbsArg * find(const char *name) const
Find object with given name in list.
RooAbsDataStore is the abstract base class for data collection that use a TTree as internal storage m...
virtual const RooArgSet * get(Int_t index) const =0
RooAbsData is the common abstract base class for binned and unbinned datasets.
virtual const RooArgSet * get() const
RooAbsProxy is the abstact interface for proxy classes.
virtual const char * name() const
RooAbsReal is the common abstract base class for objects that represent a real value and implements f...
RooArgList is a container object that can hold multiple RooAbsArg objects.
RooArgProxy is the abstract interface for RooAbsArg proxy classes.
bool isShapeServer() const
Returns true if contents is shape server of owner.
RooAbsArg * absArg() const
Return pointer to contained argument.
bool isValueServer() const
Returns true of contents is value server of owner.
RooArgSet is a container object that can hold multiple RooAbsArg objects.
RooArgSet * snapshot(bool deepCopy=true) const
Use RooAbsCollection::snapshot(), but return as RooArgSet.
RooConstVar represent a constant real-valued object.
RooExpensiveObjectCache is a singleton class that serves as repository for objects that are expensive...
static RooExpensiveObjectCache & instance()
Return reference to singleton instance.
A class to maintain the context for squashing of RooFit models into code.
void compileServers(RooAbsArg &arg, RooArgSet const &normSet)
Switches the message service to a different level while the instance is alive.
RooLinkedList is an collection class for internal use, storing a collection of RooAbsArg pointers in ...
RooAbsArg * findArg(const RooAbsArg *) const
Return pointer to object with given name in collection.
virtual void Add(TObject *arg)
TObject * FindObject(const char *name) const override
Return pointer to obejct with given name.
RooNameReg is a registry for const char* names.
const TNamed * constPtr(const char *stringPtr)
Return a unique TNamed pointer for given C++ string.
static RooNameReg & instance()
Return reference to singleton instance.
@ kRenamedArg
TNamed flag to indicate that some RooAbsArg has been renamed (flag set in new name)
static void incrementRenameCounter()
The renaming counter has to be incremented every time a RooAbsArg is renamed.
RooPlotable is a 'mix-in' base class that define the standard RooFit plotting and printing methods.
virtual StyleOption defaultPrintStyle(Option_t *opt) 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,...
virtual void printValue(std::ostream &os) const
Interface to print value of object.
RooRealIntegral performs hybrid numerical/analytical integrals of RooAbsReal objects.
RooRealVar represents a variable that can be changed from the outside.
TClass * IsA() const override
void Streamer(TBuffer &) override
Stream an object of class RooRefArray.
RooResolutionModel is the base class for PDFs that represent a resolution model that can be convolute...
std::size_t refCount(typename Container_t::const_iterator item) const
Return ref count of item that iterator points to.
const Container_t & containedObjects() const
Direct reference to container of objects held by this list.
Container_t::const_iterator begin() const
Iterator over contained objects.
void Add(T *obj, std::size_t initialCount=1)
Add an object or increase refCount if it is already present.
int Replace(const T *oldObj, T *newObj)
Replace an element with a new value, keeping the same refCount.
Container_t::const_iterator end() const
End of contained objects.
bool empty() const
Check if empty.
std::size_t size() const
Number of contained objects (neglecting the ref count).
int Remove(const T *obj, bool force=false)
Decrease ref count of given object.
void RemoveAll(const T *obj)
Remove from list irrespective of ref count.
void reserve(std::size_t amount)
bool containsByNamePtr(const T *obj) const
Check if list contains an item using findByNamePointer().
RooTreeDataStore is a TTree-backed data storage.
RooVectorDataStore uses std::vectors to store data columns.
bool defineSetInternal(const char *name, const RooArgSet &aset)
const RooArgSet * set(const char *name)
Return pointer to previously defined named set with given nmame If no such set is found a null pointe...
Buffer base class used for serializing objects.
virtual Version_t ReadVersion(UInt_t *start=nullptr, UInt_t *bcnt=nullptr, const TClass *cl=nullptr)=0
virtual void SetByteCount(UInt_t cntpos, Bool_t packInVersion=kFALSE)=0
virtual Int_t CheckByteCount(UInt_t startpos, UInt_t bcnt, const TClass *clss)=0
virtual Int_t ReadClassBuffer(const TClass *cl, void *pointer, const TClass *onfile_class=nullptr)=0
virtual UInt_t WriteVersion(const TClass *cl, Bool_t useBcnt=kFALSE)=0
virtual Int_t WriteClassBuffer(const TClass *cl, void *pointer)=0
TIterator and GenericRooFIter front end with STL back end.
The TNamed class is the base class for all named ROOT classes.
virtual void SetTitle(const char *title="")
Set the title of the TNamed.
const char * GetName() const override
Returns name of object.
void Streamer(TBuffer &) override
Stream an object of class TObject.
const char * GetTitle() const override
Returns title of object.
virtual void SetName(const char *name)
Set the name of the TNamed.
Int_t GetEntriesFast() const
virtual void Expand(Int_t newSize)
Expand or shrink the array to newSize elements.
virtual void Compress()
Remove empty slots from array.
Int_t GetEntries() const override
Return the number of objects in array (i.e.
TObject * At(Int_t idx) const override
TObject * Remove(TObject *obj) override
Remove object from array.
TObject * FindObject(const char *name) const override
Find an object in this collection using its name.
void Add(TObject *obj) override
Mother of all ROOT objects.
virtual const char * GetName() const
Returns name of object.
virtual const char * ClassName() const
Returns name of class to which the object belongs.
void SetBit(UInt_t f, Bool_t set)
Set or unset the user status bits as specified in f.
virtual Bool_t InheritsFrom(const char *classname) const
Returns kTRUE if object inherits from class "classname".
An array of references to TObjects.
void Add(TObject *obj) override
void Streamer(TBuffer &) override
Stream all objects in the array to or from the I/O buffer.
const char * Data() const
TString & ReplaceAll(const TString &s1, const TString &s2)
Bool_t BeginsWith(const char *s, ECaseCompare cmp=kExact) const
TString & Append(const char *cs)
Bool_t Contains(const char *pat, ECaseCompare cmp=kExact) const
A TTree represents a columnar dataset.
static Roo_reg_AGKInteg1D instance
std::string getColonSeparatedNameString(RooArgSet const &argSet)
Create a string with all sorted names of RooArgSet elements separated by colons.
static constexpr double s
std::vector< RooAbsProxy * > cache