Works on strings, not seqs
[jalview.git] / src / jalview / analysis / NJTree.java
index 40dfc9b..be3b96d 100755 (executable)
@@ -39,6 +39,11 @@ public class NJTree
 {\r
     Vector cluster;\r
     SequenceI[] sequence;\r
+\r
+    //SequenceData is a string representation of what the user\r
+    //sees. The display may contain hidden columns.\r
+    String [] sequenceString;\r
+\r
     int[] done;\r
     int noseqs;\r
     int noClus;\r
@@ -58,23 +63,12 @@ public class NJTree
     String pwtype;\r
     Object found = null;\r
     Object leaves = null;\r
-    int start;\r
-    int end;\r
+\r
     boolean hasDistances = true; // normal case for jalview trees\r
-       boolean hasBootstrap = false; // normal case for jalview trees\r
+    boolean hasBootstrap = false; // normal case for jalview trees\r
 \r
     private boolean hasRootDistance = true;\r
 \r
-    /**\r
-     * Creates a new NJTree object.\r
-     *\r
-     * @param node DOCUMENT ME!\r
-     */\r
-    public NJTree(SequenceNode node)\r
-    {\r
-        top = node;\r
-        maxheight = findHeight(top);\r
-    }\r
 \r
     /**\r
      * Creates a new NJTree object.\r
@@ -82,10 +76,20 @@ public class NJTree
      * @param seqs DOCUMENT ME!\r
      * @param treefile DOCUMENT ME!\r
      */\r
-    public NJTree(SequenceI[] seqs, NewickFile treefile)\r
+    public NJTree(SequenceI[] seqs,  NewickFile treefile)\r
     {\r
         top = treefile.getTree();\r
 \r
+        if (sequenceString == null)\r
+        {\r
+          sequenceString = new String[sequence.length];\r
+          for (int i = 0; i < sequence.length; i++)\r
+          {\r
+            sequenceString[i] = sequence[i].getSequence();\r
+          }\r
+        }\r
+\r
+\r
         hasDistances = treefile.HasDistances();\r
         hasBootstrap = treefile.HasBootstrap();\r
         hasRootDistance = treefile.HasRootDistance();\r
@@ -132,32 +136,33 @@ public class NJTree
      * Creates a new NJTree object.\r
      *\r
      * @param sequence DOCUMENT ME!\r
-     * @param start DOCUMENT ME!\r
-     * @param end DOCUMENT ME!\r
-     */\r
-    public NJTree(SequenceI[] sequence, int start, int end)\r
-    {\r
-        this(sequence, "NJ", "BL", start, end);\r
-    }\r
-\r
-    /**\r
-     * Creates a new NJTree object.\r
-     *\r
-     * @param sequence DOCUMENT ME!\r
      * @param type DOCUMENT ME!\r
      * @param pwtype DOCUMENT ME!\r
      * @param start DOCUMENT ME!\r
      * @param end DOCUMENT ME!\r
      */\r
-    public NJTree(SequenceI[] sequence, String type, String pwtype, int start,\r
-        int end)\r
+    public NJTree(SequenceI[] sequence,\r
+                  String [] sequenceString,\r
+                  String type,\r
+                  String pwtype,\r
+                  int start, int end)\r
     {\r
         this.sequence = sequence;\r
         this.node = new Vector();\r
         this.type = type;\r
         this.pwtype = pwtype;\r
-        this.start = start;\r
-        this.end = end;\r
+\r
+        if (sequenceString == null)\r
+        {\r
+          this.sequenceString = new String[sequence.length];\r
+          for(int i=0; i<sequence.length; i++)\r
+          {\r
+            this.sequenceString[i] = sequence[i].getSequence(start, end);\r
+          }\r
+        }\r
+        else\r
+          this.sequenceString = sequenceString;\r
+\r
 \r
         if (!(type.equals("NJ")))\r
         {\r
@@ -607,7 +612,8 @@ public class NJTree
                     else\r
                     {\r
                         distance[i][j] = 100 -\r
-                            Comparison.PID(sequence[i], sequence[j], start, end);\r
+                             Comparison.PID(sequenceString[i], sequenceString[j]);\r
+\r
                         distance[j][i] = distance[i][j];\r
                     }\r
                 }\r
@@ -616,20 +622,20 @@ public class NJTree
         else if (pwtype.equals("BL"))\r
         {\r
             int maxscore = 0;\r
-\r
+            int end = sequenceString[0].length();\r
             for (int i = 0; i < (noseqs - 1); i++)\r
             {\r
                 for (int j = i; j < noseqs; j++)\r
                 {\r
                     int score = 0;\r
 \r
-                    for (int k = start; k < end; k++)\r
+                    for (int k = 0; k < end; k++)\r
                     {\r
                         try\r
                         {\r
-                            score += ResidueProperties.getBLOSUM62(sequence[i].getSequence(\r
-                                    k, k + 1), sequence[j].getSequence(k, k +\r
-                                    1));\r
+                            score += ResidueProperties.getBLOSUM62(\r
+                              sequenceString[i].substring(k, k + 1),\r
+                              sequenceString[j].substring(k, k + 1));\r
                         }\r
                         catch (Exception ex)\r
                         {\r
@@ -656,7 +662,7 @@ public class NJTree
                 }\r
             }\r
         }\r
-        else if (pwtype.equals("SW"))\r
+      /*  else if (pwtype.equals("SW"))\r
         {\r
             float max = -1;\r
 \r
@@ -685,7 +691,7 @@ public class NJTree
                     distance[j][i] = distance[i][j];\r
                 }\r
             }\r
-        }\r
+        }/*/\r
 \r
         return distance;\r
     }\r
@@ -976,12 +982,23 @@ public class NJTree
         return top;\r
     }\r
 \r
+    public String printOriginalSequenceData()\r
+    {\r
+      StringBuffer sb = new StringBuffer();\r
+      for(int i=0; i<sequenceString.length; i++)\r
+      {\r
+        sb.append(sequence[i].getName()+"\t");\r
+        sb.append(sequenceString[i]+"\n");\r
+      }\r
+      return sb.toString();\r
+    }\r
+\r
     /**\r
      * DOCUMENT ME!\r
      *\r
      * @param node DOCUMENT ME!\r
      */\r
-    public static void printN(SequenceNode node)\r
+    public void printN(SequenceNode node)\r
     {\r
         if (node == null)\r
         {\r