X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Fanalysis%2Fscoremodels%2FPIDModel.java;h=721ba456f26198755bd8021ebe81d7a4388ba99e;hb=c70905eb5589c7622a2c7cf8a008ba0863b5c010;hp=a3358aa016a47888b92c4613ba98704676f36118;hpb=613a7a5d1fe2758f0bb620e49eeb87fa45b5458f;p=jalview.git diff --git a/src/jalview/analysis/scoremodels/PIDModel.java b/src/jalview/analysis/scoremodels/PIDModel.java index a3358aa..721ba45 100644 --- a/src/jalview/analysis/scoremodels/PIDModel.java +++ b/src/jalview/analysis/scoremodels/PIDModel.java @@ -1,24 +1,45 @@ package jalview.analysis.scoremodels; +import jalview.api.AlignmentViewPanel; import jalview.api.analysis.PairwiseScoreModelI; +import jalview.api.analysis.ScoreModelI; import jalview.api.analysis.SimilarityParamsI; -import jalview.api.analysis.SimilarityScoreModelI; import jalview.datamodel.AlignmentView; import jalview.math.Matrix; import jalview.math.MatrixI; import jalview.util.Comparison; /** - * A class to provide sequence pairwise similarity based on residue identity + * A class to provide sequence pairwise similarity based on residue identity. + * Instances of this class are immutable and thread-safe, so the same object is + * returned from calls to getInstance(). */ -public class PIDModel implements SimilarityScoreModelI, +public class PIDModel extends SimilarityScoreModel implements PairwiseScoreModelI { + private static final String NAME = "PID"; + + /** + * Constructor + */ + public PIDModel() + { + } @Override public String getName() { - return "% Identity (PID)"; + return NAME; + } + + /** + * Answers null for description. If a display name is needed, use getName() or + * an internationalized string built from the name. + */ + @Override + public String getDescription() + { + return null; } @Override @@ -61,12 +82,43 @@ public class PIDModel implements SimilarityScoreModelI, return c; } + /** + * Computes similarity scores based on pairwise percentage identity of + * sequences. For consistency with Jalview 2.10.1's SeqSpace mode PCA + * calculation, the percentage scores are rescaled to the width of the + * sequences (as if counts of identical residues). This method is thread-safe. + */ @Override public MatrixI findSimilarities(AlignmentView seqData, SimilarityParamsI options) { String[] seqs = seqData.getSequenceStrings(Comparison.GAP_DASH); - return findSimilarities(seqs, options); + + MatrixI result = findSimilarities(seqs, options); + + result.multiply(seqData.getWidth() / 100d); + + return result; + } + + /** + * A distance score is computed in the usual way (by reversing the range of + * the similarity score results), and then rescaled to percentage values + * (reversing the rescaling to count values done in findSimilarities). This + * method is thread-safe. + */ + @Override + public MatrixI findDistances(AlignmentView seqData, + SimilarityParamsI options) + { + MatrixI result = super.findDistances(seqData, options); + + if (seqData.getWidth() != 0) + { + result.multiply(100d / seqData.getWidth()); + } + + return result; } /** @@ -182,4 +234,10 @@ public class PIDModel implements SimilarityScoreModelI, return divideBy == 0 ? 0D : 100D * total / divideBy; } + + @Override + public ScoreModelI getInstance(AlignmentViewPanel avp) + { + return this; + } }