1 Clazz.declarePackage ("jalview.appletgui");
\r
2 Clazz.load (["jalview.appletgui.EmbmenuFrame", "java.awt.event.ActionListener", "$.ItemListener", "awt2swing.Button", "$.CheckboxMenuItem", "$.Choice", "$.Label", "$.Menu", "$.MenuBar", "$.MenuItem", "$.Panel", "java.awt.BorderLayout", "$.FlowLayout"], "jalview.appletgui.PCAPanel", ["awt2swing.Frame", "jalview.appletgui.AlignFrame", "$.CutAndPasteTransfer", "$.RotatableCanvas", "jalview.bin.JalviewLite", "jalview.datamodel.Alignment", "jalview.util.MessageManager", "jalview.viewmodel.PCAModel", "java.awt.Color", "$.Font", "java.lang.Thread"], function () {
\r
3 c$ = Clazz.decorateAsClass (function () {
\r
6 this.pcaModel = null;
\r
10 this.jLabel2 = null;
\r
11 this.jLabel3 = null;
\r
12 this.xCombobox = null;
\r
13 this.yCombobox = null;
\r
14 this.zCombobox = null;
\r
15 this.resetButton = null;
\r
16 this.flowLayout1 = null;
\r
17 this.borderLayout1 = null;
\r
18 this.menuBar1 = null;
\r
21 this.calcSettings = null;
\r
23 this.protSetting = null;
\r
24 this.nuclSetting = null;
\r
26 this.inputData = null;
\r
27 Clazz.instantialize (this, arguments);
\r
28 }, jalview.appletgui, "PCAPanel", jalview.appletgui.EmbmenuFrame, [Runnable, java.awt.event.ActionListener, java.awt.event.ItemListener]);
\r
29 Clazz.prepareFields (c$, function () {
\r
30 this.jPanel2 = new awt2swing.Panel ();
\r
31 this.jLabel1 = new awt2swing.Label ();
\r
32 this.jLabel2 = new awt2swing.Label ();
\r
33 this.jLabel3 = new awt2swing.Label ();
\r
34 this.xCombobox = new awt2swing.Choice ();
\r
35 this.yCombobox = new awt2swing.Choice ();
\r
36 this.zCombobox = new awt2swing.Choice ();
\r
37 this.resetButton = new awt2swing.Button ();
\r
38 this.flowLayout1 = new java.awt.FlowLayout ();
\r
39 this.borderLayout1 = new java.awt.BorderLayout ();
\r
40 this.menuBar1 = new awt2swing.MenuBar ();
\r
41 this.menu1 = new awt2swing.Menu ();
\r
42 this.menu2 = new awt2swing.Menu ();
\r
43 this.calcSettings = new awt2swing.Menu ();
\r
44 this.labels = new awt2swing.CheckboxMenuItem ();
\r
45 this.protSetting = new awt2swing.CheckboxMenuItem ();
\r
46 this.nuclSetting = new awt2swing.CheckboxMenuItem ();
\r
47 this.values = new awt2swing.MenuItem ();
\r
48 this.inputData = new awt2swing.MenuItem ();
\r
50 Clazz.makeConstructor (c$,
\r
52 Clazz.superConstructor (this, jalview.appletgui.PCAPanel, []);
\r
56 if (Clazz.exceptionOf (e, Exception)) {
\r
57 e.printStackTrace ();
\r
62 for (var i = 1; i < 8; i++) {
\r
63 this.xCombobox.addItem ("dim " + i);
\r
64 this.yCombobox.addItem ("dim " + i);
\r
65 this.zCombobox.addItem ("dim " + i);
\r
68 var selected = av.getSelectionGroup () != null && av.getSelectionGroup ().getSize () > 0;
\r
69 var seqstrings = av.getAlignmentView (selected);
\r
70 var nucleotide = av.getAlignment ().isNucleotide ();
\r
73 seqs = av.getAlignment ().getSequencesArray ();
\r
75 seqs = av.getSelectionGroup ().getSequencesInOrder (av.getAlignment ());
\r
76 }var sq = seqstrings.getSequences ();
\r
77 var length = sq[0].getWidth ();
\r
78 for (var i = 0; i < seqs.length; i++) {
\r
79 if (sq[i].getWidth () != length) {
\r
80 System.out.println ("Sequences must be equal length for PCA analysis");
\r
83 this.pcaModel = new jalview.viewmodel.PCAModel (seqstrings, seqs, nucleotide);
\r
84 this.rc = new jalview.appletgui.RotatableCanvas (av);
\r
85 this.embedMenuIfNeeded (this.rc);
\r
86 this.add (this.rc, "Center");
\r
87 jalview.bin.JalviewLite.addFrame (this, jalview.util.MessageManager.getString ("label.principal_component_analysis"), 475, 400);
\r
88 var worker = new Thread (this);
\r
90 }, "jalview.appletgui.AlignViewport");
\r
91 Clazz.overrideMethod (c$, "run",
\r
93 this.calcSettings.setEnabled (false);
\r
94 this.rc.setEnabled (false);
\r
96 this.nuclSetting.setState (this.pcaModel.isNucleotide ());
\r
97 this.protSetting.setState (!this.pcaModel.isNucleotide ());
\r
98 this.pcaModel.run ();
\r
99 this.xCombobox.select (new Integer (0));
\r
100 this.yCombobox.select (new Integer (1));
\r
101 this.zCombobox.select (new Integer (2));
\r
102 this.pcaModel.updateRc (this.rc);
\r
103 this.top = this.pcaModel.getTop ();
\r
105 if (Clazz.exceptionOf (x, OutOfMemoryError)) {
\r
106 System.err.println ("Out of memory when calculating PCA.");
\r
112 this.calcSettings.setEnabled (true);
\r
113 this.rc.setEnabled (true);
\r
114 this.rc.repaint ();
\r
117 Clazz.defineMethod (c$, "doDimensionChange",
\r
119 if (this.top == 0) {
\r
121 }var dim1 = this.top - this.xCombobox.getSelectedIndex ();
\r
122 var dim2 = this.top - this.yCombobox.getSelectedIndex ();
\r
123 var dim3 = this.top - this.zCombobox.getSelectedIndex ();
\r
124 this.pcaModel.updateRcView (dim1, dim2, dim3);
\r
125 this.rc.img = null;
\r
126 this.rc.rotmat.setIdentity ();
\r
127 this.rc.initAxes ();
\r
128 this.rc.paint (this.rc.getGraphics ());
\r
130 Clazz.overrideMethod (c$, "actionPerformed",
\r
132 if (evt.getSource () === this.inputData) {
\r
133 this.showOriginalData ();
\r
134 }if (evt.getSource () === this.resetButton) {
\r
135 this.xCombobox.select (new Integer (0));
\r
136 this.yCombobox.select (new Integer (1));
\r
137 this.zCombobox.select (new Integer (2));
\r
138 this.doDimensionChange ();
\r
139 }if (evt.getSource () === this.values) {
\r
140 this.values_actionPerformed ();
\r
141 }}, "java.awt.event.ActionEvent");
\r
142 Clazz.overrideMethod (c$, "itemStateChanged",
\r
144 if (evt.getSource () === this.xCombobox) {
\r
145 this.xCombobox_actionPerformed ();
\r
146 } else if (evt.getSource () === this.yCombobox) {
\r
147 this.yCombobox_actionPerformed ();
\r
148 } else if (evt.getSource () === this.zCombobox) {
\r
149 this.zCombobox_actionPerformed ();
\r
150 } else if (evt.getSource () === this.labels) {
\r
151 this.labels_itemStateChanged (evt);
\r
152 } else if (evt.getSource () === this.nuclSetting) {
\r
153 if (!this.pcaModel.isNucleotide ()) {
\r
154 this.pcaModel.setNucleotide (true);
\r
155 new Thread (this).start ();
\r
156 }} else if (evt.getSource () === this.protSetting) {
\r
157 if (this.pcaModel.isNucleotide ()) {
\r
158 this.pcaModel.setNucleotide (false);
\r
159 new Thread (this).start ();
\r
160 }}}, "java.awt.event.ItemEvent");
\r
161 Clazz.defineMethod (c$, "xCombobox_actionPerformed",
\r
163 this.doDimensionChange ();
\r
165 Clazz.defineMethod (c$, "yCombobox_actionPerformed",
\r
167 this.doDimensionChange ();
\r
169 Clazz.defineMethod (c$, "zCombobox_actionPerformed",
\r
171 this.doDimensionChange ();
\r
173 Clazz.defineMethod (c$, "values_actionPerformed",
\r
175 var cap = new jalview.appletgui.CutAndPasteTransfer (false, null);
\r
176 var frame = new awt2swing.Frame ();
\r
178 jalview.bin.JalviewLite.addFrame (frame, jalview.util.MessageManager.getString ("label.pca_details"), 500, 500);
\r
179 cap.setText (this.pcaModel.getDetails ());
\r
181 Clazz.defineMethod (c$, "showOriginalData",
\r
185 gc = this.av.getGapCharacter ();
\r
187 if (Clazz.exceptionOf (ex, Exception)) {
\r
192 ;var alAndColsel = this.pcaModel.getSeqtrings ().getAlignmentAndColumnSelection (gc);
\r
193 if (alAndColsel != null && alAndColsel[0] != null) {
\r
194 var al = new jalview.datamodel.Alignment (alAndColsel[0]);
\r
195 var af = new jalview.appletgui.AlignFrame (al, this.av.applet, "Original Data for PCA", false);
\r
196 af.viewport.setHiddenColumns (alAndColsel[1]);
\r
198 Clazz.defineMethod (c$, "labels_itemStateChanged",
\r
199 function (itemEvent) {
\r
200 this.rc.showLabels (this.labels.getState ());
\r
201 }, "java.awt.event.ItemEvent");
\r
202 Clazz.defineMethod (c$, "jbInit",
\r
203 ($fz = function () {
\r
204 this.setLayout (this.borderLayout1);
\r
205 this.jPanel2.setLayout (this.flowLayout1);
\r
206 this.jLabel1.setFont ( new java.awt.Font ("Verdana", 0, 12));
\r
207 this.jLabel1.setText ("x=");
\r
208 this.jLabel2.setFont ( new java.awt.Font ("Verdana", 0, 12));
\r
209 this.jLabel2.setText ("y=");
\r
210 this.jLabel3.setFont ( new java.awt.Font ("Verdana", 0, 12));
\r
211 this.jLabel3.setText ("z=");
\r
212 this.jPanel2.setBackground (java.awt.Color.white);
\r
213 this.zCombobox.setFont ( new java.awt.Font ("Verdana", 0, 12));
\r
214 this.zCombobox.addItemListener (this);
\r
215 this.yCombobox.setFont ( new java.awt.Font ("Verdana", 0, 12));
\r
216 this.yCombobox.addItemListener (this);
\r
217 this.xCombobox.setFont ( new java.awt.Font ("Verdana", 0, 12));
\r
218 this.xCombobox.addItemListener (this);
\r
219 this.resetButton.setFont ( new java.awt.Font ("Verdana", 0, 12));
\r
220 this.resetButton.setLabel (jalview.util.MessageManager.getString ("action.reset"));
\r
221 this.resetButton.addActionListener (this);
\r
222 this.setMenuBar (this.menuBar1);
\r
223 this.menu1.setLabel (jalview.util.MessageManager.getString ("action.file"));
\r
224 this.menu2.setLabel (jalview.util.MessageManager.getString ("action.view"));
\r
225 this.calcSettings.setLabel (jalview.util.MessageManager.getString ("action.change_params"));
\r
226 this.labels.setLabel (jalview.util.MessageManager.getString ("label.labels"));
\r
227 this.labels.addItemListener (this);
\r
228 this.values.setLabel (jalview.util.MessageManager.getString ("label.output_values"));
\r
229 this.values.addActionListener (this);
\r
230 this.inputData.setLabel (jalview.util.MessageManager.getString ("label.input_data"));
\r
231 this.nuclSetting.setLabel (jalview.util.MessageManager.getString ("label.nucleotide_matrix"));
\r
232 this.nuclSetting.addItemListener (this);
\r
233 this.protSetting.setLabel (jalview.util.MessageManager.getString ("label.protein_matrix"));
\r
234 this.protSetting.addItemListener (this);
\r
235 this.add (this.jPanel2, "South");
\r
236 this.jPanel2.add (this.jLabel1, null);
\r
237 this.jPanel2.add (this.xCombobox, null);
\r
238 this.jPanel2.add (this.jLabel2, null);
\r
239 this.jPanel2.add (this.yCombobox, null);
\r
240 this.jPanel2.add (this.jLabel3, null);
\r
241 this.jPanel2.add (this.zCombobox, null);
\r
242 this.jPanel2.add (this.resetButton, null);
\r
243 this.menuBar1.add (this.menu1);
\r
244 this.menuBar1.add (this.menu2);
\r
245 this.menuBar1.add (this.calcSettings);
\r
246 this.menu2.add (this.labels);
\r
247 this.menu1.add (this.values);
\r
248 this.menu1.add (this.inputData);
\r
249 this.calcSettings.add (this.nuclSetting);
\r
250 this.calcSettings.add (this.protSetting);
\r
251 this.inputData.addActionListener (this);
\r
252 }, $fz.isPrivate = true, $fz));
\r