X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Fschemes%2FScoreMatrix.java;h=e2aa232fba0f2e2733b69d651f5e5ce328f6a054;hb=17e77c3f2949a0729322b4a8d907f3f34b6a9914;hp=93415096e204476e1ed20a56903f6c4e5a30c9a6;hpb=b57a02c25e335d033c97f8a6bacd6b54f62bd2b6;p=jalview.git diff --git a/src/jalview/schemes/ScoreMatrix.java b/src/jalview/schemes/ScoreMatrix.java index 9341509..e2aa232 100644 --- a/src/jalview/schemes/ScoreMatrix.java +++ b/src/jalview/schemes/ScoreMatrix.java @@ -1,147 +1,173 @@ -/* - * Jalview - A Sequence Alignment Editor and Viewer (Version 2.7) - * Copyright (C) 2011 J Procter, AM Waterhouse, J Engelhardt, LM Lui, G Barton, M Clamp, S Searle - * - * 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 . - */ -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; - } - - /** - * 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(); - } -} +/* + * 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(); + } +}