Hi Rooters,
I've try to solve my problems with your indication but without success.
So this time I'll try to be as much clear as I can. Here is what I'm
trying to do:
Program's layout:
- run object containing pointers to the current event, to a TTree and
some more informations.
- FZReader object used to fill the current event with data from a
zebra file.
- event object containing all the reconstructed data which is mainly
the clusters informations. This is implemented, now, by a TList of
TClonesArray * containing cluster objects.
- cluster objects storing clusters information.
Program's execution sequence:
- A run object is created which create a TTree and an event object.
- The tree is created by issuing a
fTree->Branch("event", "LVxEvent", &fEvent, 32000, 1);
in a method of the run object and than a similar method is called
on the event object which does the following things:
void LVxEvent::MakeBranch( Text_t *name, Int_t bufsize, Int_t
splitlevel )
{
TIter nextR(&fgRClusters), nextPhi(&fgPhiClusters);
TClonesArray *clusters;
int i=0;
Text_t *RName[] = {"R0","R1","R2","R3","R4","R5","R6"};
Text_t *PhiName[] =
{"Phi0","Phi1","Phi2","Phi3","Phi4","Phi5","Phi6"};
while( clusters = (TClonesArray *)nextR() )
gRun->GetTree()->Branch(RName[i++], &clusters, bufsize,
splitlevel);
i=0;
while( clusters = (TClonesArray *)nextPhi() )
gRun->GetTree()->Branch(PhiName[i++], &clusters, bufsize,
splitlevel);
}
N.B. I also tried clusters instead of &clusters.
- A loop is done on the fz file in which the next event is read. The
cluster maker is than run and a short display of the resulting data
is printed out. Next the tree is filled (by fTree->Fill();) and at
last the event is cleared.
The program segfault next to the call to the Fill() method. dbx says:
Segmentation fault in ptrgl.$PTRGL
[/afs/cern.ch/na49/library.4/ROOT/pro/rs_aix41/root/lib/libRoot.a] at
0xd12e3868 ($t1)
0xd12e3868 ($PTRGL) 800b0000 lwz r0,0x0(r11)
(dbx) where
ptrgl.$PTRGL() at 0xd12e3868
Fill__13TBranchClonesFv() at 0xd160ad8c
Fill__5TTreeFv() at 0xd1401064
FillTree()(0x204edbd8), line 106 in "LVxRun.cxx"
unnamed block $b2, line 124 in "LVxMain.cxx"
main(argc = 3, argv = 0x2ff21f48), line 124 in "LVxMain.cxx"
I don't see what's wrong in my code. The TTree::Branch(..) method
documentation says:
"clonesaddress is the address of a pointer to a TClonesArray."
That the case of &clusters but as it's the same for all the branch
and it becomes invalid on exit of LVxEvent::MakeBranch(..) I've thought
this might be the cause of my trouble.
All ideas/comments are welcome!
Cheers,
Odie
-- +----------------------------------------------------------------------+ | Olivier Dormond EMail : Olivier.Dormond@iphe.unil.ch | | IPHE - BSP - UNIL WWW : iphedec2.unil.ch/~odie | | CH-1015 Dorigny Phone : (++41 21) 692 3739 | | Switzerland Fax : (++41 21) 692 3605 | +----------------------------------------------------------------------+