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

Last change on this file since 9492 was 9410, checked in by tbretz, 16 years ago
*** empty log message ***
File size: 4.5 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 TObjArray fCopies; // Branches and tree to copy
81
82 TString fSplitRule; // file splitting allowed if rule existing (done in ReInit)
83
84 enum {
85 kIsNotOwner = BIT(14), // MWriteRootFile is not owner of fOut
86 kFillTree = BIT(14),
87 kForced = BIT(14), // Used for flag in fCopies
88 // Be carefull these bits are already in use!
89 // TBranch::kAutoDelete = BIT(15)
90 // TBranchElement::kDeleteObject = BIT(16)
91 // TTree::kFriendLock = BIT(17)
92 kIsNewTree = BIT(23)
93 };
94
95 // File handling
96 void Close();
97 Bool_t ChangeFile(const char *fname);
98 TFile *OpenFile(const char *name, Option_t *option, const char *title, Int_t comp);
99 void CopyTree(TTree &t) const;
100 Bool_t MakeCopies(const char *oldname) const;
101
102 // MWrite
103 Bool_t CheckAndWrite();
104 Bool_t IsFileOpen() const;
105 Bool_t GetContainer(MParList *pList);
106 const char *GetFileName() const;
107
108 // MTask
109 Bool_t ReInit(MParList *pList);
110 void StreamPrimitive(ostream &out) const;
111
112 // Constructor
113 void Init(const char *name=0, const char *title=0);
114
115public:
116 MWriteRootFile();
117 MWriteRootFile(const Int_t comp,
118 const char *rule,
119 const Option_t *opt="RECREATE",
120 const char *ftitle="Untitled",
121 const char *name=NULL,
122 const char *title=NULL);
123 MWriteRootFile(const char *fname,
124 const Option_t *opt="RECREATE",
125 const char *ftitle="Untitled",
126 const Int_t comp=2,
127 const char *name=NULL,
128 const char *title=NULL);
129 ~MWriteRootFile();
130
131 void AddContainer(const char *cname, const char *tname=NULL, Bool_t must=kTRUE);
132 void AddContainer(MParContainer *cont, const char *tname=NULL, Bool_t must=kTRUE);
133 void AddCopySource(const char *tname, const char *bname=NULL, Bool_t force=kTRUE);
134 void AddCopySource(const char *tname, Bool_t force)
135 {
136 AddCopySource(tname, NULL, force);
137 }
138
139 void AddTree(const char *name, Bool_t force=kTRUE)
140 {
141 AddContainer(Form("MReport%s", name), name, force);
142 AddContainer(Form("MTime%s", name), name, force);
143 }
144
145 void Print(Option_t *t=NULL) const;
146
147 Bool_t cd(const char *path=0);
148
149 void RecursiveRemove(TObject *obj);
150
151 static TString SubstituteName(const char *regexp, TString fname);
152
153 ClassDef(MWriteRootFile, 1) // Task to write data into a root file
154};
155
156#endif
Note: See TracBrowser for help on using the repository browser.