Hi Rooters!
When trying to sort a TClonesArray by one of its elements, e.g. the
Tracks TClonesArray in the Event class, the entries seem to be screwed
up after the sorting. I added the following two methods to the Event
class to illustrate the problem:
void Event::SortTracks()
{
// Sort TClonesArray
fTracks->Sort();
}
Int_t Track::Compare(const TObject *obj) const
{
if (fNpoint == ((Track *)obj)->GetNpoint()) return 0;
else if (fNpoint < ((Track *)obj)->GetNpoint()) return -1;
else return 1;
}
Then, looping through the tracks, sorting them, and looping again, I
find that
the sorted values differ slightly from the original ones. Clearing the
TClonesArray and re-reading the event from the tree before sorting cures
the problem:
nb += tree->GetEntry(ev); //read complete event in
memory
for (int j =0; j<event->GetNtrack(); j++) {
...
}
// Uncommenting the following 2 lines cures the problem
// event->Clear();
// nb += tree->GetEntry(ev);
event->SortTracks();
for (int j =0; j<event->GetNtrack(); j++) {
...
}
Any hint as to what is going wrong when the array is not cleared before
the sorting?
Thanks for your help!
Bernhard
P.S. I am using ROOT v3.02/04. The modified versions of Event.cxx,
Event.h, MainEvent.cxx are on /afs/cern.ch/user/k/ketzer/public/root/
This archive was generated by hypermail 2b29 : Tue Jan 01 2002 - 17:51:10 MET