JAL-1767 minor field tidying prior to functional changes
[jalview.git] / src / jalview / analysis / PCA.java
index 42a168d..d11d322 100755 (executable)
@@ -32,28 +32,37 @@ import java.io.PrintStream;
  */
 public class PCA implements Runnable
 {
-  MatrixI symm;
-
-  double[] eigenvalue;
+  /*
+   * inputs
+   */
+  final private AlignmentView seqs;
 
-  MatrixI eigenvector;
+  final private ScoreModelI scoreModel;
 
-  StringBuilder details = new StringBuilder(1024);
+  final private SimilarityParamsI similarityParams;
 
-  final private AlignmentView seqs;
+  /*
+   * outputs
+   */
+  private MatrixI symm;
 
-  private ScoreModelI scoreModel;
+  private MatrixI eigenvector;
 
-  private SimilarityParamsI similarityParams;
+  private String details;
 
-  public PCA(AlignmentView s, ScoreModelI sm, SimilarityParamsI options)
+  /**
+   * Constructor given the sequences to compute for, the similarity model to
+   * use, and a set of parameters for sequence comparison
+   * 
+   * @param sequences
+   * @param sm
+   * @param options
+   */
+  public PCA(AlignmentView sequences, ScoreModelI sm, SimilarityParamsI options)
   {
-    this.seqs = s;
-    this.similarityParams = options;
+    this.seqs = sequences;
     this.scoreModel = sm;
-
-    details.append("PCA calculation using " + sm.getName()
-            + " sequence similarity matrix\n========\n\n");
+    this.similarityParams = options;
   }
 
   /**
@@ -140,49 +149,47 @@ public class PCA implements Runnable
     return out / eigenvector.getD()[n];
   }
 
+  /**
+   * Answers a formatted text report of the PCA calculation results (matrices
+   * and eigenvalues) suitable for display
+   * 
+   * @return
+   */
   public String getDetails()
   {
-    return details.toString();
+    return details;
   }
 
   /**
-   * DOCUMENT ME!
+   * Performs the PCA calculation
    */
   @Override
   public void run()
   {
-    PrintStream ps = new PrintStream(System.out)
-    {
-      @Override
-      public void print(String x)
-      {
-        details.append(x);
-      }
-
-      @Override
-      public void println()
-      {
-        details.append("\n");
-      }
-    };
+    /*
+     * print details to a string buffer as they are computed
+     */
+    StringBuilder sb = new StringBuilder(1024);
+    sb.append("PCA calculation using ").append(scoreModel.getName())
+            .append(" sequence similarity matrix\n========\n\n");
+    PrintStream ps = wrapOutputBuffer(sb);
 
-    // long now = System.currentTimeMillis();
     try
     {
       eigenvector = scoreModel.findSimilarities(seqs, similarityParams);
 
-      details.append(" --- OrigT * Orig ---- \n");
+      sb.append(" --- OrigT * Orig ---- \n");
       eigenvector.print(ps, "%8.2f");
 
       symm = eigenvector.copy();
 
       eigenvector.tred();
 
-      details.append(" ---Tridiag transform matrix ---\n");
-      details.append(" --- D vector ---\n");
+      sb.append(" ---Tridiag transform matrix ---\n");
+      sb.append(" --- D vector ---\n");
       eigenvector.printD(ps, "%15.4e");
       ps.println();
-      details.append("--- E vector ---\n");
+      sb.append("--- E vector ---\n");
       eigenvector.printE(ps, "%15.4e");
       ps.println();
 
@@ -191,25 +198,45 @@ public class PCA implements Runnable
     } catch (Exception q)
     {
       q.printStackTrace();
-      details.append("\n*** Unexpected exception when performing PCA ***\n"
+      sb.append("\n*** Unexpected exception when performing PCA ***\n"
               + q.getLocalizedMessage());
-      details.append(
+      sb.append(
               "*** Matrices below may not be fully diagonalised. ***\n");
     }
 
-    details.append(" --- New diagonalization matrix ---\n");
+    sb.append(" --- New diagonalization matrix ---\n");
     eigenvector.print(ps, "%8.2f");
-    details.append(" --- Eigenvalues ---\n");
+    sb.append(" --- Eigenvalues ---\n");
     eigenvector.printD(ps, "%15.4e");
     ps.println();
-    /*
-     * for (int seq=0;seq<symm.rows;seq++) { ps.print("\"Seq"+seq+"\""); for
-     * (int ev=0;ev<symm.rows; ev++) {
-     * 
-     * ps.print(","+component(seq, ev)); } ps.println(); }
-     */
-    // System.out.println(("PCA.run() took "
-    // + (System.currentTimeMillis() - now) + "ms"));
+
+    details = sb.toString();
+  }
+
+  /**
+   * Returns a PrintStream that wraps (sends its output to) the given
+   * StringBuilder
+   * 
+   * @param sb
+   * @return
+   */
+  protected PrintStream wrapOutputBuffer(StringBuilder sb)
+  {
+    PrintStream ps = new PrintStream(System.out)
+    {
+      @Override
+      public void print(String x)
+      {
+        sb.append(x);
+      }
+
+      @Override
+      public void println()
+      {
+        sb.append("\n");
+      }
+    };
+    return ps;
   }
 
   /**