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
7 this.traceback = null;
\r
29 this.gapExtend = 20;
\r
31 this.intToStr = 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
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
53 return this.maxscore;
\r
55 Clazz.defineMethod (c$, "getSeq2Start",
\r
57 return this.seq2start;
\r
59 Clazz.defineMethod (c$, "getSeq2End",
\r
61 return this.seq2end;
\r
63 Clazz.defineMethod (c$, "getSeq1Start",
\r
65 return this.seq1start;
\r
67 Clazz.defineMethod (c$, "getSeq1End",
\r
69 return this.seq1end;
\r
71 Clazz.defineMethod (c$, "getOutput",
\r
73 return this.output.toString ();
\r
75 Clazz.defineMethod (c$, "getAStr1",
\r
79 Clazz.defineMethod (c$, "getAStr2",
\r
83 Clazz.defineMethod (c$, "getASeq1",
\r
87 Clazz.defineMethod (c$, "getASeq2",
\r
91 Clazz.defineMethod (c$, "getS1",
\r
95 Clazz.defineMethod (c$, "getS2",
\r
99 Clazz.defineMethod (c$, "getAlignedSeq1",
\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
107 Clazz.defineMethod (c$, "getAlignedSeq2",
\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
115 Clazz.defineMethod (c$, "SeqInit",
\r
116 function (s1, string1, s2, string2, type) {
\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
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
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
145 Clazz.defineMethod (c$, "setDefaultParams",
\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
153 Clazz.defineMethod (c$, "setType",
\r
156 if (this.type.equals ("pep")) {
\r
157 this.intToStr = jalview.analysis.AlignSeq.pep;
\r
158 this.charToInt = jalview.schemes.ResidueProperties.aaIndex;
\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
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
168 Clazz.defineMethod (c$, "traceAlignment",
\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
175 this.maxj = this.seq2.length - 1;
\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
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
203 } else if (trace == 1) {
\r
205 this.aseq1[this.count] = this.defInt;
\r
206 this.astr1 = "-" + this.astr1.substring (1);
\r
207 } else if (trace == -1) {
\r
209 this.aseq2[this.count] = this.defInt;
\r
210 this.astr2 = "-" + this.astr2.substring (1);
\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
222 Clazz.defineMethod (c$, "printAlignment",
\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
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
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
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
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
265 this.output.append (" ");
\r
267 this.output.append (" ");
\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
275 this.output.append (jalview.analysis.AlignSeq.NEWLINE).append (jalview.analysis.AlignSeq.NEWLINE);
\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
280 os.print (this.output.toString ());
\r
282 if (Clazz.exceptionOf (ex, Exception)) {
\r
287 }, "java.io.PrintStream");
\r
288 Clazz.defineMethod (c$, "printScoreMatrix",
\r
290 var n = this.seq1.length;
\r
291 var m = this.seq2.length;
\r
292 for (var i = 0; i < n; i++) {
\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
298 System.out.println ();
\r
299 }for (var j = 0; j < m; j++) {
\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
304 System.out.println ();
\r
307 Clazz.defineMethod (c$, "findTrace",
\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
314 } else if (this.F[i][j] == max) {
\r
315 if (this.prev == -1) {
\r
316 max = this.F[i][j];
\r
318 }}if (this.E[i][j] >= max) {
\r
319 max = this.E[i][j];
\r
321 } else if (this.E[i][j] == max) {
\r
322 if (this.prev == 1) {
\r
323 max = this.E[i][j];
\r
328 Clazz.defineMethod (c$, "calcScoreMatrix",
\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
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
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
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
356 c$.extractGaps = Clazz.defineMethod (c$, "extractGaps",
\r
357 function (gapChars, seq) {
\r
358 if (gapChars == null || seq == 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
365 return newString.toString ();
\r
367 Clazz.defineMethod (c$, "max",
\r
368 function (i1, i2, i3) {
\r
376 Clazz.defineMethod (c$, "max",
\r
377 function (i1, i2) {
\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
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
395 if (Clazz.exceptionOf (e, Exception)) {
\r
396 seq1[i] = this.defInt;
\r
404 c$.displayMatrix = Clazz.defineMethod (c$, "displayMatrix",
\r
405 function (g, mat, n, m, psize) {
\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
412 }if (mat[i][j] <= min) {
\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
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
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
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
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
459 as1.add (Integer.$valueOf (lp1));
\r
460 as2.add (Integer.$valueOf (lp2));
\r
461 }lastmatch = false;
\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
466 for (var ip, $ip = as1.iterator (); $ip.hasNext () && ((ip = $ip.next ()) || true);) {
\r
467 mapseq1[i++] = (ip).intValue ();
\r
470 for (var ip, $ip = as2.iterator (); $ip.hasNext () && ((ip = $ip.next ()) || true);) {
\r
471 mapseq2[i++] = (ip).intValue ();
\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
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
491 var bestaseq = null;
\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
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
505 for (var p = 0, pSize = seqs.size (); p < pSize; p++) {
\r
507 var sp = seqs.get (p);
\r
509 if ((q = ochains.indexOf (sp)) > -1) {
\r
510 seqs.set (p, sq = matches.get (q));
\r
513 sq.setName (sp.getName ());
\r
514 sq.setDescription (sp.getDescription ());
\r
516 sq.transferAnnotation (sp, sp2sq = aligns.get (q).getMappingFromS1 (false));
\r
517 aligs.add (aligns.get (q));
\r
519 for (var ap = 0; ap < annotations.size (); ) {
\r
520 if (annotations.get (ap).sequenceRef === sp) {
\r
521 if (inspos == -1) {
\r
523 }if (removeOldAnnots) {
\r
524 annotations.remove (ap);
\r
526 var alan = annotations.remove (ap);
\r
527 alan.liftOver (sq, sp2sq);
\r
528 alan.setSequenceRef (sq);
\r
529 sq.addAlignmentAnnotation (alan);
\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
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
550 for (var i = 0; i < height; i++) {
\r
551 for (var j = 0; j < i; j++) {
\r
554 }if (omitHidden == null) {
\r
555 seqi = originalSequences[i].getSequenceAsString (start, end);
\r
556 seqj = originalSequences[j].getSequenceAsString (start, end);
\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
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
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
574 redundancy[i] = Math.max (pid, redundancy[i]);
\r
578 }, "~A,~A,~N,~N,~B");
\r
579 Clazz.defineStatics (c$,
\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