mev-4.0.01/source/org/tigr/microarray/mev/cluster/gui/impl/gdm/GDMGUI.java

Code
Comments
Other
Rev Date Author Line
2 26 Feb 07 jari 1 /*
2 26 Feb 07 jari 2 Copyright @ 1999-2003, 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: GDMGUI.java,v $
2 26 Feb 07 jari 7  * $Revision: 1.5 $
2 26 Feb 07 jari 8  * $Date: 2005/03/10 20:22:00 $
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.gdm;
2 26 Feb 07 jari 13
2 26 Feb 07 jari 14 import java.awt.event.ActionEvent;
2 26 Feb 07 jari 15 import java.awt.event.WindowEvent;
2 26 Feb 07 jari 16
2 26 Feb 07 jari 17 import javax.swing.JOptionPane;
2 26 Feb 07 jari 18 import javax.swing.tree.DefaultMutableTreeNode;
2 26 Feb 07 jari 19
2 26 Feb 07 jari 20 import org.tigr.microarray.mev.cluster.algorithm.Algorithm;
2 26 Feb 07 jari 21 import org.tigr.microarray.mev.cluster.algorithm.AlgorithmData;
2 26 Feb 07 jari 22 import org.tigr.microarray.mev.cluster.algorithm.AlgorithmEvent;
2 26 Feb 07 jari 23 import org.tigr.microarray.mev.cluster.algorithm.AlgorithmException;
2 26 Feb 07 jari 24 import org.tigr.microarray.mev.cluster.algorithm.AlgorithmListener;
2 26 Feb 07 jari 25 import org.tigr.microarray.mev.cluster.gui.Experiment;
2 26 Feb 07 jari 26 import org.tigr.microarray.mev.cluster.gui.IClusterGUI;
2 26 Feb 07 jari 27 import org.tigr.microarray.mev.cluster.gui.IDistanceMenu;
2 26 Feb 07 jari 28 import org.tigr.microarray.mev.cluster.gui.IFramework;
2 26 Feb 07 jari 29 import org.tigr.microarray.mev.cluster.gui.LeafInfo;
2 26 Feb 07 jari 30 import org.tigr.microarray.mev.cluster.gui.impl.dialogs.DialogListener;
2 26 Feb 07 jari 31 import org.tigr.microarray.mev.cluster.gui.impl.dialogs.Progress;
2 26 Feb 07 jari 32 import org.tigr.microarray.mev.script.scriptGUI.IScriptGUI;
2 26 Feb 07 jari 33 import org.tigr.util.FloatMatrix;
2 26 Feb 07 jari 34
2 26 Feb 07 jari 35 public class GDMGUI implements IClusterGUI, IScriptGUI {
2 26 Feb 07 jari 36     
2 26 Feb 07 jari 37     private Experiment experiment;
2 26 Feb 07 jari 38     private Algorithm algorithm;
2 26 Feb 07 jari 39     private Progress progress;
2 26 Feb 07 jari 40     private IFramework framework;
2 26 Feb 07 jari 41     private FloatMatrix geneDistanceMatrix;
2 26 Feb 07 jari 42     private float minDist;
2 26 Feb 07 jari 43     private float maxDist;
2 26 Feb 07 jari 44     private int num_genes;
2 26 Feb 07 jari 45     private int num_experiments;
2 26 Feb 07 jari 46     private boolean useGenes;
2 26 Feb 07 jari 47     private int displayInterval;
2 26 Feb 07 jari 48     
2 26 Feb 07 jari 49     public GDMGUI() {
2 26 Feb 07 jari 50     }
2 26 Feb 07 jari 51     
2 26 Feb 07 jari 52     /**
2 26 Feb 07 jari 53      * Initialize the algorithm's parameters and execute it.
2 26 Feb 07 jari 54      */
2 26 Feb 07 jari 55     public DefaultMutableTreeNode execute(IFramework framework) throws AlgorithmException {
2 26 Feb 07 jari 56         this.framework = framework;
2 26 Feb 07 jari 57         this.experiment = framework.getData().getExperiment();
2 26 Feb 07 jari 58         GeneralInfo info = new GeneralInfo();
2 26 Feb 07 jari 59         Listener listener = new Listener();
2 26 Feb 07 jari 60         
2 26 Feb 07 jari 61         GDMInitDialog dialog = new GDMInitDialog(framework.getFrame());
2 26 Feb 07 jari 62         if (dialog.showModal() != JOptionPane.OK_OPTION) {
2 26 Feb 07 jari 63             return null;
2 26 Feb 07 jari 64         }
2 26 Feb 07 jari 65         
2 26 Feb 07 jari 66         useGenes = dialog.isUseGenes();
2 26 Feb 07 jari 67         if(useGenes)
2 26 Feb 07 jari 68             displayInterval = dialog.getDisplayInterval();
2 26 Feb 07 jari 69         else
2 26 Feb 07 jari 70             displayInterval = 1;
2 26 Feb 07 jari 71         
2 26 Feb 07 jari 72         try {
2 26 Feb 07 jari 73             algorithm = framework.getAlgorithmFactory().getAlgorithm("GDM");
2 26 Feb 07 jari 74             algorithm.addAlgorithmListener(listener);
2 26 Feb 07 jari 75             
2 26 Feb 07 jari 76             this.progress = new Progress(framework.getFrame(), "GDM Training", listener);
2 26 Feb 07 jari 77             this.progress.show();
2 26 Feb 07 jari 78             
2 26 Feb 07 jari 79             AlgorithmData data = new AlgorithmData();
2 26 Feb 07 jari 80             data.addParam("distance-factor", String.valueOf(1f));
2 26 Feb 07 jari 81             if (useGenes) {
2 26 Feb 07 jari 82                 data.addMatrix("experiment", framework.getData().getExperiment().getMatrix());
2 26 Feb 07 jari 83                 //data.addParam("distance-factor", String.valueOf(1f));
2 26 Feb 07 jari 84             } else {
2 26 Feb 07 jari 85                 data.addMatrix("experiment", framework.getData().getExperiment().getMatrix().transpose());
2 26 Feb 07 jari 86                // data.addParam("distance-factor", String.valueOf(false));
2 26 Feb 07 jari 87             }
2 26 Feb 07 jari 88             
2 26 Feb 07 jari 89             IDistanceMenu menu = framework.getDistanceMenu();
2 26 Feb 07 jari 90             
2 26 Feb 07 jari 91             data.addParam("distance-absolute", String.valueOf(menu.isAbsoluteDistance()));
2 26 Feb 07 jari 92             int function = menu.getDistanceFunction();
2 26 Feb 07 jari 93             if (function == Algorithm.DEFAULT) {
2 26 Feb 07 jari 94                 function = Algorithm.EUCLIDEAN;
2 26 Feb 07 jari 95             }
2 26 Feb 07 jari 96             
2 26 Feb 07 jari 97             data.addParam("distance-function", String.valueOf(function));
2 26 Feb 07 jari 98             
2 26 Feb 07 jari 99             long startTime = System.currentTimeMillis();
2 26 Feb 07 jari 100             AlgorithmData result = algorithm.execute(data);
2 26 Feb 07 jari 101             info.time = System.currentTimeMillis()-startTime;
2 26 Feb 07 jari 102             info.function = menu.getFunctionName(function);
2 26 Feb 07 jari 103             
2 26 Feb 07 jari 104             if (useGenes) {
2 26 Feb 07 jari 105                 int maxGeneNameLength = getMaxGeneNameLength();
2 26 Feb 07 jari 106                 result.addParam("maxGeneNameLength", String.valueOf(maxGeneNameLength));
2 26 Feb 07 jari 107             } else {
2 26 Feb 07 jari 108                 int maxExpNameLength = getMaxExpNameLength();
2 26 Feb 07 jari 109                 result.addParam("maxExpNameLength", String.valueOf(maxExpNameLength));
2 26 Feb 07 jari 110             }
2 26 Feb 07 jari 111             
2 26 Feb 07 jari 112             return createResultTree(result, info);
2 26 Feb 07 jari 113         } finally {
2 26 Feb 07 jari 114             if (algorithm != null) {
2 26 Feb 07 jari 115                 algorithm.removeAlgorithmListener(listener);
2 26 Feb 07 jari 116             }
2 26 Feb 07 jari 117             if (progress != null) {
2 26 Feb 07 jari 118                 progress.dispose();
2 26 Feb 07 jari 119             }
2 26 Feb 07 jari 120         }
2 26 Feb 07 jari 121     }
2 26 Feb 07 jari 122     
2 26 Feb 07 jari 123     
2 26 Feb 07 jari 124     public AlgorithmData getScriptParameters(IFramework framework) {
2 26 Feb 07 jari 125         this.framework = framework;
2 26 Feb 07 jari 126         this.experiment = framework.getData().getExperiment();
2 26 Feb 07 jari 127         
2 26 Feb 07 jari 128         
2 26 Feb 07 jari 129         GDMInitDialog dialog = new GDMInitDialog(framework.getFrame());
2 26 Feb 07 jari 130         if (dialog.showModal() != JOptionPane.OK_OPTION) {
2 26 Feb 07 jari 131             return null;
2 26 Feb 07 jari 132         }
2 26 Feb 07 jari 133         
2 26 Feb 07 jari 134         useGenes = dialog.isUseGenes();
2 26 Feb 07 jari 135         if(useGenes)
2 26 Feb 07 jari 136             displayInterval = dialog.getDisplayInterval();
2 26 Feb 07 jari 137         else
2 26 Feb 07 jari 138             displayInterval = 1;
2 26 Feb 07 jari 139         
2 26 Feb 07 jari 140         
2 26 Feb 07 jari 141             AlgorithmData data = new AlgorithmData();
2 26 Feb 07 jari 142             data.addParam("gdm-genes", String.valueOf(useGenes));
2 26 Feb 07 jari 143             data.addParam("display-interval", String.valueOf(displayInterval));
2 26 Feb 07 jari 144             data.addParam("distance-factor", String.valueOf(1f));
2 26 Feb 07 jari 145
2 26 Feb 07 jari 146             IDistanceMenu menu = framework.getDistanceMenu();
2 26 Feb 07 jari 147             
2 26 Feb 07 jari 148             data.addParam("distance-absolute", String.valueOf(menu.isAbsoluteDistance()));
2 26 Feb 07 jari 149             int function = menu.getDistanceFunction();
2 26 Feb 07 jari 150             if (function == Algorithm.DEFAULT)     {
2 26 Feb 07 jari 151                 function = Algorithm.EUCLIDEAN;
2 26 Feb 07 jari 152             }
2 26 Feb 07 jari 153             
2 26 Feb 07 jari 154             data.addParam("distance-function", String.valueOf(function));
2 26 Feb 07 jari 155             
2 26 Feb 07 jari 156             //script control parameters
2 26 Feb 07 jari 157             
2 26 Feb 07 jari 158             
2 26 Feb 07 jari 159             // alg name
2 26 Feb 07 jari 160             data.addParam("name", "GDM");
2 26 Feb 07 jari 161             
2 26 Feb 07 jari 162             // alg type
2 26 Feb 07 jari 163             data.addParam("alg-type", "data-visualization");
2 26 Feb 07 jari 164             
2 26 Feb 07 jari 165             // output class
2 26 Feb 07 jari 166             data.addParam("output-class", "single-output");
2 26 Feb 07 jari 167             
2 26 Feb 07 jari 168             //output nodes
2 26 Feb 07 jari 169             String [] outputNodes = new String[1];
2 26 Feb 07 jari 170             outputNodes[0] = "Data Visualization";
2 26 Feb 07 jari 171             data.addStringArray("output-nodes", outputNodes);
2 26 Feb 07 jari 172             
2 26 Feb 07 jari 173             return data;
2 26 Feb 07 jari 174         }
2 26 Feb 07 jari 175         
2 26 Feb 07 jari 176         public DefaultMutableTreeNode executeScript(IFramework framework, AlgorithmData algData, Experiment experiment) throws AlgorithmException {
2 26 Feb 07 jari 177             this.framework = framework;
2 26 Feb 07 jari 178             Listener listener = new Listener();
2 26 Feb 07 jari 179             this.experiment = experiment;
2 26 Feb 07 jari 180             this.useGenes = algData.getParams().getBoolean("gdm-genes"); 
2 26 Feb 07 jari 181             if(useGenes)
2 26 Feb 07 jari 182                 algData.addMatrix("experiment", experiment.getMatrix());
2 26 Feb 07 jari 183             else
2 26 Feb 07 jari 184                 algData.addMatrix("experiment", experiment.getMatrix().transpose());
2 26 Feb 07 jari 185                 
2 26 Feb 07 jari 186             this.displayInterval = algData.getParams().getInt("display-interval");
2 26 Feb 07 jari 187             int function = algData.getParams().getInt("distance-function");   
2 26 Feb 07 jari 188                 
2 26 Feb 07 jari 189             try {
2 26 Feb 07 jari 190                 algorithm = framework.getAlgorithmFactory().getAlgorithm("GDM");
2 26 Feb 07 jari 191                 algorithm.addAlgorithmListener(listener);
2 26 Feb 07 jari 192                 
2 26 Feb 07 jari 193                 this.progress = new Progress(framework.getFrame(), "GDM Training", listener);
2 26 Feb 07 jari 194                 this.progress.show();
2 26 Feb 07 jari 195                 
2 26 Feb 07 jari 196                 
2 26 Feb 07 jari 197                 long startTime = System.currentTimeMillis();
2 26 Feb 07 jari 198                 AlgorithmData result = algorithm.execute(algData);
2 26 Feb 07 jari 199                 
2 26 Feb 07 jari 200                 GeneralInfo info = new GeneralInfo();                           
2 26 Feb 07 jari 201                 info.time = System.currentTimeMillis()-startTime;          
2 26 Feb 07 jari 202                 info.function = framework.getDistanceMenu().getFunctionName(function);
2 26 Feb 07 jari 203            
2 26 Feb 07 jari 204                 if (useGenes) {
2 26 Feb 07 jari 205                     int maxGeneNameLength = getMaxGeneNameLength();
2 26 Feb 07 jari 206                     algData.addMatrix("experiment", experiment.getMatrix());
2 26 Feb 07 jari 207                     result.addParam("maxGeneNameLength", String.valueOf(maxGeneNameLength));
2 26 Feb 07 jari 208                 } else {
2 26 Feb 07 jari 209                     int maxExpNameLength = getMaxExpNameLength();
2 26 Feb 07 jari 210                     algData.addMatrix("experiment", experiment.getMatrix().transpose());
2 26 Feb 07 jari 211                     result.addParam("maxExpNameLength", String.valueOf(maxExpNameLength));
2 26 Feb 07 jari 212                 }
2 26 Feb 07 jari 213                 
2 26 Feb 07 jari 214                 return createResultTree(result, info);
2 26 Feb 07 jari 215                 
2 26 Feb 07 jari 216             } finally {
2 26 Feb 07 jari 217                 if (algorithm != null) {
2 26 Feb 07 jari 218                     algorithm.removeAlgorithmListener(listener);
2 26 Feb 07 jari 219                 }
2 26 Feb 07 jari 220                 if (progress != null) {
2 26 Feb 07 jari 221                     progress.dispose();
2 26 Feb 07 jari 222                 }
2 26 Feb 07 jari 223             }
2 26 Feb 07 jari 224             
2 26 Feb 07 jari 225         }
2 26 Feb 07 jari 226         
2 26 Feb 07 jari 227         
2 26 Feb 07 jari 228         private int getMaxGeneNameLength() {
2 26 Feb 07 jari 229             int i, num_genes, max = 0;
2 26 Feb 07 jari 230             String geneName;
2 26 Feb 07 jari 231             
2 26 Feb 07 jari 232             num_genes = framework.getData().getExperiment().getNumberOfGenes();
2 26 Feb 07 jari 233             
2 26 Feb 07 jari 234             for (i=0; i<num_genes; i++) {
2 26 Feb 07 jari 235                 geneName = framework.getData().getGeneName(i);
2 26 Feb 07 jari 236                 max = Math.max(max, geneName.length());
2 26 Feb 07 jari 237             }
2 26 Feb 07 jari 238             return max;
2 26 Feb 07 jari 239         }
2 26 Feb 07 jari 240         
2 26 Feb 07 jari 241         private int getMaxExpNameLength() {
2 26 Feb 07 jari 242             int i, num_experiments, max = 0;
2 26 Feb 07 jari 243             String expName;
2 26 Feb 07 jari 244             
2 26 Feb 07 jari 245             num_experiments = framework.getData().getExperiment().getNumberOfSamples();
2 26 Feb 07 jari 246             
2 26 Feb 07 jari 247             for (i=0; i<num_experiments; i++) {
2 26 Feb 07 jari 248                 expName = framework.getData().getSampleName(i);
2 26 Feb 07 jari 249                 max = Math.max(max, expName.length());
2 26 Feb 07 jari 250             }
2 26 Feb 07 jari 251             return max;
2 26 Feb 07 jari 252         }
2 26 Feb 07 jari 253         
2 26 Feb 07 jari 254         /**
2 26 Feb 07 jari 255          * Creates the result tree.
2 26 Feb 07 jari 256          */
2 26 Feb 07 jari 257         private DefaultMutableTreeNode createResultTree(AlgorithmData data, GeneralInfo info) {
2 26 Feb 07 jari 258             
2 26 Feb 07 jari 259             DefaultMutableTreeNode root;
2 26 Feb 07 jari 260             
2 26 Feb 07 jari 261             if(useGenes) {
2 26 Feb 07 jari 262                 root = new DefaultMutableTreeNode("GDM - genes");
2 26 Feb 07 jari 263                 root.add(new DefaultMutableTreeNode(new LeafInfo("Matrix View", new GDMGeneViewer(this.framework, data, info.function, displayInterval, null, 0))));
2 26 Feb 07 jari 264                 root.add(new DefaultMutableTreeNode("Time: "+String.valueOf(info.time)+" ms"));
2 26 Feb 07 jari 265                 root.add(new DefaultMutableTreeNode(info.function));
2 26 Feb 07 jari 266             }
2 26 Feb 07 jari 267             else {
2 26 Feb 07 jari 268                 root = new DefaultMutableTreeNode("GDM - samples");
2 26 Feb 07 jari 269                 root.add(new DefaultMutableTreeNode(new LeafInfo("Matrix View", new GDMExpViewer(this.framework, data, info.function, displayInterval, null, 0))));
2 26 Feb 07 jari 270                 root.add(new DefaultMutableTreeNode("Time: "+String.valueOf(info.time)+" ms"));
2 26 Feb 07 jari 271                 root.add(new DefaultMutableTreeNode(info.function));
2 26 Feb 07 jari 272             }
2 26 Feb 07 jari 273             
2 26 Feb 07 jari 274             return root;
2 26 Feb 07 jari 275         }
2 26 Feb 07 jari 276         
2 26 Feb 07 jari 277         
2 26 Feb 07 jari 278         
2 26 Feb 07 jari 279         /**
2 26 Feb 07 jari 280          * The class to listen to a dialog and algorithm events.
2 26 Feb 07 jari 281          */
2 26 Feb 07 jari 282         private class Listener extends DialogListener implements AlgorithmListener {
2 26 Feb 07 jari 283             
2 26 Feb 07 jari 284             public void valueChanged(AlgorithmEvent event) {
2 26 Feb 07 jari 285                 switch (event.getId()) {
2 26 Feb 07 jari 286                     case AlgorithmEvent.SET_UNITS:
2 26 Feb 07 jari 287                         progress.setUnits(event.getIntValue());
2 26 Feb 07 jari 288                         progress.setDescription(event.getDescription());
2 26 Feb 07 jari 289                         break;
2 26 Feb 07 jari 290                     case AlgorithmEvent.PROGRESS_VALUE:
2 26 Feb 07 jari 291                         progress.setValue(event.getIntValue());
2 26 Feb 07 jari 292                         progress.setDescription(event.getDescription());
2 26 Feb 07 jari 293                         break;
2 26 Feb 07 jari 294                 }
2 26 Feb 07 jari 295             }
2 26 Feb 07 jari 296             
2 26 Feb 07 jari 297             public void actionPerformed(ActionEvent e) {
2 26 Feb 07 jari 298                 String command = e.getActionCommand();
2 26 Feb 07 jari 299                 if (command.equals("cancel-command")) {
2 26 Feb 07 jari 300                     algorithm.abort();
2 26 Feb 07 jari 301                     progress.dispose();
2 26 Feb 07 jari 302                 }
2 26 Feb 07 jari 303             }
2 26 Feb 07 jari 304             
2 26 Feb 07 jari 305             public void windowClosing(WindowEvent e) {
2 26 Feb 07 jari 306                 algorithm.abort();
2 26 Feb 07 jari 307                 progress.dispose();
2 26 Feb 07 jari 308             }
2 26 Feb 07 jari 309         }
2 26 Feb 07 jari 310         
2 26 Feb 07 jari 311         /**
2 26 Feb 07 jari 312          * The general info structure.
2 26 Feb 07 jari 313          */
2 26 Feb 07 jari 314         private class GeneralInfo {
2 26 Feb 07 jari 315             public long time;
2 26 Feb 07 jari 316             public String function;
2 26 Feb 07 jari 317             
2 26 Feb 07 jari 318         }
2 26 Feb 07 jari 319     }