Merge branch 'master' of https://source.jalview.org/git/jalviewjs.git
[jalviewjs.git] / site / j2s / jalview / analysis / AlignmentSorter.js
index 69f28b8..eaf1757 100644 (file)
-Clazz.declarePackage ("jalview.analysis");\r
-Clazz.load (null, "jalview.analysis.AlignmentSorter", ["jalview.datamodel.SequenceI", "jalview.util.Comparison", "$.MessageManager", "$.QuickSort", "java.lang.Error", "$.Float", "$.StringBuffer", "java.util.ArrayList"], function () {\r
-c$ = Clazz.declareType (jalview.analysis, "AlignmentSorter");\r
-c$.sortByPID = Clazz.defineMethod (c$, "sortByPID", \r
-function (align, s, tosort) {\r
-jalview.analysis.AlignmentSorter.sortByPID (align, s, tosort, 0, -1);\r
-}, "jalview.datamodel.AlignmentI,jalview.datamodel.SequenceI,~A");\r
-c$.sortByPID = Clazz.defineMethod (c$, "sortByPID", \r
-function (align, s, tosort, start, end) {\r
-var nSeq = align.getHeight ();\r
-var scores =  Clazz.newFloatArray (nSeq, 0);\r
-var seqs =  new Array (nSeq);\r
-for (var i = 0; i < nSeq; i++) {\r
-scores[i] = jalview.util.Comparison.PID (align.getSequenceAt (i).getSequenceAsString (), s.getSequenceAsString ());\r
-seqs[i] = align.getSequenceAt (i);\r
-}\r
-jalview.util.QuickSort.sortFloatObject (scores, seqs);\r
-jalview.analysis.AlignmentSorter.setReverseOrder (align, seqs);\r
-}, "jalview.datamodel.AlignmentI,jalview.datamodel.SequenceI,~A,~N,~N");\r
-c$.setReverseOrder = Clazz.defineMethod (c$, "setReverseOrder", \r
- function (align, seqs) {\r
-var nSeq = seqs.length;\r
-var len = 0;\r
-if ((nSeq % 2) == 0) {\r
-len = Clazz.doubleToInt (nSeq / 2);\r
-} else {\r
-len = Clazz.doubleToInt ((nSeq + 1) / 2);\r
-}var asq;\r
-{\r
-for (var i = 0; i < len; i++) {\r
-asq.set (i, seqs[nSeq - i - 1]);\r
-asq.set (nSeq - i - 1, seqs[i]);\r
-}\r
-}}, "jalview.datamodel.AlignmentI,~A");\r
-c$.setOrder = Clazz.defineMethod (c$, "setOrder", \r
- function (align, tmp) {\r
-jalview.analysis.AlignmentSorter.setOrder (align, jalview.analysis.AlignmentSorter.vectorSubsetToArray (tmp, align.getSequences ()));\r
-}, "jalview.datamodel.AlignmentI,java.util.List");\r
-c$.setOrder = Clazz.defineMethod (c$, "setOrder", \r
-function (align, seqs) {\r
-var algn;\r
-{\r
-var tmp =  new java.util.ArrayList ();\r
-for (var i = 0; i < seqs.length; i++) {\r
-if (algn.contains (seqs[i])) {\r
-tmp.add (seqs[i]);\r
-}}\r
-algn.clear ();\r
-for (var i = 0; i < tmp.size (); i++) {\r
-algn.add (tmp.get (i));\r
-}\r
-}}, "jalview.datamodel.AlignmentI,~A");\r
-c$.sortByID = Clazz.defineMethod (c$, "sortByID", \r
-function (align) {\r
-var nSeq = align.getHeight ();\r
-var ids =  new Array (nSeq);\r
-var seqs =  new Array (nSeq);\r
-for (var i = 0; i < nSeq; i++) {\r
-ids[i] = align.getSequenceAt (i).getName ();\r
-seqs[i] = align.getSequenceAt (i);\r
-}\r
-jalview.util.QuickSort.sort (ids, seqs);\r
-if (jalview.analysis.AlignmentSorter.sortIdAscending) {\r
-jalview.analysis.AlignmentSorter.setReverseOrder (align, seqs);\r
-} else {\r
-jalview.analysis.AlignmentSorter.setOrder (align, seqs);\r
-}jalview.analysis.AlignmentSorter.sortIdAscending = !jalview.analysis.AlignmentSorter.sortIdAscending;\r
-}, "jalview.datamodel.AlignmentI");\r
-c$.sortByLength = Clazz.defineMethod (c$, "sortByLength", \r
-function (align) {\r
-var nSeq = align.getHeight ();\r
-var length =  Clazz.newFloatArray (nSeq, 0);\r
-var seqs =  new Array (nSeq);\r
-for (var i = 0; i < nSeq; i++) {\r
-seqs[i] = align.getSequenceAt (i);\r
-length[i] = (seqs[i].getEnd () - seqs[i].getStart ());\r
-}\r
-jalview.util.QuickSort.sortFloatObject (length, seqs);\r
-if (jalview.analysis.AlignmentSorter.sortLengthAscending) {\r
-jalview.analysis.AlignmentSorter.setReverseOrder (align, seqs);\r
-} else {\r
-jalview.analysis.AlignmentSorter.setOrder (align, seqs);\r
-}jalview.analysis.AlignmentSorter.sortLengthAscending = !jalview.analysis.AlignmentSorter.sortLengthAscending;\r
-}, "jalview.datamodel.AlignmentI");\r
-c$.sortByGroup = Clazz.defineMethod (c$, "sortByGroup", \r
-function (align) {\r
-var groups =  new java.util.ArrayList ();\r
-if (groups.hashCode () != jalview.analysis.AlignmentSorter.lastGroupHash) {\r
-jalview.analysis.AlignmentSorter.sortGroupAscending = true;\r
-jalview.analysis.AlignmentSorter.lastGroupHash = groups.hashCode ();\r
-} else {\r
-jalview.analysis.AlignmentSorter.sortGroupAscending = !jalview.analysis.AlignmentSorter.sortGroupAscending;\r
-}for (var sg, $sg = align.getGroups ().iterator (); $sg.hasNext () && ((sg = $sg.next ()) || true);) {\r
-for (var j = 0; j < groups.size (); j++) {\r
-var sg2 = groups.get (j);\r
-if (sg.getSize () > sg2.getSize ()) {\r
-groups.add (j, sg);\r
-break;\r
-}}\r
-if (!groups.contains (sg)) {\r
-groups.add (sg);\r
-}}\r
-var seqs =  new java.util.ArrayList ();\r
-for (var i = 0; i < groups.size (); i++) {\r
-var sg = groups.get (i);\r
-var orderedseqs = sg.getSequencesInOrder (align);\r
-for (var j = 0; j < orderedseqs.length; j++) {\r
-seqs.add (orderedseqs[j]);\r
-}\r
-}\r
-if (jalview.analysis.AlignmentSorter.sortGroupAscending) {\r
-jalview.analysis.AlignmentSorter.setOrder (align, seqs);\r
-} else {\r
-jalview.analysis.AlignmentSorter.setReverseOrder (align, jalview.analysis.AlignmentSorter.vectorSubsetToArray (seqs, align.getSequences ()));\r
-}}, "jalview.datamodel.AlignmentI");\r
-c$.vectorSubsetToArray = Clazz.defineMethod (c$, "vectorSubsetToArray", \r
- function (tmp, mask) {\r
-var seqs =  new java.util.ArrayList ();\r
-var i;\r
-var idx;\r
-var tmask =  Clazz.newBooleanArray (mask.size (), false);\r
-for (i = 0; i < mask.size (); i++) {\r
-tmask[i] = true;\r
-}\r
-for (i = 0; i < tmp.size (); i++) {\r
-var sq = tmp.get (i);\r
-idx = mask.indexOf (sq);\r
-if (idx > -1 && tmask[idx]) {\r
-tmask[idx] = false;\r
-seqs.add (sq);\r
-}}\r
-for (i = 0; i < tmask.length; i++) {\r
-if (tmask[i]) {\r
-seqs.add (mask.get (i));\r
-}}\r
-return seqs.toArray ( new Array (seqs.size ()));\r
-}, "java.util.List,java.util.List");\r
-c$.sortBy = Clazz.defineMethod (c$, "sortBy", \r
-function (align, order) {\r
-var tmp = order.getOrder ();\r
-if (jalview.analysis.AlignmentSorter.lastOrder === order) {\r
-jalview.analysis.AlignmentSorter.sortOrderAscending = !jalview.analysis.AlignmentSorter.sortOrderAscending;\r
-} else {\r
-jalview.analysis.AlignmentSorter.sortOrderAscending = true;\r
-}if (jalview.analysis.AlignmentSorter.sortOrderAscending) {\r
-jalview.analysis.AlignmentSorter.setOrder (align, tmp);\r
-} else {\r
-jalview.analysis.AlignmentSorter.setReverseOrder (align, jalview.analysis.AlignmentSorter.vectorSubsetToArray (tmp, align.getSequences ()));\r
-}}, "jalview.datamodel.AlignmentI,jalview.datamodel.AlignmentOrder");\r
-c$.getOrderByTree = Clazz.defineMethod (c$, "getOrderByTree", \r
- function (align, tree) {\r
-var nSeq = align.getHeight ();\r
-var tmp =  new java.util.ArrayList ();\r
-tmp = jalview.analysis.AlignmentSorter._sortByTree (tree.getTopNode (), tmp, align.getSequences ());\r
-if (tmp.size () != nSeq) {\r
-if (tmp.size () != nSeq) {\r
-jalview.analysis.AlignmentSorter.addStrays (align, tmp);\r
-}if (tmp.size () != nSeq) {\r
-System.err.println ("WARNING: tmp.size()=" + tmp.size () + " != nseq=" + nSeq + " in getOrderByTree - tree contains sequences not in alignment");\r
-}}return tmp;\r
-}, "jalview.datamodel.AlignmentI,jalview.analysis.NJTree");\r
-c$.sortByTree = Clazz.defineMethod (c$, "sortByTree", \r
-function (align, tree) {\r
-var tmp = jalview.analysis.AlignmentSorter.getOrderByTree (align, tree);\r
-if (jalview.analysis.AlignmentSorter.lastTree !== tree) {\r
-jalview.analysis.AlignmentSorter.sortTreeAscending = true;\r
-jalview.analysis.AlignmentSorter.lastTree = tree;\r
-} else {\r
-jalview.analysis.AlignmentSorter.sortTreeAscending = !jalview.analysis.AlignmentSorter.sortTreeAscending;\r
-}if (jalview.analysis.AlignmentSorter.sortTreeAscending) {\r
-jalview.analysis.AlignmentSorter.setOrder (align, tmp);\r
-} else {\r
-jalview.analysis.AlignmentSorter.setReverseOrder (align, jalview.analysis.AlignmentSorter.vectorSubsetToArray (tmp, align.getSequences ()));\r
-}}, "jalview.datamodel.AlignmentI,jalview.analysis.NJTree");\r
-c$.addStrays = Clazz.defineMethod (c$, "addStrays", \r
- function (align, tmp) {\r
-var nSeq = align.getHeight ();\r
-for (var i = 0; i < nSeq; i++) {\r
-if (!tmp.contains (align.getSequenceAt (i))) {\r
-tmp.add (align.getSequenceAt (i));\r
-}}\r
-if (nSeq != tmp.size ()) {\r
-System.err.println ("ERROR: Size still not right even after addStrays");\r
-}}, "jalview.datamodel.AlignmentI,java.util.List");\r
-c$._sortByTree = Clazz.defineMethod (c$, "_sortByTree", \r
- function (node, tmp, seqset) {\r
-if (node == null) {\r
-return tmp;\r
-}var left = node.left ();\r
-var right = node.right ();\r
-if ((left == null) && (right == null)) {\r
-if (!node.isPlaceholder () && (node.element () != null)) {\r
-if (Clazz.instanceOf (node.element (), jalview.datamodel.SequenceI)) {\r
-if (!tmp.contains (node.element ())) {\r
-tmp.add (node.element ());\r
-}}}return tmp;\r
-} else {\r
-jalview.analysis.AlignmentSorter._sortByTree (left, tmp, seqset);\r
-jalview.analysis.AlignmentSorter._sortByTree (right, tmp, seqset);\r
-}return tmp;\r
-}, "jalview.datamodel.SequenceNode,java.util.List,java.util.List");\r
-c$.recoverOrder = Clazz.defineMethod (c$, "recoverOrder", \r
-function (alignment) {\r
-var ids =  Clazz.newFloatArray (alignment.length, 0);\r
-for (var i = 0; i < alignment.length; i++) {\r
-ids[i] = ( new Float (alignment[i].getName ().substring (8))).floatValue ();\r
-}\r
-jalview.util.QuickSort.sortFloatObject (ids, alignment);\r
-}, "~A");\r
-c$.sortByAnnotationScore = Clazz.defineMethod (c$, "sortByAnnotationScore", \r
-function (scoreLabel, alignment) {\r
-var seqs = alignment.getSequencesArray ();\r
-var hasScore =  Clazz.newBooleanArray (seqs.length, false);\r
-var hasScores = 0;\r
-var scores =  Clazz.newDoubleArray (seqs.length, 0);\r
-var min = 0;\r
-var max = 0;\r
-for (var i = 0; i < seqs.length; i++) {\r
-var scoreAnn = seqs[i].getAnnotation (scoreLabel);\r
-if (scoreAnn != null) {\r
-hasScores++;\r
-hasScore[i] = true;\r
-scores[i] = scoreAnn[0].getScore ();\r
-if (hasScores == 1) {\r
-max = min = scores[i];\r
-} else {\r
-if (max < scores[i]) {\r
-max = scores[i];\r
-}if (min > scores[i]) {\r
-min = scores[i];\r
-}}} else {\r
-hasScore[i] = false;\r
-}}\r
-if (hasScores == 0) {\r
-return;\r
-}if (hasScores < seqs.length) {\r
-for (var i = 0; i < seqs.length; i++) {\r
-if (!hasScore[i]) {\r
-scores[i] = (max + i + 1.0);\r
-}}\r
-}jalview.util.QuickSort.sortDouble (scores, seqs);\r
-if (jalview.analysis.AlignmentSorter.lastSortByScore !== scoreLabel) {\r
-jalview.analysis.AlignmentSorter.lastSortByScore = scoreLabel;\r
-jalview.analysis.AlignmentSorter.setOrder (alignment, seqs);\r
-} else {\r
-jalview.analysis.AlignmentSorter.setReverseOrder (alignment, seqs);\r
-}}, "~S,jalview.datamodel.AlignmentI");\r
-c$.sortByFeature = Clazz.defineMethod (c$, "sortByFeature", \r
-function (featureLabel, groupLabel, start, stop, alignment, method) {\r
-jalview.analysis.AlignmentSorter.sortByFeature (featureLabel == null ? null :  Clazz.newArray (-1, [featureLabel]), groupLabel == null ? null :  Clazz.newArray (-1, [groupLabel]), start, stop, alignment, method);\r
-}, "~S,~S,~N,~N,jalview.datamodel.AlignmentI,~S");\r
-c$.containsIgnoreCase = Clazz.defineMethod (c$, "containsIgnoreCase", \r
- function (lab, labs) {\r
-if (labs == null) {\r
-return true;\r
-}if (lab == null) {\r
-return false;\r
-}for (var q = 0; q < labs.length; q++) {\r
-if (labs[q] != null && lab.equalsIgnoreCase (labs[q])) {\r
-return true;\r
-}}\r
-return false;\r
-}, "~S,~A");\r
-c$.sortByFeature = Clazz.defineMethod (c$, "sortByFeature", \r
-function (featureLabels, groupLabels, start, stop, alignment, method) {\r
-if (method !== jalview.analysis.AlignmentSorter.FEATURE_SCORE && method !== jalview.analysis.AlignmentSorter.FEATURE_LABEL && method !== jalview.analysis.AlignmentSorter.FEATURE_DENSITY) {\r
-throw  new Error (jalview.util.MessageManager.getString ("error.implementation_error_sortbyfeature"));\r
-}var ignoreScore = method !== jalview.analysis.AlignmentSorter.FEATURE_SCORE;\r
-var scoreLabel =  new StringBuffer ();\r
-scoreLabel.append (start + stop + method);\r
-for (var i = 0; featureLabels != null && i < featureLabels.length; i++) {\r
-scoreLabel.append (featureLabels[i] == null ? "null" : featureLabels[i]);\r
-}\r
-for (var i = 0; groupLabels != null && i < groupLabels.length; i++) {\r
-scoreLabel.append (groupLabels[i] == null ? "null" : groupLabels[i]);\r
-}\r
-var seqs = alignment.getSequencesArray ();\r
-var hasScore =  Clazz.newBooleanArray (seqs.length, false);\r
-var hasScores = 0;\r
-var scores =  Clazz.newDoubleArray (seqs.length, 0);\r
-var seqScores =  Clazz.newIntArray (seqs.length, 0);\r
-var feats =  new Array (seqs.length);\r
-var min = 0;\r
-var max = 0;\r
-for (var i = 0; i < seqs.length; i++) {\r
-var sf = seqs[i].getSequenceFeatures ();\r
-if (sf == null) {\r
-sf =  new Array (0);\r
-} else {\r
-var tmp =  new Array (sf.length);\r
-for (var s = 0; s < tmp.length; s++) {\r
-tmp[s] = sf[s];\r
-}\r
-sf = tmp;\r
-}var sstart = (start == -1) ? start : seqs[i].findPosition (start);\r
-var sstop = (stop == -1) ? stop : seqs[i].findPosition (stop);\r
-seqScores[i] = 0;\r
-scores[i] = 0.0;\r
-var n = sf.length;\r
-for (var f = 0; f < sf.length; f++) {\r
-if ((sf[f].end < sstart || sf[f].begin > sstop) || (featureLabels != null && !jalview.analysis.AlignmentSorter.containsIgnoreCase (sf[f].type, featureLabels)) || (groupLabels != null && (sf[f].getFeatureGroup () != null && !jalview.analysis.AlignmentSorter.containsIgnoreCase (sf[f].getFeatureGroup (), groupLabels)))) {\r
-sf[f] = null;\r
-n--;\r
-} else {\r
-if (!ignoreScore && !Float.isNaN (sf[f].getScore ())) {\r
-if (seqScores[i] == 0) {\r
-hasScores++;\r
-}seqScores[i]++;\r
-hasScore[i] = true;\r
-scores[i] += sf[f].getScore ();\r
-}}}\r
-var fs;\r
-feats[i] = fs =  new Array (n);\r
-if (n > 0) {\r
-n = 0;\r
-for (var f = 0; f < sf.length; f++) {\r
-if (sf[f] != null) {\r
-(feats[i])[n++] = sf[f];\r
-}}\r
-if (method === jalview.analysis.AlignmentSorter.FEATURE_LABEL) {\r
-var labs =  new Array (fs.length);\r
-for (var l = 0; l < labs.length; l++) {\r
-labs[l] = (fs[l].getDescription () != null ? fs[l].getDescription () : fs[l].getType ());\r
-}\r
-jalview.util.QuickSort.sort (labs, (feats[i]));\r
-}}if (hasScore[i]) {\r
-scores[i] /= seqScores[i];\r
-if (hasScores == 1) {\r
-max = min = scores[i];\r
-} else {\r
-if (max < scores[i]) {\r
-max = scores[i];\r
-}if (min > scores[i]) {\r
-min = scores[i];\r
-}}}}\r
-if (method === jalview.analysis.AlignmentSorter.FEATURE_SCORE) {\r
-if (hasScores == 0) {\r
-return;\r
-}if (hasScores < seqs.length) {\r
-for (var i = 0; i < seqs.length; i++) {\r
-if (!hasScore[i]) {\r
-scores[i] = (max + 1 + i);\r
-} else {\r
-var nf = (feats[i] == null) ? 0 : (feats[i]).length;\r
-}}\r
-}jalview.util.QuickSort.sortDouble (scores, seqs);\r
-} else if (method === jalview.analysis.AlignmentSorter.FEATURE_DENSITY) {\r
-var fr = 0.9 / (1.0 * seqs.length);\r
-for (var i = 0; i < seqs.length; i++) {\r
-var nf;\r
-scores[i] = (0.05 + fr * i) + (nf = ((feats[i] == null) ? 0.0 : 1.0 * (feats[i]).length));\r
-}\r
-jalview.util.QuickSort.sortDouble (scores, seqs);\r
-} else {\r
-if (method === jalview.analysis.AlignmentSorter.FEATURE_LABEL) {\r
-throw  new Error (jalview.util.MessageManager.getString ("error.not_yet_implemented"));\r
-}}if (jalview.analysis.AlignmentSorter.lastSortByFeatureScore == null || !scoreLabel.toString ().equals (jalview.analysis.AlignmentSorter.lastSortByFeatureScore)) {\r
-jalview.analysis.AlignmentSorter.sortByFeatureScoreAscending = true;\r
-} else {\r
-jalview.analysis.AlignmentSorter.sortByFeatureScoreAscending = !jalview.analysis.AlignmentSorter.sortByFeatureScoreAscending;\r
-}if (jalview.analysis.AlignmentSorter.sortByFeatureScoreAscending) {\r
-jalview.analysis.AlignmentSorter.setOrder (alignment, seqs);\r
-} else {\r
-jalview.analysis.AlignmentSorter.setReverseOrder (alignment, seqs);\r
-}jalview.analysis.AlignmentSorter.lastSortByFeatureScore = scoreLabel.toString ();\r
-}, "~A,~A,~N,~N,jalview.datamodel.AlignmentI,~S");\r
-Clazz.defineStatics (c$,\r
-"sortIdAscending", true,\r
-"lastGroupHash", 0,\r
-"sortGroupAscending", true,\r
-"lastOrder", null,\r
-"sortOrderAscending", true,\r
-"lastTree", null,\r
-"sortTreeAscending", true,\r
-"lastSortByScore", null,\r
-"sortByScoreAscending", true,\r
-"lastSortByFeatureScore", null,\r
-"sortByFeatureScoreAscending", true,\r
-"sortLengthAscending", false,\r
-"FEATURE_SCORE", "average_score",\r
-"FEATURE_LABEL", "text",\r
-"FEATURE_DENSITY", "density");\r
-});\r
+Clazz.declarePackage ("jalview.analysis");
+Clazz.load (null, "jalview.analysis.AlignmentSorter", ["jalview.datamodel.SequenceI", "jalview.util.Comparison", "$.MessageManager", "$.QuickSort", "java.lang.Error", "$.Float", "$.StringBuffer", "java.util.ArrayList"], function () {
+c$ = Clazz.declareType (jalview.analysis, "AlignmentSorter");
+c$.sortByPID = Clazz.defineMethod (c$, "sortByPID", 
+function (align, s, tosort) {
+jalview.analysis.AlignmentSorter.sortByPID (align, s, tosort, 0, -1);
+}, "jalview.datamodel.AlignmentI,jalview.datamodel.SequenceI,~A");
+c$.sortByPID = Clazz.defineMethod (c$, "sortByPID", 
+function (align, s, tosort, start, end) {
+var nSeq = align.getHeight ();
+var scores =  Clazz.newFloatArray (nSeq, 0);
+var seqs =  new Array (nSeq);
+for (var i = 0; i < nSeq; i++) {
+scores[i] = jalview.util.Comparison.PID (align.getSequenceAt (i).getSequenceAsString (), s.getSequenceAsString ());
+seqs[i] = align.getSequenceAt (i);
+}
+jalview.util.QuickSort.sortFloatObject (scores, seqs);
+jalview.analysis.AlignmentSorter.setReverseOrder (align, seqs);
+}, "jalview.datamodel.AlignmentI,jalview.datamodel.SequenceI,~A,~N,~N");
+c$.setReverseOrder = Clazz.defineMethod (c$, "setReverseOrder", 
+ function (align, seqs) {
+var nSeq = seqs.length;
+var len = 0;
+if ((nSeq % 2) == 0) {
+len = Clazz.doubleToInt (nSeq / 2);
+} else {
+len = Clazz.doubleToInt ((nSeq + 1) / 2);
+}var asq;
+{
+for (var i = 0; i < len; i++) {
+asq.set (i, seqs[nSeq - i - 1]);
+asq.set (nSeq - i - 1, seqs[i]);
+}
+}}, "jalview.datamodel.AlignmentI,~A");
+c$.setOrder = Clazz.defineMethod (c$, "setOrder", 
+ function (align, tmp) {
+jalview.analysis.AlignmentSorter.setOrder (align, jalview.analysis.AlignmentSorter.vectorSubsetToArray (tmp, align.getSequences ()));
+}, "jalview.datamodel.AlignmentI,java.util.List");
+c$.setOrder = Clazz.defineMethod (c$, "setOrder", 
+function (align, seqs) {
+var algn;
+{
+var tmp =  new java.util.ArrayList ();
+for (var i = 0; i < seqs.length; i++) {
+if (algn.contains (seqs[i])) {
+tmp.add (seqs[i]);
+}}
+algn.clear ();
+for (var i = 0; i < tmp.size (); i++) {
+algn.add (tmp.get (i));
+}
+}}, "jalview.datamodel.AlignmentI,~A");
+c$.sortByID = Clazz.defineMethod (c$, "sortByID", 
+function (align) {
+var nSeq = align.getHeight ();
+var ids =  new Array (nSeq);
+var seqs =  new Array (nSeq);
+for (var i = 0; i < nSeq; i++) {
+ids[i] = align.getSequenceAt (i).getName ();
+seqs[i] = align.getSequenceAt (i);
+}
+jalview.util.QuickSort.sort (ids, seqs);
+if (jalview.analysis.AlignmentSorter.sortIdAscending) {
+jalview.analysis.AlignmentSorter.setReverseOrder (align, seqs);
+} else {
+jalview.analysis.AlignmentSorter.setOrder (align, seqs);
+}jalview.analysis.AlignmentSorter.sortIdAscending = !jalview.analysis.AlignmentSorter.sortIdAscending;
+}, "jalview.datamodel.AlignmentI");
+c$.sortByLength = Clazz.defineMethod (c$, "sortByLength", 
+function (align) {
+var nSeq = align.getHeight ();
+var length =  Clazz.newFloatArray (nSeq, 0);
+var seqs =  new Array (nSeq);
+for (var i = 0; i < nSeq; i++) {
+seqs[i] = align.getSequenceAt (i);
+length[i] = (seqs[i].getEnd () - seqs[i].getStart ());
+}
+jalview.util.QuickSort.sortFloatObject (length, seqs);
+if (jalview.analysis.AlignmentSorter.sortLengthAscending) {
+jalview.analysis.AlignmentSorter.setReverseOrder (align, seqs);
+} else {
+jalview.analysis.AlignmentSorter.setOrder (align, seqs);
+}jalview.analysis.AlignmentSorter.sortLengthAscending = !jalview.analysis.AlignmentSorter.sortLengthAscending;
+}, "jalview.datamodel.AlignmentI");
+c$.sortByGroup = Clazz.defineMethod (c$, "sortByGroup", 
+function (align) {
+var groups =  new java.util.ArrayList ();
+if (groups.hashCode () != jalview.analysis.AlignmentSorter.lastGroupHash) {
+jalview.analysis.AlignmentSorter.sortGroupAscending = true;
+jalview.analysis.AlignmentSorter.lastGroupHash = groups.hashCode ();
+} else {
+jalview.analysis.AlignmentSorter.sortGroupAscending = !jalview.analysis.AlignmentSorter.sortGroupAscending;
+}for (var sg, $sg = align.getGroups ().iterator (); $sg.hasNext () && ((sg = $sg.next ()) || true);) {
+for (var j = 0; j < groups.size (); j++) {
+var sg2 = groups.get (j);
+if (sg.getSize () > sg2.getSize ()) {
+groups.add (j, sg);
+break;
+}}
+if (!groups.contains (sg)) {
+groups.add (sg);
+}}
+var seqs =  new java.util.ArrayList ();
+for (var i = 0; i < groups.size (); i++) {
+var sg = groups.get (i);
+var orderedseqs = sg.getSequencesInOrder (align);
+for (var j = 0; j < orderedseqs.length; j++) {
+seqs.add (orderedseqs[j]);
+}
+}
+if (jalview.analysis.AlignmentSorter.sortGroupAscending) {
+jalview.analysis.AlignmentSorter.setOrder (align, seqs);
+} else {
+jalview.analysis.AlignmentSorter.setReverseOrder (align, jalview.analysis.AlignmentSorter.vectorSubsetToArray (seqs, align.getSequences ()));
+}}, "jalview.datamodel.AlignmentI");
+c$.vectorSubsetToArray = Clazz.defineMethod (c$, "vectorSubsetToArray", 
+ function (tmp, mask) {
+var seqs =  new java.util.ArrayList ();
+var i;
+var idx;
+var tmask =  Clazz.newBooleanArray (mask.size (), false);
+for (i = 0; i < mask.size (); i++) {
+tmask[i] = true;
+}
+for (i = 0; i < tmp.size (); i++) {
+var sq = tmp.get (i);
+idx = mask.indexOf (sq);
+if (idx > -1 && tmask[idx]) {
+tmask[idx] = false;
+seqs.add (sq);
+}}
+for (i = 0; i < tmask.length; i++) {
+if (tmask[i]) {
+seqs.add (mask.get (i));
+}}
+return seqs.toArray ( new Array (seqs.size ()));
+}, "java.util.List,java.util.List");
+c$.sortBy = Clazz.defineMethod (c$, "sortBy", 
+function (align, order) {
+var tmp = order.getOrder ();
+if (jalview.analysis.AlignmentSorter.lastOrder === order) {
+jalview.analysis.AlignmentSorter.sortOrderAscending = !jalview.analysis.AlignmentSorter.sortOrderAscending;
+} else {
+jalview.analysis.AlignmentSorter.sortOrderAscending = true;
+}if (jalview.analysis.AlignmentSorter.sortOrderAscending) {
+jalview.analysis.AlignmentSorter.setOrder (align, tmp);
+} else {
+jalview.analysis.AlignmentSorter.setReverseOrder (align, jalview.analysis.AlignmentSorter.vectorSubsetToArray (tmp, align.getSequences ()));
+}}, "jalview.datamodel.AlignmentI,jalview.datamodel.AlignmentOrder");
+c$.getOrderByTree = Clazz.defineMethod (c$, "getOrderByTree", 
+ function (align, tree) {
+var nSeq = align.getHeight ();
+var tmp =  new java.util.ArrayList ();
+tmp = jalview.analysis.AlignmentSorter._sortByTree (tree.getTopNode (), tmp, align.getSequences ());
+if (tmp.size () != nSeq) {
+if (tmp.size () != nSeq) {
+jalview.analysis.AlignmentSorter.addStrays (align, tmp);
+}if (tmp.size () != nSeq) {
+System.err.println ("WARNING: tmp.size()=" + tmp.size () + " != nseq=" + nSeq + " in getOrderByTree - tree contains sequences not in alignment");
+}}return tmp;
+}, "jalview.datamodel.AlignmentI,jalview.analysis.NJTree");
+c$.sortByTree = Clazz.defineMethod (c$, "sortByTree", 
+function (align, tree) {
+var tmp = jalview.analysis.AlignmentSorter.getOrderByTree (align, tree);
+if (jalview.analysis.AlignmentSorter.lastTree !== tree) {
+jalview.analysis.AlignmentSorter.sortTreeAscending = true;
+jalview.analysis.AlignmentSorter.lastTree = tree;
+} else {
+jalview.analysis.AlignmentSorter.sortTreeAscending = !jalview.analysis.AlignmentSorter.sortTreeAscending;
+}if (jalview.analysis.AlignmentSorter.sortTreeAscending) {
+jalview.analysis.AlignmentSorter.setOrder (align, tmp);
+} else {
+jalview.analysis.AlignmentSorter.setReverseOrder (align, jalview.analysis.AlignmentSorter.vectorSubsetToArray (tmp, align.getSequences ()));
+}}, "jalview.datamodel.AlignmentI,jalview.analysis.NJTree");
+c$.addStrays = Clazz.defineMethod (c$, "addStrays", 
+ function (align, tmp) {
+var nSeq = align.getHeight ();
+for (var i = 0; i < nSeq; i++) {
+if (!tmp.contains (align.getSequenceAt (i))) {
+tmp.add (align.getSequenceAt (i));
+}}
+if (nSeq != tmp.size ()) {
+System.err.println ("ERROR: Size still not right even after addStrays");
+}}, "jalview.datamodel.AlignmentI,java.util.List");
+c$._sortByTree = Clazz.defineMethod (c$, "_sortByTree", 
+ function (node, tmp, seqset) {
+if (node == null) {
+return tmp;
+}var left = node.left ();
+var right = node.right ();
+if ((left == null) && (right == null)) {
+if (!node.isPlaceholder () && (node.element () != null)) {
+if (Clazz.instanceOf (node.element (), jalview.datamodel.SequenceI)) {
+if (!tmp.contains (node.element ())) {
+tmp.add (node.element ());
+}}}return tmp;
+} else {
+jalview.analysis.AlignmentSorter._sortByTree (left, tmp, seqset);
+jalview.analysis.AlignmentSorter._sortByTree (right, tmp, seqset);
+}return tmp;
+}, "jalview.datamodel.SequenceNode,java.util.List,java.util.List");
+c$.recoverOrder = Clazz.defineMethod (c$, "recoverOrder", 
+function (alignment) {
+var ids =  Clazz.newFloatArray (alignment.length, 0);
+for (var i = 0; i < alignment.length; i++) {
+ids[i] = ( new Float (alignment[i].getName ().substring (8))).floatValue ();
+}
+jalview.util.QuickSort.sortFloatObject (ids, alignment);
+}, "~A");
+c$.sortByAnnotationScore = Clazz.defineMethod (c$, "sortByAnnotationScore", 
+function (scoreLabel, alignment) {
+var seqs = alignment.getSequencesArray ();
+var hasScore =  Clazz.newBooleanArray (seqs.length, false);
+var hasScores = 0;
+var scores =  Clazz.newDoubleArray (seqs.length, 0);
+var min = 0;
+var max = 0;
+for (var i = 0; i < seqs.length; i++) {
+var scoreAnn = seqs[i].getAnnotation (scoreLabel);
+if (scoreAnn != null) {
+hasScores++;
+hasScore[i] = true;
+scores[i] = scoreAnn[0].getScore ();
+if (hasScores == 1) {
+max = min = scores[i];
+} else {
+if (max < scores[i]) {
+max = scores[i];
+}if (min > scores[i]) {
+min = scores[i];
+}}} else {
+hasScore[i] = false;
+}}
+if (hasScores == 0) {
+return;
+}if (hasScores < seqs.length) {
+for (var i = 0; i < seqs.length; i++) {
+if (!hasScore[i]) {
+scores[i] = (max + i + 1.0);
+}}
+}jalview.util.QuickSort.sortDouble (scores, seqs);
+if (jalview.analysis.AlignmentSorter.lastSortByScore !== scoreLabel) {
+jalview.analysis.AlignmentSorter.lastSortByScore = scoreLabel;
+jalview.analysis.AlignmentSorter.setOrder (alignment, seqs);
+} else {
+jalview.analysis.AlignmentSorter.setReverseOrder (alignment, seqs);
+}}, "~S,jalview.datamodel.AlignmentI");
+c$.sortByFeature = Clazz.defineMethod (c$, "sortByFeature", 
+function (featureLabel, groupLabel, start, stop, alignment, method) {
+jalview.analysis.AlignmentSorter.sortByFeature (featureLabel == null ? null :  Clazz.newArray (-1, [featureLabel]), groupLabel == null ? null :  Clazz.newArray (-1, [groupLabel]), start, stop, alignment, method);
+}, "~S,~S,~N,~N,jalview.datamodel.AlignmentI,~S");
+c$.containsIgnoreCase = Clazz.defineMethod (c$, "containsIgnoreCase", 
+ function (lab, labs) {
+if (labs == null) {
+return true;
+}if (lab == null) {
+return false;
+}for (var q = 0; q < labs.length; q++) {
+if (labs[q] != null && lab.equalsIgnoreCase (labs[q])) {
+return true;
+}}
+return false;
+}, "~S,~A");
+c$.sortByFeature = Clazz.defineMethod (c$, "sortByFeature", 
+function (featureLabels, groupLabels, start, stop, alignment, method) {
+if (method !== jalview.analysis.AlignmentSorter.FEATURE_SCORE && method !== jalview.analysis.AlignmentSorter.FEATURE_LABEL && method !== jalview.analysis.AlignmentSorter.FEATURE_DENSITY) {
+throw  new Error (jalview.util.MessageManager.getString ("error.implementation_error_sortbyfeature"));
+}var ignoreScore = method !== jalview.analysis.AlignmentSorter.FEATURE_SCORE;
+var scoreLabel =  new StringBuffer ();
+scoreLabel.append (start + stop + method);
+for (var i = 0; featureLabels != null && i < featureLabels.length; i++) {
+scoreLabel.append (featureLabels[i] == null ? "null" : featureLabels[i]);
+}
+for (var i = 0; groupLabels != null && i < groupLabels.length; i++) {
+scoreLabel.append (groupLabels[i] == null ? "null" : groupLabels[i]);
+}
+var seqs = alignment.getSequencesArray ();
+var hasScore =  Clazz.newBooleanArray (seqs.length, false);
+var hasScores = 0;
+var scores =  Clazz.newDoubleArray (seqs.length, 0);
+var seqScores =  Clazz.newIntArray (seqs.length, 0);
+var feats =  new Array (seqs.length);
+var min = 0;
+var max = 0;
+for (var i = 0; i < seqs.length; i++) {
+var sf = seqs[i].getSequenceFeatures ();
+if (sf == null) {
+sf =  new Array (0);
+} else {
+var tmp =  new Array (sf.length);
+for (var s = 0; s < tmp.length; s++) {
+tmp[s] = sf[s];
+}
+sf = tmp;
+}var sstart = (start == -1) ? start : seqs[i].findPosition (start);
+var sstop = (stop == -1) ? stop : seqs[i].findPosition (stop);
+seqScores[i] = 0;
+scores[i] = 0.0;
+var n = sf.length;
+for (var f = 0; f < sf.length; f++) {
+if ((sf[f].end < sstart || sf[f].begin > sstop) || (featureLabels != null && !jalview.analysis.AlignmentSorter.containsIgnoreCase (sf[f].type, featureLabels)) || (groupLabels != null && (sf[f].getFeatureGroup () != null && !jalview.analysis.AlignmentSorter.containsIgnoreCase (sf[f].getFeatureGroup (), groupLabels)))) {
+sf[f] = null;
+n--;
+} else {
+if (!ignoreScore && !Float.isNaN (sf[f].getScore ())) {
+if (seqScores[i] == 0) {
+hasScores++;
+}seqScores[i]++;
+hasScore[i] = true;
+scores[i] += sf[f].getScore ();
+}}}
+var fs;
+feats[i] = fs =  new Array (n);
+if (n > 0) {
+n = 0;
+for (var f = 0; f < sf.length; f++) {
+if (sf[f] != null) {
+(feats[i])[n++] = sf[f];
+}}
+if (method === jalview.analysis.AlignmentSorter.FEATURE_LABEL) {
+var labs =  new Array (fs.length);
+for (var l = 0; l < labs.length; l++) {
+labs[l] = (fs[l].getDescription () != null ? fs[l].getDescription () : fs[l].getType ());
+}
+jalview.util.QuickSort.sort (labs, (feats[i]));
+}}if (hasScore[i]) {
+scores[i] /= seqScores[i];
+if (hasScores == 1) {
+max = min = scores[i];
+} else {
+if (max < scores[i]) {
+max = scores[i];
+}if (min > scores[i]) {
+min = scores[i];
+}}}}
+if (method === jalview.analysis.AlignmentSorter.FEATURE_SCORE) {
+if (hasScores == 0) {
+return;
+}if (hasScores < seqs.length) {
+for (var i = 0; i < seqs.length; i++) {
+if (!hasScore[i]) {
+scores[i] = (max + 1 + i);
+} else {
+var nf = (feats[i] == null) ? 0 : (feats[i]).length;
+}}
+}jalview.util.QuickSort.sortDouble (scores, seqs);
+} else if (method === jalview.analysis.AlignmentSorter.FEATURE_DENSITY) {
+var fr = 0.9 / (1.0 * seqs.length);
+for (var i = 0; i < seqs.length; i++) {
+var nf;
+scores[i] = (0.05 + fr * i) + (nf = ((feats[i] == null) ? 0.0 : 1.0 * (feats[i]).length));
+}
+jalview.util.QuickSort.sortDouble (scores, seqs);
+} else {
+if (method === jalview.analysis.AlignmentSorter.FEATURE_LABEL) {
+throw  new Error (jalview.util.MessageManager.getString ("error.not_yet_implemented"));
+}}if (jalview.analysis.AlignmentSorter.lastSortByFeatureScore == null || !scoreLabel.toString ().equals (jalview.analysis.AlignmentSorter.lastSortByFeatureScore)) {
+jalview.analysis.AlignmentSorter.sortByFeatureScoreAscending = true;
+} else {
+jalview.analysis.AlignmentSorter.sortByFeatureScoreAscending = !jalview.analysis.AlignmentSorter.sortByFeatureScoreAscending;
+}if (jalview.analysis.AlignmentSorter.sortByFeatureScoreAscending) {
+jalview.analysis.AlignmentSorter.setOrder (alignment, seqs);
+} else {
+jalview.analysis.AlignmentSorter.setReverseOrder (alignment, seqs);
+}jalview.analysis.AlignmentSorter.lastSortByFeatureScore = scoreLabel.toString ();
+}, "~A,~A,~N,~N,jalview.datamodel.AlignmentI,~S");
+Clazz.defineStatics (c$,
+"sortIdAscending", true,
+"lastGroupHash", 0,
+"sortGroupAscending", true,
+"lastOrder", null,
+"sortOrderAscending", true,
+"lastTree", null,
+"sortTreeAscending", true,
+"lastSortByScore", null,
+"sortByScoreAscending", true,
+"lastSortByFeatureScore", null,
+"sortByFeatureScoreAscending", true,
+"sortLengthAscending", false,
+"FEATURE_SCORE", "average_score",
+"FEATURE_LABEL", "text",
+"FEATURE_DENSITY", "density");
+});