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