69 template<
typename It_t>
75 for (
auto it = first; it != last; ++it) {
150 for (
auto item : other.
_list) {
201 for (
auto item :
_list) {
230 snapName.
Append(
"Snapshot of ") ;
284 if (&other==
this)
return ;
286 for (
auto elem :
_list) {
287 auto theirs = other.
find(*elem);
288 if(!theirs)
continue;
290 elem->copyCache(theirs) ;
291 elem->setAttribute(
"Constant",theirs->isConstant()) ;
306 if (&other==
this)
return *
this;
309 if (
size()==1 &&
size() == other.
size() && forceIfSizeOne) {
315 for (
auto elem :
_list) {
316 auto theirs = other.
find(*elem);
317 if(!theirs)
continue;
319 elem->copyCache(theirs,
true) ;
332 if (&other==
this)
return ;
335 auto iter2 = other.
_list.begin();
336 for (
auto iter1 =
_list.begin();
337 iter1 !=
_list.end() && iter2 != other.
_list.end();
344 auto theirs =
static_cast<RooRealVar*
>(*iter2);
347 (*iter2)->syncCache() ;
348 (*iter1)->copyCache(*iter2,
true,setValDirty) ;
372 coutE(ObjectHandling) <<
ClassName() <<
"::" <<
GetName() <<
"::addOwned: can only add to an owned list" << std::endl;
396 bool result =
addOwned(*var.release(), silent);
398 auto errMsg = std::string(
"RooAbsCollection::addOwned could not add the argument to the")
399 +
" collection! The ownership would not be well defined if we ignore this.";
400 coutE(ObjectHandling) << errMsg << std::endl;
401 throw std::runtime_error(errMsg);
421 coutE(ObjectHandling) <<
ClassName() <<
"::" <<
GetName() <<
"::addClone: can only add to an owned list" << std::endl;
448 coutE(ObjectHandling) <<
ClassName() <<
"::" <<
GetName() <<
"::add: cannot add to an owned list" << std::endl;
474 if(list.isOwning()) {
475 throw std::invalid_argument(
"Passing an owning RooAbsCollection by const& to"
476 " RooAbsCollection::addOwned is forbidden because the ownership"
477 " would be ambiguous! Please std::move() the RooAbsCollection in this case."
478 " Note that the passed RooAbsCollection is invalid afterwards.");
483 _list.reserve(
_list.size() + list._list.size());
485 for (
auto item : list._list) {
502 if(list.isOwning()) {
503 list._ownCont =
false;
505 if(list.empty())
return false;
507 bool result =
addOwned(list, silent);
510 auto errMsg = std::string(
"RooAbsCollection::addOwned could not add the argument to the")
511 +
" collection! The ownership would not be well defined if we ignore this.";
512 coutE(ObjectHandling) << errMsg << std::endl;
513 throw std::runtime_error(errMsg);
532 _list.reserve(
_list.size() + list._list.size());
534 for (
auto item : list._list) {
549 std::stringstream errMsg;
550 errMsg <<
"RooAbsCollection: cannot replace variables in a copied list";
551 coutE(ObjectHandling) << errMsg.str() << std::endl;
553 throw std::invalid_argument(errMsg.str());
557 for (
const auto * arg : other.
_list) {
559 auto found =
find(*arg);
560 if (found)
replace(*found,*arg);
570 auto var1It = std::find(
_list.begin(),
_list.end(), &var1);
572 if (var1It ==
_list.end()) {
573 coutE(ObjectHandling) <<
"RooAbsCollection: variable \"" <<
name <<
"\" is not in the list"
574 <<
" and cannot be replaced" << std::endl;
582 if(other !=
nullptr && other != &var1) {
583 coutE(ObjectHandling) <<
"RooAbsCollection: cannot replace \"" <<
name
584 <<
"\" with already existing \"" << var2.
GetName() <<
"\"" << std::endl;
613 std::string errMsg =
"RooAbsCollection: cannot replace variables in a copied list";
614 coutE(ObjectHandling) << errMsg << std::endl;
615 throw std::runtime_error(errMsg);
632 "RooAbsCollection::replace(RooAbsArg *, std::unique_ptr<RooAbsArg>) can't be used on a non-owning collection!";
633 coutE(ObjectHandling) << errMsg << std::endl;
634 throw std::runtime_error(errMsg);
637 bool success =
replaceImpl(*var1, *var2.release());
639 auto errMsg = std::string(
"RooAbsCollection::replace(RooAbsArg *, std::unique_ptr<RooAbsArg>) did not succeed!") +
640 "The ownership would not be well defined if we ignore this.";
641 coutE(ObjectHandling) << errMsg << std::endl;
642 throw std::runtime_error(errMsg);
658 const auto sizeBefore =
_list.size();
660 if (matchByNameOnly) {
663 return elm->GetName() ==
name;
665 std::set<RooAbsArg*> toBeDeleted;
669 if (nameMatch(elm)) {
670 toBeDeleted.insert(elm);
677 for (
auto arg : toBeDeleted)
680 _list.erase(std::remove(_list.begin(), _list.end(), &var), _list.end());
683 if (_hashAssistedFind && sizeBefore != _list.size()) {
684 _hashAssistedFind->erase(&var);
687 return sizeBefore != _list.size();
702 auto oldSize =
_list.size();
703 std::vector<const RooAbsArg*> markedItems;
705 if (matchByNameOnly) {
709 auto nameMatchAndMark = [&list, &markedItems](
const RooAbsArg* elm) {
710 if( list.contains(*elm) ) {
711 markedItems.push_back(elm);
721 auto argMatchAndMark = [&list, &markedItems](
const RooAbsArg* elm) {
722 if( list.containsInstance(*elm) ) {
723 markedItems.push_back(elm);
733 for(
auto& var : markedItems ) {
739 std::set<const RooAbsArg*> toBeDeleted(markedItems.begin(), markedItems.end());
740 for (
auto arg : toBeDeleted) {
745 return oldSize !=
_list.size();
779 for (
auto arg :
_list) {
780 arg->setAttribute(
name, value);
795 selName.
Append(
"_selection") ;
799 for (
auto arg :
_list) {
800 if (arg->getAttribute(
name)==value)
822 for (
auto arg :
_list) {
823 if (refColl.
find(*arg))
853 selName.
Append(
"_selection") ;
856 const size_t bufSize = strlen(nameList) + 1;
857 std::vector<char> buf(bufSize);
858 strlcpy(buf.data(),nameList,bufSize) ;
859 char* wcExpr = strtok(buf.data(),
",") ;
863 cxcoutD(ObjectHandling) <<
"RooAbsCollection::selectByName(" <<
GetName() <<
") processing expression '" << wcExpr <<
"'" << std::endl;
866 for (
auto const* arg : *
this) {
869 cxcoutD(ObjectHandling) <<
"RooAbsCollection::selectByName(" <<
GetName() <<
") selected element " << arg->GetName() << std::endl;
874 wcExpr = strtok(
nullptr,
",") ;
889 if (
size() != otherColl.
size())
return false ;
893 return left->
namePtr() == right->namePtr();
896 return std::is_permutation(
_list.begin(),
_list.end(),
897 otherColl.
_list.begin(),
905template<
class Collection_t>
906RooAbsArg* findUsingNamePointer(
const Collection_t& coll,
const TNamed* ptr) {
907 auto findByNamePtr = [ptr](
const RooAbsArg* elm) {
908 return ptr == elm->namePtr();
911 auto item = std::find_if(coll.begin(), coll.end(), findByNamePtr);
913 return item != coll.end() ? *item :
nullptr;
928 if (!nptr)
return nullptr;
939 return findUsingNamePointer(
_list, nptr);
949 const auto nptr = arg.
namePtr();
960 return findUsingNamePointer(
_list, nptr);
967 const std::string theName(
name);
969 return elm->GetName() == theName;
971 return item !=
_list.end() ? item -
_list.begin() : -1;
983 if (verbose)
coutE(InputArguments) <<
"RooAbsCollection::getRealValue(" <<
GetName() <<
") ERROR no object with name '" <<
name <<
"' found" << std::endl;
988 if (verbose)
coutE(InputArguments) <<
"RooAbsCollection::getRealValue(" <<
GetName() <<
") ERROR object '" <<
name <<
"' is not of type RooAbsReal" << std::endl;
1004 if (verbose)
coutE(InputArguments) <<
"RooAbsCollection::setRealValue(" <<
GetName() <<
") ERROR no object with name '" <<
name <<
"' found" << std::endl;
1009 if (verbose)
coutE(InputArguments) <<
"RooAbsCollection::setRealValue(" <<
GetName() <<
") ERROR object '" <<
name <<
"' is not of type RooAbsRealLValue" << std::endl;
1026 if (verbose)
coutE(InputArguments) <<
"RooAbsCollection::getCatLabel(" <<
GetName() <<
") ERROR no object with name '" <<
name <<
"' found" << std::endl;
1031 if (verbose)
coutE(InputArguments) <<
"RooAbsCollection::getCatLabel(" <<
GetName() <<
") ERROR object '" <<
name <<
"' is not of type RooAbsCategory" << std::endl;
1047 if (verbose)
coutE(InputArguments) <<
"RooAbsCollection::setCatLabel(" <<
GetName() <<
") ERROR no object with name '" <<
name <<
"' found" << std::endl;
1052 if (verbose)
coutE(InputArguments) <<
"RooAbsCollection::setCatLabel(" <<
GetName() <<
") ERROR object '" <<
name <<
"' is not of type RooAbsCategory" << std::endl;
1069 if (verbose)
coutE(InputArguments) <<
"RooAbsCollection::getCatLabel(" <<
GetName() <<
") ERROR no object with name '" <<
name <<
"' found" << std::endl;
1074 if (verbose)
coutE(InputArguments) <<
"RooAbsCollection::getCatLabel(" <<
GetName() <<
") ERROR object '" <<
name <<
"' is not of type RooAbsCategory" << std::endl;
1090 if (verbose)
coutE(InputArguments) <<
"RooAbsCollection::setCatLabel(" <<
GetName() <<
") ERROR no object with name '" <<
name <<
"' found" << std::endl;
1095 if (verbose)
coutE(InputArguments) <<
"RooAbsCollection::setCatLabel(" <<
GetName() <<
") ERROR object '" <<
name <<
"' is not of type RooAbsCategory" << std::endl;
1112 if (verbose)
coutE(InputArguments) <<
"RooAbsCollection::getStringValue(" <<
GetName() <<
") ERROR no object with name '" <<
name <<
"' found" << std::endl;
1117 if (verbose)
coutE(InputArguments) <<
"RooAbsCollection::getStringValue(" <<
GetName() <<
") ERROR object '" <<
name <<
"' is not of type RooStringVar" << std::endl;
1134 if (verbose)
coutE(InputArguments) <<
"RooAbsCollection::setStringValue(" <<
GetName() <<
") ERROR no object with name '" <<
name <<
"' found" << std::endl;
1139 if (verbose)
coutE(InputArguments) <<
"RooAbsCollection::setStringValue(" <<
GetName() <<
") ERROR object '" <<
name <<
"' is not of type RooStringVar" << std::endl;
1151 std::string retVal ;
1152 for (
auto arg :
_list) {
1153 retVal += arg->GetName();
1157 if (!retVal.empty()) {
1158 retVal.erase(retVal.end()-1);
1204 if (opt &&
TString(opt)==
"I") {
1207 if (opt &&
TString(opt).Contains(
"v")) {
1225 for (
auto arg :
_list) {
1232 os << '\'' << (static_cast<RooStringVar *>(arg))->getVal() <<
'\'';
1234 os << arg->GetName();
1256 Int_t maxNameLen(1) ;
1258 if (nameFieldLengthSaved==0) {
1259 for (
auto next :
_list) {
1260 Int_t len = strlen(next->GetName()) ;
1261 if (len>maxNameLen) maxNameLen = len ;
1266 unsigned int idx = 0;
1267 for (
auto next :
_list) {
1268 os <<
indent << std::setw(3) << ++idx <<
") ";
1283 for (
auto arg :
_list) {
1284 std::cout << arg <<
" " << arg->ClassName() <<
"::" << arg->GetName() <<
" (" << arg->GetTitle() <<
")" << std::endl ;
1337 pc.
defineInt(
"dummy",
"FormatArgs",0,0) ;
1348 pc.
process(arg1,arg2,arg3,arg4,arg5,arg6,arg7,arg8) ;
1353 const char* outFile = pc.
getString(
"outputFile") ;
1354 if (outFile && strlen(outFile)) {
1355 std::ofstream ofs(outFile) ;
1392 sibOption = option ;
1396 sibFormatCmd = *formatCmd ;
1400 static char buf[100] ;
1401 strlcpy(buf,tmp.
Data(),100) ;
1419 for (
auto* arg : *col) {
1424 coutW(InputArguments) <<
"RooAbsCollection::printLatex: can only print RooRealVar in LateX, skipping non-RooRealVar object named "
1425 << arg->GetName() << std::endl;
1428 coutW(InputArguments) <<
"RooAbsCollection::printLatex: WARNING: naming and/or ordering of sibling list is different" << std::endl;
1431 listListRRV.
Add(list) ;
1432 if (prevList && list->
size() != prevList->
size()) {
1433 coutW(InputArguments) <<
"RooAbsCollection::printLatex: ERROR: sibling list(s) must have same length as self" << std::endl;
1444 for (k=0 ; k<nlist ; k++) subheader +=
"c" ;
1446 TString header =
"\\begin{tabular}{" ;
1447 for (j=0 ; j<ncol ; j++) {
1448 if (j>0) header +=
"|" ;
1449 header += subheader ;
1452 ofs << header << std::endl;
1456 for (i=0 ; i<nrow ; i++) {
1457 for (j=0 ; j<ncol ; j++) {
1458 for (k=0 ; k<nlist ; k++) {
1462 ofs << par->
format(sigDigit,(k==0)?option:sibOption.
Data());
1464 ofs << par->
format((k==0)?*formatCmd:sibFormatCmd);
1467 if (!(j==ncol-1 && k==nlist-1)) {
1472 ofs <<
"\\\\" << std::endl;
1475 ofs <<
"\\end{tabular}" << std::endl;
1488 if (!rangeSpec)
return true ;
1491 std::vector<std::string> cutVec ;
1492 if (rangeSpec && strlen(rangeSpec)>0) {
1493 if (strchr(rangeSpec,
',')==
nullptr) {
1494 cutVec.push_back(rangeSpec) ;
1496 const size_t bufSize = strlen(rangeSpec)+1;
1497 std::vector<char> buf(bufSize);
1498 strlcpy(buf.data(),rangeSpec,bufSize) ;
1499 const char* oneRange = strtok(buf.data(),
",") ;
1501 cutVec.push_back(oneRange) ;
1502 oneRange = strtok(
nullptr,
",") ;
1508 bool selectByRange = true ;
1509 for (
auto arg :
_list) {
1510 bool selectThisArg = false ;
1512 for (icut=0 ; icut<cutVec.size() ; icut++) {
1513 if (arg->inRange(cutVec[icut].c_str())) {
1514 selectThisArg = true ;
1518 if (!selectThisArg) {
1519 selectByRange = false ;
1524 return selectByRange ;
1545 return strcmp(
l->GetName(),
r->GetName()) > 0;
1548 std::sort(
_list.begin(),
_list.end(), cmpReverse);
1552 return strcmp(
l->GetName(),
r->GetName()) < 0;
1564 std::unordered_set<TNamed const *> seenArgs;
1565 for (std::size_t iArg = 0; iArg <
_list.size(); ++iArg) {
1567 bool movedArg =
false;
1569 if (seenArgs.find(server->namePtr()) == seenArgs.end()) {
1570 auto found = std::find_if(
_list.begin(),
_list.end(),
1571 [server](
RooAbsArg *elem) { return elem->namePtr() == server->namePtr(); });
1572 if (found !=
_list.end()) {
1584 seenArgs.insert(arg->
namePtr());
1591 _list.push_back(item);
1610#if ROOT_VERSION_CODE >= ROOT_VERSION(6, 33, 00)
1611 if (flag && !
dynamic_cast<RooArgSet const *
>(
this)) {
1613 std::stringstream msg;
1614 msg <<
"RooAbsCollection::useHashMapForFind() ERROR: this collection is not a RooArgSet but a RooArgList, so "
1615 "hash-assisted finding can't be enabled!"
1617 oocoutE(
nullptr, ObjectHandling) << msg.str() << std::endl;
1618 throw std::runtime_error(msg.str());
1634 for (
unsigned int i=0; i < std::min(
_list.size(), other.
size()); ++i) {
1635 if (
_list[i]->namePtr() != other.
_list[i]->namePtr())
1644 std::string typeName = klass->
GetName();
1645 std::stringstream msg;
1646 msg <<
"RooAbsCollection::addTyped<" << typeName <<
">() ERROR: component " << arg->
GetName() <<
" is not of type "
1648 oocoutE(
nullptr, InputArguments) << msg.str() << std::endl;
1649 throw std::invalid_argument(msg.str());
1656 if (myarg->isConstant())
1657 constSet.
add(*myarg);
ROOT::RRangeCast< T, false, Range_t > static_range_cast(Range_t &&coll)
static Roo_reg_AGKInteg1D instance
int Int_t
Signed integer 4 bytes (int).
char Text_t
General string (char).
unsigned int UInt_t
Unsigned integer 4 bytes (unsigned int).
const char Option_t
Option string (const char).
static void indent(ostringstream &buf, int indent_level)
Common abstract base class for objects that represent a value and a "shape" in RooFit.
virtual void copyCache(const RooAbsArg *source, bool valueOnly=false, bool setValDirty=true)=0
const TNamed * namePtr() const
De-duplicated pointer to this object's name.
virtual void syncCache(const RooArgSet *nset=nullptr)=0
const RefCountList_t & servers() const
List of all servers of this object.
TObject * Clone(const char *newname=nullptr) const override
Make a clone of an object using the Streamer facility.
Abstract base class for objects that represent a discrete value that can be set from the outside,...
virtual bool setIndex(value_type index, bool printError=true)=0
Change category state by specifying the index code of the desired state.
virtual bool setLabel(const char *label, bool printError=true)=0
Change category state by specifying a state name.
A space to attach TBranches.
virtual value_type getCurrentIndex() const
Return index number of current state.
virtual const char * getCurrentLabel() const
Return label string of current state.
RooAbsCollection * selectByAttrib(const char *name, bool value) const
Create a subset of the current collection, consisting only of those elements with the specified attri...
bool equals(const RooAbsCollection &otherColl) const
Check if this and other collection have identically-named contents.
double getRealValue(const char *name, double defVal=0.0, bool verbose=false) const
Get value of a RooAbsReal stored in set with given name.
virtual void removeAll()
Remove all arguments from our set, deleting them if we own them.
void deleteList()
Delete contents of the list.
Int_t getCatIndex(const char *name, Int_t defVal=0, bool verbose=false) const
Get index value of a RooAbsCategory stored in set with given name.
RooFit::Detail::HashAssistedFind HashAssistedFind
virtual bool remove(const RooAbsArg &var, bool silent=false, bool matchByNameOnly=false)
Remove the specified argument from our list.
void printLatex(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
Output content of collection as LaTex table.
RooAbsCollection & assignValueOnly(const RooAbsCollection &other, bool forceIfSizeOne=false)
Sets the value of any argument in our set that also appears in the other set.
virtual TObject * create(const char *newname) const =0
Int_t defaultPrintContents(Option_t *opt) const override
Define default RooPrinable print options for given Print() flag string For inline printing only show ...
bool allInRange(const char *rangeSpec) const
Return true if all contained object report to have their value inside the specified range.
void assignFast(const RooAbsCollection &other, bool setValDirty=true) const
Functional equivalent of assign() but assumes this and other collection have same layout.
void sortTopologically()
Sort collection topologically: the servers of any RooAbsArg will be before that RooAbsArg in the coll...
const char * getStringValue(const char *name, const char *defVal="", bool verbose=false) const
Get string value of a RooStringVar stored in set with given name.
virtual bool canBeAdded(const RooAbsArg &arg, bool silent) const =0
Determine whether it's possible to add a given RooAbsArg to the collection or not.
RooAbsCollection * snapshot(bool deepCopy=true) const
Take a snap shot of current collection contents.
RooAbsCollection()
Default constructor.
void printValue(std::ostream &os) const override
Print value of collection, i.e.
~RooAbsCollection() override
Destructor.
bool setStringValue(const char *name, const char *newVal="", bool verbose=false)
Set string value of a RooStringVar stored in set with given name to newVal.
HashAssistedFind * _hashAssistedFind
!
const char * GetName() const override
Returns name of object.
virtual bool add(const RooAbsArg &var, bool silent=false)
Add the specified argument to list.
void setAttribAll(const Text_t *name, bool value=true)
Set given attribute in each element of the collection by calling each elements setAttribute() functio...
void printTitle(std::ostream &os) const override
Return collection title.
Int_t index(const RooAbsArg *arg) const
Returns index of given arg, or -1 if arg is not in the collection.
bool _allRRV
All contents are RRV.
bool hasSameLayout(const RooAbsCollection &other) const
Check that all entries where the collections overlap have the same name.
void RecursiveRemove(TObject *obj) override
If one of the TObject we have a referenced to is deleted, remove the reference.
void assign(const RooAbsCollection &other) const
Sets the value, cache and constant attribute of any argument in our set that also appears in the othe...
Storage_t::size_type size() const
RooAbsArg * first() const
virtual bool replace(const RooAbsArg &var1, const RooAbsArg &var2)
Replace var1 with var2 and return true for success.
bool setCatIndex(const char *name, Int_t newVal=0, bool verbose=false)
Set index value of a RooAbsCategoryLValue stored in set with given name to newVal.
void clear()
Clear contents. If the collection is owning, it will also delete the contents.
void printMultiline(std::ostream &os, Int_t contents, bool verbose=false, TString indent="") const override
Implement multiline printing of collection, one line for each contained object showing the requested ...
static void throwAddTypedException(TClass *klass, RooAbsArg *arg)
bool setCatLabel(const char *name, const char *newVal="", bool verbose=false)
Set state name of a RooAbsCategoryLValue stored in set with given name to newVal.
void removeConstantParameters()
virtual bool addOwned(RooAbsArg &var, bool silent=false)
Add an argument and transfer the ownership to the collection.
Storage_t _list
Actual object storage.
RooAbsCollection * selectByName(const char *nameList, bool verbose=false) const
Create a subset of the current collection, consisting only of those elements with names matching the ...
bool setRealValue(const char *name, double newVal=0.0, bool verbose=false)
Set value of a RooAbsRealLValue stored in set with given name to newVal No error messages are printed...
bool _ownCont
Flag to identify a list that owns its contents.
virtual RooAbsArg * addClone(const RooAbsArg &var, bool silent=false)
Add a clone of the specified argument to list.
void printName(std::ostream &os) const override
Return collection name.
void sort(bool reverse=false)
Sort collection using std::sort and name comparison.
std::size_t _sizeThresholdForMapSearch
!
void dump() const
Base contents dumper for debugging purposes.
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...
const char * getCatLabel(const char *name, const char *defVal="", bool verbose=false) const
Get state name of a RooAbsCategory stored in set with given name.
void useHashMapForFind(bool flag) const
bool replaceImpl(const RooAbsArg &var1, const RooAbsArg &var2)
std::string contentsString() const
Return comma separated list of contained object names as STL string.
void printClassName(std::ostream &os) const override
Return collection class name.
void setName(const char *name)
RooAbsCollection & operator=(const RooAbsCollection &other)
Assign values from the elements in other to our elements.
void insert(RooAbsArg *)
Insert an element into the owned collections.
RooAbsArg * find(const char *name) const
Find object with given name in list.
Abstract base class for objects that represent a real value that may appear on the left hand side of ...
virtual void setVal(double value)=0
Set the current value of the object. Needs to be overridden by implementations.
Abstract base class for objects that represent a real value and implements functionality common to al...
double getVal(const RooArgSet *normalisationSet=nullptr) const
Evaluate object.
RooArgList is a container object that can hold multiple RooAbsArg objects.
RooAbsArg * at(Int_t idx) const
Return object at given index, or nullptr if index is out of range.
RooArgSet is a container object that can hold multiple RooAbsArg objects.
Named container for two doubles, two integers two object points and three string pointers that can be...
void addArg(const RooCmdArg &arg)
Utility function to add nested RooCmdArg to payload of this RooCmdArg.
const char * getString(Int_t idx) const
Return string stored in slot idx.
void setString(Int_t idx, const char *value)
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 hasProcessed(const char *cmdName) const
Return true if RooCmdArg with name 'cmdName' has been processed.
bool ok(bool verbose) const
Return true of parsing was successful.
bool defineObject(const char *name, const char *argName, int setNum, const TObject *obj=nullptr, bool isArray=false)
Define TObject property name 'name' mapped to object in slot 'setNum' in RooCmdArg with name argName ...
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...
const RooLinkedList & getObjectList(const char *name) const
Return list of objects registered with name 'name'.
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'.
Collection class for internal use, storing a collection of RooAbsArg pointers in a doubly linked list...
TObject * At(int index) const
Return object stored in sequential position given by index.
void Delete(Option_t *o=nullptr) override
Remove all elements in collection and delete all elements NB: Collection does not own elements,...
virtual void Add(TObject *arg)
TObject * FindObject(const char *name) const override
Return pointer to object with given name.
Registry for const char* names.
static const TNamed * known(const char *stringPtr)
If the name is already known, return its TNamed pointer. Otherwise return 0 (don't register the name)...
static void nameFieldLength(Int_t newLen)
Set length of field reserved from printing name of RooAbsArgs in multi-line collection printing to gi...
Variable that can be changed from the outside.
std::string format(const RooCmdArg &formatArg) const
Format contents of RooRealVar for pretty printing on RooPlot parameter boxes.
void copyCacheFast(const RooRealVar &other, bool setValDirty=true)
A RooAbsArg implementing string values.
void setVal(const char *newVal)
const char * getVal() const
static void create(const TObject *obj)
Register creation of object 'obj'.
TClass instances represent classes, structs and namespaces in the ROOT type system.
The TNamed class is the base class for all named ROOT classes.
const char * GetName() const override
Returns name of object.
virtual const char * ClassName() const
Returns name of class to which the object belongs.
virtual Bool_t InheritsFrom(const char *classname) const
Returns kTRUE if object inherits from class "classname".
virtual const char * GetTitle() const
Returns title of object.
TObject()
TObject constructor.
Regular expression class.
int CompareTo(const char *cs, ECaseCompare cmp=kExact) const
Compare a string to char *cs2.
const char * Data() const
TString & ReplaceAll(const TString &s1, const TString &s2)
TString & Append(const char *cs)
Ssiz_t Index(const char *pat, Ssiz_t i=0, ECaseCompare cmp=kExact) const
RooCmdArg LatexTableStyle(bool flag=true)
The namespace RooFit contains mostly switches that change the behaviour of functions of PDFs (or othe...
bool snapshotImpl(RooAbsCollection const &input, RooAbsCollection &output, bool deepCopy, RooArgSet const *observables)
RooAbsArg * find(const TNamed *nptr) const
std::unordered_map< const TNamed *, const RooAbsArg *const > nameToItemMap
const std::size_t & currentRooNameRegCounter
void erase(const RooAbsArg *elm)
std::size_t rooNameRegCounterWhereMapWasValid
void replace(const RooAbsArg *out, const RooAbsArg *in)
void insert(const RooAbsArg *elm)
HashAssistedFind(It_t first, It_t last)
Initialise empty hash map for fast finding by name.