Hi Ben,
Effectively, when TTree::AutoSave is called very frequently,
GetBytesWritten overestimates the file size.
I have replaced the call to GetBytesWritten by GetEND in
the current CVS version.
Thanks for noticing this problem.
Rene Brun
On Tue, 5 Nov 2002, Ben Speakman wrote:
> We have had some trouble with the new TTree::ChangeFile() method trying
> split a tree to a separate file before it has reachd the 1.9GB limit.
> This method is called when TFile::GetBytesWritten() exceeds 1.9GB, but
> the value returned by TFile::GetBytesWritten() deviates from the actual
> file size when the tree is written the following way.
> I create a tree in a file using:
>
> TFile *fFile = new TFile("file.root","RECREATE");
> TTree *fTree = new TTree("fTree","Tree Name");
>
> Then I make some branches using the TTree::Branch(const char* name,
> void* address, const char* leaflist, Int_t bufsize = 32000) method,
> leaving the bufsize to default.
>
> A loop runs to fill fTree:
>
> for(...) {
> ...set variables
> TDirectory* savedir = gDirectory;
> fTree->Fill();
> fFile->cd();
> fTree->AutoSave();
> fFile->SaveSelf();
> savedir->cd();
> }
>
> In this loop I can watch the file size with fFile->GetBytesWritten(),
> which seems to increase well beyond the actual file size. This becomes a
> problem when fFile prematurely thinks it is bigger than 1.9GB, and tries
> create the new file_1.root.
>
> I have attached a simple script which illustrates the trouble. When I
> call the routine treesize to fill the tree 1000 times, and save everytime
> the fFile->GetBytesWritten() explodes to 829kB, while the actual file size
> sits at 12kB.
>
> root [0] .L treesize.C
> root [1] treesize(1,100,1000)
> Output 0.2kB to 0.2kB to 3.9kB to 4.0kB
> 4 file.root
> Output 95.8kB to 95.8kB to 96.5kB to 96.7kB
> 12 file.root
> Output 185.3kB to 185.3kB to 186.1kB to 186.2kB
> 12 file.root
> Output 275.6kB to 275.6kB to 276.4kB to 276.5kB
> 12 file.root
> Output 366.4kB to 366.4kB to 367.2kB to 367.3kB
> 12 file.root
> Output 457.8kB to 457.8kB to 458.6kB to 458.7kB
> 12 file.root
> Output 549.8kB to 549.8kB to 550.6kB to 550.7kB
> 12 file.root
> Output 642.3kB to 642.3kB to 643.1kB to 643.2kB
> 12 file.root
> Output 735.1kB to 735.1kB to 735.9kB to 736.0kB
> 12 file.root
> Output 828.1kB to 828.1kB to 828.9kB to 829.0kB
> 12 file.root
>
> Is this manner of using AutoSave improper? Is there a better way to
> define TTrees to prevent this from happening?
>
> Thanks,
> Ben Speakman
>
This archive was generated by hypermail 2b29 : Sat Jan 04 2003 - 23:51:16 MET