*/
package jalview.analysis;
-import jalview.analysis.scoremodels.PairwiseDistanceModel;
-import jalview.analysis.scoremodels.ScoreMatrix;
-import jalview.analysis.scoremodels.ScoreModels;
+import jalview.api.analysis.ScoreModelI;
+import jalview.api.analysis.SimilarityParamsI;
+import jalview.datamodel.AlignmentView;
import jalview.math.MatrixI;
import java.io.PrintStream;
*/
public class PCA implements Runnable
{
- boolean jvCalcMode = true;
-
MatrixI symm;
double[] eigenvalue;
StringBuilder details = new StringBuilder(1024);
- private String[] seqs;
-
- private ScoreMatrix scoreMatrix;
+ final private AlignmentView seqs;
- /**
- * Creates a new PCA object. By default, uses blosum62 matrix to generate
- * sequence similarity matrices
- *
- * @param s
- * Set of amino acid sequences to perform PCA on
- */
- public PCA(String[] s)
- {
- this(s, false);
- }
+ private ScoreModelI scoreModel;
- /**
- * Creates a new PCA object. By default, uses blosum62 matrix to generate
- * sequence similarity matrices
- *
- * @param s
- * Set of sequences to perform PCA on
- * @param nucleotides
- * if true, uses standard DNA/RNA matrix for sequence similarity
- * calculation.
- */
- public PCA(String[] s, boolean nucleotides)
- {
- this(s, nucleotides, null);
- }
+ private SimilarityParamsI similarityParams;
- public PCA(String[] s, boolean nucleotides, String s_m)
+ public PCA(AlignmentView s, ScoreModelI sm, SimilarityParamsI options)
{
this.seqs = s;
+ this.similarityParams = options;
+ this.scoreModel = sm;
- scoreMatrix = null;
- String sm = s_m;
- if (sm != null)
- {
- scoreMatrix = (ScoreMatrix) ((PairwiseDistanceModel) ScoreModels
- .getInstance()
- .forName(sm)).getScoreModel();
- }
- if (scoreMatrix == null)
- {
- // either we were given a non-existent score matrix or a scoremodel that
- // isn't based on a pairwise symbol score matrix
- scoreMatrix = ScoreModels.getInstance().getDefaultModel(!nucleotides);
- }
- details.append("PCA calculation using " + sm
+ details.append("PCA calculation using " + sm.getName()
+ " sequence similarity matrix\n========\n\n");
}
// long now = System.currentTimeMillis();
try
{
- details.append("PCA Calculation Mode is "
- + (jvCalcMode ? "Jalview variant" : "Original SeqSpace")
- + "\n");
-
- eigenvector = scoreMatrix.computePairwiseScores(seqs);
+ eigenvector = scoreModel.findSimilarities(seqs, similarityParams);
details.append(" --- OrigT * Orig ---- \n");
eigenvector.print(ps, "%8.2f");
q.printStackTrace();
details.append("\n*** Unexpected exception when performing PCA ***\n"
+ q.getLocalizedMessage());
- details.append("*** Matrices below may not be fully diagonalised. ***\n");
+ details.append(
+ "*** Matrices below may not be fully diagonalised. ***\n");
}
details.append(" --- New diagonalization matrix ---\n");
// + (System.currentTimeMillis() - now) + "ms"));
}
- public void setJvCalcMode(boolean calcMode)
- {
- this.jvCalcMode = calcMode;
- }
-
/**
* Answers the N dimensions of the NxN PCA matrix. This is the number of
* sequences involved in the pairwise score calculation.
public int getHeight()
{
// TODO can any of seqs[] be null?
- return seqs.length;
+ return seqs.getSequences().length;
}
}