001 #ifndef HEPFILEMANAGER_H
002 #define HEPFILEMANAGER_H
003
004
005
006
007
008
009
010
011
012
013
014
015
016
017
018
019
020
021
022
023
024
025
026
027
028
029
030
031
032
033
034
035
036
037
038
039
040
041
042
043
044
045
046
047
048
049 #ifndef ZMENVIRONMENT_H
050 #include "ZMutility/ZMenvironment.h"
051 #endif
052
053 #include <string>
054 #include <utility>
055
056 #include <vector>
057
058 #include "HepTuple/Exceptions.h"
059 #include "HepTuple/hepTupleFileType.h"
060
061 ZM_USING_NAMESPACE( zmex )
062
063 ZM_BEGIN_NAMESPACE( zmht )
064
065 class HepHist;
066 class HepHist1D;
067 class HepHist2D;
068 class HepHistProf;
069 class HepHist1DArray;
070 class HepHist2DArray;
071 class HepHistProfArray;
072 class HepNtuple;
073 class HepDir;
074 class HepObj;
075 class HepID;
076
077 class HepHistCombiner;
078 class GatherProxy;
079 class HepFileSwitch;
080
081 class HepFileManager {
082
083 friend class HepObj;
084 friend class HepHist;
085 friend class HepHist1D;
086 friend class HepHist2D;
087 friend class HepHistProf;
088 friend class HepHist1DArray;
089 friend class HepHist2DArray;
090 friend class HepHistProfArray;
091 friend class HepNtuple;
092 friend class HepDir;
093
094 public:
095
096
097 static const std::string absStart;
098 static const std::string dirSep;
099
100
101 HepFileManager(
102 const std::string& fileName
103 , const std::string& rootDirName
104 );
105
106
107
108
109
110
111
112
113
114 typedef enum mode_ { HEP_READONLY=1, HEP_UPDATE=2, HEP_REFRESH=4,
115 HEP_REMOVE=8, HEP_RENAME=16 } mode;
116
117 virtual ~HepFileManager();
118
119
120 bool forReadOnly();
121 bool forUpdate();
122
123
124 inline std::string fileName() const;
125 inline std::string rootDir() const;
126 std::string pwd() const;
127 inline bool isReadOnly() const;
128 virtual HepTupleFileFormat hepFileFormat() const = 0;
129
130
131 virtual void cd( const std::string & path = "" );
132
133 virtual void mkdir( const std::string & path );
134
135 virtual std::string ls(const std::string & path = "",
136 const std::string & opts = "" ) const;
137
138 class Item {
139 public:
140 HepFileManager * mgr;
141 std::string title;
142 int id;
143 std::string dir;
144 char type;
145 Item(const HepObj&);
146 Item();
147 };
148 friend class HepFileManager::Item;
149 typedef std::vector<Item> ItemList;
150 virtual ItemList list( const std::string & path = "",
151 const std::string & opts = "" ) const;
152
153 virtual void rm( int hid = 0 );
154 virtual void rm( const std::string & title );
155
156 virtual void rmdir( const std::string & path, bool recursive = false );
157
158
159
160 static HepObj * deadHepObj();
161
162 virtual HepHist1D & hist1D(
163 const std::string& title,
164 const int nBins, const float low, const float high,
165 const int hid = 0
166 );
167 virtual HepHist1DArray& hist1DArray(
168 const int size,
169 const std::string& title_prefix,
170 const int nBins, const float low, const float high,
171 const int hid = 0
172 );
173 virtual HepHist2D & hist2D(
174 const std::string& title,
175 const int nBinsX, const float lowX, const float highX,
176 const int nBinsY, const float lowY, const float highY,
177 const int hid = 0
178 );
179 virtual HepHist2DArray& hist2DArray(
180 const int size,
181 const std::string& title_prefix,
182 const int nBinsX, const float lowX, const float highX,
183 const int nBinsY, const float lowY, const float highY,
184 const int hid = 0
185 );
186 virtual HepHistProf & histProf(
187 const std::string& title,
188 const int nBinsX, const float lowX, const float highX,
189 const float lowY, const float highY,
190 const std::string& chopt,
191 const int hid = 0
192 );
193 virtual HepHistProf & histProf(
194 const std::string& title,
195 const int nBinsX, const float lowX, const float highX,
196 const float lowY, const float highY,
197 const int hid = 0
198 );
199 virtual HepHistProfArray & histProfArray(
200 const int size,
201 const std::string& title_prefix,
202 const int nBinsX, const float lowX, const float highX,
203 const float lowY, const float highY,
204 const std::string& chopt,
205 const int hid = 0
206 );
207 virtual HepHistProfArray & histProfArray(
208 const int size,
209 const std::string& title_prefix,
210 const int nBinsX, const float lowX, const float highX,
211 const float lowY, const float highY,
212 const int hid = 0
213 );
214 virtual HepNtuple & ntuple(
215 const std::string& title,
216 const int hid = 0
217 );
218
219
220
221 HepObj * retrieveHepObj(
222 const std::string& title
223 , const int hid
224 , const char objType
225 ) const;
226
227 HepObj * retrieveHepObj(
228 const std::string& title
229 , const int hid
230 , const char objType
231 , const std::string& path
232 ) const;
233
234 virtual HepHist1D & retrieveHist1D(
235 const std::string& title,
236 const int hid = 0
237 );
238 virtual HepHist2D & retrieveHist2D(
239 const std::string& title,
240 const int hid = 0
241 );
242 virtual HepHistProf & retrieveHistProf(
243 const std::string& title,
244 const int hid = 0
245 );
246 virtual HepHist1DArray & retrieveHist1DArray(
247 const int size,
248 const std::string& title,
249 const int hid = 0
250 );
251 virtual HepHist2DArray & retrieveHist2DArray(
252 const int size,
253 const std::string& title,
254 const int hid = 0
255 );
256 virtual HepHistProfArray & retrieveHistProfArray(
257 const int size,
258 const std::string& title,
259 const int hid = 0
260 );
261 virtual HepNtuple & retrieveNtuple(
262 const std::string& title,
263 const int hid = 0
264 );
265
266
267 virtual void release( HepObj & me );
268
269
270
271 virtual int write() = 0;
272
273
274 virtual void writeDirectory() = 0;
275
276
277 virtual void dumpAllData();
278 virtual void clearAllData();
279
280
281
282
283
284
285 virtual HepObj& makeClone( const HepObj& original, const std::string& new_title, int new_id = 0 );
286 virtual HepObj& makeEmpty( const HepObj& original, const std::string& new_title, int new_id = 0 );
287
288
289
290
291 virtual bool copyClone( HepFileManager* original, const std::string& options = "" );
292 virtual bool copyClone( HepFileManager* original, const std::string& path,
293 const std::string& options);
294 virtual bool copyEmpty( HepFileManager* original, const std::string& options = "" );
295 virtual bool copyEmpty( HepFileManager* original, const std::string& path,
296 const std::string& options);
297
298
299 HepFileManager & combine( HepFileManager* sourceManager );
300
301
302
303
304 HepFileManager & combine( HepFileManager* sourceManager,
305 HepHistCombiner & usercomb );
306
307
308 HepFileManager & operator+= ( HepFileManager& b );
309
310
311
312 virtual bool switchFile( const std::string& newFileName,
313 const bool resetHists );
314
315
316
317 virtual bool switchFile( const std::string& newFileName,
318 const bool resetHists,
319 HepFileSwitch& userHandler );
320
321 #ifdef BABAR
322
323
324
325
326
327 HepHist1D* newHist1D (
328 const char title[],
329 const int nBins, const float low, const float high,
330 const int hid = 0
331 );
332 HepHist2D* newHist2D(
333 const char title[],
334 const int nBinsX, const float lowX, const float highX,
335 const int nBinsY, const float lowY, const float highY,
336 const int hid = 0
337 );
338 HepHistProf* newHistProf(
339 const char title[],
340 const int nBinsX, const float lowX, const float highX,
341 const float lowY, const float highY,
342 const char chopt[],
343 const int hid = 0
344 );
345 HepHistProf* newHistProf(
346 const char title[],
347 const int nBinsX, const float lowX, const float highX,
348 const float lowY, const float highY,
349 const int hid = 0
350 );
351 HepNtuple* newNtuple(
352 const char title[],
353 const int hid = 0
354 );
355
356 #endif
357
358 protected:
359
360 typedef enum filemode_ { HEP_ABSENT, HEP_NONE,
361 HEP_READ, HEP_WRITE, HEP_ALL } filemode;
362 static filemode checkFile ( const std::string & filename );
363
364
365 virtual bool checkTitle( const std::string& title) const;
366
367
368
369 bool setReadOnly ( bool );
370
371
372 int GetHighestId(const std::string& path = "") const;
373
374
375
376 HepDir* mkdir_( const std::string & path );
377
378
379 HepDir* getdir(const std::string& path) const;
380
381 HepObj * retrieveHepObj(
382 const std::string& title
383 , const int hid
384 , const char objType
385 , const HepDir* dir
386 ) const;
387
388
389
390 void list_(const HepDir&,HepFileManager::ItemList&,const std::string& opts) const;
391
392
393
394 virtual bool copyClone_( const HepDir& original, const std::string& options );
395 virtual bool copyEmpty_( const HepDir& original, const std::string& options );
396
397
398 HepID nextID( const int req = 0 );
399
400 virtual HepID nextID( const std::string& s = "", const int req = 0 );
401
402
403 virtual void writeOne( HepObj * thisObj );
404
405 typedef std::vector<HepObj *> HepObjList;
406 HepObjList objList_;
407 HepObjList deadObjList_;
408
409
410
411
412
413
414 HepObjList::const_iterator findObj( const std::string & title ) const;
415 HepObjList::const_iterator findObj( const int id ) const;
416 void signIn( HepObj * thisObj );
417
418 void isInUse( HepObj * h, const bool isIt );
419 void isDirty( HepObj * h, const bool isIt );
420 void isCreated( HepObj * h, const bool isIt );
421
422
423 virtual HepNtuple& deadNtuple() const;
424 virtual HepHist1D& deadHist1D() const;
425 virtual HepHist2D& deadHist2D() const;
426 virtual HepHistProf& deadHistProf() const;
427
428 static HepHist1DArray& deadHist1DArray();
429 static HepHist2DArray& deadHist2DArray();
430 static HepHistProfArray& deadHistProfArray();
431
432 static void copyToItem(const HepObj&,Item&);
433
434
435
436
437
438
439 typedef std::vector<std::string> svector;
440
441 void reconcileDirs( HepFileManager* sourceManager,
442 GatherProxy& satchel );
443
444 void gatherHists( HepFileManager* sourceManager,
445 GatherProxy& satchel );
446
447 void scanTree( HepFileManager* Manager, svector& Dirs, svector& Keys );
448
449 private:
450
451 std::string fileName_;
452 const std::string rootDir_;
453 HepDir* topDir_;
454 HepDir* cwd_;
455 int lastID_;
456 bool isReadOnly_;
457
458
459
460 HepFileManager( const HepFileManager & );
461 HepFileManager & operator=( const HepFileManager & );
462
463 };
464
465
466 typedef HepFileManager HepTupleManager;
467
468
469 ZM_END_NAMESPACE( zmht )
470
471
472 #include "HepFileManager.icc"
473
474
475 #endif
476
Send problems or questions to cdfcode@fnal.gov