JAL-1807 Bob's JalviewJS prototype first commit
[jalviewjs.git] / bin / jalview / util / Comparison.js
1 Clazz.declarePackage ("jalview.util");\r
2 Clazz.load (null, "jalview.util.Comparison", ["java.util.ArrayList"], function () {\r
3 c$ = Clazz.declareType (jalview.util, "Comparison");\r
4 c$.compare = Clazz.defineMethod (c$, "compare", \r
5 function (ii, jj) {\r
6 return jalview.util.Comparison.compare (ii, jj, 0, ii.getLength () - 1);\r
7 }, "jalview.datamodel.SequenceI,jalview.datamodel.SequenceI");\r
8 c$.compare = Clazz.defineMethod (c$, "compare", \r
9 function (ii, jj, start, end) {\r
10 var si = ii.getSequenceAsString ();\r
11 var sj = jj.getSequenceAsString ();\r
12 var ilen = si.length - 1;\r
13 var jlen = sj.length - 1;\r
14 while (jalview.util.Comparison.isGap (si.charAt (start + ilen))) {\r
15 ilen--;\r
16 }\r
17 while (jalview.util.Comparison.isGap (sj.charAt (start + jlen))) {\r
18 jlen--;\r
19 }\r
20 var count = 0;\r
21 var match = 0;\r
22 var pid = -1;\r
23 if (ilen > jlen) {\r
24 for (var j = 0; j < jlen; j++) {\r
25 if (si.substring (start + j, start + j + 1).equals (sj.substring (start + j, start + j + 1))) {\r
26 match++;\r
27 }count++;\r
28 }\r
29 pid = match / ilen * 100;\r
30 } else {\r
31 for (var j = 0; j < jlen; j++) {\r
32 if (si.substring (start + j, start + j + 1).equals (sj.substring (start + j, start + j + 1))) {\r
33 match++;\r
34 }count++;\r
35 }\r
36 pid = match / jlen * 100;\r
37 }return pid;\r
38 }, "jalview.datamodel.SequenceI,jalview.datamodel.SequenceI,~N,~N");\r
39 c$.PID = Clazz.defineMethod (c$, "PID", \r
40 function (seq1, seq2) {\r
41 return jalview.util.Comparison.PID (seq1, seq2, 0, seq1.length);\r
42 }, "~S,~S");\r
43 c$.PID = Clazz.defineMethod (c$, "PID", \r
44 function (seq1, seq2, start, end) {\r
45 return jalview.util.Comparison.PID (seq1, seq2, start, end, true, false);\r
46 }, "~S,~S,~N,~N");\r
47 c$.PID = Clazz.defineMethod (c$, "PID", \r
48 function (seq1, seq2, start, end, wcGaps, ungappedOnly) {\r
49 var s1len = seq1.length;\r
50 var s2len = seq2.length;\r
51 var len = Math.min (s1len, s2len);\r
52 if (end < len) {\r
53 len = end;\r
54 }if (len < start) {\r
55 start = len - 1;\r
56 }var elen = len - start;\r
57 var bad = 0;\r
58 var chr1;\r
59 var chr2;\r
60 var agap;\r
61 for (var i = start; i < len; i++) {\r
62 chr1 = seq1.charAt (i);\r
63 chr2 = seq2.charAt (i);\r
64 agap = jalview.util.Comparison.isGap (chr1) || jalview.util.Comparison.isGap (chr2);\r
65 if ('a' <= chr1 && chr1 <= 'z') {\r
66 chr1 = String.fromCharCode (chr1.charCodeAt (0) - 32);\r
67 }if ('a' <= chr2 && chr2 <= 'z') {\r
68 chr2 = String.fromCharCode (chr2.charCodeAt (0) - 32);\r
69 }if (chr1 != chr2) {\r
70 if (agap) {\r
71 if (ungappedOnly) {\r
72 elen--;\r
73 } else if (!wcGaps) {\r
74 bad++;\r
75 }} else {\r
76 bad++;\r
77 }}}\r
78 if (elen < 1) {\r
79 return 0;\r
80 }return (100 * (elen - bad)) / elen;\r
81 }, "~S,~S,~N,~N,~B,~B");\r
82 c$.isGap = Clazz.defineMethod (c$, "isGap", \r
83 function (c) {\r
84 return (c == '-' || c == '.' || c == ' ') ? true : false;\r
85 }, "~S");\r
86 c$.isNucleotide = Clazz.defineMethod (c$, "isNucleotide", \r
87 function (seqs) {\r
88 if (seqs == null) {\r
89 return false;\r
90 }var ntCount = 0;\r
91 var aaCount = 0;\r
92 for (var seq, $seq = 0, $$seq = seqs; $seq < $$seq.length && ((seq = $$seq[$seq]) || true); $seq++) {\r
93 if (seq == null) {\r
94 continue;\r
95 }for (var c, $c = 0, $$c = seq.getSequence (); $c < $$c.length && ((c = $$c[$c]) || true); $c++) {\r
96 if ('a' <= c && c <= 'z') {\r
97 c = String.fromCharCode (c.charCodeAt (0) - 32);\r
98 }if (c == 'A' || c == 'G' || c == 'C' || c == 'T' || c == 'U') {\r
99 ntCount++;\r
100 } else if (!jalview.util.Comparison.isGap (c)) {\r
101 aaCount++;\r
102 }}\r
103 }\r
104 if (ntCount * 100 > 85 * (ntCount + aaCount)) {\r
105 return true;\r
106 } else {\r
107 return false;\r
108 }}, "~A");\r
109 c$.isNucleotide2 = Clazz.defineMethod (c$, "isNucleotide2", \r
110 function (seqs) {\r
111 if (seqs == null) {\r
112 return false;\r
113 }var flattened =  new java.util.ArrayList ();\r
114 for (var ss, $ss = 0, $$ss = seqs; $ss < $$ss.length && ((ss = $$ss[$ss]) || true); $ss++) {\r
115 for (var s, $s = 0, $$s = ss; $s < $$s.length && ((s = $$s[$s]) || true); $s++) {\r
116 flattened.add (s);\r
117 }\r
118 }\r
119 var oneDArray = flattened.toArray ( new Array (flattened.size ()));\r
120 return jalview.util.Comparison.isNucleotide (oneDArray);\r
121 }, "~A");\r
122 Clazz.defineStatics (c$,\r
123 "EIGHTY_FIVE", 85,\r
124 "TO_UPPER_CASE", 32,\r
125 "GAP_SPACE", ' ',\r
126 "GAP_DOT", '.',\r
127 "GAP_DASH", '-');\r
128 c$.GapChars = c$.prototype.GapChars =  String.instantialize ( Clazz.newCharArray (-1, [' ', '.', '-']));\r
129 Clazz.defineStatics (c$,\r
130 "caseShift", 32);\r
131 });\r