X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Fanalysis%2FPCA.java;h=500573223c98c967eede401eac7382c907c9b963;hb=702d861516f9f04118c97f36ae4d4e08017dde68;hp=2e37e6aa738ca66b8481e2a9778aa24f6fa4ca2a;hpb=efc31b4a8d5cee63555586804a2b79c06bdb5a14;p=jalview.git diff --git a/src/jalview/analysis/PCA.java b/src/jalview/analysis/PCA.java index 2e37e6a..5005732 100755 --- a/src/jalview/analysis/PCA.java +++ b/src/jalview/analysis/PCA.java @@ -1,6 +1,6 @@ /* * Jalview - A Sequence Alignment Editor and Viewer -* Copyright (C) 2005 AM Waterhouse, J Procter, G Barton, M Clamp, S Searle +* Copyright (C) 2006 AM Waterhouse, J Procter, G Barton, M Clamp, S Searle * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License @@ -22,11 +22,8 @@ import jalview.datamodel.*; import jalview.math.*; -import jalview.util.*; - import java.io.*; - /** * Performs Principal Component Analysis on given sequences * @@ -40,6 +37,7 @@ public class PCA implements Runnable Matrix m2; double[] eigenvalue; Matrix eigenvector; + StringBuffer details = new StringBuffer(); /** @@ -47,7 +45,7 @@ public class PCA implements Runnable * * @param s Set of sequences to perform PCA on */ - public PCA(SequenceI[] s) + public PCA(String[] s) { BinarySequence[] bs = new BinarySequence[s.length]; @@ -185,6 +183,11 @@ public class PCA implements Runnable return out / eigenvector.d[n]; } + public String getDetails() + { + return details.toString(); + } + /** * DOCUMENT ME! @@ -193,47 +196,43 @@ public class PCA implements Runnable { Matrix mt = m.transpose(); - // System.out.println(" --- OrigT * Orig ---- "); + details.append(" --- OrigT * Orig ---- \n"); eigenvector = mt.preMultiply(m2); - // eigenvector.print(System.out); + PrintStream ps = new PrintStream(System.out) + { + public void print(String x) { + details.append(x); + } + public void println() + { + details.append("\n"); + } + }; + + + eigenvector.print( ps ); + symm = eigenvector.copy(); - //TextArea ta = new TextArea(25,72); - //TextAreaPrintStream taps = new TextAreaPrintStream(System.out,ta); - //Frame f = new Frame("PCA output"); - //f.resize(500,500); - //f.setLayout(new BorderLayout()); - //f.add("Center",ta); - //f.show(); - //symm.print(taps); - long tstart = System.currentTimeMillis(); eigenvector.tred(); - long tend = System.currentTimeMillis(); + details.append(" ---Tridiag transform matrix ---\n"); + details.append(" --- D vector ---\n"); + eigenvector.printD(ps); + ps.println(); + details.append("--- E vector ---\n"); + eigenvector.printE(ps); + ps.println(); - //taps.println("Time take for tred = " + (tend-tstart) + "ms"); - //taps.println(" ---Tridiag transform matrix ---"); - //taps.println(" --- D vector ---"); - //eigenvector.printD(taps); - //taps.println(); - //taps.println(" --- E vector ---"); - // eigenvector.printE(taps); - //taps.println(); // Now produce the diagonalization matrix - tstart = System.currentTimeMillis(); eigenvector.tqli(); - tend = System.currentTimeMillis(); - - //System.out.println("Time take for tqli = " + (tend-tstart) + " ms"); - //System.out.println(" --- New diagonalization matrix ---"); - //System.out.println(" --- Eigenvalues ---"); - //eigenvector.printD(taps); - //System.out.println(); - // for (int i=0; i < eigenvector.cols; i++) { - // checkEigenvector(i,taps); - // taps.println(); - // } + + + details.append(" --- New diagonalization matrix ---\n"); + details.append(" --- Eigenvalues ---\n"); + eigenvector.printD(ps); + ps.println(); // taps.println(); // taps.println("Transformed sequences = "); // Matrix trans = m.preMultiply(eigenvector);