1 Clazz.declarePackage ("jalview.analysis");
\r
2 Clazz.load (null, "jalview.analysis.AAFrequency", ["jalview.analysis.CodingUtils", "jalview.datamodel.Annotation", "jalview.util.Format", "$.MappingUtils", "$.QuickSort", "java.lang.Float", "$.StringBuilder", "java.util.Arrays", "$.Hashtable"], function () {
\r
3 c$ = Clazz.declareType (jalview.analysis, "AAFrequency");
\r
4 c$.calculate = Clazz.defineMethod (c$, "calculate",
\r
5 function (list, start, end) {
\r
6 return jalview.analysis.AAFrequency.calculate (list, start, end, false);
\r
7 }, "java.util.List,~N,~N");
\r
8 c$.calculate = Clazz.defineMethod (c$, "calculate",
\r
9 function (sequences, start, end, profile) {
\r
10 var seqs = new Array (sequences.size ());
\r
13 for (var i = 0; i < sequences.size (); i++) {
\r
14 seqs[i] = sequences.get (i);
\r
15 if (seqs[i].getLength () > width) {
\r
16 width = seqs[i].getLength ();
\r
18 var reply = new Array (width);
\r
21 }jalview.analysis.AAFrequency.calculate (seqs, start, end, reply, profile);
\r
23 }}, "java.util.List,~N,~N,~B");
\r
24 c$.calculate = Clazz.defineMethod (c$, "calculate",
\r
25 function (sequences, start, end, result, profile) {
\r
32 var jSize = sequences.length;
\r
36 var values = Clazz.newIntArray (255, 0);
\r
38 for (i = start; i < end; i++) {
\r
39 residueHash = new java.util.Hashtable ();
\r
43 values = Clazz.newIntArray (255, 0);
\r
44 for (j = 0; j < jSize; j++) {
\r
45 if (sequences[j] == null) {
\r
46 System.err.println ("WARNING: Consensus skipping null sequence - possible race condition.");
\r
48 }seq = sequences[j].getSequence ();
\r
49 if (seq.length > i) {
\r
51 if (c == '.' || c == ' ') {
\r
54 values['-'.charCodeAt (0)]++;
\r
56 } else if ('a' <= c && c <= 'z') {
\r
57 c = String.fromCharCode (c.charCodeAt (0) + -32);
\r
59 values[c.charCodeAt (0)]++;
\r
61 values['-'.charCodeAt (0)]++;
\r
64 maxResidue = String.valueOf (c);
\r
67 for (v = 65; v <= 90; v++) {
\r
68 if (values[v] < 1 || values[v] < maxCount) {
\r
70 }if (values[v] > maxCount) {
\r
71 maxResidue = jalview.analysis.AAFrequency.CHARS[v - 65];
\r
72 } else if (values[v] == maxCount) {
\r
73 maxResidue += jalview.analysis.AAFrequency.CHARS[v - 65];
\r
74 }maxCount = values[v];
\r
76 }if (maxResidue.length == 0) {
\r
79 residueHash.put ("P", Clazz.newArray (-1, [values, Clazz.newIntArray (-1, [jSize, nongap])]));
\r
80 }residueHash.put ("C", new Integer (maxCount));
\r
81 residueHash.put ("R", maxResidue);
\r
82 percentage = (maxCount * 100) / jSize;
\r
83 residueHash.put ("G", new Float (percentage));
\r
85 percentage = (maxCount * 100) / nongap;
\r
86 }residueHash.put ("N", new Float (percentage));
\r
87 result[i] = residueHash;
\r
89 }, "~A,~N,~N,~A,~B");
\r
90 c$.completeConsensus = Clazz.defineMethod (c$, "completeConsensus",
\r
91 function (consensus, hconsensus, iStart, width, ignoreGapsInConsensusCalculation, includeAllConsSymbols, nseq) {
\r
92 jalview.analysis.AAFrequency.completeConsensus (consensus, hconsensus, iStart, width, ignoreGapsInConsensusCalculation, includeAllConsSymbols, null, nseq);
\r
93 }, "jalview.datamodel.AlignmentAnnotation,~A,~N,~N,~B,~B,~N");
\r
94 c$.completeConsensus = Clazz.defineMethod (c$, "completeConsensus",
\r
95 function (consensus, hconsensus, iStart, width, ignoreGapsInConsensusCalculation, includeAllConsSymbols, alphabet, nseq) {
\r
96 if (consensus == null || consensus.annotations == null || consensus.annotations.length < width) {
\r
98 }var fmt = jalview.analysis.AAFrequency.getPercentageFormat (nseq);
\r
99 for (var i = iStart; i < width; i++) {
\r
101 if (i >= hconsensus.length || ((hci = hconsensus[i]) == null)) {
\r
102 consensus.annotations[i] = null;
\r
104 }var fv = hci.get (ignoreGapsInConsensusCalculation ? "N" : "G");
\r
106 consensus.annotations[i] = null;
\r
108 }var value = fv.floatValue ();
\r
109 var maxRes = hci.get ("R").toString ();
\r
110 var mouseOver = new StringBuilder (64);
\r
111 if (maxRes.length > 1) {
\r
112 mouseOver.append ("[").append (maxRes).append ("] ");
\r
115 mouseOver.append (hci.get ("R") + " ");
\r
116 }var profile = hci.get ("P");
\r
117 if (profile != null && includeAllConsSymbols) {
\r
118 var sequenceCount = profile[1][0];
\r
119 var nonGappedCount = profile[1][1];
\r
120 var normalisedBy = ignoreGapsInConsensusCalculation ? nonGappedCount : sequenceCount;
\r
121 mouseOver.setLength (0);
\r
122 if (alphabet != null) {
\r
123 for (var c = 0; c < alphabet.length; c++) {
\r
124 var tval = profile[0][alphabet[c].charCodeAt (0)] * 100 / normalisedBy;
\r
125 mouseOver.append (((c == 0) ? "" : "; ")).append (alphabet[c]).append (" ").append (((fmt != null) ? fmt.formDouble (tval) : (Clazz.floatToInt (tval)))).append ("%");
\r
128 var ca = Clazz.newCharArray (profile[0].length, '\0');
\r
129 var vl = Clazz.newFloatArray (profile[0].length, 0);
\r
130 for (var c = 0; c < ca.length; c++) {
\r
131 ca[c] = String.fromCharCode (c);
\r
132 vl[c] = profile[0][c];
\r
134 jalview.util.QuickSort.sortFloatChar (vl, ca);
\r
135 for (var p = 0, c = ca.length - 1; profile[0][ca[c].charCodeAt (0)] > 0; c--) {
\r
136 var residue = ca[c];
\r
137 if (residue != '-') {
\r
138 var tval = profile[0][residue.charCodeAt (0)] * 100 / normalisedBy;
\r
139 mouseOver.append ((((p == 0) ? "" : "; "))).append (residue).append (" ").append (((fmt != null) ? fmt.formDouble (tval) : (Clazz.floatToInt (tval)))).append ("%");
\r
143 mouseOver.append ((((fmt != null) ? fmt.formDouble (value) : (Clazz.floatToInt (value))))).append ("%");
\r
144 }consensus.annotations[i] = new jalview.datamodel.Annotation (maxRes, mouseOver.toString (), ' ', value);
\r
146 }, "jalview.datamodel.AlignmentAnnotation,~A,~N,~N,~B,~B,~A,~N");
\r
147 c$.getPercentageFormat = Clazz.defineMethod (c$, "getPercentageFormat",
\r
150 while (nseq >= 10) {
\r
154 return scale <= 1 ? null : new jalview.util.Format ("%3." + (scale - 1) + "f");
\r
156 c$.extractProfile = Clazz.defineMethod (c$, "extractProfile",
\r
157 function (hconsensus, ignoreGaps) {
\r
158 var rtnval = Clazz.newIntArray (64, 0);
\r
159 var profile = hconsensus.get ("P");
\r
160 if (profile == null) {
\r
162 }var ca = Clazz.newCharArray (profile[0].length, '\0');
\r
163 var vl = Clazz.newFloatArray (profile[0].length, 0);
\r
164 for (var c = 0; c < ca.length; c++) {
\r
165 ca[c] = String.fromCharCode (c);
\r
166 vl[c] = profile[0][c];
\r
168 jalview.util.QuickSort.sortFloatChar (vl, ca);
\r
169 var nextArrayPos = 2;
\r
170 var totalPercentage = 0;
\r
171 var distinctValuesCount = 0;
\r
172 var divisor = profile[1][ignoreGaps ? 1 : 0];
\r
173 for (var c = ca.length - 1; profile[0][ca[c].charCodeAt (0)] > 0; c--) {
\r
174 if (ca[c] != '-') {
\r
175 rtnval[nextArrayPos++] = (ca[c]).charCodeAt (0);
\r
176 var percentage = Clazz.floatToInt (profile[0][ca[c].charCodeAt (0)] * 100 / divisor);
\r
177 rtnval[nextArrayPos++] = percentage;
\r
178 totalPercentage += percentage;
\r
179 distinctValuesCount++;
\r
181 rtnval[0] = distinctValuesCount;
\r
182 rtnval[1] = totalPercentage;
\r
183 var result = Clazz.newIntArray (rtnval.length + 1, 0);
\r
185 System.arraycopy (rtnval, 0, result, 1, rtnval.length);
\r
187 }, "java.util.Hashtable,~B");
\r
188 c$.extractCdnaProfile = Clazz.defineMethod (c$, "extractCdnaProfile",
\r
189 function (hashtable, ignoreGaps) {
\r
190 var codonCounts = hashtable.get ("P");
\r
191 var sortedCounts = Clazz.newIntArray (codonCounts.length - 2, 0);
\r
192 System.arraycopy (codonCounts, 2, sortedCounts, 0, codonCounts.length - 2);
\r
193 var result = Clazz.newIntArray (3 + 2 * sortedCounts.length, 0);
\r
195 var codons = Clazz.newCharArray (sortedCounts.length, '\0');
\r
196 for (var i = 0; i < codons.length; i++) {
\r
197 codons[i] = String.fromCharCode (i);
\r
199 jalview.util.QuickSort.sortIntChar (sortedCounts, codons);
\r
200 var totalPercentage = 0;
\r
201 var distinctValuesCount = 0;
\r
203 var divisor = ignoreGaps ? codonCounts[1] : codonCounts[0];
\r
204 for (var i = codons.length - 1; i >= 0; i--) {
\r
205 var codonCount = sortedCounts[i];
\r
206 if (codonCount == 0) {
\r
208 }distinctValuesCount++;
\r
209 result[j++] = (codons[i]).charCodeAt (0);
\r
210 var percentage = Clazz.doubleToInt (codonCount * 100 / divisor);
\r
211 result[j++] = percentage;
\r
212 totalPercentage += percentage;
\r
214 result[2] = totalPercentage;
\r
215 result[1] = distinctValuesCount;
\r
216 return java.util.Arrays.copyOfRange (result, 0, j);
\r
217 }, "java.util.Hashtable,~B");
\r
218 c$.calculateCdna = Clazz.defineMethod (c$, "calculateCdna",
\r
219 function (alignment, mappings, hconsensus, col0, col1) {
\r
220 var gapCharacter = alignment.getGapCharacter ();
\r
221 for (var col = col0; col < col1; col++) {
\r
222 var columnHash = new java.util.Hashtable ();
\r
223 var codonCounts = Clazz.newIntArray (66, 0);
\r
224 codonCounts[0] = alignment.getSequences ().size ();
\r
225 var ungappedCount = 0;
\r
226 for (var seq, $seq = alignment.getSequences ().iterator (); $seq.hasNext () && ((seq = $seq.next ()) || true);) {
\r
227 if (seq.getCharAt (col) == gapCharacter) {
\r
229 }var codon = jalview.util.MappingUtils.findCodonFor (seq, col, mappings);
\r
230 var codonEncoded = jalview.analysis.CodingUtils.encodeCodon (codon);
\r
231 if (codonEncoded >= 0) {
\r
232 codonCounts[codonEncoded + 2]++;
\r
235 codonCounts[1] = ungappedCount;
\r
236 columnHash.put ("P", codonCounts);
\r
237 hconsensus[col] = columnHash;
\r
239 }, "jalview.datamodel.AlignmentI,java.util.Set,~A,~N,~N");
\r
240 c$.completeCdnaConsensus = Clazz.defineMethod (c$, "completeCdnaConsensus",
\r
241 function (consensusAnnotation, consensusData, showProfileLogo, nseqs) {
\r
242 if (consensusAnnotation == null || consensusAnnotation.annotations == null || consensusAnnotation.annotations.length < consensusData.length) {
\r
244 }consensusAnnotation.scaleColLabel = true;
\r
245 for (var col = 0; col < consensusData.length; col++) {
\r
246 var hci = consensusData[col];
\r
249 }var codonCounts = hci.get ("P");
\r
250 var totalCount = 0;
\r
251 var codons = Clazz.newCharArray (codonCounts.length - 2, '\0');
\r
252 for (var j = 2; j < codonCounts.length; j++) {
\r
253 var codonCount = codonCounts[j];
\r
254 codons[j - 2] = String.fromCharCode (j - 2);
\r
255 totalCount += codonCount;
\r
257 var sortedCodonCounts = Clazz.newIntArray (codonCounts.length - 2, 0);
\r
258 System.arraycopy (codonCounts, 2, sortedCodonCounts, 0, codonCounts.length - 2);
\r
259 jalview.util.QuickSort.sortIntChar (sortedCodonCounts, codons);
\r
260 var modalCodonEncoded = (codons[codons.length - 1]).charCodeAt (0);
\r
261 var modalCodonCount = sortedCodonCounts[codons.length - 1];
\r
262 var modalCodon = String.valueOf (jalview.analysis.CodingUtils.decodeCodon (modalCodonEncoded));
\r
263 if (sortedCodonCounts.length > 1 && sortedCodonCounts[codons.length - 2] == modalCodonEncoded) {
\r
265 }var pid = sortedCodonCounts[sortedCodonCounts.length - 1] * 100 / totalCount;
\r
266 var mouseOver = new StringBuilder (32);
\r
267 var samePercent = new StringBuilder ();
\r
268 var percent = null;
\r
269 var lastPercent = null;
\r
270 var fmt = jalview.analysis.AAFrequency.getPercentageFormat (nseqs);
\r
271 for (var j = codons.length - 1; j >= 0; j--) {
\r
272 var codonCount = sortedCodonCounts[j];
\r
273 if (codonCount == 0) {
\r
274 if (samePercent.length () > 0) {
\r
275 mouseOver.append (samePercent).append (": ").append (percent).append ("% ");
\r
277 }var codonEncoded = (codons[j]).charCodeAt (0);
\r
278 var pct = Clazz.doubleToInt (codonCount * 100 / totalCount);
\r
279 var codon = String.valueOf (jalview.analysis.CodingUtils.decodeCodon (codonEncoded));
\r
280 percent = fmt == null ? Integer.toString (pct) : fmt.formLong (pct);
\r
281 if (showProfileLogo || codonCount == modalCodonCount) {
\r
282 if (percent.equals (lastPercent) && j > 0) {
\r
283 samePercent.append (samePercent.length () == 0 ? "" : ", ");
\r
284 samePercent.append (codon);
\r
286 if (samePercent.length () > 0) {
\r
287 mouseOver.append (samePercent).append (": ").append (lastPercent).append ("% ");
\r
288 }samePercent.setLength (0);
\r
289 samePercent.append (codon);
\r
290 }lastPercent = percent;
\r
292 consensusAnnotation.annotations[col] = new jalview.datamodel.Annotation (modalCodon, mouseOver.toString (), ' ', pid);
\r
294 }, "jalview.datamodel.AlignmentAnnotation,~A,~B,~N");
\r
295 Clazz.defineStatics (c$,
\r
296 "TO_UPPER_CASE", -32,
\r
302 "ENCODED_CHARS", "E");
\r
303 c$.CHARS = c$.prototype.CHARS = new Array (26);
\r
305 for (var c = 'A'; c <= 'Z'; c = String.fromCharCode (c.charCodeAt (0) + 1)) {
\r
306 jalview.analysis.AAFrequency.CHARS[c.charCodeAt (0) - 65] = String.valueOf (c);
\r