mev-4.0.01/source/org/tigr/microarray/mev/cluster/gui/impl/st/STGUI.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: STGUI.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.st;
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 import java.util.Vector;
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.tree.DefaultMutableTreeNode;
2 26 Feb 07 jari 20
2 26 Feb 07 jari 21 import org.tigr.microarray.mev.cluster.algorithm.Algorithm;
2 26 Feb 07 jari 22 import org.tigr.microarray.mev.cluster.algorithm.AlgorithmData;
2 26 Feb 07 jari 23 import org.tigr.microarray.mev.cluster.algorithm.AlgorithmEvent;
2 26 Feb 07 jari 24 import org.tigr.microarray.mev.cluster.algorithm.AlgorithmException;
2 26 Feb 07 jari 25 import org.tigr.microarray.mev.cluster.algorithm.AlgorithmFactory;
2 26 Feb 07 jari 26 import org.tigr.microarray.mev.cluster.algorithm.AlgorithmListener;
2 26 Feb 07 jari 27 import org.tigr.microarray.mev.cluster.algorithm.AlgorithmParameters;
2 26 Feb 07 jari 28 import org.tigr.microarray.mev.cluster.gui.Experiment;
2 26 Feb 07 jari 29 import org.tigr.microarray.mev.cluster.gui.IClusterGUI;
2 26 Feb 07 jari 30 import org.tigr.microarray.mev.cluster.gui.IDistanceMenu;
2 26 Feb 07 jari 31 import org.tigr.microarray.mev.cluster.gui.IFramework;
2 26 Feb 07 jari 32 import org.tigr.microarray.mev.cluster.gui.IViewer;
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.Progress;
2 26 Feb 07 jari 36 import org.tigr.microarray.mev.cluster.gui.impl.hcl.HCLTreeData;
2 26 Feb 07 jari 37 import org.tigr.microarray.mev.script.scriptGUI.IScriptGUI;
2 26 Feb 07 jari 38 import org.tigr.util.FloatMatrix;
2 26 Feb 07 jari 39
2 26 Feb 07 jari 40 public class STGUI implements IClusterGUI, IScriptGUI {
2 26 Feb 07 jari 41     private Algorithm algorithm;
2 26 Feb 07 jari 42     private Progress progress;
2 26 Feb 07 jari 43     boolean drawGeneTree;
2 26 Feb 07 jari 44     boolean drawExptTree;
2 26 Feb 07 jari 45     
2 26 Feb 07 jari 46     /**
2 26 Feb 07 jari 47      * Inits the algorithm parameters, runs calculation and returns
2 26 Feb 07 jari 48      * a result to be inserted into the framework analysis node.
2 26 Feb 07 jari 49      */
2 26 Feb 07 jari 50     public DefaultMutableTreeNode execute(IFramework framework) throws AlgorithmException {
2 26 Feb 07 jari 51
2 26 Feb 07 jari 52         IDistanceMenu menu = framework.getDistanceMenu();
2 26 Feb 07 jari 53         int function = menu.getDistanceFunction();
2 26 Feb 07 jari 54         if (function == Algorithm.DEFAULT) {
2 26 Feb 07 jari 55             function = Algorithm.EUCLIDEAN;
2 26 Feb 07 jari 56         }
2 26 Feb 07 jari 57         
2 26 Feb 07 jari 58         ResampleTreeInitDialog dialog = new ResampleTreeInitDialog((JFrame) framework.getFrame(), true, menu.getFunctionName(function), menu.isAbsoluteDistance());
2 26 Feb 07 jari 59         dialog.setVisible(true);
2 26 Feb 07 jari 60         
2 26 Feb 07 jari 61         if (dialog.isCancelled()) {
2 26 Feb 07 jari 62             return null;
2 26 Feb 07 jari 63         }
2 26 Feb 07 jari 64         
2 26 Feb 07 jari 65         int method = dialog.getMethod();
2 26 Feb 07 jari 66         drawGeneTree = dialog.drawGeneTreeCheckBox.isSelected();
2 26 Feb 07 jari 67         drawExptTree = dialog.drawExptTreeCheckBox.isSelected();
2 26 Feb 07 jari 68         int geneTreeAnalysisOption = dialog.getGeneTreeAnalysisOption();
2 26 Feb 07 jari 69         int exptTreeAnalysisOption = dialog.getExptTreeAnalysisOption();
2 26 Feb 07 jari 70         int geneTreeIterations = Integer.parseInt(dialog.geneTreeIterationsTextField.getText());
2 26 Feb 07 jari 71         int exptTreeIterations = Integer.parseInt(dialog.exptTreeIterationsTextField.getText());
2 26 Feb 07 jari 72         Listener listener = new Listener();
2 26 Feb 07 jari 73         
2 26 Feb 07 jari 74         try {
2 26 Feb 07 jari 75             Experiment experiment = framework.getData().getExperiment();
2 26 Feb 07 jari 76             AlgorithmFactory factory = framework.getAlgorithmFactory();
2 26 Feb 07 jari 77             
2 26 Feb 07 jari 78             this.algorithm = factory.getAlgorithm("ST");
2 26 Feb 07 jari 79             algorithm.addAlgorithmListener(listener);
2 26 Feb 07 jari 80             AlgorithmData data = new AlgorithmData();
2 26 Feb 07 jari 81             data.addMatrix("experiment", experiment.getMatrix());
2 26 Feb 07 jari 82
2 26 Feb 07 jari 83             function = dialog.getDistanceMetric();
2 26 Feb 07 jari 84             
2 26 Feb 07 jari 85             data.addParam("distance-function", String.valueOf(function));
2 26 Feb 07 jari 86             data.addParam("distance-factor", String.valueOf(1.0f));
2 26 Feb 07 jari 87             data.addParam("distance-absolute", String.valueOf(dialog.isAbsoluteDistance()));
2 26 Feb 07 jari 88             
2 26 Feb 07 jari 89             data.addParam("method-linkage", String.valueOf(method));
2 26 Feb 07 jari 90             data.addParam("geneTreeIterations", String.valueOf(geneTreeIterations));
2 26 Feb 07 jari 91             data.addParam("exptTreeIterations", String.valueOf(exptTreeIterations));
2 26 Feb 07 jari 92             data.addParam("geneTreeAnalysisOption", String.valueOf(geneTreeAnalysisOption));
2 26 Feb 07 jari 93             data.addParam("exptTreeAnalysisOption", String.valueOf(exptTreeAnalysisOption));
2 26 Feb 07 jari 94             
2 26 Feb 07 jari 95             this.progress = new Progress(framework.getFrame(), "", listener);
2 26 Feb 07 jari 96             this.progress.show();
2 26 Feb 07 jari 97             
2 26 Feb 07 jari 98             long start = System.currentTimeMillis();
2 26 Feb 07 jari 99             AlgorithmData samples_result = null;
2 26 Feb 07 jari 100             if (drawExptTree) {
2 26 Feb 07 jari 101                 progress.setTitle("Resampling by Experiments");
2 26 Feb 07 jari 102                 data.addParam("drawGeneTree", String.valueOf(false));
2 26 Feb 07 jari 103                 data.addParam("drawExptTree", String.valueOf(true));
2 26 Feb 07 jari 104                 samples_result = algorithm.execute(data);
2 26 Feb 07 jari 105                 validate(samples_result);
2 26 Feb 07 jari 106             }
2 26 Feb 07 jari 107             AlgorithmData genes_result = null;
2 26 Feb 07 jari 108             if (drawGeneTree) {
2 26 Feb 07 jari 109                 progress.setTitle("Resampling by Genes");
2 26 Feb 07 jari 110                 data.addParam("drawGeneTree", String.valueOf(true));
2 26 Feb 07 jari 111                 data.addParam("drawExptTree", String.valueOf(false));
2 26 Feb 07 jari 112                 genes_result = algorithm.execute(data);
2 26 Feb 07 jari 113                 validate(genes_result);
2 26 Feb 07 jari 114             }
2 26 Feb 07 jari 115             long time = System.currentTimeMillis() - start;
2 26 Feb 07 jari 116             
2 26 Feb 07 jari 117             GeneralInfo info = new GeneralInfo();
2 26 Feb 07 jari 118             info.time = time;
2 26 Feb 07 jari 119             info.method = method;
2 26 Feb 07 jari 120             info.function = menu.getFunctionName(function);
2 26 Feb 07 jari 121             if (drawGeneTree) {
2 26 Feb 07 jari 122                 info.drawGeneTree = true;
2 26 Feb 07 jari 123                 info.geneTreeIterations = geneTreeIterations;
2 26 Feb 07 jari 124                 info.geneTreeAnalysisOption = geneTreeAnalysisOption;
2 26 Feb 07 jari 125             }
2 26 Feb 07 jari 126             if (drawExptTree) {
2 26 Feb 07 jari 127                 info.drawExptTree = true;
2 26 Feb 07 jari 128                 info.exptTreeIterations = exptTreeIterations;
2 26 Feb 07 jari 129                 info.exptTreeAnalysisOption = exptTreeAnalysisOption;
2 26 Feb 07 jari 130             }
2 26 Feb 07 jari 131             
2 26 Feb 07 jari 132             return createResultTree(experiment, genes_result, samples_result, info);
2 26 Feb 07 jari 133             
2 26 Feb 07 jari 134         } finally {
2 26 Feb 07 jari 135             if (algorithm != null) {
2 26 Feb 07 jari 136                 algorithm.removeAlgorithmListener(listener);
2 26 Feb 07 jari 137             }
2 26 Feb 07 jari 138             if (progress != null) {
2 26 Feb 07 jari 139                 progress.dispose();
2 26 Feb 07 jari 140             }
2 26 Feb 07 jari 141         }
2 26 Feb 07 jari 142     }
2 26 Feb 07 jari 143     
2 26 Feb 07 jari 144     
2 26 Feb 07 jari 145     
2 26 Feb 07 jari 146     public AlgorithmData getScriptParameters(IFramework framework) {
2 26 Feb 07 jari 147         
2 26 Feb 07 jari 148         IDistanceMenu menu = framework.getDistanceMenu();
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         ResampleTreeInitDialog dialog = new ResampleTreeInitDialog((JFrame) framework.getFrame(), true, menu.getFunctionName(function), menu.isAbsoluteDistance());
2 26 Feb 07 jari 155         dialog.setVisible(true);
2 26 Feb 07 jari 156         
2 26 Feb 07 jari 157         if (dialog.isCancelled()) {
2 26 Feb 07 jari 158             return null;
2 26 Feb 07 jari 159         }
2 26 Feb 07 jari 160         
2 26 Feb 07 jari 161         int method = dialog.getMethod();
2 26 Feb 07 jari 162         drawGeneTree = dialog.drawGeneTreeCheckBox.isSelected();
2 26 Feb 07 jari 163         drawExptTree = dialog.drawExptTreeCheckBox.isSelected();
2 26 Feb 07 jari 164         int geneTreeAnalysisOption = dialog.getGeneTreeAnalysisOption();
2 26 Feb 07 jari 165         int exptTreeAnalysisOption = dialog.getExptTreeAnalysisOption();
2 26 Feb 07 jari 166         int geneTreeIterations = Integer.parseInt(dialog.geneTreeIterationsTextField.getText());
2 26 Feb 07 jari 167         int exptTreeIterations = Integer.parseInt(dialog.exptTreeIterationsTextField.getText());
2 26 Feb 07 jari 168
2 26 Feb 07 jari 169         AlgorithmData data = new AlgorithmData();  
2 26 Feb 07 jari 170   
2 26 Feb 07 jari 171         function = dialog.getDistanceMetric();
2 26 Feb 07 jari 172   
2 26 Feb 07 jari 173         data.addParam("distance-function", String.valueOf(function));
2 26 Feb 07 jari 174         data.addParam("distance-factor", String.valueOf(1.0f));
2 26 Feb 07 jari 175         data.addParam("distance-absolute", String.valueOf(dialog.isAbsoluteDistance()));
2 26 Feb 07 jari 176         
2 26 Feb 07 jari 177         data.addParam("method-linkage", String.valueOf(method));
2 26 Feb 07 jari 178         data.addParam("geneTreeIterations", String.valueOf(geneTreeIterations));
2 26 Feb 07 jari 179         data.addParam("exptTreeIterations", String.valueOf(exptTreeIterations));
2 26 Feb 07 jari 180         data.addParam("geneTreeAnalysisOption", String.valueOf(geneTreeAnalysisOption));
2 26 Feb 07 jari 181         data.addParam("exptTreeAnalysisOption", String.valueOf(exptTreeAnalysisOption));
2 26 Feb 07 jari 182         
2 26 Feb 07 jari 183         data.addParam("drawExptTree", String.valueOf(drawExptTree));
2 26 Feb 07 jari 184         data.addParam("drawGeneTree", String.valueOf(drawGeneTree));
2 26 Feb 07 jari 185         
2 26 Feb 07 jari 186         //script control parameters
2 26 Feb 07 jari 187         
2 26 Feb 07 jari 188         // alg name
2 26 Feb 07 jari 189         data.addParam("name", "ST");
2 26 Feb 07 jari 190         
2 26 Feb 07 jari 191         // alg type
2 26 Feb 07 jari 192         data.addParam("alg-type", "cluster");
2 26 Feb 07 jari 193         
2 26 Feb 07 jari 194         // output class
2 26 Feb 07 jari 195         data.addParam("output-class", "single-output");
2 26 Feb 07 jari 196         
2 26 Feb 07 jari 197         //output nodes
2 26 Feb 07 jari 198         String [] outputNodes = new String[1];
2 26 Feb 07 jari 199         outputNodes[0] = "Single Ordered Output";
2 26 Feb 07 jari 200         data.addStringArray("output-nodes", outputNodes);
2 26 Feb 07 jari 201         
2 26 Feb 07 jari 202         return data;
2 26 Feb 07 jari 203     }
2 26 Feb 07 jari 204     
2 26 Feb 07 jari 205
2 26 Feb 07 jari 206     
2 26 Feb 07 jari 207     public DefaultMutableTreeNode executeScript(IFramework framework, AlgorithmData algData, Experiment experiment) throws AlgorithmException {
2 26 Feb 07 jari 208         AlgorithmParameters params = algData.getParams();
2 26 Feb 07 jari 209         this.drawExptTree = params.getBoolean("drawExptTree");
2 26 Feb 07 jari 210         this.drawGeneTree = params.getBoolean("drawGeneTree");
2 26 Feb 07 jari 211      
2 26 Feb 07 jari 212         Listener listener = new Listener();
2 26 Feb 07 jari 213         
2 26 Feb 07 jari 214         try {
2 26 Feb 07 jari 215             AlgorithmFactory factory = framework.getAlgorithmFactory();            
2 26 Feb 07 jari 216             this.algorithm = factory.getAlgorithm("ST");
2 26 Feb 07 jari 217             algorithm.addAlgorithmListener(listener);
2 26 Feb 07 jari 218
2 26 Feb 07 jari 219             algData.addMatrix("experiment", experiment.getMatrix());
2 26 Feb 07 jari 220             
2 26 Feb 07 jari 221             this.progress = new Progress(framework.getFrame(), "", listener);
2 26 Feb 07 jari 222             this.progress.show();
2 26 Feb 07 jari 223             
2 26 Feb 07 jari 224             long start = System.currentTimeMillis();
2 26 Feb 07 jari 225             AlgorithmData samples_result = null;
2 26 Feb 07 jari 226            
2 26 Feb 07 jari 227             //keep the parameter additions, although they are redundant the flip/flop nature
2 26 Feb 07 jari 228             //is used to indicate which way to build a tree on the algorithm side.
2 26 Feb 07 jari 229             if (drawExptTree) {
2 26 Feb 07 jari 230                 progress.setTitle("Resampling by Experiments");
2 26 Feb 07 jari 231                 algData.addParam("drawGeneTree", String.valueOf(false));
2 26 Feb 07 jari 232                 algData.addParam("drawExptTree", String.valueOf(true));
2 26 Feb 07 jari 233                 samples_result = algorithm.execute(algData);
2 26 Feb 07 jari 234                 validate(samples_result);
2 26 Feb 07 jari 235             }
2 26 Feb 07 jari 236             AlgorithmData genes_result = null;
2 26 Feb 07 jari 237             if (drawGeneTree) {
2 26 Feb 07 jari 238                 progress.setTitle("Resampling by Genes");
2 26 Feb 07 jari 239                 algData.addParam("drawGeneTree", String.valueOf(true));
2 26 Feb 07 jari 240                 algData.addParam("drawExptTree", String.valueOf(false));
2 26 Feb 07 jari 241                 genes_result = algorithm.execute(algData);
2 26 Feb 07 jari 242                 validate(genes_result);
2 26 Feb 07 jari 243             }
2 26 Feb 07 jari 244             long time = System.currentTimeMillis() - start;
2 26 Feb 07 jari 245             
2 26 Feb 07 jari 246             GeneralInfo info = new GeneralInfo();
2 26 Feb 07 jari 247             info.time = time;
2 26 Feb 07 jari 248             info.method = params.getInt("method-linkage");
2 26 Feb 07 jari 249
2 26 Feb 07 jari 250             int function = params.getInt("distance-function");
2 26 Feb 07 jari 251             info.function = framework.getDistanceMenu().getFunctionName(function);
2 26 Feb 07 jari 252             
2 26 Feb 07 jari 253             if (drawGeneTree) {
2 26 Feb 07 jari 254                 info.drawGeneTree = true;
2 26 Feb 07 jari 255                 info.geneTreeIterations = params.getInt("geneTreeIterations");
2 26 Feb 07 jari 256                 info.geneTreeAnalysisOption = params.getInt("geneTreeAnalysisOption");
2 26 Feb 07 jari 257             }
2 26 Feb 07 jari 258             if (drawExptTree) {
2 26 Feb 07 jari 259                 info.drawExptTree = true;
2 26 Feb 07 jari 260                 info.exptTreeIterations = params.getInt("exptTreeIterations");
2 26 Feb 07 jari 261                 info.exptTreeAnalysisOption = params.getInt("exptTreeAnalysisOption");
2 26 Feb 07 jari 262             }
2 26 Feb 07 jari 263             
2 26 Feb 07 jari 264             return createResultTree(experiment, genes_result, samples_result, info);
2 26 Feb 07 jari 265             
2 26 Feb 07 jari 266         } finally {
2 26 Feb 07 jari 267             if (algorithm != null) {
2 26 Feb 07 jari 268                 algorithm.removeAlgorithmListener(listener);
2 26 Feb 07 jari 269             }
2 26 Feb 07 jari 270             if (progress != null) {
2 26 Feb 07 jari 271                 progress.dispose();
2 26 Feb 07 jari 272             }
2 26 Feb 07 jari 273         }
2 26 Feb 07 jari 274     }
2 26 Feb 07 jari 275     
2 26 Feb 07 jari 276     
2 26 Feb 07 jari 277     /**
2 26 Feb 07 jari 278      * Checking the result of hcl algorithm calculation.
2 26 Feb 07 jari 279      * @throws AlgorithmException, if the result is incorrect.
2 26 Feb 07 jari 280      */
2 26 Feb 07 jari 281     private void validate(AlgorithmData result) throws AlgorithmException {
2 26 Feb 07 jari 282         if (result.getIntArray("orig-child-1-array") == null) {
2 26 Feb 07 jari 283             throw new AlgorithmException("parameter 'orig-child-1-array' is null");
2 26 Feb 07 jari 284         }
2 26 Feb 07 jari 285         if (result.getIntArray("orig-child-2-array") == null) {
2 26 Feb 07 jari 286             throw new AlgorithmException("parameter 'orig-child-2-array' is null");
2 26 Feb 07 jari 287         }
2 26 Feb 07 jari 288         if (result.getIntArray("orig-node-order") == null) {
2 26 Feb 07 jari 289             throw new AlgorithmException("parameter 'orig-node-order' is null");
2 26 Feb 07 jari 290         }
2 26 Feb 07 jari 291         if (result.getMatrix("orig-height") == null) {
2 26 Feb 07 jari 292             throw new AlgorithmException("parameter 'orig-height' is null");
2 26 Feb 07 jari 293         }
2 26 Feb 07 jari 294     }
2 26 Feb 07 jari 295     
2 26 Feb 07 jari 296     /**
2 26 Feb 07 jari 297      * Creates a result tree.
2 26 Feb 07 jari 298      */
2 26 Feb 07 jari 299     private DefaultMutableTreeNode createResultTree(Experiment experiment, AlgorithmData genes_result, AlgorithmData samples_result, GeneralInfo info) {
2 26 Feb 07 jari 300         DefaultMutableTreeNode root = new DefaultMutableTreeNode("ST");
2 26 Feb 07 jari 301         root.add(new DefaultMutableTreeNode(new LeafInfo("Support Tree - "+info.getMethodName(), createHCLSupportViewer(experiment, genes_result, samples_result, root))));
2 26 Feb 07 jari 302         root.add(new DefaultMutableTreeNode("Time: "+String.valueOf(info.time)+" ms"));
2 26 Feb 07 jari 303         root.add(new DefaultMutableTreeNode(info.function));
2 26 Feb 07 jari 304         if (info.drawGeneTree) {
2 26 Feb 07 jari 305             DefaultMutableTreeNode geneTreeNode = new DefaultMutableTreeNode("Gene Tree Resampling");
2 26 Feb 07 jari 306             geneTreeNode.add(new DefaultMutableTreeNode("Resampling method: " + info.getGeneTreeAnalysisOptionName()));
2 26 Feb 07 jari 307             geneTreeNode.add(new DefaultMutableTreeNode("Iterations: " + info.geneTreeIterations));
2 26 Feb 07 jari 308             root.add(geneTreeNode);
2 26 Feb 07 jari 309         }
2 26 Feb 07 jari 310         
2 26 Feb 07 jari 311         if (info.drawExptTree) {
2 26 Feb 07 jari 312             DefaultMutableTreeNode exptTreeNode = new DefaultMutableTreeNode("Expt Tree Resampling");
2 26 Feb 07 jari 313             exptTreeNode.add(new DefaultMutableTreeNode("Resampling method: " + info.getExptTreeAnalysisOptionName()));
2 26 Feb 07 jari 314             exptTreeNode.add(new DefaultMutableTreeNode("Iterations: " + info.exptTreeIterations));
2 26 Feb 07 jari 315             root.add(exptTreeNode);
2 26 Feb 07 jari 316         }
2 26 Feb 07 jari 317         return root;
2 26 Feb 07 jari 318     }
2 26 Feb 07 jari 319     
2 26 Feb 07 jari 320     /**
2 26 Feb 07 jari 321      * Returns a hcl tree data from the specified AlgorithmData structure.
2 26 Feb 07 jari 322      */
2 26 Feb 07 jari 323     private HCLTreeData getHCLTreeData(AlgorithmData result) {
2 26 Feb 07 jari 324         if (result == null) {
2 26 Feb 07 jari 325             return null;
2 26 Feb 07 jari 326         }
2 26 Feb 07 jari 327         HCLTreeData data = new HCLTreeData();
2 26 Feb 07 jari 328         data.child_1_array = result.getIntArray("orig-child-1-array");
2 26 Feb 07 jari 329         data.child_2_array = result.getIntArray("orig-child-2-array");
2 26 Feb 07 jari 330         data.node_order = result.getIntArray("orig-node-order");
2 26 Feb 07 jari 331         data.height = result.getMatrix("orig-height").getRowPackedCopy();
2 26 Feb 07 jari 332         return data;
2 26 Feb 07 jari 333     }
2 26 Feb 07 jari 334     
2 26 Feb 07 jari 335     private IViewer createHCLSupportViewer(Experiment experiment, AlgorithmData genes_result, AlgorithmData samples_result, DefaultMutableTreeNode root) {
2 26 Feb 07 jari 336         return new HCLSupportViewer(experiment, null, getHCLTreeData(genes_result), getHCLTreeData(samples_result), getGeneTreeSupportVector(genes_result), getExptTreeSupportVector(samples_result), root);
2 26 Feb 07 jari 337     }
2 26 Feb 07 jari 338     
2 26 Feb 07 jari 339     
2 26 Feb 07 jari 340     private Vector getGeneTreeSupportVector(AlgorithmData result) {
2 26 Feb 07 jari 341         Vector geneTreeSupportVector = new Vector();
2 26 Feb 07 jari 342         
2 26 Feb 07 jari 343         if (drawGeneTree) {
2 26 Feb 07 jari 344             FloatMatrix geneTreeSupportMatrix = result.getMatrix("geneTreeSupportMatrix");
2 26 Feb 07 jari 345             for (int i = 0; i < geneTreeSupportMatrix.A[0].length; i++) {
2 26 Feb 07 jari 346                 geneTreeSupportVector.add(new Float(geneTreeSupportMatrix.A[0][i]));
2 26 Feb 07 jari 347             }
2 26 Feb 07 jari 348         } else {
2 26 Feb 07 jari 349             geneTreeSupportVector = null;
2 26 Feb 07 jari 350         }
2 26 Feb 07 jari 351         
2 26 Feb 07 jari 352         return geneTreeSupportVector;
2 26 Feb 07 jari 353     }
2 26 Feb 07 jari 354     
2 26 Feb 07 jari 355     private Vector getExptTreeSupportVector(AlgorithmData result) {
2 26 Feb 07 jari 356         Vector exptTreeSupportVector = new Vector();
2 26 Feb 07 jari 357         if (drawExptTree) {
2 26 Feb 07 jari 358             FloatMatrix exptTreeSupportMatrix = result.getMatrix("exptTreeSupportMatrix");
2 26 Feb 07 jari 359             for (int i = 0; i < exptTreeSupportMatrix.A[0].length; i++) {
2 26 Feb 07 jari 360                 exptTreeSupportVector.add(new Float(exptTreeSupportMatrix.A[0][i]));
2 26 Feb 07 jari 361             }
2 26 Feb 07 jari 362         } else {
2 26 Feb 07 jari 363             exptTreeSupportVector = null;
2 26 Feb 07 jari 364         }
2 26 Feb 07 jari 365         
2 26 Feb 07 jari 366         return exptTreeSupportVector;
2 26 Feb 07 jari 367     }
2 26 Feb 07 jari 368     
2 26 Feb 07 jari 369     
2 26 Feb 07 jari 370     
2 26 Feb 07 jari 371     /**
2 26 Feb 07 jari 372      * The class to listen to algorithm events.
2 26 Feb 07 jari 373      */
2 26 Feb 07 jari 374     private class Listener extends DialogListener implements AlgorithmListener {
2 26 Feb 07 jari 375         
2 26 Feb 07 jari 376         public void valueChanged(AlgorithmEvent event) {
2 26 Feb 07 jari 377             switch (event.getId()) {
2 26 Feb 07 jari 378                 case AlgorithmEvent.SET_UNITS:
2 26 Feb 07 jari 379                     progress.setUnits(event.getIntValue());
2 26 Feb 07 jari 380                     progress.setDescription(event.getDescription());
2 26 Feb 07 jari 381                     break;
2 26 Feb 07 jari 382                 case AlgorithmEvent.PROGRESS_VALUE:
2 26 Feb 07 jari 383                     progress.setValue(event.getIntValue());
2 26 Feb 07 jari 384                     progress.setDescription(event.getDescription());
2 26 Feb 07 jari 385                     break;
2 26 Feb 07 jari 386             }
2 26 Feb 07 jari 387         }
2 26 Feb 07 jari 388         
2 26 Feb 07 jari 389         public void actionPerformed(ActionEvent e) {
2 26 Feb 07 jari 390             String command = e.getActionCommand();
2 26 Feb 07 jari 391             if (command.equals("cancel-command")) {
2 26 Feb 07 jari 392                 algorithm.abort();
2 26 Feb 07 jari 393                 progress.dispose();
2 26 Feb 07 jari 394             }
2 26 Feb 07 jari 395         }
2 26 Feb 07 jari 396         
2 26 Feb 07 jari 397         public void windowClosing(WindowEvent e) {
2 26 Feb 07 jari 398             algorithm.abort();
2 26 Feb 07 jari 399             progress.dispose();
2 26 Feb 07 jari 400         }
2 26 Feb 07 jari 401     }
2 26 Feb 07 jari 402     
2 26 Feb 07 jari 403     /**
2 26 Feb 07 jari 404      * General info structure.
2 26 Feb 07 jari 405      */
2 26 Feb 07 jari 406     public static class GeneralInfo {
2 26 Feb 07 jari 407         public long time;
2 26 Feb 07 jari 408         public int method;
2 26 Feb 07 jari 409         public String function;
2 26 Feb 07 jari 410         public boolean drawGeneTree = false;
2 26 Feb 07 jari 411         public boolean drawExptTree = false;
2 26 Feb 07 jari 412         public int geneTreeIterations;
2 26 Feb 07 jari 413         public int exptTreeIterations;
2 26 Feb 07 jari 414         public int geneTreeAnalysisOption;
2 26 Feb 07 jari 415         public int exptTreeAnalysisOption;
2 26 Feb 07 jari 416         
2 26 Feb 07 jari 417         public String getGeneTreeAnalysisOptionName() {
2 26 Feb 07 jari 418             String optionName;
2 26 Feb 07 jari 419             switch(geneTreeAnalysisOption) {
2 26 Feb 07 jari 420                 case 0: optionName = "No Resampling";
2 26 Feb 07 jari 421                 break;
2 26 Feb 07 jari 422                 case 1: optionName = "Bootstrap Experiments";
2 26 Feb 07 jari 423                 break;
2 26 Feb 07 jari 424                 case 2: optionName = "Bootstrap Genes";
2 26 Feb 07 jari 425                 break;
2 26 Feb 07 jari 426                 case 3: optionName = "Jackknife Experiments";
2 26 Feb 07 jari 427                 break;
2 26 Feb 07 jari 428                 case 4: optionName = "Jackknife Genes";
2 26 Feb 07 jari 429                 break;
2 26 Feb 07 jari 430                 default: optionName = "No Resampling";
2 26 Feb 07 jari 431                 break;
2 26 Feb 07 jari 432             }
2 26 Feb 07 jari 433             
2 26 Feb 07 jari 434             return optionName;
2 26 Feb 07 jari 435         }
2 26 Feb 07 jari 436         
2 26 Feb 07 jari 437         
2 26 Feb 07 jari 438         public String getExptTreeAnalysisOptionName() {
2 26 Feb 07 jari 439             
2 26 Feb 07 jari 440             String optionName;
2 26 Feb 07 jari 441             switch(exptTreeAnalysisOption) {
2 26 Feb 07 jari 442                 case 0: optionName = "No Resampling";
2 26 Feb 07 jari 443                 break;
2 26 Feb 07 jari 444                 case 1: optionName = "Bootstrap Experiments";
2 26 Feb 07 jari 445                 break;
2 26 Feb 07 jari 446                 case 2: optionName = "Bootstrap Genes";
2 26 Feb 07 jari 447                 break;
2 26 Feb 07 jari 448                 case 3: optionName = "Jackknife Experiments";
2 26 Feb 07 jari 449                 break;
2 26 Feb 07 jari 450                 case 4: optionName = "Jackknife Genes";
2 26 Feb 07 jari 451                 break;
2 26 Feb 07 jari 452                 default: optionName = "No Resampling";
2 26 Feb 07 jari 453                 break;
2 26 Feb 07 jari 454             }
2 26 Feb 07 jari 455             
2 26 Feb 07 jari 456             return optionName;
2 26 Feb 07 jari 457         }
2 26 Feb 07 jari 458         
2 26 Feb 07 jari 459         
2 26 Feb 07 jari 460         public String getMethodName() {
2 26 Feb 07 jari 461             return getMethodName(method);
2 26 Feb 07 jari 462         }
2 26 Feb 07 jari 463         
2 26 Feb 07 jari 464         public static String getMethodName(int method) {
2 26 Feb 07 jari 465             method = method == -1 ? 2 : method;
2 26 Feb 07 jari 466             return methods[method];
2 26 Feb 07 jari 467         }
2 26 Feb 07 jari 468         
2 26 Feb 07 jari 469         private static String[] methods = {"average linkage", "complete linkage", "single linkage"};
2 26 Feb 07 jari 470     }
2 26 Feb 07 jari 471     
2 26 Feb 07 jari 472 }