ViewVC Help
View File | Revision Log | Show Annotations | Root Listing
root/cvsroot/UserCode/MitAna/DataUtil/interface/TreeWriter.h
Revision: 1.11
Committed: Mon Oct 6 16:53:25 2008 UTC (16 years, 7 months ago) by loizides
Content type: text/plain
Branch: MAIN
CVS Tags: Mit_006, Mit_005
Changes since 1.10: +27 -20 lines
Log Message:
Add do BranchRef and GetTree

File Contents

# Content
1 //--------------------------------------------------------------------------------------------------
2 // $Id: TreeWriter.h,v 1.10 2008/09/10 03:33:27 loizides Exp $
3 //
4 // TreeWriter
5 //
6 // Class implementing a tree writing infrastructure. The class creates and maintaines
7 // a standard tree with name "tname" as given in the constructor. The tree is stored in
8 // a file or in multiple files if needed, where the file path name and maximum size can be
9 // specified. Using TreeWriter::AddBranch allows to add various branches to the tree.
10 // The user has to make sure that (s)he calls TreeWriter::BeginEvent and
11 // TreeWriter::EndEvent for every event before and after filling of the branch
12 // structures. Note that in addition to the standard tree one can create new
13 // tree(s) in the same file using the TreeWriter::AddBranchToTree member functions.
14 //
15 // Authors: C.Loizides
16 //--------------------------------------------------------------------------------------------------
17
18 #ifndef MITANA_DATAUTIL_TREEWRITER_H
19 #define MITANA_DATAUTIL_TREEWRITER_H
20
21 #include <TNamed.h>
22 #include <TString.h>
23 #include <TFile.h>
24 #include <TTree.h>
25 #include <TObjArray.h>
26
27 namespace mithep
28 {
29 class MyTree : public TTree
30 {
31 public:
32 MyTree(const char* name, const char* title, Int_t splitlevel = 99) :
33 TTree(name,title, splitlevel), fAutoFill(1), fBrRef(0) {}
34 Bool_t GetAutoFill() const { return fAutoFill; }
35 void SetAutoFill(Bool_t b) { fAutoFill = b; }
36
37 protected:
38 Bool_t fAutoFill; //!=true then fill automatically in TreeWriter (def=1)
39 Bool_t fBrRef; //!=true then call BranchRef in TreeWriter (def=0)
40 };
41
42 class TreeWriter : public TNamed
43 {
44 public:
45 TreeWriter(const char *tname="MitTree", Bool_t doreset = kFALSE);
46 ~TreeWriter();
47
48 void AddBranch(const char *name, const char *cname,
49 void *obj, Int_t bsize, Int_t level);
50 void AddBranch(const char *name, void *obj, Int_t bsize, Int_t level);
51 void AddBranch(const char *name, const char *cname,
52 void *obj, Int_t bsize);
53 void AddBranch(const char *name, void *obj, Int_t bsize);
54 void AddBranch(const char *name, const char *cname,
55 void *obj);
56 void AddBranch(const char *name, void *obj);
57 void AddBranchToTree(const char *tname, const char *name, const char *cname,
58 void *obj, Int_t bsize, Int_t level);
59 void AddBranchToTree(const char *tname, const char *name, void *obj,
60 Int_t bsize, Int_t level);
61 void AddBranchToTree(const char *tname, const char *name, const char *cname,
62 void *obj, Int_t bsize);
63 void AddBranchToTree(const char *tname, const char *name, void *obj,
64 Int_t bsize);
65 void AddBranchToTree(const char *tname, const char *name, const char *cname,
66 void *obj);
67 void AddBranchToTree(const char *tname, const char *name, void *obj);
68 Bool_t BeginEvent(Bool_t doreset=kFALSE);
69 Bool_t EndEvent(Bool_t doreset=kFALSE);
70 const char *GetBaseURL() const
71 { return fBaseURL.IsNull() ? "." : fBaseURL; }
72 Int_t GetCompressLevel() const { return fCompressLevel; }
73 Bool_t GetDoObjNumReset() const { return fDoObjNumReset; }
74 Bool_t GetDoBranchRef() const { return fDoBranchRef; }
75 Long64_t GetEntries(const char *tn=0) const;
76 Long64_t GetFileSize() const {
77 return fFile != 0 ? fFile->GetEND() : 0; }
78 const TFile *GetFile() const { return fFile; }
79 const char *GetFileName() const {
80 return Form("%s_%03d.root", GetPrefix(), GetFileNumber()); }
81 UShort_t GetFileNumber() const { return fFileNumber; }
82 const char *GetFullName() const {
83 return Form("%s/%s", GetBaseURL(), GetFileName()); }
84 const char *GetPrefix() const { return fPrefix; }
85 const TTree *GetTree(const char *tn=0) const;
86 TTree *GetTree(const char *tn=0);
87 void Print(Option_t *option="") const;
88 void SetAutoFill(const char *tn, Bool_t b);
89 void SetBaseURL(const char *b) { fBaseURL = b; }
90 void SetCompressLevel(Int_t l) { fCompressLevel = l; }
91 void SetDefaultBrSize(Int_t s) { fDefBrSize=s; }
92 void SetDefaultSL(Int_t s) { fDefSL=s;}
93 void SetDoObjNumReset(Bool_t b) { fDoObjNumReset = b; }
94 void SetDoBranchRef(Bool_t b) { fDoBranchRef = b; }
95 void SetMaxSize(Long64_t s);
96 void SetPrefix(const char *p) { fPrefix = p; }
97 void StoreObject(const TObject *obj);
98
99 protected:
100 TString fBaseURL; //base url for tree storage
101 TString fPrefix; //prefix of file name
102 UShort_t fFileNumber; //current sequence number
103 Int_t fCompressLevel; //compression level used for TFile
104 Int_t fDefBrSize; //default buffer size for branches
105 Int_t fDefSL; //default split level for branches
106 Long64_t fMaxSize; //maximum file size for a file [Bytes]
107 const Long64_t fkMinFreeSpace; //minimum free space required for closing file
108 const Long64_t fkMinAvgSize; //minimum average entry size
109 Long64_t fEvtObjNum; //event object number offset (for TRef)
110 Bool_t fIsInit; //true if OpenFile() was called
111 Bool_t fDoObjNumReset; //true if obj. number resets automatically (def=0)
112 Bool_t fDoBranchRef; //true if BranchRef is called automatically (def=0)
113 TFile *fFile; //file being written
114 TObjArray fTrees; //array of tree(s) being filled
115
116 mithep::MyTree *AddOrGetMyTree(const char *tn);
117 mithep::MyTree *GetMyTree(const char *tn);
118 Bool_t IsInit() const { return fIsInit; }
119 Bool_t IsFull() const;
120 void OpenFile();
121 void CloseFile();
122
123 private:
124 const char *CName(void *obj) const;
125
126 ClassDef(TreeWriter,0) // Tree writer class
127 };
128 }
129 #endif