75#ifdef ROOFIT_LEGACY_EVAL_BACKEND
92bool isCacheSet(std::string
const& setName) {
94 return setName.rfind(
"CACHE_", 0) == 0;
193 TNamed(other), _uuid(other._uuid), _classes(other._classes,this)
202 for(
auto * snap : static_range_cast<RooArgSet*>(other.
_snapshots)) {
205 snapClone->
setName(snap->GetName()) ;
210 for (map<string,RooArgSet>::const_iterator iter3 = other.
_namedSets.begin() ; iter3 != other.
_namedSets.end() ; ++iter3) {
234 if(newname && std::string(newname) !=
GetName()) {
235 out->SetName(newname);
274 std::vector<std::string> tokens =
ROOT::Split(fileSpec,
":");
277 if (tokens.size() != 3) {
278 std::ostringstream stream;
279 for (
const auto& token : tokens) {
280 stream <<
"\n\t" << token;
282 coutE(InputArguments) <<
"RooWorkspace(" <<
GetName() <<
") ERROR in file specification, expecting 'filename:wsname:objname', but '" << fileSpec <<
"' given."
283 <<
"\nTokens read are:" << stream.str() << endl;
287 const std::string&
filename = tokens[0];
288 const std::string& wsname = tokens[1];
289 const std::string& objname = tokens[2];
294 coutE(InputArguments) <<
"RooWorkspace(" <<
GetName() <<
") ERROR opening file " <<
filename << endl ;
301 coutE(InputArguments) <<
"RooWorkspace(" <<
GetName() <<
") ERROR: No object named " << wsname <<
" in file " <<
filename
302 <<
" or object is not a RooWorkspace" << endl ;
309 bool ret =
import(*warg,arg1,arg2,arg3,arg4,arg5,arg6,arg7,arg8,arg9) ;
314 bool ret =
import(*wdata,arg1,arg2,arg3,arg4,arg5,arg6,arg7,arg8,arg9) ;
318 coutE(InputArguments) <<
"RooWorkspace(" <<
GetName() <<
") ERROR: No RooAbsArg or RooAbsData object named " << objname
319 <<
" in workspace " << wsname <<
" in file " <<
filename << endl ;
335 ret |=
import(*oneArg,arg1,arg2,arg3,arg4,arg5,arg6,arg7,arg8,arg9) ;
387 pc.
defineString(
"conflictSuffix",
"RenameConflictNodes",0) ;
388 pc.
defineInt(
"renameConflictOrig",
"RenameConflictNodes",0,0) ;
390 pc.
defineString(
"allVarsSuffix",
"RenameAllVariables",0) ;
391 pc.
defineString(
"allVarsExcept",
"RenameAllVariables",1) ;
395 pc.
defineInt(
"useExistingNodes",
"RecycleConflictNodes",0,0) ;
397 pc.
defineInt(
"noRecursion",
"NoRecursion",0,0) ;
398 pc.
defineMutex(
"RenameConflictNodes",
"RenameAllNodes") ;
399 pc.
defineMutex(
"RenameConflictNodes",
"RecycleConflictNodes") ;
400 pc.
defineMutex(
"RenameAllNodes",
"RecycleConflictNodes") ;
401 pc.
defineMutex(
"RenameVariable",
"RenameAllVariables") ;
410 const char* suffixC = pc.
getString(
"conflictSuffix") ;
411 const char* suffixA = pc.
getString(
"allSuffix") ;
412 const char* suffixV = pc.
getString(
"allVarsSuffix") ;
413 const char* exceptVars = pc.
getString(
"allVarsExcept") ;
414 const char* varChangeIn = pc.
getString(
"varChangeIn") ;
415 const char* varChangeOut = pc.
getString(
"varChangeOut") ;
416 bool renameConflictOrig = pc.
getInt(
"renameConflictOrig") ;
417 Int_t useExistingNodes = pc.
getInt(
"useExistingNodes") ;
423 if (suffixC && strlen(suffixC)==0) suffixC = nullptr ;
424 if (suffixA && strlen(suffixA)==0) suffixA = nullptr ;
426 bool conflictOnly = suffixA ? false : true ;
427 const char* suffix = suffixA ? suffixA : suffixC ;
430 std::map<string,string> varMap ;
431 if (strlen(varChangeIn)>0) {
434 const std::vector<std::string> tokIn =
ROOT::Split(varChangeIn,
", ",
true);
435 const std::vector<std::string> tokOut =
ROOT::Split(varChangeOut,
", ",
true);
436 for (
unsigned int i=0; i < tokIn.size(); ++i) {
437 varMap.insert(std::make_pair(tokIn[i], tokOut[i]));
440 assert(tokIn.size() == tokOut.size());
445 std::set<string> exceptVarNames ;
446 if (exceptVars && strlen(exceptVars)) {
447 const std::vector<std::string> toks =
ROOT::Split(exceptVars,
", ",
true);
448 exceptVarNames.insert(toks.begin(), toks.end());
451 if (suffixV !=
nullptr && strlen(suffixV)>0) {
453 for (
const auto v : *vars) {
454 if (exceptVarNames.find(
v->GetName())==exceptVarNames.end()) {
455 varMap[
v->GetName()] =
Form(
"%s_%s",
v->GetName(),suffixV) ;
466 bool factoryMatch = (tagIn && tagWs && !strcmp(tagIn,tagWs)) ;
468 ((
RooAbsArg&)inArg).setAttribute(
"RooWorkspace::Recycle") ;
471 if (!suffix && wsarg && !useExistingNodes && !(inArg.
isFundamental() && !varMap[inArg.
GetName()].empty())) {
474 coutE(ObjectHandling) <<
"RooWorkSpace::import(" <<
GetName() <<
") ERROR importing object named " << inArg.
GetName()
475 <<
": another instance with same name already in the workspace and no conflict resolution protocol specified" << endl ;
479 coutI(ObjectHandling) <<
"RooWorkSpace::import(" <<
GetName() <<
") Object " << inArg.
GetName() <<
" is already in workspace!" << endl ;
485 coutI(ObjectHandling) <<
"RooWorkSpace::import(" <<
GetName() <<
") Recycling existing object " << inArg.
GetName() <<
" created with identical factory specification" << endl ;
494 branchSet.
add(inArg) ;
499 for (
const auto branch : branchSet) {
501 if (wsbranch && wsbranch!=branch && !branch->
getAttribute(
"RooWorkspace::Recycle") && !useExistingNodes) {
502 conflictNodes.
add(*branch) ;
507 if (!conflictNodes.
empty() && !suffix && !useExistingNodes) {
508 coutE(ObjectHandling) <<
"RooWorkSpace::import(" <<
GetName() <<
") ERROR object named " << inArg.
GetName() <<
": component(s) "
509 << conflictNodes <<
" already in the workspace and no conflict resolution protocol specified" << endl ;
522 conflictNodes.
add(branchSet) ;
526 string topName2 = cloneTop->
GetName() ;
527 if (!renameConflictOrig) {
529 for (
const auto cnode : conflictNodes) {
531 string origName = cnode2->
GetName() ;
534 string tag =
Form(
"ORIGNAME:%s",origName.c_str()) ;
541 if (cnode2==cloneTop) {
546 coutI(ObjectHandling) <<
"RooWorkspace::import(" <<
GetName()
547 <<
") Resolving name conflict in workspace by changing name of imported node "
548 << origName <<
" to " << cnode2->
GetName() << endl ;
554 for (
const auto cnode : conflictNodes) {
556 string origName = cnode->GetName() ;
565 wsnode->
SetName(
Form(
"%s_%s",cnode->GetName(),suffix)) ;
566 wsnode->
SetTitle(
Form(
"%s (%s)",cnode->GetTitle(),suffix)) ;
569 for (
unsigned int n=1;
true; ++
n) {
570 string newname =
Form(
"%s_%s_%d",cnode->GetName(),suffix,
n) ;
572 wsnode->
SetName(newname.c_str()) ;
573 wsnode->
SetTitle(
Form(
"%s (%s %d)",cnode->GetTitle(),suffix,
n)) ;
579 coutI(ObjectHandling) <<
"RooWorkspace::import(" <<
GetName()
580 <<
") Resolving name conflict in workspace by changing name of original node "
581 << origName <<
" to " << wsnode->
GetName() << endl ;
584 coutW(ObjectHandling) <<
"RooWorkspace::import(" <<
GetName() <<
") Internal error: expected to find existing node "
585 << origName <<
" to be renamed, but didn't find it..." << endl ;
592 if (strlen(varChangeIn)>0 || (suffixV && strlen(suffixV)>0)) {
595 for (
const auto cnode : cloneSet) {
597 if (varMap.find(cnode->GetName())!=varMap.end()) {
598 string origName = cnode->GetName() ;
599 cnode->SetName(varMap[cnode->GetName()].c_str()) ;
600 string tag =
Form(
"ORIGNAME:%s",origName.c_str()) ;
601 cnode->setAttribute(tag.c_str()) ;
602 if (!cnode->getStringAttribute(
"origName")) {
603 cnode->setStringAttribute(
"origName",origName.c_str()) ;
607 coutI(ObjectHandling) <<
"RooWorkspace::import(" <<
GetName() <<
") Changing name of variable "
608 << origName <<
" to " << cnode->GetName() <<
" on request" << endl ;
611 if (cnode==cloneTop) {
612 topName2 = cnode->GetName() ;
628 for (
const auto branch2 : branchSet2) {
630 conflictNodes2.
add(*branch2) ;
635 if (!conflictNodes2.
empty()) {
636 coutE(ObjectHandling) <<
"RooWorkSpace::import(" <<
GetName() <<
") ERROR object named " << inArg.
GetName() <<
": component(s) "
637 << conflictNodes2 <<
" cause naming conflict after conflict resolution protocol was executed" << endl ;
642 for (
const auto node : cloneSet2) {
643 if (node->importWorkspaceHook(*
this)) {
644 coutE(ObjectHandling) <<
"RooWorkSpace::import(" <<
GetName() <<
") ERROR object named " << node->
GetName()
645 <<
" has an error in importing in one or more of its auxiliary objects, aborting" << endl ;
652 for (
const auto node : cloneSet2) {
655 coutW(ObjectHandling) <<
"RooWorkspace::import(" <<
GetName() <<
") WARNING: problems import class code of object "
656 << node->
ClassName() <<
"::" << node->GetName() <<
", reading of workspace will require external definition of class" << endl ;
662 node->setExpensiveObjectCache(
_eocache) ;
670 if (!silence && useExistingNodes) {
671 coutI(ObjectHandling) <<
"RooWorkspace::import(" <<
GetName() <<
") using existing copy of " << node->
ClassName()
672 <<
"::" << node->GetName() <<
" for import of " << cloneTop2->
ClassName() <<
"::"
673 << cloneTop2->
GetName() << endl ;
678 nodesToBeDeleted.
addOwned(std::unique_ptr<RooAbsArg>{node});
685 coutI(ObjectHandling) <<
"RooWorkspace::import(" <<
GetName() <<
") importing " << node->ClassName() <<
"::"
686 << node->GetName() << endl ;
689 node->setWorkspace(*
this);
701 if (!recycledNodes.
empty()) {
702 for (
const auto node : cloneSet2) {
703 node->redirectServers(recycledNodes) ;
748 pc.
defineInt(
"embedded",
"Embedded",0,0) ;
758 const char* dsetName = pc.
getString(
"dsetName") ;
759 const char* varChangeIn = pc.
getString(
"varChangeIn") ;
760 const char* varChangeOut = pc.
getString(
"varChangeOut") ;
761 bool embedded = pc.
getInt(
"embedded") ;
765 coutI(ObjectHandling) <<
"RooWorkspace::import(" <<
GetName() <<
") importing dataset " << inData.
GetName() << endl ;
768 if (dsetName && strlen(dsetName)==0) {
779 if (dsetName && dataList.
FindObject(dsetName)) {
780 coutE(ObjectHandling) <<
"RooWorkspace::import(" <<
GetName() <<
") ERROR dataset with name " << dsetName <<
" already exists in workspace, import aborted" << endl ;
784 coutE(ObjectHandling) <<
"RooWorkspace::import(" <<
GetName() <<
") ERROR dataset with name " << inData.
GetName() <<
" already exists in workspace, import aborted" << endl ;
792 coutI(ObjectHandling) <<
"RooWorkSpace::import(" <<
GetName() <<
") changing name of dataset from " << inData.
GetName() <<
" to " << dsetName << endl ;
800 if (strlen(varChangeIn)>0) {
802 const std::vector<std::string> tokIn =
ROOT::Split(varChangeIn,
",");
803 const std::vector<std::string> tokOut =
ROOT::Split(varChangeOut,
",");
804 for (
unsigned int i=0; i < tokIn.size(); ++i) {
806 coutI(ObjectHandling) <<
"RooWorkSpace::import(" <<
GetName() <<
") changing name of dataset observable " << tokIn[i] <<
" to " << tokOut[i] << endl ;
807 clone->changeObservableName(tokIn[i].c_str(), tokOut[i].c_str());
814 if (!
arg(carg->GetName())) {
847 coutW(InputArguments) <<
"RooWorkspace::defineSet(" <<
GetName() <<
") WARNING redefining previously defined named set " <<
name << endl ;
855 if (!
arg(sarg->GetName())) {
859 coutE(InputArguments) <<
"RooWorkspace::defineSet(" <<
GetName() <<
") ERROR set constituent \"" << sarg->
GetName()
860 <<
"\" is not in workspace and importMissing option is disabled" << endl ;
864 wsargs.
add(*
arg(sarg->GetName())) ;
885 coutW(InputArguments) <<
"RooWorkspace::defineSet(" <<
GetName()
886 <<
") WARNING redefining previously defined named set " <<
name << endl;
905 coutW(InputArguments) <<
"RooWorkspace::defineSet(" <<
GetName() <<
") WARNING redefining previously defined named set " <<
name << endl ;
911 for (
const std::string& token :
ROOT::Split(contentList,
",")) {
913 if (!
arg(token.c_str())) {
914 coutE(InputArguments) <<
"RooWorkspace::defineSet(" <<
GetName() <<
") ERROR proposed set constituent \"" << token
915 <<
"\" is not in workspace" << endl ;
918 wsargs.
add(*
arg(token.c_str())) ;
940 for (
const std::string& token :
ROOT::Split(newContents,
",")) {
942 if (!
arg(token.c_str())) {
943 coutE(InputArguments) <<
"RooWorkspace::defineSet(" <<
GetName() <<
") ERROR proposed set constituent \"" << token
944 <<
"\" is not in workspace" << endl ;
947 wsargs.
add(*
arg(token.c_str())) ;
965 return (i!=
_namedSets.end()) ? &(i->second) :
nullptr;
978 coutE(InputArguments) <<
"RooWorkspace::renameSet(" <<
GetName() <<
") ERROR a set with name " <<
name
979 <<
" does not exist" << endl ;
985 coutE(InputArguments) <<
"RooWorkspace::renameSet(" <<
GetName() <<
") ERROR a set with name " << newName
986 <<
" already exists" << endl ;
1009 coutE(InputArguments) <<
"RooWorkspace::removeSet(" <<
GetName() <<
") ERROR a set with name " <<
name
1010 <<
" does not exist" << endl ;
1116 TString className = carg->ClassName() ;
1118 coutW(ObjectHandling) <<
"RooWorkspace::import(" <<
GetName() <<
") WARNING: problems import class code of object "
1119 << carg->ClassName() <<
"::" << carg->GetName() <<
", reading of workspace will require external definition of class" << endl ;
1160 snapshot->assign(params) ;
1164 coutI(ObjectHandling) <<
"RooWorkspace::saveSnapshot(" <<
GetName() <<
") replacing previous snapshot with name " <<
name << endl ;
1184 coutE(ObjectHandling) <<
"RooWorkspace::loadSnapshot(" <<
GetName() <<
") no snapshot with name " <<
name <<
" is available" << endl ;
1190 actualParams.
assign(*snap) ;
1272 for (
const std::string& token :
ROOT::Split(nameList,
",")) {
1277 std::stringstream ss;
1278 ss <<
" RooWorkspace::argSet(" <<
GetName() <<
") no RooAbsArg named \"" << token <<
"\" in workspace" ;
1279 const std::string errorMsg = ss.str();
1280 coutE(InputArguments) << errorMsg << std::endl;
1281 throw std::runtime_error(errorMsg);
1444 std::list<RooAbsData*> ret ;
1445 for(
auto * dat : static_range_cast<RooAbsData*>(
_dataList)) {
1446 ret.push_back(dat) ;
1457 std::list<RooAbsData*> ret ;
1459 ret.push_back(dat) ;
1471 std::list<TObject*> ret ;
1475 if (gobj->IsA()==RooTObjWrap::Class()) {
1476 ret.push_back(((RooTObjWrap*)gobj)->obj()) ;
1478 ret.push_back(gobj) ;
1510 if (mapEntry && strlen(mapEntry)>0) {
1520 if (implfile.empty() || declfile.empty()) {
1521 oocoutE(
_wspace,ObjectHandling) <<
"RooWorkspace::CodeRepo(" <<
_wspace->
GetName() <<
") ERROR: cannot retrieve code file names for class "
1522 << tc->
GetName() <<
" through ROOT TClass interface, unable to import code" << endl ;
1538 << tc->
GetName() <<
" : it cannot be persisted because it doesn't have a default constructor. Please fix " << endl ;
1545 std::string declpath;
1546 std::string implpath;
1569 if (declpath.empty()) {
1571 << tc->
GetName() <<
" because header file " << declfile <<
" is not found in current directory nor in $ROOTSYS" ;
1585 ooccoutW(
_wspace,ObjectHandling) <<
". To fix this problem, add the required directory to the search "
1586 <<
"path using RooWorkspace::addClassDeclImportDir(const char* dir)" << endl ;
1614 if (implpath.empty()) {
1616 << tc->
GetName() <<
" because implementation file " << implfile <<
" is not found in current directory nor in $ROOTSYS" ;
1630 ooccoutW(
_wspace,ObjectHandling) <<
". To fix this problem add the required directory to the search "
1631 <<
"path using RooWorkspace::addClassImplImportDir(const char* dir)" << endl;
1649 const std::string declfilename = !declpath.empty() ?
gSystem->
BaseName(declpath.c_str())
1653 int dotpos2 = strrchr(declfilename.c_str(),
'.') - declfilename.c_str() ;
1654 string declfilebase = declfilename.substr(0,dotpos2) ;
1655 string declfileext = declfilename.substr(dotpos2+1) ;
1657 list<string> extraHeaders ;
1660 if (
_fmap.find(declfilebase) ==
_fmap.end()) {
1663 std::fstream fdecl(!declpath.empty() ? declpath.c_str() : declfile.c_str());
1668 <<
") ERROR opening declaration file " << declfile << endl ;
1673 <<
") importing code of class " << tc->
GetName()
1674 <<
" from " << (!implpath.empty() ? implpath.c_str() : implfile.c_str())
1675 <<
" and " << (!declpath.empty() ? declpath.c_str() : declfile.c_str()) << endl ;
1680 while(fdecl.getline(buf,1023)) {
1683 bool processedInclude = false ;
1684 char* extincfile = nullptr ;
1687 if (strstr(buf,
"#include")) {
1690 strlcpy(tmp, buf, 64000);
1691 bool stdinclude = strchr(buf,
'<');
1692 strtok(tmp,
" <\"");
1693 char *incfile = strtok(
nullptr,
" <>\"");
1698 hpath +=
"/include/";
1702 <<
") scheduling include file " << incfile <<
" for import" << endl;
1703 extraHeaders.push_back(incfile);
1704 extincfile = incfile;
1705 processedInclude =
true;
1710 if (processedInclude) {
1711 decl +=
"// external include file below retrieved from workspace code storage\n" ;
1712 decl +=
Form(
"#include \"%s\"\n",extincfile) ;
1720 fstream fimpl(!implpath.empty() ? implpath.c_str() : implfile.c_str()) ;
1725 <<
") ERROR opening implementation file " << implfile << endl ;
1732 while(fimpl.getline(buf,1023)) {
1736 bool foundSelfInclude=false ;
1737 bool processedInclude = false ;
1738 char* extincfile = nullptr ;
1741 if (strstr(buf,
"#include")) {
1744 strlcpy(tmp, buf, 64000);
1745 bool stdinclude = strchr(buf,
'<');
1746 strtok(tmp,
" <\"");
1747 char *incfile = strtok(
nullptr,
" <>\"");
1749 if (strstr(incfile, declfilename.c_str())) {
1750 foundSelfInclude =
true;
1753 if (!stdinclude && !foundSelfInclude) {
1756 hpath +=
"/include/";
1761 <<
") scheduling include file " << incfile <<
" for import" << endl;
1762 extraHeaders.push_back(incfile);
1763 extincfile = incfile;
1764 processedInclude =
true;
1771 if (foundSelfInclude) {
1774 impl +=
"// class declaration include file below retrieved from workspace code storage\n" ;
1775 impl +=
Form(
"#include \"%s.%s\"\n",declfilebase.c_str(),declfileext.c_str()) ;
1776 }
else if (processedInclude) {
1777 impl +=
"// external include file below retrieved from workspace code storage\n" ;
1778 impl +=
Form(
"#include \"%s\"\n",extincfile) ;
1786 _fmap[declfilebase]._hfile = decl ;
1787 _fmap[declfilebase]._cxxfile = impl ;
1788 _fmap[declfilebase]._hext = declfileext ;
1791 for (list<string>::iterator ehiter = extraHeaders.begin() ; ehiter != extraHeaders.end() ; ++ehiter ) {
1795 eh.
_hname = ehiter->c_str() ;
1796 fstream fehdr(ehiter->c_str()) ;
1799 while(fehdr.getline(buf2,1023)) {
1802 if (strstr(buf2,
"#include")) {
1805 strlcpy(tmp, buf2, 64000);
1806 bool stdinclude = strchr(buf,
'<');
1807 strtok(tmp,
" <\"");
1808 char *incfile = strtok(
nullptr,
" <>\"");
1813 hpath +=
"/include/";
1817 <<
") scheduling recursive include file " << incfile <<
" for import"
1819 extraHeaders.push_back(incfile);
1827 eh.
_hfile = ehimpl.c_str();
1829 _ehmap[ehiter->c_str()] = eh;
1837 <<
") code of class " << tc->
GetName()
1838 <<
" was already imported from " << (!implpath.empty() ? implpath : implfile)
1839 <<
" and " << (!declpath.empty() ? declpath.c_str() : declfile.c_str()) << std::endl;
1852 std::list<TClass*> bases ;
1853 for(
auto * base : static_range_cast<TBaseClass*>(*bl)) {
1854 if (baseNameList.
Length()>0) {
1855 baseNameList +=
"," ;
1857 baseNameList += base->GetClassPointer()->GetName() ;
1858 bases.push_back(base->GetClassPointer()) ;
1867 for(
TClass* bclass : bases) {
1887 if (
_dir)
return true ;
1889 std::string title=
"TDirectory representation of RooWorkspace " + std::string(
GetName());
1914 if (oldObj && !replaceExisting) {
1915 coutE(InputArguments) <<
"RooWorkspace::import(" <<
GetName() <<
") generic object with name "
1916 <<
object.
GetName() <<
" is already in workspace and replaceExisting flag is set to false" << endl ;
1922 object.IsA()->SetDirectoryAutoAdd(
nullptr);
1932 object.IsA()->SetDirectoryAutoAdd(func);
1954 if (oldObj && !replaceExisting) {
1955 coutE(InputArguments) <<
"RooWorkspace::import(" <<
GetName() <<
") generic object with name "
1956 << aliasName <<
" is already in workspace and replaceExisting flag is set to false" << endl ;
1961 auto wrapper =
new RooTObjWrap(
object.
Clone()) ;
1963 wrapper->setOwning(
true) ;
1964 wrapper->SetName(aliasName) ;
1965 wrapper->SetTitle(aliasName) ;
2009 if (ret)
return ret ;
2013 if (ret)
return ret ;
2030 if (!gobj)
return nullptr;
2033 if (gobj->
IsA()==RooTObjWrap::Class())
return ((RooTObjWrap*)gobj)->obj() ;
2055 TFile f(fileName,recreate?
"RECREATE":
"UPDATE") ;
2070 cxcoutD(ObjectHandling) <<
"INFO: Creating RooFactoryWSTool associated with this workspace" << endl ;
2071 _factory = make_unique<RooFactoryWSTool>(*
this);
2095 bool treeMode(
false) ;
2096 bool verbose(
false);
2097 if (
TString(opts).Contains(
"t")) {
2100 if (
TString(opts).Contains(
"v")) {
2104 cout << endl <<
"RooWorkspace(" <<
GetName() <<
") " <<
GetTitle() <<
" contents" << endl << endl ;
2124 if (!parg->hasClients()) {
2133 if (!parg->hasClients()) {
2134 funcSet.
add(*parg) ;
2141 if (!parg->hasClients()) {
2142 catfuncSet.
add(*parg) ;
2150 convResoSet.
add(*parg) ;
2152 resoSet.
add(*parg) ;
2165 funcSet.
add(*parg) ;
2170 catfuncSet.
add(*parg) ;
2188 if (!varSet.
empty()) {
2190 cout <<
"variables" << endl ;
2191 cout <<
"---------" << endl ;
2192 cout << varSet << endl ;
2196 if (!pdfSet.
empty()) {
2197 cout <<
"p.d.f.s" << endl ;
2198 cout <<
"-------" << endl ;
2202 parg->printComponentTree() ;
2211 if (!resoSet.
empty()) {
2212 cout <<
"analytical resolution models" << endl ;
2213 cout <<
"----------------------------" << endl ;
2222 if (!funcSet.
empty()) {
2223 cout <<
"functions" << endl ;
2224 cout <<
"--------" << endl ;
2228 parg->printComponentTree() ;
2236 if (!catfuncSet.
empty()) {
2237 cout <<
"category functions" << endl ;
2238 cout <<
"------------------" << endl ;
2242 parg->printComponentTree() ;
2251 cout <<
"datasets" << endl ;
2252 cout <<
"--------" << endl ;
2253 for(
auto * data2 : static_range_cast<RooAbsData*>(
_dataList)) {
2254 std::cout << data2->ClassName() <<
"::" << data2->GetName() << *data2->get() << std::endl;
2256 std::cout << std::endl ;
2260 cout <<
"embedded datasets (in pdfs and functions)" << endl ;
2261 cout <<
"-----------------------------------------" << endl ;
2263 cout << data2->ClassName() <<
"::" << data2->GetName() << *data2->get() << endl ;
2269 cout <<
"parameter snapshots" << endl ;
2270 cout <<
"-------------------" << endl ;
2271 for(
auto * snap : static_range_cast<RooArgSet*>(
_snapshots)) {
2272 cout << snap->GetName() <<
" = (" ;
2275 if (
first) {
first=false ; }
else { cout <<
"," ; }
2276 cout <<
a->GetName() <<
"=" ;
2277 a->printValue(cout) ;
2278 if (
a->isConstant()) {
2282 cout <<
")" << endl ;
2289 cout <<
"named sets" << endl ;
2290 cout <<
"----------" << endl ;
2291 for (map<string,RooArgSet>::const_iterator it =
_namedSets.begin() ; it !=
_namedSets.end() ; ++it) {
2292 if (verbose || !isCacheSet(it->first)) {
2293 cout << it->first <<
":" << it->second << endl;
2302 cout <<
"generic objects" << endl ;
2303 cout <<
"---------------" << endl ;
2305 if (gobj->IsA()==RooTObjWrap::Class()) {
2306 cout << ((RooTObjWrap*)gobj)->obj()->ClassName() <<
"::" << gobj->GetName() << endl ;
2308 cout << gobj->ClassName() <<
"::" << gobj->GetName() << endl ;
2316 cout <<
"study modules" << endl ;
2317 cout <<
"-------------" << endl ;
2319 cout << smobj->ClassName() <<
"::" << smobj->GetName() << endl ;
2326 cout <<
"embedded class code" << endl ;
2327 cout <<
"-------------------" << endl ;
2333 cout <<
"embedded precalculated expensive components" << endl ;
2334 cout <<
"-------------------------------------------" << endl ;
2366 _fmap[
name]._hext.Streamer(R__b) ;
2367 _fmap[
name]._hfile.Streamer(R__b) ;
2368 _fmap[
name]._cxxfile.Streamer(R__b) ;
2377 _c2fmap[
name]._baseName.Streamer(R__b) ;
2378 _c2fmap[
name]._fileBase.Streamer(R__b) ;
2388 _ehmap[
name]._hname.Streamer(R__b) ;
2389 _ehmap[
name]._hfile.Streamer(R__b) ;
2396 _compiledOK = !compileClasses() ;
2404 UInt_t count = _fmap.size() ;
2406 map<TString,ClassFiles>::iterator iter = _fmap.begin() ;
2407 while(iter!=_fmap.end()) {
2408 TString key_copy(iter->first) ;
2410 iter->second._hext.Streamer(R__b) ;
2411 iter->second._hfile.Streamer(R__b);
2412 iter->second._cxxfile.Streamer(R__b);
2418 count = _c2fmap.size() ;
2420 map<TString,ClassRelInfo>::iterator iter2 = _c2fmap.begin() ;
2421 while(iter2!=_c2fmap.end()) {
2422 TString key_copy(iter2->first) ;
2424 iter2->second._baseName.Streamer(R__b) ;
2425 iter2->second._fileBase.Streamer(R__b);
2430 count = _ehmap.size() ;
2432 map<TString,ExtraHeader>::iterator iter3 = _ehmap.begin() ;
2433 while(iter3!=_ehmap.end()) {
2434 TString key_copy(iter3->first) ;
2436 iter3->second._hname.Streamer(R__b) ;
2437 iter3->second._hfile.Streamer(R__b);
2463 node->ioStreamerPass2() ;
2470 node->setExpensiveObjectCache(
_eocache) ;
2471 node->setWorkspace(*
this);
2472#ifdef ROOFIT_LEGACY_EVAL_BACKEND
2476 cout <<
"RooWorkspace::Streamer(" <<
GetName() <<
") " << node->
ClassName() <<
"::" << node->GetName()
2487 map<RooAbsArg*,vector<RooAbsArg *> > extClients, extValueClients, extShapeClients ;
2492 std::vector<RooAbsArg *> clientsTmp{tmparg->_clientList.begin(), tmparg->_clientList.end()};
2493 for (
auto client : clientsTmp) {
2496 const auto refCount = tmparg->_clientList.refCount(client);
2497 auto& bufferVec = extClients[tmparg];
2499 bufferVec.insert(bufferVec.end(), refCount, client);
2500 tmparg->_clientList.Remove(client,
true);
2505 clientsTmp.assign(tmparg->_clientListValue.begin(), tmparg->_clientListValue.end());
2506 for (
auto vclient : clientsTmp) {
2508 cxcoutD(ObjectHandling) <<
"RooWorkspace::Streamer(" <<
GetName() <<
") element " << tmparg->GetName()
2509 <<
" has external value client link to " << vclient <<
" (" << vclient->GetName() <<
") with ref count " << tmparg->_clientListValue.refCount(vclient) << endl ;
2511 const auto refCount = tmparg->_clientListValue.refCount(vclient);
2512 auto& bufferVec = extValueClients[tmparg];
2514 bufferVec.insert(bufferVec.end(), refCount, vclient);
2515 tmparg->_clientListValue.Remove(vclient,
true);
2520 clientsTmp.assign(tmparg->_clientListShape.begin(), tmparg->_clientListShape.end());
2521 for (
auto sclient : clientsTmp) {
2523 cxcoutD(ObjectHandling) <<
"RooWorkspace::Streamer(" <<
GetName() <<
") element " << tmparg->GetName()
2524 <<
" has external shape client link to " << sclient <<
" (" << sclient->GetName() <<
") with ref count " << tmparg->_clientListShape.refCount(sclient) << endl ;
2526 const auto refCount = tmparg->_clientListShape.refCount(sclient);
2527 auto& bufferVec = extShapeClients[tmparg];
2529 bufferVec.insert(bufferVec.end(), refCount, sclient);
2530 tmparg->_clientListShape.Remove(sclient,
true);
2541 for (
auto &iterx : extClients) {
2542 for (
auto client : iterx.second) {
2543 iterx.first->_clientList.Add(client);
2547 for (
auto &iterx : extValueClients) {
2548 for (
auto client : iterx.second) {
2549 iterx.first->_clientListValue.Add(client);
2553 for (
auto &iterx : extShapeClients) {
2554 for (
auto client : iterx.second) {
2555 iterx.first->_clientListShape.Add(client);
2571 map<TString,ClassRelInfo>::const_iterator iter = _c2fmap.begin() ;
2572 while(iter!=_c2fmap.end()) {
2576 ret += iter->first ;
2589 static const UInt_t crctab[256] = { 0x00000000,
2590 0x04c11db7, 0x09823b6e, 0x0d4326d9, 0x130476dc, 0x17c56b6b,
2591 0x1a864db2, 0x1e475005, 0x2608edb8, 0x22c9f00f, 0x2f8ad6d6,
2592 0x2b4bcb61, 0x350c9b64, 0x31cd86d3, 0x3c8ea00a, 0x384fbdbd,
2593 0x4c11db70, 0x48d0c6c7, 0x4593e01e, 0x4152fda9, 0x5f15adac,
2594 0x5bd4b01b, 0x569796c2, 0x52568b75, 0x6a1936c8, 0x6ed82b7f,
2595 0x639b0da6, 0x675a1011, 0x791d4014, 0x7ddc5da3, 0x709f7b7a,
2596 0x745e66cd, 0x9823b6e0, 0x9ce2ab57, 0x91a18d8e, 0x95609039,
2597 0x8b27c03c, 0x8fe6dd8b, 0x82a5fb52, 0x8664e6e5, 0xbe2b5b58,
2598 0xbaea46ef, 0xb7a96036, 0xb3687d81, 0xad2f2d84, 0xa9ee3033,
2599 0xa4ad16ea, 0xa06c0b5d, 0xd4326d90, 0xd0f37027, 0xddb056fe,
2600 0xd9714b49, 0xc7361b4c, 0xc3f706fb, 0xceb42022, 0xca753d95,
2601 0xf23a8028, 0xf6fb9d9f, 0xfbb8bb46, 0xff79a6f1, 0xe13ef6f4,
2602 0xe5ffeb43, 0xe8bccd9a, 0xec7dd02d, 0x34867077, 0x30476dc0,
2603 0x3d044b19, 0x39c556ae, 0x278206ab, 0x23431b1c, 0x2e003dc5,
2604 0x2ac12072, 0x128e9dcf, 0x164f8078, 0x1b0ca6a1, 0x1fcdbb16,
2605 0x018aeb13, 0x054bf6a4, 0x0808d07d, 0x0cc9cdca, 0x7897ab07,
2606 0x7c56b6b0, 0x71159069, 0x75d48dde, 0x6b93dddb, 0x6f52c06c,
2607 0x6211e6b5, 0x66d0fb02, 0x5e9f46bf, 0x5a5e5b08, 0x571d7dd1,
2608 0x53dc6066, 0x4d9b3063, 0x495a2dd4, 0x44190b0d, 0x40d816ba,
2609 0xaca5c697, 0xa864db20, 0xa527fdf9, 0xa1e6e04e, 0xbfa1b04b,
2610 0xbb60adfc, 0xb6238b25, 0xb2e29692, 0x8aad2b2f, 0x8e6c3698,
2611 0x832f1041, 0x87ee0df6, 0x99a95df3, 0x9d684044, 0x902b669d,
2612 0x94ea7b2a, 0xe0b41de7, 0xe4750050, 0xe9362689, 0xedf73b3e,
2613 0xf3b06b3b, 0xf771768c, 0xfa325055, 0xfef34de2, 0xc6bcf05f,
2614 0xc27dede8, 0xcf3ecb31, 0xcbffd686, 0xd5b88683, 0xd1799b34,
2615 0xdc3abded, 0xd8fba05a, 0x690ce0ee, 0x6dcdfd59, 0x608edb80,
2616 0x644fc637, 0x7a089632, 0x7ec98b85, 0x738aad5c, 0x774bb0eb,
2617 0x4f040d56, 0x4bc510e1, 0x46863638, 0x42472b8f, 0x5c007b8a,
2618 0x58c1663d, 0x558240e4, 0x51435d53, 0x251d3b9e, 0x21dc2629,
2619 0x2c9f00f0, 0x285e1d47, 0x36194d42, 0x32d850f5, 0x3f9b762c,
2620 0x3b5a6b9b, 0x0315d626, 0x07d4cb91, 0x0a97ed48, 0x0e56f0ff,
2621 0x1011a0fa, 0x14d0bd4d, 0x19939b94, 0x1d528623, 0xf12f560e,
2622 0xf5ee4bb9, 0xf8ad6d60, 0xfc6c70d7, 0xe22b20d2, 0xe6ea3d65,
2623 0xeba91bbc, 0xef68060b, 0xd727bbb6, 0xd3e6a601, 0xdea580d8,
2624 0xda649d6f, 0xc423cd6a, 0xc0e2d0dd, 0xcda1f604, 0xc960ebb3,
2625 0xbd3e8d7e, 0xb9ff90c9, 0xb4bcb610, 0xb07daba7, 0xae3afba2,
2626 0xaafbe615, 0xa7b8c0cc, 0xa379dd7b, 0x9b3660c6, 0x9ff77d71,
2627 0x92b45ba8, 0x9675461f, 0x8832161a, 0x8cf30bad, 0x81b02d74,
2628 0x857130c3, 0x5d8a9099, 0x594b8d2e, 0x5408abf7, 0x50c9b640,
2629 0x4e8ee645, 0x4a4ffbf2, 0x470cdd2b, 0x43cdc09c, 0x7b827d21,
2630 0x7f436096, 0x7200464f, 0x76c15bf8, 0x68860bfd, 0x6c47164a,
2631 0x61043093, 0x65c52d24, 0x119b4be9, 0x155a565e, 0x18197087,
2632 0x1cd86d30, 0x029f3d35, 0x065e2082, 0x0b1d065b, 0x0fdc1bec,
2633 0x3793a651, 0x3352bbe6, 0x3e119d3f, 0x3ad08088, 0x2497d08d,
2634 0x2056cd3a, 0x2d15ebe3, 0x29d4f654, 0xc5a92679, 0xc1683bce,
2635 0xcc2b1d17, 0xc8ea00a0, 0xd6ad50a5, 0xd26c4d12, 0xdf2f6bcb,
2636 0xdbee767c, 0xe3a1cbc1, 0xe760d676, 0xea23f0af, 0xeee2ed18,
2637 0xf0a5bd1d, 0xf464a0aa, 0xf9278673, 0xfde69bc4, 0x89b8fd09,
2638 0x8d79e0be, 0x803ac667, 0x84fbdbd0, 0x9abc8bd5, 0x9e7d9662,
2639 0x933eb0bb, 0x97ffad0c, 0xafb010b1, 0xab710d06, 0xa6322bdf,
2640 0xa2f33668, 0xbcb4666d, 0xb8757bda, 0xb5365d03, 0xb1f740b4
2644 while (sz--) crc = (crc << 8) ^
UInt_t(*
data++) ^ crctab[crc >> 24];
2652 unsigned long sz = strlen(
data);
2653 switch (strlen(
data)) {
2665 return crc32(
data + 4, sz - 4, (
data[0] << 24) | (
data[1] << 16) |
2683 bool haveDir=false ;
2688 bool writeExtraHeaders(
false) ;
2691 map<TString,ClassRelInfo>::iterator iter = _c2fmap.begin() ;
2692 while(iter!=_c2fmap.end()) {
2694 oocxcoutD(_wspace,ObjectHandling) <<
"RooWorkspace::CodeRepo::compileClasses() now processing class " << iter->first.Data() << endl ;
2698 oocoutI(_wspace,ObjectHandling) <<
"RooWorkspace::CodeRepo::compileClasses() Embedded class "
2699 << iter->first <<
" already in ROOT class table, skipping" << endl ;
2709 oocoutI(_wspace,ObjectHandling) <<
"RooWorkspace::CodeRepo::compileClasses() reusing code export directory " << dirName.c_str()
2710 <<
" to extract coded embedded in workspace" << endl ;
2713 oocoutI(_wspace,ObjectHandling) <<
"RooWorkspace::CodeRepo::compileClasses() creating code export directory " << dirName.c_str()
2714 <<
" to extract coded embedded in workspace" << endl ;
2716 oocoutE(_wspace,ObjectHandling) <<
"RooWorkspace::CodeRepo::compileClasses() ERROR creating code export directory " << dirName.c_str()
2717 <<
" to extract coded embedded in workspace" << endl ;
2726 if (!writeExtraHeaders) {
2727 writeExtraHeaders = true ;
2729 map<TString,ExtraHeader>::iterator extraIter = _ehmap.begin() ;
2730 while(extraIter!=_ehmap.end()) {
2733 bool needEHWrite=true ;
2734 string fdname =
Form(
"%s/%s",dirName.c_str(),extraIter->second._hname.Data()) ;
2735 ifstream ifdecl(fdname.c_str()) ;
2739 while (ifdecl.getline(buf, 64000)) {
2744 UInt_t crcWS = crc32(extraIter->second._hfile.Data());
2745 needEHWrite = (crcFile != crcWS);
2750 oocoutI(_wspace, ObjectHandling) <<
"RooWorkspace::CodeRepo::compileClasses() Extracting extra header file "
2756 ofstream fdecl(fdname.c_str());
2758 oocoutE(_wspace, ObjectHandling) <<
"RooWorkspace::CodeRepo::compileClasses() ERROR opening file " << fdname
2759 <<
" for writing" << endl;
2762 fdecl << extraIter->second._hfile.Data();
2771 ClassFiles& cfinfo = _fmap[iter->second._fileBase] ;
2773 oocxcoutD(_wspace,ObjectHandling) <<
"RooWorkspace::CodeRepo::compileClasses() now processing file with base " << iter->second._fileBase << endl ;
2777 oocxcoutD(_wspace,ObjectHandling) <<
"RooWorkspace::CodeRepo::compileClasses() file with base name " << iter->second._fileBase
2778 <<
" has already been extracted, skipping to next class" << endl ;
2783 bool needDeclWrite=true ;
2784 string fdname =
Form(
"%s/%s.%s",dirName.c_str(),iter->second._fileBase.Data(),cfinfo.
_hext.
Data()) ;
2785 ifstream ifdecl(fdname.c_str()) ;
2789 while (ifdecl.getline(buf, 64000)) {
2795 needDeclWrite = (crcFile!=crcWS) ;
2799 if (needDeclWrite) {
2800 oocoutI(_wspace,ObjectHandling) <<
"RooWorkspace::CodeRepo::compileClasses() Extracting declaration code of class " << iter->first <<
", file " << fdname << endl ;
2801 ofstream fdecl(fdname.c_str()) ;
2803 oocoutE(_wspace,ObjectHandling) <<
"RooWorkspace::CodeRepo::compileClasses() ERROR opening file "
2804 << fdname <<
" for writing" << endl ;
2812 bool needImplWrite=true ;
2813 string finame =
Form(
"%s/%s.cxx",dirName.c_str(),iter->second._fileBase.Data()) ;
2814 ifstream ifimpl(finame.c_str()) ;
2818 while (ifimpl.getline(buf, 64000)) {
2824 needImplWrite = (crcFile!=crcWS) ;
2828 if (needImplWrite) {
2829 oocoutI(_wspace,ObjectHandling) <<
"RooWorkspace::CodeRepo::compileClasses() Extracting implementation code of class " << iter->first <<
", file " << finame << endl ;
2830 ofstream fimpl(finame.c_str()) ;
2832 oocoutE(_wspace,ObjectHandling) <<
"RooWorkspace::CodeRepo::compileClasses() ERROR opening file"
2833 << finame <<
" for writing" << endl ;
2842 oocxcoutD(_wspace,ObjectHandling) <<
"RooWorkspace::CodeRepo::compileClasses() marking code unit " << iter->second._fileBase <<
" as extracted" << endl ;
2845 oocoutI(_wspace,ObjectHandling) <<
"RooWorkspace::CodeRepo::compileClasses() Compiling code unit " << iter->second._fileBase.Data() <<
" to define class " << iter->first << endl ;
2849 oocoutE(_wspace,ObjectHandling) <<
"RooWorkspace::CodeRepo::compileClasses() ERROR compiling class " << iter->first.Data() <<
", to fix this you can do the following: " << endl
2850 <<
" 1) Fix extracted source code files in directory " << dirName.c_str() <<
"/" << endl
2851 <<
" 2) In clean ROOT session compiled fixed classes by hand using '.x " << dirName.c_str() <<
"/ClassName.cxx+'" << endl
2852 <<
" 3) Reopen file with RooWorkspace with broken source code in UPDATE mode. Access RooWorkspace to force loading of class" << endl
2853 <<
" Broken instances in workspace will _not_ be compiled, instead precompiled fixed instances will be used." << endl
2854 <<
" 4) Reimport fixed code in workspace using 'RooWorkspace::importClassCode(\"*\",true)' method, Write() updated workspace to file and close file" << endl
2855 <<
" 5) Reopen file in clean ROOT session to confirm that problems are fixed" << endl ;
2882 coutE(ObjectHandling) <<
"RooWorkspace::WSDir::Add(" <<
GetName() <<
") ERROR: Directory is read-only representation of a RooWorkspace, use RooWorkspace::import() to add objects" << endl ;
2884 InternalAppend(
obj) ;
2895 coutE(ObjectHandling) <<
"RooWorkspace::WSDir::Add(" <<
GetName() <<
") ERROR: Directory is read-only representation of a RooWorkspace, use RooWorkspace::import() to add objects" << endl ;
2897 InternalAppend(
obj) ;
2909 if (removedObj ==
_dir)
_dir =
nullptr;
2920 std::vector<std::string> invalidSets;
2923 auto const& setName =
c.first;
2924 auto&
set =
c.second;
2925 std::size_t oldSize =
set.
size();
2930 if(
set.
size() < oldSize && isCacheSet(setName)) {
2931 invalidSets.emplace_back(setName);
2936 for(std::string
const& setName : invalidSets) {
TObject * clone(const char *newname) const override
R__EXTERN TClassTable * gClassTable
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
char * Form(const char *fmt,...)
Formats a string in a circular formatting buffer.
R__EXTERN TSystem * gSystem
Common abstract base class for objects that represent a value and a "shape" in RooFit.
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'.
bool getAttribute(const Text_t *name) const
Check if a named attribute is set. By default, all attributes are unset.
RooFit::OwningPtr< RooArgSet > getVariables(bool stripDisconnected=true) const
Return RooArgSet with all variables (tree leaf nodes of expression tree)
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.
const char * GetName() const override
Returns name of object.
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.
Abstract base class for binned and unbinned datasets.
RooAbsOptTestStatistic is the abstract base class for test statistics objects that evaluate a functio...
const char * sealNotice() const
Abstract interface for all probability density functions.
Abstract base class for objects that represent a real value and implements functionality common to al...
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.
Object to represent discrete states.
Named container for two doubles, two integers two object points and three string pointers that can be...
Class RooCmdConfig is a configurable parser for RooCmdArg named arguments.
void defineMutex(const char *head, Args_t &&... tail)
Define arguments where any pair is mutually exclusive.
bool process(const RooCmdArg &arg)
Process given RooCmdArg.
bool ok(bool verbose) const
Return true of parsing was successful.
const char * getString(const char *name, const char *defaultValue="", bool convEmptyToNull=false) const
Return string property registered with name 'name'.
bool defineString(const char *name, const char *argName, int stringNum, const char *defValue="", bool appendMode=false)
Define double property name 'name' mapped to double in slot 'stringNum' in RooCmdArg with name argNam...
bool defineInt(const char *name, const char *argName, int intNum, int defValue=0)
Define integer property name 'name' mapped to integer in slot 'intNum' in RooCmdArg with name argName...
int getInt(const char *name, int defaultValue=0) const
Return integer property registered with name 'name'.
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 object 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-style string that can also be constructed from a std::strin...
const char * c_str() const
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...
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.
const RooArgSet * set(RooStringView name)
Return pointer to previously defined named set with given nmame If no such set is found a null pointe...
bool cd(const char *path=nullptr)
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.
TObject * Clone(const char *newname="") const override
TObject::Clone() needs to be overridden.
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)
Import 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.
bool import(const RooAbsArg &arg, const RooCmdArg &arg1={}, const RooCmdArg &arg2={}, const RooCmdArg &arg3={}, const RooCmdArg &arg4={}, const RooCmdArg &arg5={}, const RooCmdArg &arg6={}, const RooCmdArg &arg7={}, const RooCmdArg &arg8={}, const RooCmdArg &arg9={})
Import a RooAbsArg object, e.g.
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.
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 composed of a header, followed by consecutive data records (TKey instances) with a wel...
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.