X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Fanalysis%2Fscoremodels%2FPIDModel.java;h=ddfe5e47832613cdace055a45e34bd79c8eda58f;hb=b2eb64f196223039a95348a4026f0453693ee0e7;hp=d537e33059e48e4d40ddd92f3d36516c102ecca7;hpb=aba253e57b22ce7d1f4fe376935e42aeb4f6d591;p=jalview.git diff --git a/src/jalview/analysis/scoremodels/PIDModel.java b/src/jalview/analysis/scoremodels/PIDModel.java index d537e33..ddfe5e4 100644 --- a/src/jalview/analysis/scoremodels/PIDModel.java +++ b/src/jalview/analysis/scoremodels/PIDModel.java @@ -1,6 +1,28 @@ +/* + * Jalview - A Sequence Alignment Editor and Viewer ($$Version-Rel$$) + * Copyright (C) $$Year-Rel$$ The Jalview Authors + * + * This file is part of Jalview. + * + * Jalview is free software: you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation, either version 3 + * of the License, or (at your option) any later version. + * + * Jalview is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty + * of MERCHANTABILITY or FITNESS FOR A PARTICULAR + * PURPOSE. See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Jalview. If not, see . + * The Jalview Authors are detailed in the 'AUTHORS' file. + */ 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.datamodel.AlignmentView; import jalview.math.Matrix; @@ -8,15 +30,15 @@ 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 extends SimilarityScoreModel implements - PairwiseScoreModelI +public class PIDModel extends SimilarityScoreModel + implements PairwiseScoreModelI { private static final String NAME = "PID"; - private String description; - /** * Constructor */ @@ -30,10 +52,14 @@ public class PIDModel extends SimilarityScoreModel implements 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 description; + return null; } @Override @@ -80,7 +106,7 @@ public class PIDModel extends SimilarityScoreModel implements * 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). + * sequences (as if counts of identical residues). This method is thread-safe. */ @Override public MatrixI findSimilarities(AlignmentView seqData, @@ -98,7 +124,8 @@ public class PIDModel extends SimilarityScoreModel implements /** * 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) + * (reversing the rescaling to count values done in findSimilarities). This + * method is thread-safe. */ @Override public MatrixI findDistances(AlignmentView seqData, @@ -125,15 +152,17 @@ public class PIDModel extends SimilarityScoreModel implements protected MatrixI findSimilarities(String[] seqs, SimilarityParamsI options) { - // TODO reuse code in ScoreMatrix instead somehow - double[][] values = new double[seqs.length][]; + /* + * calculation is symmetric so just compute lower diagonal + */ + double[][] values = new double[seqs.length][seqs.length]; for (int row = 0; row < seqs.length; row++) { - values[row] = new double[seqs.length]; - for (int col = 0; col < seqs.length; col++) + for (int col = row; col < seqs.length; col++) { double total = computePID(seqs[row], seqs[col], options); values[row][col] = total; + values[col][row] = total; } } return new Matrix(values); @@ -227,4 +256,10 @@ public class PIDModel extends SimilarityScoreModel implements return divideBy == 0 ? 0D : 100D * total / divideBy; } + + @Override + public ScoreModelI getInstance(AlignmentViewPanel avp) + { + return this; + } }