mev-4.0.01/source/org/tigr/microarray/mev/cluster/gui/impl/tease/TEASEGUI.java

Code
Comments
Other
Rev Date Author Line
2 26 Feb 07 jari 1 /*
2 26 Feb 07 jari 2  * Created on Aug 10, 2005
2 26 Feb 07 jari 3  *
2 26 Feb 07 jari 4  */
2 26 Feb 07 jari 5 package org.tigr.microarray.mev.cluster.gui.impl.tease;
2 26 Feb 07 jari 6
2 26 Feb 07 jari 7 import java.awt.event.WindowEvent;
2 26 Feb 07 jari 8 import java.io.BufferedReader;
2 26 Feb 07 jari 9 import java.io.File;
2 26 Feb 07 jari 10 import java.io.FileReader;
2 26 Feb 07 jari 11 import java.io.IOException;
2 26 Feb 07 jari 12 import java.util.Vector;
2 26 Feb 07 jari 13
2 26 Feb 07 jari 14 import javax.swing.JFrame;
2 26 Feb 07 jari 15 import javax.swing.JOptionPane;
2 26 Feb 07 jari 16 import javax.swing.tree.DefaultMutableTreeNode;
2 26 Feb 07 jari 17
2 26 Feb 07 jari 18 import org.tigr.microarray.mev.cluster.algorithm.Algorithm;
2 26 Feb 07 jari 19 import org.tigr.microarray.mev.cluster.algorithm.AlgorithmData;
2 26 Feb 07 jari 20 import org.tigr.microarray.mev.cluster.algorithm.AlgorithmEvent;
2 26 Feb 07 jari 21 import org.tigr.microarray.mev.cluster.algorithm.AlgorithmException;
2 26 Feb 07 jari 22 import org.tigr.microarray.mev.cluster.algorithm.AlgorithmFactory;
2 26 Feb 07 jari 23 import org.tigr.microarray.mev.cluster.algorithm.AlgorithmListener;
2 26 Feb 07 jari 24 import org.tigr.microarray.mev.cluster.gui.Experiment;
2 26 Feb 07 jari 25 import org.tigr.microarray.mev.cluster.gui.IClusterGUI;
2 26 Feb 07 jari 26 import org.tigr.microarray.mev.cluster.gui.IDistanceMenu;
2 26 Feb 07 jari 27 import org.tigr.microarray.mev.cluster.gui.IFramework;
2 26 Feb 07 jari 28 import org.tigr.microarray.mev.cluster.gui.IViewer;
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.Logger;
2 26 Feb 07 jari 32 import org.tigr.microarray.mev.cluster.gui.impl.dialogs.Progress;
2 26 Feb 07 jari 33
2 26 Feb 07 jari 34
2 26 Feb 07 jari 35
2 26 Feb 07 jari 36 /**
2 26 Feb 07 jari 37  * @author Annie Liu
2 26 Feb 07 jari 38  * @version Aug 10, 2005
2 26 Feb 07 jari 39  *
2 26 Feb 07 jari 40  * TEASEGUI acts as the bridge between viewer and model
2 26 Feb 07 jari 41  * it recognizes user input and passed in packaged data
2 26 Feb 07 jari 42  * to TEASE for execution. TEASEGUI receives the executed 
2 26 Feb 07 jari 43  * data and display the data in viewer.
2 26 Feb 07 jari 44  */
2 26 Feb 07 jari 45
2 26 Feb 07 jari 46 public class TEASEGUI implements IClusterGUI {
2 26 Feb 07 jari 47
2 26 Feb 07 jari 48   private Algorithm algorithm;   //a reference to TEASE algorithm
2 26 Feb 07 jari 49   private JFrame frame;
2 26 Feb 07 jari 50   private GeneralInfo info;      //store parameters of the analysis
2 26 Feb 07 jari 51   private Experiment experiment;  //data to be analyzed
2 26 Feb 07 jari 52     private Progress progress;      //progress bar
2 26 Feb 07 jari 53     private Logger logger;          //log box
2 26 Feb 07 jari 54     
2 26 Feb 07 jari 55     private boolean stop;
2 26 Feb 07 jari 56     private boolean hclOnly;            //variables used specifically for HCL only
2 26 Feb 07 jari 57     private boolean clusterGeneTree;
2 26 Feb 07 jari 58     private boolean clusterSampleTree;
2 26 Feb 07 jari 59     
2 26 Feb 07 jari 60   /**
2 26 Feb 07 jari 61    * Constructor. Create an instance of TEASEGUI
2 26 Feb 07 jari 62    *
2 26 Feb 07 jari 63    */
2 26 Feb 07 jari 64   public TEASEGUI() {
2 26 Feb 07 jari 65     this.info = new GeneralInfo();
2 26 Feb 07 jari 66   }
2 26 Feb 07 jari 67   
2 26 Feb 07 jari 68     /**
2 26 Feb 07 jari 69      * Inits the algorithm parameters, runs calculation and returns
2 26 Feb 07 jari 70      * a result to be inserted into the framework analysis node.
2 26 Feb 07 jari 71      */
2 26 Feb 07 jari 72     public DefaultMutableTreeNode execute(IFramework framework) throws AlgorithmException {
2 26 Feb 07 jari 73       AlgorithmData data = new AlgorithmData();
2 26 Feb 07 jari 74       AlgorithmData resultData = new AlgorithmData();
2 26 Feb 07 jari 75       this.frame = framework.getJFrame();
2 26 Feb 07 jari 76         this.experiment = framework.getData().getExperiment();
2 26 Feb 07 jari 77         AlgorithmFactory factory = framework.getAlgorithmFactory();  
2 26 Feb 07 jari 78         this.algorithm = factory.getAlgorithm("TEASE");  //store a reference to the algorithm
2 26 Feb 07 jari 79         
2 26 Feb 07 jari 80         Listener listener = new Listener();
2 26 Feb 07 jari 81         this.algorithm.addAlgorithmListener(listener);        //add algorithm listener 
2 26 Feb 07 jari 82         this.logger = new Logger(framework.getFrame(), "TEASE Analysis", listener);
2 26 Feb 07 jari 83         this.progress = new Progress(framework.getFrame(), "", listener);
2 26 Feb 07 jari 84         
2 26 Feb 07 jari 85         long start = System.currentTimeMillis();
2 26 Feb 07 jari 86         data = TEASEInterface(framework, data);
2 26 Feb 07 jari 87     
2 26 Feb 07 jari 88         if (data == null)
2 26 Feb 07 jari 89           return null;
2 26 Feb 07 jari 90         
2 26 Feb 07 jari 91         if (this.hclOnly) {
2 26 Feb 07 jari 92             AlgorithmData genes_result = null;
2 26 Feb 07 jari 93             if (this.clusterGeneTree) {
2 26 Feb 07 jari 94                 data.addParam("calculate-genes", String.valueOf(true));
2 26 Feb 07 jari 95                 genes_result = algorithm.execute(data);
2 26 Feb 07 jari 96                 validate(genes_result);
2 26 Feb 07 jari 97             }
2 26 Feb 07 jari 98             AlgorithmData samples_result = null;
2 26 Feb 07 jari 99             if (this.clusterSampleTree) {
2 26 Feb 07 jari 100                 data.addParam("calculate-genes", String.valueOf(false));
2 26 Feb 07 jari 101                 samples_result = algorithm.execute(data);
2 26 Feb 07 jari 102                 validate(samples_result);
2 26 Feb 07 jari 103             }
2 26 Feb 07 jari 104
2 26 Feb 07 jari 105             logger.append("Creating Result Viewers\n");
2 26 Feb 07 jari 106           
2 26 Feb 07 jari 107         if (algorithm != null) {
2 26 Feb 07 jari 108             algorithm.removeAlgorithmListener(listener);
2 26 Feb 07 jari 109             }
2 26 Feb 07 jari 110             if (logger != null) logger.dispose();
2 26 Feb 07 jari 111               
2 26 Feb 07 jari 112           long time = System.currentTimeMillis() - start;  
2 26 Feb 07 jari 113             
2 26 Feb 07 jari 114           this.info.time = time;
2 26 Feb 07 jari 115               
2 26 Feb 07 jari 116           if (this.algorithm != null) {
2 26 Feb 07 jari 117             this.algorithm.removeAlgorithmListener(listener);
2 26 Feb 07 jari 118           }
2 26 Feb 07 jari 119           if (this.progress != null) {
2 26 Feb 07 jari 120              this.progress.dispose();
2 26 Feb 07 jari 121           }
2 26 Feb 07 jari 122           return createResultTree(this.experiment, genes_result, samples_result, this.info);
2 26 Feb 07 jari 123         }
2 26 Feb 07 jari 124         
2 26 Feb 07 jari 125         //include EASE
2 26 Feb 07 jari 126
2 26 Feb 07 jari 127         resultData = this.algorithm.execute(data);
2 26 Feb 07 jari 128         validate(resultData);
2 26 Feb 07 jari 129         
2 26 Feb 07 jari 130         logger.append("Creating Result Viewers\n");
2 26 Feb 07 jari 131         
2 26 Feb 07 jari 132         if (algorithm != null) {
2 26 Feb 07 jari 133             algorithm.removeAlgorithmListener(listener);
2 26 Feb 07 jari 134         }
2 26 Feb 07 jari 135         if (logger != null) logger.dispose();
2 26 Feb 07 jari 136         
2 26 Feb 07 jari 137         long time = System.currentTimeMillis() - start;  
2 26 Feb 07 jari 138         
2 26 Feb 07 jari 139         this.info.time = time;
2 26 Feb 07 jari 140         
2 26 Feb 07 jari 141         if (this.algorithm != null) {
2 26 Feb 07 jari 142           this.algorithm.removeAlgorithmListener(listener);
2 26 Feb 07 jari 143         }
2 26 Feb 07 jari 144         if (this.progress != null) {
2 26 Feb 07 jari 145           this.progress.dispose();
2 26 Feb 07 jari 146         }
2 26 Feb 07 jari 147         return createResultTree(this.experiment, resultData, this.info);
2 26 Feb 07 jari 148     }
2 26 Feb 07 jari 149     
2 26 Feb 07 jari 150     private AlgorithmData TEASEInterface(IFramework framework, AlgorithmData data) throws AlgorithmException {
2 26 Feb 07 jari 151       IDistanceMenu menu = framework.getDistanceMenu();   //get user input from IDistanceMenu
2 26 Feb 07 jari 152         int function = menu.getDistanceFunction();
2 26 Feb 07 jari 153         if (function == Algorithm.DEFAULT) {      //default value is Euclidean distance
2 26 Feb 07 jari 154             function = Algorithm.EUCLIDEAN;
2 26 Feb 07 jari 155         }        
2 26 Feb 07 jari 156       TEASEInitDialog dialog = new TEASEInitDialog(framework.getFrame(), framework.getData().getFieldNames(),
2 26 Feb 07 jari 157           menu.getFunctionName(function),  menu.isAbsoluteDistance(), true);
2 26 Feb 07 jari 158       
2 26 Feb 07 jari 159         if (dialog.showModal() != JOptionPane.OK_OPTION) {
2 26 Feb 07 jari 160             return null;
2 26 Feb 07 jari 161         }
2 26 Feb 07 jari 162         
2 26 Feb 07 jari 163         int method = dialog.getMethod();
2 26 Feb 07 jari 164         function = dialog.getDistanceMetric();
2 26 Feb 07 jari 165
2 26 Feb 07 jari 166         //construct data
2 26 Feb 07 jari 167         data.addParam("hcl-only", dialog.isHCLOnly());
2 26 Feb 07 jari 168         data.addMatrix("experiment", this.experiment.getMatrix());
2 26 Feb 07 jari 169         data.addParam("hcl-distance-function", String.valueOf(function));
2 26 Feb 07 jari 170         data.addParam("distance-factor", String.valueOf(1.0f));
2 26 Feb 07 jari 171         data.addParam("hcl-distance-absolute", String.valueOf(dialog.getAbsoluteSelection()));
2 26 Feb 07 jari 172         data.addParam("method-linkage", String.valueOf(method));
2 26 Feb 07 jari 173  
2 26 Feb 07 jari 174         progress.setTitle("Clustering by Genes");
2 26 Feb 07 jari 175
2 26 Feb 07 jari 176         this.info.method = method;
2 26 Feb 07 jari 177         this.info.function = menu.getFunctionName(function);
2 26 Feb 07 jari 178         this.logger.show();
2 26 Feb 07 jari 179         
2 26 Feb 07 jari 180         this.hclOnly = Boolean.valueOf(dialog.isHCLOnly()).booleanValue();
2 26 Feb 07 jari 181         
2 26 Feb 07 jari 182         if (this.hclOnly) {
2 26 Feb 07 jari 183           this.clusterGeneTree = dialog.isGeneTreeSelected();
2 26 Feb 07 jari 184           this.clusterSampleTree = dialog.isSampleTreeSelected();
2 26 Feb 07 jari 185           data.addParam("hcl-only",String.valueOf(true));
2 26 Feb 07 jari 186           return data;
2 26 Feb 07 jari 187         }
2 26 Feb 07 jari 188
2 26 Feb 07 jari 189       data.addParam("maximum-genes", dialog.getMaxNumber());
2 26 Feb 07 jari 190       data.addParam("minimum-genes", dialog.getMinNumber());
2 26 Feb 07 jari 191       data.addParam("upper-boundary", dialog.getUpperBoundary());
2 26 Feb 07 jari 192       data.addParam("lower-boundary", dialog.getLowerBoundary());
2 26 Feb 07 jari 193   
2 26 Feb 07 jari 194       this.info.max = dialog.getMaxNumber();
2 26 Feb 07 jari 195       this.info.min = dialog.getMinNumber();
2 26 Feb 07 jari 196           
2 26 Feb 07 jari 197       String baseFileSystem = dialog.getBaseFileLocation();
2 26 Feb 07 jari 198       String converterFileName = dialog.getConverterFileName();
2 26 Feb 07 jari 199       String annotationKeyType = dialog.getAnnotationKeyType();
2 26 Feb 07 jari 200       String [] annotationFileList = dialog.getAnnToGOFileList();  //import the gene to GO files
2 26 Feb 07 jari 201       boolean isClusterAnalysis = dialog.isClusterModeSelected();
2 26 Feb 07 jari 202           
2 26 Feb 07 jari 203       data.addParam("base-file-system", baseFileSystem);
2 26 Feb 07 jari 204       boolean isPvalueCorrectionSelected;
2 26 Feb 07 jari 205   
2 26 Feb 07 jari 206           
2 26 Feb 07 jari 207   //        for (int i = 0; i < experiment.getRowMappingArrayCopy().length; i++) //***********************************
2 26 Feb 07 jari 208   //          System.out.println("Row "+(i+1)+ ": "+experiment.getRowMappingArrayCopy()[i]);
2 26 Feb 07 jari 209   //        
2 26 Feb 07 jari 210   //        for (int i = 0; i < experiment.getRowMappingArrayCopy().length; i++) //**********************
2 26 Feb 07 jari 211   //          System.out.println("Row " +i +": "+framework.getData().getGeneName(i));
2 26 Feb 07 jari 212           
2 26 Feb 07 jari 213       if(isClusterAnalysis){
2 26 Feb 07 jari 214           data.addParam("report-ease-score", String.valueOf(dialog.isEaseScoreSelected()));
2 26 Feb 07 jari 215           isPvalueCorrectionSelected = dialog.isCorrectPvaluesSelected();
2 26 Feb 07 jari 216           data.addParam("p-value-corrections", String.valueOf(isPvalueCorrectionSelected));
2 26 Feb 07 jari 217           if(isPvalueCorrectionSelected){
2 26 Feb 07 jari 218               data.addParam("bonferroni-correction", String.valueOf(dialog.isBonferroniSelected()));
2 26 Feb 07 jari 219               data.addParam("bonferroni-step-down-correction", String.valueOf(dialog.isStepDownBonferroniSelected()));
2 26 Feb 07 jari 220               data.addParam("sidak-correction", String.valueOf(dialog.isSidakSelected()));
2 26 Feb 07 jari 221           }
2 26 Feb 07 jari 222             
2 26 Feb 07 jari 223           data.addParam("run-permutation-analysis", String.valueOf(dialog.isPermutationAnalysisSelected()));
2 26 Feb 07 jari 224           if(dialog.isPermutationAnalysisSelected())
2 26 Feb 07 jari 225             data.addParam("permutation-count", String.valueOf(dialog.getPermutationCount()));
2 26 Feb 07 jari 226               
2 26 Feb 07 jari 227             this.logger.append("Extracting Annotation Key Lists\n");
2 26 Feb 07 jari 228           }
2 26 Feb 07 jari 229           
2 26 Feb 07 jari 230       String [] clusterKeys = framework.getData().getAnnotationList(annotationKeyType); 
2 26 Feb 07 jari 231       data.addStringArray("name-list", framework.getData().getAnnotationList("Title"));
2 26 Feb 07 jari 232       data.addStringArray("annotation-list", clusterKeys);
2 26 Feb 07 jari 233           
2 26 Feb 07 jari 234       //Population keys can either from an imported file or the present popualation if no file
2 26 Feb 07 jari 235      //is selected
2 26 Feb 07 jari 236       String [] populationKeys;
2 26 Feb 07 jari 237       if(isClusterAnalysis && dialog.isPopFileModeSelected()) {
2 26 Feb 07 jari 238           try {
2 26 Feb 07 jari 239               populationKeys = getPopulationKeysFromFile(dialog.getPopulationFileName());
2 26 Feb 07 jari 240               data.addParam("population-file-name", dialog.getPopulationFileName());
2 26 Feb 07 jari 241               if(populationKeys == null) {
2 26 Feb 07 jari 242                   return null;
2 26 Feb 07 jari 243               }
2 26 Feb 07 jari 244           } catch (IOException ioe) {
2 26 Feb 07 jari 245              //Bad file format
2 26 Feb 07 jari 246             JOptionPane.showMessageDialog(framework.getFrame(), "Error loading population file.", 
2 26 Feb 07 jari 247                       "Population File Load Error", JOptionPane.ERROR_MESSAGE);
2 26 Feb 07 jari 248               return null;
2 26 Feb 07 jari 249           }
2 26 Feb 07 jari 250       } else {
2 26 Feb 07 jari 251         populationKeys = framework.getData().getAnnotationList(annotationKeyType, framework.getData().getExperiment().getRowMappingArrayCopy());            
2 26 Feb 07 jari 252       }  //select the annotation key to use -->eq. locuslink ID
2 26 Feb 07 jari 253   
2 26 Feb 07 jari 254       data.addParam("perform-cluster-analysis", String.valueOf(isClusterAnalysis));
2 26 Feb 07 jari 255     data.addStringArray("population-list", populationKeys);  //add population list
2 26 Feb 07 jari 256         if(converterFileName != null)
2 26 Feb 07 jari 257           data.addParam("converter-file-name", converterFileName);
2 26 Feb 07 jari 258         data.addStringArray("annotation-file-list", annotationFileList);
2 26 Feb 07 jari 259         
2 26 Feb 07 jari 260         //Trim options
2 26 Feb 07 jari 261         String [] trimOptions = dialog.getTrimOptions();
2 26 Feb 07 jari 262         data.addParam("trim-option", trimOptions[0]);
2 26 Feb 07 jari 263         data.addParam("trim-value", trimOptions[1]);
2 26 Feb 07 jari 264
2 26 Feb 07 jari 265       return data;
2 26 Feb 07 jari 266     }
2 26 Feb 07 jari 267
2 26 Feb 07 jari 268     private String [] getPopulationKeysFromFile(String fileName) throws IOException {
2 26 Feb 07 jari 269         File file = new File(fileName);
2 26 Feb 07 jari 270         if(file.exists()) {
2 26 Feb 07 jari 271             BufferedReader reader = new BufferedReader(new FileReader(file));
2 26 Feb 07 jari 272             Vector ann = new Vector();
2 26 Feb 07 jari 273             String key;
2 26 Feb 07 jari 274             while( (key = reader.readLine()) != null ) {
2 26 Feb 07 jari 275                 ann.add(key);
2 26 Feb 07 jari 276             }
2 26 Feb 07 jari 277             String [] annot = new String [ann.size()];
2 26 Feb 07 jari 278             for(int i = 0; i < annot.length; i++) {
2 26 Feb 07 jari 279                 annot[i] = (String)(ann.elementAt(i));
2 26 Feb 07 jari 280             }
2 26 Feb 07 jari 281             return annot;
2 26 Feb 07 jari 282         }
2 26 Feb 07 jari 283         return null;
2 26 Feb 07 jari 284     }
2 26 Feb 07 jari 285     
2 26 Feb 07 jari 286     /**
2 26 Feb 07 jari 287      * Checking the result of hcl algorithm calculation.
2 26 Feb 07 jari 288      * @throws AlgorithmException, if the result is incorrect.
2 26 Feb 07 jari 289      */
2 26 Feb 07 jari 290     private void validate(AlgorithmData result) throws AlgorithmException {
2 26 Feb 07 jari 291         if (result.getIntArray("child-1-array") == null) {
2 26 Feb 07 jari 292             throw new AlgorithmException("parameter 'child-1-array' is null");
2 26 Feb 07 jari 293         }
2 26 Feb 07 jari 294         if (result.getIntArray("child-2-array") == null) {
2 26 Feb 07 jari 295             throw new AlgorithmException("parameter 'child-2-array' is null");
2 26 Feb 07 jari 296         }
2 26 Feb 07 jari 297         if (result.getIntArray("node-order") == null) {
2 26 Feb 07 jari 298             throw new AlgorithmException("parameter 'node-order' is null");
2 26 Feb 07 jari 299         }
2 26 Feb 07 jari 300         if (result.getMatrix("height") == null) {
2 26 Feb 07 jari 301             throw new AlgorithmException("parameter 'height' is null");
2 26 Feb 07 jari 302         }
2 26 Feb 07 jari 303     }
2 26 Feb 07 jari 304     
2 26 Feb 07 jari 305     /**
2 26 Feb 07 jari 306      * Creates a result tree.
2 26 Feb 07 jari 307      */
2 26 Feb 07 jari 308     private DefaultMutableTreeNode createResultTree(Experiment experiment, 
2 26 Feb 07 jari 309         AlgorithmData genes_result,GeneralInfo info) {
2 26 Feb 07 jari 310         DefaultMutableTreeNode root = new DefaultMutableTreeNode("TEASE");
2 26 Feb 07 jari 311         root.add(new DefaultMutableTreeNode(new LeafInfo("TEASE Tree", 
2 26 Feb 07 jari 312             createHCLViewer(experiment, genes_result, null, root))));
2 26 Feb 07 jari 313         if(genes_result != null)
2 26 Feb 07 jari 314             root.add(new DefaultMutableTreeNode(new LeafInfo("Gene Node Height Plot", 
2 26 Feb 07 jari 315                 new HCLNodeHeightGraph(getHCLTreeData(genes_result), true))));
2 26 Feb 07 jari 316         addGeneralInfo(root, info);
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     //for HCL only analysis
2 26 Feb 07 jari 322     private DefaultMutableTreeNode createResultTree(Experiment experiment, 
2 26 Feb 07 jari 323         AlgorithmData genes_result, AlgorithmData samples_result, GeneralInfo info) {
2 26 Feb 07 jari 324         DefaultMutableTreeNode root = new DefaultMutableTreeNode("TEASE");
2 26 Feb 07 jari 325         root.add(new DefaultMutableTreeNode(new LeafInfo("HCL Tree", 
2 26 Feb 07 jari 326             createHCLViewer(experiment, genes_result, samples_result, root))));
2 26 Feb 07 jari 327         if(genes_result != null)
2 26 Feb 07 jari 328             root.add(new DefaultMutableTreeNode(new LeafInfo("Gene Node Height Plot", 
2 26 Feb 07 jari 329                 new HCLNodeHeightGraph(getHCLTreeData(genes_result), true))));
2 26 Feb 07 jari 330         if(samples_result != null)
2 26 Feb 07 jari 331             root.add(new DefaultMutableTreeNode(new LeafInfo("Sample Node Height Plot", 
2 26 Feb 07 jari 332                 new HCLNodeHeightGraph(getHCLTreeData(samples_result), false))));
2 26 Feb 07 jari 333         addGeneralInfo(root, info);
2 26 Feb 07 jari 334         return root;
2 26 Feb 07 jari 335     }
2 26 Feb 07 jari 336     /**
2 26 Feb 07 jari 337      * Returns a hcl tree data from the specified AlgorithmData structure.
2 26 Feb 07 jari 338      */
2 26 Feb 07 jari 339     private HCLTreeData getHCLTreeData(AlgorithmData result) {
2 26 Feb 07 jari 340         if (result == null) {
2 26 Feb 07 jari 341             return null;
2 26 Feb 07 jari 342         }
2 26 Feb 07 jari 343         HCLTreeData data = new HCLTreeData();
2 26 Feb 07 jari 344         data.child_1_array = result.getIntArray("child-1-array");
2 26 Feb 07 jari 345         data.child_2_array = result.getIntArray("child-2-array");
2 26 Feb 07 jari 346         data.node_order = result.getIntArray("node-order");
2 26 Feb 07 jari 347         data.node_list = result.getIntArray("node-list");
2 26 Feb 07 jari 348         data.height = result.getMatrix("height").getRowPackedCopy();
2 26 Feb 07 jari 349
2 26 Feb 07 jari 350         //System.out.println("HCLGUI");
2 26 Feb 07 jari 351 //        String[] name = result.getMatrixNames(); //***************************************8
2 26 Feb 07 jari 352 //        for (int i = 0; i < name.lenfgth; i++)
2 26 Feb 07 jari 353 //          System.out.println(name[i]);
2 26 Feb 07 jari 354         return data;
2 26 Feb 07 jari 355     }
2 26 Feb 07 jari 356     
2 26 Feb 07 jari 357     /**
2 26 Feb 07 jari 358      * Creates an <code>TEASEViewer</code>.
2 26 Feb 07 jari 359      */
2 26 Feb 07 jari 360     private IViewer createHCLViewer(Experiment experiment, AlgorithmData genes_result, 
2 26 Feb 07 jari 361         AlgorithmData samples_result, DefaultMutableTreeNode root) {
2 26 Feb 07 jari 362 //      HCLTreeData sample = getHCLTreeData(samples_result);
2 26 Feb 07 jari 363 //      System.out.println();
2 26 Feb 07 jari 364 //      for (int i = 0; i < sample.child_1_array.length; i++)
2 26 Feb 07 jari 365 //        System.out.print(sample.child_1_array[i] + " ");
2 26 Feb 07 jari 366 //      System.out.println();
2 26 Feb 07 jari 367 //      for (int i = 0; i < sample.child_2_array.length; i++)
2 26 Feb 07 jari 368 //        System.out.print(sample.child_2_array[i] + " ");
2 26 Feb 07 jari 369 //      System.out.println();
2 26 Feb 07 jari 370 //      for (int i = 0; i < sample.height.length; i++)
2 26 Feb 07 jari 371 //        System.out.print(sample.height[i] + " ");
2 26 Feb 07 jari 372 //      System.out.println();
2 26 Feb 07 jari 373 //      for (int i = 0; i < sample.node_order.length; i++)
2 26 Feb 07 jari 374 //        System.out.print(sample.node_order[i] + " ");
2 26 Feb 07 jari 375         return new TEASEViewer(this.frame, experiment, null, getHCLTreeData(genes_result), 
2 26 Feb 07 jari 376             getHCLTreeData(samples_result), root, this.hclOnly, genes_result);
2 26 Feb 07 jari 377     }
2 26 Feb 07 jari 378     
2 26 Feb 07 jari 379     /**
2 26 Feb 07 jari 380      * Adds node with general iformation.
2 26 Feb 07 jari 381      */
2 26 Feb 07 jari 382     private void addGeneralInfo(DefaultMutableTreeNode root, GeneralInfo info) {
2 26 Feb 07 jari 383         DefaultMutableTreeNode node = new DefaultMutableTreeNode("General Information");
2 26 Feb 07 jari 384         node.add(new DefaultMutableTreeNode("Linkage Method: "+info.getMethodName()));
2 26 Feb 07 jari 385         node.add(new DefaultMutableTreeNode("Time: "+String.valueOf(info.time)+" ms"));
2 26 Feb 07 jari 386         node.add(new DefaultMutableTreeNode("Cluster Size: "+ info.getSize()));
2 26 Feb 07 jari 387         node.add(new DefaultMutableTreeNode(info.function));
2 26 Feb 07 jari 388         root.add(node);
2 26 Feb 07 jari 389     }
2 26 Feb 07 jari 390     
2 26 Feb 07 jari 391     
2 26 Feb 07 jari 392     /**
2 26 Feb 07 jari 393      * The class to listen to algorithm events and update logger
2 26 Feb 07 jari 394      */
2 26 Feb 07 jari 395     private class Listener extends DialogListener implements AlgorithmListener{
2 26 Feb 07 jari 396         String eventDescription;
2 26 Feb 07 jari 397         
2 26 Feb 07 jari 398         /** Handles algorithm events.
2 26 Feb 07 jari 399          * @param actionEvent event object
2 26 Feb 07 jari 400          */
2 26 Feb 07 jari 401         public void actionPerformed(java.awt.event.ActionEvent e) {
2 26 Feb 07 jari 402             String command = e.getActionCommand();
2 26 Feb 07 jari 403             if (command.equals("cancel-command")) {
2 26 Feb 07 jari 404                 System.out.println("abort execution");
2 26 Feb 07 jari 405                 stop = true;
2 26 Feb 07 jari 406                 algorithm.abort();
2 26 Feb 07 jari 407                 progress.dispose();
2 26 Feb 07 jari 408                 logger.dispose();
2 26 Feb 07 jari 409             }
2 26 Feb 07 jari 410         }
2 26 Feb 07 jari 411         
2 26 Feb 07 jari 412         /** 
2 26 Feb 07 jari 413          * Invoked when an algorithm progress value was changed.
2 26 Feb 07 jari 414          * @param event a <code>AlgorithmEvent</code> object.
2 26 Feb 07 jari 415          */
2 26 Feb 07 jari 416         public void valueChanged(AlgorithmEvent event) {
2 26 Feb 07 jari 417           
2 26 Feb 07 jari 418           switch(event.getId()) {
2 26 Feb 07 jari 419           case AlgorithmEvent.MONITOR_VALUE:
2 26 Feb 07 jari 420             logger.append(event.getDescription());
2 26 Feb 07 jari 421             break;
2 26 Feb 07 jari 422           case AlgorithmEvent.SET_UNITS:
2 26 Feb 07 jari 423               progress.setDescription("Resampling Analysis Iterations");
2 26 Feb 07 jari 424               progress.setValue(0);
2 26 Feb 07 jari 425               progress.setUnits(event.getIntValue());
2 26 Feb 07 jari 426               progress.show();
2 26 Feb 07 jari 427               java.awt.Point p = progress.getLocation();
2 26 Feb 07 jari 428               java.awt.Point loggerP = logger.getLocation();
2 26 Feb 07 jari 429               progress.setLocation(p.x, loggerP.y-progress.getHeight());
2 26 Feb 07 jari 430               break;
2 26 Feb 07 jari 431             case AlgorithmEvent.PROGRESS_VALUE:
2 26 Feb 07 jari 432                 progress.setValue(event.getIntValue());
2 26 Feb 07 jari 433                 progress.setDescription(event.getDescription());
2 26 Feb 07 jari 434                 break;
2 26 Feb 07 jari 435             case AlgorithmEvent.SET_VALUE:
2 26 Feb 07 jari 436               progress.setValue(event.getIntValue());
2 26 Feb 07 jari 437               break;
2 26 Feb 07 jari 438           }
2 26 Feb 07 jari 439       
2 26 Feb 07 jari 440 //            if(event.getId() == AlgorithmEvent.MONITOR_VALUE){
2 26 Feb 07 jari 441 //                logger.append(event.getDescription());
2 26 Feb 07 jari 442 //            } else {  //event to progress
2 26 Feb 07 jari 443 //                
2 26 Feb 07 jari 444 //                eventDescription = event.getDescription();
2 26 Feb 07 jari 445 //                
2 26 Feb 07 jari 446 //                if(eventDescription.equals("SET_VALUE")){
2 26 Feb 07 jari 447 //                    progress.setValue(event.getIntValue());
2 26 Feb 07 jari 448 //                    return;
2 26 Feb 07 jari 449 //                } else if(eventDescription.equals("SET_UNITS")){
2 26 Feb 07 jari 450 //                    progress.setDescription("Resampling Analysis Iterations");
2 26 Feb 07 jari 451 //                    progress.setValue(0);
2 26 Feb 07 jari 452 //                    progress.setUnits(event.getIntValue());
2 26 Feb 07 jari 453 //                    progress.show();
2 26 Feb 07 jari 454 //                    java.awt.Point p = progress.getLocation();
2 26 Feb 07 jari 455 //                    java.awt.Point loggerP = logger.getLocation();
2 26 Feb 07 jari 456 //                    progress.setLocation(p.x, loggerP.y-progress.getHeight());
2 26 Feb 07 jari 457 //                    return;
2 26 Feb 07 jari 458 //                } else {  //default dispose
2 26 Feb 07 jari 459 //                    progress.setVisible(false);
2 26 Feb 07 jari 460 //                    progress.dispose();
2 26 Feb 07 jari 461 //                }
2 26 Feb 07 jari 462 //            }
2 26 Feb 07 jari 463         }
2 26 Feb 07 jari 464   
2 26 Feb 07 jari 465         public void windowClosing(WindowEvent e) {
2 26 Feb 07 jari 466             algorithm.abort();
2 26 Feb 07 jari 467             progress.dispose();
2 26 Feb 07 jari 468         }
2 26 Feb 07 jari 469     }
2 26 Feb 07 jari 470     
2 26 Feb 07 jari 471     /**
2 26 Feb 07 jari 472      * General info structure.
2 26 Feb 07 jari 473      */
2 26 Feb 07 jari 474     public static class GeneralInfo {
2 26 Feb 07 jari 475         public long time;
2 26 Feb 07 jari 476         public int method;
2 26 Feb 07 jari 477         public String function;
2 26 Feb 07 jari 478         public String max;
2 26 Feb 07 jari 479         public String min;
2 26 Feb 07 jari 480         
2 26 Feb 07 jari 481         public String getMethodName() {
2 26 Feb 07 jari 482             return getMethodName(method);
2 26 Feb 07 jari 483         }
2 26 Feb 07 jari 484         
2 26 Feb 07 jari 485         public static String getMethodName(int method) {
2 26 Feb 07 jari 486             method = method == -1 ? 2 : method;
2 26 Feb 07 jari 487             return methods[method];
2 26 Feb 07 jari 488         }
2 26 Feb 07 jari 489         public String getSize() {
2 26 Feb 07 jari 490           return min + " - " + max;
2 26 Feb 07 jari 491         }
2 26 Feb 07 jari 492         
2 26 Feb 07 jari 493         private static String[] methods = {"average linkage", "complete linkage", "single linkage"};
2 26 Feb 07 jari 494     }
2 26 Feb 07 jari 495     
2 26 Feb 07 jari 496 //  private static void printDataResult(AlgorithmData data) {
2 26 Feb 07 jari 497 //    int[] nodes = data.getIntArray("node-list");
2 26 Feb 07 jari 498 //    String[] names = data.getStringArray("name-list");
2 26 Feb 07 jari 499 //    String outputFile = "C:/Documents and Settings/hwl2/Desktop/output.txt";
2 26 Feb 07 jari 500 //    AlgorithmData single;
2 26 Feb 07 jari 501 //    try {
2 26 Feb 07 jari 502 //      PrintWriter out = new PrintWriter(new FileOutputStream(outputFile));  //create output writer
2 26 Feb 07 jari 503 //          out.println("size of data set: " + names.length);
2 26 Feb 07 jari 504 //          out.println("number of iteration: " + nodes.length);
2 26 Feb 07 jari 505 //          out.println("\n\n");
2 26 Feb 07 jari 506 //      for (int i = 0; i < nodes.length; i++) {
2 26 Feb 07 jari 507 //        single = data.getResultAlgorithmData(new Integer(nodes[i]));
2 26 Feb 07 jari 508 //        printResult(single, names, out);
2 26 Feb 07 jari 509 //      }
2 26 Feb 07 jari 510 //      out.close();
2 26 Feb 07 jari 511 //    }catch (IOException e) {
2 26 Feb 07 jari 512 //      e.printStackTrace();
2 26 Feb 07 jari 513 //    }
2 26 Feb 07 jari 514 //  }
2 26 Feb 07 jari 515   
2 26 Feb 07 jari 516 //  private static void printResult(AlgorithmData result, String[] names, PrintWriter out) throws IOException{
2 26 Feb 07 jari 517 //    String[][] re = (String[][])result.getObjectMatrix("result-matrix");
2 26 Feb 07 jari 518 //    //System.out.println(indiData);
2 26 Feb 07 jari 519 //
2 26 Feb 07 jari 520 //    String[] sample = result.getStringArray("sample-list");  //print sample genes
2 26 Feb 07 jari 521 //    int[] indices = result.getIntArray("sample-indices");
2 26 Feb 07 jari 522 //    for (int j = 0; j < sample.length; j++) {
2 26 Feb 07 jari 523 //      out.print(sample[j]+ ": "+ names[indices[j]] + "\t");
2 26 Feb 07 jari 524 //    }
2 26 Feb 07 jari 525 //    out.println();
2 26 Feb 07 jari 526 //    
2 26 Feb 07 jari 527 //    String[] header = result.getStringArray("header-names");  //print header
2 26 Feb 07 jari 528 //    for (int j = 0; j < header.length; j++) {
2 26 Feb 07 jari 529 //      out.print(header[j]+ "\t");
2 26 Feb 07 jari 530 //    }
2 26 Feb 07 jari 531 //    out.println();
2 26 Feb 07 jari 532 //    
2 26 Feb 07 jari 533 //    for (int x = 0;  x< 5; x ++) {   //print categories
2 26 Feb 07 jari 534 //      for (int y = 0; y < re[x].length; y++)
2 26 Feb 07 jari 535 //        out.print(re[x][y]+ "\t");
2 26 Feb 07 jari 536 //      out.println();
2 26 Feb 07 jari 537 //    }
2 26 Feb 07 jari 538 //    out.println();
2 26 Feb 07 jari 539 //    out.println();
2 26 Feb 07 jari 540 //  }
2 26 Feb 07 jari 541 }