JAL-2738 copy to spikes/mungo
[jalview.git] / src / jalview / analysis / TreeBuilder.java
index effef9a..0601dd9 100644 (file)
@@ -1,3 +1,23 @@
+/*
+ * Jalview - A Sequence Alignment Editor and Viewer ($$Version-Rel$$)
+ * Copyright (C) $$Year-Rel$$ The Jalview Authors
+ * 
+ * This file is part of Jalview.
+ * 
+ * Jalview 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 3
+ * of the License, or (at your option) any later version.
+ *  
+ * Jalview 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 Jalview.  If not, see <http://www.gnu.org/licenses/>.
+ * The Jalview Authors are detailed in the 'AUTHORS' file.
+ */
 package jalview.analysis;
 
 import jalview.api.analysis.ScoreModelI;
@@ -79,8 +99,8 @@ public abstract class TreeBuilder
     {
       start = av.getSelectionGroup().getStartRes();
       end = av.getSelectionGroup().getEndRes() + 1;
-      this.sequences = av.getSelectionGroup().getSequencesInOrder(
-              av.getAlignment());
+      this.sequences = av.getSelectionGroup()
+              .getSequencesInOrder(av.getAlignment());
     }
 
     init(seqStrings, start, end);
@@ -107,11 +127,11 @@ public abstract class TreeBuilder
     {
       return maxheight;
     }
-  
+
     if ((nd.left() == null) && (nd.right() == null))
     {
       nd.height = ((SequenceNode) nd.parent()).height + nd.dist;
-  
+
       if (nd.height > maxheight)
       {
         return nd.height;
@@ -132,11 +152,11 @@ public abstract class TreeBuilder
         maxheight = 0;
         nd.height = (float) 0.0;
       }
-  
+
       maxheight = findHeight((SequenceNode) (nd.left()));
       maxheight = findHeight((SequenceNode) (nd.right()));
     }
-  
+
     return maxheight;
   }
 
@@ -164,23 +184,24 @@ public abstract class TreeBuilder
   {
     // if (_lycount<_lylimit)
     // {
-    // System.err.println("Warning: depth of _recount greater than number of nodes.");
+    // System.err.println("Warning: depth of _recount greater than number of
+    // nodes.");
     // }
     if (nd == null)
     {
       return;
     }
     // _lycount++;
-  
+
     if ((nd.left() != null) && (nd.right() != null))
     {
-  
+
       _reCount((SequenceNode) nd.left());
       _reCount((SequenceNode) nd.right());
-  
+
       SequenceNode l = (SequenceNode) nd.left();
       SequenceNode r = (SequenceNode) nd.right();
-  
+
       nd.count = l.count + r.count;
       nd.ycount = (l.ycount + r.ycount) / 2;
     }
@@ -234,18 +255,18 @@ public abstract class TreeBuilder
     while (noClus > 2)
     {
       findMinDistance();
-  
+
       joinClusters(mini, minj);
-  
+
       noClus--;
     }
-  
+
     int rightChild = done.nextClearBit(0);
     int leftChild = done.nextClearBit(rightChild + 1);
-  
+
     joinClusters(leftChild, rightChild);
     top = (node.elementAt(leftChild));
-  
+
     reCount(top);
     findHeight(top);
     findMaxDist(top);
@@ -275,11 +296,11 @@ public abstract class TreeBuilder
   protected void computeTree(ScoreModelI sm, SimilarityParamsI scoreOptions)
   {
     distances = sm.findDistances(seqData, scoreOptions);
-  
+
     makeLeaves();
-  
+
     noClus = clusters.size();
-  
+
     cluster();
   }
 
@@ -295,11 +316,11 @@ public abstract class TreeBuilder
     {
       return;
     }
-  
+
     if ((nd.left() == null) && (nd.right() == null))
     {
       double dist = nd.dist;
-  
+
       if (dist > maxDistValue)
       {
         maxdist = nd;
@@ -324,7 +345,7 @@ public abstract class TreeBuilder
   protected double findr(int i, int j)
   {
     double tmp = 1;
-  
+
     for (int k = 0; k < noseqs; k++)
     {
       if ((k != i) && (k != j) && (!done.get(k)))
@@ -332,12 +353,12 @@ public abstract class TreeBuilder
         tmp = tmp + distances.getValue(i, k);
       }
     }
-  
+
     if (noClus > 2)
     {
       tmp = tmp / (noClus - 2);
     }
-  
+
     return tmp;
   }
 
@@ -359,14 +380,14 @@ public abstract class TreeBuilder
       sdata.addOperation(CigarArray.M, end - start + 1);
       this.seqData = new AlignmentView(sdata, start);
     }
-  
+
     /*
      * count the non-null sequences
      */
     noseqs = 0;
-  
+
     done = new BitSet();
-  
+
     for (SequenceI seq : sequences)
     {
       if (seq != null)
@@ -385,27 +406,27 @@ public abstract class TreeBuilder
   void joinClusters(final int i, final int j)
   {
     double dist = distances.getValue(i, j);
-  
+
     ri = findr(i, j);
     rj = findr(j, i);
-  
+
     findClusterDistance(i, j);
-  
+
     SequenceNode sn = new SequenceNode();
-  
+
     sn.setLeft((node.elementAt(i)));
     sn.setRight((node.elementAt(j)));
-  
+
     SequenceNode tmpi = (node.elementAt(i));
     SequenceNode tmpj = (node.elementAt(j));
-  
+
     findNewDistances(tmpi, tmpj, dist);
-  
+
     tmpi.setParent(sn);
     tmpj.setParent(sn);
-  
+
     node.setElementAt(sn, i);
-  
+
     /*
      * move the members of cluster(j) to cluster(i)
      * and mark cluster j as out of the game
@@ -438,11 +459,11 @@ public abstract class TreeBuilder
   void makeLeaves()
   {
     clusters = new Vector<BitSet>();
-  
+
     for (int i = 0; i < noseqs; i++)
     {
       SequenceNode sn = new SequenceNode();
-  
+
       sn.setElement(sequences[i]);
       sn.setName(sequences[i].getName());
       node.addElement(sn);