sequence is char []
[jalview.git] / src / jalview / analysis / AlignSeq.java
index 60ad85c..d0c5869 100755 (executable)
@@ -1,6 +1,6 @@
 /*\r
 * Jalview - A Sequence Alignment Editor and Viewer\r
-* Copyright (C) 2005 AM Waterhouse, J Procter, G Barton, M Clamp, S Searle\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
@@ -63,14 +63,14 @@ public class AlignSeq
     int[] seq2;\r
     SequenceI s1;\r
     SequenceI s2;\r
-    String s1str;\r
-    String s2str;\r
+    public String s1str;\r
+    public String s2str;\r
     int maxi;\r
     int maxj;\r
     int[] aseq1;\r
     int[] aseq2;\r
-    String astr1 = "";\r
-    String astr2 = "";\r
+    public String astr1="";\r
+    public String astr2="";\r
 \r
     /** DOCUMENT ME!! */\r
     public int seq1start;\r
@@ -94,10 +94,8 @@ public class AlignSeq
     int[][] lookup = ResidueProperties.getBLOSUM62();\r
     String[] intToStr = pep;\r
     int defInt = 23;\r
-    String output = "";\r
+    StringBuffer output = new StringBuffer();\r
     String type;\r
-    Runtime rt;\r
-\r
 \r
     /**\r
      * Creates a new AlignSeq object.\r
@@ -108,8 +106,23 @@ public class AlignSeq
      */\r
     public AlignSeq(SequenceI s1, SequenceI s2, String type)\r
     {\r
-        rt = Runtime.getRuntime();\r
-        SeqInit(s1, s2, type);\r
+        SeqInit(s1, s1.getSequenceAsString(), s2,  s2.getSequenceAsString(), type);\r
+    }\r
+\r
+    /**\r
+     * Creates a new AlignSeq object.\r
+     *\r
+     * @param s1 DOCUMENT ME!\r
+     * @param s2 DOCUMENT ME!\r
+     * @param type DOCUMENT ME!\r
+     */\r
+    public AlignSeq(SequenceI s1,\r
+                    String string1,\r
+                    SequenceI s2,\r
+                    String string2,\r
+                    String type)\r
+    {\r
+        SeqInit(s1, string1, s2,  string2,  type);\r
     }\r
 \r
     /**\r
@@ -169,7 +182,7 @@ public class AlignSeq
      */\r
     public String getOutput()\r
     {\r
-        return output;\r
+        return output.toString();\r
     }\r
 \r
     /**\r
@@ -239,10 +252,23 @@ public class AlignSeq
      * @param s2 DOCUMENT ME!\r
      * @param type DOCUMENT ME!\r
      */\r
-    public void SeqInit(SequenceI s1, SequenceI s2, String type)\r
+    public void SeqInit(SequenceI s1,\r
+                        String string1,\r
+                        SequenceI s2,\r
+                        String string2,\r
+                        String type)\r
     {\r
-        s1str = extractGaps(jalview.util.Comparison.GapChars, s1.getSequence());\r
-        s2str = extractGaps(jalview.util.Comparison.GapChars, s2.getSequence());\r
+\r
+        s1str = extractGaps(jalview.util.Comparison.GapChars, string1);\r
+        s2str = extractGaps(jalview.util.Comparison.GapChars, string2);\r
+\r
+        if(s1str.length()==0 || s2str.length()==0)\r
+        {\r
+          System.out.println("ALL GAPS: " +\r
+                             (s1str.length()==0?s1.getName():" ")\r
+                             +(s2str.length()==0?s2.getName():""));\r
+          return;\r
+        }\r
 \r
         this.s1 = s1;\r
         this.s2 = s2;\r
@@ -263,7 +289,7 @@ public class AlignSeq
         }\r
         else\r
         {\r
-            output = output + ("Wrong type = dna or pep only");\r
+            output.append("Wrong type = dna or pep only");\r
             System.exit(0);\r
         }\r
 \r
@@ -406,7 +432,7 @@ public class AlignSeq
     /**\r
      * DOCUMENT ME!\r
      */\r
-    public void printAlignment()\r
+    public void printAlignment(java.io.PrintStream os)\r
     {\r
         // Find the biggest id length for formatting purposes\r
         int maxid = s1.getName().length();\r
@@ -420,39 +446,33 @@ public class AlignSeq
         int nochunks = ((aseq1.length - count) / len) + 1;\r
         pid = 0;\r
 \r
-        output = output + ("Score = " + score[maxi][maxj] + "\n");\r
-        output = output +\r
-            ("Length of alignment = " + (aseq1.length - count) + "\n");\r
-        output = output + ("Sequence ");\r
-        output = output + (new Format("%" + maxid + "s").form(s1.getName()));\r
-        output = output +\r
-            (" :  " + seq1start + " - " + seq1end + " (Sequence length = " +\r
+        output.append("Score = " + score[maxi][maxj] + "\n");\r
+        output.append("Length of alignment = " + (aseq1.length - count) + "\n");\r
+        output.append("Sequence ");\r
+        output.append(new Format("%" + maxid + "s").form(s1.getName()));\r
+        output.append(" :  " + s1.getStart() + " - " + s1.getEnd() + " (Sequence length = " +\r
             s1str.length() + ")\n");\r
-        output = output + ("Sequence ");\r
-        output = output + (new Format("%" + maxid + "s").form(s2.getName()));\r
-        output = output +\r
-            (" :  " + seq2start + " - " + seq2end + " (Sequence length = " +\r
+        output .append("Sequence ");\r
+        output.append(new Format("%" + maxid + "s").form(s2.getName()));\r
+        output.append(" :  " + s2.getStart() + " - " + s2.getEnd() + " (Sequence length = " +\r
             s2str.length() + ")\n\n");\r
 \r
         for (int j = 0; j < nochunks; j++)\r
         {\r
             // Print the first aligned sequence\r
-            output = output +\r
-                (new Format("%" + (maxid) + "s").form(s1.getName()) + " ");\r
+            output.append(new Format("%" + (maxid) + "s").form(s1.getName()) + " ");\r
 \r
             for (int i = 0; i < len; i++)\r
             {\r
                 if ((count + i + (j * len)) < aseq1.length)\r
                 {\r
-                    output = output +\r
-                        (new Format("%s").form(intToStr[aseq1[count + i +\r
+                    output.append(new Format("%s").form(intToStr[aseq1[count + i +\r
                             (j * len)]]));\r
                 }\r
             }\r
 \r
-            output = output + ("\n");\r
-            output = output +\r
-                (new Format("%" + (maxid) + "s").form(" ") + " ");\r
+            output.append("\n");\r
+            output.append(new Format("%" + (maxid) + "s").form(" ") + " ");\r
 \r
             // Print out the matching chars\r
             for (int i = 0; i < len; i++)\r
@@ -464,7 +484,7 @@ public class AlignSeq
                             !intToStr[aseq1[count + i + (j * len)]].equals("-"))\r
                     {\r
                         pid++;\r
-                        output = output + ("|");\r
+                        output.append("|");\r
                     }\r
                     else if (type.equals("pep"))\r
                     {\r
@@ -472,40 +492,42 @@ public class AlignSeq
                                     intToStr[aseq1[count + i + (j * len)]],\r
                                     intToStr[aseq2[count + i + (j * len)]]) > 0)\r
                         {\r
-                            output = output + (".");\r
+                            output.append(".");\r
                         }\r
                         else\r
                         {\r
-                            output = output + (" ");\r
+                            output.append(" ");\r
                         }\r
                     }\r
                     else\r
                     {\r
-                        output = output + (" ");\r
+                        output.append(" ");\r
                     }\r
                 }\r
             }\r
 \r
             // Now print the second aligned sequence\r
-            output = output + ("\n");\r
-            output = output +\r
-                (new Format("%" + (maxid) + "s").form(s2.getName()) + " ");\r
+            output = output.append("\n");\r
+            output = output.append(new Format("%" + (maxid) + "s").form(s2.getName()) + " ");\r
 \r
             for (int i = 0; i < len; i++)\r
             {\r
                 if ((count + i + (j * len)) < aseq1.length)\r
                 {\r
-                    output = output +\r
-                        (new Format("%s").form(intToStr[aseq2[count + i +\r
+                    output .append(new Format("%s").form(intToStr[aseq2[count + i +\r
                             (j * len)]]));\r
                 }\r
             }\r
 \r
-            output = output + ("\n\n");\r
+            output = output .append("\n\n");\r
         }\r
 \r
         pid = pid / (float) (aseq1.length - count) * 100;\r
-        output = output + (new Format("Percentage ID = %2.2f\n\n").form(pid));\r
+        output = output.append(new Format("Percentage ID = %2.2f\n\n").form(pid));\r
+\r
+        try{\r
+          os.print(output.toString());\r
+        }catch(Exception ex){}\r
     }\r
 \r
     /**\r
@@ -659,14 +681,14 @@ public class AlignSeq
     public static String extractGaps(String gapChar, String seq)\r
     {\r
         StringTokenizer str = new StringTokenizer(seq, gapChar);\r
-        String newString = "";\r
+        StringBuffer newString = new StringBuffer();\r
 \r
         while (str.hasMoreTokens())\r
         {\r
-            newString = newString + str.nextToken();\r
+            newString.append( str.nextToken() );\r
         }\r
 \r
-        return newString;\r
+        return newString.toString();\r
     }\r
 \r
     /**\r
@@ -729,17 +751,24 @@ public class AlignSeq
 \r
         for (int i = 0; i < s.length(); i++)\r
         {\r
-            String ss = s.substring(i, i + 1).toUpperCase();\r
+           // String ss = s.substring(i, i + 1).toUpperCase();\r
+            char c = s.charAt(i);\r
+            if ('a' <= c && c <= 'z')\r
+            {\r
+              // TO UPPERCASE !!!\r
+              c -= ('a' - 'A');\r
+            }\r
+\r
 \r
             try\r
             {\r
                 if (type.equals("pep"))\r
                 {\r
-                    seq1[i] = ((Integer) ResidueProperties.aaHash.get(ss)).intValue();\r
+                    seq1[i] = ResidueProperties.aaIndex[c];\r
                 }\r
                 else if (type.equals("dna"))\r
                 {\r
-                    seq1[i] = ((Integer) dnaHash.get(ss)).intValue();\r
+                    seq1[i] = ResidueProperties.nucleotideIndex[c];\r
                 }\r
 \r
                 if (seq1[i] > 23)\r