mev-4.0.01/source/org/tigr/microarray/mev/cluster/gui/impl/pca/PCAGUI.java

Code
Comments
Other
Rev Date Author Line
2 26 Feb 07 jari 1 /*
2 26 Feb 07 jari 2 Copyright @ 1999-2005, The Institute for Genomic Research (TIGR).
2 26 Feb 07 jari 3 All rights reserved.
2 26 Feb 07 jari 4  */
2 26 Feb 07 jari 5 /*
2 26 Feb 07 jari 6  * $RCSfile: PCAGUI.java,v $
2 26 Feb 07 jari 7  * $Revision: 1.5 $
2 26 Feb 07 jari 8  * $Date: 2005/03/10 20:32:37 $
2 26 Feb 07 jari 9  * $Author: braistedj $
2 26 Feb 07 jari 10  * $State: Exp $
2 26 Feb 07 jari 11  */
2 26 Feb 07 jari 12 package org.tigr.microarray.mev.cluster.gui.impl.pca;
2 26 Feb 07 jari 13
2 26 Feb 07 jari 14 import java.awt.Frame;
2 26 Feb 07 jari 15 import java.awt.event.ActionEvent;
2 26 Feb 07 jari 16 import java.awt.event.WindowEvent;
2 26 Feb 07 jari 17
2 26 Feb 07 jari 18 import javax.swing.JFrame;
2 26 Feb 07 jari 19 import javax.swing.JMenuItem;
2 26 Feb 07 jari 20 import javax.swing.JOptionPane;
2 26 Feb 07 jari 21 import javax.swing.JPopupMenu;
2 26 Feb 07 jari 22 import javax.swing.tree.DefaultMutableTreeNode;
2 26 Feb 07 jari 23
2 26 Feb 07 jari 24 import org.tigr.microarray.mev.cluster.algorithm.Algorithm;
2 26 Feb 07 jari 25 import org.tigr.microarray.mev.cluster.algorithm.AlgorithmData;
2 26 Feb 07 jari 26 import org.tigr.microarray.mev.cluster.algorithm.AlgorithmEvent;
2 26 Feb 07 jari 27 import org.tigr.microarray.mev.cluster.algorithm.AlgorithmException;
2 26 Feb 07 jari 28 import org.tigr.microarray.mev.cluster.algorithm.AlgorithmListener;
2 26 Feb 07 jari 29 import org.tigr.microarray.mev.cluster.gui.Experiment;
2 26 Feb 07 jari 30 import org.tigr.microarray.mev.cluster.gui.IClusterGUI;
2 26 Feb 07 jari 31 import org.tigr.microarray.mev.cluster.gui.IDistanceMenu;
2 26 Feb 07 jari 32 import org.tigr.microarray.mev.cluster.gui.IFramework;
2 26 Feb 07 jari 33 import org.tigr.microarray.mev.cluster.gui.LeafInfo;
2 26 Feb 07 jari 34 import org.tigr.microarray.mev.cluster.gui.impl.dialogs.DialogListener;
2 26 Feb 07 jari 35 import org.tigr.microarray.mev.cluster.gui.impl.dialogs.Logger;
2 26 Feb 07 jari 36 import org.tigr.microarray.mev.script.scriptGUI.IScriptGUI;
2 26 Feb 07 jari 37 import org.tigr.util.FloatMatrix;
2 26 Feb 07 jari 38
2 26 Feb 07 jari 39 public class PCAGUI implements IClusterGUI, IScriptGUI {
2 26 Feb 07 jari 40     
2 26 Feb 07 jari 41     private static final String ADD_NEW_3D_CMD = "add-new-3d-cmd";
2 26 Feb 07 jari 42     private static final String ADD_NEW_2D_CMD = "add-new-2d-cmd";
2 26 Feb 07 jari 43     
2 26 Feb 07 jari 44     private int mode, numNeibs;
2 26 Feb 07 jari 45     private FloatMatrix T;
2 26 Feb 07 jari 46     private FloatMatrix V;
2 26 Feb 07 jari 47     private FloatMatrix S;
2 26 Feb 07 jari 48     private FloatMatrix U;
2 26 Feb 07 jari 49     
2 26 Feb 07 jari 50     private Algorithm algorithm;
2 26 Feb 07 jari 51     private Logger logger;
2 26 Feb 07 jari 52     
2 26 Feb 07 jari 53     private IFramework currFramework;
2 26 Feb 07 jari 54     private DefaultMutableTreeNode projectionNode;
2 26 Feb 07 jari 55     
2 26 Feb 07 jari 56     /**
2 26 Feb 07 jari 57      * Runs the calculation algorithm and returns analysis result tree.
2 26 Feb 07 jari 58      */
2 26 Feb 07 jari 59     public DefaultMutableTreeNode execute(IFramework framework) throws AlgorithmException {
2 26 Feb 07 jari 60         Listener listener = new Listener();
2 26 Feb 07 jari 61         try {
2 26 Feb 07 jari 62             
2 26 Feb 07 jari 63             PCASelectionDialog dialog = new PCASelectionDialog(framework.getFrame());
2 26 Feb 07 jari 64             if(dialog.showModal() == JOptionPane.CANCEL_OPTION)
2 26 Feb 07 jari 65                 return null;
2 26 Feb 07 jari 66             
2 26 Feb 07 jari 67             if(dialog.isClusterGenesSelected())
2 26 Feb 07 jari 68                 this.mode = 1;
2 26 Feb 07 jari 69             else
2 26 Feb 07 jari 70                 this.mode = 3;
2 26 Feb 07 jari 71             
2 26 Feb 07 jari 72             numNeibs = dialog.getNumNeighbors();
2 26 Feb 07 jari 73             
2 26 Feb 07 jari 74             algorithm = framework.getAlgorithmFactory().getAlgorithm("PCA");
2 26 Feb 07 jari 75             algorithm.addAlgorithmListener(listener);
2 26 Feb 07 jari 76             
2 26 Feb 07 jari 77             logger = new Logger(framework.getFrame(), "PCA Log Window", listener);
2 26 Feb 07 jari 78             logger.show();
2 26 Feb 07 jari 79             logger.append("Starting SVD calculation\n");
2 26 Feb 07 jari 80             
2 26 Feb 07 jari 81             currFramework = framework;
2 26 Feb 07 jari 82             
2 26 Feb 07 jari 83             FloatMatrix Cov;
2 26 Feb 07 jari 84             AlgorithmData data = new AlgorithmData();
2 26 Feb 07 jari 85             Experiment experiment = framework.getData().getExperiment();
2 26 Feb 07 jari 86             data.addMatrix("experiment", experiment.getMatrix());
2 26 Feb 07 jari 87             data.addParam("distance-factor", String.valueOf(1.0f));
2 26 Feb 07 jari 88             IDistanceMenu menu = framework.getDistanceMenu();
2 26 Feb 07 jari 89             data.addParam("distance-absolute", String.valueOf(menu.isAbsoluteDistance()));
2 26 Feb 07 jari 90             int function = menu.getDistanceFunction();
2 26 Feb 07 jari 91             if (function == Algorithm.DEFAULT) {
2 26 Feb 07 jari 92                 function = Algorithm.COVARIANCE;
2 26 Feb 07 jari 93             }
2 26 Feb 07 jari 94             data.addParam("distance-function", String.valueOf(function));
2 26 Feb 07 jari 95             data.addParam("pca-mode", String.valueOf(mode));
2 26 Feb 07 jari 96             data.addParam("numNeighbors", String.valueOf(numNeibs));
2 26 Feb 07 jari 97             AlgorithmData result = null;
2 26 Feb 07 jari 98             DefaultMutableTreeNode node = null;
2 26 Feb 07 jari 99             long start = System.currentTimeMillis();
2 26 Feb 07 jari 100             switch (mode) {
2 26 Feb 07 jari 101                 case 1: // Spots
2 26 Feb 07 jari 102                     data.addParam("distance-function", String.valueOf(function));
2 26 Feb 07 jari 103                     result = algorithm.execute(data);
2 26 Feb 07 jari 104                     T = result.getMatrix("T");
2 26 Feb 07 jari 105                     V = result.getMatrix("V");
2 26 Feb 07 jari 106                     S = result.getMatrix("S");
2 26 Feb 07 jari 107                     U = result.getMatrix("U");
2 26 Feb 07 jari 108                     node = new DefaultMutableTreeNode("PCA - genes");
2 26 Feb 07 jari 109                     break;
2 26 Feb 07 jari 110                 case 3: // Experiments
2 26 Feb 07 jari 111                     result = algorithm.execute(data);
2 26 Feb 07 jari 112                     T = result.getMatrix("T");
2 26 Feb 07 jari 113                     V = result.getMatrix("V");
2 26 Feb 07 jari 114                     S = result.getMatrix("S");
2 26 Feb 07 jari 115                     U = result.getMatrix("U");
2 26 Feb 07 jari 116                     node = new DefaultMutableTreeNode("PCA - samples");
2 26 Feb 07 jari 117                     break;
2 26 Feb 07 jari 118                 default:
2 26 Feb 07 jari 119                     break;
2 26 Feb 07 jari 120             }
2 26 Feb 07 jari 121             logger.append("Creating the result viewers");
2 26 Feb 07 jari 122             long time = System.currentTimeMillis() - start;
2 26 Feb 07 jari 123             addResultNodes(framework.getFrame(), node, time, menu.getFunctionName(function), experiment);
2 26 Feb 07 jari 124             return node;
2 26 Feb 07 jari 125         } finally {
2 26 Feb 07 jari 126             if (algorithm != null) {
2 26 Feb 07 jari 127                 algorithm.removeAlgorithmListener(listener);
2 26 Feb 07 jari 128             }
2 26 Feb 07 jari 129             if (logger != null) {
2 26 Feb 07 jari 130                 logger.dispose();
2 26 Feb 07 jari 131             }
2 26 Feb 07 jari 132         }
2 26 Feb 07 jari 133     }
2 26 Feb 07 jari 134     
2 26 Feb 07 jari 135     
2 26 Feb 07 jari 136     
2 26 Feb 07 jari 137     public AlgorithmData getScriptParameters(IFramework framework) {
2 26 Feb 07 jari 138         
2 26 Feb 07 jari 139         PCASelectionDialog dialog = new PCASelectionDialog(framework.getFrame());
2 26 Feb 07 jari 140         if(dialog.showModal() == JOptionPane.CANCEL_OPTION)
2 26 Feb 07 jari 141             return null;
2 26 Feb 07 jari 142         
2 26 Feb 07 jari 143         if(dialog.isClusterGenesSelected())
2 26 Feb 07 jari 144             this.mode = 1;
2 26 Feb 07 jari 145         else
2 26 Feb 07 jari 146             this.mode = 3;
2 26 Feb 07 jari 147         
2 26 Feb 07 jari 148         numNeibs = dialog.getNumNeighbors();
2 26 Feb 07 jari 149         
2 26 Feb 07 jari 150         FloatMatrix Cov;
2 26 Feb 07 jari 151         AlgorithmData data = new AlgorithmData();
2 26 Feb 07 jari 152         
2 26 Feb 07 jari 153         data.addParam("distance-factor", String.valueOf(1.0f));
2 26 Feb 07 jari 154         IDistanceMenu menu = framework.getDistanceMenu();
2 26 Feb 07 jari 155         data.addParam("distance-absolute", String.valueOf(menu.isAbsoluteDistance()));
2 26 Feb 07 jari 156         int function = menu.getDistanceFunction();
2 26 Feb 07 jari 157         if (function == Algorithm.DEFAULT) {
2 26 Feb 07 jari 158             function = Algorithm.COVARIANCE;
2 26 Feb 07 jari 159         }
2 26 Feb 07 jari 160         data.addParam("distance-function", String.valueOf(function));
2 26 Feb 07 jari 161         data.addParam("pca-mode", String.valueOf(mode));
2 26 Feb 07 jari 162         data.addParam("numNeighbors", String.valueOf(numNeibs));
2 26 Feb 07 jari 163         //script control parameters
2 26 Feb 07 jari 164         
2 26 Feb 07 jari 165         // alg name
2 26 Feb 07 jari 166         data.addParam("name", "PCA");
2 26 Feb 07 jari 167         
2 26 Feb 07 jari 168         // alg type
2 26 Feb 07 jari 169         data.addParam("alg-type", "data-visualization");
2 26 Feb 07 jari 170         
2 26 Feb 07 jari 171         // output class
2 26 Feb 07 jari 172         data.addParam("output-class", "single-output");
2 26 Feb 07 jari 173         
2 26 Feb 07 jari 174         //output nodes
2 26 Feb 07 jari 175         String [] outputNodes = new String[1];
2 26 Feb 07 jari 176         outputNodes[0] = "Data Visualization";
2 26 Feb 07 jari 177         data.addStringArray("output-nodes", outputNodes);
2 26 Feb 07 jari 178         
2 26 Feb 07 jari 179         return data;
2 26 Feb 07 jari 180     }
2 26 Feb 07 jari 181     
2 26 Feb 07 jari 182     public DefaultMutableTreeNode executeScript(IFramework framework, AlgorithmData algData, Experiment experiment) throws AlgorithmException {
2 26 Feb 07 jari 183         Listener listener = new Listener();
2 26 Feb 07 jari 184         try {
2 26 Feb 07 jari 185             
2 26 Feb 07 jari 186             mode = algData.getParams().getInt("pca-mode");
2 26 Feb 07 jari 187             numNeibs = algData.getParams().getInt("numNeighbors");
2 26 Feb 07 jari 188             int function = algData.getParams().getInt("distance-function");
2 26 Feb 07 jari 189             
2 26 Feb 07 jari 190                  AlgorithmData result = null;
2 26 Feb 07 jari 191             DefaultMutableTreeNode node = null;
2 26 Feb 07 jari 192             algData.addMatrix("experiment", experiment.getMatrix());
2 26 Feb 07 jari 193             
2 26 Feb 07 jari 194             algorithm = framework.getAlgorithmFactory().getAlgorithm("PCA");
2 26 Feb 07 jari 195             algorithm.addAlgorithmListener(listener);
2 26 Feb 07 jari 196             
2 26 Feb 07 jari 197             logger = new Logger(framework.getFrame(), "PCA Log Window", listener);
2 26 Feb 07 jari 198             logger.show();
2 26 Feb 07 jari 199             logger.append("Starting SVD calculation\n");
2 26 Feb 07 jari 200             
2 26 Feb 07 jari 201             currFramework = framework;
2 26 Feb 07 jari 202             
2 26 Feb 07 jari 203             long start = System.currentTimeMillis();
2 26 Feb 07 jari 204             switch (mode) {
2 26 Feb 07 jari 205                 case 1: // Spots
2 26 Feb 07 jari 206                     result = algorithm.execute(algData);
2 26 Feb 07 jari 207                     T = result.getMatrix("T");
2 26 Feb 07 jari 208                     V = result.getMatrix("V");
2 26 Feb 07 jari 209                     S = result.getMatrix("S");
2 26 Feb 07 jari 210                     U = result.getMatrix("U");
2 26 Feb 07 jari 211                     node = new DefaultMutableTreeNode("PCA - genes");
2 26 Feb 07 jari 212                     break;
2 26 Feb 07 jari 213                 case 3: // Experiments
2 26 Feb 07 jari 214                     result = algorithm.execute(algData);
2 26 Feb 07 jari 215                     T = result.getMatrix("T");
2 26 Feb 07 jari 216                     V = result.getMatrix("V");
2 26 Feb 07 jari 217                     S = result.getMatrix("S");
2 26 Feb 07 jari 218                     U = result.getMatrix("U");
2 26 Feb 07 jari 219                     node = new DefaultMutableTreeNode("PCA - samples");
2 26 Feb 07 jari 220                     break;
2 26 Feb 07 jari 221                 default:
2 26 Feb 07 jari 222                     break;
2 26 Feb 07 jari 223             }
2 26 Feb 07 jari 224             logger.append("Creating the result viewers");
2 26 Feb 07 jari 225             long time = System.currentTimeMillis() - start;
2 26 Feb 07 jari 226             addResultNodes(framework.getFrame(), node, time, framework.getDistanceMenu().getFunctionName(function), experiment);
2 26 Feb 07 jari 227             return node;
2 26 Feb 07 jari 228         } finally {
2 26 Feb 07 jari 229             if (algorithm != null) {
2 26 Feb 07 jari 230                 algorithm.removeAlgorithmListener(listener);
2 26 Feb 07 jari 231             }
2 26 Feb 07 jari 232             if (logger != null) {
2 26 Feb 07 jari 233                 logger.dispose();
2 26 Feb 07 jari 234             }
2 26 Feb 07 jari 235         }
2 26 Feb 07 jari 236     }
2 26 Feb 07 jari 237     
2 26 Feb 07 jari 238     
2 26 Feb 07 jari 239     
2 26 Feb 07 jari 240     /**
2 26 Feb 07 jari 241      * Adds nodes into a result tree root.
2 26 Feb 07 jari 242      */
2 26 Feb 07 jari 243     private void addResultNodes(Frame frame, DefaultMutableTreeNode node, long time, String function, Experiment experiment) {
2 26 Feb 07 jari 244         Listener listener = new Listener();
2 26 Feb 07 jari 245         
2 26 Feb 07 jari 246         PCADummyViewer pdv = new PCADummyViewer(U, S, mode); // needed to make the menu on the projectionNode serializable
2 26 Feb 07 jari 247         
2 26 Feb 07 jari 248         DefaultMutableTreeNode firstNode = new DefaultMutableTreeNode("Components 1, 2, 3");        
2 26 Feb 07 jari 249         add3DViewNode(frame, firstNode, experiment, 0, 1, 2);        
2 26 Feb 07 jari 250         DefaultMutableTreeNode twoDNode = new DefaultMutableTreeNode("2D Views");
2 26 Feb 07 jari 251         add2DViewNode(twoDNode, experiment, 0, 1, 2); 
2 26 Feb 07 jari 252         firstNode.add(twoDNode);        
2 26 Feb 07 jari 253         //projectionNode.add(firstNode);        
2 26 Feb 07 jari 254         
2 26 Feb 07 jari 255         JPopupMenu projMenu = new JPopupMenu();
2 26 Feb 07 jari 256         JMenuItem menuItem;
2 26 Feb 07 jari 257         menuItem = new JMenuItem("Add new 3-axis projections");
2 26 Feb 07 jari 258         menuItem.setActionCommand("add-new-3d-cmd");
2 26 Feb 07 jari 259         menuItem.addActionListener(listener);
2 26 Feb 07 jari 260         projMenu.add(menuItem);
2 26 Feb 07 jari 261                 
2 26 Feb 07 jari 262         menuItem = new JMenuItem("Add new 2-axis projections");
2 26 Feb 07 jari 263         menuItem.setActionCommand("add-new-2d-cmd");
2 26 Feb 07 jari 264         menuItem.addActionListener(listener);        
2 26 Feb 07 jari 265         projMenu.add(menuItem);   
2 26 Feb 07 jari 266         
2 26 Feb 07 jari 267         //projectionNode = new DefaultMutableTreeNode(new LeafInfo("Projections on PC axes", projMenu));
2 26 Feb 07 jari 268         projectionNode = new DefaultMutableTreeNode(new LeafInfo("Projections on PC axes", pdv, pdv.getJPopupMenu()));
2 26 Feb 07 jari 269         
2 26 Feb 07 jari 270         projectionNode.add(firstNode);
2 26 Feb 07 jari 271         node.add(projectionNode);
2 26 Feb 07 jari 272         //node.add(new DefaultMutableTreeNode(new LeafInfo("Projections on PC Axes")));
2 26 Feb 07 jari 273         addPCPlotsNode(node);
2 26 Feb 07 jari 274         addPCInfoNode(node);
2 26 Feb 07 jari 275         addEigenNode(node);
2 26 Feb 07 jari 276         addGeneralInfoNode(node, time, function);
2 26 Feb 07 jari 277     }
2 26 Feb 07 jari 278     
2 26 Feb 07 jari 279    private void add2DViewNode(DefaultMutableTreeNode node, Experiment experiment) {
2 26 Feb 07 jari 280        boolean geneViewer = false;
2 26 Feb 07 jari 281        
2 26 Feb 07 jari 282        if (mode == 1) 
2 26 Feb 07 jari 283            geneViewer = true;
2 26 Feb 07 jari 284        else if (mode == 3)
2 26 Feb 07 jari 285            geneViewer = false;
2 26 Feb 07 jari 286        
2 26 Feb 07 jari 287        PCA2DViewer pca01 = new PCA2DViewer(experiment, U, geneViewer, 0, 1);
2 26 Feb 07 jari 288        PCA2DViewer pca12 = new PCA2DViewer(experiment, U, geneViewer, 1, 2);
2 26 Feb 07 jari 289        PCA2DViewer pca02 = new PCA2DViewer(experiment, U, geneViewer, 0, 2);
2 26 Feb 07 jari 290        
2 26 Feb 07 jari 291        node.add(new DefaultMutableTreeNode(new LeafInfo("1, 2", pca01, pca01.getJPopupMenu())));
2 26 Feb 07 jari 292        node.add(new DefaultMutableTreeNode(new LeafInfo("2, 3", pca12, pca12.getJPopupMenu())));
2 26 Feb 07 jari 293        node.add(new DefaultMutableTreeNode(new LeafInfo("1, 3", pca02, pca02.getJPopupMenu()))); 
2 26 Feb 07 jari 294    }   
2 26 Feb 07 jari 295    
2 26 Feb 07 jari 296    private void add2DViewNode(DefaultMutableTreeNode node, Experiment experiment, int xAxis, int yAxis, int zAxis) {
2 26 Feb 07 jari 297        boolean geneViewer = false;
2 26 Feb 07 jari 298        
2 26 Feb 07 jari 299        if (mode == 1) 
2 26 Feb 07 jari 300            geneViewer = true;
2 26 Feb 07 jari 301        else if (mode == 3)
2 26 Feb 07 jari 302            geneViewer = false;
2 26 Feb 07 jari 303        
2 26 Feb 07 jari 304        PCA2DViewer pcaxy = new PCA2DViewer(experiment, U, geneViewer, xAxis, yAxis);
2 26 Feb 07 jari 305        PCA2DViewer pcayz = new PCA2DViewer(experiment, U, geneViewer, yAxis, zAxis);
2 26 Feb 07 jari 306        PCA2DViewer pcaxz = new PCA2DViewer(experiment, U, geneViewer, xAxis, zAxis);
2 26 Feb 07 jari 307        
2 26 Feb 07 jari 308        node.add(new DefaultMutableTreeNode(new LeafInfo("" + (xAxis + 1) + ", " + (yAxis + 1), pcaxy, pcaxy.getJPopupMenu())));
2 26 Feb 07 jari 309        node.add(new DefaultMutableTreeNode(new LeafInfo("" + (yAxis + 1) + ", " + (zAxis + 1), pcayz, pcayz.getJPopupMenu())));
2 26 Feb 07 jari 310        node.add(new DefaultMutableTreeNode(new LeafInfo("" + (xAxis + 1) + ", " + (zAxis + 1), pcaxz, pcaxz.getJPopupMenu()))); 
2 26 Feb 07 jari 311    }     
2 26 Feb 07 jari 312     
2 26 Feb 07 jari 313     /**
2 26 Feb 07 jari 314      * Adds node with 3D viewer.
2 26 Feb 07 jari 315      */
2 26 Feb 07 jari 316     private void add3DViewNode(Frame frame, DefaultMutableTreeNode node, Experiment experiment) {
2 26 Feb 07 jari 317         if (U == null || U.getColumnDimension() < 3) {
2 26 Feb 07 jari 318             return;
2 26 Feb 07 jari 319         }
2 26 Feb 07 jari 320         PCA3DViewer pca3DViewer;
2 26 Feb 07 jari 321         if(mode == 1)
2 26 Feb 07 jari 322             pca3DViewer = new PCA3DViewer(frame, mode, U, experiment, true, 0, 1, 2);
2 26 Feb 07 jari 323         else
2 26 Feb 07 jari 324             pca3DViewer = new PCA3DViewer(frame, mode, U, experiment, false, 0, 1, 2);
2 26 Feb 07 jari 325         
2 26 Feb 07 jari 326         node.add(new DefaultMutableTreeNode(new LeafInfo("3D view", pca3DViewer, pca3DViewer.getJPopupMenu())));
2 26 Feb 07 jari 327     }
2 26 Feb 07 jari 328     
2 26 Feb 07 jari 329     private void add3DViewNode(Frame frame, DefaultMutableTreeNode node, Experiment experiment, int xAxis, int yAxis, int zAxis) {
2 26 Feb 07 jari 330         if (U == null || U.getColumnDimension() < 3) {
2 26 Feb 07 jari 331             return;
2 26 Feb 07 jari 332         }
2 26 Feb 07 jari 333         PCA3DViewer pca3DViewer;
2 26 Feb 07 jari 334         if(mode == 1)
2 26 Feb 07 jari 335             pca3DViewer = new PCA3DViewer(frame, mode, U, experiment, true, xAxis, yAxis, zAxis);
2 26 Feb 07 jari 336         else
2 26 Feb 07 jari 337             pca3DViewer = new PCA3DViewer(frame, mode, U, experiment, false, xAxis, yAxis, zAxis);
2 26 Feb 07 jari 338         
2 26 Feb 07 jari 339         node.add(new DefaultMutableTreeNode(new LeafInfo("3D view", pca3DViewer, pca3DViewer.getJPopupMenu())));
2 26 Feb 07 jari 340     }    
2 26 Feb 07 jari 341     
2 26 Feb 07 jari 342     /**
2 26 Feb 07 jari 343      * Adds nodes with plot vector viewers.
2 26 Feb 07 jari 344      */
2 26 Feb 07 jari 345     private void addPCPlotsNode(DefaultMutableTreeNode node) {
2 26 Feb 07 jari 346         if (S == null) {
2 26 Feb 07 jari 347             return;
2 26 Feb 07 jari 348         }
2 26 Feb 07 jari 349         DefaultMutableTreeNode pcNode = new DefaultMutableTreeNode("PC Plots");
2 26 Feb 07 jari 350         PlotVectorViewer plotVectorViewer = new PlotVectorViewer(T);
2 26 Feb 07 jari 351         for (int i=0; i<S.getRowDimension(); i++) {
2 26 Feb 07 jari 352             pcNode.add(new DefaultMutableTreeNode(new LeafInfo("Component "+(i+1), plotVectorViewer, new Integer(i))));
2 26 Feb 07 jari 353         }
2 26 Feb 07 jari 354         node.add(pcNode);
2 26 Feb 07 jari 355     }
2 26 Feb 07 jari 356     
2 26 Feb 07 jari 357     /**
2 26 Feb 07 jari 358      * Adds node with PC information.
2 26 Feb 07 jari 359      */
2 26 Feb 07 jari 360     private void addPCInfoNode(DefaultMutableTreeNode node) {
2 26 Feb 07 jari 361         if (S == null) {
2 26 Feb 07 jari 362             return;
2 26 Feb 07 jari 363         }
2 26 Feb 07 jari 364         DefaultMutableTreeNode infoNode = new DefaultMutableTreeNode("PC Information");
2 26 Feb 07 jari 365         PCInfoViewer pcInfoViewer = new PCInfoViewer(T);
2 26 Feb 07 jari 366         for (int i=0; i<S.getRowDimension(); i++) {
2 26 Feb 07 jari 367             infoNode.add(new DefaultMutableTreeNode(new LeafInfo("Component "+(i+1), pcInfoViewer, new Integer(i))));
2 26 Feb 07 jari 368         }
2 26 Feb 07 jari 369         node.add(infoNode);
2 26 Feb 07 jari 370     }
2 26 Feb 07 jari 371     
2 26 Feb 07 jari 372     /**
2 26 Feb 07 jari 373      * Adds node with eigen values.
2 26 Feb 07 jari 374      */
2 26 Feb 07 jari 375     private void addEigenNode(DefaultMutableTreeNode node) {
2 26 Feb 07 jari 376         DefaultMutableTreeNode vNode = new DefaultMutableTreeNode("Eigenvalues");
2 26 Feb 07 jari 377         vNode.add(new DefaultMutableTreeNode(new LeafInfo("Plot", new PlotViewer(S))));
2 26 Feb 07 jari 378         vNode.add(new DefaultMutableTreeNode(new LeafInfo("Values", new ValuesViewer(S))));
2 26 Feb 07 jari 379         node.add(vNode);
2 26 Feb 07 jari 380     }
2 26 Feb 07 jari 381     
2 26 Feb 07 jari 382     /**
2 26 Feb 07 jari 383      * Adds node with a general information.
2 26 Feb 07 jari 384      */
2 26 Feb 07 jari 385     private void addGeneralInfoNode(DefaultMutableTreeNode node, long time, String function) {
2 26 Feb 07 jari 386         DefaultMutableTreeNode gNode = new DefaultMutableTreeNode("General Information");
2 26 Feb 07 jari 387         if (S != null) {
2 26 Feb 07 jari 388             gNode.add(new DefaultMutableTreeNode("Components: "+S.getColumnDimension()));
2 26 Feb 07 jari 389         }
2 26 Feb 07 jari 390         gNode.add(new DefaultMutableTreeNode("Time: "+String.valueOf(time)+" ms"));
2 26 Feb 07 jari 391         gNode.add(new DefaultMutableTreeNode(function));
2 26 Feb 07 jari 392         gNode.add(new DefaultMutableTreeNode("Number of neighbors for KNN imputation: " + numNeibs));
2 26 Feb 07 jari 393         node.add(gNode);
2 26 Feb 07 jari 394     }
2 26 Feb 07 jari 395     
2 26 Feb 07 jari 396     private void addNew3DNode() {
2 26 Feb 07 jari 397         if (S == null) {
2 26 Feb 07 jari 398             return;
2 26 Feb 07 jari 399         }
2 26 Feb 07 jari 400         PCAAdditional3DAxesDialog pd = new PCAAdditional3DAxesDialog((JFrame)currFramework.getFrame(), true, S.getRowDimension());
2 26 Feb 07 jari 401         pd.setVisible(true);
2 26 Feb 07 jari 402         if (!pd.isOkPressed()) {
2 26 Feb 07 jari 403             return;
2 26 Feb 07 jari 404         } else {
2 26 Feb 07 jari 405             int selectedX = pd.getXAxis();
2 26 Feb 07 jari 406             int selectedY = pd.getYAxis();
2 26 Feb 07 jari 407             int selectedZ = pd.getZAxis();
2 26 Feb 07 jari 408             
2 26 Feb 07 jari 409             DefaultMutableTreeNode newNode = new DefaultMutableTreeNode("Components " + (selectedX + 1) + ", " + (selectedY + 1) + ", " + (selectedZ + 1));
2 26 Feb 07 jari 410             add3DViewNode(currFramework.getFrame(), newNode, currFramework.getData().getExperiment(), selectedX, selectedY, selectedZ);
2 26 Feb 07 jari 411             DefaultMutableTreeNode twoDNode = new DefaultMutableTreeNode("2D Views");
2 26 Feb 07 jari 412             add2DViewNode(twoDNode, currFramework.getData().getExperiment(), selectedX, selectedY, selectedZ);
2 26 Feb 07 jari 413             newNode.add(twoDNode);   
2 26 Feb 07 jari 414             currFramework.addNode(projectionNode, newNode);
2 26 Feb 07 jari 415         }
2 26 Feb 07 jari 416     }
2 26 Feb 07 jari 417     
2 26 Feb 07 jari 418     private void addNew2DNode() {
2 26 Feb 07 jari 419         if (S == null) {
2 26 Feb 07 jari 420             return;
2 26 Feb 07 jari 421         }
2 26 Feb 07 jari 422         PCAAdditional3DAxesDialog pd = new PCAAdditional3DAxesDialog((JFrame)currFramework.getFrame(), true, S.getRowDimension());
2 26 Feb 07 jari 423         pd.setZBoxInvisible(true);
2 26 Feb 07 jari 424         pd.setVisible(true);  
2 26 Feb 07 jari 425         if (!pd.isOkPressed()) {
2 26 Feb 07 jari 426             return;
2 26 Feb 07 jari 427         } else {
2 26 Feb 07 jari 428             int selectedX = pd.getXAxis();
2 26 Feb 07 jari 429             int selectedY = pd.getYAxis();
2 26 Feb 07 jari 430             //DefaultMutableTreeNode newNode = new DefaultMutableTreeNode("Components " + (selectedX + 1) + ", " + (selectedY + 1));
2 26 Feb 07 jari 431             boolean geneViewer = false;            
2 26 Feb 07 jari 432             if (mode == 1)
2 26 Feb 07 jari 433                 geneViewer = true;
2 26 Feb 07 jari 434             else if (mode == 3)
2 26 Feb 07 jari 435                 geneViewer = false;
2 26 Feb 07 jari 436             
2 26 Feb 07 jari 437             PCA2DViewer pcaxy = new PCA2DViewer(currFramework.getData().getExperiment(), U, geneViewer, selectedX, selectedY); 
2 26 Feb 07 jari 438             currFramework.addNode(projectionNode, new DefaultMutableTreeNode(new LeafInfo("Components " + (selectedX + 1) + ", " + (selectedY + 1), pcaxy, pcaxy.getJPopupMenu())));
2 26 Feb 07 jari 439         }
2 26 Feb 07 jari 440     }
2 26 Feb 07 jari 441     
2 26 Feb 07 jari 442     /**
2 26 Feb 07 jari 443      * The class to listen to dialog and algorithm events.
2 26 Feb 07 jari 444      */
2 26 Feb 07 jari 445     private class Listener extends DialogListener implements AlgorithmListener {
2 26 Feb 07 jari 446         
2 26 Feb 07 jari 447         public void valueChanged(AlgorithmEvent event) {
2 26 Feb 07 jari 448             logger.append(event.getDescription());
2 26 Feb 07 jari 449         }
2 26 Feb 07 jari 450         
2 26 Feb 07 jari 451         public void actionPerformed(ActionEvent e) {
2 26 Feb 07 jari 452             String command = e.getActionCommand();
2 26 Feb 07 jari 453             if (command.equals("cancel-command")) {
2 26 Feb 07 jari 454                 algorithm.abort();
2 26 Feb 07 jari 455                 logger.dispose();
2 26 Feb 07 jari 456             } else if (command.equals("add-new-3d-cmd")) {
2 26 Feb 07 jari 457                 addNew3DNode();
2 26 Feb 07 jari 458             } else if (command.equals("add-new-2d-cmd")) {
2 26 Feb 07 jari 459                 addNew2DNode();
2 26 Feb 07 jari 460             }
2 26 Feb 07 jari 461         }
2 26 Feb 07 jari 462         
2 26 Feb 07 jari 463         public void windowClosing(WindowEvent e) {
2 26 Feb 07 jari 464             algorithm.abort();
2 26 Feb 07 jari 465             logger.dispose();
2 26 Feb 07 jari 466         }
2 26 Feb 07 jari 467     }
2 26 Feb 07 jari 468 }