File indexing completed on 2025-12-16 10:30:35
0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015
0016 #ifndef ROO_ARG_SET
0017 #define ROO_ARG_SET
0018
0019 #include "RooAbsCollection.h"
0020
0021 class RooAbsArg ;
0022 class RooArgList ;
0023
0024 class RooArgSet : public RooAbsCollection {
0025 public:
0026
0027
0028 RooArgSet();
0029
0030
0031
0032
0033
0034
0035
0036
0037
0038
0039
0040
0041
0042
0043 template<typename... Args_t>
0044 RooArgSet(const RooAbsArg& arg, Args_t &&... moreArgsOrName)
0045
0046 {
0047
0048
0049
0050
0051
0052
0053
0054
0055
0056 processArgs(arg, std::forward<Args_t>(moreArgsOrName)...);
0057 }
0058
0059
0060
0061 template<typename... Args_t>
0062 RooArgSet(RooAbsArg && arg, Args_t &&... moreArgsOrName)
0063 : RooArgSet{arg, std::move(arg), std::forward<Args_t>(moreArgsOrName)...} {}
0064
0065 template<typename... Args_t>
0066 explicit RooArgSet(double arg, Args_t &&... moreArgsOrName) {
0067 processArgs(arg, std::forward<Args_t>(moreArgsOrName)...);
0068 }
0069
0070
0071
0072
0073
0074
0075 template<typename Iterator_t,
0076 typename value_type = typename std::remove_pointer<typename std::iterator_traits<Iterator_t>::value_type>::type,
0077 typename = std::enable_if<std::is_convertible<const value_type*, const RooAbsArg*>::value> >
0078 RooArgSet(Iterator_t beginIt, Iterator_t endIt, const char* name="") :
0079 RooArgSet(name) {
0080 for (auto it = beginIt; it != endIt; ++it) {
0081 processArg(*it);
0082 }
0083 }
0084
0085
0086
0087
0088
0089
0090
0091 RooArgSet(std::vector<RooAbsArgPtrOrDouble> const& vec) {
0092 for(auto const& arg : vec) {
0093 if(arg.hasPtr) processArg(arg.ptr);
0094 else processArg(arg.val);
0095 }
0096 }
0097
0098 RooArgSet(const RooArgSet& other, const char *name="");
0099
0100 RooArgSet(RooArgSet && other) : RooAbsCollection(std::move(other)) {}
0101
0102 RooArgSet(const RooArgSet& set1, const RooArgSet& set2,
0103 const char *name="");
0104
0105 RooArgSet(const RooAbsCollection& coll) ;
0106 RooArgSet(const RooAbsCollection& collection, const RooAbsArg* var1);
0107 explicit RooArgSet(const TCollection& tcoll, const char* name="") ;
0108 explicit RooArgSet(const char *name);
0109
0110 ~RooArgSet() override;
0111 TObject* clone(const char* newname=nullptr) const override { return new RooArgSet(*this,newname); }
0112 TObject* create(const char* newname) const override { return new RooArgSet(newname); }
0113 RooArgSet& operator=(const RooArgSet& other) { RooAbsCollection::operator=(other) ; return *this ;}
0114
0115 using RooAbsCollection::operator[];
0116 RooAbsArg& operator[](const TString& str) const;
0117
0118
0119
0120
0121 virtual bool readFromStream(std::istream& is, bool compact, bool verbose=false) {
0122
0123 return readFromStream(is, compact, nullptr, nullptr, verbose) ;
0124 }
0125 bool readFromStream(std::istream& is, bool compact, const char* flagReadAtt, const char* section, bool verbose=false) ;
0126 virtual void writeToStream(std::ostream& os, bool compact, const char* section=nullptr) const;
0127 void writeToFile(const char* fileName) const ;
0128 bool readFromFile(const char* fileName, const char* flagReadAtt=nullptr, const char* section=nullptr, bool verbose=false) ;
0129
0130
0131
0132 bool containsInstance(const RooAbsArg& var) const override {
0133 return find(var) == &var;
0134 }
0135
0136 static void cleanup() ;
0137
0138 bool isInRange(const char* rangeSpec) ;
0139
0140 using RooAbsCollection::selectCommon;
0141 using RooAbsCollection::snapshot;
0142
0143
0144 RooArgSet* selectByAttrib(const char* name, bool value) const {
0145 return static_cast<RooArgSet*>(RooAbsCollection::selectByAttrib(name, value));
0146 }
0147
0148
0149 inline RooArgSet* selectByName(const char* nameList, bool verbose=false) const {
0150 return static_cast<RooArgSet*>(RooAbsCollection::selectByName(nameList, verbose));
0151 }
0152
0153
0154 inline RooArgSet* selectCommon(const RooAbsCollection& refColl) const {
0155 return static_cast<RooArgSet*>(RooAbsCollection::selectCommon(refColl));
0156 }
0157
0158
0159 inline RooArgSet * snapshot(bool deepCopy = true) const {
0160 return static_cast<RooArgSet*>(RooAbsCollection::snapshot(deepCopy));
0161 }
0162
0163 protected:
0164 bool checkForDup(const RooAbsArg& arg, bool silent) const ;
0165 bool canBeAdded(const RooAbsArg& arg, bool silent) const override {
0166 return !checkForDup(arg, silent);
0167 }
0168
0169 private:
0170
0171 template<typename... Args_t>
0172 void processArgs(Args_t &&... args) {
0173
0174 int dummy[] = { 0, (processArg(std::forward<Args_t>(args)), 0) ... };
0175 (void)dummy;
0176 }
0177 void processArg(const RooAbsArg& arg) { add(arg); }
0178 void processArg(const RooAbsArg* arg) { add(*arg); }
0179 void processArg(RooAbsArg* var) { add(*var); }
0180 template<class Arg_t>
0181 void processArg(Arg_t && arg) {
0182 assert_is_no_temporary(std::forward<Arg_t>(arg));
0183 add(arg);
0184 }
0185 void processArg(const char* name) { _name = name; }
0186 void processArg(double value);
0187 void processArg(const RooAbsCollection& coll) { add(coll); if (_name.Length() == 0) _name = coll.GetName(); }
0188
0189
0190 void processArg(RooAbsCollection && coll) { processArg(coll); }
0191 void processArg(const RooArgList& list);
0192
0193 ClassDefOverride(RooArgSet,1)
0194 };
0195
0196
0197 namespace RooFitShortHand {
0198
0199 template<class... Args_t>
0200 RooArgSet S(Args_t&&... args) {
0201 return {std::forward<Args_t>(args)...};
0202 }
0203
0204 }
0205
0206
0207 #endif