JAL-1807 Bob's JalviewJS prototype first commit
[jalviewjs.git] / site / j2s / jalview / datamodel / Alignment.js
1 Clazz.declarePackage ("jalview.datamodel");\r
2 Clazz.load (["jalview.datamodel.AlignmentI", "$.HiddenSequences", "java.util.ArrayList", "$.Collections", "$.LinkedHashSet"], "jalview.datamodel.Alignment", ["jalview.analysis.AlignmentUtils", "jalview.datamodel.AlignmentAnnotation", "$.CigarArray", "$.SeqCigar", "$.Sequence", "jalview.util.Comparison", "$.MessageManager", "java.lang.Error", "java.util.HashSet", "$.Hashtable", "$.Vector"], function () {\r
3 c$ = Clazz.decorateAsClass (function () {\r
4 this.dataset = null;\r
5 this.sequences = null;\r
6 this.groups = null;\r
7 this.gapCharacter = '-';\r
8 this.type = 1;\r
9 this.$hasRNAStructure = false;\r
10 this.annotations = null;\r
11 this.hiddenSequences = null;\r
12 this.alignmentProperties = null;\r
13 this.codonFrameList = null;\r
14 this.alignmentRefs = 0;\r
15 this.seqrep = null;\r
16 Clazz.instantialize (this, arguments);\r
17 }, jalview.datamodel, "Alignment", null, jalview.datamodel.AlignmentI);\r
18 Clazz.prepareFields (c$, function () {\r
19 this.groups = java.util.Collections.synchronizedList ( new java.util.ArrayList ());\r
20 this.hiddenSequences =  new jalview.datamodel.HiddenSequences (this);\r
21 this.codonFrameList =  new java.util.LinkedHashSet ();\r
22 });\r
23 Clazz.defineMethod (c$, "initAlignment", \r
24  function (seqs) {\r
25 var i = 0;\r
26 if (jalview.util.Comparison.isNucleotide (seqs)) {\r
27 this.type = 1;\r
28 } else {\r
29 this.type = 0;\r
30 }this.sequences = java.util.Collections.synchronizedList ( new java.util.ArrayList ());\r
31 for (i = 0; i < seqs.length; i++) {\r
32 this.sequences.add (seqs[i]);\r
33 }\r
34 }, "~A");\r
35 Clazz.makeConstructor (c$, \r
36 function (al) {\r
37 var seqs = al.getSequencesArray ();\r
38 for (var i = 0; i < seqs.length; i++) {\r
39 seqs[i] =  new jalview.datamodel.Sequence (seqs[i]);\r
40 }\r
41 this.codonFrameList = (al).codonFrameList;\r
42 this.initAlignment (seqs);\r
43 }, "jalview.datamodel.AlignmentI");\r
44 Clazz.makeConstructor (c$, \r
45 function (seqs) {\r
46 this.initAlignment (seqs);\r
47 }, "~A");\r
48 c$.createAlignment = Clazz.defineMethod (c$, "createAlignment", \r
49 function (compactAlignment) {\r
50 throw  new Error (jalview.util.MessageManager.getString ("error.alignment_cigararray_not_implemented"));\r
51 }, "jalview.datamodel.CigarArray");\r
52 Clazz.defineMethod (c$, "getSequences", \r
53 function () {\r
54 return this.sequences;\r
55 });\r
56 Clazz.defineMethod (c$, "getSequences", \r
57 function (hiddenReps) {\r
58 return this.sequences;\r
59 }, "java.util.Map");\r
60 Clazz.defineMethod (c$, "getSequencesArray", \r
61 function () {\r
62 if (this.sequences == null) {\r
63 return null;\r
64 }{\r
65 return this.sequences.toArray ( new Array (this.sequences.size ()));\r
66 }});\r
67 Clazz.overrideMethod (c$, "getSequencesByName", \r
68 function () {\r
69 return jalview.analysis.AlignmentUtils.getSequencesByName (this);\r
70 });\r
71 Clazz.overrideMethod (c$, "getSequenceAt", \r
72 function (i) {\r
73 {\r
74 if (i > -1 && i < this.sequences.size ()) {\r
75 return this.sequences.get (i);\r
76 }}return null;\r
77 }, "~N");\r
78 Clazz.overrideMethod (c$, "addSequence", \r
79 function (snew) {\r
80 if (this.dataset != null) {\r
81 if (snew.getDatasetSequence () != null) {\r
82 this.getDataset ().addSequence (snew.getDatasetSequence ());\r
83 } else {\r
84 var adding = snew.deriveSequence ();\r
85 this.getDataset ().addSequence (adding.getDatasetSequence ());\r
86 snew = adding;\r
87 }}if (this.sequences == null) {\r
88 this.initAlignment ( Clazz.newArray (-1, [snew]));\r
89 } else {\r
90 {\r
91 this.sequences.add (snew);\r
92 }}if (this.hiddenSequences != null) {\r
93 this.hiddenSequences.adjustHeightSequenceAdded ();\r
94 }}, "jalview.datamodel.SequenceI");\r
95 Clazz.overrideMethod (c$, "setSequenceAt", \r
96 function (i, snew) {\r
97 {\r
98 this.deleteSequence (i);\r
99 this.sequences.set (i, snew);\r
100 }}, "~N,jalview.datamodel.SequenceI");\r
101 Clazz.defineMethod (c$, "getGroups", \r
102 function () {\r
103 return this.groups;\r
104 });\r
105 Clazz.overrideMethod (c$, "finalize", \r
106 function () {\r
107 if (this.getDataset () != null) {\r
108 this.getDataset ().removeAlignmentRef ();\r
109 }this.dataset = null;\r
110 this.sequences = null;\r
111 this.groups = null;\r
112 this.annotations = null;\r
113 this.hiddenSequences = null;\r
114 });\r
115 Clazz.defineMethod (c$, "removeAlignmentRef", \r
116  function () {\r
117 if (--this.alignmentRefs == 0) {\r
118 this.finalize ();\r
119 }});\r
120 Clazz.defineMethod (c$, "deleteSequence", \r
121 function (s) {\r
122 this.deleteSequence (this.findIndex (s));\r
123 }, "jalview.datamodel.SequenceI");\r
124 Clazz.defineMethod (c$, "deleteSequence", \r
125 function (i) {\r
126 if (i > -1 && i < this.getHeight ()) {\r
127 {\r
128 this.sequences.remove (i);\r
129 this.hiddenSequences.adjustHeightSequenceDeleted (i);\r
130 }}}, "~N");\r
131 Clazz.overrideMethod (c$, "findGroup", \r
132 function (s) {\r
133 {\r
134 for (var i = 0; i < this.groups.size (); i++) {\r
135 var sg = this.groups.get (i);\r
136 if (sg.getSequences (null).contains (s)) {\r
137 return sg;\r
138 }}\r
139 }return null;\r
140 }, "jalview.datamodel.SequenceI");\r
141 Clazz.overrideMethod (c$, "findAllGroups", \r
142 function (s) {\r
143 var temp =  new java.util.ArrayList ();\r
144 {\r
145 var gSize = this.groups.size ();\r
146 for (var i = 0; i < gSize; i++) {\r
147 var sg = this.groups.get (i);\r
148 if (sg == null || sg.getSequences () == null) {\r
149 this.deleteGroup (sg);\r
150 gSize--;\r
151 continue;\r
152 }if (sg.getSequences ().contains (s)) {\r
153 temp.add (sg);\r
154 }}\r
155 }var ret =  new Array (temp.size ());\r
156 return temp.toArray (ret);\r
157 }, "jalview.datamodel.SequenceI");\r
158 Clazz.overrideMethod (c$, "addGroup", \r
159 function (sg) {\r
160 {\r
161 if (!this.groups.contains (sg)) {\r
162 if (this.hiddenSequences.getSize () > 0) {\r
163 var i;\r
164 var iSize = sg.getSize ();\r
165 for (i = 0; i < iSize; i++) {\r
166 if (!this.sequences.contains (sg.getSequenceAt (i))) {\r
167 sg.deleteSequence (sg.getSequenceAt (i), false);\r
168 iSize--;\r
169 i--;\r
170 }}\r
171 if (sg.getSize () < 1) {\r
172 return;\r
173 }}sg.setContext (this);\r
174 this.groups.add (sg);\r
175 }}}, "jalview.datamodel.SequenceGroup");\r
176 Clazz.defineMethod (c$, "removeAnnotationForGroup", \r
177  function (gp) {\r
178 if (this.annotations == null || this.annotations.length == 0) {\r
179 return;\r
180 }var t;\r
181 var todelete =  new Array (this.annotations.length);\r
182 var tokeep =  new Array (this.annotations.length);\r
183 var i;\r
184 var p;\r
185 var k;\r
186 if (gp == null) {\r
187 for (i = 0, p = 0, k = 0; i < this.annotations.length; i++) {\r
188 if (this.annotations[i].groupRef != null) {\r
189 todelete[p++] = this.annotations[i];\r
190 } else {\r
191 tokeep[k++] = this.annotations[i];\r
192 }}\r
193 } else {\r
194 for (i = 0, p = 0, k = 0; i < this.annotations.length; i++) {\r
195 if (this.annotations[i].groupRef === gp) {\r
196 todelete[p++] = this.annotations[i];\r
197 } else {\r
198 tokeep[k++] = this.annotations[i];\r
199 }}\r
200 }if (p > 0) {\r
201 for (i = 0; i < p; i++) {\r
202 this.unhookAnnotation (todelete[i]);\r
203 todelete[i] = null;\r
204 }\r
205 t =  new Array (k);\r
206 for (i = 0; i < k; i++) {\r
207 t[i] = tokeep[i];\r
208 }\r
209 this.annotations = t;\r
210 }}, "jalview.datamodel.SequenceGroup");\r
211 Clazz.overrideMethod (c$, "deleteAllGroups", \r
212 function () {\r
213 {\r
214 if (this.annotations != null) {\r
215 this.removeAnnotationForGroup (null);\r
216 }for (var sg, $sg = this.groups.iterator (); $sg.hasNext () && ((sg = $sg.next ()) || true);) {\r
217 sg.setContext (null);\r
218 }\r
219 this.groups.clear ();\r
220 }});\r
221 Clazz.overrideMethod (c$, "deleteGroup", \r
222 function (g) {\r
223 {\r
224 if (this.groups.contains (g)) {\r
225 this.removeAnnotationForGroup (g);\r
226 this.groups.remove (g);\r
227 g.setContext (null);\r
228 }}}, "jalview.datamodel.SequenceGroup");\r
229 Clazz.defineMethod (c$, "findName", \r
230 function (name) {\r
231 return this.findName (name, false);\r
232 }, "~S");\r
233 Clazz.defineMethod (c$, "findName", \r
234 function (token, b) {\r
235 return this.findName (null, token, b);\r
236 }, "~S,~B");\r
237 Clazz.defineMethod (c$, "findName", \r
238 function (startAfter, token, b) {\r
239 var i = 0;\r
240 var sq = null;\r
241 var sqname = null;\r
242 if (startAfter != null) {\r
243 var matched = false;\r
244 while (i < this.sequences.size ()) {\r
245 if (this.getSequenceAt (i++) === startAfter) {\r
246 matched = true;\r
247 break;\r
248 }}\r
249 if (!matched) {\r
250 i = 0;\r
251 }}while (i < this.sequences.size ()) {\r
252 sq = this.getSequenceAt (i);\r
253 sqname = sq.getName ();\r
254 if (sqname.equals (token) || (b && (sqname.equalsIgnoreCase (token)))) {\r
255 return this.getSequenceAt (i);\r
256 }i++;\r
257 }\r
258 return null;\r
259 }, "jalview.datamodel.SequenceI,~S,~B");\r
260 Clazz.overrideMethod (c$, "findSequenceMatch", \r
261 function (name) {\r
262 var matches =  new java.util.Vector ();\r
263 var i = 0;\r
264 while (i < this.sequences.size ()) {\r
265 if (this.getSequenceAt (i).getName ().equals (name)) {\r
266 matches.addElement (this.getSequenceAt (i));\r
267 }i++;\r
268 }\r
269 var result =  new Array (matches.size ());\r
270 for (i = 0; i < result.length; i++) {\r
271 result[i] = matches.elementAt (i);\r
272 }\r
273 return result;\r
274 }, "~S");\r
275 Clazz.defineMethod (c$, "findIndex", \r
276 function (s) {\r
277 var i = 0;\r
278 while (i < this.sequences.size ()) {\r
279 if (s === this.getSequenceAt (i)) {\r
280 return i;\r
281 }i++;\r
282 }\r
283 return -1;\r
284 }, "jalview.datamodel.SequenceI");\r
285 Clazz.defineMethod (c$, "findIndex", \r
286 function (results) {\r
287 var i = 0;\r
288 while (i < this.sequences.size ()) {\r
289 if (results.involvesSequence (this.getSequenceAt (i))) {\r
290 return i;\r
291 }i++;\r
292 }\r
293 return -1;\r
294 }, "jalview.datamodel.SearchResults");\r
295 Clazz.overrideMethod (c$, "getHeight", \r
296 function () {\r
297 return this.sequences.size ();\r
298 });\r
299 Clazz.overrideMethod (c$, "getWidth", \r
300 function () {\r
301 var maxLength = -1;\r
302 for (var i = 0; i < this.sequences.size (); i++) {\r
303 if (this.getSequenceAt (i).getLength () > maxLength) {\r
304 maxLength = this.getSequenceAt (i).getLength ();\r
305 }}\r
306 return maxLength;\r
307 });\r
308 Clazz.overrideMethod (c$, "setGapCharacter", \r
309 function (gc) {\r
310 this.gapCharacter = gc;\r
311 {\r
312 for (var seq, $seq = this.sequences.iterator (); $seq.hasNext () && ((seq = $seq.next ()) || true);) {\r
313 seq.setSequence (seq.getSequenceAsString ().$replace ('.', gc).$replace ('-', gc).$replace (' ', gc));\r
314 }\r
315 }}, "~S");\r
316 Clazz.defineMethod (c$, "getGapCharacter", \r
317 function () {\r
318 return this.gapCharacter;\r
319 });\r
320 Clazz.defineMethod (c$, "isAligned", \r
321 function () {\r
322 return this.isAligned (false);\r
323 });\r
324 Clazz.defineMethod (c$, "isAligned", \r
325 function (includeHidden) {\r
326 var width = this.getWidth ();\r
327 if (this.hiddenSequences == null || this.hiddenSequences.getSize () == 0) {\r
328 includeHidden = true;\r
329 }for (var i = 0; i < this.sequences.size (); i++) {\r
330 if (includeHidden || !this.hiddenSequences.isHidden (this.getSequenceAt (i))) {\r
331 if (this.getSequenceAt (i).getLength () != width) {\r
332 return false;\r
333 }}}\r
334 return true;\r
335 }, "~B");\r
336 Clazz.overrideMethod (c$, "deleteAllAnnotations", \r
337 function (includingAutoCalculated) {\r
338 var result = false;\r
339 for (var alan, $alan = 0, $$alan = this.getAlignmentAnnotation (); $alan < $$alan.length && ((alan = $$alan[$alan]) || true); $alan++) {\r
340 if (!alan.autoCalculated || includingAutoCalculated) {\r
341 this.deleteAnnotation (alan);\r
342 result = true;\r
343 }}\r
344 return result;\r
345 }, "~B");\r
346 Clazz.defineMethod (c$, "deleteAnnotation", \r
347 function (aa) {\r
348 return this.deleteAnnotation (aa, true);\r
349 }, "jalview.datamodel.AlignmentAnnotation");\r
350 Clazz.defineMethod (c$, "deleteAnnotation", \r
351 function (aa, unhook) {\r
352 var aSize = 1;\r
353 if (this.annotations != null) {\r
354 aSize = this.annotations.length;\r
355 }if (aSize < 1) {\r
356 return false;\r
357 }var temp =  new Array (aSize - 1);\r
358 var swap = false;\r
359 var tIndex = 0;\r
360 for (var i = 0; i < aSize; i++) {\r
361 if (this.annotations[i] === aa) {\r
362 swap = true;\r
363 continue;\r
364 }if (tIndex < temp.length) {\r
365 temp[tIndex++] = this.annotations[i];\r
366 }}\r
367 if (swap) {\r
368 this.annotations = temp;\r
369 if (unhook) {\r
370 this.unhookAnnotation (aa);\r
371 }}return swap;\r
372 }, "jalview.datamodel.AlignmentAnnotation,~B");\r
373 Clazz.defineMethod (c$, "unhookAnnotation", \r
374  function (aa) {\r
375 if (aa.sequenceRef != null) {\r
376 aa.sequenceRef.removeAlignmentAnnotation (aa);\r
377 }if (aa.groupRef != null) {\r
378 aa.groupRef = null;\r
379 }}, "jalview.datamodel.AlignmentAnnotation");\r
380 Clazz.defineMethod (c$, "addAnnotation", \r
381 function (aa) {\r
382 this.addAnnotation (aa, -1);\r
383 }, "jalview.datamodel.AlignmentAnnotation");\r
384 Clazz.defineMethod (c$, "addAnnotation", \r
385 function (aa, pos) {\r
386 if (aa.getRNAStruc () != null) {\r
387 this.$hasRNAStructure = true;\r
388 }var aSize = 1;\r
389 if (this.annotations != null) {\r
390 aSize = this.annotations.length + 1;\r
391 }var temp =  new Array (aSize);\r
392 var i = 0;\r
393 if (pos == -1 || pos >= aSize) {\r
394 temp[aSize - 1] = aa;\r
395 } else {\r
396 temp[pos] = aa;\r
397 }if (aSize > 1) {\r
398 var p = 0;\r
399 for (i = 0; i < (aSize - 1); i++, p++) {\r
400 if (p == pos) {\r
401 p++;\r
402 }if (p < temp.length) {\r
403 temp[p] = this.annotations[i];\r
404 }}\r
405 }this.annotations = temp;\r
406 }, "jalview.datamodel.AlignmentAnnotation,~N");\r
407 Clazz.overrideMethod (c$, "setAnnotationIndex", \r
408 function (aa, index) {\r
409 if (aa == null || this.annotations == null || this.annotations.length - 1 < index) {\r
410 return;\r
411 }var aSize = this.annotations.length;\r
412 var temp =  new Array (aSize);\r
413 temp[index] = aa;\r
414 for (var i = 0; i < aSize; i++) {\r
415 if (i == index) {\r
416 continue;\r
417 }if (i < index) {\r
418 temp[i] = this.annotations[i];\r
419 } else {\r
420 temp[i] = this.annotations[i - 1];\r
421 }}\r
422 this.annotations = temp;\r
423 }, "jalview.datamodel.AlignmentAnnotation,~N");\r
424 Clazz.defineMethod (c$, "getAlignmentAnnotation", \r
425 function () {\r
426 return this.annotations;\r
427 });\r
428 Clazz.overrideMethod (c$, "setNucleotide", \r
429 function (b) {\r
430 if (b) {\r
431 this.type = 1;\r
432 } else {\r
433 this.type = 0;\r
434 }}, "~B");\r
435 Clazz.defineMethod (c$, "isNucleotide", \r
436 function () {\r
437 if (this.type == 1) {\r
438 return true;\r
439 } else {\r
440 return false;\r
441 }});\r
442 Clazz.overrideMethod (c$, "hasRNAStructure", \r
443 function () {\r
444 return this.$hasRNAStructure;\r
445 });\r
446 Clazz.overrideMethod (c$, "setDataset", \r
447 function (data) {\r
448 if (this.dataset == null && data == null) {\r
449 var seqs =  new Array (this.getHeight ());\r
450 var currentSeq;\r
451 for (var i = 0; i < this.getHeight (); i++) {\r
452 currentSeq = this.getSequenceAt (i);\r
453 if (currentSeq.getDatasetSequence () != null) {\r
454 seqs[i] = currentSeq.getDatasetSequence ();\r
455 } else {\r
456 seqs[i] = currentSeq.createDatasetSequence ();\r
457 }}\r
458 this.dataset =  new jalview.datamodel.Alignment (seqs);\r
459 } else if (this.dataset == null && data != null) {\r
460 this.dataset = data;\r
461 for (var i = 0; i < this.getHeight (); i++) {\r
462 var currentSeq = this.getSequenceAt (i);\r
463 var dsq = currentSeq.getDatasetSequence ();\r
464 if (dsq == null) {\r
465 dsq = currentSeq.createDatasetSequence ();\r
466 this.dataset.addSequence (dsq);\r
467 } else {\r
468 while (dsq.getDatasetSequence () != null) {\r
469 dsq = dsq.getDatasetSequence ();\r
470 }\r
471 if (this.dataset.findIndex (dsq) == -1) {\r
472 this.dataset.addSequence (dsq);\r
473 }}}\r
474 }this.dataset.addAlignmentRef ();\r
475 }, "jalview.datamodel.Alignment");\r
476 Clazz.defineMethod (c$, "addAlignmentRef", \r
477  function () {\r
478 this.alignmentRefs++;\r
479 });\r
480 Clazz.overrideMethod (c$, "getDataset", \r
481 function () {\r
482 return this.dataset;\r
483 });\r
484 Clazz.overrideMethod (c$, "padGaps", \r
485 function () {\r
486 var modified = false;\r
487 var maxLength = -1;\r
488 var current;\r
489 for (var i = 0; i < this.sequences.size (); i++) {\r
490 current = this.getSequenceAt (i);\r
491 for (var j = current.getLength (); j > maxLength; j--) {\r
492 if (j > maxLength && !jalview.util.Comparison.isGap (current.getCharAt (j))) {\r
493 maxLength = j;\r
494 break;\r
495 }}\r
496 }\r
497 maxLength++;\r
498 var cLength;\r
499 for (var i = 0; i < this.sequences.size (); i++) {\r
500 current = this.getSequenceAt (i);\r
501 cLength = current.getLength ();\r
502 if (cLength < maxLength) {\r
503 current.insertCharAt (cLength, maxLength - cLength, this.gapCharacter);\r
504 modified = true;\r
505 } else if (current.getLength () > maxLength) {\r
506 current.deleteChars (maxLength, current.getLength ());\r
507 }}\r
508 return modified;\r
509 });\r
510 Clazz.overrideMethod (c$, "justify", \r
511 function (right) {\r
512 var modified = false;\r
513 var maxLength = -1;\r
514 var ends =  Clazz.newIntArray (this.sequences.size () * 2, 0);\r
515 var current;\r
516 for (var i = 0; i < this.sequences.size (); i++) {\r
517 current = this.getSequenceAt (i);\r
518 ends[i * 2] = current.findIndex (current.getStart ());\r
519 ends[i * 2 + 1] = current.findIndex (current.getStart () + current.getLength ());\r
520 var hitres = false;\r
521 for (var j = 0, rs = 0, ssiz = current.getLength (); j < ssiz; j++) {\r
522 if (!jalview.util.Comparison.isGap (current.getCharAt (j))) {\r
523 if (!hitres) {\r
524 ends[i * 2] = j;\r
525 hitres = true;\r
526 } else {\r
527 ends[i * 2 + 1] = j;\r
528 if (j - ends[i * 2] > maxLength) {\r
529 maxLength = j - ends[i * 2];\r
530 }}}}\r
531 }\r
532 maxLength++;\r
533 var cLength;\r
534 var extent;\r
535 var diff;\r
536 for (var i = 0; i < this.sequences.size (); i++) {\r
537 current = this.getSequenceAt (i);\r
538 cLength = 1 + ends[i * 2 + 1] - ends[i * 2];\r
539 diff = maxLength - cLength;\r
540 extent = current.getLength ();\r
541 if (right) {\r
542 if (extent > ends[i * 2 + 1]) {\r
543 current.deleteChars (ends[i * 2 + 1] + 1, extent);\r
544 modified = true;\r
545 }if (ends[i * 2] > diff) {\r
546 current.deleteChars (0, ends[i * 2] - diff);\r
547 modified = true;\r
548 } else {\r
549 if (ends[i * 2] < diff) {\r
550 current.insertCharAt (0, diff - ends[i * 2], this.gapCharacter);\r
551 modified = true;\r
552 }}} else {\r
553 if (ends[i * 2] > 0) {\r
554 current.deleteChars (0, ends[i * 2]);\r
555 modified = true;\r
556 ends[i * 2 + 1] -= ends[i * 2];\r
557 extent -= ends[i * 2];\r
558 }if (extent > maxLength) {\r
559 current.deleteChars (maxLength + 1, extent);\r
560 modified = true;\r
561 } else {\r
562 if (extent < maxLength) {\r
563 current.insertCharAt (extent, maxLength - extent, this.gapCharacter);\r
564 modified = true;\r
565 }}}}\r
566 return modified;\r
567 }, "~B");\r
568 Clazz.defineMethod (c$, "getHiddenSequences", \r
569 function () {\r
570 return this.hiddenSequences;\r
571 });\r
572 Clazz.overrideMethod (c$, "getCompactAlignment", \r
573 function () {\r
574 {\r
575 var alseqs =  new Array (this.sequences.size ());\r
576 var i = 0;\r
577 for (var seq, $seq = this.sequences.iterator (); $seq.hasNext () && ((seq = $seq.next ()) || true);) {\r
578 alseqs[i++] =  new jalview.datamodel.SeqCigar (seq);\r
579 }\r
580 var cal =  new jalview.datamodel.CigarArray (alseqs);\r
581 cal.addOperation ('M', this.getWidth ());\r
582 return cal;\r
583 }});\r
584 Clazz.overrideMethod (c$, "setProperty", \r
585 function (key, value) {\r
586 if (this.alignmentProperties == null) {\r
587 this.alignmentProperties =  new java.util.Hashtable ();\r
588 }this.alignmentProperties.put (key, value);\r
589 }, "~O,~O");\r
590 Clazz.defineMethod (c$, "getProperty", \r
591 function (key) {\r
592 if (this.alignmentProperties != null) {\r
593 return this.alignmentProperties.get (key);\r
594 } else {\r
595 return null;\r
596 }}, "~O");\r
597 Clazz.defineMethod (c$, "getProperties", \r
598 function () {\r
599 return this.alignmentProperties;\r
600 });\r
601 Clazz.overrideMethod (c$, "addCodonFrame", \r
602 function (codons) {\r
603 if (codons != null) {\r
604 this.codonFrameList.add (codons);\r
605 }}, "jalview.datamodel.AlignedCodonFrame");\r
606 Clazz.overrideMethod (c$, "getCodonFrame", \r
607 function (seq) {\r
608 if (seq == null) {\r
609 return null;\r
610 }var cframes =  new java.util.ArrayList ();\r
611 for (var acf, $acf = this.codonFrameList.iterator (); $acf.hasNext () && ((acf = $acf.next ()) || true);) {\r
612 if (acf.involvesSequence (seq)) {\r
613 cframes.add (acf);\r
614 }}\r
615 return cframes;\r
616 }, "jalview.datamodel.SequenceI");\r
617 Clazz.overrideMethod (c$, "setCodonFrames", \r
618 function (acfs) {\r
619 this.codonFrameList = acfs;\r
620 }, "java.util.Set");\r
621 Clazz.defineMethod (c$, "getCodonFrames", \r
622 function () {\r
623 return this.codonFrameList;\r
624 });\r
625 Clazz.overrideMethod (c$, "removeCodonFrame", \r
626 function (codons) {\r
627 if (codons == null || this.codonFrameList == null) {\r
628 return false;\r
629 }return this.codonFrameList.remove (codons);\r
630 }, "jalview.datamodel.AlignedCodonFrame");\r
631 Clazz.overrideMethod (c$, "append", \r
632 function (toappend) {\r
633 if (toappend === this) {\r
634 System.err.println ("Self append may cause a deadlock.");\r
635 }var samegap = toappend.getGapCharacter () == this.getGapCharacter ();\r
636 var oldc = toappend.getGapCharacter ();\r
637 var hashidden = toappend.getHiddenSequences () != null && toappend.getHiddenSequences ().hiddenSequences != null;\r
638 var sqs = (hashidden) ? toappend.getHiddenSequences ().getFullAlignment ().getSequences () : toappend.getSequences ();\r
639 if (sqs != null) {\r
640 {\r
641 for (var addedsq, $addedsq = sqs.iterator (); $addedsq.hasNext () && ((addedsq = $addedsq.next ()) || true);) {\r
642 if (!samegap) {\r
643 var oldseq = addedsq.getSequence ();\r
644 for (var c = 0; c < oldseq.length; c++) {\r
645 if (oldseq[c] == oldc) {\r
646 oldseq[c] = this.gapCharacter;\r
647 }}\r
648 }this.addSequence (addedsq);\r
649 }\r
650 }}var alan = toappend.getAlignmentAnnotation ();\r
651 for (var a = 0; alan != null && a < alan.length; a++) {\r
652 this.addAnnotation (alan[a]);\r
653 }\r
654 this.codonFrameList.addAll (toappend.getCodonFrames ());\r
655 var sg = toappend.getGroups ();\r
656 if (sg != null) {\r
657 for (var _sg, $_sg = sg.iterator (); $_sg.hasNext () && ((_sg = $_sg.next ()) || true);) {\r
658 this.addGroup (_sg);\r
659 }\r
660 }if (toappend.getHiddenSequences () != null) {\r
661 var hs = toappend.getHiddenSequences ();\r
662 if (this.hiddenSequences == null) {\r
663 this.hiddenSequences =  new jalview.datamodel.HiddenSequences (this);\r
664 }if (hs.hiddenSequences != null) {\r
665 for (var s = 0; s < hs.hiddenSequences.length; s++) {\r
666 if (hs.hiddenSequences[s] != null) {\r
667 this.hiddenSequences.hideSequence (hs.hiddenSequences[s]);\r
668 }}\r
669 }}if (toappend.getProperties () != null) {\r
670 var key = toappend.getProperties ().keys ();\r
671 while (key.hasMoreElements ()) {\r
672 var k = key.nextElement ();\r
673 var ourval = this.getProperty (k);\r
674 var toapprop = toappend.getProperty (k);\r
675 if (ourval != null) {\r
676 if (ourval.getClass ().equals (toapprop.getClass ()) && !ourval.equals (toapprop)) {\r
677 if (Clazz.instanceOf (ourval, String)) {\r
678 this.setProperty (k, (ourval) + "; " + (toapprop));\r
679 } else {\r
680 if (Clazz.instanceOf (ourval, java.util.Vector)) {\r
681 var theirv = (toapprop).elements ();\r
682 while (theirv.hasMoreElements ()) {\r
683 (ourval).addElement (theirv);\r
684 }\r
685 }}}} else {\r
686 this.setProperty (k, toapprop);\r
687 }}\r
688 }}, "jalview.datamodel.AlignmentI");\r
689 Clazz.overrideMethod (c$, "findOrCreateAnnotation", \r
690 function (name, calcId, autoCalc, seqRef, groupRef) {\r
691 if (this.annotations != null) {\r
692 for (var annot, $annot = 0, $$annot = this.getAlignmentAnnotation (); $annot < $$annot.length && ((annot = $$annot[$annot]) || true); $annot++) {\r
693 if (annot.autoCalculated == autoCalc && (name.equals (annot.label)) && (calcId == null || annot.getCalcId ().equals (calcId)) && annot.sequenceRef === seqRef && annot.groupRef === groupRef) {\r
694 return annot;\r
695 }}\r
696 }var annot =  new jalview.datamodel.AlignmentAnnotation (name, name,  new Array (1), 0, 0, 1);\r
697 annot.hasText = false;\r
698 annot.setCalcId ( String.instantialize (calcId));\r
699 annot.autoCalculated = autoCalc;\r
700 if (seqRef != null) {\r
701 annot.setSequenceRef (seqRef);\r
702 }annot.groupRef = groupRef;\r
703 this.addAnnotation (annot);\r
704 return annot;\r
705 }, "~S,~S,~B,jalview.datamodel.SequenceI,jalview.datamodel.SequenceGroup");\r
706 Clazz.overrideMethod (c$, "findAnnotation", \r
707 function (calcId) {\r
708 var aa =  new java.util.ArrayList ();\r
709 for (var a, $a = 0, $$a = this.getAlignmentAnnotation (); $a < $$a.length && ((a = $$a[$a]) || true); $a++) {\r
710 if (a.getCalcId () === calcId || (a.getCalcId () != null && calcId != null && a.getCalcId ().equals (calcId))) {\r
711 aa.add (a);\r
712 }}\r
713 return aa;\r
714 }, "~S");\r
715 Clazz.overrideMethod (c$, "findAnnotations", \r
716 function (seq, calcId, label) {\r
717 var aa =  new java.util.ArrayList ();\r
718 for (var ann, $ann = 0, $$ann = this.getAlignmentAnnotation (); $ann < $$ann.length && ((ann = $$ann[$ann]) || true); $ann++) {\r
719 if (ann.getCalcId () != null && ann.getCalcId ().equals (calcId) && ann.sequenceRef != null && ann.sequenceRef === seq && ann.label != null && ann.label.equals (label)) {\r
720 aa.add (ann);\r
721 }}\r
722 return aa;\r
723 }, "jalview.datamodel.SequenceI,~S,~S");\r
724 Clazz.overrideMethod (c$, "moveSelectedSequencesByOne", \r
725 function (sg, map, up) {\r
726 {\r
727 if (up) {\r
728 for (var i = 1, iSize = this.sequences.size (); i < iSize; i++) {\r
729 var seq = this.sequences.get (i);\r
730 if (!sg.getSequences (map).contains (seq)) {\r
731 continue;\r
732 }var temp = this.sequences.get (i - 1);\r
733 if (sg.getSequences (null).contains (temp)) {\r
734 continue;\r
735 }this.sequences.set (i, temp);\r
736 this.sequences.set (i - 1, seq);\r
737 }\r
738 } else {\r
739 for (var i = this.sequences.size () - 2; i > -1; i--) {\r
740 var seq = this.sequences.get (i);\r
741 if (!sg.getSequences (map).contains (seq)) {\r
742 continue;\r
743 }var temp = this.sequences.get (i + 1);\r
744 if (sg.getSequences (map).contains (temp)) {\r
745 continue;\r
746 }this.sequences.set (i, temp);\r
747 this.sequences.set (i + 1, seq);\r
748 }\r
749 }}}, "jalview.datamodel.SequenceGroup,java.util.Map,~B");\r
750 Clazz.overrideMethod (c$, "validateAnnotation", \r
751 function (alignmentAnnotation) {\r
752 alignmentAnnotation.validateRangeAndDisplay ();\r
753 if (this.isNucleotide () && alignmentAnnotation.isValidStruc ()) {\r
754 this.$hasRNAStructure = true;\r
755 }}, "jalview.datamodel.AlignmentAnnotation");\r
756 Clazz.overrideMethod (c$, "getSeqrep", \r
757 function () {\r
758 return this.seqrep;\r
759 });\r
760 Clazz.overrideMethod (c$, "setSeqrep", \r
761 function (seqrep) {\r
762 this.seqrep = seqrep;\r
763 }, "jalview.datamodel.SequenceI");\r
764 Clazz.overrideMethod (c$, "hasSeqrep", \r
765 function () {\r
766 return this.seqrep != null;\r
767 });\r
768 Clazz.overrideMethod (c$, "getEndRes", \r
769 function () {\r
770 return this.getWidth () - 1;\r
771 });\r
772 Clazz.overrideMethod (c$, "getStartRes", \r
773 function () {\r
774 return 0;\r
775 });\r
776 Clazz.overrideMethod (c$, "getContext", \r
777 function () {\r
778 return this.dataset;\r
779 });\r
780 Clazz.defineMethod (c$, "alignAs", \r
781 function (al) {\r
782 return this.alignAs (al, false, true);\r
783 }, "jalview.datamodel.AlignmentI");\r
784 Clazz.defineMethod (c$, "alignAs", \r
785 function (al, preserveMappedGaps, preserveUnmappedGaps) {\r
786 var count = 0;\r
787 var thisIsNucleotide = this.isNucleotide ();\r
788 var thatIsProtein = !al.isNucleotide ();\r
789 if (!thatIsProtein && !thisIsNucleotide) {\r
790 return jalview.analysis.AlignmentUtils.alignProteinAsDna (this, al);\r
791 }var thisGapChar = this.getGapCharacter ();\r
792 var gap = thisIsNucleotide && thatIsProtein ? String.valueOf ( Clazz.newCharArray (-1, [thisGapChar, thisGapChar, thisGapChar])) : String.valueOf (thisGapChar);\r
793 for (var alignTo, $alignTo = this.getSequences ().iterator (); $alignTo.hasNext () && ((alignTo = $alignTo.next ()) || true);) {\r
794 count += jalview.analysis.AlignmentUtils.alignSequenceAs (alignTo, al, gap, preserveMappedGaps, preserveUnmappedGaps) ? 1 : 0;\r
795 }\r
796 return count;\r
797 }, "jalview.datamodel.AlignmentI,~B,~B");\r
798 Clazz.overrideMethod (c$, "getSequenceNames", \r
799 function () {\r
800 var names =  new java.util.HashSet ();\r
801 for (var seq, $seq = this.getSequences ().iterator (); $seq.hasNext () && ((seq = $seq.next ()) || true);) {\r
802 names.add (seq.getName ());\r
803 }\r
804 return names;\r
805 });\r
806 Clazz.overrideMethod (c$, "toString", \r
807 function () {\r
808 var seq = this.getSequencesArray ();\r
809 {\r
810 return "" + JSON.stringify(seq);\r
811 }});\r
812 Clazz.defineStatics (c$,\r
813 "PROTEIN", 0,\r
814 "NUCLEOTIDE", 1);\r
815 });\r