Logo ROOT  
Reference Guide
 
Loading...
Searching...
No Matches
RooWorkspace.h
Go to the documentation of this file.
1/*****************************************************************************
2 * Project: RooFit *
3 * Package: RooFitCore *
4 * File: $Id: RooWorkspace.h,v 1.3 2007/07/16 21:04:28 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_WORKSPACE
17#define ROO_WORKSPACE
18
19#include "RooPrintable.h"
20#include "RooArgSet.h"
21#include "RooLinkedList.h"
22#include "RooCmdArg.h"
24#include "TUUID.h"
25#include <map>
26#include <list>
27#include <memory>
28#include <string>
29
30class TClass ;
31class RooAbsPdf ;
32class RooAbsData ;
33class RooRealVar ;
34class RooCategory ;
35class RooAbsReal ;
36class RooAbsCategory ;
37class RooFactoryWSTool ;
38class RooAbsStudy ;
39
40#include "TNamed.h"
41#include "TDirectoryFile.h"
42
43class RooWorkspace : public TNamed {
44public:
45
46 RooWorkspace() ;
47 RooWorkspace(const char* name, bool doCINTExport)
48 R__SUGGEST_ALTERNATIVE("The \"doCINTExprot\" argument has no effect anymore since ROOT 6."
49 "Consider using RooWorkspace(const char* name, const char* title=nullptr).");
50 RooWorkspace(const char* name, const char* title=nullptr) ;
51 RooWorkspace(const RooWorkspace& other) ;
52 ~RooWorkspace() override ;
53
54 TObject *Clone(const char *newname="") const override;
55
56 bool importClassCode(const char* pat="*", bool doReplace=false) ;
57 bool importClassCode(TClass* theClass, bool doReplace=false) ;
58
59 // Import functions for dataset, functions, generic objects
60 bool import(const RooAbsArg& arg,
61 const RooCmdArg& arg1=RooCmdArg(),const RooCmdArg& arg2=RooCmdArg(),const RooCmdArg& arg3=RooCmdArg(),
62 const RooCmdArg& arg4=RooCmdArg(),const RooCmdArg& arg5=RooCmdArg(),const RooCmdArg& arg6=RooCmdArg(),
63 const RooCmdArg& arg7=RooCmdArg(),const RooCmdArg& arg8=RooCmdArg(),const RooCmdArg& arg9=RooCmdArg()) ;
64 bool import(const RooArgSet& args,
65 const RooCmdArg& arg1=RooCmdArg(),const RooCmdArg& arg2=RooCmdArg(),const RooCmdArg& arg3=RooCmdArg(),
66 const RooCmdArg& arg4=RooCmdArg(),const RooCmdArg& arg5=RooCmdArg(),const RooCmdArg& arg6=RooCmdArg(),
67 const RooCmdArg& arg7=RooCmdArg(),const RooCmdArg& arg8=RooCmdArg(),const RooCmdArg& arg9=RooCmdArg()) ;
68 bool import(RooAbsData const& data,
69 const RooCmdArg& arg1=RooCmdArg(),const RooCmdArg& arg2=RooCmdArg(),const RooCmdArg& arg3=RooCmdArg(),
70 const RooCmdArg& arg4=RooCmdArg(),const RooCmdArg& arg5=RooCmdArg(),const RooCmdArg& arg6=RooCmdArg(),
71 const RooCmdArg& arg7=RooCmdArg(),const RooCmdArg& arg8=RooCmdArg(),const RooCmdArg& arg9=RooCmdArg()) ;
72 bool import(const char *fileSpec,
73 const RooCmdArg& arg1=RooCmdArg(),const RooCmdArg& arg2=RooCmdArg(),const RooCmdArg& arg3=RooCmdArg(),
74 const RooCmdArg& arg4=RooCmdArg(),const RooCmdArg& arg5=RooCmdArg(),const RooCmdArg& arg6=RooCmdArg(),
75 const RooCmdArg& arg7=RooCmdArg(),const RooCmdArg& arg8=RooCmdArg(),const RooCmdArg& arg9=RooCmdArg()) ;
76 bool import(TObject const& object, bool replaceExisting=false) ;
77 bool import(TObject const& object, const char* aliasName, bool replaceExisting=false) ;
78
79 // Transaction management interface for multi-step import operations
80 bool startTransaction() ;
81 bool cancelTransaction() ;
82 bool commitTransaction() ;
83
84 // Named set management
85 bool defineSet(const char* name, const RooArgSet& aset, bool importMissing=false) ;
86 bool defineSet(const char* name, const char* contentList) ;
87 bool extendSet(const char* name, const char* newContents) ;
88 bool renameSet(const char* name, const char* newName) ;
89 bool removeSet(const char* name) ;
91 inline const std::map<std::string,RooArgSet>& sets() const { return _namedSets; }
92
93 // Import, load and save parameter value snapshots
94 bool saveSnapshot(RooStringView, const char* paramNames) ;
95 bool saveSnapshot(RooStringView, const RooArgSet& params, bool importValues=false) ;
96 bool loadSnapshot(const char* name) ;
97 const RooArgSet* getSnapshot(const char* name) const ;
98
99 // Retrieve list of parameter snapshots
100 RooLinkedList const& getSnapshots() const { return _snapshots; }
101
102 void merge(const RooWorkspace& /*other*/) {} ;
103
104 // Accessor functions
114 RooArgSet argSet(RooStringView nameList) const ;
116 R__SUGGEST_ALTERNATIVE("Better iterate over RooWorkspace::components() with range-based loop instead of using RooWorkspace::componentIterator().")
117 { return _allOwnedNodes.createIterator() ; }
118 const RooArgSet& components() const { return _allOwnedNodes ; }
120 TObject* obj(RooStringView name) const ;
121
122 // Group accessors
123 RooArgSet allVars() const;
124 RooArgSet allCats() const ;
125 RooArgSet allFunctions() const ;
126 RooArgSet allCatFunctions() const ;
127 RooArgSet allPdfs() const ;
129 std::list<RooAbsData*> allData() const ;
130 std::list<RooAbsData*> allEmbeddedData() const ;
131 std::list<TObject*> allGenericObjects() const ;
132
133 bool makeDir() ;
134 bool cd(const char* path = nullptr) ;
135
136 bool writeToFile(const char* fileName, bool recreate=true) ;
137
138 /// Make internal collection use an unordered_map for
139 /// faster searching. Important when large trees are
140 /// imported / or modified in the workspace.
141 /// Note that RooAbsCollection may eventually switch
142 /// this on by itself.
143 void useFindsWithHashLookup(bool flag) {
145 }
146
147 void RecursiveRemove(TObject *obj) override;
148
149 // Tools management
152
153 // RooStudyManager modules
154 bool addStudy(RooAbsStudy& study) ;
156 void clearStudies() ;
157
158 // Print function
159 void Print(Option_t* opts=nullptr) const override ;
160
161 static void autoImportClassCode(bool flag) ;
162
163 static void addClassDeclImportDir(const char* dir) ;
164 static void addClassImplImportDir(const char* dir) ;
165 static void setClassFileExportDir(const char* dir=nullptr) ;
166
167 const TUUID& uuid() const { return _uuid ; }
168
170
171 class CodeRepo : public TObject {
172 public:
173 CodeRepo(RooWorkspace* wspace=nullptr) : _wspace(wspace), _compiledOK(true) {} ;
174
175 CodeRepo(const CodeRepo& other, RooWorkspace* wspace=nullptr) : TObject(other) ,
176 _wspace(wspace?wspace:other._wspace),
177 _c2fmap(other._c2fmap),
178 _fmap(other._fmap),
179 _ehmap(other._ehmap),
180 _compiledOK(other._compiledOK) {} ;
181
182 ~CodeRepo() override {} ;
183
184 bool autoImportClass(TClass* tc, bool doReplace=false) ;
185 bool compileClasses() ;
186
187 bool compiledOK() const { return _compiledOK ; }
188
189 std::string listOfClassNames() const ;
190
191
192
194 public:
197 } ;
198
200 public:
201 ClassFiles() : _extracted(false) {}
206 } ;
207
208
210 public:
213 } ;
214
215 protected:
216 RooWorkspace* _wspace ; // owning workspace
217 std::map<TString,ClassRelInfo> _c2fmap ; // List of contained classes
218 std::map<TString,ClassFiles> _fmap ; // List of contained files
219 std::map<TString,ExtraHeader> _ehmap ; // List of extra header files
220 bool _compiledOK ; //! Flag indicating that classes compiled OK
221
222 ClassDefOverride(CodeRepo,2) ; // Code repository for RooWorkspace
223 } ;
224
225
226 class WSDir : public TDirectoryFile {
227 public:
228 WSDir(const char* name, const char* title, RooWorkspace* wspace) :
229 TDirectoryFile(name,title,"RooWorkspace::WSDir",nullptr),
230 _wspace(wspace)
231 {
232 }
233
234 ~WSDir() override { Clear("nodelete") ; }
235
236
237 void Add(TObject*,bool) override ;
238 void Append(TObject*,bool) override ;
239
240 protected:
241 friend class RooWorkspace ;
242 void InternalAppend(TObject* obj) ;
243 RooWorkspace* _wspace ; //! do not persist
244
245 ClassDefOverride(WSDir,1) ; // TDirectory representation of RooWorkspace
246 } ;
247
248
249 private:
250 friend class RooAbsArg;
251 friend class RooAbsPdf;
252 friend class RooConstraintSum;
253 bool defineSetInternal(const char *name, const RooArgSet &aset);
254
255 friend class CodeRepo;
256 static std::list<std::string> _classDeclDirList;
257 static std::list<std::string> _classImplDirList;
258 static std::string _classFileExportDir;
259
260 TUUID _uuid; // Unique workspace ID
261
262 static bool _autoClass; // Automatic import of non-distribution class code
263
264 CodeRepo _classes; // Repository of embedded class code. This data member _must_ be first
265
266 RooArgSet _allOwnedNodes; ///< List of owned pdfs and components
267 RooLinkedList _dataList; ///< List of owned datasets
268 RooLinkedList _embeddedDataList; ///< List of owned datasets that are embedded in pdfs
269 RooLinkedList _views; ///< List of model views
270 RooLinkedList _snapshots; ///< List of parameter snapshots
271 RooLinkedList _genObjects; ///< List of generic objects
272 RooLinkedList _studyMods; ///< List if StudyManager modules
273 std::map<std::string, RooArgSet> _namedSets; ///< Map of named RooArgSets
274
275 WSDir *_dir = nullptr; ///<! Transient ROOT directory representation of workspace
276
277 RooExpensiveObjectCache _eocache; ///< Cache for expensive objects
278
279 std::unique_ptr<RooFactoryWSTool> _factory; ///<! Factory tool associated with workspace
280
281 bool _doExport; ///<! Export contents of workspace to CINT?
282 std::string _exportNSName; ///<! Name of CINT namespace to which contents are exported
283
284 bool _openTrans = false; ///<! Is there a transaction open?
285 RooArgSet _sandboxNodes; ///<! Sandbox for incoming objects in a transaction
286
287 ClassDefOverride(RooWorkspace, 8) // Persistable project container for (composite) pdfs, functions, variables and datasets
288} ;
289
290#endif
#define R__SUGGEST_ALTERNATIVE(ALTERNATIVE)
Definition RConfig.hxx:527
const char Option_t
Definition RtypesCore.h:66
#define ClassDefOverride(name, id)
Definition Rtypes.h:341
Option_t Option_t TPoint TPoint const char GetTextMagnitude GetFillStyle GetLineColor GetLineWidth GetMarkerStyle GetTextAlign GetTextColor GetTextSize void data
char name[80]
Definition TGX11.cxx:110
RooAbsArg is the common abstract base class for objects that represent a value and a "shape" in RooFi...
Definition RooAbsArg.h:74
A space to attach TBranches.
void useHashMapForFind(bool flag) const
TIterator * createIterator(bool dir=kIterForward) const
TIterator-style iteration over contained elements.
RooAbsData is the common abstract base class for binned and unbinned datasets.
Definition RooAbsData.h:59
RooAbsReal is the common abstract base class for objects that represent a real value and implements f...
Definition RooAbsReal.h:62
RooAbsStudy is an abstract base class for RooStudyManager modules.
Definition RooAbsStudy.h:33
RooArgSet is a container object that can hold multiple RooAbsArg objects.
Definition RooArgSet.h:55
RooCategory is an object to represent discrete states.
Definition RooCategory.h:28
RooCmdArg is a named container for two doubles, two integers two object points and three string point...
Definition RooCmdArg.h:26
RooConstraintSum calculates the sum of the -(log) likelihoods of a set of RooAbsPfs that represent co...
RooExpensiveObjectCache is a singleton class that serves as repository for objects that are expensive...
RooFactoryWSTool is a class similar to TTree::MakeClass() that generates skeleton code for RooAbsPdf ...
RooLinkedList is an collection class for internal use, storing a collection of RooAbsArg pointers in ...
TIterator * MakeIterator(bool forward=true) const
Create a TIterator for this list.
RooRealVar represents a variable that can be changed from the outside.
Definition RooRealVar.h:40
The RooStringView is a wrapper around a C-syle string that can also be constructed from a std::string...
std::map< TString, ExtraHeader > _ehmap
CodeRepo(const CodeRepo &other, RooWorkspace *wspace=nullptr)
RooWorkspace * _wspace
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
CodeRepo(RooWorkspace *wspace=nullptr)
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...
WSDir(const char *name, const char *title, RooWorkspace *wspace)
RooWorkspace * _wspace
void Append(TObject *, bool) override
Overload TDirectory interface method to prohibit insertion of objects in read-only directory workspac...
The RooWorkspace is a 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 bool _autoClass
std::string _exportNSName
! Name of CINT namespace to which contents are exported
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.
void useFindsWithHashLookup(bool flag)
Make internal collection use an unordered_map for faster searching.
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.
bool _doExport
! Export contents of workspace to CINT?
RooLinkedList _views
List of model views.
bool commitTransaction()
~RooWorkspace() override
Workspace destructor.
const std::map< std::string, RooArgSet > & sets() const
TIterator * studyIterator()
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.
void merge(const RooWorkspace &)
RooArgSet allPdfs() const
Return set with all probability density function objects.
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 const & getSnapshots() const
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)
Inport 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.
CodeRepo _classes
const RooArgSet & components() const
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 work space through a comma separated list of names of objects already in th...
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?
const TUUID & uuid() const
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.
std::list< RooAbsData * > allEmbeddedData() const
Return list of all dataset in the workspace.
TIterator * componentIterator() const
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.
TClass instances represent classes, structs and namespaces in the ROOT type system.
Definition TClass.h:81
A ROOT file is structured in Directories (like a file system).
void Clear(Option_t *option="") override
Delete all objects from a Directory list.
const char * name
Definition TDirectory.h:308
Iterator abstract base class.
Definition TIterator.h:30
The TNamed class is the base class for all named ROOT classes.
Definition TNamed.h:29
Mother of all ROOT objects.
Definition TObject.h:41
Basic string class.
Definition TString.h:139
This class defines a UUID (Universally Unique IDentifier), also known as GUIDs (Globally Unique IDent...
Definition TUUID.h:42
int iterate(rng_state_t *X)
Definition mixmax.icc:34