Returns 1 in case algorithm has not converged.
authormorsch <morsch@f7af4fe6-9843-0410-8265-dc069ae4e863>
Wed, 27 Jan 2010 07:57:36 +0000 (07:57 +0000)
committermorsch <morsch@f7af4fe6-9843-0410-8265-dc069ae4e863>
Wed, 27 Jan 2010 07:57:36 +0000 (07:57 +0000)
JETAN/AliKMeansClustering.cxx
JETAN/AliKMeansClustering.h

index 5714d6f..58498c4 100755 (executable)
@@ -30,7 +30,7 @@ ClassImp(AliKMeansClustering)
 
 Double_t AliKMeansClustering::fBeta = 10.;
  
-void AliKMeansClustering::SoftKMeans(Int_t k, Int_t n, Double_t* x, Double_t* y, Double_t* mx, Double_t* my , Double_t* rk )
+Int_t AliKMeansClustering::SoftKMeans(Int_t k, Int_t n, Double_t* x, Double_t* y, Double_t* mx, Double_t* my , Double_t* rk )
 {
     //
     // The soft K-means algorithm
@@ -114,9 +114,12 @@ void AliKMeansClustering::SoftKMeans(Int_t k, Int_t n, Double_t* x, Double_t* y,
     delete[] nr;
     for (j = 0; j < n; j++) delete[] r[j];
     delete[] r;
+// 
+    return (nit < 1000);
+    
 }
 
-void AliKMeansClustering::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 )
+Int_t AliKMeansClustering::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 )
 {
     //
     // The soft K-means algorithm
@@ -225,7 +228,7 @@ void AliKMeansClustering::SoftKMeans2(Int_t k, Int_t n, Double_t* x, Double_t* y
          sigma2[i] += r[j][i] * d(mx[i], my[i], x[j], y[j]);
        } // Data
        sigma2[i] /= rk[i];
-       if (sigma2[i] < 0.025) sigma2[i] = 0.025;
+       if (sigma2[i] < 0.0025) sigma2[i] = 0.0025;
       } // Clusters    
       //
       // Fractions
@@ -240,6 +243,8 @@ void AliKMeansClustering::SoftKMeans2(Int_t k, Int_t n, Double_t* x, Double_t* y
     delete[] pi;
     for (j = 0; j < n; j++) delete[] r[j];
     delete[] r;
+// 
+    return (nit < 1000);
 }
 
 Double_t AliKMeansClustering::d(Double_t mx, Double_t my, Double_t x, Double_t y)
index e00d12f..36eec1a 100755 (executable)
@@ -20,8 +20,8 @@ class AliKMeansClustering : public TObject
   AliKMeansClustering()          {}
   virtual ~AliKMeansClustering() {}
   
-  static void SoftKMeans (Int_t k, Int_t n, Double_t* x, Double_t* y, Double_t* mx, Double_t* my , Double_t* rk );
-  static void SoftKMeans2(Int_t k, Int_t n, Double_t* x, Double_t* y, Double_t* mx, Double_t* my , Double_t* sigma2, 
+  static Int_t SoftKMeans (Int_t k, Int_t n, Double_t* x, 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 void SetBeta(Double_t beta) {fBeta = beta;}
   static Double_t d(Double_t mx, Double_t my, Double_t x, Double_t y);