Logo ROOT   6.30.04
Reference Guide
 All Namespaces Files Pages
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 #include "ROOT/RMakeUnique.hxx"
29 
30 class TClass ;
31 class RooAbsPdf ;
32 class RooAbsData ;
33 class RooRealVar ;
34 class RooCategory ;
35 class RooAbsReal ;
36 class RooAbsCategory ;
37 class RooFactoryWSTool ;
38 class RooAbsStudy ;
39 
40 #include "TNamed.h"
41 #include "TDirectoryFile.h"
42 
43 class RooWorkspace : public TNamed {
44 public:
45 
46  RooWorkspace() ;
47  RooWorkspace(const char* name, Bool_t doCINTExport) ;
48  RooWorkspace(const char* name, const char* title=0) ;
49  RooWorkspace(const RooWorkspace& other) ;
50  ~RooWorkspace() ;
51 
52  void exportToCint(const char* namespaceName=0) ;
53 
54  Bool_t importClassCode(const char* pat="*", Bool_t doReplace=kFALSE) ;
55  Bool_t importClassCode(TClass* theClass, Bool_t doReplace=kFALSE) ;
56 
57  // Import functions for dataset, functions, generic objects
58  Bool_t import(const RooAbsArg& arg,
59  const RooCmdArg& arg1=RooCmdArg(),const RooCmdArg& arg2=RooCmdArg(),const RooCmdArg& arg3=RooCmdArg(),
60  const RooCmdArg& arg4=RooCmdArg(),const RooCmdArg& arg5=RooCmdArg(),const RooCmdArg& arg6=RooCmdArg(),
61  const RooCmdArg& arg7=RooCmdArg(),const RooCmdArg& arg8=RooCmdArg(),const RooCmdArg& arg9=RooCmdArg()) ;
62  Bool_t import(const RooArgSet& args,
63  const RooCmdArg& arg1=RooCmdArg(),const RooCmdArg& arg2=RooCmdArg(),const RooCmdArg& arg3=RooCmdArg(),
64  const RooCmdArg& arg4=RooCmdArg(),const RooCmdArg& arg5=RooCmdArg(),const RooCmdArg& arg6=RooCmdArg(),
65  const RooCmdArg& arg7=RooCmdArg(),const RooCmdArg& arg8=RooCmdArg(),const RooCmdArg& arg9=RooCmdArg()) ;
66  Bool_t import(RooAbsData& data,
67  const RooCmdArg& arg1=RooCmdArg(),const RooCmdArg& arg2=RooCmdArg(),const RooCmdArg& arg3=RooCmdArg(),
68  const RooCmdArg& arg4=RooCmdArg(),const RooCmdArg& arg5=RooCmdArg(),const RooCmdArg& arg6=RooCmdArg(),
69  const RooCmdArg& arg7=RooCmdArg(),const RooCmdArg& arg8=RooCmdArg(),const RooCmdArg& arg9=RooCmdArg()) ;
70  Bool_t import(const char *fileSpec,
71  const RooCmdArg& arg1=RooCmdArg(),const RooCmdArg& arg2=RooCmdArg(),const RooCmdArg& arg3=RooCmdArg(),
72  const RooCmdArg& arg4=RooCmdArg(),const RooCmdArg& arg5=RooCmdArg(),const RooCmdArg& arg6=RooCmdArg(),
73  const RooCmdArg& arg7=RooCmdArg(),const RooCmdArg& arg8=RooCmdArg(),const RooCmdArg& arg9=RooCmdArg()) ;
74  Bool_t import(TObject& object, Bool_t replaceExisting=kFALSE) ;
75  Bool_t import(TObject& object, const char* aliasName, Bool_t replaceExisting=kFALSE) ;
76 
77  // Transaction management interface for multi-step import operations
78  Bool_t startTransaction() ;
79  Bool_t cancelTransaction() ;
80  Bool_t commitTransaction() ;
81 
82  // Named set management
83  Bool_t defineSet(const char* name, const RooArgSet& aset, Bool_t importMissing=kFALSE) ;
84  Bool_t defineSet(const char* name, const char* contentList) ;
85  Bool_t extendSet(const char* name, const char* newContents) ;
86  Bool_t renameSet(const char* name, const char* newName) ;
87  Bool_t removeSet(const char* name) ;
88  const RooArgSet* set(const char* name) ;
89 
90  // Import, load and save parameter value snapshots
91  Bool_t saveSnapshot(const char* name, const char* paramNames) ;
92  Bool_t saveSnapshot(const char* name, const RooArgSet& params, Bool_t importValues=kFALSE) ;
93  Bool_t loadSnapshot(const char* name) ;
94  const RooArgSet* getSnapshot(const char* name) const ;
95 
96  void merge(const RooWorkspace& /*other*/) {} ;
97 
98  // Join p.d.f.s and datasets for simultaneous analysis
99  // RooAbsPdf* joinPdf(const char* jointPdfName, const char* indexName, const char* inputMapping) ;
100  // RooAbsData* joinData(const char* jointDataName, const char* indexName, const char* inputMapping) ;
101 
102  // Accessor functions
103  RooAbsPdf* pdf(const char* name) const ;
104  RooAbsReal* function(const char* name) const ;
105  RooRealVar* var(const char* name) const ;
106  RooCategory* cat(const char* name) const ;
107  RooAbsCategory* catfunc(const char* name) const ;
108  RooAbsData* data(const char* name) const ;
109  RooAbsData* embeddedData(const char* name) const ;
110  RooAbsArg* arg(const char* name) const ;
111  RooAbsArg* fundArg(const char* name) const ;
112  RooArgSet argSet(const char* nameList) const ;
113  TIterator* componentIterator() const { return _allOwnedNodes.createIterator() ; }
114  const RooArgSet& components() const { return _allOwnedNodes ; }
115  TObject* genobj(const char* name) const ;
116  TObject* obj(const char* name) const ;
117 
118  // Group accessors
119  RooArgSet allVars() const;
120  RooArgSet allCats() const ;
121  RooArgSet allFunctions() const ;
122  RooArgSet allCatFunctions() const ;
123  RooArgSet allPdfs() const ;
124  RooArgSet allResolutionModels() const ;
125  std::list<RooAbsData*> allData() const ;
126  std::list<RooAbsData*> allEmbeddedData() const ;
127  std::list<TObject*> allGenericObjects() const ;
128 
129  Bool_t makeDir() ;
130  Bool_t cd(const char* path = 0) ;
131 
132  Bool_t writeToFile(const char* fileName, Bool_t recreate=kTRUE) ;
133 
134  virtual void RecursiveRemove(TObject *obj);
135 
136  // Tools management
137  RooFactoryWSTool& factory() ;
138  RooAbsArg* factory(const char* expr) ;
139 
140  // RooStudyManager modules
141  Bool_t addStudy(RooAbsStudy& study) ;
142  TIterator* studyIterator() { return _studyMods.MakeIterator() ; }
143  void clearStudies() ;
144 
145  // Print function
146  void Print(Option_t* opts=0) const ;
147 
148  static void autoImportClassCode(Bool_t flag) ;
149 
150  static void addClassDeclImportDir(const char* dir) ;
151  static void addClassImplImportDir(const char* dir) ;
152  static void setClassFileExportDir(const char* dir=0) ;
153 
154  const TUUID& uuid() const { return _uuid ; }
155 
156  RooExpensiveObjectCache& expensiveObjectCache() { return _eocache ; }
157 
158  class CodeRepo : public TObject {
159  public:
160  CodeRepo(RooWorkspace* wspace=0) : _wspace(wspace), _compiledOK(kTRUE) {} ;
161 
162  CodeRepo(const CodeRepo& other, RooWorkspace* wspace=0) : TObject(other) ,
163  _wspace(wspace?wspace:other._wspace),
164  _c2fmap(other._c2fmap),
165  _fmap(other._fmap),
166  _ehmap(other._ehmap),
167  _compiledOK(other._compiledOK) {} ;
168 
169  virtual ~CodeRepo() {} ;
170 
171  Bool_t autoImportClass(TClass* tc, Bool_t doReplace=kFALSE) ;
172  Bool_t compileClasses() ;
173 
174  Bool_t compiledOK() const { return _compiledOK ; }
175 
176  std::string listOfClassNames() const ;
177 
178 
179 
180  class ClassRelInfo {
181  public:
182  TString _baseName;
183  TString _fileBase ;
184  } ;
185 
186  class ClassFiles {
187  public:
188  ClassFiles() : _extracted(kFALSE) {}
189  TString _hext ;
190  TString _hfile ;
191  TString _cxxfile ;
192  Bool_t _extracted ;
193  } ;
194 
195 
196  class ExtraHeader {
197  public:
198  TString _hname ;
199  TString _hfile ;
200  } ;
201 
202  protected:
203  RooWorkspace* _wspace ; // owning workspace
204  std::map<TString,ClassRelInfo> _c2fmap ; // List of contained classes
205  std::map<TString,ClassFiles> _fmap ; // List of contained files
206  std::map<TString,ExtraHeader> _ehmap ; // List of extra header files
207  Bool_t _compiledOK ; //! Flag indicating that classes compiled OK
208 
209  ClassDef(CodeRepo,2) ; // Code repository for RooWorkspace
210  } ;
211 
212 
213  class WSDir : public TDirectoryFile {
214  public:
215  WSDir(const char* name, const char* title, RooWorkspace* wspace) :
216  TDirectoryFile(name,title,"RooWorkspace::WSDir",0),
217  _wspace(wspace)
218  {
219  }
220 
221  virtual ~WSDir() { Clear("nodelete") ; } ;
222 
223 
224  virtual void Add(TObject*,Bool_t) ;
225  virtual void Append(TObject*,Bool_t) ;
226 
227  protected:
228  friend class RooWorkspace ;
229  void InternalAppend(TObject* obj) ;
230  RooWorkspace* _wspace ; //! do not persist
231 
232  ClassDef(WSDir,1) ; // TDirectory representation of RooWorkspace
233  } ;
234 
235 
236  private:
237  friend class RooAbsArg;
238  friend class RooAbsPdf;
239  Bool_t defineSetInternal(const char *name, const RooArgSet &aset);
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  std::unique_ptr<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 #endif