X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Fschemes%2FScoreMatrix.java;h=e2aa232fba0f2e2733b69d651f5e5ce328f6a054;hb=17e77c3f2949a0729322b4a8d907f3f34b6a9914;hp=03b6778cf32828bef78cdbc71423111c633c6f2a;hpb=a442f71fc61f1b8b41cedd2c2fd78a5c5323bafb;p=jalview.git diff --git a/src/jalview/schemes/ScoreMatrix.java b/src/jalview/schemes/ScoreMatrix.java index 03b6778..e2aa232 100644 --- a/src/jalview/schemes/ScoreMatrix.java +++ b/src/jalview/schemes/ScoreMatrix.java @@ -1,54 +1,173 @@ -package jalview.schemes; - -public class ScoreMatrix { - String name; - /** - * reference to integer score matrix - */ - int[][] matrix; - /** - * 0 for Protein Score matrix. 1 for dna score matrix - */ - int type; - ScoreMatrix(String name, int[][] matrix, int type) { - this.matrix=matrix; - this.type=type; - } - public boolean isDNA() { - return type==1; - } - public boolean isProtein() { - return type==0; - } - public int[][] getMatrix() { - return matrix; - } - /** - * - * @param A1 - * @param A2 - * @return score for substituting first char in A1 with first char in A2 - */ - public int getPairwiseScore(String A1, String A2) - { - return getPairwiseScore(A1.charAt(0),A2.charAt(0)); - } - public int getPairwiseScore(char c, char d) { - int pog = 0; - - try - { - int a = (type==0) ? ResidueProperties.aaIndex[c] : ResidueProperties.nucleotideIndex[c]; - int b = (type==0) ? ResidueProperties.aaIndex[d] : ResidueProperties.nucleotideIndex[d]; - - pog = matrix[a][b]; - } - catch (Exception e) - { - //System.out.println("Unknown residue in " + A1 + " " + A2); - } - - return pog; - } - -} +/* + * Jalview - A Sequence Alignment Editor and Viewer (Version 2.9) + * Copyright (C) 2015 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.schemes; + +import jalview.analysis.scoremodels.PairwiseSeqScoreModel; +import jalview.api.analysis.ScoreModelI; + +public class ScoreMatrix extends PairwiseSeqScoreModel implements + ScoreModelI +{ + String name; + + @Override + public String getName() + { + return name; + } + + /** + * reference to integer score matrix + */ + int[][] matrix; + + /** + * 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 + */ + ScoreMatrix(String name, int[][] matrix, int type) + { + this.matrix = matrix; + this.type = type; + this.name = name; + } + + @Override + public boolean isDNA() + { + return type == 1; + } + + @Override + public boolean isProtein() + { + return type == 0; + } + + @Override + public int[][] getMatrix() + { + return matrix; + } + + /** + * + * @param A1 + * @param A2 + * @return score for substituting first char in A1 with first char in A2 + */ + public int getPairwiseScore(String A1, String A2) + { + return getPairwiseScore(A1.charAt(0), A2.charAt(0)); + } + + public int getPairwiseScore(char c, char d) + { + int pog = 0; + + try + { + int a = (type == 0) ? ResidueProperties.aaIndex[c] + : ResidueProperties.nucleotideIndex[c]; + int b = (type == 0) ? ResidueProperties.aaIndex[d] + : ResidueProperties.nucleotideIndex[d]; + + pog = matrix[a][b]; + } catch (Exception e) + { + // System.out.println("Unknown residue in " + A1 + " " + A2); + } + + return pog; + } + + /** + * pretty print the matrix + */ + public String toString() + { + return outputMatrix(false); + } + + public String outputMatrix(boolean html) + { + StringBuffer sb = new StringBuffer(); + int[] symbols = (type == 0) ? ResidueProperties.aaIndex + : ResidueProperties.nucleotideIndex; + int symMax = (type == 0) ? ResidueProperties.maxProteinIndex + : ResidueProperties.maxNucleotideIndex; + boolean header = true; + if (html) + { + sb.append(""); + } + for (char sym = 'A'; sym <= 'Z'; sym++) + { + if (symbols[sym] >= 0 && symbols[sym] < symMax) + { + if (header) + { + sb.append(html ? "" : ""); + for (char sym2 = 'A'; sym2 <= 'Z'; sym2++) + { + if (symbols[sym2] >= 0 && symbols[sym2] < symMax) + { + sb.append((html ? "" : "")); + } + } + header = false; + sb.append(html ? "\n" : "\n"); + } + if (html) + { + sb.append(""); + } + sb.append((html ? "" : "")); + for (char sym2 = 'A'; sym2 <= 'Z'; sym2++) + { + if (symbols[sym2] >= 0 && symbols[sym2] < symMax) + { + sb.append((html ? "" : "")); + } + } + sb.append(html ? "\n" : "\n"); + } + } + if (html) + { + sb.append("
 " : "\t") + sym2 + + (html ? " 
" : "") + sym + (html ? "" : "\t") + + matrix[symbols[sym]][symbols[sym2]] + + (html ? "
"); + } + return sb.toString(); + } +}