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.7 by loizides, Thu Jun 26 16:45:27 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 54 | Line 56 | void TreeWriter::AddBranch(const char *n
56    // Add branch with name "name" into tree with name "tname" and set its address
57    // to object pointer for class name "cname" using a given buffer size and splitlevel.
58  
59 <  MyTree *t = AddOrGetMyTree(GetName());
60 <  t->Bronch(name, cname, obj, bsize, level);
59 >  MyTree  *t = AddOrGetMyTree(GetName());
60 >  TBranch *b = t->Bronch(name, cname, obj, bsize, level);
61 >  b->SetCompressionLevel(GetCompressLevel());
62 > }
63 >
64 >
65 > //__________________________________________________________________________________________________
66 > void TreeWriter::AddBranch(const char *name, void *obj, Int_t bsize, Int_t level)
67 > {
68 >  // Add branch with name "name" into tree with name "tname" and set its address
69 >  // to object pointer using a given buffer size and splitlevel.
70 >
71 >  AddBranch(name, CName(obj), obj, bsize, level);
72   }
73  
74   //__________________________________________________________________________________________________
# Line 65 | Line 78 | void TreeWriter::AddBranch(const char *n
78    // Add branch with name "name" into tree with name "tname" and set its address
79    // to object pointer for class name "cname" using a given buffer size and default splitlevel.
80  
81 <  MyTree *t = AddOrGetMyTree(GetName());
82 <  t->Bronch(name, cname, obj, bsize, fDefSL);
81 >  MyTree  *t = AddOrGetMyTree(GetName());
82 >  TBranch *b = t->Bronch(name, cname, obj, bsize, fDefSL);
83 >  b->SetCompressionLevel(GetCompressLevel());
84 > }
85 >
86 > //__________________________________________________________________________________________________
87 > void TreeWriter::AddBranch(const char *name, void *obj, Int_t bsize)
88 > {
89 >  // Add branch with name "name" into tree with name "tname" and set its address
90 >  // to object pointer using a given buffer size and default splitlevel.
91 >
92 >  AddBranch(name, CName(obj), obj, bsize);
93   }
94  
95   //__________________________________________________________________________________________________
# Line 74 | Line 97 | void TreeWriter::AddBranch(const char *n
97                             void *obj)
98   {
99    // Add branch with name "name" into tree with name "tname" and set its address
100 <  // to object pointer for class name "cname" using a given buffer size and default splitlevel.
100 >  // to object pointer for class name "cname" using a default buffer size and splitlevel.
101  
102 <  MyTree *t = AddOrGetMyTree(GetName());
103 <  t->Bronch(name, cname, obj, fDefBrSize, fDefSL);
102 >  MyTree  *t = AddOrGetMyTree(GetName());
103 >  TBranch *b = t->Bronch(name, cname, obj, fDefBrSize, fDefSL);
104 >  b->SetCompressionLevel(GetCompressLevel());
105 > }
106 >
107 > //__________________________________________________________________________________________________
108 > void TreeWriter::AddBranch(const char *name, void *obj)
109 > {
110 >  // Add branch with name "name" into tree with name "tname" and set its address
111 >  // to object pointer using a default buffer size and splitlevel.
112 >
113 >  AddBranch(name, CName(obj), obj);
114   }
115  
116   //__________________________________________________________________________________________________
# Line 87 | Line 120 | void TreeWriter::AddBranchToTree(const c
120    // Add branch with name "name" into tree with name "tname" and set its address
121    // to object pointer for class name "cname" using a given buffer size and splitlevel.
122  
123 <  MyTree *t = AddOrGetMyTree(tname);
124 <  t->Bronch(name, cname, obj, bsize, level);
123 >  MyTree  *t = AddOrGetMyTree(tname);
124 >  TBranch *b = t->Bronch(name, cname, obj, bsize, level);
125 >  b->SetCompressionLevel(GetCompressLevel());
126 > }
127 >
128 > //__________________________________________________________________________________________________
129 > void TreeWriter::AddBranchToTree(const char *tname, const char *name, void *obj,
130 >                                 Int_t bsize, Int_t level)
131 > {
132 >  // Add branch with name "name" into tree with name "tname" and set its address
133 >  // to object pointer using a given buffer size and splitlevel.
134 >
135 >  AddBranchToTree(tname, name, CName(obj), obj, bsize, level);
136   }
137  
138   //__________________________________________________________________________________________________
139   void TreeWriter::AddBranchToTree(const char *tname, const char *name, const char *cname,
140 <                           void *obj, Int_t bsize)
140 >                                 void *obj, Int_t bsize)
141   {
142    // Add branch with name "name" into tree with name "tname" and set its address
143    // to object pointer for class name "cname" using a given buffer size and default splitlevel.
144  
145 <  MyTree *t = AddOrGetMyTree(tname);
146 <  t->Bronch(name, cname, obj, bsize, fDefSL);
145 >  MyTree  *t = AddOrGetMyTree(tname);
146 >  TBranch *b = t->Bronch(name, cname, obj, bsize, fDefSL);
147 >  b->SetCompressionLevel(GetCompressLevel());
148 > }
149 >
150 > //__________________________________________________________________________________________________
151 > void TreeWriter::AddBranchToTree(const char *tname, const char *name, void *obj,
152 >                                 Int_t bsize)
153 > {
154 >  // Add branch with name "name" into tree with name "tname" and set its address
155 >  // to object pointer using a given buffer size and default splitlevel.
156 >
157 >  AddBranchToTree(tname, name, CName(obj), obj, bsize);
158   }
159  
160   //__________________________________________________________________________________________________
161   void TreeWriter::AddBranchToTree(const char *tname, const char *name, const char *cname,
162 <                           void *obj)
162 >                                 void *obj)
163   {
164    // Add branch with name "name" into tree with name "tname" and set its address
165 <  // to object pointer for class name "cname" using a given buffer size and default splitlevel.
165 >  // to object pointer for class name "cname" using a default buffer size and splitlevel.
166  
167 <  MyTree *t = AddOrGetMyTree(tname);
168 <  t->Bronch(name, cname, obj, fDefBrSize, fDefSL);
167 >  MyTree  *t = AddOrGetMyTree(tname);
168 >  TBranch *b = t->Bronch(name, cname, obj, fDefBrSize, fDefSL);
169 >  b->SetCompressionLevel(GetCompressLevel());
170 > }
171 >
172 > //__________________________________________________________________________________________________
173 > void TreeWriter::AddBranchToTree(const char *tname, const char *name, void *obj)
174 > {
175 >  // Add branch with name "name" into tree with name "tname" and set its address
176 >  // to object pointer for class name "cname" using a default buffer size and splitlevel.
177 >
178 >  AddBranchToTree(tname, name, CName(obj), obj);
179   }
180  
181   //__________________________________________________________________________________________________
# Line 120 | Line 185 | MyTree *TreeWriter::AddOrGetMyTree(const
185    // present tree.
186  
187    MyTree *tree = dynamic_cast<MyTree*>(fTrees.FindObject(tn));
188 <  if (tree) return tree;
188 >  if (tree)
189 >    return tree;
190  
191    TDirectory::TContext context(fFile);
192    tree = new MyTree(tn, tn);
# Line 175 | Line 241 | void TreeWriter::CloseFile()
241   }
242  
243   //__________________________________________________________________________________________________
244 + const char *TreeWriter::CName(void *obj) const
245 + {
246 +  // Dereference void* pointer into TObject* pointer
247 +
248 +  TObject *tobj = dynamic_cast<TObject*>(*(TObject**)obj);
249 +  if (tobj==0) {
250 +    Fatal("ClassName", "Given void* ptr can not be dereferenced into TObject*");
251 +  }
252 +  return tobj->ClassName();
253 + }
254 +
255 + //__________________________________________________________________________________________________
256   Bool_t TreeWriter::EndEvent(Bool_t doreset)
257   {
258    // Store the event in the tree. If doreset or fDoObjNumReset is kTRUE
# Line 189 | Line 267 | Bool_t TreeWriter::EndEvent(Bool_t dores
267    Int_t r = 0;
268    for (Int_t i=0;i<fTrees.GetEntries();++i) {
269      MyTree *mt = static_cast<MyTree*>(fTrees.At(i));
270 <    if (mt->GetAutoFill()==0) continue;
270 >    if (mt->GetAutoFill()==0)
271 >      continue;
272      r += mt->Fill();
273    }
274  
# Line 211 | Line 290 | Bool_t TreeWriter::EndEvent(Bool_t dores
290   //-------------------------------------------------------------------------------------------------
291   Long64_t TreeWriter::GetEntries(const char *tn) const
292   {
293 <  //
293 >  // Return entries of tree with given name. If no tree is given, return sum of entries
294 >  // of all trees.
295  
296     if (fTrees.GetEntries()==0) return -1;
297  
298     if (tn) {
299       const TTree *mt=GetTree(tn);
300 <     if (mt) return mt->GetEntries();
301 <     else return -1;
300 >     if (mt)
301 >       return mt->GetEntries();
302 >     else
303 >       return -1;
304     }
305  
306     Long64_t ret = 0;
# Line 363 | Line 445 | void TreeWriter::SetAutoFill(const char
445   {
446    // Set auto-fill mode of tree with given name.
447  
448 <  if (fTrees.GetEntries()==0) return;
448 >  if (fTrees.GetEntries()==0)
449 >    return;
450  
451    MyTree *mt = GetMyTree(tn);
452 <  if (!mt) return;
452 >  if (!mt)
453 >    return;
454  
455    mt->SetAutoFill(b);
456   }
457  
458 +
459 + //-------------------------------------------------------------------------------------------------
460 + void TreeWriter::SetMaxSize(Long64_t s)
461 + {
462 +  // Set maximum file size. Check if this exceeds the ROOT file size and if,
463 +  // print a warning and adjust it.
464 +
465 +  if (s>=(Long64_t)(0.99 * TTree::GetMaxTreeSize())) {
466 +    Long64_t news = (Long64_t)(s/0.99);
467 +    Warning("SetMaxSize", "Maximum tree size increased from %lld to %lld",
468 +            TTree::GetMaxTreeSize(), news);
469 +    TTree::SetMaxTreeSize(news);
470 +  }
471 +
472 +  fMaxSize=s;
473 + }
474 +
475   //__________________________________________________________________________________________________
476   void TreeWriter::StoreObject(const TObject *obj)
477   {

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines