JAL-1807 Bob's JalviewJS prototype first commit
[jalviewjs.git] / bin / jalview / viewmodel / PCAModel.js
1 Clazz.declarePackage ("jalview.viewmodel");\r
2 Clazz.load (null, "jalview.viewmodel.PCAModel", ["jalview.analysis.PCA", "jalview.datamodel.SequencePoint", "java.lang.StringBuffer", "java.util.Vector"], function () {\r
3 c$ = Clazz.decorateAsClass (function () {\r
4 this.pca = null;\r
5 this.top = 0;\r
6 this.seqstrings = null;\r
7 this.seqs = null;\r
8 this.score_matrix = null;\r
9 this.nucleotide = false;\r
10 this.points = null;\r
11 this.jvCalcMode = true;\r
12 Clazz.instantialize (this, arguments);\r
13 }, jalview.viewmodel, "PCAModel");\r
14 Clazz.makeConstructor (c$, \r
15 function (seqstrings2, seqs2, nucleotide2) {\r
16 this.seqstrings = seqstrings2;\r
17 this.seqs = seqs2;\r
18 this.nucleotide = nucleotide2;\r
19 this.score_matrix = nucleotide2 ? "PID" : "BLOSUM62";\r
20 }, "jalview.datamodel.AlignmentView,~A,~B");\r
21 Clazz.defineMethod (c$, "isJvCalcMode", \r
22 function () {\r
23 return this.jvCalcMode;\r
24 });\r
25 Clazz.defineMethod (c$, "run", \r
26 function () {\r
27 this.pca =  new jalview.analysis.PCA (this.seqstrings.getSequenceStrings (' '), this.nucleotide, this.score_matrix);\r
28 this.pca.setJvCalcMode (this.jvCalcMode);\r
29 this.pca.run ();\r
30 var ii = 0;\r
31 while ((ii < this.seqs.length) && (this.seqs[ii] != null)) {\r
32 ii++;\r
33 }\r
34 var comps =  Clazz.newDoubleArray (ii, ii, 0);\r
35 for (var i = 0; i < ii; i++) {\r
36 if (this.pca.getEigenvalue (i) > 1e-4) {\r
37 comps[i] = this.pca.component (i);\r
38 }}\r
39 this.top = this.pca.getM ().rows - 1;\r
40 this.points =  new java.util.Vector ();\r
41 var scores = this.pca.getComponents (this.top - 1, this.top - 2, this.top - 3, 100);\r
42 for (var i = 0; i < this.pca.getM ().rows; i++) {\r
43 var sp =  new jalview.datamodel.SequencePoint (this.seqs[i], scores[i]);\r
44 this.points.addElement (sp);\r
45 }\r
46 });\r
47 Clazz.defineMethod (c$, "updateRc", \r
48 function (rc) {\r
49 rc.setPoints (this.points, this.pca.getM ().rows);\r
50 }, "jalview.api.RotatableCanvasI");\r
51 Clazz.defineMethod (c$, "isNucleotide", \r
52 function () {\r
53 return this.nucleotide;\r
54 });\r
55 Clazz.defineMethod (c$, "setNucleotide", \r
56 function (nucleotide) {\r
57 this.nucleotide = nucleotide;\r
58 }, "~B");\r
59 Clazz.defineMethod (c$, "getTop", \r
60 function () {\r
61 return this.top;\r
62 });\r
63 Clazz.defineMethod (c$, "updateRcView", \r
64 function (dim1, dim2, dim3) {\r
65 var scores = this.pca.getComponents (dim1 - 1, dim2 - 1, dim3 - 1, 100);\r
66 for (var i = 0; i < this.pca.getM ().rows; i++) {\r
67 (this.points.elementAt (i)).coord = scores[i];\r
68 }\r
69 }, "~N,~N,~N");\r
70 Clazz.defineMethod (c$, "getDetails", \r
71 function () {\r
72 return this.pca.getDetails ();\r
73 });\r
74 Clazz.defineMethod (c$, "getSeqtrings", \r
75 function () {\r
76 return this.seqstrings;\r
77 });\r
78 Clazz.defineMethod (c$, "getPointsasCsv", \r
79 function (transformed, xdim, ydim, zdim) {\r
80 var csv =  new StringBuffer ();\r
81 csv.append ("\"Sequence\"");\r
82 if (transformed) {\r
83 csv.append (",");\r
84 csv.append (xdim);\r
85 csv.append (",");\r
86 csv.append (ydim);\r
87 csv.append (",");\r
88 csv.append (zdim);\r
89 } else {\r
90 for (var d = 1, dmax = this.pca.component (1).length; d <= dmax; d++) {\r
91 csv.append ("," + d);\r
92 }\r
93 }csv.append ("\n");\r
94 for (var s = 0; s < this.seqs.length; s++) {\r
95 csv.append ("\"" + this.seqs[s].getName () + "\"");\r
96 var fl;\r
97 if (!transformed) {\r
98 fl = this.pca.component (s);\r
99 for (var d = fl.length - 1; d >= 0; d--) {\r
100 csv.append (",");\r
101 csv.append (fl[d]);\r
102 }\r
103 } else {\r
104 fl = this.getPointPosition (s);\r
105 for (var d = 0; d < fl.length; d++) {\r
106 csv.append (",");\r
107 csv.append (fl[d]);\r
108 }\r
109 }csv.append ("\n");\r
110 }\r
111 return csv.toString ();\r
112 }, "~B,~N,~N,~N");\r
113 Clazz.defineMethod (c$, "getPointPosition", \r
114 function (s) {\r
115 var pts =  Clazz.newDoubleArray (3, 0);\r
116 var p = this.points.elementAt (s).coord;\r
117 pts[0] = p[0];\r
118 pts[1] = p[1];\r
119 pts[2] = p[2];\r
120 return pts;\r
121 }, "~N");\r
122 Clazz.defineMethod (c$, "setJvCalcMode", \r
123 function (state) {\r
124 this.jvCalcMode = state;\r
125 }, "~B");\r
126 Clazz.defineMethod (c$, "getScore_matrix", \r
127 function () {\r
128 return this.score_matrix;\r
129 });\r
130 Clazz.defineMethod (c$, "setScore_matrix", \r
131 function (score_matrix) {\r
132 this.score_matrix = score_matrix;\r
133 }, "~S");\r
134 });\r