X-Git-Url: http://source.jalview.org/gitweb/?p=jalviewjs.git;a=blobdiff_plain;f=site%2Fj2s%2Fjalview%2Fanalysis%2FAlignmentSorter.js;h=eaf1757c663b064c156b76ac27c590f5a9d4726b;hp=69f28b8d4bd9432ca355ecc5900829f684c0bb04;hb=b9b7a352eee79b7764c3b09c9d19663075061d8c;hpb=8ffd05b3abe52c0b6b79b011c0966361f82d5fe6 diff --git a/site/j2s/jalview/analysis/AlignmentSorter.js b/site/j2s/jalview/analysis/AlignmentSorter.js index 69f28b8..eaf1757 100644 --- a/site/j2s/jalview/analysis/AlignmentSorter.js +++ b/site/j2s/jalview/analysis/AlignmentSorter.js @@ -1,383 +1,383 @@ -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"); -}); +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"); +});