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 + { + } + }