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