mev-4.0.01/source/org/tigr/microarray/mev/cluster/gui/impl/owa/OWAGUI.java

Code
Comments
Other
Rev Date Author Line
2 26 Feb 07 jari 1 /*
2 26 Feb 07 jari 2 Copyright @ 1999-2005, The Institute for Genomic Research (TIGR).
2 26 Feb 07 jari 3 All rights reserved.
2 26 Feb 07 jari 4  */
2 26 Feb 07 jari 5 /*
2 26 Feb 07 jari 6  * $RCSfile: OWAGUI.java,v $
2 26 Feb 07 jari 7  * $Revision: 1.8 $
2 26 Feb 07 jari 8  * $Date: 2005/03/10 20:32:39 $
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.owa;
2 26 Feb 07 jari 13
2 26 Feb 07 jari 14 import java.awt.event.ActionEvent;
2 26 Feb 07 jari 15 import java.awt.event.WindowEvent;
2 26 Feb 07 jari 16 import java.util.Vector;
2 26 Feb 07 jari 17
2 26 Feb 07 jari 18 import javax.swing.JFrame;
2 26 Feb 07 jari 19 import javax.swing.JOptionPane;
2 26 Feb 07 jari 20 import javax.swing.tree.DefaultMutableTreeNode;
2 26 Feb 07 jari 21
2 26 Feb 07 jari 22 import org.tigr.microarray.mev.cluster.Cluster;
2 26 Feb 07 jari 23 import org.tigr.microarray.mev.cluster.Node;
2 26 Feb 07 jari 24 import org.tigr.microarray.mev.cluster.NodeList;
2 26 Feb 07 jari 25 import org.tigr.microarray.mev.cluster.NodeValueList;
2 26 Feb 07 jari 26 import org.tigr.microarray.mev.cluster.algorithm.AbortException;
2 26 Feb 07 jari 27 import org.tigr.microarray.mev.cluster.algorithm.Algorithm;
2 26 Feb 07 jari 28 import org.tigr.microarray.mev.cluster.algorithm.AlgorithmData;
2 26 Feb 07 jari 29 import org.tigr.microarray.mev.cluster.algorithm.AlgorithmEvent;
2 26 Feb 07 jari 30 import org.tigr.microarray.mev.cluster.algorithm.AlgorithmException;
2 26 Feb 07 jari 31 import org.tigr.microarray.mev.cluster.algorithm.AlgorithmListener;
2 26 Feb 07 jari 32 import org.tigr.microarray.mev.cluster.algorithm.AlgorithmParameters;
2 26 Feb 07 jari 33 import org.tigr.microarray.mev.cluster.gui.Experiment;
2 26 Feb 07 jari 34 import org.tigr.microarray.mev.cluster.gui.IClusterGUI;
2 26 Feb 07 jari 35 import org.tigr.microarray.mev.cluster.gui.IData;
2 26 Feb 07 jari 36 import org.tigr.microarray.mev.cluster.gui.IDistanceMenu;
2 26 Feb 07 jari 37 import org.tigr.microarray.mev.cluster.gui.IFramework;
2 26 Feb 07 jari 38 import org.tigr.microarray.mev.cluster.gui.IViewer;
2 26 Feb 07 jari 39 import org.tigr.microarray.mev.cluster.gui.LeafInfo;
2 26 Feb 07 jari 40 import org.tigr.microarray.mev.cluster.gui.helpers.CentroidUserObject;
2 26 Feb 07 jari 41 import org.tigr.microarray.mev.cluster.gui.helpers.ClusterTableViewer;
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.Progress;
2 26 Feb 07 jari 44 import org.tigr.microarray.mev.cluster.gui.impl.hcl.HCLGUI;
2 26 Feb 07 jari 45 import org.tigr.microarray.mev.cluster.gui.impl.hcl.HCLInitDialog;
2 26 Feb 07 jari 46 import org.tigr.microarray.mev.cluster.gui.impl.hcl.HCLTreeData;
2 26 Feb 07 jari 47 import org.tigr.microarray.mev.cluster.gui.impl.hcl.HCLViewer;
2 26 Feb 07 jari 48 import org.tigr.microarray.mev.script.scriptGUI.IScriptGUI;
2 26 Feb 07 jari 49 import org.tigr.util.FloatMatrix;
2 26 Feb 07 jari 50
2 26 Feb 07 jari 51 /**
2 26 Feb 07 jari 52  *
2 26 Feb 07 jari 53  * @author  nbhagaba
2 26 Feb 07 jari 54  * @version
2 26 Feb 07 jari 55  */
2 26 Feb 07 jari 56 public class OWAGUI implements IClusterGUI, IScriptGUI {
2 26 Feb 07 jari 57     
2 26 Feb 07 jari 58     private Algorithm algorithm;
2 26 Feb 07 jari 59     private Progress progress;
2 26 Feb 07 jari 60     private Experiment experiment;
2 26 Feb 07 jari 61     private int[][] clusters;
2 26 Feb 07 jari 62     private FloatMatrix means;
2 26 Feb 07 jari 63     private FloatMatrix variances;
2 26 Feb 07 jari 64     
2 26 Feb 07 jari 65     private String[] auxTitles;
2 26 Feb 07 jari 66     private Object[][] auxData;
2 26 Feb 07 jari 67     
2 26 Feb 07 jari 68     private Vector fValues, rawPValues, adjPValues, dfNumValues, dfDenomValues, ssGroups, ssError;
2 26 Feb 07 jari 69     private float[][] geneGroupMeans, geneGroupSDs;
2 26 Feb 07 jari 70     private boolean drawSigTreesOnly;
2 26 Feb 07 jari 71     
2 26 Feb 07 jari 72     //private boolean usePerms;
2 26 Feb 07 jari 73     
2 26 Feb 07 jari 74     Vector exptNamesVector;
2 26 Feb 07 jari 75     int[] groupAssignments;
2 26 Feb 07 jari 76     private int falseNum, correctionMethod;
2 26 Feb 07 jari 77     private double falseProp;
2 26 Feb 07 jari 78     private IData data;
2 26 Feb 07 jari 79     private int numGroups, numPerms;
2 26 Feb 07 jari 80     /** Creates new OWAGUI */
2 26 Feb 07 jari 81     public OWAGUI() {
2 26 Feb 07 jari 82     }
2 26 Feb 07 jari 83     
2 26 Feb 07 jari 84     /**
2 26 Feb 07 jari 85      * This method should return a tree with calculation results or
2 26 Feb 07 jari 86      * null, if analysis start was canceled.
2 26 Feb 07 jari 87      *
2 26 Feb 07 jari 88      * @param framework the reference to <code>IFramework</code> implementation,
2 26 Feb 07 jari 89      *       which is used to obtain an initial analysis data and parameters.
2 26 Feb 07 jari 90      * @throws AlgorithmException if calculation was failed.
2 26 Feb 07 jari 91      * @throws AbortException if calculation was canceled.
2 26 Feb 07 jari 92      * @see IFramework
2 26 Feb 07 jari 93      */
2 26 Feb 07 jari 94     public DefaultMutableTreeNode execute(IFramework framework) throws AlgorithmException {
2 26 Feb 07 jari 95         this.experiment = framework.getData().getExperiment();        
2 26 Feb 07 jari 96         this.data = framework.getData();
2 26 Feb 07 jari 97         exptNamesVector = new Vector();
2 26 Feb 07 jari 98         int number_of_samples = experiment.getNumberOfSamples();
2 26 Feb 07 jari 99         int number_of_genes = experiment.getNumberOfGenes();
2 26 Feb 07 jari 100         
2 26 Feb 07 jari 101         int [] columnIndices = experiment.getColumnIndicesCopy(); 
2 26 Feb 07 jari 102         
2 26 Feb 07 jari 103         for (int i = 0; i < number_of_samples; i++) {
2 26 Feb 07 jari 104             exptNamesVector.add(framework.getData().getFullSampleName(columnIndices[i]));
2 26 Feb 07 jari 105         }
2 26 Feb 07 jari 106         
2 26 Feb 07 jari 107         OneWayANOVAInitBox owaDialog = new OneWayANOVAInitBox((JFrame)framework.getFrame(), true, exptNamesVector);
2 26 Feb 07 jari 108         owaDialog.setVisible(true);
2 26 Feb 07 jari 109         
2 26 Feb 07 jari 110         if (!owaDialog.isOkPressed()) return null;
2 26 Feb 07 jari 111         
2 26 Feb 07 jari 112         double alpha = owaDialog.getPValue();
2 26 Feb 07 jari 113         numGroups = owaDialog.getNumGroups();
2 26 Feb 07 jari 114         groupAssignments = owaDialog.getGroupAssignments();
2 26 Feb 07 jari 115         boolean usePerms = owaDialog.usePerms();
2 26 Feb 07 jari 116         int numPerms = 0;
2 26 Feb 07 jari 117         if (usePerms) {
2 26 Feb 07 jari 118             numPerms = owaDialog.getNumPerms();
2 26 Feb 07 jari 119         }
2 26 Feb 07 jari 120         correctionMethod = owaDialog.getCorrectionMethod();
2 26 Feb 07 jari 121         if (correctionMethod == OneWayANOVAInitBox.FALSE_NUM) {
2 26 Feb 07 jari 122             falseNum = owaDialog.getFalseNum();
2 26 Feb 07 jari 123         }
2 26 Feb 07 jari 124         if (correctionMethod == OneWayANOVAInitBox.FALSE_PROP) {
2 26 Feb 07 jari 125             falseProp = owaDialog.getFalseProp();
2 26 Feb 07 jari 126         }
2 26 Feb 07 jari 127         boolean isHierarchicalTree = owaDialog.drawTrees();
2 26 Feb 07 jari 128         drawSigTreesOnly = true;
2 26 Feb 07 jari 129         if (isHierarchicalTree) {
2 26 Feb 07 jari 130             drawSigTreesOnly = owaDialog.drawSigTreesOnly();
2 26 Feb 07 jari 131         }      
2 26 Feb 07 jari 132         
2 26 Feb 07 jari 133         IDistanceMenu menu = framework.getDistanceMenu();
2 26 Feb 07 jari 134         int function = menu.getDistanceFunction();
2 26 Feb 07 jari 135         if (function == Algorithm.DEFAULT) {
2 26 Feb 07 jari 136             function = Algorithm.EUCLIDEAN;
2 26 Feb 07 jari 137         }
2 26 Feb 07 jari 138         
2 26 Feb 07 jari 139         // hcl init
2 26 Feb 07 jari 140         int hcl_method = 0;
2 26 Feb 07 jari 141         boolean hcl_samples = false;
2 26 Feb 07 jari 142         boolean hcl_genes = false;
2 26 Feb 07 jari 143         int hcl_function = 4;
2 26 Feb 07 jari 144         boolean hcl_absolute = false;
2 26 Feb 07 jari 145         if (isHierarchicalTree) {
2 26 Feb 07 jari 146             HCLInitDialog hcl_dialog = new HCLInitDialog(framework.getFrame(), menu.getFunctionName(function), menu.isAbsoluteDistance(), true);
2 26 Feb 07 jari 147             if (hcl_dialog.showModal() != JOptionPane.OK_OPTION) {
2 26 Feb 07 jari 148                 return null;
2 26 Feb 07 jari 149             }
2 26 Feb 07 jari 150             hcl_method = hcl_dialog.getMethod();
2 26 Feb 07 jari 151             hcl_samples = hcl_dialog.isClusterExperiments();
2 26 Feb 07 jari 152             hcl_genes = hcl_dialog.isClusterGenes();
2 26 Feb 07 jari 153             hcl_function = hcl_dialog.getDistanceMetric();
2 26 Feb 07 jari 154             hcl_absolute = hcl_dialog.getAbsoluteSelection();
2 26 Feb 07 jari 155         }
2 26 Feb 07 jari 156         
2 26 Feb 07 jari 157         Listener listener = new Listener();
2 26 Feb 07 jari 158         
2 26 Feb 07 jari 159         try {
2 26 Feb 07 jari 160             algorithm = framework.getAlgorithmFactory().getAlgorithm("OWA");
2 26 Feb 07 jari 161             algorithm.addAlgorithmListener(listener);
2 26 Feb 07 jari 162             
2 26 Feb 07 jari 163             this.progress = new Progress(framework.getFrame(), "Finding significant genes", listener);
2 26 Feb 07 jari 164             this.progress.show();
2 26 Feb 07 jari 165             
2 26 Feb 07 jari 166             AlgorithmData data = new AlgorithmData();
2 26 Feb 07 jari 167             
2 26 Feb 07 jari 168             data.addMatrix("experiment", experiment.getMatrix());
2 26 Feb 07 jari 169             data.addParam("distance-factor", String.valueOf(1.0f));
2 26 Feb 07 jari 170             data.addParam("distance-absolute", String.valueOf(menu.isAbsoluteDistance()));
2 26 Feb 07 jari 171             
2 26 Feb 07 jari 172             data.addParam("distance-function", String.valueOf(function));
2 26 Feb 07 jari 173             data.addIntArray("group-assignments", groupAssignments);
2 26 Feb 07 jari 174             data.addParam("usePerms", String.valueOf(usePerms));
2 26 Feb 07 jari 175             data.addParam("numPerms", String.valueOf(numPerms));
2 26 Feb 07 jari 176             data.addParam("alpha", String.valueOf(alpha));
2 26 Feb 07 jari 177             data.addParam("correction-method", String.valueOf(correctionMethod));
2 26 Feb 07 jari 178             data.addParam("numGroups", String.valueOf(numGroups));
2 26 Feb 07 jari 179             if (correctionMethod == OneWayANOVAInitBox.FALSE_NUM) {
2 26 Feb 07 jari 180                 data.addParam("falseNum", String.valueOf(falseNum));
2 26 Feb 07 jari 181             }
2 26 Feb 07 jari 182             if (correctionMethod == OneWayANOVAInitBox.FALSE_PROP) {
2 26 Feb 07 jari 183                 data.addParam("falseProp", String.valueOf((float)falseProp));
2 26 Feb 07 jari 184             }
2 26 Feb 07 jari 185             // hcl parameters
2 26 Feb 07 jari 186             if (isHierarchicalTree) {
2 26 Feb 07 jari 187                 data.addParam("hierarchical-tree", String.valueOf(true));
2 26 Feb 07 jari 188                 data.addParam("draw-sig-trees-only", String.valueOf(drawSigTreesOnly));                
2 26 Feb 07 jari 189                 data.addParam("method-linkage", String.valueOf(hcl_method));
2 26 Feb 07 jari 190                 data.addParam("calculate-genes", String.valueOf(hcl_genes));
2 26 Feb 07 jari 191                 data.addParam("calculate-experiments", String.valueOf(hcl_samples));
2 26 Feb 07 jari 192                 data.addParam("hcl-distance-function", String.valueOf(hcl_function));
2 26 Feb 07 jari 193                 data.addParam("hcl-distance-absolute", String.valueOf(hcl_absolute));
2 26 Feb 07 jari 194             }
2 26 Feb 07 jari 195             
2 26 Feb 07 jari 196             long start = System.currentTimeMillis();
2 26 Feb 07 jari 197             AlgorithmData result = algorithm.execute(data);
2 26 Feb 07 jari 198             long time = System.currentTimeMillis() - start;
2 26 Feb 07 jari 199             
2 26 Feb 07 jari 200             // getting the results
2 26 Feb 07 jari 201             Cluster result_cluster = result.getCluster("cluster");
2 26 Feb 07 jari 202             NodeList nodeList = result_cluster.getNodeList();
2 26 Feb 07 jari 203             AlgorithmParameters resultMap = result.getParams();
2 26 Feb 07 jari 204             int k = 2; //resultMap.getInt("number-of-clusters"); // NEED THIS TO GET THE VALUE OF NUMBER-OF-CLUSTERS
2 26 Feb 07 jari 205             
2 26 Feb 07 jari 206             this.clusters = new int[k][];
2 26 Feb 07 jari 207             for (int i=0; i<k; i++) {
2 26 Feb 07 jari 208                 clusters[i] = nodeList.getNode(i).getFeaturesIndexes();
2 26 Feb 07 jari 209             }
2 26 Feb 07 jari 210             this.means = result.getMatrix("clusters_means");
2 26 Feb 07 jari 211             this.variances = result.getMatrix("clusters_variances");
2 26 Feb 07 jari 212             //FloatMatrix pValuesMatrix = result.getMatrix("pValues");
2 26 Feb 07 jari 213             FloatMatrix rawPValuesMatrix = result.getMatrix("rawPValues");
2 26 Feb 07 jari 214             FloatMatrix adjPValuesMatrix = result.getMatrix("adjPValues");
2 26 Feb 07 jari 215             //FloatMatrix pValuesMatrix = result.getMatrix("pValues");
2 26 Feb 07 jari 216             FloatMatrix fValuesMatrix = result.getMatrix("fValues");
2 26 Feb 07 jari 217             FloatMatrix dfNumMatrix = result.getMatrix("dfNumMatrix");
2 26 Feb 07 jari 218             FloatMatrix dfDenomMatrix = result.getMatrix("dfDenomMatrix");
2 26 Feb 07 jari 219             FloatMatrix ssGroupsMatrix = result.getMatrix("ssGroupsMatrix");
2 26 Feb 07 jari 220             FloatMatrix ssErrorMatrix = result.getMatrix("ssErrorMatrix");
2 26 Feb 07 jari 221             FloatMatrix geneGroupMeansMatrix = result.getMatrix("geneGroupMeansMatrix");
2 26 Feb 07 jari 222             FloatMatrix geneGroupSDsMatrix = result.getMatrix("geneGroupSDsMatrix");
2 26 Feb 07 jari 223             
2 26 Feb 07 jari 224             rawPValues = new Vector();
2 26 Feb 07 jari 225             adjPValues = new Vector();
2 26 Feb 07 jari 226             fValues = new Vector();
2 26 Feb 07 jari 227             ssGroups = new Vector();
2 26 Feb 07 jari 228             ssError = new Vector();
2 26 Feb 07 jari 229             
2 26 Feb 07 jari 230             geneGroupMeans = new float[geneGroupMeansMatrix.getRowDimension()][geneGroupMeansMatrix.getColumnDimension()];
2 26 Feb 07 jari 231             geneGroupSDs = new float[geneGroupSDsMatrix.getRowDimension()][geneGroupSDsMatrix.getColumnDimension()];
2 26 Feb 07 jari 232             
2 26 Feb 07 jari 233             for (int i = 0; i < geneGroupMeans.length; i++) {
2 26 Feb 07 jari 234                 for (int j = 0; j < geneGroupMeans[i].length; j++) {
2 26 Feb 07 jari 235                     geneGroupMeans[i][j] = geneGroupMeansMatrix.A[i][j];
2 26 Feb 07 jari 236                     geneGroupSDs[i][j] = geneGroupSDsMatrix.A[i][j];
2 26 Feb 07 jari 237                 }
2 26 Feb 07 jari 238             }
2 26 Feb 07 jari 239             
2 26 Feb 07 jari 240             for (int i = 0; i < rawPValuesMatrix.getRowDimension(); i++) {
2 26 Feb 07 jari 241                 rawPValues.add(new Float(rawPValuesMatrix.A[i][0]));
2 26 Feb 07 jari 242                 adjPValues.add(new Float(adjPValuesMatrix.A[i][0]));
2 26 Feb 07 jari 243             }
2 26 Feb 07 jari 244             
2 26 Feb 07 jari 245             for (int i = 0; i < fValuesMatrix.getRowDimension(); i++) {
2 26 Feb 07 jari 246                 fValues.add(new Float(fValuesMatrix.A[i][0]));
2 26 Feb 07 jari 247             }
2 26 Feb 07 jari 248             
2 26 Feb 07 jari 249             dfNumValues = new Vector();
2 26 Feb 07 jari 250             dfDenomValues = new Vector();
2 26 Feb 07 jari 251             
2 26 Feb 07 jari 252             for (int i = 0; i < dfNumMatrix.getRowDimension(); i++) {
2 26 Feb 07 jari 253                 dfNumValues.add(new Float(dfNumMatrix.A[i][0]));
2 26 Feb 07 jari 254                 dfDenomValues.add(new Float(dfDenomMatrix.A[i][0]));
2 26 Feb 07 jari 255                 ssGroups.add(new Float(ssGroupsMatrix.A[i][0]));
2 26 Feb 07 jari 256                 ssError.add(new Float(ssErrorMatrix.A[i][0]));
2 26 Feb 07 jari 257             }
2 26 Feb 07 jari 258             
2 26 Feb 07 jari 259             GeneralInfo info = new GeneralInfo();
2 26 Feb 07 jari 260             info.time = time;
2 26 Feb 07 jari 261             //ADD MORE INFO PARAMETERS HERE
2 26 Feb 07 jari 262             info.alpha = alpha;
2 26 Feb 07 jari 263             info.usePerms = usePerms;
2 26 Feb 07 jari 264             info.numPerms = numPerms;
2 26 Feb 07 jari 265             info.correctionMethod = getSigMethod(correctionMethod);
2 26 Feb 07 jari 266             /*
2 26 Feb 07 jari 267             info.pValueBasedOn = getPValueBasedOn(isPermut);
2 26 Feb 07 jari 268             if (isPermut) {
2 26 Feb 07 jari 269                 info.useAllCombs = useAllCombs;
2 26 Feb 07 jari 270                 info.numCombs = numCombs;
2 26 Feb 07 jari 271             }
2 26 Feb 07 jari 272              */
2 26 Feb 07 jari 273             info.function = menu.getFunctionName(function);
2 26 Feb 07 jari 274             info.hcl = isHierarchicalTree;
2 26 Feb 07 jari 275             info.hcl_genes = hcl_genes;
2 26 Feb 07 jari 276             info.hcl_samples = hcl_samples;
2 26 Feb 07 jari 277             info.hcl_method = hcl_method;
2 26 Feb 07 jari 278             
2 26 Feb 07 jari 279             Vector titlesVector = new Vector();
2 26 Feb 07 jari 280             for (int i = 0; i < geneGroupMeans[0].length; i++) {
2 26 Feb 07 jari 281                 titlesVector.add("Group" + (i+1) + " mean");
2 26 Feb 07 jari 282                 titlesVector.add("Group" + (i + 1) + " std.dev");
2 26 Feb 07 jari 283             }
2 26 Feb 07 jari 284             titlesVector.add("F ratio");
2 26 Feb 07 jari 285             titlesVector.add("SS(Groups)");
2 26 Feb 07 jari 286             titlesVector.add("SS(Error)");
2 26 Feb 07 jari 287             titlesVector.add("df (Groups)");
2 26 Feb 07 jari 288             titlesVector.add("df (Error)");
2 26 Feb 07 jari 289             titlesVector.add("Raw p value");
2 26 Feb 07 jari 290             if (!((correctionMethod == OneWayANOVAInitBox.FALSE_NUM)||(correctionMethod == OneWayANOVAInitBox.FALSE_PROP))) {            
2 26 Feb 07 jari 291                 titlesVector.add("Adj. p value");
2 26 Feb 07 jari 292             }
2 26 Feb 07 jari 293             
2 26 Feb 07 jari 294             auxTitles = new String[titlesVector.size()];
2 26 Feb 07 jari 295             for (int i = 0; i < auxTitles.length; i++) {
2 26 Feb 07 jari 296                 auxTitles[i] = (String)(titlesVector.get(i));
2 26 Feb 07 jari 297             }
2 26 Feb 07 jari 298             
2 26 Feb 07 jari 299             auxData = new Object[experiment.getNumberOfGenes()][auxTitles.length];
2 26 Feb 07 jari 300             for (int i = 0; i < auxData.length; i++) {
2 26 Feb 07 jari 301                 int counter = 0;
2 26 Feb 07 jari 302                 for (int j = 0; j < geneGroupMeans[i].length; j++) {
2 26 Feb 07 jari 303                     auxData[i][counter++] = new Float(geneGroupMeans[i][j]);
2 26 Feb 07 jari 304                     auxData[i][counter++] = new Float(geneGroupSDs[i][j]);
2 26 Feb 07 jari 305                 }
2 26 Feb 07 jari 306                 
2 26 Feb 07 jari 307                 auxData[i][counter++] = fValues.get(i);
2 26 Feb 07 jari 308                 auxData[i][counter++] = ssGroups.get(i);
2 26 Feb 07 jari 309                 auxData[i][counter++] = ssError.get(i);
2 26 Feb 07 jari 310                 auxData[i][counter++] = dfNumValues.get(i);
2 26 Feb 07 jari 311                 auxData[i][counter++] = dfDenomValues.get(i);
2 26 Feb 07 jari 312                 auxData[i][counter++] = rawPValues.get(i);
2 26 Feb 07 jari 313                 if (!((correctionMethod == OneWayANOVAInitBox.FALSE_NUM)||(correctionMethod == OneWayANOVAInitBox.FALSE_PROP))) {
2 26 Feb 07 jari 314                     auxData[i][counter++] = adjPValues.get(i);
2 26 Feb 07 jari 315                 }
2 26 Feb 07 jari 316             }
2 26 Feb 07 jari 317             
2 26 Feb 07 jari 318             
2 26 Feb 07 jari 319             return createResultTree(result_cluster, info);
2 26 Feb 07 jari 320             
2 26 Feb 07 jari 321         } finally {
2 26 Feb 07 jari 322             if (algorithm != null) {
2 26 Feb 07 jari 323                 algorithm.removeAlgorithmListener(listener);
2 26 Feb 07 jari 324             }
2 26 Feb 07 jari 325             if (progress != null) {
2 26 Feb 07 jari 326                 progress.dispose();
2 26 Feb 07 jari 327             }
2 26 Feb 07 jari 328         }
2 26 Feb 07 jari 329     }
2 26 Feb 07 jari 330     
2 26 Feb 07 jari 331     
2 26 Feb 07 jari 332     public AlgorithmData getScriptParameters(IFramework framework) {
2 26 Feb 07 jari 333         
2 26 Feb 07 jari 334         this.experiment = framework.getData().getExperiment();
2 26 Feb 07 jari 335         exptNamesVector = new Vector();
2 26 Feb 07 jari 336         int number_of_samples = experiment.getNumberOfSamples();
2 26 Feb 07 jari 337         int number_of_genes = experiment.getNumberOfGenes();
2 26 Feb 07 jari 338         
2 26 Feb 07 jari 339         for (int i = 0; i < number_of_samples; i++) {
2 26 Feb 07 jari 340             exptNamesVector.add(framework.getData().getFullSampleName(experiment.getSampleIndex(i)));
2 26 Feb 07 jari 341         }
2 26 Feb 07 jari 342         
2 26 Feb 07 jari 343         OneWayANOVAInitBox owaDialog = new OneWayANOVAInitBox((JFrame)framework.getFrame(), true, exptNamesVector);
2 26 Feb 07 jari 344         owaDialog.setVisible(true);
2 26 Feb 07 jari 345         
2 26 Feb 07 jari 346         if (!owaDialog.isOkPressed()) return null;
2 26 Feb 07 jari 347         
2 26 Feb 07 jari 348         double alpha = owaDialog.getPValue();
2 26 Feb 07 jari 349         numGroups = owaDialog.getNumGroups();
2 26 Feb 07 jari 350         groupAssignments = owaDialog.getGroupAssignments();
2 26 Feb 07 jari 351         boolean usePerms = owaDialog.usePerms();     
2 26 Feb 07 jari 352         int numPerms = 0;
2 26 Feb 07 jari 353         if (usePerms) {
2 26 Feb 07 jari 354             numPerms = owaDialog.getNumPerms();           
2 26 Feb 07 jari 355         }
2 26 Feb 07 jari 356         correctionMethod = owaDialog.getCorrectionMethod();
2 26 Feb 07 jari 357         if (correctionMethod == OneWayANOVAInitBox.FALSE_NUM) {
2 26 Feb 07 jari 358             falseNum = owaDialog.getFalseNum();
2 26 Feb 07 jari 359         }
2 26 Feb 07 jari 360         if (correctionMethod == OneWayANOVAInitBox.FALSE_PROP) {
2 26 Feb 07 jari 361             falseProp = owaDialog.getFalseProp();
2 26 Feb 07 jari 362         }        
2 26 Feb 07 jari 363         boolean isHierarchicalTree = owaDialog.drawTrees();
2 26 Feb 07 jari 364         drawSigTreesOnly = true;
2 26 Feb 07 jari 365         if (isHierarchicalTree) {
2 26 Feb 07 jari 366             drawSigTreesOnly = owaDialog.drawSigTreesOnly();
2 26 Feb 07 jari 367         }         
2 26 Feb 07 jari 368         
2 26 Feb 07 jari 369         IDistanceMenu menu = framework.getDistanceMenu();
2 26 Feb 07 jari 370         int function = menu.getDistanceFunction();
2 26 Feb 07 jari 371         if (function == Algorithm.DEFAULT) {
2 26 Feb 07 jari 372             function = Algorithm.EUCLIDEAN;
2 26 Feb 07 jari 373         }
2 26 Feb 07 jari 374         
2 26 Feb 07 jari 375         // hcl init
2 26 Feb 07 jari 376         int hcl_method = 0;
2 26 Feb 07 jari 377         boolean hcl_samples = false;
2 26 Feb 07 jari 378         boolean hcl_genes = false;
2 26 Feb 07 jari 379         int hcl_function = 4;
2 26 Feb 07 jari 380         boolean hcl_absolute = false;
2 26 Feb 07 jari 381         if (isHierarchicalTree) {
2 26 Feb 07 jari 382             HCLInitDialog hcl_dialog = new HCLInitDialog(framework.getFrame(), menu.getFunctionName(function), menu.isAbsoluteDistance(), true);
2 26 Feb 07 jari 383             if (hcl_dialog.showModal() != JOptionPane.OK_OPTION) {
2 26 Feb 07 jari 384                 return null;
2 26 Feb 07 jari 385             }
2 26 Feb 07 jari 386             hcl_method = hcl_dialog.getMethod();
2 26 Feb 07 jari 387             hcl_samples = hcl_dialog.isClusterExperiments();
2 26 Feb 07 jari 388             hcl_genes = hcl_dialog.isClusterGenes();
2 26 Feb 07 jari 389             hcl_function = hcl_dialog.getDistanceMetric();
2 26 Feb 07 jari 390             hcl_absolute = hcl_dialog.getAbsoluteSelection();
2 26 Feb 07 jari 391         }        
2 26 Feb 07 jari 392         AlgorithmData data = new AlgorithmData();
2 26 Feb 07 jari 393         
2 26 Feb 07 jari 394         data.addParam("distance-factor", String.valueOf(1.0f));
2 26 Feb 07 jari 395         data.addParam("distance-absolute", String.valueOf(menu.isAbsoluteDistance()));
2 26 Feb 07 jari 396         
2 26 Feb 07 jari 397         data.addParam("distance-function", String.valueOf(function));
2 26 Feb 07 jari 398         data.addIntArray("group-assignments", groupAssignments);
2 26 Feb 07 jari 399         data.addParam("usePerms", String.valueOf(usePerms));   
2 26 Feb 07 jari 400         data.addParam("numPerms", String.valueOf(numPerms));
2 26 Feb 07 jari 401         data.addParam("alpha", String.valueOf(alpha));
2 26 Feb 07 jari 402         data.addParam("correction-method", String.valueOf(correctionMethod));
2 26 Feb 07 jari 403         data.addParam("numGroups", String.valueOf(numGroups));
2 26 Feb 07 jari 404         if (correctionMethod == OneWayANOVAInitBox.FALSE_NUM) {
2 26 Feb 07 jari 405             data.addParam("falseNum", String.valueOf(falseNum));
2 26 Feb 07 jari 406         }
2 26 Feb 07 jari 407         if (correctionMethod == OneWayANOVAInitBox.FALSE_PROP) {
2 26 Feb 07 jari 408             data.addParam("falseProp", String.valueOf((float)falseProp));
2 26 Feb 07 jari 409         }       
2 26 Feb 07 jari 410         // hcl parameters
2 26 Feb 07 jari 411         if (isHierarchicalTree) {
2 26 Feb 07 jari 412             data.addParam("hierarchical-tree", String.valueOf(true));
2 26 Feb 07 jari 413             data.addParam("draw-sig-trees-only", String.valueOf(drawSigTreesOnly));              
2 26 Feb 07 jari 414             data.addParam("method-linkage", String.valueOf(hcl_method));
2 26 Feb 07 jari 415             data.addParam("calculate-genes", String.valueOf(hcl_genes));
2 26 Feb 07 jari 416             data.addParam("calculate-experiments", String.valueOf(hcl_samples));
2 26 Feb 07 jari 417             data.addParam("hcl-distance-function", String.valueOf(hcl_function));
2 26 Feb 07 jari 418             data.addParam("hcl-distance-absolute", String.valueOf(hcl_absolute));
2 26 Feb 07 jari 419         }
2 26 Feb 07 jari 420         
2 26 Feb 07 jari 421         
2 26 Feb 07 jari 422         // alg name
2 26 Feb 07 jari 423         data.addParam("name", "ANOVA");
2 26 Feb 07 jari 424         
2 26 Feb 07 jari 425         // alg type
2 26 Feb 07 jari 426         data.addParam("alg-type", "cluster-genes");
2 26 Feb 07 jari 427         
2 26 Feb 07 jari 428         // output class
2 26 Feb 07 jari 429         data.addParam("output-class", "partition-output");
2 26 Feb 07 jari 430         
2 26 Feb 07 jari 431         //output nodes
2 26 Feb 07 jari 432         String [] outputNodes = new String[2];
2 26 Feb 07 jari 433         outputNodes[0] = "Significant Genes";
2 26 Feb 07 jari 434         outputNodes[1] = "Non-significant Genes";
2 26 Feb 07 jari 435         
2 26 Feb 07 jari 436         data.addStringArray("output-nodes", outputNodes);
2 26 Feb 07 jari 437         
2 26 Feb 07 jari 438         
2 26 Feb 07 jari 439         return data;
2 26 Feb 07 jari 440     }
2 26 Feb 07 jari 441     
2 26 Feb 07 jari 442     public DefaultMutableTreeNode executeScript(IFramework framework, AlgorithmData algData, Experiment experiment) throws AlgorithmException {
2 26 Feb 07 jari 443         
2 26 Feb 07 jari 444         Listener listener = new Listener();
2 26 Feb 07 jari 445         this.experiment = experiment;
2 26 Feb 07 jari 446         this.data = framework.getData();
2 26 Feb 07 jari 447         this.groupAssignments = algData.getIntArray("group-assignments");
2 26 Feb 07 jari 448         this.correctionMethod = algData.getParams().getInt("correction-method");
2 26 Feb 07 jari 449         if (correctionMethod == OneWayANOVAInitBox.FALSE_NUM) {
2 26 Feb 07 jari 450             falseNum = algData.getParams().getInt("falseNum");
2 26 Feb 07 jari 451         }
2 26 Feb 07 jari 452         if (correctionMethod == OneWayANOVAInitBox.FALSE_PROP) {
2 26 Feb 07 jari 453             falseProp = algData.getParams().getFloat("falseProp");
2 26 Feb 07 jari 454         }        
2 26 Feb 07 jari 455         this.drawSigTreesOnly = algData.getParams().getBoolean("draw-sig-trees-only");        
2 26 Feb 07 jari 456         this.rawPValues = new Vector();
2 26 Feb 07 jari 457         this.adjPValues=  new Vector();
2 26 Feb 07 jari 458         
2 26 Feb 07 jari 459         exptNamesVector = new Vector();
2 26 Feb 07 jari 460         int number_of_samples = experiment.getNumberOfSamples();
2 26 Feb 07 jari 461
2 26 Feb 07 jari 462         for (int i = 0; i < number_of_samples; i++) {
2 26 Feb 07 jari 463             exptNamesVector.add(this.data.getFullSampleName(i));
2 26 Feb 07 jari 464         }
2 26 Feb 07 jari 465  
2 26 Feb 07 jari 466         try {
2 26 Feb 07 jari 467             algData.addMatrix("experiment", experiment.getMatrix());
2 26 Feb 07 jari 468             algorithm = framework.getAlgorithmFactory().getAlgorithm("OWA");
2 26 Feb 07 jari 469             algorithm.addAlgorithmListener(listener);
2 26 Feb 07 jari 470             
2 26 Feb 07 jari 471             this.progress = new Progress(framework.getFrame(), "Finding significant genes", listener);
2 26 Feb 07 jari 472             this.progress.show();
2 26 Feb 07 jari 473             
2 26 Feb 07 jari 474             long start = System.currentTimeMillis();
2 26 Feb 07 jari 475             AlgorithmData result = algorithm.execute(algData);
2 26 Feb 07 jari 476             long time = System.currentTimeMillis() - start;
2 26 Feb 07 jari 477             
2 26 Feb 07 jari 478             // getting the results
2 26 Feb 07 jari 479             Cluster result_cluster = result.getCluster("cluster");
2 26 Feb 07 jari 480             NodeList nodeList = result_cluster.getNodeList();
2 26 Feb 07 jari 481             AlgorithmParameters resultMap = result.getParams();
2 26 Feb 07 jari 482             int k = 2; //resultMap.getInt("number-of-clusters"); // NEED THIS TO GET THE VALUE OF NUMBER-OF-CLUSTERS
2 26 Feb 07 jari 483                        
2 26 Feb 07 jari 484             this.clusters = new int[k][];
2 26 Feb 07 jari 485             for (int i=0; i<k; i++) {
2 26 Feb 07 jari 486                 clusters[i] = nodeList.getNode(i).getFeaturesIndexes();
2 26 Feb 07 jari 487             }
2 26 Feb 07 jari 488             this.means = result.getMatrix("clusters_means");
2 26 Feb 07 jari 489             this.variances = result.getMatrix("clusters_variances");
2 26 Feb 07 jari 490             FloatMatrix rawPValuesMatrix = result.getMatrix("rawPValues");
2 26 Feb 07 jari 491             FloatMatrix adjPValuesMatrix = result.getMatrix("adjPValues");
2 26 Feb 07 jari 492             FloatMatrix fValuesMatrix = result.getMatrix("fValues");
2 26 Feb 07 jari 493             FloatMatrix dfNumMatrix = result.getMatrix("dfNumMatrix");
2 26 Feb 07 jari 494             FloatMatrix dfDenomMatrix = result.getMatrix("dfDenomMatrix");
2 26 Feb 07 jari 495             FloatMatrix ssGroupsMatrix = result.getMatrix("ssGroupsMatrix");
2 26 Feb 07 jari 496             FloatMatrix ssErrorMatrix = result.getMatrix("ssErrorMatrix");
2 26 Feb 07 jari 497             FloatMatrix geneGroupMeansMatrix = result.getMatrix("geneGroupMeansMatrix");
2 26 Feb 07 jari 498             FloatMatrix geneGroupSDsMatrix = result.getMatrix("geneGroupSDsMatrix");
2 26 Feb 07 jari 499             
2 26 Feb 07 jari 500             //pValues = new Vector();
2 26 Feb 07 jari 501             fValues = new Vector();
2 26 Feb 07 jari 502             ssGroups = new Vector();
2 26 Feb 07 jari 503             ssError = new Vector();
2 26 Feb 07 jari 504             
2 26 Feb 07 jari 505             geneGroupMeans = new float[geneGroupMeansMatrix.getRowDimension()][geneGroupMeansMatrix.getColumnDimension()];
2 26 Feb 07 jari 506             geneGroupSDs = new float[geneGroupSDsMatrix.getRowDimension()][geneGroupSDsMatrix.getColumnDimension()];
2 26 Feb 07 jari 507             
2 26 Feb 07 jari 508             for (int i = 0; i < geneGroupMeans.length; i++) {
2 26 Feb 07 jari 509                 for (int j = 0; j < geneGroupMeans[i].length; j++) {
2 26 Feb 07 jari 510                     geneGroupMeans[i][j] = geneGroupMeansMatrix.A[i][j];
2 26 Feb 07 jari 511                     geneGroupSDs[i][j] = geneGroupSDsMatrix.A[i][j];
2 26 Feb 07 jari 512                 }
2 26 Feb 07 jari 513             }
2 26 Feb 07 jari 514             
2 26 Feb 07 jari 515             for (int i = 0; i < rawPValuesMatrix.getRowDimension(); i++) {
2 26 Feb 07 jari 516                 rawPValues.add(new Float(rawPValuesMatrix.A[i][0]));
2 26 Feb 07 jari 517                 adjPValues.add(new Float(adjPValuesMatrix.A[i][0]));
2 26 Feb 07 jari 518             }
2 26 Feb 07 jari 519             
2 26 Feb 07 jari 520             for (int i = 0; i < fValuesMatrix.getRowDimension(); i++) {
2 26 Feb 07 jari 521                 fValues.add(new Float(fValuesMatrix.A[i][0]));
2 26 Feb 07 jari 522             }
2 26 Feb 07 jari 523             
2 26 Feb 07 jari 524             dfNumValues = new Vector();
2 26 Feb 07 jari 525             dfDenomValues = new Vector();
2 26 Feb 07 jari 526             
2 26 Feb 07 jari 527             for (int i = 0; i < dfNumMatrix.getRowDimension(); i++) {
2 26 Feb 07 jari 528                 dfNumValues.add(new Float(dfNumMatrix.A[i][0]));
2 26 Feb 07 jari 529                 dfDenomValues.add(new Float(dfDenomMatrix.A[i][0]));
2 26 Feb 07 jari 530                 ssGroups.add(new Float(ssGroupsMatrix.A[i][0]));
2 26 Feb 07 jari 531                 ssError.add(new Float(ssErrorMatrix.A[i][0]));
2 26 Feb 07 jari 532             }
2 26 Feb 07 jari 533             
2 26 Feb 07 jari 534             AlgorithmParameters params = algData.getParams();
2 26 Feb 07 jari 535             
2 26 Feb 07 jari 536             GeneralInfo info = new GeneralInfo();
2 26 Feb 07 jari 537             info.time = time;
2 26 Feb 07 jari 538             //ADD MORE INFO PARAMETERS HERE
2 26 Feb 07 jari 539             info.alpha = params.getFloat("alpha");
2 26 Feb 07 jari 540             numGroups = params.getInt("numGroups");
2 26 Feb 07 jari 541             info.correctionMethod = getSigMethod(params.getInt("correction-method"));
2 26 Feb 07 jari 542             info.usePerms = params.getBoolean("usePerms");
2 26 Feb 07 jari 543             info.numPerms = params.getInt("numPerms");
2 26 Feb 07 jari 544             /*
2 26 Feb 07 jari 545             info.pValueBasedOn = getPValueBasedOn(isPermut);
2 26 Feb 07 jari 546             if (isPermut) {
2 26 Feb 07 jari 547                 info.useAllCombs = useAllCombs;
2 26 Feb 07 jari 548                 info.numCombs = numCombs;
2 26 Feb 07 jari 549             }
2 26 Feb 07 jari 550              */
2 26 Feb 07 jari 551             info.function = framework.getDistanceMenu().getFunctionName(params.getInt("distance-function"));
2 26 Feb 07 jari 552             info.hcl = params.getBoolean("hierarchical-tree");
2 26 Feb 07 jari 553             info.hcl_genes = params.getBoolean("calculate-genes");
2 26 Feb 07 jari 554             info.hcl_samples = params.getBoolean("calculate-experiments");
2 26 Feb 07 jari 555             if(info.hcl)
2 26 Feb 07 jari 556                 info.hcl_method = params.getInt("method-linkage") ;
2 26 Feb 07 jari 557             
2 26 Feb 07 jari 558             Vector titlesVector = new Vector();
2 26 Feb 07 jari 559             for (int i = 0; i < geneGroupMeans[0].length; i++) {
2 26 Feb 07 jari 560                 titlesVector.add("Group" + (i+1) + " mean");
2 26 Feb 07 jari 561                 titlesVector.add("Group" + (i + 1) + " std.dev");
2 26 Feb 07 jari 562             }
2 26 Feb 07 jari 563             titlesVector.add("F ratio");
2 26 Feb 07 jari 564             titlesVector.add("SS(Groups)");
2 26 Feb 07 jari 565             titlesVector.add("SS(Error)");
2 26 Feb 07 jari 566             titlesVector.add("df (Groups)");
2 26 Feb 07 jari 567             titlesVector.add("df (Error)");
2 26 Feb 07 jari 568             titlesVector.add("Raw p value");
2 26 Feb 07 jari 569             if (!((correctionMethod == OneWayANOVAInitBox.FALSE_NUM)||(correctionMethod == OneWayANOVAInitBox.FALSE_PROP))) {            
2 26 Feb 07 jari 570                 titlesVector.add("Adj. p value");
2 26 Feb 07 jari 571             }
2 26 Feb 07 jari 572             
2 26 Feb 07 jari 573             auxTitles = new String[titlesVector.size()];
2 26 Feb 07 jari 574             for (int i = 0; i < auxTitles.length; i++) {
2 26 Feb 07 jari 575                 auxTitles[i] = (String)(titlesVector.get(i));
2 26 Feb 07 jari 576             }
2 26 Feb 07 jari 577             
2 26 Feb 07 jari 578             auxData = new Object[experiment.getNumberOfGenes()][auxTitles.length];
2 26 Feb 07 jari 579             for (int i = 0; i < auxData.length; i++) {
2 26 Feb 07 jari 580                 int counter = 0;
2 26 Feb 07 jari 581                 for (int j = 0; j < geneGroupMeans[i].length; j++) {
2 26 Feb 07 jari 582                     auxData[i][counter++] = new Float(geneGroupMeans[i][j]);
2 26 Feb 07 jari 583                     auxData[i][counter++] = new Float(geneGroupSDs[i][j]);
2 26 Feb 07 jari 584                 }
2 26 Feb 07 jari 585                 
2 26 Feb 07 jari 586                 auxData[i][counter++] = fValues.get(i);
2 26 Feb 07 jari 587                 auxData[i][counter++] = ssGroups.get(i);
2 26 Feb 07 jari 588                 auxData[i][counter++] = ssError.get(i);
2 26 Feb 07 jari 589                 auxData[i][counter++] = dfNumValues.get(i);
2 26 Feb 07 jari 590                 auxData[i][counter++] = dfDenomValues.get(i);
2 26 Feb 07 jari 591                 auxData[i][counter++] = rawPValues.get(i);
2 26 Feb 07 jari 592                 if (!((correctionMethod == OneWayANOVAInitBox.FALSE_NUM)||(correctionMethod == OneWayANOVAInitBox.FALSE_PROP))) {
2 26 Feb 07 jari 593                     auxData[i][counter++] = adjPValues.get(i);
2 26 Feb 07 jari 594                 }
2 26 Feb 07 jari 595             }
2 26 Feb 07 jari 596             
2 26 Feb 07 jari 597             return createResultTree(result_cluster, info);
2 26 Feb 07 jari 598             
2 26 Feb 07 jari 599         } finally {
2 26 Feb 07 jari 600             if (algorithm != null) {
2 26 Feb 07 jari 601                 algorithm.removeAlgorithmListener(listener);
2 26 Feb 07 jari 602             }
2 26 Feb 07 jari 603             if (progress != null) {
2 26 Feb 07 jari 604                 progress.dispose();
2 26 Feb 07 jari 605             }
2 26 Feb 07 jari 606         }
2 26 Feb 07 jari 607     }
2 26 Feb 07 jari 608     
2 26 Feb 07 jari 609     
2 26 Feb 07 jari 610     private String getSigMethod(int sigMethod) {
2 26 Feb 07 jari 611         String methodName = "";
2 26 Feb 07 jari 612         
2 26 Feb 07 jari 613         if (sigMethod == OneWayANOVAInitBox.JUST_ALPHA) {
2 26 Feb 07 jari 614             methodName = "Just alpha (uncorrected)";
2 26 Feb 07 jari 615         } else if (sigMethod == OneWayANOVAInitBox.STD_BONFERRONI) {
2 26 Feb 07 jari 616             methodName = "Standard Bonferroni correction";
2 26 Feb 07 jari 617         } else if (sigMethod == OneWayANOVAInitBox.ADJ_BONFERRONI) {
2 26 Feb 07 jari 618             methodName = "Adjusted Bonferroni correction";
2 26 Feb 07 jari 619         } else if (sigMethod == OneWayANOVAInitBox.MAX_T) {
2 26 Feb 07 jari 620             methodName = "Westfall Young stepdown - MaxT";
2 26 Feb 07 jari 621         } else if (sigMethod == OneWayANOVAInitBox.FALSE_NUM) {
2 26 Feb 07 jari 622             methodName = "False significant number: " + falseNum + " or less";
2 26 Feb 07 jari 623         } else if (sigMethod == OneWayANOVAInitBox.FALSE_PROP) {
2 26 Feb 07 jari 624             methodName = "False significant proportion: " + falseProp + " or less";
2 26 Feb 07 jari 625         }
2 26 Feb 07 jari 626         
2 26 Feb 07 jari 627         return methodName;
2 26 Feb 07 jari 628     }
2 26 Feb 07 jari 629     
2 26 Feb 07 jari 630     /**
2 26 Feb 07 jari 631      * Creates a result tree to be inserted into the framework analysis node.
2 26 Feb 07 jari 632      */
2 26 Feb 07 jari 633     private DefaultMutableTreeNode createResultTree(Cluster result_cluster, GeneralInfo info) {
2 26 Feb 07 jari 634         DefaultMutableTreeNode root = new DefaultMutableTreeNode("One-way ANOVA");
2 26 Feb 07 jari 635         addResultNodes(root, result_cluster, info);
2 26 Feb 07 jari 636         return root;
2 26 Feb 07 jari 637     }
2 26 Feb 07 jari 638     
2 26 Feb 07 jari 639     /**
2 26 Feb 07 jari 640      * Adds result nodes into the tree root.
2 26 Feb 07 jari 641      */
2 26 Feb 07 jari 642     private void addResultNodes(DefaultMutableTreeNode root, Cluster result_cluster, GeneralInfo info) {
2 26 Feb 07 jari 643         addExpressionImages(root);
2 26 Feb 07 jari 644         addHierarchicalTrees(root, result_cluster, info);
2 26 Feb 07 jari 645         addCentroidViews(root);
2 26 Feb 07 jari 646         addTableViews(root);
2 26 Feb 07 jari 647         addClusterInfo(root);
2 26 Feb 07 jari 648         //addFRatioInfoViews(root);
2 26 Feb 07 jari 649         addGeneralInfo(root, info);
2 26 Feb 07 jari 650     }
2 26 Feb 07 jari 651     
2 26 Feb 07 jari 652     private void addTableViews(DefaultMutableTreeNode root) {
2 26 Feb 07 jari 653         DefaultMutableTreeNode node = new DefaultMutableTreeNode("Table Views");
2 26 Feb 07 jari 654         IViewer tabViewer = new ClusterTableViewer(this.experiment, this.clusters, this.data, this.auxTitles, this.auxData);
2 26 Feb 07 jari 655         for (int i=0; i<this.clusters.length; i++) {
2 26 Feb 07 jari 656             if (i < this.clusters.length - 1) {
2 26 Feb 07 jari 657                 node.add(new DefaultMutableTreeNode(new LeafInfo("Significant Genes ", tabViewer, new Integer(i))));
2 26 Feb 07 jari 658             } else if (i == this.clusters.length - 1) {
2 26 Feb 07 jari 659                 node.add(new DefaultMutableTreeNode(new LeafInfo("Non-significant Genes ", tabViewer, new Integer(i))));
2 26 Feb 07 jari 660                 
2 26 Feb 07 jari 661             }
2 26 Feb 07 jari 662         }
2 26 Feb 07 jari 663         root.add(node);
2 26 Feb 07 jari 664     }
2 26 Feb 07 jari 665     
2 26 Feb 07 jari 666     /**
2 26 Feb 07 jari 667      * Adds nodes to display clusters data.
2 26 Feb 07 jari 668      */
2 26 Feb 07 jari 669     private void addExpressionImages(DefaultMutableTreeNode root) {
2 26 Feb 07 jari 670         DefaultMutableTreeNode node = new DefaultMutableTreeNode("Expression Images");
2 26 Feb 07 jari 671         IViewer expViewer = new OWAExperimentViewer(this.experiment, this.clusters, geneGroupMeans, geneGroupSDs, rawPValues, adjPValues, fValues, ssGroups, ssError, dfNumValues, dfDenomValues);
2 26 Feb 07 jari 672         for (int i=0; i<this.clusters.length; i++) {
2 26 Feb 07 jari 673             if (i < this.clusters.length - 1) {
2 26 Feb 07 jari 674                 node.add(new DefaultMutableTreeNode(new LeafInfo("Significant Genes ", expViewer, new Integer(i))));
2 26 Feb 07 jari 675             } else if (i == this.clusters.length - 1) {
2 26 Feb 07 jari 676                 node.add(new DefaultMutableTreeNode(new LeafInfo("Non-significant Genes ", expViewer, new Integer(i))));
2 26 Feb 07 jari 677                 
2 26 Feb 07 jari 678             }
2 26 Feb 07 jari 679         }
2 26 Feb 07 jari 680         root.add(node);
2 26 Feb 07 jari 681     }
2 26 Feb 07 jari 682     
2 26 Feb 07 jari 683     /**
2 26 Feb 07 jari 684      * Adds nodes to display hierarchical trees.
2 26 Feb 07 jari 685      */
2 26 Feb 07 jari 686     private void addHierarchicalTrees(DefaultMutableTreeNode root, Cluster result_cluster, GeneralInfo info) {
2 26 Feb 07 jari 687         if (!info.hcl) {
2 26 Feb 07 jari 688             return;
2 26 Feb 07 jari 689         }
2 26 Feb 07 jari 690         DefaultMutableTreeNode node = new DefaultMutableTreeNode("Hierarchical Trees");
2 26 Feb 07 jari 691         NodeList nodeList = result_cluster.getNodeList();
2 26 Feb 07 jari 692         if (!drawSigTreesOnly) {        
2 26 Feb 07 jari 693             for (int i=0; i<nodeList.getSize(); i++) {
2 26 Feb 07 jari 694                 if (i < nodeList.getSize() - 1 ) {
2 26 Feb 07 jari 695                     node.add(new DefaultMutableTreeNode(new LeafInfo("Significant Genes ", createHCLViewer(nodeList.getNode(i), info))));
2 26 Feb 07 jari 696                 } else if (i == nodeList.getSize() - 1) {
2 26 Feb 07 jari 697                     node.add(new DefaultMutableTreeNode(new LeafInfo("Non-significant Genes ", createHCLViewer(nodeList.getNode(i), info))));
2 26 Feb 07 jari 698                 }
2 26 Feb 07 jari 699             }
2 26 Feb 07 jari 700         } else {
2 26 Feb 07 jari 701             node.add(new DefaultMutableTreeNode(new LeafInfo("Significant Genes ", createHCLViewer(nodeList.getNode(0), info))));            
2 26 Feb 07 jari 702         }
2 26 Feb 07 jari 703         root.add(node);
2 26 Feb 07 jari 704     }
2 26 Feb 07 jari 705     
2 26 Feb 07 jari 706     /**
2 26 Feb 07 jari 707      * Creates an <code>HCLViewer</code>.
2 26 Feb 07 jari 708      */
2 26 Feb 07 jari 709     private IViewer createHCLViewer(Node clusterNode, GeneralInfo info) {
2 26 Feb 07 jari 710         HCLTreeData genes_result = info.hcl_genes ? getResult(clusterNode, 0) : null;
2 26 Feb 07 jari 711         HCLTreeData samples_result = info.hcl_samples ? getResult(clusterNode, info.hcl_genes ? 4 : 0) : null;
2 26 Feb 07 jari 712         return new HCLViewer(this.experiment, clusterNode.getFeaturesIndexes(), genes_result, samples_result);
2 26 Feb 07 jari 713     }
2 26 Feb 07 jari 714     
2 26 Feb 07 jari 715     /**
2 26 Feb 07 jari 716      * Returns a hcl tree data from the specified cluster node.
2 26 Feb 07 jari 717      */
2 26 Feb 07 jari 718     private HCLTreeData getResult(Node clusterNode, int pos) {
2 26 Feb 07 jari 719         HCLTreeData data = new HCLTreeData();
2 26 Feb 07 jari 720         NodeValueList valueList = clusterNode.getValues();
2 26 Feb 07 jari 721         data.child_1_array = (int[])valueList.getNodeValue(pos).value;
2 26 Feb 07 jari 722         data.child_2_array = (int[])valueList.getNodeValue(pos+1).value;
2 26 Feb 07 jari 723         data.node_order = (int[])valueList.getNodeValue(pos+2).value;
2 26 Feb 07 jari 724         data.height = (float[])valueList.getNodeValue(pos+3).value;
2 26 Feb 07 jari 725         return data;
2 26 Feb 07 jari 726     }
2 26 Feb 07 jari 727     
2 26 Feb 07 jari 728     /**
2 26 Feb 07 jari 729      * Adds node with cluster information.
2 26 Feb 07 jari 730      */
2 26 Feb 07 jari 731     private void addClusterInfo(DefaultMutableTreeNode root) {
2 26 Feb 07 jari 732         DefaultMutableTreeNode node = new DefaultMutableTreeNode("Cluster Information");
2 26 Feb 07 jari 733         node.add(new DefaultMutableTreeNode(new LeafInfo("Results (#,%)", new OWAInfoViewer(this.clusters, this.experiment.getNumberOfGenes()))));
2 26 Feb 07 jari 734         root.add(node);
2 26 Feb 07 jari 735     }
2 26 Feb 07 jari 736     
2 26 Feb 07 jari 737     /**
2 26 Feb 07 jari 738      * Adds nodes to display centroid charts.
2 26 Feb 07 jari 739      */
2 26 Feb 07 jari 740     private void addCentroidViews(DefaultMutableTreeNode root) {
2 26 Feb 07 jari 741         DefaultMutableTreeNode centroidNode = new DefaultMutableTreeNode("Centroid Graphs");
2 26 Feb 07 jari 742         DefaultMutableTreeNode expressionNode = new DefaultMutableTreeNode("Expression Graphs");
2 26 Feb 07 jari 743         OWACentroidViewer centroidViewer = new OWACentroidViewer(this.experiment, clusters, geneGroupMeans, geneGroupSDs, rawPValues, adjPValues, fValues, ssGroups, ssError, dfNumValues, dfDenomValues);
2 26 Feb 07 jari 744         centroidViewer.setMeans(this.means.A);
2 26 Feb 07 jari 745         centroidViewer.setVariances(this.variances.A);
2 26 Feb 07 jari 746         for (int i=0; i<this.clusters.length; i++) {
2 26 Feb 07 jari 747             
2 26 Feb 07 jari 748             if (i == 0) {
2 26 Feb 07 jari 749                 centroidNode.add(new DefaultMutableTreeNode(new LeafInfo("Significant Genes ", centroidViewer, new CentroidUserObject(i, CentroidUserObject.VARIANCES_MODE))));
2 26 Feb 07 jari 750                 expressionNode.add(new DefaultMutableTreeNode(new LeafInfo("Significant Genes ", centroidViewer, new CentroidUserObject(i, CentroidUserObject.VALUES_MODE))));
2 26 Feb 07 jari 751             } else if (i == 1) {
2 26 Feb 07 jari 752                 centroidNode.add(new DefaultMutableTreeNode(new LeafInfo("Non-significant Genes ", centroidViewer, new CentroidUserObject(i, CentroidUserObject.VARIANCES_MODE))));
2 26 Feb 07 jari 753                 expressionNode.add(new DefaultMutableTreeNode(new LeafInfo("Non-significant Genes ", centroidViewer, new CentroidUserObject(i, CentroidUserObject.VALUES_MODE))));
2 26 Feb 07 jari 754                 
2 26 Feb 07 jari 755             }
2 26 Feb 07 jari 756         }
2 26 Feb 07 jari 757         
2 26 Feb 07 jari 758         OWACentroidsViewer centroidsViewer = new OWACentroidsViewer(this.experiment, clusters, geneGroupMeans, geneGroupSDs, rawPValues, adjPValues, fValues, ssGroups, ssError, dfNumValues, dfDenomValues);
2 26 Feb 07 jari 759         centroidsViewer.setMeans(this.means.A);
2 26 Feb 07 jari 760         centroidsViewer.setVariances(this.variances.A);
2 26 Feb 07 jari 761         
2 26 Feb 07 jari 762         centroidNode.add(new DefaultMutableTreeNode(new LeafInfo("All Genes", centroidsViewer, new Integer(CentroidUserObject.VARIANCES_MODE))));
2 26 Feb 07 jari 763         expressionNode.add(new DefaultMutableTreeNode(new LeafInfo("All Genes", centroidsViewer, new Integer(CentroidUserObject.VALUES_MODE))));
2 26 Feb 07 jari 764         
2 26 Feb 07 jari 765         root.add(centroidNode);
2 26 Feb 07 jari 766         root.add(expressionNode);
2 26 Feb 07 jari 767     }
2 26 Feb 07 jari 768     
2 26 Feb 07 jari 769     /*
2 26 Feb 07 jari 770     private void addFRatioInfoViews(DefaultMutableTreeNode root) {
2 26 Feb 07 jari 771         DefaultMutableTreeNode fRatioInfoNode = new DefaultMutableTreeNode("F-Ratio information");
2 26 Feb 07 jari 772         IViewer fSigViewer = new FStatsTableViewer(this.experiment, this.clusters, this.data, geneGroupMeans, geneGroupSDs, pValues, fValues, ssGroups, ssError, dfNumValues, dfDenomValues, true);
2 26 Feb 07 jari 773         IViewer fNonSigViewer = new FStatsTableViewer(this.experiment, this.clusters, this.data, geneGroupMeans, geneGroupSDs, pValues, fValues, ssGroups, ssError, dfNumValues, dfDenomValues, false);
2 26 Feb 07 jari 774         
2 26 Feb 07 jari 775         fRatioInfoNode.add(new DefaultMutableTreeNode(new LeafInfo("Significant Genes", fSigViewer)));
2 26 Feb 07 jari 776         fRatioInfoNode.add(new DefaultMutableTreeNode(new LeafInfo("Non-significant Genes", fNonSigViewer)));
2 26 Feb 07 jari 777         
2 26 Feb 07 jari 778         root.add(fRatioInfoNode);
2 26 Feb 07 jari 779     }
2 26 Feb 07 jari 780      */
2 26 Feb 07 jari 781     
2 26 Feb 07 jari 782     /**
2 26 Feb 07 jari 783      * Adds node with general iformation.
2 26 Feb 07 jari 784      */
2 26 Feb 07 jari 785     private void addGeneralInfo(DefaultMutableTreeNode root, GeneralInfo info) {
2 26 Feb 07 jari 786         DefaultMutableTreeNode node = new DefaultMutableTreeNode("General Information");
2 26 Feb 07 jari 787         node.add(getGroupAssignmentInfo());
2 26 Feb 07 jari 788         //node.add(new DefaultMutableTreeNode("Alpha (overall threshold p-value): "+info.alpha));
2 26 Feb 07 jari 789         if (info.correctionMethod.startsWith("False")) {
2 26 Feb 07 jari 790             node.add(new DefaultMutableTreeNode("Confidence (1 - alpha) : "+(1d - info.alpha)*100 + " %"));
2 26 Feb 07 jari 791         } else {
2 26 Feb 07 jari 792             node.add(new DefaultMutableTreeNode("Alpha (overall threshold p-value): "+info.alpha));
2 26 Feb 07 jari 793         }        
2 26 Feb 07 jari 794         node.add(new DefaultMutableTreeNode("Used permutation test? " + info.usePerms));
2 26 Feb 07 jari 795         if (info.usePerms) {
2 26 Feb 07 jari 796             node.add(new DefaultMutableTreeNode("Number of permutations " + info.numPerms));
2 26 Feb 07 jari 797         }
2 26 Feb 07 jari 798         /*
2 26 Feb 07 jari 799         node.add(new DefaultMutableTreeNode("P-values based on: "+info.pValueBasedOn));
2 26 Feb 07 jari 800         if (isPermutations) {
2 26 Feb 07 jari 801             node.add(new DefaultMutableTreeNode("All permutations used: " + info.useAllCombs));
2 26 Feb 07 jari 802             node.add(new DefaultMutableTreeNode("Number of permutations per gene: " + info.numCombs));
2 26 Feb 07 jari 803         }
2 26 Feb 07 jari 804          */
2 26 Feb 07 jari 805         if (info.correctionMethod.startsWith("False")) {
2 26 Feb 07 jari 806            node.add(new DefaultMutableTreeNode(info.correctionMethod)); 
2 26 Feb 07 jari 807         } else {
2 26 Feb 07 jari 808             node.add(new DefaultMutableTreeNode("Significance determined by: "+info.correctionMethod));
2 26 Feb 07 jari 809         }        
2 26 Feb 07 jari 810         //node.add(new DefaultMutableTreeNode("Significance determined by: "+info.correctionMethod));
2 26 Feb 07 jari 811         node.add(new DefaultMutableTreeNode("HCL: "+info.getMethodName()));
2 26 Feb 07 jari 812         node.add(new DefaultMutableTreeNode("Time: "+String.valueOf(info.time)+" ms"));
2 26 Feb 07 jari 813         node.add(new DefaultMutableTreeNode(info.function));
2 26 Feb 07 jari 814         root.add(node);
2 26 Feb 07 jari 815     }
2 26 Feb 07 jari 816     
2 26 Feb 07 jari 817     private DefaultMutableTreeNode getGroupAssignmentInfo() {
2 26 Feb 07 jari 818         DefaultMutableTreeNode groupAssignmentInfo = new DefaultMutableTreeNode("Group assignments ");
2 26 Feb 07 jari 819         DefaultMutableTreeNode notInGroups = new DefaultMutableTreeNode("Not in groups");
2 26 Feb 07 jari 820         DefaultMutableTreeNode[] groups = new DefaultMutableTreeNode[numGroups];
2 26 Feb 07 jari 821         for (int i = 0; i < numGroups; i++) {
2 26 Feb 07 jari 822             groups[i] = new DefaultMutableTreeNode("Group " + (i + 1));
2 26 Feb 07 jari 823             
2 26 Feb 07 jari 824         }
2 26 Feb 07 jari 825         
2 26 Feb 07 jari 826         for (int i = 0; i < groupAssignments.length; i++) {
2 26 Feb 07 jari 827             int currentGroup = groupAssignments[i];
2 26 Feb 07 jari 828             if (currentGroup == 0) {
2 26 Feb 07 jari 829                 notInGroups.add(new DefaultMutableTreeNode((String)(exptNamesVector.get(i))));
2 26 Feb 07 jari 830             } else {
2 26 Feb 07 jari 831                 groups[currentGroup - 1].add(new DefaultMutableTreeNode((String)(exptNamesVector.get(i))));
2 26 Feb 07 jari 832             }
2 26 Feb 07 jari 833         }
2 26 Feb 07 jari 834         
2 26 Feb 07 jari 835         for (int i = 0; i < groups.length; i++) {
2 26 Feb 07 jari 836             groupAssignmentInfo.add(groups[i]);
2 26 Feb 07 jari 837         }
2 26 Feb 07 jari 838         if (notInGroups.getChildCount() > 0) {
2 26 Feb 07 jari 839             groupAssignmentInfo.add(notInGroups);
2 26 Feb 07 jari 840         }
2 26 Feb 07 jari 841         return groupAssignmentInfo;
2 26 Feb 07 jari 842     }
2 26 Feb 07 jari 843     
2 26 Feb 07 jari 844     
2 26 Feb 07 jari 845     
2 26 Feb 07 jari 846     /**
2 26 Feb 07 jari 847      * The class to listen to progress, monitor and algorithms events.
2 26 Feb 07 jari 848      */
2 26 Feb 07 jari 849     private class Listener extends DialogListener implements AlgorithmListener {
2 26 Feb 07 jari 850         
2 26 Feb 07 jari 851         public void valueChanged(AlgorithmEvent event) {
2 26 Feb 07 jari 852             switch (event.getId()) {
2 26 Feb 07 jari 853                 case AlgorithmEvent.SET_UNITS:
2 26 Feb 07 jari 854                     progress.setUnits(event.getIntValue());
2 26 Feb 07 jari 855                     progress.setDescription(event.getDescription());
2 26 Feb 07 jari 856                     break;
2 26 Feb 07 jari 857                 case AlgorithmEvent.PROGRESS_VALUE:
2 26 Feb 07 jari 858                     progress.setValue(event.getIntValue());
2 26 Feb 07 jari 859                     progress.setDescription(event.getDescription());
2 26 Feb 07 jari 860                     break;
2 26 Feb 07 jari 861                 case AlgorithmEvent.MONITOR_VALUE:
2 26 Feb 07 jari 862                     int value = event.getIntValue();
2 26 Feb 07 jari 863                     if (value == -1) {
2 26 Feb 07 jari 864                         //monitor.dispose();
2 26 Feb 07 jari 865                     } else {
2 26 Feb 07 jari 866                         //monitor.update(value);
2 26 Feb 07 jari 867                     }
2 26 Feb 07 jari 868                     break;
2 26 Feb 07 jari 869             }
2 26 Feb 07 jari 870         }
2 26 Feb 07 jari 871         
2 26 Feb 07 jari 872         public void actionPerformed(ActionEvent e) {
2 26 Feb 07 jari 873             String command = e.getActionCommand();
2 26 Feb 07 jari 874             if (command.equals("cancel-command")) {
2 26 Feb 07 jari 875                 algorithm.abort();
2 26 Feb 07 jari 876                 progress.dispose();
2 26 Feb 07 jari 877                 //monitor.dispose();
2 26 Feb 07 jari 878             }
2 26 Feb 07 jari 879         }
2 26 Feb 07 jari 880         
2 26 Feb 07 jari 881         public void windowClosing(WindowEvent e) {
2 26 Feb 07 jari 882             algorithm.abort();
2 26 Feb 07 jari 883             progress.dispose();
2 26 Feb 07 jari 884             //monitor.dispose();
2 26 Feb 07 jari 885         }
2 26 Feb 07 jari 886     }
2 26 Feb 07 jari 887     
2 26 Feb 07 jari 888     private class GeneralInfo {
2 26 Feb 07 jari 889         public int clusters;
2 26 Feb 07 jari 890         public String correctionMethod;
2 26 Feb 07 jari 891         //public String pValueBasedOn;
2 26 Feb 07 jari 892         public double alpha;
2 26 Feb 07 jari 893         //public int numCombs;
2 26 Feb 07 jari 894         //public boolean useAllCombs;
2 26 Feb 07 jari 895         public long time;
2 26 Feb 07 jari 896         public String function;
2 26 Feb 07 jari 897         //public int numReps;
2 26 Feb 07 jari 898         //public double thresholdPercent;
2 26 Feb 07 jari 899         
2 26 Feb 07 jari 900         private boolean hcl, usePerms;
2 26 Feb 07 jari 901         private int hcl_method, numPerms;
2 26 Feb 07 jari 902         private boolean hcl_genes;
2 26 Feb 07 jari 903         private boolean hcl_samples;
2 26 Feb 07 jari 904         
2 26 Feb 07 jari 905         public String getMethodName() {
2 26 Feb 07 jari 906             return hcl ? HCLGUI.GeneralInfo.getMethodName(hcl_method) : "no linkage";
2 26 Feb 07 jari 907         }
2 26 Feb 07 jari 908         
2 26 Feb 07 jari 909     }
2 26 Feb 07 jari 910     
2 26 Feb 07 jari 911 }