source: trunk/MagicSoft/Mars/mfileio/MWriteRootFile.h@ 6439

Last change on this file since 6439 was 6373, checked in by tbretz, 20 years ago
*** empty log message ***
File size: 3.8 KB
Line 
1#ifndef MARS_MWriteRootFile
2#define MARS_MWriteRootFile
3
4#ifndef MARS_MWriteFile
5#include "MWriteFile.h"
6#endif
7#ifndef ROOT_TObjArray
8#include <TObjArray.h>
9#endif
10#ifndef ROOT_TArrayL
11#include <TArrayL.h>
12#endif
13
14class TFile;
15class TTree;
16class TBranch;
17
18class MRootFileBranch : public TNamed
19{
20private:
21 TTree *fTree; //!
22 TBranch *fBranch; //!
23
24 MParContainer *fContainer;
25
26 Bool_t fMust;
27
28 void Init(const char *name, Bool_t must)
29 {
30 SetName(name?name:"");
31 fMust = must;
32 }
33
34public:
35 MRootFileBranch() : fTree(NULL), fBranch(NULL), fContainer(NULL), fMust(0)
36 {
37 Init(NULL, kFALSE);
38 fTitle = "";
39 }
40
41 MRootFileBranch(const char *cname, const char *tname=NULL, Bool_t must=kFALSE)
42 : fTree(NULL), fBranch(NULL), fContainer(NULL), fMust(0)
43 {
44 Init(tname, must);
45 fTitle = cname;
46 }
47
48 MRootFileBranch(MParContainer *cont, const char *tname=NULL, Bool_t must=kFALSE)
49 : fTree(NULL), fBranch(NULL), fMust(0)
50 {
51 Init(tname, must);
52 fTitle = "";
53 fContainer = cont;
54 }
55
56 TTree *GetTree() const { return fTree; }
57 MParContainer *GetContainer() const { return fContainer; }
58 void *GetAddress() { return &fContainer; }
59 TBranch *GetBranch() const { return fBranch; }
60 const char *GetContName() const { return fTitle; }
61 Bool_t MustHave() const { return fMust; }
62
63 void SetContainer(MParContainer *cont) { fContainer = cont; }
64 void SetTree(TTree *tree) { fTree = tree; }
65 void SetBranch(TBranch *branch) { fBranch = branch; }
66
67 ClassDef(MRootFileBranch, 1) // Storage container for MWriteRootFile to store TBranch informations
68};
69
70class MWriteRootFile : public MWriteFile
71{
72private:
73 static const TString gsDefName;
74 static const TString gsDefTitle;
75
76 TFile *fOut; // Current file
77
78 TObjArray fBranches; // List of Branch setup (MRootFileBranch)
79 TObjArray fTrees; //! List of trees
80
81 TString fSplitRule; // file splitting allowed if rule existing (done in ReInit)
82
83 enum {
84 kIsNotOwner = BIT(14), // MWriteRootFile is not owner of fOut
85 kFillTree = BIT(14),
86 // Be carefull these bits are already in use!
87 // TBranch::kAutoDelete = BIT(15)
88 // TBranchElement::kDeleteObject = BIT(16)
89 kIsNewTree = BIT(17)
90 };
91
92 // File handling
93 void Close();
94 TString GetNewFileName(const char *fname) const;
95 Bool_t ChangeFile(const char *fname);
96
97 // MWrite
98 Bool_t CheckAndWrite();
99 Bool_t IsFileOpen() const;
100 Bool_t GetContainer(MParList *pList);
101 const char *GetFileName() const;
102
103 // MTask
104 Bool_t ReInit(MParList *pList);
105 void StreamPrimitive(ofstream &out) const;
106
107 // Constructor
108 void Init(const char *name=0, const char *title=0);
109
110public:
111 MWriteRootFile();
112 MWriteRootFile(const Int_t comp,
113 const char *rule,
114 const Bool_t overwrite=kTRUE,
115 const char *ftitle="Untitled",
116 const char *name=NULL,
117 const char *title=NULL);
118 MWriteRootFile(const char *fname,
119 const Option_t *opt="RECREATE",
120 const char *ftitle="Untitled",
121 const Int_t comp=2,
122 const char *name=NULL,
123 const char *title=NULL);
124 ~MWriteRootFile();
125
126 void AddContainer(const char *cname, const char *tname=NULL, Bool_t must=kTRUE);
127 void AddContainer(MParContainer *cont, const char *tname=NULL, Bool_t must=kTRUE);
128
129 void Print(Option_t *t=NULL) const;
130
131 Bool_t cd(const char *path=0);
132
133 void RecursiveRemove(TObject *obj);
134
135 ClassDef(MWriteRootFile, 1) // Task to write data into a root file
136};
137
138#endif
Note: See TracBrowser for help on using the repository browser.