general pairwise substitution score models for pairwise alignments and trees.
[jalview.git] / src / jalview / analysis / NJTree.java
index 6f89754..b882ba7 100755 (executable)
@@ -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;
     }
 
     /**