JAL-1807 Bob's JalviewJS prototype first commit
[jalviewjs.git] / bin / jalview / analysis / SecStrConsensus.js
1 Clazz.declarePackage ("jalview.analysis");\r
2 Clazz.load (null, "jalview.analysis.SecStrConsensus", ["java.util.ArrayList", "$.Hashtable"], function () {\r
3 c$ = Clazz.declareType (jalview.analysis, "SecStrConsensus");\r
4 c$.extractConsensus = Clazz.defineMethod (c$, "extractConsensus", \r
5 function (bps) {\r
6 var maxlength = 0;\r
7 for (var strs, $strs = bps.iterator (); $strs.hasNext () && ((strs = $strs.next ()) || true);) {\r
8 for (var bp, $bp = strs.iterator (); $bp.hasNext () && ((bp = $bp.next ()) || true);) {\r
9 maxlength = Math.max (1 + Math.max (bp.bp5, bp.bp3), maxlength);\r
10 }\r
11 }\r
12 var seq =  new java.util.ArrayList ();\r
13 for (var i = 0; i < maxlength; i++) {\r
14 seq.add ( new java.util.Hashtable ());\r
15 }\r
16 for (var strs, $strs = bps.iterator (); $strs.hasNext () && ((strs = $strs.next ()) || true);) {\r
17 for (var bp, $bp = strs.iterator (); $bp.hasNext () && ((bp = $bp.next ()) || true);) {\r
18 var i = bp.bp5;\r
19 var j = bp.bp3;\r
20 var h = seq.get (i);\r
21 if (!h.containsKey (new Integer (j))) {\r
22 h.put (new Integer (j), new Double (0.0));\r
23 }h.put (new Integer (j), new Double ((h.get (new Integer (j))).doubleValue () + 1.));\r
24 }\r
25 }\r
26 var mat = jalview.analysis.SecStrConsensus.fillMatrix (seq);\r
27 var res = jalview.analysis.SecStrConsensus.backtrack (mat, seq);\r
28 var finalres =  Clazz.newIntArray (seq.size (), 0);\r
29 for (var i = 0; i < seq.size (); i++) {\r
30 finalres[i] = -1;\r
31 }\r
32 for (var bp, $bp = res.iterator (); $bp.hasNext () && ((bp = $bp.next ()) || true);) {\r
33 finalres[bp.bp5] = bp.bp3;\r
34 finalres[bp.bp3] = bp.bp5;\r
35 }\r
36 return finalres;\r
37 }, "java.util.ArrayList");\r
38 c$.canBasePair = Clazz.defineMethod (c$, "canBasePair", \r
39 ($fz = function (seq, i, k) {\r
40 return seq.get (i).containsKey (new Integer (k));\r
41 }, $fz.isPrivate = true, $fz), "java.util.ArrayList,~N,~N");\r
42 c$.basePairScore = Clazz.defineMethod (c$, "basePairScore", \r
43 ($fz = function (seq, i, k) {\r
44 return seq.get (i).get (new Integer (k));\r
45 }, $fz.isPrivate = true, $fz), "java.util.ArrayList,~N,~N");\r
46 c$.fillMatrix = Clazz.defineMethod (c$, "fillMatrix", \r
47 ($fz = function (seq) {\r
48 var n = seq.size ();\r
49 var tab =  Clazz.newDoubleArray (n, n, 0);\r
50 for (var m = 1; m <= n; m++) {\r
51 for (var i = 0; i < n - m + 1; i++) {\r
52 var j = i + m - 1;\r
53 tab[i][j] = 0;\r
54 if (i < j) {\r
55 tab[i][j] = Math.max (tab[i][j], tab[i + 1][j]);\r
56 for (var k = i + 1; k <= j; k++) {\r
57 if (jalview.analysis.SecStrConsensus.canBasePair (seq, i, k)) {\r
58 var fact1 = 0;\r
59 if (k > i + 1) {\r
60 fact1 = tab[i + 1][k - 1];\r
61 }var fact2 = 0;\r
62 if (k < j) {\r
63 fact2 = tab[k + 1][j];\r
64 }tab[i][j] = Math.max (tab[i][j], jalview.analysis.SecStrConsensus.basePairScore (seq, i, k) + fact1 + fact2);\r
65 }}\r
66 }}\r
67 }\r
68 return tab;\r
69 }, $fz.isPrivate = true, $fz), "java.util.ArrayList");\r
70 c$.backtrack = Clazz.defineMethod (c$, "backtrack", \r
71 ($fz = function (tab, seq) {\r
72 return jalview.analysis.SecStrConsensus.backtrack (tab, seq, 0, seq.size () - 1);\r
73 }, $fz.isPrivate = true, $fz), "~A,java.util.ArrayList");\r
74 c$.backtrack = Clazz.defineMethod (c$, "backtrack", \r
75 ($fz = function (tab, seq, i, j) {\r
76 var result =  new java.util.ArrayList ();\r
77 if (i < j) {\r
78 var indices =  new java.util.ArrayList ();\r
79 indices.add (new Integer (-1));\r
80 for (var k = i + 1; k <= j; k++) {\r
81 indices.add (new Integer (k));\r
82 }\r
83 for (var k, $k = indices.iterator (); $k.hasNext () && ((k = $k.next ()) || true);) {\r
84 if (k == -1) {\r
85 if (tab[i][j] == tab[i + 1][j]) {\r
86 result = jalview.analysis.SecStrConsensus.backtrack (tab, seq, i + 1, j);\r
87 }} else {\r
88 if (jalview.analysis.SecStrConsensus.canBasePair (seq, i, k)) {\r
89 var fact1 = 0;\r
90 if (k > i + 1) {\r
91 fact1 = tab[i + 1][k - 1];\r
92 }var fact2 = 0;\r
93 if (k < j) {\r
94 fact2 = tab[k + 1][j];\r
95 }if (tab[i][j] == jalview.analysis.SecStrConsensus.basePairScore (seq, i, k) + fact1 + fact2) {\r
96 result = jalview.analysis.SecStrConsensus.backtrack (tab, seq, i + 1, k - 1);\r
97 result.addAll (jalview.analysis.SecStrConsensus.backtrack (tab, seq, k + 1, j));\r
98 result.add ( new jalview.analysis.SecStrConsensus.SimpleBP (i, k));\r
99 }}}}\r
100 } else if (i == j) {\r
101 } else {\r
102 }return result;\r
103 }, $fz.isPrivate = true, $fz), "~A,java.util.ArrayList,~N,~N");\r
104 Clazz.pu$h ();\r
105 c$ = Clazz.decorateAsClass (function () {\r
106 this.bp5 = 0;\r
107 this.bp3 = 0;\r
108 Clazz.instantialize (this, arguments);\r
109 }, jalview.analysis.SecStrConsensus, "SimpleBP");\r
110 Clazz.makeConstructor (c$, \r
111 function () {\r
112 });\r
113 Clazz.makeConstructor (c$, \r
114 function (a, b) {\r
115 this.bp5 = a;\r
116 this.bp3 = b;\r
117 }, "~N,~N");\r
118 Clazz.defineMethod (c$, "setBP5", \r
119 function (a) {\r
120 this.bp5 = a;\r
121 }, "~N");\r
122 Clazz.defineMethod (c$, "setBP3", \r
123 function (a) {\r
124 this.bp3 = a;\r
125 }, "~N");\r
126 Clazz.defineMethod (c$, "getBP5", \r
127 function () {\r
128 return this.bp5;\r
129 });\r
130 Clazz.defineMethod (c$, "getBP3", \r
131 function () {\r
132 return this.bp3;\r
133 });\r
134 Clazz.overrideMethod (c$, "toString", \r
135 function () {\r
136 return "(" + this.bp5 + "," + this.bp3 + ")";\r
137 });\r
138 c$ = Clazz.p0p ();\r
139 });\r