181 TNamed(other), _uuid(other._uuid), _classes(other._classes,this), _dir(nullptr), _factory(nullptr), _doExport(
kFALSE), _openTrans(
kFALSE)
190 for(
auto * snap : static_range_cast<RooArgSet*>(other.
_snapshots)) {
191 auto snapClone =
static_cast<RooArgSet*
>(snap->snapshot());
192 snapClone->
setName(snap->GetName()) ;
197 for (map<string,RooArgSet>::const_iterator iter3 = other.
_namedSets.begin() ; iter3 != other.
_namedSets.end() ; ++iter3) {
207 while((gobj=iter4->
Next())) {
261 std::vector<std::string> tokens =
ROOT::Split(fileSpec,
":");
264 if (tokens.size() != 3) {
265 std::ostringstream stream;
266 for (
const auto& token : tokens) {
267 stream <<
"\n\t" << token;
269 coutE(InputArguments) <<
"RooWorkspace(" <<
GetName() <<
") ERROR in file specification, expecting 'filename:wsname:objname', but '" << fileSpec <<
"' given."
270 <<
"\nTokens read are:" << stream.str() << endl;
274 const std::string& filename = tokens[0];
275 const std::string& wsname = tokens[1];
276 const std::string& objname = tokens[2];
281 coutE(InputArguments) <<
"RooWorkspace(" <<
GetName() <<
") ERROR opening file " << filename << endl ;
288 coutE(InputArguments) <<
"RooWorkspace(" <<
GetName() <<
") ERROR: No object named " << wsname <<
" in file " << filename
289 <<
" or object is not a RooWorkspace" << endl ;
296 Bool_t ret =
import(*warg,arg1,arg2,arg3,arg4,arg5,arg6,arg7,arg8,arg9) ;
302 Bool_t ret =
import(*wdata,arg1,arg2,arg3,arg4,arg5,arg6,arg7,arg8,arg9) ;
307 coutE(InputArguments) <<
"RooWorkspace(" <<
GetName() <<
") ERROR: No RooAbsArg or RooAbsData object named " << objname
308 <<
" in workspace " << wsname <<
" in file " << filename << endl ;
325 while((oneArg=(
RooAbsArg*)iter->Next())) {
326 ret |=
import(*oneArg,arg1,arg2,arg3,arg4,arg5,arg6,arg7,arg8,arg9) ;
378 pc.
defineString(
"conflictSuffix",
"RenameConflictNodes",0) ;
379 pc.
defineInt(
"renameConflictOrig",
"RenameConflictNodes",0,0) ;
381 pc.
defineString(
"allVarsSuffix",
"RenameAllVariables",0) ;
382 pc.
defineString(
"allVarsExcept",
"RenameAllVariables",1) ;
386 pc.
defineInt(
"useExistingNodes",
"RecycleConflictNodes",0,0) ;
388 pc.
defineInt(
"noRecursion",
"NoRecursion",0,0) ;
389 pc.
defineMutex(
"RenameConflictNodes",
"RenameAllNodes") ;
390 pc.
defineMutex(
"RenameConflictNodes",
"RecycleConflictNodes") ;
391 pc.
defineMutex(
"RenameAllNodes",
"RecycleConflictNodes") ;
392 pc.
defineMutex(
"RenameVariable",
"RenameAllVariables") ;
401 const char* suffixC = pc.
getString(
"conflictSuffix") ;
402 const char* suffixA = pc.
getString(
"allSuffix") ;
403 const char* suffixV = pc.
getString(
"allVarsSuffix") ;
404 const char* exceptVars = pc.
getString(
"allVarsExcept") ;
405 const char* varChangeIn = pc.
getString(
"varChangeIn") ;
406 const char* varChangeOut = pc.
getString(
"varChangeOut") ;
407 Bool_t renameConflictOrig = pc.
getInt(
"renameConflictOrig") ;
408 Int_t useExistingNodes = pc.
getInt(
"useExistingNodes") ;
414 if (suffixC && strlen(suffixC)==0) suffixC = 0 ;
415 if (suffixA && strlen(suffixA)==0) suffixA = 0 ;
418 const char* suffix = suffixA ? suffixA : suffixC ;
421 map<string,string> varMap ;
422 if (strlen(varChangeIn)>0) {
425 const std::vector<std::string> tokIn =
ROOT::Split(varChangeIn,
", ",
true);
426 const std::vector<std::string> tokOut =
ROOT::Split(varChangeOut,
", ",
true);
427 for (
unsigned int i=0; i < tokIn.size(); ++i) {
428 varMap.insert(std::make_pair(tokIn[i], tokOut[i]));
431 assert(tokIn.size() == tokOut.size());
436 std::set<string> exceptVarNames ;
437 if (exceptVars && strlen(exceptVars)) {
438 const std::vector<std::string> toks =
ROOT::Split(exceptVars,
", ",
true);
439 exceptVarNames.insert(toks.begin(), toks.end());
442 if (suffixV != 0 && strlen(suffixV)>0) {
444 for (
const auto v : *vars) {
445 if (exceptVarNames.find(
v->GetName())==exceptVarNames.end()) {
446 varMap[
v->GetName()] =
Form(
"%s_%s",
v->GetName(),suffixV) ;
458 Bool_t factoryMatch = (tagIn && tagWs && !strcmp(tagIn,tagWs)) ;
460 ((
RooAbsArg&)inArg).setAttribute(
"RooWorkspace::Recycle") ;
463 if (!suffix && wsarg && !useExistingNodes && !(inArg.
isFundamental() && varMap[inArg.
GetName()]!=
"")) {
466 coutE(ObjectHandling) <<
"RooWorkSpace::import(" <<
GetName() <<
") ERROR importing object named " << inArg.
GetName()
467 <<
": another instance with same name already in the workspace and no conflict resolution protocol specified" << endl ;
471 coutI(ObjectHandling) <<
"RooWorkSpace::import(" <<
GetName() <<
") Object " << inArg.
GetName() <<
" is already in workspace!" << endl ;
477 coutI(ObjectHandling) <<
"RooWorkSpace::import(" <<
GetName() <<
") Recycling existing object " << inArg.
GetName() <<
" created with identical factory specification" << endl ;
486 branchSet.
add(inArg) ;
491 for (
const auto branch : branchSet) {
493 if (wsbranch && wsbranch!=branch && !branch->
getAttribute(
"RooWorkspace::Recycle") && !useExistingNodes) {
494 conflictNodes.
add(*branch) ;
499 if (conflictNodes.
getSize()>0 && !suffix && !useExistingNodes) {
500 coutE(ObjectHandling) <<
"RooWorkSpace::import(" <<
GetName() <<
") ERROR object named " << inArg.
GetName() <<
": component(s) "
501 << conflictNodes <<
" already in the workspace and no conflict resolution protocol specified" << endl ;
514 conflictNodes.
add(branchSet) ;
518 string topName2 = cloneTop->
GetName() ;
519 if (!renameConflictOrig) {
521 for (
const auto cnode : conflictNodes) {
523 string origName = cnode2->
GetName() ;
526 string tag =
Form(
"ORIGNAME:%s",origName.c_str()) ;
529 string tag2 =
Form(
"%s",origName.c_str()) ;
534 if (cnode2==cloneTop) {
539 coutI(ObjectHandling) <<
"RooWorkspace::import(" <<
GetName()
540 <<
") Resolving name conflict in workspace by changing name of imported node "
541 << origName <<
" to " << cnode2->
GetName() << endl ;
547 for (
const auto cnode : conflictNodes) {
549 string origName = cnode->GetName() ;
558 wsnode->
SetName(
Form(
"%s_%s",cnode->GetName(),suffix)) ;
559 wsnode->
SetTitle(
Form(
"%s (%s)",cnode->GetTitle(),suffix)) ;
562 for (
unsigned int n=1;
true; ++
n) {
563 string newname =
Form(
"%s_%s_%d",cnode->GetName(),suffix,
n) ;
565 wsnode->
SetName(newname.c_str()) ;
566 wsnode->
SetTitle(
Form(
"%s (%s %d)",cnode->GetTitle(),suffix,
n)) ;
572 coutI(ObjectHandling) <<
"RooWorkspace::import(" <<
GetName()
573 <<
") Resolving name conflict in workspace by changing name of original node "
574 << origName <<
" to " << wsnode->
GetName() << endl ;
577 coutW(ObjectHandling) <<
"RooWorkspce::import(" <<
GetName() <<
") Internal error: expected to find existing node "
578 << origName <<
" to be renamed, but didn't find it..." << endl ;
585 if (strlen(varChangeIn)>0 || (suffixV && strlen(suffixV)>0)) {
588 for (
const auto cnode : cloneSet) {
590 if (varMap.find(cnode->GetName())!=varMap.end()) {
591 string origName = cnode->GetName() ;
592 cnode->SetName(varMap[cnode->GetName()].c_str()) ;
593 string tag =
Form(
"ORIGNAME:%s",origName.c_str()) ;
594 cnode->setAttribute(tag.c_str()) ;
595 if (!cnode->getStringAttribute(
"origName")) {
596 string tag2 =
Form(
"%s",origName.c_str()) ;
597 cnode->setStringAttribute(
"origName",tag2.c_str()) ;
601 coutI(ObjectHandling) <<
"RooWorkspace::import(" <<
GetName() <<
") Changing name of variable "
602 << origName <<
" to " << cnode->GetName() <<
" on request" << endl ;
605 if (cnode==cloneTop) {
606 topName2 = cnode->GetName() ;
622 for (
const auto branch2 : branchSet2) {
624 conflictNodes2.
add(*branch2) ;
629 if (conflictNodes2.
getSize()) {
630 coutE(ObjectHandling) <<
"RooWorkSpace::import(" <<
GetName() <<
") ERROR object named " << inArg.
GetName() <<
": component(s) "
631 << conflictNodes2 <<
" cause naming conflict after conflict resolution protocol was executed" << endl ;
636 for (
const auto node : cloneSet2) {
637 if (node->importWorkspaceHook(*
this)) {
638 coutE(ObjectHandling) <<
"RooWorkSpace::import(" <<
GetName() <<
") ERROR object named " << node->
GetName()
639 <<
" has an error in importing in one or more of its auxiliary objects, aborting" << endl ;
646 for (
const auto node : cloneSet2) {
649 coutW(ObjectHandling) <<
"RooWorkspace::import(" <<
GetName() <<
") WARNING: problems import class code of object "
650 << node->IsA()->
GetName() <<
"::" << node->GetName() <<
", reading of workspace will require external definition of class" << endl ;
656 node->setExpensiveObjectCache(
_eocache) ;
664 if (!silence && useExistingNodes) {
665 coutI(ObjectHandling) <<
"RooWorkspace::import(" <<
GetName() <<
") using existing copy of " << node->IsA()->
GetName()
666 <<
"::" << node->GetName() <<
" for import of " << cloneTop2->IsA()->
GetName() <<
"::"
667 << cloneTop2->
GetName() << endl ;
679 coutI(ObjectHandling) <<
"RooWorkspace::import(" <<
GetName() <<
") importing " << node->IsA()->GetName() <<
"::"
680 << node->GetName() << endl ;
686 if (
_dir && node->IsA() != RooConstVar::Class()) {
689 if (
_doExport && node->IsA() != RooConstVar::Class()) {
697 if (recycledNodes.
getSize()>0) {
698 for (
const auto node : cloneSet2) {
699 node->redirectServers(recycledNodes) ;
744 pc.
defineInt(
"embedded",
"Embedded",0,0) ;
754 const char* dsetName = pc.
getString(
"dsetName") ;
755 const char* varChangeIn = pc.
getString(
"varChangeIn") ;
756 const char* varChangeOut = pc.
getString(
"varChangeOut") ;
761 coutI(ObjectHandling) <<
"RooWorkspace::import(" <<
GetName() <<
") importing dataset " << inData.
GetName() << endl ;
764 if (dsetName && strlen(dsetName)==0) {
775 if (dsetName && dataList.
FindObject(dsetName)) {
776 coutE(ObjectHandling) <<
"RooWorkspace::import(" <<
GetName() <<
") ERROR dataset with name " << dsetName <<
" already exists in workspace, import aborted" << endl ;
780 coutE(ObjectHandling) <<
"RooWorkspace::import(" <<
GetName() <<
") ERROR dataset with name " << inData.
GetName() <<
" already exists in workspace, import aborted" << endl ;
788 coutI(ObjectHandling) <<
"RooWorkSpace::import(" <<
GetName() <<
") changing name of dataset from " << inData.
GetName() <<
" to " << dsetName << endl ;
796 if (strlen(varChangeIn)>0) {
798 const std::vector<std::string> tokIn =
ROOT::Split(varChangeIn,
",");
799 const std::vector<std::string> tokOut =
ROOT::Split(varChangeOut,
",");
800 for (
unsigned int i=0; i < tokIn.size(); ++i) {
802 coutI(ObjectHandling) <<
"RooWorkSpace::import(" <<
GetName() <<
") changing name of dataset observable " << tokIn[i] <<
" to " << tokOut[i] << endl ;
819 dataList.
Add(clone) ;
829 while ((carg=iter2.
next())) {
850 coutW(InputArguments) <<
"RooWorkspace::defineSet(" <<
GetName() <<
") WARNING redefining previously defined named set " <<
name << endl ;
864 coutE(InputArguments) <<
"RooWorkspace::defineSet(" <<
GetName() <<
") ERROR set constituent \"" << sarg->
GetName()
865 <<
"\" is not in workspace and importMissing option is disabled" << endl ;
890 coutW(InputArguments) <<
"RooWorkspace::defineSet(" <<
GetName()
891 <<
") WARNING redefining previously defined named set " <<
name << endl;
910 coutW(InputArguments) <<
"RooWorkspace::defineSet(" <<
GetName() <<
") WARNING redefining previously defined named set " <<
name << endl ;
916 for (
const std::string& token :
ROOT::Split(contentList,
",")) {
918 if (!
arg(token.c_str())) {
919 coutE(InputArguments) <<
"RooWorkspace::defineSet(" <<
GetName() <<
") ERROR proposed set constituent \"" << token
920 <<
"\" is not in workspace" << endl ;
923 wsargs.
add(*
arg(token.c_str())) ;
945 for (
const std::string& token :
ROOT::Split(newContents,
",")) {
947 if (!
arg(token.c_str())) {
948 coutE(InputArguments) <<
"RooWorkspace::defineSet(" <<
GetName() <<
") ERROR proposed set constituent \"" << token
949 <<
"\" is not in workspace" << endl ;
952 wsargs.
add(*
arg(token.c_str())) ;
970 return (i!=
_namedSets.end()) ? &(i->second) : 0 ;
983 coutE(InputArguments) <<
"RooWorkspace::renameSet(" <<
GetName() <<
") ERROR a set with name " <<
name
984 <<
" does not exist" << endl ;
990 coutE(InputArguments) <<
"RooWorkspace::renameSet(" <<
GetName() <<
") ERROR a set with name " << newName
991 <<
" already exists" << endl ;
1014 coutE(InputArguments) <<
"RooWorkspace::removeSet(" <<
GetName() <<
") ERROR a set with name " <<
name
1015 <<
" does not exist" << endl ;
1088 if (
_dir && sarg->IsA() != RooConstVar::Class()) {
1091 if (
_doExport && sarg->IsA() != RooConstVar::Class()) {
1134 coutW(ObjectHandling) <<
"RooWorkspace::import(" <<
GetName() <<
") WARNING: problems import class code of object "
1135 << carg->IsA()->
GetName() <<
"::" << carg->
GetName() <<
", reading of workspace will require external definition of class" << endl ;
1171 delete actualParams ;
1176 snapshot->
assign(params) ;
1181 coutI(ObjectHandling) <<
"RooWorkspace::saveSnaphot(" <<
GetName() <<
") replacing previous snapshot with name " <<
name << endl ;
1202 coutE(ObjectHandling) <<
"RooWorkspace::loadSnapshot(" <<
GetName() <<
") no snapshot with name " <<
name <<
" is available" << endl ;
1207 actualParams->
assign(*snap) ;
1208 delete actualParams ;
1321 for (
const std::string& token :
ROOT::Split(nameList,
",")) {
1326 coutE(InputArguments) <<
" RooWorkspace::argSet(" <<
GetName() <<
") no RooAbsArg named \"" << token <<
"\" in workspace" << endl ;
1446 if (parg->IsA()->
InheritsFrom(RooAbsCategory::Class()) &&
1467 if (parg->IsA()->
InheritsFrom(RooResolutionModel::Class())) {
1489 !parg->IsA()->
InheritsFrom(RooResolutionModel::Class())) {
1503 list<RooAbsData*> ret ;
1507 ret.push_back(dat) ;
1519 list<RooAbsData*> ret ;
1523 ret.push_back(dat) ;
1536 list<TObject*> ret ;
1542 if (gobj->IsA()==RooTObjWrap::Class()) {
1545 ret.push_back(gobj) ;
1578 if (mapEntry && strlen(mapEntry)>0) {
1588 if (implfile.empty() || declfile.empty()) {
1589 oocoutE(
_wspace,ObjectHandling) <<
"RooWorkspace::CodeRepo(" <<
_wspace->
GetName() <<
") ERROR: cannot retrieve code file names for class "
1590 << tc->
GetName() <<
" through ROOT TClass interface, unable to import code" << endl ;
1606 << tc->
GetName() <<
" : it cannot be persisted because it doesn't have a default constructor. Please fix " << endl ;
1613 char *declpath =
nullptr, *implpath =
nullptr;
1639 << tc->
GetName() <<
" because header file " << declfile <<
" is not found in current directory nor in $ROOTSYS" ;
1653 ooccoutW(
_wspace,ObjectHandling) <<
". To fix this problem, add the required directory to the search "
1654 <<
"path using RooWorkspace::addClassDeclImportDir(const char* dir)" << endl ;
1685 << tc->
GetName() <<
" because implementation file " << implfile <<
" is not found in current directory nor in $ROOTSYS" ;
1699 ooccoutW(
_wspace,ObjectHandling) <<
". To fix this problem add the required directory to the search "
1700 <<
"path using RooWorkspace::addClassImplImportDir(const char* dir)" << endl;
1722 int dotpos2 = strrchr(declfilename.c_str(),
'.') - declfilename.c_str() ;
1723 string declfilebase = declfilename.substr(0,dotpos2) ;
1724 string declfileext = declfilename.substr(dotpos2+1) ;
1726 list<string> extraHeaders ;
1729 if (
_fmap.find(declfilebase) ==
_fmap.end()) {
1732 fstream fdecl(declpath?declpath:declfile.c_str()) ;
1737 <<
") ERROR opening declaration file " << declfile << endl ;
1744 <<
") importing code of class " << tc->
GetName()
1745 <<
" from " << (implpath?implpath:implfile.c_str())
1746 <<
" and " << (declpath?declpath:declfile.c_str()) << endl ;
1751 while(fdecl.getline(buf,1023)) {
1755 char* extincfile = 0 ;
1758 if (strstr(buf,
"#include")) {
1761 strlcpy(tmp, buf, 64000);
1762 Bool_t stdinclude = strchr(buf,
'<');
1763 strtok(tmp,
" <\"");
1764 char *incfile = strtok(0,
" <>\"");
1769 hpath +=
"/include/";
1773 <<
") scheduling include file " << incfile <<
" for import" << endl;
1774 extraHeaders.push_back(incfile);
1775 extincfile = incfile;
1776 processedInclude =
kTRUE;
1781 if (processedInclude) {
1782 decl +=
"// external include file below retrieved from workspace code storage\n" ;
1783 decl +=
Form(
"#include \"%s\"\n",extincfile) ;
1791 fstream fimpl(implpath?implpath:implfile.c_str()) ;
1796 <<
") ERROR opening implementation file " << implfile << endl ;
1805 while(fimpl.getline(buf,1023)) {
1811 char* extincfile = 0 ;
1814 if (strstr(buf,
"#include")) {
1817 strlcpy(tmp, buf, 64000);
1818 Bool_t stdinclude = strchr(buf,
'<');
1819 strtok(tmp,
" <\"");
1820 char *incfile = strtok(0,
" <>\"");
1822 if (strstr(incfile, declfilename.c_str())) {
1823 foundSelfInclude =
kTRUE;
1826 if (!stdinclude && !foundSelfInclude) {
1829 hpath +=
"/include/";
1834 <<
") scheduling include file " << incfile <<
" for import" << endl;
1835 extraHeaders.push_back(incfile);
1836 extincfile = incfile;
1837 processedInclude =
kTRUE;
1844 if (foundSelfInclude) {
1847 impl +=
"// class declaration include file below retrieved from workspace code storage\n" ;
1848 impl +=
Form(
"#include \"%s.%s\"\n",declfilebase.c_str(),declfileext.c_str()) ;
1849 }
else if (processedInclude) {
1850 impl +=
"// external include file below retrieved from workspace code storage\n" ;
1851 impl +=
Form(
"#include \"%s\"\n",extincfile) ;
1859 _fmap[declfilebase]._hfile = decl ;
1860 _fmap[declfilebase]._cxxfile = impl ;
1861 _fmap[declfilebase]._hext = declfileext ;
1864 for (list<string>::iterator ehiter = extraHeaders.begin() ; ehiter != extraHeaders.end() ; ++ehiter ) {
1868 eh.
_hname = ehiter->c_str() ;
1869 fstream fehdr(ehiter->c_str()) ;
1872 while(fehdr.getline(buf2,1023)) {
1875 if (strstr(buf2,
"#include")) {
1878 strlcpy(tmp, buf2, 64000);
1879 Bool_t stdinclude = strchr(buf,
'<');
1880 strtok(tmp,
" <\"");
1881 char *incfile = strtok(0,
" <>\"");
1886 hpath +=
"/include/";
1890 <<
") scheduling recursive include file " << incfile <<
" for import"
1892 extraHeaders.push_back(incfile);
1900 eh.
_hfile = ehimpl.c_str();
1902 _ehmap[ehiter->c_str()] = eh;
1910 <<
") code of class " << tc->
GetName()
1911 <<
" was already imported from " << (implpath?implpath:implfile.c_str())
1912 <<
" and " << (declpath?declpath:declfile.c_str()) << endl ;
1927 list<TClass*> bases ;
1929 if (baseNameList.
Length()>0) {
1930 baseNameList +=
"," ;
1942 list<TClass*>::iterator biter = bases.begin() ;
1943 while(biter!=bases.end()) {
1976 if (darg->IsA() != RooConstVar::Class()) {
1997 if (oldObj && !replaceExisting) {
1998 coutE(InputArguments) <<
"RooWorkspace::import(" <<
GetName() <<
") generic object with name "
1999 <<
object.
GetName() <<
" is already in workspace and replaceExisting flag is set to false" << endl ;
2005 object.IsA()->SetDirectoryAutoAdd(0);
2016 object.IsA()->SetDirectoryAutoAdd(func);
2038 if (oldObj && !replaceExisting) {
2039 coutE(InputArguments) <<
"RooWorkspace::import(" <<
GetName() <<
") generic object with name "
2040 <<
object.
GetName() <<
" is already in workspace and replaceExisting flag is set to false" << endl ;
2094 if (ret)
return ret ;
2098 if (ret)
return ret ;
2115 if (!gobj)
return 0 ;
2118 if (gobj->IsA()==RooTObjWrap::Class())
return ((
RooTObjWrap*)gobj)->obj() ;
2140 TFile f(fileName,recreate?
"RECREATE":
"UPDATE") ;
2155 cxcoutD(ObjectHandling) <<
"INFO: Creating RooFactoryWSTool associated with this workspace" << endl ;
2156 _factory = make_unique<RooFactoryWSTool>(*
this);
2182 if (
TString(opts).Contains(
"t")) {
2185 if (
TString(opts).Contains(
"v")) {
2189 cout << endl <<
"RooWorkspace(" <<
GetName() <<
") " <<
GetTitle() <<
" contents" << endl << endl ;
2222 funcSet.
add(*parg) ;
2227 if (parg->IsA()->
InheritsFrom(RooAbsCategory::Class()) &&
2230 catfuncSet.
add(*parg) ;
2236 if (parg->IsA()->
InheritsFrom(RooResolutionModel::Class())) {
2238 convResoSet.
add(*parg) ;
2240 resoSet.
add(*parg) ;
2245 !parg->IsA()->
InheritsFrom(RooResolutionModel::Class())) {
2253 funcSet.
add(*parg) ;
2256 if (parg->IsA()->
InheritsFrom(RooAbsCategory::Class()) &&
2258 catfuncSet.
add(*parg) ;
2279 cout <<
"variables" << endl ;
2280 cout <<
"---------" << endl ;
2281 cout << varSet << endl ;
2286 cout <<
"p.d.f.s" << endl ;
2287 cout <<
"-------" << endl ;
2303 cout <<
"analytical resolution models" << endl ;
2304 cout <<
"----------------------------" << endl ;
2321 cout <<
"functions" << endl ;
2322 cout <<
"--------" << endl ;
2337 cout <<
"category functions" << endl ;
2338 cout <<
"------------------" << endl ;
2353 cout <<
"datasets" << endl ;
2354 cout <<
"--------" << endl ;
2358 cout << data2->IsA()->
GetName() <<
"::" << data2->
GetName() << *data2->
get() << endl ;
2365 cout <<
"embedded datasets (in pdfs and functions)" << endl ;
2366 cout <<
"-----------------------------------------" << endl ;
2370 cout << data2->IsA()->
GetName() <<
"::" << data2->
GetName() << *data2->
get() << endl ;
2377 cout <<
"parameter snapshots" << endl ;
2378 cout <<
"-------------------" << endl ;
2382 cout << snap->
GetName() <<
" = (" ;
2388 cout <<
a->GetName() <<
"=" ;
2389 a->printValue(cout) ;
2390 if (
a->isConstant()) {
2394 cout <<
")" << endl ;
2403 cout <<
"named sets" << endl ;
2404 cout <<
"----------" << endl ;
2405 for (map<string,RooArgSet>::const_iterator it =
_namedSets.begin() ; it !=
_namedSets.end() ; ++it) {
2407 cout << it->first <<
":" << it->second << endl;
2416 cout <<
"generic objects" << endl ;
2417 cout <<
"---------------" << endl ;
2421 if (gobj->IsA()==RooTObjWrap::Class()) {
2422 cout << ((
RooTObjWrap*)gobj)->obj()->IsA()->
GetName() <<
"::" << gobj->GetName() << endl ;
2424 cout << gobj->IsA()->
GetName() <<
"::" << gobj->
GetName() << endl ;
2433 cout <<
"study modules" << endl ;
2434 cout <<
"-------------" << endl ;
2438 cout << smobj->IsA()->
GetName() <<
"::" << smobj->
GetName() << endl ;
2446 cout <<
"embedded class code" << endl ;
2447 cout <<
"-------------------" << endl ;
2453 cout <<
"embedded precalculated expensive components" << endl ;
2454 cout <<
"-------------------------------------------" << endl ;
2470void RooWorkspace::CodeRepo::Streamer(
TBuffer &R__b)
2485 name.Streamer(R__b) ;
2486 _fmap[
name]._hext.Streamer(R__b) ;
2487 _fmap[
name]._hfile.Streamer(R__b) ;
2488 _fmap[
name]._cxxfile.Streamer(R__b) ;
2496 name.Streamer(R__b) ;
2497 _c2fmap[
name]._baseName.Streamer(R__b) ;
2498 _c2fmap[
name]._fileBase.Streamer(R__b) ;
2507 name.Streamer(R__b) ;
2508 _ehmap[
name]._hname.Streamer(R__b) ;
2509 _ehmap[
name]._hfile.Streamer(R__b) ;
2516 _compiledOK = !compileClasses() ;
2524 UInt_t count = _fmap.size() ;
2526 map<TString,ClassFiles>::iterator iter = _fmap.begin() ;
2527 while(iter!=_fmap.end()) {
2528 TString key_copy(iter->first) ;
2529 key_copy.Streamer(R__b) ;
2530 iter->second._hext.Streamer(R__b) ;
2531 iter->second._hfile.Streamer(R__b);
2532 iter->second._cxxfile.Streamer(R__b);
2538 count = _c2fmap.size() ;
2540 map<TString,ClassRelInfo>::iterator iter2 = _c2fmap.begin() ;
2541 while(iter2!=_c2fmap.end()) {
2542 TString key_copy(iter2->first) ;
2543 key_copy.Streamer(R__b) ;
2544 iter2->second._baseName.Streamer(R__b) ;
2545 iter2->second._fileBase.Streamer(R__b);
2550 count = _ehmap.size() ;
2552 map<TString,ExtraHeader>::iterator iter3 = _ehmap.begin() ;
2553 while(iter3!=_ehmap.end()) {
2554 TString key_copy(iter3->first) ;
2555 key_copy.Streamer(R__b) ;
2556 iter3->second._hname.Streamer(R__b) ;
2557 iter3->second._hfile.Streamer(R__b);
2575void RooWorkspace::Streamer(
TBuffer &R__b)
2584 while((node=fiter.
next())) {
2595 if (node->IsA()->
InheritsFrom(RooAbsOptTestStatistic::Class())) {
2598 cout <<
"RooWorkspace::Streamer(" <<
GetName() <<
") " << node->IsA()->
GetName() <<
"::" << node->
GetName()
2610 map<RooAbsArg*,vector<RooAbsArg *> > extClients, extValueClients, extShapeClients ;
2618 for (
auto client : clientsTmp) {
2622 auto& bufferVec = extClients[tmparg];
2624 bufferVec.insert(bufferVec.end(), refCount, client);
2631 for (
auto vclient : clientsTmp) {
2633 cxcoutD(ObjectHandling) <<
"RooWorkspace::Streamer(" <<
GetName() <<
") element " << tmparg->
GetName()
2634 <<
" has external value client link to " << vclient <<
" (" << vclient->GetName() <<
") with ref count " << tmparg->
_clientListValue.
refCount(vclient) << endl ;
2637 auto& bufferVec = extValueClients[tmparg];
2639 bufferVec.insert(bufferVec.end(), refCount, vclient);
2646 for (
auto sclient : clientsTmp) {
2648 cxcoutD(ObjectHandling) <<
"RooWorkspace::Streamer(" <<
GetName() <<
") element " << tmparg->
GetName()
2649 <<
" has external shape client link to " << sclient <<
" (" << sclient->GetName() <<
") with ref count " << tmparg->
_clientListShape.
refCount(sclient) << endl ;
2652 auto& bufferVec = extShapeClients[tmparg];
2654 bufferVec.insert(bufferVec.end(), refCount, sclient);
2667 for (
auto &iterx : extClients) {
2668 for (
auto client : iterx.second) {
2669 iterx.first->_clientList.Add(client);
2673 for (
auto &iterx : extValueClients) {
2674 for (
auto client : iterx.second) {
2675 iterx.first->_clientListValue.Add(client);
2679 for (
auto &iterx : extShapeClients) {
2680 for (
auto client : iterx.second) {
2681 iterx.first->_clientListShape.Add(client);
2697 map<TString,ClassRelInfo>::const_iterator iter = _c2fmap.begin() ;
2698 while(iter!=_c2fmap.end()) {
2702 ret += iter->first ;
2715 static const UInt_t crctab[256] = { 0x00000000,
2716 0x04c11db7, 0x09823b6e, 0x0d4326d9, 0x130476dc, 0x17c56b6b,
2717 0x1a864db2, 0x1e475005, 0x2608edb8, 0x22c9f00f, 0x2f8ad6d6,
2718 0x2b4bcb61, 0x350c9b64, 0x31cd86d3, 0x3c8ea00a, 0x384fbdbd,
2719 0x4c11db70, 0x48d0c6c7, 0x4593e01e, 0x4152fda9, 0x5f15adac,
2720 0x5bd4b01b, 0x569796c2, 0x52568b75, 0x6a1936c8, 0x6ed82b7f,
2721 0x639b0da6, 0x675a1011, 0x791d4014, 0x7ddc5da3, 0x709f7b7a,
2722 0x745e66cd, 0x9823b6e0, 0x9ce2ab57, 0x91a18d8e, 0x95609039,
2723 0x8b27c03c, 0x8fe6dd8b, 0x82a5fb52, 0x8664e6e5, 0xbe2b5b58,
2724 0xbaea46ef, 0xb7a96036, 0xb3687d81, 0xad2f2d84, 0xa9ee3033,
2725 0xa4ad16ea, 0xa06c0b5d, 0xd4326d90, 0xd0f37027, 0xddb056fe,
2726 0xd9714b49, 0xc7361b4c, 0xc3f706fb, 0xceb42022, 0xca753d95,
2727 0xf23a8028, 0xf6fb9d9f, 0xfbb8bb46, 0xff79a6f1, 0xe13ef6f4,
2728 0xe5ffeb43, 0xe8bccd9a, 0xec7dd02d, 0x34867077, 0x30476dc0,
2729 0x3d044b19, 0x39c556ae, 0x278206ab, 0x23431b1c, 0x2e003dc5,
2730 0x2ac12072, 0x128e9dcf, 0x164f8078, 0x1b0ca6a1, 0x1fcdbb16,
2731 0x018aeb13, 0x054bf6a4, 0x0808d07d, 0x0cc9cdca, 0x7897ab07,
2732 0x7c56b6b0, 0x71159069, 0x75d48dde, 0x6b93dddb, 0x6f52c06c,
2733 0x6211e6b5, 0x66d0fb02, 0x5e9f46bf, 0x5a5e5b08, 0x571d7dd1,
2734 0x53dc6066, 0x4d9b3063, 0x495a2dd4, 0x44190b0d, 0x40d816ba,
2735 0xaca5c697, 0xa864db20, 0xa527fdf9, 0xa1e6e04e, 0xbfa1b04b,
2736 0xbb60adfc, 0xb6238b25, 0xb2e29692, 0x8aad2b2f, 0x8e6c3698,
2737 0x832f1041, 0x87ee0df6, 0x99a95df3, 0x9d684044, 0x902b669d,
2738 0x94ea7b2a, 0xe0b41de7, 0xe4750050, 0xe9362689, 0xedf73b3e,
2739 0xf3b06b3b, 0xf771768c, 0xfa325055, 0xfef34de2, 0xc6bcf05f,
2740 0xc27dede8, 0xcf3ecb31, 0xcbffd686, 0xd5b88683, 0xd1799b34,
2741 0xdc3abded, 0xd8fba05a, 0x690ce0ee, 0x6dcdfd59, 0x608edb80,
2742 0x644fc637, 0x7a089632, 0x7ec98b85, 0x738aad5c, 0x774bb0eb,
2743 0x4f040d56, 0x4bc510e1, 0x46863638, 0x42472b8f, 0x5c007b8a,
2744 0x58c1663d, 0x558240e4, 0x51435d53, 0x251d3b9e, 0x21dc2629,
2745 0x2c9f00f0, 0x285e1d47, 0x36194d42, 0x32d850f5, 0x3f9b762c,
2746 0x3b5a6b9b, 0x0315d626, 0x07d4cb91, 0x0a97ed48, 0x0e56f0ff,
2747 0x1011a0fa, 0x14d0bd4d, 0x19939b94, 0x1d528623, 0xf12f560e,
2748 0xf5ee4bb9, 0xf8ad6d60, 0xfc6c70d7, 0xe22b20d2, 0xe6ea3d65,
2749 0xeba91bbc, 0xef68060b, 0xd727bbb6, 0xd3e6a601, 0xdea580d8,
2750 0xda649d6f, 0xc423cd6a, 0xc0e2d0dd, 0xcda1f604, 0xc960ebb3,
2751 0xbd3e8d7e, 0xb9ff90c9, 0xb4bcb610, 0xb07daba7, 0xae3afba2,
2752 0xaafbe615, 0xa7b8c0cc, 0xa379dd7b, 0x9b3660c6, 0x9ff77d71,
2753 0x92b45ba8, 0x9675461f, 0x8832161a, 0x8cf30bad, 0x81b02d74,
2754 0x857130c3, 0x5d8a9099, 0x594b8d2e, 0x5408abf7, 0x50c9b640,
2755 0x4e8ee645, 0x4a4ffbf2, 0x470cdd2b, 0x43cdc09c, 0x7b827d21,
2756 0x7f436096, 0x7200464f, 0x76c15bf8, 0x68860bfd, 0x6c47164a,
2757 0x61043093, 0x65c52d24, 0x119b4be9, 0x155a565e, 0x18197087,
2758 0x1cd86d30, 0x029f3d35, 0x065e2082, 0x0b1d065b, 0x0fdc1bec,
2759 0x3793a651, 0x3352bbe6, 0x3e119d3f, 0x3ad08088, 0x2497d08d,
2760 0x2056cd3a, 0x2d15ebe3, 0x29d4f654, 0xc5a92679, 0xc1683bce,
2761 0xcc2b1d17, 0xc8ea00a0, 0xd6ad50a5, 0xd26c4d12, 0xdf2f6bcb,
2762 0xdbee767c, 0xe3a1cbc1, 0xe760d676, 0xea23f0af, 0xeee2ed18,
2763 0xf0a5bd1d, 0xf464a0aa, 0xf9278673, 0xfde69bc4, 0x89b8fd09,
2764 0x8d79e0be, 0x803ac667, 0x84fbdbd0, 0x9abc8bd5, 0x9e7d9662,
2765 0x933eb0bb, 0x97ffad0c, 0xafb010b1, 0xab710d06, 0xa6322bdf,
2766 0xa2f33668, 0xbcb4666d, 0xb8757bda, 0xb5365d03, 0xb1f740b4
2770 while (sz--) crc = (crc << 8) ^
UInt_t(*
data++) ^ crctab[crc >> 24];
2778 unsigned long sz = strlen(
data);
2779 switch (strlen(
data)) {
2791 return crc32(
data + 4, sz - 4, (
data[0] << 24) | (
data[1] << 16) |
2817 map<TString,ClassRelInfo>::iterator iter = _c2fmap.begin() ;
2818 while(iter!=_c2fmap.end()) {
2820 oocxcoutD(_wspace,ObjectHandling) <<
"RooWorkspace::CodeRepo::compileClasses() now processing class " << iter->first.Data() << endl ;
2824 oocoutI(_wspace,ObjectHandling) <<
"RooWorkspace::CodeRepo::compileClasses() Embedded class "
2825 << iter->first <<
" already in ROOT class table, skipping" << endl ;
2835 oocoutI(_wspace,ObjectHandling) <<
"RooWorkspace::CodeRepo::compileClasses() reusing code export directory " << dirName.c_str()
2836 <<
" to extract coded embedded in workspace" << endl ;
2839 oocoutI(_wspace,ObjectHandling) <<
"RooWorkspace::CodeRepo::compileClasses() creating code export directory " << dirName.c_str()
2840 <<
" to extract coded embedded in workspace" << endl ;
2842 oocoutE(_wspace,ObjectHandling) <<
"RooWorkspace::CodeRepo::compileClasses() ERROR creating code export directory " << dirName.c_str()
2843 <<
" to extract coded embedded in workspace" << endl ;
2852 if (!writeExtraHeaders) {
2853 writeExtraHeaders =
kTRUE ;
2855 map<TString,ExtraHeader>::iterator eiter = _ehmap.begin() ;
2856 while(eiter!=_ehmap.end()) {
2860 string fdname =
Form(
"%s/%s",dirName.c_str(),eiter->second._hname.Data()) ;
2861 ifstream ifdecl(fdname.c_str()) ;
2865 while (ifdecl.getline(buf, 64000)) {
2870 UInt_t crcWS = crc32(eiter->second._hfile.Data());
2871 needEHWrite = (crcFile != crcWS);
2876 oocoutI(_wspace, ObjectHandling) <<
"RooWorkspace::CodeRepo::compileClasses() Extracting extra header file "
2882 ofstream fdecl(fdname.c_str());
2884 oocoutE(_wspace, ObjectHandling) <<
"RooWorkspace::CodeRepo::compileClasses() ERROR opening file " << fdname
2885 <<
" for writing" << endl;
2888 fdecl << eiter->second._hfile.Data();
2897 ClassFiles& cfinfo = _fmap[iter->second._fileBase] ;
2899 oocxcoutD(_wspace,ObjectHandling) <<
"RooWorkspace::CodeRepo::compileClasses() now processing file with base " << iter->second._fileBase << endl ;
2903 oocxcoutD(_wspace,ObjectHandling) <<
"RooWorkspace::CodeRepo::compileClasses() file with base name " << iter->second._fileBase
2904 <<
" has already been extracted, skipping to next class" << endl ;
2910 string fdname =
Form(
"%s/%s.%s",dirName.c_str(),iter->second._fileBase.Data(),cfinfo.
_hext.
Data()) ;
2911 ifstream ifdecl(fdname.c_str()) ;
2915 while (ifdecl.getline(buf, 64000)) {
2921 needDeclWrite = (crcFile!=crcWS) ;
2925 if (needDeclWrite) {
2926 oocoutI(_wspace,ObjectHandling) <<
"RooWorkspace::CodeRepo::compileClasses() Extracting declaration code of class " << iter->first <<
", file " << fdname << endl ;
2927 ofstream fdecl(fdname.c_str()) ;
2929 oocoutE(_wspace,ObjectHandling) <<
"RooWorkspace::CodeRepo::compileClasses() ERROR opening file "
2930 << fdname <<
" for writing" << endl ;
2939 string finame =
Form(
"%s/%s.cxx",dirName.c_str(),iter->second._fileBase.Data()) ;
2940 ifstream ifimpl(finame.c_str()) ;
2944 while (ifimpl.getline(buf, 64000)) {
2950 needImplWrite = (crcFile!=crcWS) ;
2954 if (needImplWrite) {
2955 oocoutI(_wspace,ObjectHandling) <<
"RooWorkspace::CodeRepo::compileClasses() Extracting implementation code of class " << iter->first <<
", file " << finame << endl ;
2956 ofstream fimpl(finame.c_str()) ;
2958 oocoutE(_wspace,ObjectHandling) <<
"RooWorkspace::CodeRepo::compileClasses() ERROR opening file"
2959 << finame <<
" for writing" << endl ;
2968 oocxcoutD(_wspace,ObjectHandling) <<
"RooWorkspace::CodeRepo::compileClasses() marking code unit " << iter->second._fileBase <<
" as extracted" << endl ;
2971 oocoutI(_wspace,ObjectHandling) <<
"RooWorkspace::CodeRepo::compileClasses() Compiling code unit " << iter->second._fileBase.Data() <<
" to define class " << iter->first << endl ;
2975 oocoutE(_wspace,ObjectHandling) <<
"RooWorkspace::CodeRepo::compileClasses() ERROR compiling class " << iter->first.Data() <<
", to fix this you can do the following: " << endl
2976 <<
" 1) Fix extracted source code files in directory " << dirName.c_str() <<
"/" << endl
2977 <<
" 2) In clean ROOT session compiled fixed classes by hand using '.x " << dirName.c_str() <<
"/ClassName.cxx+'" << endl
2978 <<
" 3) Reopen file with RooWorkspace with broken source code in UPDATE mode. Access RooWorkspace to force loading of class" << endl
2979 <<
" Broken instances in workspace will _not_ be compiled, instead precompiled fixed instances will be used." << endl
2980 <<
" 4) Reimport fixed code in workspace using 'RooWorkspace::importClassCode(\"*\",kTRUE)' method, Write() updated workspace to file and close file" << endl
2981 <<
" 5) Reopen file in clean ROOT session to confirm that problems are fixed" << endl ;
3008 coutE(ObjectHandling) <<
"RooWorkspace::WSDir::Add(" <<
GetName() <<
") ERROR: Directory is read-only representation of a RooWorkspace, use RooWorkspace::import() to add objects" << endl ;
3010 InternalAppend(
obj) ;
3021 coutE(ObjectHandling) <<
"RooWorkspace::WSDir::Add(" <<
GetName() <<
") ERROR: Directory is read-only representation of a RooWorkspace, use RooWorkspace::import() to add objects" << endl ;
3023 InternalAppend(
obj) ;
3037 coutE(ObjectHandling) <<
"RooWorkspace::exportToCint(" <<
GetName() <<
") WARNING: repeated calls to exportToCint() have no effect" << endl ;
3045 if (!nsname) nsname =
GetName() ;
3048 coutI(ObjectHandling) <<
"RooWorkspace::exportToCint(" <<
GetName()
3049 <<
") INFO: references to all objects in this workspace will be created in CINT in 'namespace " <<
_exportNSName <<
"'" << endl ;
3054 while((wobj=iter->
Next())) {
3059 while((wobj=iter->
Next())) {
3075 if (wobj->IsA() == RooConstVar::Class()) {
3084 cxcoutD(ObjectHandling) <<
"RooWorkspace::exportObj(" <<
GetName() <<
") INFO: Workspace object name " << wobj->
GetName() <<
" is not a valid C++ identifier and is not exported to CINT" << endl ;
3090 gROOT->ProcessLine(cintExpr.c_str()) ;
3100 string oname(
name) ;
3101 if (isdigit(oname[0])) {
3104 for (
UInt_t i=0 ; i<oname.size() ; i++) {
3106 if (!isalnum(
c) && (
c!=
'_')) {
3122 while ((wobj = iter->
Next())) {
3138 if (removedObj ==
_dir)
_dir =
nullptr;
3150 c.second.RecursiveRemove(removedObj);
R__EXTERN TClassTable * gClassTable
char * Form(const char *fmt,...)
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 setWorkspace(RooWorkspace &ws)
void printComponentTree(const char *indent="", const char *namePat=0, Int_t nLevel=999)
Print tree structure of expression tree on given ostream, only branch nodes are printed.
virtual void setExpensiveObjectCache(RooExpensiveObjectCache &cache)
virtual Bool_t isFundamental() const
Is this object a fundamental type that can be added to a dataset? Fundamental-type subclasses overrid...
RefCountList_t _clientListValue
virtual void Print(Option_t *options=0) const
Print the object to the defaultPrintStream().
const Text_t * getStringAttribute(const Text_t *key) const
Get string attribute mapped under key 'key'.
void setAttribute(const Text_t *name, Bool_t value=kTRUE)
Set (default) or clear a named boolean attribute of this object.
Bool_t hasClients() const
RooArgSet * getVariables(Bool_t stripDisconnected=kTRUE) const
Return RooArgSet with all variables (tree leaf nodes of expresssion tree)
virtual void ioStreamerPass2()
Method called by workspace container to finalize schema evolution issues that cannot be handled in a ...
RefCountList_t _clientListShape
Bool_t getAttribute(const Text_t *name) const
Check if a named attribute is set. By default, all attributes are unset.
RefCountList_t _clientList
void branchNodeServerList(RooAbsCollection *list, const RooAbsArg *arg=0, Bool_t recurseNonDerived=kFALSE) const
Fill supplied list with all branch nodes of the arg tree starting with ourself as top node.
void SetName(const char *name)
Set the name of the TNamed.
RooAbsCategory is the base class for objects that represent a discrete value with a finite number of ...
virtual void removeAll()
Remove all arguments from our set, deleting them if we own them.
void sort(Bool_t reverse=false)
Sort collection using std::sort and name comparison.
RooFIter fwdIterator() const
One-time forward iterator.
virtual Bool_t add(const RooAbsArg &var, Bool_t silent=kFALSE)
Add the specified argument to list.
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...
virtual Bool_t addOwned(RooAbsArg &var, Bool_t silent=kFALSE)
Add an argument and transfer the ownership to the collection.
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
const char * GetName() const
Returns name of object.
void setName(const char *name)
virtual void RecursiveRemove(TObject *obj)
If one of the TObject we have a referenced to is deleted, remove the reference.
virtual Bool_t remove(const RooAbsArg &var, Bool_t silent=kFALSE, Bool_t matchByNameOnly=kFALSE)
Remove the specified argument from our list.
TIterator * createIterator(Bool_t dir=kIterForward) const
TIterator-style iteration over contained elements.
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_t 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
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_t 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.
Bool_t defineInt(const char *name, const char *argName, Int_t intNum, Int_t defValue=0)
Define integer property name 'name' mapped to integer in slot 'intNum' in RooCmdArg with name argName...
void defineMutex(const char *argName1, const char *argName2)
Define arguments named argName1 and argName2 mutually exclusive.
const char * getString(const char *name, const char *defaultValue="", Bool_t convEmptyToNull=kFALSE)
Return string property registered with name 'name'.
Int_t getInt(const char *name, Int_t defaultValue=0)
Return integer property registered with name 'name'.
Bool_t defineString(const char *name, const char *argName, Int_t stringNum, const char *defValue="", Bool_t appendMode=kFALSE)
Define Double_t property name 'name' mapped to Double_t in slot 'stringNum' in RooCmdArg with name ar...
Bool_t ok(Bool_t verbose) const
Return true of parsing was successful.
Bool_t process(const RooCmdArg &arg)
Process given RooCmdArg.
RooExpensiveObjectCache is a singleton class that serves as repository for objects that are expensive...
void importCacheObjects(RooExpensiveObjectCache &other, const char *ownerName, Bool_t verbose=kFALSE)
A one-time forward iterator working on RooLinkedList or RooAbsCollection.
RooAbsArg * next()
Return next element or nullptr if at end.
RooLinkedList is an collection class for internal use, storing a collection of RooAbsArg pointers in ...
TObject * FindObject(const char *name) const
Return pointer to obejct with given name.
Int_t getHashTableSize() const
TIterator * MakeIterator(Bool_t forward=kTRUE) const
Create a TIterator for this list.
void Delete(Option_t *o=0)
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 RecursiveRemove(TObject *obj)
If one of the TObject we have a referenced to is deleted, remove the reference.
virtual void Add(TObject *arg)
void setHashTableSize(Int_t size)
Change the threshold for hash-table use to given size.
Bool_t Replace(const TObject *oldArg, const TObject *newArg)
Replace object 'oldArg' in collection with new object 'newArg'.
virtual Bool_t 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_t setAddDirectoryStatus(Bool_t 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...
std::size_t refCount(typename Container_t::const_iterator item) const
Return ref count of item that iterator points to.
void Remove(const T *obj, bool force=false)
Decrease ref count of given object.
Container_t::const_iterator begin() const
Iterator over contained objects.
Container_t::const_iterator end() const
End of contained objects.
RooInt is a minimal implementation of a TNamed holding a TObject.
void setOwning(Bool_t 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.
Bool_t autoImportClass(TClass *tc, Bool_t doReplace=kFALSE)
Import code of class 'tc' into the repository.
std::map< TString, ExtraHeader > _ehmap
std::string listOfClassNames() const
Return STL string with last of class names contained in the code repository.
std::map< TString, ClassRelInfo > _c2fmap
Bool_t compileClasses()
For all classes in the workspace for which no class definition is found in the ROOT class table extra...
std::map< TString, ClassFiles > _fmap
virtual void Append(TObject *, Bool_t)
Overload TDirectory interface method to prohibit insertion of objects in read-only directory workspac...
void InternalAppend(TObject *obj)
Internal access to TDirectory append method.
virtual void Add(TObject *, Bool_t)
Overload TDirectory interface method to prohibit insertion of objects in read-only directory workspac...
The RooWorkspace is a persistable container for RooFit projects.
Bool_t makeDir()
Create transient TDirectory representation of this workspace.
RooExpensiveObjectCache _eocache
Transient ROOT directory representation of workspace.
RooLinkedList _genObjects
void exportToCint(const char *namespaceName=0)
Activate export of workspace symbols to CINT in a namespace with given name.
std::string _exportNSName
Export contents of workspace to CINT?
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.
Bool_t 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...
static void addClassDeclImportDir(const char *dir)
Add dir to search path for class declaration (header) files.
Bool_t defineSetInternal(const char *name, const RooArgSet &aset)
void unExport()
Delete exported reference in CINT namespace.
RooAbsData * data(const char *name) const
Retrieve dataset (binned or unbinned) with given name. A null pointer is returned if not found.
RooAbsData * embeddedData(const char *name) const
Retrieve dataset (binned or unbinned) with given name. A null pointer is returned if not found.
static void addClassImplImportDir(const char *dir)
Add dir to search path for class implementation (.cxx) files.
TObject * genobj(const char *name) const
Return generic object with given name.
std::map< std::string, RooArgSet > _namedSets
Bool_t _openTrans
Name of CINT namespace to which contents are exported.
std::list< RooAbsData * > allData() const
Return list of all dataset in the workspace.
void clearStudies()
Remove all RooStudyManager modules.
RooAbsArg * fundArg(const char *name) const
Return fundamental (i.e.
RooArgSet argSet(const char *nameList) const
Return set of RooAbsArgs matching to given list of names.
std::unique_ptr< RooFactoryWSTool > _factory
RooArgSet allVars() const
Return set with all variable objects.
virtual void RecursiveRemove(TObject *obj)
If one of the TObject we have a referenced to is deleted, remove the reference.
Bool_t 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.
Bool_t commitTransaction()
Bool_t startTransaction()
Open an import transaction operations.
RooAbsReal * function(const char *name) const
Retrieve function (RooAbsReal) with given name. Note that all RooAbsPdfs are also RooAbsReals....
RooArgSet allResolutionModels() const
Return set with all resolution model objects.
Bool_t importClassCode(const char *pat="*", Bool_t doReplace=kFALSE)
Inport code of all classes in the workspace that have a class name that matches pattern 'pat' and whi...
RooCategory * cat(const char *name) const
Retrieve discrete variable (RooCategory) with given name. A null pointer is returned if not found.
Bool_t renameSet(const char *name, const char *newName)
Rename set to a new name.
RooAbsArg * arg(const char *name) const
Return RooAbsArg with given name. A null pointer is returned if none is found.
std::list< RooAbsData * > allEmbeddedData() const
Return list of all dataset in the workspace.
void Print(Option_t *opts=0) const
Print contents of the workspace.
RooArgSet allPdfs() const
Return set with all probability density function objects.
Bool_t addStudy(RooAbsStudy &study)
Insert RooStudyManager module.
Bool_t writeToFile(const char *fileName, Bool_t recreate=kTRUE)
Save this current workspace into given file.
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.
Bool_t _doExport
Factory tool associated with workspace.
Bool_t removeSet(const char *name)
Remove a named set from the workspace.
static void autoImportClassCode(Bool_t flag)
If flag is true, source code of classes not the the ROOT distribution is automatically imported if on...
RooAbsCategory * catfunc(const char *name) const
Retrieve discrete function (RooAbsCategory) with given name. A null pointer is returned if not found.
RooArgSet allCatFunctions() const
Return set with all category function objects.
static std::string _classFileExportDir
static std::list< std::string > _classImplDirList
~RooWorkspace()
Workspace destructor.
Bool_t defineSet(const char *name, const RooArgSet &aset, Bool_t importMissing=kFALSE)
Define a named RooArgSet with given constituents.
RooWorkspace()
Default constructor.
Bool_t cd(const char *path=0)
Bool_t saveSnapshot(const char *name, const char *paramNames)
Save snapshot of values and attributes (including "Constant") of given parameters.
Bool_t loadSnapshot(const char *name)
Load the values and attributes of the parameters in the snapshot saved with the given name.
RooRealVar * var(const char *name) const
Retrieve real-valued variable (RooRealVar) with given name. A null pointer is returned if not found.
RooArgSet allFunctions() const
Return set with all function objects.
RooFactoryWSTool & factory()
Return instance to factory tool.
RooExpensiveObjectCache & expensiveObjectCache()
Bool_t isValidCPPID(const char *name)
Return true if given name is a valid C++ identifier name.
RooArgSet _sandboxNodes
Is there a transaction open?
Bool_t cancelTransaction()
Cancel an ongoing import transaction.
void exportObj(TObject *obj)
Export reference to given workspace object to CINT.
RooLinkedList _embeddedDataList
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...
TObject * obj(const char *name) const
Return any type of object (RooAbsArg, RooAbsData or generic object) with given name)
TIterator * componentIterator() const
RooAbsPdf * pdf(const char *name) const
Retrieve p.d.f (RooAbsPdf) with given name. A null pointer is returned if not found.
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
Returns the properties of the TClass as a bit field stored as a Long_t value.
Bool_t HasDefaultConstructor(Bool_t testio=kFALSE) const
Return true if we have access to a constructor usable for I/O.
const char * GetDeclFileName() const
Return name of the file containing the declaration of this class.
Bool_t cd() override
Change current directory to "this" directory.
virtual void Append(TObject *obj, Bool_t replace=kFALSE)
Append object to this directory.
A ROOT file is a suite of consecutive data records (TKey instances) with a well defined format.
static TFile * Open(const char *name, Option_t *option="", const char *ftitle="", Int_t compress=ROOT::RCompressionSetting::EDefaults::kUseCompiledDefault, Int_t netopt=0)
Create / open a file.
static void AddDirectory(Bool_t add=kTRUE)
Sets the flag controlling the automatic add of histograms in memory.
Iterator abstract base class.
virtual TObject * Next()=0
virtual TIterator * MakeIterator(Bool_t dir=kIterForward) const
Return a list iterator.
The TNamed class is the base class for all named ROOT classes.
virtual void SetTitle(const char *title="")
Set the title of the TNamed.
virtual void SetName(const char *name)
Set the name of the TNamed.
virtual const char * GetTitle() const
Returns title of object.
virtual TObject * Clone(const char *newname="") const
Make a clone of an object using the Streamer facility.
virtual const char * GetName() const
Returns name of object.
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 Bool_t InheritsFrom(const char *classname) const
Returns kTRUE if object inherits from class "classname".
Regular expression class.
const char * Data() const
Bool_t BeginsWith(const char *s, ECaseCompare cmp=kExact) const
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.