ViewVC Help
View File | Revision Log | Show Annotations | Root Listing
root/cvsroot/UserCode/MitAna/DataUtil/src/TreeWriter.cc
(Generate patch)

Comparing UserCode/MitAna/DataUtil/src/TreeWriter.cc (file contents):
Revision 1.2 by loizides, Mon Jun 2 08:58:52 2008 UTC vs.
Revision 1.5 by loizides, Tue Jun 17 08:22:41 2008 UTC

# Line 7 | Line 7
7   #include <TSystem.h>
8   #include <TProcessID.h>
9  
10 + #include "MitAna/DataUtil/interface/Debug.h"
11 +
12   using namespace mithep;
13  
14   ClassImp(mithep::TreeWriter)
15  
16   //__________________________________________________________________________________________________
17 < TreeWriter::TreeWriter(const char *tname, Bool_t doreset)
18 <  : TNamed(tname,Form("%s written by mithep::TreeWriter", tname)),
19 <    fBaseURL("."),
20 <    fPrefix("mithep"),
21 <    fFileNumber(0),
22 <    fCompressLevel(9),
23 <    fDefBrSize(64*1024),
24 <    fDefSL(99),
25 <    fMaxSize((Long64_t)(0.99 * TTree::GetMaxTreeSize())),
26 <    fkMinFreeSpace(1024*1024),
27 <    fkMinAvgSize(10*1024),
28 <    fEvtObjNum(-1),
29 <    fIsInit(kFALSE),
30 <    fDoObjNumReset(doreset),
31 <    fFile(0),
32 <    fTrees(0)
17 > TreeWriter::TreeWriter(const char *tname, Bool_t doreset) :
18 >  TNamed(tname,Form("%s written by mithep::TreeWriter", tname)),
19 >  fBaseURL("."),
20 >  fPrefix("mithep"),
21 >  fFileNumber(0),
22 >  fCompressLevel(9),
23 >  fDefBrSize(64*1024),
24 >  fDefSL(99),
25 >  fMaxSize((Long64_t)(0.99 * TTree::GetMaxTreeSize())),
26 >  fkMinFreeSpace(1024*1024),
27 >  fkMinAvgSize(10*1024),
28 >  fEvtObjNum(-1),
29 >  fIsInit(kFALSE),
30 >  fDoObjNumReset(doreset),
31 >  fFile(0),
32 >  fTrees(0)
33   {
34    // Constructor.
35  
# Line 58 | Line 60 | void TreeWriter::AddBranch(const char *n
60    t->Bronch(name, cname, obj, bsize, level);
61   }
62  
63 +
64 + //__________________________________________________________________________________________________
65 + void TreeWriter::AddBranch(const char *name, void *obj, Int_t bsize, Int_t level)
66 + {
67 +  // Add branch with name "name" into tree with name "tname" and set its address
68 +  // to object pointer using a given buffer size and splitlevel.
69 +
70 +  AddBranch(name, CName(obj), obj, bsize, level);
71 + }
72 +
73   //__________________________________________________________________________________________________
74   void TreeWriter::AddBranch(const char *name, const char *cname,
75                             void *obj, Int_t bsize)
# Line 70 | Line 82 | void TreeWriter::AddBranch(const char *n
82   }
83  
84   //__________________________________________________________________________________________________
85 + void TreeWriter::AddBranch(const char *name, void *obj, Int_t bsize)
86 + {
87 +  // Add branch with name "name" into tree with name "tname" and set its address
88 +  // to object pointer using a given buffer size and default splitlevel.
89 +
90 +  AddBranch(name, CName(obj), obj, bsize);
91 + }
92 +
93 + //__________________________________________________________________________________________________
94   void TreeWriter::AddBranch(const char *name, const char *cname,
95                             void *obj)
96   {
97    // Add branch with name "name" into tree with name "tname" and set its address
98 <  // to object pointer for class name "cname" using a given buffer size and default splitlevel.
98 >  // to object pointer for class name "cname" using a default buffer size and splitlevel.
99  
100    MyTree *t = AddOrGetMyTree(GetName());
101    t->Bronch(name, cname, obj, fDefBrSize, fDefSL);
102   }
103  
104   //__________________________________________________________________________________________________
105 + void TreeWriter::AddBranch(const char *name, void *obj)
106 + {
107 +  // Add branch with name "name" into tree with name "tname" and set its address
108 +  // to object pointer using a default buffer size and splitlevel.
109 +
110 +  AddBranch(name, CName(obj), obj);
111 + }
112 +
113 + //__________________________________________________________________________________________________
114   void TreeWriter::AddBranchToTree(const char *tname, const char *name, const char *cname,
115                                   void *obj, Int_t bsize, Int_t level)
116   {
# Line 92 | Line 122 | void TreeWriter::AddBranchToTree(const c
122   }
123  
124   //__________________________________________________________________________________________________
125 + void TreeWriter::AddBranchToTree(const char *tname, const char *name, void *obj,
126 +                                 Int_t bsize, Int_t level)
127 + {
128 +  // Add branch with name "name" into tree with name "tname" and set its address
129 +  // to object pointer using a given buffer size and splitlevel.
130 +
131 +  AddBranchToTree(tname, name, CName(obj), obj, bsize, level);
132 + }
133 +
134 + //__________________________________________________________________________________________________
135   void TreeWriter::AddBranchToTree(const char *tname, const char *name, const char *cname,
136 <                           void *obj, Int_t bsize)
136 >                                 void *obj, Int_t bsize)
137   {
138    // Add branch with name "name" into tree with name "tname" and set its address
139    // to object pointer for class name "cname" using a given buffer size and default splitlevel.
# Line 103 | Line 143 | void TreeWriter::AddBranchToTree(const c
143   }
144  
145   //__________________________________________________________________________________________________
146 + void TreeWriter::AddBranchToTree(const char *tname, const char *name, void *obj,
147 +                                 Int_t bsize)
148 + {
149 +  // Add branch with name "name" into tree with name "tname" and set its address
150 +  // to object pointer using a given buffer size and default splitlevel.
151 +
152 +  AddBranchToTree(tname, name, CName(obj), obj, bsize);
153 + }
154 +
155 + //__________________________________________________________________________________________________
156   void TreeWriter::AddBranchToTree(const char *tname, const char *name, const char *cname,
157 <                           void *obj)
157 >                                 void *obj)
158   {
159    // Add branch with name "name" into tree with name "tname" and set its address
160 <  // to object pointer for class name "cname" using a given buffer size and default splitlevel.
160 >  // to object pointer for class name "cname" using a default buffer size and splitlevel.
161  
162    MyTree *t = AddOrGetMyTree(tname);
163    t->Bronch(name, cname, obj, fDefBrSize, fDefSL);
164   }
165  
166   //__________________________________________________________________________________________________
167 + void TreeWriter::AddBranchToTree(const char *tname, const char *name, void *obj)
168 + {
169 +  // Add branch with name "name" into tree with name "tname" and set its address
170 +  // to object pointer for class name "cname" using a default buffer size and splitlevel.
171 +
172 +  AddBranchToTree(tname, name, CName(obj), obj);
173 + }
174 +
175 + //__________________________________________________________________________________________________
176   MyTree *TreeWriter::AddOrGetMyTree(const char *tn)
177   {
178    // Add new tree if not present in array of trees or return
179    // present tree.
180  
181    MyTree *tree = dynamic_cast<MyTree*>(fTrees.FindObject(tn));
182 <  if (tree) return tree;
182 >  if (tree)
183 >    return tree;
184  
185    TDirectory::TContext context(fFile);
186    tree = new MyTree(tn, tn);
# Line 175 | Line 235 | void TreeWriter::CloseFile()
235   }
236  
237   //__________________________________________________________________________________________________
238 + const char *TreeWriter::CName(void *obj) const
239 + {
240 +  // Dereference void* pointer into TObject* pointer
241 +
242 +  TObject *tobj = dynamic_cast<TObject*>(*(TObject**)obj);
243 +  if (tobj==0) {
244 +    Fatal("ClassName", "Given void* ptr can not be dereferenced into TObject*");
245 +  }
246 +  return tobj->ClassName();
247 + }
248 +
249 + //__________________________________________________________________________________________________
250   Bool_t TreeWriter::EndEvent(Bool_t doreset)
251   {
252    // Store the event in the tree. If doreset or fDoObjNumReset is kTRUE
# Line 189 | Line 261 | Bool_t TreeWriter::EndEvent(Bool_t dores
261    Int_t r = 0;
262    for (Int_t i=0;i<fTrees.GetEntries();++i) {
263      MyTree *mt = static_cast<MyTree*>(fTrees.At(i));
264 <    if (mt->GetAutoFill()==0) continue;
264 >    if (mt->GetAutoFill()==0)
265 >      continue;
266      r += mt->Fill();
267    }
268  
# Line 217 | Line 290 | Long64_t TreeWriter::GetEntries(const ch
290  
291     if (tn) {
292       const TTree *mt=GetTree(tn);
293 <     if (mt) return mt->GetEntries();
294 <     else return -1;
293 >     if (mt)
294 >       return mt->GetEntries();
295 >     else
296 >       return -1;
297     }
298  
299     Long64_t ret = 0;
# Line 363 | Line 438 | void TreeWriter::SetAutoFill(const char
438   {
439    // Set auto-fill mode of tree with given name.
440  
441 <  if (fTrees.GetEntries()==0) return;
441 >  if (fTrees.GetEntries()==0)
442 >    return;
443  
444    MyTree *mt = GetMyTree(tn);
445 <  if (!mt) return;
445 >  if (!mt)
446 >    return;
447  
448    mt->SetAutoFill(b);
449   }
450  
451 +
452 + //-------------------------------------------------------------------------------------------------
453 + void TreeWriter::SetMaxSize(Long64_t s)
454 + {
455 +  // Set maximum file size. Check if this exceeds the ROOT file size and if,
456 +  // print a warning and adjust it.
457 +
458 +  if (s>=(Long64_t)(0.99 * TTree::GetMaxTreeSize())) {
459 +    Long64_t news = (Long64_t)(s/0.99);
460 +    Warning("SetMaxSize", "Maximum tree size increased from %lld to %lld",
461 +            TTree::GetMaxTreeSize(), news);
462 +    TTree::SetMaxTreeSize(news);
463 +  }
464 +
465 +  fMaxSize=s;
466 + }
467 +
468   //__________________________________________________________________________________________________
469   void TreeWriter::StoreObject(const TObject *obj)
470   {

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines