JAL-1807 Bob's JalviewJS prototype first commit
[jalviewjs.git] / bin / jalview / analysis / AlignmentUtils.js
1 Clazz.declarePackage ("jalview.analysis");\r
2 Clazz.load (null, "jalview.analysis.AlignmentUtils", ["jalview.analysis.CodonComparator", "jalview.datamodel.AlignedCodonFrame", "$.Alignment", "$.AlignmentAnnotation", "$.DBRefEntry", "$.DBRefSource", "$.FeatureProperties", "$.SearchResults", "$.Sequence", "jalview.schemes.ResidueProperties", "jalview.util.DBRefUtils", "$.MapList", "$.MappingUtils", "java.lang.StringBuilder", "java.util.ArrayList", "$.Arrays", "$.HashMap", "$.HashSet", "$.LinkedHashMap", "$.LinkedHashSet", "$.TreeMap"], function () {\r
3 c$ = Clazz.declareType (jalview.analysis, "AlignmentUtils");\r
4 c$.expandContext = Clazz.defineMethod (c$, "expandContext", \r
5 function (core, flankSize) {\r
6 var sq =  new java.util.ArrayList ();\r
7 var maxoffset = 0;\r
8 for (var s, $s = core.getSequences ().iterator (); $s.hasNext () && ((s = $s.next ()) || true);) {\r
9 var newSeq = s.deriveSequence ();\r
10 var newSeqStart = newSeq.getStart () - 1;\r
11 if (newSeqStart > maxoffset && newSeq.getDatasetSequence ().getStart () < s.getStart ()) {\r
12 maxoffset = newSeqStart;\r
13 }sq.add (newSeq);\r
14 }\r
15 if (flankSize > -1) {\r
16 maxoffset = Math.min (maxoffset, flankSize);\r
17 }for (var s, $s = sq.iterator (); $s.hasNext () && ((s = $s.next ()) || true);) {\r
18 var ds = s;\r
19 while (ds.getDatasetSequence () != null) {\r
20 ds = ds.getDatasetSequence ();\r
21 }\r
22 var s_end = s.findPosition (s.getStart () + s.getLength ());\r
23 var ustream_ds = s.getStart () - ds.getStart ();\r
24 var dstream_ds = ds.getEnd () - s_end;\r
25 var offset = maxoffset - ustream_ds;\r
26 if (flankSize >= 0) {\r
27 if (flankSize < ustream_ds) {\r
28 offset = maxoffset - flankSize;\r
29 ustream_ds = flankSize;\r
30 }if (flankSize <= dstream_ds) {\r
31 dstream_ds = flankSize - 1;\r
32 }}var upstream =  String.instantialize (ds.getSequence (s.getStart () - 1 - ustream_ds, s.getStart () - 1)).toLowerCase ().toCharArray ();\r
33 var downstream =  String.instantialize (ds.getSequence (s_end - 1, s_end + dstream_ds)).toLowerCase ().toCharArray ();\r
34 var coreseq = s.getSequence ();\r
35 var nseq =  Clazz.newCharArray (offset + upstream.length + downstream.length + coreseq.length, '\0');\r
36 var c = core.getGapCharacter ();\r
37 var p = 0;\r
38 for (; p < offset; p++) {\r
39 nseq[p] = c;\r
40 }\r
41 System.arraycopy (upstream, 0, nseq, p, upstream.length);\r
42 System.arraycopy (coreseq, 0, nseq, p + upstream.length, coreseq.length);\r
43 System.arraycopy (downstream, 0, nseq, p + coreseq.length + upstream.length, downstream.length);\r
44 s.setSequence ( String.instantialize (nseq));\r
45 s.setStart (s.getStart () - ustream_ds);\r
46 s.setEnd (s_end + downstream.length);\r
47 }\r
48 var newAl =  new jalview.datamodel.Alignment (sq.toArray ( new Array (0)));\r
49 for (var s, $s = sq.iterator (); $s.hasNext () && ((s = $s.next ()) || true);) {\r
50 if (s.getAnnotation () != null) {\r
51 for (var aa, $aa = 0, $$aa = s.getAnnotation (); $aa < $$aa.length && ((aa = $$aa[$aa]) || true); $aa++) {\r
52 aa.adjustForAlignment ();\r
53 newAl.addAnnotation (aa);\r
54 }\r
55 }}\r
56 newAl.setDataset (core.getDataset ());\r
57 return newAl;\r
58 }, "jalview.datamodel.AlignmentI,~N");\r
59 c$.getSequenceIndex = Clazz.defineMethod (c$, "getSequenceIndex", \r
60 function (al, seq) {\r
61 var result = -1;\r
62 var pos = 0;\r
63 for (var alSeq, $alSeq = al.getSequences ().iterator (); $alSeq.hasNext () && ((alSeq = $alSeq.next ()) || true);) {\r
64 if (alSeq === seq) {\r
65 result = pos;\r
66 break;\r
67 }pos++;\r
68 }\r
69 return result;\r
70 }, "jalview.datamodel.AlignmentI,jalview.datamodel.SequenceI");\r
71 c$.getSequencesByName = Clazz.defineMethod (c$, "getSequencesByName", \r
72 function (al) {\r
73 var theMap =  new java.util.LinkedHashMap ();\r
74 for (var seq, $seq = al.getSequences ().iterator (); $seq.hasNext () && ((seq = $seq.next ()) || true);) {\r
75 var name = seq.getName ();\r
76 if (name != null) {\r
77 var seqs = theMap.get (name);\r
78 if (seqs == null) {\r
79 seqs =  new java.util.ArrayList ();\r
80 theMap.put (name, seqs);\r
81 }seqs.add (seq);\r
82 }}\r
83 return theMap;\r
84 }, "jalview.datamodel.AlignmentI");\r
85 c$.mapProteinToCdna = Clazz.defineMethod (c$, "mapProteinToCdna", \r
86 function (proteinAlignment, cdnaAlignment) {\r
87 if (proteinAlignment == null || cdnaAlignment == null) {\r
88 return false;\r
89 }var mappedDna =  new java.util.HashSet ();\r
90 var mappedProtein =  new java.util.HashSet ();\r
91 var mappingPerformed = jalview.analysis.AlignmentUtils.mapProteinToCdna (proteinAlignment, cdnaAlignment, mappedDna, mappedProtein, true);\r
92 mappingPerformed = new Boolean (mappingPerformed | jalview.analysis.AlignmentUtils.mapProteinToCdna (proteinAlignment, cdnaAlignment, mappedDna, mappedProtein, false)).valueOf ();\r
93 return mappingPerformed;\r
94 }, "jalview.datamodel.AlignmentI,jalview.datamodel.AlignmentI");\r
95 c$.mapProteinToCdna = Clazz.defineMethod (c$, "mapProteinToCdna", \r
96 function (proteinAlignment, cdnaAlignment, mappedDna, mappedProtein, xrefsOnly) {\r
97 var mappingPerformed = false;\r
98 var thisSeqs = proteinAlignment.getSequences ();\r
99 for (var aaSeq, $aaSeq = thisSeqs.iterator (); $aaSeq.hasNext () && ((aaSeq = $aaSeq.next ()) || true);) {\r
100 var proteinMapped = false;\r
101 var acf =  new jalview.datamodel.AlignedCodonFrame ();\r
102 for (var cdnaSeq, $cdnaSeq = cdnaAlignment.getSequences ().iterator (); $cdnaSeq.hasNext () && ((cdnaSeq = $cdnaSeq.next ()) || true);) {\r
103 if (xrefsOnly && !jalview.analysis.AlignmentUtils.haveCrossRef (aaSeq, cdnaSeq)) {\r
104 continue;\r
105 }if (!xrefsOnly && (mappedProtein.contains (aaSeq) || mappedDna.contains (cdnaSeq))) {\r
106 continue;\r
107 }if (!jalview.analysis.AlignmentUtils.mappingExists (proteinAlignment.getCodonFrames (), aaSeq.getDatasetSequence (), cdnaSeq.getDatasetSequence ())) {\r
108 var map = jalview.analysis.AlignmentUtils.mapProteinToCdna (aaSeq, cdnaSeq);\r
109 if (map != null) {\r
110 acf.addMap (cdnaSeq, aaSeq, map);\r
111 mappingPerformed = true;\r
112 proteinMapped = true;\r
113 mappedDna.add (cdnaSeq);\r
114 mappedProtein.add (aaSeq);\r
115 }}}\r
116 if (proteinMapped) {\r
117 proteinAlignment.addCodonFrame (acf);\r
118 }}\r
119 return mappingPerformed;\r
120 }, "jalview.datamodel.AlignmentI,jalview.datamodel.AlignmentI,java.util.Set,java.util.Set,~B");\r
121 c$.mappingExists = Clazz.defineMethod (c$, "mappingExists", \r
122 function (set, aaSeq, cdnaSeq) {\r
123 if (set != null) {\r
124 for (var acf, $acf = set.iterator (); $acf.hasNext () && ((acf = $acf.next ()) || true);) {\r
125 if (cdnaSeq === acf.getDnaForAaSeq (aaSeq)) {\r
126 return true;\r
127 }}\r
128 }return false;\r
129 }, "java.util.Set,jalview.datamodel.SequenceI,jalview.datamodel.SequenceI");\r
130 c$.mapProteinToCdna = Clazz.defineMethod (c$, "mapProteinToCdna", \r
131 function (proteinSeq, cdnaSeq) {\r
132 var proteinDataset = proteinSeq.getDatasetSequence ();\r
133 var aaSeqChars = proteinDataset != null ? proteinDataset.getSequence () : proteinSeq.getSequence ();\r
134 var cdnaDataset = cdnaSeq.getDatasetSequence ();\r
135 var cdnaSeqChars = cdnaDataset != null ? cdnaDataset.getSequence () : cdnaSeq.getSequence ();\r
136 if (aaSeqChars == null || cdnaSeqChars == null) {\r
137 return null;\r
138 }var mappedLength = 3 * aaSeqChars.length;\r
139 var cdnaLength = cdnaSeqChars.length;\r
140 var cdnaStart = 1;\r
141 var cdnaEnd = cdnaLength;\r
142 var proteinStart = 1;\r
143 var proteinEnd = aaSeqChars.length;\r
144 if (cdnaLength != mappedLength && cdnaLength > 2) {\r
145 var lastCodon = String.valueOf (cdnaSeqChars, cdnaLength - 3, 3).toUpperCase ();\r
146 for (var stop, $stop = jalview.schemes.ResidueProperties.STOP.iterator (); $stop.hasNext () && ((stop = $stop.next ()) || true);) {\r
147 if (lastCodon.equals (stop)) {\r
148 cdnaEnd -= 3;\r
149 cdnaLength -= 3;\r
150 break;\r
151 }}\r
152 }if (cdnaLength != mappedLength && cdnaLength > 2 && String.valueOf (cdnaSeqChars, 0, 3).toUpperCase ().equals (jalview.schemes.ResidueProperties.START)) {\r
153 cdnaStart += 3;\r
154 cdnaLength -= 3;\r
155 }if (cdnaLength != mappedLength) {\r
156 return null;\r
157 }if (!jalview.analysis.AlignmentUtils.translatesAs (cdnaSeqChars, cdnaStart - 1, aaSeqChars)) {\r
158 return null;\r
159 }var map =  new jalview.util.MapList ( Clazz.newIntArray (-1, [cdnaStart, cdnaEnd]),  Clazz.newIntArray (-1, [1, proteinEnd]), 3, 1);\r
160 return map;\r
161 }, "jalview.datamodel.SequenceI,jalview.datamodel.SequenceI");\r
162 c$.translatesAs = Clazz.defineMethod (c$, "translatesAs", \r
163 function (cdnaSeqChars, cdnaStart, aaSeqChars) {\r
164 var aaResidue = 0;\r
165 for (var i = cdnaStart; i < cdnaSeqChars.length - 2 && aaResidue < aaSeqChars.length; i += 3, aaResidue++) {\r
166 var codon = String.valueOf (cdnaSeqChars, i, 3);\r
167 var translated = jalview.schemes.ResidueProperties.codonTranslate (codon);\r
168 var aaRes = aaSeqChars[aaResidue];\r
169 if ((translated == null || "STOP".equals (translated)) && aaRes == 'X') {\r
170 continue;\r
171 }if (translated == null || !(aaRes == translated.charAt (0))) {\r
172 return false;\r
173 }}\r
174 return (aaResidue == aaSeqChars.length);\r
175 }, "~A,~N,~A");\r
176 c$.alignSequenceAs = Clazz.defineMethod (c$, "alignSequenceAs", \r
177 function (seq, al, gap, preserveMappedGaps, preserveUnmappedGaps) {\r
178 var mappings = al.getCodonFrame (seq);\r
179 if (mappings == null || mappings.isEmpty ()) {\r
180 return false;\r
181 }var alignFrom = null;\r
182 var mapping = null;\r
183 for (var mp, $mp = mappings.iterator (); $mp.hasNext () && ((mp = $mp.next ()) || true);) {\r
184 alignFrom = mp.findAlignedSequence (seq.getDatasetSequence (), al);\r
185 if (alignFrom != null) {\r
186 mapping = mp;\r
187 break;\r
188 }}\r
189 if (alignFrom == null) {\r
190 return false;\r
191 }jalview.analysis.AlignmentUtils.alignSequenceAs (seq, alignFrom, mapping, gap, al.getGapCharacter (), preserveMappedGaps, preserveUnmappedGaps);\r
192 return true;\r
193 }, "jalview.datamodel.SequenceI,jalview.datamodel.AlignmentI,~S,~B,~B");\r
194 c$.alignSequenceAs = Clazz.defineMethod (c$, "alignSequenceAs", \r
195 function (alignTo, alignFrom, mapping, myGap, sourceGap, preserveMappedGaps, preserveUnmappedGaps) {\r
196 var thisSeq = alignTo.getSequence ();\r
197 var thatAligned = alignFrom.getSequence ();\r
198 var thisAligned =  new StringBuilder (2 * thisSeq.length);\r
199 var thisSeqPos = 0;\r
200 var sourceDsPos = 0;\r
201 var basesWritten = 0;\r
202 var myGapChar = myGap.charAt (0);\r
203 var ratio = myGap.length;\r
204 var sourceGapMappedLength = 0;\r
205 var inExon = false;\r
206 for (var sourceChar, $sourceChar = 0, $$sourceChar = thatAligned; $sourceChar < $$sourceChar.length && ((sourceChar = $$sourceChar[$sourceChar]) || true); $sourceChar++) {\r
207 if (sourceChar == sourceGap) {\r
208 sourceGapMappedLength += ratio;\r
209 continue;\r
210 }sourceDsPos++;\r
211 var mappedPos = mapping.getMappedRegion (alignTo, alignFrom, sourceDsPos);\r
212 if (mappedPos == null) {\r
213 System.err.println ("Can't align: no codon mapping to residue " + sourceDsPos + "(" + sourceChar + ")");\r
214 return;\r
215 }var mappedCodonStart = mappedPos[0];\r
216 var mappedCodonEnd = mappedPos[mappedPos.length - 1];\r
217 var trailingCopiedGap =  new StringBuilder ();\r
218 var intronLength = 0;\r
219 while (basesWritten < mappedCodonEnd && thisSeqPos < thisSeq.length) {\r
220 var c = thisSeq[thisSeqPos++];\r
221 if (c != myGapChar) {\r
222 basesWritten++;\r
223 if (basesWritten < mappedCodonStart) {\r
224 if (preserveUnmappedGaps && trailingCopiedGap.length () > 0) {\r
225 thisAligned.append (trailingCopiedGap.toString ());\r
226 intronLength += trailingCopiedGap.length ();\r
227 trailingCopiedGap =  new StringBuilder ();\r
228 }intronLength++;\r
229 inExon = false;\r
230 } else {\r
231 var startOfCodon = basesWritten == mappedCodonStart;\r
232 var gapsToAdd = jalview.analysis.AlignmentUtils.calculateGapsToInsert (preserveMappedGaps, preserveUnmappedGaps, sourceGapMappedLength, inExon, trailingCopiedGap.length (), intronLength, startOfCodon);\r
233 for (var i = 0; i < gapsToAdd; i++) {\r
234 thisAligned.append (myGapChar);\r
235 }\r
236 sourceGapMappedLength = 0;\r
237 inExon = true;\r
238 }thisAligned.append (c);\r
239 trailingCopiedGap =  new StringBuilder ();\r
240 } else {\r
241 if (inExon && preserveMappedGaps) {\r
242 trailingCopiedGap.append (myGapChar);\r
243 } else if (!inExon && preserveUnmappedGaps) {\r
244 trailingCopiedGap.append (myGapChar);\r
245 }}}\r
246 }\r
247 while (thisSeqPos < thisSeq.length) {\r
248 var c = thisSeq[thisSeqPos++];\r
249 if (c != myGapChar || preserveUnmappedGaps) {\r
250 thisAligned.append (c);\r
251 }}\r
252 alignTo.setSequence ( String.instantialize (thisAligned));\r
253 }, "jalview.datamodel.SequenceI,jalview.datamodel.SequenceI,jalview.datamodel.AlignedCodonFrame,~S,~S,~B,~B");\r
254 c$.calculateGapsToInsert = Clazz.defineMethod (c$, "calculateGapsToInsert", \r
255 function (preserveMappedGaps, preserveUnmappedGaps, sourceGapMappedLength, inExon, trailingGapLength, intronLength, startOfCodon) {\r
256 var gapsToAdd = 0;\r
257 if (startOfCodon) {\r
258 if (inExon && !preserveMappedGaps) {\r
259 trailingGapLength = 0;\r
260 }if (!inExon && !(preserveMappedGaps && preserveUnmappedGaps)) {\r
261 trailingGapLength = 0;\r
262 }if (inExon) {\r
263 gapsToAdd = Math.max (sourceGapMappedLength, trailingGapLength);\r
264 } else {\r
265 if (intronLength + trailingGapLength <= sourceGapMappedLength) {\r
266 gapsToAdd = sourceGapMappedLength - intronLength;\r
267 } else {\r
268 gapsToAdd = Math.min (intronLength + trailingGapLength - sourceGapMappedLength, trailingGapLength);\r
269 }}} else {\r
270 if (!preserveMappedGaps) {\r
271 trailingGapLength = 0;\r
272 }gapsToAdd = Math.max (sourceGapMappedLength, trailingGapLength);\r
273 }return gapsToAdd;\r
274 }, "~B,~B,~N,~B,~N,~N,~B");\r
275 c$.getAlignedTranslation = Clazz.defineMethod (c$, "getAlignedTranslation", \r
276 function (sequences, gapCharacter, mappings) {\r
277 var alignedSeqs =  new java.util.ArrayList ();\r
278 for (var seq, $seq = sequences.iterator (); $seq.hasNext () && ((seq = $seq.next ()) || true);) {\r
279 var mapped = jalview.analysis.AlignmentUtils.getAlignedTranslation (seq, gapCharacter, mappings);\r
280 alignedSeqs.addAll (mapped);\r
281 }\r
282 return alignedSeqs;\r
283 }, "java.util.List,~S,java.util.Set");\r
284 c$.getAlignedTranslation = Clazz.defineMethod (c$, "getAlignedTranslation", \r
285 function (seq, gapCharacter, mappings) {\r
286 var result =  new java.util.ArrayList ();\r
287 for (var mapping, $mapping = mappings.iterator (); $mapping.hasNext () && ((mapping = $mapping.next ()) || true);) {\r
288 if (mapping.involvesSequence (seq)) {\r
289 var mapped = jalview.analysis.AlignmentUtils.getAlignedTranslation (seq, gapCharacter, mapping);\r
290 if (mapped != null) {\r
291 result.add (mapped);\r
292 }}}\r
293 return result;\r
294 }, "jalview.datamodel.SequenceI,~S,java.util.Set");\r
295 c$.getAlignedTranslation = Clazz.defineMethod (c$, "getAlignedTranslation", \r
296 function (seq, gapCharacter, mapping) {\r
297 var gap = String.valueOf (gapCharacter);\r
298 var toDna = false;\r
299 var fromRatio = 1;\r
300 var mapTo = mapping.getDnaForAaSeq (seq);\r
301 if (mapTo != null) {\r
302 toDna = true;\r
303 gap = String.valueOf ( Clazz.newCharArray (-1, [gapCharacter, gapCharacter, gapCharacter]));\r
304 } else {\r
305 mapTo = mapping.getAaForDnaSeq (seq);\r
306 fromRatio = 3;\r
307 }var newseq =  new StringBuilder (seq.getLength () * (toDna ? 3 : 1));\r
308 var residueNo = 0;\r
309 var phrase =  Clazz.newIntArray (fromRatio, 0);\r
310 var phraseOffset = 0;\r
311 var gapWidth = 0;\r
312 var first = true;\r
313 var alignedSeq =  new jalview.datamodel.Sequence ("", "");\r
314 for (var c, $c = 0, $$c = seq.getSequence (); $c < $$c.length && ((c = $$c[$c]) || true); $c++) {\r
315 if (c == gapCharacter) {\r
316 gapWidth++;\r
317 if (gapWidth >= fromRatio) {\r
318 newseq.append (gap);\r
319 gapWidth = 0;\r
320 }} else {\r
321 phrase[phraseOffset++] = residueNo + 1;\r
322 if (phraseOffset == fromRatio) {\r
323 var sr =  new jalview.datamodel.SearchResults ();\r
324 for (var pos, $pos = 0, $$pos = phrase; $pos < $$pos.length && ((pos = $$pos[$pos]) || true); $pos++) {\r
325 mapping.markMappedRegion (seq, pos, sr);\r
326 }\r
327 newseq.append (sr.toString ());\r
328 if (first) {\r
329 first = false;\r
330 var mappedTo = sr.getResultSequence (0);\r
331 alignedSeq.setName (mappedTo.getName ());\r
332 alignedSeq.setDescription (mappedTo.getDescription ());\r
333 alignedSeq.setDatasetSequence (mappedTo);\r
334 }phraseOffset = 0;\r
335 }residueNo++;\r
336 }}\r
337 alignedSeq.setSequence (newseq.toString ());\r
338 return alignedSeq;\r
339 }, "jalview.datamodel.SequenceI,~S,jalview.datamodel.AlignedCodonFrame");\r
340 c$.alignProteinAsDna = Clazz.defineMethod (c$, "alignProteinAsDna", \r
341 function (protein, dna) {\r
342 var mappings = protein.getCodonFrames ();\r
343 var alignedCodons =  new java.util.TreeMap ( new jalview.analysis.CodonComparator ());\r
344 for (var dnaSeq, $dnaSeq = dna.getSequences ().iterator (); $dnaSeq.hasNext () && ((dnaSeq = $dnaSeq.next ()) || true);) {\r
345 for (var mapping, $mapping = mappings.iterator (); $mapping.hasNext () && ((mapping = $mapping.next ()) || true);) {\r
346 var seqMap = mapping.getMappingForSequence (dnaSeq);\r
347 var prot = mapping.findAlignedSequence (dnaSeq.getDatasetSequence (), protein);\r
348 if (prot != null) {\r
349 jalview.analysis.AlignmentUtils.addCodonPositions (dnaSeq, prot, protein.getGapCharacter (), seqMap, alignedCodons);\r
350 }}\r
351 }\r
352 return jalview.analysis.AlignmentUtils.alignProteinAs (protein, alignedCodons);\r
353 }, "jalview.datamodel.AlignmentI,jalview.datamodel.AlignmentI");\r
354 c$.alignProteinAs = Clazz.defineMethod (c$, "alignProteinAs", \r
355 function (protein, alignedCodons) {\r
356 var alignedWidth = alignedCodons.size ();\r
357 var gaps =  Clazz.newCharArray (alignedWidth, '\0');\r
358 java.util.Arrays.fill (gaps, protein.getGapCharacter ());\r
359 var allGaps = String.valueOf (gaps);\r
360 for (var seq, $seq = protein.getSequences ().iterator (); $seq.hasNext () && ((seq = $seq.next ()) || true);) {\r
361 seq.setSequence (allGaps);\r
362 }\r
363 var column = 0;\r
364 for (var codon, $codon = alignedCodons.keySet ().iterator (); $codon.hasNext () && ((codon = $codon.next ()) || true);) {\r
365 var columnResidues = alignedCodons.get (codon);\r
366 for (var entry, $entry = columnResidues.entrySet ().iterator (); $entry.hasNext () && ((entry = $entry.next ()) || true);) {\r
367 entry.getKey ().getSequence ()[column] = entry.getValue ().charAt (0);\r
368 }\r
369 column++;\r
370 }\r
371 return 0;\r
372 }, "jalview.datamodel.AlignmentI,java.util.Map");\r
373 c$.addCodonPositions = Clazz.defineMethod (c$, "addCodonPositions", \r
374 function (dna, protein, gapChar, seqMap, alignedCodons) {\r
375 var codons = seqMap.getCodonIterator (dna, gapChar);\r
376 while (codons.hasNext ()) {\r
377 var codon = codons.next ();\r
378 var seqProduct = alignedCodons.get (codon);\r
379 if (seqProduct == null) {\r
380 seqProduct =  new java.util.HashMap ();\r
381 alignedCodons.put (codon, seqProduct);\r
382 }seqProduct.put (protein, codon.product);\r
383 }\r
384 }, "jalview.datamodel.SequenceI,jalview.datamodel.SequenceI,~S,jalview.datamodel.Mapping,java.util.Map");\r
385 c$.isMappable = Clazz.defineMethod (c$, "isMappable", \r
386 function (al1, al2) {\r
387 if (al1.isNucleotide () == al2.isNucleotide ()) {\r
388 return false;\r
389 }var dna = al1.isNucleotide () ? al1 : al2;\r
390 var protein = dna === al1 ? al2 : al1;\r
391 var mappings = protein.getCodonFrames ();\r
392 for (var dnaSeq, $dnaSeq = dna.getSequences ().iterator (); $dnaSeq.hasNext () && ((dnaSeq = $dnaSeq.next ()) || true);) {\r
393 for (var proteinSeq, $proteinSeq = protein.getSequences ().iterator (); $proteinSeq.hasNext () && ((proteinSeq = $proteinSeq.next ()) || true);) {\r
394 if (jalview.analysis.AlignmentUtils.isMappable (dnaSeq, proteinSeq, mappings)) {\r
395 return true;\r
396 }}\r
397 }\r
398 return false;\r
399 }, "jalview.datamodel.AlignmentI,jalview.datamodel.AlignmentI");\r
400 c$.isMappable = Clazz.defineMethod (c$, "isMappable", \r
401 function (dnaSeq, proteinSeq, mappings) {\r
402 var dnaDs = dnaSeq.getDatasetSequence () == null ? dnaSeq : dnaSeq.getDatasetSequence ();\r
403 var proteinDs = proteinSeq.getDatasetSequence () == null ? proteinSeq : proteinSeq.getDatasetSequence ();\r
404 for (var mapping, $mapping = mappings.iterator (); $mapping.hasNext () && ((mapping = $mapping.next ()) || true);) {\r
405 if (proteinDs === mapping.getAaForDnaSeq (dnaDs)) {\r
406 return true;\r
407 }}\r
408 return jalview.analysis.AlignmentUtils.mapProteinToCdna (proteinDs, dnaDs) != null;\r
409 }, "jalview.datamodel.SequenceI,jalview.datamodel.SequenceI,java.util.Set");\r
410 c$.findAddableReferenceAnnotations = Clazz.defineMethod (c$, "findAddableReferenceAnnotations", \r
411 function (sequenceScope, labelForCalcId, candidates, al) {\r
412 if (sequenceScope == null) {\r
413 return;\r
414 }for (var seq, $seq = sequenceScope.iterator (); $seq.hasNext () && ((seq = $seq.next ()) || true);) {\r
415 var dataset = seq.getDatasetSequence ();\r
416 if (dataset == null) {\r
417 continue;\r
418 }var datasetAnnotations = dataset.getAnnotation ();\r
419 if (datasetAnnotations == null) {\r
420 continue;\r
421 }var result =  new java.util.ArrayList ();\r
422 for (var dsann, $dsann = 0, $$dsann = datasetAnnotations; $dsann < $$dsann.length && ((dsann = $$dsann[$dsann]) || true); $dsann++) {\r
423 var matchedAlignmentAnnotations = al.findAnnotations (seq, dsann.getCalcId (), dsann.label);\r
424 if (!matchedAlignmentAnnotations.iterator ().hasNext ()) {\r
425 result.add (dsann);\r
426 if (labelForCalcId != null) {\r
427 labelForCalcId.put (dsann.getCalcId (), dsann.label);\r
428 }}}\r
429 if (!result.isEmpty ()) {\r
430 candidates.put (seq, result);\r
431 }}\r
432 }, "java.util.List,java.util.Map,java.util.Map,jalview.datamodel.AlignmentI");\r
433 c$.addReferenceAnnotations = Clazz.defineMethod (c$, "addReferenceAnnotations", \r
434 function (annotations, alignment, selectionGroup) {\r
435 for (var seq, $seq = annotations.keySet ().iterator (); $seq.hasNext () && ((seq = $seq.next ()) || true);) {\r
436 for (var ann, $ann = annotations.get (seq).iterator (); $ann.hasNext () && ((ann = $ann.next ()) || true);) {\r
437 var copyAnn =  new jalview.datamodel.AlignmentAnnotation (ann);\r
438 var startRes = 0;\r
439 var endRes = ann.annotations.length;\r
440 if (selectionGroup != null) {\r
441 startRes = selectionGroup.getStartRes ();\r
442 endRes = selectionGroup.getEndRes ();\r
443 }copyAnn.restrict (startRes, endRes);\r
444 if (!seq.hasAnnotation (ann)) {\r
445 seq.addAlignmentAnnotation (copyAnn);\r
446 }copyAnn.adjustForAlignment ();\r
447 alignment.addAnnotation (copyAnn);\r
448 copyAnn.visible = true;\r
449 }\r
450 }\r
451 }, "java.util.Map,jalview.datamodel.AlignmentI,jalview.datamodel.SequenceGroup");\r
452 c$.showOrHideSequenceAnnotations = Clazz.defineMethod (c$, "showOrHideSequenceAnnotations", \r
453 function (al, types, forSequences, anyType, doShow) {\r
454 for (var aa, $aa = 0, $$aa = al.getAlignmentAnnotation (); $aa < $$aa.length && ((aa = $$aa[$aa]) || true); $aa++) {\r
455 if (anyType || types.contains (aa.label)) {\r
456 if ((aa.sequenceRef != null) && (forSequences == null || forSequences.contains (aa.sequenceRef))) {\r
457 aa.visible = doShow;\r
458 }}}\r
459 }, "jalview.datamodel.AlignmentI,java.util.Collection,java.util.List,~B,~B");\r
460 c$.haveCrossRef = Clazz.defineMethod (c$, "haveCrossRef", \r
461 function (seq1, seq2) {\r
462 return jalview.analysis.AlignmentUtils.hasCrossRef (seq1, seq2) || jalview.analysis.AlignmentUtils.hasCrossRef (seq2, seq1);\r
463 }, "jalview.datamodel.SequenceI,jalview.datamodel.SequenceI");\r
464 c$.hasCrossRef = Clazz.defineMethod (c$, "hasCrossRef", \r
465 function (seq1, seq2) {\r
466 if (seq1 == null || seq2 == null) {\r
467 return false;\r
468 }var name = seq2.getName ();\r
469 var xrefs = seq1.getDBRef ();\r
470 if (xrefs != null) {\r
471 for (var xref, $xref = 0, $$xref = xrefs; $xref < $$xref.length && ((xref = $$xref[$xref]) || true); $xref++) {\r
472 var xrefName = xref.getSource () + "|" + xref.getAccessionId ();\r
473 if (xrefName.equalsIgnoreCase (name)) {\r
474 return true;\r
475 }}\r
476 }return false;\r
477 }, "jalview.datamodel.SequenceI,jalview.datamodel.SequenceI");\r
478 c$.makeExonAlignment = Clazz.defineMethod (c$, "makeExonAlignment", \r
479 function (dna, mappings) {\r
480 var newMappings =  new java.util.LinkedHashSet ();\r
481 var exonSequences =  new java.util.ArrayList ();\r
482 for (var dnaSeq, $dnaSeq = 0, $$dnaSeq = dna; $dnaSeq < $$dnaSeq.length && ((dnaSeq = $$dnaSeq[$dnaSeq]) || true); $dnaSeq++) {\r
483 var ds = dnaSeq.getDatasetSequence ();\r
484 var seqMappings = jalview.util.MappingUtils.findMappingsForSequence (ds, mappings);\r
485 for (var acf, $acf = seqMappings.iterator (); $acf.hasNext () && ((acf = $acf.next ()) || true);) {\r
486 var newMapping =  new jalview.datamodel.AlignedCodonFrame ();\r
487 var mappedExons = jalview.analysis.AlignmentUtils.makeExonSequences (ds, acf, newMapping);\r
488 if (!mappedExons.isEmpty ()) {\r
489 exonSequences.addAll (mappedExons);\r
490 newMappings.add (newMapping);\r
491 }}\r
492 }\r
493 var al =  new jalview.datamodel.Alignment (exonSequences.toArray ( new Array (exonSequences.size ())));\r
494 al.setDataset (null);\r
495 mappings.clear ();\r
496 mappings.addAll (newMappings);\r
497 return al;\r
498 }, "~A,java.util.Set");\r
499 c$.makeExonSequences = Clazz.defineMethod (c$, "makeExonSequences", \r
500 function (dnaSeq, mapping, newMapping) {\r
501 var exonSequences =  new java.util.ArrayList ();\r
502 var seqMappings = mapping.getMappingsForSequence (dnaSeq);\r
503 var dna = dnaSeq.getSequence ();\r
504 for (var seqMapping, $seqMapping = seqMappings.iterator (); $seqMapping.hasNext () && ((seqMapping = $seqMapping.next ()) || true);) {\r
505 var newSequence =  new StringBuilder (dnaSeq.getLength ());\r
506 var dnaExonRanges = seqMapping.getMap ().getFromRanges ();\r
507 for (var range, $range = dnaExonRanges.iterator (); $range.hasNext () && ((range = $range.next ()) || true);) {\r
508 for (var pos = range[0]; pos <= range[1]; pos++) {\r
509 newSequence.append (dna[pos - 1]);\r
510 }\r
511 }\r
512 var exon =  new jalview.datamodel.Sequence (dnaSeq.getName (), newSequence.toString ());\r
513 var cdsAccId = jalview.datamodel.FeatureProperties.getCodingFeature (jalview.datamodel.DBRefSource.EMBL);\r
514 var cdsRefs = jalview.util.DBRefUtils.selectRefs (seqMapping.getTo ().getDBRef (), jalview.datamodel.DBRefSource.CODINGDBS);\r
515 if (cdsRefs != null) {\r
516 for (var cdsRef, $cdsRef = 0, $$cdsRef = cdsRefs; $cdsRef < $$cdsRef.length && ((cdsRef = $$cdsRef[$cdsRef]) || true); $cdsRef++) {\r
517 exon.addDBRef ( new jalview.datamodel.DBRefEntry (cdsRef));\r
518 cdsAccId = cdsRef.getAccessionId ();\r
519 }\r
520 }exon.setName (exon.getName () + "|" + cdsAccId);\r
521 exon.createDatasetSequence ();\r
522 var exonRange =  new java.util.ArrayList ();\r
523 exonRange.add ( Clazz.newIntArray (-1, [1, newSequence.length ()]));\r
524 var map =  new jalview.util.MapList (exonRange, seqMapping.getMap ().getToRanges (), 3, 1);\r
525 newMapping.addMap (exon.getDatasetSequence (), seqMapping.getTo (), map);\r
526 var cdsToDnaMap =  new jalview.util.MapList (dnaExonRanges, exonRange, 1, 1);\r
527 newMapping.addMap (dnaSeq, exon.getDatasetSequence (), cdsToDnaMap);\r
528 exonSequences.add (exon);\r
529 }\r
530 return exonSequences;\r
531 }, "jalview.datamodel.SequenceI,jalview.datamodel.AlignedCodonFrame,jalview.datamodel.AlignedCodonFrame");\r
532 });\r