Logo ROOT  
Reference Guide
 
Loading...
Searching...
No Matches
RooArgSet.h
Go to the documentation of this file.
1/*****************************************************************************
2 * Project: RooFit *
3 * Package: RooFitCore *
4 * File: $Id: RooArgSet.h,v 1.45 2007/08/09 19:55:47 wouter Exp $
5 * Authors: *
6 * WV, Wouter Verkerke, UC Santa Barbara, verkerke@slac.stanford.edu *
7 * DK, David Kirkby, UC Irvine, dkirkby@uci.edu *
8 * *
9 * Copyright (c) 2000-2005, Regents of the University of California *
10 * and Stanford University. All rights reserved. *
11 * *
12 * Redistribution and use in source and binary forms, *
13 * with or without modification, are permitted according to the terms *
14 * listed in LICENSE (http://roofit.sourceforge.net/license.txt) *
15 *****************************************************************************/
16#ifndef ROO_ARG_SET
17#define ROO_ARG_SET
18
19#include "RooAbsCollection.h"
20#include "RooAbsArg.h"
21
22class RooArgList ;
23
24
25#define USEMEMPOOLFORARGSET
26template <class RooSet_t, size_t>
28
30public:
31
32#ifdef USEMEMPOOLFORARGSET
33 void* operator new (size_t bytes);
34 void* operator new (size_t bytes, void* ptr) noexcept;
35 void operator delete (void *ptr);
36#endif
37
38 // Constructors, assignment etc.
39 RooArgSet();
40
41 /// Construct a (non-owning) RooArgSet from one or more
42 /// RooFit objects. The set will not own its contents.
43 /// \tparam Ts Parameter pack of objects that derive from RooAbsArg or RooFit collections; or a name.
44 /// \param arg A RooFit object.
45 /// \param moreArgsOrName Arbitrary number of
46 /// - Further RooFit objects that derive from RooAbsArg
47 /// - RooFit collections of such objects
48 /// - A name for the set. Given multiple names, the last-given name prevails.
49 template<typename... Ts>
50 RooArgSet(const RooAbsArg& arg, const Ts&... moreArgsOrName) {
51 add(arg);
52 // Expand parameter pack in C++ 11 way:
53 int dummy[] = { 0, (processArg(moreArgsOrName), 0) ... };
54 (void)dummy;
55 };
56
57 /// Construct from iterators.
58 /// \tparam Iterator_t An iterator pointing to RooFit objects or references thereof.
59 /// \param beginIt Iterator to first element to add.
60 /// \param end Iterator to end of range to be added.
61 /// \param name Optional name of the collection.
62 template<typename Iterator_t,
63 typename value_type = typename std::iterator_traits<Iterator_t>::value_type,
64 typename = std::enable_if<std::is_convertible<const value_type*, const RooAbsArg*>::value> >
65 RooArgSet(Iterator_t beginIt, Iterator_t endIt, const char* name="") :
67 for (auto it = beginIt; it != endIt; ++it) {
68 add(*it);
69 }
70 }
71
72 RooArgSet(const RooArgSet& other, const char *name="");
73
74 RooArgSet(const RooArgSet& set1, const RooArgSet& set2,
75 const char *name="");
76
77 RooArgSet(const RooArgList& list) ;
78 RooArgSet(const RooAbsCollection& collection, const RooAbsArg* var1);
79 explicit RooArgSet(const TCollection& tcoll, const char* name="") ;
80 explicit RooArgSet(const char *name);
81
82 ~RooArgSet() override;
83 TObject* clone(const char* newname) const override { return new RooArgSet(*this,newname); }
84 TObject* create(const char* newname) const override { return new RooArgSet(newname); }
85 RooArgSet& operator=(const RooArgSet& other) { RooAbsCollection::operator=(other) ; return *this ;}
86
88 Bool_t add(const RooAbsArg& var, Bool_t silent=kFALSE) override;
89
91 Bool_t addOwned(RooAbsArg& var, Bool_t silent=kFALSE) override;
92
94 RooAbsArg *addClone(const RooAbsArg& var, Bool_t silent=kFALSE) override;
95
96 using RooAbsCollection::operator[];
97 RooAbsArg& operator[](const TString& str) const;
98
99
100 /// Shortcut for readFromStream(std::istream&, Bool_t, const char*, const char*, Bool_t), setting
101 /// `flagReadAtt` and `section` to 0.
102 virtual Bool_t readFromStream(std::istream& is, Bool_t compact, Bool_t verbose=kFALSE) {
103 // I/O streaming interface (machine readable)
104 return readFromStream(is, compact, 0, 0, verbose) ;
105 }
106 Bool_t readFromStream(std::istream& is, Bool_t compact, const char* flagReadAtt, const char* section, Bool_t verbose=kFALSE) ;
107 virtual void writeToStream(std::ostream& os, Bool_t compact, const char* section=0) const;
108 void writeToFile(const char* fileName) const ;
109 Bool_t readFromFile(const char* fileName, const char* flagReadAtt=0, const char* section=0, Bool_t verbose=kFALSE) ;
110
111
112
113 static void cleanup() ;
114
115 Bool_t isInRange(const char* rangeSpec) ;
116
117 /// Use RooAbsCollection::snapshot(), but return as RooArgSet.
118 RooArgSet * snapshot(bool deepCopy = true) const {
119 return static_cast<RooArgSet*>(RooAbsCollection::snapshot(deepCopy));
120 }
121
122 /// \copydoc RooAbsCollection::snapshot()
124 return RooAbsCollection::snapshot(output, deepCopy);
125 }
126
127protected:
128 Bool_t checkForDup(const RooAbsArg& arg, Bool_t silent) const ;
129
130private:
131 void processArg(const RooAbsArg& var) { add(var); }
132 void processArg(const RooArgSet& set) { add(set); if (_name.Length() == 0) _name = set.GetName(); }
133 void processArg(const RooArgList& list);
134 void processArg(const char* name) { _name = name; }
135
136#ifdef USEMEMPOOLFORARGSET
137private:
138 typedef MemPoolForRooSets<RooArgSet, 10*600> MemPool; //600 = about 100 kb
139 //Initialise a static mem pool. It has to happen inside a function to solve the
140 //static initialisation order fiasco. At the end of the program, this might have
141 //to leak depending if RooArgSets are still alive. This depends on the order of destructions.
142 static MemPool* memPool();
143#endif
144
145 ClassDefOverride(RooArgSet,1) // Set of RooAbsArg objects
146};
147
148#endif
const Bool_t kFALSE
Definition RtypesCore.h:92
const Bool_t kTRUE
Definition RtypesCore.h:91
#define ClassDefOverride(name, id)
Definition Rtypes.h:329
char name[80]
Definition TGX11.cxx:110
typedef void((*Func_t)())
Memory pool for RooArgSet and RooDataSet.
RooAbsArg is the common abstract base class for objects that represent a value and a "shape" in RooFi...
Definition RooAbsArg.h:72
RooAbsCollection is an abstract container object that can hold multiple RooAbsArg objects.
RooAbsCollection * snapshot(Bool_t deepCopy=kTRUE) const
Take a snap shot of current collection contents.
virtual Bool_t addOwned(RooAbsArg &var, Bool_t silent=kFALSE)
Add the specified argument to list.
virtual RooAbsArg * addClone(const RooAbsArg &var, Bool_t silent=kFALSE)
Add a clone of the specified argument to list.
virtual Bool_t add(const RooAbsArg &var, Bool_t silent=kFALSE)
Add the specified argument to list.
const char * GetName() const
Returns name of object.
RooAbsCollection & operator=(const RooAbsCollection &other)
The assignment operator sets the value of any argument in our set that also appears in the other set.
RooArgList is a container object that can hold multiple RooAbsArg objects.
Definition RooArgList.h:21
RooArgSet is a container object that can hold multiple RooAbsArg objects.
Definition RooArgSet.h:29
RooArgSet(const RooAbsArg &arg, const Ts &... moreArgsOrName)
Construct a (non-owning) RooArgSet from one or more RooFit objects.
Definition RooArgSet.h:50
TObject * clone(const char *newname) const override
Definition RooArgSet.h:83
RooArgSet & operator=(const RooArgSet &other)
Definition RooArgSet.h:85
RooArgSet * snapshot(bool deepCopy=true) const
Use RooAbsCollection::snapshot(), but return as RooArgSet.
Definition RooArgSet.h:118
RooArgSet()
Default constructor.
~RooArgSet() override
Destructor.
Bool_t snapshot(RooAbsCollection &output, Bool_t deepCopy=kTRUE) const
Take a snap shot of current collection contents.
Definition RooArgSet.h:123
virtual Bool_t readFromStream(std::istream &is, Bool_t compact, Bool_t verbose=kFALSE)
Shortcut for readFromStream(std::istream&, Bool_t, const char*, const char*, Bool_t),...
Definition RooArgSet.h:102
Bool_t readFromFile(const char *fileName, const char *flagReadAtt=0, const char *section=0, Bool_t verbose=kFALSE)
Read contents of the argset from specified file.
Bool_t isInRange(const char *rangeSpec)
void processArg(const char *name)
Definition RooArgSet.h:134
Bool_t add(const RooAbsArg &var, Bool_t silent=kFALSE) override
Add element to non-owning set.
void writeToFile(const char *fileName) const
Write contents of the argset to specified file.
TObject * create(const char *newname) const override
Definition RooArgSet.h:84
static MemPool * memPool()
virtual void writeToStream(std::ostream &os, Bool_t compact, const char *section=0) const
Write the contents of the argset in ASCII form to given stream.
MemPoolForRooSets< RooArgSet, 10 *600 > MemPool
Definition RooArgSet.h:138
void processArg(const RooArgSet &set)
Definition RooArgSet.h:132
void processArg(const RooAbsArg &var)
Definition RooArgSet.h:131
RooAbsArg * addClone(const RooAbsArg &var, Bool_t silent=kFALSE) override
Add clone of specified element to an owning set.
static void cleanup()
Definition RooArgSet.cxx:73
Bool_t checkForDup(const RooAbsArg &arg, Bool_t silent) const
Check if element with var's name is already in set.
RooArgSet(Iterator_t beginIt, Iterator_t endIt, const char *name="")
Construct from iterators.
Definition RooArgSet.h:65
RooAbsArg & operator[](const TString &str) const
Get reference to an element using its name.
Bool_t addOwned(RooAbsArg &var, Bool_t silent=kFALSE) override
Add element to an owning set.
Collection abstract base class.
Definition TCollection.h:63
Mother of all ROOT objects.
Definition TObject.h:37
Basic string class.
Definition TString.h:136
Ssiz_t Length() const
Definition TString.h:410
static void output(int code)
Definition gifencode.c:226