#ifndef ALIKMEANSCLUSTERING_H
#define ALIKMEANSCLUSTERING_H
#include <TObject.h>
class AliKMeansClustering : public TObject
{
public:
AliKMeansClustering() {}
virtual ~AliKMeansClustering() {}
static Int_t SoftKMeans (Int_t k, Int_t n, const Double_t* x, const Double_t* y, Double_t* mx, Double_t* my , Double_t* rk );
static Int_t SoftKMeans2(Int_t k, Int_t n, Double_t* x, Double_t* y, Double_t* mx, Double_t* my , Double_t* sigma2,
Double_t* rk );
static Int_t SoftKMeans3(Int_t k, Int_t n, Double_t* x, Double_t* y, Double_t* mx, Double_t* my ,
Double_t* sigmax2, Double_t* sigmay2, Double_t* rk );
static void OptimalInit(Int_t k, Int_t n, const Double_t* x, const Double_t* y, Double_t* mx, Double_t* my);
static void SetBeta(Double_t beta) {fBeta = beta;}
static Double_t d(Double_t mx, Double_t my, Double_t x, Double_t y);
protected:
static Double_t fBeta;
ClassDef(AliKMeansClustering, 1)
};
class AliKMeansResult : public TObject
{
public:
AliKMeansResult(Int_t k);
AliKMeansResult(const AliKMeansResult &res);
AliKMeansResult& operator=(const AliKMeansResult& trclass);
virtual ~AliKMeansResult();
Int_t GetK() const {return fK;}
Double_t* GetMx() const {return fMx;}
Double_t* GetMy() const {return fMy;}
Double_t* GetSigma2() const {return fSigma2;}
Double_t* GetRk() const {return fRk;}
Int_t* GetInd() const {return fInd;}
Double_t* GetTarget() const {return fTarget;}
void CopyResults(const AliKMeansResult* res);
void Sort();
void Sort(Int_t n, const Double_t* x, const Double_t* y);
protected:
Int_t fK;
Double_t* fMx;
Double_t* fMy;
Double_t* fSigma2;
Double_t* fRk;
Double_t* fTarget;
Int_t* fInd;
ClassDef(AliKMeansResult, 1)
};
#endif