161 TNamed(
name,title?title:
name), _classes(this), _dir(nullptr), _factory(nullptr), _doExport(false), _openTrans(false)
167 TNamed(
name,
name), _classes(this), _dir(nullptr), _factory(nullptr), _doExport(false), _openTrans(false)
180 TNamed(other), _uuid(other._uuid), _classes(other._classes,this), _dir(nullptr), _factory(nullptr), _doExport(false), _openTrans(false)
189 for(
auto * snap : static_range_cast<RooArgSet*>(other.
_snapshots)) {
190 auto snapClone =
static_cast<RooArgSet*
>(snap->snapshot());
191 snapClone->
setName(snap->GetName()) ;
196 for (map<string,RooArgSet>::const_iterator iter3 = other.
_namedSets.begin() ; iter3 != other.
_namedSets.end() ; ++iter3) {
205 while((gobj=iter4->
Next())) {
259 std::vector<std::string> tokens =
ROOT::Split(fileSpec,
":");
262 if (tokens.size() != 3) {
263 std::ostringstream stream;
264 for (
const auto& token : tokens) {
265 stream <<
"\n\t" << token;
267 coutE(
InputArguments) <<
"RooWorkspace(" <<
GetName() <<
") ERROR in file specification, expecting 'filename:wsname:objname', but '" << fileSpec <<
"' given."
268 <<
"\nTokens read are:" << stream.str() << endl;
272 const std::string&
filename = tokens[0];
273 const std::string& wsname = tokens[1];
274 const std::string& objname = tokens[2];
287 <<
" or object is not a RooWorkspace" << endl ;
294 bool ret =
import(*warg,arg1,arg2,arg3,arg4,arg5,arg6,arg7,arg8,arg9) ;
300 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 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) ;
454 bool factoryMatch = (tagIn && tagWs && !strcmp(tagIn,tagWs)) ;
456 ((
RooAbsArg&)inArg).setAttribute(
"RooWorkspace::Recycle") ;
459 if (!suffix && wsarg && !useExistingNodes && !(inArg.
isFundamental() && varMap[inArg.
GetName()]!=
"")) {
463 <<
": another instance with same name already in the workspace and no conflict resolution protocol specified" << endl ;
473 coutI(
ObjectHandling) <<
"RooWorkSpace::import(" <<
GetName() <<
") Recycling existing object " << inArg.
GetName() <<
" created with identical factory specification" << endl ;
482 branchSet.
add(inArg) ;
487 for (
const auto branch : branchSet) {
489 if (wsbranch && wsbranch!=branch && !branch->
getAttribute(
"RooWorkspace::Recycle") && !useExistingNodes) {
490 conflictNodes.
add(*branch) ;
495 if (conflictNodes.
getSize()>0 && !suffix && !useExistingNodes) {
497 << conflictNodes <<
" already in the workspace and no conflict resolution protocol specified" << endl ;
510 conflictNodes.
add(branchSet) ;
514 string topName2 = cloneTop->
GetName() ;
515 if (!renameConflictOrig) {
517 for (
const auto cnode : conflictNodes) {
519 string origName = cnode2->
GetName() ;
522 string tag =
Form(
"ORIGNAME:%s",origName.c_str()) ;
525 string tag2 =
Form(
"%s",origName.c_str()) ;
530 if (cnode2==cloneTop) {
536 <<
") Resolving name conflict in workspace by changing name of imported node "
537 << origName <<
" to " << cnode2->
GetName() << endl ;
543 for (
const auto cnode : conflictNodes) {
545 string origName = cnode->GetName() ;
554 wsnode->
SetName(
Form(
"%s_%s",cnode->GetName(),suffix)) ;
555 wsnode->
SetTitle(
Form(
"%s (%s)",cnode->GetTitle(),suffix)) ;
558 for (
unsigned int n=1;
true; ++
n) {
559 string newname =
Form(
"%s_%s_%d",cnode->GetName(),suffix,
n) ;
561 wsnode->
SetName(newname.c_str()) ;
562 wsnode->
SetTitle(
Form(
"%s (%s %d)",cnode->GetTitle(),suffix,
n)) ;
569 <<
") Resolving name conflict in workspace by changing name of original node "
570 << origName <<
" to " << wsnode->
GetName() << endl ;
574 << origName <<
" to be renamed, but didn't find it..." << endl ;
581 if (strlen(varChangeIn)>0 || (suffixV && strlen(suffixV)>0)) {
584 for (
const auto cnode : cloneSet) {
586 if (varMap.find(cnode->GetName())!=varMap.end()) {
587 string origName = cnode->GetName() ;
588 cnode->SetName(varMap[cnode->GetName()].c_str()) ;
589 string tag =
Form(
"ORIGNAME:%s",origName.c_str()) ;
590 cnode->setAttribute(tag.c_str()) ;
591 if (!cnode->getStringAttribute(
"origName")) {
592 string tag2 =
Form(
"%s",origName.c_str()) ;
593 cnode->setStringAttribute(
"origName",tag2.c_str()) ;
598 << origName <<
" to " << cnode->GetName() <<
" on request" << endl ;
601 if (cnode==cloneTop) {
602 topName2 = cnode->GetName() ;
618 for (
const auto branch2 : branchSet2) {
620 conflictNodes2.
add(*branch2) ;
625 if (conflictNodes2.
getSize()) {
627 << conflictNodes2 <<
" cause naming conflict after conflict resolution protocol was executed" << endl ;
632 for (
const auto node : cloneSet2) {
633 if (node->importWorkspaceHook(*
this)) {
635 <<
" has an error in importing in one or more of its auxiliary objects, aborting" << endl ;
642 for (
const auto node : cloneSet2) {
646 << node->ClassName() <<
"::" << node->GetName() <<
", reading of workspace will require external definition of class" << endl ;
652 node->setExpensiveObjectCache(
_eocache) ;
660 if (!silence && useExistingNodes) {
662 <<
"::" << node->GetName() <<
" for import of " << cloneTop2->
ClassName() <<
"::"
663 << cloneTop2->
GetName() << endl ;
676 << node->GetName() << endl ;
693 if (recycledNodes.
getSize()>0) {
694 for (
const auto node : cloneSet2) {
695 node->redirectServers(recycledNodes) ;
737 pc.defineString(
"dsetName",
"Rename",0,
"") ;
738 pc.defineString(
"varChangeIn",
"RenameVar",0,
"",
true) ;
739 pc.defineString(
"varChangeOut",
"RenameVar",1,
"",
true) ;
740 pc.defineInt(
"embedded",
"Embedded",0,0) ;
741 pc.defineInt(
"silence",
"Silence",0,0) ;
750 const char* dsetName =
pc.getString(
"dsetName") ;
751 const char* varChangeIn =
pc.getString(
"varChangeIn") ;
752 const char* varChangeOut =
pc.getString(
"varChangeOut") ;
753 bool embedded =
pc.getInt(
"embedded") ;
754 Int_t silence =
pc.getInt(
"silence") ;
760 if (dsetName && strlen(dsetName)==0) {
771 if (dsetName && dataList.
FindObject(dsetName)) {
772 coutE(
ObjectHandling) <<
"RooWorkspace::import(" <<
GetName() <<
") ERROR dataset with name " << dsetName <<
" already exists in workspace, import aborted" << endl ;
776 coutE(
ObjectHandling) <<
"RooWorkspace::import(" <<
GetName() <<
") ERROR dataset with name " << inData.
GetName() <<
" already exists in workspace, import aborted" << endl ;
792 if (strlen(varChangeIn)>0) {
794 const std::vector<std::string> tokIn =
ROOT::Split(varChangeIn,
",");
795 const std::vector<std::string> tokOut =
ROOT::Split(varChangeOut,
",");
796 for (
unsigned int i=0; i < tokIn.size(); ++i) {
798 coutI(
ObjectHandling) <<
"RooWorkSpace::import(" <<
GetName() <<
") changing name of dataset observable " << tokIn[i] <<
" to " << tokOut[i] << endl ;
806 if (!
arg(carg->GetName())) {
812 dataList.
Add(clone) ;
850 if (!
arg(sarg->GetName())) {
855 <<
"\" is not in workspace and importMissing option is disabled" << endl ;
859 wsargs.
add(*
arg(sarg->GetName())) ;
881 <<
") WARNING redefining previously defined named set " <<
name << endl;
906 for (
const std::string& token :
ROOT::Split(contentList,
",")) {
908 if (!
arg(token.c_str())) {
910 <<
"\" is not in workspace" << endl ;
913 wsargs.
add(*
arg(token.c_str())) ;
935 for (
const std::string& token :
ROOT::Split(newContents,
",")) {
937 if (!
arg(token.c_str())) {
939 <<
"\" is not in workspace" << endl ;
942 wsargs.
add(*
arg(token.c_str())) ;
960 return (i!=
_namedSets.end()) ? &(i->second) : 0 ;
974 <<
" does not exist" << endl ;
981 <<
" already exists" << endl ;
1005 <<
" does not exist" << endl ;
1114 TString className = carg->ClassName() ;
1117 << carg->ClassName() <<
"::" << carg->GetName() <<
", reading of workspace will require external definition of class" << endl ;
1152 delete actualParams ;
1157 snapshot->
assign(params) ;
1188 actualParams->
assign(*snap) ;
1189 delete actualParams ;
1308 for (
const std::string& token :
ROOT::Split(nameList,
",")) {
1313 coutE(
InputArguments) <<
" RooWorkspace::argSet(" <<
GetName() <<
") no RooAbsArg named \"" << token <<
"\" in workspace" << endl ;
1476 list<RooAbsData*> ret ;
1480 ret.push_back(dat) ;
1492 list<RooAbsData*> ret ;
1496 ret.push_back(dat) ;
1509 list<TObject*> ret ;
1518 ret.push_back(gobj) ;
1551 if (mapEntry && strlen(mapEntry)>0) {
1561 if (implfile.empty() || declfile.empty()) {
1563 << tc->
GetName() <<
" through ROOT TClass interface, unable to import code" << endl ;
1579 << tc->
GetName() <<
" : it cannot be persisted because it doesn't have a default constructor. Please fix " << endl ;
1586 char *declpath =
nullptr, *implpath =
nullptr;
1612 << tc->
GetName() <<
" because header file " << declfile <<
" is not found in current directory nor in $ROOTSYS" ;
1627 <<
"path using RooWorkspace::addClassDeclImportDir(const char* dir)" << endl ;
1658 << tc->
GetName() <<
" because implementation file " << implfile <<
" is not found in current directory nor in $ROOTSYS" ;
1673 <<
"path using RooWorkspace::addClassImplImportDir(const char* dir)" << endl;
1695 int dotpos2 = strrchr(declfilename.c_str(),
'.') - declfilename.c_str() ;
1696 string declfilebase = declfilename.substr(0,dotpos2) ;
1697 string declfileext = declfilename.substr(dotpos2+1) ;
1699 list<string> extraHeaders ;
1702 if (
_fmap.find(declfilebase) ==
_fmap.end()) {
1705 fstream fdecl(declpath?declpath:declfile.c_str()) ;
1710 <<
") ERROR opening declaration file " << declfile << endl ;
1717 <<
") importing code of class " << tc->
GetName()
1718 <<
" from " << (implpath?implpath:implfile.c_str())
1719 <<
" and " << (declpath?declpath:declfile.c_str()) << endl ;
1724 while(fdecl.getline(buf,1023)) {
1727 bool processedInclude = false ;
1728 char* extincfile = 0 ;
1731 if (strstr(buf,
"#include")) {
1734 strlcpy(tmp, buf, 64000);
1735 bool stdinclude = strchr(buf,
'<');
1736 strtok(tmp,
" <\"");
1737 char *incfile = strtok(0,
" <>\"");
1742 hpath +=
"/include/";
1746 <<
") scheduling include file " << incfile <<
" for import" << endl;
1747 extraHeaders.push_back(incfile);
1748 extincfile = incfile;
1749 processedInclude =
true;
1754 if (processedInclude) {
1755 decl +=
"// external include file below retrieved from workspace code storage\n" ;
1756 decl +=
Form(
"#include \"%s\"\n",extincfile) ;
1764 fstream fimpl(implpath?implpath:implfile.c_str()) ;
1769 <<
") ERROR opening implementation file " << implfile << endl ;
1778 while(fimpl.getline(buf,1023)) {
1782 bool foundSelfInclude=false ;
1783 bool processedInclude = false ;
1784 char* extincfile = 0 ;
1787 if (strstr(buf,
"#include")) {
1790 strlcpy(tmp, buf, 64000);
1791 bool stdinclude = strchr(buf,
'<');
1792 strtok(tmp,
" <\"");
1793 char *incfile = strtok(0,
" <>\"");
1795 if (strstr(incfile, declfilename.c_str())) {
1796 foundSelfInclude =
true;
1799 if (!stdinclude && !foundSelfInclude) {
1802 hpath +=
"/include/";
1807 <<
") scheduling include file " << incfile <<
" for import" << endl;
1808 extraHeaders.push_back(incfile);
1809 extincfile = incfile;
1810 processedInclude =
true;
1817 if (foundSelfInclude) {
1820 impl +=
"// class declaration include file below retrieved from workspace code storage\n" ;
1821 impl +=
Form(
"#include \"%s.%s\"\n",declfilebase.c_str(),declfileext.c_str()) ;
1822 }
else if (processedInclude) {
1823 impl +=
"// external include file below retrieved from workspace code storage\n" ;
1824 impl +=
Form(
"#include \"%s\"\n",extincfile) ;
1832 _fmap[declfilebase]._hfile = decl ;
1833 _fmap[declfilebase]._cxxfile = impl ;
1834 _fmap[declfilebase]._hext = declfileext ;
1837 for (list<string>::iterator ehiter = extraHeaders.begin() ; ehiter != extraHeaders.end() ; ++ehiter ) {
1841 eh.
_hname = ehiter->c_str() ;
1842 fstream fehdr(ehiter->c_str()) ;
1845 while(fehdr.getline(buf2,1023)) {
1848 if (strstr(buf2,
"#include")) {
1851 strlcpy(tmp, buf2, 64000);
1852 bool stdinclude = strchr(buf,
'<');
1853 strtok(tmp,
" <\"");
1854 char *incfile = strtok(0,
" <>\"");
1859 hpath +=
"/include/";
1863 <<
") scheduling recursive include file " << incfile <<
" for import"
1865 extraHeaders.push_back(incfile);
1873 eh.
_hfile = ehimpl.c_str();
1875 _ehmap[ehiter->c_str()] = eh;
1883 <<
") code of class " << tc->
GetName()
1884 <<
" was already imported from " << (implpath?implpath:implfile.c_str())
1885 <<
" and " << (declpath?declpath:declfile.c_str()) << endl ;
1900 list<TClass*> bases ;
1902 if (baseNameList.
Length()>0) {
1903 baseNameList +=
"," ;
1915 list<TClass*>::iterator biter = bases.begin() ;
1916 while(biter!=bases.end()) {
1941 if (
_dir)
return true ;
1968 if (oldObj && !replaceExisting) {
1970 <<
object.GetName() <<
" is already in workspace and replaceExisting flag is set to false" << endl ;
1976 object.IsA()->SetDirectoryAutoAdd(0);
1987 object.IsA()->SetDirectoryAutoAdd(func);
2009 if (oldObj && !replaceExisting) {
2011 <<
object.GetName() <<
" is already in workspace and replaceExisting flag is set to false" << endl ;
2065 if (ret)
return ret ;
2069 if (ret)
return ret ;
2086 if (!gobj)
return 0 ;
2111 TFile f(fileName,recreate?
"RECREATE":
"UPDATE") ;
2126 cxcoutD(
ObjectHandling) <<
"INFO: Creating RooFactoryWSTool associated with this workspace" << endl ;
2127 _factory = make_unique<RooFactoryWSTool>(*
this);
2151 bool treeMode(
false) ;
2153 if (
TString(opts).Contains(
"t")) {
2156 if (
TString(opts).Contains(
"v")) {
2160 cout << endl <<
"RooWorkspace(" <<
GetName() <<
") " <<
GetTitle() <<
" contents" << endl << endl ;
2180 if (!parg->hasClients()) {
2189 if (!parg->hasClients()) {
2190 funcSet.
add(*parg) ;
2197 if (!parg->hasClients()) {
2198 catfuncSet.
add(*parg) ;
2206 convResoSet.
add(*parg) ;
2208 resoSet.
add(*parg) ;
2221 funcSet.
add(*parg) ;
2226 catfuncSet.
add(*parg) ;
2246 cout <<
"variables" << endl ;
2247 cout <<
"---------" << endl ;
2248 cout << varSet << endl ;
2253 cout <<
"p.d.f.s" << endl ;
2254 cout <<
"-------" << endl ;
2258 parg->printComponentTree() ;
2268 cout <<
"analytical resolution models" << endl ;
2269 cout <<
"----------------------------" << endl ;
2279 cout <<
"functions" << endl ;
2280 cout <<
"--------" << endl ;
2284 parg->printComponentTree() ;
2293 cout <<
"category functions" << endl ;
2294 cout <<
"------------------" << endl ;
2298 parg->printComponentTree() ;
2307 cout <<
"datasets" << endl ;
2308 cout <<
"--------" << endl ;
2319 cout <<
"embedded datasets (in pdfs and functions)" << endl ;
2320 cout <<
"-----------------------------------------" << endl ;
2331 cout <<
"parameter snapshots" << endl ;
2332 cout <<
"-------------------" << endl ;
2335 while((snap=(
RooArgSet*)iter->Next())) {
2336 cout << snap->
GetName() <<
" = (" ;
2339 if (
first) {
first=false ; }
else { cout <<
"," ; }
2341 a->printValue(cout) ;
2342 if (
a->isConstant()) {
2346 cout <<
")" << endl ;
2354 cout <<
"named sets" << endl ;
2355 cout <<
"----------" << endl ;
2356 for (map<string,RooArgSet>::const_iterator it =
_namedSets.begin() ; it !=
_namedSets.end() ; ++it) {
2358 cout << it->first <<
":" << it->second << endl;
2367 cout <<
"generic objects" << endl ;
2368 cout <<
"---------------" << endl ;
2371 while((gobj=(
TObject*)iter->Next())) {
2384 cout <<
"study modules" << endl ;
2385 cout <<
"-------------" << endl ;
2388 while((smobj=(
TObject*)iter->Next())) {
2397 cout <<
"embedded class code" << endl ;
2398 cout <<
"-------------------" << endl ;
2404 cout <<
"embedded precalculated expensive components" << endl ;
2405 cout <<
"-------------------------------------------" << endl ;
2436 name.Streamer(R__b) ;
2437 _fmap[
name]._hext.Streamer(R__b) ;
2438 _fmap[
name]._hfile.Streamer(R__b) ;
2439 _fmap[
name]._cxxfile.Streamer(R__b) ;
2447 name.Streamer(R__b) ;
2448 _c2fmap[
name]._baseName.Streamer(R__b) ;
2449 _c2fmap[
name]._fileBase.Streamer(R__b) ;
2458 name.Streamer(R__b) ;
2459 _ehmap[
name]._hname.Streamer(R__b) ;
2460 _ehmap[
name]._hfile.Streamer(R__b) ;
2467 _compiledOK = !compileClasses() ;
2475 UInt_t count = _fmap.size() ;
2477 map<TString,ClassFiles>::iterator iter = _fmap.begin() ;
2478 while(iter!=_fmap.end()) {
2479 TString key_copy(iter->first) ;
2481 iter->second._hext.Streamer(R__b) ;
2482 iter->second._hfile.Streamer(R__b);
2483 iter->second._cxxfile.Streamer(R__b);
2489 count = _c2fmap.size() ;
2491 map<TString,ClassRelInfo>::iterator iter2 = _c2fmap.begin() ;
2492 while(iter2!=_c2fmap.end()) {
2493 TString key_copy(iter2->first) ;
2495 iter2->second._baseName.Streamer(R__b) ;
2496 iter2->second._fileBase.Streamer(R__b);
2501 count = _ehmap.size() ;
2503 map<TString,ExtraHeader>::iterator iter3 = _ehmap.begin() ;
2504 while(iter3!=_ehmap.end()) {
2505 TString key_copy(iter3->first) ;
2507 iter3->second._hname.Streamer(R__b) ;
2508 iter3->second._hfile.Streamer(R__b);
2534 node->ioStreamerPass2() ;
2541 node->setExpensiveObjectCache(
_eocache) ;
2542 node->setWorkspace(*
this);
2546 cout <<
"RooWorkspace::Streamer(" <<
GetName() <<
") " << node->ClassName() <<
"::" << node->GetName()
2556 map<RooAbsArg*,vector<RooAbsArg *> > extClients, extValueClients, extShapeClients ;
2561 std::vector<RooAbsArg *> clientsTmp{tmparg->_clientList.begin(), tmparg->_clientList.end()};
2562 for (
auto client : clientsTmp) {
2565 const auto refCount = tmparg->_clientList.refCount(client);
2566 auto& bufferVec = extClients[tmparg];
2568 bufferVec.insert(bufferVec.end(), refCount, client);
2569 tmparg->_clientList.Remove(client,
true);
2574 clientsTmp.assign(tmparg->_clientListValue.begin(), tmparg->_clientListValue.end());
2575 for (
auto vclient : clientsTmp) {
2578 <<
" has external value client link to " << vclient <<
" (" << vclient->GetName() <<
") with ref count " << tmparg->_clientListValue.refCount(vclient) << endl ;
2580 const auto refCount = tmparg->_clientListValue.refCount(vclient);
2581 auto& bufferVec = extValueClients[tmparg];
2583 bufferVec.insert(bufferVec.end(), refCount, vclient);
2584 tmparg->_clientListValue.Remove(vclient,
true);
2589 clientsTmp.assign(tmparg->_clientListShape.begin(), tmparg->_clientListShape.end());
2590 for (
auto sclient : clientsTmp) {
2593 <<
" has external shape client link to " << sclient <<
" (" << sclient->GetName() <<
") with ref count " << tmparg->_clientListShape.refCount(sclient) << endl ;
2595 const auto refCount = tmparg->_clientListShape.refCount(sclient);
2596 auto& bufferVec = extShapeClients[tmparg];
2598 bufferVec.insert(bufferVec.end(), refCount, sclient);
2599 tmparg->_clientListShape.Remove(sclient,
true);
2610 for (
auto &iterx : extClients) {
2611 for (
auto client : iterx.second) {
2612 iterx.first->_clientList.Add(client);
2616 for (
auto &iterx : extValueClients) {
2617 for (
auto client : iterx.second) {
2618 iterx.first->_clientListValue.Add(client);
2622 for (
auto &iterx : extShapeClients) {
2623 for (
auto client : iterx.second) {
2624 iterx.first->_clientListShape.Add(client);
2640 map<TString,ClassRelInfo>::const_iterator iter = _c2fmap.begin() ;
2641 while(iter!=_c2fmap.end()) {
2645 ret += iter->first ;
2658 static const UInt_t crctab[256] = { 0x00000000,
2659 0x04c11db7, 0x09823b6e, 0x0d4326d9, 0x130476dc, 0x17c56b6b,
2660 0x1a864db2, 0x1e475005, 0x2608edb8, 0x22c9f00f, 0x2f8ad6d6,
2661 0x2b4bcb61, 0x350c9b64, 0x31cd86d3, 0x3c8ea00a, 0x384fbdbd,
2662 0x4c11db70, 0x48d0c6c7, 0x4593e01e, 0x4152fda9, 0x5f15adac,
2663 0x5bd4b01b, 0x569796c2, 0x52568b75, 0x6a1936c8, 0x6ed82b7f,
2664 0x639b0da6, 0x675a1011, 0x791d4014, 0x7ddc5da3, 0x709f7b7a,
2665 0x745e66cd, 0x9823b6e0, 0x9ce2ab57, 0x91a18d8e, 0x95609039,
2666 0x8b27c03c, 0x8fe6dd8b, 0x82a5fb52, 0x8664e6e5, 0xbe2b5b58,
2667 0xbaea46ef, 0xb7a96036, 0xb3687d81, 0xad2f2d84, 0xa9ee3033,
2668 0xa4ad16ea, 0xa06c0b5d, 0xd4326d90, 0xd0f37027, 0xddb056fe,
2669 0xd9714b49, 0xc7361b4c, 0xc3f706fb, 0xceb42022, 0xca753d95,
2670 0xf23a8028, 0xf6fb9d9f, 0xfbb8bb46, 0xff79a6f1, 0xe13ef6f4,
2671 0xe5ffeb43, 0xe8bccd9a, 0xec7dd02d, 0x34867077, 0x30476dc0,
2672 0x3d044b19, 0x39c556ae, 0x278206ab, 0x23431b1c, 0x2e003dc5,
2673 0x2ac12072, 0x128e9dcf, 0x164f8078, 0x1b0ca6a1, 0x1fcdbb16,
2674 0x018aeb13, 0x054bf6a4, 0x0808d07d, 0x0cc9cdca, 0x7897ab07,
2675 0x7c56b6b0, 0x71159069, 0x75d48dde, 0x6b93dddb, 0x6f52c06c,
2676 0x6211e6b5, 0x66d0fb02, 0x5e9f46bf, 0x5a5e5b08, 0x571d7dd1,
2677 0x53dc6066, 0x4d9b3063, 0x495a2dd4, 0x44190b0d, 0x40d816ba,
2678 0xaca5c697, 0xa864db20, 0xa527fdf9, 0xa1e6e04e, 0xbfa1b04b,
2679 0xbb60adfc, 0xb6238b25, 0xb2e29692, 0x8aad2b2f, 0x8e6c3698,
2680 0x832f1041, 0x87ee0df6, 0x99a95df3, 0x9d684044, 0x902b669d,
2681 0x94ea7b2a, 0xe0b41de7, 0xe4750050, 0xe9362689, 0xedf73b3e,
2682 0xf3b06b3b, 0xf771768c, 0xfa325055, 0xfef34de2, 0xc6bcf05f,
2683 0xc27dede8, 0xcf3ecb31, 0xcbffd686, 0xd5b88683, 0xd1799b34,
2684 0xdc3abded, 0xd8fba05a, 0x690ce0ee, 0x6dcdfd59, 0x608edb80,
2685 0x644fc637, 0x7a089632, 0x7ec98b85, 0x738aad5c, 0x774bb0eb,
2686 0x4f040d56, 0x4bc510e1, 0x46863638, 0x42472b8f, 0x5c007b8a,
2687 0x58c1663d, 0x558240e4, 0x51435d53, 0x251d3b9e, 0x21dc2629,
2688 0x2c9f00f0, 0x285e1d47, 0x36194d42, 0x32d850f5, 0x3f9b762c,
2689 0x3b5a6b9b, 0x0315d626, 0x07d4cb91, 0x0a97ed48, 0x0e56f0ff,
2690 0x1011a0fa, 0x14d0bd4d, 0x19939b94, 0x1d528623, 0xf12f560e,
2691 0xf5ee4bb9, 0xf8ad6d60, 0xfc6c70d7, 0xe22b20d2, 0xe6ea3d65,
2692 0xeba91bbc, 0xef68060b, 0xd727bbb6, 0xd3e6a601, 0xdea580d8,
2693 0xda649d6f, 0xc423cd6a, 0xc0e2d0dd, 0xcda1f604, 0xc960ebb3,
2694 0xbd3e8d7e, 0xb9ff90c9, 0xb4bcb610, 0xb07daba7, 0xae3afba2,
2695 0xaafbe615, 0xa7b8c0cc, 0xa379dd7b, 0x9b3660c6, 0x9ff77d71,
2696 0x92b45ba8, 0x9675461f, 0x8832161a, 0x8cf30bad, 0x81b02d74,
2697 0x857130c3, 0x5d8a9099, 0x594b8d2e, 0x5408abf7, 0x50c9b640,
2698 0x4e8ee645, 0x4a4ffbf2, 0x470cdd2b, 0x43cdc09c, 0x7b827d21,
2699 0x7f436096, 0x7200464f, 0x76c15bf8, 0x68860bfd, 0x6c47164a,
2700 0x61043093, 0x65c52d24, 0x119b4be9, 0x155a565e, 0x18197087,
2701 0x1cd86d30, 0x029f3d35, 0x065e2082, 0x0b1d065b, 0x0fdc1bec,
2702 0x3793a651, 0x3352bbe6, 0x3e119d3f, 0x3ad08088, 0x2497d08d,
2703 0x2056cd3a, 0x2d15ebe3, 0x29d4f654, 0xc5a92679, 0xc1683bce,
2704 0xcc2b1d17, 0xc8ea00a0, 0xd6ad50a5, 0xd26c4d12, 0xdf2f6bcb,
2705 0xdbee767c, 0xe3a1cbc1, 0xe760d676, 0xea23f0af, 0xeee2ed18,
2706 0xf0a5bd1d, 0xf464a0aa, 0xf9278673, 0xfde69bc4, 0x89b8fd09,
2707 0x8d79e0be, 0x803ac667, 0x84fbdbd0, 0x9abc8bd5, 0x9e7d9662,
2708 0x933eb0bb, 0x97ffad0c, 0xafb010b1, 0xab710d06, 0xa6322bdf,
2709 0xa2f33668, 0xbcb4666d, 0xb8757bda, 0xb5365d03, 0xb1f740b4
2713 while (sz--) crc = (crc << 8) ^
UInt_t(*
data++) ^ crctab[crc >> 24];
2721 unsigned long sz = strlen(
data);
2722 switch (strlen(
data)) {
2734 return crc32(
data + 4, sz - 4, (
data[0] << 24) | (
data[1] << 16) |
2752 bool haveDir=false ;
2757 bool writeExtraHeaders(
false) ;
2760 map<TString,ClassRelInfo>::iterator iter = _c2fmap.begin() ;
2761 while(iter!=_c2fmap.end()) {
2763 oocxcoutD(_wspace,
ObjectHandling) <<
"RooWorkspace::CodeRepo::compileClasses() now processing class " << iter->first.Data() << endl ;
2768 << iter->first <<
" already in ROOT class table, skipping" << endl ;
2778 oocoutI(_wspace,
ObjectHandling) <<
"RooWorkspace::CodeRepo::compileClasses() reusing code export directory " << dirName.c_str()
2779 <<
" to extract coded embedded in workspace" << endl ;
2782 oocoutI(_wspace,
ObjectHandling) <<
"RooWorkspace::CodeRepo::compileClasses() creating code export directory " << dirName.c_str()
2783 <<
" to extract coded embedded in workspace" << endl ;
2785 oocoutE(_wspace,
ObjectHandling) <<
"RooWorkspace::CodeRepo::compileClasses() ERROR creating code export directory " << dirName.c_str()
2786 <<
" to extract coded embedded in workspace" << endl ;
2795 if (!writeExtraHeaders) {
2796 writeExtraHeaders = true ;
2798 map<TString,ExtraHeader>::iterator eiter = _ehmap.begin() ;
2799 while(eiter!=_ehmap.end()) {
2802 bool needEHWrite=true ;
2803 string fdname =
Form(
"%s/%s",dirName.c_str(),eiter->second._hname.Data()) ;
2804 ifstream ifdecl(fdname.c_str()) ;
2808 while (ifdecl.getline(buf, 64000)) {
2813 UInt_t crcWS = crc32(eiter->second._hfile.Data());
2814 needEHWrite = (crcFile != crcWS);
2819 oocoutI(_wspace,
ObjectHandling) <<
"RooWorkspace::CodeRepo::compileClasses() Extracting extra header file "
2825 ofstream fdecl(fdname.c_str());
2827 oocoutE(_wspace,
ObjectHandling) <<
"RooWorkspace::CodeRepo::compileClasses() ERROR opening file " << fdname
2828 <<
" for writing" << endl;
2831 fdecl << eiter->second._hfile.Data();
2840 ClassFiles& cfinfo = _fmap[iter->second._fileBase] ;
2842 oocxcoutD(_wspace,
ObjectHandling) <<
"RooWorkspace::CodeRepo::compileClasses() now processing file with base " << iter->second._fileBase << endl ;
2846 oocxcoutD(_wspace,
ObjectHandling) <<
"RooWorkspace::CodeRepo::compileClasses() file with base name " << iter->second._fileBase
2847 <<
" has already been extracted, skipping to next class" << endl ;
2852 bool needDeclWrite=true ;
2853 string fdname =
Form(
"%s/%s.%s",dirName.c_str(),iter->second._fileBase.Data(),cfinfo.
_hext.
Data()) ;
2854 ifstream ifdecl(fdname.c_str()) ;
2858 while (ifdecl.getline(buf, 64000)) {
2864 needDeclWrite = (crcFile!=crcWS) ;
2868 if (needDeclWrite) {
2869 oocoutI(_wspace,
ObjectHandling) <<
"RooWorkspace::CodeRepo::compileClasses() Extracting declaration code of class " << iter->first <<
", file " << fdname << endl ;
2870 ofstream fdecl(fdname.c_str()) ;
2873 << fdname <<
" for writing" << endl ;
2881 bool needImplWrite=true ;
2882 string finame =
Form(
"%s/%s.cxx",dirName.c_str(),iter->second._fileBase.Data()) ;
2883 ifstream ifimpl(finame.c_str()) ;
2887 while (ifimpl.getline(buf, 64000)) {
2893 needImplWrite = (crcFile!=crcWS) ;
2897 if (needImplWrite) {
2898 oocoutI(_wspace,
ObjectHandling) <<
"RooWorkspace::CodeRepo::compileClasses() Extracting implementation code of class " << iter->first <<
", file " << finame << endl ;
2899 ofstream fimpl(finame.c_str()) ;
2902 << finame <<
" for writing" << endl ;
2911 oocxcoutD(_wspace,
ObjectHandling) <<
"RooWorkspace::CodeRepo::compileClasses() marking code unit " << iter->second._fileBase <<
" as extracted" << endl ;
2914 oocoutI(_wspace,
ObjectHandling) <<
"RooWorkspace::CodeRepo::compileClasses() Compiling code unit " << iter->second._fileBase.Data() <<
" to define class " << iter->first << endl ;
2918 oocoutE(_wspace,
ObjectHandling) <<
"RooWorkspace::CodeRepo::compileClasses() ERROR compiling class " << iter->first.Data() <<
", to fix this you can do the following: " << endl
2919 <<
" 1) Fix extracted source code files in directory " << dirName.c_str() <<
"/" << endl
2920 <<
" 2) In clean ROOT session compiled fixed classes by hand using '.x " << dirName.c_str() <<
"/ClassName.cxx+'" << endl
2921 <<
" 3) Reopen file with RooWorkspace with broken source code in UPDATE mode. Access RooWorkspace to force loading of class" << endl
2922 <<
" Broken instances in workspace will _not_ be compiled, instead precompiled fixed instances will be used." << endl
2923 <<
" 4) Reimport fixed code in workspace using 'RooWorkspace::importClassCode(\"*\",true)' method, Write() updated workspace to file and close file" << endl
2924 <<
" 5) Reopen file in clean ROOT session to confirm that problems are fixed" << endl ;
2951 coutE(
ObjectHandling) <<
"RooWorkspace::WSDir::Add(" <<
GetName() <<
") ERROR: Directory is read-only representation of a RooWorkspace, use RooWorkspace::import() to add objects" << endl ;
2953 InternalAppend(
obj) ;
2964 coutE(
ObjectHandling) <<
"RooWorkspace::WSDir::Add(" <<
GetName() <<
") ERROR: Directory is read-only representation of a RooWorkspace, use RooWorkspace::import() to add objects" << endl ;
2966 InternalAppend(
obj) ;
2980 coutE(
ObjectHandling) <<
"RooWorkspace::exportToCint(" <<
GetName() <<
") WARNING: repeated calls to exportToCint() have no effect" << endl ;
2988 if (!nsname) nsname =
GetName() ;
2992 <<
") INFO: references to all objects in this workspace will be created in CINT in 'namespace " <<
_exportNSName <<
"'" << endl ;
3000 while((wobj=iter->Next())) {
3025 cxcoutD(
ObjectHandling) <<
"RooWorkspace::exportObj(" <<
GetName() <<
") INFO: Workspace object name " << wobj->
GetName() <<
" is not a valid C++ identifier and is not exported to CINT" << endl ;
3031 gROOT->ProcessLine(cintExpr.c_str()) ;
3041 string oname(
name) ;
3042 if (isdigit(oname[0])) {
3045 for (
UInt_t i=0 ; i<oname.size() ; i++) {
3047 if (!isalnum(
c) && (
c!=
'_')) {
3076 if (removedObj ==
_dir)
_dir =
nullptr;
3088 c.second.RecursiveRemove(removedObj);
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.
virtual bool isFundamental() const
Is this object a fundamental type that can be added to a dataset? Fundamental-type subclasses overrid...
void branchNodeServerList(RooAbsCollection *list, const RooAbsArg *arg=0, bool recurseNonDerived=false) const
Fill supplied list with all branch nodes of the arg tree starting with ourself as top node.
A space to attach TBranches.
virtual void removeAll()
Remove all arguments from our set, deleting them if we own them.
virtual bool addOwned(RooAbsArg &var, bool silent=false)
Add an argument and transfer the ownership to the collection.
virtual bool remove(const RooAbsArg &var, bool silent=false, bool matchByNameOnly=false)
Remove the specified argument from our list.
Int_t getSize() const
Return the number of elements in the collection.
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...
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=0) 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.
TIterator * MakeIterator(bool forward=true) const
Create a TIterator for this list.
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.
void setOwning(bool flag)
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.
void exportToCint(const char *namespaceName=0)
Activate export of workspace symbols to CINT in a namespace with given name.
std::string _exportNSName
! Name of CINT namespace to which contents are exported
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 unExport()
Delete exported reference in CINT namespace.
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.
std::list< RooAbsData * > allData() const
Return list of all dataset in the workspace.
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.
void Print(Option_t *opts=0) const override
Print contents of the workspace.
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 saveSnapshot(const char *name, const char *paramNames)
Save snapshot of values and attributes (including "Constant") of given parameters.
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.
bool _doExport
! Export contents of workspace to CINT?
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 isValidCPPID(const char *name)
Return true if given name is a valid C++ identifier name.
std::list< RooAbsData * > allEmbeddedData() const
Return list of all dataset in the workspace.
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< TObject * > allGenericObjects() const
Return list of all generic objects in the workspace.
static void setClassFileExportDir(const char *dir=0)
Specify the name of the directory in which embedded source code is unpacked and compiled.
RooLinkedList _studyMods
List if StudyManager modules.
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?
void exportObj(TObject *obj)
Export reference to given workspace object to CINT.
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 the ROOT distribution is automatically imported if on...
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...
bool cd(const char *path=0)
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.
Each class (see TClass) has a linked list of its base class(es).
TClass * GetClassPointer(Bool_t load=kTRUE)
Get pointer to the base class TClass.
Buffer base class used for serializing objects.
virtual void SetByteCount(UInt_t cntpos, Bool_t packInVersion=kFALSE)=0
virtual Int_t ReadClassBuffer(const TClass *cl, void *pointer, const TClass *onfile_class=0)=0
virtual Version_t ReadVersion(UInt_t *start=0, UInt_t *bcnt=0, const TClass *cl=0)=0
virtual Int_t CheckByteCount(UInt_t startpos, UInt_t bcnt, const TClass *clss)=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(const char *path=nullptr) 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.
Iterator abstract base class.
virtual TObject * Next()=0
TIterator * MakeIterator(Bool_t dir=kIterForward) const override
Return a list iterator.
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.
virtual void SetName(const char *name)
Set the name of the TNamed.
Mother of all ROOT objects.
virtual Int_t Write(const char *name=0, Int_t option=0, Int_t bufsize=0)
Write this object to the current directory.
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 TClass * IsA() const
Regular expression class.
const char * Data() const
Bool_t BeginsWith(const char *s, ECaseCompare cmp=kExact) 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