89bool isCacheSet(std::string
const& setName) {
91 return setName.rfind(
"CACHE_", 0) == 0;
190 TNamed(other), _uuid(other._uuid), _classes(other._classes,this)
199 for(
auto * snap : static_range_cast<RooArgSet*>(other.
_snapshots)) {
202 snapClone->
setName(snap->GetName()) ;
207 for (map<string,RooArgSet>::const_iterator iter3 = other.
_namedSets.begin() ; iter3 != other.
_namedSets.end() ; ++iter3) {
261 std::vector<std::string> tokens =
ROOT::Split(fileSpec,
":");
264 if (tokens.size() != 3) {
265 std::ostringstream stream;
266 for (
const auto& token : tokens) {
267 stream <<
"\n\t" << token;
269 coutE(
InputArguments) <<
"RooWorkspace(" <<
GetName() <<
") ERROR in file specification, expecting 'filename:wsname:objname', but '" << fileSpec <<
"' given."
270 <<
"\nTokens read are:" << stream.str() << endl;
274 const std::string&
filename = tokens[0];
275 const std::string& wsname = tokens[1];
276 const std::string& objname = tokens[2];
289 <<
" or object is not a RooWorkspace" << endl ;
296 bool ret =
import(*warg,arg1,arg2,arg3,arg4,arg5,arg6,arg7,arg8,arg9) ;
301 bool ret =
import(*wdata,arg1,arg2,arg3,arg4,arg5,arg6,arg7,arg8,arg9) ;
306 <<
" in workspace " << wsname <<
" in file " <<
filename << endl ;
322 ret |=
import(*oneArg,arg1,arg2,arg3,arg4,arg5,arg6,arg7,arg8,arg9) ;
374 pc.defineString(
"conflictSuffix",
"RenameConflictNodes",0) ;
375 pc.defineInt(
"renameConflictOrig",
"RenameConflictNodes",0,0) ;
376 pc.defineString(
"allSuffix",
"RenameAllNodes",0) ;
377 pc.defineString(
"allVarsSuffix",
"RenameAllVariables",0) ;
378 pc.defineString(
"allVarsExcept",
"RenameAllVariables",1) ;
379 pc.defineString(
"varChangeIn",
"RenameVar",0,
"",
true) ;
380 pc.defineString(
"varChangeOut",
"RenameVar",1,
"",
true) ;
381 pc.defineString(
"factoryTag",
"FactoryTag",0) ;
382 pc.defineInt(
"useExistingNodes",
"RecycleConflictNodes",0,0) ;
383 pc.defineInt(
"silence",
"Silence",0,0) ;
384 pc.defineInt(
"noRecursion",
"NoRecursion",0,0) ;
385 pc.defineMutex(
"RenameConflictNodes",
"RenameAllNodes") ;
386 pc.defineMutex(
"RenameConflictNodes",
"RecycleConflictNodes") ;
387 pc.defineMutex(
"RenameAllNodes",
"RecycleConflictNodes") ;
388 pc.defineMutex(
"RenameVariable",
"RenameAllVariables") ;
397 const char* suffixC =
pc.getString(
"conflictSuffix") ;
398 const char* suffixA =
pc.getString(
"allSuffix") ;
399 const char* suffixV =
pc.getString(
"allVarsSuffix") ;
400 const char* exceptVars =
pc.getString(
"allVarsExcept") ;
401 const char* varChangeIn =
pc.getString(
"varChangeIn") ;
402 const char* varChangeOut =
pc.getString(
"varChangeOut") ;
403 bool renameConflictOrig =
pc.getInt(
"renameConflictOrig") ;
404 Int_t useExistingNodes =
pc.getInt(
"useExistingNodes") ;
405 Int_t silence =
pc.getInt(
"silence") ;
406 Int_t noRecursion =
pc.getInt(
"noRecursion") ;
410 if (suffixC && strlen(suffixC)==0) suffixC = 0 ;
411 if (suffixA && strlen(suffixA)==0) suffixA = 0 ;
413 bool conflictOnly = suffixA ? false : true ;
414 const char* suffix = suffixA ? suffixA : suffixC ;
417 std::map<string,string> varMap ;
418 if (strlen(varChangeIn)>0) {
421 const std::vector<std::string> tokIn =
ROOT::Split(varChangeIn,
", ",
true);
422 const std::vector<std::string> tokOut =
ROOT::Split(varChangeOut,
", ",
true);
423 for (
unsigned int i=0; i < tokIn.size(); ++i) {
424 varMap.insert(std::make_pair(tokIn[i], tokOut[i]));
427 assert(tokIn.size() == tokOut.size());
432 std::set<string> exceptVarNames ;
433 if (exceptVars && strlen(exceptVars)) {
434 const std::vector<std::string> toks =
ROOT::Split(exceptVars,
", ",
true);
435 exceptVarNames.insert(toks.begin(), toks.end());
438 if (suffixV != 0 && strlen(suffixV)>0) {
440 for (
const auto v : *vars) {
441 if (exceptVarNames.find(
v->GetName())==exceptVarNames.end()) {
442 varMap[
v->GetName()] =
Form(
"%s_%s",
v->GetName(),suffixV) ;
453 bool factoryMatch = (tagIn && tagWs && !strcmp(tagIn,tagWs)) ;
455 ((
RooAbsArg&)inArg).setAttribute(
"RooWorkspace::Recycle") ;
458 if (!suffix && wsarg && !useExistingNodes && !(inArg.
isFundamental() && varMap[inArg.
GetName()]!=
"")) {
462 <<
": another instance with same name already in the workspace and no conflict resolution protocol specified" << endl ;
472 coutI(
ObjectHandling) <<
"RooWorkSpace::import(" <<
GetName() <<
") Recycling existing object " << inArg.
GetName() <<
" created with identical factory specification" << endl ;
481 branchSet.
add(inArg) ;
486 for (
const auto branch : branchSet) {
488 if (wsbranch && wsbranch!=branch && !branch->
getAttribute(
"RooWorkspace::Recycle") && !useExistingNodes) {
489 conflictNodes.
add(*branch) ;
494 if (!conflictNodes.
empty() && !suffix && !useExistingNodes) {
496 << conflictNodes <<
" already in the workspace and no conflict resolution protocol specified" << endl ;
509 conflictNodes.
add(branchSet) ;
513 string topName2 = cloneTop->
GetName() ;
514 if (!renameConflictOrig) {
516 for (
const auto cnode : conflictNodes) {
518 string origName = cnode2->
GetName() ;
521 string tag =
Form(
"ORIGNAME:%s",origName.c_str()) ;
524 string tag2 =
Form(
"%s",origName.c_str()) ;
529 if (cnode2==cloneTop) {
535 <<
") Resolving name conflict in workspace by changing name of imported node "
536 << origName <<
" to " << cnode2->
GetName() << endl ;
542 for (
const auto cnode : conflictNodes) {
544 string origName = cnode->GetName() ;
553 wsnode->
SetName(
Form(
"%s_%s",cnode->GetName(),suffix)) ;
554 wsnode->
SetTitle(
Form(
"%s (%s)",cnode->GetTitle(),suffix)) ;
557 for (
unsigned int n=1;
true; ++
n) {
558 string newname =
Form(
"%s_%s_%d",cnode->GetName(),suffix,
n) ;
560 wsnode->
SetName(newname.c_str()) ;
561 wsnode->
SetTitle(
Form(
"%s (%s %d)",cnode->GetTitle(),suffix,
n)) ;
568 <<
") Resolving name conflict in workspace by changing name of original node "
569 << origName <<
" to " << wsnode->
GetName() << endl ;
573 << origName <<
" to be renamed, but didn't find it..." << endl ;
580 if (strlen(varChangeIn)>0 || (suffixV && strlen(suffixV)>0)) {
583 for (
const auto cnode : cloneSet) {
585 if (varMap.find(cnode->GetName())!=varMap.end()) {
586 string origName = cnode->GetName() ;
587 cnode->SetName(varMap[cnode->GetName()].c_str()) ;
588 string tag =
Form(
"ORIGNAME:%s",origName.c_str()) ;
589 cnode->setAttribute(tag.c_str()) ;
590 if (!cnode->getStringAttribute(
"origName")) {
591 string tag2 =
Form(
"%s",origName.c_str()) ;
592 cnode->setStringAttribute(
"origName",tag2.c_str()) ;
597 << origName <<
" to " << cnode->GetName() <<
" on request" << endl ;
600 if (cnode==cloneTop) {
601 topName2 = cnode->GetName() ;
617 for (
const auto branch2 : branchSet2) {
619 conflictNodes2.
add(*branch2) ;
624 if (!conflictNodes2.
empty()) {
626 << conflictNodes2 <<
" cause naming conflict after conflict resolution protocol was executed" << endl ;
631 for (
const auto node : cloneSet2) {
632 if (node->importWorkspaceHook(*
this)) {
634 <<
" has an error in importing in one or more of its auxiliary objects, aborting" << endl ;
641 for (
const auto node : cloneSet2) {
645 << node->ClassName() <<
"::" << node->GetName() <<
", reading of workspace will require external definition of class" << endl ;
651 node->setExpensiveObjectCache(
_eocache) ;
659 if (!silence && useExistingNodes) {
661 <<
"::" << node->GetName() <<
" for import of " << cloneTop2->
ClassName() <<
"::"
662 << cloneTop2->
GetName() << endl ;
675 << node->GetName() << endl ;
689 if (!recycledNodes.
empty()) {
690 for (
const auto node : cloneSet2) {
691 node->redirectServers(recycledNodes) ;
733 pc.defineString(
"dsetName",
"Rename",0,
"") ;
734 pc.defineString(
"varChangeIn",
"RenameVar",0,
"",
true) ;
735 pc.defineString(
"varChangeOut",
"RenameVar",1,
"",
true) ;
736 pc.defineInt(
"embedded",
"Embedded",0,0) ;
737 pc.defineInt(
"silence",
"Silence",0,0) ;
746 const char* dsetName =
pc.getString(
"dsetName") ;
747 const char* varChangeIn =
pc.getString(
"varChangeIn") ;
748 const char* varChangeOut =
pc.getString(
"varChangeOut") ;
749 bool embedded =
pc.getInt(
"embedded") ;
750 Int_t silence =
pc.getInt(
"silence") ;
756 if (dsetName && strlen(dsetName)==0) {
767 if (dsetName && dataList.
FindObject(dsetName)) {
768 coutE(
ObjectHandling) <<
"RooWorkspace::import(" <<
GetName() <<
") ERROR dataset with name " << dsetName <<
" already exists in workspace, import aborted" << endl ;
772 coutE(
ObjectHandling) <<
"RooWorkspace::import(" <<
GetName() <<
") ERROR dataset with name " << inData.
GetName() <<
" already exists in workspace, import aborted" << endl ;
788 if (strlen(varChangeIn)>0) {
790 const std::vector<std::string> tokIn =
ROOT::Split(varChangeIn,
",");
791 const std::vector<std::string> tokOut =
ROOT::Split(varChangeOut,
",");
792 for (
unsigned int i=0; i < tokIn.size(); ++i) {
794 coutI(
ObjectHandling) <<
"RooWorkSpace::import(" <<
GetName() <<
") changing name of dataset observable " << tokIn[i] <<
" to " << tokOut[i] << endl ;
802 if (!
arg(carg->GetName())) {
808 dataList.
Add(clone) ;
843 if (!
arg(sarg->GetName())) {
848 <<
"\" is not in workspace and importMissing option is disabled" << endl ;
852 wsargs.
add(*
arg(sarg->GetName())) ;
874 <<
") WARNING redefining previously defined named set " <<
name << endl;
899 for (
const std::string& token :
ROOT::Split(contentList,
",")) {
901 if (!
arg(token.c_str())) {
903 <<
"\" is not in workspace" << endl ;
906 wsargs.
add(*
arg(token.c_str())) ;
928 for (
const std::string& token :
ROOT::Split(newContents,
",")) {
930 if (!
arg(token.c_str())) {
932 <<
"\" is not in workspace" << endl ;
935 wsargs.
add(*
arg(token.c_str())) ;
953 return (i!=
_namedSets.end()) ? &(i->second) : 0 ;
967 <<
" does not exist" << endl ;
974 <<
" already exists" << endl ;
998 <<
" does not exist" << endl ;
1104 TString className = carg->ClassName() ;
1107 << carg->ClassName() <<
"::" << carg->GetName() <<
", reading of workspace will require external definition of class" << endl ;
1148 snapshot->assign(params) ;
1178 actualParams.
assign(*snap) ;
1260 for (
const std::string& token :
ROOT::Split(nameList,
",")) {
1265 coutE(
InputArguments) <<
" RooWorkspace::argSet(" <<
GetName() <<
") no RooAbsArg named \"" << token <<
"\" in workspace" << endl ;
1428 std::list<RooAbsData*> ret ;
1429 for(
auto * dat : static_range_cast<RooAbsData*>(
_dataList)) {
1430 ret.push_back(dat) ;
1441 std::list<RooAbsData*> ret ;
1443 ret.push_back(dat) ;
1455 std::list<TObject*> ret ;
1462 ret.push_back(gobj) ;
1494 if (mapEntry && strlen(mapEntry)>0) {
1504 if (implfile.empty() || declfile.empty()) {
1506 << tc->
GetName() <<
" through ROOT TClass interface, unable to import code" << endl ;
1522 << tc->
GetName() <<
" : it cannot be persisted because it doesn't have a default constructor. Please fix " << endl ;
1529 std::string declpath;
1530 std::string implpath;
1553 if (declpath.empty()) {
1555 << tc->
GetName() <<
" because header file " << declfile <<
" is not found in current directory nor in $ROOTSYS" ;
1570 <<
"path using RooWorkspace::addClassDeclImportDir(const char* dir)" << endl ;
1598 if (implpath.empty()) {
1600 << tc->
GetName() <<
" because implementation file " << implfile <<
" is not found in current directory nor in $ROOTSYS" ;
1615 <<
"path using RooWorkspace::addClassImplImportDir(const char* dir)" << endl;
1633 const std::string declfilename = !declpath.empty() ?
gSystem->
BaseName(declpath.c_str())
1637 int dotpos2 = strrchr(declfilename.c_str(),
'.') - declfilename.c_str() ;
1638 string declfilebase = declfilename.substr(0,dotpos2) ;
1639 string declfileext = declfilename.substr(dotpos2+1) ;
1641 list<string> extraHeaders ;
1644 if (
_fmap.find(declfilebase) ==
_fmap.end()) {
1647 std::fstream fdecl(!declpath.empty() ? declpath.c_str() : declfile.c_str());
1652 <<
") ERROR opening declaration file " << declfile << endl ;
1657 <<
") importing code of class " << tc->
GetName()
1658 <<
" from " << (!implpath.empty() ? implpath.c_str() : implfile.c_str())
1659 <<
" and " << (!declpath.empty() ? declpath.c_str() : declfile.c_str()) << endl ;
1664 while(fdecl.getline(buf,1023)) {
1667 bool processedInclude = false ;
1668 char* extincfile = 0 ;
1671 if (strstr(buf,
"#include")) {
1674 strlcpy(tmp, buf, 64000);
1675 bool stdinclude = strchr(buf,
'<');
1676 strtok(tmp,
" <\"");
1677 char *incfile = strtok(0,
" <>\"");
1682 hpath +=
"/include/";
1686 <<
") scheduling include file " << incfile <<
" for import" << endl;
1687 extraHeaders.push_back(incfile);
1688 extincfile = incfile;
1689 processedInclude =
true;
1694 if (processedInclude) {
1695 decl +=
"// external include file below retrieved from workspace code storage\n" ;
1696 decl +=
Form(
"#include \"%s\"\n",extincfile) ;
1704 fstream fimpl(!implpath.empty() ? implpath.c_str() : implfile.c_str()) ;
1709 <<
") ERROR opening implementation file " << implfile << endl ;
1716 while(fimpl.getline(buf,1023)) {
1720 bool foundSelfInclude=false ;
1721 bool processedInclude = false ;
1722 char* extincfile = 0 ;
1725 if (strstr(buf,
"#include")) {
1728 strlcpy(tmp, buf, 64000);
1729 bool stdinclude = strchr(buf,
'<');
1730 strtok(tmp,
" <\"");
1731 char *incfile = strtok(0,
" <>\"");
1733 if (strstr(incfile, declfilename.c_str())) {
1734 foundSelfInclude =
true;
1737 if (!stdinclude && !foundSelfInclude) {
1740 hpath +=
"/include/";
1745 <<
") scheduling include file " << incfile <<
" for import" << endl;
1746 extraHeaders.push_back(incfile);
1747 extincfile = incfile;
1748 processedInclude =
true;
1755 if (foundSelfInclude) {
1758 impl +=
"// class declaration include file below retrieved from workspace code storage\n" ;
1759 impl +=
Form(
"#include \"%s.%s\"\n",declfilebase.c_str(),declfileext.c_str()) ;
1760 }
else if (processedInclude) {
1761 impl +=
"// external include file below retrieved from workspace code storage\n" ;
1762 impl +=
Form(
"#include \"%s\"\n",extincfile) ;
1770 _fmap[declfilebase]._hfile = decl ;
1771 _fmap[declfilebase]._cxxfile = impl ;
1772 _fmap[declfilebase]._hext = declfileext ;
1775 for (list<string>::iterator ehiter = extraHeaders.begin() ; ehiter != extraHeaders.end() ; ++ehiter ) {
1779 eh.
_hname = ehiter->c_str() ;
1780 fstream fehdr(ehiter->c_str()) ;
1783 while(fehdr.getline(buf2,1023)) {
1786 if (strstr(buf2,
"#include")) {
1789 strlcpy(tmp, buf2, 64000);
1790 bool stdinclude = strchr(buf,
'<');
1791 strtok(tmp,
" <\"");
1792 char *incfile = strtok(0,
" <>\"");
1797 hpath +=
"/include/";
1801 <<
") scheduling recursive include file " << incfile <<
" for import"
1803 extraHeaders.push_back(incfile);
1811 eh.
_hfile = ehimpl.c_str();
1813 _ehmap[ehiter->c_str()] = eh;
1821 <<
") code of class " << tc->
GetName()
1822 <<
" was already imported from " << (!implpath.empty() ? implpath : implfile.c_str())
1823 <<
" and " << (!declpath.empty() ? declpath.c_str() : declfile.c_str()) << std::endl;
1836 std::list<TClass*> bases ;
1837 for(
auto * base : static_range_cast<TBaseClass*>(*bl)) {
1838 if (baseNameList.
Length()>0) {
1839 baseNameList +=
"," ;
1841 baseNameList += base->GetClassPointer()->GetName() ;
1842 bases.push_back(base->GetClassPointer()) ;
1851 for(
TClass* bclass : bases) {
1871 if (
_dir)
return true ;
1898 if (oldObj && !replaceExisting) {
1900 <<
object.GetName() <<
" is already in workspace and replaceExisting flag is set to false" << endl ;
1906 object.IsA()->SetDirectoryAutoAdd(0);
1916 object.IsA()->SetDirectoryAutoAdd(func);
1938 if (oldObj && !replaceExisting) {
1940 <<
object.GetName() <<
" is already in workspace and replaceExisting flag is set to false" << endl ;
1947 wrapper->setOwning(
true) ;
1948 wrapper->SetName(aliasName) ;
1949 wrapper->SetTitle(aliasName) ;
1993 if (ret)
return ret ;
1997 if (ret)
return ret ;
2014 if (!gobj)
return nullptr;
2039 TFile f(fileName,recreate?
"RECREATE":
"UPDATE") ;
2054 cxcoutD(
ObjectHandling) <<
"INFO: Creating RooFactoryWSTool associated with this workspace" << endl ;
2055 _factory = make_unique<RooFactoryWSTool>(*
this);
2079 bool treeMode(
false) ;
2081 if (
TString(opts).Contains(
"t")) {
2084 if (
TString(opts).Contains(
"v")) {
2088 cout << endl <<
"RooWorkspace(" <<
GetName() <<
") " <<
GetTitle() <<
" contents" << endl << endl ;
2108 if (!parg->hasClients()) {
2117 if (!parg->hasClients()) {
2118 funcSet.
add(*parg) ;
2125 if (!parg->hasClients()) {
2126 catfuncSet.
add(*parg) ;
2134 convResoSet.
add(*parg) ;
2136 resoSet.
add(*parg) ;
2149 funcSet.
add(*parg) ;
2154 catfuncSet.
add(*parg) ;
2172 if (!varSet.
empty()) {
2174 cout <<
"variables" << endl ;
2175 cout <<
"---------" << endl ;
2176 cout << varSet << endl ;
2180 if (!pdfSet.
empty()) {
2181 cout <<
"p.d.f.s" << endl ;
2182 cout <<
"-------" << endl ;
2186 parg->printComponentTree() ;
2195 if (!resoSet.
empty()) {
2196 cout <<
"analytical resolution models" << endl ;
2197 cout <<
"----------------------------" << endl ;
2206 if (!funcSet.
empty()) {
2207 cout <<
"functions" << endl ;
2208 cout <<
"--------" << endl ;
2212 parg->printComponentTree() ;
2220 if (!catfuncSet.
empty()) {
2221 cout <<
"category functions" << endl ;
2222 cout <<
"------------------" << endl ;
2226 parg->printComponentTree() ;
2235 cout <<
"datasets" << endl ;
2236 cout <<
"--------" << endl ;
2237 for(
auto * data2 : static_range_cast<RooAbsData*>(
_dataList)) {
2238 std::cout << data2->ClassName() <<
"::" << data2->GetName() << *data2->get() << std::endl;
2240 std::cout << std::endl ;
2244 cout <<
"embedded datasets (in pdfs and functions)" << endl ;
2245 cout <<
"-----------------------------------------" << endl ;
2247 cout << data2->ClassName() <<
"::" << data2->GetName() << *data2->get() << endl ;
2253 cout <<
"parameter snapshots" << endl ;
2254 cout <<
"-------------------" << endl ;
2255 for(
auto * snap : static_range_cast<RooArgSet*>(
_snapshots)) {
2256 cout << snap->GetName() <<
" = (" ;
2259 if (
first) {
first=false ; }
else { cout <<
"," ; }
2261 a->printValue(cout) ;
2262 if (
a->isConstant()) {
2266 cout <<
")" << endl ;
2273 cout <<
"named sets" << endl ;
2274 cout <<
"----------" << endl ;
2275 for (map<string,RooArgSet>::const_iterator it =
_namedSets.begin() ; it !=
_namedSets.end() ; ++it) {
2276 if (
verbose || !isCacheSet(it->first)) {
2277 cout << it->first <<
":" << it->second << endl;
2286 cout <<
"generic objects" << endl ;
2287 cout <<
"---------------" << endl ;
2292 cout << gobj->ClassName() <<
"::" << gobj->GetName() << endl ;
2300 cout <<
"study modules" << endl ;
2301 cout <<
"-------------" << endl ;
2303 cout << smobj->ClassName() <<
"::" << smobj->GetName() << endl ;
2310 cout <<
"embedded class code" << endl ;
2311 cout <<
"-------------------" << endl ;
2317 cout <<
"embedded precalculated expensive components" << endl ;
2318 cout <<
"-------------------------------------------" << endl ;
2349 name.Streamer(R__b) ;
2350 _fmap[
name]._hext.Streamer(R__b) ;
2351 _fmap[
name]._hfile.Streamer(R__b) ;
2352 _fmap[
name]._cxxfile.Streamer(R__b) ;
2360 name.Streamer(R__b) ;
2361 _c2fmap[
name]._baseName.Streamer(R__b) ;
2362 _c2fmap[
name]._fileBase.Streamer(R__b) ;
2371 name.Streamer(R__b) ;
2372 _ehmap[
name]._hname.Streamer(R__b) ;
2373 _ehmap[
name]._hfile.Streamer(R__b) ;
2380 _compiledOK = !compileClasses() ;
2388 UInt_t count = _fmap.size() ;
2390 map<TString,ClassFiles>::iterator iter = _fmap.begin() ;
2391 while(iter!=_fmap.end()) {
2392 TString key_copy(iter->first) ;
2394 iter->second._hext.Streamer(R__b) ;
2395 iter->second._hfile.Streamer(R__b);
2396 iter->second._cxxfile.Streamer(R__b);
2402 count = _c2fmap.size() ;
2404 map<TString,ClassRelInfo>::iterator iter2 = _c2fmap.begin() ;
2405 while(iter2!=_c2fmap.end()) {
2406 TString key_copy(iter2->first) ;
2408 iter2->second._baseName.Streamer(R__b) ;
2409 iter2->second._fileBase.Streamer(R__b);
2414 count = _ehmap.size() ;
2416 map<TString,ExtraHeader>::iterator iter3 = _ehmap.begin() ;
2417 while(iter3!=_ehmap.end()) {
2418 TString key_copy(iter3->first) ;
2420 iter3->second._hname.Streamer(R__b) ;
2421 iter3->second._hfile.Streamer(R__b);
2447 node->ioStreamerPass2() ;
2454 node->setExpensiveObjectCache(
_eocache) ;
2455 node->setWorkspace(*
this);
2459 cout <<
"RooWorkspace::Streamer(" <<
GetName() <<
") " << node->ClassName() <<
"::" << node->GetName()
2469 map<RooAbsArg*,vector<RooAbsArg *> > extClients, extValueClients, extShapeClients ;
2474 std::vector<RooAbsArg *> clientsTmp{tmparg->_clientList.begin(), tmparg->_clientList.end()};
2475 for (
auto client : clientsTmp) {
2478 const auto refCount = tmparg->_clientList.refCount(client);
2479 auto& bufferVec = extClients[tmparg];
2481 bufferVec.insert(bufferVec.end(), refCount, client);
2482 tmparg->_clientList.Remove(client,
true);
2487 clientsTmp.assign(tmparg->_clientListValue.begin(), tmparg->_clientListValue.end());
2488 for (
auto vclient : clientsTmp) {
2491 <<
" has external value client link to " << vclient <<
" (" << vclient->GetName() <<
") with ref count " << tmparg->_clientListValue.refCount(vclient) << endl ;
2493 const auto refCount = tmparg->_clientListValue.refCount(vclient);
2494 auto& bufferVec = extValueClients[tmparg];
2496 bufferVec.insert(bufferVec.end(), refCount, vclient);
2497 tmparg->_clientListValue.Remove(vclient,
true);
2502 clientsTmp.assign(tmparg->_clientListShape.begin(), tmparg->_clientListShape.end());
2503 for (
auto sclient : clientsTmp) {
2506 <<
" has external shape client link to " << sclient <<
" (" << sclient->GetName() <<
") with ref count " << tmparg->_clientListShape.refCount(sclient) << endl ;
2508 const auto refCount = tmparg->_clientListShape.refCount(sclient);
2509 auto& bufferVec = extShapeClients[tmparg];
2511 bufferVec.insert(bufferVec.end(), refCount, sclient);
2512 tmparg->_clientListShape.Remove(sclient,
true);
2523 for (
auto &iterx : extClients) {
2524 for (
auto client : iterx.second) {
2525 iterx.first->_clientList.Add(client);
2529 for (
auto &iterx : extValueClients) {
2530 for (
auto client : iterx.second) {
2531 iterx.first->_clientListValue.Add(client);
2535 for (
auto &iterx : extShapeClients) {
2536 for (
auto client : iterx.second) {
2537 iterx.first->_clientListShape.Add(client);
2553 map<TString,ClassRelInfo>::const_iterator iter = _c2fmap.begin() ;
2554 while(iter!=_c2fmap.end()) {
2558 ret += iter->first ;
2571 static const UInt_t crctab[256] = { 0x00000000,
2572 0x04c11db7, 0x09823b6e, 0x0d4326d9, 0x130476dc, 0x17c56b6b,
2573 0x1a864db2, 0x1e475005, 0x2608edb8, 0x22c9f00f, 0x2f8ad6d6,
2574 0x2b4bcb61, 0x350c9b64, 0x31cd86d3, 0x3c8ea00a, 0x384fbdbd,
2575 0x4c11db70, 0x48d0c6c7, 0x4593e01e, 0x4152fda9, 0x5f15adac,
2576 0x5bd4b01b, 0x569796c2, 0x52568b75, 0x6a1936c8, 0x6ed82b7f,
2577 0x639b0da6, 0x675a1011, 0x791d4014, 0x7ddc5da3, 0x709f7b7a,
2578 0x745e66cd, 0x9823b6e0, 0x9ce2ab57, 0x91a18d8e, 0x95609039,
2579 0x8b27c03c, 0x8fe6dd8b, 0x82a5fb52, 0x8664e6e5, 0xbe2b5b58,
2580 0xbaea46ef, 0xb7a96036, 0xb3687d81, 0xad2f2d84, 0xa9ee3033,
2581 0xa4ad16ea, 0xa06c0b5d, 0xd4326d90, 0xd0f37027, 0xddb056fe,
2582 0xd9714b49, 0xc7361b4c, 0xc3f706fb, 0xceb42022, 0xca753d95,
2583 0xf23a8028, 0xf6fb9d9f, 0xfbb8bb46, 0xff79a6f1, 0xe13ef6f4,
2584 0xe5ffeb43, 0xe8bccd9a, 0xec7dd02d, 0x34867077, 0x30476dc0,
2585 0x3d044b19, 0x39c556ae, 0x278206ab, 0x23431b1c, 0x2e003dc5,
2586 0x2ac12072, 0x128e9dcf, 0x164f8078, 0x1b0ca6a1, 0x1fcdbb16,
2587 0x018aeb13, 0x054bf6a4, 0x0808d07d, 0x0cc9cdca, 0x7897ab07,
2588 0x7c56b6b0, 0x71159069, 0x75d48dde, 0x6b93dddb, 0x6f52c06c,
2589 0x6211e6b5, 0x66d0fb02, 0x5e9f46bf, 0x5a5e5b08, 0x571d7dd1,
2590 0x53dc6066, 0x4d9b3063, 0x495a2dd4, 0x44190b0d, 0x40d816ba,
2591 0xaca5c697, 0xa864db20, 0xa527fdf9, 0xa1e6e04e, 0xbfa1b04b,
2592 0xbb60adfc, 0xb6238b25, 0xb2e29692, 0x8aad2b2f, 0x8e6c3698,
2593 0x832f1041, 0x87ee0df6, 0x99a95df3, 0x9d684044, 0x902b669d,
2594 0x94ea7b2a, 0xe0b41de7, 0xe4750050, 0xe9362689, 0xedf73b3e,
2595 0xf3b06b3b, 0xf771768c, 0xfa325055, 0xfef34de2, 0xc6bcf05f,
2596 0xc27dede8, 0xcf3ecb31, 0xcbffd686, 0xd5b88683, 0xd1799b34,
2597 0xdc3abded, 0xd8fba05a, 0x690ce0ee, 0x6dcdfd59, 0x608edb80,
2598 0x644fc637, 0x7a089632, 0x7ec98b85, 0x738aad5c, 0x774bb0eb,
2599 0x4f040d56, 0x4bc510e1, 0x46863638, 0x42472b8f, 0x5c007b8a,
2600 0x58c1663d, 0x558240e4, 0x51435d53, 0x251d3b9e, 0x21dc2629,
2601 0x2c9f00f0, 0x285e1d47, 0x36194d42, 0x32d850f5, 0x3f9b762c,
2602 0x3b5a6b9b, 0x0315d626, 0x07d4cb91, 0x0a97ed48, 0x0e56f0ff,
2603 0x1011a0fa, 0x14d0bd4d, 0x19939b94, 0x1d528623, 0xf12f560e,
2604 0xf5ee4bb9, 0xf8ad6d60, 0xfc6c70d7, 0xe22b20d2, 0xe6ea3d65,
2605 0xeba91bbc, 0xef68060b, 0xd727bbb6, 0xd3e6a601, 0xdea580d8,
2606 0xda649d6f, 0xc423cd6a, 0xc0e2d0dd, 0xcda1f604, 0xc960ebb3,
2607 0xbd3e8d7e, 0xb9ff90c9, 0xb4bcb610, 0xb07daba7, 0xae3afba2,
2608 0xaafbe615, 0xa7b8c0cc, 0xa379dd7b, 0x9b3660c6, 0x9ff77d71,
2609 0x92b45ba8, 0x9675461f, 0x8832161a, 0x8cf30bad, 0x81b02d74,
2610 0x857130c3, 0x5d8a9099, 0x594b8d2e, 0x5408abf7, 0x50c9b640,
2611 0x4e8ee645, 0x4a4ffbf2, 0x470cdd2b, 0x43cdc09c, 0x7b827d21,
2612 0x7f436096, 0x7200464f, 0x76c15bf8, 0x68860bfd, 0x6c47164a,
2613 0x61043093, 0x65c52d24, 0x119b4be9, 0x155a565e, 0x18197087,
2614 0x1cd86d30, 0x029f3d35, 0x065e2082, 0x0b1d065b, 0x0fdc1bec,
2615 0x3793a651, 0x3352bbe6, 0x3e119d3f, 0x3ad08088, 0x2497d08d,
2616 0x2056cd3a, 0x2d15ebe3, 0x29d4f654, 0xc5a92679, 0xc1683bce,
2617 0xcc2b1d17, 0xc8ea00a0, 0xd6ad50a5, 0xd26c4d12, 0xdf2f6bcb,
2618 0xdbee767c, 0xe3a1cbc1, 0xe760d676, 0xea23f0af, 0xeee2ed18,
2619 0xf0a5bd1d, 0xf464a0aa, 0xf9278673, 0xfde69bc4, 0x89b8fd09,
2620 0x8d79e0be, 0x803ac667, 0x84fbdbd0, 0x9abc8bd5, 0x9e7d9662,
2621 0x933eb0bb, 0x97ffad0c, 0xafb010b1, 0xab710d06, 0xa6322bdf,
2622 0xa2f33668, 0xbcb4666d, 0xb8757bda, 0xb5365d03, 0xb1f740b4
2626 while (sz--) crc = (crc << 8) ^
UInt_t(*
data++) ^ crctab[crc >> 24];
2634 unsigned long sz = strlen(
data);
2635 switch (strlen(
data)) {
2647 return crc32(
data + 4, sz - 4, (
data[0] << 24) | (
data[1] << 16) |
2665 bool haveDir=false ;
2670 bool writeExtraHeaders(
false) ;
2673 map<TString,ClassRelInfo>::iterator iter = _c2fmap.begin() ;
2674 while(iter!=_c2fmap.end()) {
2676 oocxcoutD(_wspace,
ObjectHandling) <<
"RooWorkspace::CodeRepo::compileClasses() now processing class " << iter->first.Data() << endl ;
2681 << iter->first <<
" already in ROOT class table, skipping" << endl ;
2691 oocoutI(_wspace,
ObjectHandling) <<
"RooWorkspace::CodeRepo::compileClasses() reusing code export directory " << dirName.c_str()
2692 <<
" to extract coded embedded in workspace" << endl ;
2695 oocoutI(_wspace,
ObjectHandling) <<
"RooWorkspace::CodeRepo::compileClasses() creating code export directory " << dirName.c_str()
2696 <<
" to extract coded embedded in workspace" << endl ;
2698 oocoutE(_wspace,
ObjectHandling) <<
"RooWorkspace::CodeRepo::compileClasses() ERROR creating code export directory " << dirName.c_str()
2699 <<
" to extract coded embedded in workspace" << endl ;
2708 if (!writeExtraHeaders) {
2709 writeExtraHeaders = true ;
2711 map<TString,ExtraHeader>::iterator eiter = _ehmap.begin() ;
2712 while(eiter!=_ehmap.end()) {
2715 bool needEHWrite=true ;
2716 string fdname =
Form(
"%s/%s",dirName.c_str(),eiter->second._hname.Data()) ;
2717 ifstream ifdecl(fdname.c_str()) ;
2721 while (ifdecl.getline(buf, 64000)) {
2726 UInt_t crcWS = crc32(eiter->second._hfile.Data());
2727 needEHWrite = (crcFile != crcWS);
2732 oocoutI(_wspace,
ObjectHandling) <<
"RooWorkspace::CodeRepo::compileClasses() Extracting extra header file "
2738 ofstream fdecl(fdname.c_str());
2740 oocoutE(_wspace,
ObjectHandling) <<
"RooWorkspace::CodeRepo::compileClasses() ERROR opening file " << fdname
2741 <<
" for writing" << endl;
2744 fdecl << eiter->second._hfile.Data();
2753 ClassFiles& cfinfo = _fmap[iter->second._fileBase] ;
2755 oocxcoutD(_wspace,
ObjectHandling) <<
"RooWorkspace::CodeRepo::compileClasses() now processing file with base " << iter->second._fileBase << endl ;
2759 oocxcoutD(_wspace,
ObjectHandling) <<
"RooWorkspace::CodeRepo::compileClasses() file with base name " << iter->second._fileBase
2760 <<
" has already been extracted, skipping to next class" << endl ;
2765 bool needDeclWrite=true ;
2766 string fdname =
Form(
"%s/%s.%s",dirName.c_str(),iter->second._fileBase.Data(),cfinfo.
_hext.
Data()) ;
2767 ifstream ifdecl(fdname.c_str()) ;
2771 while (ifdecl.getline(buf, 64000)) {
2777 needDeclWrite = (crcFile!=crcWS) ;
2781 if (needDeclWrite) {
2782 oocoutI(_wspace,
ObjectHandling) <<
"RooWorkspace::CodeRepo::compileClasses() Extracting declaration code of class " << iter->first <<
", file " << fdname << endl ;
2783 ofstream fdecl(fdname.c_str()) ;
2786 << fdname <<
" for writing" << endl ;
2794 bool needImplWrite=true ;
2795 string finame =
Form(
"%s/%s.cxx",dirName.c_str(),iter->second._fileBase.Data()) ;
2796 ifstream ifimpl(finame.c_str()) ;
2800 while (ifimpl.getline(buf, 64000)) {
2806 needImplWrite = (crcFile!=crcWS) ;
2810 if (needImplWrite) {
2811 oocoutI(_wspace,
ObjectHandling) <<
"RooWorkspace::CodeRepo::compileClasses() Extracting implementation code of class " << iter->first <<
", file " << finame << endl ;
2812 ofstream fimpl(finame.c_str()) ;
2815 << finame <<
" for writing" << endl ;
2824 oocxcoutD(_wspace,
ObjectHandling) <<
"RooWorkspace::CodeRepo::compileClasses() marking code unit " << iter->second._fileBase <<
" as extracted" << endl ;
2827 oocoutI(_wspace,
ObjectHandling) <<
"RooWorkspace::CodeRepo::compileClasses() Compiling code unit " << iter->second._fileBase.Data() <<
" to define class " << iter->first << endl ;
2831 oocoutE(_wspace,
ObjectHandling) <<
"RooWorkspace::CodeRepo::compileClasses() ERROR compiling class " << iter->first.Data() <<
", to fix this you can do the following: " << endl
2832 <<
" 1) Fix extracted source code files in directory " << dirName.c_str() <<
"/" << endl
2833 <<
" 2) In clean ROOT session compiled fixed classes by hand using '.x " << dirName.c_str() <<
"/ClassName.cxx+'" << endl
2834 <<
" 3) Reopen file with RooWorkspace with broken source code in UPDATE mode. Access RooWorkspace to force loading of class" << endl
2835 <<
" Broken instances in workspace will _not_ be compiled, instead precompiled fixed instances will be used." << endl
2836 <<
" 4) Reimport fixed code in workspace using 'RooWorkspace::importClassCode(\"*\",true)' method, Write() updated workspace to file and close file" << endl
2837 <<
" 5) Reopen file in clean ROOT session to confirm that problems are fixed" << endl ;
2864 coutE(
ObjectHandling) <<
"RooWorkspace::WSDir::Add(" <<
GetName() <<
") ERROR: Directory is read-only representation of a RooWorkspace, use RooWorkspace::import() to add objects" << endl ;
2866 InternalAppend(
obj) ;
2877 coutE(
ObjectHandling) <<
"RooWorkspace::WSDir::Add(" <<
GetName() <<
") ERROR: Directory is read-only representation of a RooWorkspace, use RooWorkspace::import() to add objects" << endl ;
2879 InternalAppend(
obj) ;
2891 if (removedObj ==
_dir)
_dir =
nullptr;
2902 std::vector<std::string> invalidSets;
2905 auto const& setName =
c.first;
2906 auto&
set =
c.second;
2907 std::size_t oldSize =
set.
size();
2912 if(
set.
size() < oldSize && isCacheSet(setName)) {
2913 invalidSets.emplace_back(setName);
2918 for(std::string
const& setName : invalidSets) {
R__EXTERN TClassTable * gClassTable
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
TClass * IsA() const override
char * Form(const char *fmt,...)
Formats a string in a circular formatting buffer.
R__EXTERN TSystem * gSystem
RooAbsArg is the common abstract base class for objects that represent a value and a "shape" in RooFi...
void setStringAttribute(const Text_t *key, const Text_t *value)
Associate string 'value' to this object under key 'key'.
static void ioStreamerPass2Finalize()
Method called by workspace container to finalize schema evolution issues that cannot be handled in a ...
void SetName(const char *name) override
Set the name of the TNamed.
const Text_t * getStringAttribute(const Text_t *key) const
Get string attribute mapped under key 'key'.
RooArgSet * getVariables(bool stripDisconnected=true) const
Return RooArgSet with all variables (tree leaf nodes of expresssion tree)
bool getAttribute(const Text_t *name) const
Check if a named attribute is set. By default, all attributes are unset.
void setAttribute(const Text_t *name, bool value=true)
Set (default) or clear a named boolean attribute of this object.
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.
virtual bool isFundamental() const
Is this object a fundamental type that can be added to a dataset? Fundamental-type subclasses overrid...
A space to attach TBranches.
virtual void removeAll()
Remove all arguments from our set, deleting them if we own them.
virtual bool remove(const RooAbsArg &var, bool silent=false, bool matchByNameOnly=false)
Remove the specified argument from our list.
virtual bool add(const RooAbsArg &var, bool silent=false)
Add the specified argument to list.
void RecursiveRemove(TObject *obj) override
If one of the TObject we have a referenced to is deleted, remove the reference.
void assign(const RooAbsCollection &other) const
Sets the value, cache and constant attribute of any argument in our set that also appears in the othe...
Storage_t::size_type size() const
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.
bool selectCommon(const RooAbsCollection &refColl, RooAbsCollection &outColl) const
Create a subset of the current collection, consisting only of those elements that are contained as we...
void useHashMapForFind(bool flag) const
void setName(const char *name)
RooAbsArg * find(const char *name) const
Find object with given name in list.
RooAbsData is the common abstract base class for binned and unbinned datasets.
virtual const RooArgSet * get() const
virtual bool changeObservableName(const char *from, const char *to)
RooAbsOptTestStatistic is the abstract base class for test statistics objects that evaluate a functio...
const char * sealNotice() const
RooAbsReal is the common abstract base class for objects that represent a real value and implements f...
RooAbsStudy is an abstract base class for RooStudyManager modules.
TObject * Clone(const char *newname="") const override
Make a clone of an object using the Streamer facility.
RooArgSet is a container object that can hold multiple RooAbsArg objects.
RooArgSet * snapshot(bool deepCopy=true) const
Use RooAbsCollection::snapshot(), but return as RooArgSet.
bool containsInstance(const RooAbsArg &var) const override
Check if this exact instance is in this collection.
RooCategory is an object to represent discrete states.
RooCmdArg is a named container for two doubles, two integers two object points and three string point...
Class RooCmdConfig is a configurable parser for RooCmdArg named arguments.
RooExpensiveObjectCache is a singleton class that serves as repository for objects that are expensive...
void importCacheObjects(RooExpensiveObjectCache &other, const char *ownerName, bool verbose=false)
RooLinkedList is an collection class for internal use, storing a collection of RooAbsArg pointers in ...
void RecursiveRemove(TObject *obj) override
If one of the TObject we have a referenced to is deleted, remove the reference.
bool Replace(const TObject *oldArg, const TObject *newArg)
Replace object 'oldArg' in collection with new object 'newArg'.
Int_t getHashTableSize() const
void Delete(Option_t *o=nullptr) override
Remove all elements in collection and delete all elements NB: Collection does not own elements,...
TObject * find(const char *name) const
Return pointer to object with given name in collection.
virtual void Add(TObject *arg)
void setHashTableSize(Int_t size)
Change the threshold for hash-table use to given size.
TObject * FindObject(const char *name) const override
Return pointer to obejct with given name.
virtual bool Remove(TObject *arg)
Remove object from collection.
static RooMsgService & instance()
Return reference to singleton instance.
void setGlobalKillBelow(RooFit::MsgLevel level)
RooFit::MsgLevel globalKillBelow() const
static bool setAddDirectoryStatus(bool flag)
Configure whether new instances of RooPlot will add themselves to gDirectory.
RooRealVar represents a variable that can be changed from the outside.
RooResolutionModel is the base class for PDFs that represent a resolution model that can be convolute...
The RooStringView is a wrapper around a C-syle string that can also be constructed from a std::string...
RooInt is a minimal implementation of a TNamed holding a TObject.
An interface to set and retrieve a workspace.
virtual void ReplaceWS(RooWorkspace *ws)=0
Set the workspace irrespective of what the previous workspace is.
std::map< TString, ExtraHeader > _ehmap
void Streamer(TBuffer &) override
Custom streamer for the workspace.
std::string listOfClassNames() const
Return STL string with last of class names contained in the code repository.
bool autoImportClass(TClass *tc, bool doReplace=false)
Import code of class 'tc' into the repository.
bool compileClasses()
For all classes in the workspace for which no class definition is found in the ROOT class table extra...
std::map< TString, ClassRelInfo > _c2fmap
std::map< TString, ClassFiles > _fmap
void InternalAppend(TObject *obj)
Internal access to TDirectory append method.
void Add(TObject *, bool) override
Overload TDirectory interface method to prohibit insertion of objects in read-only directory workspac...
TClass * IsA() const override
void Append(TObject *, bool) override
Overload TDirectory interface method to prohibit insertion of objects in read-only directory workspac...
The RooWorkspace is a persistable container for RooFit projects.
RooExpensiveObjectCache _eocache
Cache for expensive objects.
TObject * obj(RooStringView name) const
Return any type of object (RooAbsArg, RooAbsData or generic object) with given name)
RooLinkedList _genObjects
List of generic objects.
static std::list< std::string > _classDeclDirList
const RooArgSet * getSnapshot(const char *name) const
Return the RooArgSet containing a snapshot of variables contained in the workspace.
static void addClassDeclImportDir(const char *dir)
Add dir to search path for class declaration (header) files.
void Print(Option_t *opts=nullptr) const override
Print contents of the workspace.
RooLinkedList _dataList
List of owned datasets.
RooAbsCategory * catfunc(RooStringView name) const
Retrieve discrete function (RooAbsCategory) with given name. A null pointer is returned if not found.
WSDir * _dir
! Transient ROOT directory representation of workspace
static void addClassImplImportDir(const char *dir)
Add dir to search path for class implementation (.cxx) files.
RooAbsPdf * pdf(RooStringView name) const
Retrieve p.d.f (RooAbsPdf) with given name. A null pointer is returned if not found.
std::map< std::string, RooArgSet > _namedSets
Map of named RooArgSets.
RooAbsData * embeddedData(RooStringView name) const
Retrieve dataset (binned or unbinned) with given name. A null pointer is returned if not found.
RooCategory * cat(RooStringView name) const
Retrieve discrete variable (RooCategory) with given name. A null pointer is returned if not found.
void clearStudies()
Remove all RooStudyManager modules.
bool renameSet(const char *name, const char *newName)
Rename set to a new name.
std::unique_ptr< RooFactoryWSTool > _factory
! Factory tool associated with workspace
RooArgSet allVars() const
Return set with all variable objects.
RooArgSet argSet(RooStringView nameList) const
Return set of RooAbsArgs matching to given list of names.
bool writeToFile(const char *fileName, bool recreate=true)
Save this current workspace into given file.
bool cd(const char *path=nullptr)
bool import(const RooAbsArg &arg, const RooCmdArg &arg1=RooCmdArg(), const RooCmdArg &arg2=RooCmdArg(), const RooCmdArg &arg3=RooCmdArg(), const RooCmdArg &arg4=RooCmdArg(), const RooCmdArg &arg5=RooCmdArg(), const RooCmdArg &arg6=RooCmdArg(), const RooCmdArg &arg7=RooCmdArg(), const RooCmdArg &arg8=RooCmdArg(), const RooCmdArg &arg9=RooCmdArg())
Import a RooAbsArg object, e.g.
RooArgSet allCats() const
Return set with all category objects.
void RecursiveRemove(TObject *obj) override
If one of the TObject we have a referenced to is deleted, remove the reference.
RooAbsArg * fundArg(RooStringView name) const
Return fundamental (i.e.
RooLinkedList _views
List of model views.
~RooWorkspace() override
Workspace destructor.
bool cancelTransaction()
Cancel an ongoing import transaction.
bool startTransaction()
Open an import transaction operations.
RooArgSet allResolutionModels() const
Return set with all resolution model objects.
RooLinkedList _snapshots
List of parameter snapshots.
bool saveSnapshot(RooStringView, const char *paramNames)
Save snapshot of values and attributes (including "Constant") of given parameters.
RooArgSet allPdfs() const
Return set with all probability density function objects.
void Streamer(TBuffer &) override
Stream an object of class RooWorkspace.
TObject * genobj(RooStringView name) const
Return generic object with given name.
std::list< RooAbsData * > allData() const
Return list of all dataset in the workspace.
RooLinkedList _studyMods
List if StudyManager modules.
std::list< TObject * > allGenericObjects() const
Return list of all generic objects in the workspace.
static void setClassFileExportDir(const char *dir=nullptr)
Specify the name of the directory in which embedded source code is unpacked and compiled.
bool importClassCode(const char *pat="*", bool doReplace=false)
Inport code of all classes in the workspace that have a class name that matches pattern 'pat' and whi...
bool makeDir()
Create transient TDirectory representation of this workspace.
RooArgSet allCatFunctions() const
Return set with all category function objects.
static std::string _classFileExportDir
static std::list< std::string > _classImplDirList
RooAbsReal * function(RooStringView name) const
Retrieve function (RooAbsReal) with given name. Note that all RooAbsPdfs are also RooAbsReals....
RooAbsArg * arg(RooStringView name) const
Return RooAbsArg with given name. A null pointer is returned if none is found.
RooWorkspace()
Default constructor.
bool removeSet(const char *name)
Remove a named set from the workspace.
RooArgSet allFunctions() const
Return set with all function objects.
RooFactoryWSTool & factory()
Return instance to factory tool.
bool extendSet(const char *name, const char *newContents)
Define a named set in the work space through a comma separated list of names of objects already in th...
RooExpensiveObjectCache & expensiveObjectCache()
RooArgSet _sandboxNodes
! Sandbox for incoming objects in a transaction
bool defineSetInternal(const char *name, const RooArgSet &aset)
bool _openTrans
! Is there a transaction open?
RooRealVar * var(RooStringView name) const
Retrieve real-valued variable (RooRealVar) with given name. A null pointer is returned if not found.
bool addStudy(RooAbsStudy &study)
Insert RooStudyManager module.
static void autoImportClassCode(bool flag)
If flag is true, source code of classes not the ROOT distribution is automatically imported if on obj...
RooLinkedList _embeddedDataList
List of owned datasets that are embedded in pdfs.
RooArgSet _allOwnedNodes
List of owned pdfs and components.
RooAbsData * data(RooStringView name) const
Retrieve dataset (binned or unbinned) with given name. A null pointer is returned if not found.
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...
std::list< RooAbsData * > allEmbeddedData() const
Return list of all dataset in the workspace.
bool loadSnapshot(const char *name)
Load the values and attributes of the parameters in the snapshot saved with the given name.
bool defineSet(const char *name, const RooArgSet &aset, bool importMissing=false)
Define a named RooArgSet with given constituents.
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
static DictFuncPtr_t GetDict(const char *cname)
Given the class name returns the Dictionary() function of a class (uses hash of name).
TClass instances represent classes, structs and namespaces in the ROOT type system.
const char * GetImplFileName() const
TList * GetListOfBases()
Return list containing the TBaseClass(es) of a class.
Long_t Property() const override
Returns the properties of the TClass as a bit field stored as a Long_t value.
Bool_t HasDefaultConstructor(Bool_t testio=kFALSE) const
Return true if we have access to a constructor usable for I/O.
const char * GetDeclFileName() const
Return name of the file containing the declaration of this class.
Bool_t cd() override
Change current directory to "this" directory.
virtual void Append(TObject *obj, Bool_t replace=kFALSE)
Append object to this directory.
A ROOT file is a suite of consecutive data records (TKey instances) with a well defined format.
static TFile * Open(const char *name, Option_t *option="", const char *ftitle="", Int_t compress=ROOT::RCompressionSetting::EDefaults::kUseCompiledDefault, Int_t netopt=0)
Create / open a file.
static void AddDirectory(Bool_t add=kTRUE)
Sets the flag controlling the automatic add of histograms in memory.
The TNamed class is the base class for all named ROOT classes.
TObject * Clone(const char *newname="") const override
Make a clone of an object using the Streamer facility.
virtual void SetTitle(const char *title="")
Set the title of the TNamed.
const char * GetName() const override
Returns name of object.
const char * GetTitle() const override
Returns title of object.
Mother of all ROOT objects.
virtual const char * GetName() const
Returns name of object.
virtual void RecursiveRemove(TObject *obj)
Recursively remove this object from a list.
virtual TObject * Clone(const char *newname="") const
Make a clone of an object using the Streamer facility.
virtual const char * ClassName() const
Returns name of class to which the object belongs.
virtual Int_t Write(const char *name=nullptr, Int_t option=0, Int_t bufsize=0)
Write this object to the current directory.
virtual TClass * IsA() const
Regular expression class.
const char * Data() const
virtual void Streamer(TBuffer &)
Stream a string object.
Ssiz_t Index(const char *pat, Ssiz_t i=0, ECaseCompare cmp=kExact) const
virtual const char * Getenv(const char *env)
Get environment variable.
virtual char * ConcatFileName(const char *dir, const char *name)
Concatenate a directory and a file name. User must delete returned string.
virtual int MakeDirectory(const char *name)
Make a directory.
virtual Bool_t AccessPathName(const char *path, EAccessMode mode=kFileExists)
Returns FALSE if one can access a file using the specified access mode.
virtual const char * BaseName(const char *pathname)
Base name of a file name. Base name of /user/root is root.
virtual int CompileMacro(const char *filename, Option_t *opt="", const char *library_name="", const char *build_dir="", UInt_t dirmode=0)
This method compiles and loads a shared library containing the code from the file "filename".
virtual TString GetDirName(const char *pathname)
Return the directory name in pathname.
void(* DirAutoAdd_t)(void *, TDirectory *)
std::vector< std::string > Split(std::string_view str, std::string_view delims, bool skipEmpty=false)
Splits a string at each character in delims.
MsgLevel
Verbosity level for RooMsgService::StreamConfig in RooMsgService.
static constexpr double pc