[ROOT] appending more objects

From: GENTIT Francois-Xavier DAPNIA (GENTIT@dapnia.cea.fr)
Date: Thu Sep 05 2002 - 12:35:47 MEST


   Dear Root developers,
   I am surprised that there is no simple solution to the problem of adding
more objects to an already existing tree. The simple solutions I have tried
results in files with 2 trees, T;1 and T;2. If I insist to remain with only
one tree in the file, I have found no other solution than creating an other
file, copying the content of the first file into the second file, and then
adding the new elements. Here is the code I use to append the object fRun of
class TBCrun to an already existing tree containing objects of class TBCrun:

    TBCrun *run  = new TBCrun();
    TFile *oldf = new TFile("file1.root");
    TTree *oldt = (TTree *)oldf->Get("T");
    Int_t nrun = (Int_t)oldt->GetEntries();
    TBranch *b1 = oldt->GetBranch("Run");
    b1->SetAddress(&run);
    TFile *newf = new TFile("file2.root","recreate");
    TTree *newt = new TTree("T","T");
    TBranch *b2   = newt->Branch("Run","TBCrun",&run,bufsize,99);
    for (Int_t k=0;k<nrun;k++) {
      oldf->cd();
      nb1 += oldt->GetEntry(k,1);
      newf->cd();
      nb2 += newt->Fill();
    }
    newt->SetBranchAddress("Run",&fRun);
    newt->Fill();
    newf->Write();

  It works, but seems incredibly complicate to just add one element to the
tree. It has also the disadvantage of creating a second file, which imposes
later to delete the first file, and rename the second file with the name of
the deleted file. Would it be feasible to add a method "Append" to the class
TTree?


François-Xavier Gentit
DAPNIA/SPP CEA Saclay
http://gentit.home.cern.ch/gentit/



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