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