Merge branch 'master' of https://source.jalview.org/git/jalviewjs.git
[jalviewjs.git] / site / j2s / jalview / util / MappingUtils.js
index e5f76b9..487e30d 100644 (file)
-Clazz.declarePackage ("jalview.util");\r
-Clazz.load (null, "jalview.util.MappingUtils", ["jalview.analysis.AlignmentSorter", "jalview.commands.EditCommand", "$.OrderCommand", "jalview.datamodel.AlignmentOrder", "$.ColumnSelection", "$.SearchResults", "$.Sequence", "$.SequenceGroup", "jalview.util.Comparison", "$.StringUtils", "java.util.ArrayList", "$.Collections", "$.HashMap"], function () {\r
-c$ = Clazz.declareType (jalview.util, "MappingUtils");\r
-c$.mapCutOrPaste = Clazz.defineMethod (c$, "mapCutOrPaste", \r
-function (edit, undo, targetSeqs, result, mappings) {\r
-var action = edit.getAction ();\r
-if (undo) {\r
-action = action.getUndoAction ();\r
-}System.err.println ("MappingUtils.mapCutOrPaste not yet implemented");\r
-}, "jalview.commands.EditCommand.Edit,~B,java.util.List,jalview.commands.EditCommand,java.util.Set");\r
-c$.mapEditCommand = Clazz.defineMethod (c$, "mapEditCommand", \r
-function (command, undo, mapTo, gapChar, mappings) {\r
-if (!mapTo.isNucleotide ()) {\r
-return null;\r
-}var targetCopies =  new java.util.HashMap ();\r
-for (var seq, $seq = mapTo.getSequences ().iterator (); $seq.hasNext () && ((seq = $seq.next ()) || true);) {\r
-var ds = seq.getDatasetSequence ();\r
-if (ds != null) {\r
-var copy =  new jalview.datamodel.Sequence (seq);\r
-copy.setDatasetSequence (ds);\r
-targetCopies.put (ds, copy);\r
-}}\r
-var originalSequences = command.priorState (undo);\r
-var result =  new jalview.commands.EditCommand ();\r
-var edits = command.getEditIterator (!undo);\r
-while (edits.hasNext ()) {\r
-var edit = edits.next ();\r
-if (edit.getAction () === jalview.commands.EditCommand.Action.CUT || edit.getAction () === jalview.commands.EditCommand.Action.PASTE) {\r
-jalview.util.MappingUtils.mapCutOrPaste (edit, undo, mapTo.getSequences (), result, mappings);\r
-} else if (edit.getAction () === jalview.commands.EditCommand.Action.INSERT_GAP || edit.getAction () === jalview.commands.EditCommand.Action.DELETE_GAP) {\r
-jalview.util.MappingUtils.mapInsertOrDelete (edit, undo, originalSequences, mapTo.getSequences (), targetCopies, gapChar, result, mappings);\r
-}}\r
-return result.getSize () > 0 ? result : null;\r
-}, "jalview.commands.EditCommand,~B,jalview.datamodel.AlignmentI,~S,java.util.Set");\r
-c$.mapInsertOrDelete = Clazz.defineMethod (c$, "mapInsertOrDelete", \r
-function (edit, undo, originalSequences, targetSeqs, targetCopies, gapChar, result, mappings) {\r
-var action = edit.getAction ();\r
-if (undo) {\r
-action = action.getUndoAction ();\r
-}var count = edit.getNumber ();\r
-var editPos = edit.getPosition ();\r
-for (var seq, $seq = 0, $$seq = edit.getSequences (); $seq < $$seq.length && ((seq = $$seq[$seq]) || true); $seq++) {\r
-var ds = seq.getDatasetSequence ();\r
-if (ds == null) {\r
-continue;\r
-}var actedOn = originalSequences.get (ds);\r
-var seqpos = actedOn.findPosition (editPos);\r
-var sr = jalview.util.MappingUtils.buildSearchResults (seq, seqpos, mappings);\r
-if (!sr.isEmpty ()) {\r
-for (var targetSeq, $targetSeq = targetSeqs.iterator (); $targetSeq.hasNext () && ((targetSeq = $targetSeq.next ()) || true);) {\r
-ds = targetSeq.getDatasetSequence ();\r
-if (ds == null) {\r
-continue;\r
-}var copyTarget = targetCopies.get (ds);\r
-var match = sr.getResults (copyTarget, 0, copyTarget.getLength ());\r
-if (match != null) {\r
-var ratio = 3;\r
-var mappedCount = count * 3;\r
-var mappedEditPos = action === jalview.commands.EditCommand.Action.DELETE_GAP ? match[0] - mappedCount : match[0];\r
-var e = resultClazz.innerTypeInstance (jalview.commands.EditCommand.Edit, this, null, action,  Clazz.newArray (-1, [targetSeq]), mappedEditPos, mappedCount, gapChar);\r
-result.addEdit (e);\r
-if (action === jalview.commands.EditCommand.Action.INSERT_GAP) {\r
-copyTarget.setSequence ( String.instantialize (jalview.util.StringUtils.insertCharAt (copyTarget.getSequence (), mappedEditPos, mappedCount, gapChar)));\r
-} else if (action === jalview.commands.EditCommand.Action.DELETE_GAP) {\r
-copyTarget.setSequence ( String.instantialize (jalview.util.StringUtils.deleteChars (copyTarget.getSequence (), mappedEditPos, mappedEditPos + mappedCount)));\r
-}}}\r
-}if (action === jalview.commands.EditCommand.Action.INSERT_GAP) {\r
-actedOn.setSequence ( String.instantialize (jalview.util.StringUtils.insertCharAt (actedOn.getSequence (), editPos, count, gapChar)));\r
-} else if (action === jalview.commands.EditCommand.Action.DELETE_GAP) {\r
-actedOn.setSequence ( String.instantialize (jalview.util.StringUtils.deleteChars (actedOn.getSequence (), editPos, editPos + count)));\r
-}}\r
-}, "jalview.commands.EditCommand.Edit,~B,java.util.Map,java.util.List,java.util.Map,~S,jalview.commands.EditCommand,java.util.Set");\r
-c$.buildSearchResults = Clazz.defineMethod (c$, "buildSearchResults", \r
-function (seq, index, seqmappings) {\r
-var results =  new jalview.datamodel.SearchResults ();\r
-jalview.util.MappingUtils.addSearchResults (results, seq, index, seqmappings);\r
-return results;\r
-}, "jalview.datamodel.SequenceI,~N,java.util.Set");\r
-c$.addSearchResults = Clazz.defineMethod (c$, "addSearchResults", \r
-function (results, seq, index, seqmappings) {\r
-if (index >= seq.getStart () && index <= seq.getEnd ()) {\r
-for (var acf, $acf = seqmappings.iterator (); $acf.hasNext () && ((acf = $acf.next ()) || true);) {\r
-acf.markMappedRegion (seq, index, results);\r
-}\r
-}}, "jalview.datamodel.SearchResults,jalview.datamodel.SequenceI,~N,java.util.Set");\r
-c$.mapSequenceGroup = Clazz.defineMethod (c$, "mapSequenceGroup", \r
-function (sg, mapFrom, mapTo) {\r
-var targetIsNucleotide = mapTo.isNucleotide ();\r
-var protein = targetIsNucleotide ? mapFrom : mapTo;\r
-var codonFrames = protein.getAlignment ().getCodonFrames ();\r
-var mappedGroup =  new jalview.datamodel.SequenceGroup (sg);\r
-mappedGroup.cs = mapTo.getGlobalColourScheme ();\r
-mappedGroup.clear ();\r
-var minStartCol = -1;\r
-var maxEndCol = -1;\r
-var selectionStartRes = sg.getStartRes ();\r
-var selectionEndRes = sg.getEndRes ();\r
-for (var selected, $selected = sg.getSequences ().iterator (); $selected.hasNext () && ((selected = $selected.next ()) || true);) {\r
-var firstUngappedPos = selectionStartRes;\r
-while (firstUngappedPos <= selectionEndRes && jalview.util.Comparison.isGap (selected.getCharAt (firstUngappedPos))) {\r
-firstUngappedPos++;\r
-}\r
-if (firstUngappedPos > selectionEndRes) {\r
-continue;\r
-}var lastUngappedPos = selectionEndRes;\r
-while (lastUngappedPos >= selectionStartRes && jalview.util.Comparison.isGap (selected.getCharAt (lastUngappedPos))) {\r
-lastUngappedPos--;\r
-}\r
-var startResiduePos = selected.findPosition (firstUngappedPos);\r
-var endResiduePos = selected.findPosition (lastUngappedPos);\r
-for (var acf, $acf = codonFrames.iterator (); $acf.hasNext () && ((acf = $acf.next ()) || true);) {\r
-var mappedSequence = targetIsNucleotide ? acf.getDnaForAaSeq (selected) : acf.getAaForDnaSeq (selected);\r
-if (mappedSequence != null) {\r
-for (var seq, $seq = mapTo.getAlignment ().getSequences ().iterator (); $seq.hasNext () && ((seq = $seq.next ()) || true);) {\r
-var mappedStartResidue = 0;\r
-var mappedEndResidue = 0;\r
-if (seq.getDatasetSequence () === mappedSequence) {\r
-var sr = jalview.util.MappingUtils.buildSearchResults (selected, startResiduePos, java.util.Collections.singleton (acf));\r
-for (var m, $m = sr.getResults ().iterator (); $m.hasNext () && ((m = $m.next ()) || true);) {\r
-mappedStartResidue = m.getStart ();\r
-mappedEndResidue = m.getEnd ();\r
-}\r
-sr = jalview.util.MappingUtils.buildSearchResults (selected, endResiduePos, java.util.Collections.singleton (acf));\r
-for (var m, $m = sr.getResults ().iterator (); $m.hasNext () && ((m = $m.next ()) || true);) {\r
-mappedStartResidue = Math.min (mappedStartResidue, m.getStart ());\r
-mappedEndResidue = Math.max (mappedEndResidue, m.getEnd ());\r
-}\r
-var mappedStartCol = seq.findIndex (mappedStartResidue) - 1;\r
-minStartCol = minStartCol == -1 ? mappedStartCol : Math.min (minStartCol, mappedStartCol);\r
-var mappedEndCol = seq.findIndex (mappedEndResidue) - 1;\r
-maxEndCol = maxEndCol == -1 ? mappedEndCol : Math.max (maxEndCol, mappedEndCol);\r
-mappedGroup.addSequence (seq, false);\r
-break;\r
-}}\r
-}}\r
-}\r
-mappedGroup.setStartRes (minStartCol < 0 ? 0 : minStartCol);\r
-mappedGroup.setEndRes (maxEndCol < 0 ? 0 : maxEndCol);\r
-return mappedGroup;\r
-}, "jalview.datamodel.SequenceGroup,jalview.api.AlignViewportI,jalview.api.AlignViewportI");\r
-c$.mapOrderCommand = Clazz.defineMethod (c$, "mapOrderCommand", \r
-function (command, undo, mapTo, mappings) {\r
-var sortOrder = command.getSequenceOrder (undo);\r
-var mappedOrder =  new java.util.ArrayList ();\r
-var j = 0;\r
-var mappingToNucleotide = mapTo.isNucleotide ();\r
-for (var seq, $seq = 0, $$seq = sortOrder; $seq < $$seq.length && ((seq = $$seq[$seq]) || true); $seq++) {\r
-for (var acf, $acf = mappings.iterator (); $acf.hasNext () && ((acf = $acf.next ()) || true);) {\r
-var mappedSeq = mappingToNucleotide ? acf.getDnaForAaSeq (seq) : acf.getAaForDnaSeq (seq);\r
-if (mappedSeq != null) {\r
-for (var seq2, $seq2 = mapTo.getSequences ().iterator (); $seq2.hasNext () && ((seq2 = $seq2.next ()) || true);) {\r
-if (seq2.getDatasetSequence () === mappedSeq) {\r
-mappedOrder.add (seq2);\r
-j++;\r
-break;\r
-}}\r
-}}\r
-}\r
-if (j == 0) {\r
-return null;\r
-}if (j < mapTo.getHeight ()) {\r
-for (var seq, $seq = mapTo.getSequences ().iterator (); $seq.hasNext () && ((seq = $seq.next ()) || true);) {\r
-if (!mappedOrder.contains (seq)) {\r
-mappedOrder.add (seq);\r
-}}\r
-}var mappedOrderArray = mappedOrder.toArray ( new Array (mappedOrder.size ()));\r
-var oldOrder = mapTo.getSequencesArray ();\r
-jalview.analysis.AlignmentSorter.sortBy (mapTo,  new jalview.datamodel.AlignmentOrder (mappedOrderArray));\r
-var result =  new jalview.commands.OrderCommand (command.getDescription (), oldOrder, mapTo);\r
-return result;\r
-}, "jalview.commands.OrderCommand,~B,jalview.datamodel.AlignmentI,java.util.Set");\r
-c$.mapColumnSelection = Clazz.defineMethod (c$, "mapColumnSelection", \r
-function (colsel, mapFrom, mapTo) {\r
-var targetIsNucleotide = mapTo.isNucleotide ();\r
-var protein = targetIsNucleotide ? mapFrom : mapTo;\r
-var codonFrames = protein.getAlignment ().getCodonFrames ();\r
-var mappedColumns =  new jalview.datamodel.ColumnSelection ();\r
-if (colsel == null) {\r
-return mappedColumns;\r
-}var fromGapChar = mapFrom.getAlignment ().getGapCharacter ();\r
-for (var obj, $obj = colsel.getSelected ().iterator (); $obj.hasNext () && ((obj = $obj.next ()) || true);) {\r
-var col = (obj).intValue ();\r
-var mappedToMin = 2147483647;\r
-var mappedToMax = -2147483648;\r
-for (var fromSeq, $fromSeq = mapFrom.getAlignment ().getSequences ().iterator (); $fromSeq.hasNext () && ((fromSeq = $fromSeq.next ()) || true);) {\r
-if (fromSeq.getCharAt (col) == fromGapChar) {\r
-continue;\r
-}var residuePos = fromSeq.findPosition (col);\r
-var sr = jalview.util.MappingUtils.buildSearchResults (fromSeq, residuePos, codonFrames);\r
-for (var m, $m = sr.getResults ().iterator (); $m.hasNext () && ((m = $m.next ()) || true);) {\r
-var mappedStartResidue = m.getStart ();\r
-var mappedEndResidue = m.getEnd ();\r
-var mappedSeq = m.getSequence ();\r
-for (var toSeq, $toSeq = mapTo.getAlignment ().getSequences ().iterator (); $toSeq.hasNext () && ((toSeq = $toSeq.next ()) || true);) {\r
-if (toSeq.getDatasetSequence () === mappedSeq) {\r
-var mappedStartCol = toSeq.findIndex (mappedStartResidue);\r
-var mappedEndCol = toSeq.findIndex (mappedEndResidue);\r
-mappedToMin = Math.min (mappedToMin, mappedStartCol);\r
-mappedToMax = Math.max (mappedToMax, mappedEndCol);\r
-break;\r
-}}\r
-}\r
-}\r
-for (var i = mappedToMin; i <= mappedToMax; i++) {\r
-mappedColumns.addElement (i - 1);\r
-}\r
-}\r
-return mappedColumns;\r
-}, "jalview.datamodel.ColumnSelection,jalview.api.AlignViewportI,jalview.api.AlignViewportI");\r
-c$.findCodonFor = Clazz.defineMethod (c$, "findCodonFor", \r
-function (seq, col, mappings) {\r
-var dsPos = seq.findPosition (col);\r
-for (var mapping, $mapping = mappings.iterator (); $mapping.hasNext () && ((mapping = $mapping.next ()) || true);) {\r
-if (mapping.involvesSequence (seq)) {\r
-return mapping.getMappedCodon (seq.getDatasetSequence (), dsPos);\r
-}}\r
-return null;\r
-}, "jalview.datamodel.SequenceI,~N,java.util.Set");\r
-c$.flattenRanges = Clazz.defineMethod (c$, "flattenRanges", \r
-function (ranges) {\r
-var count = 0;\r
-for (var i = 0; i < ranges.length - 1; i += 2) {\r
-count += ranges[i + 1] - ranges[i] + 1;\r
-}\r
-var result =  Clazz.newIntArray (count, 0);\r
-var k = 0;\r
-for (var i = 0; i < ranges.length - 1; i += 2) {\r
-for (var j = ranges[i]; j <= ranges[i + 1]; j++) {\r
-result[k++] = j;\r
-}\r
-}\r
-return result;\r
-}, "~A");\r
-c$.findMappingsForSequence = Clazz.defineMethod (c$, "findMappingsForSequence", \r
-function (sequence, mappings) {\r
-var result =  new java.util.ArrayList ();\r
-if (sequence == null || mappings == null) {\r
-return result;\r
-}for (var mapping, $mapping = mappings.iterator (); $mapping.hasNext () && ((mapping = $mapping.next ()) || true);) {\r
-if (mapping.involvesSequence (sequence)) {\r
-result.add (mapping);\r
-}}\r
-return result;\r
-}, "jalview.datamodel.SequenceI,java.util.Set");\r
-});\r
+Clazz.declarePackage ("jalview.util");
+Clazz.load (null, "jalview.util.MappingUtils", ["jalview.analysis.AlignmentSorter", "jalview.commands.EditCommand", "$.OrderCommand", "jalview.datamodel.AlignmentOrder", "$.ColumnSelection", "$.SearchResults", "$.Sequence", "$.SequenceGroup", "jalview.util.Comparison", "$.StringUtils", "java.util.ArrayList", "$.Collections", "$.HashMap"], function () {
+c$ = Clazz.declareType (jalview.util, "MappingUtils");
+c$.mapCutOrPaste = Clazz.defineMethod (c$, "mapCutOrPaste", 
+function (edit, undo, targetSeqs, result, mappings) {
+var action = edit.getAction ();
+if (undo) {
+action = action.getUndoAction ();
+}System.err.println ("MappingUtils.mapCutOrPaste not yet implemented");
+}, "jalview.commands.EditCommand.Edit,~B,java.util.List,jalview.commands.EditCommand,java.util.Set");
+c$.mapEditCommand = Clazz.defineMethod (c$, "mapEditCommand", 
+function (command, undo, mapTo, gapChar, mappings) {
+if (!mapTo.isNucleotide ()) {
+return null;
+}var targetCopies =  new java.util.HashMap ();
+for (var seq, $seq = mapTo.getSequences ().iterator (); $seq.hasNext () && ((seq = $seq.next ()) || true);) {
+var ds = seq.getDatasetSequence ();
+if (ds != null) {
+var copy =  new jalview.datamodel.Sequence (seq);
+copy.setDatasetSequence (ds);
+targetCopies.put (ds, copy);
+}}
+var originalSequences = command.priorState (undo);
+var result =  new jalview.commands.EditCommand ();
+var edits = command.getEditIterator (!undo);
+while (edits.hasNext ()) {
+var edit = edits.next ();
+if (edit.getAction () === jalview.commands.EditCommand.Action.CUT || edit.getAction () === jalview.commands.EditCommand.Action.PASTE) {
+jalview.util.MappingUtils.mapCutOrPaste (edit, undo, mapTo.getSequences (), result, mappings);
+} else if (edit.getAction () === jalview.commands.EditCommand.Action.INSERT_GAP || edit.getAction () === jalview.commands.EditCommand.Action.DELETE_GAP) {
+jalview.util.MappingUtils.mapInsertOrDelete (edit, undo, originalSequences, mapTo.getSequences (), targetCopies, gapChar, result, mappings);
+}}
+return result.getSize () > 0 ? result : null;
+}, "jalview.commands.EditCommand,~B,jalview.datamodel.AlignmentI,~S,java.util.Set");
+c$.mapInsertOrDelete = Clazz.defineMethod (c$, "mapInsertOrDelete", 
+function (edit, undo, originalSequences, targetSeqs, targetCopies, gapChar, result, mappings) {
+var action = edit.getAction ();
+if (undo) {
+action = action.getUndoAction ();
+}var count = edit.getNumber ();
+var editPos = edit.getPosition ();
+for (var seq, $seq = 0, $$seq = edit.getSequences (); $seq < $$seq.length && ((seq = $$seq[$seq]) || true); $seq++) {
+var ds = seq.getDatasetSequence ();
+if (ds == null) {
+continue;
+}var actedOn = originalSequences.get (ds);
+var seqpos = actedOn.findPosition (editPos);
+var sr = jalview.util.MappingUtils.buildSearchResults (seq, seqpos, mappings);
+if (!sr.isEmpty ()) {
+for (var targetSeq, $targetSeq = targetSeqs.iterator (); $targetSeq.hasNext () && ((targetSeq = $targetSeq.next ()) || true);) {
+ds = targetSeq.getDatasetSequence ();
+if (ds == null) {
+continue;
+}var copyTarget = targetCopies.get (ds);
+var match = sr.getResults (copyTarget, 0, copyTarget.getLength ());
+if (match != null) {
+var ratio = 3;
+var mappedCount = count * 3;
+var mappedEditPos = action === jalview.commands.EditCommand.Action.DELETE_GAP ? match[0] - mappedCount : match[0];
+var e = resultClazz.innerTypeInstance (jalview.commands.EditCommand.Edit, this, null, action,  Clazz.newArray (-1, [targetSeq]), mappedEditPos, mappedCount, gapChar);
+result.addEdit (e);
+if (action === jalview.commands.EditCommand.Action.INSERT_GAP) {
+copyTarget.setSequence ( String.instantialize (jalview.util.StringUtils.insertCharAt (copyTarget.getSequence (), mappedEditPos, mappedCount, gapChar)));
+} else if (action === jalview.commands.EditCommand.Action.DELETE_GAP) {
+copyTarget.setSequence ( String.instantialize (jalview.util.StringUtils.deleteChars (copyTarget.getSequence (), mappedEditPos, mappedEditPos + mappedCount)));
+}}}
+}if (action === jalview.commands.EditCommand.Action.INSERT_GAP) {
+actedOn.setSequence ( String.instantialize (jalview.util.StringUtils.insertCharAt (actedOn.getSequence (), editPos, count, gapChar)));
+} else if (action === jalview.commands.EditCommand.Action.DELETE_GAP) {
+actedOn.setSequence ( String.instantialize (jalview.util.StringUtils.deleteChars (actedOn.getSequence (), editPos, editPos + count)));
+}}
+}, "jalview.commands.EditCommand.Edit,~B,java.util.Map,java.util.List,java.util.Map,~S,jalview.commands.EditCommand,java.util.Set");
+c$.buildSearchResults = Clazz.defineMethod (c$, "buildSearchResults", 
+function (seq, index, seqmappings) {
+var results =  new jalview.datamodel.SearchResults ();
+jalview.util.MappingUtils.addSearchResults (results, seq, index, seqmappings);
+return results;
+}, "jalview.datamodel.SequenceI,~N,java.util.Set");
+c$.addSearchResults = Clazz.defineMethod (c$, "addSearchResults", 
+function (results, seq, index, seqmappings) {
+if (index >= seq.getStart () && index <= seq.getEnd ()) {
+for (var acf, $acf = seqmappings.iterator (); $acf.hasNext () && ((acf = $acf.next ()) || true);) {
+acf.markMappedRegion (seq, index, results);
+}
+}}, "jalview.datamodel.SearchResults,jalview.datamodel.SequenceI,~N,java.util.Set");
+c$.mapSequenceGroup = Clazz.defineMethod (c$, "mapSequenceGroup", 
+function (sg, mapFrom, mapTo) {
+var targetIsNucleotide = mapTo.isNucleotide ();
+var protein = targetIsNucleotide ? mapFrom : mapTo;
+var codonFrames = protein.getAlignment ().getCodonFrames ();
+var mappedGroup =  new jalview.datamodel.SequenceGroup (sg);
+mappedGroup.cs = mapTo.getGlobalColourScheme ();
+mappedGroup.clear ();
+var minStartCol = -1;
+var maxEndCol = -1;
+var selectionStartRes = sg.getStartRes ();
+var selectionEndRes = sg.getEndRes ();
+for (var selected, $selected = sg.getSequences ().iterator (); $selected.hasNext () && ((selected = $selected.next ()) || true);) {
+var firstUngappedPos = selectionStartRes;
+while (firstUngappedPos <= selectionEndRes && jalview.util.Comparison.isGap (selected.getCharAt (firstUngappedPos))) {
+firstUngappedPos++;
+}
+if (firstUngappedPos > selectionEndRes) {
+continue;
+}var lastUngappedPos = selectionEndRes;
+while (lastUngappedPos >= selectionStartRes && jalview.util.Comparison.isGap (selected.getCharAt (lastUngappedPos))) {
+lastUngappedPos--;
+}
+var startResiduePos = selected.findPosition (firstUngappedPos);
+var endResiduePos = selected.findPosition (lastUngappedPos);
+for (var acf, $acf = codonFrames.iterator (); $acf.hasNext () && ((acf = $acf.next ()) || true);) {
+var mappedSequence = targetIsNucleotide ? acf.getDnaForAaSeq (selected) : acf.getAaForDnaSeq (selected);
+if (mappedSequence != null) {
+for (var seq, $seq = mapTo.getAlignment ().getSequences ().iterator (); $seq.hasNext () && ((seq = $seq.next ()) || true);) {
+var mappedStartResidue = 0;
+var mappedEndResidue = 0;
+if (seq.getDatasetSequence () === mappedSequence) {
+var sr = jalview.util.MappingUtils.buildSearchResults (selected, startResiduePos, java.util.Collections.singleton (acf));
+for (var m, $m = sr.getResults ().iterator (); $m.hasNext () && ((m = $m.next ()) || true);) {
+mappedStartResidue = m.getStart ();
+mappedEndResidue = m.getEnd ();
+}
+sr = jalview.util.MappingUtils.buildSearchResults (selected, endResiduePos, java.util.Collections.singleton (acf));
+for (var m, $m = sr.getResults ().iterator (); $m.hasNext () && ((m = $m.next ()) || true);) {
+mappedStartResidue = Math.min (mappedStartResidue, m.getStart ());
+mappedEndResidue = Math.max (mappedEndResidue, m.getEnd ());
+}
+var mappedStartCol = seq.findIndex (mappedStartResidue) - 1;
+minStartCol = minStartCol == -1 ? mappedStartCol : Math.min (minStartCol, mappedStartCol);
+var mappedEndCol = seq.findIndex (mappedEndResidue) - 1;
+maxEndCol = maxEndCol == -1 ? mappedEndCol : Math.max (maxEndCol, mappedEndCol);
+mappedGroup.addSequence (seq, false);
+break;
+}}
+}}
+}
+mappedGroup.setStartRes (minStartCol < 0 ? 0 : minStartCol);
+mappedGroup.setEndRes (maxEndCol < 0 ? 0 : maxEndCol);
+return mappedGroup;
+}, "jalview.datamodel.SequenceGroup,jalview.api.AlignViewportI,jalview.api.AlignViewportI");
+c$.mapOrderCommand = Clazz.defineMethod (c$, "mapOrderCommand", 
+function (command, undo, mapTo, mappings) {
+var sortOrder = command.getSequenceOrder (undo);
+var mappedOrder =  new java.util.ArrayList ();
+var j = 0;
+var mappingToNucleotide = mapTo.isNucleotide ();
+for (var seq, $seq = 0, $$seq = sortOrder; $seq < $$seq.length && ((seq = $$seq[$seq]) || true); $seq++) {
+for (var acf, $acf = mappings.iterator (); $acf.hasNext () && ((acf = $acf.next ()) || true);) {
+var mappedSeq = mappingToNucleotide ? acf.getDnaForAaSeq (seq) : acf.getAaForDnaSeq (seq);
+if (mappedSeq != null) {
+for (var seq2, $seq2 = mapTo.getSequences ().iterator (); $seq2.hasNext () && ((seq2 = $seq2.next ()) || true);) {
+if (seq2.getDatasetSequence () === mappedSeq) {
+mappedOrder.add (seq2);
+j++;
+break;
+}}
+}}
+}
+if (j == 0) {
+return null;
+}if (j < mapTo.getHeight ()) {
+for (var seq, $seq = mapTo.getSequences ().iterator (); $seq.hasNext () && ((seq = $seq.next ()) || true);) {
+if (!mappedOrder.contains (seq)) {
+mappedOrder.add (seq);
+}}
+}var mappedOrderArray = mappedOrder.toArray ( new Array (mappedOrder.size ()));
+var oldOrder = mapTo.getSequencesArray ();
+jalview.analysis.AlignmentSorter.sortBy (mapTo,  new jalview.datamodel.AlignmentOrder (mappedOrderArray));
+var result =  new jalview.commands.OrderCommand (command.getDescription (), oldOrder, mapTo);
+return result;
+}, "jalview.commands.OrderCommand,~B,jalview.datamodel.AlignmentI,java.util.Set");
+c$.mapColumnSelection = Clazz.defineMethod (c$, "mapColumnSelection", 
+function (colsel, mapFrom, mapTo) {
+var targetIsNucleotide = mapTo.isNucleotide ();
+var protein = targetIsNucleotide ? mapFrom : mapTo;
+var codonFrames = protein.getAlignment ().getCodonFrames ();
+var mappedColumns =  new jalview.datamodel.ColumnSelection ();
+if (colsel == null) {
+return mappedColumns;
+}var fromGapChar = mapFrom.getAlignment ().getGapCharacter ();
+for (var obj, $obj = colsel.getSelected ().iterator (); $obj.hasNext () && ((obj = $obj.next ()) || true);) {
+var col = (obj).intValue ();
+var mappedToMin = 2147483647;
+var mappedToMax = -2147483648;
+for (var fromSeq, $fromSeq = mapFrom.getAlignment ().getSequences ().iterator (); $fromSeq.hasNext () && ((fromSeq = $fromSeq.next ()) || true);) {
+if (fromSeq.getCharAt (col) == fromGapChar) {
+continue;
+}var residuePos = fromSeq.findPosition (col);
+var sr = jalview.util.MappingUtils.buildSearchResults (fromSeq, residuePos, codonFrames);
+for (var m, $m = sr.getResults ().iterator (); $m.hasNext () && ((m = $m.next ()) || true);) {
+var mappedStartResidue = m.getStart ();
+var mappedEndResidue = m.getEnd ();
+var mappedSeq = m.getSequence ();
+for (var toSeq, $toSeq = mapTo.getAlignment ().getSequences ().iterator (); $toSeq.hasNext () && ((toSeq = $toSeq.next ()) || true);) {
+if (toSeq.getDatasetSequence () === mappedSeq) {
+var mappedStartCol = toSeq.findIndex (mappedStartResidue);
+var mappedEndCol = toSeq.findIndex (mappedEndResidue);
+mappedToMin = Math.min (mappedToMin, mappedStartCol);
+mappedToMax = Math.max (mappedToMax, mappedEndCol);
+break;
+}}
+}
+}
+for (var i = mappedToMin; i <= mappedToMax; i++) {
+mappedColumns.addElement (i - 1);
+}
+}
+return mappedColumns;
+}, "jalview.datamodel.ColumnSelection,jalview.api.AlignViewportI,jalview.api.AlignViewportI");
+c$.findCodonFor = Clazz.defineMethod (c$, "findCodonFor", 
+function (seq, col, mappings) {
+var dsPos = seq.findPosition (col);
+for (var mapping, $mapping = mappings.iterator (); $mapping.hasNext () && ((mapping = $mapping.next ()) || true);) {
+if (mapping.involvesSequence (seq)) {
+return mapping.getMappedCodon (seq.getDatasetSequence (), dsPos);
+}}
+return null;
+}, "jalview.datamodel.SequenceI,~N,java.util.Set");
+c$.flattenRanges = Clazz.defineMethod (c$, "flattenRanges", 
+function (ranges) {
+var count = 0;
+for (var i = 0; i < ranges.length - 1; i += 2) {
+count += ranges[i + 1] - ranges[i] + 1;
+}
+var result =  Clazz.newIntArray (count, 0);
+var k = 0;
+for (var i = 0; i < ranges.length - 1; i += 2) {
+for (var j = ranges[i]; j <= ranges[i + 1]; j++) {
+result[k++] = j;
+}
+}
+return result;
+}, "~A");
+c$.findMappingsForSequence = Clazz.defineMethod (c$, "findMappingsForSequence", 
+function (sequence, mappings) {
+var result =  new java.util.ArrayList ();
+if (sequence == null || mappings == null) {
+return result;
+}for (var mapping, $mapping = mappings.iterator (); $mapping.hasNext () && ((mapping = $mapping.next ()) || true);) {
+if (mapping.involvesSequence (sequence)) {
+result.add (mapping);
+}}
+return result;
+}, "jalview.datamodel.SequenceI,java.util.Set");
+});