*/
package jalview.analysis;
-import jalview.api.analysis.DistanceScoreModelI;
import jalview.api.analysis.ScoreModelI;
-import jalview.api.analysis.SimilarityScoreModelI;
+import jalview.api.analysis.SimilarityParamsI;
import jalview.datamodel.AlignmentView;
import jalview.math.MatrixI;
*/
public class PCA implements Runnable
{
- boolean jvCalcMode = true;
-
MatrixI symm;
double[] eigenvalue;
StringBuilder details = new StringBuilder(1024);
- private AlignmentView seqs;
+ final private AlignmentView seqs;
private ScoreModelI scoreModel;
+
+ private SimilarityParamsI similarityParams;
- public PCA(AlignmentView s, ScoreModelI sm)
+ public PCA(AlignmentView s, ScoreModelI sm, SimilarityParamsI options)
{
this.seqs = s;
-
- scoreModel = sm;
+ this.similarityParams = options;
+ this.scoreModel = 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 = computeSimilarity(seqs);
+ eigenvector = scoreModel.findSimilarities(seqs, similarityParams);
details.append(" --- OrigT * Orig ---- \n");
eigenvector.print(ps, "%8.2f");
}
/**
- * Computes a pairwise similarity matrix for the given sequence regions using
- * the configured score model. If the score model is a similarity model, then
- * it computes the result directly. If it is a distance model, then use it to
- * compute pairwise distances, and convert these to similarity scores by
- * substracting from the maximum value.
- *
- * @param av
- * @return
- */
- MatrixI computeSimilarity(AlignmentView av)
- {
- MatrixI result = null;
- if (scoreModel instanceof SimilarityScoreModelI)
- {
- result = ((SimilarityScoreModelI) scoreModel).findSimilarities(av);
- }
- else if (scoreModel instanceof DistanceScoreModelI)
- {
- result = ((DistanceScoreModelI) scoreModel).findDistances(av);
- result.reverseRange(true);
- }
- else
- {
- System.err
- .println("Unexpected type of score model, cannot calculate similarity");
- }
-
- return result;
- }
-
- 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.
*