JAL-1807 still testing
[jalviewjs.git] / bin / jalview / analysis / AlignmentSorter.js
index bcf66d4..4c0604a 100644 (file)
-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", 
-($fz = 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]);
-}
-}}, $fz.isPrivate = true, $fz), "jalview.datamodel.AlignmentI,~A");
-c$.setOrder = Clazz.defineMethod (c$, "setOrder", 
-($fz = function (align, tmp) {
-jalview.analysis.AlignmentSorter.setOrder (align, jalview.analysis.AlignmentSorter.vectorSubsetToArray (tmp, align.getSequences ()));
-}, $fz.isPrivate = true, $fz), "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", 
-($fz = 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 ()));
-}, $fz.isPrivate = true, $fz), "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", 
-($fz = 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;
-}, $fz.isPrivate = true, $fz), "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", 
-($fz = 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");
-}}, $fz.isPrivate = true, $fz), "jalview.datamodel.AlignmentI,java.util.List");
-c$._sortByTree = Clazz.defineMethod (c$, "_sortByTree", 
-($fz = 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;
-}, $fz.isPrivate = true, $fz), "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", 
-($fz = 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;
-}, $fz.isPrivate = true, $fz), "~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");
-});
+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
+($fz = 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
+}}, $fz.isPrivate = true, $fz), "jalview.datamodel.AlignmentI,~A");\r
+c$.setOrder = Clazz.defineMethod (c$, "setOrder", \r
+($fz = function (align, tmp) {\r
+jalview.analysis.AlignmentSorter.setOrder (align, jalview.analysis.AlignmentSorter.vectorSubsetToArray (tmp, align.getSequences ()));\r
+}, $fz.isPrivate = true, $fz), "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
+($fz = 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
+}, $fz.isPrivate = true, $fz), "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
+($fz = 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
+}, $fz.isPrivate = true, $fz), "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
+($fz = 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
+}}, $fz.isPrivate = true, $fz), "jalview.datamodel.AlignmentI,java.util.List");\r
+c$._sortByTree = Clazz.defineMethod (c$, "_sortByTree", \r
+($fz = 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
+}, $fz.isPrivate = true, $fz), "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
+($fz = 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
+}, $fz.isPrivate = true, $fz), "~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