78#ifdef ROOFIT_LEGACY_EVAL_BACKEND
97 return setName.rfind(
"CACHE_", 0) == 0;
102using std::string, std::list, std::map, std::vector, std::ifstream, std::ofstream, std::fstream, std::make_unique;
222 handle->ReplaceWS(
this);
277 std::ostringstream stream;
278 for (
const auto& token :
tokens) {
279 stream <<
"\n\t" << token;
281 coutE(InputArguments) <<
"RooWorkspace(" <<
GetName() <<
") ERROR in file specification, expecting 'filename:wsname:objname', but '" <<
fileSpec <<
"' given."
282 <<
"\nTokens read are:" << stream.str() << std::endl;
293 coutE(InputArguments) <<
"RooWorkspace(" <<
GetName() <<
") ERROR opening file " <<
filename << std::endl ;
301 <<
" or object is not a RooWorkspace" << std::endl ;
317 coutE(InputArguments) <<
"RooWorkspace(" <<
GetName() <<
") ERROR: No RooAbsArg or RooAbsData object named " <<
objname
318 <<
" in workspace " <<
wsname <<
" in file " <<
filename << std::endl ;
388 pc.
defineString(
"conflictSuffix",
"RenameConflictNodes",0) ;
389 pc.
defineInt(
"renameConflictOrig",
"RenameConflictNodes",0,0) ;
391 pc.
defineString(
"allVarsSuffix",
"RenameAllVariables",0) ;
392 pc.
defineString(
"allVarsExcept",
"RenameAllVariables",1) ;
396 pc.
defineInt(
"useExistingNodes",
"RecycleConflictNodes",0,0) ;
398 pc.
defineInt(
"noRecursion",
"NoRecursion",0,0) ;
399 pc.
defineMutex(
"RenameConflictNodes",
"RenameAllNodes") ;
400 pc.
defineMutex(
"RenameConflictNodes",
"RecycleConflictNodes") ;
401 pc.
defineMutex(
"RenameAllNodes",
"RecycleConflictNodes") ;
402 pc.
defineMutex(
"RenameVariable",
"RenameAllVariables") ;
431 std::map<string,string>
varMap ;
437 for (
unsigned int i=0; i <
tokIn.size(); ++i) {
453 std::unique_ptr<RooArgSet> vars{
inArg.getVariables()};
454 for (
const auto v : *vars) {
465 const char*
tagIn =
inArg.getStringAttribute(
"factory_tag") ;
466 const char*
tagWs =
wsarg ?
wsarg->getStringAttribute(
"factory_tag") : nullptr ;
475 coutE(ObjectHandling) <<
"RooWorkSpace::import(" <<
GetName() <<
") ERROR importing object named " <<
inArg.GetName()
476 <<
": another instance with same name already in the workspace and no conflict resolution protocol specified" << std::endl ;
480 coutI(ObjectHandling) <<
"RooWorkSpace::import(" <<
GetName() <<
") Object " <<
inArg.GetName() <<
" is already in workspace!" << std::endl ;
486 coutI(ObjectHandling) <<
"RooWorkSpace::import(" <<
GetName() <<
") Recycling existing object " <<
inArg.GetName() <<
" created with identical factory specification" << std::endl ;
509 coutE(ObjectHandling) <<
"RooWorkSpace::import(" <<
GetName() <<
") ERROR object named " <<
inArg.GetName() <<
": component(s) "
510 <<
conflictNodes <<
" already in the workspace and no conflict resolution protocol specified" << std::endl ;
535 string tag =
"ORIGNAME:" +
origName;
536 cnode2->setAttribute(tag.c_str()) ;
537 if (!
cnode2->getStringAttribute(
"origName")) {
547 coutI(ObjectHandling) <<
"RooWorkspace::import(" <<
GetName()
548 <<
") Resolving name conflict in workspace by changing name of imported node "
561 if (!
wsnode->getStringAttribute(
"origName")) {
562 wsnode->setStringAttribute(
"origName",
wsnode->GetName()) ;
570 for (
unsigned int n=1;
true; ++
n) {
580 coutI(ObjectHandling) <<
"RooWorkspace::import(" <<
GetName()
581 <<
") Resolving name conflict in workspace by changing name of original node "
585 coutW(ObjectHandling) <<
"RooWorkspace::import(" <<
GetName() <<
") Internal error: expected to find existing node "
586 <<
origName <<
" to be renamed, but didn't find it..." << std::endl ;
601 string tag =
"ORIGNAME:" +
origName;
602 cnode->setAttribute(tag.c_str()) ;
603 if (!
cnode->getStringAttribute(
"origName")) {
608 coutI(ObjectHandling) <<
"RooWorkspace::import(" <<
GetName() <<
") Changing name of variable "
609 <<
origName <<
" to " <<
cnode->GetName() <<
" on request" << std::endl ;
637 coutE(ObjectHandling) <<
"RooWorkSpace::import(" <<
GetName() <<
") ERROR object named " <<
inArg.GetName() <<
": component(s) "
638 <<
conflictNodes2 <<
" cause naming conflict after conflict resolution protocol was executed" << std::endl ;
644 if (node->importWorkspaceHook(*
this)) {
645 coutE(ObjectHandling) <<
"RooWorkSpace::import(" <<
GetName() <<
") ERROR object named " << node->GetName()
646 <<
" has an error in importing in one or more of its auxiliary objects, aborting" << std::endl ;
656 coutW(ObjectHandling) <<
"RooWorkspace::import(" <<
GetName() <<
") WARNING: problems import class code of object "
657 << node->ClassName() <<
"::" << node->GetName() <<
", reading of workspace will require external definition of class" << std::endl ;
663 node->setExpensiveObjectCache(
_eocache) ;
672 coutI(ObjectHandling) <<
"RooWorkspace::import(" <<
GetName() <<
") using existing copy of " << node->ClassName()
673 <<
"::" << node->GetName() <<
" for import of " <<
cloneTop2->ClassName() <<
"::"
686 coutI(ObjectHandling) <<
"RooWorkspace::import(" <<
GetName() <<
") importing " << node->ClassName() <<
"::"
687 << node->GetName() << std::endl ;
690 node->setWorkspace(*
this);
750 pc.
defineInt(
"embedded",
"Embedded",0,0) ;
767 coutI(ObjectHandling) <<
"RooWorkspace::import(" <<
GetName() <<
") importing dataset " <<
inData.GetName() << std::endl ;
782 coutE(ObjectHandling) <<
"RooWorkspace::import(" <<
GetName() <<
") ERROR dataset with name " <<
dsetName <<
" already exists in workspace, import aborted" << std::endl ;
786 coutE(ObjectHandling) <<
"RooWorkspace::import(" <<
GetName() <<
") ERROR dataset with name " <<
inData.GetName() <<
" already exists in workspace, import aborted" << std::endl ;
794 coutI(ObjectHandling) <<
"RooWorkSpace::import(" <<
GetName() <<
") changing name of dataset from " <<
inData.GetName() <<
" to " <<
dsetName << std::endl ;
806 for (
unsigned int i=0; i <
tokIn.size(); ++i) {
808 coutI(ObjectHandling) <<
"RooWorkSpace::import(" <<
GetName() <<
") changing name of dataset observable " <<
tokIn[i] <<
" to " <<
tokOut[i] << std::endl ;
849 coutW(InputArguments) <<
"RooWorkspace::defineSet(" <<
GetName() <<
") WARNING redefining previously defined named set " <<
name << std::endl ;
861 coutE(InputArguments) <<
"RooWorkspace::defineSet(" <<
GetName() <<
") ERROR set constituent \"" <<
sarg->GetName()
862 <<
"\" is not in workspace and importMissing option is disabled" << std::endl ;
888 coutW(InputArguments) <<
"RooWorkspace::defineSet(" <<
GetName()
889 <<
") WARNING redefining previously defined named set " <<
name << std::endl;
908 coutW(InputArguments) <<
"RooWorkspace::defineSet(" <<
GetName() <<
") WARNING redefining previously defined named set " <<
name << std::endl ;
916 if (!
arg(token.c_str())) {
917 coutE(InputArguments) <<
"RooWorkspace::defineSet(" <<
GetName() <<
") ERROR proposed set constituent \"" << token
918 <<
"\" is not in workspace" << std::endl ;
945 if (!
arg(token.c_str())) {
946 coutE(InputArguments) <<
"RooWorkspace::defineSet(" <<
GetName() <<
") ERROR proposed set constituent \"" << token
947 <<
"\" is not in workspace" << std::endl ;
967 std::map<string,RooArgSet>::iterator i =
_namedSets.find(
name.c_str());
968 return (i!=
_namedSets.end()) ? &(i->second) :
nullptr;
981 coutE(InputArguments) <<
"RooWorkspace::renameSet(" <<
GetName() <<
") ERROR a set with name " <<
name
982 <<
" does not exist" << std::endl ;
988 coutE(InputArguments) <<
"RooWorkspace::renameSet(" <<
GetName() <<
") ERROR a set with name " <<
newName
989 <<
" already exists" << std::endl ;
1012 coutE(InputArguments) <<
"RooWorkspace::removeSet(" <<
GetName() <<
") ERROR a set with name " <<
name
1013 <<
" does not exist" << std::endl ;
1121 coutW(ObjectHandling) <<
"RooWorkspace::import(" <<
GetName() <<
") WARNING: problems import class code of object "
1122 <<
carg->ClassName() <<
"::" <<
carg->GetName() <<
", reading of workspace will require external definition of class" << std::endl ;
1161 snapshot->setName(
name.c_str()) ;
1164 snapshot->assign(params) ;
1168 coutI(ObjectHandling) <<
"RooWorkspace::saveSnapshot(" <<
GetName() <<
") replacing previous snapshot with name " <<
name << std::endl ;
1188 coutE(ObjectHandling) <<
"RooWorkspace::loadSnapshot(" <<
GetName() <<
") no snapshot with name " <<
name <<
" is available" << std::endl ;
1281 std::stringstream
ss;
1282 ss <<
" RooWorkspace::argSet(" <<
GetName() <<
") no RooAbsArg named \"" << token <<
"\" in workspace" ;
1285 throw std::runtime_error(
errorMsg);
1303 return tmp->isFundamental() ? tmp :
nullptr;
1448 std::list<RooAbsData*>
ret ;
1461 std::list<RooAbsData*>
ret ;
1475 std::list<TObject*>
ret ;
1479 if (
gobj->IsA()==RooTObjWrap::Class()) {
1497 std::string path =
cpath;
1521 oocxcoutD(
_wspace,ObjectHandling) <<
"RooWorkspace::CodeRepo(" <<
_wspace->
GetName() <<
") request to import code of class " <<
tc->GetName() << std::endl ;
1527 oocxcoutD(
_wspace,ObjectHandling) <<
"RooWorkspace::CodeRepo(" <<
_wspace->
GetName() <<
") code of class " <<
tc->GetName() <<
" already imported, skipping" << std::endl ;
1534 oocxcoutD(
_wspace,ObjectHandling) <<
"RooWorkspace::CodeRepo(" <<
_wspace->
GetName() <<
") code of class " <<
tc->GetName() <<
" is in ROOT distribution, skipping " << std::endl ;
1544 oocoutE(
_wspace,ObjectHandling) <<
"RooWorkspace::CodeRepo(" <<
_wspace->
GetName() <<
") ERROR: cannot retrieve code file names for class "
1545 <<
tc->GetName() <<
" through ROOT TClass interface, unable to import code" << std::endl ;
1552 oocxcoutD(
_wspace,ObjectHandling) <<
"RooWorkspace::CodeRepo(" <<
_wspace->
GetName() <<
") code of class " <<
tc->GetName() <<
" is in ROOT distribution, skipping " << std::endl ;
1559 if (!(
tc->Property() &
kIsAbstract) && !
tc->HasDefaultConstructor()) {
1561 <<
tc->GetName() <<
" : it cannot be persisted because it doesn't have a default constructor. Please fix " << std::endl ;
1580 <<
tc->GetName() <<
" because header file " <<
declfile <<
" is not found in current directory nor in $ROOTSYS" ;
1594 ooccoutW(
_wspace,ObjectHandling) <<
". To fix this problem, add the required directory to the search "
1595 <<
"path using RooWorkspace::addClassDeclImportDir(const char* dir)" << std::endl ;
1611 <<
tc->GetName() <<
" because implementation file " <<
implfile <<
" is not found in current directory nor in $ROOTSYS" ;
1625 ooccoutW(
_wspace,ObjectHandling) <<
". To fix this problem add the required directory to the search "
1626 <<
"path using RooWorkspace::addClassImplImportDir(const char* dir)" << std::endl;
1663 <<
") ERROR opening declaration file " <<
declfile << std::endl ;
1668 <<
") importing code of class " <<
tc->GetName()
1675 while(
fdecl.getline(buf,1023)) {
1682 if (
strstr(buf,
"#include")) {
1693 hpath +=
"/include/";
1697 <<
") scheduling include file " <<
incfile <<
" for import" << std::endl;
1706 decl +=
"// external include file below retrieved from workspace code storage\n" ;
1720 <<
") ERROR opening implementation file " <<
implfile << std::endl ;
1727 while(
fimpl.getline(buf,1023)) {
1736 if (
strstr(buf,
"#include")) {
1751 hpath +=
"/include/";
1756 <<
") scheduling include file " <<
incfile <<
" for import" << std::endl;
1769 impl +=
"// class declaration include file below retrieved from workspace code storage\n" ;
1772 impl +=
"// external include file below retrieved from workspace code storage\n" ;
1808 hpath +=
"/include/";
1812 <<
") scheduling recursive include file " <<
incfile <<
" for import"
1832 <<
") code of class " <<
tc->GetName()
1847 std::list<TClass*>
bases ;
1853 bases.push_back(base->GetClassPointer()) ;
1884 std::string title=
"TDirectory representation of RooWorkspace " + std::string(
GetName());
1910 coutE(InputArguments) <<
"RooWorkspace::import(" <<
GetName() <<
") generic object with name "
1911 <<
object.GetName() <<
" is already in workspace and replaceExisting flag is set to false" << std::endl ;
1917 object.IsA()->SetDirectoryAutoAdd(
nullptr);
1927 object.IsA()->SetDirectoryAutoAdd(func);
1950 coutE(InputArguments) <<
"RooWorkspace::import(" <<
GetName() <<
") generic object with name "
1951 <<
aliasName <<
" is already in workspace and replaceExisting flag is set to false" << std::endl ;
2025 if (!
gobj)
return nullptr;
2053 if (!
f ||
f->IsZombie())
2069 cxcoutD(ObjectHandling) <<
"INFO: Creating RooFactoryWSTool associated with this workspace" << std::endl ;
2095 bool verbose(
false);
2103 std::cout << std::endl <<
"RooWorkspace(" <<
GetName() <<
") " <<
GetTitle() <<
" contents" << std::endl << std::endl ;
2123 if (!
parg->hasClients()) {
2132 if (!
parg->hasClients()) {
2140 if (!
parg->hasClients()) {
2187 if (!varSet.
empty()) {
2189 std::cout <<
"variables" << std::endl ;
2190 std::cout <<
"---------" << std::endl ;
2191 std::cout << varSet << std::endl ;
2192 std::cout << std::endl ;
2196 std::cout <<
"p.d.f.s" << std::endl ;
2197 std::cout <<
"-------" << std::endl ;
2201 parg->printComponentTree() ;
2206 std::cout << std::endl ;
2211 std::cout <<
"analytical resolution models" << std::endl ;
2212 std::cout <<
"----------------------------" << std::endl ;
2217 std::cout << std::endl ;
2222 std::cout <<
"functions" << std::endl ;
2223 std::cout <<
"--------" << std::endl ;
2227 parg->printComponentTree() ;
2232 std::cout << std::endl ;
2236 std::cout <<
"category functions" << std::endl ;
2237 std::cout <<
"------------------" << std::endl ;
2241 parg->printComponentTree() ;
2246 std::cout << std::endl ;
2250 std::cout <<
"datasets" << std::endl ;
2251 std::cout <<
"--------" << std::endl ;
2253 std::cout <<
data2->ClassName() <<
"::" <<
data2->GetName() << *
data2->get() << std::endl;
2255 std::cout << std::endl ;
2259 std::cout <<
"embedded datasets (in pdfs and functions)" << std::endl ;
2260 std::cout <<
"-----------------------------------------" << std::endl ;
2262 std::cout <<
data2->ClassName() <<
"::" <<
data2->GetName() << *
data2->get() << std::endl ;
2264 std::cout << std::endl ;
2268 std::cout <<
"parameter snapshots" << std::endl ;
2269 std::cout <<
"-------------------" << std::endl ;
2271 std::cout <<
snap->GetName() <<
" = (" ;
2274 if (first) { first=
false ; }
else { std::cout <<
"," ; }
2275 std::cout <<
a->GetName() <<
"=" ;
2276 a->printValue(std::cout) ;
2277 if (
a->isConstant()) {
2278 std::cout <<
"[C]" ;
2281 std::cout <<
")" << std::endl ;
2283 std::cout << std::endl ;
2288 std::cout <<
"named sets" << std::endl ;
2289 std::cout <<
"----------" << std::endl ;
2290 for (map<string,RooArgSet>::const_iterator it =
_namedSets.begin() ; it !=
_namedSets.end() ; ++it) {
2292 std::cout << it->first <<
":" << it->second << std::endl;
2296 std::cout << std::endl ;
2301 std::cout <<
"generic objects" << std::endl ;
2302 std::cout <<
"---------------" << std::endl ;
2304 if (
gobj->IsA()==RooTObjWrap::Class()) {
2305 std::cout << (static_cast<RooTObjWrap*>(
gobj))->
obj()->
ClassName() <<
"::" <<
gobj->GetName() << std::endl ;
2307 std::cout <<
gobj->ClassName() <<
"::" <<
gobj->GetName() << std::endl ;
2310 std::cout << std::endl ;
2315 std::cout <<
"study modules" << std::endl ;
2316 std::cout <<
"-------------" << std::endl ;
2318 std::cout <<
smobj->ClassName() <<
"::" <<
smobj->GetName() << std::endl ;
2320 std::cout << std::endl ;
2325 std::cout <<
"embedded class code" << std::endl ;
2326 std::cout <<
"-------------------" << std::endl ;
2328 std::cout << std::endl ;
2332 std::cout <<
"embedded precalculated expensive components" << std::endl ;
2333 std::cout <<
"-------------------------------------------" << std::endl ;
2354 if (
R__b.IsReading()) {
2368 _fmap[
name]._cxxfile.Streamer(
R__b);
2377 _c2fmap[
name]._baseName.Streamer(
R__b);
2378 _c2fmap[
name]._fileBase.Streamer(
R__b);
2388 _ehmap[
name]._hname.Streamer(
R__b);
2389 _ehmap[
name]._hfile.Streamer(
R__b);
2396 _compiledOK = !compileClasses();
2401 R__c =
R__b.WriteVersion(thisClass::IsA(),
true);
2404 UInt_t count = _fmap.size();
2406 map<TString, ClassFiles>::iterator iter = _fmap.begin();
2407 while (iter != _fmap.end()) {
2410 iter->second._hext.Streamer(
R__b);
2411 iter->second._hfile.Streamer(
R__b);
2412 iter->second._cxxfile.Streamer(
R__b);
2418 count = _c2fmap.size();
2420 map<TString, ClassRelInfo>::iterator
iter2 = _c2fmap.
begin();
2430 count = _ehmap.size();
2432 map<TString, ExtraHeader>::iterator
iter3 = _ehmap.
begin();
2456 if (
R__b.IsReading()) {
2462 node->ioStreamerPass2();
2469 node->setExpensiveObjectCache(
_eocache);
2470 node->setWorkspace(*
this);
2471#ifdef ROOFIT_LEGACY_EVAL_BACKEND
2472 if (
dynamic_cast<RooAbsOptTestStatistic *
>(node)) {
2473 RooAbsOptTestStatistic *tmp =
static_cast<RooAbsOptTestStatistic *
>(node);
2474 if (tmp->isSealed() && tmp->sealNotice() &&
strlen(tmp->sealNotice()) > 0) {
2475 std::cout <<
"RooWorkspace::Streamer(" <<
GetName() <<
") " << node->ClassName() <<
"::" << node->GetName()
2476 <<
" : " << tmp->sealNotice() << std::endl;
2484 handle->ReplaceWS(
this);
2503 const auto refCount =
tmparg->_clientList.refCount(client);
2507 tmparg->_clientList.Remove(client,
true);
2515 cxcoutD(ObjectHandling) <<
"RooWorkspace::Streamer(" <<
GetName() <<
") element " <<
tmparg->GetName()
2516 <<
" has external value client link to " <<
vclient <<
" (" <<
vclient->GetName()
2517 <<
") with ref count " <<
tmparg->_clientListValue.refCount(
vclient) << std::endl;
2519 const auto refCount =
tmparg->_clientListValue.refCount(
vclient);
2531 cxcoutD(ObjectHandling) <<
"RooWorkspace::Streamer(" <<
GetName() <<
") element " <<
tmparg->GetName()
2532 <<
" has external shape client link to " <<
sclient <<
" (" <<
sclient->GetName()
2533 <<
") with ref count " <<
tmparg->_clientListShape.refCount(
sclient) << std::endl;
2535 const auto refCount =
tmparg->_clientListShape.refCount(
sclient);
2549 for (
auto client :
iterx.second) {
2550 iterx.first->_clientList.Add(client);
2555 for (
auto client :
iterx.second) {
2556 iterx.first->_clientListValue.Add(client);
2561 for (
auto client :
iterx.second) {
2562 iterx.first->_clientListShape.Add(client);
2577 map<TString,ClassRelInfo>::const_iterator iter = _c2fmap.begin() ;
2578 while(iter!=_c2fmap.end()) {
2582 ret += iter->first ;
2596 0x04c11db7, 0x09823b6e, 0x0d4326d9, 0x130476dc, 0x17c56b6b,
2597 0x1a864db2, 0x1e475005, 0x2608edb8, 0x22c9f00f, 0x2f8ad6d6,
2598 0x2b4bcb61, 0x350c9b64, 0x31cd86d3, 0x3c8ea00a, 0x384fbdbd,
2599 0x4c11db70, 0x48d0c6c7, 0x4593e01e, 0x4152fda9, 0x5f15adac,
2600 0x5bd4b01b, 0x569796c2, 0x52568b75, 0x6a1936c8, 0x6ed82b7f,
2601 0x639b0da6, 0x675a1011, 0x791d4014, 0x7ddc5da3, 0x709f7b7a,
2602 0x745e66cd, 0x9823b6e0, 0x9ce2ab57, 0x91a18d8e, 0x95609039,
2603 0x8b27c03c, 0x8fe6dd8b, 0x82a5fb52, 0x8664e6e5, 0xbe2b5b58,
2604 0xbaea46ef, 0xb7a96036, 0xb3687d81, 0xad2f2d84, 0xa9ee3033,
2605 0xa4ad16ea, 0xa06c0b5d, 0xd4326d90, 0xd0f37027, 0xddb056fe,
2606 0xd9714b49, 0xc7361b4c, 0xc3f706fb, 0xceb42022, 0xca753d95,
2607 0xf23a8028, 0xf6fb9d9f, 0xfbb8bb46, 0xff79a6f1, 0xe13ef6f4,
2608 0xe5ffeb43, 0xe8bccd9a, 0xec7dd02d, 0x34867077, 0x30476dc0,
2609 0x3d044b19, 0x39c556ae, 0x278206ab, 0x23431b1c, 0x2e003dc5,
2610 0x2ac12072, 0x128e9dcf, 0x164f8078, 0x1b0ca6a1, 0x1fcdbb16,
2611 0x018aeb13, 0x054bf6a4, 0x0808d07d, 0x0cc9cdca, 0x7897ab07,
2612 0x7c56b6b0, 0x71159069, 0x75d48dde, 0x6b93dddb, 0x6f52c06c,
2613 0x6211e6b5, 0x66d0fb02, 0x5e9f46bf, 0x5a5e5b08, 0x571d7dd1,
2614 0x53dc6066, 0x4d9b3063, 0x495a2dd4, 0x44190b0d, 0x40d816ba,
2615 0xaca5c697, 0xa864db20, 0xa527fdf9, 0xa1e6e04e, 0xbfa1b04b,
2616 0xbb60adfc, 0xb6238b25, 0xb2e29692, 0x8aad2b2f, 0x8e6c3698,
2617 0x832f1041, 0x87ee0df6, 0x99a95df3, 0x9d684044, 0x902b669d,
2618 0x94ea7b2a, 0xe0b41de7, 0xe4750050, 0xe9362689, 0xedf73b3e,
2619 0xf3b06b3b, 0xf771768c, 0xfa325055, 0xfef34de2, 0xc6bcf05f,
2620 0xc27dede8, 0xcf3ecb31, 0xcbffd686, 0xd5b88683, 0xd1799b34,
2621 0xdc3abded, 0xd8fba05a, 0x690ce0ee, 0x6dcdfd59, 0x608edb80,
2622 0x644fc637, 0x7a089632, 0x7ec98b85, 0x738aad5c, 0x774bb0eb,
2623 0x4f040d56, 0x4bc510e1, 0x46863638, 0x42472b8f, 0x5c007b8a,
2624 0x58c1663d, 0x558240e4, 0x51435d53, 0x251d3b9e, 0x21dc2629,
2625 0x2c9f00f0, 0x285e1d47, 0x36194d42, 0x32d850f5, 0x3f9b762c,
2626 0x3b5a6b9b, 0x0315d626, 0x07d4cb91, 0x0a97ed48, 0x0e56f0ff,
2627 0x1011a0fa, 0x14d0bd4d, 0x19939b94, 0x1d528623, 0xf12f560e,
2628 0xf5ee4bb9, 0xf8ad6d60, 0xfc6c70d7, 0xe22b20d2, 0xe6ea3d65,
2629 0xeba91bbc, 0xef68060b, 0xd727bbb6, 0xd3e6a601, 0xdea580d8,
2630 0xda649d6f, 0xc423cd6a, 0xc0e2d0dd, 0xcda1f604, 0xc960ebb3,
2631 0xbd3e8d7e, 0xb9ff90c9, 0xb4bcb610, 0xb07daba7, 0xae3afba2,
2632 0xaafbe615, 0xa7b8c0cc, 0xa379dd7b, 0x9b3660c6, 0x9ff77d71,
2633 0x92b45ba8, 0x9675461f, 0x8832161a, 0x8cf30bad, 0x81b02d74,
2634 0x857130c3, 0x5d8a9099, 0x594b8d2e, 0x5408abf7, 0x50c9b640,
2635 0x4e8ee645, 0x4a4ffbf2, 0x470cdd2b, 0x43cdc09c, 0x7b827d21,
2636 0x7f436096, 0x7200464f, 0x76c15bf8, 0x68860bfd, 0x6c47164a,
2637 0x61043093, 0x65c52d24, 0x119b4be9, 0x155a565e, 0x18197087,
2638 0x1cd86d30, 0x029f3d35, 0x065e2082, 0x0b1d065b, 0x0fdc1bec,
2639 0x3793a651, 0x3352bbe6, 0x3e119d3f, 0x3ad08088, 0x2497d08d,
2640 0x2056cd3a, 0x2d15ebe3, 0x29d4f654, 0xc5a92679, 0xc1683bce,
2641 0xcc2b1d17, 0xc8ea00a0, 0xd6ad50a5, 0xd26c4d12, 0xdf2f6bcb,
2642 0xdbee767c, 0xe3a1cbc1, 0xe760d676, 0xea23f0af, 0xeee2ed18,
2643 0xf0a5bd1d, 0xf464a0aa, 0xf9278673, 0xfde69bc4, 0x89b8fd09,
2644 0x8d79e0be, 0x803ac667, 0x84fbdbd0, 0x9abc8bd5, 0x9e7d9662,
2645 0x933eb0bb, 0x97ffad0c, 0xafb010b1, 0xab710d06, 0xa6322bdf,
2646 0xa2f33668, 0xbcb4666d, 0xb8757bda, 0xb5365d03, 0xb1f740b4
2698 map<TString,ClassRelInfo>::iterator iter = _c2fmap.begin() ;
2699 while(iter!=_c2fmap.end()) {
2701 oocxcoutD(_wspace,ObjectHandling) <<
"RooWorkspace::CodeRepo::compileClasses() now processing class " << iter->first.Data() << std::endl ;
2705 oocoutI(_wspace,ObjectHandling) <<
"RooWorkspace::CodeRepo::compileClasses() Embedded class "
2706 << iter->first <<
" already in ROOT class table, skipping" << std::endl ;
2716 oocoutI(_wspace,ObjectHandling) <<
"RooWorkspace::CodeRepo::compileClasses() reusing code export directory " <<
dirName.c_str()
2717 <<
" to extract coded embedded in workspace" << std::endl ;
2720 oocoutI(_wspace,ObjectHandling) <<
"RooWorkspace::CodeRepo::compileClasses() creating code export directory " <<
dirName.c_str()
2721 <<
" to extract coded embedded in workspace" << std::endl ;
2723 oocoutE(_wspace,ObjectHandling) <<
"RooWorkspace::CodeRepo::compileClasses() ERROR creating code export directory " <<
dirName.c_str()
2724 <<
" to extract coded embedded in workspace" << std::endl ;
2746 while (
ifdecl.getline(buf, 64000)) {
2757 oocoutI(_wspace, ObjectHandling) <<
"RooWorkspace::CodeRepo::compileClasses() Extracting extra header file "
2765 oocoutE(_wspace, ObjectHandling) <<
"RooWorkspace::CodeRepo::compileClasses() ERROR opening file " <<
fdname
2766 <<
" for writing" << std::endl;
2780 oocxcoutD(_wspace,ObjectHandling) <<
"RooWorkspace::CodeRepo::compileClasses() now processing file with base " << iter->second._fileBase << std::endl ;
2784 oocxcoutD(_wspace,ObjectHandling) <<
"RooWorkspace::CodeRepo::compileClasses() file with base name " << iter->second._fileBase
2785 <<
" has already been extracted, skipping to next class" << std::endl ;
2796 while (
ifdecl.getline(buf, 64000)) {
2807 oocoutI(_wspace,ObjectHandling) <<
"RooWorkspace::CodeRepo::compileClasses() Extracting declaration code of class " << iter->first <<
", file " <<
fdname << std::endl ;
2810 oocoutE(_wspace,ObjectHandling) <<
"RooWorkspace::CodeRepo::compileClasses() ERROR opening file "
2811 <<
fdname <<
" for writing" << std::endl ;
2820 string finame =
Form(
"%s/%s.cxx",
dirName.c_str(),iter->second._fileBase.Data()) ;
2825 while (
ifimpl.getline(buf, 64000)) {
2836 oocoutI(_wspace,ObjectHandling) <<
"RooWorkspace::CodeRepo::compileClasses() Extracting implementation code of class " << iter->first <<
", file " <<
finame << std::endl ;
2839 oocoutE(_wspace,ObjectHandling) <<
"RooWorkspace::CodeRepo::compileClasses() ERROR opening file"
2840 <<
finame <<
" for writing" << std::endl ;
2849 oocxcoutD(_wspace,ObjectHandling) <<
"RooWorkspace::CodeRepo::compileClasses() marking code unit " << iter->second._fileBase <<
" as extracted" << std::endl ;
2852 oocoutI(_wspace,ObjectHandling) <<
"RooWorkspace::CodeRepo::compileClasses() Compiling code unit " << iter->second._fileBase.Data() <<
" to define class " << iter->first << std::endl ;
2856 oocoutE(_wspace,ObjectHandling) <<
"RooWorkspace::CodeRepo::compileClasses() ERROR compiling class " << iter->first.Data() <<
", to fix this you can do the following: " << std::endl
2857 <<
" 1) Fix extracted source code files in directory " <<
dirName.c_str() <<
"/" << std::endl
2858 <<
" 2) In clean ROOT session compiled fixed classes by hand using '.x " <<
dirName.c_str() <<
"/ClassName.cxx+'" << std::endl
2859 <<
" 3) Reopen file with RooWorkspace with broken source code in UPDATE mode. Access RooWorkspace to force loading of class" << std::endl
2860 <<
" Broken instances in workspace will _not_ be compiled, instead precompiled fixed instances will be used." << std::endl
2861 <<
" 4) Reimport fixed code in workspace using 'RooWorkspace::importClassCode(\"*\",true)' method, Write() updated workspace to file and close file" << std::endl
2862 <<
" 5) Reopen file in clean ROOT session to confirm that problems are fixed" << std::endl ;
2889 coutE(ObjectHandling) <<
"RooWorkspace::WSDir::Add(" <<
GetName() <<
") ERROR: Directory is read-only representation of a RooWorkspace, use RooWorkspace::import() to add objects" << std::endl ;
2891 InternalAppend(
obj) ;
2902 coutE(ObjectHandling) <<
"RooWorkspace::WSDir::Add(" <<
GetName() <<
") ERROR: Directory is read-only representation of a RooWorkspace, use RooWorkspace::import() to add objects" << std::endl ;
2904 InternalAppend(
obj) ;
2930 auto const& setName =
c.first;
2931 auto&
set =
c.second;
short Version_t
Class version identifier (short)
unsigned long ULong_t
Unsigned long integer 4 bytes (unsigned long). Size depends on architecture.
unsigned int UInt_t
Unsigned integer 4 bytes (unsigned int)
const char Option_t
Option string (const char)
R__EXTERN TClassTable * gClassTable
ROOT::Detail::TRangeCast< T, true > TRangeDynCast
TRangeDynCast is an adapter class that allows the typed iteration through a TCollection.
Option_t Option_t TPoint TPoint const char GetTextMagnitude GetFillStyle GetLineColor GetLineWidth GetMarkerStyle GetTextAlign GetTextColor GetTextSize void data
Option_t Option_t TPoint TPoint const char GetTextMagnitude GetFillStyle GetLineColor GetLineWidth GetMarkerStyle GetTextAlign GetTextColor GetTextSize void char Point_t Rectangle_t WindowAttributes_t Float_t Float_t Float_t Int_t Int_t UInt_t UInt_t Rectangle_t Int_t Int_t Window_t TString Int_t GCValues_t GetPrimarySelectionOwner GetDisplay GetScreen GetColormap GetNativeEvent const char const char dpyName wid window const char font_name cursor keysym reg const char only_if_exist regb h Point_t winding char text const char depth char const char Int_t count const char ColorStruct_t color const char filename
Option_t Option_t TPoint TPoint const char GetTextMagnitude GetFillStyle GetLineColor GetLineWidth GetMarkerStyle GetTextAlign GetTextColor GetTextSize void char Point_t Rectangle_t WindowAttributes_t 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 Pixmap_t Pixmap_t PictureAttributes_t attr const char char ret_data h unsigned char height h Atom_t Int_t ULong_t ULong_t bytes
char * Form(const char *fmt,...)
Formats a string in a circular formatting buffer.
R__EXTERN TSystem * gSystem
const_iterator begin() const
const_iterator end() const
Common abstract base class for objects that represent a value and a "shape" in RooFit.
static void ioStreamerPass2Finalize()
Method called by workspace container to finalize schema evolution issues that cannot be handled in a ...
A space to attach TBranches.
virtual void removeAll()
Remove all arguments from our set, deleting them if we own them.
virtual bool remove(const RooAbsArg &var, bool silent=false, bool matchByNameOnly=false)
Remove the specified argument from our list.
virtual bool add(const RooAbsArg &var, bool silent=false)
Add the specified argument to list.
void RecursiveRemove(TObject *obj) override
If one of the TObject we have a referenced to is deleted, remove the reference.
virtual bool addOwned(RooAbsArg &var, bool silent=false)
Add an argument and transfer the ownership to the collection.
void sort(bool reverse=false)
Sort collection using std::sort and name comparison.
RooAbsArg * find(const char *name) const
Find object with given name in list.
Abstract base class for binned and unbinned datasets.
virtual const RooArgSet * get() const
virtual bool changeObservableName(const char *from, const char *to)
Abstract interface for all probability density functions.
Abstract base class for objects that represent a real value and implements functionality common to al...
Abstract base class for RooStudyManager modules.
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.
RooArgSet * selectCommon(const RooAbsCollection &refColl) const
Use RooAbsCollection::selecCommon(), but return as RooArgSet.
Object to represent discrete states.
Named container for two doubles, two integers two object points and three string pointers that can be...
Configurable parser for RooCmdArg named arguments.
void defineMutex(const char *head, Args_t &&... tail)
Define arguments where any pair is mutually exclusive.
bool process(const RooCmdArg &arg)
Process given RooCmdArg.
bool ok(bool verbose) const
Return true of parsing was successful.
const char * getString(const char *name, const char *defaultValue="", bool convEmptyToNull=false) const
Return string property registered with name 'name'.
bool defineString(const char *name, const char *argName, int stringNum, const char *defValue="", bool appendMode=false)
Define double property name 'name' mapped to double in slot 'stringNum' in RooCmdArg with name argNam...
bool defineInt(const char *name, const char *argName, int intNum, int defValue=0)
Define integer property name 'name' mapped to integer in slot 'intNum' in RooCmdArg with name argName...
int getInt(const char *name, int defaultValue=0) const
Return integer property registered with name 'name'.
Singleton class that serves as repository for objects that are expensive to calculate.
void importCacheObjects(RooExpensiveObjectCache &other, const char *ownerName, bool verbose=false)
Collection class for internal use, storing a collection of RooAbsArg pointers in a doubly linked list...
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'.
void Delete(Option_t *o=nullptr) override
Remove all elements in collection and delete all elements NB: Collection does not own elements,...
TObject * find(const char *name) const
Return pointer to object with given name in collection.
virtual void Add(TObject *arg)
TObject * FindObject(const char *name) const override
Return pointer to object with given name.
virtual bool Remove(TObject *arg)
Remove object from collection.
static RooMsgService & instance()
Return reference to singleton instance.
static bool setAddDirectoryStatus(bool flag)
Configure whether new instances of RooPlot will add themselves to gDirectory.
Variable that can be changed from the outside.
RooResolutionModel is the base class for PDFs that represent a resolution model that can be convolute...
The RooStringView is a wrapper around a C-style string that can also be constructed from a std::strin...
An interface to set and retrieve a workspace.
std::map< TString, ExtraHeader > _ehmap
void Streamer(TBuffer &) override
Custom streamer for the workspace.
std::string listOfClassNames() const
Return STL string with last of class names contained in the code repository.
bool autoImportClass(TClass *tc, bool doReplace=false)
Import code of class 'tc' into the repository.
bool compileClasses()
For all classes in the workspace for which no class definition is found in the ROOT class table extra...
std::map< TString, ClassRelInfo > _c2fmap
std::map< TString, ClassFiles > _fmap
void InternalAppend(TObject *obj)
Internal access to TDirectory append method.
void Add(TObject *, bool) override
Overload TDirectory interface method to prohibit insertion of objects in read-only directory workspac...
TClass * IsA() const override
void Append(TObject *, bool) override
Overload TDirectory interface method to prohibit insertion of objects in read-only directory workspac...
Persistable container for RooFit projects.
RooExpensiveObjectCache _eocache
Cache for expensive objects.
TObject * obj(RooStringView name) const
Return any type of object (RooAbsArg, RooAbsData or generic object) with given name)
RooLinkedList _genObjects
List of generic objects.
static std::list< std::string > _classDeclDirList
const RooArgSet * getSnapshot(const char *name) const
Return the RooArgSet containing a snapshot of variables contained in the workspace.
static void addClassDeclImportDir(const char *dir)
Add dir to search path for class declaration (header) files.
void Print(Option_t *opts=nullptr) const override
Print contents of the workspace.
RooLinkedList _dataList
List of owned datasets.
RooAbsCategory * catfunc(RooStringView name) const
Retrieve discrete function (RooAbsCategory) with given name. A null pointer is returned if not found.
WSDir * _dir
! Transient ROOT directory representation of workspace
static void addClassImplImportDir(const char *dir)
Add dir to search path for class implementation (.cxx) files.
RooAbsPdf * pdf(RooStringView name) const
Retrieve p.d.f (RooAbsPdf) with given name. A null pointer is returned if not found.
std::map< std::string, RooArgSet > _namedSets
Map of named RooArgSets.
RooAbsData * embeddedData(RooStringView name) const
Retrieve dataset (binned or unbinned) with given name. A null pointer is returned if not found.
RooCategory * cat(RooStringView name) const
Retrieve discrete variable (RooCategory) with given name. A null pointer is returned if not found.
void clearStudies()
Remove all RooStudyManager modules.
bool renameSet(const char *name, const char *newName)
Rename set to a new name.
std::unique_ptr< RooFactoryWSTool > _factory
! Factory tool associated with workspace
RooArgSet allVars() const
Return set with all variable objects.
RooArgSet argSet(RooStringView nameList) const
Return set of RooAbsArgs matching to given list of names.
bool writeToFile(const char *fileName, bool recreate=true)
Save this current workspace into given file.
const RooArgSet * set(RooStringView name)
Return pointer to previously defined named set with given nmame If no such set is found a null pointe...
bool cd(const char *path=nullptr)
RooArgSet allCats() const
Return set with all category objects.
void RecursiveRemove(TObject *obj) override
If one of the TObject we have a referenced to is deleted, remove the reference.
RooAbsArg * fundArg(RooStringView name) const
Return fundamental (i.e.
RooLinkedList _views
List of model views.
bool commitTransaction()
Commit an ongoing import transaction.
~RooWorkspace() override
Workspace destructor.
bool cancelTransaction()
Cancel an ongoing import transaction.
bool startTransaction()
Open an import transaction operations.
TObject * Clone(const char *newname="") const override
TObject::Clone() needs to be overridden.
RooArgSet allResolutionModels() const
Return set with all resolution model objects.
RooLinkedList _snapshots
List of parameter snapshots.
bool saveSnapshot(RooStringView, const char *paramNames)
Save snapshot of values and attributes (including "Constant") of given parameters.
RooArgSet allPdfs() const
Return set with all probability density function objects.
void Streamer(TBuffer &) override
Stream an object of class RooWorkspace.
TObject * genobj(RooStringView name) const
Return generic object with given name.
std::list< RooAbsData * > allData() const
Return list of all dataset in the workspace.
RooLinkedList _studyMods
List if StudyManager modules.
std::list< TObject * > allGenericObjects() const
Return list of all generic objects in the workspace.
static void setClassFileExportDir(const char *dir=nullptr)
Specify the name of the directory in which embedded source code is unpacked and compiled.
bool importClassCode(const char *pat="*", bool doReplace=false)
Import code of all classes in the workspace that have a class name that matches pattern 'pat' and whi...
bool makeDir()
Create transient TDirectory representation of this workspace.
RooArgSet allCatFunctions() const
Return set with all category function objects.
static std::string _classFileExportDir
static std::list< std::string > _classImplDirList
RooAbsReal * function(RooStringView name) const
Retrieve function (RooAbsReal) with given name. Note that all RooAbsPdfs are also RooAbsReals....
RooAbsArg * arg(RooStringView name) const
Return RooAbsArg with given name. A null pointer is returned if none is found.
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 workspace through a comma separated list of names of objects already in the...
RooExpensiveObjectCache & expensiveObjectCache()
RooArgSet _sandboxNodes
! Sandbox for incoming objects in a transaction
bool defineSetInternal(const char *name, const RooArgSet &aset)
bool _openTrans
! Is there a transaction open?
RooRealVar * var(RooStringView name) const
Retrieve real-valued variable (RooRealVar) with given name. A null pointer is returned if not found.
bool addStudy(RooAbsStudy &study)
Insert RooStudyManager module.
static void autoImportClassCode(bool flag)
If flag is true, source code of classes not the ROOT distribution is automatically imported if on obj...
RooLinkedList _embeddedDataList
List of owned datasets that are embedded in pdfs.
RooArgSet _allOwnedNodes
List of owned pdfs and components.
RooAbsData * data(RooStringView name) const
Retrieve dataset (binned or unbinned) with given name. A null pointer is returned if not found.
std::list< RooAbsData * > allEmbeddedData() const
Return list of all dataset in the workspace.
bool loadSnapshot(const char *name)
Load the values and attributes of the parameters in the snapshot saved with the given name.
bool defineSet(const char *name, const RooArgSet &aset, bool importMissing=false)
Define a named RooArgSet with given constituents.
bool import(const RooAbsArg &arg, const RooCmdArg &arg1={}, const RooCmdArg &arg2={}, const RooCmdArg &arg3={}, const RooCmdArg &arg4={}, const RooCmdArg &arg5={}, const RooCmdArg &arg6={}, const RooCmdArg &arg7={}, const RooCmdArg &arg8={}, const RooCmdArg &arg9={})
Import a RooAbsArg object, e.g.
Buffer base class used for serializing objects.
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.
Bool_t cd() override
Change current directory to "this" directory.
virtual void Append(TObject *obj, Bool_t replace=kFALSE)
Append object to this directory.
static TFile * Open(const char *name, Option_t *option="", const char *ftitle="", Int_t compress=ROOT::RCompressionSetting::EDefaults::kUseCompiledDefault, Int_t netopt=0)
Create / open a file.
static void AddDirectory(Bool_t add=kTRUE)
Sets the flag controlling the automatic add of histograms in memory.
The TNamed class is the base class for all named ROOT classes.
const char * GetName() const override
Returns name of object.
const char * GetTitle() const override
Returns title of object.
Mother of all ROOT objects.
virtual void RecursiveRemove(TObject *obj)
Recursively remove this object from a list.
virtual const char * ClassName() const
Returns name of class to which the object belongs.
virtual Int_t Write(const char *name=nullptr, Int_t option=0, Int_t bufsize=0)
Write this object to the current directory.
Regular expression class.
const char * Data() 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.
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.