public class AlignmentSorter {\r
\r
private AlignmentSorter() {\r
+ try\r
+ {\r
+ jbInit();\r
+ }\r
+ catch (Exception ex)\r
+ {\r
+ ex.printStackTrace();\r
+ }\r
}\r
\r
public static void sortGroups(AlignmentI align) {\r
\r
sortIdAscending = !sortIdAscending;\r
}\r
-\r
+ static int lastGroupHash = 0;\r
static boolean sortGroupAscending = true;\r
+\r
public static void sortByGroup(AlignmentI align) {\r
int nSeq = align.getHeight();\r
Vector groups = align.getGroups();\r
+ if (groups.hashCode()!=lastGroupHash) {\r
+ sortGroupAscending=true;\r
+ lastGroupHash = groups.hashCode();\r
+ } else\r
+ sortGroupAscending = ! sortGroupAscending;\r
\r
Vector seqs = new Vector();\r
\r
}\r
}\r
\r
- if (seqs.size() != nSeq) {\r
+ // Deletions can happen so this check may fail\r
+ /*\r
+ if (seqs.size() != nSeq) {\r
System.err.println("ERROR: tmp.size() != nseq in sortByGroups");\r
if (seqs.size() < nSeq) {\r
addStrays(align,seqs);\r
}\r
}\r
-\r
+*/\r
if(sortGroupAscending)\r
setOrder(align,seqs);\r
else\r
- setReverseOrder( align, vectorToArray(seqs));\r
+ setReverseOrder( align, vectorSubsetToArray(seqs, align.getSequences()));\r
\r
- sortGroupAscending = ! sortGroupAscending;\r
}\r
\r
private static SequenceI [] vectorToArray(Vector tmp) {\r
return vectorToArray(seqs);\r
}\r
\r
+ static AlignmentOrder lastOrder = null;\r
+ static boolean sortOrderAscending = true;\r
\r
public static void sortBy(AlignmentI align, AlignmentOrder order) {\r
// Get an ordered vector of sequences which may also be present in align\r
Vector tmp = order.getOrder();\r
// if (tmp.size()<align.getHeight())\r
// addStrays(align, tmp);\r
- setOrder(align, tmp);\r
- }\r
+ if (lastOrder==order)\r
+ sortOrderAscending=!sortOrderAscending;\r
+ else\r
+ sortOrderAscending=true;\r
\r
+ if (sortOrderAscending)\r
+ setOrder(align, tmp);\r
+ else\r
+ setReverseOrder(align, vectorSubsetToArray(tmp, align.getSequences()));\r
+ }\r
+ static NJTree lastTree = null;\r
static boolean sortTreeAscending = true;\r
\r
public static Vector getOrderByTree(AlignmentI align, NJTree tree) {\r
public static void sortByTree(AlignmentI align, NJTree tree) {\r
Vector tmp = getOrderByTree(align, tree);\r
// tmp should properly permute align with tree.\r
+ if(lastTree!=tree) {\r
+ sortTreeAscending = true;\r
+ lastTree = tree;\r
+ } else {\r
+ sortTreeAscending = !sortTreeAscending;\r
+ }\r
if(sortTreeAscending)\r
setOrder(align,tmp);\r
else\r
setReverseOrder(align, vectorSubsetToArray(tmp, align.getSequences()));\r
-\r
- sortTreeAscending = !sortTreeAscending; // JBPNote: this is totally random - have to keep last tree sort ref ...\r
}\r
\r
private static void addStrays(AlignmentI align, Vector seqs) {\r
jalview.util.QuickSort.sort(ids, alignment);\r
}\r
\r
+ private void jbInit()\r
+ throws Exception\r
+ {\r
+ }\r
+\r
}\r