X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Fanalysis%2FNJTree.java;h=b882ba79d0a2a00f315be858fd8e8662b6518c0f;hb=3d9d1f6c1c1da3b2657f9ebb95430d0bc8dde873;hp=78c4e600bc8d580e6a8df4a5854ebe8227217376;hpb=c770c52fe1c84d6b41ba1f5af352245f6b1c937c;p=jalview.git diff --git a/src/jalview/analysis/NJTree.java b/src/jalview/analysis/NJTree.java index 78c4e60..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; @@ -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].substring(k, k + 1), - sequenceString[j].substring(k, k + 1)); - } - 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; } /**