general pairwise substitution score models for pairwise alignments and trees.
[jalview.git] / src / jalview / datamodel / BinarySequence.java
index af10e1d..a9e80b8 100755 (executable)
-/*\r
-* Jalview - A Sequence Alignment Editor and Viewer\r
-* Copyright (C) 2006 AM Waterhouse, J Procter, G Barton, M Clamp, S Searle\r
-*\r
-* This program is free software; you can redistribute it and/or\r
-* modify it under the terms of the GNU General Public License\r
-* as published by the Free Software Foundation; either version 2\r
-* of the License, or (at your option) any later version.\r
-*\r
-* This program is distributed in the hope that it will be useful,\r
-* but WITHOUT ANY WARRANTY; without even the implied warranty of\r
-* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\r
-* GNU General Public License for more details.\r
-*\r
-* You should have received a copy of the GNU General Public License\r
-* along with this program; if not, write to the Free Software\r
-* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA\r
-*/\r
-package jalview.datamodel;\r
-\r
-import jalview.schemes.*;\r
-\r
-\r
-\r
-/**\r
- * DOCUMENT ME!\r
- *\r
- * @author $author$\r
- * @version $Revision$\r
- */\r
-public class BinarySequence extends Sequence\r
-{\r
-    int[] binary;\r
-    double[] dbinary;\r
-\r
-    /**\r
-     * Creates a new BinarySequence object.\r
-     *\r
-     * @param s DOCUMENT ME!\r
-     */\r
-    public BinarySequence(String s)\r
-    {\r
-        super("", s, 0, s.length());\r
-    }\r
-\r
-    /**\r
-     * DOCUMENT ME!\r
-     */\r
-    public void encode()\r
-    {\r
-        // Set all matrix to 0\r
-        dbinary = new double[getSequence().length() * 21];\r
-\r
-        int nores = 21;\r
-\r
-        for (int i = 0; i < dbinary.length; i++)\r
-        {\r
-            dbinary[i] = 0.0;\r
-        }\r
-\r
-        for (int i = 0; i < getSequence().length(); i++)\r
-        {\r
-            int aanum = 20;\r
-\r
-            try\r
-            {\r
-                aanum = ResidueProperties.aaIndex[getSequence().charAt(i)];\r
-            }\r
-            catch (NullPointerException e)\r
-            {\r
-                aanum = 20;\r
-            }\r
-\r
-            if (aanum > 20)\r
-            {\r
-                aanum = 20;\r
-            }\r
-\r
-            dbinary[(i * nores) + aanum] = 1.0;\r
-        }\r
-    }\r
-\r
-    /**\r
-     * DOCUMENT ME!\r
-     */\r
-    public void blosumEncode()\r
-    {\r
-        // Set all matrix to 0\r
-        dbinary = new double[getSequence().length() * 21];\r
-\r
-        int nores = 21;\r
-\r
-        //for (int i = 0; i < dbinary.length; i++) {\r
-        //  dbinary[i] = 0.0;\r
-        //}\r
-        for (int i = 0; i < getSequence().length(); i++)\r
-        {\r
-            int aanum = 20;\r
-\r
-            try\r
-            {\r
-                aanum = ResidueProperties.aaIndex[getSequence().charAt(i)];\r
-            }\r
-            catch (NullPointerException e)\r
-            {\r
-                aanum = 20;\r
-            }\r
-\r
-            if (aanum > 20)\r
-            {\r
-                aanum = 20;\r
-            }\r
-\r
-            // Do the blosum thing\r
-            for (int j = 0; j < 20; j++)\r
-            {\r
-                dbinary[(i * nores) + j] = ResidueProperties.getBLOSUM62()[aanum][j];\r
-            }\r
-        }\r
-    }\r
-\r
-    /**\r
-     * DOCUMENT ME!\r
-     *\r
-     * @return DOCUMENT ME!\r
-     */\r
-    public String toBinaryString()\r
-    {\r
-        String out = "";\r
-\r
-        for (int i = 0; i < binary.length; i++)\r
-        {\r
-            out += (new Integer(binary[i])).toString();\r
-\r
-            if (i < (binary.length - 1))\r
-            {\r
-                out += " ";\r
-            }\r
-        }\r
-\r
-        return out;\r
-    }\r
-\r
-    /**\r
-     * DOCUMENT ME!\r
-     *\r
-     * @return DOCUMENT ME!\r
-     */\r
-    public double[] getDBinary()\r
-    {\r
-        return dbinary;\r
-    }\r
-\r
-}\r
+/*
+* 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;
+    }
+
+}