[ROOT] TTree::ChangeFile

From: Susan Kasahara (schubert@physics.umn.edu)
Date: Tue Nov 12 2002 - 00:08:31 MET


Hi roottalk,
The behavior of TTree::ChangeFile seems odd to me in the case of
two trees being written out to the same file.
Consider 2 trees "treeA" & "treeB"  created in file "test.root".
treeA & treeB are autosaved to the output file test.root at regular
intervals.  treeA & treeB reach size ~1 GByte at about the same time,
after N entries.
On the (N+1)th treeA->Fill() call,  TTree::ChangeFile is tripped (because
the file size approaches 2 GBytes), writing treeA to the file. The contents of
treeA are reset, setting it back to 0 entries, and a fresh treeA is started in "test_1.root".
treeB, however, is only moved to file "test_1.root", without writing it out to "test.root",
and without resetting its number of entries.
The job continues to fill treeA & treeB.  Eventually, the fresh treeA reaches size
0.5 Gbyte and treeB reaches size 1.5Gbyte.  On the next treeA->Fill(),
ChangeFile is invoked and again treeA gets written out to file and reset,
and treeB only gets moved to file "test_2.root", etc..   Is my description
correct, and is this a problem like I think it is?
  The other problem I see with TTree::ChangeFile is that when AutoSaving,
treeB will have a version of the tree in "test.root" corresponding to the last
autosaved version with <N entries.  In "test_1.root", a newer AutoSaved version
of treeB will exist with >N entries. Is TChain, on input, able to recognize
that these two versions of treeB should not be chained together, but that
the second should override the first?  TChain will be needed to read "treeA"
from the sequential output files.
Thanks for considering this, and I hope I'm not too far off in my understanding
of how this works.
-Sue Kasahara



This archive was generated by hypermail 2b29 : Sat Jan 04 2003 - 23:51:17 MET