Logo ROOT   6.08/07
Reference Guide
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"
23 #include "RooExpensiveObjectCache.h"
24 #include "TUUID.h"
25 #include <map>
26 #include <list>
27 #include <string>
28 
29 class TClass ;
30 class RooAbsPdf ;
31 class RooAbsData ;
32 class RooRealVar ;
33 class RooCategory ;
34 class RooAbsReal ;
35 class RooAbsCategory ;
36 class RooFactoryWSTool ;
37 class RooAbsStudy ;
38 
39 #include "TNamed.h"
40 #include "TDirectoryFile.h"
41 
42 class RooWorkspace : public TNamed {
43 public:
44 
45  RooWorkspace() ;
46  RooWorkspace(const char* name, Bool_t doCINTExport) ;
47  RooWorkspace(const char* name, const char* title=0) ;
48  RooWorkspace(const RooWorkspace& other) ;
49  ~RooWorkspace() ;
50 
51  void exportToCint(const char* namespaceName=0) ;
52 
53  Bool_t importClassCode(const char* pat="*", Bool_t doReplace=kFALSE) ;
54  Bool_t importClassCode(TClass* theClass, Bool_t doReplace=kFALSE) ;
55 
56  // Import functions for dataset, functions, generic objects
57  Bool_t import(const RooAbsArg& arg,
58  const RooCmdArg& arg1=RooCmdArg(),const RooCmdArg& arg2=RooCmdArg(),const RooCmdArg& arg3=RooCmdArg(),
59  const RooCmdArg& arg4=RooCmdArg(),const RooCmdArg& arg5=RooCmdArg(),const RooCmdArg& arg6=RooCmdArg(),
60  const RooCmdArg& arg7=RooCmdArg(),const RooCmdArg& arg8=RooCmdArg(),const RooCmdArg& arg9=RooCmdArg()) ;
61  Bool_t import(const RooArgSet& args,
62  const RooCmdArg& arg1=RooCmdArg(),const RooCmdArg& arg2=RooCmdArg(),const RooCmdArg& arg3=RooCmdArg(),
63  const RooCmdArg& arg4=RooCmdArg(),const RooCmdArg& arg5=RooCmdArg(),const RooCmdArg& arg6=RooCmdArg(),
64  const RooCmdArg& arg7=RooCmdArg(),const RooCmdArg& arg8=RooCmdArg(),const RooCmdArg& arg9=RooCmdArg()) ;
65  Bool_t import(RooAbsData& data,
66  const RooCmdArg& arg1=RooCmdArg(),const RooCmdArg& arg2=RooCmdArg(),const RooCmdArg& arg3=RooCmdArg(),
67  const RooCmdArg& arg4=RooCmdArg(),const RooCmdArg& arg5=RooCmdArg(),const RooCmdArg& arg6=RooCmdArg(),
68  const RooCmdArg& arg7=RooCmdArg(),const RooCmdArg& arg8=RooCmdArg(),const RooCmdArg& arg9=RooCmdArg()) ;
69  Bool_t import(const char *fileSpec,
70  const RooCmdArg& arg1=RooCmdArg(),const RooCmdArg& arg2=RooCmdArg(),const RooCmdArg& arg3=RooCmdArg(),
71  const RooCmdArg& arg4=RooCmdArg(),const RooCmdArg& arg5=RooCmdArg(),const RooCmdArg& arg6=RooCmdArg(),
72  const RooCmdArg& arg7=RooCmdArg(),const RooCmdArg& arg8=RooCmdArg(),const RooCmdArg& arg9=RooCmdArg()) ;
73  Bool_t import(TObject& object, Bool_t replaceExisting=kFALSE) ;
74  Bool_t import(TObject& object, const char* aliasName, Bool_t replaceExisting=kFALSE) ;
75 
76  // Transaction management interface for multi-step import operations
80 
81  // Named set management
82  Bool_t defineSet(const char* name, const RooArgSet& aset, Bool_t importMissing=kFALSE) ;
83  Bool_t defineSet(const char* name, const char* contentList) ;
84  Bool_t extendSet(const char* name, const char* newContents) ;
85  Bool_t renameSet(const char* name, const char* newName) ;
86  Bool_t removeSet(const char* name) ;
87  const RooArgSet* set(const char* name) ;
88 
89  // Import, load and save parameter value snapshots
90  Bool_t saveSnapshot(const char* name, const char* paramNames) ;
91  Bool_t saveSnapshot(const char* name, const RooArgSet& params, Bool_t importValues=kFALSE) ;
92  Bool_t loadSnapshot(const char* name) ;
93  const RooArgSet* getSnapshot(const char* name) const ;
94 
95  void merge(const RooWorkspace& /*other*/) {} ;
96 
97  // Join p.d.f.s and datasets for simultaneous analysis
98  // RooAbsPdf* joinPdf(const char* jointPdfName, const char* indexName, const char* inputMapping) ;
99  // RooAbsData* joinData(const char* jointDataName, const char* indexName, const char* inputMapping) ;
100 
101  // Accessor functions
102  RooAbsPdf* pdf(const char* name) const ;
103  RooAbsReal* function(const char* name) const ;
104  RooRealVar* var(const char* name) const ;
105  RooCategory* cat(const char* name) const ;
106  RooAbsCategory* catfunc(const char* name) const ;
107  RooAbsData* data(const char* name) const ;
108  RooAbsData* embeddedData(const char* name) const ;
109  RooAbsArg* arg(const char* name) const ;
110  RooAbsArg* fundArg(const char* name) const ;
111  RooArgSet argSet(const char* nameList) const ;
113  const RooArgSet& components() const { return _allOwnedNodes ; }
114  TObject* genobj(const char* name) const ;
115  TObject* obj(const char* name) const ;
116 
117  // Group accessors
118  RooArgSet allVars() const;
119  RooArgSet allCats() const ;
120  RooArgSet allFunctions() const ;
121  RooArgSet allCatFunctions() const ;
122  RooArgSet allPdfs() const ;
124  std::list<RooAbsData*> allData() const ;
125  std::list<RooAbsData*> allEmbeddedData() const ;
126  std::list<TObject*> allGenericObjects() const ;
127 
128  Bool_t makeDir() ;
129  Bool_t cd(const char* path = 0) ;
130 
131  Bool_t writeToFile(const char* fileName, Bool_t recreate=kTRUE) ;
132 
133 
134  // Tools management
136  RooAbsArg* factory(const char* expr) ;
137 
138  // RooStudyManager modules
139  Bool_t addStudy(RooAbsStudy& study) ;
141  void clearStudies() ;
142 
143  // Print function
144  void Print(Option_t* opts=0) const ;
145 
146  static void autoImportClassCode(Bool_t flag) ;
147 
148  static void addClassDeclImportDir(const char* dir) ;
149  static void addClassImplImportDir(const char* dir) ;
150  static void setClassFileExportDir(const char* dir=0) ;
151 
152  const TUUID& uuid() const { return _uuid ; }
153 
155 
156  class CodeRepo : public TObject {
157  public:
158  CodeRepo(RooWorkspace* wspace=0) : _wspace(wspace), _compiledOK(kTRUE) {} ;
159 
160  CodeRepo(const CodeRepo& other, RooWorkspace* wspace=0) : TObject(other) ,
161  _wspace(wspace?wspace:other._wspace),
162  _c2fmap(other._c2fmap),
163  _fmap(other._fmap),
164  _ehmap(other._ehmap),
165  _compiledOK(other._compiledOK) {} ;
166 
167  virtual ~CodeRepo() {} ;
168 
169  Bool_t autoImportClass(TClass* tc, Bool_t doReplace=kFALSE) ;
171 
172  Bool_t compiledOK() const { return _compiledOK ; }
173 
174  std::string listOfClassNames() const ;
175 
176 
177 
178  class ClassRelInfo {
179  public:
182  } ;
183 
184  class ClassFiles {
185  public:
186  ClassFiles() : _extracted(kFALSE) {}
191  } ;
192 
193 
194  class ExtraHeader {
195  public:
198  } ;
199 
200  protected:
201  RooWorkspace* _wspace ; // owning workspace
202  std::map<TString,ClassRelInfo> _c2fmap ; // List of contained classes
203  std::map<TString,ClassFiles> _fmap ; // List of contained files
204  std::map<TString,ExtraHeader> _ehmap ; // List of extra header files
205  Bool_t _compiledOK ; //! Flag indicating that classes compiled OK
206 
207  ClassDef(CodeRepo,2) ; // Code repository for RooWorkspace
208  } ;
209 
210 
211  class WSDir : public TDirectoryFile {
212  public:
213  WSDir(const char* name, const char* title, RooWorkspace* wspace) :
214  TDirectoryFile(name,title,"RooWorkspace::WSDir",0),
215  _wspace(wspace)
216  {
217  }
218 
219  virtual ~WSDir() { Clear("nodelete") ; } ;
220 
221 
222 #if ROOT_VERSION_CODE <= 332546
223  virtual void Add(TObject*) ;
224  virtual void Append(TObject*) ;
225 #else
226  virtual void Add(TObject*,Bool_t) ;
227  virtual void Append(TObject*,Bool_t) ;
228 #endif
229 
230  protected:
231  friend class RooWorkspace ;
232  void InternalAppend(TObject* obj) ;
233  RooWorkspace* _wspace ; //! do not persist
234 
235  ClassDef(WSDir,1) ; // TDirectory representation of RooWorkspace
236  } ;
237 
238 
239  private:
240 
241  Bool_t isValidCPPID(const char* name) ;
242  void exportObj(TObject* obj) ;
243  void unExport() ;
244 
245  friend class CodeRepo ;
246  static std::list<std::string> _classDeclDirList ;
247  static std::list<std::string> _classImplDirList ;
248  static std::string _classFileExportDir ;
249 
250  TUUID _uuid ; // Unique workspace ID
251 
252  static Bool_t _autoClass ; // Automatic import of non-distribution class code
253 
254  CodeRepo _classes ; // Repository of embedded class code. This data member _must_ be first
255 
256  RooArgSet _allOwnedNodes ; // List of owned pdfs and components
257  RooLinkedList _dataList ; // List of owned datasets
258  RooLinkedList _embeddedDataList ; // List of owned datasets that are embedded in pdfs
259  RooLinkedList _views ; // List of model views
260  RooLinkedList _snapshots ; // List of parameter snapshots
261  RooLinkedList _genObjects ; // List of generic objects
262  RooLinkedList _studyMods ; // List if StudyManager modules
263  std::map<std::string,RooArgSet> _namedSets ; // Map of named RooArgSets
264 
265  WSDir* _dir ; //! Transient ROOT directory representation of workspace
266 
267  RooExpensiveObjectCache _eocache ; // Cache for expensive objects
268 
269  RooFactoryWSTool* _factory ; //! Factory tool associated with workspace
270 
271  Bool_t _doExport ; //! Export contents of workspace to CINT?
272  std::string _exportNSName ; //! Name of CINT namespace to which contents are exported
273 
274  Bool_t _openTrans ; //! Is there a transaction open?
275  RooArgSet _sandboxNodes ; //! Sandbox for incoming objects in a transaction
276 
277  ClassDef(RooWorkspace,8) // Persistable project container for (composite) pdfs, functions, variables and datasets
278 
279 } ;
280 
281 #endif
virtual void Clear(Option_t *="")
Definition: TObject.h:89
std::map< TString, ExtraHeader > _ehmap
Definition: RooWorkspace.h:204
void merge(const RooWorkspace &)
Definition: RooWorkspace.h:95
Bool_t saveSnapshot(const char *name, const char *paramNames)
Save snapshot of values and attributes (including "Constant") of parameters &#39;params&#39; If importValues ...
TIterator * createIterator(Bool_t dir=kIterForward) const
RooArgSet allCatFunctions() const
Return set with all category function objects.
static Bool_t _autoClass
Definition: RooWorkspace.h:252
RooExpensiveObjectCache _eocache
Transient ROOT directory representation of workspace.
Definition: RooWorkspace.h:267
void exportToCint(const char *namespaceName=0)
Activate export of workspace symbols to CINT in a namespace with given name.
std::list< RooAbsData * > allEmbeddedData() const
Return list of all dataset in the workspace.
RooLinkedList _dataList
Definition: RooWorkspace.h:257
RooAbsCategory * catfunc(const char *name) const
Retrieve discrete function (RooAbsCategory) with given name. A null pointer is returned if not found...
const char Option_t
Definition: RtypesCore.h:62
static std::list< std::string > _classDeclDirList
Definition: RooWorkspace.h:246
RooExpensiveObjectCache is a singleton class that serves as repository for objects that are expensive...
RooLinkedList _embeddedDataList
Definition: RooWorkspace.h:258
Bool_t cancelTransaction()
Cancel an ongoing import transaction.
RooFactoryWSTool is a clase like TTree::MakeClass() that generates skeleton code for RooAbsPdf and Ro...
~RooWorkspace()
Workspace destructor.
RooFactoryWSTool * _factory
Definition: RooWorkspace.h:269
TIterator * componentIterator() const
Definition: RooWorkspace.h:112
RooAbsData * embeddedData(const char *name) const
Retrieve dataset (binned or unbinned) with given name. A null pointer is returned if not found...
Basic string class.
Definition: TString.h:137
bool Bool_t
Definition: RtypesCore.h:59
const Bool_t kFALSE
Definition: Rtypes.h:92
RooAbsArg * fundArg(const char *name) const
Return fundamental (i.e.
RooArgSet _allOwnedNodes
Definition: RooWorkspace.h:256
static void addClassImplImportDir(const char *dir)
Add &#39;dir&#39; to search path for class implementation (.cxx) files, when attempting to import class code ...
TObject * genobj(const char *name) const
Return generic object with given name.
static std::list< std::string > _classImplDirList
Definition: RooWorkspace.h:247
RooAbsArg * arg(const char *name) const
Return RooAbsArg with given name. A null pointer is returned if none is found.
Bool_t compileClasses()
For all classes in the workspace for which no class definition is found in the ROOT class table extra...
static void autoImportClassCode(Bool_t flag)
If flag is true, source code of classes not the the ROOT distribution is automatically imported if on...
RooWorkspace * _wspace
Definition: RooWorkspace.h:201
RooLinkedList _genObjects
Definition: RooWorkspace.h:261
Bool_t cd(const char *path=0)
RooArgSet argSet(const char *nameList) const
Return set of RooAbsArgs matching to given list of names.
Iterator abstract base class.
Definition: TIterator.h:32
Bool_t importClassCode(const char *pat="*", Bool_t doReplace=kFALSE)
Inport code of all classes in the workspace that have a class name that matches pattern &#39;pat&#39; and whi...
This class defines a UUID (Universally Unique IDentifier), also known as GUIDs (Globally Unique IDent...
Definition: TUUID.h:44
#define ClassDef(name, id)
Definition: Rtypes.h:254
Bool_t startTransaction()
Open an import transaction operations.
WSDir(const char *name, const char *title, RooWorkspace *wspace)
Definition: RooWorkspace.h:213
void unExport()
Delete exported reference in CINT namespace.
RooArgSet allFunctions() const
Return set with all function objects.
The TNamed class is the base class for all named ROOT classes.
Definition: TNamed.h:33
Bool_t 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...
void Add(THist< DIMENSIONS, PRECISION_TO, STAT_TO... > &to, THist< DIMENSIONS, PRECISION_FROM, STAT_FROM... > &from)
Add two histograms.
Definition: THist.hxx:327
CodeRepo(RooWorkspace *wspace=0)
Definition: RooWorkspace.h:158
TIterator * studyIterator()
Definition: RooWorkspace.h:140
RooWorkspace()
Default constructor.
RooCategory * cat(const char *name) const
Retrieve discrete variable (RooCategory) with given name. A null pointer is returned if not found...
const RooArgSet * getSnapshot(const char *name) const
Return the RooArgSet containgin a snapshot of variables contained in the workspace.
RooLinkedList _studyMods
Definition: RooWorkspace.h:262
std::list< RooAbsData * > allData() const
Return list of all dataset in the workspace.
RooRealVar represents a fundamental (non-derived) real valued object.
Definition: RooRealVar.h:37
const TUUID & uuid() const
Definition: RooWorkspace.h:152
RooAbsStudy is an abstract base class for RooStudyManager modules.
Definition: RooAbsStudy.h:33
RooAbsData * data(const char *name) const
Retrieve dataset (binned or unbinned) with given name. A null pointer is returned if not found...
std::map< TString, ClassFiles > _fmap
Definition: RooWorkspace.h:203
Bool_t autoImportClass(TClass *tc, Bool_t doReplace=kFALSE)
Import code of class &#39;tc&#39; into the repository.
Bool_t renameSet(const char *name, const char *newName)
Rename set to a new name.
RooLinkedList _views
Definition: RooWorkspace.h:259
A ROOT file is structured in Directories (like a file system).
Bool_t defineSet(const char *name, const RooArgSet &aset, Bool_t importMissing=kFALSE)
Define a named RooArgSet with given constituents.
WSDir * _dir
Definition: RooWorkspace.h:265
RooArgSet _sandboxNodes
Is there a transaction open?
Definition: RooWorkspace.h:275
CodeRepo _classes
Definition: RooWorkspace.h:254
Bool_t writeToFile(const char *fileName, Bool_t recreate=kTRUE)
Save this current workspace into given file.
The ROOT global object gROOT contains a list of all defined classes.
Definition: TClass.h:81
RooAbsData is the common abstract base class for binned and unbinned datasets.
Definition: RooAbsData.h:37
Bool_t loadSnapshot(const char *name)
Load the values and attributes of the parameters in the snapshot saved with the given name...
RooArgSet allVars() const
Return set with all variable objects.
RooCategory represents a fundamental (non-derived) discrete value object.
Definition: RooCategory.h:25
const RooArgSet & components() const
Definition: RooWorkspace.h:113
Bool_t _openTrans
Name of CINT namespace to which contents are exported.
Definition: RooWorkspace.h:274
std::list< TObject * > allGenericObjects() const
Return list of all generic objects in the workspace.
TObject * obj(const char *name) const
Return any type of object (RooAbsArg, RooAbsData or generic object) with given name) ...
std::map< std::string, RooArgSet > _namedSets
Definition: RooWorkspace.h:263
Bool_t isValidCPPID(const char *name)
Return true if given name is a valid C++ identifier name.
RooLinkedList is an collection class for internal use, storing a collection of RooAbsArg pointers in ...
Definition: RooLinkedList.h:35
static void addClassDeclImportDir(const char *dir)
Add &#39;dir&#39; to search path for class declaration (header) files, when attempting to import class code w...
std::string _exportNSName
Export contents of workspace to CINT?
Definition: RooWorkspace.h:272
RooAbsPdf * pdf(const char *name) const
Retrieve p.d.f (RooAbsPdf) with given name. A null pointer is returned if not found.
RooAbsReal is the common abstract base class for objects that represent a real value and implements f...
Definition: RooAbsReal.h:53
Bool_t removeSet(const char *name)
Remove a named set from the workspace.
Bool_t _doExport
Factory tool associated with workspace.
Definition: RooWorkspace.h:271
RooArgSet allResolutionModels() const
Return set with all resolution model objects.
RooRealVar * var(const char *name) const
Retrieve real-valued variable (RooRealVar) with given name. A null pointer is returned if not found...
std::map< TString, ClassRelInfo > _c2fmap
Definition: RooWorkspace.h:202
Mother of all ROOT objects.
Definition: TObject.h:37
RooFactoryWSTool & factory()
Return instance to factory tool.
Bool_t commitTransaction()
std::string listOfClassNames() const
Return STL string with last of class names contained in the code repository.
static void setClassFileExportDir(const char *dir=0)
Specify the name of the directory in which embedded source code is unpacked and compiled.
RooAbsPdf is the abstract interface for all probability density functions The class provides hybrid a...
Definition: RooAbsPdf.h:41
void clearStudies()
Remove all RooStudyManager modules.
TIterator * MakeIterator(Bool_t dir=kTRUE) const
Return an iterator over this list.
RooExpensiveObjectCache & expensiveObjectCache()
Definition: RooWorkspace.h:154
RooAbsCategory is the common abstract base class for objects that represent a discrete value with a f...
RooWorkspace * _wspace
Definition: RooWorkspace.h:233
RooAbsArg is the common abstract base class for objects that represent a value (of arbitrary type) an...
Definition: RooAbsArg.h:66
const Bool_t kTRUE
Definition: Rtypes.h:91
void Print(Option_t *opts=0) const
Print contents of the workspace.
RooArgSet allCats() const
Return set with all category objects.
Bool_t addStudy(RooAbsStudy &study)
Insert RooStudyManager module.
CodeRepo(const CodeRepo &other, RooWorkspace *wspace=0)
Definition: RooWorkspace.h:160
static std::string _classFileExportDir
Definition: RooWorkspace.h:248
char name[80]
Definition: TGX11.cxx:109
Bool_t compiledOK() const
Definition: RooWorkspace.h:172
RooLinkedList _snapshots
Definition: RooWorkspace.h:260
The RooWorkspace is a persistable container for RooFit projects.
Definition: RooWorkspace.h:42
RooArgSet allPdfs() const
Return set with all probability density function objects.
RooCmdArg is a named container for two doubles, two integers two object points and three string point...
Definition: RooCmdArg.h:27
Bool_t makeDir()
Create transient TDirectory representation of this workspace.
void exportObj(TObject *obj)
Export reference to given workspace object to CINT.