X-Git-Url: http://source.jalview.org/gitweb/?p=jalviewjs.git;a=blobdiff_plain;f=site%2Fj2s%2Fjalview%2Fanalysis%2FAlignSeq.js;h=6a8048a10d767b127ab240bca8d9290513a1080c;hp=5d2154f2212fe7675eda2d58be54f2895e96e0cc;hb=b9b7a352eee79b7764c3b09c9d19663075061d8c;hpb=8ffd05b3abe52c0b6b79b011c0966361f82d5fe6 diff --git a/site/j2s/jalview/analysis/AlignSeq.js b/site/j2s/jalview/analysis/AlignSeq.js index 5d2154f..6a8048a 100644 --- a/site/j2s/jalview/analysis/AlignSeq.js +++ b/site/j2s/jalview/analysis/AlignSeq.js @@ -1,586 +1,586 @@ -Clazz.declarePackage ("jalview.analysis"); -Clazz.load (["jalview.schemes.ResidueProperties", "java.lang.StringBuffer"], "jalview.analysis.AlignSeq", ["jalview.datamodel.Mapping", "$.Sequence", "jalview.util.Comparison", "$.Format", "$.MapList", "$.MessageManager", "java.awt.Color", "java.lang.Error", "$.StringBuilder", "java.util.ArrayList", "$.Arrays", "$.StringTokenizer"], function () { -c$ = Clazz.decorateAsClass (function () { -this.score = null; -this.E = null; -this.F = null; -this.traceback = null; -this.seq1 = null; -this.seq2 = null; -this.s1 = null; -this.s2 = null; -this.s1str = null; -this.s2str = null; -this.maxi = 0; -this.maxj = 0; -this.aseq1 = null; -this.aseq2 = null; -this.astr1 = ""; -this.astr2 = ""; -this.seq1start = 0; -this.seq1end = 0; -this.seq2start = 0; -this.seq2end = 0; -this.count = 0; -this.maxscore = 0; -this.pid = 0; -this.prev = 0; -this.gapOpen = 120; -this.gapExtend = 20; -this.lookup = null; -this.intToStr = null; -this.defInt = 23; -this.output = null; -this.type = null; -this.charToInt = null; -Clazz.instantialize (this, arguments); -}, jalview.analysis, "AlignSeq"); -Clazz.prepareFields (c$, function () { -this.lookup = jalview.schemes.ResidueProperties.getBLOSUM62 (); -this.intToStr = jalview.analysis.AlignSeq.pep; -this.output = new StringBuffer (); -}); -Clazz.makeConstructor (c$, -function (s1, s2, type) { -this.SeqInit (s1, s1.getSequenceAsString (), s2, s2.getSequenceAsString (), type); -}, "jalview.datamodel.SequenceI,jalview.datamodel.SequenceI,~S"); -Clazz.makeConstructor (c$, -function (s1, string1, s2, string2, type) { -this.SeqInit (s1, string1.toUpperCase (), s2, string2.toUpperCase (), type); -}, "jalview.datamodel.SequenceI,~S,jalview.datamodel.SequenceI,~S,~S"); -Clazz.defineMethod (c$, "getMaxScore", -function () { -return this.maxscore; -}); -Clazz.defineMethod (c$, "getSeq2Start", -function () { -return this.seq2start; -}); -Clazz.defineMethod (c$, "getSeq2End", -function () { -return this.seq2end; -}); -Clazz.defineMethod (c$, "getSeq1Start", -function () { -return this.seq1start; -}); -Clazz.defineMethod (c$, "getSeq1End", -function () { -return this.seq1end; -}); -Clazz.defineMethod (c$, "getOutput", -function () { -return this.output.toString (); -}); -Clazz.defineMethod (c$, "getAStr1", -function () { -return this.astr1; -}); -Clazz.defineMethod (c$, "getAStr2", -function () { -return this.astr2; -}); -Clazz.defineMethod (c$, "getASeq1", -function () { -return this.aseq1; -}); -Clazz.defineMethod (c$, "getASeq2", -function () { -return this.aseq2; -}); -Clazz.defineMethod (c$, "getS1", -function () { -return this.s1; -}); -Clazz.defineMethod (c$, "getS2", -function () { -return this.s2; -}); -Clazz.defineMethod (c$, "getAlignedSeq1", -function () { -var alSeq1 = new jalview.datamodel.Sequence (this.s1.getName (), this.getAStr1 ()); -alSeq1.setStart (this.s1.getStart () + this.getSeq1Start () - 1); -alSeq1.setEnd (this.s1.getStart () + this.getSeq1End () - 1); -alSeq1.setDatasetSequence (this.s1.getDatasetSequence () == null ? this.s1 : this.s1.getDatasetSequence ()); -return alSeq1; -}); -Clazz.defineMethod (c$, "getAlignedSeq2", -function () { -var alSeq2 = new jalview.datamodel.Sequence (this.s2.getName (), this.getAStr2 ()); -alSeq2.setStart (this.s2.getStart () + this.getSeq2Start () - 1); -alSeq2.setEnd (this.s2.getStart () + this.getSeq2End () - 1); -alSeq2.setDatasetSequence (this.s2.getDatasetSequence () == null ? this.s2 : this.s2.getDatasetSequence ()); -return alSeq2; -}); -Clazz.defineMethod (c$, "SeqInit", -function (s1, string1, s2, string2, type) { -this.s1 = s1; -this.s2 = s2; -this.setDefaultParams (type); -this.SeqInit (string1, string2); -}, "jalview.datamodel.SequenceI,~S,jalview.datamodel.SequenceI,~S,~S"); -Clazz.defineMethod (c$, "SeqInit", -function (s1, string1, s2, string2, scoreMatrix) { -this.s1 = s1; -this.s2 = s2; -this.setType (scoreMatrix.isDNA () ? "dna" : "pep"); -this.lookup = scoreMatrix.getMatrix (); -}, "jalview.datamodel.SequenceI,~S,jalview.datamodel.SequenceI,~S,jalview.schemes.ScoreMatrix"); -Clazz.defineMethod (c$, "SeqInit", - function (string1, string2) { -this.s1str = jalview.analysis.AlignSeq.extractGaps (jalview.util.Comparison.GapChars, string1); -this.s2str = jalview.analysis.AlignSeq.extractGaps (jalview.util.Comparison.GapChars, string2); -if (this.s1str.length == 0 || this.s2str.length == 0) { -this.output.append ("ALL GAPS: " + (this.s1str.length == 0 ? this.s1.getName () : " ") + (this.s2str.length == 0 ? this.s2.getName () : "")); -return; -}this.seq1 = Clazz.newIntArray (this.s1str.length, 0); -this.seq2 = Clazz.newIntArray (this.s2str.length, 0); -this.score = Clazz.newIntArray (this.s1str.length, this.s2str.length, 0); -this.E = Clazz.newIntArray (this.s1str.length, this.s2str.length, 0); -this.F = Clazz.newIntArray (this.s1str.length, this.s2str.length, 0); -this.traceback = Clazz.newIntArray (this.s1str.length, this.s2str.length, 0); -this.seq1 = this.stringToInt (this.s1str, this.type); -this.seq2 = this.stringToInt (this.s2str, this.type); -}, "~S,~S"); -Clazz.defineMethod (c$, "setDefaultParams", - function (type) { -this.setType (type); -if (type.equals ("pep")) { -this.lookup = jalview.schemes.ResidueProperties.getDefaultPeptideMatrix (); -} else if (type.equals ("dna")) { -this.lookup = jalview.schemes.ResidueProperties.getDefaultDnaMatrix (); -}}, "~S"); -Clazz.defineMethod (c$, "setType", - function (type2) { -this.type = type2; -if (this.type.equals ("pep")) { -this.intToStr = jalview.analysis.AlignSeq.pep; -this.charToInt = jalview.schemes.ResidueProperties.aaIndex; -this.defInt = 23; -} else if (this.type.equals ("dna")) { -this.intToStr = jalview.analysis.AlignSeq.dna; -this.charToInt = jalview.schemes.ResidueProperties.nucleotideIndex; -this.defInt = 10; -} else { -this.output.append ("Wrong type = dna or pep only"); -throw new Error (jalview.util.MessageManager.formatMessage ("error.unknown_type_dna_or_pep", Clazz.newArray (-1, [type2]))); -}}, "~S"); -Clazz.defineMethod (c$, "traceAlignment", -function () { -var max = -9999; -for (var i = 0; i < this.seq1.length; i++) { -if (this.score[i][this.seq2.length - 1] > max) { -max = this.score[i][this.seq2.length - 1]; -this.maxi = i; -this.maxj = this.seq2.length - 1; -}} -for (var j = 0; j < this.seq2.length; j++) { -if (this.score[this.seq1.length - 1][j] > max) { -max = this.score[this.seq1.length - 1][j]; -this.maxi = this.seq1.length - 1; -this.maxj = j; -}} -var i = this.maxi; -var j = this.maxj; -var trace; -this.maxscore = Clazz.doubleToInt (this.score[i][j] / 10); -this.seq1end = this.maxi + 1; -this.seq2end = this.maxj + 1; -this.aseq1 = Clazz.newIntArray (this.seq1.length + this.seq2.length, 0); -this.aseq2 = Clazz.newIntArray (this.seq1.length + this.seq2.length, 0); -this.count = (this.seq1.length + this.seq2.length) - 1; -while ((i > 0) && (j > 0)) { -if ((this.aseq1[this.count] != this.defInt) && (i >= 0)) { -this.aseq1[this.count] = this.seq1[i]; -this.astr1 = this.s1str.charAt (i) + this.astr1; -}if ((this.aseq2[this.count] != this.defInt) && (j > 0)) { -this.aseq2[this.count] = this.seq2[j]; -this.astr2 = this.s2str.charAt (j) + this.astr2; -}trace = this.findTrace (i, j); -if (trace == 0) { -i--; -j--; -} else if (trace == 1) { -j--; -this.aseq1[this.count] = this.defInt; -this.astr1 = "-" + this.astr1.substring (1); -} else if (trace == -1) { -i--; -this.aseq2[this.count] = this.defInt; -this.astr2 = "-" + this.astr2.substring (1); -}this.count--; -} -this.seq1start = i + 1; -this.seq2start = j + 1; -if (this.aseq1[this.count] != this.defInt) { -this.aseq1[this.count] = this.seq1[i]; -this.astr1 = this.s1str.charAt (i) + this.astr1; -}if (this.aseq2[this.count] != this.defInt) { -this.aseq2[this.count] = this.seq2[j]; -this.astr2 = this.s2str.charAt (j) + this.astr2; -}}); -Clazz.defineMethod (c$, "printAlignment", -function (os) { -var s1id = this.s1.getName (); -var s2id = this.s2.getName (); -var maxid = this.s1.getName ().length; -if (this.s2.getName ().length > maxid) { -maxid = this.s2.getName ().length; -}if (maxid > 30) { -maxid = 30; -if (this.s1.getName ().length > maxid) { -s1id = this.s1.getName ().substring (0, 30); -}if (this.s2.getName ().length > maxid) { -s2id = this.s2.getName ().substring (0, 30); -}}var len = 72 - maxid - 1; -var nochunks = (Clazz.doubleToInt ((this.aseq1.length - this.count) / len)) + 1; -this.pid = 0; -this.output.append ("Score = ").append (this.score[this.maxi][this.maxj]).append (jalview.analysis.AlignSeq.NEWLINE); -this.output.append ("Length of alignment = ").append (String.valueOf (this.aseq1.length - this.count)).append (jalview.analysis.AlignSeq.NEWLINE); -this.output.append ("Sequence "); -this.output.append ( new jalview.util.Format ("%" + maxid + "s").form (this.s1.getName ())); -this.output.append (" : ").append (String.valueOf (this.s1.getStart ())).append (" - ").append (String.valueOf (this.s1.getEnd ())); -this.output.append (" (Sequence length = ").append (String.valueOf (this.s1str.length)).append (")").append (jalview.analysis.AlignSeq.NEWLINE); -this.output.append ("Sequence "); -this.output.append ( new jalview.util.Format ("%" + maxid + "s").form (this.s2.getName ())); -this.output.append (" : ").append (String.valueOf (this.s2.getStart ())).append (" - ").append (String.valueOf (this.s2.getEnd ())); -this.output.append (" (Sequence length = ").append (String.valueOf (this.s2str.length)).append (")").append (jalview.analysis.AlignSeq.NEWLINE).append (jalview.analysis.AlignSeq.NEWLINE); -for (var j = 0; j < nochunks; j++) { -this.output.append ( new jalview.util.Format ("%" + (maxid) + "s").form (s1id)).append (" "); -for (var i = 0; i < len; i++) { -if ((i + (j * len)) < this.astr1.length) { -this.output.append (this.astr1.charAt (i + (j * len))); -}} -this.output.append (jalview.analysis.AlignSeq.NEWLINE); -this.output.append ( new jalview.util.Format ("%" + (maxid) + "s").form (" ")).append (" "); -for (var i = 0; i < len; i++) { -if ((i + (j * len)) < this.astr1.length) { -if (this.astr1.charAt (i + (j * len)) == this.astr2.charAt (i + (j * len)) && !jalview.util.Comparison.isGap (this.astr1.charAt (i + (j * len)))) { -this.pid++; -this.output.append ("|"); -} else if (this.type.equals ("pep")) { -if (jalview.schemes.ResidueProperties.getPAM250 (this.astr1.charAt (i + (j * len)), this.astr2.charAt (i + (j * len))) > 0) { -this.output.append ("."); -} else { -this.output.append (" "); -}} else { -this.output.append (" "); -}}} -this.output = this.output.append (jalview.analysis.AlignSeq.NEWLINE); -this.output = this.output.append ( new jalview.util.Format ("%" + (maxid) + "s").form (s2id)).append (" "); -for (var i = 0; i < len; i++) { -if ((i + (j * len)) < this.astr2.length) { -this.output.append (this.astr2.charAt (i + (j * len))); -}} -this.output.append (jalview.analysis.AlignSeq.NEWLINE).append (jalview.analysis.AlignSeq.NEWLINE); -} -this.pid = this.pid / (this.aseq1.length - this.count) * 100; -this.output = this.output.append ( new jalview.util.Format ("Percentage ID = %2.2f\n\n").formDouble (this.pid)); -try { -os.print (this.output.toString ()); -} catch (ex) { -if (Clazz.exceptionOf (ex, Exception)) { -} else { -throw ex; -} -} -}, "java.io.PrintStream"); -Clazz.defineMethod (c$, "printScoreMatrix", -function (mat) { -var n = this.seq1.length; -var m = this.seq2.length; -for (var i = 0; i < n; i++) { -if (i == 0) { -jalview.util.Format.print (System.out, "%8s", this.s2str.substring (0, 1)); -for (var jj = 1; jj < m; jj++) { -jalview.util.Format.print (System.out, "%5s", this.s2str.substring (jj, jj + 1)); -} -System.out.println (); -}for (var j = 0; j < m; j++) { -if (j == 0) { -jalview.util.Format.print (System.out, "%3s", this.s1str.substring (i, i + 1)); -}jalview.util.Format.printLong (System.out, "%3d ", Clazz.doubleToInt (mat[i][j] / 10)); -} -System.out.println (); -} -}, "~A"); -Clazz.defineMethod (c$, "findTrace", -function (i, j) { -var t = 0; -var max = this.score[i - 1][j - 1] + (this.lookup[this.seq1[i]][this.seq2[j]] * 10); -if (this.F[i][j] > max) { -max = this.F[i][j]; -t = -1; -} else if (this.F[i][j] == max) { -if (this.prev == -1) { -max = this.F[i][j]; -t = -1; -}}if (this.E[i][j] >= max) { -max = this.E[i][j]; -t = 1; -} else if (this.E[i][j] == max) { -if (this.prev == 1) { -max = this.E[i][j]; -t = 1; -}}this.prev = t; -return t; -}, "~N,~N"); -Clazz.defineMethod (c$, "calcScoreMatrix", -function () { -var n = this.seq1.length; -var m = this.seq2.length; -this.score[0][0] = this.lookup[this.seq1[0]][this.seq2[0]] * 10; -this.E[0][0] = -this.gapExtend; -this.F[0][0] = 0; -for (var j = 1; j < m; j++) { -this.E[0][j] = this.max (this.score[0][j - 1] - this.gapOpen, this.E[0][j - 1] - this.gapExtend); -this.F[0][j] = -this.gapExtend; -this.score[0][j] = this.max (this.lookup[this.seq1[0]][this.seq2[j]] * 10, -this.gapOpen, -this.gapExtend); -this.traceback[0][j] = 1; -} -for (var i = 1; i < n; i++) { -this.E[i][0] = -this.gapOpen; -this.F[i][0] = this.max (this.score[i - 1][0] - this.gapOpen, this.F[i - 1][0] - this.gapExtend); -this.score[i][0] = this.max (this.lookup[this.seq1[i]][this.seq2[0]] * 10, this.E[i][0], this.F[i][0]); -this.traceback[i][0] = -1; -} -for (var i = 1; i < n; i++) { -for (var j = 1; j < m; j++) { -this.E[i][j] = this.max (this.score[i][j - 1] - this.gapOpen, this.E[i][j - 1] - this.gapExtend); -this.F[i][j] = this.max (this.score[i - 1][j] - this.gapOpen, this.F[i - 1][j] - this.gapExtend); -this.score[i][j] = this.max (this.score[i - 1][j - 1] + (this.lookup[this.seq1[i]][this.seq2[j]] * 10), this.E[i][j], this.F[i][j]); -this.traceback[i][j] = this.findTrace (i, j); -} -} -}); -c$.extractGaps = Clazz.defineMethod (c$, "extractGaps", -function (gapChars, seq) { -if (gapChars == null || seq == null) { -return null; -}var str = new java.util.StringTokenizer (seq, gapChars); -var newString = new StringBuilder (seq.length); -while (str.hasMoreTokens ()) { -newString.append (str.nextToken ()); -} -return newString.toString (); -}, "~S,~S"); -Clazz.defineMethod (c$, "max", -function (i1, i2, i3) { -var max = i1; -if (i2 > i1) { -max = i2; -}if (i3 > max) { -max = i3; -}return max; -}, "~N,~N,~N"); -Clazz.defineMethod (c$, "max", -function (i1, i2) { -var max = i1; -if (i2 > i1) { -max = i2; -}return max; -}, "~N,~N"); -Clazz.defineMethod (c$, "stringToInt", -function (s, type) { -var seq1 = Clazz.newIntArray (s.length, 0); -for (var i = 0; i < s.length; i++) { -var c = s.charAt (i); -if ('a' <= c && c <= 'z') { -c = String.fromCharCode (c.charCodeAt (0) - (32)); -}try { -seq1[i] = this.charToInt[c.charCodeAt (0)]; -if (seq1[i] < 0 || seq1[i] > this.defInt) { -seq1[i] = this.defInt; -}} catch (e) { -if (Clazz.exceptionOf (e, Exception)) { -seq1[i] = this.defInt; -} else { -throw e; -} -} -} -return seq1; -}, "~S,~S"); -c$.displayMatrix = Clazz.defineMethod (c$, "displayMatrix", -function (g, mat, n, m, psize) { -var max = -1000; -var min = 1000; -for (var i = 0; i < n; i++) { -for (var j = 0; j < m; j++) { -if (mat[i][j] >= max) { -max = mat[i][j]; -}if (mat[i][j] <= min) { -min = mat[i][j]; -}} -} -System.out.println (max + " " + min); -for (var i = 0; i < n; i++) { -for (var j = 0; j < m; j++) { -var x = psize * i; -var y = psize * j; -var score = (mat[i][j] - min) / (max - min); -g.setColor ( new java.awt.Color (score, 0, 0)); -g.fillRect (x, y, psize, psize); -} -} -}, "java.awt.Graphics,~A,~N,~N,~N"); -c$.doGlobalNWAlignment = Clazz.defineMethod (c$, "doGlobalNWAlignment", -function (s1, s2, type) { -var as = new jalview.analysis.AlignSeq (s1, s2, type); -as.calcScoreMatrix (); -as.traceAlignment (); -return as; -}, "jalview.datamodel.SequenceI,jalview.datamodel.SequenceI,~S"); -Clazz.defineMethod (c$, "getMappingFromS1", -function (allowmismatch) { -var as1 = new java.util.ArrayList (); -var as2 = new java.util.ArrayList (); -var pdbpos = this.s2.getStart () + this.getSeq2Start () - 2; -var alignpos = this.s1.getStart () + this.getSeq1Start () - 2; -var lp2 = pdbpos - 3; -var lp1 = alignpos - 3; -var lastmatch = false; -for (var i = 0; i < this.astr1.length; i++) { -var c1 = this.astr1.charAt (i); -var c2 = this.astr2.charAt (i); -if (c1 != '-') { -alignpos++; -}if (c2 != '-') { -pdbpos++; -}if (allowmismatch || c1 == c2) { -if (lp1 + 1 != alignpos || lp2 + 1 != pdbpos) { -as1.add (Integer.$valueOf (alignpos)); -as2.add (Integer.$valueOf (pdbpos)); -}lastmatch = true; -lp1 = alignpos; -lp2 = pdbpos; -} else { -if (lastmatch) { -as1.add (Integer.$valueOf (lp1)); -as2.add (Integer.$valueOf (lp2)); -}lastmatch = false; -}} -var mapseq1 = Clazz.newIntArray (as1.size () + (lastmatch ? 1 : 0), 0); -var mapseq2 = Clazz.newIntArray (as2.size () + (lastmatch ? 1 : 0), 0); -var i = 0; -for (var ip, $ip = as1.iterator (); $ip.hasNext () && ((ip = $ip.next ()) || true);) { -mapseq1[i++] = (ip).intValue (); -} -;i = 0; -for (var ip, $ip = as2.iterator (); $ip.hasNext () && ((ip = $ip.next ()) || true);) { -mapseq2[i++] = (ip).intValue (); -} -;if (lastmatch) { -mapseq1[mapseq1.length - 1] = alignpos; -mapseq2[mapseq2.length - 1] = pdbpos; -}var map = new jalview.util.MapList (mapseq1, mapseq2, 1, 1); -var mapping = new jalview.datamodel.Mapping (map); -mapping.setTo (this.s2); -return mapping; -}, "~B"); -c$.replaceMatchingSeqsWith = Clazz.defineMethod (c$, "replaceMatchingSeqsWith", -function (seqs, annotations, ochains, al, dnaOrProtein, removeOldAnnots) { -var orig = new java.util.ArrayList (); -var repl = new java.util.ArrayList (); -var aligs = new java.util.ArrayList (); -if (al != null && al.getHeight () > 0) { -var matches = new java.util.ArrayList (); -var aligns = new java.util.ArrayList (); -for (var sq, $sq = ochains.iterator (); $sq.hasNext () && ((sq = $sq.next ()) || true);) { -var bestm = null; -var bestaseq = null; -var bestscore = 0; -for (var msq, $msq = al.getSequences ().iterator (); $msq.hasNext () && ((msq = $msq.next ()) || true);) { -var aseq = jalview.analysis.AlignSeq.doGlobalNWAlignment (msq, sq, dnaOrProtein); -if (bestm == null || aseq.getMaxScore () > bestscore) { -bestscore = aseq.getMaxScore (); -bestaseq = aseq; -bestm = msq; -}} -System.out.println ("Best Score for " + (matches.size () + 1) + " :" + bestscore); -matches.add (bestm); -aligns.add (bestaseq); -al.deleteSequence (bestm); -} -for (var p = 0, pSize = seqs.size (); p < pSize; p++) { -var sq; -var sp = seqs.get (p); -var q; -if ((q = ochains.indexOf (sp)) > -1) { -seqs.set (p, sq = matches.get (q)); -orig.add (sp); -repl.add (sq); -sq.setName (sp.getName ()); -sq.setDescription (sp.getDescription ()); -var sp2sq; -sq.transferAnnotation (sp, sp2sq = aligns.get (q).getMappingFromS1 (false)); -aligs.add (aligns.get (q)); -var inspos = -1; -for (var ap = 0; ap < annotations.size (); ) { -if (annotations.get (ap).sequenceRef === sp) { -if (inspos == -1) { -inspos = ap; -}if (removeOldAnnots) { -annotations.remove (ap); -} else { -var alan = annotations.remove (ap); -alan.liftOver (sq, sp2sq); -alan.setSequenceRef (sq); -sq.addAlignmentAnnotation (alan); -}} else { -ap++; -}} -if (sq.getAnnotation () != null && sq.getAnnotation ().length > 0) { -annotations.addAll (inspos == -1 ? annotations.size () : inspos, java.util.Arrays.asList (sq.getAnnotation ())); -}}} -}return java.util.Arrays.asList ([orig, repl, aligs]); -}, "java.util.List,java.util.List,java.util.List,jalview.datamodel.AlignmentI,~S,~B"); -c$.computeRedundancyMatrix = Clazz.defineMethod (c$, "computeRedundancyMatrix", -function (originalSequences, omitHidden, start, end, ungapped) { -var height = originalSequences.length; -var redundancy = Clazz.newFloatArray (height, 0); -var lngth = Clazz.newIntArray (height, 0); -for (var i = 0; i < height; i++) { -redundancy[i] = 0; -lngth[i] = -1; -} -var pid; -var seqi; -var seqj; -for (var i = 0; i < height; i++) { -for (var j = 0; j < i; j++) { -if (i == j) { -continue; -}if (omitHidden == null) { -seqi = originalSequences[i].getSequenceAsString (start, end); -seqj = originalSequences[j].getSequenceAsString (start, end); -} else { -seqi = omitHidden[i]; -seqj = omitHidden[j]; -}if (lngth[i] == -1) { -var ug = jalview.analysis.AlignSeq.extractGaps (jalview.util.Comparison.GapChars, seqi); -lngth[i] = ug.length; -if (ungapped) { -seqi = ug; -}}if (lngth[j] == -1) { -var ug = jalview.analysis.AlignSeq.extractGaps (jalview.util.Comparison.GapChars, seqj); -lngth[j] = ug.length; -if (ungapped) { -seqj = ug; -}}pid = jalview.util.Comparison.PID (seqi, seqj); -if (lngth[j] < lngth[i]) { -redundancy[j] = Math.max (pid, redundancy[j]); -} else { -redundancy[i] = Math.max (pid, redundancy[i]); -}} -} -return redundancy; -}, "~A,~A,~N,~N,~B"); -Clazz.defineStatics (c$, -"PEP", "pep", -"DNA", "dna"); -c$.NEWLINE = c$.prototype.NEWLINE = System.lineSeparator (); -Clazz.defineStatics (c$, -"dna", Clazz.newArray (-1, ["A", "C", "G", "T", "-"]), -"pep", Clazz.newArray (-1, ["A", "R", "N", "D", "C", "Q", "E", "G", "H", "I", "L", "K", "M", "F", "P", "S", "T", "W", "Y", "V", "B", "Z", "X", "-"])); -}); +Clazz.declarePackage ("jalview.analysis"); +Clazz.load (["jalview.schemes.ResidueProperties", "java.lang.StringBuffer"], "jalview.analysis.AlignSeq", ["jalview.datamodel.Mapping", "$.Sequence", "jalview.util.Comparison", "$.Format", "$.MapList", "$.MessageManager", "java.awt.Color", "java.lang.Error", "$.StringBuilder", "java.util.ArrayList", "$.Arrays", "$.StringTokenizer"], function () { +c$ = Clazz.decorateAsClass (function () { +this.score = null; +this.E = null; +this.F = null; +this.traceback = null; +this.seq1 = null; +this.seq2 = null; +this.s1 = null; +this.s2 = null; +this.s1str = null; +this.s2str = null; +this.maxi = 0; +this.maxj = 0; +this.aseq1 = null; +this.aseq2 = null; +this.astr1 = ""; +this.astr2 = ""; +this.seq1start = 0; +this.seq1end = 0; +this.seq2start = 0; +this.seq2end = 0; +this.count = 0; +this.maxscore = 0; +this.pid = 0; +this.prev = 0; +this.gapOpen = 120; +this.gapExtend = 20; +this.lookup = null; +this.intToStr = null; +this.defInt = 23; +this.output = null; +this.type = null; +this.charToInt = null; +Clazz.instantialize (this, arguments); +}, jalview.analysis, "AlignSeq"); +Clazz.prepareFields (c$, function () { +this.lookup = jalview.schemes.ResidueProperties.getBLOSUM62 (); +this.intToStr = jalview.analysis.AlignSeq.pep; +this.output = new StringBuffer (); +}); +Clazz.makeConstructor (c$, +function (s1, s2, type) { +this.SeqInit (s1, s1.getSequenceAsString (), s2, s2.getSequenceAsString (), type); +}, "jalview.datamodel.SequenceI,jalview.datamodel.SequenceI,~S"); +Clazz.makeConstructor (c$, +function (s1, string1, s2, string2, type) { +this.SeqInit (s1, string1.toUpperCase (), s2, string2.toUpperCase (), type); +}, "jalview.datamodel.SequenceI,~S,jalview.datamodel.SequenceI,~S,~S"); +Clazz.defineMethod (c$, "getMaxScore", +function () { +return this.maxscore; +}); +Clazz.defineMethod (c$, "getSeq2Start", +function () { +return this.seq2start; +}); +Clazz.defineMethod (c$, "getSeq2End", +function () { +return this.seq2end; +}); +Clazz.defineMethod (c$, "getSeq1Start", +function () { +return this.seq1start; +}); +Clazz.defineMethod (c$, "getSeq1End", +function () { +return this.seq1end; +}); +Clazz.defineMethod (c$, "getOutput", +function () { +return this.output.toString (); +}); +Clazz.defineMethod (c$, "getAStr1", +function () { +return this.astr1; +}); +Clazz.defineMethod (c$, "getAStr2", +function () { +return this.astr2; +}); +Clazz.defineMethod (c$, "getASeq1", +function () { +return this.aseq1; +}); +Clazz.defineMethod (c$, "getASeq2", +function () { +return this.aseq2; +}); +Clazz.defineMethod (c$, "getS1", +function () { +return this.s1; +}); +Clazz.defineMethod (c$, "getS2", +function () { +return this.s2; +}); +Clazz.defineMethod (c$, "getAlignedSeq1", +function () { +var alSeq1 = new jalview.datamodel.Sequence (this.s1.getName (), this.getAStr1 ()); +alSeq1.setStart (this.s1.getStart () + this.getSeq1Start () - 1); +alSeq1.setEnd (this.s1.getStart () + this.getSeq1End () - 1); +alSeq1.setDatasetSequence (this.s1.getDatasetSequence () == null ? this.s1 : this.s1.getDatasetSequence ()); +return alSeq1; +}); +Clazz.defineMethod (c$, "getAlignedSeq2", +function () { +var alSeq2 = new jalview.datamodel.Sequence (this.s2.getName (), this.getAStr2 ()); +alSeq2.setStart (this.s2.getStart () + this.getSeq2Start () - 1); +alSeq2.setEnd (this.s2.getStart () + this.getSeq2End () - 1); +alSeq2.setDatasetSequence (this.s2.getDatasetSequence () == null ? this.s2 : this.s2.getDatasetSequence ()); +return alSeq2; +}); +Clazz.defineMethod (c$, "SeqInit", +function (s1, string1, s2, string2, type) { +this.s1 = s1; +this.s2 = s2; +this.setDefaultParams (type); +this.SeqInit (string1, string2); +}, "jalview.datamodel.SequenceI,~S,jalview.datamodel.SequenceI,~S,~S"); +Clazz.defineMethod (c$, "SeqInit", +function (s1, string1, s2, string2, scoreMatrix) { +this.s1 = s1; +this.s2 = s2; +this.setType (scoreMatrix.isDNA () ? "dna" : "pep"); +this.lookup = scoreMatrix.getMatrix (); +}, "jalview.datamodel.SequenceI,~S,jalview.datamodel.SequenceI,~S,jalview.schemes.ScoreMatrix"); +Clazz.defineMethod (c$, "SeqInit", + function (string1, string2) { +this.s1str = jalview.analysis.AlignSeq.extractGaps (jalview.util.Comparison.GapChars, string1); +this.s2str = jalview.analysis.AlignSeq.extractGaps (jalview.util.Comparison.GapChars, string2); +if (this.s1str.length == 0 || this.s2str.length == 0) { +this.output.append ("ALL GAPS: " + (this.s1str.length == 0 ? this.s1.getName () : " ") + (this.s2str.length == 0 ? this.s2.getName () : "")); +return; +}this.seq1 = Clazz.newIntArray (this.s1str.length, 0); +this.seq2 = Clazz.newIntArray (this.s2str.length, 0); +this.score = Clazz.newIntArray (this.s1str.length, this.s2str.length, 0); +this.E = Clazz.newIntArray (this.s1str.length, this.s2str.length, 0); +this.F = Clazz.newIntArray (this.s1str.length, this.s2str.length, 0); +this.traceback = Clazz.newIntArray (this.s1str.length, this.s2str.length, 0); +this.seq1 = this.stringToInt (this.s1str, this.type); +this.seq2 = this.stringToInt (this.s2str, this.type); +}, "~S,~S"); +Clazz.defineMethod (c$, "setDefaultParams", + function (type) { +this.setType (type); +if (type.equals ("pep")) { +this.lookup = jalview.schemes.ResidueProperties.getDefaultPeptideMatrix (); +} else if (type.equals ("dna")) { +this.lookup = jalview.schemes.ResidueProperties.getDefaultDnaMatrix (); +}}, "~S"); +Clazz.defineMethod (c$, "setType", + function (type2) { +this.type = type2; +if (this.type.equals ("pep")) { +this.intToStr = jalview.analysis.AlignSeq.pep; +this.charToInt = jalview.schemes.ResidueProperties.aaIndex; +this.defInt = 23; +} else if (this.type.equals ("dna")) { +this.intToStr = jalview.analysis.AlignSeq.dna; +this.charToInt = jalview.schemes.ResidueProperties.nucleotideIndex; +this.defInt = 10; +} else { +this.output.append ("Wrong type = dna or pep only"); +throw new Error (jalview.util.MessageManager.formatMessage ("error.unknown_type_dna_or_pep", Clazz.newArray (-1, [type2]))); +}}, "~S"); +Clazz.defineMethod (c$, "traceAlignment", +function () { +var max = -9999; +for (var i = 0; i < this.seq1.length; i++) { +if (this.score[i][this.seq2.length - 1] > max) { +max = this.score[i][this.seq2.length - 1]; +this.maxi = i; +this.maxj = this.seq2.length - 1; +}} +for (var j = 0; j < this.seq2.length; j++) { +if (this.score[this.seq1.length - 1][j] > max) { +max = this.score[this.seq1.length - 1][j]; +this.maxi = this.seq1.length - 1; +this.maxj = j; +}} +var i = this.maxi; +var j = this.maxj; +var trace; +this.maxscore = Clazz.doubleToInt (this.score[i][j] / 10); +this.seq1end = this.maxi + 1; +this.seq2end = this.maxj + 1; +this.aseq1 = Clazz.newIntArray (this.seq1.length + this.seq2.length, 0); +this.aseq2 = Clazz.newIntArray (this.seq1.length + this.seq2.length, 0); +this.count = (this.seq1.length + this.seq2.length) - 1; +while ((i > 0) && (j > 0)) { +if ((this.aseq1[this.count] != this.defInt) && (i >= 0)) { +this.aseq1[this.count] = this.seq1[i]; +this.astr1 = this.s1str.charAt (i) + this.astr1; +}if ((this.aseq2[this.count] != this.defInt) && (j > 0)) { +this.aseq2[this.count] = this.seq2[j]; +this.astr2 = this.s2str.charAt (j) + this.astr2; +}trace = this.findTrace (i, j); +if (trace == 0) { +i--; +j--; +} else if (trace == 1) { +j--; +this.aseq1[this.count] = this.defInt; +this.astr1 = "-" + this.astr1.substring (1); +} else if (trace == -1) { +i--; +this.aseq2[this.count] = this.defInt; +this.astr2 = "-" + this.astr2.substring (1); +}this.count--; +} +this.seq1start = i + 1; +this.seq2start = j + 1; +if (this.aseq1[this.count] != this.defInt) { +this.aseq1[this.count] = this.seq1[i]; +this.astr1 = this.s1str.charAt (i) + this.astr1; +}if (this.aseq2[this.count] != this.defInt) { +this.aseq2[this.count] = this.seq2[j]; +this.astr2 = this.s2str.charAt (j) + this.astr2; +}}); +Clazz.defineMethod (c$, "printAlignment", +function (os) { +var s1id = this.s1.getName (); +var s2id = this.s2.getName (); +var maxid = this.s1.getName ().length; +if (this.s2.getName ().length > maxid) { +maxid = this.s2.getName ().length; +}if (maxid > 30) { +maxid = 30; +if (this.s1.getName ().length > maxid) { +s1id = this.s1.getName ().substring (0, 30); +}if (this.s2.getName ().length > maxid) { +s2id = this.s2.getName ().substring (0, 30); +}}var len = 72 - maxid - 1; +var nochunks = (Clazz.doubleToInt ((this.aseq1.length - this.count) / len)) + 1; +this.pid = 0; +this.output.append ("Score = ").append ("" + this.score[this.maxi][this.maxj]).append (jalview.analysis.AlignSeq.NEWLINE); +this.output.append ("Length of alignment = ").append (String.valueOf (this.aseq1.length - this.count)).append (jalview.analysis.AlignSeq.NEWLINE); +this.output.append ("Sequence "); +this.output.append ( new jalview.util.Format ("%" + maxid + "s").form (this.s1.getName ())); +this.output.append (" : ").append (String.valueOf (this.s1.getStart ())).append (" - ").append (String.valueOf (this.s1.getEnd ())); +this.output.append (" (Sequence length = ").append (String.valueOf (this.s1str.length)).append (")").append (jalview.analysis.AlignSeq.NEWLINE); +this.output.append ("Sequence "); +this.output.append ( new jalview.util.Format ("%" + maxid + "s").form (this.s2.getName ())); +this.output.append (" : ").append (String.valueOf (this.s2.getStart ())).append (" - ").append (String.valueOf (this.s2.getEnd ())); +this.output.append (" (Sequence length = ").append (String.valueOf (this.s2str.length)).append (")").append (jalview.analysis.AlignSeq.NEWLINE).append (jalview.analysis.AlignSeq.NEWLINE); +for (var j = 0; j < nochunks; j++) { +this.output.append ( new jalview.util.Format ("%" + (maxid) + "s").form (s1id)).append (" "); +for (var i = 0; i < len; i++) { +if ((i + (j * len)) < this.astr1.length) { +this.output.append (this.astr1.charAt (i + (j * len))); +}} +this.output.append (jalview.analysis.AlignSeq.NEWLINE); +this.output.append ( new jalview.util.Format ("%" + (maxid) + "s").form (" ")).append (" "); +for (var i = 0; i < len; i++) { +if ((i + (j * len)) < this.astr1.length) { +if (this.astr1.charAt (i + (j * len)) == this.astr2.charAt (i + (j * len)) && !jalview.util.Comparison.isGap (this.astr1.charAt (i + (j * len)))) { +this.pid++; +this.output.append ("|"); +} else if (this.type.equals ("pep")) { +if (jalview.schemes.ResidueProperties.getPAM250 (this.astr1.charAt (i + (j * len)), this.astr2.charAt (i + (j * len))) > 0) { +this.output.append ("."); +} else { +this.output.append (" "); +}} else { +this.output.append (" "); +}}} +this.output = this.output.append (jalview.analysis.AlignSeq.NEWLINE); +this.output = this.output.append ( new jalview.util.Format ("%" + (maxid) + "s").form (s2id)).append (" "); +for (var i = 0; i < len; i++) { +if ((i + (j * len)) < this.astr2.length) { +this.output.append (this.astr2.charAt (i + (j * len))); +}} +this.output.append (jalview.analysis.AlignSeq.NEWLINE).append (jalview.analysis.AlignSeq.NEWLINE); +} +this.pid = this.pid / (this.aseq1.length - this.count) * 100; +this.output = this.output.append ( new jalview.util.Format ("Percentage ID = %2.2f\n\n").formDouble (this.pid)); +try { +os.print (this.output.toString ()); +} catch (ex) { +if (Clazz.exceptionOf (ex, Exception)) { +} else { +throw ex; +} +} +}, "java.io.PrintStream"); +Clazz.defineMethod (c$, "printScoreMatrix", +function (mat) { +var n = this.seq1.length; +var m = this.seq2.length; +for (var i = 0; i < n; i++) { +if (i == 0) { +jalview.util.Format.print (System.out, "%8s", this.s2str.substring (0, 1)); +for (var jj = 1; jj < m; jj++) { +jalview.util.Format.print (System.out, "%5s", this.s2str.substring (jj, jj + 1)); +} +System.out.println (); +}for (var j = 0; j < m; j++) { +if (j == 0) { +jalview.util.Format.print (System.out, "%3s", this.s1str.substring (i, i + 1)); +}jalview.util.Format.printLong (System.out, "%3d ", Clazz.doubleToInt (mat[i][j] / 10)); +} +System.out.println (); +} +}, "~A"); +Clazz.defineMethod (c$, "findTrace", +function (i, j) { +var t = 0; +var max = this.score[i - 1][j - 1] + (this.lookup[this.seq1[i]][this.seq2[j]] * 10); +if (this.F[i][j] > max) { +max = this.F[i][j]; +t = -1; +} else if (this.F[i][j] == max) { +if (this.prev == -1) { +max = this.F[i][j]; +t = -1; +}}if (this.E[i][j] >= max) { +max = this.E[i][j]; +t = 1; +} else if (this.E[i][j] == max) { +if (this.prev == 1) { +max = this.E[i][j]; +t = 1; +}}this.prev = t; +return t; +}, "~N,~N"); +Clazz.defineMethod (c$, "calcScoreMatrix", +function () { +var n = this.seq1.length; +var m = this.seq2.length; +this.score[0][0] = this.lookup[this.seq1[0]][this.seq2[0]] * 10; +this.E[0][0] = -this.gapExtend; +this.F[0][0] = 0; +for (var j = 1; j < m; j++) { +this.E[0][j] = this.max (this.score[0][j - 1] - this.gapOpen, this.E[0][j - 1] - this.gapExtend); +this.F[0][j] = -this.gapExtend; +this.score[0][j] = this.max (this.lookup[this.seq1[0]][this.seq2[j]] * 10, -this.gapOpen, -this.gapExtend); +this.traceback[0][j] = 1; +} +for (var i = 1; i < n; i++) { +this.E[i][0] = -this.gapOpen; +this.F[i][0] = this.max (this.score[i - 1][0] - this.gapOpen, this.F[i - 1][0] - this.gapExtend); +this.score[i][0] = this.max (this.lookup[this.seq1[i]][this.seq2[0]] * 10, this.E[i][0], this.F[i][0]); +this.traceback[i][0] = -1; +} +for (var i = 1; i < n; i++) { +for (var j = 1; j < m; j++) { +this.E[i][j] = this.max (this.score[i][j - 1] - this.gapOpen, this.E[i][j - 1] - this.gapExtend); +this.F[i][j] = this.max (this.score[i - 1][j] - this.gapOpen, this.F[i - 1][j] - this.gapExtend); +this.score[i][j] = this.max (this.score[i - 1][j - 1] + (this.lookup[this.seq1[i]][this.seq2[j]] * 10), this.E[i][j], this.F[i][j]); +this.traceback[i][j] = this.findTrace (i, j); +} +} +}); +c$.extractGaps = Clazz.defineMethod (c$, "extractGaps", +function (gapChars, seq) { +if (gapChars == null || seq == null) { +return null; +}var str = new java.util.StringTokenizer (seq, gapChars); +var newString = new StringBuilder (seq.length); +while (str.hasMoreTokens ()) { +newString.append (str.nextToken ()); +} +return newString.toString (); +}, "~S,~S"); +Clazz.defineMethod (c$, "max", +function (i1, i2, i3) { +var max = i1; +if (i2 > i1) { +max = i2; +}if (i3 > max) { +max = i3; +}return max; +}, "~N,~N,~N"); +Clazz.defineMethod (c$, "max", +function (i1, i2) { +var max = i1; +if (i2 > i1) { +max = i2; +}return max; +}, "~N,~N"); +Clazz.defineMethod (c$, "stringToInt", +function (s, type) { +var seq1 = Clazz.newIntArray (s.length, 0); +for (var i = 0; i < s.length; i++) { +var c = s.charAt (i); +if ('a' <= c && c <= 'z') { +c = String.fromCharCode (c.charCodeAt (0) - (32)); +}try { +seq1[i] = this.charToInt[c.charCodeAt (0)]; +if (seq1[i] < 0 || seq1[i] > this.defInt) { +seq1[i] = this.defInt; +}} catch (e) { +if (Clazz.exceptionOf (e, Exception)) { +seq1[i] = this.defInt; +} else { +throw e; +} +} +} +return seq1; +}, "~S,~S"); +c$.displayMatrix = Clazz.defineMethod (c$, "displayMatrix", +function (g, mat, n, m, psize) { +var max = -1000; +var min = 1000; +for (var i = 0; i < n; i++) { +for (var j = 0; j < m; j++) { +if (mat[i][j] >= max) { +max = mat[i][j]; +}if (mat[i][j] <= min) { +min = mat[i][j]; +}} +} +System.out.println (max + " " + min); +for (var i = 0; i < n; i++) { +for (var j = 0; j < m; j++) { +var x = psize * i; +var y = psize * j; +var score = (mat[i][j] - min) / (max - min); +g.setColor ( new java.awt.Color (score, 0, 0)); +g.fillRect (x, y, psize, psize); +} +} +}, "java.awt.Graphics,~A,~N,~N,~N"); +c$.doGlobalNWAlignment = Clazz.defineMethod (c$, "doGlobalNWAlignment", +function (s1, s2, type) { +var as = new jalview.analysis.AlignSeq (s1, s2, type); +as.calcScoreMatrix (); +as.traceAlignment (); +return as; +}, "jalview.datamodel.SequenceI,jalview.datamodel.SequenceI,~S"); +Clazz.defineMethod (c$, "getMappingFromS1", +function (allowmismatch) { +var as1 = new java.util.ArrayList (); +var as2 = new java.util.ArrayList (); +var pdbpos = this.s2.getStart () + this.getSeq2Start () - 2; +var alignpos = this.s1.getStart () + this.getSeq1Start () - 2; +var lp2 = pdbpos - 3; +var lp1 = alignpos - 3; +var lastmatch = false; +for (var i = 0; i < this.astr1.length; i++) { +var c1 = this.astr1.charAt (i); +var c2 = this.astr2.charAt (i); +if (c1 != '-') { +alignpos++; +}if (c2 != '-') { +pdbpos++; +}if (allowmismatch || c1 == c2) { +if (lp1 + 1 != alignpos || lp2 + 1 != pdbpos) { +as1.add (Integer.$valueOf (alignpos)); +as2.add (Integer.$valueOf (pdbpos)); +}lastmatch = true; +lp1 = alignpos; +lp2 = pdbpos; +} else { +if (lastmatch) { +as1.add (Integer.$valueOf (lp1)); +as2.add (Integer.$valueOf (lp2)); +}lastmatch = false; +}} +var mapseq1 = Clazz.newIntArray (as1.size () + (lastmatch ? 1 : 0), 0); +var mapseq2 = Clazz.newIntArray (as2.size () + (lastmatch ? 1 : 0), 0); +var i = 0; +for (var ip, $ip = as1.iterator (); $ip.hasNext () && ((ip = $ip.next ()) || true);) { +mapseq1[i++] = (ip).intValue (); +} +;i = 0; +for (var ip, $ip = as2.iterator (); $ip.hasNext () && ((ip = $ip.next ()) || true);) { +mapseq2[i++] = (ip).intValue (); +} +;if (lastmatch) { +mapseq1[mapseq1.length - 1] = alignpos; +mapseq2[mapseq2.length - 1] = pdbpos; +}var map = new jalview.util.MapList (mapseq1, mapseq2, 1, 1); +var mapping = new jalview.datamodel.Mapping (map); +mapping.setTo (this.s2); +return mapping; +}, "~B"); +c$.replaceMatchingSeqsWith = Clazz.defineMethod (c$, "replaceMatchingSeqsWith", +function (seqs, annotations, ochains, al, dnaOrProtein, removeOldAnnots) { +var orig = new java.util.ArrayList (); +var repl = new java.util.ArrayList (); +var aligs = new java.util.ArrayList (); +if (al != null && al.getHeight () > 0) { +var matches = new java.util.ArrayList (); +var aligns = new java.util.ArrayList (); +for (var sq, $sq = ochains.iterator (); $sq.hasNext () && ((sq = $sq.next ()) || true);) { +var bestm = null; +var bestaseq = null; +var bestscore = 0; +for (var msq, $msq = al.getSequences ().iterator (); $msq.hasNext () && ((msq = $msq.next ()) || true);) { +var aseq = jalview.analysis.AlignSeq.doGlobalNWAlignment (msq, sq, dnaOrProtein); +if (bestm == null || aseq.getMaxScore () > bestscore) { +bestscore = aseq.getMaxScore (); +bestaseq = aseq; +bestm = msq; +}} +System.out.println ("Best Score for " + (matches.size () + 1) + " :" + bestscore); +matches.add (bestm); +aligns.add (bestaseq); +al.deleteSequence (bestm); +} +for (var p = 0, pSize = seqs.size (); p < pSize; p++) { +var sq; +var sp = seqs.get (p); +var q; +if ((q = ochains.indexOf (sp)) > -1) { +seqs.set (p, sq = matches.get (q)); +orig.add (sp); +repl.add (sq); +sq.setName (sp.getName ()); +sq.setDescription (sp.getDescription ()); +var sp2sq; +sq.transferAnnotation (sp, sp2sq = aligns.get (q).getMappingFromS1 (false)); +aligs.add (aligns.get (q)); +var inspos = -1; +for (var ap = 0; ap < annotations.size (); ) { +if (annotations.get (ap).sequenceRef === sp) { +if (inspos == -1) { +inspos = ap; +}if (removeOldAnnots) { +annotations.remove (ap); +} else { +var alan = annotations.remove (ap); +alan.liftOver (sq, sp2sq); +alan.setSequenceRef (sq); +sq.addAlignmentAnnotation (alan); +}} else { +ap++; +}} +if (sq.getAnnotation () != null && sq.getAnnotation ().length > 0) { +annotations.addAll (inspos == -1 ? annotations.size () : inspos, java.util.Arrays.asList (sq.getAnnotation ())); +}}} +}return java.util.Arrays.asList ([orig, repl, aligs]); +}, "java.util.List,java.util.List,java.util.List,jalview.datamodel.AlignmentI,~S,~B"); +c$.computeRedundancyMatrix = Clazz.defineMethod (c$, "computeRedundancyMatrix", +function (originalSequences, omitHidden, start, end, ungapped) { +var height = originalSequences.length; +var redundancy = Clazz.newFloatArray (height, 0); +var lngth = Clazz.newIntArray (height, 0); +for (var i = 0; i < height; i++) { +redundancy[i] = 0; +lngth[i] = -1; +} +var pid; +var seqi; +var seqj; +for (var i = 0; i < height; i++) { +for (var j = 0; j < i; j++) { +if (i == j) { +continue; +}if (omitHidden == null) { +seqi = originalSequences[i].getSequenceAsString (start, end); +seqj = originalSequences[j].getSequenceAsString (start, end); +} else { +seqi = omitHidden[i]; +seqj = omitHidden[j]; +}if (lngth[i] == -1) { +var ug = jalview.analysis.AlignSeq.extractGaps (jalview.util.Comparison.GapChars, seqi); +lngth[i] = ug.length; +if (ungapped) { +seqi = ug; +}}if (lngth[j] == -1) { +var ug = jalview.analysis.AlignSeq.extractGaps (jalview.util.Comparison.GapChars, seqj); +lngth[j] = ug.length; +if (ungapped) { +seqj = ug; +}}pid = jalview.util.Comparison.PID (seqi, seqj); +if (lngth[j] < lngth[i]) { +redundancy[j] = Math.max (pid, redundancy[j]); +} else { +redundancy[i] = Math.max (pid, redundancy[i]); +}} +} +return redundancy; +}, "~A,~A,~N,~N,~B"); +Clazz.defineStatics (c$, +"PEP", "pep", +"DNA", "dna"); +c$.NEWLINE = c$.prototype.NEWLINE = System.lineSeparator (); +Clazz.defineStatics (c$, +"dna", Clazz.newArray (-1, ["A", "C", "G", "T", "-"]), +"pep", Clazz.newArray (-1, ["A", "R", "N", "D", "C", "Q", "E", "G", "H", "I", "L", "K", "M", "F", "P", "S", "T", "W", "Y", "V", "B", "Z", "X", "-"])); +});