Re: [ROOT] Diverting Branch to separate file

From: Rene Brun (Rene.Brun@cern.ch)
Date: Tue Mar 27 2001 - 11:26:47 MEST


Hi Dimitri,

TBranch::SetFile acts on one branch only, not on its sub branches.
In the case of a TClonesArray, one has to loop on all the subbranches as shown
in the example below.
Note that in case you have a few entries only, data are buffered in
the branch baskets. If all the buffers fit in memory, they are written
in one single block together with the tree header on the master file.
In this case, the associated files will be empty.

Rene Brun


{
   TFile * f = new TFile("test.root","recreate");
   TClonesArray *d = new TClonesArray("TObject",10);
   TTree * t = new TTree("tree","a test");
   TBranch *br =  t->Branch("Clones",&d,32000);
   TIter next(br->GetListOfBranches());
   TBranch *brc;
   while((brc=(TBranch*)next())) {
      brc->SetFile("test.clones.root");
   }
   for (Int_t i=0;i<1000;i++) {
      for (Int_t j=0;j<(i%50);j++) {
         TObject *obj = new ((*d)[j]) TObject();
         obj->SetUniqueID(100*i+j);
      }
      t->Fill();
   }
   t->Print();
   t->Write();
}


Dimitri Peressounko wrote:
> 
>    Hi, Rooters!
> 
> I am trying to divert branch ot TClonesArray to separate file:
> 
> root [0] TFile * f = new TFile("test.root","new")
> root [1] TClonesArray * d = new TClonesArray("TObject",10)
> root [2] TTree * t = new TTree("tree","a test")
> root [3] TBranch * br =  t->Branch("Clones",&d,32000);
> root [4] br->SetFile("test.clones.root")
> root [5] t->GetBranch("Clones")->GetFileName()
> (const char* 0x858a01c)"test.clones.root"
> root [6] t->Fill()
> (Int_t)4
> root [7] t->Write()
> (Int_t)761
> root [8] .q
> 
> Now I am reading back this branch and find, that file = "".
> 
> root [0] TFile * f = new TFile("test.root")
> root [1] TTree * t = (TTree *) f->Get("tree")
> root [2] t->GetBranch("Clones")->GetFileName()
> (const char* 0x403ff98c)""
> 
> file test.clones.root is not created as well.
> What I am doing wrong?
> 
>              Dmitri



This archive was generated by hypermail 2b29 : Tue Jan 01 2002 - 17:50:40 MET