Hi,
I'm having a problem with "small" branches not being written out, until
it contains enough data. The problem appears to be related to the
buffer size, though I haven't been able to figure out what exactly is
going wrong. The version of ROOT I'm using is 2.23/12, running on a linux
box (RedHat 5.2) with egcs-1.1.2. The test case I'm using is:
//************ testclass.h **************//
#include <iostream>
#include <TObject.h>
extern "C" {
#include "ROOTtypes.h"
}
class AClass : public TObject {
public:
AClass(Int_t a1=0,Int_t a2=3);
virtual ~AClass();
void SetVal(Int_t aa, Int_t ab) { a1=aa, a2=ab; }
private:
Int_t a1, a2;
public:
ClassDef(AClass,1)
};
//*********** testclass.cc ************//
#include "testclass.h"
ClassImp(AClass)
AClass::AClass(Int_t aa, Int_t ab) : a1(aa), a2(ab) {
cerr << "AClass "<<a1<<" "<<a2<<" being created.\n";
}
AClass::~AClass() {
cerr << "\tAClass "<<a1<<" "<<a2<<" being destroyed.\n";
}
//************ main routine ***********//
#include <iostream>
#include <stdlib.h>
#include "testclass.h"
#include "TROOT.h"
#include "TFile.h"
int main(int argc, char * argv[]) {
static TROOT Root("Root","Test");
static TTree *tree;
static AClass *A = 0;
static TBranch *Abr;
TFile fRootfile("test.out","RECREATE","Test file");
tree = new TTree("T","test tree");
int i, j;
Int_t max = 10;
Int_t bufsize=16000;
Int_t split = 1;
Int_t compress = 2;
Int_t autosave = 1000000;
cout << "Max = "<<max<<".\n";
cout << "Compression = "<<compress<<".\n";
cout << "Split = "<<split<<".\n";
cout << "Bufsize = "<<bufsize<<".\n";
cout << "AutoSave = "<<autosave<<".\n";
fRootfile.SetCompressionLevel(compress);
tree->SetAutoSave(autosave);
for (i=0; i<max; i++) {
for (j=20; j<max+20; j++) {
if (!A) {
A = new AClass(i,j);
Abr = tree->Branch("a","AClass",&A,bufsize,split);
tree->SetBranchStatus("a",1);
}
if (A) {
A->SetVal(i,j);
}
tree->Fill();
}
}
fRootfile.Write();
tree->Print();
return 0;
}
With a buffersize = 16000 (the default), until max > 60 the tree->Print()
called at the end shows that the # of entries is correct, but 0 bytes for
each branch are being written out. When I look at the file in ROOT, I get
the same thing. Am I doing something wrong?
Thanks for the help,
Rob Feuerbach
This archive was generated by hypermail 2b29 : Tue Jan 02 2001 - 11:50:19 MET