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
6 this.seqstrings = null;
\r
8 this.score_matrix = null;
\r
9 this.nucleotide = false;
\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
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
23 return this.jvCalcMode;
\r
25 Clazz.defineMethod (c$, "run",
\r
27 this.pca = new jalview.analysis.PCA (this.seqstrings.getSequenceStrings (' '), this.nucleotide, this.score_matrix);
\r
28 this.pca.setJvCalcMode (this.jvCalcMode);
\r
31 while ((ii < this.seqs.length) && (this.seqs[ii] != null)) {
\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
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
47 Clazz.defineMethod (c$, "updateRc",
\r
49 rc.setPoints (this.points, this.pca.getM ().rows);
\r
50 }, "jalview.api.RotatableCanvasI");
\r
51 Clazz.defineMethod (c$, "isNucleotide",
\r
53 return this.nucleotide;
\r
55 Clazz.defineMethod (c$, "setNucleotide",
\r
56 function (nucleotide) {
\r
57 this.nucleotide = nucleotide;
\r
59 Clazz.defineMethod (c$, "getTop",
\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
70 Clazz.defineMethod (c$, "getDetails",
\r
72 return this.pca.getDetails ();
\r
74 Clazz.defineMethod (c$, "getSeqtrings",
\r
76 return this.seqstrings;
\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
90 for (var d = 1, dmax = this.pca.component (1).length; d <= dmax; d++) {
\r
91 csv.append ("," + d);
\r
94 for (var s = 0; s < this.seqs.length; s++) {
\r
95 csv.append ("\"" + this.seqs[s].getName () + "\"");
\r
98 fl = this.pca.component (s);
\r
99 for (var d = fl.length - 1; d >= 0; d--) {
\r
101 csv.append (fl[d]);
\r
104 fl = this.getPointPosition (s);
\r
105 for (var d = 0; d < fl.length; d++) {
\r
107 csv.append (fl[d]);
\r
109 }csv.append ("\n");
\r
111 return csv.toString ();
\r
113 Clazz.defineMethod (c$, "getPointPosition",
\r
115 var pts = Clazz.newDoubleArray (3, 0);
\r
116 var p = this.points.elementAt (s).coord;
\r
122 Clazz.defineMethod (c$, "setJvCalcMode",
\r
124 this.jvCalcMode = state;
\r
126 Clazz.defineMethod (c$, "getScore_matrix",
\r
128 return this.score_matrix;
\r
130 Clazz.defineMethod (c$, "setScore_matrix",
\r
131 function (score_matrix) {
\r
132 this.score_matrix = score_matrix;
\r