mev-4.0.01/source/org/tigr/microarray/mev/cluster/gui/impl/sota/SOTAGUI.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: SOTAGUI.java,v $
2 26 Feb 07 jari 7  * $Revision: 1.9 $
2 26 Feb 07 jari 8  * $Date: 2005/03/10 20:22:06 $
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.sota;
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.Arrays;
2 26 Feb 07 jari 17
2 26 Feb 07 jari 18 import javax.swing.JOptionPane;
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.Cluster;
2 26 Feb 07 jari 22 import org.tigr.microarray.mev.cluster.Node;
2 26 Feb 07 jari 23 import org.tigr.microarray.mev.cluster.NodeList;
2 26 Feb 07 jari 24 import org.tigr.microarray.mev.cluster.NodeValueList;
2 26 Feb 07 jari 25 import org.tigr.microarray.mev.cluster.algorithm.AbortException;
2 26 Feb 07 jari 26 import org.tigr.microarray.mev.cluster.algorithm.Algorithm;
2 26 Feb 07 jari 27 import org.tigr.microarray.mev.cluster.algorithm.AlgorithmData;
2 26 Feb 07 jari 28 import org.tigr.microarray.mev.cluster.algorithm.AlgorithmEvent;
2 26 Feb 07 jari 29 import org.tigr.microarray.mev.cluster.algorithm.AlgorithmException;
2 26 Feb 07 jari 30 import org.tigr.microarray.mev.cluster.algorithm.AlgorithmListener;
2 26 Feb 07 jari 31 import org.tigr.microarray.mev.cluster.algorithm.AlgorithmParameters;
2 26 Feb 07 jari 32 import org.tigr.microarray.mev.cluster.gui.Experiment;
2 26 Feb 07 jari 33 import org.tigr.microarray.mev.cluster.gui.IClusterGUI;
2 26 Feb 07 jari 34 import org.tigr.microarray.mev.cluster.gui.IData;
2 26 Feb 07 jari 35 import org.tigr.microarray.mev.cluster.gui.IDistanceMenu;
2 26 Feb 07 jari 36 import org.tigr.microarray.mev.cluster.gui.IFramework;
2 26 Feb 07 jari 37 import org.tigr.microarray.mev.cluster.gui.IViewer;
2 26 Feb 07 jari 38 import org.tigr.microarray.mev.cluster.gui.LeafInfo;
2 26 Feb 07 jari 39 import org.tigr.microarray.mev.cluster.gui.helpers.CentroidUserObject;
2 26 Feb 07 jari 40 import org.tigr.microarray.mev.cluster.gui.helpers.ClusterTableViewer;
2 26 Feb 07 jari 41 import org.tigr.microarray.mev.cluster.gui.helpers.ExperimentClusterTableViewer;
2 26 Feb 07 jari 42 import org.tigr.microarray.mev.cluster.gui.impl.dialogs.DialogListener;
2 26 Feb 07 jari 43 import org.tigr.microarray.mev.cluster.gui.impl.dialogs.Monitor;
2 26 Feb 07 jari 44 import org.tigr.microarray.mev.cluster.gui.impl.dialogs.Progress;
2 26 Feb 07 jari 45 import org.tigr.microarray.mev.cluster.gui.impl.hcl.HCLGUI;
2 26 Feb 07 jari 46 import org.tigr.microarray.mev.cluster.gui.impl.hcl.HCLInitDialog;
2 26 Feb 07 jari 47 import org.tigr.microarray.mev.cluster.gui.impl.hcl.HCLTreeData;
2 26 Feb 07 jari 48 import org.tigr.microarray.mev.cluster.gui.impl.hcl.HCLViewer;
2 26 Feb 07 jari 49 import org.tigr.microarray.mev.script.scriptGUI.IScriptGUI;
2 26 Feb 07 jari 50 import org.tigr.util.FloatMatrix;
2 26 Feb 07 jari 51
2 26 Feb 07 jari 52
2 26 Feb 07 jari 53 public class SOTAGUI implements IClusterGUI, IScriptGUI {
2 26 Feb 07 jari 54     
2 26 Feb 07 jari 55     private Algorithm algorithm;
2 26 Feb 07 jari 56     private IData frameData;
2 26 Feb 07 jari 57     private AlgorithmData data;
2 26 Feb 07 jari 58     private AlgorithmData result;
2 26 Feb 07 jari 59     private SOTATreeData sotaTreeData;
2 26 Feb 07 jari 60     private Progress progress;
2 26 Feb 07 jari 61     private Monitor monitor;
2 26 Feb 07 jari 62     private Listener listener;
2 26 Feb 07 jari 63     
2 26 Feb 07 jari 64     private Experiment experiment;
2 26 Feb 07 jari 65     private int[][] clusters;
2 26 Feb 07 jari 66     private FloatMatrix means;
2 26 Feb 07 jari 67     private FloatMatrix variances;
2 26 Feb 07 jari 68     private IDistanceMenu menu;
2 26 Feb 07 jari 69     private boolean clusterGenes;
2 26 Feb 07 jari 70     private int k = 0;
2 26 Feb 07 jari 71     
2 26 Feb 07 jari 72     /** Creates new SOTAGUI */
2 26 Feb 07 jari 73     public SOTAGUI() {
2 26 Feb 07 jari 74         listener = new Listener();
2 26 Feb 07 jari 75     }
2 26 Feb 07 jari 76     
2 26 Feb 07 jari 77     /**
2 26 Feb 07 jari 78      * This method should return a tree with calculation results or
2 26 Feb 07 jari 79      * null, if analysis start was canceled.
2 26 Feb 07 jari 80      *
2 26 Feb 07 jari 81      * @param framework the reference to <code>IFramework</code> implementation,
2 26 Feb 07 jari 82      *       which is used to obtain an initial analysis data and parameters.
2 26 Feb 07 jari 83      * @throws AlgorithmException if calculation was failed.
2 26 Feb 07 jari 84      * @throws AbortException if calculation was canceled.
2 26 Feb 07 jari 85      * @see IFramework
2 26 Feb 07 jari 86      */
2 26 Feb 07 jari 87     public DefaultMutableTreeNode execute(IFramework framework) throws AlgorithmException {
2 26 Feb 07 jari 88         // the default values
2 26 Feb 07 jari 89         
2 26 Feb 07 jari 90         
2 26 Feb 07 jari 91         int maxCycles = 10;
2 26 Feb 07 jari 92         int maxEpochsPerCycle = 1000;
2 26 Feb 07 jari 93         float epochStopCriteria = (float)0.0001;
2 26 Feb 07 jari 94         float maxTreeDiv  = (float) 0.01;
2 26 Feb 07 jari 95         float migFactor_w = (float)0.01;
2 26 Feb 07 jari 96         float migFactor_p = (float)0.005;
2 26 Feb 07 jari 97         float migFactor_s = (float)0.001;
2 26 Feb 07 jari 98         int neighborhoodLevel = 5;
2 26 Feb 07 jari 99         float pValue = (float)0.05;
2 26 Feb 07 jari 100         boolean useVariance;
2 26 Feb 07 jari 101         boolean runToMaxCycles;
2 26 Feb 07 jari 102         boolean setMaxClusterDiv;
2 26 Feb 07 jari 103         float maxClusterDiv;
2 26 Feb 07 jari 104         
2 26 Feb 07 jari 105         boolean calcClusterHCL;
2 26 Feb 07 jari 106         boolean calcFullTreeSampleHCL;
2 26 Feb 07 jari 107         
2 26 Feb 07 jari 108         frameData = framework.getData();
2 26 Feb 07 jari 109         menu = framework.getDistanceMenu();
2 26 Feb 07 jari 110         int function = menu.getDistanceFunction();
2 26 Feb 07 jari 111         
2 26 Feb 07 jari 112         if (function == Algorithm.DEFAULT) {        
2 26 Feb 07 jari 113             function = Algorithm.EUCLIDEAN;            
2 26 Feb 07 jari 114         }
2 26 Feb 07 jari 115         
2 26 Feb 07 jari 116         int distFactor = 1;
2 26 Feb 07 jari 117         
2 26 Feb 07 jari 118             if ((function==Algorithm.PEARSON)           ||
2 26 Feb 07 jari 119         (function==Algorithm.PEARSONUNCENTERED) ||
2 26 Feb 07 jari 120         (function==Algorithm.PEARSONSQARED)     ||
2 26 Feb 07 jari 121         (function==Algorithm.COSINE)            ||
2 26 Feb 07 jari 122         (function==Algorithm.COVARIANCE)        ||
2 26 Feb 07 jari 123         (function==Algorithm.DOTPRODUCT)        ||
2 26 Feb 07 jari 124         (function==Algorithm.SPEARMANRANK)      ||
2 26 Feb 07 jari 125         (function==Algorithm.KENDALLSTAU)) {
2 26 Feb 07 jari 126             distFactor = -1;
2 26 Feb 07 jari 127         } else {
2 26 Feb 07 jari 128             distFactor = 1;
2 26 Feb 07 jari 129         }
2 26 Feb 07 jari 130         
2 26 Feb 07 jari 131         SOTAInitDialog sota_dialog = new SOTAInitDialog(framework.getFrame(), distFactor, menu.getFunctionName(function), menu.isAbsoluteDistance());
2 26 Feb 07 jari 132         
2 26 Feb 07 jari 133         //   maxCycles, maxEpochsPerCycle, maxTreeDiv, epochDivFluxLimit, migFactor_w, migFactor_p, migFactor_s);
2 26 Feb 07 jari 134         
2 26 Feb 07 jari 135         if (sota_dialog.showModal() != JOptionPane.OK_OPTION) {
2 26 Feb 07 jari 136             return null;
2 26 Feb 07 jari 137         }
2 26 Feb 07 jari 138         
2 26 Feb 07 jari 139         try{
2 26 Feb 07 jari 140             clusterGenes = sota_dialog.getBoolean("clusterGenes");
2 26 Feb 07 jari 141             maxCycles = sota_dialog.getInt("maxCycles");
2 26 Feb 07 jari 142             maxEpochsPerCycle = sota_dialog.getInt("maxEpochsPerCycle");
2 26 Feb 07 jari 143             epochStopCriteria = sota_dialog.getFloat("epochStopCriteria");
2 26 Feb 07 jari 144             
2 26 Feb 07 jari 145             
2 26 Feb 07 jari 146             migFactor_w = sota_dialog.getFloat("migFactor_w");
2 26 Feb 07 jari 147             migFactor_p = sota_dialog.getFloat("migFactor_p");
2 26 Feb 07 jari 148             migFactor_s = sota_dialog.getFloat("migFactor_s");
2 26 Feb 07 jari 149             neighborhoodLevel = sota_dialog.getInt("neighborhood-level");
2 26 Feb 07 jari 150             useVariance = sota_dialog.getBoolean("useVariance");
2 26 Feb 07 jari 151             if(useVariance)
2 26 Feb 07 jari 152                 pValue = sota_dialog.getFloat("pValue");
2 26 Feb 07 jari 153             else
2 26 Feb 07 jari 154                 maxTreeDiv = sota_dialog.getFloat("maxTreeDiv");
2 26 Feb 07 jari 155             runToMaxCycles = sota_dialog.getBoolean("runToMaxCycles");
2 26 Feb 07 jari 156             setMaxClusterDiv = sota_dialog.getBoolean("setMaxClusterDiv");
2 26 Feb 07 jari 157             maxClusterDiv = sota_dialog.getFloat("maxClusterDiv");
2 26 Feb 07 jari 158             calcFullTreeSampleHCL = false;
2 26 Feb 07 jari 159             calcClusterHCL = sota_dialog.getBoolean("calcClusterHCL");
2 26 Feb 07 jari 160             
2 26 Feb 07 jari 161             if(migFactor_w <=0 || migFactor_w <=0 || migFactor_w <=0 ){
2 26 Feb 07 jari 162                 JOptionPane.showMessageDialog(framework.getFrame(), "Migration weights should be > 0", "Error", JOptionPane.ERROR_MESSAGE);
2 26 Feb 07 jari 163                 return null;
2 26 Feb 07 jari 164             }
2 26 Feb 07 jari 165             
2 26 Feb 07 jari 166             if(pValue <= 0){
2 26 Feb 07 jari 167                 JOptionPane.showMessageDialog(framework.getFrame(), "p-value should be > 0", "Error", JOptionPane.ERROR_MESSAGE);
2 26 Feb 07 jari 168                 return null;
2 26 Feb 07 jari 169             }
2 26 Feb 07 jari 170             
2 26 Feb 07 jari 171             
2 26 Feb 07 jari 172         } catch (NumberFormatException e){
2 26 Feb 07 jari 173             JOptionPane.showMessageDialog(framework.getFrame(), "Invalid input parameters!", "Error", JOptionPane.ERROR_MESSAGE);
2 26 Feb 07 jari 174             return null;
2 26 Feb 07 jari 175         }
2 26 Feb 07 jari 176         
2 26 Feb 07 jari 177         if (maxCycles < 1) {
2 26 Feb 07 jari 178             JOptionPane.showMessageDialog(framework.getFrame(), "Number of cycles (number of clusters) must be greater than 0!", "Error", JOptionPane.ERROR_MESSAGE);
2 26 Feb 07 jari 179             return null;
2 26 Feb 07 jari 180         }
2 26 Feb 07 jari 181         if (maxEpochsPerCycle < 1) {
2 26 Feb 07 jari 182             JOptionPane.showMessageDialog(framework.getFrame(), "Number of epochs per cycle must be greater than 0!", "Error", JOptionPane.ERROR_MESSAGE);
2 26 Feb 07 jari 183             return null;
2 26 Feb 07 jari 184         }
2 26 Feb 07 jari 185         
2 26 Feb 07 jari 186         // hcl init
2 26 Feb 07 jari 187         int hcl_method = 0;
2 26 Feb 07 jari 188         boolean hcl_samples = false;
2 26 Feb 07 jari 189         boolean hcl_genes = false;
2 26 Feb 07 jari 190         int hcl_function = sota_dialog.getDistanceMetric();
2 26 Feb 07 jari 191         boolean hcl_absolute = sota_dialog.isAbsoluteDistance();
2 26 Feb 07 jari 192         
2 26 Feb 07 jari 193         if (calcClusterHCL || calcFullTreeSampleHCL) {
2 26 Feb 07 jari 194             HCLInitDialog hcl_dialog = new HCLInitDialog(framework.getFrame(), menu.getFunctionName(sota_dialog.getDistanceMetric()), sota_dialog.isAbsoluteDistance(), true);
2 26 Feb 07 jari 195             if (hcl_dialog.showModal() != JOptionPane.OK_OPTION) {
2 26 Feb 07 jari 196                 return null;
2 26 Feb 07 jari 197             }
2 26 Feb 07 jari 198             hcl_method = hcl_dialog.getMethod();
2 26 Feb 07 jari 199             hcl_samples = hcl_dialog.isClusterExperiments();
2 26 Feb 07 jari 200             hcl_genes = hcl_dialog.isClusterGenes();
2 26 Feb 07 jari 201             hcl_function = hcl_dialog.getDistanceMetric();
2 26 Feb 07 jari 202             hcl_absolute = hcl_dialog.getAbsoluteSelection();
2 26 Feb 07 jari 203         }
2 26 Feb 07 jari 204         
2 26 Feb 07 jari 205         this.experiment = framework.getData().getExperiment();
2 26 Feb 07 jari 206         Listener listener = new Listener();
2 26 Feb 07 jari 207         
2 26 Feb 07 jari 208         try {
2 26 Feb 07 jari 209             algorithm = framework.getAlgorithmFactory().getAlgorithm("SOTA");
2 26 Feb 07 jari 210             algorithm.addAlgorithmListener(listener);
2 26 Feb 07 jari 211             ;
2 26 Feb 07 jari 212           /*  DISABLE DIVERISTY MONITOR
2 26 Feb 07 jari 213            *
2 26 Feb 07 jari 214             this.monitor = new Monitor(framework.getFrame(), "Reallocations", 25, 100, 210.0/100, maxCycles);
2 26 Feb 07 jari 215             this.monitor.setStepXFactor((int)Math.floor(245/maxCycles));
2 26 Feb 07 jari 216             this.monitor.update(100);
2 26 Feb 07 jari 217             this.monitor.show();
2 26 Feb 07 jari 218            */
2 26 Feb 07 jari 219             this.progress = new Progress(framework.getFrame(), "Calculating clusters", listener);
2 26 Feb 07 jari 220             this.progress.show();
2 26 Feb 07 jari 221             data = new AlgorithmData();
2 26 Feb 07 jari 222             FloatMatrix matrix = experiment.getMatrix();
2 26 Feb 07 jari 223             if(!clusterGenes)
2 26 Feb 07 jari 224                 matrix = matrix.transpose();
2 26 Feb 07 jari 225             data.addMatrix("experiment", matrix);
2 26 Feb 07 jari 226             
2 26 Feb 07 jari 227             //from dialog
2 26 Feb 07 jari 228             data.addParam("distance-absolute", String.valueOf(sota_dialog.isAbsoluteDistance()));
2 26 Feb 07 jari 229
2 26 Feb 07 jari 230             //get distance from dialog
2 26 Feb 07 jari 231             function = sota_dialog.getDistanceMetric();
2 26 Feb 07 jari 232             data.addParam("distance-function", String.valueOf(function));
2 26 Feb 07 jari 233         
2 26 Feb 07 jari 234             data.addParam("sota-cluster-genes", String.valueOf(clusterGenes));
2 26 Feb 07 jari 235             data.addParam("max-number-of-cycles", String.valueOf(maxCycles));
2 26 Feb 07 jari 236             data.addParam("max-epochs-per-cycle", String.valueOf(maxEpochsPerCycle));
2 26 Feb 07 jari 237             data.addParam("epoch-improvement-cutoff", String.valueOf(epochStopCriteria));
2 26 Feb 07 jari 238             data.addParam("end-training-diversity", String.valueOf(maxTreeDiv));
2 26 Feb 07 jari 239             data.addParam("use-cluster-variance", String.valueOf(useVariance));
2 26 Feb 07 jari 240             data.addParam("pValue", String.valueOf(pValue));
2 26 Feb 07 jari 241             data.addParam("mig_w", String.valueOf(migFactor_w));
2 26 Feb 07 jari 242             data.addParam("mig_p", String.valueOf(migFactor_p));
2 26 Feb 07 jari 243             data.addParam("mig_s", String.valueOf(migFactor_s));
2 26 Feb 07 jari 244             data.addParam("neighborhood-level", String.valueOf(neighborhoodLevel));
2 26 Feb 07 jari 245             data.addParam("run-to-max-cycles", String.valueOf(runToMaxCycles));
2 26 Feb 07 jari 246             data.addParam("set-max-cluster-div", String.valueOf(setMaxClusterDiv));
2 26 Feb 07 jari 247             data.addParam("maxClusterDiv", String.valueOf(maxClusterDiv));
2 26 Feb 07 jari 248             data.addParam("calc-full-tree-hcl", String.valueOf(calcFullTreeSampleHCL));
2 26 Feb 07 jari 249             data.addParam("calc-cluster-hcl", String.valueOf(calcClusterHCL));
2 26 Feb 07 jari 250             
2 26 Feb 07 jari 251             // hcl parameters
2 26 Feb 07 jari 252             if (calcClusterHCL || calcFullTreeSampleHCL) {
2 26 Feb 07 jari 253                 data.addParam("calcClusterHCL", String.valueOf(calcClusterHCL));
2 26 Feb 07 jari 254                 data.addParam("calcFullTreeHCL", String.valueOf(calcFullTreeSampleHCL));
2 26 Feb 07 jari 255                 data.addParam("method-linkage", String.valueOf(hcl_method));
2 26 Feb 07 jari 256                 data.addParam("calculate-genes", String.valueOf(hcl_genes));
2 26 Feb 07 jari 257                 data.addParam("calculate-experiments", String.valueOf(hcl_samples));
2 26 Feb 07 jari 258                 data.addParam("hcl-distance-function", String.valueOf(hcl_function));
2 26 Feb 07 jari 259                 data.addParam("hcl-distance-absolute", String.valueOf(hcl_absolute));
2 26 Feb 07 jari 260             }
2 26 Feb 07 jari 261             
2 26 Feb 07 jari 262             long start = System.currentTimeMillis();
2 26 Feb 07 jari 263             result = algorithm.execute(data);
2 26 Feb 07 jari 264             long time = System.currentTimeMillis() - start;
2 26 Feb 07 jari 265             // getting the results
2 26 Feb 07 jari 266             Cluster result_cluster = result.getCluster("cluster");
2 26 Feb 07 jari 267             Cluster hcl_clusters = result.getCluster("hcl-result-clusters");
2 26 Feb 07 jari 268             Cluster hcl_sample_tree = result.getCluster("full-tree-sample-HCL");
2 26 Feb 07 jari 269             
2 26 Feb 07 jari 270             NodeList nodeList = result_cluster.getNodeList();
2 26 Feb 07 jari 271             k = nodeList.getSize();
2 26 Feb 07 jari 272             this.clusters = new int[k][];
2 26 Feb 07 jari 273             
2 26 Feb 07 jari 274             for (int i=0; i<k; i++) {
2 26 Feb 07 jari 275                 clusters[i] = nodeList.getNode(i).getProbesIndexes();
2 26 Feb 07 jari 276             }
2 26 Feb 07 jari 277             
2 26 Feb 07 jari 278             means = result.getMatrix("centroid-matrix");
2 26 Feb 07 jari 279             variances = result.getMatrix("cluster-variances");
2 26 Feb 07 jari 280             
2 26 Feb 07 jari 281             
2 26 Feb 07 jari 282             //gather parameters
2 26 Feb 07 jari 283             GeneralInfo info = new GeneralInfo();
2 26 Feb 07 jari 284             
2 26 Feb 07 jari 285             //results
2 26 Feb 07 jari 286             info.iterations = result.getParams().getInt("cycles")-1;
2 26 Feb 07 jari 287             info.clusters = info.iterations + 1;
2 26 Feb 07 jari 288             info.time = time;
2 26 Feb 07 jari 289             
2 26 Feb 07 jari 290             //menu param
2 26 Feb 07 jari 291             info.function = menu.getFunctionName(function);
2 26 Feb 07 jari 292             
2 26 Feb 07 jari 293             //Growth Term Crit.
2 26 Feb 07 jari 294             info.maxCycles = maxCycles;
2 26 Feb 07 jari 295             info.maxEpochsPerCycle = maxEpochsPerCycle;
2 26 Feb 07 jari 296             info.diversityCutoff = maxTreeDiv;
2 26 Feb 07 jari 297             info.epochStopCriteria = epochStopCriteria;
2 26 Feb 07 jari 298             info.runToMaxCycles = runToMaxCycles;
2 26 Feb 07 jari 299             
2 26 Feb 07 jari 300             //Cell Migration/Neighborhood Parmeters
2 26 Feb 07 jari 301             info.migW = migFactor_w;
2 26 Feb 07 jari 302             info.migP = migFactor_p;
2 26 Feb 07 jari 303             info.migS = migFactor_s;
2 26 Feb 07 jari 304             info.neighborhoodLevel = neighborhoodLevel;
2 26 Feb 07 jari 305             
2 26 Feb 07 jari 306             //Cell Division Criteria
2 26 Feb 07 jari 307             info.useCellDiversity = !useVariance;
2 26 Feb 07 jari 308             info.useCellVariability = useVariance;
2 26 Feb 07 jari 309             if(useVariance){
2 26 Feb 07 jari 310                 info.pValue = pValue;
2 26 Feb 07 jari 311                 info.computedVarCutoff = result.getParams().getFloat("computed-var-cutoff");
2 26 Feb 07 jari 312             }
2 26 Feb 07 jari 313             //HCL Options
2 26 Feb 07 jari 314             info.hcl_on_clusters = calcClusterHCL;
2 26 Feb 07 jari 315             info.hcl_on_samples_on_all_genes = calcFullTreeSampleHCL;
2 26 Feb 07 jari 316             info.hcl_genes_in_clusters = hcl_genes;
2 26 Feb 07 jari 317             info.hcl_samples_in_clusters = hcl_samples;
2 26 Feb 07 jari 318             info.hcl = (info.hcl_on_clusters || info.hcl_on_samples_on_all_genes);
2 26 Feb 07 jari 319             info.hcl_method = hcl_method;
2 26 Feb 07 jari 320             
2 26 Feb 07 jari 321             loadSotaTreeData();
2 26 Feb 07 jari 322             
2 26 Feb 07 jari 323             //return createResultTree(sota, result, result_cluster, hcl_clusters, hcl_sample_tree, info);
2 26 Feb 07 jari 324             return createResultTree(hcl_clusters, hcl_sample_tree, info);
2 26 Feb 07 jari 325             
2 26 Feb 07 jari 326         } finally {
2 26 Feb 07 jari 327             if (algorithm != null) {
2 26 Feb 07 jari 328                 algorithm.removeAlgorithmListener(listener);
2 26 Feb 07 jari 329             }
2 26 Feb 07 jari 330             if (progress != null) {
2 26 Feb 07 jari 331                 progress.dispose();
2 26 Feb 07 jari 332             }
2 26 Feb 07 jari 333             /*if (monitor != null) {  NOT USING MONITOR
2 26 Feb 07 jari 334                 monitor.dispose();
2 26 Feb 07 jari 335             }
2 26 Feb 07 jari 336              */
2 26 Feb 07 jari 337         }
2 26 Feb 07 jari 338     }
2 26 Feb 07 jari 339     
2 26 Feb 07 jari 340     
2 26 Feb 07 jari 341     
2 26 Feb 07 jari 342     
2 26 Feb 07 jari 343     /*
2 26 Feb 07 jari 344      * Scripting Support
2 26 Feb 07 jari 345      */
2 26 Feb 07 jari 346     public AlgorithmData getScriptParameters(IFramework framework) {
2 26 Feb 07 jari 347         int maxCycles = 10;
2 26 Feb 07 jari 348         int maxEpochsPerCycle = 1000;
2 26 Feb 07 jari 349         float epochStopCriteria = (float)0.0001;
2 26 Feb 07 jari 350         float maxTreeDiv  = (float) 0.01;
2 26 Feb 07 jari 351         float migFactor_w = (float)0.01;
2 26 Feb 07 jari 352         float migFactor_p = (float)0.005;
2 26 Feb 07 jari 353         float migFactor_s = (float)0.001;
2 26 Feb 07 jari 354         int neighborhoodLevel = 5;
2 26 Feb 07 jari 355         float pValue = (float)0.05;
2 26 Feb 07 jari 356         boolean useVariance;
2 26 Feb 07 jari 357         boolean runToMaxCycles;
2 26 Feb 07 jari 358         boolean setMaxClusterDiv;
2 26 Feb 07 jari 359         float maxClusterDiv;
2 26 Feb 07 jari 360         
2 26 Feb 07 jari 361         boolean calcClusterHCL;
2 26 Feb 07 jari 362         boolean calcFullTreeSampleHCL;
2 26 Feb 07 jari 363         
2 26 Feb 07 jari 364         frameData = framework.getData();
2 26 Feb 07 jari 365         
2 26 Feb 07 jari 366         menu = framework.getDistanceMenu();
2 26 Feb 07 jari 367         int function = menu.getDistanceFunction();
2 26 Feb 07 jari 368         
2 26 Feb 07 jari 369         if (function == Algorithm.DEFAULT) {        
2 26 Feb 07 jari 370             function = Algorithm.EUCLIDEAN;            
2 26 Feb 07 jari 371         }
2 26 Feb 07 jari 372         
2 26 Feb 07 jari 373         int distFactor = 1;
2 26 Feb 07 jari 374         
2 26 Feb 07 jari 375         if ((function==Algorithm.PEARSON)           ||
2 26 Feb 07 jari 376         (function==Algorithm.PEARSONUNCENTERED) ||
2 26 Feb 07 jari 377         (function==Algorithm.PEARSONSQARED)     ||
2 26 Feb 07 jari 378         (function==Algorithm.COSINE)            ||
2 26 Feb 07 jari 379         (function==Algorithm.COVARIANCE)        ||
2 26 Feb 07 jari 380         (function==Algorithm.DOTPRODUCT)        ||
2 26 Feb 07 jari 381         (function==Algorithm.SPEARMANRANK)      ||
2 26 Feb 07 jari 382         (function==Algorithm.KENDALLSTAU)) {
2 26 Feb 07 jari 383             distFactor = -1;
2 26 Feb 07 jari 384         } else {
2 26 Feb 07 jari 385             distFactor = 1;
2 26 Feb 07 jari 386         }
2 26 Feb 07 jari 387  
2 26 Feb 07 jari 388         SOTAInitDialog sota_dialog = new SOTAInitDialog(framework.getFrame(), distFactor, menu.getFunctionName(function), menu.isAbsoluteDistance());
2 26 Feb 07 jari 389         
2 26 Feb 07 jari 390         if (sota_dialog.showModal() != JOptionPane.OK_OPTION) {
2 26 Feb 07 jari 391             return null;
2 26 Feb 07 jari 392         }
2 26 Feb 07 jari 393         
2 26 Feb 07 jari 394         try{
2 26 Feb 07 jari 395             clusterGenes = sota_dialog.getBoolean("clusterGenes");
2 26 Feb 07 jari 396             maxCycles = sota_dialog.getInt("maxCycles");
2 26 Feb 07 jari 397             maxEpochsPerCycle = sota_dialog.getInt("maxEpochsPerCycle");
2 26 Feb 07 jari 398             epochStopCriteria = sota_dialog.getFloat("epochStopCriteria");
2 26 Feb 07 jari 399             
2 26 Feb 07 jari 400             
2 26 Feb 07 jari 401             migFactor_w = sota_dialog.getFloat("migFactor_w");
2 26 Feb 07 jari 402             migFactor_p = sota_dialog.getFloat("migFactor_p");
2 26 Feb 07 jari 403             migFactor_s = sota_dialog.getFloat("migFactor_s");
2 26 Feb 07 jari 404             neighborhoodLevel = sota_dialog.getInt("neighborhood-level");
2 26 Feb 07 jari 405             useVariance = sota_dialog.getBoolean("useVariance");
2 26 Feb 07 jari 406             if(useVariance)
2 26 Feb 07 jari 407                 pValue = sota_dialog.getFloat("pValue");
2 26 Feb 07 jari 408             else
2 26 Feb 07 jari 409                 maxTreeDiv = sota_dialog.getFloat("maxTreeDiv");
2 26 Feb 07 jari 410             runToMaxCycles = sota_dialog.getBoolean("runToMaxCycles");
2 26 Feb 07 jari 411             setMaxClusterDiv = sota_dialog.getBoolean("setMaxClusterDiv");
2 26 Feb 07 jari 412             maxClusterDiv = sota_dialog.getFloat("maxClusterDiv");
2 26 Feb 07 jari 413             calcFullTreeSampleHCL = false;
2 26 Feb 07 jari 414             calcClusterHCL = sota_dialog.getBoolean("calcClusterHCL");
2 26 Feb 07 jari 415             
2 26 Feb 07 jari 416             if(migFactor_w <=0 || migFactor_w <=0 || migFactor_w <=0 ){
2 26 Feb 07 jari 417                 JOptionPane.showMessageDialog(framework.getFrame(), "Migration weights should be > 0", "Error", JOptionPane.ERROR_MESSAGE);
2 26 Feb 07 jari 418                 return null;
2 26 Feb 07 jari 419             }
2 26 Feb 07 jari 420             
2 26 Feb 07 jari 421             if(pValue <= 0){
2 26 Feb 07 jari 422                 JOptionPane.showMessageDialog(framework.getFrame(), "p-value should be > 0", "Error", JOptionPane.ERROR_MESSAGE);
2 26 Feb 07 jari 423                 return null;
2 26 Feb 07 jari 424             }
2 26 Feb 07 jari 425             
2 26 Feb 07 jari 426             
2 26 Feb 07 jari 427         } catch (NumberFormatException e){
2 26 Feb 07 jari 428             JOptionPane.showMessageDialog(framework.getFrame(), "Invalid input parameters!", "Error", JOptionPane.ERROR_MESSAGE);
2 26 Feb 07 jari 429             return null;
2 26 Feb 07 jari 430         }
2 26 Feb 07 jari 431         
2 26 Feb 07 jari 432         if (maxCycles < 1) {
2 26 Feb 07 jari 433             JOptionPane.showMessageDialog(framework.getFrame(), "Number of cycles (number of clusters) must be greater than 0!", "Error", JOptionPane.ERROR_MESSAGE);
2 26 Feb 07 jari 434             return null;
2 26 Feb 07 jari 435         }
2 26 Feb 07 jari 436         if (maxEpochsPerCycle < 1) {
2 26 Feb 07 jari 437             JOptionPane.showMessageDialog(framework.getFrame(), "Number of epochs per cycle must be greater than 0!", "Error", JOptionPane.ERROR_MESSAGE);
2 26 Feb 07 jari 438             return null;
2 26 Feb 07 jari 439         }
2 26 Feb 07 jari 440         
2 26 Feb 07 jari 441         // hcl init
2 26 Feb 07 jari 442         int hcl_method = 0;
2 26 Feb 07 jari 443         boolean hcl_samples = false;
2 26 Feb 07 jari 444         boolean hcl_genes = false;
2 26 Feb 07 jari 445         
2 26 Feb 07 jari 446         int hcl_function = sota_dialog.getDistanceMetric();
2 26 Feb 07 jari 447         boolean hcl_absolute = sota_dialog.isAbsoluteDistance();
2 26 Feb 07 jari 448         
2 26 Feb 07 jari 449         if (calcClusterHCL || calcFullTreeSampleHCL) {
2 26 Feb 07 jari 450             HCLInitDialog hcl_dialog = new HCLInitDialog(framework.getFrame(), menu.getFunctionName(sota_dialog.getDistanceMetric()), sota_dialog.isAbsoluteDistance(), true);
2 26 Feb 07 jari 451             if (hcl_dialog.showModal() != JOptionPane.OK_OPTION) {
2 26 Feb 07 jari 452                 return null;
2 26 Feb 07 jari 453             }
2 26 Feb 07 jari 454             hcl_method = hcl_dialog.getMethod();
2 26 Feb 07 jari 455             hcl_samples = hcl_dialog.isClusterExperiments();
2 26 Feb 07 jari 456             hcl_genes = hcl_dialog.isClusterGenes();
2 26 Feb 07 jari 457             hcl_function = hcl_dialog.getDistanceMetric();
2 26 Feb 07 jari 458             hcl_absolute = hcl_dialog.getAbsoluteSelection();
2 26 Feb 07 jari 459         }
2 26 Feb 07 jari 460         
2 26 Feb 07 jari 461         this.experiment = framework.getData().getExperiment();
2 26 Feb 07 jari 462         Listener listener = new Listener();
2 26 Feb 07 jari 463         
2 26 Feb 07 jari 464         try {
2 26 Feb 07 jari 465             algorithm = framework.getAlgorithmFactory().getAlgorithm("SOTA");
2 26 Feb 07 jari 466             algorithm.addAlgorithmListener(listener);
2 26 Feb 07 jari 467             
2 26 Feb 07 jari 468             data = new AlgorithmData();
2 26 Feb 07 jari 469             
2 26 Feb 07 jari 470             data.addParam("distance-absolute", String.valueOf(sota_dialog.isAbsoluteDistance()));
2 26 Feb 07 jari 471             
2 26 Feb 07 jari 472             //from dialog
2 26 Feb 07 jari 473             function = sota_dialog.getDistanceMetric();
2 26 Feb 07 jari 474             data.addParam("distance-function", String.valueOf(function));
2 26 Feb 07 jari 475             data.addParam("sota-cluster-genes", String.valueOf(clusterGenes));
2 26 Feb 07 jari 476             data.addParam("max-number-of-cycles", String.valueOf(maxCycles));
2 26 Feb 07 jari 477             data.addParam("max-epochs-per-cycle", String.valueOf(maxEpochsPerCycle));
2 26 Feb 07 jari 478             data.addParam("epoch-improvement-cutoff", String.valueOf(epochStopCriteria));
2 26 Feb 07 jari 479             data.addParam("end-training-diversity", String.valueOf(maxTreeDiv));
2 26 Feb 07 jari 480             data.addParam("use-cluster-variance", String.valueOf(useVariance));
2 26 Feb 07 jari 481             data.addParam("pValue", String.valueOf(pValue));
2 26 Feb 07 jari 482             data.addParam("mig_w", String.valueOf(migFactor_w));
2 26 Feb 07 jari 483             data.addParam("mig_p", String.valueOf(migFactor_p));
2 26 Feb 07 jari 484             data.addParam("mig_s", String.valueOf(migFactor_s));
2 26 Feb 07 jari 485             data.addParam("neighborhood-level", String.valueOf(neighborhoodLevel));
2 26 Feb 07 jari 486             data.addParam("run-to-max-cycles", String.valueOf(runToMaxCycles));
2 26 Feb 07 jari 487             data.addParam("set-max-cluster-div", String.valueOf(setMaxClusterDiv));
2 26 Feb 07 jari 488             data.addParam("maxClusterDiv", String.valueOf(maxClusterDiv));
2 26 Feb 07 jari 489             data.addParam("calc-full-tree-hcl", String.valueOf(calcFullTreeSampleHCL));
2 26 Feb 07 jari 490             data.addParam("calc-cluster-hcl", String.valueOf(calcClusterHCL));
2 26 Feb 07 jari 491             
2 26 Feb 07 jari 492             // hcl parameters
2 26 Feb 07 jari 493             if (calcClusterHCL || calcFullTreeSampleHCL) {
2 26 Feb 07 jari 494                 data.addParam("calcClusterHCL", String.valueOf(calcClusterHCL));
2 26 Feb 07 jari 495                 data.addParam("calcFullTreeHCL", String.valueOf(calcFullTreeSampleHCL));
2 26 Feb 07 jari 496                 data.addParam("method-linkage", String.valueOf(hcl_method));
2 26 Feb 07 jari 497                 data.addParam("calculate-genes", String.valueOf(hcl_genes));
2 26 Feb 07 jari 498                 data.addParam("calculate-experiments", String.valueOf(hcl_samples));
2 26 Feb 07 jari 499                 data.addParam("hcl-distance-function", String.valueOf(hcl_function));
2 26 Feb 07 jari 500                 data.addParam("hcl-distance-absolute", String.valueOf(hcl_absolute));
2 26 Feb 07 jari 501             }
2 26 Feb 07 jari 502             
2 26 Feb 07 jari 503             // alg name
2 26 Feb 07 jari 504             data.addParam("name", "SOTA");
2 26 Feb 07 jari 505             
2 26 Feb 07 jari 506             // alg type
2 26 Feb 07 jari 507             if(clusterGenes)
2 26 Feb 07 jari 508                 data.addParam("alg-type", "cluster-genes");
2 26 Feb 07 jari 509             else
2 26 Feb 07 jari 510                 data.addParam("alg-type", "cluster-experiments");
2 26 Feb 07 jari 511             
2 26 Feb 07 jari 512             // output class
2 26 Feb 07 jari 513             if(clusterGenes)
2 26 Feb 07 jari 514                 data.addParam("output-class", "multi-gene-cluster-output");
2 26 Feb 07 jari 515             else
2 26 Feb 07 jari 516                 data.addParam("output-class", "multi-experiment-cluster-output");
2 26 Feb 07 jari 517             
2 26 Feb 07 jari 518             //output nodes
2 26 Feb 07 jari 519             String [] outputNodes = new String[1];
2 26 Feb 07 jari 520             outputNodes[0] = "Multi-cluster";
2 26 Feb 07 jari 521             data.addStringArray("output-nodes", outputNodes);
2 26 Feb 07 jari 522             
2 26 Feb 07 jari 523         } catch (Exception e) {  }
2 26 Feb 07 jari 524         return data;
2 26 Feb 07 jari 525     }
2 26 Feb 07 jari 526     
2 26 Feb 07 jari 527     
2 26 Feb 07 jari 528     public DefaultMutableTreeNode executeScript(IFramework framework, AlgorithmData algData, Experiment experiment) throws AlgorithmException {
2 26 Feb 07 jari 529         this.experiment = experiment;
2 26 Feb 07 jari 530         this.frameData = framework.getData();
2 26 Feb 07 jari 531         this.clusterGenes = algData.getParams().getBoolean("sota-cluster-genes");
2 26 Feb 07 jari 532                     
2 26 Feb 07 jari 533         Listener listener = new Listener();
2 26 Feb 07 jari 534         
2 26 Feb 07 jari 535         try {
2 26 Feb 07 jari 536             algorithm = framework.getAlgorithmFactory().getAlgorithm("SOTA");
2 26 Feb 07 jari 537             algorithm.addAlgorithmListener(listener);
2 26 Feb 07 jari 538             if(clusterGenes)
2 26 Feb 07 jari 539                 algData.addMatrix("experiment", experiment.getMatrix());
2 26 Feb 07 jari 540             else
2 26 Feb 07 jari 541                 algData.addMatrix("experiment", experiment.getMatrix().transpose());                
2 26 Feb 07 jari 542             
2 26 Feb 07 jari 543             this.progress = new Progress(framework.getFrame(), "Calculating clusters", listener);
2 26 Feb 07 jari 544             this.progress.show();
2 26 Feb 07 jari 545             
2 26 Feb 07 jari 546             long start = System.currentTimeMillis();
2 26 Feb 07 jari 547             result = algorithm.execute(algData);
2 26 Feb 07 jari 548             long time = System.currentTimeMillis() - start;
2 26 Feb 07 jari 549             // getting the results
2 26 Feb 07 jari 550             Cluster result_cluster = result.getCluster("cluster");
2 26 Feb 07 jari 551             Cluster hcl_clusters = result.getCluster("hcl-result-clusters");
2 26 Feb 07 jari 552             Cluster hcl_sample_tree = result.getCluster("full-tree-sample-HCL");
2 26 Feb 07 jari 553             
2 26 Feb 07 jari 554             NodeList nodeList = result_cluster.getNodeList();
2 26 Feb 07 jari 555             k = nodeList.getSize();
2 26 Feb 07 jari 556             this.clusters = new int[k][];
2 26 Feb 07 jari 557             
2 26 Feb 07 jari 558             for (int i=0; i<k; i++) {
2 26 Feb 07 jari 559                 clusters[i] = nodeList.getNode(i).getProbesIndexes();
2 26 Feb 07 jari 560             }
2 26 Feb 07 jari 561             
2 26 Feb 07 jari 562             means = result.getMatrix("centroid-matrix");
2 26 Feb 07 jari 563             variances = result.getMatrix("cluster-variances");
2 26 Feb 07 jari 564             
2 26 Feb 07 jari 565             
2 26 Feb 07 jari 566             //gather parameters
2 26 Feb 07 jari 567             GeneralInfo info = new GeneralInfo();
2 26 Feb 07 jari 568             
2 26 Feb 07 jari 569             //results
2 26 Feb 07 jari 570             info.iterations = result.getParams().getInt("cycles")-1;
2 26 Feb 07 jari 571             info.clusters = info.iterations + 1;
2 26 Feb 07 jari 572             info.time = time;
2 26 Feb 07 jari 573             
2 26 Feb 07 jari 574             AlgorithmParameters params = algData.getParams();
2 26 Feb 07 jari 575             
2 26 Feb 07 jari 576       
2 26 Feb 07 jari 577             //menu param
2 26 Feb 07 jari 578             info.function = framework.getDistanceMenu().getFunctionName(params.getInt("distance-function"));
2 26 Feb 07 jari 579             
2 26 Feb 07 jari 580             //Growth Term Crit.
2 26 Feb 07 jari 581             info.maxCycles = params.getInt("max-number-of-cycles");
2 26 Feb 07 jari 582             info.maxEpochsPerCycle = params.getInt("max-epochs-per-cycle");
2 26 Feb 07 jari 583             info.diversityCutoff = params.getFloat("end-training-diversity");
2 26 Feb 07 jari 584             info.epochStopCriteria = params.getFloat("epoch-improvement-cutoff");
2 26 Feb 07 jari 585             info.runToMaxCycles = params.getBoolean("run-to-max-cycles");
2 26 Feb 07 jari 586             
2 26 Feb 07 jari 587             //Cell Migration/Neighborhood Parmeters
2 26 Feb 07 jari 588             info.migW = params.getFloat("mig_w");
2 26 Feb 07 jari 589             info.migP = params.getFloat("mig_p");
2 26 Feb 07 jari 590             info.migS = params.getFloat("mig_s");
2 26 Feb 07 jari 591             info.neighborhoodLevel = params.getInt("neighborhood-level");
2 26 Feb 07 jari 592             
2 26 Feb 07 jari 593             //Cell Division Criteria
2 26 Feb 07 jari 594             info.useCellDiversity = !params.getBoolean("use-cluster-variance");
2 26 Feb 07 jari 595             info.useCellVariability = params.getBoolean("use-cluster-variance");
2 26 Feb 07 jari 596             if(info.useCellVariability){
2 26 Feb 07 jari 597                 info.pValue = params.getFloat("pValue");
2 26 Feb 07 jari 598                 info.computedVarCutoff = result.getParams().getFloat("computed-var-cutoff");
2 26 Feb 07 jari 599             }
2 26 Feb 07 jari 600             
2 26 Feb 07 jari 601             //HCL Options
2 26 Feb 07 jari 602             info.hcl_on_clusters = params.getBoolean("calc-cluster-hcl");
2 26 Feb 07 jari 603             info.hcl_on_samples_on_all_genes = params.getBoolean("calc-full-tree-hcl");
2 26 Feb 07 jari 604             info.hcl_genes_in_clusters = params.getBoolean("calculate-genes");
2 26 Feb 07 jari 605             info.hcl_samples_in_clusters = params.getBoolean("calculate-experiments");
2 26 Feb 07 jari 606             info.hcl = (info.hcl_on_clusters || info.hcl_on_samples_on_all_genes);
2 26 Feb 07 jari 607             if(info.hcl)
2 26 Feb 07 jari 608                 info.hcl_method = params.getInt("method-linkage");
2 26 Feb 07 jari 609             
2 26 Feb 07 jari 610             loadSotaTreeData();
2 26 Feb 07 jari 611             
2 26 Feb 07 jari 612             //return createResultTree(sota, result, result_cluster, hcl_clusters, hcl_sample_tree, info);
2 26 Feb 07 jari 613             return createResultTree(hcl_clusters, hcl_sample_tree, info);
2 26 Feb 07 jari 614             
2 26 Feb 07 jari 615         } finally {
2 26 Feb 07 jari 616             if (algorithm != null) {
2 26 Feb 07 jari 617                 algorithm.removeAlgorithmListener(listener);
2 26 Feb 07 jari 618             }
2 26 Feb 07 jari 619             if (progress != null) {
2 26 Feb 07 jari 620                 progress.dispose();
2 26 Feb 07 jari 621             }
2 26 Feb 07 jari 622             /*if (monitor != null) {  NOT USING MONITOR
2 26 Feb 07 jari 623                 monitor.dispose();
2 26 Feb 07 jari 624             }
2 26 Feb 07 jari 625              */
2 26 Feb 07 jari 626         }
2 26 Feb 07 jari 627     }
2 26 Feb 07 jari 628     
2 26 Feb 07 jari 629     
2 26 Feb 07 jari 630     /**
2 26 Feb 07 jari 631      * Loads SOTATreeData result data structure
2 26 Feb 07 jari 632      */
2 26 Feb 07 jari 633     private void loadSotaTreeData(){
2 26 Feb 07 jari 634         sotaTreeData = new SOTATreeData();
2 26 Feb 07 jari 635         sotaTreeData.nodeHeights = result.getMatrix("node-heights").getRowPackedCopy();
2 26 Feb 07 jari 636         sotaTreeData.leftChild = result.getIntArray("left-child");
2 26 Feb 07 jari 637         sotaTreeData.rightChild = result.getIntArray("right-child");
2 26 Feb 07 jari 638         sotaTreeData.nodePopulation = result.getIntArray("node-population");
2 26 Feb 07 jari 639         
2 26 Feb 07 jari 640         sotaTreeData.centroidMatrix = result.getMatrix("centroid-matrix");
2 26 Feb 07 jari 641         sotaTreeData.clusterDiversity = result.getMatrix("cluster-diversity");
2 26 Feb 07 jari 642         sotaTreeData.clusterPopulation = result.getIntArray("cluster-population");
2 26 Feb 07 jari 643         sotaTreeData.function = result.getParams().getInt("distance-function");
2 26 Feb 07 jari 644         sotaTreeData.factor = result.getParams().getFloat("factor");
2 26 Feb 07 jari 645         sotaTreeData.absolute = result.getParams().getBoolean("distance-absolute", true);
2 26 Feb 07 jari 646     }
2 26 Feb 07 jari 647     
2 26 Feb 07 jari 648     /**
2 26 Feb 07 jari 649      * Creates a result tree to be inserted into the framework analysis node.
2 26 Feb 07 jari 650      */
2 26 Feb 07 jari 651     private DefaultMutableTreeNode createResultTree( Cluster hcl_clusters, Cluster hcl_sample_tree, GeneralInfo info) {
2 26 Feb 07 jari 652         DefaultMutableTreeNode root;
2 26 Feb 07 jari 653         if(this.clusterGenes)
2 26 Feb 07 jari 654             root = new DefaultMutableTreeNode("SOTA - genes");
2 26 Feb 07 jari 655         else
2 26 Feb 07 jari 656             root = new DefaultMutableTreeNode("SOTA - samples");
2 26 Feb 07 jari 657         addResultNodes(root, hcl_clusters, hcl_sample_tree, info);
2 26 Feb 07 jari 658         return root;
2 26 Feb 07 jari 659     }
2 26 Feb 07 jari 660     
2 26 Feb 07 jari 661     /**
2 26 Feb 07 jari 662      * Adds result nodes into the tree root.
2 26 Feb 07 jari 663      */
2 26 Feb 07 jari 664     private void addResultNodes(DefaultMutableTreeNode root, Cluster hcl_clusters, Cluster hcl_sample_tree, GeneralInfo info) {
2 26 Feb 07 jari 665         
2 26 Feb 07 jari 666         SOTAGeneTreeViewer sotaViewer = null;
2 26 Feb 07 jari 667         SOTAExperimentTreeViewer sotaExpViewer;
2 26 Feb 07 jari 668         DefaultMutableTreeNode expressionImageNode = null;
2 26 Feb 07 jari 669         if(clusterGenes){
2 26 Feb 07 jari 670             sotaViewer = addSotaGeneViewer(root, hcl_sample_tree);
2 26 Feb 07 jari 671             expressionImageNode = addExpressionImages(root);
2 26 Feb 07 jari 672             sotaViewer.associateExpressionImageNode(expressionImageNode);  //allows viewr to have a node handle to exp images
2 26 Feb 07 jari 673         }
2 26 Feb 07 jari 674         else{
2 26 Feb 07 jari 675             sotaExpViewer = addSotaExperimentViewer(root, hcl_sample_tree);
2 26 Feb 07 jari 676             expressionImageNode = addExpressionImages(root);
2 26 Feb 07 jari 677             sotaExpViewer.associateExpressionImageNode(expressionImageNode);  //allows viewr to have a node handle to exp images
2 26 Feb 07 jari 678         }
2 26 Feb 07 jari 679         addHierarchicalTrees(root, hcl_clusters, info);
2 26 Feb 07 jari 680         addCentroidViews(root);
2 26 Feb 07 jari 681         addTableViews(root);
2 26 Feb 07 jari 682         addDiversityViewer(root);
2 26 Feb 07 jari 683         addClusterInfo(root);
2 26 Feb 07 jari 684         addGeneralInfo(root, info);
2 26 Feb 07 jari 685     }
2 26 Feb 07 jari 686     
2 26 Feb 07 jari 687     
2 26 Feb 07 jari 688     private void addTableViews(DefaultMutableTreeNode root) {
2 26 Feb 07 jari 689         DefaultMutableTreeNode node = new DefaultMutableTreeNode("Table views");
2 26 Feb 07 jari 690         IViewer tabViewer;
2 26 Feb 07 jari 691         if (clusterGenes)
2 26 Feb 07 jari 692             tabViewer = new ClusterTableViewer(this.experiment, this.clusters, this.frameData);
2 26 Feb 07 jari 693         else
2 26 Feb 07 jari 694             tabViewer = new ExperimentClusterTableViewer(this.experiment, this.clusters, this.frameData);
2 26 Feb 07 jari 695         //return; //placeholder for ExptClusterTableViewer
2 26 Feb 07 jari 696         
2 26 Feb 07 jari 697         for (int i=0; i<this.clusters.length; i++) {
2 26 Feb 07 jari 698             node.add(new DefaultMutableTreeNode(new LeafInfo("Cluster "+String.valueOf(i+1), tabViewer, new Integer(i))));
2 26 Feb 07 jari 699         }
2 26 Feb 07 jari 700         root.add(node);
2 26 Feb 07 jari 701         //return node;
2 26 Feb 07 jari 702     }
2 26 Feb 07 jari 703     
2 26 Feb 07 jari 704     private SOTAGeneTreeViewer addSotaGeneViewer(DefaultMutableTreeNode root, Cluster hcl_sample_tree){
2 26 Feb 07 jari 705         SOTAGeneTreeViewer viewer = new SOTAGeneTreeViewer(experiment, sotaTreeData, hcl_sample_tree, this.clusters);
2 26 Feb 07 jari 706         if(viewer != null){
2 26 Feb 07 jari 707             root.add(new DefaultMutableTreeNode(  new LeafInfo("SOTA Dendogram", viewer)  ));
2 26 Feb 07 jari 708         }
2 26 Feb 07 jari 709         return viewer;
2 26 Feb 07 jari 710     }
2 26 Feb 07 jari 711     
2 26 Feb 07 jari 712     private SOTAExperimentTreeViewer addSotaExperimentViewer(DefaultMutableTreeNode root, Cluster hcl_sample_tree){
2 26 Feb 07 jari 713         SOTAExperimentTreeViewer viewer = new SOTAExperimentTreeViewer(experiment, sotaTreeData, this.clusters);
2 26 Feb 07 jari 714         
2 26 Feb 07 jari 715         if(viewer != null){
2 26 Feb 07 jari 716             root.add(new DefaultMutableTreeNode(  new LeafInfo("SOTA Dendogram", viewer)  ));
2 26 Feb 07 jari 717         }
2 26 Feb 07 jari 718         return viewer;
2 26 Feb 07 jari 719     }
2 26 Feb 07 jari 720     
2 26 Feb 07 jari 721     private void addDiversityViewer(DefaultMutableTreeNode root){
2 26 Feb 07 jari 722         if(result != null)
2 26 Feb 07 jari 723             root.add(new DefaultMutableTreeNode( new LeafInfo("SOTA Diversity History", new SOTADiversityViewer(result.getMatrix("cycle-diversity"))  )));
2 26 Feb 07 jari 724     }
2 26 Feb 07 jari 725     
2 26 Feb 07 jari 726     /**
2 26 Feb 07 jari 727      * Adds nodes to display clusters data.
2 26 Feb 07 jari 728      */
2 26 Feb 07 jari 729     private DefaultMutableTreeNode addExpressionImages(DefaultMutableTreeNode root) {
2 26 Feb 07 jari 730         DefaultMutableTreeNode node = new DefaultMutableTreeNode("Expression Images");
2 26 Feb 07 jari 731         IViewer expViewer;
2 26 Feb 07 jari 732         if(clusterGenes)
2 26 Feb 07 jari 733             expViewer= new SOTAExperimentViewer(this.experiment, this.clusters, result.getMatrix("centroid-matrix"), result.getMatrix("cluster-diversity"), sotaTreeData);
2 26 Feb 07 jari 734         else
2 26 Feb 07 jari 735             expViewer= new SOTAExperimentViewer(this.experiment, this.clusters, result.getMatrix("centroid-matrix"), result.getMatrix("cluster-diversity"), sotaTreeData, this.clusterGenes);
2 26 Feb 07 jari 736         
2 26 Feb 07 jari 737         for (int i=0; i<this.clusters.length; i++) {
2 26 Feb 07 jari 738             node.add(new DefaultMutableTreeNode(new LeafInfo("Cluster "+String.valueOf(i+1), expViewer, new Integer(i))));
2 26 Feb 07 jari 739         }
2 26 Feb 07 jari 740         root.add(node);
2 26 Feb 07 jari 741         return node;
2 26 Feb 07 jari 742     }
2 26 Feb 07 jari 743     
2 26 Feb 07 jari 744     /**
2 26 Feb 07 jari 745      * Adds nodes to display hierarchical trees.
2 26 Feb 07 jari 746      */
2 26 Feb 07 jari 747     private void addHierarchicalTrees(DefaultMutableTreeNode root, Cluster result_cluster, GeneralInfo info) {
2 26 Feb 07 jari 748         if (!info.hcl) {
2 26 Feb 07 jari 749             return;
2 26 Feb 07 jari 750         }
2 26 Feb 07 jari 751         DefaultMutableTreeNode node = new DefaultMutableTreeNode("Hierarchical Trees");
2 26 Feb 07 jari 752         NodeList nodeList = result_cluster.getNodeList();
2 26 Feb 07 jari 753         int [][] clusters = null;
2 26 Feb 07 jari 754        
2 26 Feb 07 jari 755         if(!this.clusterGenes){
2 26 Feb 07 jari 756             clusters = new int[k][];
2 26 Feb 07 jari 757             for (int i=0; i<k; i++) {
2 26 Feb 07 jari 758                 clusters[i] = nodeList.getNode(i).getFeaturesIndexes();
2 26 Feb 07 jari 759             }
2 26 Feb 07 jari 760             if(info.hcl_samples_in_clusters)
2 26 Feb 07 jari 761                 clusters = getOrderedIndices(nodeList, clusters, info.hcl_genes_in_clusters);
2 26 Feb 07 jari 762         }
2 26 Feb 07 jari 763         for (int i=0; i<nodeList.getSize(); i++) {
2 26 Feb 07 jari 764             if(this.clusterGenes)
2 26 Feb 07 jari 765                 node.add(new DefaultMutableTreeNode(new LeafInfo("Cluster "+String.valueOf(i+1), createHCLViewer(nodeList.getNode(i), info, null))));
2 26 Feb 07 jari 766             else
2 26 Feb 07 jari 767                 node.add(new DefaultMutableTreeNode(new LeafInfo("Cluster "+String.valueOf(i+1), createHCLViewer(nodeList.getNode(i), info, clusters), new Integer(i))));
2 26 Feb 07 jari 768         }
2 26 Feb 07 jari 769         root.add(node);
2 26 Feb 07 jari 770     }
2 26 Feb 07 jari 771     
2 26 Feb 07 jari 772     /**
2 26 Feb 07 jari 773      * Creates an <code>HCLViewer</code>.
2 26 Feb 07 jari 774      */
2 26 Feb 07 jari 775     private IViewer createHCLViewer(Node clusterNode, GeneralInfo info, int [][] sampleClusters) {  
2 26 Feb 07 jari 776         HCLTreeData genes_result = info.hcl_genes_in_clusters ? getResult(clusterNode, 0) : null;
2 26 Feb 07 jari 777         HCLTreeData samples_result = info.hcl_samples_in_clusters ? getResult(clusterNode, info.hcl_genes_in_clusters ? 4 : 0) : null;
2 26 Feb 07 jari 778         if(this.clusterGenes)
2 26 Feb 07 jari 779             return new HCLViewer(this.experiment, clusterNode.getFeaturesIndexes(), genes_result, samples_result);
2 26 Feb 07 jari 780         else
2 26 Feb 07 jari 781             return new HCLViewer(this.experiment, clusterNode.getFeaturesIndexes(), genes_result, samples_result, sampleClusters, true);
2 26 Feb 07 jari 782     }
2 26 Feb 07 jari 783     
2 26 Feb 07 jari 784     
2 26 Feb 07 jari 785     /**
2 26 Feb 07 jari 786      * Returns a hcl tree data from the specified cluster node.
2 26 Feb 07 jari 787      */
2 26 Feb 07 jari 788     private HCLTreeData getResult(Node clusterNode, int pos) {
2 26 Feb 07 jari 789         HCLTreeData data = new HCLTreeData();
2 26 Feb 07 jari 790         NodeValueList valueList = clusterNode.getValues();
2 26 Feb 07 jari 791         data.child_1_array = (int[])valueList.getNodeValue(pos).value;
2 26 Feb 07 jari 792         data.child_2_array = (int[])valueList.getNodeValue(pos+1).value;
2 26 Feb 07 jari 793         data.node_order = (int[])valueList.getNodeValue(pos+2).value;
2 26 Feb 07 jari 794         data.height = (float[])valueList.getNodeValue(pos+3).value;
2 26 Feb 07 jari 795         return data;
2 26 Feb 07 jari 796     }
2 26 Feb 07 jari 797     
2 26 Feb 07 jari 798     /**
2 26 Feb 07 jari 799      * Adds node with cluster information.
2 26 Feb 07 jari 800      */
2 26 Feb 07 jari 801     private void addClusterInfo(DefaultMutableTreeNode root) {
2 26 Feb 07 jari 802         DefaultMutableTreeNode node = new DefaultMutableTreeNode("Cluster Information");
2 26 Feb 07 jari 803         if(this.clusterGenes)
2 26 Feb 07 jari 804             node.add(new DefaultMutableTreeNode(new LeafInfo("Genes in Clusters (#,%)", new SOTAInfoViewer(this.clusters, this.experiment.getNumberOfGenes()))));
2 26 Feb 07 jari 805         else
2 26 Feb 07 jari 806             node.add(new DefaultMutableTreeNode(new LeafInfo("Samples in Clusters (#,%)", new SOTAInfoViewer(this.clusters, this.experiment.getNumberOfSamples(), false))));
2 26 Feb 07 jari 807         root.add(node);
2 26 Feb 07 jari 808     }
2 26 Feb 07 jari 809     
2 26 Feb 07 jari 810     
2 26 Feb 07 jari 811     
2 26 Feb 07 jari 812     /**
2 26 Feb 07 jari 813      * Adds nodes to display centroid charts.
2 26 Feb 07 jari 814      */
2 26 Feb 07 jari 815     private void addCentroidViews(DefaultMutableTreeNode root) {
2 26 Feb 07 jari 816         DefaultMutableTreeNode centroidNode = new DefaultMutableTreeNode("Centroid Graphs");
2 26 Feb 07 jari 817         DefaultMutableTreeNode expressionNode = new DefaultMutableTreeNode("Expression Graphs");
2 26 Feb 07 jari 818         
2 26 Feb 07 jari 819         SOTACentroidViewer centroidViewer;
2 26 Feb 07 jari 820         SOTAExperimentCentroidViewer expCentroidViewer;
2 26 Feb 07 jari 821         if(clusterGenes){
2 26 Feb 07 jari 822             centroidViewer = new SOTACentroidViewer(this.experiment, clusters);
2 26 Feb 07 jari 823             centroidViewer.setMeans(this.means.A);
2 26 Feb 07 jari 824             centroidViewer.setVariances(this.variances.A);
2 26 Feb 07 jari 825             for (int i=0; i<this.clusters.length; i++) {
2 26 Feb 07 jari 826                 centroidNode.add(new DefaultMutableTreeNode(new LeafInfo("Cluster "+String.valueOf(i+1), centroidViewer, new CentroidUserObject(i, CentroidUserObject.VARIANCES_MODE))));
2 26 Feb 07 jari 827                 expressionNode.add(new DefaultMutableTreeNode(new LeafInfo("Cluster "+String.valueOf(i+1), centroidViewer, new CentroidUserObject(i, CentroidUserObject.VALUES_MODE))));
2 26 Feb 07 jari 828             }
2 26 Feb 07 jari 829             
2 26 Feb 07 jari 830             SOTACentroidsViewer centroidsViewer = new SOTACentroidsViewer(this.experiment, clusters);
2 26 Feb 07 jari 831             centroidsViewer.setMeans(this.means.A);
2 26 Feb 07 jari 832             centroidsViewer.setVariances(this.variances.A);
2 26 Feb 07 jari 833             
2 26 Feb 07 jari 834             centroidNode.add(new DefaultMutableTreeNode(new LeafInfo("All Clusters", centroidsViewer, new Integer(CentroidUserObject.VARIANCES_MODE))));
2 26 Feb 07 jari 835             expressionNode.add(new DefaultMutableTreeNode(new LeafInfo("All Clusters", centroidsViewer, new Integer(CentroidUserObject.VALUES_MODE))));
2 26 Feb 07 jari 836         }
2 26 Feb 07 jari 837         else{
2 26 Feb 07 jari 838             expCentroidViewer = new SOTAExperimentCentroidViewer(this.experiment, clusters);
2 26 Feb 07 jari 839             
2 26 Feb 07 jari 840             expCentroidViewer.setMeans(this.means.A);
2 26 Feb 07 jari 841             expCentroidViewer.setVariances(this.variances.A);
2 26 Feb 07 jari 842             for (int i=0; i<this.clusters.length; i++) {
2 26 Feb 07 jari 843                 centroidNode.add(new DefaultMutableTreeNode(new LeafInfo("Cluster "+String.valueOf(i+1), expCentroidViewer, new CentroidUserObject(i, CentroidUserObject.VARIANCES_MODE))));
2 26 Feb 07 jari 844                 expressionNode.add(new DefaultMutableTreeNode(new LeafInfo("Cluster "+String.valueOf(i+1), expCentroidViewer, new CentroidUserObject(i, CentroidUserObject.VALUES_MODE))));
2 26 Feb 07 jari 845             }
2 26 Feb 07 jari 846             SOTAExperimentCentroidsViewer expCentroidsViewer = new SOTAExperimentCentroidsViewer(this.experiment, clusters);
2 26 Feb 07 jari 847             expCentroidsViewer.setMeans(this.means.A);
2 26 Feb 07 jari 848             expCentroidsViewer.setVariances(this.variances.A);
2 26 Feb 07 jari 849             
2 26 Feb 07 jari 850             centroidNode.add(new DefaultMutableTreeNode(new LeafInfo("All Clusters", expCentroidsViewer, new Integer(CentroidUserObject.VARIANCES_MODE))));
2 26 Feb 07 jari 851             expressionNode.add(new DefaultMutableTreeNode(new LeafInfo("All Clusters", expCentroidsViewer, new Integer(CentroidUserObject.VALUES_MODE))));
2 26 Feb 07 jari 852         }
2 26 Feb 07 jari 853         root.add(centroidNode);
2 26 Feb 07 jari 854         root.add(expressionNode);
2 26 Feb 07 jari 855     }
2 26 Feb 07 jari 856     
2 26 Feb 07 jari 857     /**
2 26 Feb 07 jari 858      * Adds node with general iformation.
2 26 Feb 07 jari 859      */
2 26 Feb 07 jari 860     private void addGeneralInfo(DefaultMutableTreeNode root, GeneralInfo info) {
2 26 Feb 07 jari 861         DefaultMutableTreeNode node = new DefaultMutableTreeNode("General Information");
2 26 Feb 07 jari 862         
2 26 Feb 07 jari 863         DefaultMutableTreeNode gtc = new DefaultMutableTreeNode("Growth Termination Criteria");
2 26 Feb 07 jari 864         gtc.add(new DefaultMutableTreeNode("Max. cycles: "+String.valueOf(info.maxCycles)));
2 26 Feb 07 jari 865         gtc.add(new DefaultMutableTreeNode("Max. epochs/cycle: "+String.valueOf(info.maxEpochsPerCycle)));
2 26 Feb 07 jari 866         if(info.useCellDiversity)
2 26 Feb 07 jari 867             gtc.add(new DefaultMutableTreeNode("Max. cell div: "+String.valueOf(info.diversityCutoff)));
2 26 Feb 07 jari 868         else
2 26 Feb 07 jari 869             gtc.add(new DefaultMutableTreeNode("Max. cell div: n/a (used variability and p value)"));
2 26 Feb 07 jari 870         
2 26 Feb 07 jari 871         
2 26 Feb 07 jari 872         gtc.add(new DefaultMutableTreeNode("Min. epoch error change: "+String.valueOf(info.epochStopCriteria)));
2 26 Feb 07 jari 873         gtc.add(new DefaultMutableTreeNode("Run max. cycles (unrestricted): "+String.valueOf(info.runToMaxCycles)));
2 26 Feb 07 jari 874         
2 26 Feb 07 jari 875         DefaultMutableTreeNode mp = new DefaultMutableTreeNode("Migration Parameters");
2 26 Feb 07 jari 876         mp.add(new DefaultMutableTreeNode("Winning cell mig. factor: "+String.valueOf(info.migW)));
2 26 Feb 07 jari 877         mp.add(new DefaultMutableTreeNode("Parent cell mig. factor: "+String.valueOf(info.migP)));
2 26 Feb 07 jari 878         mp.add(new DefaultMutableTreeNode("Sister cell mig. factor: "+String.valueOf(info.migS)));
2 26 Feb 07 jari 879         mp.add(new DefaultMutableTreeNode("Neighborhood level: "+String.valueOf(info.neighborhoodLevel)));
2 26 Feb 07 jari 880         
2 26 Feb 07 jari 881         DefaultMutableTreeNode cdc = new DefaultMutableTreeNode("Cell Division Criteria");
2 26 Feb 07 jari 882         
2 26 Feb 07 jari 883         cdc.add(new DefaultMutableTreeNode("Diversity division criteria: "+String.valueOf(info.useCellDiversity)));
2 26 Feb 07 jari 884         cdc.add(new DefaultMutableTreeNode("Variability division criteria: "+String.valueOf(info.useCellVariability)));
2 26 Feb 07 jari 885         if(info.useCellVariability){
2 26 Feb 07 jari 886             cdc.add(new DefaultMutableTreeNode("Variablity pValue: "+String.valueOf(info.pValue)));
2 26 Feb 07 jari 887             cdc.add(new DefaultMutableTreeNode("Computed Cell Var. Cutoff: "+String.valueOf(info.computedVarCutoff)));
2 26 Feb 07 jari 888         }
2 26 Feb 07 jari 889         else{
2 26 Feb 07 jari 890             cdc.add(new DefaultMutableTreeNode("Variablity pValue: n/a"));
2 26 Feb 07 jari 891             cdc.add(new DefaultMutableTreeNode("Computed cell var. cutoff: n/a"));
2 26 Feb 07 jari 892         }
2 26 Feb 07 jari 893         
2 26 Feb 07 jari 894         DefaultMutableTreeNode ho = new DefaultMutableTreeNode("HCL Options");
2 26 Feb 07 jari 895         if(info.hcl_on_samples_on_all_genes || info.hcl_on_clusters){
2 26 Feb 07 jari 896             ho.add(new DefaultMutableTreeNode("HCL on samples (over all genes): "+String.valueOf(info.hcl_on_samples_on_all_genes)));
2 26 Feb 07 jari 897             ho.add(new DefaultMutableTreeNode("HCL on samples in clusters: "+String.valueOf(info.hcl_samples_in_clusters)));
2 26 Feb 07 jari 898             ho.add(new DefaultMutableTreeNode("HCL on genes in clusters: "+String.valueOf(info.hcl_genes_in_clusters)));
2 26 Feb 07 jari 899             ho.add(new DefaultMutableTreeNode("Tree - "+info.getMethodName()));
2 26 Feb 07 jari 900         }
2 26 Feb 07 jari 901         
2 26 Feb 07 jari 902         node.add(gtc);
2 26 Feb 07 jari 903         node.add(mp);
2 26 Feb 07 jari 904         node.add(cdc);
2 26 Feb 07 jari 905         
2 26 Feb 07 jari 906         if(info.hcl_on_samples_on_all_genes || info.hcl_on_clusters)
2 26 Feb 07 jari 907             node.add(ho);
2 26 Feb 07 jari 908         
2 26 Feb 07 jari 909         //results
2 26 Feb 07 jari 910         node.add(new DefaultMutableTreeNode("number of clusters: "+String.valueOf(info.clusters)));
2 26 Feb 07 jari 911         node.add(new DefaultMutableTreeNode("Cycles run: "+String.valueOf(info.iterations)));
2 26 Feb 07 jari 912         node.add(new DefaultMutableTreeNode(info.function));
2 26 Feb 07 jari 913         node.add(new DefaultMutableTreeNode("Time: "+String.valueOf(info.time)+" ms"));
2 26 Feb 07 jari 914         
2 26 Feb 07 jari 915         root.add(node);
2 26 Feb 07 jari 916     }
2 26 Feb 07 jari 917     
2 26 Feb 07 jari 918     /***************************************************************************************
2 26 Feb 07 jari 919      * Code to order sample clustering results based on HCL runs.  sampleClusters contain an array
2 26 Feb 07 jari 920      * of sample indices for each experiment cluster.  Note that these indicies are ordered in
2 26 Feb 07 jari 921      * an order which matches HCL input matrix sample order so that HCL results (node-order) can
2 26 Feb 07 jari 922      * be used to order leaf indices to match HCL samples results
2 26 Feb 07 jari 923      */
2 26 Feb 07 jari 924     private int [][] getOrderedIndices(NodeList nodeList, int [][] sampleClusters, boolean calcGeneHCL){
2 26 Feb 07 jari 925         HCLTreeData result;
2 26 Feb 07 jari 926         for(int i = 0; i < sampleClusters.length ; i++){
2 26 Feb 07 jari 927             if(sampleClusters[i].length > 0){
2 26 Feb 07 jari 928                 result = getResult(nodeList.getNode(i), calcGeneHCL ? 4 : 0);  //get sample Result
2 26 Feb 07 jari 929                 sampleClusters[i] = getSampleOrder(result, sampleClusters[i]);
2 26 Feb 07 jari 930             }
2 26 Feb 07 jari 931         }
2 26 Feb 07 jari 932         return sampleClusters;
2 26 Feb 07 jari 933     }
2 26 Feb 07 jari 934     
2 26 Feb 07 jari 935     private int[] getSampleOrder(HCLTreeData result, int[] indices) {
2 26 Feb 07 jari 936         return getLeafOrder(result.node_order, result.child_1_array, result.child_2_array, indices);
2 26 Feb 07 jari 937     }
2 26 Feb 07 jari 938     
2 26 Feb 07 jari 939     private int[] getLeafOrder(int[] nodeOrder, int[] child1, int[] child2, int[] indices) {
2 26 Feb 07 jari 940         int[] leafOrder = new int[nodeOrder.length];
2 26 Feb 07 jari 941         Arrays.fill(leafOrder, -1);
2 26 Feb 07 jari 942         fillLeafOrder(leafOrder, child1, child2, 0, child1.length-2, indices);
2 26 Feb 07 jari 943         return leafOrder;
2 26 Feb 07 jari 944     }
2 26 Feb 07 jari 945     
2 26 Feb 07 jari 946     private int fillLeafOrder(int[] leafOrder, int[] child1, int[] child2, int pos, int index, int[] indices) {
2 26 Feb 07 jari 947         if (child1[index] != -1) {
2 26 Feb 07 jari 948             pos = fillLeafOrder(leafOrder, child1, child2, pos, child1[index], indices);
2 26 Feb 07 jari 949         }
2 26 Feb 07 jari 950         if (child2[index] != -1) {
2 26 Feb 07 jari 951             pos = fillLeafOrder(leafOrder, child1, child2, pos, child2[index], indices);
2 26 Feb 07 jari 952         } else {
2 26 Feb 07 jari 953             leafOrder[pos] = indices == null ? index : indices[index];
2 26 Feb 07 jari 954             pos++;
2 26 Feb 07 jari 955         }
2 26 Feb 07 jari 956         return pos;
2 26 Feb 07 jari 957     }
2 26 Feb 07 jari 958     
2 26 Feb 07 jari 959     /****************************************************************************************
2 26 Feb 07 jari 960      * End of Sample Cluster index ordering code
2 26 Feb 07 jari 961      */
2 26 Feb 07 jari 962     
2 26 Feb 07 jari 963     
2 26 Feb 07 jari 964     /**
2 26 Feb 07 jari 965      * The class to listen to progress, monitor and algorithms events.
2 26 Feb 07 jari 966      */
2 26 Feb 07 jari 967     private class Listener extends DialogListener implements AlgorithmListener {
2 26 Feb 07 jari 968         
2 26 Feb 07 jari 969         public void valueChanged(AlgorithmEvent event) {
2 26 Feb 07 jari 970             switch (event.getId()) {
2 26 Feb 07 jari 971                 case AlgorithmEvent.SET_UNITS:
2 26 Feb 07 jari 972                     progress.setUnits(event.getIntValue());
2 26 Feb 07 jari 973                     progress.setDescription(event.getDescription());
2 26 Feb 07 jari 974                     break;
2 26 Feb 07 jari 975                 case AlgorithmEvent.PROGRESS_VALUE:
2 26 Feb 07 jari 976                     progress.setValue(event.getIntValue());
2 26 Feb 07 jari 977                     progress.setDescription(event.getDescription());
2 26 Feb 07 jari 978                     break;
2 26 Feb 07 jari 979                 case AlgorithmEvent.MONITOR_VALUE:
2 26 Feb 07 jari 980                     int value = event.getIntValue();
2 26 Feb 07 jari 981                     if (value == -1) {
2 26 Feb 07 jari 982                         monitor.dispose();
2 26 Feb 07 jari 983                     } else if(value < 245){
2 26 Feb 07 jari 984                         monitor.update(value);
2 26 Feb 07 jari 985                     }
2 26 Feb 07 jari 986                     break;
2 26 Feb 07 jari 987             }
2 26 Feb 07 jari 988         }
2 26 Feb 07 jari 989         
2 26 Feb 07 jari 990         public void actionPerformed(ActionEvent e) {
2 26 Feb 07 jari 991             String command = e.getActionCommand();
2 26 Feb 07 jari 992             if (command.equals("cancel-command")) {
2 26 Feb 07 jari 993                 algorithm.abort();
2 26 Feb 07 jari 994                 progress.dispose();
2 26 Feb 07 jari 995                 monitor.dispose();
2 26 Feb 07 jari 996             }
2 26 Feb 07 jari 997         }
2 26 Feb 07 jari 998         
2 26 Feb 07 jari 999         public void windowClosing(WindowEvent e) {
2 26 Feb 07 jari 1000             algorithm.abort();
2 26 Feb 07 jari 1001             progress.dispose();
2 26 Feb 07 jari 1002             monitor.dispose();
2 26 Feb 07 jari 1003         }
2 26 Feb 07 jari 1004     }
2 26 Feb 07 jari 1005     
2 26 Feb 07 jari 1006     // the general info structure
2 26 Feb 07 jari 1007     private class GeneralInfo {
2 26 Feb 07 jari 1008         
2 26 Feb 07 jari 1009         //results
2 26 Feb 07 jari 1010         public int clusters;
2 26 Feb 07 jari 1011         public int iterations;
2 26 Feb 07 jari 1012         public long time;
2 26 Feb 07 jari 1013         
2 26 Feb 07 jari 1014         //diatance metric
2 26 Feb 07 jari 1015         public String function;
2 26 Feb 07 jari 1016         
2 26 Feb 07 jari 1017         //Growth Term Crit.
2 26 Feb 07 jari 1018         public int maxCycles;
2 26 Feb 07 jari 1019         public int maxEpochsPerCycle;
2 26 Feb 07 jari 1020         public float diversityCutoff;
2 26 Feb 07 jari 1021         public float epochStopCriteria;
2 26 Feb 07 jari 1022         public boolean runToMaxCycles;
2 26 Feb 07 jari 1023         
2 26 Feb 07 jari 1024         //Cell Migration/Neighborhood Parmeters
2 26 Feb 07 jari 1025         public float migW;
2 26 Feb 07 jari 1026         public float migP;
2 26 Feb 07 jari 1027         public float migS;
2 26 Feb 07 jari 1028         public int neighborhoodLevel;
2 26 Feb 07 jari 1029         
2 26 Feb 07 jari 1030         //Cell Division Criteria
2 26 Feb 07 jari 1031         public boolean useCellDiversity;
2 26 Feb 07 jari 1032         public boolean useCellVariability;
2 26 Feb 07 jari 1033         public float pValue;
2 26 Feb 07 jari 1034         public float computedVarCutoff;
2 26 Feb 07 jari 1035         
2 26 Feb 07 jari 1036         //HCL Options
2 26 Feb 07 jari 1037         public boolean hcl;
2 26 Feb 07 jari 1038         public int hcl_method;
2 26 Feb 07 jari 1039         public boolean hcl_on_clusters;
2 26 Feb 07 jari 1040         public boolean hcl_on_samples_on_all_genes;
2 26 Feb 07 jari 1041         public boolean hcl_genes_in_clusters;
2 26 Feb 07 jari 1042         public boolean hcl_samples_in_clusters;
2 26 Feb 07 jari 1043         
2 26 Feb 07 jari 1044         
2 26 Feb 07 jari 1045         /*
2 26 Feb 07 jari 1046          *  Returns the linkage method if HCL trees were created for SOTA clusters
2 26 Feb 07 jari 1047          */
2 26 Feb 07 jari 1048         public String getMethodName() {
2 26 Feb 07 jari 1049             return hcl ? HCLGUI.GeneralInfo.getMethodName(hcl_method) : "no linkage";
2 26 Feb 07 jari 1050         }
2 26 Feb 07 jari 1051         
2 26 Feb 07 jari 1052     }
2 26 Feb 07 jari 1053     
2 26 Feb 07 jari 1054     
2 26 Feb 07 jari 1055     
2 26 Feb 07 jari 1056 }
2 26 Feb 07 jari 1057
2 26 Feb 07 jari 1058