X-Git-Url: http://source.jalview.org/gitweb/?p=jalviewjs.git;a=blobdiff_plain;f=bin%2Fjalview%2Fanalysis%2FAlignmentUtils.js;h=2990b034337eb4f6fa9c9470530c26c3136d0369;hp=6af5e7ad6fe5d41f5231023b2aadc0cf02f0354e;hb=7301a2415adab88038b291fc54caeeb3a5a47a44;hpb=6154cb57a6eac3bb1344b8342495f5bb701ee921 diff --git a/bin/jalview/analysis/AlignmentUtils.js b/bin/jalview/analysis/AlignmentUtils.js index 6af5e7a..2990b03 100644 --- a/bin/jalview/analysis/AlignmentUtils.js +++ b/bin/jalview/analysis/AlignmentUtils.js @@ -1,532 +1,532 @@ -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"); -}); +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"); +});