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