X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Fschemes%2FScoreMatrix.java;h=d82f54c68dad59cfac976a86ec2c9f6ed2e1eb1b;hb=faa3d71f9d120d665870e72b7217ae6b8bd6062d;hp=c47654ab1aedaa7aa415fd18c9171f1b797a3cc4;hpb=07394c1c2d9d4ae05c85cd6d9644e4d17f2818a2;p=jalview.git diff --git a/src/jalview/schemes/ScoreMatrix.java b/src/jalview/schemes/ScoreMatrix.java index c47654a..d82f54c 100644 --- a/src/jalview/schemes/ScoreMatrix.java +++ b/src/jalview/schemes/ScoreMatrix.java @@ -21,6 +21,8 @@ package jalview.schemes; import jalview.analysis.scoremodels.PairwiseSeqScoreModel; +import jalview.math.Matrix; +import jalview.math.MatrixI; public class ScoreMatrix extends PairwiseSeqScoreModel { @@ -77,10 +79,11 @@ public class ScoreMatrix extends PairwiseSeqScoreModel } /** + * Answers the score for substituting first char in A1 with first char in A2 * * @param A1 * @param A2 - * @return score for substituting first char in A1 with first char in A2 + * @return */ public int getPairwiseScore(String A1, String A2) { @@ -90,7 +93,7 @@ public class ScoreMatrix extends PairwiseSeqScoreModel @Override public int getPairwiseScore(char c, char d) { - int pog = 0; + int score = 0; try { @@ -98,41 +101,13 @@ public class ScoreMatrix extends PairwiseSeqScoreModel : ResidueProperties.nucleotideIndex[c]; int b = (type == 0) ? ResidueProperties.aaIndex[d] : ResidueProperties.nucleotideIndex[d]; - - /* - * hack to convert unassigned / unknown (including gap) - * to index of unknown (X for amino acids, N for nucleotide) - * TODO: statically assign gap characters to this index? - */ - if (type == 0) - { - if (a == ResidueProperties.maxProteinIndex) - { - a = ResidueProperties.aaIndex['X']; - } - if (b == ResidueProperties.maxProteinIndex) - { - b = ResidueProperties.aaIndex['X']; - } - } - if (type != 0) - { - if (a == ResidueProperties.maxNucleotideIndex) - { - a = ResidueProperties.nucleotideIndex['N']; - } - if (b == ResidueProperties.maxNucleotideIndex) - { - b = ResidueProperties.nucleotideIndex['N']; - } - } - pog = matrix[a][b]; + score = matrix[a][b]; } catch (Exception e) { // System.out.println("Unknown residue in " + A1 + " " + A2); } - return pog; + return score; } /** @@ -197,4 +172,47 @@ public class ScoreMatrix extends PairwiseSeqScoreModel } return sb.toString(); } + + /** + * Computes an NxN matrix where N is the number of sequences, and entry [i, j] + * is sequence[i] pairwise multiplied with sequence[j], as a sum of scores + * computed using the current score matrix. For example + * + */ + public MatrixI computePairwiseScores(String[] seqs) + { + double[][] values = new double[seqs.length][]; + for (int row = 0; row < seqs.length; row++) + { + values[row] = new double[seqs.length]; + for (int col = 0; col < seqs.length; col++) + { + int total = 0; + int width = Math.min(seqs[row].length(), seqs[col].length()); + for (int i = 0; i < width; i++) + { + char c1 = seqs[row].charAt(i); + char c2 = seqs[col].charAt(i); + int score = getPairwiseScore(c1, c2); + total += score; + } + values[row][col] = total; + } + } + return new Matrix(values); + } }