X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;ds=sidebyside;f=src%2Fjalview%2Fschemes%2FScoreMatrix.java;h=d82f54c68dad59cfac976a86ec2c9f6ed2e1eb1b;hb=33984e02c5687dc011d13da4b17cb0815970e0f5;hp=8ef7930a95e24da355446bcb1e73aa7e60fc535c;hpb=b2f9a8d7bce642ff4011bc6d49e02bb0569fbb11;p=jalview.git diff --git a/src/jalview/schemes/ScoreMatrix.java b/src/jalview/schemes/ScoreMatrix.java index 8ef7930..d82f54c 100644 --- a/src/jalview/schemes/ScoreMatrix.java +++ b/src/jalview/schemes/ScoreMatrix.java @@ -1,30 +1,33 @@ /* - * Jalview - A Sequence Alignment Editor and Viewer (Version 2.8.1) - * Copyright (C) 2014 The Jalview Authors + * 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. + * 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 . + * 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.schemes; import jalview.analysis.scoremodels.PairwiseSeqScoreModel; -import jalview.api.analysis.ScoreModelI; +import jalview.math.Matrix; +import jalview.math.MatrixI; -public class ScoreMatrix extends PairwiseSeqScoreModel implements ScoreModelI +public class ScoreMatrix extends PairwiseSeqScoreModel { String name; - + @Override public String getName() { @@ -40,11 +43,15 @@ public class ScoreMatrix extends PairwiseSeqScoreModel implements ScoreModelI * 0 for Protein Score matrix. 1 for dna score matrix */ int type; + /** * - * @param name Unique, human readable name for the matrix - * @param matrix Pairwise scores indexed according to appropriate symbol alphabet - * @param type 0 for Protein, 1 for NA + * @param name + * Unique, human readable name for the matrix + * @param matrix + * Pairwise scores indexed according to appropriate symbol alphabet + * @param type + * 0 for Protein, 1 for NA */ ScoreMatrix(String name, int[][] matrix, int type) { @@ -58,6 +65,7 @@ public class ScoreMatrix extends PairwiseSeqScoreModel implements ScoreModelI { return type == 1; } + @Override public boolean isProtein() { @@ -71,19 +79,21 @@ public class ScoreMatrix extends PairwiseSeqScoreModel implements ScoreModelI } /** + * 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) { return getPairwiseScore(A1.charAt(0), A2.charAt(0)); } + @Override public int getPairwiseScore(char c, char d) { - int pog = 0; + int score = 0; try { @@ -91,19 +101,19 @@ public class ScoreMatrix extends PairwiseSeqScoreModel implements ScoreModelI : ResidueProperties.nucleotideIndex[c]; int b = (type == 0) ? ResidueProperties.aaIndex[d] : ResidueProperties.nucleotideIndex[d]; - - pog = matrix[a][b]; + score = matrix[a][b]; } catch (Exception e) { // System.out.println("Unknown residue in " + A1 + " " + A2); } - return pog; + return score; } /** * pretty print the matrix */ + @Override public String toString() { return outputMatrix(false); @@ -119,7 +129,7 @@ public class ScoreMatrix extends PairwiseSeqScoreModel implements ScoreModelI boolean header = true; if (html) { - sb.append(""); + sb.append("
"); } for (char sym = 'A'; sym <= 'Z'; sym++) { @@ -162,4 +172,47 @@ public class ScoreMatrix extends PairwiseSeqScoreModel implements ScoreModelI } 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); + } }