JAL-1807 includes ?j2sdebug flag and DebugJS._(msg)
[jalviewjs.git] / site / j2s / jalview / analysis / AlignSeq.js
1 Clazz.declarePackage ("jalview.analysis");\r
2 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
3 c$ = Clazz.decorateAsClass (function () {\r
4 this.score = null;\r
5 this.E = null;\r
6 this.F = null;\r
7 this.traceback = null;\r
8 this.seq1 = null;\r
9 this.seq2 = null;\r
10 this.s1 = null;\r
11 this.s2 = null;\r
12 this.s1str = null;\r
13 this.s2str = null;\r
14 this.maxi = 0;\r
15 this.maxj = 0;\r
16 this.aseq1 = null;\r
17 this.aseq2 = null;\r
18 this.astr1 = "";\r
19 this.astr2 = "";\r
20 this.seq1start = 0;\r
21 this.seq1end = 0;\r
22 this.seq2start = 0;\r
23 this.seq2end = 0;\r
24 this.count = 0;\r
25 this.maxscore = 0;\r
26 this.pid = 0;\r
27 this.prev = 0;\r
28 this.gapOpen = 120;\r
29 this.gapExtend = 20;\r
30 this.lookup = null;\r
31 this.intToStr = null;\r
32 this.defInt = 23;\r
33 this.output = null;\r
34 this.type = null;\r
35 this.charToInt = null;\r
36 Clazz.instantialize (this, arguments);\r
37 }, jalview.analysis, "AlignSeq");\r
38 Clazz.prepareFields (c$, function () {\r
39 this.lookup = jalview.schemes.ResidueProperties.getBLOSUM62 ();\r
40 this.intToStr = jalview.analysis.AlignSeq.pep;\r
41 this.output =  new StringBuffer ();\r
42 });\r
43 Clazz.makeConstructor (c$, \r
44 function (s1, s2, type) {\r
45 this.SeqInit (s1, s1.getSequenceAsString (), s2, s2.getSequenceAsString (), type);\r
46 }, "jalview.datamodel.SequenceI,jalview.datamodel.SequenceI,~S");\r
47 Clazz.makeConstructor (c$, \r
48 function (s1, string1, s2, string2, type) {\r
49 this.SeqInit (s1, string1.toUpperCase (), s2, string2.toUpperCase (), type);\r
50 }, "jalview.datamodel.SequenceI,~S,jalview.datamodel.SequenceI,~S,~S");\r
51 Clazz.defineMethod (c$, "getMaxScore", \r
52 function () {\r
53 return this.maxscore;\r
54 });\r
55 Clazz.defineMethod (c$, "getSeq2Start", \r
56 function () {\r
57 return this.seq2start;\r
58 });\r
59 Clazz.defineMethod (c$, "getSeq2End", \r
60 function () {\r
61 return this.seq2end;\r
62 });\r
63 Clazz.defineMethod (c$, "getSeq1Start", \r
64 function () {\r
65 return this.seq1start;\r
66 });\r
67 Clazz.defineMethod (c$, "getSeq1End", \r
68 function () {\r
69 return this.seq1end;\r
70 });\r
71 Clazz.defineMethod (c$, "getOutput", \r
72 function () {\r
73 return this.output.toString ();\r
74 });\r
75 Clazz.defineMethod (c$, "getAStr1", \r
76 function () {\r
77 return this.astr1;\r
78 });\r
79 Clazz.defineMethod (c$, "getAStr2", \r
80 function () {\r
81 return this.astr2;\r
82 });\r
83 Clazz.defineMethod (c$, "getASeq1", \r
84 function () {\r
85 return this.aseq1;\r
86 });\r
87 Clazz.defineMethod (c$, "getASeq2", \r
88 function () {\r
89 return this.aseq2;\r
90 });\r
91 Clazz.defineMethod (c$, "getS1", \r
92 function () {\r
93 return this.s1;\r
94 });\r
95 Clazz.defineMethod (c$, "getS2", \r
96 function () {\r
97 return this.s2;\r
98 });\r
99 Clazz.defineMethod (c$, "getAlignedSeq1", \r
100 function () {\r
101 var alSeq1 =  new jalview.datamodel.Sequence (this.s1.getName (), this.getAStr1 ());\r
102 alSeq1.setStart (this.s1.getStart () + this.getSeq1Start () - 1);\r
103 alSeq1.setEnd (this.s1.getStart () + this.getSeq1End () - 1);\r
104 alSeq1.setDatasetSequence (this.s1.getDatasetSequence () == null ? this.s1 : this.s1.getDatasetSequence ());\r
105 return alSeq1;\r
106 });\r
107 Clazz.defineMethod (c$, "getAlignedSeq2", \r
108 function () {\r
109 var alSeq2 =  new jalview.datamodel.Sequence (this.s2.getName (), this.getAStr2 ());\r
110 alSeq2.setStart (this.s2.getStart () + this.getSeq2Start () - 1);\r
111 alSeq2.setEnd (this.s2.getStart () + this.getSeq2End () - 1);\r
112 alSeq2.setDatasetSequence (this.s2.getDatasetSequence () == null ? this.s2 : this.s2.getDatasetSequence ());\r
113 return alSeq2;\r
114 });\r
115 Clazz.defineMethod (c$, "SeqInit", \r
116 function (s1, string1, s2, string2, type) {\r
117 this.s1 = s1;\r
118 this.s2 = s2;\r
119 this.setDefaultParams (type);\r
120 this.SeqInit (string1, string2);\r
121 }, "jalview.datamodel.SequenceI,~S,jalview.datamodel.SequenceI,~S,~S");\r
122 Clazz.defineMethod (c$, "SeqInit", \r
123 function (s1, string1, s2, string2, scoreMatrix) {\r
124 this.s1 = s1;\r
125 this.s2 = s2;\r
126 this.setType (scoreMatrix.isDNA () ? "dna" : "pep");\r
127 this.lookup = scoreMatrix.getMatrix ();\r
128 }, "jalview.datamodel.SequenceI,~S,jalview.datamodel.SequenceI,~S,jalview.schemes.ScoreMatrix");\r
129 Clazz.defineMethod (c$, "SeqInit", \r
130  function (string1, string2) {\r
131 this.s1str = jalview.analysis.AlignSeq.extractGaps (jalview.util.Comparison.GapChars, string1);\r
132 this.s2str = jalview.analysis.AlignSeq.extractGaps (jalview.util.Comparison.GapChars, string2);\r
133 if (this.s1str.length == 0 || this.s2str.length == 0) {\r
134 this.output.append ("ALL GAPS: " + (this.s1str.length == 0 ? this.s1.getName () : " ") + (this.s2str.length == 0 ? this.s2.getName () : ""));\r
135 return;\r
136 }this.seq1 =  Clazz.newIntArray (this.s1str.length, 0);\r
137 this.seq2 =  Clazz.newIntArray (this.s2str.length, 0);\r
138 this.score =  Clazz.newIntArray (this.s1str.length, this.s2str.length, 0);\r
139 this.E =  Clazz.newIntArray (this.s1str.length, this.s2str.length, 0);\r
140 this.F =  Clazz.newIntArray (this.s1str.length, this.s2str.length, 0);\r
141 this.traceback =  Clazz.newIntArray (this.s1str.length, this.s2str.length, 0);\r
142 this.seq1 = this.stringToInt (this.s1str, this.type);\r
143 this.seq2 = this.stringToInt (this.s2str, this.type);\r
144 }, "~S,~S");\r
145 Clazz.defineMethod (c$, "setDefaultParams", \r
146  function (type) {\r
147 this.setType (type);\r
148 if (type.equals ("pep")) {\r
149 this.lookup = jalview.schemes.ResidueProperties.getDefaultPeptideMatrix ();\r
150 } else if (type.equals ("dna")) {\r
151 this.lookup = jalview.schemes.ResidueProperties.getDefaultDnaMatrix ();\r
152 }}, "~S");\r
153 Clazz.defineMethod (c$, "setType", \r
154  function (type2) {\r
155 this.type = type2;\r
156 if (this.type.equals ("pep")) {\r
157 this.intToStr = jalview.analysis.AlignSeq.pep;\r
158 this.charToInt = jalview.schemes.ResidueProperties.aaIndex;\r
159 this.defInt = 23;\r
160 } else if (this.type.equals ("dna")) {\r
161 this.intToStr = jalview.analysis.AlignSeq.dna;\r
162 this.charToInt = jalview.schemes.ResidueProperties.nucleotideIndex;\r
163 this.defInt = 10;\r
164 } else {\r
165 this.output.append ("Wrong type = dna or pep only");\r
166 throw  new Error (jalview.util.MessageManager.formatMessage ("error.unknown_type_dna_or_pep",  Clazz.newArray (-1, [type2])));\r
167 }}, "~S");\r
168 Clazz.defineMethod (c$, "traceAlignment", \r
169 function () {\r
170 var max = -9999;\r
171 for (var i = 0; i < this.seq1.length; i++) {\r
172 if (this.score[i][this.seq2.length - 1] > max) {\r
173 max = this.score[i][this.seq2.length - 1];\r
174 this.maxi = i;\r
175 this.maxj = this.seq2.length - 1;\r
176 }}\r
177 for (var j = 0; j < this.seq2.length; j++) {\r
178 if (this.score[this.seq1.length - 1][j] > max) {\r
179 max = this.score[this.seq1.length - 1][j];\r
180 this.maxi = this.seq1.length - 1;\r
181 this.maxj = j;\r
182 }}\r
183 var i = this.maxi;\r
184 var j = this.maxj;\r
185 var trace;\r
186 this.maxscore = Clazz.doubleToInt (this.score[i][j] / 10);\r
187 this.seq1end = this.maxi + 1;\r
188 this.seq2end = this.maxj + 1;\r
189 this.aseq1 =  Clazz.newIntArray (this.seq1.length + this.seq2.length, 0);\r
190 this.aseq2 =  Clazz.newIntArray (this.seq1.length + this.seq2.length, 0);\r
191 this.count = (this.seq1.length + this.seq2.length) - 1;\r
192 while ((i > 0) && (j > 0)) {\r
193 if ((this.aseq1[this.count] != this.defInt) && (i >= 0)) {\r
194 this.aseq1[this.count] = this.seq1[i];\r
195 this.astr1 = this.s1str.charAt (i) + this.astr1;\r
196 }if ((this.aseq2[this.count] != this.defInt) && (j > 0)) {\r
197 this.aseq2[this.count] = this.seq2[j];\r
198 this.astr2 = this.s2str.charAt (j) + this.astr2;\r
199 }trace = this.findTrace (i, j);\r
200 if (trace == 0) {\r
201 i--;\r
202 j--;\r
203 } else if (trace == 1) {\r
204 j--;\r
205 this.aseq1[this.count] = this.defInt;\r
206 this.astr1 = "-" + this.astr1.substring (1);\r
207 } else if (trace == -1) {\r
208 i--;\r
209 this.aseq2[this.count] = this.defInt;\r
210 this.astr2 = "-" + this.astr2.substring (1);\r
211 }this.count--;\r
212 }\r
213 this.seq1start = i + 1;\r
214 this.seq2start = j + 1;\r
215 if (this.aseq1[this.count] != this.defInt) {\r
216 this.aseq1[this.count] = this.seq1[i];\r
217 this.astr1 = this.s1str.charAt (i) + this.astr1;\r
218 }if (this.aseq2[this.count] != this.defInt) {\r
219 this.aseq2[this.count] = this.seq2[j];\r
220 this.astr2 = this.s2str.charAt (j) + this.astr2;\r
221 }});\r
222 Clazz.defineMethod (c$, "printAlignment", \r
223 function (os) {\r
224 var s1id = this.s1.getName ();\r
225 var s2id = this.s2.getName ();\r
226 var maxid = this.s1.getName ().length;\r
227 if (this.s2.getName ().length > maxid) {\r
228 maxid = this.s2.getName ().length;\r
229 }if (maxid > 30) {\r
230 maxid = 30;\r
231 if (this.s1.getName ().length > maxid) {\r
232 s1id = this.s1.getName ().substring (0, 30);\r
233 }if (this.s2.getName ().length > maxid) {\r
234 s2id = this.s2.getName ().substring (0, 30);\r
235 }}var len = 72 - maxid - 1;\r
236 var nochunks = (Clazz.doubleToInt ((this.aseq1.length - this.count) / len)) + 1;\r
237 this.pid = 0;\r
238 this.output.append ("Score = ").append ("" + this.score[this.maxi][this.maxj]).append (jalview.analysis.AlignSeq.NEWLINE);\r
239 this.output.append ("Length of alignment = ").append (String.valueOf (this.aseq1.length - this.count)).append (jalview.analysis.AlignSeq.NEWLINE);\r
240 this.output.append ("Sequence ");\r
241 this.output.append ( new jalview.util.Format ("%" + maxid + "s").form (this.s1.getName ()));\r
242 this.output.append (" :  ").append (String.valueOf (this.s1.getStart ())).append (" - ").append (String.valueOf (this.s1.getEnd ()));\r
243 this.output.append (" (Sequence length = ").append (String.valueOf (this.s1str.length)).append (")").append (jalview.analysis.AlignSeq.NEWLINE);\r
244 this.output.append ("Sequence ");\r
245 this.output.append ( new jalview.util.Format ("%" + maxid + "s").form (this.s2.getName ()));\r
246 this.output.append (" :  ").append (String.valueOf (this.s2.getStart ())).append (" - ").append (String.valueOf (this.s2.getEnd ()));\r
247 this.output.append (" (Sequence length = ").append (String.valueOf (this.s2str.length)).append (")").append (jalview.analysis.AlignSeq.NEWLINE).append (jalview.analysis.AlignSeq.NEWLINE);\r
248 for (var j = 0; j < nochunks; j++) {\r
249 this.output.append ( new jalview.util.Format ("%" + (maxid) + "s").form (s1id)).append (" ");\r
250 for (var i = 0; i < len; i++) {\r
251 if ((i + (j * len)) < this.astr1.length) {\r
252 this.output.append (this.astr1.charAt (i + (j * len)));\r
253 }}\r
254 this.output.append (jalview.analysis.AlignSeq.NEWLINE);\r
255 this.output.append ( new jalview.util.Format ("%" + (maxid) + "s").form (" ")).append (" ");\r
256 for (var i = 0; i < len; i++) {\r
257 if ((i + (j * len)) < this.astr1.length) {\r
258 if (this.astr1.charAt (i + (j * len)) == this.astr2.charAt (i + (j * len)) && !jalview.util.Comparison.isGap (this.astr1.charAt (i + (j * len)))) {\r
259 this.pid++;\r
260 this.output.append ("|");\r
261 } else if (this.type.equals ("pep")) {\r
262 if (jalview.schemes.ResidueProperties.getPAM250 (this.astr1.charAt (i + (j * len)), this.astr2.charAt (i + (j * len))) > 0) {\r
263 this.output.append (".");\r
264 } else {\r
265 this.output.append (" ");\r
266 }} else {\r
267 this.output.append (" ");\r
268 }}}\r
269 this.output = this.output.append (jalview.analysis.AlignSeq.NEWLINE);\r
270 this.output = this.output.append ( new jalview.util.Format ("%" + (maxid) + "s").form (s2id)).append (" ");\r
271 for (var i = 0; i < len; i++) {\r
272 if ((i + (j * len)) < this.astr2.length) {\r
273 this.output.append (this.astr2.charAt (i + (j * len)));\r
274 }}\r
275 this.output.append (jalview.analysis.AlignSeq.NEWLINE).append (jalview.analysis.AlignSeq.NEWLINE);\r
276 }\r
277 this.pid = this.pid / (this.aseq1.length - this.count) * 100;\r
278 this.output = this.output.append ( new jalview.util.Format ("Percentage ID = %2.2f\n\n").formDouble (this.pid));\r
279 try {\r
280 os.print (this.output.toString ());\r
281 } catch (ex) {\r
282 if (Clazz.exceptionOf (ex, Exception)) {\r
283 } else {\r
284 throw ex;\r
285 }\r
286 }\r
287 }, "java.io.PrintStream");\r
288 Clazz.defineMethod (c$, "printScoreMatrix", \r
289 function (mat) {\r
290 var n = this.seq1.length;\r
291 var m = this.seq2.length;\r
292 for (var i = 0; i < n; i++) {\r
293 if (i == 0) {\r
294 jalview.util.Format.print (System.out, "%8s", this.s2str.substring (0, 1));\r
295 for (var jj = 1; jj < m; jj++) {\r
296 jalview.util.Format.print (System.out, "%5s", this.s2str.substring (jj, jj + 1));\r
297 }\r
298 System.out.println ();\r
299 }for (var j = 0; j < m; j++) {\r
300 if (j == 0) {\r
301 jalview.util.Format.print (System.out, "%3s", this.s1str.substring (i, i + 1));\r
302 }jalview.util.Format.printLong (System.out, "%3d ", Clazz.doubleToInt (mat[i][j] / 10));\r
303 }\r
304 System.out.println ();\r
305 }\r
306 }, "~A");\r
307 Clazz.defineMethod (c$, "findTrace", \r
308 function (i, j) {\r
309 var t = 0;\r
310 var max = this.score[i - 1][j - 1] + (this.lookup[this.seq1[i]][this.seq2[j]] * 10);\r
311 if (this.F[i][j] > max) {\r
312 max = this.F[i][j];\r
313 t = -1;\r
314 } else if (this.F[i][j] == max) {\r
315 if (this.prev == -1) {\r
316 max = this.F[i][j];\r
317 t = -1;\r
318 }}if (this.E[i][j] >= max) {\r
319 max = this.E[i][j];\r
320 t = 1;\r
321 } else if (this.E[i][j] == max) {\r
322 if (this.prev == 1) {\r
323 max = this.E[i][j];\r
324 t = 1;\r
325 }}this.prev = t;\r
326 return t;\r
327 }, "~N,~N");\r
328 Clazz.defineMethod (c$, "calcScoreMatrix", \r
329 function () {\r
330 var n = this.seq1.length;\r
331 var m = this.seq2.length;\r
332 this.score[0][0] = this.lookup[this.seq1[0]][this.seq2[0]] * 10;\r
333 this.E[0][0] = -this.gapExtend;\r
334 this.F[0][0] = 0;\r
335 for (var j = 1; j < m; j++) {\r
336 this.E[0][j] = this.max (this.score[0][j - 1] - this.gapOpen, this.E[0][j - 1] - this.gapExtend);\r
337 this.F[0][j] = -this.gapExtend;\r
338 this.score[0][j] = this.max (this.lookup[this.seq1[0]][this.seq2[j]] * 10, -this.gapOpen, -this.gapExtend);\r
339 this.traceback[0][j] = 1;\r
340 }\r
341 for (var i = 1; i < n; i++) {\r
342 this.E[i][0] = -this.gapOpen;\r
343 this.F[i][0] = this.max (this.score[i - 1][0] - this.gapOpen, this.F[i - 1][0] - this.gapExtend);\r
344 this.score[i][0] = this.max (this.lookup[this.seq1[i]][this.seq2[0]] * 10, this.E[i][0], this.F[i][0]);\r
345 this.traceback[i][0] = -1;\r
346 }\r
347 for (var i = 1; i < n; i++) {\r
348 for (var j = 1; j < m; j++) {\r
349 this.E[i][j] = this.max (this.score[i][j - 1] - this.gapOpen, this.E[i][j - 1] - this.gapExtend);\r
350 this.F[i][j] = this.max (this.score[i - 1][j] - this.gapOpen, this.F[i - 1][j] - this.gapExtend);\r
351 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
352 this.traceback[i][j] = this.findTrace (i, j);\r
353 }\r
354 }\r
355 });\r
356 c$.extractGaps = Clazz.defineMethod (c$, "extractGaps", \r
357 function (gapChars, seq) {\r
358 if (gapChars == null || seq == null) {\r
359 return null;\r
360 }var str =  new java.util.StringTokenizer (seq, gapChars);\r
361 var newString =  new StringBuilder (seq.length);\r
362 while (str.hasMoreTokens ()) {\r
363 newString.append (str.nextToken ());\r
364 }\r
365 return newString.toString ();\r
366 }, "~S,~S");\r
367 Clazz.defineMethod (c$, "max", \r
368 function (i1, i2, i3) {\r
369 var max = i1;\r
370 if (i2 > i1) {\r
371 max = i2;\r
372 }if (i3 > max) {\r
373 max = i3;\r
374 }return max;\r
375 }, "~N,~N,~N");\r
376 Clazz.defineMethod (c$, "max", \r
377 function (i1, i2) {\r
378 var max = i1;\r
379 if (i2 > i1) {\r
380 max = i2;\r
381 }return max;\r
382 }, "~N,~N");\r
383 Clazz.defineMethod (c$, "stringToInt", \r
384 function (s, type) {\r
385 var seq1 =  Clazz.newIntArray (s.length, 0);\r
386 for (var i = 0; i < s.length; i++) {\r
387 var c = s.charAt (i);\r
388 if ('a' <= c && c <= 'z') {\r
389 c = String.fromCharCode (c.charCodeAt (0) - (32));\r
390 }try {\r
391 seq1[i] = this.charToInt[c.charCodeAt (0)];\r
392 if (seq1[i] < 0 || seq1[i] > this.defInt) {\r
393 seq1[i] = this.defInt;\r
394 }} catch (e) {\r
395 if (Clazz.exceptionOf (e, Exception)) {\r
396 seq1[i] = this.defInt;\r
397 } else {\r
398 throw e;\r
399 }\r
400 }\r
401 }\r
402 return seq1;\r
403 }, "~S,~S");\r
404 c$.displayMatrix = Clazz.defineMethod (c$, "displayMatrix", \r
405 function (g, mat, n, m, psize) {\r
406 var max = -1000;\r
407 var min = 1000;\r
408 for (var i = 0; i < n; i++) {\r
409 for (var j = 0; j < m; j++) {\r
410 if (mat[i][j] >= max) {\r
411 max = mat[i][j];\r
412 }if (mat[i][j] <= min) {\r
413 min = mat[i][j];\r
414 }}\r
415 }\r
416 System.out.println (max + " " + min);\r
417 for (var i = 0; i < n; i++) {\r
418 for (var j = 0; j < m; j++) {\r
419 var x = psize * i;\r
420 var y = psize * j;\r
421 var score = (mat[i][j] - min) / (max - min);\r
422 g.setColor ( new java.awt.Color (score, 0, 0));\r
423 g.fillRect (x, y, psize, psize);\r
424 }\r
425 }\r
426 }, "java.awt.Graphics,~A,~N,~N,~N");\r
427 c$.doGlobalNWAlignment = Clazz.defineMethod (c$, "doGlobalNWAlignment", \r
428 function (s1, s2, type) {\r
429 var as =  new jalview.analysis.AlignSeq (s1, s2, type);\r
430 as.calcScoreMatrix ();\r
431 as.traceAlignment ();\r
432 return as;\r
433 }, "jalview.datamodel.SequenceI,jalview.datamodel.SequenceI,~S");\r
434 Clazz.defineMethod (c$, "getMappingFromS1", \r
435 function (allowmismatch) {\r
436 var as1 =  new java.util.ArrayList ();\r
437 var as2 =  new java.util.ArrayList ();\r
438 var pdbpos = this.s2.getStart () + this.getSeq2Start () - 2;\r
439 var alignpos = this.s1.getStart () + this.getSeq1Start () - 2;\r
440 var lp2 = pdbpos - 3;\r
441 var lp1 = alignpos - 3;\r
442 var lastmatch = false;\r
443 for (var i = 0; i < this.astr1.length; i++) {\r
444 var c1 = this.astr1.charAt (i);\r
445 var c2 = this.astr2.charAt (i);\r
446 if (c1 != '-') {\r
447 alignpos++;\r
448 }if (c2 != '-') {\r
449 pdbpos++;\r
450 }if (allowmismatch || c1 == c2) {\r
451 if (lp1 + 1 != alignpos || lp2 + 1 != pdbpos) {\r
452 as1.add (Integer.$valueOf (alignpos));\r
453 as2.add (Integer.$valueOf (pdbpos));\r
454 }lastmatch = true;\r
455 lp1 = alignpos;\r
456 lp2 = pdbpos;\r
457 } else {\r
458 if (lastmatch) {\r
459 as1.add (Integer.$valueOf (lp1));\r
460 as2.add (Integer.$valueOf (lp2));\r
461 }lastmatch = false;\r
462 }}\r
463 var mapseq1 =  Clazz.newIntArray (as1.size () + (lastmatch ? 1 : 0), 0);\r
464 var mapseq2 =  Clazz.newIntArray (as2.size () + (lastmatch ? 1 : 0), 0);\r
465 var i = 0;\r
466 for (var ip, $ip = as1.iterator (); $ip.hasNext () && ((ip = $ip.next ()) || true);) {\r
467 mapseq1[i++] = (ip).intValue ();\r
468 }\r
469 ;i = 0;\r
470 for (var ip, $ip = as2.iterator (); $ip.hasNext () && ((ip = $ip.next ()) || true);) {\r
471 mapseq2[i++] = (ip).intValue ();\r
472 }\r
473 ;if (lastmatch) {\r
474 mapseq1[mapseq1.length - 1] = alignpos;\r
475 mapseq2[mapseq2.length - 1] = pdbpos;\r
476 }var map =  new jalview.util.MapList (mapseq1, mapseq2, 1, 1);\r
477 var mapping =  new jalview.datamodel.Mapping (map);\r
478 mapping.setTo (this.s2);\r
479 return mapping;\r
480 }, "~B");\r
481 c$.replaceMatchingSeqsWith = Clazz.defineMethod (c$, "replaceMatchingSeqsWith", \r
482 function (seqs, annotations, ochains, al, dnaOrProtein, removeOldAnnots) {\r
483 var orig =  new java.util.ArrayList ();\r
484 var repl =  new java.util.ArrayList ();\r
485 var aligs =  new java.util.ArrayList ();\r
486 if (al != null && al.getHeight () > 0) {\r
487 var matches =  new java.util.ArrayList ();\r
488 var aligns =  new java.util.ArrayList ();\r
489 for (var sq, $sq = ochains.iterator (); $sq.hasNext () && ((sq = $sq.next ()) || true);) {\r
490 var bestm = null;\r
491 var bestaseq = null;\r
492 var bestscore = 0;\r
493 for (var msq, $msq = al.getSequences ().iterator (); $msq.hasNext () && ((msq = $msq.next ()) || true);) {\r
494 var aseq = jalview.analysis.AlignSeq.doGlobalNWAlignment (msq, sq, dnaOrProtein);\r
495 if (bestm == null || aseq.getMaxScore () > bestscore) {\r
496 bestscore = aseq.getMaxScore ();\r
497 bestaseq = aseq;\r
498 bestm = msq;\r
499 }}\r
500 System.out.println ("Best Score for " + (matches.size () + 1) + " :" + bestscore);\r
501 matches.add (bestm);\r
502 aligns.add (bestaseq);\r
503 al.deleteSequence (bestm);\r
504 }\r
505 for (var p = 0, pSize = seqs.size (); p < pSize; p++) {\r
506 var sq;\r
507 var sp = seqs.get (p);\r
508 var q;\r
509 if ((q = ochains.indexOf (sp)) > -1) {\r
510 seqs.set (p, sq = matches.get (q));\r
511 orig.add (sp);\r
512 repl.add (sq);\r
513 sq.setName (sp.getName ());\r
514 sq.setDescription (sp.getDescription ());\r
515 var sp2sq;\r
516 sq.transferAnnotation (sp, sp2sq = aligns.get (q).getMappingFromS1 (false));\r
517 aligs.add (aligns.get (q));\r
518 var inspos = -1;\r
519 for (var ap = 0; ap < annotations.size (); ) {\r
520 if (annotations.get (ap).sequenceRef === sp) {\r
521 if (inspos == -1) {\r
522 inspos = ap;\r
523 }if (removeOldAnnots) {\r
524 annotations.remove (ap);\r
525 } else {\r
526 var alan = annotations.remove (ap);\r
527 alan.liftOver (sq, sp2sq);\r
528 alan.setSequenceRef (sq);\r
529 sq.addAlignmentAnnotation (alan);\r
530 }} else {\r
531 ap++;\r
532 }}\r
533 if (sq.getAnnotation () != null && sq.getAnnotation ().length > 0) {\r
534 annotations.addAll (inspos == -1 ? annotations.size () : inspos, java.util.Arrays.asList (sq.getAnnotation ()));\r
535 }}}\r
536 }return java.util.Arrays.asList ([orig, repl, aligs]);\r
537 }, "java.util.List,java.util.List,java.util.List,jalview.datamodel.AlignmentI,~S,~B");\r
538 c$.computeRedundancyMatrix = Clazz.defineMethod (c$, "computeRedundancyMatrix", \r
539 function (originalSequences, omitHidden, start, end, ungapped) {\r
540 var height = originalSequences.length;\r
541 var redundancy =  Clazz.newFloatArray (height, 0);\r
542 var lngth =  Clazz.newIntArray (height, 0);\r
543 for (var i = 0; i < height; i++) {\r
544 redundancy[i] = 0;\r
545 lngth[i] = -1;\r
546 }\r
547 var pid;\r
548 var seqi;\r
549 var seqj;\r
550 for (var i = 0; i < height; i++) {\r
551 for (var j = 0; j < i; j++) {\r
552 if (i == j) {\r
553 continue;\r
554 }if (omitHidden == null) {\r
555 seqi = originalSequences[i].getSequenceAsString (start, end);\r
556 seqj = originalSequences[j].getSequenceAsString (start, end);\r
557 } else {\r
558 seqi = omitHidden[i];\r
559 seqj = omitHidden[j];\r
560 }if (lngth[i] == -1) {\r
561 var ug = jalview.analysis.AlignSeq.extractGaps (jalview.util.Comparison.GapChars, seqi);\r
562 lngth[i] = ug.length;\r
563 if (ungapped) {\r
564 seqi = ug;\r
565 }}if (lngth[j] == -1) {\r
566 var ug = jalview.analysis.AlignSeq.extractGaps (jalview.util.Comparison.GapChars, seqj);\r
567 lngth[j] = ug.length;\r
568 if (ungapped) {\r
569 seqj = ug;\r
570 }}pid = jalview.util.Comparison.PID (seqi, seqj);\r
571 if (lngth[j] < lngth[i]) {\r
572 redundancy[j] = Math.max (pid, redundancy[j]);\r
573 } else {\r
574 redundancy[i] = Math.max (pid, redundancy[i]);\r
575 }}\r
576 }\r
577 return redundancy;\r
578 }, "~A,~A,~N,~N,~B");\r
579 Clazz.defineStatics (c$,\r
580 "PEP", "pep",\r
581 "DNA", "dna");\r
582 c$.NEWLINE = c$.prototype.NEWLINE = System.lineSeparator ();\r
583 Clazz.defineStatics (c$,\r
584 "dna",  Clazz.newArray (-1, ["A", "C", "G", "T", "-"]),\r
585 "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
586 });\r