JAL-1807 includes ?j2sdebug flag and DebugJS._(msg)
[jalviewjs.git] / bin / jalview / analysis / AlignmentUtils.js
index 6af5e7a..2990b03 100644 (file)
-Clazz.declarePackage ("jalview.analysis");\r
-Clazz.load (null, "jalview.analysis.AlignmentUtils", ["jalview.analysis.CodonComparator", "jalview.datamodel.AlignedCodonFrame", "$.Alignment", "$.AlignmentAnnotation", "$.DBRefEntry", "$.DBRefSource", "$.FeatureProperties", "$.SearchResults", "$.Sequence", "jalview.schemes.ResidueProperties", "jalview.util.DBRefUtils", "$.MapList", "$.MappingUtils", "java.lang.StringBuilder", "java.util.ArrayList", "$.Arrays", "$.HashMap", "$.HashSet", "$.LinkedHashMap", "$.LinkedHashSet", "$.TreeMap"], function () {\r
-c$ = Clazz.declareType (jalview.analysis, "AlignmentUtils");\r
-c$.expandContext = Clazz.defineMethod (c$, "expandContext", \r
-function (core, flankSize) {\r
-var sq =  new java.util.ArrayList ();\r
-var maxoffset = 0;\r
-for (var s, $s = core.getSequences ().iterator (); $s.hasNext () && ((s = $s.next ()) || true);) {\r
-var newSeq = s.deriveSequence ();\r
-var newSeqStart = newSeq.getStart () - 1;\r
-if (newSeqStart > maxoffset && newSeq.getDatasetSequence ().getStart () < s.getStart ()) {\r
-maxoffset = newSeqStart;\r
-}sq.add (newSeq);\r
-}\r
-if (flankSize > -1) {\r
-maxoffset = Math.min (maxoffset, flankSize);\r
-}for (var s, $s = sq.iterator (); $s.hasNext () && ((s = $s.next ()) || true);) {\r
-var ds = s;\r
-while (ds.getDatasetSequence () != null) {\r
-ds = ds.getDatasetSequence ();\r
-}\r
-var s_end = s.findPosition (s.getStart () + s.getLength ());\r
-var ustream_ds = s.getStart () - ds.getStart ();\r
-var dstream_ds = ds.getEnd () - s_end;\r
-var offset = maxoffset - ustream_ds;\r
-if (flankSize >= 0) {\r
-if (flankSize < ustream_ds) {\r
-offset = maxoffset - flankSize;\r
-ustream_ds = flankSize;\r
-}if (flankSize <= dstream_ds) {\r
-dstream_ds = flankSize - 1;\r
-}}var upstream =  String.instantialize (ds.getSequence (s.getStart () - 1 - ustream_ds, s.getStart () - 1)).toLowerCase ().toCharArray ();\r
-var downstream =  String.instantialize (ds.getSequence (s_end - 1, s_end + dstream_ds)).toLowerCase ().toCharArray ();\r
-var coreseq = s.getSequence ();\r
-var nseq =  Clazz.newCharArray (offset + upstream.length + downstream.length + coreseq.length, '\0');\r
-var c = core.getGapCharacter ();\r
-var p = 0;\r
-for (; p < offset; p++) {\r
-nseq[p] = c;\r
-}\r
-System.arraycopy (upstream, 0, nseq, p, upstream.length);\r
-System.arraycopy (coreseq, 0, nseq, p + upstream.length, coreseq.length);\r
-System.arraycopy (downstream, 0, nseq, p + coreseq.length + upstream.length, downstream.length);\r
-s.setSequence ( String.instantialize (nseq));\r
-s.setStart (s.getStart () - ustream_ds);\r
-s.setEnd (s_end + downstream.length);\r
-}\r
-var newAl =  new jalview.datamodel.Alignment (sq.toArray ( new Array (0)));\r
-for (var s, $s = sq.iterator (); $s.hasNext () && ((s = $s.next ()) || true);) {\r
-if (s.getAnnotation () != null) {\r
-for (var aa, $aa = 0, $$aa = s.getAnnotation (); $aa < $$aa.length && ((aa = $$aa[$aa]) || true); $aa++) {\r
-aa.adjustForAlignment ();\r
-newAl.addAnnotation (aa);\r
-}\r
-}}\r
-newAl.setDataset (core.getDataset ());\r
-return newAl;\r
-}, "jalview.datamodel.AlignmentI,~N");\r
-c$.getSequenceIndex = Clazz.defineMethod (c$, "getSequenceIndex", \r
-function (al, seq) {\r
-var result = -1;\r
-var pos = 0;\r
-for (var alSeq, $alSeq = al.getSequences ().iterator (); $alSeq.hasNext () && ((alSeq = $alSeq.next ()) || true);) {\r
-if (alSeq === seq) {\r
-result = pos;\r
-break;\r
-}pos++;\r
-}\r
-return result;\r
-}, "jalview.datamodel.AlignmentI,jalview.datamodel.SequenceI");\r
-c$.getSequencesByName = Clazz.defineMethod (c$, "getSequencesByName", \r
-function (al) {\r
-var theMap =  new java.util.LinkedHashMap ();\r
-for (var seq, $seq = al.getSequences ().iterator (); $seq.hasNext () && ((seq = $seq.next ()) || true);) {\r
-var name = seq.getName ();\r
-if (name != null) {\r
-var seqs = theMap.get (name);\r
-if (seqs == null) {\r
-seqs =  new java.util.ArrayList ();\r
-theMap.put (name, seqs);\r
-}seqs.add (seq);\r
-}}\r
-return theMap;\r
-}, "jalview.datamodel.AlignmentI");\r
-c$.mapProteinToCdna = Clazz.defineMethod (c$, "mapProteinToCdna", \r
-function (proteinAlignment, cdnaAlignment) {\r
-if (proteinAlignment == null || cdnaAlignment == null) {\r
-return false;\r
-}var mappedDna =  new java.util.HashSet ();\r
-var mappedProtein =  new java.util.HashSet ();\r
-var mappingPerformed = jalview.analysis.AlignmentUtils.mapProteinToCdna (proteinAlignment, cdnaAlignment, mappedDna, mappedProtein, true);\r
-mappingPerformed = new Boolean (mappingPerformed | jalview.analysis.AlignmentUtils.mapProteinToCdna (proteinAlignment, cdnaAlignment, mappedDna, mappedProtein, false)).valueOf ();\r
-return mappingPerformed;\r
-}, "jalview.datamodel.AlignmentI,jalview.datamodel.AlignmentI");\r
-c$.mapProteinToCdna = Clazz.defineMethod (c$, "mapProteinToCdna", \r
-function (proteinAlignment, cdnaAlignment, mappedDna, mappedProtein, xrefsOnly) {\r
-var mappingPerformed = false;\r
-var thisSeqs = proteinAlignment.getSequences ();\r
-for (var aaSeq, $aaSeq = thisSeqs.iterator (); $aaSeq.hasNext () && ((aaSeq = $aaSeq.next ()) || true);) {\r
-var proteinMapped = false;\r
-var acf =  new jalview.datamodel.AlignedCodonFrame ();\r
-for (var cdnaSeq, $cdnaSeq = cdnaAlignment.getSequences ().iterator (); $cdnaSeq.hasNext () && ((cdnaSeq = $cdnaSeq.next ()) || true);) {\r
-if (xrefsOnly && !jalview.analysis.AlignmentUtils.haveCrossRef (aaSeq, cdnaSeq)) {\r
-continue;\r
-}if (!xrefsOnly && (mappedProtein.contains (aaSeq) || mappedDna.contains (cdnaSeq))) {\r
-continue;\r
-}if (!jalview.analysis.AlignmentUtils.mappingExists (proteinAlignment.getCodonFrames (), aaSeq.getDatasetSequence (), cdnaSeq.getDatasetSequence ())) {\r
-var map = jalview.analysis.AlignmentUtils.mapProteinToCdna (aaSeq, cdnaSeq);\r
-if (map != null) {\r
-acf.addMap (cdnaSeq, aaSeq, map);\r
-mappingPerformed = true;\r
-proteinMapped = true;\r
-mappedDna.add (cdnaSeq);\r
-mappedProtein.add (aaSeq);\r
-}}}\r
-if (proteinMapped) {\r
-proteinAlignment.addCodonFrame (acf);\r
-}}\r
-return mappingPerformed;\r
-}, "jalview.datamodel.AlignmentI,jalview.datamodel.AlignmentI,java.util.Set,java.util.Set,~B");\r
-c$.mappingExists = Clazz.defineMethod (c$, "mappingExists", \r
-function (set, aaSeq, cdnaSeq) {\r
-if (set != null) {\r
-for (var acf, $acf = set.iterator (); $acf.hasNext () && ((acf = $acf.next ()) || true);) {\r
-if (cdnaSeq === acf.getDnaForAaSeq (aaSeq)) {\r
-return true;\r
-}}\r
-}return false;\r
-}, "java.util.Set,jalview.datamodel.SequenceI,jalview.datamodel.SequenceI");\r
-c$.mapProteinToCdna = Clazz.defineMethod (c$, "mapProteinToCdna", \r
-function (proteinSeq, cdnaSeq) {\r
-var proteinDataset = proteinSeq.getDatasetSequence ();\r
-var aaSeqChars = proteinDataset != null ? proteinDataset.getSequence () : proteinSeq.getSequence ();\r
-var cdnaDataset = cdnaSeq.getDatasetSequence ();\r
-var cdnaSeqChars = cdnaDataset != null ? cdnaDataset.getSequence () : cdnaSeq.getSequence ();\r
-if (aaSeqChars == null || cdnaSeqChars == null) {\r
-return null;\r
-}var mappedLength = 3 * aaSeqChars.length;\r
-var cdnaLength = cdnaSeqChars.length;\r
-var cdnaStart = 1;\r
-var cdnaEnd = cdnaLength;\r
-var proteinStart = 1;\r
-var proteinEnd = aaSeqChars.length;\r
-if (cdnaLength != mappedLength && cdnaLength > 2) {\r
-var lastCodon = String.valueOf (cdnaSeqChars, cdnaLength - 3, 3).toUpperCase ();\r
-for (var stop, $stop = jalview.schemes.ResidueProperties.STOP.iterator (); $stop.hasNext () && ((stop = $stop.next ()) || true);) {\r
-if (lastCodon.equals (stop)) {\r
-cdnaEnd -= 3;\r
-cdnaLength -= 3;\r
-break;\r
-}}\r
-}if (cdnaLength != mappedLength && cdnaLength > 2 && String.valueOf (cdnaSeqChars, 0, 3).toUpperCase ().equals (jalview.schemes.ResidueProperties.START)) {\r
-cdnaStart += 3;\r
-cdnaLength -= 3;\r
-}if (cdnaLength != mappedLength) {\r
-return null;\r
-}if (!jalview.analysis.AlignmentUtils.translatesAs (cdnaSeqChars, cdnaStart - 1, aaSeqChars)) {\r
-return null;\r
-}var map =  new jalview.util.MapList ( Clazz.newIntArray (-1, [cdnaStart, cdnaEnd]),  Clazz.newIntArray (-1, [1, proteinEnd]), 3, 1);\r
-return map;\r
-}, "jalview.datamodel.SequenceI,jalview.datamodel.SequenceI");\r
-c$.translatesAs = Clazz.defineMethod (c$, "translatesAs", \r
-function (cdnaSeqChars, cdnaStart, aaSeqChars) {\r
-var aaResidue = 0;\r
-for (var i = cdnaStart; i < cdnaSeqChars.length - 2 && aaResidue < aaSeqChars.length; i += 3, aaResidue++) {\r
-var codon = String.valueOf (cdnaSeqChars, i, 3);\r
-var translated = jalview.schemes.ResidueProperties.codonTranslate (codon);\r
-var aaRes = aaSeqChars[aaResidue];\r
-if ((translated == null || "STOP".equals (translated)) && aaRes == 'X') {\r
-continue;\r
-}if (translated == null || !(aaRes == translated.charAt (0))) {\r
-return false;\r
-}}\r
-return (aaResidue == aaSeqChars.length);\r
-}, "~A,~N,~A");\r
-c$.alignSequenceAs = Clazz.defineMethod (c$, "alignSequenceAs", \r
-function (seq, al, gap, preserveMappedGaps, preserveUnmappedGaps) {\r
-var mappings = al.getCodonFrame (seq);\r
-if (mappings == null || mappings.isEmpty ()) {\r
-return false;\r
-}var alignFrom = null;\r
-var mapping = null;\r
-for (var mp, $mp = mappings.iterator (); $mp.hasNext () && ((mp = $mp.next ()) || true);) {\r
-alignFrom = mp.findAlignedSequence (seq.getDatasetSequence (), al);\r
-if (alignFrom != null) {\r
-mapping = mp;\r
-break;\r
-}}\r
-if (alignFrom == null) {\r
-return false;\r
-}jalview.analysis.AlignmentUtils.alignSequenceAs (seq, alignFrom, mapping, gap, al.getGapCharacter (), preserveMappedGaps, preserveUnmappedGaps);\r
-return true;\r
-}, "jalview.datamodel.SequenceI,jalview.datamodel.AlignmentI,~S,~B,~B");\r
-c$.alignSequenceAs = Clazz.defineMethod (c$, "alignSequenceAs", \r
-function (alignTo, alignFrom, mapping, myGap, sourceGap, preserveMappedGaps, preserveUnmappedGaps) {\r
-var thisSeq = alignTo.getSequence ();\r
-var thatAligned = alignFrom.getSequence ();\r
-var thisAligned =  new StringBuilder (2 * thisSeq.length);\r
-var thisSeqPos = 0;\r
-var sourceDsPos = 0;\r
-var basesWritten = 0;\r
-var myGapChar = myGap.charAt (0);\r
-var ratio = myGap.length;\r
-var sourceGapMappedLength = 0;\r
-var inExon = false;\r
-for (var sourceChar, $sourceChar = 0, $$sourceChar = thatAligned; $sourceChar < $$sourceChar.length && ((sourceChar = $$sourceChar[$sourceChar]) || true); $sourceChar++) {\r
-if (sourceChar == sourceGap) {\r
-sourceGapMappedLength += ratio;\r
-continue;\r
-}sourceDsPos++;\r
-var mappedPos = mapping.getMappedRegion (alignTo, alignFrom, sourceDsPos);\r
-if (mappedPos == null) {\r
-System.err.println ("Can't align: no codon mapping to residue " + sourceDsPos + "(" + sourceChar + ")");\r
-return;\r
-}var mappedCodonStart = mappedPos[0];\r
-var mappedCodonEnd = mappedPos[mappedPos.length - 1];\r
-var trailingCopiedGap =  new StringBuilder ();\r
-var intronLength = 0;\r
-while (basesWritten < mappedCodonEnd && thisSeqPos < thisSeq.length) {\r
-var c = thisSeq[thisSeqPos++];\r
-if (c != myGapChar) {\r
-basesWritten++;\r
-if (basesWritten < mappedCodonStart) {\r
-if (preserveUnmappedGaps && trailingCopiedGap.length () > 0) {\r
-thisAligned.append (trailingCopiedGap.toString ());\r
-intronLength += trailingCopiedGap.length ();\r
-trailingCopiedGap =  new StringBuilder ();\r
-}intronLength++;\r
-inExon = false;\r
-} else {\r
-var startOfCodon = basesWritten == mappedCodonStart;\r
-var gapsToAdd = jalview.analysis.AlignmentUtils.calculateGapsToInsert (preserveMappedGaps, preserveUnmappedGaps, sourceGapMappedLength, inExon, trailingCopiedGap.length (), intronLength, startOfCodon);\r
-for (var i = 0; i < gapsToAdd; i++) {\r
-thisAligned.append (myGapChar);\r
-}\r
-sourceGapMappedLength = 0;\r
-inExon = true;\r
-}thisAligned.append (c);\r
-trailingCopiedGap =  new StringBuilder ();\r
-} else {\r
-if (inExon && preserveMappedGaps) {\r
-trailingCopiedGap.append (myGapChar);\r
-} else if (!inExon && preserveUnmappedGaps) {\r
-trailingCopiedGap.append (myGapChar);\r
-}}}\r
-}\r
-while (thisSeqPos < thisSeq.length) {\r
-var c = thisSeq[thisSeqPos++];\r
-if (c != myGapChar || preserveUnmappedGaps) {\r
-thisAligned.append (c);\r
-}}\r
-alignTo.setSequence ( String.instantialize (thisAligned));\r
-}, "jalview.datamodel.SequenceI,jalview.datamodel.SequenceI,jalview.datamodel.AlignedCodonFrame,~S,~S,~B,~B");\r
-c$.calculateGapsToInsert = Clazz.defineMethod (c$, "calculateGapsToInsert", \r
-function (preserveMappedGaps, preserveUnmappedGaps, sourceGapMappedLength, inExon, trailingGapLength, intronLength, startOfCodon) {\r
-var gapsToAdd = 0;\r
-if (startOfCodon) {\r
-if (inExon && !preserveMappedGaps) {\r
-trailingGapLength = 0;\r
-}if (!inExon && !(preserveMappedGaps && preserveUnmappedGaps)) {\r
-trailingGapLength = 0;\r
-}if (inExon) {\r
-gapsToAdd = Math.max (sourceGapMappedLength, trailingGapLength);\r
-} else {\r
-if (intronLength + trailingGapLength <= sourceGapMappedLength) {\r
-gapsToAdd = sourceGapMappedLength - intronLength;\r
-} else {\r
-gapsToAdd = Math.min (intronLength + trailingGapLength - sourceGapMappedLength, trailingGapLength);\r
-}}} else {\r
-if (!preserveMappedGaps) {\r
-trailingGapLength = 0;\r
-}gapsToAdd = Math.max (sourceGapMappedLength, trailingGapLength);\r
-}return gapsToAdd;\r
-}, "~B,~B,~N,~B,~N,~N,~B");\r
-c$.getAlignedTranslation = Clazz.defineMethod (c$, "getAlignedTranslation", \r
-function (sequences, gapCharacter, mappings) {\r
-var alignedSeqs =  new java.util.ArrayList ();\r
-for (var seq, $seq = sequences.iterator (); $seq.hasNext () && ((seq = $seq.next ()) || true);) {\r
-var mapped = jalview.analysis.AlignmentUtils.getAlignedTranslation (seq, gapCharacter, mappings);\r
-alignedSeqs.addAll (mapped);\r
-}\r
-return alignedSeqs;\r
-}, "java.util.List,~S,java.util.Set");\r
-c$.getAlignedTranslation = Clazz.defineMethod (c$, "getAlignedTranslation", \r
-function (seq, gapCharacter, mappings) {\r
-var result =  new java.util.ArrayList ();\r
-for (var mapping, $mapping = mappings.iterator (); $mapping.hasNext () && ((mapping = $mapping.next ()) || true);) {\r
-if (mapping.involvesSequence (seq)) {\r
-var mapped = jalview.analysis.AlignmentUtils.getAlignedTranslation (seq, gapCharacter, mapping);\r
-if (mapped != null) {\r
-result.add (mapped);\r
-}}}\r
-return result;\r
-}, "jalview.datamodel.SequenceI,~S,java.util.Set");\r
-c$.getAlignedTranslation = Clazz.defineMethod (c$, "getAlignedTranslation", \r
-function (seq, gapCharacter, mapping) {\r
-var gap = String.valueOf (gapCharacter);\r
-var toDna = false;\r
-var fromRatio = 1;\r
-var mapTo = mapping.getDnaForAaSeq (seq);\r
-if (mapTo != null) {\r
-toDna = true;\r
-gap = String.valueOf ( Clazz.newCharArray (-1, [gapCharacter, gapCharacter, gapCharacter]));\r
-} else {\r
-mapTo = mapping.getAaForDnaSeq (seq);\r
-fromRatio = 3;\r
-}var newseq =  new StringBuilder (seq.getLength () * (toDna ? 3 : 1));\r
-var residueNo = 0;\r
-var phrase =  Clazz.newIntArray (fromRatio, 0);\r
-var phraseOffset = 0;\r
-var gapWidth = 0;\r
-var first = true;\r
-var alignedSeq =  new jalview.datamodel.Sequence ("", "");\r
-for (var c, $c = 0, $$c = seq.getSequence (); $c < $$c.length && ((c = $$c[$c]) || true); $c++) {\r
-if (c == gapCharacter) {\r
-gapWidth++;\r
-if (gapWidth >= fromRatio) {\r
-newseq.append (gap);\r
-gapWidth = 0;\r
-}} else {\r
-phrase[phraseOffset++] = residueNo + 1;\r
-if (phraseOffset == fromRatio) {\r
-var sr =  new jalview.datamodel.SearchResults ();\r
-for (var pos, $pos = 0, $$pos = phrase; $pos < $$pos.length && ((pos = $$pos[$pos]) || true); $pos++) {\r
-mapping.markMappedRegion (seq, pos, sr);\r
-}\r
-newseq.append (sr.toString ());\r
-if (first) {\r
-first = false;\r
-var mappedTo = sr.getResultSequence (0);\r
-alignedSeq.setName (mappedTo.getName ());\r
-alignedSeq.setDescription (mappedTo.getDescription ());\r
-alignedSeq.setDatasetSequence (mappedTo);\r
-}phraseOffset = 0;\r
-}residueNo++;\r
-}}\r
-alignedSeq.setSequence (newseq.toString ());\r
-return alignedSeq;\r
-}, "jalview.datamodel.SequenceI,~S,jalview.datamodel.AlignedCodonFrame");\r
-c$.alignProteinAsDna = Clazz.defineMethod (c$, "alignProteinAsDna", \r
-function (protein, dna) {\r
-var mappings = protein.getCodonFrames ();\r
-var alignedCodons =  new java.util.TreeMap ( new jalview.analysis.CodonComparator ());\r
-for (var dnaSeq, $dnaSeq = dna.getSequences ().iterator (); $dnaSeq.hasNext () && ((dnaSeq = $dnaSeq.next ()) || true);) {\r
-for (var mapping, $mapping = mappings.iterator (); $mapping.hasNext () && ((mapping = $mapping.next ()) || true);) {\r
-var seqMap = mapping.getMappingForSequence (dnaSeq);\r
-var prot = mapping.findAlignedSequence (dnaSeq.getDatasetSequence (), protein);\r
-if (prot != null) {\r
-jalview.analysis.AlignmentUtils.addCodonPositions (dnaSeq, prot, protein.getGapCharacter (), seqMap, alignedCodons);\r
-}}\r
-}\r
-return jalview.analysis.AlignmentUtils.alignProteinAs (protein, alignedCodons);\r
-}, "jalview.datamodel.AlignmentI,jalview.datamodel.AlignmentI");\r
-c$.alignProteinAs = Clazz.defineMethod (c$, "alignProteinAs", \r
-function (protein, alignedCodons) {\r
-var alignedWidth = alignedCodons.size ();\r
-var gaps =  Clazz.newCharArray (alignedWidth, '\0');\r
-java.util.Arrays.fill (gaps, protein.getGapCharacter ());\r
-var allGaps = String.valueOf (gaps);\r
-for (var seq, $seq = protein.getSequences ().iterator (); $seq.hasNext () && ((seq = $seq.next ()) || true);) {\r
-seq.setSequence (allGaps);\r
-}\r
-var column = 0;\r
-for (var codon, $codon = alignedCodons.keySet ().iterator (); $codon.hasNext () && ((codon = $codon.next ()) || true);) {\r
-var columnResidues = alignedCodons.get (codon);\r
-for (var entry, $entry = columnResidues.entrySet ().iterator (); $entry.hasNext () && ((entry = $entry.next ()) || true);) {\r
-entry.getKey ().getSequence ()[column] = entry.getValue ().charAt (0);\r
-}\r
-column++;\r
-}\r
-return 0;\r
-}, "jalview.datamodel.AlignmentI,java.util.Map");\r
-c$.addCodonPositions = Clazz.defineMethod (c$, "addCodonPositions", \r
-function (dna, protein, gapChar, seqMap, alignedCodons) {\r
-var codons = seqMap.getCodonIterator (dna, gapChar);\r
-while (codons.hasNext ()) {\r
-var codon = codons.next ();\r
-var seqProduct = alignedCodons.get (codon);\r
-if (seqProduct == null) {\r
-seqProduct =  new java.util.HashMap ();\r
-alignedCodons.put (codon, seqProduct);\r
-}seqProduct.put (protein, codon.product);\r
-}\r
-}, "jalview.datamodel.SequenceI,jalview.datamodel.SequenceI,~S,jalview.datamodel.Mapping,java.util.Map");\r
-c$.isMappable = Clazz.defineMethod (c$, "isMappable", \r
-function (al1, al2) {\r
-if (al1.isNucleotide () == al2.isNucleotide ()) {\r
-return false;\r
-}var dna = al1.isNucleotide () ? al1 : al2;\r
-var protein = dna === al1 ? al2 : al1;\r
-var mappings = protein.getCodonFrames ();\r
-for (var dnaSeq, $dnaSeq = dna.getSequences ().iterator (); $dnaSeq.hasNext () && ((dnaSeq = $dnaSeq.next ()) || true);) {\r
-for (var proteinSeq, $proteinSeq = protein.getSequences ().iterator (); $proteinSeq.hasNext () && ((proteinSeq = $proteinSeq.next ()) || true);) {\r
-if (jalview.analysis.AlignmentUtils.isMappable (dnaSeq, proteinSeq, mappings)) {\r
-return true;\r
-}}\r
-}\r
-return false;\r
-}, "jalview.datamodel.AlignmentI,jalview.datamodel.AlignmentI");\r
-c$.isMappable = Clazz.defineMethod (c$, "isMappable", \r
-function (dnaSeq, proteinSeq, mappings) {\r
-var dnaDs = dnaSeq.getDatasetSequence () == null ? dnaSeq : dnaSeq.getDatasetSequence ();\r
-var proteinDs = proteinSeq.getDatasetSequence () == null ? proteinSeq : proteinSeq.getDatasetSequence ();\r
-for (var mapping, $mapping = mappings.iterator (); $mapping.hasNext () && ((mapping = $mapping.next ()) || true);) {\r
-if (proteinDs === mapping.getAaForDnaSeq (dnaDs)) {\r
-return true;\r
-}}\r
-return jalview.analysis.AlignmentUtils.mapProteinToCdna (proteinDs, dnaDs) != null;\r
-}, "jalview.datamodel.SequenceI,jalview.datamodel.SequenceI,java.util.Set");\r
-c$.findAddableReferenceAnnotations = Clazz.defineMethod (c$, "findAddableReferenceAnnotations", \r
-function (sequenceScope, labelForCalcId, candidates, al) {\r
-if (sequenceScope == null) {\r
-return;\r
-}for (var seq, $seq = sequenceScope.iterator (); $seq.hasNext () && ((seq = $seq.next ()) || true);) {\r
-var dataset = seq.getDatasetSequence ();\r
-if (dataset == null) {\r
-continue;\r
-}var datasetAnnotations = dataset.getAnnotation ();\r
-if (datasetAnnotations == null) {\r
-continue;\r
-}var result =  new java.util.ArrayList ();\r
-for (var dsann, $dsann = 0, $$dsann = datasetAnnotations; $dsann < $$dsann.length && ((dsann = $$dsann[$dsann]) || true); $dsann++) {\r
-var matchedAlignmentAnnotations = al.findAnnotations (seq, dsann.getCalcId (), dsann.label);\r
-if (!matchedAlignmentAnnotations.iterator ().hasNext ()) {\r
-result.add (dsann);\r
-if (labelForCalcId != null) {\r
-labelForCalcId.put (dsann.getCalcId (), dsann.label);\r
-}}}\r
-if (!result.isEmpty ()) {\r
-candidates.put (seq, result);\r
-}}\r
-}, "java.util.List,java.util.Map,java.util.Map,jalview.datamodel.AlignmentI");\r
-c$.addReferenceAnnotations = Clazz.defineMethod (c$, "addReferenceAnnotations", \r
-function (annotations, alignment, selectionGroup) {\r
-for (var seq, $seq = annotations.keySet ().iterator (); $seq.hasNext () && ((seq = $seq.next ()) || true);) {\r
-for (var ann, $ann = annotations.get (seq).iterator (); $ann.hasNext () && ((ann = $ann.next ()) || true);) {\r
-var copyAnn =  new jalview.datamodel.AlignmentAnnotation (ann);\r
-var startRes = 0;\r
-var endRes = ann.annotations.length;\r
-if (selectionGroup != null) {\r
-startRes = selectionGroup.getStartRes ();\r
-endRes = selectionGroup.getEndRes ();\r
-}copyAnn.restrict (startRes, endRes);\r
-if (!seq.hasAnnotation (ann)) {\r
-seq.addAlignmentAnnotation (copyAnn);\r
-}copyAnn.adjustForAlignment ();\r
-alignment.addAnnotation (copyAnn);\r
-copyAnn.visible = true;\r
-}\r
-}\r
-}, "java.util.Map,jalview.datamodel.AlignmentI,jalview.datamodel.SequenceGroup");\r
-c$.showOrHideSequenceAnnotations = Clazz.defineMethod (c$, "showOrHideSequenceAnnotations", \r
-function (al, types, forSequences, anyType, doShow) {\r
-for (var aa, $aa = 0, $$aa = al.getAlignmentAnnotation (); $aa < $$aa.length && ((aa = $$aa[$aa]) || true); $aa++) {\r
-if (anyType || types.contains (aa.label)) {\r
-if ((aa.sequenceRef != null) && (forSequences == null || forSequences.contains (aa.sequenceRef))) {\r
-aa.visible = doShow;\r
-}}}\r
-}, "jalview.datamodel.AlignmentI,java.util.Collection,java.util.List,~B,~B");\r
-c$.haveCrossRef = Clazz.defineMethod (c$, "haveCrossRef", \r
-function (seq1, seq2) {\r
-return jalview.analysis.AlignmentUtils.hasCrossRef (seq1, seq2) || jalview.analysis.AlignmentUtils.hasCrossRef (seq2, seq1);\r
-}, "jalview.datamodel.SequenceI,jalview.datamodel.SequenceI");\r
-c$.hasCrossRef = Clazz.defineMethod (c$, "hasCrossRef", \r
-function (seq1, seq2) {\r
-if (seq1 == null || seq2 == null) {\r
-return false;\r
-}var name = seq2.getName ();\r
-var xrefs = seq1.getDBRef ();\r
-if (xrefs != null) {\r
-for (var xref, $xref = 0, $$xref = xrefs; $xref < $$xref.length && ((xref = $$xref[$xref]) || true); $xref++) {\r
-var xrefName = xref.getSource () + "|" + xref.getAccessionId ();\r
-if (xrefName.equalsIgnoreCase (name)) {\r
-return true;\r
-}}\r
-}return false;\r
-}, "jalview.datamodel.SequenceI,jalview.datamodel.SequenceI");\r
-c$.makeExonAlignment = Clazz.defineMethod (c$, "makeExonAlignment", \r
-function (dna, mappings) {\r
-var newMappings =  new java.util.LinkedHashSet ();\r
-var exonSequences =  new java.util.ArrayList ();\r
-for (var dnaSeq, $dnaSeq = 0, $$dnaSeq = dna; $dnaSeq < $$dnaSeq.length && ((dnaSeq = $$dnaSeq[$dnaSeq]) || true); $dnaSeq++) {\r
-var ds = dnaSeq.getDatasetSequence ();\r
-var seqMappings = jalview.util.MappingUtils.findMappingsForSequence (ds, mappings);\r
-for (var acf, $acf = seqMappings.iterator (); $acf.hasNext () && ((acf = $acf.next ()) || true);) {\r
-var newMapping =  new jalview.datamodel.AlignedCodonFrame ();\r
-var mappedExons = jalview.analysis.AlignmentUtils.makeExonSequences (ds, acf, newMapping);\r
-if (!mappedExons.isEmpty ()) {\r
-exonSequences.addAll (mappedExons);\r
-newMappings.add (newMapping);\r
-}}\r
-}\r
-var al =  new jalview.datamodel.Alignment (exonSequences.toArray ( new Array (exonSequences.size ())));\r
-al.setDataset (null);\r
-mappings.clear ();\r
-mappings.addAll (newMappings);\r
-return al;\r
-}, "~A,java.util.Set");\r
-c$.makeExonSequences = Clazz.defineMethod (c$, "makeExonSequences", \r
-function (dnaSeq, mapping, newMapping) {\r
-var exonSequences =  new java.util.ArrayList ();\r
-var seqMappings = mapping.getMappingsForSequence (dnaSeq);\r
-var dna = dnaSeq.getSequence ();\r
-for (var seqMapping, $seqMapping = seqMappings.iterator (); $seqMapping.hasNext () && ((seqMapping = $seqMapping.next ()) || true);) {\r
-var newSequence =  new StringBuilder (dnaSeq.getLength ());\r
-var dnaExonRanges = seqMapping.getMap ().getFromRanges ();\r
-for (var range, $range = dnaExonRanges.iterator (); $range.hasNext () && ((range = $range.next ()) || true);) {\r
-for (var pos = range[0]; pos <= range[1]; pos++) {\r
-newSequence.append (dna[pos - 1]);\r
-}\r
-}\r
-var exon =  new jalview.datamodel.Sequence (dnaSeq.getName (), newSequence.toString ());\r
-var cdsAccId = jalview.datamodel.FeatureProperties.getCodingFeature (jalview.datamodel.DBRefSource.EMBL);\r
-var cdsRefs = jalview.util.DBRefUtils.selectRefs (seqMapping.getTo ().getDBRef (), jalview.datamodel.DBRefSource.CODINGDBS);\r
-if (cdsRefs != null) {\r
-for (var cdsRef, $cdsRef = 0, $$cdsRef = cdsRefs; $cdsRef < $$cdsRef.length && ((cdsRef = $$cdsRef[$cdsRef]) || true); $cdsRef++) {\r
-exon.addDBRef ( new jalview.datamodel.DBRefEntry (cdsRef));\r
-cdsAccId = cdsRef.getAccessionId ();\r
-}\r
-}exon.setName (exon.getName () + "|" + cdsAccId);\r
-exon.createDatasetSequence ();\r
-var exonRange =  new java.util.ArrayList ();\r
-exonRange.add ( Clazz.newIntArray (-1, [1, newSequence.length ()]));\r
-var map =  new jalview.util.MapList (exonRange, seqMapping.getMap ().getToRanges (), 3, 1);\r
-newMapping.addMap (exon.getDatasetSequence (), seqMapping.getTo (), map);\r
-var cdsToDnaMap =  new jalview.util.MapList (dnaExonRanges, exonRange, 1, 1);\r
-newMapping.addMap (dnaSeq, exon.getDatasetSequence (), cdsToDnaMap);\r
-exonSequences.add (exon);\r
-}\r
-return exonSequences;\r
-}, "jalview.datamodel.SequenceI,jalview.datamodel.AlignedCodonFrame,jalview.datamodel.AlignedCodonFrame");\r
-});\r
+Clazz.declarePackage ("jalview.analysis");
+Clazz.load (null, "jalview.analysis.AlignmentUtils", ["jalview.analysis.CodonComparator", "jalview.datamodel.AlignedCodonFrame", "$.Alignment", "$.AlignmentAnnotation", "$.DBRefEntry", "$.DBRefSource", "$.FeatureProperties", "$.SearchResults", "$.Sequence", "jalview.schemes.ResidueProperties", "jalview.util.DBRefUtils", "$.MapList", "$.MappingUtils", "java.lang.StringBuilder", "java.util.ArrayList", "$.Arrays", "$.HashMap", "$.HashSet", "$.LinkedHashMap", "$.LinkedHashSet", "$.TreeMap"], function () {
+c$ = Clazz.declareType (jalview.analysis, "AlignmentUtils");
+c$.expandContext = Clazz.defineMethod (c$, "expandContext", 
+function (core, flankSize) {
+var sq =  new java.util.ArrayList ();
+var maxoffset = 0;
+for (var s, $s = core.getSequences ().iterator (); $s.hasNext () && ((s = $s.next ()) || true);) {
+var newSeq = s.deriveSequence ();
+var newSeqStart = newSeq.getStart () - 1;
+if (newSeqStart > maxoffset && newSeq.getDatasetSequence ().getStart () < s.getStart ()) {
+maxoffset = newSeqStart;
+}sq.add (newSeq);
+}
+if (flankSize > -1) {
+maxoffset = Math.min (maxoffset, flankSize);
+}for (var s, $s = sq.iterator (); $s.hasNext () && ((s = $s.next ()) || true);) {
+var ds = s;
+while (ds.getDatasetSequence () != null) {
+ds = ds.getDatasetSequence ();
+}
+var s_end = s.findPosition (s.getStart () + s.getLength ());
+var ustream_ds = s.getStart () - ds.getStart ();
+var dstream_ds = ds.getEnd () - s_end;
+var offset = maxoffset - ustream_ds;
+if (flankSize >= 0) {
+if (flankSize < ustream_ds) {
+offset = maxoffset - flankSize;
+ustream_ds = flankSize;
+}if (flankSize <= dstream_ds) {
+dstream_ds = flankSize - 1;
+}}var upstream =  String.instantialize (ds.getSequence (s.getStart () - 1 - ustream_ds, s.getStart () - 1)).toLowerCase ().toCharArray ();
+var downstream =  String.instantialize (ds.getSequence (s_end - 1, s_end + dstream_ds)).toLowerCase ().toCharArray ();
+var coreseq = s.getSequence ();
+var nseq =  Clazz.newCharArray (offset + upstream.length + downstream.length + coreseq.length, '\0');
+var c = core.getGapCharacter ();
+var p = 0;
+for (; p < offset; p++) {
+nseq[p] = c;
+}
+System.arraycopy (upstream, 0, nseq, p, upstream.length);
+System.arraycopy (coreseq, 0, nseq, p + upstream.length, coreseq.length);
+System.arraycopy (downstream, 0, nseq, p + coreseq.length + upstream.length, downstream.length);
+s.setSequence ( String.instantialize (nseq));
+s.setStart (s.getStart () - ustream_ds);
+s.setEnd (s_end + downstream.length);
+}
+var newAl =  new jalview.datamodel.Alignment (sq.toArray ( new Array (0)));
+for (var s, $s = sq.iterator (); $s.hasNext () && ((s = $s.next ()) || true);) {
+if (s.getAnnotation () != null) {
+for (var aa, $aa = 0, $$aa = s.getAnnotation (); $aa < $$aa.length && ((aa = $$aa[$aa]) || true); $aa++) {
+aa.adjustForAlignment ();
+newAl.addAnnotation (aa);
+}
+}}
+newAl.setDataset (core.getDataset ());
+return newAl;
+}, "jalview.datamodel.AlignmentI,~N");
+c$.getSequenceIndex = Clazz.defineMethod (c$, "getSequenceIndex", 
+function (al, seq) {
+var result = -1;
+var pos = 0;
+for (var alSeq, $alSeq = al.getSequences ().iterator (); $alSeq.hasNext () && ((alSeq = $alSeq.next ()) || true);) {
+if (alSeq === seq) {
+result = pos;
+break;
+}pos++;
+}
+return result;
+}, "jalview.datamodel.AlignmentI,jalview.datamodel.SequenceI");
+c$.getSequencesByName = Clazz.defineMethod (c$, "getSequencesByName", 
+function (al) {
+var theMap =  new java.util.LinkedHashMap ();
+for (var seq, $seq = al.getSequences ().iterator (); $seq.hasNext () && ((seq = $seq.next ()) || true);) {
+var name = seq.getName ();
+if (name != null) {
+var seqs = theMap.get (name);
+if (seqs == null) {
+seqs =  new java.util.ArrayList ();
+theMap.put (name, seqs);
+}seqs.add (seq);
+}}
+return theMap;
+}, "jalview.datamodel.AlignmentI");
+c$.mapProteinToCdna = Clazz.defineMethod (c$, "mapProteinToCdna", 
+function (proteinAlignment, cdnaAlignment) {
+if (proteinAlignment == null || cdnaAlignment == null) {
+return false;
+}var mappedDna =  new java.util.HashSet ();
+var mappedProtein =  new java.util.HashSet ();
+var mappingPerformed = jalview.analysis.AlignmentUtils.mapProteinToCdna (proteinAlignment, cdnaAlignment, mappedDna, mappedProtein, true);
+mappingPerformed = new Boolean (mappingPerformed | jalview.analysis.AlignmentUtils.mapProteinToCdna (proteinAlignment, cdnaAlignment, mappedDna, mappedProtein, false)).valueOf ();
+return mappingPerformed;
+}, "jalview.datamodel.AlignmentI,jalview.datamodel.AlignmentI");
+c$.mapProteinToCdna = Clazz.defineMethod (c$, "mapProteinToCdna", 
+function (proteinAlignment, cdnaAlignment, mappedDna, mappedProtein, xrefsOnly) {
+var mappingPerformed = false;
+var thisSeqs = proteinAlignment.getSequences ();
+for (var aaSeq, $aaSeq = thisSeqs.iterator (); $aaSeq.hasNext () && ((aaSeq = $aaSeq.next ()) || true);) {
+var proteinMapped = false;
+var acf =  new jalview.datamodel.AlignedCodonFrame ();
+for (var cdnaSeq, $cdnaSeq = cdnaAlignment.getSequences ().iterator (); $cdnaSeq.hasNext () && ((cdnaSeq = $cdnaSeq.next ()) || true);) {
+if (xrefsOnly && !jalview.analysis.AlignmentUtils.haveCrossRef (aaSeq, cdnaSeq)) {
+continue;
+}if (!xrefsOnly && (mappedProtein.contains (aaSeq) || mappedDna.contains (cdnaSeq))) {
+continue;
+}if (!jalview.analysis.AlignmentUtils.mappingExists (proteinAlignment.getCodonFrames (), aaSeq.getDatasetSequence (), cdnaSeq.getDatasetSequence ())) {
+var map = jalview.analysis.AlignmentUtils.mapProteinToCdna (aaSeq, cdnaSeq);
+if (map != null) {
+acf.addMap (cdnaSeq, aaSeq, map);
+mappingPerformed = true;
+proteinMapped = true;
+mappedDna.add (cdnaSeq);
+mappedProtein.add (aaSeq);
+}}}
+if (proteinMapped) {
+proteinAlignment.addCodonFrame (acf);
+}}
+return mappingPerformed;
+}, "jalview.datamodel.AlignmentI,jalview.datamodel.AlignmentI,java.util.Set,java.util.Set,~B");
+c$.mappingExists = Clazz.defineMethod (c$, "mappingExists", 
+function (set, aaSeq, cdnaSeq) {
+if (set != null) {
+for (var acf, $acf = set.iterator (); $acf.hasNext () && ((acf = $acf.next ()) || true);) {
+if (cdnaSeq === acf.getDnaForAaSeq (aaSeq)) {
+return true;
+}}
+}return false;
+}, "java.util.Set,jalview.datamodel.SequenceI,jalview.datamodel.SequenceI");
+c$.mapProteinToCdna = Clazz.defineMethod (c$, "mapProteinToCdna", 
+function (proteinSeq, cdnaSeq) {
+var proteinDataset = proteinSeq.getDatasetSequence ();
+var aaSeqChars = proteinDataset != null ? proteinDataset.getSequence () : proteinSeq.getSequence ();
+var cdnaDataset = cdnaSeq.getDatasetSequence ();
+var cdnaSeqChars = cdnaDataset != null ? cdnaDataset.getSequence () : cdnaSeq.getSequence ();
+if (aaSeqChars == null || cdnaSeqChars == null) {
+return null;
+}var mappedLength = 3 * aaSeqChars.length;
+var cdnaLength = cdnaSeqChars.length;
+var cdnaStart = 1;
+var cdnaEnd = cdnaLength;
+var proteinStart = 1;
+var proteinEnd = aaSeqChars.length;
+if (cdnaLength != mappedLength && cdnaLength > 2) {
+var lastCodon = String.valueOf (cdnaSeqChars, cdnaLength - 3, 3).toUpperCase ();
+for (var stop, $stop = jalview.schemes.ResidueProperties.STOP.iterator (); $stop.hasNext () && ((stop = $stop.next ()) || true);) {
+if (lastCodon.equals (stop)) {
+cdnaEnd -= 3;
+cdnaLength -= 3;
+break;
+}}
+}if (cdnaLength != mappedLength && cdnaLength > 2 && String.valueOf (cdnaSeqChars, 0, 3).toUpperCase ().equals (jalview.schemes.ResidueProperties.START)) {
+cdnaStart += 3;
+cdnaLength -= 3;
+}if (cdnaLength != mappedLength) {
+return null;
+}if (!jalview.analysis.AlignmentUtils.translatesAs (cdnaSeqChars, cdnaStart - 1, aaSeqChars)) {
+return null;
+}var map =  new jalview.util.MapList ( Clazz.newIntArray (-1, [cdnaStart, cdnaEnd]),  Clazz.newIntArray (-1, [1, proteinEnd]), 3, 1);
+return map;
+}, "jalview.datamodel.SequenceI,jalview.datamodel.SequenceI");
+c$.translatesAs = Clazz.defineMethod (c$, "translatesAs", 
+function (cdnaSeqChars, cdnaStart, aaSeqChars) {
+var aaResidue = 0;
+for (var i = cdnaStart; i < cdnaSeqChars.length - 2 && aaResidue < aaSeqChars.length; i += 3, aaResidue++) {
+var codon = String.valueOf (cdnaSeqChars, i, 3);
+var translated = jalview.schemes.ResidueProperties.codonTranslate (codon);
+var aaRes = aaSeqChars[aaResidue];
+if ((translated == null || "STOP".equals (translated)) && aaRes == 'X') {
+continue;
+}if (translated == null || !(aaRes == translated.charAt (0))) {
+return false;
+}}
+return (aaResidue == aaSeqChars.length);
+}, "~A,~N,~A");
+c$.alignSequenceAs = Clazz.defineMethod (c$, "alignSequenceAs", 
+function (seq, al, gap, preserveMappedGaps, preserveUnmappedGaps) {
+var mappings = al.getCodonFrame (seq);
+if (mappings == null || mappings.isEmpty ()) {
+return false;
+}var alignFrom = null;
+var mapping = null;
+for (var mp, $mp = mappings.iterator (); $mp.hasNext () && ((mp = $mp.next ()) || true);) {
+alignFrom = mp.findAlignedSequence (seq.getDatasetSequence (), al);
+if (alignFrom != null) {
+mapping = mp;
+break;
+}}
+if (alignFrom == null) {
+return false;
+}jalview.analysis.AlignmentUtils.alignSequenceAs (seq, alignFrom, mapping, gap, al.getGapCharacter (), preserveMappedGaps, preserveUnmappedGaps);
+return true;
+}, "jalview.datamodel.SequenceI,jalview.datamodel.AlignmentI,~S,~B,~B");
+c$.alignSequenceAs = Clazz.defineMethod (c$, "alignSequenceAs", 
+function (alignTo, alignFrom, mapping, myGap, sourceGap, preserveMappedGaps, preserveUnmappedGaps) {
+var thisSeq = alignTo.getSequence ();
+var thatAligned = alignFrom.getSequence ();
+var thisAligned =  new StringBuilder (2 * thisSeq.length);
+var thisSeqPos = 0;
+var sourceDsPos = 0;
+var basesWritten = 0;
+var myGapChar = myGap.charAt (0);
+var ratio = myGap.length;
+var sourceGapMappedLength = 0;
+var inExon = false;
+for (var sourceChar, $sourceChar = 0, $$sourceChar = thatAligned; $sourceChar < $$sourceChar.length && ((sourceChar = $$sourceChar[$sourceChar]) || true); $sourceChar++) {
+if (sourceChar == sourceGap) {
+sourceGapMappedLength += ratio;
+continue;
+}sourceDsPos++;
+var mappedPos = mapping.getMappedRegion (alignTo, alignFrom, sourceDsPos);
+if (mappedPos == null) {
+System.err.println ("Can't align: no codon mapping to residue " + sourceDsPos + "(" + sourceChar + ")");
+return;
+}var mappedCodonStart = mappedPos[0];
+var mappedCodonEnd = mappedPos[mappedPos.length - 1];
+var trailingCopiedGap =  new StringBuilder ();
+var intronLength = 0;
+while (basesWritten < mappedCodonEnd && thisSeqPos < thisSeq.length) {
+var c = thisSeq[thisSeqPos++];
+if (c != myGapChar) {
+basesWritten++;
+if (basesWritten < mappedCodonStart) {
+if (preserveUnmappedGaps && trailingCopiedGap.length () > 0) {
+thisAligned.append (trailingCopiedGap.toString ());
+intronLength += trailingCopiedGap.length ();
+trailingCopiedGap =  new StringBuilder ();
+}intronLength++;
+inExon = false;
+} else {
+var startOfCodon = basesWritten == mappedCodonStart;
+var gapsToAdd = jalview.analysis.AlignmentUtils.calculateGapsToInsert (preserveMappedGaps, preserveUnmappedGaps, sourceGapMappedLength, inExon, trailingCopiedGap.length (), intronLength, startOfCodon);
+for (var i = 0; i < gapsToAdd; i++) {
+thisAligned.append (myGapChar);
+}
+sourceGapMappedLength = 0;
+inExon = true;
+}thisAligned.append (c);
+trailingCopiedGap =  new StringBuilder ();
+} else {
+if (inExon && preserveMappedGaps) {
+trailingCopiedGap.append (myGapChar);
+} else if (!inExon && preserveUnmappedGaps) {
+trailingCopiedGap.append (myGapChar);
+}}}
+}
+while (thisSeqPos < thisSeq.length) {
+var c = thisSeq[thisSeqPos++];
+if (c != myGapChar || preserveUnmappedGaps) {
+thisAligned.append (c);
+}}
+alignTo.setSequence ( String.instantialize (thisAligned));
+}, "jalview.datamodel.SequenceI,jalview.datamodel.SequenceI,jalview.datamodel.AlignedCodonFrame,~S,~S,~B,~B");
+c$.calculateGapsToInsert = Clazz.defineMethod (c$, "calculateGapsToInsert", 
+function (preserveMappedGaps, preserveUnmappedGaps, sourceGapMappedLength, inExon, trailingGapLength, intronLength, startOfCodon) {
+var gapsToAdd = 0;
+if (startOfCodon) {
+if (inExon && !preserveMappedGaps) {
+trailingGapLength = 0;
+}if (!inExon && !(preserveMappedGaps && preserveUnmappedGaps)) {
+trailingGapLength = 0;
+}if (inExon) {
+gapsToAdd = Math.max (sourceGapMappedLength, trailingGapLength);
+} else {
+if (intronLength + trailingGapLength <= sourceGapMappedLength) {
+gapsToAdd = sourceGapMappedLength - intronLength;
+} else {
+gapsToAdd = Math.min (intronLength + trailingGapLength - sourceGapMappedLength, trailingGapLength);
+}}} else {
+if (!preserveMappedGaps) {
+trailingGapLength = 0;
+}gapsToAdd = Math.max (sourceGapMappedLength, trailingGapLength);
+}return gapsToAdd;
+}, "~B,~B,~N,~B,~N,~N,~B");
+c$.getAlignedTranslation = Clazz.defineMethod (c$, "getAlignedTranslation", 
+function (sequences, gapCharacter, mappings) {
+var alignedSeqs =  new java.util.ArrayList ();
+for (var seq, $seq = sequences.iterator (); $seq.hasNext () && ((seq = $seq.next ()) || true);) {
+var mapped = jalview.analysis.AlignmentUtils.getAlignedTranslation (seq, gapCharacter, mappings);
+alignedSeqs.addAll (mapped);
+}
+return alignedSeqs;
+}, "java.util.List,~S,java.util.Set");
+c$.getAlignedTranslation = Clazz.defineMethod (c$, "getAlignedTranslation", 
+function (seq, gapCharacter, mappings) {
+var result =  new java.util.ArrayList ();
+for (var mapping, $mapping = mappings.iterator (); $mapping.hasNext () && ((mapping = $mapping.next ()) || true);) {
+if (mapping.involvesSequence (seq)) {
+var mapped = jalview.analysis.AlignmentUtils.getAlignedTranslation (seq, gapCharacter, mapping);
+if (mapped != null) {
+result.add (mapped);
+}}}
+return result;
+}, "jalview.datamodel.SequenceI,~S,java.util.Set");
+c$.getAlignedTranslation = Clazz.defineMethod (c$, "getAlignedTranslation", 
+function (seq, gapCharacter, mapping) {
+var gap = String.valueOf (gapCharacter);
+var toDna = false;
+var fromRatio = 1;
+var mapTo = mapping.getDnaForAaSeq (seq);
+if (mapTo != null) {
+toDna = true;
+gap = String.valueOf ( Clazz.newCharArray (-1, [gapCharacter, gapCharacter, gapCharacter]));
+} else {
+mapTo = mapping.getAaForDnaSeq (seq);
+fromRatio = 3;
+}var newseq =  new StringBuilder (seq.getLength () * (toDna ? 3 : 1));
+var residueNo = 0;
+var phrase =  Clazz.newIntArray (fromRatio, 0);
+var phraseOffset = 0;
+var gapWidth = 0;
+var first = true;
+var alignedSeq =  new jalview.datamodel.Sequence ("", "");
+for (var c, $c = 0, $$c = seq.getSequence (); $c < $$c.length && ((c = $$c[$c]) || true); $c++) {
+if (c == gapCharacter) {
+gapWidth++;
+if (gapWidth >= fromRatio) {
+newseq.append (gap);
+gapWidth = 0;
+}} else {
+phrase[phraseOffset++] = residueNo + 1;
+if (phraseOffset == fromRatio) {
+var sr =  new jalview.datamodel.SearchResults ();
+for (var pos, $pos = 0, $$pos = phrase; $pos < $$pos.length && ((pos = $$pos[$pos]) || true); $pos++) {
+mapping.markMappedRegion (seq, pos, sr);
+}
+newseq.append (sr.toString ());
+if (first) {
+first = false;
+var mappedTo = sr.getResultSequence (0);
+alignedSeq.setName (mappedTo.getName ());
+alignedSeq.setDescription (mappedTo.getDescription ());
+alignedSeq.setDatasetSequence (mappedTo);
+}phraseOffset = 0;
+}residueNo++;
+}}
+alignedSeq.setSequence (newseq.toString ());
+return alignedSeq;
+}, "jalview.datamodel.SequenceI,~S,jalview.datamodel.AlignedCodonFrame");
+c$.alignProteinAsDna = Clazz.defineMethod (c$, "alignProteinAsDna", 
+function (protein, dna) {
+var mappings = protein.getCodonFrames ();
+var alignedCodons =  new java.util.TreeMap ( new jalview.analysis.CodonComparator ());
+for (var dnaSeq, $dnaSeq = dna.getSequences ().iterator (); $dnaSeq.hasNext () && ((dnaSeq = $dnaSeq.next ()) || true);) {
+for (var mapping, $mapping = mappings.iterator (); $mapping.hasNext () && ((mapping = $mapping.next ()) || true);) {
+var seqMap = mapping.getMappingForSequence (dnaSeq);
+var prot = mapping.findAlignedSequence (dnaSeq.getDatasetSequence (), protein);
+if (prot != null) {
+jalview.analysis.AlignmentUtils.addCodonPositions (dnaSeq, prot, protein.getGapCharacter (), seqMap, alignedCodons);
+}}
+}
+return jalview.analysis.AlignmentUtils.alignProteinAs (protein, alignedCodons);
+}, "jalview.datamodel.AlignmentI,jalview.datamodel.AlignmentI");
+c$.alignProteinAs = Clazz.defineMethod (c$, "alignProteinAs", 
+function (protein, alignedCodons) {
+var alignedWidth = alignedCodons.size ();
+var gaps =  Clazz.newCharArray (alignedWidth, '\0');
+java.util.Arrays.fill (gaps, protein.getGapCharacter ());
+var allGaps = String.valueOf (gaps);
+for (var seq, $seq = protein.getSequences ().iterator (); $seq.hasNext () && ((seq = $seq.next ()) || true);) {
+seq.setSequence (allGaps);
+}
+var column = 0;
+for (var codon, $codon = alignedCodons.keySet ().iterator (); $codon.hasNext () && ((codon = $codon.next ()) || true);) {
+var columnResidues = alignedCodons.get (codon);
+for (var entry, $entry = columnResidues.entrySet ().iterator (); $entry.hasNext () && ((entry = $entry.next ()) || true);) {
+entry.getKey ().getSequence ()[column] = entry.getValue ().charAt (0);
+}
+column++;
+}
+return 0;
+}, "jalview.datamodel.AlignmentI,java.util.Map");
+c$.addCodonPositions = Clazz.defineMethod (c$, "addCodonPositions", 
+function (dna, protein, gapChar, seqMap, alignedCodons) {
+var codons = seqMap.getCodonIterator (dna, gapChar);
+while (codons.hasNext ()) {
+var codon = codons.next ();
+var seqProduct = alignedCodons.get (codon);
+if (seqProduct == null) {
+seqProduct =  new java.util.HashMap ();
+alignedCodons.put (codon, seqProduct);
+}seqProduct.put (protein, codon.product);
+}
+}, "jalview.datamodel.SequenceI,jalview.datamodel.SequenceI,~S,jalview.datamodel.Mapping,java.util.Map");
+c$.isMappable = Clazz.defineMethod (c$, "isMappable", 
+function (al1, al2) {
+if (al1.isNucleotide () == al2.isNucleotide ()) {
+return false;
+}var dna = al1.isNucleotide () ? al1 : al2;
+var protein = dna === al1 ? al2 : al1;
+var mappings = protein.getCodonFrames ();
+for (var dnaSeq, $dnaSeq = dna.getSequences ().iterator (); $dnaSeq.hasNext () && ((dnaSeq = $dnaSeq.next ()) || true);) {
+for (var proteinSeq, $proteinSeq = protein.getSequences ().iterator (); $proteinSeq.hasNext () && ((proteinSeq = $proteinSeq.next ()) || true);) {
+if (jalview.analysis.AlignmentUtils.isMappable (dnaSeq, proteinSeq, mappings)) {
+return true;
+}}
+}
+return false;
+}, "jalview.datamodel.AlignmentI,jalview.datamodel.AlignmentI");
+c$.isMappable = Clazz.defineMethod (c$, "isMappable", 
+function (dnaSeq, proteinSeq, mappings) {
+var dnaDs = dnaSeq.getDatasetSequence () == null ? dnaSeq : dnaSeq.getDatasetSequence ();
+var proteinDs = proteinSeq.getDatasetSequence () == null ? proteinSeq : proteinSeq.getDatasetSequence ();
+for (var mapping, $mapping = mappings.iterator (); $mapping.hasNext () && ((mapping = $mapping.next ()) || true);) {
+if (proteinDs === mapping.getAaForDnaSeq (dnaDs)) {
+return true;
+}}
+return jalview.analysis.AlignmentUtils.mapProteinToCdna (proteinDs, dnaDs) != null;
+}, "jalview.datamodel.SequenceI,jalview.datamodel.SequenceI,java.util.Set");
+c$.findAddableReferenceAnnotations = Clazz.defineMethod (c$, "findAddableReferenceAnnotations", 
+function (sequenceScope, labelForCalcId, candidates, al) {
+if (sequenceScope == null) {
+return;
+}for (var seq, $seq = sequenceScope.iterator (); $seq.hasNext () && ((seq = $seq.next ()) || true);) {
+var dataset = seq.getDatasetSequence ();
+if (dataset == null) {
+continue;
+}var datasetAnnotations = dataset.getAnnotation ();
+if (datasetAnnotations == null) {
+continue;
+}var result =  new java.util.ArrayList ();
+for (var dsann, $dsann = 0, $$dsann = datasetAnnotations; $dsann < $$dsann.length && ((dsann = $$dsann[$dsann]) || true); $dsann++) {
+var matchedAlignmentAnnotations = al.findAnnotations (seq, dsann.getCalcId (), dsann.label);
+if (!matchedAlignmentAnnotations.iterator ().hasNext ()) {
+result.add (dsann);
+if (labelForCalcId != null) {
+labelForCalcId.put (dsann.getCalcId (), dsann.label);
+}}}
+if (!result.isEmpty ()) {
+candidates.put (seq, result);
+}}
+}, "java.util.List,java.util.Map,java.util.Map,jalview.datamodel.AlignmentI");
+c$.addReferenceAnnotations = Clazz.defineMethod (c$, "addReferenceAnnotations", 
+function (annotations, alignment, selectionGroup) {
+for (var seq, $seq = annotations.keySet ().iterator (); $seq.hasNext () && ((seq = $seq.next ()) || true);) {
+for (var ann, $ann = annotations.get (seq).iterator (); $ann.hasNext () && ((ann = $ann.next ()) || true);) {
+var copyAnn =  new jalview.datamodel.AlignmentAnnotation (ann);
+var startRes = 0;
+var endRes = ann.annotations.length;
+if (selectionGroup != null) {
+startRes = selectionGroup.getStartRes ();
+endRes = selectionGroup.getEndRes ();
+}copyAnn.restrict (startRes, endRes);
+if (!seq.hasAnnotation (ann)) {
+seq.addAlignmentAnnotation (copyAnn);
+}copyAnn.adjustForAlignment ();
+alignment.addAnnotation (copyAnn);
+copyAnn.visible = true;
+}
+}
+}, "java.util.Map,jalview.datamodel.AlignmentI,jalview.datamodel.SequenceGroup");
+c$.showOrHideSequenceAnnotations = Clazz.defineMethod (c$, "showOrHideSequenceAnnotations", 
+function (al, types, forSequences, anyType, doShow) {
+for (var aa, $aa = 0, $$aa = al.getAlignmentAnnotation (); $aa < $$aa.length && ((aa = $$aa[$aa]) || true); $aa++) {
+if (anyType || types.contains (aa.label)) {
+if ((aa.sequenceRef != null) && (forSequences == null || forSequences.contains (aa.sequenceRef))) {
+aa.visible = doShow;
+}}}
+}, "jalview.datamodel.AlignmentI,java.util.Collection,java.util.List,~B,~B");
+c$.haveCrossRef = Clazz.defineMethod (c$, "haveCrossRef", 
+function (seq1, seq2) {
+return jalview.analysis.AlignmentUtils.hasCrossRef (seq1, seq2) || jalview.analysis.AlignmentUtils.hasCrossRef (seq2, seq1);
+}, "jalview.datamodel.SequenceI,jalview.datamodel.SequenceI");
+c$.hasCrossRef = Clazz.defineMethod (c$, "hasCrossRef", 
+function (seq1, seq2) {
+if (seq1 == null || seq2 == null) {
+return false;
+}var name = seq2.getName ();
+var xrefs = seq1.getDBRef ();
+if (xrefs != null) {
+for (var xref, $xref = 0, $$xref = xrefs; $xref < $$xref.length && ((xref = $$xref[$xref]) || true); $xref++) {
+var xrefName = xref.getSource () + "|" + xref.getAccessionId ();
+if (xrefName.equalsIgnoreCase (name)) {
+return true;
+}}
+}return false;
+}, "jalview.datamodel.SequenceI,jalview.datamodel.SequenceI");
+c$.makeExonAlignment = Clazz.defineMethod (c$, "makeExonAlignment", 
+function (dna, mappings) {
+var newMappings =  new java.util.LinkedHashSet ();
+var exonSequences =  new java.util.ArrayList ();
+for (var dnaSeq, $dnaSeq = 0, $$dnaSeq = dna; $dnaSeq < $$dnaSeq.length && ((dnaSeq = $$dnaSeq[$dnaSeq]) || true); $dnaSeq++) {
+var ds = dnaSeq.getDatasetSequence ();
+var seqMappings = jalview.util.MappingUtils.findMappingsForSequence (ds, mappings);
+for (var acf, $acf = seqMappings.iterator (); $acf.hasNext () && ((acf = $acf.next ()) || true);) {
+var newMapping =  new jalview.datamodel.AlignedCodonFrame ();
+var mappedExons = jalview.analysis.AlignmentUtils.makeExonSequences (ds, acf, newMapping);
+if (!mappedExons.isEmpty ()) {
+exonSequences.addAll (mappedExons);
+newMappings.add (newMapping);
+}}
+}
+var al =  new jalview.datamodel.Alignment (exonSequences.toArray ( new Array (exonSequences.size ())));
+al.setDataset (null);
+mappings.clear ();
+mappings.addAll (newMappings);
+return al;
+}, "~A,java.util.Set");
+c$.makeExonSequences = Clazz.defineMethod (c$, "makeExonSequences", 
+function (dnaSeq, mapping, newMapping) {
+var exonSequences =  new java.util.ArrayList ();
+var seqMappings = mapping.getMappingsForSequence (dnaSeq);
+var dna = dnaSeq.getSequence ();
+for (var seqMapping, $seqMapping = seqMappings.iterator (); $seqMapping.hasNext () && ((seqMapping = $seqMapping.next ()) || true);) {
+var newSequence =  new StringBuilder (dnaSeq.getLength ());
+var dnaExonRanges = seqMapping.getMap ().getFromRanges ();
+for (var range, $range = dnaExonRanges.iterator (); $range.hasNext () && ((range = $range.next ()) || true);) {
+for (var pos = range[0]; pos <= range[1]; pos++) {
+newSequence.append (dna[pos - 1]);
+}
+}
+var exon =  new jalview.datamodel.Sequence (dnaSeq.getName (), newSequence.toString ());
+var cdsAccId = jalview.datamodel.FeatureProperties.getCodingFeature (jalview.datamodel.DBRefSource.EMBL);
+var cdsRefs = jalview.util.DBRefUtils.selectRefs (seqMapping.getTo ().getDBRef (), jalview.datamodel.DBRefSource.CODINGDBS);
+if (cdsRefs != null) {
+for (var cdsRef, $cdsRef = 0, $$cdsRef = cdsRefs; $cdsRef < $$cdsRef.length && ((cdsRef = $$cdsRef[$cdsRef]) || true); $cdsRef++) {
+exon.addDBRef ( new jalview.datamodel.DBRefEntry (cdsRef));
+cdsAccId = cdsRef.getAccessionId ();
+}
+}exon.setName (exon.getName () + "|" + cdsAccId);
+exon.createDatasetSequence ();
+var exonRange =  new java.util.ArrayList ();
+exonRange.add ( Clazz.newIntArray (-1, [1, newSequence.length ()]));
+var map =  new jalview.util.MapList (exonRange, seqMapping.getMap ().getToRanges (), 3, 1);
+newMapping.addMap (exon.getDatasetSequence (), seqMapping.getTo (), map);
+var cdsToDnaMap =  new jalview.util.MapList (dnaExonRanges, exonRange, 1, 1);
+newMapping.addMap (dnaSeq, exon.getDatasetSequence (), cdsToDnaMap);
+exonSequences.add (exon);
+}
+return exonSequences;
+}, "jalview.datamodel.SequenceI,jalview.datamodel.AlignedCodonFrame,jalview.datamodel.AlignedCodonFrame");
+});