Hello,
I use the Event class (that in $ROOTSYS/test) slightely modified to work
with my Track class.
The problem I get is when i try to group various Event objects into a
TClonesArray .
For my purposes, one Event object contains always four tracks.
The interesting part of the code (which compiles as a stand-alone
executable) is the following:
//--------------------------------------
TClonesArray vev("Event",10000);
/*
IN ORDER TO BETTER UNDERSTAND THE PROBLEM, I FILL A TClonesArray OF
Track TOO
*/
TClonesArray tra("Track",10000);
i=0;
/*
ve[i][j] IS A STL VECTOR CONTAINING THE ID OF THE TRACKS
*/
for(it=ve.begin(); it!=ve.end();it++){
Event event;
/*
THE TRACKS I NEED ARE STORED IN FOUR TREES:
*/
int i0 = ve[i][0], i1 = ve[i][1], i2 = ve[i][2], i3 = ve[i][3];
Branch0->GetEntry(i0); event.AddTrack(*tr0);
Branch1->GetEntry(i1); event.AddTrack(*tr1);
Branch2->GetEntry(i2); event.AddTrack(*tr2);
Branch3->GetEntry(i3); event.AddTrack(*tr3);
new(vev[i]) Event(event) ; // FILL THE TClonesArray OF Event
new(tra[i]) Track(*tr0) ; // FILL THE TClonesArray OF Track
/*
NOW A CHECK: I RETRIEVE THE SAME INFO y() DIRECTLY FORM tr0 AND
TRACK ttt, WHICH IS RETRIEVED FROM THE Event OBJECT "event";
NOTE: THIS CHECK GIVES POSITIVE RESULTS, I.E. THE PRINTED VALUES OF THE
y() ARE THE SAME FOR tr0 AND ttt.
*/
Event &te = *((Event*)vev.UncheckedAt(i));
Track *ttt = (Track*)te.GetTracks()->UncheckedAt(0);
cout<<"ID "<<ve[i][0]<<" tr0 "<<tr0->y()<<" ttt "<<ttt->y()<<endl;
i++;
}
/*
NOW, OUT OF THE LOOP I RETRIEVE THE FIRST TRACK INFO ABOUT y()
*/
Track *ttt = (Track*)tra.UncheckedAt(0);
cout<<ttt->y()<<endl;
/*
... AND IT WORKS!!!!
BUT NOW I TRY TO DO THE SAME WITH THE TClonesArray OF EVENTS...
*/
for(int j=0; j<i;j++)
{
Event &te = *((Event*)vev.UncheckedAt(j));
Track *ttt = (Track*)te.GetTracks()->UncheckedAt(0);
cout<<ttt->y()<<endl;
}
/*
... AND I GET SEGMENTATION VIOLATION
/*
//---------------------------------
I think that the problem resides in the destruction of the Event objects
at the end of the loop. But I don't know why, since when I fill the
TClonesArray of Event objects, it should copy the objects..., shouldn't
it?
RootVesion : 3.03/09 18 September 2002
System : Linux RedHat 7.2
gcc version : 2.96
Thank you very much!!!!
Tommaso
--
-----------------------
Dr. Tommaso Chiarusi
Dipartimento di Fisica
Universita' di Bologna
INFN. Sez. Bologna
Tel +39.051.209.5234
Fax +39.051.209.5269
-----------------------
This archive was generated by hypermail 2b29 : Thu Jan 01 2004 - 17:50:13 MET