From 587e55e539d6268657467be71a904f011b890181 Mon Sep 17 00:00:00 2001 From: jprocter Date: Tue, 24 May 2005 08:42:45 +0000 Subject: [PATCH] several ordering bug fixes. --- src/jalview/analysis/AlignmentSorter.java | 52 ++++++++++++++++++++++++----- 1 file changed, 43 insertions(+), 9 deletions(-) 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()