[ROOT] Sorting

From: Alberto Pulvirenti (alberto.pulvirenti@ct.infn.it)
Date: Wed Oct 31 2001 - 17:01:02 MET


Hi to all

is there anyone who can explain me WHY root tells me that the object 
defined in th class I attached to this email is NOT sortable?

Thanks

Alberto


#ifndef ALIITSCHROMOSOME_H
#define ALIITSCHROMOSOME_H

class AliITSglobalRecPoint;

class AliITSchromosome : public TObject {

	public:
		
		AliITSchromosome();
		AliITSchromosome(AliITSglobalRecPoint *p1, AliITSglobalRecPoint *p2, 
			              AliITSglobalRecPoint *p3, AliITSglobalRecPoint *p4, 
			              AliITSglobalRecPoint *p5, AliITSglobalRecPoint *p6);
	
		virtual ~AliITSchromosome();
		
		Bool_t IsSortable() {return kTRUE;}
		Int_t  Compare(const TObject *O) const;
		
		AliITSglobalRecPoint*& operator[](Int_t i);
	
		Double_t GetCost();
		
	private:
		
		Int_t fStored;
		Double_t fCost;
		AliITSglobalRecPoint *fPoint[6];

		ClassDef(AliITSchromosome, 1)
};

#endif


#include <fstream.h>
#include <stdlib.h>

#include <TObject.h>
#include <TROOT.h>
#include <TMath.h>

#include "AliITSRecPoint.h"
#include "AliITSglobalRecPoint.h"

#include "AliITSchromosome.h"



ClassImp(AliITSchromosome)
//
//
//
AliITSchromosome::AliITSchromosome()
{
	fCost   = 0.0;
	fStored = 0;	
	
	fPoint[0] = fPoint[1] = fPoint[2] = 0;
	fPoint[3] = fPoint[4] = fPoint[5] = 0;
}
//
//
//
AliITSchromosome::AliITSchromosome(AliITSglobalRecPoint *p0 = 0, AliITSglobalRecPoint *p1 = 0, 
			                          AliITSglobalRecPoint *p2 = 0, AliITSglobalRecPoint *p3 = 0, 
 			                          AliITSglobalRecPoint *p4 = 0, AliITSglobalRecPoint *p5 = 0)
{
	Int_t l;
	
	fPoint[0] = p0;
	fPoint[1] = p1;
	fPoint[2] = p2;
	fPoint[3] = p3;
	fPoint[4] = p4;
	fPoint[5] = p5;
	
	fStored = 0;
	for (l = 0; l < 5; l++) if (fPoint[l]) fStored++;
	
	if (fStored == 6) GetCost();
}
//
//
//
AliITSchromosome::~AliITSchromosome() 
{
	Int_t l;
	for(l = 0; l < 6; l++)
		fPoint[l]=0;
}
//
//
//
AliITSglobalRecPoint*& AliITSchromosome::operator[](Int_t i)
{
	if (i < 6 && i >= 0) 
		return fPoint[i];
	else 
		return fPoint[0];
}
//
//
//
Double_t AliITSchromosome::GetCost()
{
	Int_t i = 0;
	fCost = 0.0;
	for (i = 1; i < 6; i++) {
		if (!fPoint[i]) return 0.0;
		fCost += fPoint[i]->DeltaPhi(fPoint[i-1]);
	}
	return fCost;
}
//
//
//
Int_t AliITSchromosome::Compare(const TObject *O) const
{
	AliITSchromosome *chr = (AliITSchromosome*)O;
	if (chr->fCost < fCost)
		return -1;
	else if (chr->fCost > fCost)
		return 1;
	else
		return 0;
}



This archive was generated by hypermail 2b29 : Tue Jan 01 2002 - 17:51:05 MET