the quick way out would be to implement a Compare() function for
the objects you store in the TClonesArray that uses a user settable
function to do the actual compare. Something like:
class GIObject : public TOBject {
private:
...
static Int_t (*fgCompare)(GIObject *, GIObject *);
public:
void SetCompareFunc(Int_t (*comp)(GIObject *, GIObject *))
{ fgCompare = comp; }
Bool_t IsSortable() const { return kTRUE; }
Int_t Compare(TObject *obj);
};
GIObject::Compare(TObject *obj)
{
return (*fgCompare)(this, obj);
}
Now before doing the sort you do GIObject::SetCompareFunc() to
the function you want.
Hope this helps.
Cheers, Fons.
George Irwin wrote:
>
> I need the ability to sort a TClonesArray with various compare
> functions. For example, sort on plane number, or counter number
> within plane, or pulse height, or time, or some combination of these,
> etc. TClonesArray seems to want me to compile my compare function
> into the object occupying the TClonesArray. But I need the
> flexibility to define new kinds of sorts in an analysis job
> constructed after the object in the TClonesArray is defined.
> With STL containers I would use the STL sort construct with different
> externally defined compare functions. How can I achieve this
> functionality with TClonesArray. Thanks. George
-- Org: CERN, European Laboratory for Particle Physics. Mail: 1211 Geneve 23, Switzerland Phone: +41 22 7679248 E-Mail: Fons.Rademakers@cern.ch Fax: +41 22 7677910