From a442f71fc61f1b8b41cedd2c2fd78a5c5323bafb Mon Sep 17 00:00:00 2001 From: jprocter Date: Wed, 6 Dec 2006 17:09:21 +0000 Subject: [PATCH] general pairwise substitution score models for pairwise alignments and trees. --- src/jalview/analysis/AlignSeq.java | 1721 ++++++++--------- src/jalview/analysis/NJTree.java | 88 +- src/jalview/appletgui/PairwiseAlignPanel.java | 340 ++-- src/jalview/datamodel/BinarySequence.java | 318 ++-- src/jalview/gui/PairwiseAlignPanel.java | 321 ++-- src/jalview/schemes/ResidueProperties.java | 2462 +++++++++++++------------ src/jalview/schemes/ScoreMatrix.java | 54 + 7 files changed, 2719 insertions(+), 2585 deletions(-) create mode 100644 src/jalview/schemes/ScoreMatrix.java diff --git a/src/jalview/analysis/AlignSeq.java b/src/jalview/analysis/AlignSeq.java index d0c5869..db549a4 100755 --- a/src/jalview/analysis/AlignSeq.java +++ b/src/jalview/analysis/AlignSeq.java @@ -1,844 +1,877 @@ -/* -* Jalview - A Sequence Alignment Editor and Viewer -* Copyright (C) 2006 AM Waterhouse, J Procter, G Barton, M Clamp, S Searle -* -* This program 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 2 -* of the License, or (at your option) any later version. -* -* This program 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 this program; if not, write to the Free Software -* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA -*/ -package jalview.analysis; - -import jalview.datamodel.SequenceI; - -import jalview.schemes.*; - -import jalview.util.*; - -import java.awt.*; - -import java.util.*; - - -/** - * - * - * @author $author$ - * @version $Revision$ - */ -public class AlignSeq -{ - /** DOCUMENT ME!! */ - public static java.util.Hashtable dnaHash = new java.util.Hashtable(); - - static - { - dnaHash.put("C", new Integer(0)); - dnaHash.put("T", new Integer(1)); - dnaHash.put("A", new Integer(2)); - dnaHash.put("G", new Integer(3)); - dnaHash.put("-", new Integer(4)); - } - - static String[] dna = { "C", "T", "A", "G", "-" }; - static String[] pep = - { - "A", "R", "N", "D", "C", "Q", "E", "G", "H", "I", "L", "K", "M", "F", - "P", "S", "T", "W", "Y", "V", "B", "Z", "X", "-" - }; - int[][] score; - int[][] E; - int[][] F; - int[][] traceback; - int[] seq1; - int[] seq2; - SequenceI s1; - SequenceI s2; - public String s1str; - public String s2str; - int maxi; - int maxj; - int[] aseq1; - int[] aseq2; - public String astr1=""; - public String astr2=""; - - /** DOCUMENT ME!! */ - public int seq1start; - - /** DOCUMENT ME!! */ - public int seq1end; - - /** DOCUMENT ME!! */ - public int seq2start; - - /** DOCUMENT ME!! */ - public int seq2end; - int count; - - /** DOCUMENT ME!! */ - public int maxscore; - float pid; - int prev = 0; - int gapOpen = 120; - int gapExtend = 20; - int[][] lookup = ResidueProperties.getBLOSUM62(); - String[] intToStr = pep; - int defInt = 23; - StringBuffer output = new StringBuffer(); - String type; - - /** - * Creates a new AlignSeq object. - * - * @param s1 DOCUMENT ME! - * @param s2 DOCUMENT ME! - * @param type DOCUMENT ME! - */ - public AlignSeq(SequenceI s1, SequenceI s2, String type) - { - SeqInit(s1, s1.getSequenceAsString(), s2, s2.getSequenceAsString(), type); - } - - /** - * Creates a new AlignSeq object. - * - * @param s1 DOCUMENT ME! - * @param s2 DOCUMENT ME! - * @param type DOCUMENT ME! - */ - public AlignSeq(SequenceI s1, - String string1, - SequenceI s2, - String string2, - String type) - { - SeqInit(s1, string1, s2, string2, type); - } - - /** - * DOCUMENT ME! - * - * @return DOCUMENT ME! - */ - public int getMaxScore() - { - return maxscore; - } - - /** - * DOCUMENT ME! - * - * @return DOCUMENT ME! - */ - public int getSeq2Start() - { - return seq2start; - } - - /** - * DOCUMENT ME! - * - * @return DOCUMENT ME! - */ - public int getSeq2End() - { - return seq2end; - } - - /** - * DOCUMENT ME! - * - * @return DOCUMENT ME! - */ - public int getSeq1Start() - { - return seq1start; - } - - /** - * DOCUMENT ME! - * - * @return DOCUMENT ME! - */ - public int getSeq1End() - { - return seq1end; - } - - /** - * DOCUMENT ME! - * - * @return DOCUMENT ME! - */ - public String getOutput() - { - return output.toString(); - } - - /** - * DOCUMENT ME! - * - * @return DOCUMENT ME! - */ - public String getAStr1() - { - return astr1; - } - - /** - * DOCUMENT ME! - * - * @return DOCUMENT ME! - */ - public String getAStr2() - { - return astr2; - } - - /** - * DOCUMENT ME! - * - * @return DOCUMENT ME! - */ - public int[] getASeq1() - { - return aseq1; - } - - /** - * DOCUMENT ME! - * - * @return DOCUMENT ME! - */ - public int[] getASeq2() - { - return aseq2; - } - - /** - * DOCUMENT ME! - * - * @return DOCUMENT ME! - */ - public SequenceI getS1() - { - return s1; - } - - /** - * DOCUMENT ME! - * - * @return DOCUMENT ME! - */ - public SequenceI getS2() - { - return s2; - } - - /** - * DOCUMENT ME! - * - * @param s1 DOCUMENT ME! - * @param s2 DOCUMENT ME! - * @param type DOCUMENT ME! - */ - public void SeqInit(SequenceI s1, - String string1, - SequenceI s2, - String string2, - String type) - { - - s1str = extractGaps(jalview.util.Comparison.GapChars, string1); - s2str = extractGaps(jalview.util.Comparison.GapChars, string2); - - if(s1str.length()==0 || s2str.length()==0) - { - System.out.println("ALL GAPS: " + - (s1str.length()==0?s1.getName():" ") - +(s2str.length()==0?s2.getName():"")); - return; - } - - this.s1 = s1; - this.s2 = s2; - - this.type = type; - - if (type.equals("pep")) - { - lookup = ResidueProperties.getBLOSUM62(); - intToStr = pep; - defInt = 23; - } - else if (type.equals("dna")) - { - lookup = ResidueProperties.getDNA(); - intToStr = dna; - defInt = 4; - } - else - { - output.append("Wrong type = dna or pep only"); - System.exit(0); - } - - //System.out.println("lookuip " + rt.freeMemory() + " "+ rt.totalMemory()); - seq1 = new int[s1str.length()]; - - //System.out.println("seq1 " + rt.freeMemory() +" " + rt.totalMemory()); - seq2 = new int[s2str.length()]; - - //System.out.println("seq2 " + rt.freeMemory() + " " + rt.totalMemory()); - score = new int[s1str.length()][s2str.length()]; - - //System.out.println("score " + rt.freeMemory() + " " + rt.totalMemory()); - E = new int[s1str.length()][s2str.length()]; - - //System.out.println("E " + rt.freeMemory() + " " + rt.totalMemory()); - F = new int[s1str.length()][s2str.length()]; - traceback = new int[s1str.length()][s2str.length()]; - - //System.out.println("F " + rt.freeMemory() + " " + rt.totalMemory()); - seq1 = stringToInt(s1str, type); - - //System.out.println("seq1 " + rt.freeMemory() + " " + rt.totalMemory()); - seq2 = stringToInt(s2str, type); - - //System.out.println("Seq2 " + rt.freeMemory() + " " + rt.totalMemory()); - // long tstart = System.currentTimeMillis(); - // calcScoreMatrix(); - //long tend = System.currentTimeMillis(); - //System.out.println("Time take to calculate score matrix = " + (tend-tstart) + " ms"); - // printScoreMatrix(score); - //System.out.println(); - //printScoreMatrix(traceback); - //System.out.println(); - // printScoreMatrix(E); - //System.out.println(); - ///printScoreMatrix(F); - //System.out.println(); - // tstart = System.currentTimeMillis(); - //traceAlignment(); - //tend = System.currentTimeMillis(); - //System.out.println("Time take to traceback alignment = " + (tend-tstart) + " ms"); - } - - /** - * DOCUMENT ME! - */ - public void traceAlignment() - { - // Find the maximum score along the rhs or bottom row - int max = -9999; - - for (int i = 0; i < seq1.length; i++) - { - if (score[i][seq2.length - 1] > max) - { - max = score[i][seq2.length - 1]; - maxi = i; - maxj = seq2.length - 1; - } - } - - for (int j = 0; j < seq2.length; j++) - { - if (score[seq1.length - 1][j] > max) - { - max = score[seq1.length - 1][j]; - maxi = seq1.length - 1; - maxj = j; - } - } - - // System.out.println(maxi + " " + maxj + " " + score[maxi][maxj]); - int i = maxi; - int j = maxj; - int trace; - maxscore = score[i][j] / 10; - - seq1end = maxi + 1; - seq2end = maxj + 1; - - aseq1 = new int[seq1.length + seq2.length]; - aseq2 = new int[seq1.length + seq2.length]; - - count = (seq1.length + seq2.length) - 1; - - while ((i > 0) && (j > 0)) - { - if ((aseq1[count] != defInt) && (i >= 0)) - { - aseq1[count] = seq1[i]; - astr1 = intToStr[seq1[i]] + astr1; - } - - if ((aseq2[count] != defInt) && (j > 0)) - { - aseq2[count] = seq2[j]; - astr2 = intToStr[seq2[j]] + astr2; - } - - trace = findTrace(i, j); - - if (trace == 0) - { - i--; - j--; - } - else if (trace == 1) - { - j--; - aseq1[count] = defInt; - astr1 = "-" + astr1.substring(1); - } - else if (trace == -1) - { - i--; - aseq2[count] = defInt; - astr2 = "-" + astr2.substring(1); - } - - count--; - } - - seq1start = i + 1; - seq2start = j + 1; - - if (aseq1[count] != defInt) - { - aseq1[count] = seq1[i]; - astr1 = intToStr[seq1[i]] + astr1; - } - - if (aseq2[count] != defInt) - { - aseq2[count] = seq2[j]; - astr2 = intToStr[seq2[j]] + astr2; - } - } - - /** - * DOCUMENT ME! - */ - public void printAlignment(java.io.PrintStream os) - { - // Find the biggest id length for formatting purposes - int maxid = s1.getName().length(); - - if (s2.getName().length() > maxid) - { - maxid = s2.getName().length(); - } - - int len = 72 - maxid - 1; - int nochunks = ((aseq1.length - count) / len) + 1; - pid = 0; - - output.append("Score = " + score[maxi][maxj] + "\n"); - output.append("Length of alignment = " + (aseq1.length - count) + "\n"); - output.append("Sequence "); - output.append(new Format("%" + maxid + "s").form(s1.getName())); - output.append(" : " + s1.getStart() + " - " + s1.getEnd() + " (Sequence length = " + - s1str.length() + ")\n"); - output .append("Sequence "); - output.append(new Format("%" + maxid + "s").form(s2.getName())); - output.append(" : " + s2.getStart() + " - " + s2.getEnd() + " (Sequence length = " + - s2str.length() + ")\n\n"); - - for (int j = 0; j < nochunks; j++) - { - // Print the first aligned sequence - output.append(new Format("%" + (maxid) + "s").form(s1.getName()) + " "); - - for (int i = 0; i < len; i++) - { - if ((count + i + (j * len)) < aseq1.length) - { - output.append(new Format("%s").form(intToStr[aseq1[count + i + - (j * len)]])); - } - } - - output.append("\n"); - output.append(new Format("%" + (maxid) + "s").form(" ") + " "); - - // Print out the matching chars - for (int i = 0; i < len; i++) - { - if ((count + i + (j * len)) < aseq1.length) - { - if (intToStr[aseq1[count + i + (j * len)]].equals( - intToStr[aseq2[count + i + (j * len)]]) && - !intToStr[aseq1[count + i + (j * len)]].equals("-")) - { - pid++; - output.append("|"); - } - else if (type.equals("pep")) - { - if (ResidueProperties.getPAM250( - intToStr[aseq1[count + i + (j * len)]], - intToStr[aseq2[count + i + (j * len)]]) > 0) - { - output.append("."); - } - else - { - output.append(" "); - } - } - else - { - output.append(" "); - } - } - } - - // Now print the second aligned sequence - output = output.append("\n"); - output = output.append(new Format("%" + (maxid) + "s").form(s2.getName()) + " "); - - for (int i = 0; i < len; i++) - { - if ((count + i + (j * len)) < aseq1.length) - { - output .append(new Format("%s").form(intToStr[aseq2[count + i + - (j * len)]])); - } - } - - output = output .append("\n\n"); - } - - pid = pid / (float) (aseq1.length - count) * 100; - output = output.append(new Format("Percentage ID = %2.2f\n\n").form(pid)); - - try{ - os.print(output.toString()); - }catch(Exception ex){} - } - - /** - * DOCUMENT ME! - * - * @param mat DOCUMENT ME! - */ - public void printScoreMatrix(int[][] mat) - { - int n = seq1.length; - int m = seq2.length; - - for (int i = 0; i < n; i++) - { - // Print the top sequence - if (i == 0) - { - Format.print(System.out, "%8s", s2str.substring(0, 1)); - - for (int jj = 1; jj < m; jj++) - { - Format.print(System.out, "%5s", s2str.substring(jj, jj + 1)); - } - - System.out.println(); - } - - for (int j = 0; j < m; j++) - { - if (j == 0) - { - Format.print(System.out, "%3s", s1str.substring(i, i + 1)); - } - - Format.print(System.out, "%3d ", mat[i][j] / 10); - } - - System.out.println(); - } - } - - /** - * DOCUMENT ME! - * - * @param i DOCUMENT ME! - * @param j DOCUMENT ME! - * - * @return DOCUMENT ME! - */ - public int findTrace(int i, int j) - { - int t = 0; - int max = score[i - 1][j - 1] + (lookup[seq1[i]][seq2[j]] * 10); - - if (F[i][j] > max) - { - max = F[i][j]; - t = -1; - } - else if (F[i][j] == max) - { - if (prev == -1) - { - max = F[i][j]; - t = -1; - } - } - - if (E[i][j] >= max) - { - max = E[i][j]; - t = 1; - } - else if (E[i][j] == max) - { - if (prev == 1) - { - max = E[i][j]; - t = 1; - } - } - - prev = t; - - return t; - } - - /** - * DOCUMENT ME! - */ - public void calcScoreMatrix() - { - int n = seq1.length; - int m = seq2.length; - - // top left hand element - score[0][0] = lookup[seq1[0]][seq2[0]] * 10; - E[0][0] = -gapExtend; - F[0][0] = 0; - - // Calculate the top row first - for (int j = 1; j < m; j++) - { - // What should these values be? 0 maybe - E[0][j] = max(score[0][j - 1] - gapOpen, E[0][j - 1] - gapExtend); - F[0][j] = -gapExtend; - - score[0][j] = max(lookup[seq1[0]][seq2[j]] * 10, -gapOpen, - -gapExtend); - - traceback[0][j] = 1; - } - - // Now do the left hand column - for (int i = 1; i < n; i++) - { - E[i][0] = -gapOpen; - F[i][0] = max(score[i - 1][0] - gapOpen, F[i - 1][0] - gapExtend); - - score[i][0] = max(lookup[seq1[i]][seq2[0]] * 10, E[i][0], F[i][0]); - traceback[i][0] = -1; - } - - // Now do all the other rows - for (int i = 1; i < n; i++) - { - for (int j = 1; j < m; j++) - { - E[i][j] = max(score[i][j - 1] - gapOpen, E[i][j - 1] - - gapExtend); - F[i][j] = max(score[i - 1][j] - gapOpen, F[i - 1][j] - - gapExtend); - - score[i][j] = max(score[i - 1][j - 1] + - (lookup[seq1[i]][seq2[j]] * 10), E[i][j], F[i][j]); - traceback[i][j] = findTrace(i, j); - } - } - } - - - - /** - * DOCUMENT ME! - * - * @param gapChar DOCUMENT ME! - * @param seq DOCUMENT ME! - * - * @return DOCUMENT ME! - */ - public static String extractGaps(String gapChar, String seq) - { - StringTokenizer str = new StringTokenizer(seq, gapChar); - StringBuffer newString = new StringBuffer(); - - while (str.hasMoreTokens()) - { - newString.append( str.nextToken() ); - } - - return newString.toString(); - } - - /** - * DOCUMENT ME! - * - * @param i1 DOCUMENT ME! - * @param i2 DOCUMENT ME! - * @param i3 DOCUMENT ME! - * - * @return DOCUMENT ME! - */ - public int max(int i1, int i2, int i3) - { - int max = i1; - - if (i2 > i1) - { - max = i2; - } - - if (i3 > max) - { - max = i3; - } - - return max; - } - - /** - * DOCUMENT ME! - * - * @param i1 DOCUMENT ME! - * @param i2 DOCUMENT ME! - * - * @return DOCUMENT ME! - */ - public int max(int i1, int i2) - { - int max = i1; - - if (i2 > i1) - { - max = i2; - } - - return max; - } - - /** - * DOCUMENT ME! - * - * @param s DOCUMENT ME! - * @param type DOCUMENT ME! - * - * @return DOCUMENT ME! - */ - public int[] stringToInt(String s, String type) - { - int[] seq1 = new int[s.length()]; - - for (int i = 0; i < s.length(); i++) - { - // String ss = s.substring(i, i + 1).toUpperCase(); - char c = s.charAt(i); - if ('a' <= c && c <= 'z') - { - // TO UPPERCASE !!! - c -= ('a' - 'A'); - } - - - try - { - if (type.equals("pep")) - { - seq1[i] = ResidueProperties.aaIndex[c]; - } - else if (type.equals("dna")) - { - seq1[i] = ResidueProperties.nucleotideIndex[c]; - } - - if (seq1[i] > 23) - { - seq1[i] = 23; - } - } - catch (Exception e) - { - if (type.equals("dna")) - { - seq1[i] = 4; - } - else - { - seq1[i] = 23; - } - } - } - - return seq1; - } - - /** - * DOCUMENT ME! - * - * @param g DOCUMENT ME! - * @param mat DOCUMENT ME! - * @param n DOCUMENT ME! - * @param m DOCUMENT ME! - * @param psize DOCUMENT ME! - */ - public static void displayMatrix(Graphics g, int[][] mat, int n, int m, - int psize) - { - int max = -1000; - int min = 1000; - - for (int i = 0; i < n; i++) - { - for (int j = 0; j < m; j++) - { - if (mat[i][j] >= max) - { - max = mat[i][j]; - } - - if (mat[i][j] <= min) - { - min = mat[i][j]; - } - } - } - - System.out.println(max + " " + min); - - for (int i = 0; i < n; i++) - { - for (int j = 0; j < m; j++) - { - int x = psize * i; - int y = psize * j; - - // System.out.println(mat[i][j]); - float score = (float) (mat[i][j] - min) / (float) (max - min); - g.setColor(new Color(score, 0, 0)); - g.fillRect(x, y, psize, psize); - - // System.out.println(x + " " + y + " " + score); - } - } - } -} +/* +* Jalview - A Sequence Alignment Editor and Viewer +* Copyright (C) 2006 AM Waterhouse, J Procter, G Barton, M Clamp, S Searle +* +* This program 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 2 +* of the License, or (at your option) any later version. +* +* This program 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 this program; if not, write to the Free Software +* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA +*/ +package jalview.analysis; + +import jalview.datamodel.SequenceI; + +import jalview.schemes.*; + +import jalview.util.*; + +import java.awt.*; + +import java.util.*; + + +/** + * + * + * @author $author$ + * @version $Revision$ + */ +public class AlignSeq +{ + public static final String PEP = "pep"; + public static final String DNA = "dna"; + /** DOCUMENT ME!! */ + public static java.util.Hashtable dnaHash = new java.util.Hashtable(); + + static + { + dnaHash.put("C", new Integer(0)); + dnaHash.put("T", new Integer(1)); + dnaHash.put("A", new Integer(2)); + dnaHash.put("G", new Integer(3)); + dnaHash.put("-", new Integer(4)); + } + + static String[] dna = { "C", "T", "A", "G", "-" }; + static String[] pep = + { + "A", "R", "N", "D", "C", "Q", "E", "G", "H", "I", "L", "K", "M", "F", + "P", "S", "T", "W", "Y", "V", "B", "Z", "X", "-" + }; + int[][] score; + int[][] E; + int[][] F; + int[][] traceback; + int[] seq1; + int[] seq2; + SequenceI s1; + SequenceI s2; + public String s1str; + public String s2str; + int maxi; + int maxj; + int[] aseq1; + int[] aseq2; + public String astr1=""; + public String astr2=""; + + /** DOCUMENT ME!! */ + public int seq1start; + + /** DOCUMENT ME!! */ + public int seq1end; + + /** DOCUMENT ME!! */ + public int seq2start; + + /** DOCUMENT ME!! */ + public int seq2end; + int count; + + /** DOCUMENT ME!! */ + public int maxscore; + float pid; + int prev = 0; + int gapOpen = 120; + int gapExtend = 20; + int[][] lookup = ResidueProperties.getBLOSUM62(); + String[] intToStr = pep; + int defInt = 23; + StringBuffer output = new StringBuffer(); + String type; + + /** + * Creates a new AlignSeq object. + * + * @param s1 DOCUMENT ME! + * @param s2 DOCUMENT ME! + * @param type DOCUMENT ME! + */ + public AlignSeq(SequenceI s1, SequenceI s2, String type) + { + SeqInit(s1, s1.getSequenceAsString(), s2, s2.getSequenceAsString(), type); + } + + /** + * Creates a new AlignSeq object. + * + * @param s1 DOCUMENT ME! + * @param s2 DOCUMENT ME! + * @param type DOCUMENT ME! + */ + public AlignSeq(SequenceI s1, + String string1, + SequenceI s2, + String string2, + String type) + { + SeqInit(s1, string1, s2, string2, type); + } + + /** + * DOCUMENT ME! + * + * @return DOCUMENT ME! + */ + public int getMaxScore() + { + return maxscore; + } + + /** + * DOCUMENT ME! + * + * @return DOCUMENT ME! + */ + public int getSeq2Start() + { + return seq2start; + } + + /** + * DOCUMENT ME! + * + * @return DOCUMENT ME! + */ + public int getSeq2End() + { + return seq2end; + } + + /** + * DOCUMENT ME! + * + * @return DOCUMENT ME! + */ + public int getSeq1Start() + { + return seq1start; + } + + /** + * DOCUMENT ME! + * + * @return DOCUMENT ME! + */ + public int getSeq1End() + { + return seq1end; + } + + /** + * DOCUMENT ME! + * + * @return DOCUMENT ME! + */ + public String getOutput() + { + return output.toString(); + } + + /** + * DOCUMENT ME! + * + * @return DOCUMENT ME! + */ + public String getAStr1() + { + return astr1; + } + + /** + * DOCUMENT ME! + * + * @return DOCUMENT ME! + */ + public String getAStr2() + { + return astr2; + } + + /** + * DOCUMENT ME! + * + * @return DOCUMENT ME! + */ + public int[] getASeq1() + { + return aseq1; + } + + /** + * DOCUMENT ME! + * + * @return DOCUMENT ME! + */ + public int[] getASeq2() + { + return aseq2; + } + + /** + * DOCUMENT ME! + * + * @return DOCUMENT ME! + */ + public SequenceI getS1() + { + return s1; + } + + /** + * DOCUMENT ME! + * + * @return DOCUMENT ME! + */ + public SequenceI getS2() + { + return s2; + } + + /** + * DOCUMENT ME! + * + * @param s1 DOCUMENT ME! + * @param string1 - string to align for sequence1 + * @param s2 sequence 2 + * @param string2 - string to align for sequence2 + * @param type DNA or PEPTIDE + */ + public void SeqInit(SequenceI s1, + String string1, + SequenceI s2, + String string2, + String type) + { + this.s1 = s1; + this.s2 = s2; + setDefaultParams(type); + SeqInit(string1,string2); + } + public void SeqInit(SequenceI s1, + String string1, + SequenceI s2, + String string2, + ScoreMatrix scoreMatrix) { + this.s1=s1; + this.s2=s2; + setType(scoreMatrix.isDNA() ? AlignSeq.DNA : AlignSeq.PEP); + lookup=scoreMatrix.getMatrix(); + } + /** + * construct score matrix for string1 and string2 (after removing any existing gaps + * @param string1 + * @param string2 + */ + private void SeqInit(String string1, String string2) { + s1str = extractGaps(jalview.util.Comparison.GapChars, string1); + s2str = extractGaps(jalview.util.Comparison.GapChars, string2); + + if(s1str.length()==0 || s2str.length()==0) + { + output.append("ALL GAPS: " + + (s1str.length()==0?s1.getName():" ") + +(s2str.length()==0?s2.getName():"")); + return; + } + + //System.out.println("lookuip " + rt.freeMemory() + " "+ rt.totalMemory()); + seq1 = new int[s1str.length()]; + + //System.out.println("seq1 " + rt.freeMemory() +" " + rt.totalMemory()); + seq2 = new int[s2str.length()]; + + //System.out.println("seq2 " + rt.freeMemory() + " " + rt.totalMemory()); + score = new int[s1str.length()][s2str.length()]; + + //System.out.println("score " + rt.freeMemory() + " " + rt.totalMemory()); + E = new int[s1str.length()][s2str.length()]; + + //System.out.println("E " + rt.freeMemory() + " " + rt.totalMemory()); + F = new int[s1str.length()][s2str.length()]; + traceback = new int[s1str.length()][s2str.length()]; + + //System.out.println("F " + rt.freeMemory() + " " + rt.totalMemory()); + seq1 = stringToInt(s1str, type); + + //System.out.println("seq1 " + rt.freeMemory() + " " + rt.totalMemory()); + seq2 = stringToInt(s2str, type); + + //System.out.println("Seq2 " + rt.freeMemory() + " " + rt.totalMemory()); + // long tstart = System.currentTimeMillis(); + // calcScoreMatrix(); + //long tend = System.currentTimeMillis(); + //System.out.println("Time take to calculate score matrix = " + (tend-tstart) + " ms"); + // printScoreMatrix(score); + //System.out.println(); + //printScoreMatrix(traceback); + //System.out.println(); + // printScoreMatrix(E); + //System.out.println(); + ///printScoreMatrix(F); + //System.out.println(); + // tstart = System.currentTimeMillis(); + //traceAlignment(); + //tend = System.currentTimeMillis(); + //System.out.println("Time take to traceback alignment = " + (tend-tstart) + " ms"); + } + + private void setDefaultParams(String type) { + setType(type); + + if (type.equals(AlignSeq.PEP)) + { + lookup = ResidueProperties.getDefaultPeptideMatrix(); + } + else if (type.equals(AlignSeq.DNA)) + { + lookup = ResidueProperties.getDefaultDnaMatrix(); + } + } + + private void setType(String type2) { + this.type = type2; + if (type.equals(AlignSeq.PEP)) + { + intToStr = pep; + defInt = 23; + } + else if (type.equals(AlignSeq.DNA)) + { + intToStr = dna; + defInt = 4; + } + else + { + output.append("Wrong type = dna or pep only"); + throw new Error("Unknown Type "+type2+" - dna or pep are the only allowed values."); + } + } + + /** + * DOCUMENT ME! + */ + public void traceAlignment() + { + // Find the maximum score along the rhs or bottom row + int max = -9999; + + for (int i = 0; i < seq1.length; i++) + { + if (score[i][seq2.length - 1] > max) + { + max = score[i][seq2.length - 1]; + maxi = i; + maxj = seq2.length - 1; + } + } + + for (int j = 0; j < seq2.length; j++) + { + if (score[seq1.length - 1][j] > max) + { + max = score[seq1.length - 1][j]; + maxi = seq1.length - 1; + maxj = j; + } + } + + // System.out.println(maxi + " " + maxj + " " + score[maxi][maxj]); + int i = maxi; + int j = maxj; + int trace; + maxscore = score[i][j] / 10; + + seq1end = maxi + 1; + seq2end = maxj + 1; + + aseq1 = new int[seq1.length + seq2.length]; + aseq2 = new int[seq1.length + seq2.length]; + + count = (seq1.length + seq2.length) - 1; + + while ((i > 0) && (j > 0)) + { + if ((aseq1[count] != defInt) && (i >= 0)) + { + aseq1[count] = seq1[i]; + astr1 = intToStr[seq1[i]] + astr1; + } + + if ((aseq2[count] != defInt) && (j > 0)) + { + aseq2[count] = seq2[j]; + astr2 = intToStr[seq2[j]] + astr2; + } + + trace = findTrace(i, j); + + if (trace == 0) + { + i--; + j--; + } + else if (trace == 1) + { + j--; + aseq1[count] = defInt; + astr1 = "-" + astr1.substring(1); + } + else if (trace == -1) + { + i--; + aseq2[count] = defInt; + astr2 = "-" + astr2.substring(1); + } + + count--; + } + + seq1start = i + 1; + seq2start = j + 1; + + if (aseq1[count] != defInt) + { + aseq1[count] = seq1[i]; + astr1 = intToStr[seq1[i]] + astr1; + } + + if (aseq2[count] != defInt) + { + aseq2[count] = seq2[j]; + astr2 = intToStr[seq2[j]] + astr2; + } + } + + /** + * DOCUMENT ME! + */ + public void printAlignment(java.io.PrintStream os) + { + // Find the biggest id length for formatting purposes + int maxid = s1.getName().length(); + + if (s2.getName().length() > maxid) + { + maxid = s2.getName().length(); + } + + int len = 72 - maxid - 1; + int nochunks = ((aseq1.length - count) / len) + 1; + pid = 0; + + output.append("Score = " + score[maxi][maxj] + "\n"); + output.append("Length of alignment = " + (aseq1.length - count) + "\n"); + output.append("Sequence "); + output.append(new Format("%" + maxid + "s").form(s1.getName())); + output.append(" : " + s1.getStart() + " - " + s1.getEnd() + " (Sequence length = " + + s1str.length() + ")\n"); + output .append("Sequence "); + output.append(new Format("%" + maxid + "s").form(s2.getName())); + output.append(" : " + s2.getStart() + " - " + s2.getEnd() + " (Sequence length = " + + s2str.length() + ")\n\n"); + + for (int j = 0; j < nochunks; j++) + { + // Print the first aligned sequence + output.append(new Format("%" + (maxid) + "s").form(s1.getName()) + " "); + + for (int i = 0; i < len; i++) + { + if ((count + i + (j * len)) < aseq1.length) + { + output.append(new Format("%s").form(intToStr[aseq1[count + i + + (j * len)]])); + } + } + + output.append("\n"); + output.append(new Format("%" + (maxid) + "s").form(" ") + " "); + + // Print out the matching chars + for (int i = 0; i < len; i++) + { + if ((count + i + (j * len)) < aseq1.length) + { + if (intToStr[aseq1[count + i + (j * len)]].equals( + intToStr[aseq2[count + i + (j * len)]]) && + !intToStr[aseq1[count + i + (j * len)]].equals("-")) + { + pid++; + output.append("|"); + } + else if (type.equals("pep")) + { + if (ResidueProperties.getPAM250( + intToStr[aseq1[count + i + (j * len)]], + intToStr[aseq2[count + i + (j * len)]]) > 0) + { + output.append("."); + } + else + { + output.append(" "); + } + } + else + { + output.append(" "); + } + } + } + + // Now print the second aligned sequence + output = output.append("\n"); + output = output.append(new Format("%" + (maxid) + "s").form(s2.getName()) + " "); + + for (int i = 0; i < len; i++) + { + if ((count + i + (j * len)) < aseq1.length) + { + output .append(new Format("%s").form(intToStr[aseq2[count + i + + (j * len)]])); + } + } + + output = output .append("\n\n"); + } + + pid = pid / (float) (aseq1.length - count) * 100; + output = output.append(new Format("Percentage ID = %2.2f\n\n").form(pid)); + + try{ + os.print(output.toString()); + }catch(Exception ex){} + } + + /** + * DOCUMENT ME! + * + * @param mat DOCUMENT ME! + */ + public void printScoreMatrix(int[][] mat) + { + int n = seq1.length; + int m = seq2.length; + + for (int i = 0; i < n; i++) + { + // Print the top sequence + if (i == 0) + { + Format.print(System.out, "%8s", s2str.substring(0, 1)); + + for (int jj = 1; jj < m; jj++) + { + Format.print(System.out, "%5s", s2str.substring(jj, jj + 1)); + } + + System.out.println(); + } + + for (int j = 0; j < m; j++) + { + if (j == 0) + { + Format.print(System.out, "%3s", s1str.substring(i, i + 1)); + } + + Format.print(System.out, "%3d ", mat[i][j] / 10); + } + + System.out.println(); + } + } + + /** + * DOCUMENT ME! + * + * @param i DOCUMENT ME! + * @param j DOCUMENT ME! + * + * @return DOCUMENT ME! + */ + public int findTrace(int i, int j) + { + int t = 0; + int max = score[i - 1][j - 1] + (lookup[seq1[i]][seq2[j]] * 10); + + if (F[i][j] > max) + { + max = F[i][j]; + t = -1; + } + else if (F[i][j] == max) + { + if (prev == -1) + { + max = F[i][j]; + t = -1; + } + } + + if (E[i][j] >= max) + { + max = E[i][j]; + t = 1; + } + else if (E[i][j] == max) + { + if (prev == 1) + { + max = E[i][j]; + t = 1; + } + } + + prev = t; + + return t; + } + + /** + * DOCUMENT ME! + */ + public void calcScoreMatrix() + { + int n = seq1.length; + int m = seq2.length; + + // top left hand element + score[0][0] = lookup[seq1[0]][seq2[0]] * 10; + E[0][0] = -gapExtend; + F[0][0] = 0; + + // Calculate the top row first + for (int j = 1; j < m; j++) + { + // What should these values be? 0 maybe + E[0][j] = max(score[0][j - 1] - gapOpen, E[0][j - 1] - gapExtend); + F[0][j] = -gapExtend; + + score[0][j] = max(lookup[seq1[0]][seq2[j]] * 10, -gapOpen, + -gapExtend); + + traceback[0][j] = 1; + } + + // Now do the left hand column + for (int i = 1; i < n; i++) + { + E[i][0] = -gapOpen; + F[i][0] = max(score[i - 1][0] - gapOpen, F[i - 1][0] - gapExtend); + + score[i][0] = max(lookup[seq1[i]][seq2[0]] * 10, E[i][0], F[i][0]); + traceback[i][0] = -1; + } + + // Now do all the other rows + for (int i = 1; i < n; i++) + { + for (int j = 1; j < m; j++) + { + E[i][j] = max(score[i][j - 1] - gapOpen, E[i][j - 1] - + gapExtend); + F[i][j] = max(score[i - 1][j] - gapOpen, F[i - 1][j] - + gapExtend); + + score[i][j] = max(score[i - 1][j - 1] + + (lookup[seq1[i]][seq2[j]] * 10), E[i][j], F[i][j]); + traceback[i][j] = findTrace(i, j); + } + } + } + + + + /** + * DOCUMENT ME! + * + * @param gapChar DOCUMENT ME! + * @param seq DOCUMENT ME! + * + * @return DOCUMENT ME! + */ + public static String extractGaps(String gapChar, String seq) + { + StringTokenizer str = new StringTokenizer(seq, gapChar); + StringBuffer newString = new StringBuffer(); + + while (str.hasMoreTokens()) + { + newString.append( str.nextToken() ); + } + + return newString.toString(); + } + + /** + * DOCUMENT ME! + * + * @param i1 DOCUMENT ME! + * @param i2 DOCUMENT ME! + * @param i3 DOCUMENT ME! + * + * @return DOCUMENT ME! + */ + public int max(int i1, int i2, int i3) + { + int max = i1; + + if (i2 > i1) + { + max = i2; + } + + if (i3 > max) + { + max = i3; + } + + return max; + } + + /** + * DOCUMENT ME! + * + * @param i1 DOCUMENT ME! + * @param i2 DOCUMENT ME! + * + * @return DOCUMENT ME! + */ + public int max(int i1, int i2) + { + int max = i1; + + if (i2 > i1) + { + max = i2; + } + + return max; + } + + /** + * DOCUMENT ME! + * + * @param s DOCUMENT ME! + * @param type DOCUMENT ME! + * + * @return DOCUMENT ME! + */ + public int[] stringToInt(String s, String type) + { + int[] seq1 = new int[s.length()]; + + for (int i = 0; i < s.length(); i++) + { + // String ss = s.substring(i, i + 1).toUpperCase(); + char c = s.charAt(i); + if ('a' <= c && c <= 'z') + { + // TO UPPERCASE !!! + c -= ('a' - 'A'); + } + + + try + { + if (type.equals("pep")) + { + seq1[i] = ResidueProperties.aaIndex[c]; + } + else if (type.equals("dna")) + { + seq1[i] = ResidueProperties.nucleotideIndex[c]; + } + + if (seq1[i] > 23) + { + seq1[i] = 23; + } + } + catch (Exception e) + { + if (type.equals("dna")) + { + seq1[i] = 4; + } + else + { + seq1[i] = 23; + } + } + } + + return seq1; + } + + /** + * DOCUMENT ME! + * + * @param g DOCUMENT ME! + * @param mat DOCUMENT ME! + * @param n DOCUMENT ME! + * @param m DOCUMENT ME! + * @param psize DOCUMENT ME! + */ + public static void displayMatrix(Graphics g, int[][] mat, int n, int m, + int psize) + { + int max = -1000; + int min = 1000; + + for (int i = 0; i < n; i++) + { + for (int j = 0; j < m; j++) + { + if (mat[i][j] >= max) + { + max = mat[i][j]; + } + + if (mat[i][j] <= min) + { + min = mat[i][j]; + } + } + } + + System.out.println(max + " " + min); + + for (int i = 0; i < n; i++) + { + for (int j = 0; j < m; j++) + { + int x = psize * i; + int y = psize * j; + + // System.out.println(mat[i][j]); + float score = (float) (mat[i][j] - min) / (float) (max - min); + g.setColor(new Color(score, 0, 0)); + g.fillRect(x, y, psize, psize); + + // System.out.println(x + " " + y + " " + score); + } + } + } +} diff --git a/src/jalview/analysis/NJTree.java b/src/jalview/analysis/NJTree.java index 6f89754..b882ba7 100755 --- a/src/jalview/analysis/NJTree.java +++ b/src/jalview/analysis/NJTree.java @@ -23,6 +23,7 @@ import jalview.datamodel.*; import jalview.io.NewickFile; import jalview.schemes.ResidueProperties; +import jalview.schemes.ScoreMatrix; import jalview.util.*; @@ -208,7 +209,9 @@ public class NJTree if (!(pwtype.equals("PID"))) { - type = "BL"; + if (ResidueProperties.getScoreMatrix(pwtype)==null) { + type = "BLOSUM62"; + } } int i = 0; @@ -298,7 +301,7 @@ public class NJTree leaf.setElement(new Sequence(leaf.getName(), "THISISAPLACEHLDER")); } leaf.setPlaceholder(true); - + } } } @@ -665,49 +668,56 @@ public class NJTree } } } - else if (pwtype.equals("BL")) - { - int maxscore = 0; - int end = sequenceString[0].length(); - for (int i = 0; i < (noseqs - 1); i++) + else { + // Pairwise substitution score (with no gap penalties) + ScoreMatrix pwmatrix=ResidueProperties.getScoreMatrix(pwtype); + if (pwmatrix==null) { + pwmatrix=ResidueProperties.getScoreMatrix("BLOSUM62"); + } + int maxscore = 0; + int end = sequenceString[0].length(); + for (int i = 0; i < (noseqs - 1); i++) + { + for (int j = i; j < noseqs; j++) { - for (int j = i; j < noseqs; j++) + int score = 0; + + for (int k = 0; k < end; k++) + { + try { - int score = 0; - - for (int k = 0; k < end; k++) - { - try - { - score += ResidueProperties.getBLOSUM62( - sequenceString[i].charAt(k), - sequenceString[j].charAt(k)); - } - catch (Exception ex) - { - System.err.println("err creating BLOSUM62 tree"); - ex.printStackTrace(); - } - } - - distance[i][j] = (float) score; - - if (score > maxscore) - { - maxscore = score; - } + score += pwmatrix.getPairwiseScore(sequenceString[i].charAt(k), + sequenceString[j].charAt(k)); } - } - - for (int i = 0; i < (noseqs - 1); i++) - { - for (int j = i; j < noseqs; j++) + catch (Exception ex) { - distance[i][j] = (float) maxscore - distance[i][j]; - distance[j][i] = distance[i][j]; + System.err.println("err creating BLOSUM62 tree"); + ex.printStackTrace(); } + } + + distance[i][j] = (float) score; + + if (score > maxscore) + { + maxscore = score; + } + } + } + + for (int i = 0; i < (noseqs - 1); i++) + { + for (int j = i; j < noseqs; j++) + { + distance[i][j] = (float) maxscore - distance[i][j]; + distance[j][i] = distance[i][j]; } + } + } + return distance; + + // else /* else if (pwtype.equals("SW")) { float max = -1; @@ -738,8 +748,6 @@ public class NJTree } } }/*/ - - return distance; } /** diff --git a/src/jalview/appletgui/PairwiseAlignPanel.java b/src/jalview/appletgui/PairwiseAlignPanel.java index 5e65f1e..792c906 100755 --- a/src/jalview/appletgui/PairwiseAlignPanel.java +++ b/src/jalview/appletgui/PairwiseAlignPanel.java @@ -1,170 +1,170 @@ -/* - * Jalview - A Sequence Alignment Editor and Viewer - * Copyright (C) 2006 AM Waterhouse, J Procter, G Barton, M Clamp, S Searle - * - * This program 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 2 - * of the License, or (at your option) any later version. - * - * This program 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 this program; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA - */ - -package jalview.appletgui; - -import java.util.*; - -import java.awt.event.*; - -import jalview.analysis.*; -import jalview.datamodel.*; -import java.awt.*; - -public class PairwiseAlignPanel - extends Panel implements ActionListener -{ - Vector sequences = new Vector(); - AlignmentPanel ap; - - public PairwiseAlignPanel(AlignmentPanel ap) - { - try - { - jbInit(); - } - catch (Exception e) - { - e.printStackTrace(); - } - this.ap = ap; - sequences = new Vector(); - - SequenceI[] seqs; - String[] seqStrings = ap.av.getViewAsString(true); - - if (ap.av.getSelectionGroup() == null) - { - seqs = ap.av.alignment.getSequencesArray(); - } - else - { - seqs = ap.av.getSelectionGroup().getSequencesInOrder(ap.av.alignment); - } - - float scores[][] = new float[seqs.length][seqs.length]; - double totscore = 0; - int count = ap.av.getSelectionGroup().getSize(false); - - Sequence seq; - - for (int i = 1; i < count; i++) - { - for (int j = 0; j < i; j++) - { - - AlignSeq as = new AlignSeq(seqs[i], seqStrings[i], - seqs[j], seqStrings[j], "pep"); - - if (as.s1str.length() == 0 || as.s2str.length() == 0) - { - continue; - } - - as.calcScoreMatrix(); - as.traceAlignment(); - - as.printAlignment(System.out); - scores[i][j] = (float) as.getMaxScore() / (float) as.getASeq1().length; - totscore = totscore + scores[i][j]; - - textarea.append(as.getOutput()); - seq = new Sequence(as.getS1().getName(), - as.getAStr1(), - as.getS1().getStart(), - as.getS1().getEnd() - ); - sequences.addElement(seq); - - seq = new Sequence(as.getS2().getName(), - as.getAStr2(), - as.getS2().getStart(), - as.getS2().getEnd()); - sequences.addElement(seq); - } - } - - if (count > 2) - { - System.out.println( - "Pairwise alignment scaled similarity score matrix\n"); - - for (int i = 0; i < count; i++) - { - jalview.util.Format.print(System.out, "%s \n", - ("" + i) + " " + - seqs[i].getName()); - } - - System.out.println("\n"); - - for (int i = 0; i < count; i++) - { - for (int j = 0; j < i; j++) - { - jalview.util.Format.print(System.out, "%7.3f", - scores[i][j] / totscore); - } - } - - System.out.println("\n"); - } - } - public void actionPerformed(ActionEvent evt) - { - if(evt.getSource()==viewInEditorButton) - viewInEditorButton_actionPerformed(); - } - - protected void viewInEditorButton_actionPerformed() - { - - Sequence[] seq = new Sequence[sequences.size()]; - - for (int i = 0; i < sequences.size(); i++) - { - seq[i] = (Sequence) sequences.elementAt(i); - } - - new AlignFrame(new Alignment(seq), - ap.av.applet, - "Pairwise Aligned Sequences", - false); - - } - protected ScrollPane scrollPane = new ScrollPane(); - protected TextArea textarea = new TextArea(); - protected Button viewInEditorButton = new Button(); - Panel jPanel1 = new Panel(); - BorderLayout borderLayout1 = new BorderLayout(); - - private void jbInit() throws Exception { - this.setLayout(borderLayout1); - textarea.setFont(new java.awt.Font("Monospaced", 0, 12)); - textarea.setText(""); - viewInEditorButton.setFont(new java.awt.Font("Verdana", 0, 12)); - viewInEditorButton.setLabel("View in alignment editor"); - viewInEditorButton.addActionListener(this); - this.add(scrollPane, BorderLayout.CENTER); - scrollPane.add(textarea); - this.add(jPanel1, BorderLayout.SOUTH); - jPanel1.add(viewInEditorButton, null); - } - -} +/* + * Jalview - A Sequence Alignment Editor and Viewer + * Copyright (C) 2006 AM Waterhouse, J Procter, G Barton, M Clamp, S Searle + * + * This program 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 2 + * of the License, or (at your option) any later version. + * + * This program 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 this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA + */ + +package jalview.appletgui; + +import java.util.*; + +import java.awt.event.*; + +import jalview.analysis.*; +import jalview.datamodel.*; +import java.awt.*; + +public class PairwiseAlignPanel + extends Panel implements ActionListener +{ + Vector sequences = new Vector(); + AlignmentPanel ap; + + public PairwiseAlignPanel(AlignmentPanel ap) + { + try + { + jbInit(); + } + catch (Exception e) + { + e.printStackTrace(); + } + this.ap = ap; + sequences = new Vector(); + + SequenceI[] seqs; + String[] seqStrings = ap.av.getViewAsString(true); + + if (ap.av.getSelectionGroup() == null) + { + seqs = ap.av.alignment.getSequencesArray(); + } + else + { + seqs = ap.av.getSelectionGroup().getSequencesInOrder(ap.av.alignment); + } + + float scores[][] = new float[seqs.length][seqs.length]; + double totscore = 0; + int count = ap.av.getSelectionGroup().getSize(false); + String type=(ap.av.alignment.isNucleotide()) ? AlignSeq.DNA : AlignSeq.PEP; + Sequence seq; + + for (int i = 1; i < count; i++) + { + for (int j = 0; j < i; j++) + { + + AlignSeq as = new AlignSeq(seqs[i], seqStrings[i], + seqs[j], seqStrings[j], type); + + if (as.s1str.length() == 0 || as.s2str.length() == 0) + { + continue; + } + + as.calcScoreMatrix(); + as.traceAlignment(); + + as.printAlignment(System.out); + scores[i][j] = (float) as.getMaxScore() / (float) as.getASeq1().length; + totscore = totscore + scores[i][j]; + + textarea.append(as.getOutput()); + seq = new Sequence(as.getS1().getName(), + as.getAStr1(), + as.getS1().getStart(), + as.getS1().getEnd() + ); + sequences.addElement(seq); + + seq = new Sequence(as.getS2().getName(), + as.getAStr2(), + as.getS2().getStart(), + as.getS2().getEnd()); + sequences.addElement(seq); + } + } + + if (count > 2) + { + System.out.println( + "Pairwise alignment scaled similarity score matrix\n"); + + for (int i = 0; i < count; i++) + { + jalview.util.Format.print(System.out, "%s \n", + ("" + i) + " " + + seqs[i].getName()); + } + + System.out.println("\n"); + + for (int i = 0; i < count; i++) + { + for (int j = 0; j < i; j++) + { + jalview.util.Format.print(System.out, "%7.3f", + scores[i][j] / totscore); + } + } + + System.out.println("\n"); + } + } + public void actionPerformed(ActionEvent evt) + { + if(evt.getSource()==viewInEditorButton) + viewInEditorButton_actionPerformed(); + } + + protected void viewInEditorButton_actionPerformed() + { + + Sequence[] seq = new Sequence[sequences.size()]; + + for (int i = 0; i < sequences.size(); i++) + { + seq[i] = (Sequence) sequences.elementAt(i); + } + + new AlignFrame(new Alignment(seq), + ap.av.applet, + "Pairwise Aligned Sequences", + false); + + } + protected ScrollPane scrollPane = new ScrollPane(); + protected TextArea textarea = new TextArea(); + protected Button viewInEditorButton = new Button(); + Panel jPanel1 = new Panel(); + BorderLayout borderLayout1 = new BorderLayout(); + + private void jbInit() throws Exception { + this.setLayout(borderLayout1); + textarea.setFont(new java.awt.Font("Monospaced", 0, 12)); + textarea.setText(""); + viewInEditorButton.setFont(new java.awt.Font("Verdana", 0, 12)); + viewInEditorButton.setLabel("View in alignment editor"); + viewInEditorButton.addActionListener(this); + this.add(scrollPane, BorderLayout.CENTER); + scrollPane.add(textarea); + this.add(jPanel1, BorderLayout.SOUTH); + jPanel1.add(viewInEditorButton, null); + } + +} diff --git a/src/jalview/datamodel/BinarySequence.java b/src/jalview/datamodel/BinarySequence.java index 49e3543..a9e80b8 100755 --- a/src/jalview/datamodel/BinarySequence.java +++ b/src/jalview/datamodel/BinarySequence.java @@ -1,154 +1,164 @@ -/* -* Jalview - A Sequence Alignment Editor and Viewer -* Copyright (C) 2006 AM Waterhouse, J Procter, G Barton, M Clamp, S Searle -* -* This program 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 2 -* of the License, or (at your option) any later version. -* -* This program 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 this program; if not, write to the Free Software -* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA -*/ -package jalview.datamodel; - -import jalview.schemes.*; - - - -/** - * DOCUMENT ME! - * - * @author $author$ - * @version $Revision$ - */ -public class BinarySequence extends Sequence -{ - int[] binary; - double[] dbinary; - - /** - * Creates a new BinarySequence object. - * - * @param s DOCUMENT ME! - */ - public BinarySequence(String s) - { - super("", s, 0, s.length()); - } - - /** - * DOCUMENT ME! - */ - public void encode() - { - // Set all matrix to 0 - dbinary = new double[getSequence().length * 21]; - - int nores = 21; - - for (int i = 0; i < dbinary.length; i++) - { - dbinary[i] = 0.0; - } - - for (int i = 0; i < getSequence().length; i++) - { - int aanum = 20; - - try - { - aanum = ResidueProperties.aaIndex[getCharAt(i)]; - } - catch (NullPointerException e) - { - aanum = 20; - } - - if (aanum > 20) - { - aanum = 20; - } - - dbinary[(i * nores) + aanum] = 1.0; - } - } - - /** - * DOCUMENT ME! - */ - public void blosumEncode() - { - // Set all matrix to 0 - dbinary = new double[getSequence().length * 21]; - - int nores = 21; - - //for (int i = 0; i < dbinary.length; i++) { - // dbinary[i] = 0.0; - //} - for (int i = 0; i < getSequence().length; i++) - { - int aanum = 20; - - try - { - aanum = ResidueProperties.aaIndex[getCharAt(i)]; - } - catch (NullPointerException e) - { - aanum = 20; - } - - if (aanum > 20) - { - aanum = 20; - } - - // Do the blosum thing - for (int j = 0; j < 20; j++) - { - dbinary[(i * nores) + j] = ResidueProperties.getBLOSUM62()[aanum][j]; - } - } - } - - /** - * DOCUMENT ME! - * - * @return DOCUMENT ME! - */ - public String toBinaryString() - { - String out = ""; - - for (int i = 0; i < binary.length; i++) - { - out += (new Integer(binary[i])).toString(); - - if (i < (binary.length - 1)) - { - out += " "; - } - } - - return out; - } - - /** - * DOCUMENT ME! - * - * @return DOCUMENT ME! - */ - public double[] getDBinary() - { - return dbinary; - } - -} +/* +* Jalview - A Sequence Alignment Editor and Viewer +* Copyright (C) 2006 AM Waterhouse, J Procter, G Barton, M Clamp, S Searle +* +* This program 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 2 +* of the License, or (at your option) any later version. +* +* This program 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 this program; if not, write to the Free Software +* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA +*/ +package jalview.datamodel; + +import jalview.schemes.*; + + + +/** + * DOCUMENT ME! + * + * @author $author$ + * @version $Revision$ + */ +public class BinarySequence extends Sequence +{ + int[] binary; + double[] dbinary; + + /** + * Creates a new BinarySequence object. + * + * @param s DOCUMENT ME! + */ + public BinarySequence(String s) + { + super("", s, 0, s.length()); + } + + /** + * DOCUMENT ME! + */ + public void encode() + { + // Set all matrix to 0 + dbinary = new double[getSequence().length * 21]; + + int nores = 21; + + for (int i = 0; i < dbinary.length; i++) + { + dbinary[i] = 0.0; + } + + for (int i = 0; i < getSequence().length; i++) + { + int aanum = 20; + + try + { + aanum = ResidueProperties.aaIndex[getCharAt(i)]; + } + catch (NullPointerException e) + { + aanum = 20; + } + + if (aanum > 20) + { + aanum = 20; + } + + dbinary[(i * nores) + aanum] = 1.0; + } + } + /** + * ancode using substitution matrix given in matrix + * @param matrix + */ + public void matrixEncode(ScoreMatrix matrix) { + matrixEncode(matrix.isDNA()?ResidueProperties.nucleotideIndex: ResidueProperties.aaIndex, matrix.getMatrix()); + } + /** + * DOCUMENT ME! + */ + public void blosumEncode() + { + matrixEncode(ResidueProperties.aaIndex, ResidueProperties.getBLOSUM62()); + } + private void matrixEncode(int[] aaIndex, int[][] matrix) { + // Set all matrix to 0 + dbinary = new double[getSequence().length * 21]; + + int nores = 21; + + //for (int i = 0; i < dbinary.length; i++) { + // dbinary[i] = 0.0; + //} + for (int i = 0; i < getSequence().length; i++) + { + int aanum = 20; + + try + { + aanum = aaIndex[getCharAt(i)]; + } + catch (NullPointerException e) + { + aanum = 20; + } + + if (aanum > 20) + { + aanum = 20; + } + + // Do the blosum thing + + for (int j = 0; j < 20; j++) + { + dbinary[(i * nores) + j] = matrix[aanum][j]; + } + } + } + + /** + * DOCUMENT ME! + * + * @return DOCUMENT ME! + */ + public String toBinaryString() + { + String out = ""; + + for (int i = 0; i < binary.length; i++) + { + out += (new Integer(binary[i])).toString(); + + if (i < (binary.length - 1)) + { + out += " "; + } + } + + return out; + } + + /** + * DOCUMENT ME! + * + * @return DOCUMENT ME! + */ + public double[] getDBinary() + { + return dbinary; + } + +} diff --git a/src/jalview/gui/PairwiseAlignPanel.java b/src/jalview/gui/PairwiseAlignPanel.java index 248a54c..30effb7 100755 --- a/src/jalview/gui/PairwiseAlignPanel.java +++ b/src/jalview/gui/PairwiseAlignPanel.java @@ -1,160 +1,161 @@ -/* - * Jalview - A Sequence Alignment Editor and Viewer - * Copyright (C) 2006 AM Waterhouse, J Procter, G Barton, M Clamp, S Searle - * - * This program 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 2 - * of the License, or (at your option) any later version. - * - * This program 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 this program; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA - */ -package jalview.gui; - -import jalview.analysis.*; - -import jalview.datamodel.*; - -import jalview.jbgui.*; - -import java.awt.event.*; - -import java.util.*; - - -/** - * DOCUMENT ME! - * - * @author $author$ - * @version $Revision$ - */ -public class PairwiseAlignPanel extends GPairwiseAlignPanel -{ - - AlignViewport av; - Vector sequences; - - /** - * Creates a new PairwiseAlignPanel object. - * - * @param av DOCUMENT ME! - */ - public PairwiseAlignPanel(AlignViewport av) - { - super(); - this.av = av; - - sequences = new Vector(); - - SequenceI [] seqs; - String [] seqStrings = av.getViewAsString(true); - - if(av.getSelectionGroup()==null) - { - seqs = av.alignment.getSequencesArray(); - } - else - { - seqs = av.getSelectionGroup().getSequencesInOrder(av.alignment); - } - - - float[][] scores = new float[seqs.length][seqs.length]; - double totscore = 0; - int count = seqs.length; - - Sequence seq; - - for (int i = 1; i < count; i++) - { - for (int j = 0; j < i; j++) - { - - AlignSeq as = new AlignSeq(seqs[i], seqStrings[i], - seqs[j], seqStrings[j], "pep"); - - if(as.s1str.length()==0 || as.s2str.length()==0) - { - continue; - } - - as.calcScoreMatrix(); - as.traceAlignment(); - - - as.printAlignment(System.out); - scores[i][j] = (float) as.getMaxScore() / (float) as.getASeq1().length; - totscore = totscore + scores[i][j]; - - textarea.append(as.getOutput()); - seq = new Sequence(as.getS1().getName(), - as.getAStr1(), - as.getS1().getStart(), - as.getS1().getEnd() - ); - sequences.add(seq); - - seq = new Sequence(as.getS2().getName(), - as.getAStr2(), - as.getS2().getStart(), - as.getS2().getEnd() ); - sequences.add(seq); - } - } - - if (count > 2) - { - System.out.println( - "Pairwise alignment scaled similarity score matrix\n"); - - for (int i = 0; i < count; i++) - { - jalview.util.Format.print(System.out, "%s \n", - ("" + i) + " " + - seqs[i].getName()); - } - - System.out.println("\n"); - - for (int i = 0; i < count; i++) - { - for (int j = 0; j < i; j++) - { - jalview.util.Format.print(System.out, "%7.3f", - scores[i][j] / totscore); - } - } - - System.out.println("\n"); - } - } - - /** - * DOCUMENT ME! - * - * @param e DOCUMENT ME! - */ - protected void viewInEditorButton_actionPerformed(ActionEvent e) - { - Sequence[] seq = new Sequence[sequences.size()]; - - for (int i = 0; i < sequences.size(); i++) - { - seq[i] = (Sequence) sequences.elementAt(i); - } - - AlignFrame af = new AlignFrame(new Alignment(seq), - AlignFrame.DEFAULT_WIDTH, - AlignFrame.DEFAULT_HEIGHT); - - Desktop.addInternalFrame(af, "Pairwise Aligned Sequences", - AlignFrame.DEFAULT_WIDTH, AlignFrame.DEFAULT_HEIGHT); - } -} +/* + * Jalview - A Sequence Alignment Editor and Viewer + * Copyright (C) 2006 AM Waterhouse, J Procter, G Barton, M Clamp, S Searle + * + * This program 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 2 + * of the License, or (at your option) any later version. + * + * This program 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 this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA + */ +package jalview.gui; + +import jalview.analysis.*; + +import jalview.datamodel.*; + +import jalview.jbgui.*; + +import java.awt.event.*; + +import java.util.*; + + +/** + * DOCUMENT ME! + * + * @author $author$ + * @version $Revision$ + */ +public class PairwiseAlignPanel extends GPairwiseAlignPanel +{ + + AlignViewport av; + Vector sequences; + + /** + * Creates a new PairwiseAlignPanel object. + * + * @param av DOCUMENT ME! + */ + public PairwiseAlignPanel(AlignViewport av) + { + super(); + this.av = av; + + sequences = new Vector(); + + SequenceI [] seqs; + String [] seqStrings = av.getViewAsString(true); + + if(av.getSelectionGroup()==null) + { + seqs = av.alignment.getSequencesArray(); + } + else + { + seqs = av.getSelectionGroup().getSequencesInOrder(av.alignment); + } + + String type=(av.alignment.isNucleotide()) ? AlignSeq.DNA : AlignSeq.PEP; + + float[][] scores = new float[seqs.length][seqs.length]; + double totscore = 0; + int count = seqs.length; + + Sequence seq; + + for (int i = 1; i < count; i++) + { + for (int j = 0; j < i; j++) + { + + AlignSeq as = new AlignSeq(seqs[i], seqStrings[i], + seqs[j], seqStrings[j], type); + + if(as.s1str.length()==0 || as.s2str.length()==0) + { + continue; + } + + as.calcScoreMatrix(); + as.traceAlignment(); + + + as.printAlignment(System.out); + scores[i][j] = (float) as.getMaxScore() / (float) as.getASeq1().length; + totscore = totscore + scores[i][j]; + + textarea.append(as.getOutput()); + seq = new Sequence(as.getS1().getName(), + as.getAStr1(), + as.getS1().getStart(), + as.getS1().getEnd() + ); + sequences.add(seq); + + seq = new Sequence(as.getS2().getName(), + as.getAStr2(), + as.getS2().getStart(), + as.getS2().getEnd() ); + sequences.add(seq); + } + } + + if (count > 2) + { + System.out.println( + "Pairwise alignment scaled similarity score matrix\n"); + + for (int i = 0; i < count; i++) + { + jalview.util.Format.print(System.out, "%s \n", + ("" + i) + " " + + seqs[i].getName()); + } + + System.out.println("\n"); + + for (int i = 0; i < count; i++) + { + for (int j = 0; j < i; j++) + { + jalview.util.Format.print(System.out, "%7.3f", + scores[i][j] / totscore); + } + } + + System.out.println("\n"); + } + } + + /** + * DOCUMENT ME! + * + * @param e DOCUMENT ME! + */ + protected void viewInEditorButton_actionPerformed(ActionEvent e) + { + Sequence[] seq = new Sequence[sequences.size()]; + + for (int i = 0; i < sequences.size(); i++) + { + seq[i] = (Sequence) sequences.elementAt(i); + } + + AlignFrame af = new AlignFrame(new Alignment(seq), + AlignFrame.DEFAULT_WIDTH, + AlignFrame.DEFAULT_HEIGHT); + + Desktop.addInternalFrame(af, "Pairwise Aligned Sequences", + AlignFrame.DEFAULT_WIDTH, AlignFrame.DEFAULT_HEIGHT); + } +} diff --git a/src/jalview/schemes/ResidueProperties.java b/src/jalview/schemes/ResidueProperties.java index 1015073..5604ca3 100755 --- a/src/jalview/schemes/ResidueProperties.java +++ b/src/jalview/schemes/ResidueProperties.java @@ -1,1217 +1,1245 @@ -/* - * Jalview - A Sequence Alignment Editor and Viewer - * Copyright (C) 2006 AM Waterhouse, J Procter, G Barton, M Clamp, S Searle - * - * This program 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 2 - * of the License, or (at your option) any later version. - * - * This program 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 this program; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA - */ -package jalview.schemes; - -import java.util.*; - -import java.awt.*; - -public class ResidueProperties -{ - //Stores residue codes/names and colours and other things - public static final int [] aaIndex; // aaHash version 2.1.1 and below - public static final int [] nucleotideIndex; - public static final Hashtable aa3Hash = new Hashtable(); - public static final Hashtable aa2Triplet = new Hashtable(); - public static final Hashtable nucleotideName = new Hashtable(); - - - static - { - aaIndex = new int[132]; - for(int i=0; i<132; i++) - aaIndex[i] = -1; - - aaIndex['A'] = 0; - aaIndex['R'] = 1; - aaIndex['N'] = 2; - aaIndex['D'] = 3; - aaIndex['C'] = 4; - aaIndex['Q'] = 5; - aaIndex['E'] = 6; - aaIndex['G'] = 7; - aaIndex['H'] = 8; - aaIndex['I'] = 9; - aaIndex['L'] = 10; - aaIndex['K'] = 11; - aaIndex['M'] = 12; - aaIndex['F'] = 13; - aaIndex['P'] = 14; - aaIndex['S'] = 15; - aaIndex['T'] = 16; - aaIndex['W'] = 17; - aaIndex['Y'] = 18; - aaIndex['V'] = 19; - aaIndex['B'] = 20; - aaIndex['Z'] = 21; - aaIndex['X'] = 22; - aaIndex['U'] = 22; - aaIndex['a'] = 0; - aaIndex['r'] = 1; - aaIndex['n'] = 2; - aaIndex['d'] = 3; - aaIndex['c'] = 4; - aaIndex['q'] = 5; - aaIndex['e'] = 6; - aaIndex['g'] = 7; - aaIndex['h'] = 8; - aaIndex['i'] = 9; - aaIndex['l'] = 10; - aaIndex['k'] = 11; - aaIndex['m'] = 12; - aaIndex['f'] = 13; - aaIndex['p'] = 14; - aaIndex['s'] = 15; - aaIndex['t'] = 16; - aaIndex['w'] = 17; - aaIndex['y'] = 18; - aaIndex['v'] = 19; - aaIndex['b'] = 20; - aaIndex['z'] = 21; - aaIndex['x'] = 22; - aaIndex['u'] = 22; - aaIndex['-'] = 23; - aaIndex['*'] = 23; - aaIndex['.'] = 23; - aaIndex[' '] = 23; - } - - static - { - nucleotideIndex = new int[132]; - for (int i = 0; i < 132; i++) - nucleotideIndex[i] = -1; - - nucleotideIndex['A'] = 0; - nucleotideIndex['a'] = 0; - nucleotideIndex['C'] = 1; - nucleotideIndex['c'] = 1; - nucleotideIndex['G'] = 2; - nucleotideIndex['g'] = 2; - nucleotideIndex['T'] = 3; - nucleotideIndex['t'] = 3; - nucleotideIndex['U'] = 4; - nucleotideIndex['u'] = 4; - nucleotideIndex['I'] = 5; - nucleotideIndex['i'] = 5; - nucleotideIndex['X'] = 6; - nucleotideIndex['x'] = 6; - nucleotideIndex['R'] = 7; - nucleotideIndex['r'] = 7; - nucleotideIndex['Y'] = 8; - nucleotideIndex['y'] = 8; - nucleotideIndex['N'] = 9; - nucleotideIndex['n'] = 9; - - - nucleotideName.put("A", "Adenine"); - nucleotideName.put("a", "Adenine"); - nucleotideName.put("G", "Guanine"); - nucleotideName.put("g", "Guanine"); - nucleotideName.put("C", "Cytosine"); - nucleotideName.put("c", "Cytosine"); - nucleotideName.put("T", "Thymine"); - nucleotideName.put("t", "Thymine"); - nucleotideName.put("U", "Uracil"); - nucleotideName.put("u", "Uracil"); - nucleotideName.put("I", "Inosine"); - nucleotideName.put("i", "Inosine"); - nucleotideName.put("X", "Xanthine"); - nucleotideName.put("x", "Xanthine"); - nucleotideName.put("R", "Unknown Purine"); - nucleotideName.put("r", "Unknown Purine"); - nucleotideName.put("Y", "Unknown Pyrimidine"); - nucleotideName.put("y", "Unknown Pyrimidine"); - nucleotideName.put("N", "Unknown"); - nucleotideName.put("n", "Unknown"); - } - - - static - { - aa3Hash.put("ALA", new Integer(0)); - aa3Hash.put("ARG", new Integer(1)); - aa3Hash.put("ASN", new Integer(2)); - aa3Hash.put("ASP", new Integer(3)); //D - aa3Hash.put("CYS", new Integer(4)); - aa3Hash.put("GLN", new Integer(5)); //Q - aa3Hash.put("GLU", new Integer(6)); // E - aa3Hash.put("GLY", new Integer(7)); - aa3Hash.put("HIS", new Integer(8)); - aa3Hash.put("ILE", new Integer(9)); - aa3Hash.put("LEU", new Integer(10)); - aa3Hash.put("LYS", new Integer(11)); - aa3Hash.put("MET", new Integer(12)); - aa3Hash.put("PHE", new Integer(13)); - aa3Hash.put("PRO", new Integer(14)); - aa3Hash.put("SER", new Integer(15)); - aa3Hash.put("THR", new Integer(16)); - aa3Hash.put("TRP", new Integer(17)); - aa3Hash.put("TYR", new Integer(18)); - aa3Hash.put("VAL", new Integer(19)); - // IUB Nomenclature for ambiguous peptides - aa3Hash.put("ASX", new Integer(20)); // "B"; - aa3Hash.put("GLX", new Integer(21)); // X - aa3Hash.put("XAA", new Integer(22));// X unknown - aa3Hash.put("-", new Integer(23)); - aa3Hash.put("*", new Integer(23)); - aa3Hash.put(".", new Integer(23)); - aa3Hash.put(" ", new Integer(23)); - aa3Hash.put("Gap", new Integer(23)); - } - - static - { - aa2Triplet.put("A", "ALA"); - aa2Triplet.put("a", "ALA"); - aa2Triplet.put("R", "ARG"); - aa2Triplet.put("r", "ARG"); - aa2Triplet.put("N", "ASN"); - aa2Triplet.put("n", "ASN"); - aa2Triplet.put("D", "ASP"); - aa2Triplet.put("d", "ASP"); - aa2Triplet.put("C", "CYS"); - aa2Triplet.put("c", "CYS"); - aa2Triplet.put("Q", "GLN"); - aa2Triplet.put("q", "GLN"); - aa2Triplet.put("E", "GLU"); - aa2Triplet.put("e", "GLU"); - aa2Triplet.put("G", "GLY"); - aa2Triplet.put("g", "GLY"); - aa2Triplet.put("H", "HIS"); - aa2Triplet.put("h", "HIS"); - aa2Triplet.put("I", "ILE"); - aa2Triplet.put("i", "ILE"); - aa2Triplet.put("L", "LEU"); - aa2Triplet.put("l", "LEU"); - aa2Triplet.put("K", "LYS"); - aa2Triplet.put("k", "LYS"); - aa2Triplet.put("M", "MET"); - aa2Triplet.put("m", "MET"); - aa2Triplet.put("F", "PHE"); - aa2Triplet.put("f", "PHE"); - aa2Triplet.put("P", "PRO"); - aa2Triplet.put("p", "PRO"); - aa2Triplet.put("S", "SER"); - aa2Triplet.put("s", "SER"); - aa2Triplet.put("T", "THR"); - aa2Triplet.put("t", "THR"); - aa2Triplet.put("W", "TRP"); - aa2Triplet.put("w", "TRP"); - aa2Triplet.put("Y", "TYR"); - aa2Triplet.put("y", "TYR"); - aa2Triplet.put("V", "VAL"); - aa2Triplet.put("v", "VAL"); - } - - public static final String[] aa = - { - "A", "R", "N", "D", "C", "Q", "E", "G", "H", "I", "L", "K", "M", "F", - "P", "S", "T", "W", "Y", "V", "B", "Z", "X", "_", "*", ".", " " - }; - public static final Color midBlue = new Color(100, 100, 255); - public static final Vector scaleColours = new Vector(); - - static - { - scaleColours.addElement(new Color(114, 0, 147)); - scaleColours.addElement(new Color(156, 0, 98)); - scaleColours.addElement(new Color(190, 0, 0)); - scaleColours.addElement(Color.red); - scaleColours.addElement(new Color(255, 125, 0)); - scaleColours.addElement(Color.orange); - scaleColours.addElement(new Color(255, 194, 85)); - scaleColours.addElement(Color.yellow); - scaleColours.addElement(new Color(255, 255, 181)); - scaleColours.addElement(Color.white); - } - - public static final Color[] taylor = - { - new Color(204, 255, 0), // A Greenish-yellowy-yellow - new Color(0, 0, 255), // R Blueish-bluey-blue - new Color(204, 0, 255), // N Blueish-reddy-blue - new Color(255, 0, 0), // D Reddish-reddy-red - new Color(255, 255, 0), // C Yellowish-yellowy-yellow - new Color(255, 0, 204), // Q Reddish-bluey-red - new Color(255, 0, 102), // E Blueish-reddy-red - new Color(255, 153, 0), // G Yellowy-reddy-yellow - new Color(0, 102, 255), // H Greenish-bluey-blue - new Color(102, 255, 0), // I Greenish-yellowy-green - new Color(51, 255, 0), // L Yellowish-greeny-green - new Color(102, 0, 255), // K Reddish-bluey-blue - new Color(0, 255, 0), // M Greenish-greeny-green - new Color(0, 255, 102), // F Blueish-greeny-green - new Color(255, 204, 0), // P Reddish-yellowy-yellow - new Color(255, 51, 0), // S Yellowish-reddy-red - new Color(255, 102, 0), // T Reddish-yellowy-red - new Color(0, 204, 255), // W Blueish-greeny-green - new Color(0, 255, 204), // Y Greenish-bluey-green - new Color(153, 255, 0), // V Yellowish-greeny-yellow - Color.white, // B - Color.white, // Z - Color.white, // X - Color.white, // - - Color.white, // * - Color.white // . - }; - public static final Color[] nucleotide = - { - new Color(100, 247, 63), // A - new Color(255, 179, 64), // C - new Color(235, 65, 60), // G - new Color(60, 136, 238), // T - new Color(60, 136, 238) // U - }; - public static final Color[] color = - { - Color.pink, // A - midBlue, // R - Color.green, // N - Color.red, // D - Color.yellow, // C - Color.green, // Q - Color.red, // E - Color.magenta, // G - Color.red, // H - Color.pink, // I - Color.pink, // L - midBlue, // K - Color.pink, // M - Color.orange, // F - Color.magenta, // P - Color.green, // S - Color.green, // T - Color.orange, // W - Color.orange, // Y - Color.pink, // V - Color.white, // B - Color.white, // Z - Color.white, // X - Color.white, // - - Color.white, // * - Color.white, // . - Color.white // ' ' - }; - - // Dunno where I got these numbers from - public static final double[] hyd2 = - { - 0.62, //A - 0.29, //R - -0.90, //N - -0.74, //D - 1.19, //C - 0.48, //Q - -0.40, //E - 1.38, //G - -1.50, //H - 1.06, //I - 0.64, //L - -0.78, //K - 0.12, //M - -0.85, //F - -2.53, //P - -0.18, //S - -0.05, //T - 1.08, //W - 0.81, //Y - 0.0, //V - 0.26, //B - 0.0, //Z - 0.0 //X - }; - public static final double[] helix = - { - 1.42, 0.98, 0.67, 1.01, 0.70, 1.11, 1.51, 0.57, 1.00, 1.08, 1.21, 1.16, - 1.45, 1.13, 0.57, 0.77, 0.83, 1.08, 0.69, 1.06, 0.84, 1.31, 1.00, 0.0 - }; - public static final double helixmin = 0.57; - public static final double helixmax = 1.51; - public static final double[] strand = - { - 0.83, 0.93, 0.89, 0.54, 1.19, 1.10, 0.37, 0.75, 0.87, 1.60, 1.30, 0.74, - 1.05, 1.38, 0.55, 0.75, 1.19, 1.37, 1.47, 1.70, 0.72, 0.74, 1.0, 0.0 - }; - public static final double strandmin = 0.37; - public static final double strandmax = 1.7; - public static final double[] turn = - { - 0.66, 0.95, 1.56, 1.46, 1.19, 0.98, 0.74, 1.56, 0.95, 0.47, 0.59, 1.01, - 0.60, 0.60, 1.52, 1.43, 0.96, 0.96, 1.14, 0.50, 1.51, 0.86, 1.00, 0, 0 - }; - public static final double turnmin = 0.47; - public static final double turnmax = 1.56; - public static final double[] buried = - { - 1.7, 0.1, 0.4, 0.4, 4.6, 0.3, 0.3, 1.8, 0.8, 3.1, 2.4, 0.05, 1.9, 2.2, - 0.6, 0.8, 0.7, 1.6, 0.5, 2.9, 0.4, 0.3, 1.358, 0.00 - }; - public static final double buriedmin = 0.05; - public static final double buriedmax = 4.6; - - // This is hydropathy index - // Kyte, J., and Doolittle, R.F., J. Mol. Biol. - // 1157, 105-132, 1982 - public static final double[] hyd = - { - 1.8, -4.5, -3.5, -3.5, 2.5, -3.5, -3.5, -0.4, -3.2, 4.5, 3.8, -3.9, 1.9, - 2.8, -1.6, -0.8, -0.7, -0.9, -1.3, 4.2, -3.5, -3.5, -0.49, 0.0 - }; - public static final double hydmax = 4.5; - public static final double hydmin = -3.9; - - //public static final double hydmax = 1.38; - //public static final double hydmin = -2.53; - static final int[][] BLOSUM62 = - { - { - 4, -1, -2, -2, 0, -1, -1, 0, -2, -1, -1, -1, -1, -2, -1, 1, 0, -3, - -2, 0, -2, -1, 0, -4 - }, - { - -1, 5, 0, -2, -3, 1, 0, -2, 0, -3, -2, 2, -1, -3, -2, -1, -1, -3, -2, - -3, -1, 0, -1, -4 - }, - { - -2, 0, 6, 1, -3, 0, 0, 0, 1, -3, -3, 0, -2, -3, -2, 1, 0, -4, -2, -3, - 3, 0, -1, -4 - }, - { - -2, -2, 1, 6, -3, 0, 2, -1, -1, -3, -4, -1, -3, -3, -1, 0, -1, -4, - -3, -3, 4, 1, -1, -4 - }, - { - 0, 3, -3, -3, 9, -3, -4, -3, -3, -1, -1, -3, -1, -2, -3, -1, -1, -2, - -2, -1, -3, -3, -2, -4 - }, - { - -1, 1, 0, 0, -3, 5, 2, -2, 0, -3, -2, 1, 0, -3, -1, 0, -1, -2, -1, - -2, 0, 3, -1, -4 - }, - { - -1, 0, 0, 2, -4, 2, 5, -2, 0, -3, -3, 1, -2, -3, -1, 0, -1, -3, -2, - -2, 1, 4, -1, -4 - }, - { - 0, -2, 0, -1, -3, -2, -2, 6, -2, -4, -4, -2, -3, -3, -2, 0, -2, -2, - -3, -3, -1, -2, -1, -4 - }, - { - -2, 0, 1, -1, -3, 0, 0, -2, 8, -3, -3, -1, -2, -1, -2, -1, -2, -2, 2, - -3, 0, 0, -1, -4 - }, - { - -1, -3, -3, -3, -1, -3, -3, -4, -3, 4, 2, -3, 1, 0, -3, -2, -1, -3, - -1, 3, -3, -3, -1, -4 - }, - { - -1, -2, -3, -4, -1, -2, -3, -4, -3, 2, 4, -2, 2, 0, -3, -2, -1, -2, - -1, 1, -4, -3, -1, -4 - }, - { - -1, 2, 0, -1, -3, 1, 1, -2, -1, -3, -2, 5, -1, -3, -1, 0, -1, -3, -2, - -2, 0, 1, -1, -4 - }, - { - -1, -1, -2, -3, -1, 0, -2, -3, -2, 1, 2, -1, 5, 0, -2, -1, -1, -1, - -1, 1, -3, -1, -1, -4 - }, - { - -2, -3, -3, -3, -2, -3, -3, -3, -1, 0, 0, -3, 0, 6, -4, -2, -2, 1, 3, - -1, -3, -3, -1, -4 - }, - { - -1, -2, -2, -1, -3, -1, -1, -2, -2, -3, -3, -1, -2, -4, 7, -1, -1, - -4, -3, -2, -2, -1, -2, -4 - }, - { - 1, -1, 1, 0, -1, 0, 0, 0, -1, -2, -2, 0, -1, -2, -1, 4, 1, -3, -2, - -2, 0, 0, 0, -4 - }, - { - 0, -1, 0, -1, -1, -1, -1, -2, -2, -1, -1, -1, -1, -2, -1, 1, 5, -2, - -2, 0, -1, -1, 0, -4 - }, - { - -3, -3, -4, -4, -2, -2, -3, -2, -2, -3, -2, -3, -1, 1, -4, -3, -2, - 11, 2, -3, -4, -3, -2, -4 - }, - { - -2, -2, -2, -3, -2, -1, -2, -3, 2, -1, -1, -2, -1, 3, -3, -2, -2, 2, - 7, -1, -3, -2, -1, -4 - }, - { - 0, -3, -3, -3, -1, -2, -2, -3, -3, 3, 1, -2, 1, -1, -2, -2, 0, -3, - -1, 4, -3, -2, -1, -4 - }, - { - -2, -1, 3, 4, -3, 0, 1, -1, 0, -3, -4, 0, -3, -3, -2, 0, -1, -4, -3, - -3, 4, 1, -1, -4 - }, - { - -1, 0, 0, 1, -3, 3, 4, -2, 0, -3, -3, 1, -1, -3, -1, 0, -1, -3, -2, - -2, 1, 4, -1, -4 - }, - { - 0, -1, -1, -1, -2, -1, -1, -1, -1, -1, -1, -1, -1, -1, -2, 0, 0, -2, - -1, -1, -1, -1, -1, -4 - }, - { - -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, - -4, -4, -4, -4, -4, -4, 1 - }, - }; - static final int[][] PAM250 = - { - { - 2, -2, 0, 0, -2, 0, 0, 1, -1, -1, -2, -1, -1, -3, 1, 1, 1, -6, -3, 0, - 0, 0, 0, -8 - }, - { - -2, 6, 0, -1, -4, 1, -1, -3, 2, -2, -3, 3, 0, -4, 0, 0, -1, 2, -4, - -2, -1, 0, -1, -8 - }, - { - 0, 0, 2, 2, -4, 1, 1, 0, 2, -2, -3, 1, -2, -3, 0, 1, 0, -4, -2, -2, - 2, 1, 0, -8 - }, - { - 0, -1, 2, 4, -5, 2, 3, 1, 1, -2, -4, 0, -3, -6, -1, 0, 0, -7, -4, -2, - 3, 3, -1, -8 - }, - { - -2, -4, -4, -5, 12, -5, -5, -3, -3, -2, -6, -5, -5, -4, -3, 0, -2, - -8, 0, -2, -4, -5, -3, -8 - }, - { - 0, 1, 1, 2, -5, 4, 2, -1, 3, -2, -2, 1, -1, -5, 0, -1, -1, -5, -4, - -2, 1, 3, -1, -8 - }, - { - 0, -1, 1, 3, -5, 2, 4, 0, 1, -2, -3, 0, -2, -5, -1, 0, 0, -7, -4, -2, - 3, 3, -1, -8 - }, - { - 1, -3, 0, 1, -3, -1, 0, 5, -2, -3, -4, -2, -3, -5, 0, 1, 0, -7, -5, - -1, 0, 0, -1, -8 - }, - { - -1, 2, 2, 1, -3, 3, 1, -2, 6, -2, -2, 0, -2, -2, 0, -1, -1, -3, 0, - -2, 1, 2, -1, -8 - }, - { - -1, -2, -2, -2, -2, -2, -2, -3, -2, 5, 2, -2, 2, 1, -2, -1, 0, -5, - -1, 4, -2, -2, -1, -8 - }, - { - -2, -3, -3, -4, -6, -2, -3, -4, -2, 2, 6, -3, 4, 2, -3, -3, -2, -2, - -1, 2, -3, -3, -1, -8 - }, - { - -1, 3, 1, 0, -5, 1, 0, -2, 0, -2, -3, 5, 0, -5, -1, 0, 0, -3, -4, -2, - 1, 0, -1, -8 - }, - { - -1, 0, -2, -3, -5, -1, -2, -3, -2, 2, 4, 0, 6, 0, -2, -2, -1, -4, -2, - 2, -2, -2, -1, -8 - }, - { - -3, -4, -3, -6, -4, -5, -5, -5, -2, 1, 2, -5, 0, 9, -5, -3, -3, 0, 7, - -1, -4, -5, -2, -8 - }, - { - 1, 0, 0, -1, -3, 0, -1, 0, 0, -2, -3, -1, -2, -5, 6, 1, 0, -6, -5, - -1, -1, 0, -1, -8 - }, - { - 1, 0, 1, 0, 0, -1, 0, 1, -1, -1, -3, 0, -2, -3, 1, 2, 1, -2, -3, -1, - 0, 0, 0, -8 - }, - { - 1, -1, 0, 0, -2, -1, 0, 0, -1, 0, -2, 0, -1, -3, 0, 1, 3, -5, -3, 0, - 0, -1, 0, -8 - }, - { - -6, 2, -4, -7, -8, -5, -7, -7, -3, -5, -2, -3, -4, 0, -6, -2, -5, 17, - 0, -6, -5, -6, -4, -8 - }, - { - -3, -4, -2, -4, 0, -4, -4, -5, 0, -1, -1, -4, -2, 7, -5, -3, -3, 0, - 10, -2, -3, -4, -2, -8 - }, - { - 0, -2, -2, -2, -2, -2, -2, -1, -2, 4, 2, -2, 2, -1, -1, -1, 0, -6, - -2, 4, -2, -2, -1, -8 - }, - { - 0, -1, 2, 3, -4, 1, 3, 0, 1, -2, -3, 1, -2, -4, -1, 0, 0, -5, -3, -2, - 3, 2, -1, -8 - }, - { - 0, 0, 1, 3, -5, 3, 3, 0, 2, -2, -3, 0, -2, -5, 0, 0, -1, -6, -4, -2, - 2, 3, -1, -8 - }, - { - 0, -1, 0, -1, -3, -1, -1, -1, -1, -1, -1, -1, -1, -2, -1, 0, 0, -4, - -2, -1, -1, -1, -1, -8 - }, - { - -8, -8, -8, -8, -8, -8, -8, -8, -8, -8, -8, -8, -8, -8, -8, -8, -8, - -8, -8, -8, -8, -8, -8, 1 - }, - }; - public static final Hashtable ssHash = new Hashtable(); // stores the number value of the aa - - static - { - ssHash.put("H", Color.magenta); - ssHash.put("E", Color.yellow); - ssHash.put("-", Color.white); - ssHash.put(".", Color.white); - ssHash.put("S", Color.cyan); - ssHash.put("T", Color.blue); - ssHash.put("G", Color.pink); - ssHash.put("I", Color.pink); - ssHash.put("B", Color.yellow); - } - - static final int[][] DNA = - { - { - 5, -4, -4, -4, 1}, // C - { - -4, 5, -4, -4, 1}, // T - { - -4, -4, 5, -4, 1}, // A - { - -4, -4, -4, 5, 1}, // G - { - 1, 1, 1, 1, 1}, // - - }; - public static final Color[] pidColours = - { - midBlue, new Color(153, 153, 255), - // Color.lightGray, - new Color(204, 204, 255), - }; - public static final float[] pidThresholds = - { - 80, 60, 40, }; - public static Hashtable codonHash = new Hashtable(); - public static Vector Lys = new Vector(); - public static Vector Asn = new Vector(); - public static Vector Gln = new Vector(); - public static Vector His = new Vector(); - public static Vector Glu = new Vector(); - public static Vector Asp = new Vector(); - public static Vector Tyr = new Vector(); - public static Vector Thr = new Vector(); - public static Vector Pro = new Vector(); - public static Vector Ala = new Vector(); - public static Vector Ser = new Vector(); - public static Vector Arg = new Vector(); - public static Vector Gly = new Vector(); - public static Vector Trp = new Vector(); - public static Vector Cys = new Vector(); - public static Vector Ile = new Vector(); - public static Vector Met = new Vector(); - public static Vector Leu = new Vector(); - public static Vector Val = new Vector(); - public static Vector Phe = new Vector(); - public static Vector STOP = new Vector(); - - static - { - codonHash.put("K", Lys); - codonHash.put("N", Asn); - codonHash.put("Q", Gln); - codonHash.put("H", His); - codonHash.put("E", Glu); - codonHash.put("D", Asp); - codonHash.put("Y", Tyr); - codonHash.put("T", Thr); - codonHash.put("P", Pro); - codonHash.put("A", Ala); - codonHash.put("S", Ser); - codonHash.put("R", Arg); - codonHash.put("G", Gly); - codonHash.put("W", Trp); - codonHash.put("C", Cys); - codonHash.put("I", Ile); - codonHash.put("M", Met); - codonHash.put("L", Leu); - codonHash.put("V", Val); - codonHash.put("F", Phe); - codonHash.put("STOP", STOP); - } - - public static Hashtable codonHash2 = new Hashtable(); - - static - { - codonHash2.put("AAA", "K"); - codonHash2.put("AAG", "K"); - codonHash2.put("AAC", "N"); - codonHash2.put("AAT", "N"); - - codonHash2.put("CAA", "E"); - codonHash2.put("CAG", "E"); - codonHash2.put("CAC", "H"); - codonHash2.put("CAT", "H"); - - codonHash2.put("GAA", "Q"); - codonHash2.put("GAG", "Q"); - codonHash2.put("GAC", "D"); - codonHash2.put("GAT", "D"); - - codonHash2.put("TAC", "Y"); - codonHash2.put("TAT", "Y"); - - codonHash2.put("ACA", "T"); - codonHash2.put("AAG", "T"); - codonHash2.put("ACC", "T"); - codonHash2.put("ACT", "T"); - - codonHash2.put("CCA", "P"); - codonHash2.put("CCG", "P"); - codonHash2.put("CCC", "P"); - codonHash2.put("CCT", "P"); - - codonHash2.put("GCA", "A"); - codonHash2.put("GCG", "A"); - codonHash2.put("GCC", "A"); - codonHash2.put("GCT", "A"); - - codonHash2.put("TCA", "S"); - codonHash2.put("TCG", "S"); - codonHash2.put("TCC", "S"); - codonHash2.put("TCT", "S"); - codonHash2.put("AGC", "S"); - codonHash2.put("AGT", "S"); - - codonHash2.put("AGA", "R"); - codonHash2.put("AGG", "R"); - codonHash2.put("CGA", "R"); - codonHash2.put("CGG", "R"); - codonHash2.put("CGC", "R"); - codonHash2.put("CGT", "R"); - - codonHash2.put("GGA", "G"); - codonHash2.put("GGG", "G"); - codonHash2.put("GGC", "G"); - codonHash2.put("GGT", "G"); - - codonHash2.put("TGA", "*"); - codonHash2.put("TAA", "*"); - codonHash2.put("TAG", "*"); - - codonHash2.put("TGG", "W"); - - codonHash2.put("TGC", "C"); - codonHash2.put("TGT", "C"); - - codonHash2.put("ATA", "I"); - codonHash2.put("ATC", "I"); - codonHash2.put("ATT", "I"); - - codonHash2.put("ATG", "M"); - - codonHash2.put("CTA", "L"); - codonHash2.put("CTG", "L"); - codonHash2.put("CTC", "L"); - codonHash2.put("CTT", "L"); - codonHash2.put("TTA", "L"); - codonHash2.put("TTG", "L"); - - codonHash2.put("GTA", "V"); - codonHash2.put("GTG", "V"); - codonHash2.put("GTC", "V"); - codonHash2.put("GTT", "V"); - - codonHash2.put("TTC", "F"); - codonHash2.put("TTT", "F"); - } - - static - { - Lys.addElement("AAA"); - Lys.addElement("AAG"); - Asn.addElement("AAC"); - Asn.addElement("AAT"); - - Gln.addElement("CAA"); - Gln.addElement("CAG"); - His.addElement("CAC"); - His.addElement("CAT"); - - Glu.addElement("GAA"); - Glu.addElement("GAG"); - Asp.addElement("GAC"); - Asp.addElement("GAT"); - - Tyr.addElement("TAC"); - Tyr.addElement("TAT"); - - Thr.addElement("ACA"); - Thr.addElement("ACG"); - Thr.addElement("ACC"); - Thr.addElement("ACT"); - - Pro.addElement("CCA"); - Pro.addElement("CCG"); - Pro.addElement("CCC"); - Pro.addElement("CCT"); - - Ala.addElement("GCA"); - Ala.addElement("GCG"); - Ala.addElement("GCC"); - Ala.addElement("GCT"); - - Ser.addElement("TCA"); - Ser.addElement("TCG"); - Ser.addElement("TCC"); - Ser.addElement("TCT"); - Ser.addElement("AGC"); - Ser.addElement("AGT"); - - Arg.addElement("AGA"); - Arg.addElement("AGG"); - Arg.addElement("CGA"); - Arg.addElement("CGG"); - Arg.addElement("CGC"); - Arg.addElement("CGT"); - - Gly.addElement("GGA"); - Gly.addElement("GGG"); - Gly.addElement("GGC"); - Gly.addElement("GGT"); - - STOP.addElement("TGA"); - STOP.addElement("TAA"); - STOP.addElement("TAG"); - - Trp.addElement("TGG"); - - Cys.addElement("TGC"); - Cys.addElement("TGT"); - - Ile.addElement("ATA"); - Ile.addElement("ATC"); - Ile.addElement("ATT"); - - Met.addElement("ATG"); - - Leu.addElement("CTA"); - Leu.addElement("CTG"); - Leu.addElement("CTC"); - Leu.addElement("CTT"); - Leu.addElement("TTA"); - Leu.addElement("TTG"); - - Val.addElement("GTA"); - Val.addElement("GTG"); - Val.addElement("GTC"); - Val.addElement("GTT"); - - Phe.addElement("TTC"); - Phe.addElement("TTT"); - } - - - //Stores residue codes/names and colours and other things - public static Hashtable propHash = new Hashtable(); - public static Hashtable hydrophobic = new Hashtable(); - public static Hashtable polar = new Hashtable(); - public static Hashtable small = new Hashtable(); - public static Hashtable positive = new Hashtable(); - public static Hashtable negative = new Hashtable(); - public static Hashtable charged = new Hashtable(); - public static Hashtable aromatic = new Hashtable(); - public static Hashtable aliphatic = new Hashtable(); - public static Hashtable tiny = new Hashtable(); - public static Hashtable proline = new Hashtable(); - - static - { - hydrophobic.put("I", new Integer(1)); - hydrophobic.put("L", new Integer(1)); - hydrophobic.put("V", new Integer(1)); - hydrophobic.put("C", new Integer(1)); - hydrophobic.put("A", new Integer(1)); - hydrophobic.put("G", new Integer(1)); - hydrophobic.put("M", new Integer(1)); - hydrophobic.put("F", new Integer(1)); - hydrophobic.put("Y", new Integer(1)); - hydrophobic.put("W", new Integer(1)); - hydrophobic.put("H", new Integer(1)); - hydrophobic.put("K", new Integer(1)); - hydrophobic.put("X", new Integer(1)); - hydrophobic.put("-", new Integer(1)); - hydrophobic.put("*", new Integer(1)); - hydrophobic.put("R", new Integer(0)); - hydrophobic.put("E", new Integer(0)); - hydrophobic.put("Q", new Integer(0)); - hydrophobic.put("D", new Integer(0)); - hydrophobic.put("N", new Integer(0)); - hydrophobic.put("S", new Integer(0)); - hydrophobic.put("T", new Integer(0)); - hydrophobic.put("P", new Integer(0)); - } - - static - { - polar.put("Y", new Integer(1)); - polar.put("W", new Integer(1)); - polar.put("H", new Integer(1)); - polar.put("K", new Integer(1)); - polar.put("R", new Integer(1)); - polar.put("E", new Integer(1)); - polar.put("Q", new Integer(1)); - polar.put("D", new Integer(1)); - polar.put("N", new Integer(1)); - polar.put("S", new Integer(1)); - polar.put("T", new Integer(1)); - polar.put("X", new Integer(1)); - polar.put("-", new Integer(1)); - polar.put("*", new Integer(1)); - polar.put("I", new Integer(0)); - polar.put("L", new Integer(0)); - polar.put("V", new Integer(0)); - polar.put("C", new Integer(0)); - polar.put("A", new Integer(0)); - polar.put("G", new Integer(0)); - polar.put("M", new Integer(0)); - polar.put("F", new Integer(0)); - polar.put("P", new Integer(0)); - } - - static - { - small.put("I", new Integer(0)); - small.put("L", new Integer(0)); - small.put("V", new Integer(1)); - small.put("C", new Integer(1)); - small.put("A", new Integer(1)); - small.put("G", new Integer(1)); - small.put("M", new Integer(0)); - small.put("F", new Integer(0)); - small.put("Y", new Integer(0)); - small.put("W", new Integer(0)); - small.put("H", new Integer(0)); - small.put("K", new Integer(0)); - small.put("R", new Integer(0)); - small.put("E", new Integer(0)); - small.put("Q", new Integer(0)); - small.put("D", new Integer(1)); - small.put("N", new Integer(1)); - small.put("S", new Integer(1)); - small.put("T", new Integer(1)); - small.put("P", new Integer(1)); - small.put("-", new Integer(1)); - small.put("*", new Integer(1)); - } - - static - { - positive.put("I", new Integer(0)); - positive.put("L", new Integer(0)); - positive.put("V", new Integer(0)); - positive.put("C", new Integer(0)); - positive.put("A", new Integer(0)); - positive.put("G", new Integer(0)); - positive.put("M", new Integer(0)); - positive.put("F", new Integer(0)); - positive.put("Y", new Integer(0)); - positive.put("W", new Integer(0)); - positive.put("H", new Integer(1)); - positive.put("K", new Integer(1)); - positive.put("R", new Integer(1)); - positive.put("E", new Integer(0)); - positive.put("Q", new Integer(0)); - positive.put("D", new Integer(0)); - positive.put("N", new Integer(0)); - positive.put("S", new Integer(0)); - positive.put("T", new Integer(0)); - positive.put("P", new Integer(0)); - positive.put("-", new Integer(1)); - positive.put("*", new Integer(1)); - } - - static - { - negative.put("I", new Integer(0)); - negative.put("L", new Integer(0)); - negative.put("V", new Integer(0)); - negative.put("C", new Integer(0)); - negative.put("A", new Integer(0)); - negative.put("G", new Integer(0)); - negative.put("M", new Integer(0)); - negative.put("F", new Integer(0)); - negative.put("Y", new Integer(0)); - negative.put("W", new Integer(0)); - negative.put("H", new Integer(0)); - negative.put("K", new Integer(0)); - negative.put("R", new Integer(0)); - negative.put("E", new Integer(1)); - negative.put("Q", new Integer(0)); - negative.put("D", new Integer(1)); - negative.put("N", new Integer(0)); - negative.put("S", new Integer(0)); - negative.put("T", new Integer(0)); - negative.put("P", new Integer(0)); - negative.put("-", new Integer(1)); - negative.put("*", new Integer(1)); - } - - static - { - charged.put("I", new Integer(0)); - charged.put("L", new Integer(0)); - charged.put("V", new Integer(0)); - charged.put("C", new Integer(0)); - charged.put("A", new Integer(0)); - charged.put("G", new Integer(0)); - charged.put("M", new Integer(0)); - charged.put("F", new Integer(0)); - charged.put("Y", new Integer(0)); - charged.put("W", new Integer(0)); - charged.put("H", new Integer(1)); - charged.put("K", new Integer(1)); - charged.put("R", new Integer(1)); - charged.put("E", new Integer(1)); - charged.put("Q", new Integer(0)); - charged.put("D", new Integer(1)); - charged.put("N", new Integer(1)); - charged.put("S", new Integer(0)); - charged.put("T", new Integer(0)); - charged.put("P", new Integer(0)); - charged.put("-", new Integer(1)); - charged.put("*", new Integer(1)); - } - - static - { - aromatic.put("I", new Integer(0)); - aromatic.put("L", new Integer(0)); - aromatic.put("V", new Integer(0)); - aromatic.put("C", new Integer(0)); - aromatic.put("A", new Integer(0)); - aromatic.put("G", new Integer(0)); - aromatic.put("M", new Integer(0)); - aromatic.put("F", new Integer(1)); - aromatic.put("Y", new Integer(1)); - aromatic.put("W", new Integer(1)); - aromatic.put("H", new Integer(1)); - aromatic.put("K", new Integer(0)); - aromatic.put("R", new Integer(0)); - aromatic.put("E", new Integer(0)); - aromatic.put("Q", new Integer(0)); - aromatic.put("D", new Integer(0)); - aromatic.put("N", new Integer(0)); - aromatic.put("S", new Integer(0)); - aromatic.put("T", new Integer(0)); - aromatic.put("P", new Integer(0)); - aromatic.put("-", new Integer(1)); - aromatic.put("*", new Integer(1)); - } - - static - { - aliphatic.put("I", new Integer(1)); - aliphatic.put("L", new Integer(1)); - aliphatic.put("V", new Integer(1)); - aliphatic.put("C", new Integer(0)); - aliphatic.put("A", new Integer(0)); - aliphatic.put("G", new Integer(0)); - aliphatic.put("M", new Integer(0)); - aliphatic.put("F", new Integer(0)); - aliphatic.put("Y", new Integer(0)); - aliphatic.put("W", new Integer(0)); - aliphatic.put("H", new Integer(0)); - aliphatic.put("K", new Integer(0)); - aliphatic.put("R", new Integer(0)); - aliphatic.put("E", new Integer(0)); - aliphatic.put("Q", new Integer(0)); - aliphatic.put("D", new Integer(0)); - aliphatic.put("N", new Integer(0)); - aliphatic.put("S", new Integer(0)); - aliphatic.put("T", new Integer(0)); - aliphatic.put("P", new Integer(0)); - aliphatic.put("-", new Integer(1)); - aliphatic.put("*", new Integer(1)); - } - - static - { - tiny.put("I", new Integer(0)); - tiny.put("L", new Integer(0)); - tiny.put("V", new Integer(0)); - tiny.put("C", new Integer(0)); - tiny.put("A", new Integer(1)); - tiny.put("G", new Integer(1)); - tiny.put("M", new Integer(0)); - tiny.put("F", new Integer(0)); - tiny.put("Y", new Integer(0)); - tiny.put("W", new Integer(0)); - tiny.put("H", new Integer(0)); - tiny.put("K", new Integer(0)); - tiny.put("R", new Integer(0)); - tiny.put("E", new Integer(0)); - tiny.put("Q", new Integer(0)); - tiny.put("D", new Integer(0)); - tiny.put("N", new Integer(0)); - tiny.put("S", new Integer(1)); - tiny.put("T", new Integer(0)); - tiny.put("P", new Integer(0)); - tiny.put("-", new Integer(1)); - tiny.put("*", new Integer(1)); - } - - static - { - proline.put("I", new Integer(0)); - proline.put("L", new Integer(0)); - proline.put("V", new Integer(0)); - proline.put("C", new Integer(0)); - proline.put("A", new Integer(0)); - proline.put("G", new Integer(0)); - proline.put("M", new Integer(0)); - proline.put("F", new Integer(0)); - proline.put("Y", new Integer(0)); - proline.put("W", new Integer(0)); - proline.put("H", new Integer(0)); - proline.put("K", new Integer(0)); - proline.put("R", new Integer(0)); - proline.put("E", new Integer(0)); - proline.put("Q", new Integer(0)); - proline.put("D", new Integer(0)); - proline.put("N", new Integer(0)); - proline.put("S", new Integer(0)); - proline.put("T", new Integer(0)); - proline.put("P", new Integer(1)); - proline.put("-", new Integer(1)); - proline.put("*", new Integer(1)); - } - - static - { - propHash.put("hydrophobic", hydrophobic); - propHash.put("small", small); - propHash.put("positive", positive); - propHash.put("negative", negative); - propHash.put("charged", charged); - propHash.put("aromatic", aromatic); - propHash.put("aliphatic", aliphatic); - propHash.put("tiny", tiny); - propHash.put("proline", proline); - propHash.put("polar", polar); - } - - private ResidueProperties() - { - } - - public static double getHydmax() - { - return hydmax; - } - - public static double getHydmin() - { - return hydmin; - } - - public static double[] getHyd() - { - return hyd; - } - - public static Hashtable getAA3Hash() - { - return aa3Hash; - } - - public static int[][] getDNA() - { - return ResidueProperties.DNA; - } - - public static int[][] getBLOSUM62() - { - return ResidueProperties.BLOSUM62; - } - - public static int getPAM250(String A1, String A2) - { - int a = aaIndex[A1.charAt(0)]; - int b = aaIndex[A2.charAt(0)]; - - int pog = ResidueProperties.PAM250[a][b]; - - return pog; - } - - public static int getBLOSUM62(char c1, char c2) - { - int pog = 0; - - try - { - int a = aaIndex[c1]; - int b = aaIndex[c2]; - - pog = ResidueProperties.BLOSUM62[a][b]; - } - catch (Exception e) - { - //System.out.println("Unknown residue in " + A1 + " " + A2); - } - - return pog; - } - - public static Vector getCodons(String res) - { - if (codonHash.containsKey(res)) - { - return (Vector) codonHash.get(res); - } - - return null; - } - - public static String codonTranslate(String codon) - { - Enumeration e = codonHash.keys(); - - while (e.hasMoreElements()) - { - String key = (String) e.nextElement(); - Vector tmp = (Vector) codonHash.get(key); - - if (tmp.contains(codon.toUpperCase())) - { - return key; - } - } - - return null; - } -} +/* + * Jalview - A Sequence Alignment Editor and Viewer + * Copyright (C) 2006 AM Waterhouse, J Procter, G Barton, M Clamp, S Searle + * + * This program 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 2 + * of the License, or (at your option) any later version. + * + * This program 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 this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA + */ +package jalview.schemes; + +import java.util.*; + +import java.awt.*; + +public class ResidueProperties +{ + public static Hashtable scoreMatrices=new Hashtable(); + //Stores residue codes/names and colours and other things + public static final int [] aaIndex; // aaHash version 2.1.1 and below + public static final int [] nucleotideIndex; + public static final Hashtable aa3Hash = new Hashtable(); + public static final Hashtable aa2Triplet = new Hashtable(); + public static final Hashtable nucleotideName = new Hashtable(); + + + static + { + aaIndex = new int[132]; + for(int i=0; i<132; i++) + aaIndex[i] = -1; + + aaIndex['A'] = 0; + aaIndex['R'] = 1; + aaIndex['N'] = 2; + aaIndex['D'] = 3; + aaIndex['C'] = 4; + aaIndex['Q'] = 5; + aaIndex['E'] = 6; + aaIndex['G'] = 7; + aaIndex['H'] = 8; + aaIndex['I'] = 9; + aaIndex['L'] = 10; + aaIndex['K'] = 11; + aaIndex['M'] = 12; + aaIndex['F'] = 13; + aaIndex['P'] = 14; + aaIndex['S'] = 15; + aaIndex['T'] = 16; + aaIndex['W'] = 17; + aaIndex['Y'] = 18; + aaIndex['V'] = 19; + aaIndex['B'] = 20; + aaIndex['Z'] = 21; + aaIndex['X'] = 22; + aaIndex['U'] = 22; + aaIndex['a'] = 0; + aaIndex['r'] = 1; + aaIndex['n'] = 2; + aaIndex['d'] = 3; + aaIndex['c'] = 4; + aaIndex['q'] = 5; + aaIndex['e'] = 6; + aaIndex['g'] = 7; + aaIndex['h'] = 8; + aaIndex['i'] = 9; + aaIndex['l'] = 10; + aaIndex['k'] = 11; + aaIndex['m'] = 12; + aaIndex['f'] = 13; + aaIndex['p'] = 14; + aaIndex['s'] = 15; + aaIndex['t'] = 16; + aaIndex['w'] = 17; + aaIndex['y'] = 18; + aaIndex['v'] = 19; + aaIndex['b'] = 20; + aaIndex['z'] = 21; + aaIndex['x'] = 22; + aaIndex['u'] = 22; + aaIndex['-'] = 23; + aaIndex['*'] = 23; + aaIndex['.'] = 23; + aaIndex[' '] = 23; + } + + static + { + nucleotideIndex = new int[132]; + for (int i = 0; i < 132; i++) + nucleotideIndex[i] = -1; + + nucleotideIndex['A'] = 0; + nucleotideIndex['a'] = 0; + nucleotideIndex['C'] = 1; + nucleotideIndex['c'] = 1; + nucleotideIndex['G'] = 2; + nucleotideIndex['g'] = 2; + nucleotideIndex['T'] = 3; + nucleotideIndex['t'] = 3; + nucleotideIndex['U'] = 4; + nucleotideIndex['u'] = 4; + nucleotideIndex['I'] = 5; + nucleotideIndex['i'] = 5; + nucleotideIndex['X'] = 6; + nucleotideIndex['x'] = 6; + nucleotideIndex['R'] = 7; + nucleotideIndex['r'] = 7; + nucleotideIndex['Y'] = 8; + nucleotideIndex['y'] = 8; + nucleotideIndex['N'] = 9; + nucleotideIndex['n'] = 9; + + + nucleotideName.put("A", "Adenine"); + nucleotideName.put("a", "Adenine"); + nucleotideName.put("G", "Guanine"); + nucleotideName.put("g", "Guanine"); + nucleotideName.put("C", "Cytosine"); + nucleotideName.put("c", "Cytosine"); + nucleotideName.put("T", "Thymine"); + nucleotideName.put("t", "Thymine"); + nucleotideName.put("U", "Uracil"); + nucleotideName.put("u", "Uracil"); + nucleotideName.put("I", "Inosine"); + nucleotideName.put("i", "Inosine"); + nucleotideName.put("X", "Xanthine"); + nucleotideName.put("x", "Xanthine"); + nucleotideName.put("R", "Unknown Purine"); + nucleotideName.put("r", "Unknown Purine"); + nucleotideName.put("Y", "Unknown Pyrimidine"); + nucleotideName.put("y", "Unknown Pyrimidine"); + nucleotideName.put("N", "Unknown"); + nucleotideName.put("n", "Unknown"); + } + + + static + { + aa3Hash.put("ALA", new Integer(0)); + aa3Hash.put("ARG", new Integer(1)); + aa3Hash.put("ASN", new Integer(2)); + aa3Hash.put("ASP", new Integer(3)); //D + aa3Hash.put("CYS", new Integer(4)); + aa3Hash.put("GLN", new Integer(5)); //Q + aa3Hash.put("GLU", new Integer(6)); // E + aa3Hash.put("GLY", new Integer(7)); + aa3Hash.put("HIS", new Integer(8)); + aa3Hash.put("ILE", new Integer(9)); + aa3Hash.put("LEU", new Integer(10)); + aa3Hash.put("LYS", new Integer(11)); + aa3Hash.put("MET", new Integer(12)); + aa3Hash.put("PHE", new Integer(13)); + aa3Hash.put("PRO", new Integer(14)); + aa3Hash.put("SER", new Integer(15)); + aa3Hash.put("THR", new Integer(16)); + aa3Hash.put("TRP", new Integer(17)); + aa3Hash.put("TYR", new Integer(18)); + aa3Hash.put("VAL", new Integer(19)); + // IUB Nomenclature for ambiguous peptides + aa3Hash.put("ASX", new Integer(20)); // "B"; + aa3Hash.put("GLX", new Integer(21)); // X + aa3Hash.put("XAA", new Integer(22));// X unknown + aa3Hash.put("-", new Integer(23)); + aa3Hash.put("*", new Integer(23)); + aa3Hash.put(".", new Integer(23)); + aa3Hash.put(" ", new Integer(23)); + aa3Hash.put("Gap", new Integer(23)); + } + + static + { + aa2Triplet.put("A", "ALA"); + aa2Triplet.put("a", "ALA"); + aa2Triplet.put("R", "ARG"); + aa2Triplet.put("r", "ARG"); + aa2Triplet.put("N", "ASN"); + aa2Triplet.put("n", "ASN"); + aa2Triplet.put("D", "ASP"); + aa2Triplet.put("d", "ASP"); + aa2Triplet.put("C", "CYS"); + aa2Triplet.put("c", "CYS"); + aa2Triplet.put("Q", "GLN"); + aa2Triplet.put("q", "GLN"); + aa2Triplet.put("E", "GLU"); + aa2Triplet.put("e", "GLU"); + aa2Triplet.put("G", "GLY"); + aa2Triplet.put("g", "GLY"); + aa2Triplet.put("H", "HIS"); + aa2Triplet.put("h", "HIS"); + aa2Triplet.put("I", "ILE"); + aa2Triplet.put("i", "ILE"); + aa2Triplet.put("L", "LEU"); + aa2Triplet.put("l", "LEU"); + aa2Triplet.put("K", "LYS"); + aa2Triplet.put("k", "LYS"); + aa2Triplet.put("M", "MET"); + aa2Triplet.put("m", "MET"); + aa2Triplet.put("F", "PHE"); + aa2Triplet.put("f", "PHE"); + aa2Triplet.put("P", "PRO"); + aa2Triplet.put("p", "PRO"); + aa2Triplet.put("S", "SER"); + aa2Triplet.put("s", "SER"); + aa2Triplet.put("T", "THR"); + aa2Triplet.put("t", "THR"); + aa2Triplet.put("W", "TRP"); + aa2Triplet.put("w", "TRP"); + aa2Triplet.put("Y", "TYR"); + aa2Triplet.put("y", "TYR"); + aa2Triplet.put("V", "VAL"); + aa2Triplet.put("v", "VAL"); + } + + public static final String[] aa = + { + "A", "R", "N", "D", "C", "Q", "E", "G", "H", "I", "L", "K", "M", "F", + "P", "S", "T", "W", "Y", "V", "B", "Z", "X", "_", "*", ".", " " + }; + public static final Color midBlue = new Color(100, 100, 255); + public static final Vector scaleColours = new Vector(); + + static + { + scaleColours.addElement(new Color(114, 0, 147)); + scaleColours.addElement(new Color(156, 0, 98)); + scaleColours.addElement(new Color(190, 0, 0)); + scaleColours.addElement(Color.red); + scaleColours.addElement(new Color(255, 125, 0)); + scaleColours.addElement(Color.orange); + scaleColours.addElement(new Color(255, 194, 85)); + scaleColours.addElement(Color.yellow); + scaleColours.addElement(new Color(255, 255, 181)); + scaleColours.addElement(Color.white); + } + + public static final Color[] taylor = + { + new Color(204, 255, 0), // A Greenish-yellowy-yellow + new Color(0, 0, 255), // R Blueish-bluey-blue + new Color(204, 0, 255), // N Blueish-reddy-blue + new Color(255, 0, 0), // D Reddish-reddy-red + new Color(255, 255, 0), // C Yellowish-yellowy-yellow + new Color(255, 0, 204), // Q Reddish-bluey-red + new Color(255, 0, 102), // E Blueish-reddy-red + new Color(255, 153, 0), // G Yellowy-reddy-yellow + new Color(0, 102, 255), // H Greenish-bluey-blue + new Color(102, 255, 0), // I Greenish-yellowy-green + new Color(51, 255, 0), // L Yellowish-greeny-green + new Color(102, 0, 255), // K Reddish-bluey-blue + new Color(0, 255, 0), // M Greenish-greeny-green + new Color(0, 255, 102), // F Blueish-greeny-green + new Color(255, 204, 0), // P Reddish-yellowy-yellow + new Color(255, 51, 0), // S Yellowish-reddy-red + new Color(255, 102, 0), // T Reddish-yellowy-red + new Color(0, 204, 255), // W Blueish-greeny-green + new Color(0, 255, 204), // Y Greenish-bluey-green + new Color(153, 255, 0), // V Yellowish-greeny-yellow + Color.white, // B + Color.white, // Z + Color.white, // X + Color.white, // - + Color.white, // * + Color.white // . + }; + public static final Color[] nucleotide = + { + new Color(100, 247, 63), // A + new Color(255, 179, 64), // C + new Color(235, 65, 60), // G + new Color(60, 136, 238), // T + new Color(60, 136, 238) // U + }; + public static final Color[] color = + { + Color.pink, // A + midBlue, // R + Color.green, // N + Color.red, // D + Color.yellow, // C + Color.green, // Q + Color.red, // E + Color.magenta, // G + Color.red, // H + Color.pink, // I + Color.pink, // L + midBlue, // K + Color.pink, // M + Color.orange, // F + Color.magenta, // P + Color.green, // S + Color.green, // T + Color.orange, // W + Color.orange, // Y + Color.pink, // V + Color.white, // B + Color.white, // Z + Color.white, // X + Color.white, // - + Color.white, // * + Color.white, // . + Color.white // ' ' + }; + + // Dunno where I got these numbers from + public static final double[] hyd2 = + { + 0.62, //A + 0.29, //R + -0.90, //N + -0.74, //D + 1.19, //C + 0.48, //Q + -0.40, //E + 1.38, //G + -1.50, //H + 1.06, //I + 0.64, //L + -0.78, //K + 0.12, //M + -0.85, //F + -2.53, //P + -0.18, //S + -0.05, //T + 1.08, //W + 0.81, //Y + 0.0, //V + 0.26, //B + 0.0, //Z + 0.0 //X + }; + public static final double[] helix = + { + 1.42, 0.98, 0.67, 1.01, 0.70, 1.11, 1.51, 0.57, 1.00, 1.08, 1.21, 1.16, + 1.45, 1.13, 0.57, 0.77, 0.83, 1.08, 0.69, 1.06, 0.84, 1.31, 1.00, 0.0 + }; + public static final double helixmin = 0.57; + public static final double helixmax = 1.51; + public static final double[] strand = + { + 0.83, 0.93, 0.89, 0.54, 1.19, 1.10, 0.37, 0.75, 0.87, 1.60, 1.30, 0.74, + 1.05, 1.38, 0.55, 0.75, 1.19, 1.37, 1.47, 1.70, 0.72, 0.74, 1.0, 0.0 + }; + public static final double strandmin = 0.37; + public static final double strandmax = 1.7; + public static final double[] turn = + { + 0.66, 0.95, 1.56, 1.46, 1.19, 0.98, 0.74, 1.56, 0.95, 0.47, 0.59, 1.01, + 0.60, 0.60, 1.52, 1.43, 0.96, 0.96, 1.14, 0.50, 1.51, 0.86, 1.00, 0, 0 + }; + public static final double turnmin = 0.47; + public static final double turnmax = 1.56; + public static final double[] buried = + { + 1.7, 0.1, 0.4, 0.4, 4.6, 0.3, 0.3, 1.8, 0.8, 3.1, 2.4, 0.05, 1.9, 2.2, + 0.6, 0.8, 0.7, 1.6, 0.5, 2.9, 0.4, 0.3, 1.358, 0.00 + }; + public static final double buriedmin = 0.05; + public static final double buriedmax = 4.6; + + // This is hydropathy index + // Kyte, J., and Doolittle, R.F., J. Mol. Biol. + // 1157, 105-132, 1982 + public static final double[] hyd = + { + 1.8, -4.5, -3.5, -3.5, 2.5, -3.5, -3.5, -0.4, -3.2, 4.5, 3.8, -3.9, 1.9, + 2.8, -1.6, -0.8, -0.7, -0.9, -1.3, 4.2, -3.5, -3.5, -0.49, 0.0 + }; + public static final double hydmax = 4.5; + public static final double hydmin = -3.9; + + //public static final double hydmax = 1.38; + //public static final double hydmin = -2.53; + private static final int[][] BLOSUM62 = + { + { + 4, -1, -2, -2, 0, -1, -1, 0, -2, -1, -1, -1, -1, -2, -1, 1, 0, -3, + -2, 0, -2, -1, 0, -4 + }, + { + -1, 5, 0, -2, -3, 1, 0, -2, 0, -3, -2, 2, -1, -3, -2, -1, -1, -3, -2, + -3, -1, 0, -1, -4 + }, + { + -2, 0, 6, 1, -3, 0, 0, 0, 1, -3, -3, 0, -2, -3, -2, 1, 0, -4, -2, -3, + 3, 0, -1, -4 + }, + { + -2, -2, 1, 6, -3, 0, 2, -1, -1, -3, -4, -1, -3, -3, -1, 0, -1, -4, + -3, -3, 4, 1, -1, -4 + }, + { + 0, 3, -3, -3, 9, -3, -4, -3, -3, -1, -1, -3, -1, -2, -3, -1, -1, -2, + -2, -1, -3, -3, -2, -4 + }, + { + -1, 1, 0, 0, -3, 5, 2, -2, 0, -3, -2, 1, 0, -3, -1, 0, -1, -2, -1, + -2, 0, 3, -1, -4 + }, + { + -1, 0, 0, 2, -4, 2, 5, -2, 0, -3, -3, 1, -2, -3, -1, 0, -1, -3, -2, + -2, 1, 4, -1, -4 + }, + { + 0, -2, 0, -1, -3, -2, -2, 6, -2, -4, -4, -2, -3, -3, -2, 0, -2, -2, + -3, -3, -1, -2, -1, -4 + }, + { + -2, 0, 1, -1, -3, 0, 0, -2, 8, -3, -3, -1, -2, -1, -2, -1, -2, -2, 2, + -3, 0, 0, -1, -4 + }, + { + -1, -3, -3, -3, -1, -3, -3, -4, -3, 4, 2, -3, 1, 0, -3, -2, -1, -3, + -1, 3, -3, -3, -1, -4 + }, + { + -1, -2, -3, -4, -1, -2, -3, -4, -3, 2, 4, -2, 2, 0, -3, -2, -1, -2, + -1, 1, -4, -3, -1, -4 + }, + { + -1, 2, 0, -1, -3, 1, 1, -2, -1, -3, -2, 5, -1, -3, -1, 0, -1, -3, -2, + -2, 0, 1, -1, -4 + }, + { + -1, -1, -2, -3, -1, 0, -2, -3, -2, 1, 2, -1, 5, 0, -2, -1, -1, -1, + -1, 1, -3, -1, -1, -4 + }, + { + -2, -3, -3, -3, -2, -3, -3, -3, -1, 0, 0, -3, 0, 6, -4, -2, -2, 1, 3, + -1, -3, -3, -1, -4 + }, + { + -1, -2, -2, -1, -3, -1, -1, -2, -2, -3, -3, -1, -2, -4, 7, -1, -1, + -4, -3, -2, -2, -1, -2, -4 + }, + { + 1, -1, 1, 0, -1, 0, 0, 0, -1, -2, -2, 0, -1, -2, -1, 4, 1, -3, -2, + -2, 0, 0, 0, -4 + }, + { + 0, -1, 0, -1, -1, -1, -1, -2, -2, -1, -1, -1, -1, -2, -1, 1, 5, -2, + -2, 0, -1, -1, 0, -4 + }, + { + -3, -3, -4, -4, -2, -2, -3, -2, -2, -3, -2, -3, -1, 1, -4, -3, -2, + 11, 2, -3, -4, -3, -2, -4 + }, + { + -2, -2, -2, -3, -2, -1, -2, -3, 2, -1, -1, -2, -1, 3, -3, -2, -2, 2, + 7, -1, -3, -2, -1, -4 + }, + { + 0, -3, -3, -3, -1, -2, -2, -3, -3, 3, 1, -2, 1, -1, -2, -2, 0, -3, + -1, 4, -3, -2, -1, -4 + }, + { + -2, -1, 3, 4, -3, 0, 1, -1, 0, -3, -4, 0, -3, -3, -2, 0, -1, -4, -3, + -3, 4, 1, -1, -4 + }, + { + -1, 0, 0, 1, -3, 3, 4, -2, 0, -3, -3, 1, -1, -3, -1, 0, -1, -3, -2, + -2, 1, 4, -1, -4 + }, + { + 0, -1, -1, -1, -2, -1, -1, -1, -1, -1, -1, -1, -1, -1, -2, 0, 0, -2, + -1, -1, -1, -1, -1, -4 + }, + { + -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, + -4, -4, -4, -4, -4, -4, 1 + }, + }; + static final int[][] PAM250 = + { + { + 2, -2, 0, 0, -2, 0, 0, 1, -1, -1, -2, -1, -1, -3, 1, 1, 1, -6, -3, 0, + 0, 0, 0, -8 + }, + { + -2, 6, 0, -1, -4, 1, -1, -3, 2, -2, -3, 3, 0, -4, 0, 0, -1, 2, -4, + -2, -1, 0, -1, -8 + }, + { + 0, 0, 2, 2, -4, 1, 1, 0, 2, -2, -3, 1, -2, -3, 0, 1, 0, -4, -2, -2, + 2, 1, 0, -8 + }, + { + 0, -1, 2, 4, -5, 2, 3, 1, 1, -2, -4, 0, -3, -6, -1, 0, 0, -7, -4, -2, + 3, 3, -1, -8 + }, + { + -2, -4, -4, -5, 12, -5, -5, -3, -3, -2, -6, -5, -5, -4, -3, 0, -2, + -8, 0, -2, -4, -5, -3, -8 + }, + { + 0, 1, 1, 2, -5, 4, 2, -1, 3, -2, -2, 1, -1, -5, 0, -1, -1, -5, -4, + -2, 1, 3, -1, -8 + }, + { + 0, -1, 1, 3, -5, 2, 4, 0, 1, -2, -3, 0, -2, -5, -1, 0, 0, -7, -4, -2, + 3, 3, -1, -8 + }, + { + 1, -3, 0, 1, -3, -1, 0, 5, -2, -3, -4, -2, -3, -5, 0, 1, 0, -7, -5, + -1, 0, 0, -1, -8 + }, + { + -1, 2, 2, 1, -3, 3, 1, -2, 6, -2, -2, 0, -2, -2, 0, -1, -1, -3, 0, + -2, 1, 2, -1, -8 + }, + { + -1, -2, -2, -2, -2, -2, -2, -3, -2, 5, 2, -2, 2, 1, -2, -1, 0, -5, + -1, 4, -2, -2, -1, -8 + }, + { + -2, -3, -3, -4, -6, -2, -3, -4, -2, 2, 6, -3, 4, 2, -3, -3, -2, -2, + -1, 2, -3, -3, -1, -8 + }, + { + -1, 3, 1, 0, -5, 1, 0, -2, 0, -2, -3, 5, 0, -5, -1, 0, 0, -3, -4, -2, + 1, 0, -1, -8 + }, + { + -1, 0, -2, -3, -5, -1, -2, -3, -2, 2, 4, 0, 6, 0, -2, -2, -1, -4, -2, + 2, -2, -2, -1, -8 + }, + { + -3, -4, -3, -6, -4, -5, -5, -5, -2, 1, 2, -5, 0, 9, -5, -3, -3, 0, 7, + -1, -4, -5, -2, -8 + }, + { + 1, 0, 0, -1, -3, 0, -1, 0, 0, -2, -3, -1, -2, -5, 6, 1, 0, -6, -5, + -1, -1, 0, -1, -8 + }, + { + 1, 0, 1, 0, 0, -1, 0, 1, -1, -1, -3, 0, -2, -3, 1, 2, 1, -2, -3, -1, + 0, 0, 0, -8 + }, + { + 1, -1, 0, 0, -2, -1, 0, 0, -1, 0, -2, 0, -1, -3, 0, 1, 3, -5, -3, 0, + 0, -1, 0, -8 + }, + { + -6, 2, -4, -7, -8, -5, -7, -7, -3, -5, -2, -3, -4, 0, -6, -2, -5, 17, + 0, -6, -5, -6, -4, -8 + }, + { + -3, -4, -2, -4, 0, -4, -4, -5, 0, -1, -1, -4, -2, 7, -5, -3, -3, 0, + 10, -2, -3, -4, -2, -8 + }, + { + 0, -2, -2, -2, -2, -2, -2, -1, -2, 4, 2, -2, 2, -1, -1, -1, 0, -6, + -2, 4, -2, -2, -1, -8 + }, + { + 0, -1, 2, 3, -4, 1, 3, 0, 1, -2, -3, 1, -2, -4, -1, 0, 0, -5, -3, -2, + 3, 2, -1, -8 + }, + { + 0, 0, 1, 3, -5, 3, 3, 0, 2, -2, -3, 0, -2, -5, 0, 0, -1, -6, -4, -2, + 2, 3, -1, -8 + }, + { + 0, -1, 0, -1, -3, -1, -1, -1, -1, -1, -1, -1, -1, -2, -1, 0, 0, -4, + -2, -1, -1, -1, -1, -8 + }, + { + -8, -8, -8, -8, -8, -8, -8, -8, -8, -8, -8, -8, -8, -8, -8, -8, -8, + -8, -8, -8, -8, -8, -8, 1 + }, + }; + public static final Hashtable ssHash = new Hashtable(); // stores the number value of the aa + + static + { + ssHash.put("H", Color.magenta); + ssHash.put("E", Color.yellow); + ssHash.put("-", Color.white); + ssHash.put(".", Color.white); + ssHash.put("S", Color.cyan); + ssHash.put("T", Color.blue); + ssHash.put("G", Color.pink); + ssHash.put("I", Color.pink); + ssHash.put("B", Color.yellow); + } + + static final int[][] DNA = + { + { + 5, -4, -4, -4, 1}, // C + { + -4, 5, -4, -4, 1}, // T + { + -4, -4, 5, -4, 1}, // A + { + -4, -4, -4, 5, 1}, // G + { + 1, 1, 1, 1, 1}, // - + }; + /** + * register matrices in list + */ + static { + scoreMatrices.put("BLOSUM62", new ScoreMatrix("BLOSUM62",BLOSUM62, 0)); + scoreMatrices.put("PAM250", new ScoreMatrix("PAM250",PAM250, 0)); + scoreMatrices.put("DNA", new ScoreMatrix("DNA", DNA, 1)); + } + public static final Color[] pidColours = + { + midBlue, new Color(153, 153, 255), + // Color.lightGray, + new Color(204, 204, 255), + }; + public static final float[] pidThresholds = + { + 80, 60, 40, }; + public static Hashtable codonHash = new Hashtable(); + public static Vector Lys = new Vector(); + public static Vector Asn = new Vector(); + public static Vector Gln = new Vector(); + public static Vector His = new Vector(); + public static Vector Glu = new Vector(); + public static Vector Asp = new Vector(); + public static Vector Tyr = new Vector(); + public static Vector Thr = new Vector(); + public static Vector Pro = new Vector(); + public static Vector Ala = new Vector(); + public static Vector Ser = new Vector(); + public static Vector Arg = new Vector(); + public static Vector Gly = new Vector(); + public static Vector Trp = new Vector(); + public static Vector Cys = new Vector(); + public static Vector Ile = new Vector(); + public static Vector Met = new Vector(); + public static Vector Leu = new Vector(); + public static Vector Val = new Vector(); + public static Vector Phe = new Vector(); + public static Vector STOP = new Vector(); + + static + { + codonHash.put("K", Lys); + codonHash.put("N", Asn); + codonHash.put("Q", Gln); + codonHash.put("H", His); + codonHash.put("E", Glu); + codonHash.put("D", Asp); + codonHash.put("Y", Tyr); + codonHash.put("T", Thr); + codonHash.put("P", Pro); + codonHash.put("A", Ala); + codonHash.put("S", Ser); + codonHash.put("R", Arg); + codonHash.put("G", Gly); + codonHash.put("W", Trp); + codonHash.put("C", Cys); + codonHash.put("I", Ile); + codonHash.put("M", Met); + codonHash.put("L", Leu); + codonHash.put("V", Val); + codonHash.put("F", Phe); + codonHash.put("STOP", STOP); + } + + public static Hashtable codonHash2 = new Hashtable(); + + static + { + codonHash2.put("AAA", "K"); + codonHash2.put("AAG", "K"); + codonHash2.put("AAC", "N"); + codonHash2.put("AAT", "N"); + + codonHash2.put("CAA", "E"); + codonHash2.put("CAG", "E"); + codonHash2.put("CAC", "H"); + codonHash2.put("CAT", "H"); + + codonHash2.put("GAA", "Q"); + codonHash2.put("GAG", "Q"); + codonHash2.put("GAC", "D"); + codonHash2.put("GAT", "D"); + + codonHash2.put("TAC", "Y"); + codonHash2.put("TAT", "Y"); + + codonHash2.put("ACA", "T"); + codonHash2.put("AAG", "T"); + codonHash2.put("ACC", "T"); + codonHash2.put("ACT", "T"); + + codonHash2.put("CCA", "P"); + codonHash2.put("CCG", "P"); + codonHash2.put("CCC", "P"); + codonHash2.put("CCT", "P"); + + codonHash2.put("GCA", "A"); + codonHash2.put("GCG", "A"); + codonHash2.put("GCC", "A"); + codonHash2.put("GCT", "A"); + + codonHash2.put("TCA", "S"); + codonHash2.put("TCG", "S"); + codonHash2.put("TCC", "S"); + codonHash2.put("TCT", "S"); + codonHash2.put("AGC", "S"); + codonHash2.put("AGT", "S"); + + codonHash2.put("AGA", "R"); + codonHash2.put("AGG", "R"); + codonHash2.put("CGA", "R"); + codonHash2.put("CGG", "R"); + codonHash2.put("CGC", "R"); + codonHash2.put("CGT", "R"); + + codonHash2.put("GGA", "G"); + codonHash2.put("GGG", "G"); + codonHash2.put("GGC", "G"); + codonHash2.put("GGT", "G"); + + codonHash2.put("TGA", "*"); + codonHash2.put("TAA", "*"); + codonHash2.put("TAG", "*"); + + codonHash2.put("TGG", "W"); + + codonHash2.put("TGC", "C"); + codonHash2.put("TGT", "C"); + + codonHash2.put("ATA", "I"); + codonHash2.put("ATC", "I"); + codonHash2.put("ATT", "I"); + + codonHash2.put("ATG", "M"); + + codonHash2.put("CTA", "L"); + codonHash2.put("CTG", "L"); + codonHash2.put("CTC", "L"); + codonHash2.put("CTT", "L"); + codonHash2.put("TTA", "L"); + codonHash2.put("TTG", "L"); + + codonHash2.put("GTA", "V"); + codonHash2.put("GTG", "V"); + codonHash2.put("GTC", "V"); + codonHash2.put("GTT", "V"); + + codonHash2.put("TTC", "F"); + codonHash2.put("TTT", "F"); + } + + static + { + Lys.addElement("AAA"); + Lys.addElement("AAG"); + Asn.addElement("AAC"); + Asn.addElement("AAT"); + + Gln.addElement("CAA"); + Gln.addElement("CAG"); + His.addElement("CAC"); + His.addElement("CAT"); + + Glu.addElement("GAA"); + Glu.addElement("GAG"); + Asp.addElement("GAC"); + Asp.addElement("GAT"); + + Tyr.addElement("TAC"); + Tyr.addElement("TAT"); + + Thr.addElement("ACA"); + Thr.addElement("ACG"); + Thr.addElement("ACC"); + Thr.addElement("ACT"); + + Pro.addElement("CCA"); + Pro.addElement("CCG"); + Pro.addElement("CCC"); + Pro.addElement("CCT"); + + Ala.addElement("GCA"); + Ala.addElement("GCG"); + Ala.addElement("GCC"); + Ala.addElement("GCT"); + + Ser.addElement("TCA"); + Ser.addElement("TCG"); + Ser.addElement("TCC"); + Ser.addElement("TCT"); + Ser.addElement("AGC"); + Ser.addElement("AGT"); + + Arg.addElement("AGA"); + Arg.addElement("AGG"); + Arg.addElement("CGA"); + Arg.addElement("CGG"); + Arg.addElement("CGC"); + Arg.addElement("CGT"); + + Gly.addElement("GGA"); + Gly.addElement("GGG"); + Gly.addElement("GGC"); + Gly.addElement("GGT"); + + STOP.addElement("TGA"); + STOP.addElement("TAA"); + STOP.addElement("TAG"); + + Trp.addElement("TGG"); + + Cys.addElement("TGC"); + Cys.addElement("TGT"); + + Ile.addElement("ATA"); + Ile.addElement("ATC"); + Ile.addElement("ATT"); + + Met.addElement("ATG"); + + Leu.addElement("CTA"); + Leu.addElement("CTG"); + Leu.addElement("CTC"); + Leu.addElement("CTT"); + Leu.addElement("TTA"); + Leu.addElement("TTG"); + + Val.addElement("GTA"); + Val.addElement("GTG"); + Val.addElement("GTC"); + Val.addElement("GTT"); + + Phe.addElement("TTC"); + Phe.addElement("TTT"); + } + + + //Stores residue codes/names and colours and other things + public static Hashtable propHash = new Hashtable(); + public static Hashtable hydrophobic = new Hashtable(); + public static Hashtable polar = new Hashtable(); + public static Hashtable small = new Hashtable(); + public static Hashtable positive = new Hashtable(); + public static Hashtable negative = new Hashtable(); + public static Hashtable charged = new Hashtable(); + public static Hashtable aromatic = new Hashtable(); + public static Hashtable aliphatic = new Hashtable(); + public static Hashtable tiny = new Hashtable(); + public static Hashtable proline = new Hashtable(); + + static + { + hydrophobic.put("I", new Integer(1)); + hydrophobic.put("L", new Integer(1)); + hydrophobic.put("V", new Integer(1)); + hydrophobic.put("C", new Integer(1)); + hydrophobic.put("A", new Integer(1)); + hydrophobic.put("G", new Integer(1)); + hydrophobic.put("M", new Integer(1)); + hydrophobic.put("F", new Integer(1)); + hydrophobic.put("Y", new Integer(1)); + hydrophobic.put("W", new Integer(1)); + hydrophobic.put("H", new Integer(1)); + hydrophobic.put("K", new Integer(1)); + hydrophobic.put("X", new Integer(1)); + hydrophobic.put("-", new Integer(1)); + hydrophobic.put("*", new Integer(1)); + hydrophobic.put("R", new Integer(0)); + hydrophobic.put("E", new Integer(0)); + hydrophobic.put("Q", new Integer(0)); + hydrophobic.put("D", new Integer(0)); + hydrophobic.put("N", new Integer(0)); + hydrophobic.put("S", new Integer(0)); + hydrophobic.put("T", new Integer(0)); + hydrophobic.put("P", new Integer(0)); + } + + static + { + polar.put("Y", new Integer(1)); + polar.put("W", new Integer(1)); + polar.put("H", new Integer(1)); + polar.put("K", new Integer(1)); + polar.put("R", new Integer(1)); + polar.put("E", new Integer(1)); + polar.put("Q", new Integer(1)); + polar.put("D", new Integer(1)); + polar.put("N", new Integer(1)); + polar.put("S", new Integer(1)); + polar.put("T", new Integer(1)); + polar.put("X", new Integer(1)); + polar.put("-", new Integer(1)); + polar.put("*", new Integer(1)); + polar.put("I", new Integer(0)); + polar.put("L", new Integer(0)); + polar.put("V", new Integer(0)); + polar.put("C", new Integer(0)); + polar.put("A", new Integer(0)); + polar.put("G", new Integer(0)); + polar.put("M", new Integer(0)); + polar.put("F", new Integer(0)); + polar.put("P", new Integer(0)); + } + + static + { + small.put("I", new Integer(0)); + small.put("L", new Integer(0)); + small.put("V", new Integer(1)); + small.put("C", new Integer(1)); + small.put("A", new Integer(1)); + small.put("G", new Integer(1)); + small.put("M", new Integer(0)); + small.put("F", new Integer(0)); + small.put("Y", new Integer(0)); + small.put("W", new Integer(0)); + small.put("H", new Integer(0)); + small.put("K", new Integer(0)); + small.put("R", new Integer(0)); + small.put("E", new Integer(0)); + small.put("Q", new Integer(0)); + small.put("D", new Integer(1)); + small.put("N", new Integer(1)); + small.put("S", new Integer(1)); + small.put("T", new Integer(1)); + small.put("P", new Integer(1)); + small.put("-", new Integer(1)); + small.put("*", new Integer(1)); + } + + static + { + positive.put("I", new Integer(0)); + positive.put("L", new Integer(0)); + positive.put("V", new Integer(0)); + positive.put("C", new Integer(0)); + positive.put("A", new Integer(0)); + positive.put("G", new Integer(0)); + positive.put("M", new Integer(0)); + positive.put("F", new Integer(0)); + positive.put("Y", new Integer(0)); + positive.put("W", new Integer(0)); + positive.put("H", new Integer(1)); + positive.put("K", new Integer(1)); + positive.put("R", new Integer(1)); + positive.put("E", new Integer(0)); + positive.put("Q", new Integer(0)); + positive.put("D", new Integer(0)); + positive.put("N", new Integer(0)); + positive.put("S", new Integer(0)); + positive.put("T", new Integer(0)); + positive.put("P", new Integer(0)); + positive.put("-", new Integer(1)); + positive.put("*", new Integer(1)); + } + + static + { + negative.put("I", new Integer(0)); + negative.put("L", new Integer(0)); + negative.put("V", new Integer(0)); + negative.put("C", new Integer(0)); + negative.put("A", new Integer(0)); + negative.put("G", new Integer(0)); + negative.put("M", new Integer(0)); + negative.put("F", new Integer(0)); + negative.put("Y", new Integer(0)); + negative.put("W", new Integer(0)); + negative.put("H", new Integer(0)); + negative.put("K", new Integer(0)); + negative.put("R", new Integer(0)); + negative.put("E", new Integer(1)); + negative.put("Q", new Integer(0)); + negative.put("D", new Integer(1)); + negative.put("N", new Integer(0)); + negative.put("S", new Integer(0)); + negative.put("T", new Integer(0)); + negative.put("P", new Integer(0)); + negative.put("-", new Integer(1)); + negative.put("*", new Integer(1)); + } + + static + { + charged.put("I", new Integer(0)); + charged.put("L", new Integer(0)); + charged.put("V", new Integer(0)); + charged.put("C", new Integer(0)); + charged.put("A", new Integer(0)); + charged.put("G", new Integer(0)); + charged.put("M", new Integer(0)); + charged.put("F", new Integer(0)); + charged.put("Y", new Integer(0)); + charged.put("W", new Integer(0)); + charged.put("H", new Integer(1)); + charged.put("K", new Integer(1)); + charged.put("R", new Integer(1)); + charged.put("E", new Integer(1)); + charged.put("Q", new Integer(0)); + charged.put("D", new Integer(1)); + charged.put("N", new Integer(1)); + charged.put("S", new Integer(0)); + charged.put("T", new Integer(0)); + charged.put("P", new Integer(0)); + charged.put("-", new Integer(1)); + charged.put("*", new Integer(1)); + } + + static + { + aromatic.put("I", new Integer(0)); + aromatic.put("L", new Integer(0)); + aromatic.put("V", new Integer(0)); + aromatic.put("C", new Integer(0)); + aromatic.put("A", new Integer(0)); + aromatic.put("G", new Integer(0)); + aromatic.put("M", new Integer(0)); + aromatic.put("F", new Integer(1)); + aromatic.put("Y", new Integer(1)); + aromatic.put("W", new Integer(1)); + aromatic.put("H", new Integer(1)); + aromatic.put("K", new Integer(0)); + aromatic.put("R", new Integer(0)); + aromatic.put("E", new Integer(0)); + aromatic.put("Q", new Integer(0)); + aromatic.put("D", new Integer(0)); + aromatic.put("N", new Integer(0)); + aromatic.put("S", new Integer(0)); + aromatic.put("T", new Integer(0)); + aromatic.put("P", new Integer(0)); + aromatic.put("-", new Integer(1)); + aromatic.put("*", new Integer(1)); + } + + static + { + aliphatic.put("I", new Integer(1)); + aliphatic.put("L", new Integer(1)); + aliphatic.put("V", new Integer(1)); + aliphatic.put("C", new Integer(0)); + aliphatic.put("A", new Integer(0)); + aliphatic.put("G", new Integer(0)); + aliphatic.put("M", new Integer(0)); + aliphatic.put("F", new Integer(0)); + aliphatic.put("Y", new Integer(0)); + aliphatic.put("W", new Integer(0)); + aliphatic.put("H", new Integer(0)); + aliphatic.put("K", new Integer(0)); + aliphatic.put("R", new Integer(0)); + aliphatic.put("E", new Integer(0)); + aliphatic.put("Q", new Integer(0)); + aliphatic.put("D", new Integer(0)); + aliphatic.put("N", new Integer(0)); + aliphatic.put("S", new Integer(0)); + aliphatic.put("T", new Integer(0)); + aliphatic.put("P", new Integer(0)); + aliphatic.put("-", new Integer(1)); + aliphatic.put("*", new Integer(1)); + } + + static + { + tiny.put("I", new Integer(0)); + tiny.put("L", new Integer(0)); + tiny.put("V", new Integer(0)); + tiny.put("C", new Integer(0)); + tiny.put("A", new Integer(1)); + tiny.put("G", new Integer(1)); + tiny.put("M", new Integer(0)); + tiny.put("F", new Integer(0)); + tiny.put("Y", new Integer(0)); + tiny.put("W", new Integer(0)); + tiny.put("H", new Integer(0)); + tiny.put("K", new Integer(0)); + tiny.put("R", new Integer(0)); + tiny.put("E", new Integer(0)); + tiny.put("Q", new Integer(0)); + tiny.put("D", new Integer(0)); + tiny.put("N", new Integer(0)); + tiny.put("S", new Integer(1)); + tiny.put("T", new Integer(0)); + tiny.put("P", new Integer(0)); + tiny.put("-", new Integer(1)); + tiny.put("*", new Integer(1)); + } + + static + { + proline.put("I", new Integer(0)); + proline.put("L", new Integer(0)); + proline.put("V", new Integer(0)); + proline.put("C", new Integer(0)); + proline.put("A", new Integer(0)); + proline.put("G", new Integer(0)); + proline.put("M", new Integer(0)); + proline.put("F", new Integer(0)); + proline.put("Y", new Integer(0)); + proline.put("W", new Integer(0)); + proline.put("H", new Integer(0)); + proline.put("K", new Integer(0)); + proline.put("R", new Integer(0)); + proline.put("E", new Integer(0)); + proline.put("Q", new Integer(0)); + proline.put("D", new Integer(0)); + proline.put("N", new Integer(0)); + proline.put("S", new Integer(0)); + proline.put("T", new Integer(0)); + proline.put("P", new Integer(1)); + proline.put("-", new Integer(1)); + proline.put("*", new Integer(1)); + } + + static + { + propHash.put("hydrophobic", hydrophobic); + propHash.put("small", small); + propHash.put("positive", positive); + propHash.put("negative", negative); + propHash.put("charged", charged); + propHash.put("aromatic", aromatic); + propHash.put("aliphatic", aliphatic); + propHash.put("tiny", tiny); + propHash.put("proline", proline); + propHash.put("polar", polar); + } + + private ResidueProperties() + { + } + + public static double getHydmax() + { + return hydmax; + } + + public static double getHydmin() + { + return hydmin; + } + + public static double[] getHyd() + { + return hyd; + } + + public static Hashtable getAA3Hash() + { + return aa3Hash; + } + + public static int[][] getDNA() + { + return ResidueProperties.DNA; + } + + public static int[][] getBLOSUM62() + { + return ResidueProperties.BLOSUM62; + } + + public static int getPAM250(String A1, String A2) + { + int a = aaIndex[A1.charAt(0)]; + int b = aaIndex[A2.charAt(0)]; + + int pog = ResidueProperties.PAM250[a][b]; + + return pog; + } + + public static int getBLOSUM62(char c1, char c2) + { + int pog = 0; + + try + { + int a = aaIndex[c1]; + int b = aaIndex[c2]; + + pog = ResidueProperties.BLOSUM62[a][b]; + } + catch (Exception e) + { + //System.out.println("Unknown residue in " + A1 + " " + A2); + } + + return pog; + } + + public static Vector getCodons(String res) + { + if (codonHash.containsKey(res)) + { + return (Vector) codonHash.get(res); + } + + return null; + } + + public static String codonTranslate(String codon) + { + Enumeration e = codonHash.keys(); + + while (e.hasMoreElements()) + { + String key = (String) e.nextElement(); + Vector tmp = (Vector) codonHash.get(key); + + if (tmp.contains(codon.toUpperCase())) + { + return key; + } + } + + return null; + } + + public static int[][] getDefaultPeptideMatrix() { + return ResidueProperties.getBLOSUM62(); + } + public static int[][] getDefaultDnaMatrix() { + return ResidueProperties.getDNA(); + } + + /** + * get a ScoreMatrix based on its string name + * @param pwtype + * @return matrix in scoreMatrices with key pwtype or null + */ + public static ScoreMatrix getScoreMatrix(String pwtype) { + Object val=scoreMatrices.get(pwtype); + if (val!=null) + return (ScoreMatrix) val; + return null; + } +} diff --git a/src/jalview/schemes/ScoreMatrix.java b/src/jalview/schemes/ScoreMatrix.java new file mode 100644 index 0000000..03b6778 --- /dev/null +++ b/src/jalview/schemes/ScoreMatrix.java @@ -0,0 +1,54 @@ +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; + } + +} -- 1.7.10.2