Merge branch 'master' of https://source.jalview.org/git/jalviewjs.git
[jalviewjs.git] / site / j2s / jalview / analysis / StructureFrequency.js
index 273e93d..43b4a83 100644 (file)
-Clazz.declarePackage ("jalview.analysis");\r
-Clazz.load (null, "jalview.analysis.StructureFrequency", ["jalview.datamodel.Annotation", "jalview.util.Format", "$.QuickSort", "java.lang.Float", "java.util.Hashtable", "JU.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 = JU.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 = JU.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
+Clazz.declarePackage ("jalview.analysis");
+Clazz.load (null, "jalview.analysis.StructureFrequency", ["jalview.datamodel.Annotation", "jalview.util.Format", "$.QuickSort", "java.lang.Float", "java.util.Hashtable", "JU.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 = JU.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 = JU.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");
+});