JAL-1807 Bob's JalviewJS prototype first commit
[jalviewjs.git] / bin / jalview / analysis / StructureFrequency.js
1 Clazz.declarePackage ("jalview.analysis");\r
2 Clazz.load (null, "jalview.analysis.StructureFrequency", ["jalview.datamodel.Annotation", "jalview.util.Format", "$.QuickSort", "java.lang.Float", "java.util.Hashtable", "javajs.util.AU"], function () {\r
3 c$ = Clazz.declareType (jalview.analysis, "StructureFrequency");\r
4 c$.findPair = Clazz.defineMethod (c$, "findPair", \r
5 function (pairs, indice) {\r
6 for (var i = 0; i < pairs.length; i++) {\r
7 if (pairs[i].getBegin () == indice) {\r
8 return pairs[i].getEnd ();\r
9 }}\r
10 return -1;\r
11 }, "~A,~N");\r
12 c$.calculate = Clazz.defineMethod (c$, "calculate", \r
13 function (sequences, start, end, result, profile, rnaStruc) {\r
14 var residueHash;\r
15 var maxResidue;\r
16 var struc = rnaStruc.getRNAStruc ().toCharArray ();\r
17 var rna = rnaStruc._rnasecstr;\r
18 var c;\r
19 var s;\r
20 var cEnd;\r
21 var count = 0;\r
22 var nonGap = 0;\r
23 var i;\r
24 var bpEnd = -1;\r
25 var j;\r
26 var jSize = sequences.length;\r
27 var values;\r
28 var pairs;\r
29 var percentage;\r
30 var wooble = true;\r
31 for (i = start; i < end; i++) {\r
32 residueHash =  new java.util.Hashtable ();\r
33 maxResidue = "-";\r
34 values =  Clazz.newIntArray (255, 0);\r
35 pairs =  Clazz.newIntArray (255, 255, 0);\r
36 bpEnd = -1;\r
37 if (i < struc.length) {\r
38 s = struc[i];\r
39 } else {\r
40 s = '-';\r
41 }if (s == '.' || s == ' ') {\r
42 s = '-';\r
43 }if (s != '(' && s != '[') {\r
44 if (s == '-') {\r
45 values['-'.charCodeAt (0)]++;\r
46 }} else {\r
47 bpEnd = jalview.analysis.StructureFrequency.findPair (rna, i);\r
48 if (bpEnd > -1) {\r
49 for (j = 0; j < jSize; j++) {\r
50 if (sequences[j] == null) {\r
51 System.err.println ("WARNING: Consensus skipping null sequence - possible race condition.");\r
52 continue;\r
53 }c = sequences[j].getCharAt (i);\r
54 if (c == '.' || c == ' ') {\r
55 c = '-';\r
56 }if (c == '-') {\r
57 values['-'.charCodeAt (0)]++;\r
58 continue;\r
59 }cEnd = sequences[j].getCharAt (bpEnd);\r
60 if (jalview.analysis.StructureFrequency.checkBpType (c, cEnd) == true) {\r
61 values['('.charCodeAt (0)]++;\r
62 maxResidue = "(";\r
63 wooble = true;\r
64 }if (jalview.analysis.StructureFrequency.checkBpType (c, cEnd) == false) {\r
65 wooble = false;\r
66 values['['.charCodeAt (0)]++;\r
67 maxResidue = "[";\r
68 }pairs[c.charCodeAt (0)][cEnd.charCodeAt (0)]++;\r
69 }\r
70 }}if (profile) {\r
71 residueHash.put ("P",  Clazz.newArray (-1, [values,  Clazz.newIntArray (-1, [jSize, (jSize - values['-'.charCodeAt (0)])])]));\r
72 residueHash.put ("B", pairs);\r
73 }if (wooble == true) {\r
74 count = values['('.charCodeAt (0)];\r
75 }if (wooble == false) {\r
76 count = values['['.charCodeAt (0)];\r
77 }residueHash.put ("C",  new Integer (count));\r
78 residueHash.put ("R", maxResidue);\r
79 percentage = (count * 100) / jSize;\r
80 residueHash.put ("G",  new Float (percentage));\r
81 if (result[i] == null) {\r
82 result[i] = residueHash;\r
83 }if (bpEnd > 0) {\r
84 values[')'.charCodeAt (0)] = values['('.charCodeAt (0)];\r
85 values[']'.charCodeAt (0)] = values['['.charCodeAt (0)];\r
86 values['('.charCodeAt (0)] = 0;\r
87 values['['.charCodeAt (0)] = 0;\r
88 residueHash =  new java.util.Hashtable ();\r
89 if (wooble == true) {\r
90 maxResidue = ")";\r
91 }if (wooble == false) {\r
92 maxResidue = "]";\r
93 }if (profile) {\r
94 residueHash.put ("P",  Clazz.newArray (-1, [values,  Clazz.newIntArray (-1, [jSize, (jSize - values['-'.charCodeAt (0)])])]));\r
95 residueHash.put ("B", pairs);\r
96 }residueHash.put ("C",  new Integer (count));\r
97 residueHash.put ("R", maxResidue);\r
98 percentage = (count * 100) / jSize;\r
99 residueHash.put ("G",  new Float (percentage));\r
100 result[bpEnd] = residueHash;\r
101 }}\r
102 }, "~A,~N,~N,~A,~B,jalview.datamodel.AlignmentAnnotation");\r
103 c$.checkBpType = Clazz.defineMethod (c$, "checkBpType", \r
104 function (up, down) {\r
105 if (up > 'Z') {\r
106 up = String.fromCharCode (up.charCodeAt (0) - 32);\r
107 }if (down > 'Z') {\r
108 down = String.fromCharCode (down.charCodeAt (0) - 32);\r
109 }switch (up) {\r
110 case 'A':\r
111 switch (down) {\r
112 case 'T':\r
113 return true;\r
114 case 'U':\r
115 return true;\r
116 }\r
117 break;\r
118 case 'C':\r
119 switch (down) {\r
120 case 'G':\r
121 return true;\r
122 }\r
123 break;\r
124 case 'T':\r
125 switch (down) {\r
126 case 'A':\r
127 return true;\r
128 case 'G':\r
129 return true;\r
130 }\r
131 break;\r
132 case 'G':\r
133 switch (down) {\r
134 case 'C':\r
135 return true;\r
136 case 'T':\r
137 return true;\r
138 case 'U':\r
139 return true;\r
140 }\r
141 break;\r
142 case 'U':\r
143 switch (down) {\r
144 case 'A':\r
145 return true;\r
146 case 'G':\r
147 return true;\r
148 }\r
149 break;\r
150 }\r
151 return false;\r
152 }, "~S,~S");\r
153 c$.completeConsensus = Clazz.defineMethod (c$, "completeConsensus", \r
154 function (consensus, hconsensus, iStart, width, ignoreGapsInConsensusCalculation, includeAllConsSymbols, nseq) {\r
155 var tval;\r
156 var value;\r
157 if (consensus == null || consensus.annotations == null || consensus.annotations.length < width) {\r
158 return;\r
159 }var fmtstr = "%3.1f";\r
160 var precision = 2;\r
161 while (nseq > 100) {\r
162 precision++;\r
163 nseq /= 10;\r
164 }\r
165 if (precision > 2) {\r
166 fmtstr = "%" + (2 + precision) + "." + precision + "f";\r
167 }var fmt =  new jalview.util.Format (fmtstr);\r
168 for (var i = iStart; i < width; i++) {\r
169 var hci;\r
170 if (i >= hconsensus.length || ((hci = hconsensus[i]) == null)) {\r
171 consensus.annotations[i] = null;\r
172 continue;\r
173 }value = 0;\r
174 var fv;\r
175 if (ignoreGapsInConsensusCalculation) {\r
176 fv = hci.get ("N");\r
177 } else {\r
178 fv = hci.get ("G");\r
179 }if (fv == null) {\r
180 consensus.annotations[i] = null;\r
181 continue;\r
182 }value = fv.floatValue ();\r
183 var maxRes = hci.get ("R").toString ();\r
184 var mouseOver = hci.get ("R") + " ";\r
185 if (maxRes.length > 1) {\r
186 mouseOver = "[" + maxRes + "] ";\r
187 maxRes = "+";\r
188 }var profile = hci.get ("P");\r
189 var pairs = hci.get ("B");\r
190 if (pairs != null && includeAllConsSymbols) {\r
191 mouseOver = "";\r
192 var ca = javajs.util.AU.newInt2 (625);\r
193 var vl =  Clazz.newFloatArray (625, 0);\r
194 var x = 0;\r
195 for (var c = 65; c < 90; c++) {\r
196 for (var d = 65; d < 90; d++) {\r
197 ca[x] =  Clazz.newIntArray (-1, [c, d]);\r
198 vl[x] = pairs[c][d];\r
199 x++;\r
200 }\r
201 }\r
202 jalview.util.QuickSort.sortFloatObject (vl, ca);\r
203 var p = 0;\r
204 var divisor = profile[1][ignoreGapsInConsensusCalculation ? 1 : 0];\r
205 for (var c = 624; c > 0; c--) {\r
206 if (vl[c] > 0) {\r
207 tval = (vl[c] * 100 / divisor);\r
208 mouseOver += ((p == 0) ? "" : "; ") + String.fromCharCode (ca[c][0]) + String.fromCharCode (ca[c][1]) + " " + fmt.formDouble (tval) + "%";\r
209 p++;\r
210 }}\r
211 } else {\r
212 mouseOver += (fmt.formDouble (value) + "%");\r
213 }consensus.annotations[i] =  new jalview.datamodel.Annotation (maxRes, mouseOver, ' ', value);\r
214 }\r
215 }, "jalview.datamodel.AlignmentAnnotation,~A,~N,~N,~B,~B,~N");\r
216 c$.extractProfile = Clazz.defineMethod (c$, "extractProfile", \r
217 function (hconsensus, ignoreGapsInConsensusCalculation) {\r
218 var rtnval =  Clazz.newIntArray (74, 0);\r
219 var profile = hconsensus.get ("P");\r
220 var pairs = hconsensus.get ("B");\r
221 if (profile == null) {\r
222 return null;\r
223 }var ca = javajs.util.AU.newInt2 (625);\r
224 var vl =  Clazz.newFloatArray (625, 0);\r
225 var x = 0;\r
226 for (var c = 65; c < 90; c++) {\r
227 for (var d = 65; d < 90; d++) {\r
228 ca[x] =  Clazz.newIntArray (-1, [c, d]);\r
229 vl[x] = pairs[c][d];\r
230 x++;\r
231 }\r
232 }\r
233 jalview.util.QuickSort.sortFloatObject (vl, ca);\r
234 var valuesCount = 0;\r
235 rtnval[1] = 0;\r
236 var offset = 2;\r
237 var divisor = profile[1][ignoreGapsInConsensusCalculation ? 1 : 0];\r
238 for (var c = 624; c > 0; c--) {\r
239 if (vl[c] > 0) {\r
240 rtnval[offset++] = ca[c][0];\r
241 rtnval[offset++] = ca[c][1];\r
242 rtnval[offset] = Clazz.floatToInt (vl[c] * 100 / divisor);\r
243 rtnval[1] += rtnval[offset++];\r
244 valuesCount++;\r
245 }}\r
246 rtnval[0] = valuesCount;\r
247 var result =  Clazz.newIntArray (rtnval.length + 1, 0);\r
248 result[0] = 1;\r
249 System.arraycopy (rtnval, 0, result, 1, rtnval.length);\r
250 return result;\r
251 }, "java.util.Hashtable,~B");\r
252 Clazz.defineStatics (c$,\r
253 "STRUCTURE_PROFILE_LENGTH", 74,\r
254 "MAXCOUNT", "C",\r
255 "MAXRESIDUE", "R",\r
256 "PID_GAPS", "G",\r
257 "PID_NOGAPS", "N",\r
258 "PROFILE", "P",\r
259 "PAIRPROFILE", "B");\r
260 });\r