X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Fanalysis%2FPCA.java;h=5d2e7e735a3bae517501b4d108e8dbd972de573f;hb=7733b7433ee8771d85ccfe2ed32119feac8056e0;hp=738da7d090d7098b5641162ce933e7abd1da3a43;hpb=7f5ab7d1f58d870622968e0e6a430f33403b8e4f;p=jalview.git diff --git a/src/jalview/analysis/PCA.java b/src/jalview/analysis/PCA.java index 738da7d..5d2e7e7 100755 --- a/src/jalview/analysis/PCA.java +++ b/src/jalview/analysis/PCA.java @@ -20,8 +20,10 @@ */ package jalview.analysis; +import jalview.analysis.scoremodels.PIDModel; import jalview.api.analysis.DistanceScoreModelI; import jalview.api.analysis.ScoreModelI; +import jalview.api.analysis.SimilarityParamsI; import jalview.api.analysis.SimilarityScoreModelI; import jalview.datamodel.AlignmentView; import jalview.math.MatrixI; @@ -46,12 +48,15 @@ public class PCA implements Runnable 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"); } @@ -219,8 +224,7 @@ public class PCA implements Runnable * 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. + * compute pairwise distances, and convert these to similarity scores. * * @param av * @return @@ -230,13 +234,26 @@ public class PCA implements Runnable MatrixI result = null; if (scoreModel instanceof SimilarityScoreModelI) { - result = ((SimilarityScoreModelI) scoreModel).findSimilarities(av); + result = ((SimilarityScoreModelI) scoreModel).findSimilarities(av, + similarityParams); + if (scoreModel instanceof PIDModel) + { + /* + * scale % identities to width of alignment for backwards + * compatibility with Jalview 2.10.1 SeqSpace PCA calculation + */ + result.multiply(av.getWidth() / 100d); + } } else if (scoreModel instanceof DistanceScoreModelI) { - result = ((DistanceScoreModelI) scoreModel).findDistances(av); - double maxDistance = result.getMaxValue(); - result.subtractAllFrom(maxDistance); + /* + * find distances and convert to similarity scores + * reverseRange(false) preserves but reverses the min-max range + */ + result = ((DistanceScoreModelI) scoreModel).findDistances(av, + similarityParams); + result.reverseRange(false); } else {