JAL-1807 still testing
[jalviewjs.git] / bin / jalview / analysis / StructureFrequency.js
index 83c8f02..6c90b65 100644 (file)
-Clazz.declarePackage ("jalview.analysis");
-Clazz.load (null, "jalview.analysis.StructureFrequency", ["jalview.datamodel.Annotation", "jalview.util.Format", "$.QuickSort", "java.lang.Float", "java.util.Hashtable", "javajs.util.AU"], function () {
-c$ = Clazz.declareType (jalview.analysis, "StructureFrequency");
-c$.findPair = Clazz.defineMethod (c$, "findPair", 
-function (pairs, indice) {
-for (var i = 0; i < pairs.length; i++) {
-if (pairs[i].getBegin () == indice) {
-return pairs[i].getEnd ();
-}}
-return -1;
-}, "~A,~N");
-c$.calculate = Clazz.defineMethod (c$, "calculate", 
-function (sequences, start, end, result, profile, rnaStruc) {
-var residueHash;
-var maxResidue;
-var struc = rnaStruc.getRNAStruc ().toCharArray ();
-var rna = rnaStruc._rnasecstr;
-var c;
-var s;
-var cEnd;
-var count = 0;
-var nonGap = 0;
-var i;
-var bpEnd = -1;
-var j;
-var jSize = sequences.length;
-var values;
-var pairs;
-var percentage;
-var wooble = true;
-for (i = start; i < end; i++) {
-residueHash =  new java.util.Hashtable ();
-maxResidue = "-";
-values =  Clazz.newIntArray (255, 0);
-pairs =  Clazz.newIntArray (255, 255, 0);
-bpEnd = -1;
-if (i < struc.length) {
-s = struc[i];
-} else {
-s = '-';
-}if (s == '.' || s == ' ') {
-s = '-';
-}if (s != '(' && s != '[') {
-if (s == '-') {
-values['-'.charCodeAt (0)]++;
-}} else {
-bpEnd = jalview.analysis.StructureFrequency.findPair (rna, i);
-if (bpEnd > -1) {
-for (j = 0; j < jSize; j++) {
-if (sequences[j] == null) {
-System.err.println ("WARNING: Consensus skipping null sequence - possible race condition.");
-continue;
-}c = sequences[j].getCharAt (i);
-if (c == '.' || c == ' ') {
-c = '-';
-}if (c == '-') {
-values['-'.charCodeAt (0)]++;
-continue;
-}cEnd = sequences[j].getCharAt (bpEnd);
-if (jalview.analysis.StructureFrequency.checkBpType (c, cEnd) == true) {
-values['('.charCodeAt (0)]++;
-maxResidue = "(";
-wooble = true;
-}if (jalview.analysis.StructureFrequency.checkBpType (c, cEnd) == false) {
-wooble = false;
-values['['.charCodeAt (0)]++;
-maxResidue = "[";
-}pairs[c.charCodeAt (0)][cEnd.charCodeAt (0)]++;
-}
-}}if (profile) {
-residueHash.put ("P",  Clazz.newArray (-1, [values,  Clazz.newIntArray (-1, [jSize, (jSize - values['-'.charCodeAt (0)])])]));
-residueHash.put ("B", pairs);
-}if (wooble == true) {
-count = values['('.charCodeAt (0)];
-}if (wooble == false) {
-count = values['['.charCodeAt (0)];
-}residueHash.put ("C",  new Integer (count));
-residueHash.put ("R", maxResidue);
-percentage = (count * 100) / jSize;
-residueHash.put ("G",  new Float (percentage));
-if (result[i] == null) {
-result[i] = residueHash;
-}if (bpEnd > 0) {
-values[')'.charCodeAt (0)] = values['('.charCodeAt (0)];
-values[']'.charCodeAt (0)] = values['['.charCodeAt (0)];
-values['('.charCodeAt (0)] = 0;
-values['['.charCodeAt (0)] = 0;
-residueHash =  new java.util.Hashtable ();
-if (wooble == true) {
-maxResidue = ")";
-}if (wooble == false) {
-maxResidue = "]";
-}if (profile) {
-residueHash.put ("P",  Clazz.newArray (-1, [values,  Clazz.newIntArray (-1, [jSize, (jSize - values['-'.charCodeAt (0)])])]));
-residueHash.put ("B", pairs);
-}residueHash.put ("C",  new Integer (count));
-residueHash.put ("R", maxResidue);
-percentage = (count * 100) / jSize;
-residueHash.put ("G",  new Float (percentage));
-result[bpEnd] = residueHash;
-}}
-}, "~A,~N,~N,~A,~B,jalview.datamodel.AlignmentAnnotation");
-c$.checkBpType = Clazz.defineMethod (c$, "checkBpType", 
-function (up, down) {
-if (up > 'Z') {
-up = String.fromCharCode (up.charCodeAt (0) - 32);
-}if (down > 'Z') {
-down = String.fromCharCode (down.charCodeAt (0) - 32);
-}switch (up) {
-case 'A':
-switch (down) {
-case 'T':
-return true;
-case 'U':
-return true;
-}
-break;
-case 'C':
-switch (down) {
-case 'G':
-return true;
-}
-break;
-case 'T':
-switch (down) {
-case 'A':
-return true;
-case 'G':
-return true;
-}
-break;
-case 'G':
-switch (down) {
-case 'C':
-return true;
-case 'T':
-return true;
-case 'U':
-return true;
-}
-break;
-case 'U':
-switch (down) {
-case 'A':
-return true;
-case 'G':
-return true;
-}
-break;
-}
-return false;
-}, "~S,~S");
-c$.completeConsensus = Clazz.defineMethod (c$, "completeConsensus", 
-function (consensus, hconsensus, iStart, width, ignoreGapsInConsensusCalculation, includeAllConsSymbols, nseq) {
-var tval;
-var value;
-if (consensus == null || consensus.annotations == null || consensus.annotations.length < width) {
-return;
-}var fmtstr = "%3.1f";
-var precision = 2;
-while (nseq > 100) {
-precision++;
-nseq /= 10;
-}
-if (precision > 2) {
-fmtstr = "%" + (2 + precision) + "." + precision + "f";
-}var fmt =  new jalview.util.Format (fmtstr);
-for (var i = iStart; i < width; i++) {
-var hci;
-if (i >= hconsensus.length || ((hci = hconsensus[i]) == null)) {
-consensus.annotations[i] = null;
-continue;
-}value = 0;
-var fv;
-if (ignoreGapsInConsensusCalculation) {
-fv = hci.get ("N");
-} else {
-fv = hci.get ("G");
-}if (fv == null) {
-consensus.annotations[i] = null;
-continue;
-}value = fv.floatValue ();
-var maxRes = hci.get ("R").toString ();
-var mouseOver = hci.get ("R") + " ";
-if (maxRes.length > 1) {
-mouseOver = "[" + maxRes + "] ";
-maxRes = "+";
-}var profile = hci.get ("P");
-var pairs = hci.get ("B");
-if (pairs != null && includeAllConsSymbols) {
-mouseOver = "";
-var ca = javajs.util.AU.newInt2 (625);
-var vl =  Clazz.newFloatArray (625, 0);
-var x = 0;
-for (var c = 65; c < 90; c++) {
-for (var d = 65; d < 90; d++) {
-ca[x] =  Clazz.newIntArray (-1, [c, d]);
-vl[x] = pairs[c][d];
-x++;
-}
-}
-jalview.util.QuickSort.sortFloatObject (vl, ca);
-var p = 0;
-var divisor = profile[1][ignoreGapsInConsensusCalculation ? 1 : 0];
-for (var c = 624; c > 0; c--) {
-if (vl[c] > 0) {
-tval = (vl[c] * 100 / divisor);
-mouseOver += ((p == 0) ? "" : "; ") + String.fromCharCode (ca[c][0]) + String.fromCharCode (ca[c][1]) + " " + fmt.formDouble (tval) + "%";
-p++;
-}}
-} else {
-mouseOver += (fmt.formDouble (value) + "%");
-}consensus.annotations[i] =  new jalview.datamodel.Annotation (maxRes, mouseOver, ' ', value);
-}
-}, "jalview.datamodel.AlignmentAnnotation,~A,~N,~N,~B,~B,~N");
-c$.extractProfile = Clazz.defineMethod (c$, "extractProfile", 
-function (hconsensus, ignoreGapsInConsensusCalculation) {
-var rtnval =  Clazz.newIntArray (74, 0);
-var profile = hconsensus.get ("P");
-var pairs = hconsensus.get ("B");
-if (profile == null) {
-return null;
-}var ca = javajs.util.AU.newInt2 (625);
-var vl =  Clazz.newFloatArray (625, 0);
-var x = 0;
-for (var c = 65; c < 90; c++) {
-for (var d = 65; d < 90; d++) {
-ca[x] =  Clazz.newIntArray (-1, [c, d]);
-vl[x] = pairs[c][d];
-x++;
-}
-}
-jalview.util.QuickSort.sortFloatObject (vl, ca);
-var valuesCount = 0;
-rtnval[1] = 0;
-var offset = 2;
-var divisor = profile[1][ignoreGapsInConsensusCalculation ? 1 : 0];
-for (var c = 624; c > 0; c--) {
-if (vl[c] > 0) {
-rtnval[offset++] = ca[c][0];
-rtnval[offset++] = ca[c][1];
-rtnval[offset] = Clazz.floatToInt (vl[c] * 100 / divisor);
-rtnval[1] += rtnval[offset++];
-valuesCount++;
-}}
-rtnval[0] = valuesCount;
-var result =  Clazz.newIntArray (rtnval.length + 1, 0);
-result[0] = 1;
-System.arraycopy (rtnval, 0, result, 1, rtnval.length);
-return result;
-}, "java.util.Hashtable,~B");
-Clazz.defineStatics (c$,
-"STRUCTURE_PROFILE_LENGTH", 74,
-"MAXCOUNT", "C",
-"MAXRESIDUE", "R",
-"PID_GAPS", "G",
-"PID_NOGAPS", "N",
-"PROFILE", "P",
-"PAIRPROFILE", "B");
-});
+Clazz.declarePackage ("jalview.analysis");\r
+Clazz.load (null, "jalview.analysis.StructureFrequency", ["jalview.datamodel.Annotation", "jalview.util.Format", "$.QuickSort", "java.lang.Float", "java.util.Hashtable", "javajs.util.AU"], function () {\r
+c$ = Clazz.declareType (jalview.analysis, "StructureFrequency");\r
+c$.findPair = Clazz.defineMethod (c$, "findPair", \r
+function (pairs, indice) {\r
+for (var i = 0; i < pairs.length; i++) {\r
+if (pairs[i].getBegin () == indice) {\r
+return pairs[i].getEnd ();\r
+}}\r
+return -1;\r
+}, "~A,~N");\r
+c$.calculate = Clazz.defineMethod (c$, "calculate", \r
+function (sequences, start, end, result, profile, rnaStruc) {\r
+var residueHash;\r
+var maxResidue;\r
+var struc = rnaStruc.getRNAStruc ().toCharArray ();\r
+var rna = rnaStruc._rnasecstr;\r
+var c;\r
+var s;\r
+var cEnd;\r
+var count = 0;\r
+var nonGap = 0;\r
+var i;\r
+var bpEnd = -1;\r
+var j;\r
+var jSize = sequences.length;\r
+var values;\r
+var pairs;\r
+var percentage;\r
+var wooble = true;\r
+for (i = start; i < end; i++) {\r
+residueHash =  new java.util.Hashtable ();\r
+maxResidue = "-";\r
+values =  Clazz.newIntArray (255, 0);\r
+pairs =  Clazz.newIntArray (255, 255, 0);\r
+bpEnd = -1;\r
+if (i < struc.length) {\r
+s = struc[i];\r
+} else {\r
+s = '-';\r
+}if (s == '.' || s == ' ') {\r
+s = '-';\r
+}if (s != '(' && s != '[') {\r
+if (s == '-') {\r
+values['-'.charCodeAt (0)]++;\r
+}} else {\r
+bpEnd = jalview.analysis.StructureFrequency.findPair (rna, i);\r
+if (bpEnd > -1) {\r
+for (j = 0; j < jSize; j++) {\r
+if (sequences[j] == null) {\r
+System.err.println ("WARNING: Consensus skipping null sequence - possible race condition.");\r
+continue;\r
+}c = sequences[j].getCharAt (i);\r
+if (c == '.' || c == ' ') {\r
+c = '-';\r
+}if (c == '-') {\r
+values['-'.charCodeAt (0)]++;\r
+continue;\r
+}cEnd = sequences[j].getCharAt (bpEnd);\r
+if (jalview.analysis.StructureFrequency.checkBpType (c, cEnd) == true) {\r
+values['('.charCodeAt (0)]++;\r
+maxResidue = "(";\r
+wooble = true;\r
+}if (jalview.analysis.StructureFrequency.checkBpType (c, cEnd) == false) {\r
+wooble = false;\r
+values['['.charCodeAt (0)]++;\r
+maxResidue = "[";\r
+}pairs[c.charCodeAt (0)][cEnd.charCodeAt (0)]++;\r
+}\r
+}}if (profile) {\r
+residueHash.put ("P",  Clazz.newArray (-1, [values,  Clazz.newIntArray (-1, [jSize, (jSize - values['-'.charCodeAt (0)])])]));\r
+residueHash.put ("B", pairs);\r
+}if (wooble == true) {\r
+count = values['('.charCodeAt (0)];\r
+}if (wooble == false) {\r
+count = values['['.charCodeAt (0)];\r
+}residueHash.put ("C",  new Integer (count));\r
+residueHash.put ("R", maxResidue);\r
+percentage = (count * 100) / jSize;\r
+residueHash.put ("G",  new Float (percentage));\r
+if (result[i] == null) {\r
+result[i] = residueHash;\r
+}if (bpEnd > 0) {\r
+values[')'.charCodeAt (0)] = values['('.charCodeAt (0)];\r
+values[']'.charCodeAt (0)] = values['['.charCodeAt (0)];\r
+values['('.charCodeAt (0)] = 0;\r
+values['['.charCodeAt (0)] = 0;\r
+residueHash =  new java.util.Hashtable ();\r
+if (wooble == true) {\r
+maxResidue = ")";\r
+}if (wooble == false) {\r
+maxResidue = "]";\r
+}if (profile) {\r
+residueHash.put ("P",  Clazz.newArray (-1, [values,  Clazz.newIntArray (-1, [jSize, (jSize - values['-'.charCodeAt (0)])])]));\r
+residueHash.put ("B", pairs);\r
+}residueHash.put ("C",  new Integer (count));\r
+residueHash.put ("R", maxResidue);\r
+percentage = (count * 100) / jSize;\r
+residueHash.put ("G",  new Float (percentage));\r
+result[bpEnd] = residueHash;\r
+}}\r
+}, "~A,~N,~N,~A,~B,jalview.datamodel.AlignmentAnnotation");\r
+c$.checkBpType = Clazz.defineMethod (c$, "checkBpType", \r
+function (up, down) {\r
+if (up > 'Z') {\r
+up = String.fromCharCode (up.charCodeAt (0) - 32);\r
+}if (down > 'Z') {\r
+down = String.fromCharCode (down.charCodeAt (0) - 32);\r
+}switch (up) {\r
+case 'A':\r
+switch (down) {\r
+case 'T':\r
+return true;\r
+case 'U':\r
+return true;\r
+}\r
+break;\r
+case 'C':\r
+switch (down) {\r
+case 'G':\r
+return true;\r
+}\r
+break;\r
+case 'T':\r
+switch (down) {\r
+case 'A':\r
+return true;\r
+case 'G':\r
+return true;\r
+}\r
+break;\r
+case 'G':\r
+switch (down) {\r
+case 'C':\r
+return true;\r
+case 'T':\r
+return true;\r
+case 'U':\r
+return true;\r
+}\r
+break;\r
+case 'U':\r
+switch (down) {\r
+case 'A':\r
+return true;\r
+case 'G':\r
+return true;\r
+}\r
+break;\r
+}\r
+return false;\r
+}, "~S,~S");\r
+c$.completeConsensus = Clazz.defineMethod (c$, "completeConsensus", \r
+function (consensus, hconsensus, iStart, width, ignoreGapsInConsensusCalculation, includeAllConsSymbols, nseq) {\r
+var tval;\r
+var value;\r
+if (consensus == null || consensus.annotations == null || consensus.annotations.length < width) {\r
+return;\r
+}var fmtstr = "%3.1f";\r
+var precision = 2;\r
+while (nseq > 100) {\r
+precision++;\r
+nseq /= 10;\r
+}\r
+if (precision > 2) {\r
+fmtstr = "%" + (2 + precision) + "." + precision + "f";\r
+}var fmt =  new jalview.util.Format (fmtstr);\r
+for (var i = iStart; i < width; i++) {\r
+var hci;\r
+if (i >= hconsensus.length || ((hci = hconsensus[i]) == null)) {\r
+consensus.annotations[i] = null;\r
+continue;\r
+}value = 0;\r
+var fv;\r
+if (ignoreGapsInConsensusCalculation) {\r
+fv = hci.get ("N");\r
+} else {\r
+fv = hci.get ("G");\r
+}if (fv == null) {\r
+consensus.annotations[i] = null;\r
+continue;\r
+}value = fv.floatValue ();\r
+var maxRes = hci.get ("R").toString ();\r
+var mouseOver = hci.get ("R") + " ";\r
+if (maxRes.length > 1) {\r
+mouseOver = "[" + maxRes + "] ";\r
+maxRes = "+";\r
+}var profile = hci.get ("P");\r
+var pairs = hci.get ("B");\r
+if (pairs != null && includeAllConsSymbols) {\r
+mouseOver = "";\r
+var ca = javajs.util.AU.newInt2 (625);\r
+var vl =  Clazz.newFloatArray (625, 0);\r
+var x = 0;\r
+for (var c = 65; c < 90; c++) {\r
+for (var d = 65; d < 90; d++) {\r
+ca[x] =  Clazz.newIntArray (-1, [c, d]);\r
+vl[x] = pairs[c][d];\r
+x++;\r
+}\r
+}\r
+jalview.util.QuickSort.sortFloatObject (vl, ca);\r
+var p = 0;\r
+var divisor = profile[1][ignoreGapsInConsensusCalculation ? 1 : 0];\r
+for (var c = 624; c > 0; c--) {\r
+if (vl[c] > 0) {\r
+tval = (vl[c] * 100 / divisor);\r
+mouseOver += ((p == 0) ? "" : "; ") + String.fromCharCode (ca[c][0]) + String.fromCharCode (ca[c][1]) + " " + fmt.formDouble (tval) + "%";\r
+p++;\r
+}}\r
+} else {\r
+mouseOver += (fmt.formDouble (value) + "%");\r
+}consensus.annotations[i] =  new jalview.datamodel.Annotation (maxRes, mouseOver, ' ', value);\r
+}\r
+}, "jalview.datamodel.AlignmentAnnotation,~A,~N,~N,~B,~B,~N");\r
+c$.extractProfile = Clazz.defineMethod (c$, "extractProfile", \r
+function (hconsensus, ignoreGapsInConsensusCalculation) {\r
+var rtnval =  Clazz.newIntArray (74, 0);\r
+var profile = hconsensus.get ("P");\r
+var pairs = hconsensus.get ("B");\r
+if (profile == null) {\r
+return null;\r
+}var ca = javajs.util.AU.newInt2 (625);\r
+var vl =  Clazz.newFloatArray (625, 0);\r
+var x = 0;\r
+for (var c = 65; c < 90; c++) {\r
+for (var d = 65; d < 90; d++) {\r
+ca[x] =  Clazz.newIntArray (-1, [c, d]);\r
+vl[x] = pairs[c][d];\r
+x++;\r
+}\r
+}\r
+jalview.util.QuickSort.sortFloatObject (vl, ca);\r
+var valuesCount = 0;\r
+rtnval[1] = 0;\r
+var offset = 2;\r
+var divisor = profile[1][ignoreGapsInConsensusCalculation ? 1 : 0];\r
+for (var c = 624; c > 0; c--) {\r
+if (vl[c] > 0) {\r
+rtnval[offset++] = ca[c][0];\r
+rtnval[offset++] = ca[c][1];\r
+rtnval[offset] = Clazz.floatToInt (vl[c] * 100 / divisor);\r
+rtnval[1] += rtnval[offset++];\r
+valuesCount++;\r
+}}\r
+rtnval[0] = valuesCount;\r
+var result =  Clazz.newIntArray (rtnval.length + 1, 0);\r
+result[0] = 1;\r
+System.arraycopy (rtnval, 0, result, 1, rtnval.length);\r
+return result;\r
+}, "java.util.Hashtable,~B");\r
+Clazz.defineStatics (c$,\r
+"STRUCTURE_PROFILE_LENGTH", 74,\r
+"MAXCOUNT", "C",\r
+"MAXRESIDUE", "R",\r
+"PID_GAPS", "G",\r
+"PID_NOGAPS", "N",\r
+"PROFILE", "P",\r
+"PAIRPROFILE", "B");\r
+});\r