16#ifndef ROO_ABS_COLLECTION
17#define ROO_ABS_COLLECTION
34#include <unordered_map>
41template <
typename T,
typename Range_t>
44 return ROOT::RangeStaticCast<T>(std::forward<Range_t>(coll));
49template <
typename T,
typename Range_t>
52 return ROOT::RangeDynCast<T>(std::forward<Range_t>(coll));
114 bool addOwned(std::unique_ptr<RooAbsArg> var,
bool silent=
false);
120 template<
typename Iterator_t,
121 typename value_type =
typename std::remove_pointer<typename std::iterator_traits<Iterator_t>::value_type>,
122 typename = std::enable_if<std::is_convertible<const value_type*, const RooAbsArg*>::value> >
123 bool add(Iterator_t beginIt, Iterator_t endIt,
bool silent=
false) {
124 bool result = false ;
125 _list.reserve(
_list.size() + std::distance(beginIt, endIt));
126 for (
auto it = beginIt; it != endIt; ++it) {
127 result |=
add(**it,silent);
142 template<
class forwardIt>
144 for (forwardIt it = rangeBegin; it != rangeEnd; ++it) {
145 static_assert(std::is_same<
146 typename std::iterator_traits<forwardIt>::value_type,
147 RooAbsArg*>::value,
"Can only remove lists of RooAbsArg*.");
148 auto castedElm =
static_cast<RooAbsArg*
>(*it);
149 remove(*castedElm, silent, matchByNameOnly);
179 return find(var) !=
nullptr;
192 template<
typename Iterator_t,
193 typename value_type =
typename std::remove_pointer<typename std::iterator_traits<Iterator_t>::value_type>,
194 typename = std::enable_if<std::is_convertible<const value_type*, const RooAbsArg*>::value> >
195 bool overlaps(Iterator_t otherCollBegin, Iterator_t otherCollEnd)
const {
196 for (
auto it = otherCollBegin; it != otherCollEnd; ++it) {
234 return _list.begin();
241 Storage_t::const_reverse_iterator
rbegin()
const {
242 return _list.rbegin();
245 Storage_t::const_reverse_iterator
rend()
const {
249 Storage_t::size_type
size()
const {
254 return _list.empty();
258 _list.reserve(count);
273 return _list.front();
283 auto item = std::find(
_list.begin(),
_list.end(), arg);
284 return item !=
_list.end() ? item -
_list.begin() : -1;
301 virtual void printName(std::ostream& os)
const ;
302 virtual void printTitle(std::ostream& os)
const ;
304 virtual void printValue(std::ostream& os)
const ;
384 static_assert(!std::is_rvalue_reference<T&&>::value,
385 "A reference to a temporary RooAbsArg will be passed to a RooAbsCollection constructor! "
386 "This is not allowed, because the collection will not own the arguments. "
387 "Hence, the collection will contain dangling pointers when the temporary goes out of scope."
#define R__SUGGEST_ALTERNATIVE(ALTERNATIVE)
ROOT::RRangeCast< T, true, Range_t > dynamic_range_cast(Range_t &&coll)
ROOT::RRangeCast< T, false, Range_t > static_range_cast(Range_t &&coll)
#define ClassDef(name, id)
static void indent(ostringstream &buf, int indent_level)
const Bool_t kIterForward
Wraps any collection that can be used in range-based loops and applies static_cast<T> or dynamic_cast...
RooAbsArg is the common abstract base class for objects that represent a value and a "shape" in RooFi...
RooAbsCollection is an abstract container object that can hold multiple RooAbsArg objects.
void clearStructureTags()
Typed structure tag.
std::unique_ptr< HashAssistedFind > _hashAssistedFind
virtual void removeAll()
Remove all arguments from our set, deleting them if we own them.
void deleteList()
Delete contents of the list.
void remove(forwardIt rangeBegin, forwardIt rangeEnd, Bool_t silent=kFALSE, Bool_t matchByNameOnly=kFALSE)
std::vector< RooAbsArg * > Storage_t
TNamed * _typedStructureTag
Structure tag.
Storage_t const & get() const
Const access to the underlying stl container.
RooAbsCollection & assignValueOnly(const RooAbsCollection &other, bool forceIfSizeOne=false)
Sets the value of any argument in our set that also appears in the other set.
Bool_t setCatLabel(const char *name, const char *newVal="", Bool_t verbose=kFALSE)
Set state name of a RooAbsCategoryLValue stored in set with given name to newVal.
virtual TObject * create(const char *newname) const =0
void assignFast(const RooAbsCollection &other, bool setValDirty=true) const
Functional equivalent of assign() but assumes this and other collection have same layout.
Bool_t setCatIndex(const char *name, Int_t newVal=0, Bool_t verbose=kFALSE)
Set index value of a RooAbsCategoryLValue stored in set with given name to newVal.
Int_t getCatIndex(const char *name, Int_t defVal=0, Bool_t verbose=kFALSE) const
Get index value of a RooAbsCategory stored in set with given name.
void sortTopologically()
Sort collection topologically: the servers of any RooAbsArg will be before that RooAbsArg in the coll...
TNamed * typedStructureTag()
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()
Default constructor.
virtual Bool_t replace(const RooAbsArg &var1, const RooAbsArg &var2)
Replace var1 with var2 and return kTRUE for success.
const char * getCatLabel(const char *name, const char *defVal="", Bool_t verbose=kFALSE) const
Get state name of a RooAbsCategory stored in set with given name.
Storage_t::const_reverse_iterator rend() const
void sort(Bool_t reverse=false)
Sort collection using std::sort and name comparison.
Bool_t contains(const RooAbsArg &var) const
Check if collection contains an argument with the same name as var.
Bool_t addServerClonesToList(const RooAbsArg &var)
Add clones of servers of given argument to end of list.
virtual void printName(std::ostream &os) const
Return collection name.
bool overlaps(const RooAbsCollection &otherColl) const
Check if this and other collection have common entries.
void printLatex(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
Output content of collection as LaTex table.
Storage_t::const_reverse_iterator rbegin() const
RooAbsCollection * snapshot(Bool_t deepCopy=kTRUE) const
Take a snap shot of current collection contents.
virtual RooAbsArg * addClone(const RooAbsArg &var, Bool_t silent=kFALSE)
Add a clone of the specified argument to list.
Int_t index(const RooAbsArg *arg) const
Returns index of given arg, or -1 if arg is not in the collection.
virtual TObject * Clone(const char *newname=0) const
Make a clone of an object using the Streamer facility.
RooFIter fwdIterator() const
One-time forward iterator.
bool overlaps(Iterator_t otherCollBegin, Iterator_t otherCollEnd) const
virtual Bool_t add(const RooAbsArg &var, Bool_t silent=kFALSE)
Add the specified argument to list.
const_iterator end() const
bool hasSameLayout(const RooAbsCollection &other) const
Check that all entries where the collections overlap have the same name.
Bool_t setStringValue(const char *name, const char *newVal="", Bool_t verbose=kFALSE)
Set string value of a RooStringVar stored in set with given name to newVal.
TObject * FindObject(const TObject *obj) const
Find object in the collection, Note: matching by object name, like the find() method.
Double_t getRealValue(const char *name, Double_t defVal=0, Bool_t verbose=kFALSE) const
Get value of a RooAbsReal stored in set with given name.
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.
virtual ~RooAbsCollection()
Destructor.
Storage_t::size_type size() const
RooAbsArg * operator[](Storage_t::size_type i) const
Bool_t setRealValue(const char *name, Double_t newVal=0, Bool_t verbose=kFALSE)
Set value of a RooAbsRealLValye stored in set with given name to newVal No error messages are printed...
RooAbsArg * first() const
static void assert_is_no_temporary(T &&)
void reserve(Storage_t::size_type count)
RooAbsCollection * selectByName(const char *nameList, Bool_t verbose=kFALSE) const
Create a subset of the current collection, consisting only of those elements with names matching the ...
void clear()
Clear contents. If the collection is owning, it will also delete the contents.
virtual Bool_t containsInstance(const RooAbsArg &var) const
Check if this exact instance is in this collection.
TObject * FindObject(const char *name) const
Find object by name in the collection.
Bool_t allInRange(const char *rangeSpec) const
Return true if all contained object report to have their value inside the specified range.
bool add(const RooAbsCollection &list, bool silent=kFALSE)
Add a collection of arguments to this collection by calling add() for each element in the source coll...
virtual void printMultiline(std::ostream &os, Int_t contents, Bool_t verbose=kFALSE, TString indent="") const
Implement multiline printing of collection, one line for each contained object showing the requested ...
Int_t index(const RooAbsArg &arg) const
Returns index of given arg, or -1 if arg is not in the collection.
const_iterator begin() const
virtual void Print(Option_t *options=0) const
This method must be overridden when a class wants to print itself.
std::unique_ptr< LegacyIterator_t > makeLegacyIterator(bool forward=true) const
Factory for legacy iterators.
bool add(Iterator_t beginIt, Iterator_t endIt, bool silent=false)
std::size_t _sizeThresholdForMapSearch
void setAttribAll(const Text_t *name, Bool_t value=kTRUE)
Set given attribute in each element of the collection by calling each elements setAttribute() functio...
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...
virtual void printTitle(std::ostream &os) const
Return collection title.
Bool_t equals(const RooAbsCollection &otherColl) const
Check if this and other collection have identically-named contents.
RooAbsCollection * selectByAttrib(const char *name, Bool_t value) const
Create a subset of the current collection, consisting only of those elements with the specified attri...
void useHashMapForFind(bool flag) const
const char * getStringValue(const char *name, const char *defVal="", Bool_t verbose=kFALSE) const
Get string value of a RooStringVar stored in set with given name.
const char * GetName() const
Returns name of object.
virtual void printClassName(std::ostream &os) const
Return collection class name.
void setHashTableSize(Int_t number)
Set the size at which the collection will automatically start using an extra lookup table instead of ...
std::string contentsString() const
Return comma separated list of contained object names as STL string.
void setName(const char *name)
RooAbsCollection & operator=(const RooAbsCollection &other)
Assign values from the elements in other to our elements.
Int_t getHashTableSize() const
Query the size at which the collection will automatically start using an extra lookup table instead o...
RooLinkedListIter iterator(Bool_t dir=kIterForward) const
TIterator-style iteration over contained elements.
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.
void makeTypedStructureTag()
virtual TObject * clone(const char *newname) const =0
void insert(RooAbsArg *)
Insert an element into the owned collections.
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.
Storage_t::const_iterator const_iterator
virtual void printValue(std::ostream &os) const
Print value of collection, i.e.
virtual Int_t defaultPrintContents(Option_t *opt) const
Define default RooPrinable print options for given Print() flag string For inline printing only show ...
RooCmdArg is a named container for two doubles, two integers two object points and three string point...
A one-time forward iterator working on RooLinkedList or RooAbsCollection.
A wrapper around TIterator derivatives.
RooLinkedList is an collection class for internal use, storing a collection of RooAbsArg pointers in ...
RooPlotable is a 'mix-in' base class that define the standard RooFit plotting and printing methods.
virtual StyleOption defaultPrintStyle(Option_t *opt) const
static std::ostream & defaultPrintStream(std::ostream *os=0)
Return a reference to the current default stream to use in Print().
virtual void printStream(std::ostream &os, Int_t contents, StyleOption style, TString indent="") const
Print description of object on ostream, printing contents set by contents integer,...
TIterator and GenericRooFIter front end with STL back end.
Iterator abstract base class.
The TNamed class is the base class for all named ROOT classes.
Mother of all ROOT objects.
const char * Data() const
The namespace RooFit contains mostly switches that change the behaviour of functions of PDFs (or othe...
RooAbsArgPtrOrDouble(double x)
RooAbsArgPtrOrDouble(RooAbsArg &arg)
Helper for hash-map-assisted finding of elements by name.
static void output(int code)