1 Clazz.declarePackage ("jalview.util");
\r
2 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
3 c$ = Clazz.declareType (jalview.util, "MappingUtils");
\r
4 c$.mapCutOrPaste = Clazz.defineMethod (c$, "mapCutOrPaste",
\r
5 function (edit, undo, targetSeqs, result, mappings) {
\r
6 var action = edit.getAction ();
\r
8 action = action.getUndoAction ();
\r
9 }System.err.println ("MappingUtils.mapCutOrPaste not yet implemented");
\r
10 }, "jalview.commands.EditCommand.Edit,~B,java.util.List,jalview.commands.EditCommand,java.util.Set");
\r
11 c$.mapEditCommand = Clazz.defineMethod (c$, "mapEditCommand",
\r
12 function (command, undo, mapTo, gapChar, mappings) {
\r
13 if (!mapTo.isNucleotide ()) {
\r
15 }var targetCopies = new java.util.HashMap ();
\r
16 for (var seq, $seq = mapTo.getSequences ().iterator (); $seq.hasNext () && ((seq = $seq.next ()) || true);) {
\r
17 var ds = seq.getDatasetSequence ();
\r
19 var copy = new jalview.datamodel.Sequence (seq);
\r
20 copy.setDatasetSequence (ds);
\r
21 targetCopies.put (ds, copy);
\r
23 var originalSequences = command.priorState (undo);
\r
24 var result = new jalview.commands.EditCommand ();
\r
25 var edits = command.getEditIterator (!undo);
\r
26 while (edits.hasNext ()) {
\r
27 var edit = edits.next ();
\r
28 if (edit.getAction () === jalview.commands.EditCommand.Action.CUT || edit.getAction () === jalview.commands.EditCommand.Action.PASTE) {
\r
29 jalview.util.MappingUtils.mapCutOrPaste (edit, undo, mapTo.getSequences (), result, mappings);
\r
30 } else if (edit.getAction () === jalview.commands.EditCommand.Action.INSERT_GAP || edit.getAction () === jalview.commands.EditCommand.Action.DELETE_GAP) {
\r
31 jalview.util.MappingUtils.mapInsertOrDelete (edit, undo, originalSequences, mapTo.getSequences (), targetCopies, gapChar, result, mappings);
\r
33 return result.getSize () > 0 ? result : null;
\r
34 }, "jalview.commands.EditCommand,~B,jalview.datamodel.AlignmentI,~S,java.util.Set");
\r
35 c$.mapInsertOrDelete = Clazz.defineMethod (c$, "mapInsertOrDelete",
\r
36 function (edit, undo, originalSequences, targetSeqs, targetCopies, gapChar, result, mappings) {
\r
37 var action = edit.getAction ();
\r
39 action = action.getUndoAction ();
\r
40 }var count = edit.getNumber ();
\r
41 var editPos = edit.getPosition ();
\r
42 for (var seq, $seq = 0, $$seq = edit.getSequences (); $seq < $$seq.length && ((seq = $$seq[$seq]) || true); $seq++) {
\r
43 var ds = seq.getDatasetSequence ();
\r
46 }var actedOn = originalSequences.get (ds);
\r
47 var seqpos = actedOn.findPosition (editPos);
\r
48 var sr = jalview.util.MappingUtils.buildSearchResults (seq, seqpos, mappings);
\r
49 if (!sr.isEmpty ()) {
\r
50 for (var targetSeq, $targetSeq = targetSeqs.iterator (); $targetSeq.hasNext () && ((targetSeq = $targetSeq.next ()) || true);) {
\r
51 ds = targetSeq.getDatasetSequence ();
\r
54 }var copyTarget = targetCopies.get (ds);
\r
55 var match = sr.getResults (copyTarget, 0, copyTarget.getLength ());
\r
56 if (match != null) {
\r
58 var mappedCount = count * 3;
\r
59 var mappedEditPos = action === jalview.commands.EditCommand.Action.DELETE_GAP ? match[0] - mappedCount : match[0];
\r
60 var e = resultClazz.innerTypeInstance (jalview.commands.EditCommand.Edit, this, null, action, Clazz.newArray (-1, [targetSeq]), mappedEditPos, mappedCount, gapChar);
\r
62 if (action === jalview.commands.EditCommand.Action.INSERT_GAP) {
\r
63 copyTarget.setSequence ( String.instantialize (jalview.util.StringUtils.insertCharAt (copyTarget.getSequence (), mappedEditPos, mappedCount, gapChar)));
\r
64 } else if (action === jalview.commands.EditCommand.Action.DELETE_GAP) {
\r
65 copyTarget.setSequence ( String.instantialize (jalview.util.StringUtils.deleteChars (copyTarget.getSequence (), mappedEditPos, mappedEditPos + mappedCount)));
\r
67 }if (action === jalview.commands.EditCommand.Action.INSERT_GAP) {
\r
68 actedOn.setSequence ( String.instantialize (jalview.util.StringUtils.insertCharAt (actedOn.getSequence (), editPos, count, gapChar)));
\r
69 } else if (action === jalview.commands.EditCommand.Action.DELETE_GAP) {
\r
70 actedOn.setSequence ( String.instantialize (jalview.util.StringUtils.deleteChars (actedOn.getSequence (), editPos, editPos + count)));
\r
72 }, "jalview.commands.EditCommand.Edit,~B,java.util.Map,java.util.List,java.util.Map,~S,jalview.commands.EditCommand,java.util.Set");
\r
73 c$.buildSearchResults = Clazz.defineMethod (c$, "buildSearchResults",
\r
74 function (seq, index, seqmappings) {
\r
75 var results = new jalview.datamodel.SearchResults ();
\r
76 jalview.util.MappingUtils.addSearchResults (results, seq, index, seqmappings);
\r
78 }, "jalview.datamodel.SequenceI,~N,java.util.Set");
\r
79 c$.addSearchResults = Clazz.defineMethod (c$, "addSearchResults",
\r
80 function (results, seq, index, seqmappings) {
\r
81 if (index >= seq.getStart () && index <= seq.getEnd ()) {
\r
82 for (var acf, $acf = seqmappings.iterator (); $acf.hasNext () && ((acf = $acf.next ()) || true);) {
\r
83 acf.markMappedRegion (seq, index, results);
\r
85 }}, "jalview.datamodel.SearchResults,jalview.datamodel.SequenceI,~N,java.util.Set");
\r
86 c$.mapSequenceGroup = Clazz.defineMethod (c$, "mapSequenceGroup",
\r
87 function (sg, mapFrom, mapTo) {
\r
88 var targetIsNucleotide = mapTo.isNucleotide ();
\r
89 var protein = targetIsNucleotide ? mapFrom : mapTo;
\r
90 var codonFrames = protein.getAlignment ().getCodonFrames ();
\r
91 var mappedGroup = new jalview.datamodel.SequenceGroup (sg);
\r
92 mappedGroup.cs = mapTo.getGlobalColourScheme ();
\r
93 mappedGroup.clear ();
\r
94 var minStartCol = -1;
\r
96 var selectionStartRes = sg.getStartRes ();
\r
97 var selectionEndRes = sg.getEndRes ();
\r
98 for (var selected, $selected = sg.getSequences ().iterator (); $selected.hasNext () && ((selected = $selected.next ()) || true);) {
\r
99 var firstUngappedPos = selectionStartRes;
\r
100 while (firstUngappedPos <= selectionEndRes && jalview.util.Comparison.isGap (selected.getCharAt (firstUngappedPos))) {
\r
101 firstUngappedPos++;
\r
103 if (firstUngappedPos > selectionEndRes) {
\r
105 }var lastUngappedPos = selectionEndRes;
\r
106 while (lastUngappedPos >= selectionStartRes && jalview.util.Comparison.isGap (selected.getCharAt (lastUngappedPos))) {
\r
109 var startResiduePos = selected.findPosition (firstUngappedPos);
\r
110 var endResiduePos = selected.findPosition (lastUngappedPos);
\r
111 for (var acf, $acf = codonFrames.iterator (); $acf.hasNext () && ((acf = $acf.next ()) || true);) {
\r
112 var mappedSequence = targetIsNucleotide ? acf.getDnaForAaSeq (selected) : acf.getAaForDnaSeq (selected);
\r
113 if (mappedSequence != null) {
\r
114 for (var seq, $seq = mapTo.getAlignment ().getSequences ().iterator (); $seq.hasNext () && ((seq = $seq.next ()) || true);) {
\r
115 var mappedStartResidue = 0;
\r
116 var mappedEndResidue = 0;
\r
117 if (seq.getDatasetSequence () === mappedSequence) {
\r
118 var sr = jalview.util.MappingUtils.buildSearchResults (selected, startResiduePos, java.util.Collections.singleton (acf));
\r
119 for (var m, $m = sr.getResults ().iterator (); $m.hasNext () && ((m = $m.next ()) || true);) {
\r
120 mappedStartResidue = m.getStart ();
\r
121 mappedEndResidue = m.getEnd ();
\r
123 sr = jalview.util.MappingUtils.buildSearchResults (selected, endResiduePos, java.util.Collections.singleton (acf));
\r
124 for (var m, $m = sr.getResults ().iterator (); $m.hasNext () && ((m = $m.next ()) || true);) {
\r
125 mappedStartResidue = Math.min (mappedStartResidue, m.getStart ());
\r
126 mappedEndResidue = Math.max (mappedEndResidue, m.getEnd ());
\r
128 var mappedStartCol = seq.findIndex (mappedStartResidue) - 1;
\r
129 minStartCol = minStartCol == -1 ? mappedStartCol : Math.min (minStartCol, mappedStartCol);
\r
130 var mappedEndCol = seq.findIndex (mappedEndResidue) - 1;
\r
131 maxEndCol = maxEndCol == -1 ? mappedEndCol : Math.max (maxEndCol, mappedEndCol);
\r
132 mappedGroup.addSequence (seq, false);
\r
137 mappedGroup.setStartRes (minStartCol < 0 ? 0 : minStartCol);
\r
138 mappedGroup.setEndRes (maxEndCol < 0 ? 0 : maxEndCol);
\r
139 return mappedGroup;
\r
140 }, "jalview.datamodel.SequenceGroup,jalview.api.AlignViewportI,jalview.api.AlignViewportI");
\r
141 c$.mapOrderCommand = Clazz.defineMethod (c$, "mapOrderCommand",
\r
142 function (command, undo, mapTo, mappings) {
\r
143 var sortOrder = command.getSequenceOrder (undo);
\r
144 var mappedOrder = new java.util.ArrayList ();
\r
146 var mappingToNucleotide = mapTo.isNucleotide ();
\r
147 for (var seq, $seq = 0, $$seq = sortOrder; $seq < $$seq.length && ((seq = $$seq[$seq]) || true); $seq++) {
\r
148 for (var acf, $acf = mappings.iterator (); $acf.hasNext () && ((acf = $acf.next ()) || true);) {
\r
149 var mappedSeq = mappingToNucleotide ? acf.getDnaForAaSeq (seq) : acf.getAaForDnaSeq (seq);
\r
150 if (mappedSeq != null) {
\r
151 for (var seq2, $seq2 = mapTo.getSequences ().iterator (); $seq2.hasNext () && ((seq2 = $seq2.next ()) || true);) {
\r
152 if (seq2.getDatasetSequence () === mappedSeq) {
\r
153 mappedOrder.add (seq2);
\r
161 }if (j < mapTo.getHeight ()) {
\r
162 for (var seq, $seq = mapTo.getSequences ().iterator (); $seq.hasNext () && ((seq = $seq.next ()) || true);) {
\r
163 if (!mappedOrder.contains (seq)) {
\r
164 mappedOrder.add (seq);
\r
166 }var mappedOrderArray = mappedOrder.toArray ( new Array (mappedOrder.size ()));
\r
167 var oldOrder = mapTo.getSequencesArray ();
\r
168 jalview.analysis.AlignmentSorter.sortBy (mapTo, new jalview.datamodel.AlignmentOrder (mappedOrderArray));
\r
169 var result = new jalview.commands.OrderCommand (command.getDescription (), oldOrder, mapTo);
\r
171 }, "jalview.commands.OrderCommand,~B,jalview.datamodel.AlignmentI,java.util.Set");
\r
172 c$.mapColumnSelection = Clazz.defineMethod (c$, "mapColumnSelection",
\r
173 function (colsel, mapFrom, mapTo) {
\r
174 var targetIsNucleotide = mapTo.isNucleotide ();
\r
175 var protein = targetIsNucleotide ? mapFrom : mapTo;
\r
176 var codonFrames = protein.getAlignment ().getCodonFrames ();
\r
177 var mappedColumns = new jalview.datamodel.ColumnSelection ();
\r
178 if (colsel == null) {
\r
179 return mappedColumns;
\r
180 }var fromGapChar = mapFrom.getAlignment ().getGapCharacter ();
\r
181 for (var obj, $obj = colsel.getSelected ().iterator (); $obj.hasNext () && ((obj = $obj.next ()) || true);) {
\r
182 var col = (obj).intValue ();
\r
183 var mappedToMin = 2147483647;
\r
184 var mappedToMax = -2147483648;
\r
185 for (var fromSeq, $fromSeq = mapFrom.getAlignment ().getSequences ().iterator (); $fromSeq.hasNext () && ((fromSeq = $fromSeq.next ()) || true);) {
\r
186 if (fromSeq.getCharAt (col) == fromGapChar) {
\r
188 }var residuePos = fromSeq.findPosition (col);
\r
189 var sr = jalview.util.MappingUtils.buildSearchResults (fromSeq, residuePos, codonFrames);
\r
190 for (var m, $m = sr.getResults ().iterator (); $m.hasNext () && ((m = $m.next ()) || true);) {
\r
191 var mappedStartResidue = m.getStart ();
\r
192 var mappedEndResidue = m.getEnd ();
\r
193 var mappedSeq = m.getSequence ();
\r
194 for (var toSeq, $toSeq = mapTo.getAlignment ().getSequences ().iterator (); $toSeq.hasNext () && ((toSeq = $toSeq.next ()) || true);) {
\r
195 if (toSeq.getDatasetSequence () === mappedSeq) {
\r
196 var mappedStartCol = toSeq.findIndex (mappedStartResidue);
\r
197 var mappedEndCol = toSeq.findIndex (mappedEndResidue);
\r
198 mappedToMin = Math.min (mappedToMin, mappedStartCol);
\r
199 mappedToMax = Math.max (mappedToMax, mappedEndCol);
\r
204 for (var i = mappedToMin; i <= mappedToMax; i++) {
\r
205 mappedColumns.addElement (i - 1);
\r
208 return mappedColumns;
\r
209 }, "jalview.datamodel.ColumnSelection,jalview.api.AlignViewportI,jalview.api.AlignViewportI");
\r
210 c$.findCodonFor = Clazz.defineMethod (c$, "findCodonFor",
\r
211 function (seq, col, mappings) {
\r
212 var dsPos = seq.findPosition (col);
\r
213 for (var mapping, $mapping = mappings.iterator (); $mapping.hasNext () && ((mapping = $mapping.next ()) || true);) {
\r
214 if (mapping.involvesSequence (seq)) {
\r
215 return mapping.getMappedCodon (seq.getDatasetSequence (), dsPos);
\r
218 }, "jalview.datamodel.SequenceI,~N,java.util.Set");
\r
219 c$.flattenRanges = Clazz.defineMethod (c$, "flattenRanges",
\r
220 function (ranges) {
\r
222 for (var i = 0; i < ranges.length - 1; i += 2) {
\r
223 count += ranges[i + 1] - ranges[i] + 1;
\r
225 var result = Clazz.newIntArray (count, 0);
\r
227 for (var i = 0; i < ranges.length - 1; i += 2) {
\r
228 for (var j = ranges[i]; j <= ranges[i + 1]; j++) {
\r
234 c$.findMappingsForSequence = Clazz.defineMethod (c$, "findMappingsForSequence",
\r
235 function (sequence, mappings) {
\r
236 var result = new java.util.ArrayList ();
\r
237 if (sequence == null || mappings == null) {
\r
239 }for (var mapping, $mapping = mappings.iterator (); $mapping.hasNext () && ((mapping = $mapping.next ()) || true);) {
\r
240 if (mapping.involvesSequence (sequence)) {
\r
241 result.add (mapping);
\r
244 }, "jalview.datamodel.SequenceI,java.util.Set");
\r