JAL-1807 test
[jalviewjs.git] / bin / jalview / datamodel / Alignment.js
index f70f6ce..a4d45ee 100644 (file)
-Clazz.declarePackage ("jalview.datamodel");\r
-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
-c$ = Clazz.decorateAsClass (function () {\r
-this.dataset = null;\r
-this.sequences = null;\r
-this.groups = null;\r
-this.gapCharacter = '-';\r
-this.type = 1;\r
-this.$hasRNAStructure = false;\r
-this.annotations = null;\r
-this.hiddenSequences = null;\r
-this.alignmentProperties = null;\r
-this.codonFrameList = null;\r
-this.alignmentRefs = 0;\r
-this.seqrep = null;\r
-Clazz.instantialize (this, arguments);\r
-}, jalview.datamodel, "Alignment", null, jalview.datamodel.AlignmentI);\r
-Clazz.prepareFields (c$, function () {\r
-this.groups = java.util.Collections.synchronizedList ( new java.util.ArrayList ());\r
-this.hiddenSequences =  new jalview.datamodel.HiddenSequences (this);\r
-this.codonFrameList =  new java.util.LinkedHashSet ();\r
-});\r
-Clazz.defineMethod (c$, "initAlignment", \r
-($fz = function (seqs) {\r
-var i = 0;\r
-if (jalview.util.Comparison.isNucleotide (seqs)) {\r
-this.type = 1;\r
-} else {\r
-this.type = 0;\r
-}this.sequences = java.util.Collections.synchronizedList ( new java.util.ArrayList ());\r
-for (i = 0; i < seqs.length; i++) {\r
-this.sequences.add (seqs[i]);\r
-}\r
-}, $fz.isPrivate = true, $fz), "~A");\r
-Clazz.makeConstructor (c$, \r
-function (al) {\r
-var seqs = al.getSequencesArray ();\r
-for (var i = 0; i < seqs.length; i++) {\r
-seqs[i] =  new jalview.datamodel.Sequence (seqs[i]);\r
-}\r
-this.codonFrameList = (al).codonFrameList;\r
-this.initAlignment (seqs);\r
-}, "jalview.datamodel.AlignmentI");\r
-Clazz.makeConstructor (c$, \r
-function (seqs) {\r
-this.initAlignment (seqs);\r
-}, "~A");\r
-c$.createAlignment = Clazz.defineMethod (c$, "createAlignment", \r
-function (compactAlignment) {\r
-throw  new Error (jalview.util.MessageManager.getString ("error.alignment_cigararray_not_implemented"));\r
-}, "jalview.datamodel.CigarArray");\r
-Clazz.defineMethod (c$, "getSequences", \r
-function () {\r
-return this.sequences;\r
-});\r
-Clazz.defineMethod (c$, "getSequences", \r
-function (hiddenReps) {\r
-return this.sequences;\r
-}, "java.util.Map");\r
-Clazz.defineMethod (c$, "getSequencesArray", \r
-function () {\r
-if (this.sequences == null) {\r
-return null;\r
-}{\r
-return this.sequences.toArray ( new Array (this.sequences.size ()));\r
-}});\r
-Clazz.overrideMethod (c$, "getSequencesByName", \r
-function () {\r
-return jalview.analysis.AlignmentUtils.getSequencesByName (this);\r
-});\r
-Clazz.overrideMethod (c$, "getSequenceAt", \r
-function (i) {\r
-{\r
-if (i > -1 && i < this.sequences.size ()) {\r
-return this.sequences.get (i);\r
-}}return null;\r
-}, "~N");\r
-Clazz.overrideMethod (c$, "addSequence", \r
-function (snew) {\r
-if (this.dataset != null) {\r
-if (snew.getDatasetSequence () != null) {\r
-this.getDataset ().addSequence (snew.getDatasetSequence ());\r
-} else {\r
-var adding = snew.deriveSequence ();\r
-this.getDataset ().addSequence (adding.getDatasetSequence ());\r
-snew = adding;\r
-}}if (this.sequences == null) {\r
-this.initAlignment ( Clazz.newArray (-1, [snew]));\r
-} else {\r
-{\r
-this.sequences.add (snew);\r
-}}if (this.hiddenSequences != null) {\r
-this.hiddenSequences.adjustHeightSequenceAdded ();\r
-}}, "jalview.datamodel.SequenceI");\r
-Clazz.overrideMethod (c$, "setSequenceAt", \r
-function (i, snew) {\r
-{\r
-this.deleteSequence (i);\r
-this.sequences.set (i, snew);\r
-}}, "~N,jalview.datamodel.SequenceI");\r
-Clazz.defineMethod (c$, "getGroups", \r
-function () {\r
-return this.groups;\r
-});\r
-Clazz.overrideMethod (c$, "finalize", \r
-function () {\r
-if (this.getDataset () != null) {\r
-this.getDataset ().removeAlignmentRef ();\r
-}this.dataset = null;\r
-this.sequences = null;\r
-this.groups = null;\r
-this.annotations = null;\r
-this.hiddenSequences = null;\r
-});\r
-Clazz.defineMethod (c$, "removeAlignmentRef", \r
-($fz = function () {\r
-if (--this.alignmentRefs == 0) {\r
-this.finalize ();\r
-}}, $fz.isPrivate = true, $fz));\r
-Clazz.defineMethod (c$, "deleteSequence", \r
-function (s) {\r
-this.deleteSequence (this.findIndex (s));\r
-}, "jalview.datamodel.SequenceI");\r
-Clazz.defineMethod (c$, "deleteSequence", \r
-function (i) {\r
-if (i > -1 && i < this.getHeight ()) {\r
-{\r
-this.sequences.remove (i);\r
-this.hiddenSequences.adjustHeightSequenceDeleted (i);\r
-}}}, "~N");\r
-Clazz.overrideMethod (c$, "findGroup", \r
-function (s) {\r
-{\r
-for (var i = 0; i < this.groups.size (); i++) {\r
-var sg = this.groups.get (i);\r
-if (sg.getSequences (null).contains (s)) {\r
-return sg;\r
-}}\r
-}return null;\r
-}, "jalview.datamodel.SequenceI");\r
-Clazz.overrideMethod (c$, "findAllGroups", \r
-function (s) {\r
-var temp =  new java.util.ArrayList ();\r
-{\r
-var gSize = this.groups.size ();\r
-for (var i = 0; i < gSize; i++) {\r
-var sg = this.groups.get (i);\r
-if (sg == null || sg.getSequences () == null) {\r
-this.deleteGroup (sg);\r
-gSize--;\r
-continue;\r
-}if (sg.getSequences ().contains (s)) {\r
-temp.add (sg);\r
-}}\r
-}var ret =  new Array (temp.size ());\r
-return temp.toArray (ret);\r
-}, "jalview.datamodel.SequenceI");\r
-Clazz.overrideMethod (c$, "addGroup", \r
-function (sg) {\r
-{\r
-if (!this.groups.contains (sg)) {\r
-if (this.hiddenSequences.getSize () > 0) {\r
-var i;\r
-var iSize = sg.getSize ();\r
-for (i = 0; i < iSize; i++) {\r
-if (!this.sequences.contains (sg.getSequenceAt (i))) {\r
-sg.deleteSequence (sg.getSequenceAt (i), false);\r
-iSize--;\r
-i--;\r
-}}\r
-if (sg.getSize () < 1) {\r
-return;\r
-}}sg.setContext (this);\r
-this.groups.add (sg);\r
-}}}, "jalview.datamodel.SequenceGroup");\r
-Clazz.defineMethod (c$, "removeAnnotationForGroup", \r
-($fz = function (gp) {\r
-if (this.annotations == null || this.annotations.length == 0) {\r
-return;\r
-}var t;\r
-var todelete =  new Array (this.annotations.length);\r
-var tokeep =  new Array (this.annotations.length);\r
-var i;\r
-var p;\r
-var k;\r
-if (gp == null) {\r
-for (i = 0, p = 0, k = 0; i < this.annotations.length; i++) {\r
-if (this.annotations[i].groupRef != null) {\r
-todelete[p++] = this.annotations[i];\r
-} else {\r
-tokeep[k++] = this.annotations[i];\r
-}}\r
-} else {\r
-for (i = 0, p = 0, k = 0; i < this.annotations.length; i++) {\r
-if (this.annotations[i].groupRef === gp) {\r
-todelete[p++] = this.annotations[i];\r
-} else {\r
-tokeep[k++] = this.annotations[i];\r
-}}\r
-}if (p > 0) {\r
-for (i = 0; i < p; i++) {\r
-this.unhookAnnotation (todelete[i]);\r
-todelete[i] = null;\r
-}\r
-t =  new Array (k);\r
-for (i = 0; i < k; i++) {\r
-t[i] = tokeep[i];\r
-}\r
-this.annotations = t;\r
-}}, $fz.isPrivate = true, $fz), "jalview.datamodel.SequenceGroup");\r
-Clazz.overrideMethod (c$, "deleteAllGroups", \r
-function () {\r
-{\r
-if (this.annotations != null) {\r
-this.removeAnnotationForGroup (null);\r
-}for (var sg, $sg = this.groups.iterator (); $sg.hasNext () && ((sg = $sg.next ()) || true);) {\r
-sg.setContext (null);\r
-}\r
-this.groups.clear ();\r
-}});\r
-Clazz.overrideMethod (c$, "deleteGroup", \r
-function (g) {\r
-{\r
-if (this.groups.contains (g)) {\r
-this.removeAnnotationForGroup (g);\r
-this.groups.remove (g);\r
-g.setContext (null);\r
-}}}, "jalview.datamodel.SequenceGroup");\r
-Clazz.defineMethod (c$, "findName", \r
-function (name) {\r
-return this.findName (name, false);\r
-}, "~S");\r
-Clazz.defineMethod (c$, "findName", \r
-function (token, b) {\r
-return this.findName (null, token, b);\r
-}, "~S,~B");\r
-Clazz.defineMethod (c$, "findName", \r
-function (startAfter, token, b) {\r
-var i = 0;\r
-var sq = null;\r
-var sqname = null;\r
-if (startAfter != null) {\r
-var matched = false;\r
-while (i < this.sequences.size ()) {\r
-if (this.getSequenceAt (i++) === startAfter) {\r
-matched = true;\r
-break;\r
-}}\r
-if (!matched) {\r
-i = 0;\r
-}}while (i < this.sequences.size ()) {\r
-sq = this.getSequenceAt (i);\r
-sqname = sq.getName ();\r
-if (sqname.equals (token) || (b && (sqname.equalsIgnoreCase (token)))) {\r
-return this.getSequenceAt (i);\r
-}i++;\r
-}\r
-return null;\r
-}, "jalview.datamodel.SequenceI,~S,~B");\r
-Clazz.overrideMethod (c$, "findSequenceMatch", \r
-function (name) {\r
-var matches =  new java.util.Vector ();\r
-var i = 0;\r
-while (i < this.sequences.size ()) {\r
-if (this.getSequenceAt (i).getName ().equals (name)) {\r
-matches.addElement (this.getSequenceAt (i));\r
-}i++;\r
-}\r
-var result =  new Array (matches.size ());\r
-for (i = 0; i < result.length; i++) {\r
-result[i] = matches.elementAt (i);\r
-}\r
-return result;\r
-}, "~S");\r
-Clazz.defineMethod (c$, "findIndex", \r
-function (s) {\r
-var i = 0;\r
-while (i < this.sequences.size ()) {\r
-if (s === this.getSequenceAt (i)) {\r
-return i;\r
-}i++;\r
-}\r
-return -1;\r
-}, "jalview.datamodel.SequenceI");\r
-Clazz.defineMethod (c$, "findIndex", \r
-function (results) {\r
-var i = 0;\r
-while (i < this.sequences.size ()) {\r
-if (results.involvesSequence (this.getSequenceAt (i))) {\r
-return i;\r
-}i++;\r
-}\r
-return -1;\r
-}, "jalview.datamodel.SearchResults");\r
-Clazz.overrideMethod (c$, "getHeight", \r
-function () {\r
-return this.sequences.size ();\r
-});\r
-Clazz.overrideMethod (c$, "getWidth", \r
-function () {\r
-var maxLength = -1;\r
-for (var i = 0; i < this.sequences.size (); i++) {\r
-if (this.getSequenceAt (i).getLength () > maxLength) {\r
-maxLength = this.getSequenceAt (i).getLength ();\r
-}}\r
-return maxLength;\r
-});\r
-Clazz.overrideMethod (c$, "setGapCharacter", \r
-function (gc) {\r
-this.gapCharacter = gc;\r
-{\r
-for (var seq, $seq = this.sequences.iterator (); $seq.hasNext () && ((seq = $seq.next ()) || true);) {\r
-seq.setSequence (seq.getSequenceAsString ().$replace ('.', gc).$replace ('-', gc).$replace (' ', gc));\r
-}\r
-}}, "~S");\r
-Clazz.defineMethod (c$, "getGapCharacter", \r
-function () {\r
-return this.gapCharacter;\r
-});\r
-Clazz.defineMethod (c$, "isAligned", \r
-function () {\r
-return this.isAligned (false);\r
-});\r
-Clazz.defineMethod (c$, "isAligned", \r
-function (includeHidden) {\r
-var width = this.getWidth ();\r
-if (this.hiddenSequences == null || this.hiddenSequences.getSize () == 0) {\r
-includeHidden = true;\r
-}for (var i = 0; i < this.sequences.size (); i++) {\r
-if (includeHidden || !this.hiddenSequences.isHidden (this.getSequenceAt (i))) {\r
-if (this.getSequenceAt (i).getLength () != width) {\r
-return false;\r
-}}}\r
-return true;\r
-}, "~B");\r
-Clazz.overrideMethod (c$, "deleteAllAnnotations", \r
-function (includingAutoCalculated) {\r
-var result = false;\r
-for (var alan, $alan = 0, $$alan = this.getAlignmentAnnotation (); $alan < $$alan.length && ((alan = $$alan[$alan]) || true); $alan++) {\r
-if (!alan.autoCalculated || includingAutoCalculated) {\r
-this.deleteAnnotation (alan);\r
-result = true;\r
-}}\r
-return result;\r
-}, "~B");\r
-Clazz.defineMethod (c$, "deleteAnnotation", \r
-function (aa) {\r
-return this.deleteAnnotation (aa, true);\r
-}, "jalview.datamodel.AlignmentAnnotation");\r
-Clazz.defineMethod (c$, "deleteAnnotation", \r
-function (aa, unhook) {\r
-var aSize = 1;\r
-if (this.annotations != null) {\r
-aSize = this.annotations.length;\r
-}if (aSize < 1) {\r
-return false;\r
-}var temp =  new Array (aSize - 1);\r
-var swap = false;\r
-var tIndex = 0;\r
-for (var i = 0; i < aSize; i++) {\r
-if (this.annotations[i] === aa) {\r
-swap = true;\r
-continue;\r
-}if (tIndex < temp.length) {\r
-temp[tIndex++] = this.annotations[i];\r
-}}\r
-if (swap) {\r
-this.annotations = temp;\r
-if (unhook) {\r
-this.unhookAnnotation (aa);\r
-}}return swap;\r
-}, "jalview.datamodel.AlignmentAnnotation,~B");\r
-Clazz.defineMethod (c$, "unhookAnnotation", \r
-($fz = function (aa) {\r
-if (aa.sequenceRef != null) {\r
-aa.sequenceRef.removeAlignmentAnnotation (aa);\r
-}if (aa.groupRef != null) {\r
-aa.groupRef = null;\r
-}}, $fz.isPrivate = true, $fz), "jalview.datamodel.AlignmentAnnotation");\r
-Clazz.defineMethod (c$, "addAnnotation", \r
-function (aa) {\r
-this.addAnnotation (aa, -1);\r
-}, "jalview.datamodel.AlignmentAnnotation");\r
-Clazz.defineMethod (c$, "addAnnotation", \r
-function (aa, pos) {\r
-if (aa.getRNAStruc () != null) {\r
-this.$hasRNAStructure = true;\r
-}var aSize = 1;\r
-if (this.annotations != null) {\r
-aSize = this.annotations.length + 1;\r
-}var temp =  new Array (aSize);\r
-var i = 0;\r
-if (pos == -1 || pos >= aSize) {\r
-temp[aSize - 1] = aa;\r
-} else {\r
-temp[pos] = aa;\r
-}if (aSize > 1) {\r
-var p = 0;\r
-for (i = 0; i < (aSize - 1); i++, p++) {\r
-if (p == pos) {\r
-p++;\r
-}if (p < temp.length) {\r
-temp[p] = this.annotations[i];\r
-}}\r
-}this.annotations = temp;\r
-}, "jalview.datamodel.AlignmentAnnotation,~N");\r
-Clazz.overrideMethod (c$, "setAnnotationIndex", \r
-function (aa, index) {\r
-if (aa == null || this.annotations == null || this.annotations.length - 1 < index) {\r
-return;\r
-}var aSize = this.annotations.length;\r
-var temp =  new Array (aSize);\r
-temp[index] = aa;\r
-for (var i = 0; i < aSize; i++) {\r
-if (i == index) {\r
-continue;\r
-}if (i < index) {\r
-temp[i] = this.annotations[i];\r
-} else {\r
-temp[i] = this.annotations[i - 1];\r
-}}\r
-this.annotations = temp;\r
-}, "jalview.datamodel.AlignmentAnnotation,~N");\r
-Clazz.defineMethod (c$, "getAlignmentAnnotation", \r
-function () {\r
-return this.annotations;\r
-});\r
-Clazz.overrideMethod (c$, "setNucleotide", \r
-function (b) {\r
-if (b) {\r
-this.type = 1;\r
-} else {\r
-this.type = 0;\r
-}}, "~B");\r
-Clazz.defineMethod (c$, "isNucleotide", \r
-function () {\r
-if (this.type == 1) {\r
-return true;\r
-} else {\r
-return false;\r
-}});\r
-Clazz.overrideMethod (c$, "hasRNAStructure", \r
-function () {\r
-return this.$hasRNAStructure;\r
-});\r
-Clazz.overrideMethod (c$, "setDataset", \r
-function (data) {\r
-if (this.dataset == null && data == null) {\r
-var seqs =  new Array (this.getHeight ());\r
-var currentSeq;\r
-for (var i = 0; i < this.getHeight (); i++) {\r
-currentSeq = this.getSequenceAt (i);\r
-if (currentSeq.getDatasetSequence () != null) {\r
-seqs[i] = currentSeq.getDatasetSequence ();\r
-} else {\r
-seqs[i] = currentSeq.createDatasetSequence ();\r
-}}\r
-this.dataset =  new jalview.datamodel.Alignment (seqs);\r
-} else if (this.dataset == null && data != null) {\r
-this.dataset = data;\r
-for (var i = 0; i < this.getHeight (); i++) {\r
-var currentSeq = this.getSequenceAt (i);\r
-var dsq = currentSeq.getDatasetSequence ();\r
-if (dsq == null) {\r
-dsq = currentSeq.createDatasetSequence ();\r
-this.dataset.addSequence (dsq);\r
-} else {\r
-while (dsq.getDatasetSequence () != null) {\r
-dsq = dsq.getDatasetSequence ();\r
-}\r
-if (this.dataset.findIndex (dsq) == -1) {\r
-this.dataset.addSequence (dsq);\r
-}}}\r
-}this.dataset.addAlignmentRef ();\r
-}, "jalview.datamodel.Alignment");\r
-Clazz.defineMethod (c$, "addAlignmentRef", \r
-($fz = function () {\r
-this.alignmentRefs++;\r
-}, $fz.isPrivate = true, $fz));\r
-Clazz.overrideMethod (c$, "getDataset", \r
-function () {\r
-return this.dataset;\r
-});\r
-Clazz.overrideMethod (c$, "padGaps", \r
-function () {\r
-var modified = false;\r
-var maxLength = -1;\r
-var current;\r
-for (var i = 0; i < this.sequences.size (); i++) {\r
-current = this.getSequenceAt (i);\r
-for (var j = current.getLength (); j > maxLength; j--) {\r
-if (j > maxLength && !jalview.util.Comparison.isGap (current.getCharAt (j))) {\r
-maxLength = j;\r
-break;\r
-}}\r
-}\r
-maxLength++;\r
-var cLength;\r
-for (var i = 0; i < this.sequences.size (); i++) {\r
-current = this.getSequenceAt (i);\r
-cLength = current.getLength ();\r
-if (cLength < maxLength) {\r
-current.insertCharAt (cLength, maxLength - cLength, this.gapCharacter);\r
-modified = true;\r
-} else if (current.getLength () > maxLength) {\r
-current.deleteChars (maxLength, current.getLength ());\r
-}}\r
-return modified;\r
-});\r
-Clazz.overrideMethod (c$, "justify", \r
-function (right) {\r
-var modified = false;\r
-var maxLength = -1;\r
-var ends =  Clazz.newIntArray (this.sequences.size () * 2, 0);\r
-var current;\r
-for (var i = 0; i < this.sequences.size (); i++) {\r
-current = this.getSequenceAt (i);\r
-ends[i * 2] = current.findIndex (current.getStart ());\r
-ends[i * 2 + 1] = current.findIndex (current.getStart () + current.getLength ());\r
-var hitres = false;\r
-for (var j = 0, rs = 0, ssiz = current.getLength (); j < ssiz; j++) {\r
-if (!jalview.util.Comparison.isGap (current.getCharAt (j))) {\r
-if (!hitres) {\r
-ends[i * 2] = j;\r
-hitres = true;\r
-} else {\r
-ends[i * 2 + 1] = j;\r
-if (j - ends[i * 2] > maxLength) {\r
-maxLength = j - ends[i * 2];\r
-}}}}\r
-}\r
-maxLength++;\r
-var cLength;\r
-var extent;\r
-var diff;\r
-for (var i = 0; i < this.sequences.size (); i++) {\r
-current = this.getSequenceAt (i);\r
-cLength = 1 + ends[i * 2 + 1] - ends[i * 2];\r
-diff = maxLength - cLength;\r
-extent = current.getLength ();\r
-if (right) {\r
-if (extent > ends[i * 2 + 1]) {\r
-current.deleteChars (ends[i * 2 + 1] + 1, extent);\r
-modified = true;\r
-}if (ends[i * 2] > diff) {\r
-current.deleteChars (0, ends[i * 2] - diff);\r
-modified = true;\r
-} else {\r
-if (ends[i * 2] < diff) {\r
-current.insertCharAt (0, diff - ends[i * 2], this.gapCharacter);\r
-modified = true;\r
-}}} else {\r
-if (ends[i * 2] > 0) {\r
-current.deleteChars (0, ends[i * 2]);\r
-modified = true;\r
-ends[i * 2 + 1] -= ends[i * 2];\r
-extent -= ends[i * 2];\r
-}if (extent > maxLength) {\r
-current.deleteChars (maxLength + 1, extent);\r
-modified = true;\r
-} else {\r
-if (extent < maxLength) {\r
-current.insertCharAt (extent, maxLength - extent, this.gapCharacter);\r
-modified = true;\r
-}}}}\r
-return modified;\r
-}, "~B");\r
-Clazz.defineMethod (c$, "getHiddenSequences", \r
-function () {\r
-return this.hiddenSequences;\r
-});\r
-Clazz.overrideMethod (c$, "getCompactAlignment", \r
-function () {\r
-{\r
-var alseqs =  new Array (this.sequences.size ());\r
-var i = 0;\r
-for (var seq, $seq = this.sequences.iterator (); $seq.hasNext () && ((seq = $seq.next ()) || true);) {\r
-alseqs[i++] =  new jalview.datamodel.SeqCigar (seq);\r
-}\r
-var cal =  new jalview.datamodel.CigarArray (alseqs);\r
-cal.addOperation ('M', this.getWidth ());\r
-return cal;\r
-}});\r
-Clazz.overrideMethod (c$, "setProperty", \r
-function (key, value) {\r
-if (this.alignmentProperties == null) {\r
-this.alignmentProperties =  new java.util.Hashtable ();\r
-}this.alignmentProperties.put (key, value);\r
-}, "~O,~O");\r
-Clazz.defineMethod (c$, "getProperty", \r
-function (key) {\r
-if (this.alignmentProperties != null) {\r
-return this.alignmentProperties.get (key);\r
-} else {\r
-return null;\r
-}}, "~O");\r
-Clazz.defineMethod (c$, "getProperties", \r
-function () {\r
-return this.alignmentProperties;\r
-});\r
-Clazz.overrideMethod (c$, "addCodonFrame", \r
-function (codons) {\r
-if (codons != null) {\r
-this.codonFrameList.add (codons);\r
-}}, "jalview.datamodel.AlignedCodonFrame");\r
-Clazz.overrideMethod (c$, "getCodonFrame", \r
-function (seq) {\r
-if (seq == null) {\r
-return null;\r
-}var cframes =  new java.util.ArrayList ();\r
-for (var acf, $acf = this.codonFrameList.iterator (); $acf.hasNext () && ((acf = $acf.next ()) || true);) {\r
-if (acf.involvesSequence (seq)) {\r
-cframes.add (acf);\r
-}}\r
-return cframes;\r
-}, "jalview.datamodel.SequenceI");\r
-Clazz.overrideMethod (c$, "setCodonFrames", \r
-function (acfs) {\r
-this.codonFrameList = acfs;\r
-}, "java.util.Set");\r
-Clazz.defineMethod (c$, "getCodonFrames", \r
-function () {\r
-return this.codonFrameList;\r
-});\r
-Clazz.overrideMethod (c$, "removeCodonFrame", \r
-function (codons) {\r
-if (codons == null || this.codonFrameList == null) {\r
-return false;\r
-}return this.codonFrameList.remove (codons);\r
-}, "jalview.datamodel.AlignedCodonFrame");\r
-Clazz.overrideMethod (c$, "append", \r
-function (toappend) {\r
-if (toappend === this) {\r
-System.err.println ("Self append may cause a deadlock.");\r
-}var samegap = toappend.getGapCharacter () == this.getGapCharacter ();\r
-var oldc = toappend.getGapCharacter ();\r
-var hashidden = toappend.getHiddenSequences () != null && toappend.getHiddenSequences ().hiddenSequences != null;\r
-var sqs = (hashidden) ? toappend.getHiddenSequences ().getFullAlignment ().getSequences () : toappend.getSequences ();\r
-if (sqs != null) {\r
-{\r
-for (var addedsq, $addedsq = sqs.iterator (); $addedsq.hasNext () && ((addedsq = $addedsq.next ()) || true);) {\r
-if (!samegap) {\r
-var oldseq = addedsq.getSequence ();\r
-for (var c = 0; c < oldseq.length; c++) {\r
-if (oldseq[c] == oldc) {\r
-oldseq[c] = this.gapCharacter;\r
-}}\r
-}this.addSequence (addedsq);\r
-}\r
-}}var alan = toappend.getAlignmentAnnotation ();\r
-for (var a = 0; alan != null && a < alan.length; a++) {\r
-this.addAnnotation (alan[a]);\r
-}\r
-this.codonFrameList.addAll (toappend.getCodonFrames ());\r
-var sg = toappend.getGroups ();\r
-if (sg != null) {\r
-for (var _sg, $_sg = sg.iterator (); $_sg.hasNext () && ((_sg = $_sg.next ()) || true);) {\r
-this.addGroup (_sg);\r
-}\r
-}if (toappend.getHiddenSequences () != null) {\r
-var hs = toappend.getHiddenSequences ();\r
-if (this.hiddenSequences == null) {\r
-this.hiddenSequences =  new jalview.datamodel.HiddenSequences (this);\r
-}if (hs.hiddenSequences != null) {\r
-for (var s = 0; s < hs.hiddenSequences.length; s++) {\r
-if (hs.hiddenSequences[s] != null) {\r
-this.hiddenSequences.hideSequence (hs.hiddenSequences[s]);\r
-}}\r
-}}if (toappend.getProperties () != null) {\r
-var key = toappend.getProperties ().keys ();\r
-while (key.hasMoreElements ()) {\r
-var k = key.nextElement ();\r
-var ourval = this.getProperty (k);\r
-var toapprop = toappend.getProperty (k);\r
-if (ourval != null) {\r
-if (ourval.getClass ().equals (toapprop.getClass ()) && !ourval.equals (toapprop)) {\r
-if (Clazz.instanceOf (ourval, String)) {\r
-this.setProperty (k, (ourval) + "; " + (toapprop));\r
-} else {\r
-if (Clazz.instanceOf (ourval, java.util.Vector)) {\r
-var theirv = (toapprop).elements ();\r
-while (theirv.hasMoreElements ()) {\r
-(ourval).addElement (theirv);\r
-}\r
-}}}} else {\r
-this.setProperty (k, toapprop);\r
-}}\r
-}}, "jalview.datamodel.AlignmentI");\r
-Clazz.overrideMethod (c$, "findOrCreateAnnotation", \r
-function (name, calcId, autoCalc, seqRef, groupRef) {\r
-if (this.annotations != null) {\r
-for (var annot, $annot = 0, $$annot = this.getAlignmentAnnotation (); $annot < $$annot.length && ((annot = $$annot[$annot]) || true); $annot++) {\r
-if (annot.autoCalculated == autoCalc && (name.equals (annot.label)) && (calcId == null || annot.getCalcId ().equals (calcId)) && annot.sequenceRef === seqRef && annot.groupRef === groupRef) {\r
-return annot;\r
-}}\r
-}var annot =  new jalview.datamodel.AlignmentAnnotation (name, name,  new Array (1), 0, 0, 1);\r
-annot.hasText = false;\r
-annot.setCalcId ( String.instantialize (calcId));\r
-annot.autoCalculated = autoCalc;\r
-if (seqRef != null) {\r
-annot.setSequenceRef (seqRef);\r
-}annot.groupRef = groupRef;\r
-this.addAnnotation (annot);\r
-return annot;\r
-}, "~S,~S,~B,jalview.datamodel.SequenceI,jalview.datamodel.SequenceGroup");\r
-Clazz.overrideMethod (c$, "findAnnotation", \r
-function (calcId) {\r
-var aa =  new java.util.ArrayList ();\r
-for (var a, $a = 0, $$a = this.getAlignmentAnnotation (); $a < $$a.length && ((a = $$a[$a]) || true); $a++) {\r
-if (a.getCalcId () === calcId || (a.getCalcId () != null && calcId != null && a.getCalcId ().equals (calcId))) {\r
-aa.add (a);\r
-}}\r
-return aa;\r
-}, "~S");\r
-Clazz.overrideMethod (c$, "findAnnotations", \r
-function (seq, calcId, label) {\r
-var aa =  new java.util.ArrayList ();\r
-for (var ann, $ann = 0, $$ann = this.getAlignmentAnnotation (); $ann < $$ann.length && ((ann = $$ann[$ann]) || true); $ann++) {\r
-if (ann.getCalcId () != null && ann.getCalcId ().equals (calcId) && ann.sequenceRef != null && ann.sequenceRef === seq && ann.label != null && ann.label.equals (label)) {\r
-aa.add (ann);\r
-}}\r
-return aa;\r
-}, "jalview.datamodel.SequenceI,~S,~S");\r
-Clazz.overrideMethod (c$, "moveSelectedSequencesByOne", \r
-function (sg, map, up) {\r
-{\r
-if (up) {\r
-for (var i = 1, iSize = this.sequences.size (); i < iSize; i++) {\r
-var seq = this.sequences.get (i);\r
-if (!sg.getSequences (map).contains (seq)) {\r
-continue;\r
-}var temp = this.sequences.get (i - 1);\r
-if (sg.getSequences (null).contains (temp)) {\r
-continue;\r
-}this.sequences.set (i, temp);\r
-this.sequences.set (i - 1, seq);\r
-}\r
-} else {\r
-for (var i = this.sequences.size () - 2; i > -1; i--) {\r
-var seq = this.sequences.get (i);\r
-if (!sg.getSequences (map).contains (seq)) {\r
-continue;\r
-}var temp = this.sequences.get (i + 1);\r
-if (sg.getSequences (map).contains (temp)) {\r
-continue;\r
-}this.sequences.set (i, temp);\r
-this.sequences.set (i + 1, seq);\r
-}\r
-}}}, "jalview.datamodel.SequenceGroup,java.util.Map,~B");\r
-Clazz.overrideMethod (c$, "validateAnnotation", \r
-function (alignmentAnnotation) {\r
-alignmentAnnotation.validateRangeAndDisplay ();\r
-if (this.isNucleotide () && alignmentAnnotation.isValidStruc ()) {\r
-this.$hasRNAStructure = true;\r
-}}, "jalview.datamodel.AlignmentAnnotation");\r
-Clazz.overrideMethod (c$, "getSeqrep", \r
-function () {\r
-return this.seqrep;\r
-});\r
-Clazz.overrideMethod (c$, "setSeqrep", \r
-function (seqrep) {\r
-this.seqrep = seqrep;\r
-}, "jalview.datamodel.SequenceI");\r
-Clazz.overrideMethod (c$, "hasSeqrep", \r
-function () {\r
-return this.seqrep != null;\r
-});\r
-Clazz.overrideMethod (c$, "getEndRes", \r
-function () {\r
-return this.getWidth () - 1;\r
-});\r
-Clazz.overrideMethod (c$, "getStartRes", \r
-function () {\r
-return 0;\r
-});\r
-Clazz.overrideMethod (c$, "getContext", \r
-function () {\r
-return this.dataset;\r
-});\r
-Clazz.defineMethod (c$, "alignAs", \r
-function (al) {\r
-return this.alignAs (al, false, true);\r
-}, "jalview.datamodel.AlignmentI");\r
-Clazz.defineMethod (c$, "alignAs", \r
-function (al, preserveMappedGaps, preserveUnmappedGaps) {\r
-var count = 0;\r
-var thisIsNucleotide = this.isNucleotide ();\r
-var thatIsProtein = !al.isNucleotide ();\r
-if (!thatIsProtein && !thisIsNucleotide) {\r
-return jalview.analysis.AlignmentUtils.alignProteinAsDna (this, al);\r
-}var thisGapChar = this.getGapCharacter ();\r
-var gap = thisIsNucleotide && thatIsProtein ? String.valueOf ( Clazz.newCharArray (-1, [thisGapChar, thisGapChar, thisGapChar])) : String.valueOf (thisGapChar);\r
-for (var alignTo, $alignTo = this.getSequences ().iterator (); $alignTo.hasNext () && ((alignTo = $alignTo.next ()) || true);) {\r
-count += jalview.analysis.AlignmentUtils.alignSequenceAs (alignTo, al, gap, preserveMappedGaps, preserveUnmappedGaps) ? 1 : 0;\r
-}\r
-return count;\r
-}, "jalview.datamodel.AlignmentI,~B,~B");\r
-Clazz.overrideMethod (c$, "getSequenceNames", \r
-function () {\r
-var names =  new java.util.HashSet ();\r
-for (var seq, $seq = this.getSequences ().iterator (); $seq.hasNext () && ((seq = $seq.next ()) || true);) {\r
-names.add (seq.getName ());\r
-}\r
-return names;\r
-});\r
-Clazz.overrideMethod (c$, "toString", \r
-function () {\r
-var seq = this.getSequencesArray ();\r
-{\r
-return "" + JSON.stringify(seq);\r
-}});\r
-Clazz.defineStatics (c$,\r
-"PROTEIN", 0,\r
-"NUCLEOTIDE", 1);\r
-});\r
+Clazz.declarePackage ("jalview.datamodel");
+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 () {
+c$ = Clazz.decorateAsClass (function () {
+this.dataset = null;
+this.sequences = null;
+this.groups = null;
+this.gapCharacter = '-';
+this.type = 1;
+this.$hasRNAStructure = false;
+this.annotations = null;
+this.hiddenSequences = null;
+this.alignmentProperties = null;
+this.codonFrameList = null;
+this.alignmentRefs = 0;
+this.seqrep = null;
+Clazz.instantialize (this, arguments);
+}, jalview.datamodel, "Alignment", null, jalview.datamodel.AlignmentI);
+Clazz.prepareFields (c$, function () {
+this.groups = java.util.Collections.synchronizedList ( new java.util.ArrayList ());
+this.hiddenSequences =  new jalview.datamodel.HiddenSequences (this);
+this.codonFrameList =  new java.util.LinkedHashSet ();
+});
+Clazz.defineMethod (c$, "initAlignment", 
+($fz = function (seqs) {
+var i = 0;
+if (jalview.util.Comparison.isNucleotide (seqs)) {
+this.type = 1;
+} else {
+this.type = 0;
+}this.sequences = java.util.Collections.synchronizedList ( new java.util.ArrayList ());
+for (i = 0; i < seqs.length; i++) {
+this.sequences.add (seqs[i]);
+}
+}, $fz.isPrivate = true, $fz), "~A");
+Clazz.makeConstructor (c$, 
+function (al) {
+var seqs = al.getSequencesArray ();
+for (var i = 0; i < seqs.length; i++) {
+seqs[i] =  new jalview.datamodel.Sequence (seqs[i]);
+}
+this.codonFrameList = (al).codonFrameList;
+this.initAlignment (seqs);
+}, "jalview.datamodel.AlignmentI");
+Clazz.makeConstructor (c$, 
+function (seqs) {
+this.initAlignment (seqs);
+}, "~A");
+c$.createAlignment = Clazz.defineMethod (c$, "createAlignment", 
+function (compactAlignment) {
+throw  new Error (jalview.util.MessageManager.getString ("error.alignment_cigararray_not_implemented"));
+}, "jalview.datamodel.CigarArray");
+Clazz.defineMethod (c$, "getSequences", 
+function () {
+return this.sequences;
+});
+Clazz.defineMethod (c$, "getSequences", 
+function (hiddenReps) {
+return this.sequences;
+}, "java.util.Map");
+Clazz.defineMethod (c$, "getSequencesArray", 
+function () {
+if (this.sequences == null) {
+return null;
+}{
+return this.sequences.toArray ( new Array (this.sequences.size ()));
+}});
+Clazz.overrideMethod (c$, "getSequencesByName", 
+function () {
+return jalview.analysis.AlignmentUtils.getSequencesByName (this);
+});
+Clazz.overrideMethod (c$, "getSequenceAt", 
+function (i) {
+{
+if (i > -1 && i < this.sequences.size ()) {
+return this.sequences.get (i);
+}}return null;
+}, "~N");
+Clazz.overrideMethod (c$, "addSequence", 
+function (snew) {
+if (this.dataset != null) {
+if (snew.getDatasetSequence () != null) {
+this.getDataset ().addSequence (snew.getDatasetSequence ());
+} else {
+var adding = snew.deriveSequence ();
+this.getDataset ().addSequence (adding.getDatasetSequence ());
+snew = adding;
+}}if (this.sequences == null) {
+this.initAlignment ( Clazz.newArray (-1, [snew]));
+} else {
+{
+this.sequences.add (snew);
+}}if (this.hiddenSequences != null) {
+this.hiddenSequences.adjustHeightSequenceAdded ();
+}}, "jalview.datamodel.SequenceI");
+Clazz.overrideMethod (c$, "setSequenceAt", 
+function (i, snew) {
+{
+this.deleteSequence (i);
+this.sequences.set (i, snew);
+}}, "~N,jalview.datamodel.SequenceI");
+Clazz.defineMethod (c$, "getGroups", 
+function () {
+return this.groups;
+});
+Clazz.overrideMethod (c$, "finalize", 
+function () {
+if (this.getDataset () != null) {
+this.getDataset ().removeAlignmentRef ();
+}this.dataset = null;
+this.sequences = null;
+this.groups = null;
+this.annotations = null;
+this.hiddenSequences = null;
+});
+Clazz.defineMethod (c$, "removeAlignmentRef", 
+($fz = function () {
+if (--this.alignmentRefs == 0) {
+this.finalize ();
+}}, $fz.isPrivate = true, $fz));
+Clazz.defineMethod (c$, "deleteSequence", 
+function (s) {
+this.deleteSequence (this.findIndex (s));
+}, "jalview.datamodel.SequenceI");
+Clazz.defineMethod (c$, "deleteSequence", 
+function (i) {
+if (i > -1 && i < this.getHeight ()) {
+{
+this.sequences.remove (i);
+this.hiddenSequences.adjustHeightSequenceDeleted (i);
+}}}, "~N");
+Clazz.overrideMethod (c$, "findGroup", 
+function (s) {
+{
+for (var i = 0; i < this.groups.size (); i++) {
+var sg = this.groups.get (i);
+if (sg.getSequences (null).contains (s)) {
+return sg;
+}}
+}return null;
+}, "jalview.datamodel.SequenceI");
+Clazz.overrideMethod (c$, "findAllGroups", 
+function (s) {
+var temp =  new java.util.ArrayList ();
+{
+var gSize = this.groups.size ();
+for (var i = 0; i < gSize; i++) {
+var sg = this.groups.get (i);
+if (sg == null || sg.getSequences () == null) {
+this.deleteGroup (sg);
+gSize--;
+continue;
+}if (sg.getSequences ().contains (s)) {
+temp.add (sg);
+}}
+}var ret =  new Array (temp.size ());
+return temp.toArray (ret);
+}, "jalview.datamodel.SequenceI");
+Clazz.overrideMethod (c$, "addGroup", 
+function (sg) {
+{
+if (!this.groups.contains (sg)) {
+if (this.hiddenSequences.getSize () > 0) {
+var i;
+var iSize = sg.getSize ();
+for (i = 0; i < iSize; i++) {
+if (!this.sequences.contains (sg.getSequenceAt (i))) {
+sg.deleteSequence (sg.getSequenceAt (i), false);
+iSize--;
+i--;
+}}
+if (sg.getSize () < 1) {
+return;
+}}sg.setContext (this);
+this.groups.add (sg);
+}}}, "jalview.datamodel.SequenceGroup");
+Clazz.defineMethod (c$, "removeAnnotationForGroup", 
+($fz = function (gp) {
+if (this.annotations == null || this.annotations.length == 0) {
+return;
+}var t;
+var todelete =  new Array (this.annotations.length);
+var tokeep =  new Array (this.annotations.length);
+var i;
+var p;
+var k;
+if (gp == null) {
+for (i = 0, p = 0, k = 0; i < this.annotations.length; i++) {
+if (this.annotations[i].groupRef != null) {
+todelete[p++] = this.annotations[i];
+} else {
+tokeep[k++] = this.annotations[i];
+}}
+} else {
+for (i = 0, p = 0, k = 0; i < this.annotations.length; i++) {
+if (this.annotations[i].groupRef === gp) {
+todelete[p++] = this.annotations[i];
+} else {
+tokeep[k++] = this.annotations[i];
+}}
+}if (p > 0) {
+for (i = 0; i < p; i++) {
+this.unhookAnnotation (todelete[i]);
+todelete[i] = null;
+}
+t =  new Array (k);
+for (i = 0; i < k; i++) {
+t[i] = tokeep[i];
+}
+this.annotations = t;
+}}, $fz.isPrivate = true, $fz), "jalview.datamodel.SequenceGroup");
+Clazz.overrideMethod (c$, "deleteAllGroups", 
+function () {
+{
+if (this.annotations != null) {
+this.removeAnnotationForGroup (null);
+}for (var sg, $sg = this.groups.iterator (); $sg.hasNext () && ((sg = $sg.next ()) || true);) {
+sg.setContext (null);
+}
+this.groups.clear ();
+}});
+Clazz.overrideMethod (c$, "deleteGroup", 
+function (g) {
+{
+if (this.groups.contains (g)) {
+this.removeAnnotationForGroup (g);
+this.groups.remove (g);
+g.setContext (null);
+}}}, "jalview.datamodel.SequenceGroup");
+Clazz.defineMethod (c$, "findName", 
+function (name) {
+return this.findName (name, false);
+}, "~S");
+Clazz.defineMethod (c$, "findName", 
+function (token, b) {
+return this.findName (null, token, b);
+}, "~S,~B");
+Clazz.defineMethod (c$, "findName", 
+function (startAfter, token, b) {
+var i = 0;
+var sq = null;
+var sqname = null;
+if (startAfter != null) {
+var matched = false;
+while (i < this.sequences.size ()) {
+if (this.getSequenceAt (i++) === startAfter) {
+matched = true;
+break;
+}}
+if (!matched) {
+i = 0;
+}}while (i < this.sequences.size ()) {
+sq = this.getSequenceAt (i);
+sqname = sq.getName ();
+if (sqname.equals (token) || (b && (sqname.equalsIgnoreCase (token)))) {
+return this.getSequenceAt (i);
+}i++;
+}
+return null;
+}, "jalview.datamodel.SequenceI,~S,~B");
+Clazz.overrideMethod (c$, "findSequenceMatch", 
+function (name) {
+var matches =  new java.util.Vector ();
+var i = 0;
+while (i < this.sequences.size ()) {
+if (this.getSequenceAt (i).getName ().equals (name)) {
+matches.addElement (this.getSequenceAt (i));
+}i++;
+}
+var result =  new Array (matches.size ());
+for (i = 0; i < result.length; i++) {
+result[i] = matches.elementAt (i);
+}
+return result;
+}, "~S");
+Clazz.defineMethod (c$, "findIndex", 
+function (s) {
+var i = 0;
+while (i < this.sequences.size ()) {
+if (s === this.getSequenceAt (i)) {
+return i;
+}i++;
+}
+return -1;
+}, "jalview.datamodel.SequenceI");
+Clazz.defineMethod (c$, "findIndex", 
+function (results) {
+var i = 0;
+while (i < this.sequences.size ()) {
+if (results.involvesSequence (this.getSequenceAt (i))) {
+return i;
+}i++;
+}
+return -1;
+}, "jalview.datamodel.SearchResults");
+Clazz.overrideMethod (c$, "getHeight", 
+function () {
+return this.sequences.size ();
+});
+Clazz.overrideMethod (c$, "getWidth", 
+function () {
+var maxLength = -1;
+for (var i = 0; i < this.sequences.size (); i++) {
+if (this.getSequenceAt (i).getLength () > maxLength) {
+maxLength = this.getSequenceAt (i).getLength ();
+}}
+return maxLength;
+});
+Clazz.overrideMethod (c$, "setGapCharacter", 
+function (gc) {
+this.gapCharacter = gc;
+{
+for (var seq, $seq = this.sequences.iterator (); $seq.hasNext () && ((seq = $seq.next ()) || true);) {
+seq.setSequence (seq.getSequenceAsString ().$replace ('.', gc).$replace ('-', gc).$replace (' ', gc));
+}
+}}, "~S");
+Clazz.defineMethod (c$, "getGapCharacter", 
+function () {
+return this.gapCharacter;
+});
+Clazz.defineMethod (c$, "isAligned", 
+function () {
+return this.isAligned (false);
+});
+Clazz.defineMethod (c$, "isAligned", 
+function (includeHidden) {
+var width = this.getWidth ();
+if (this.hiddenSequences == null || this.hiddenSequences.getSize () == 0) {
+includeHidden = true;
+}for (var i = 0; i < this.sequences.size (); i++) {
+if (includeHidden || !this.hiddenSequences.isHidden (this.getSequenceAt (i))) {
+if (this.getSequenceAt (i).getLength () != width) {
+return false;
+}}}
+return true;
+}, "~B");
+Clazz.overrideMethod (c$, "deleteAllAnnotations", 
+function (includingAutoCalculated) {
+var result = false;
+for (var alan, $alan = 0, $$alan = this.getAlignmentAnnotation (); $alan < $$alan.length && ((alan = $$alan[$alan]) || true); $alan++) {
+if (!alan.autoCalculated || includingAutoCalculated) {
+this.deleteAnnotation (alan);
+result = true;
+}}
+return result;
+}, "~B");
+Clazz.defineMethod (c$, "deleteAnnotation", 
+function (aa) {
+return this.deleteAnnotation (aa, true);
+}, "jalview.datamodel.AlignmentAnnotation");
+Clazz.defineMethod (c$, "deleteAnnotation", 
+function (aa, unhook) {
+var aSize = 1;
+if (this.annotations != null) {
+aSize = this.annotations.length;
+}if (aSize < 1) {
+return false;
+}var temp =  new Array (aSize - 1);
+var swap = false;
+var tIndex = 0;
+for (var i = 0; i < aSize; i++) {
+if (this.annotations[i] === aa) {
+swap = true;
+continue;
+}if (tIndex < temp.length) {
+temp[tIndex++] = this.annotations[i];
+}}
+if (swap) {
+this.annotations = temp;
+if (unhook) {
+this.unhookAnnotation (aa);
+}}return swap;
+}, "jalview.datamodel.AlignmentAnnotation,~B");
+Clazz.defineMethod (c$, "unhookAnnotation", 
+($fz = function (aa) {
+if (aa.sequenceRef != null) {
+aa.sequenceRef.removeAlignmentAnnotation (aa);
+}if (aa.groupRef != null) {
+aa.groupRef = null;
+}}, $fz.isPrivate = true, $fz), "jalview.datamodel.AlignmentAnnotation");
+Clazz.defineMethod (c$, "addAnnotation", 
+function (aa) {
+this.addAnnotation (aa, -1);
+}, "jalview.datamodel.AlignmentAnnotation");
+Clazz.defineMethod (c$, "addAnnotation", 
+function (aa, pos) {
+if (aa.getRNAStruc () != null) {
+this.$hasRNAStructure = true;
+}var aSize = 1;
+if (this.annotations != null) {
+aSize = this.annotations.length + 1;
+}var temp =  new Array (aSize);
+var i = 0;
+if (pos == -1 || pos >= aSize) {
+temp[aSize - 1] = aa;
+} else {
+temp[pos] = aa;
+}if (aSize > 1) {
+var p = 0;
+for (i = 0; i < (aSize - 1); i++, p++) {
+if (p == pos) {
+p++;
+}if (p < temp.length) {
+temp[p] = this.annotations[i];
+}}
+}this.annotations = temp;
+}, "jalview.datamodel.AlignmentAnnotation,~N");
+Clazz.overrideMethod (c$, "setAnnotationIndex", 
+function (aa, index) {
+if (aa == null || this.annotations == null || this.annotations.length - 1 < index) {
+return;
+}var aSize = this.annotations.length;
+var temp =  new Array (aSize);
+temp[index] = aa;
+for (var i = 0; i < aSize; i++) {
+if (i == index) {
+continue;
+}if (i < index) {
+temp[i] = this.annotations[i];
+} else {
+temp[i] = this.annotations[i - 1];
+}}
+this.annotations = temp;
+}, "jalview.datamodel.AlignmentAnnotation,~N");
+Clazz.defineMethod (c$, "getAlignmentAnnotation", 
+function () {
+return this.annotations;
+});
+Clazz.overrideMethod (c$, "setNucleotide", 
+function (b) {
+if (b) {
+this.type = 1;
+} else {
+this.type = 0;
+}}, "~B");
+Clazz.defineMethod (c$, "isNucleotide", 
+function () {
+if (this.type == 1) {
+return true;
+} else {
+return false;
+}});
+Clazz.overrideMethod (c$, "hasRNAStructure", 
+function () {
+return this.$hasRNAStructure;
+});
+Clazz.overrideMethod (c$, "setDataset", 
+function (data) {
+if (this.dataset == null && data == null) {
+var seqs =  new Array (this.getHeight ());
+var currentSeq;
+for (var i = 0; i < this.getHeight (); i++) {
+currentSeq = this.getSequenceAt (i);
+if (currentSeq.getDatasetSequence () != null) {
+seqs[i] = currentSeq.getDatasetSequence ();
+} else {
+seqs[i] = currentSeq.createDatasetSequence ();
+}}
+this.dataset =  new jalview.datamodel.Alignment (seqs);
+} else if (this.dataset == null && data != null) {
+this.dataset = data;
+for (var i = 0; i < this.getHeight (); i++) {
+var currentSeq = this.getSequenceAt (i);
+var dsq = currentSeq.getDatasetSequence ();
+if (dsq == null) {
+dsq = currentSeq.createDatasetSequence ();
+this.dataset.addSequence (dsq);
+} else {
+while (dsq.getDatasetSequence () != null) {
+dsq = dsq.getDatasetSequence ();
+}
+if (this.dataset.findIndex (dsq) == -1) {
+this.dataset.addSequence (dsq);
+}}}
+}this.dataset.addAlignmentRef ();
+}, "jalview.datamodel.Alignment");
+Clazz.defineMethod (c$, "addAlignmentRef", 
+($fz = function () {
+this.alignmentRefs++;
+}, $fz.isPrivate = true, $fz));
+Clazz.overrideMethod (c$, "getDataset", 
+function () {
+return this.dataset;
+});
+Clazz.overrideMethod (c$, "padGaps", 
+function () {
+var modified = false;
+var maxLength = -1;
+var current;
+for (var i = 0; i < this.sequences.size (); i++) {
+current = this.getSequenceAt (i);
+for (var j = current.getLength (); j > maxLength; j--) {
+if (j > maxLength && !jalview.util.Comparison.isGap (current.getCharAt (j))) {
+maxLength = j;
+break;
+}}
+}
+maxLength++;
+var cLength;
+for (var i = 0; i < this.sequences.size (); i++) {
+current = this.getSequenceAt (i);
+cLength = current.getLength ();
+if (cLength < maxLength) {
+current.insertCharAt (cLength, maxLength - cLength, this.gapCharacter);
+modified = true;
+} else if (current.getLength () > maxLength) {
+current.deleteChars (maxLength, current.getLength ());
+}}
+return modified;
+});
+Clazz.overrideMethod (c$, "justify", 
+function (right) {
+var modified = false;
+var maxLength = -1;
+var ends =  Clazz.newIntArray (this.sequences.size () * 2, 0);
+var current;
+for (var i = 0; i < this.sequences.size (); i++) {
+current = this.getSequenceAt (i);
+ends[i * 2] = current.findIndex (current.getStart ());
+ends[i * 2 + 1] = current.findIndex (current.getStart () + current.getLength ());
+var hitres = false;
+for (var j = 0, rs = 0, ssiz = current.getLength (); j < ssiz; j++) {
+if (!jalview.util.Comparison.isGap (current.getCharAt (j))) {
+if (!hitres) {
+ends[i * 2] = j;
+hitres = true;
+} else {
+ends[i * 2 + 1] = j;
+if (j - ends[i * 2] > maxLength) {
+maxLength = j - ends[i * 2];
+}}}}
+}
+maxLength++;
+var cLength;
+var extent;
+var diff;
+for (var i = 0; i < this.sequences.size (); i++) {
+current = this.getSequenceAt (i);
+cLength = 1 + ends[i * 2 + 1] - ends[i * 2];
+diff = maxLength - cLength;
+extent = current.getLength ();
+if (right) {
+if (extent > ends[i * 2 + 1]) {
+current.deleteChars (ends[i * 2 + 1] + 1, extent);
+modified = true;
+}if (ends[i * 2] > diff) {
+current.deleteChars (0, ends[i * 2] - diff);
+modified = true;
+} else {
+if (ends[i * 2] < diff) {
+current.insertCharAt (0, diff - ends[i * 2], this.gapCharacter);
+modified = true;
+}}} else {
+if (ends[i * 2] > 0) {
+current.deleteChars (0, ends[i * 2]);
+modified = true;
+ends[i * 2 + 1] -= ends[i * 2];
+extent -= ends[i * 2];
+}if (extent > maxLength) {
+current.deleteChars (maxLength + 1, extent);
+modified = true;
+} else {
+if (extent < maxLength) {
+current.insertCharAt (extent, maxLength - extent, this.gapCharacter);
+modified = true;
+}}}}
+return modified;
+}, "~B");
+Clazz.defineMethod (c$, "getHiddenSequences", 
+function () {
+return this.hiddenSequences;
+});
+Clazz.overrideMethod (c$, "getCompactAlignment", 
+function () {
+{
+var alseqs =  new Array (this.sequences.size ());
+var i = 0;
+for (var seq, $seq = this.sequences.iterator (); $seq.hasNext () && ((seq = $seq.next ()) || true);) {
+alseqs[i++] =  new jalview.datamodel.SeqCigar (seq);
+}
+var cal =  new jalview.datamodel.CigarArray (alseqs);
+cal.addOperation ('M', this.getWidth ());
+return cal;
+}});
+Clazz.overrideMethod (c$, "setProperty", 
+function (key, value) {
+if (this.alignmentProperties == null) {
+this.alignmentProperties =  new java.util.Hashtable ();
+}this.alignmentProperties.put (key, value);
+}, "~O,~O");
+Clazz.defineMethod (c$, "getProperty", 
+function (key) {
+if (this.alignmentProperties != null) {
+return this.alignmentProperties.get (key);
+} else {
+return null;
+}}, "~O");
+Clazz.defineMethod (c$, "getProperties", 
+function () {
+return this.alignmentProperties;
+});
+Clazz.overrideMethod (c$, "addCodonFrame", 
+function (codons) {
+if (codons != null) {
+this.codonFrameList.add (codons);
+}}, "jalview.datamodel.AlignedCodonFrame");
+Clazz.overrideMethod (c$, "getCodonFrame", 
+function (seq) {
+if (seq == null) {
+return null;
+}var cframes =  new java.util.ArrayList ();
+for (var acf, $acf = this.codonFrameList.iterator (); $acf.hasNext () && ((acf = $acf.next ()) || true);) {
+if (acf.involvesSequence (seq)) {
+cframes.add (acf);
+}}
+return cframes;
+}, "jalview.datamodel.SequenceI");
+Clazz.overrideMethod (c$, "setCodonFrames", 
+function (acfs) {
+this.codonFrameList = acfs;
+}, "java.util.Set");
+Clazz.defineMethod (c$, "getCodonFrames", 
+function () {
+return this.codonFrameList;
+});
+Clazz.overrideMethod (c$, "removeCodonFrame", 
+function (codons) {
+if (codons == null || this.codonFrameList == null) {
+return false;
+}return this.codonFrameList.remove (codons);
+}, "jalview.datamodel.AlignedCodonFrame");
+Clazz.overrideMethod (c$, "append", 
+function (toappend) {
+if (toappend === this) {
+System.err.println ("Self append may cause a deadlock.");
+}var samegap = toappend.getGapCharacter () == this.getGapCharacter ();
+var oldc = toappend.getGapCharacter ();
+var hashidden = toappend.getHiddenSequences () != null && toappend.getHiddenSequences ().hiddenSequences != null;
+var sqs = (hashidden) ? toappend.getHiddenSequences ().getFullAlignment ().getSequences () : toappend.getSequences ();
+if (sqs != null) {
+{
+for (var addedsq, $addedsq = sqs.iterator (); $addedsq.hasNext () && ((addedsq = $addedsq.next ()) || true);) {
+if (!samegap) {
+var oldseq = addedsq.getSequence ();
+for (var c = 0; c < oldseq.length; c++) {
+if (oldseq[c] == oldc) {
+oldseq[c] = this.gapCharacter;
+}}
+}this.addSequence (addedsq);
+}
+}}var alan = toappend.getAlignmentAnnotation ();
+for (var a = 0; alan != null && a < alan.length; a++) {
+this.addAnnotation (alan[a]);
+}
+this.codonFrameList.addAll (toappend.getCodonFrames ());
+var sg = toappend.getGroups ();
+if (sg != null) {
+for (var _sg, $_sg = sg.iterator (); $_sg.hasNext () && ((_sg = $_sg.next ()) || true);) {
+this.addGroup (_sg);
+}
+}if (toappend.getHiddenSequences () != null) {
+var hs = toappend.getHiddenSequences ();
+if (this.hiddenSequences == null) {
+this.hiddenSequences =  new jalview.datamodel.HiddenSequences (this);
+}if (hs.hiddenSequences != null) {
+for (var s = 0; s < hs.hiddenSequences.length; s++) {
+if (hs.hiddenSequences[s] != null) {
+this.hiddenSequences.hideSequence (hs.hiddenSequences[s]);
+}}
+}}if (toappend.getProperties () != null) {
+var key = toappend.getProperties ().keys ();
+while (key.hasMoreElements ()) {
+var k = key.nextElement ();
+var ourval = this.getProperty (k);
+var toapprop = toappend.getProperty (k);
+if (ourval != null) {
+if (ourval.getClass ().equals (toapprop.getClass ()) && !ourval.equals (toapprop)) {
+if (Clazz.instanceOf (ourval, String)) {
+this.setProperty (k, (ourval) + "; " + (toapprop));
+} else {
+if (Clazz.instanceOf (ourval, java.util.Vector)) {
+var theirv = (toapprop).elements ();
+while (theirv.hasMoreElements ()) {
+(ourval).addElement (theirv);
+}
+}}}} else {
+this.setProperty (k, toapprop);
+}}
+}}, "jalview.datamodel.AlignmentI");
+Clazz.overrideMethod (c$, "findOrCreateAnnotation", 
+function (name, calcId, autoCalc, seqRef, groupRef) {
+if (this.annotations != null) {
+for (var annot, $annot = 0, $$annot = this.getAlignmentAnnotation (); $annot < $$annot.length && ((annot = $$annot[$annot]) || true); $annot++) {
+if (annot.autoCalculated == autoCalc && (name.equals (annot.label)) && (calcId == null || annot.getCalcId ().equals (calcId)) && annot.sequenceRef === seqRef && annot.groupRef === groupRef) {
+return annot;
+}}
+}var annot =  new jalview.datamodel.AlignmentAnnotation (name, name,  new Array (1), 0, 0, 1);
+annot.hasText = false;
+annot.setCalcId ( String.instantialize (calcId));
+annot.autoCalculated = autoCalc;
+if (seqRef != null) {
+annot.setSequenceRef (seqRef);
+}annot.groupRef = groupRef;
+this.addAnnotation (annot);
+return annot;
+}, "~S,~S,~B,jalview.datamodel.SequenceI,jalview.datamodel.SequenceGroup");
+Clazz.overrideMethod (c$, "findAnnotation", 
+function (calcId) {
+var aa =  new java.util.ArrayList ();
+for (var a, $a = 0, $$a = this.getAlignmentAnnotation (); $a < $$a.length && ((a = $$a[$a]) || true); $a++) {
+if (a.getCalcId () === calcId || (a.getCalcId () != null && calcId != null && a.getCalcId ().equals (calcId))) {
+aa.add (a);
+}}
+return aa;
+}, "~S");
+Clazz.overrideMethod (c$, "findAnnotations", 
+function (seq, calcId, label) {
+var aa =  new java.util.ArrayList ();
+for (var ann, $ann = 0, $$ann = this.getAlignmentAnnotation (); $ann < $$ann.length && ((ann = $$ann[$ann]) || true); $ann++) {
+if (ann.getCalcId () != null && ann.getCalcId ().equals (calcId) && ann.sequenceRef != null && ann.sequenceRef === seq && ann.label != null && ann.label.equals (label)) {
+aa.add (ann);
+}}
+return aa;
+}, "jalview.datamodel.SequenceI,~S,~S");
+Clazz.overrideMethod (c$, "moveSelectedSequencesByOne", 
+function (sg, map, up) {
+{
+if (up) {
+for (var i = 1, iSize = this.sequences.size (); i < iSize; i++) {
+var seq = this.sequences.get (i);
+if (!sg.getSequences (map).contains (seq)) {
+continue;
+}var temp = this.sequences.get (i - 1);
+if (sg.getSequences (null).contains (temp)) {
+continue;
+}this.sequences.set (i, temp);
+this.sequences.set (i - 1, seq);
+}
+} else {
+for (var i = this.sequences.size () - 2; i > -1; i--) {
+var seq = this.sequences.get (i);
+if (!sg.getSequences (map).contains (seq)) {
+continue;
+}var temp = this.sequences.get (i + 1);
+if (sg.getSequences (map).contains (temp)) {
+continue;
+}this.sequences.set (i, temp);
+this.sequences.set (i + 1, seq);
+}
+}}}, "jalview.datamodel.SequenceGroup,java.util.Map,~B");
+Clazz.overrideMethod (c$, "validateAnnotation", 
+function (alignmentAnnotation) {
+alignmentAnnotation.validateRangeAndDisplay ();
+if (this.isNucleotide () && alignmentAnnotation.isValidStruc ()) {
+this.$hasRNAStructure = true;
+}}, "jalview.datamodel.AlignmentAnnotation");
+Clazz.overrideMethod (c$, "getSeqrep", 
+function () {
+return this.seqrep;
+});
+Clazz.overrideMethod (c$, "setSeqrep", 
+function (seqrep) {
+this.seqrep = seqrep;
+}, "jalview.datamodel.SequenceI");
+Clazz.overrideMethod (c$, "hasSeqrep", 
+function () {
+return this.seqrep != null;
+});
+Clazz.overrideMethod (c$, "getEndRes", 
+function () {
+return this.getWidth () - 1;
+});
+Clazz.overrideMethod (c$, "getStartRes", 
+function () {
+return 0;
+});
+Clazz.overrideMethod (c$, "getContext", 
+function () {
+return this.dataset;
+});
+Clazz.defineMethod (c$, "alignAs", 
+function (al) {
+return this.alignAs (al, false, true);
+}, "jalview.datamodel.AlignmentI");
+Clazz.defineMethod (c$, "alignAs", 
+function (al, preserveMappedGaps, preserveUnmappedGaps) {
+var count = 0;
+var thisIsNucleotide = this.isNucleotide ();
+var thatIsProtein = !al.isNucleotide ();
+if (!thatIsProtein && !thisIsNucleotide) {
+return jalview.analysis.AlignmentUtils.alignProteinAsDna (this, al);
+}var thisGapChar = this.getGapCharacter ();
+var gap = thisIsNucleotide && thatIsProtein ? String.valueOf ( Clazz.newCharArray (-1, [thisGapChar, thisGapChar, thisGapChar])) : String.valueOf (thisGapChar);
+for (var alignTo, $alignTo = this.getSequences ().iterator (); $alignTo.hasNext () && ((alignTo = $alignTo.next ()) || true);) {
+count += jalview.analysis.AlignmentUtils.alignSequenceAs (alignTo, al, gap, preserveMappedGaps, preserveUnmappedGaps) ? 1 : 0;
+}
+return count;
+}, "jalview.datamodel.AlignmentI,~B,~B");
+Clazz.overrideMethod (c$, "getSequenceNames", 
+function () {
+var names =  new java.util.HashSet ();
+for (var seq, $seq = this.getSequences ().iterator (); $seq.hasNext () && ((seq = $seq.next ()) || true);) {
+names.add (seq.getName ());
+}
+return names;
+});
+Clazz.overrideMethod (c$, "toString", 
+function () {
+var seq = this.getSequencesArray ();
+{
+return "" + JSON.stringify(seq);
+}});
+Clazz.defineStatics (c$,
+"PROTEIN", 0,
+"NUCLEOTIDE", 1);
+});