X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Fanalysis%2FPCA.java;h=4a3cfec1e48fcb11838fede41fd91c254c42e7d5;hb=cb8e52fbbc5f725e3f7f48c672cdddb0690bd978;hp=b3268df9344d4f5b4afc2d20cea9c6c6140f99b9;hpb=b04c79d1a830aa7ae7b88b2a5ddd07c9216c826f;p=jalview.git diff --git a/src/jalview/analysis/PCA.java b/src/jalview/analysis/PCA.java index b3268df..4a3cfec 100755 --- a/src/jalview/analysis/PCA.java +++ b/src/jalview/analysis/PCA.java @@ -22,6 +22,7 @@ package jalview.analysis; import jalview.api.analysis.ScoreModelI; import jalview.api.analysis.SimilarityParamsI; +import jalview.bin.Console; import jalview.datamodel.AlignmentView; import jalview.datamodel.Point; import jalview.math.MatrixI; @@ -47,11 +48,9 @@ public class PCA implements Runnable */ private MatrixI pairwiseScores; - private MatrixI afterTred; + private MatrixI tridiagonal; - private MatrixI eigenvector; - - private String details; + private MatrixI eigenMatrix; /** * Constructor given the sequences to compute for, the similarity model to @@ -78,7 +77,7 @@ public class PCA implements Runnable */ public double getEigenvalue(int i) { - return eigenvector.getD()[i]; + return eigenMatrix.getD()[i]; } /** @@ -147,10 +146,10 @@ public class PCA implements Runnable for (int i = 0; i < pairwiseScores.width(); i++) { - out += (pairwiseScores.getValue(row, i) * eigenvector.getValue(i, n)); + out += (pairwiseScores.getValue(row, i) * eigenMatrix.getValue(i, n)); } - return out / eigenvector.getD()[n]; + return out / eigenMatrix.getD()[n]; } /** @@ -161,32 +160,38 @@ 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); + /* + * pairwise similarity scores + */ sb.append(" --- OrigT * Orig ---- \n"); pairwiseScores.print(ps, "%8.2f"); + /* + * tridiagonal matrix, with D and E vectors + */ sb.append(" ---Tridiag transform matrix ---\n"); sb.append(" --- D vector ---\n"); - afterTred.printD(ps, "%15.4e"); + tridiagonal.printD(ps, "%15.4e"); ps.println(); sb.append("--- E vector ---\n"); - afterTred.printE(ps, "%15.4e"); + tridiagonal.printE(ps, "%15.4e"); ps.println(); + /* + * eigenvalues matrix, with D vector + */ sb.append(" --- New diagonalization matrix ---\n"); - eigenvector.print(ps, "%8.2f"); + eigenMatrix.print(ps, "%8.2f"); sb.append(" --- Eigenvalues ---\n"); - eigenvector.printD(ps, "%15.4e"); + eigenMatrix.printD(ps, "%15.4e"); ps.println(); return sb.toString(); - */ } /** @@ -195,53 +200,29 @@ public class PCA implements Runnable @Override public void run() { - /* - * 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); - try { - eigenvector = scoreModel.findSimilarities(seqs, similarityParams); - - sb.append(" --- OrigT * Orig ---- \n"); - eigenvector.print(ps, "%8.2f"); - - pairwiseScores = eigenvector.copy(); - - eigenvector.tred(); - - afterTred = eigenvector.copy(); - - 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(); - - // Now produce the diagonalization matrix - eigenvector.tqli(); + /* + * sequence pairwise similarity scores + */ + pairwiseScores = scoreModel.findSimilarities(seqs, similarityParams); + + /* + * tridiagonal matrix + */ + tridiagonal = pairwiseScores.copy(); + tridiagonal.tred(); + + /* + * the diagonalization matrix + */ + eigenMatrix = tridiagonal.copy(); + eigenMatrix.tqli(); } catch (Exception q) { + Console.error("Error computing PCA: " + q.getMessage()); q.printStackTrace(); - sb.append("\n*** Unexpected exception when performing PCA ***\n" - + q.getLocalizedMessage()); - sb.append( - "*** Matrices below may not be fully diagonalised. ***\n"); } - - sb.append(" --- New diagonalization matrix ---\n"); - eigenvector.print(ps, "%8.2f"); - sb.append(" --- Eigenvalues ---\n"); - eigenvector.printD(ps, "%15.4e"); - ps.println(); - - details = sb.toString(); } /** @@ -300,16 +281,21 @@ public class PCA implements Runnable public MatrixI getEigenmatrix() { - return eigenvector; + return eigenMatrix; } public void setEigenmatrix(MatrixI m) { - eigenvector = m; + eigenMatrix = m; + } + + public MatrixI getTridiagonal() + { + return tridiagonal; } - public void setDetails(String d) + public void setTridiagonal(MatrixI tridiagonal) { - details = d; + this.tridiagonal = tridiagonal; } }