JAL-1767 refactorings to enable faithful restore of PCA from project
[jalview.git] / src / jalview / analysis / PCA.java
index 1cf21fd..b3268df 100755 (executable)
@@ -45,7 +45,9 @@ public class PCA implements Runnable
   /*
    * outputs
    */
-  private MatrixI symm;
+  private MatrixI pairwiseScores;
+
+  private MatrixI afterTred;
 
   private MatrixI eigenvector;
 
@@ -143,9 +145,9 @@ public class PCA implements Runnable
   {
     double out = 0.0;
 
-    for (int i = 0; i < symm.width(); i++)
+    for (int i = 0; i < pairwiseScores.width(); i++)
     {
-      out += (symm.getValue(row, i) * eigenvector.getValue(i, n));
+      out += (pairwiseScores.getValue(row, i) * eigenvector.getValue(i, n));
     }
 
     return out / eigenvector.getD()[n];
@@ -160,6 +162,31 @@ public class PCA implements Runnable
   public String getDetails()
   {
     return details;
+    /*
+    StringBuilder sb = new StringBuilder(1024);
+    sb.append("PCA calculation using ").append(scoreModel.getName())
+            .append(" sequence similarity matrix\n========\n\n");
+    PrintStream ps = wrapOutputBuffer(sb);
+    
+    sb.append(" --- OrigT * Orig ---- \n");
+    pairwiseScores.print(ps, "%8.2f");
+    
+    sb.append(" ---Tridiag transform matrix ---\n");
+    sb.append(" --- D vector ---\n");
+    afterTred.printD(ps, "%15.4e");
+    ps.println();
+    sb.append("--- E vector ---\n");
+    afterTred.printE(ps, "%15.4e");
+    ps.println();
+    
+    sb.append(" --- New diagonalization matrix ---\n");
+    eigenvector.print(ps, "%8.2f");
+    sb.append(" --- Eigenvalues ---\n");
+    eigenvector.printD(ps, "%15.4e");
+    ps.println();
+    
+    return sb.toString();
+    */
   }
 
   /**
@@ -183,16 +210,18 @@ public class PCA implements Runnable
       sb.append(" --- OrigT * Orig ---- \n");
       eigenvector.print(ps, "%8.2f");
 
-      symm = eigenvector.copy();
+      pairwiseScores = eigenvector.copy();
 
       eigenvector.tred();
 
+      afterTred = eigenvector.copy();
+
       sb.append(" ---Tridiag transform matrix ---\n");
       sb.append(" --- D vector ---\n");
-      eigenvector.printD(ps, "%15.4e");
+      afterTred.printD(ps, "%15.4e");
       ps.println();
       sb.append("--- E vector ---\n");
-      eigenvector.printE(ps, "%15.4e");
+      afterTred.printE(ps, "%15.4e");
       ps.println();
 
       // Now produce the diagonalization matrix
@@ -250,6 +279,37 @@ public class PCA implements Runnable
   public int getHeight()
   {
     // TODO can any of seqs[] be null?
-    return seqs.getSequences().length;
+    return pairwiseScores.height();// seqs.getSequences().length;
+  }
+
+  /**
+   * Answers the sequence pairwise similarity scores which were the first step
+   * of the PCA calculation
+   * 
+   * @return
+   */
+  public MatrixI getPairwiseScores()
+  {
+    return pairwiseScores;
+  }
+
+  public void setPairwiseScores(MatrixI m)
+  {
+    pairwiseScores = m;
+  }
+
+  public MatrixI getEigenmatrix()
+  {
+    return eigenvector;
+  }
+
+  public void setEigenmatrix(MatrixI m)
+  {
+    eigenvector = m;
+  }
+
+  public void setDetails(String d)
+  {
+    details = d;
   }
 }