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.10 by bendavid, Tue Sep 23 16:58:56 2008 UTC vs.
Revision 1.13 by loizides, Mon Dec 1 17:39:20 2008 UTC

# Line 27 | Line 27 | TreeWriter::TreeWriter(const char *tname
27    fEvtObjNum(-1),
28    fIsInit(kFALSE),
29    fDoObjNumReset(doreset),
30 +  fDoBranchRef(0),
31    fFile(0),
32    fTrees(0)
33   {
# Line 40 | Line 41 | TreeWriter::~TreeWriter()
41   {
42    // Destructor.
43    
44 <  if (fIsInit) {
44 <    CloseFile();
45 <  }
46 <
47 <  TDirectory::TContext context(0);
48 <  fTrees.Clear();
44 >  Terminate();
45   }
46  
47   //__________________________________________________________________________________________________
# Line 178 | Line 174 | void TreeWriter::AddBranchToTree(const c
174   }
175  
176   //--------------------------------------------------------------------------------------------------
177 + void TreeWriter::AddTree(const char *tname)
178 + {
179 +  // Add tree with name "name" into tree with name "tname".
180 +
181 +  AddOrGetMyTree(tname);
182 + }
183 +
184 + //--------------------------------------------------------------------------------------------------
185   MyTree *TreeWriter::AddOrGetMyTree(const char *tn)
186   {
187    // Add new tree if not present in array of trees or return
188    // present tree.
189  
190 <  MyTree *tree = dynamic_cast<MyTree*>(fTrees.FindObject(tn));
190 >  MyTree *tree = GetMyTree(tn);
191    if (tree)
192      return tree;
193  
194    TDirectory::TContext context(fFile);
195    tree = new MyTree(tn, tn);
196    tree->SetDirectory(fFile);
197 <  if (fDoObjNumReset)
197 >  if (fDoBranchRef)
198      tree->BranchRef();
199    fTrees.AddLast(tree);  
200    return tree;
# Line 229 | Line 233 | void TreeWriter::CloseFile()
233    for (Int_t i=0;i<fTrees.GetEntries();++i) {
234      MyTree *mt = static_cast<MyTree*>(fTrees.At(i));
235      mt->Write(mt->GetName(),TObject::kOverwrite);
236 <    //backup and restore list of branch pointers from TRefTable (needed for autoloading)
236 >
237 >    // backup and restore list of branch pointers from TRefTable (needed for autoloading)
238      if (mt->GetBranchRef()) {
239        TObjArray *parents = mt->GetBranchRef()->GetRefTable()->GetParents();
240        TObjArray parentsBak(*parents);
# Line 257 | Line 262 | const char *TreeWriter::CName(void *obj)
262  
263    TObject *tobj = dynamic_cast<TObject*>(*(TObject**)obj);
264    if (tobj==0) {
265 <    Fatal("ClassName", "Given void* ptr can not be dereferenced into TObject*");
265 >    Fatal("CName", "Given void* ptr can not be dereferenced into TObject*");
266    }
267    return tobj->ClassName();
268   }
269  
270   //--------------------------------------------------------------------------------------------------
271 + void TreeWriter::DoBranchRef(const char *tn)
272 + {
273 +  // Fill BranchRef for given tree.
274 +
275 +  if (fTrees.GetEntries()==0) {
276 +    Error("DoBranchRef", "Tree with name %s not found!", tn);
277 +    return;
278 +  }
279 +
280 +  MyTree *mt = GetMyTree(tn);
281 +  if (!mt)
282 +    return;
283 +
284 +  mt->BranchRef();
285 + }
286 +
287 + //--------------------------------------------------------------------------------------------------
288   Bool_t TreeWriter::EndEvent(Bool_t doreset)
289   {
290    // Store the event in the tree. If doreset or fDoObjNumReset is kTRUE
# Line 289 | Line 311 | Bool_t TreeWriter::EndEvent(Bool_t dores
311      if (fEvtObjNum<0) {
312        Error("EndEvent", "Object counter is zero. Did you call BeginEvent(kTRUE)?");
313      } else {
314 <      // Reset the TRef table. keep it from growing with each event (see doc)
314 >      // Reset the TRef table. Keep it from growing with each event (see doc)
315        TProcessID::SetObjectCount(fEvtObjNum);
316      }
317    }
# Line 499 | Line 521 | void TreeWriter::StoreObject(const TObje
521  
522    fFile->WriteTObject(obj,obj->GetName(),"WriteDelete");
523   }
524 +
525 + //__________________________________________________________________________________________________
526 + void TreeWriter::Terminate()
527 + {
528 +  // Terminate tree file writing.
529 +  
530 +  if (fIsInit) {
531 +    CloseFile();
532 +  }
533 +
534 +  TDirectory::TContext context(0);
535 +  fTrees.Clear();
536 + }

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines