JAL-1807 still testing
[jalviewjs.git] / bin / jalview / datamodel / Alignment.js
index a4d45ee..f70f6ce 100644 (file)
-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);
-});
+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