From: jprocter <Jim Procter>
Date: Tue, 24 May 2005 08:42:45 +0000 (+0000)
Subject: several ordering bug fixes.
X-Git-Tag: Release_2_0~225
X-Git-Url: http://source.jalview.org/gitweb/?a=commitdiff_plain;h=587e55e539d6268657467be71a904f011b890181;p=jalview.git

several ordering bug fixes.
---

diff --git a/src/jalview/analysis/AlignmentSorter.java b/src/jalview/analysis/AlignmentSorter.java
index 58fd444..40ad372 100755
--- a/src/jalview/analysis/AlignmentSorter.java
+++ b/src/jalview/analysis/AlignmentSorter.java
@@ -11,6 +11,14 @@ import java.util.*;
 public class AlignmentSorter {
 
   private AlignmentSorter() {
+    try
+    {
+      jbInit();
+    }
+    catch (Exception ex)
+    {
+      ex.printStackTrace();
+    }
   }
 
   public static void sortGroups(AlignmentI align) {
@@ -110,11 +118,17 @@ public class AlignmentSorter {
 
     sortIdAscending = !sortIdAscending;
   }
-
+  static int lastGroupHash = 0;
   static boolean sortGroupAscending = true;
+
   public static void sortByGroup(AlignmentI align) {
     int    nSeq = align.getHeight();
     Vector groups = align.getGroups();
+    if (groups.hashCode()!=lastGroupHash) {
+      sortGroupAscending=true;
+      lastGroupHash = groups.hashCode();
+    } else
+      sortGroupAscending = ! sortGroupAscending;
 
     Vector seqs = new Vector();
 
@@ -126,19 +140,20 @@ public class AlignmentSorter {
       }
     }
 
-    if (seqs.size() != nSeq) {
+    // Deletions can happen so this check may fail
+    /*
+     if (seqs.size() != nSeq) {
       System.err.println("ERROR: tmp.size() != nseq in sortByGroups");
       if (seqs.size() < nSeq) {
         addStrays(align,seqs);
       }
     }
-
+*/
     if(sortGroupAscending)
       setOrder(align,seqs);
     else
-      setReverseOrder( align, vectorToArray(seqs));
+      setReverseOrder( align, vectorSubsetToArray(seqs, align.getSequences()));
 
-    sortGroupAscending = ! sortGroupAscending;
   }
 
   private static SequenceI [] vectorToArray(Vector tmp) {
@@ -170,15 +185,25 @@ public class AlignmentSorter {
     return vectorToArray(seqs);
   }
 
+  static AlignmentOrder lastOrder = null;
+  static boolean sortOrderAscending = true;
 
   public static void sortBy(AlignmentI align, AlignmentOrder order) {
     // Get an ordered vector of sequences which may also be present in align
     Vector tmp = order.getOrder();
 //    if (tmp.size()<align.getHeight())
 //      addStrays(align, tmp);
-    setOrder(align, tmp);
-  }
+    if (lastOrder==order)
+      sortOrderAscending=!sortOrderAscending;
+    else
+      sortOrderAscending=true;
 
+    if (sortOrderAscending)
+      setOrder(align, tmp);
+    else
+      setReverseOrder(align, vectorSubsetToArray(tmp, align.getSequences()));
+  }
+  static NJTree lastTree = null;
   static boolean sortTreeAscending = true;
 
   public static Vector getOrderByTree(AlignmentI align, NJTree tree) {
@@ -208,12 +233,16 @@ public class AlignmentSorter {
   public static void sortByTree(AlignmentI align, NJTree tree) {
     Vector tmp = getOrderByTree(align, tree);
     // tmp should properly permute align with tree.
+    if(lastTree!=tree) {
+      sortTreeAscending = true;
+      lastTree = tree;
+    } else {
+      sortTreeAscending = !sortTreeAscending;
+    }
     if(sortTreeAscending)
       setOrder(align,tmp);
     else
       setReverseOrder(align, vectorSubsetToArray(tmp, align.getSequences()));
-
-      sortTreeAscending = !sortTreeAscending; // JBPNote: this is totally random - have to keep last tree sort ref ...
   }
 
   private static void addStrays(AlignmentI align, Vector seqs) {
@@ -262,4 +291,9 @@ public class AlignmentSorter {
     jalview.util.QuickSort.sort(ids, alignment);
   }
 
+  private void jbInit()
+      throws Exception
+  {
+  }
+
 }