mev-4.0.01/source/org/tigr/microarray/mev/cluster/gui/impl/ttest/TtestGUI.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: TtestGUI.java,v $
2 26 Feb 07 jari 7  * $Revision: 1.11 $
2 26 Feb 07 jari 8  * $Date: 2005/12/02 18:46:34 $
2 26 Feb 07 jari 9  * $Author: wwang67 $
2 26 Feb 07 jari 10  * $State: Exp $
2 26 Feb 07 jari 11  */
2 26 Feb 07 jari 12
2 26 Feb 07 jari 13 package org.tigr.microarray.mev.cluster.gui.impl.ttest;
2 26 Feb 07 jari 14
2 26 Feb 07 jari 15 import java.awt.event.ActionEvent;
2 26 Feb 07 jari 16 import java.awt.event.WindowEvent;
2 26 Feb 07 jari 17 import java.util.Vector;
2 26 Feb 07 jari 18
2 26 Feb 07 jari 19 import javax.swing.JFrame;
2 26 Feb 07 jari 20 import javax.swing.JOptionPane;
2 26 Feb 07 jari 21 import javax.swing.tree.DefaultMutableTreeNode;
2 26 Feb 07 jari 22
2 26 Feb 07 jari 23 import org.tigr.microarray.mev.cluster.Cluster;
2 26 Feb 07 jari 24 import org.tigr.microarray.mev.cluster.Node;
2 26 Feb 07 jari 25 import org.tigr.microarray.mev.cluster.NodeList;
2 26 Feb 07 jari 26 import org.tigr.microarray.mev.cluster.NodeValueList;
2 26 Feb 07 jari 27 import org.tigr.microarray.mev.cluster.algorithm.AbortException;
2 26 Feb 07 jari 28 import org.tigr.microarray.mev.cluster.algorithm.Algorithm;
2 26 Feb 07 jari 29 import org.tigr.microarray.mev.cluster.algorithm.AlgorithmData;
2 26 Feb 07 jari 30 import org.tigr.microarray.mev.cluster.algorithm.AlgorithmEvent;
2 26 Feb 07 jari 31 import org.tigr.microarray.mev.cluster.algorithm.AlgorithmException;
2 26 Feb 07 jari 32 import org.tigr.microarray.mev.cluster.algorithm.AlgorithmListener;
2 26 Feb 07 jari 33 import org.tigr.microarray.mev.cluster.algorithm.AlgorithmParameters;
2 26 Feb 07 jari 34 import org.tigr.microarray.mev.cluster.gui.Experiment;
2 26 Feb 07 jari 35 import org.tigr.microarray.mev.cluster.gui.IClusterGUI;
2 26 Feb 07 jari 36 import org.tigr.microarray.mev.cluster.gui.IData;
2 26 Feb 07 jari 37 import org.tigr.microarray.mev.cluster.gui.IDistanceMenu;
2 26 Feb 07 jari 38 import org.tigr.microarray.mev.cluster.gui.IFramework;
2 26 Feb 07 jari 39 import org.tigr.microarray.mev.cluster.gui.IViewer;
2 26 Feb 07 jari 40 import org.tigr.microarray.mev.cluster.gui.LeafInfo;
2 26 Feb 07 jari 41 import org.tigr.microarray.mev.cluster.gui.helpers.CentroidUserObject;
2 26 Feb 07 jari 42 import org.tigr.microarray.mev.cluster.gui.helpers.ClusterTableViewer;
2 26 Feb 07 jari 43 import org.tigr.microarray.mev.cluster.gui.impl.dialogs.DialogListener;
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 /**
2 26 Feb 07 jari 54  *
2 26 Feb 07 jari 55  * @author  nbhagaba
2 26 Feb 07 jari 56  * @version
2 26 Feb 07 jari 57  */
2 26 Feb 07 jari 58 public class TtestGUI implements IClusterGUI, IScriptGUI {
2 26 Feb 07 jari 59     
2 26 Feb 07 jari 60     private Algorithm algorithm;
2 26 Feb 07 jari 61     private Progress progress;
2 26 Feb 07 jari 62     //private Monitor monitor;
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     
2 26 Feb 07 jari 69     private String[] auxTitles;
2 26 Feb 07 jari 70     private Object[][] auxData;
2 26 Feb 07 jari 71     
2 26 Feb 07 jari 72     //private Vector sigTValues, nonSigTValues, sigPValues, nonSigPValues, additionalHeaders, additionalSigOutput, additionalNonSigOutput;
2 26 Feb 07 jari 73     private Vector tValues, rawPValues, adjPValues, dfValues, meansA, meansB, sdA, sdB, oneClassMeans, oneClassSDs;
2 26 Feb 07 jari 74     private Vector pairedGroupAExpts, pairedGroupBExpts;
2 26 Feb 07 jari 75     private IData data;
2 26 Feb 07 jari 76     Vector exptNamesVector;
2 26 Feb 07 jari 77     int[] groupAssignments;
2 26 Feb 07 jari 78     int tTestDesign, falseNum;
2 26 Feb 07 jari 79     double oneClassMean, falseProp;
2 26 Feb 07 jari 80     boolean isPermutations, useWelchDf, drawSigTreesOnly, doFastFDRApprox, calculateAdjFDRPVals;
2 26 Feb 07 jari 81     boolean[] isSig;
2 26 Feb 07 jari 82     double[] diffMeansBA, negLog10PValues;
2 26 Feb 07 jari 83     //JFrame tTestFrame;
2 26 Feb 07 jari 84     public static JFrame TtestFrame;
2 26 Feb 07 jari 85     public TtestGUI() {
2 26 Feb 07 jari 86     }
2 26 Feb 07 jari 87     
2 26 Feb 07 jari 88     /**
2 26 Feb 07 jari 89      * This method should return a tree with calculation results or
2 26 Feb 07 jari 90      * null, if analysis start was canceled.
2 26 Feb 07 jari 91      *
2 26 Feb 07 jari 92      * @param framework the reference to <code>IFramework</code> implementation,
2 26 Feb 07 jari 93      *       which is used to obtain an initial analysis data and parameters.
2 26 Feb 07 jari 94      * @throws AlgorithmException if calculation was failed.
2 26 Feb 07 jari 95      * @throws AbortException if calculation was canceled.
2 26 Feb 07 jari 96      * @see IFramework
2 26 Feb 07 jari 97      */
2 26 Feb 07 jari 98     public DefaultMutableTreeNode execute(IFramework framework) throws AlgorithmException {
2 26 Feb 07 jari 99         //int k = 2;
2 26 Feb 07 jari 100         
2 26 Feb 07 jari 101         this.experiment = framework.getData().getExperiment();
2 26 Feb 07 jari 102         //tTestFrame = (JFrame)framework.getFrame();
2 26 Feb 07 jari 103         exptNamesVector = new Vector();
2 26 Feb 07 jari 104         this.data = framework.getData();
2 26 Feb 07 jari 105         int number_of_samples = experiment.getNumberOfSamples();
2 26 Feb 07 jari 106         int number_of_genes = experiment.getNumberOfGenes();
2 26 Feb 07 jari 107         
2 26 Feb 07 jari 108         for (int i = 0; i < number_of_samples; i++) {
2 26 Feb 07 jari 109             exptNamesVector.add(framework.getData().getSampleName(experiment.getSampleIndex(i)));
2 26 Feb 07 jari 110         }
2 26 Feb 07 jari 111         
2 26 Feb 07 jari 112         TtestInitDialog ttDialog = new TtestInitDialog((JFrame) framework.getFrame(), true, exptNamesVector);
2 26 Feb 07 jari 113         ttDialog.setVisible(true);
2 26 Feb 07 jari 114         
2 26 Feb 07 jari 115         if (!ttDialog.isOkPressed()) return null;
2 26 Feb 07 jari 116         
2 26 Feb 07 jari 117         double alpha = 0.01d;
2 26 Feb 07 jari 118         try {
2 26 Feb 07 jari 119             alpha = ttDialog.getAlphaValue();
2 26 Feb 07 jari 120         } catch (NumberFormatException nfe) {
2 26 Feb 07 jari 121             JOptionPane.showMessageDialog(framework.getFrame(), "Invalid alpha value!", "Error", JOptionPane.ERROR_MESSAGE);
2 26 Feb 07 jari 122             return null;
2 26 Feb 07 jari 123         }
2 26 Feb 07 jari 124         tTestDesign = ttDialog.getTestDesign();
2 26 Feb 07 jari 125         oneClassMean = 0;
2 26 Feb 07 jari 126         if (tTestDesign == TtestInitDialog.ONE_CLASS) {
2 26 Feb 07 jari 127             groupAssignments = ttDialog.getOneClassAssignments();
2 26 Feb 07 jari 128             oneClassMean = ttDialog.getOneClassMean();
2 26 Feb 07 jari 129         } else if (tTestDesign == TtestInitDialog.BETWEEN_SUBJECTS) {
2 26 Feb 07 jari 130             groupAssignments = ttDialog.getGroupAssignments();
2 26 Feb 07 jari 131         } else if (tTestDesign == TtestInitDialog.PAIRED) {
2 26 Feb 07 jari 132             pairedGroupAExpts = ttDialog.getPairedAExpts();
2 26 Feb 07 jari 133             pairedGroupBExpts = ttDialog.getPairedBExpts();
2 26 Feb 07 jari 134         }
2 26 Feb 07 jari 135         int significanceMethod = ttDialog.getSignificanceMethod();
2 26 Feb 07 jari 136         if (significanceMethod == TtestInitDialog.FALSE_NUM) {
2 26 Feb 07 jari 137             falseNum = ttDialog.getFalseNum();
2 26 Feb 07 jari 138             calculateAdjFDRPVals = ttDialog.calculateFDRPVals();
2 26 Feb 07 jari 139             doFastFDRApprox = ttDialog.doFastFDRApprox();
2 26 Feb 07 jari 140         }
2 26 Feb 07 jari 141         if (significanceMethod == TtestInitDialog.FALSE_PROP) {
2 26 Feb 07 jari 142             falseProp = ttDialog.getFalseProp();
2 26 Feb 07 jari 143             calculateAdjFDRPVals = ttDialog.calculateFDRPVals();
2 26 Feb 07 jari 144             doFastFDRApprox = ttDialog.doFastFDRApprox();
2 26 Feb 07 jari 145         }        
2 26 Feb 07 jari 146         boolean isHierarchicalTree = ttDialog.isDrawTrees();
2 26 Feb 07 jari 147         drawSigTreesOnly = true;
2 26 Feb 07 jari 148         if (isHierarchicalTree) {
2 26 Feb 07 jari 149             drawSigTreesOnly = ttDialog.drawSigTreesOnly();
2 26 Feb 07 jari 150         }
2 26 Feb 07 jari 151         boolean isPermut = ttDialog.isPermut();
2 26 Feb 07 jari 152         isPermutations = isPermut;
2 26 Feb 07 jari 153         int numCombs = ttDialog.getUserNumCombs();
2 26 Feb 07 jari 154         boolean useAllCombs = ttDialog.useAllCombs();
2 26 Feb 07 jari 155         useWelchDf = ttDialog.useWelchDf();
2 26 Feb 07 jari 156         
2 26 Feb 07 jari 157         // hcl init
2 26 Feb 07 jari 158         int hcl_method = 0;
2 26 Feb 07 jari 159         boolean hcl_samples = false;
2 26 Feb 07 jari 160         boolean hcl_genes = false;
2 26 Feb 07 jari 161         
2 26 Feb 07 jari 162         IDistanceMenu menu = framework.getDistanceMenu();
2 26 Feb 07 jari 163         int function = menu.getDistanceFunction();
2 26 Feb 07 jari 164         if (function == Algorithm.DEFAULT) {
2 26 Feb 07 jari 165             function = Algorithm.EUCLIDEAN;
2 26 Feb 07 jari 166         }
2 26 Feb 07 jari 167         
2 26 Feb 07 jari 168         int hcl_function = 4;
2 26 Feb 07 jari 169         boolean hcl_absolute = false;
2 26 Feb 07 jari 170         
2 26 Feb 07 jari 171         if (isHierarchicalTree) {
2 26 Feb 07 jari 172             HCLInitDialog hcl_dialog = new HCLInitDialog(framework.getFrame(), menu.getFunctionName(function), menu.isAbsoluteDistance(), true);
2 26 Feb 07 jari 173             if (hcl_dialog.showModal() != JOptionPane.OK_OPTION) {
2 26 Feb 07 jari 174                 return null;
2 26 Feb 07 jari 175             }
2 26 Feb 07 jari 176             hcl_method = hcl_dialog.getMethod();
2 26 Feb 07 jari 177             hcl_samples = hcl_dialog.isClusterExperiments();
2 26 Feb 07 jari 178             hcl_genes = hcl_dialog.isClusterGenes();
2 26 Feb 07 jari 179             hcl_function = hcl_dialog.getDistanceMetric();
2 26 Feb 07 jari 180             hcl_absolute = hcl_dialog.getAbsoluteSelection();
2 26 Feb 07 jari 181         }
2 26 Feb 07 jari 182         
2 26 Feb 07 jari 183         Listener listener = new Listener();
2 26 Feb 07 jari 184         try {
2 26 Feb 07 jari 185             algorithm = framework.getAlgorithmFactory().getAlgorithm("TTEST");
2 26 Feb 07 jari 186             algorithm.addAlgorithmListener(listener);
2 26 Feb 07 jari 187             
2 26 Feb 07 jari 188             int genes = experiment.getNumberOfGenes();
2 26 Feb 07 jari 189             //this.monitor = new Monitor(framework.getFrame(), "Reallocations", 25, 100, 210.0/genes);
2 26 Feb 07 jari 190             //this.monitor.setStepXFactor((int)Math.floor(245/iterations));
2 26 Feb 07 jari 191             //this.monitor.update(genes);
2 26 Feb 07 jari 192             //this.monitor.show();
2 26 Feb 07 jari 193             
2 26 Feb 07 jari 194             this.progress = new Progress(framework.getFrame(), "Finding significant genes", listener);
2 26 Feb 07 jari 195             this.progress.show();
2 26 Feb 07 jari 196             
2 26 Feb 07 jari 197             AlgorithmData data = new AlgorithmData();
2 26 Feb 07 jari 198             
2 26 Feb 07 jari 199             data.addMatrix("experiment", experiment.getMatrix());
2 26 Feb 07 jari 200             data.addParam("distance-factor", String.valueOf(1.0f));
2 26 Feb 07 jari 201             data.addParam("distance-absolute", String.valueOf(menu.isAbsoluteDistance()));
2 26 Feb 07 jari 202             
2 26 Feb 07 jari 203             data.addParam("distance-function", String.valueOf(function));
2 26 Feb 07 jari 204             data.addParam("tTestDesign", String.valueOf(tTestDesign));
2 26 Feb 07 jari 205             if ((tTestDesign == TtestInitDialog.ONE_CLASS) || (tTestDesign == TtestInitDialog.BETWEEN_SUBJECTS)) {
2 26 Feb 07 jari 206                 data.addIntArray("group-assignments", groupAssignments);
2 26 Feb 07 jari 207             }
2 26 Feb 07 jari 208             if (tTestDesign == TtestInitDialog.ONE_CLASS) {
2 26 Feb 07 jari 209                 data.addParam("oneClassMean", String.valueOf(oneClassMean));
2 26 Feb 07 jari 210             }
2 26 Feb 07 jari 211             if (tTestDesign == TtestInitDialog.PAIRED) {
2 26 Feb 07 jari 212                 FloatMatrix pairedAExptsMatrix = new FloatMatrix(pairedGroupAExpts.size(), 1);
2 26 Feb 07 jari 213                 FloatMatrix pairedBExptsMatrix = new FloatMatrix(pairedGroupBExpts.size(), 1);
2 26 Feb 07 jari 214                 
2 26 Feb 07 jari 215                 for (int i = 0; i < pairedGroupAExpts.size(); i++) {
2 26 Feb 07 jari 216                     pairedAExptsMatrix.A[i][0] = ((Integer)(pairedGroupAExpts.get(i))).floatValue();
2 26 Feb 07 jari 217                     pairedBExptsMatrix.A[i][0] = ((Integer)(pairedGroupBExpts.get(i))).floatValue();
2 26 Feb 07 jari 218                 }
2 26 Feb 07 jari 219                 data.addMatrix("pairedAExptsMatrix", pairedAExptsMatrix);
2 26 Feb 07 jari 220                 data.addMatrix("pairedBExptsMatrix", pairedBExptsMatrix);                
2 26 Feb 07 jari 221             }            
2 26 Feb 07 jari 222             data.addParam("alpha", String.valueOf(alpha));
2 26 Feb 07 jari 223             data.addParam("significance-method", String.valueOf(significanceMethod));
2 26 Feb 07 jari 224             if (significanceMethod == TtestInitDialog.FALSE_NUM) {
2 26 Feb 07 jari 225                 data.addParam("falseNum", String.valueOf(falseNum));
2 26 Feb 07 jari 226                 data.addParam("calculateAdjFDRPVals", String.valueOf(calculateAdjFDRPVals));
2 26 Feb 07 jari 227                 data.addParam("useFastFDRApprox", String.valueOf(doFastFDRApprox));
2 26 Feb 07 jari 228             }
2 26 Feb 07 jari 229             if (significanceMethod == TtestInitDialog.FALSE_PROP) {
2 26 Feb 07 jari 230                 data.addParam("falseProp", String.valueOf((float)falseProp));
2 26 Feb 07 jari 231                 data.addParam("calculateAdjFDRPVals", String.valueOf(calculateAdjFDRPVals));
2 26 Feb 07 jari 232                 data.addParam("useFastFDRApprox", String.valueOf(doFastFDRApprox));
2 26 Feb 07 jari 233             }            
2 26 Feb 07 jari 234             data.addParam("is-permut", String.valueOf(isPermut));
2 26 Feb 07 jari 235             data.addParam("num-combs", String.valueOf(numCombs));
2 26 Feb 07 jari 236             data.addParam("use-all-combs", String.valueOf(useAllCombs));
2 26 Feb 07 jari 237             data.addParam("useWelchDf", String.valueOf(useWelchDf));
2 26 Feb 07 jari 238             
2 26 Feb 07 jari 239             // hcl parameters
2 26 Feb 07 jari 240             if (isHierarchicalTree) {
2 26 Feb 07 jari 241                 data.addParam("hierarchical-tree", String.valueOf(true));
2 26 Feb 07 jari 242                 data.addParam("draw-sig-trees-only", String.valueOf(drawSigTreesOnly));
2 26 Feb 07 jari 243                 data.addParam("method-linkage", String.valueOf(hcl_method));
2 26 Feb 07 jari 244                 data.addParam("calculate-genes", String.valueOf(hcl_genes));
2 26 Feb 07 jari 245                 data.addParam("calculate-experiments", String.valueOf(hcl_samples));
2 26 Feb 07 jari 246                 data.addParam("hcl-distance-function", String.valueOf(hcl_function));
2 26 Feb 07 jari 247                 data.addParam("hcl-distance-absolute", String.valueOf(hcl_absolute));   
2 26 Feb 07 jari 248             }
2 26 Feb 07 jari 249             
2 26 Feb 07 jari 250             long start = System.currentTimeMillis();
2 26 Feb 07 jari 251             AlgorithmData result = algorithm.execute(data);
2 26 Feb 07 jari 252             long time = System.currentTimeMillis() - start;
2 26 Feb 07 jari 253             // getting the results
2 26 Feb 07 jari 254             Cluster result_cluster = result.getCluster("cluster");
2 26 Feb 07 jari 255             NodeList nodeList = result_cluster.getNodeList();
2 26 Feb 07 jari 256             AlgorithmParameters resultMap = result.getParams();
2 26 Feb 07 jari 257             int k = 2; //resultMap.getInt("number-of-clusters"); // NEED THIS TO GET THE VALUE OF NUMBER-OF-CLUSTERS
2 26 Feb 07 jari 258             
2 26 Feb 07 jari 259             this.clusters = new int[k][];
2 26 Feb 07 jari 260             for (int i=0; i<k; i++) {
2 26 Feb 07 jari 261                 clusters[i] = nodeList.getNode(i).getFeaturesIndexes();
2 26 Feb 07 jari 262             }
2 26 Feb 07 jari 263             this.means = result.getMatrix("clusters_means");
2 26 Feb 07 jari 264             this.variances = result.getMatrix("clusters_variances");
2 26 Feb 07 jari 265             FloatMatrix sigPValuesMatrix = result.getMatrix("sigPValues");
2 26 Feb 07 jari 266             FloatMatrix sigTValuesMatrix = result.getMatrix("sigTValues");
2 26 Feb 07 jari 267             FloatMatrix nonSigPValuesMatrix = result.getMatrix("nonSigPValues");
2 26 Feb 07 jari 268             FloatMatrix nonSigTValuesMatrix = result.getMatrix("nonSigTValues");
2 26 Feb 07 jari 269             FloatMatrix rawPValuesMatrix = result.getMatrix("rawPValues");
2 26 Feb 07 jari 270             FloatMatrix adjPValuesMatrix = result.getMatrix("adjPValues");
2 26 Feb 07 jari 271             FloatMatrix tValuesMatrix = result.getMatrix("tValues");
2 26 Feb 07 jari 272             FloatMatrix dfMatrix = result.getMatrix("dfValues");
2 26 Feb 07 jari 273             FloatMatrix meansAMatrix = result.getMatrix("meansAMatrix");
2 26 Feb 07 jari 274             FloatMatrix meansBMatrix = result.getMatrix("meansBMatrix");
2 26 Feb 07 jari 275             FloatMatrix sdAMatrix = result.getMatrix("sdAMatrix");
2 26 Feb 07 jari 276             FloatMatrix sdBMatrix = result.getMatrix("sdBMatrix");
2 26 Feb 07 jari 277             FloatMatrix isSigMatrix = result.getMatrix("isSigMatrix");
2 26 Feb 07 jari 278             FloatMatrix oneClassMeansMatrix = result.getMatrix("oneClassMeansMatrix");
2 26 Feb 07 jari 279             FloatMatrix oneClassSDsMatrix = result.getMatrix("oneClassSDsMatrix");
2 26 Feb 07 jari 280             
2 26 Feb 07 jari 281             rawPValues = new Vector();
2 26 Feb 07 jari 282             adjPValues = new Vector();
2 26 Feb 07 jari 283             tValues = new Vector();
2 26 Feb 07 jari 284             dfValues = new Vector();
2 26 Feb 07 jari 285             meansA = new Vector();
2 26 Feb 07 jari 286             meansB = new Vector();
2 26 Feb 07 jari 287             sdA = new Vector();
2 26 Feb 07 jari 288             sdB = new Vector();
2 26 Feb 07 jari 289             oneClassMeans = new Vector();
2 26 Feb 07 jari 290             oneClassSDs = new Vector();
2 26 Feb 07 jari 291             
2 26 Feb 07 jari 292             for (int i = 0; i < rawPValuesMatrix.getRowDimension(); i++) {
2 26 Feb 07 jari 293                 rawPValues.add(new Float(rawPValuesMatrix.A[i][0]));
2 26 Feb 07 jari 294                 adjPValues.add(new Float(adjPValuesMatrix.A[i][0]));
2 26 Feb 07 jari 295             }
2 26 Feb 07 jari 296             
2 26 Feb 07 jari 297             for (int i = 0; i < tValuesMatrix.getRowDimension(); i++) {
2 26 Feb 07 jari 298                 tValues.add(new Float(tValuesMatrix.A[i][0]));
2 26 Feb 07 jari 299             }
2 26 Feb 07 jari 300             
2 26 Feb 07 jari 301             for (int i = 0; i < dfMatrix.getRowDimension(); i++) {
2 26 Feb 07 jari 302                 dfValues.add(new Float(dfMatrix.A[i][0]));
2 26 Feb 07 jari 303             }
2 26 Feb 07 jari 304             
2 26 Feb 07 jari 305             if (tTestDesign == TtestInitDialog.ONE_CLASS) {
2 26 Feb 07 jari 306                 for (int i = 0; i < oneClassMeansMatrix.getRowDimension(); i++) {
2 26 Feb 07 jari 307                     oneClassMeans.add(new Float(oneClassMeansMatrix.A[i][0]));
2 26 Feb 07 jari 308                 }
2 26 Feb 07 jari 309                 
2 26 Feb 07 jari 310                 for (int i = 0; i < oneClassSDsMatrix.getRowDimension(); i++) {
2 26 Feb 07 jari 311                     oneClassSDs.add(new Float(oneClassSDsMatrix.A[i][0]));
2 26 Feb 07 jari 312                 }
2 26 Feb 07 jari 313             }
2 26 Feb 07 jari 314             
2 26 Feb 07 jari 315             if ((tTestDesign == TtestInitDialog.BETWEEN_SUBJECTS) || (tTestDesign == TtestInitDialog.PAIRED)) {
2 26 Feb 07 jari 316                 
2 26 Feb 07 jari 317                 for (int i = 0; i < meansAMatrix.getRowDimension(); i++) {
2 26 Feb 07 jari 318                     meansA.add(new Float(meansAMatrix.A[i][0]));
2 26 Feb 07 jari 319                     meansB.add(new Float(meansBMatrix.A[i][0]));
2 26 Feb 07 jari 320                     sdA.add(new Float(sdAMatrix.A[i][0]));
2 26 Feb 07 jari 321                     sdB.add(new Float(sdBMatrix.A[i][0]));
2 26 Feb 07 jari 322                 }
2 26 Feb 07 jari 323                 
2 26 Feb 07 jari 324                 isSig = new boolean[isSigMatrix.getRowDimension()];
2 26 Feb 07 jari 325                 
2 26 Feb 07 jari 326                 for (int i = 0; i < isSig.length; i++) {
2 26 Feb 07 jari 327                     if (isSigMatrix.A[i][0] == 1.0f) {
2 26 Feb 07 jari 328                         isSig[i] = true;
2 26 Feb 07 jari 329                     } else {
2 26 Feb 07 jari 330                         isSig[i] = false;
2 26 Feb 07 jari 331                     }
2 26 Feb 07 jari 332                 }
2 26 Feb 07 jari 333                 
2 26 Feb 07 jari 334                 diffMeansBA = new double[isSigMatrix.getRowDimension()];
2 26 Feb 07 jari 335                 for (int i = 0; i < diffMeansBA.length; i++) {
2 26 Feb 07 jari 336                     diffMeansBA[i] = (double)(meansBMatrix.A[i][0]) - (double)(meansAMatrix.A[i][0]);
2 26 Feb 07 jari 337                 }
2 26 Feb 07 jari 338                 
2 26 Feb 07 jari 339                 negLog10PValues = new double[isSigMatrix.getRowDimension()];
2 26 Feb 07 jari 340                 
2 26 Feb 07 jari 341                 double log10BaseE = Math.log(10);
2 26 Feb 07 jari 342                 
2 26 Feb 07 jari 343                 for (int i = 0; i < negLog10PValues.length; i++) {
2 26 Feb 07 jari 344                     double currentP = (double)(adjPValuesMatrix.A[i][0]);
2 26 Feb 07 jari 345                     negLog10PValues[i] = (-1)*((Math.log(currentP))/log10BaseE);
2 26 Feb 07 jari 346                     //System.out.println("i = " + i + ", currentP = " + currentP + ", negLog10P = " + negLog10PValues[i]);
2 26 Feb 07 jari 347                 }
2 26 Feb 07 jari 348             }
2 26 Feb 07 jari 349             
2 26 Feb 07 jari 350             if (tTestDesign == TtestInitDialog.ONE_CLASS) {
2 26 Feb 07 jari 351                 
2 26 Feb 07 jari 352                 isSig = new boolean[isSigMatrix.getRowDimension()];
2 26 Feb 07 jari 353                 
2 26 Feb 07 jari 354                 for (int i = 0; i < isSig.length; i++) {
2 26 Feb 07 jari 355                     if (isSigMatrix.A[i][0] == 1.0f) {
2 26 Feb 07 jari 356                         isSig[i] = true;
2 26 Feb 07 jari 357                     } else {
2 26 Feb 07 jari 358                         isSig[i] = false;
2 26 Feb 07 jari 359                     }
2 26 Feb 07 jari 360                 }
2 26 Feb 07 jari 361                 
2 26 Feb 07 jari 362                 diffMeansBA = new double[isSigMatrix.getRowDimension()];
2 26 Feb 07 jari 363                 for (int i = 0; i < diffMeansBA.length; i++) {
2 26 Feb 07 jari 364                     diffMeansBA[i] = (double)((oneClassMeansMatrix.A[i][0]) - oneClassMean);
2 26 Feb 07 jari 365                 }
2 26 Feb 07 jari 366                 
2 26 Feb 07 jari 367                 negLog10PValues = new double[isSigMatrix.getRowDimension()];
2 26 Feb 07 jari 368                 
2 26 Feb 07 jari 369                 double log10BaseE = Math.log(10);
2 26 Feb 07 jari 370                 
2 26 Feb 07 jari 371                 for (int i = 0; i < negLog10PValues.length; i++) {
2 26 Feb 07 jari 372                     double currentP = (double)(adjPValuesMatrix.A[i][0]);
2 26 Feb 07 jari 373                     negLog10PValues[i] = (-1)*((Math.log(currentP))/log10BaseE);
2 26 Feb 07 jari 374                     //System.out.println("i = " + i + ", currentP = " + currentP + ", negLog10P = " + negLog10PValues[i]);
2 26 Feb 07 jari 375                 }                
2 26 Feb 07 jari 376             }            
2 26 Feb 07 jari 377             
2 26 Feb 07 jari 378             /*
2 26 Feb 07 jari 379             if (tTestDesign == TtestInitDialog.PAIRED) {
2 26 Feb 07 jari 380                 return null; //for now
2 26 Feb 07 jari 381             }
2 26 Feb 07 jari 382              */
2 26 Feb 07 jari 383             
2 26 Feb 07 jari 384             
2 26 Feb 07 jari 385             GeneralInfo info = new GeneralInfo();
2 26 Feb 07 jari 386             
2 26 Feb 07 jari 387             info.time = time;
2 26 Feb 07 jari 388             //ADD MORE INFO PARAMETERS HERE
2 26 Feb 07 jari 389             info.alpha = alpha;
2 26 Feb 07 jari 390             info.sigMethod = getSigMethod(significanceMethod);
2 26 Feb 07 jari 391             info.pValueBasedOn = getPValueBasedOn(isPermut);
2 26 Feb 07 jari 392             if (isPermut) {
2 26 Feb 07 jari 393                 info.useAllCombs = useAllCombs;
2 26 Feb 07 jari 394                 info.numCombs = numCombs;
2 26 Feb 07 jari 395             }
2 26 Feb 07 jari 396             info.function = menu.getFunctionName(function);
2 26 Feb 07 jari 397             info.hcl = isHierarchicalTree;
2 26 Feb 07 jari 398             info.hcl_genes = hcl_genes;
2 26 Feb 07 jari 399             info.hcl_samples = hcl_samples;
2 26 Feb 07 jari 400             info.hcl_method = hcl_method;
2 26 Feb 07 jari 401             
2 26 Feb 07 jari 402             Vector titlesVector = new Vector();
2 26 Feb 07 jari 403             if ((tTestDesign == TtestInitDialog.BETWEEN_SUBJECTS) || (tTestDesign == TtestInitDialog.PAIRED)) {
2 26 Feb 07 jari 404                 titlesVector.add("GroupA mean");
2 26 Feb 07 jari 405                 titlesVector.add("GroupA std.dev.");
2 26 Feb 07 jari 406                 titlesVector.add("GroupB mean");
2 26 Feb 07 jari 407                 titlesVector.add("GroupB std.dev.");
2 26 Feb 07 jari 408                 titlesVector.add("Absolute t value");
2 26 Feb 07 jari 409             } else if (tTestDesign == TtestInitDialog.ONE_CLASS) {
2 26 Feb 07 jari 410                 titlesVector.add("Gene mean");
2 26 Feb 07 jari 411                 titlesVector.add("Gene std.dev.");
2 26 Feb 07 jari 412                 titlesVector.add("t value");
2 26 Feb 07 jari 413             }
2 26 Feb 07 jari 414             titlesVector.add("Degrees of freedom");
2 26 Feb 07 jari 415             titlesVector.add("Raw p value");
2 26 Feb 07 jari 416             //titlesVector.add("Adj p value");
2 26 Feb 07 jari 417             if ((significanceMethod == TtestInitDialog.FALSE_NUM)||(significanceMethod == TtestInitDialog.FALSE_PROP)) {
2 26 Feb 07 jari 418                 if (calculateAdjFDRPVals)
2 26 Feb 07 jari 419                     titlesVector.add("Adj p value");
2 26 Feb 07 jari 420             } else {
2 26 Feb 07 jari 421                 titlesVector.add("Adj p value");
2 26 Feb 07 jari 422             }            
2 26 Feb 07 jari 423             
2 26 Feb 07 jari 424             auxTitles = new String[titlesVector.size()];
2 26 Feb 07 jari 425             for (int i = 0; i < auxTitles.length; i++) {
2 26 Feb 07 jari 426                 auxTitles[i] = (String)(titlesVector.get(i));
2 26 Feb 07 jari 427             }
2 26 Feb 07 jari 428             
2 26 Feb 07 jari 429             auxData = new Object[experiment.getNumberOfGenes()][auxTitles.length];
2 26 Feb 07 jari 430             for (int i = 0; i < auxData.length; i++) {
2 26 Feb 07 jari 431                 int counter = 0;
2 26 Feb 07 jari 432                 if ((tTestDesign == TtestInitDialog.BETWEEN_SUBJECTS) || (tTestDesign == TtestInitDialog.PAIRED)) {
2 26 Feb 07 jari 433                     auxData[i][counter++] = meansA.get(i);
2 26 Feb 07 jari 434                     auxData[i][counter++] = sdA.get(i);
2 26 Feb 07 jari 435                     auxData[i][counter++] = meansB.get(i);
2 26 Feb 07 jari 436                     auxData[i][counter++] = sdB.get(i);
2 26 Feb 07 jari 437                 } else if (tTestDesign == TtestInitDialog.ONE_CLASS) {
2 26 Feb 07 jari 438                     auxData[i][counter++] = oneClassMeans.get(i);
2 26 Feb 07 jari 439                     auxData[i][counter++] = oneClassSDs.get(i);
2 26 Feb 07 jari 440                 }
2 26 Feb 07 jari 441                 auxData[i][counter++] = tValues.get(i);
2 26 Feb 07 jari 442                 auxData[i][counter++] = dfValues.get(i);
2 26 Feb 07 jari 443                 auxData[i][counter++] = rawPValues.get(i);
2 26 Feb 07 jari 444                 if ((significanceMethod == TtestInitDialog.FALSE_NUM)||(significanceMethod == TtestInitDialog.FALSE_PROP)) {
2 26 Feb 07 jari 445                     if (calculateAdjFDRPVals)
2 26 Feb 07 jari 446                         auxData[i][counter++] = adjPValues.get(i);
2 26 Feb 07 jari 447                 } else {
2 26 Feb 07 jari 448                     auxData[i][counter++] = adjPValues.get(i);
2 26 Feb 07 jari 449                 }
2 26 Feb 07 jari 450             }
2 26 Feb 07 jari 451             
2 26 Feb 07 jari 452             return createResultTree(result_cluster, info);
2 26 Feb 07 jari 453             
2 26 Feb 07 jari 454         } finally {
2 26 Feb 07 jari 455             if (algorithm != null) {
2 26 Feb 07 jari 456                 algorithm.removeAlgorithmListener(listener);
2 26 Feb 07 jari 457             }
2 26 Feb 07 jari 458             if (progress != null) {
2 26 Feb 07 jari 459                 progress.dispose();
2 26 Feb 07 jari 460             }
2 26 Feb 07 jari 461             /*
2 26 Feb 07 jari 462             if (monitor != null) {
2 26 Feb 07 jari 463                 monitor.dispose();
2 26 Feb 07 jari 464             }
2 26 Feb 07 jari 465              */
2 26 Feb 07 jari 466         }
2 26 Feb 07 jari 467         
2 26 Feb 07 jari 468         //return null; //FOR NOW
2 26 Feb 07 jari 469     }
2 26 Feb 07 jari 470     
2 26 Feb 07 jari 471     
2 26 Feb 07 jari 472     /*********
2 26 Feb 07 jari 473      *
2 26 Feb 07 jari 474      *  Script Implementation
2 26 Feb 07 jari 475      *
2 26 Feb 07 jari 476      */
2 26 Feb 07 jari 477     
2 26 Feb 07 jari 478     public AlgorithmData getScriptParameters(IFramework framework) {
2 26 Feb 07 jari 479         this.experiment = framework.getData().getExperiment();
2 26 Feb 07 jari 480         exptNamesVector = new Vector();
2 26 Feb 07 jari 481         this.data = framework.getData();
2 26 Feb 07 jari 482         int number_of_samples = experiment.getNumberOfSamples();
2 26 Feb 07 jari 483         int number_of_genes = experiment.getNumberOfGenes();
2 26 Feb 07 jari 484         
2 26 Feb 07 jari 485         for (int i = 0; i < number_of_samples; i++) {
2 26 Feb 07 jari 486             exptNamesVector.add(framework.getData().getSampleName(experiment.getSampleIndex(i)));
2 26 Feb 07 jari 487         }
2 26 Feb 07 jari 488         
2 26 Feb 07 jari 489         TtestInitDialog ttDialog = new TtestInitDialog((JFrame) framework.getFrame(), true, exptNamesVector);
2 26 Feb 07 jari 490         ttDialog.setVisible(true);
2 26 Feb 07 jari 491         
2 26 Feb 07 jari 492         if (!ttDialog.isOkPressed()) return null;
2 26 Feb 07 jari 493         
2 26 Feb 07 jari 494         double alpha = 0.01d;
2 26 Feb 07 jari 495         try {
2 26 Feb 07 jari 496             alpha = ttDialog.getAlphaValue();
2 26 Feb 07 jari 497         } catch (NumberFormatException nfe) {
2 26 Feb 07 jari 498             JOptionPane.showMessageDialog(framework.getFrame(), "Invalid alpha value!", "Error", JOptionPane.ERROR_MESSAGE);
2 26 Feb 07 jari 499             return null;
2 26 Feb 07 jari 500         }
2 26 Feb 07 jari 501         tTestDesign = ttDialog.getTestDesign();
2 26 Feb 07 jari 502         oneClassMean = 0;
2 26 Feb 07 jari 503         if (tTestDesign == TtestInitDialog.ONE_CLASS) {
2 26 Feb 07 jari 504             groupAssignments = ttDialog.getOneClassAssignments();
2 26 Feb 07 jari 505             oneClassMean = ttDialog.getOneClassMean();
2 26 Feb 07 jari 506         } else if (tTestDesign == TtestInitDialog.BETWEEN_SUBJECTS) {
2 26 Feb 07 jari 507             groupAssignments = ttDialog.getGroupAssignments();
2 26 Feb 07 jari 508         } else if (tTestDesign == TtestInitDialog.PAIRED) {
2 26 Feb 07 jari 509             pairedGroupAExpts = ttDialog.getPairedAExpts();
2 26 Feb 07 jari 510             pairedGroupBExpts = ttDialog.getPairedBExpts();
2 26 Feb 07 jari 511         }
2 26 Feb 07 jari 512         int significanceMethod = ttDialog.getSignificanceMethod();
2 26 Feb 07 jari 513         if (significanceMethod == TtestInitDialog.FALSE_NUM) {
2 26 Feb 07 jari 514             falseNum = ttDialog.getFalseNum();
2 26 Feb 07 jari 515             System.out.println("getScriptParams: falseNum = " + falseNum);
2 26 Feb 07 jari 516             calculateAdjFDRPVals = ttDialog.calculateFDRPVals();
2 26 Feb 07 jari 517             doFastFDRApprox = ttDialog.doFastFDRApprox();
2 26 Feb 07 jari 518         }
2 26 Feb 07 jari 519         if (significanceMethod == TtestInitDialog.FALSE_PROP) {
2 26 Feb 07 jari 520             falseProp = ttDialog.getFalseProp();
2 26 Feb 07 jari 521             System.out.println("getScriptParams: falseProp = " + falseProp);
2 26 Feb 07 jari 522             calculateAdjFDRPVals = ttDialog.calculateFDRPVals();
2 26 Feb 07 jari 523             doFastFDRApprox = ttDialog.doFastFDRApprox();
2 26 Feb 07 jari 524         }        
2 26 Feb 07 jari 525         boolean isHierarchicalTree = ttDialog.isDrawTrees();
2 26 Feb 07 jari 526         drawSigTreesOnly = true;
2 26 Feb 07 jari 527         if (isHierarchicalTree) {
2 26 Feb 07 jari 528             drawSigTreesOnly = ttDialog.drawSigTreesOnly();
2 26 Feb 07 jari 529         }        
2 26 Feb 07 jari 530         boolean isPermut = ttDialog.isPermut();
2 26 Feb 07 jari 531         useWelchDf = ttDialog.useWelchDf();
2 26 Feb 07 jari 532         isPermutations = isPermut;
2 26 Feb 07 jari 533         int numCombs = ttDialog.getUserNumCombs();
2 26 Feb 07 jari 534         boolean useAllCombs = ttDialog.useAllCombs();
2 26 Feb 07 jari 535         
2 26 Feb 07 jari 536
2 26 Feb 07 jari 537         IDistanceMenu menu = framework.getDistanceMenu();
2 26 Feb 07 jari 538         int function = menu.getDistanceFunction();
2 26 Feb 07 jari 539         if (function == Algorithm.DEFAULT) {
2 26 Feb 07 jari 540             function = Algorithm.EUCLIDEAN;
2 26 Feb 07 jari 541         }
2 26 Feb 07 jari 542         
2 26 Feb 07 jari 543         // hcl init
2 26 Feb 07 jari 544         // hcl init
2 26 Feb 07 jari 545         int hcl_method = 0;
2 26 Feb 07 jari 546         boolean hcl_samples = false;
2 26 Feb 07 jari 547         boolean hcl_genes = false;        
2 26 Feb 07 jari 548         int hcl_function = 4;
2 26 Feb 07 jari 549         boolean hcl_absolute = false;
2 26 Feb 07 jari 550         
2 26 Feb 07 jari 551         if (isHierarchicalTree) {
2 26 Feb 07 jari 552             HCLInitDialog hcl_dialog = new HCLInitDialog(framework.getFrame(), menu.getFunctionName(function), menu.isAbsoluteDistance(), true);
2 26 Feb 07 jari 553             if (hcl_dialog.showModal() != JOptionPane.OK_OPTION) {
2 26 Feb 07 jari 554                 return null;
2 26 Feb 07 jari 555             }
2 26 Feb 07 jari 556             hcl_method = hcl_dialog.getMethod();
2 26 Feb 07 jari 557             hcl_samples = hcl_dialog.isClusterExperiments();
2 26 Feb 07 jari 558             hcl_genes = hcl_dialog.isClusterGenes();
2 26 Feb 07 jari 559             hcl_function = hcl_dialog.getDistanceMetric();
2 26 Feb 07 jari 560             hcl_absolute = hcl_dialog.getAbsoluteSelection();
2 26 Feb 07 jari 561         }
2 26 Feb 07 jari 562
2 26 Feb 07 jari 563         
2 26 Feb 07 jari 564         int genes = experiment.getNumberOfGenes();
2 26 Feb 07 jari 565         
2 26 Feb 07 jari 566         AlgorithmData data = new AlgorithmData();
2 26 Feb 07 jari 567         
2 26 Feb 07 jari 568         data.addParam("distance-factor", String.valueOf(1.0f));
2 26 Feb 07 jari 569         data.addParam("distance-absolute", String.valueOf(menu.isAbsoluteDistance()));                
2 26 Feb 07 jari 570         data.addParam("distance-function", String.valueOf(function));
2 26 Feb 07 jari 571         data.addParam("tTestDesign", String.valueOf(tTestDesign));
2 26 Feb 07 jari 572         if ((tTestDesign == TtestInitDialog.ONE_CLASS) || (tTestDesign == TtestInitDialog.BETWEEN_SUBJECTS)) {
2 26 Feb 07 jari 573             data.addIntArray("group-assignments", groupAssignments);
2 26 Feb 07 jari 574         }
2 26 Feb 07 jari 575   
2 26 Feb 07 jari 576         if (tTestDesign == TtestInitDialog.ONE_CLASS) {
2 26 Feb 07 jari 577             data.addParam("oneClassMean", String.valueOf(oneClassMean));
2 26 Feb 07 jari 578         }
2 26 Feb 07 jari 579         
2 26 Feb 07 jari 580         if (tTestDesign == TtestInitDialog.PAIRED) {
2 26 Feb 07 jari 581             FloatMatrix pairedAExptsMatrix = new FloatMatrix(pairedGroupAExpts.size(), 1);
2 26 Feb 07 jari 582             FloatMatrix pairedBExptsMatrix = new FloatMatrix(pairedGroupBExpts.size(), 1);
2 26 Feb 07 jari 583             
2 26 Feb 07 jari 584             for (int i = 0; i < pairedGroupAExpts.size(); i++) {
2 26 Feb 07 jari 585                 pairedAExptsMatrix.A[i][0] = ((Integer)(pairedGroupAExpts.get(i))).floatValue();
2 26 Feb 07 jari 586                 pairedBExptsMatrix.A[i][0] = ((Integer)(pairedGroupBExpts.get(i))).floatValue();
2 26 Feb 07 jari 587             }
2 26 Feb 07 jari 588             data.addMatrix("pairedAExptsMatrix", pairedAExptsMatrix);
2 26 Feb 07 jari 589             data.addMatrix("pairedBExptsMatrix", pairedBExptsMatrix);
2 26 Feb 07 jari 590         }
2 26 Feb 07 jari 591         data.addParam("alpha", String.valueOf(alpha));
2 26 Feb 07 jari 592         data.addParam("significance-method", String.valueOf(significanceMethod));
2 26 Feb 07 jari 593         if (significanceMethod == TtestInitDialog.FALSE_NUM) {
2 26 Feb 07 jari 594             data.addParam("falseNum", String.valueOf(falseNum));
2 26 Feb 07 jari 595             data.addParam("calculateAdjFDRPVals", String.valueOf(calculateAdjFDRPVals));
2 26 Feb 07 jari 596             data.addParam("useFastFDRApprox", String.valueOf(doFastFDRApprox));
2 26 Feb 07 jari 597         }
2 26 Feb 07 jari 598         if (significanceMethod == TtestInitDialog.FALSE_PROP) {
2 26 Feb 07 jari 599             data.addParam("falseProp", String.valueOf((float)falseProp));
2 26 Feb 07 jari 600             data.addParam("calculateAdjFDRPVals", String.valueOf(calculateAdjFDRPVals));
2 26 Feb 07 jari 601             data.addParam("useFastFDRApprox", String.valueOf(doFastFDRApprox));
2 26 Feb 07 jari 602         }        
2 26 Feb 07 jari 603         data.addParam("is-permut", String.valueOf(isPermut));
2 26 Feb 07 jari 604         data.addParam("num-combs", String.valueOf(numCombs));
2 26 Feb 07 jari 605         data.addParam("use-all-combs", String.valueOf(useAllCombs));
2 26 Feb 07 jari 606         data.addParam("useWelchDf", String.valueOf(useWelchDf));        
2 26 Feb 07 jari 607         
2 26 Feb 07 jari 608         // hcl parameters
2 26 Feb 07 jari 609         if (isHierarchicalTree) {
2 26 Feb 07 jari 610             data.addParam("hierarchical-tree", String.valueOf(true));
2 26 Feb 07 jari 611             data.addParam("draw-sig-trees-only", String.valueOf(drawSigTreesOnly));            
2 26 Feb 07 jari 612             data.addParam("method-linkage", String.valueOf(hcl_method));
2 26 Feb 07 jari 613             data.addParam("calculate-genes", String.valueOf(hcl_genes));
2 26 Feb 07 jari 614             data.addParam("calculate-experiments", String.valueOf(hcl_samples));
2 26 Feb 07 jari 615             data.addParam("hcl-distance-function", String.valueOf(hcl_function));
2 26 Feb 07 jari 616             data.addParam("hcl-distance-absolute", String.valueOf(hcl_absolute));
2 26 Feb 07 jari 617         }
2 26 Feb 07 jari 618         
2 26 Feb 07 jari 619         
2 26 Feb 07 jari 620         // alg name
2 26 Feb 07 jari 621         data.addParam("name", "TTEST");
2 26 Feb 07 jari 622         
2 26 Feb 07 jari 623         // alg type
2 26 Feb 07 jari 624         data.addParam("alg-type", "cluster-genes");
2 26 Feb 07 jari 625         
2 26 Feb 07 jari 626         // output class
2 26 Feb 07 jari 627         data.addParam("output-class", "partition-output");
2 26 Feb 07 jari 628         
2 26 Feb 07 jari 629         //output nodes
2 26 Feb 07 jari 630         String [] outputNodes = new String[2];
2 26 Feb 07 jari 631         outputNodes[0] = "Significant Genes";
2 26 Feb 07 jari 632         outputNodes[1] = "Non-significant Genes";
2 26 Feb 07 jari 633         
2 26 Feb 07 jari 634         data.addStringArray("output-nodes", outputNodes);
2 26 Feb 07 jari 635         
2 26 Feb 07 jari 636         return data;
2 26 Feb 07 jari 637     }
2 26 Feb 07 jari 638     
2 26 Feb 07 jari 639     
2 26 Feb 07 jari 640     public DefaultMutableTreeNode executeScript(IFramework framework, AlgorithmData algData, Experiment experiment) throws AlgorithmException {
2 26 Feb 07 jari 641         Listener listener = new Listener();
2 26 Feb 07 jari 642         
2 26 Feb 07 jari 643         try {
2 26 Feb 07 jari 644             algorithm = framework.getAlgorithmFactory().getAlgorithm("TTEST");
2 26 Feb 07 jari 645             algorithm.addAlgorithmListener(listener);
2 26 Feb 07 jari 646             
2 26 Feb 07 jari 647             this.experiment = experiment;
2 26 Feb 07 jari 648             this.data = framework.getData();
2 26 Feb 07 jari 649             
2 26 Feb 07 jari 650             this.groupAssignments = algData.getIntArray("group-assignments");
2 26 Feb 07 jari 651             this.isPermutations = algData.getParams().getBoolean("is-permut");
2 26 Feb 07 jari 652             this.useWelchDf = algData.getParams().getBoolean("useWelchDf");
2 26 Feb 07 jari 653             this.drawSigTreesOnly = algData.getParams().getBoolean("draw-sig-trees-only");
2 26 Feb 07 jari 654             this.exptNamesVector = new Vector();
2 26 Feb 07 jari 655             int number_of_samples = experiment.getNumberOfSamples();
2 26 Feb 07 jari 656             for (int i = 0; i < number_of_samples; i++) {
2 26 Feb 07 jari 657                 exptNamesVector.add(this.data.getSampleName(i));
2 26 Feb 07 jari 658             }
2 26 Feb 07 jari 659       
2 26 Feb 07 jari 660             int significanceMethod = algData.getParams().getInt("significance-method");
2 26 Feb 07 jari 661             algData.addMatrix("experiment", experiment.getMatrix());
2 26 Feb 07 jari 662             
2 26 Feb 07 jari 663             this.tTestDesign = algData.getParams().getInt("tTestDesign");            
2 26 Feb 07 jari 664             System.out.println("reached upto here");
2 26 Feb 07 jari 665             if (significanceMethod == TtestInitDialog.FALSE_NUM) {
2 26 Feb 07 jari 666                 this.falseNum = algData.getParams().getInt("falseNum");
2 26 Feb 07 jari 667                 System.out.println("executeScript: fasleNum = " + falseNum);
2 26 Feb 07 jari 668             } else if (significanceMethod == TtestInitDialog.FALSE_PROP) {
2 26 Feb 07 jari 669                 this.falseProp = algData.getParams().getFloat("falseProp");
2 26 Feb 07 jari 670                 System.out.println("executeScript: falseProp = " + falseProp);
2 26 Feb 07 jari 671             }
2 26 Feb 07 jari 672                        
2 26 Feb 07 jari 673             int genes = experiment.getNumberOfGenes();
2 26 Feb 07 jari 674             
2 26 Feb 07 jari 675             //get global ttest design
2 26 Feb 07 jari 676             
2 26 Feb 07 jari 677             if (this.tTestDesign == TtestInitDialog.PAIRED) {
2 26 Feb 07 jari 678                 FloatMatrix pairedAExptsMatrix = algData.getMatrix("pairedAExptsMatrix");
2 26 Feb 07 jari 679                 FloatMatrix pairedBExptsMatrix = algData.getMatrix("pairedBExptsMatrix");
2 26 Feb 07 jari 680                 pairedGroupAExpts = new Vector();
2 26 Feb 07 jari 681                 pairedGroupBExpts = new Vector();
2 26 Feb 07 jari 682                 
2 26 Feb 07 jari 683                 for (int i = 0; i < pairedAExptsMatrix.A.length; i++) {
2 26 Feb 07 jari 684                     pairedGroupAExpts.add(new Integer((int)pairedAExptsMatrix.A[i][0]));
2 26 Feb 07 jari 685                     pairedGroupBExpts.add(new Integer((int)pairedBExptsMatrix.A[i][0]));
2 26 Feb 07 jari 686                 }
2 26 Feb 07 jari 687             }
2 26 Feb 07 jari 688             
2 26 Feb 07 jari 689             this.progress = new Progress(framework.getFrame(), "Finding significant genes", listener);
2 26 Feb 07 jari 690             this.progress.show();
2 26 Feb 07 jari 691             
2 26 Feb 07 jari 692             long start = System.currentTimeMillis();
2 26 Feb 07 jari 693             AlgorithmData result = algorithm.execute(algData);
2 26 Feb 07 jari 694             long time = System.currentTimeMillis() - start;
2 26 Feb 07 jari 695             // getting the results
2 26 Feb 07 jari 696             Cluster result_cluster = result.getCluster("cluster");
2 26 Feb 07 jari 697             NodeList nodeList = result_cluster.getNodeList();
2 26 Feb 07 jari 698             AlgorithmParameters resultMap = result.getParams();
2 26 Feb 07 jari 699             int k = 2; //resultMap.getInt("number-of-clusters"); // NEED THIS TO GET THE VALUE OF NUMBER-OF-CLUSTERS
2 26 Feb 07 jari 700             
2 26 Feb 07 jari 701             this.clusters = new int[k][];
2 26 Feb 07 jari 702             for (int i=0; i<k; i++) {
2 26 Feb 07 jari 703                 clusters[i] = nodeList.getNode(i).getFeaturesIndexes();
2 26 Feb 07 jari 704             }
2 26 Feb 07 jari 705             this.means = result.getMatrix("clusters_means");
2 26 Feb 07 jari 706             this.variances = result.getMatrix("clusters_variances");
2 26 Feb 07 jari 707             FloatMatrix sigPValuesMatrix = result.getMatrix("sigPValues");
2 26 Feb 07 jari 708             FloatMatrix sigTValuesMatrix = result.getMatrix("sigTValues");
2 26 Feb 07 jari 709             FloatMatrix nonSigPValuesMatrix = result.getMatrix("nonSigPValues");
2 26 Feb 07 jari 710             FloatMatrix nonSigTValuesMatrix = result.getMatrix("nonSigTValues");
2 26 Feb 07 jari 711             FloatMatrix rawPValuesMatrix = result.getMatrix("rawPValues");
2 26 Feb 07 jari 712             FloatMatrix adjPValuesMatrix = result.getMatrix("adjPValues");
2 26 Feb 07 jari 713             FloatMatrix tValuesMatrix = result.getMatrix("tValues");
2 26 Feb 07 jari 714             FloatMatrix dfMatrix = result.getMatrix("dfValues");
2 26 Feb 07 jari 715             FloatMatrix meansAMatrix = result.getMatrix("meansAMatrix");
2 26 Feb 07 jari 716             FloatMatrix meansBMatrix = result.getMatrix("meansBMatrix");
2 26 Feb 07 jari 717             FloatMatrix sdAMatrix = result.getMatrix("sdAMatrix");
2 26 Feb 07 jari 718             FloatMatrix sdBMatrix = result.getMatrix("sdBMatrix");
2 26 Feb 07 jari 719             FloatMatrix isSigMatrix = result.getMatrix("isSigMatrix");
2 26 Feb 07 jari 720             FloatMatrix oneClassMeansMatrix = result.getMatrix("oneClassMeansMatrix");
2 26 Feb 07 jari 721             FloatMatrix oneClassSDsMatrix = result.getMatrix("oneClassSDsMatrix");
2 26 Feb 07 jari 722             
2 26 Feb 07 jari 723             rawPValues = new Vector();
2 26 Feb 07 jari 724             adjPValues = new Vector();
2 26 Feb 07 jari 725             tValues = new Vector();
2 26 Feb 07 jari 726             dfValues = new Vector();
2 26 Feb 07 jari 727             meansA = new Vector();
2 26 Feb 07 jari 728             meansB = new Vector();
2 26 Feb 07 jari 729             sdA = new Vector();
2 26 Feb 07 jari 730             sdB = new Vector();
2 26 Feb 07 jari 731             oneClassMeans = new Vector();
2 26 Feb 07 jari 732             oneClassSDs = new Vector();
2 26 Feb 07 jari 733             
2 26 Feb 07 jari 734             for (int i = 0; i < rawPValuesMatrix.getRowDimension(); i++) {
2 26 Feb 07 jari 735                 rawPValues.add(new Float(rawPValuesMatrix.A[i][0]));
2 26 Feb 07 jari 736                 adjPValues.add(new Float(adjPValuesMatrix.A[i][0]));
2 26 Feb 07 jari 737             }
2 26 Feb 07 jari 738             
2 26 Feb 07 jari 739             for (int i = 0; i < tValuesMatrix.getRowDimension(); i++) {
2 26 Feb 07 jari 740                 tValues.add(new Float(tValuesMatrix.A[i][0]));
2 26 Feb 07 jari 741             }
2 26 Feb 07 jari 742             
2 26 Feb 07 jari 743             for (int i = 0; i < dfMatrix.getRowDimension(); i++) {
2 26 Feb 07 jari 744                 dfValues.add(new Float(dfMatrix.A[i][0]));
2 26 Feb 07 jari 745             }
2 26 Feb 07 jari 746             
2 26 Feb 07 jari 747             if (tTestDesign == TtestInitDialog.ONE_CLASS) {
2 26 Feb 07 jari 748                 for (int i = 0; i < oneClassMeansMatrix.getRowDimension(); i++) {
2 26 Feb 07 jari 749                     oneClassMeans.add(new Float(oneClassMeansMatrix.A[i][0]));
2 26 Feb 07 jari 750                 }
2 26 Feb 07 jari 751                 
2 26 Feb 07 jari 752                 for (int i = 0; i < oneClassSDsMatrix.getRowDimension(); i++) {
2 26 Feb 07 jari 753                     oneClassSDs.add(new Float(oneClassSDsMatrix.A[i][0]));
2 26 Feb 07 jari 754                 }
2 26 Feb 07 jari 755             }
2 26 Feb 07 jari 756             
2 26 Feb 07 jari 757             if ((tTestDesign == TtestInitDialog.BETWEEN_SUBJECTS) ||(tTestDesign == TtestInitDialog.PAIRED)) {
2 26 Feb 07 jari 758                 
2 26 Feb 07 jari 759                 for (int i = 0; i < meansAMatrix.getRowDimension(); i++) {
2 26 Feb 07 jari 760                     meansA.add(new Float(meansAMatrix.A[i][0]));
2 26 Feb 07 jari 761                     meansB.add(new Float(meansBMatrix.A[i][0]));
2 26 Feb 07 jari 762                     sdA.add(new Float(sdAMatrix.A[i][0]));
2 26 Feb 07 jari 763                     sdB.add(new Float(sdBMatrix.A[i][0]));
2 26 Feb 07 jari 764                 }
2 26 Feb 07 jari 765                 
2 26 Feb 07 jari 766                 isSig = new boolean[isSigMatrix.getRowDimension()];
2 26 Feb 07 jari 767                 
2 26 Feb 07 jari 768                 for (int i = 0; i < isSig.length; i++) {
2 26 Feb 07 jari 769                     if (isSigMatrix.A[i][0] == 1.0f) {
2 26 Feb 07 jari 770                         isSig[i] = true;
2 26 Feb 07 jari 771                     } else {
2 26 Feb 07 jari 772                         isSig[i] = false;
2 26 Feb 07 jari 773                     }
2 26 Feb 07 jari 774                 }
2 26 Feb 07 jari 775                 
2 26 Feb 07 jari 776                 diffMeansBA = new double[isSigMatrix.getRowDimension()];
2 26 Feb 07 jari 777                 for (int i = 0; i < diffMeansBA.length; i++) {
2 26 Feb 07 jari 778                     diffMeansBA[i] = (double)(meansBMatrix.A[i][0]) - (double)(meansAMatrix.A[i][0]);
2 26 Feb 07 jari 779                 }
2 26 Feb 07 jari 780                 
2 26 Feb 07 jari 781                 negLog10PValues = new double[isSigMatrix.getRowDimension()];
2 26 Feb 07 jari 782                 
2 26 Feb 07 jari 783                 double log10BaseE = Math.log(10);
2 26 Feb 07 jari 784                 
2 26 Feb 07 jari 785                 for (int i = 0; i < negLog10PValues.length; i++) {
2 26 Feb 07 jari 786                     double currentP = (double)(adjPValuesMatrix.A[i][0]);
2 26 Feb 07 jari 787                     negLog10PValues[i] = (-1)*((Math.log(currentP))/log10BaseE);
2 26 Feb 07 jari 788                     //System.out.println("i = " + i + ", currentP = " + currentP + ", negLog10P = " + negLog10PValues[i]);
2 26 Feb 07 jari 789                 }
2 26 Feb 07 jari 790             }
2 26 Feb 07 jari 791             
2 26 Feb 07 jari 792             if (tTestDesign == TtestInitDialog.ONE_CLASS) {
2 26 Feb 07 jari 793                 
2 26 Feb 07 jari 794                 isSig = new boolean[isSigMatrix.getRowDimension()];
2 26 Feb 07 jari 795                 
2 26 Feb 07 jari 796                 for (int i = 0; i < isSig.length; i++) {
2 26 Feb 07 jari 797                     if (isSigMatrix.A[i][0] == 1.0f) {
2 26 Feb 07 jari 798                         isSig[i] = true;
2 26 Feb 07 jari 799                     } else {
2 26 Feb 07 jari 800                         isSig[i] = false;
2 26 Feb 07 jari 801                     }
2 26 Feb 07 jari 802                 }
2 26 Feb 07 jari 803                 
2 26 Feb 07 jari 804                 diffMeansBA = new double[isSigMatrix.getRowDimension()];
2 26 Feb 07 jari 805                 for (int i = 0; i < diffMeansBA.length; i++) {
2 26 Feb 07 jari 806                     diffMeansBA[i] = (double)((oneClassMeansMatrix.A[i][0]) - oneClassMean);
2 26 Feb 07 jari 807                 }
2 26 Feb 07 jari 808                 
2 26 Feb 07 jari 809                 negLog10PValues = new double[isSigMatrix.getRowDimension()];
2 26 Feb 07 jari 810                 
2 26 Feb 07 jari 811                 double log10BaseE = Math.log(10);
2 26 Feb 07 jari 812                 
2 26 Feb 07 jari 813                 for (int i = 0; i < negLog10PValues.length; i++) {
2 26 Feb 07 jari 814                     double currentP = (double)(adjPValuesMatrix.A[i][0]);
2 26 Feb 07 jari 815                     negLog10PValues[i] = (-1)*((Math.log(currentP))/log10BaseE);
2 26 Feb 07 jari 816                     //System.out.println("i = " + i + ", currentP = " + currentP + ", negLog10P = " + negLog10PValues[i]);
2 26 Feb 07 jari 817                 }                
2 26 Feb 07 jari 818             }
2 26 Feb 07 jari 819             
2 26 Feb 07 jari 820             
2 26 Feb 07 jari 821             GeneralInfo info = new GeneralInfo();
2 26 Feb 07 jari 822             
2 26 Feb 07 jari 823             info.time = time;
2 26 Feb 07 jari 824             
2 26 Feb 07 jari 825             AlgorithmParameters params = algData.getParams();
2 26 Feb 07 jari 826             
2 26 Feb 07 jari 827             
2 26 Feb 07 jari 828             /*
2 26 Feb 07 jari 829              *        data.addParam("distance-function", String.valueOf(function));
2 26 Feb 07 jari 830         data.addParam("tTestDesign", String.valueOf(tTestDesign));
2 26 Feb 07 jari 831         data.addIntArray("group-assignments", groupAssignments);
2 26 Feb 07 jari 832         if (tTestDesign == TtestInitDialog.ONE_CLASS) {
2 26 Feb 07 jari 833             data.addParam("oneClassMean", String.valueOf(oneClassMean));
2 26 Feb 07 jari 834         }
2 26 Feb 07 jari 835         data.addParam("alpha", String.valueOf(alpha));
2 26 Feb 07 jari 836         data.addParam("significance-method", String.valueOf(significanceMethod));
2 26 Feb 07 jari 837         data.addParam("is-permut", String.valueOf(isPermut));
2 26 Feb 07 jari 838         data.addParam("num-combs", String.valueOf(numCombs));
2 26 Feb 07 jari 839         data.addParam("use-all-combs", String.valueOf(useAllCombs));
2 26 Feb 07 jari 840              
2 26 Feb 07 jari 841         // hcl parameters
2 26 Feb 07 jari 842         if (isHierarchicalTree) {
2 26 Feb 07 jari 843             data.addParam("hierarchical-tree", String.valueOf(true));
2 26 Feb 07 jari 844             data.addParam("method-linkage", String.valueOf(hcl_method));
2 26 Feb 07 jari 845             data.addParam("calculate-genes", String.valueOf(hcl_genes));
2 26 Feb 07 jari 846             data.addParam("calculate-experiments", String.valueOf(hcl_samples));
2 26 Feb 07 jari 847         }
2 26 Feb 07 jari 848              */
2 26 Feb 07 jari 849             
2 26 Feb 07 jari 850             
2 26 Feb 07 jari 851             //ADD MORE INFO PARAMETERS HERE
2 26 Feb 07 jari 852             info.alpha = params.getFloat("alpha");
2 26 Feb 07 jari 853             info.sigMethod = getSigMethod(params.getInt("significance-method"));
2 26 Feb 07 jari 854             boolean isPermut = params.getBoolean("is-permut");
2 26 Feb 07 jari 855             info.pValueBasedOn = getPValueBasedOn(isPermut);
2 26 Feb 07 jari 856             if (isPermut) {
2 26 Feb 07 jari 857                 info.useAllCombs = params.getBoolean("use-all-combs");
2 26 Feb 07 jari 858                 info.numCombs = params.getInt("num-combs");
2 26 Feb 07 jari 859             }
2 26 Feb 07 jari 860           
2 26 Feb 07 jari 861             info.function = framework.getDistanceMenu().getFunctionName(params.getInt("distance-function"));
2 26 Feb 07 jari 862             info.hcl = params.getBoolean("hierarchical-tree");
2 26 Feb 07 jari 863             if(info.hcl) {
2 26 Feb 07 jari 864                 info.hcl_genes = params.getBoolean("calculate-genes");
2 26 Feb 07 jari 865                 info.hcl_samples = params.getBoolean("calculate-experiments");
2 26 Feb 07 jari 866                 info.hcl_method = params.getInt("method-linkage");
2 26 Feb 07 jari 867             }
2 26 Feb 07 jari 868             Vector titlesVector = new Vector();
2 26 Feb 07 jari 869             if ((tTestDesign == TtestInitDialog.BETWEEN_SUBJECTS) || (tTestDesign == TtestInitDialog.PAIRED)) {
2 26 Feb 07 jari 870                 titlesVector.add("GroupA mean");
2 26 Feb 07 jari 871                 titlesVector.add("GroupA std.dev.");
2 26 Feb 07 jari 872                 titlesVector.add("GroupB mean");
2 26 Feb 07 jari 873                 titlesVector.add("GroupB std.dev.");
2 26 Feb 07 jari 874                 titlesVector.add("Absolute t value");
2 26 Feb 07 jari 875             } else if (tTestDesign == TtestInitDialog.ONE_CLASS) {
2 26 Feb 07 jari 876                 titlesVector.add("Gene mean");
2 26 Feb 07 jari 877                 titlesVector.add("Gene std.dev.");
2 26 Feb 07 jari 878                 titlesVector.add("t value");
2 26 Feb 07 jari 879             }
2 26 Feb 07 jari 880             titlesVector.add("Degrees of freedom");
2 26 Feb 07 jari 881             titlesVector.add("Raw p value");
2 26 Feb 07 jari 882             //int significanceMethod = params.getInt("significance-method");
2 26 Feb 07 jari 883             if ((significanceMethod == TtestInitDialog.FALSE_NUM)||(significanceMethod == TtestInitDialog.FALSE_PROP)) {
2 26 Feb 07 jari 884                 if (calculateAdjFDRPVals)
2 26 Feb 07 jari 885                     titlesVector.add("Adj p value");
2 26 Feb 07 jari 886             } else {
2 26 Feb 07 jari 887                 titlesVector.add("Adj p value");
2 26 Feb 07 jari 888             }
2 26 Feb 07 jari 889             
2 26 Feb 07 jari 890             auxTitles = new String[titlesVector.size()];
2 26 Feb 07 jari 891             for (int i = 0; i < auxTitles.length; i++) {
2 26 Feb 07 jari 892                 auxTitles[i] = (String)(titlesVector.get(i));
2 26 Feb 07 jari 893             }
2 26 Feb 07 jari 894             
2 26 Feb 07 jari 895             auxData = new Object[experiment.getNumberOfGenes()][auxTitles.length];
2 26 Feb 07 jari 896             for (int i = 0; i < auxData.length; i++) {
2 26 Feb 07 jari 897                 int counter = 0;
2 26 Feb 07 jari 898                 if ((tTestDesign == TtestInitDialog.BETWEEN_SUBJECTS) || (tTestDesign == TtestInitDialog.PAIRED)) {
2 26 Feb 07 jari 899                     auxData[i][counter++] = meansA.get(i);
2 26 Feb 07 jari 900                     auxData[i][counter++] = sdA.get(i);
2 26 Feb 07 jari 901                     auxData[i][counter++] = meansB.get(i);
2 26 Feb 07 jari 902                     auxData[i][counter++] = sdB.get(i);
2 26 Feb 07 jari 903                 } else if (tTestDesign == TtestInitDialog.ONE_CLASS) {
2 26 Feb 07 jari 904                     auxData[i][counter++] = oneClassMeans.get(i);
2 26 Feb 07 jari 905                     auxData[i][counter++] = oneClassSDs.get(i);
2 26 Feb 07 jari 906                 }
2 26 Feb 07 jari 907                 auxData[i][counter++] = tValues.get(i);
2 26 Feb 07 jari 908                 auxData[i][counter++] = dfValues.get(i);
2 26 Feb 07 jari 909                 auxData[i][counter++] = rawPValues.get(i);
2 26 Feb 07 jari 910                 if ((significanceMethod == TtestInitDialog.FALSE_NUM)||(significanceMethod == TtestInitDialog.FALSE_PROP)) {
2 26 Feb 07 jari 911                     if (calculateAdjFDRPVals)
2 26 Feb 07 jari 912                         auxData[i][counter++] = adjPValues.get(i);
2 26 Feb 07 jari 913                 } else {
2 26 Feb 07 jari 914                     auxData[i][counter++] = adjPValues.get(i);
2 26 Feb 07 jari 915                 }
2 26 Feb 07 jari 916             }
2 26 Feb 07 jari 917             
2 26 Feb 07 jari 918             return createResultTree(result_cluster, info);
2 26 Feb 07 jari 919             
2 26 Feb 07 jari 920         } finally {
2 26 Feb 07 jari 921             if (algorithm != null) {
2 26 Feb 07 jari 922                 algorithm.removeAlgorithmListener(listener);
2 26 Feb 07 jari 923             }
2 26 Feb 07 jari 924             if (progress != null) {
2 26 Feb 07 jari 925                 progress.dispose();
2 26 Feb 07 jari 926             }
2 26 Feb 07 jari 927         }
2 26 Feb 07 jari 928     }
2 26 Feb 07 jari 929     
2 26 Feb 07 jari 930     
2 26 Feb 07 jari 931     
2 26 Feb 07 jari 932     
2 26 Feb 07 jari 933     private String getPValueBasedOn(boolean isPerm) {
2 26 Feb 07 jari 934         String str = "";
2 26 Feb 07 jari 935         if (isPerm) {
2 26 Feb 07 jari 936             str = "permutation";
2 26 Feb 07 jari 937         } else {
2 26 Feb 07 jari 938             str = "t-distribution";
2 26 Feb 07 jari 939         }
2 26 Feb 07 jari 940         
2 26 Feb 07 jari 941         return str;
2 26 Feb 07 jari 942     }
2 26 Feb 07 jari 943     
2 26 Feb 07 jari 944     private String getSigMethod(int sigMethod) {
2 26 Feb 07 jari 945         String methodName = "";
2 26 Feb 07 jari 946         
2 26 Feb 07 jari 947         if (sigMethod == TtestInitDialog.JUST_ALPHA) {
2 26 Feb 07 jari 948             methodName = "Just alpha";
2 26 Feb 07 jari 949         } else if (sigMethod == TtestInitDialog.STD_BONFERRONI) {
2 26 Feb 07 jari 950             methodName = "Standard Bonferroni correction";
2 26 Feb 07 jari 951         } else if (sigMethod == TtestInitDialog.ADJ_BONFERRONI) {
2 26 Feb 07 jari 952             methodName = "Adjusted Bonferroni correction";
2 26 Feb 07 jari 953         } else if (sigMethod == TtestInitDialog.MIN_P) {
2 26 Feb 07 jari 954             methodName = "Step-down Westfall Young: Min P";
2 26 Feb 07 jari 955         } else if (sigMethod == TtestInitDialog.MAX_T) {
2 26 Feb 07 jari 956             methodName = "Step-down Westfall Young: Max T";
2 26 Feb 07 jari 957         } else if (sigMethod == TtestInitDialog.FALSE_NUM) {
2 26 Feb 07 jari 958             methodName = "False significant number: " + falseNum + " or less";
2 26 Feb 07 jari 959         } else if (sigMethod == TtestInitDialog.FALSE_PROP) {
2 26 Feb 07 jari 960             methodName = "False significant proportion: " + falseProp + " or less";
2 26 Feb 07 jari 961         }
2 26 Feb 07 jari 962         
2 26 Feb 07 jari 963         return methodName;
2 26 Feb 07 jari 964     }
2 26 Feb 07 jari 965     
2 26 Feb 07 jari 966     /**
2 26 Feb 07 jari 967      * Creates a result tree to be inserted into the framework analysis node.
2 26 Feb 07 jari 968      */
2 26 Feb 07 jari 969     private DefaultMutableTreeNode createResultTree(Cluster result_cluster, GeneralInfo info) {
2 26 Feb 07 jari 970         DefaultMutableTreeNode root = new DefaultMutableTreeNode("T Tests");
2 26 Feb 07 jari 971         addResultNodes(root, result_cluster, info);
2 26 Feb 07 jari 972         return root;
2 26 Feb 07 jari 973     }
2 26 Feb 07 jari 974     
2 26 Feb 07 jari 975     /**
2 26 Feb 07 jari 976      * Adds result nodes into the tree root.
2 26 Feb 07 jari 977      */
2 26 Feb 07 jari 978     private void addResultNodes(DefaultMutableTreeNode root, Cluster result_cluster, GeneralInfo info) {
2 26 Feb 07 jari 979         addExpressionImages(root);
2 26 Feb 07 jari 980         addHierarchicalTrees(root, result_cluster, info);
2 26 Feb 07 jari 981         addCentroidViews(root);
2 26 Feb 07 jari 982         addTableViews(root);
2 26 Feb 07 jari 983         addClusterInfo(root);
2 26 Feb 07 jari 984         //addTStatsViews(root);
2 26 Feb 07 jari 985         //if ((tTestDesign == TtestInitDialog.BETWEEN_SUBJECTS) || (tTestDesign == TtestInitDialog.PAIRED)) {
2 26 Feb 07 jari 986             addVolcanoPlot(root);
2 26 Feb 07 jari 987         //}
2 26 Feb 07 jari 988         addGeneralInfo(root, info);
2 26 Feb 07 jari 989     }
2 26 Feb 07 jari 990     
2 26 Feb 07 jari 991     private void addTableViews(DefaultMutableTreeNode root) {
2 26 Feb 07 jari 992         DefaultMutableTreeNode node = new DefaultMutableTreeNode("Table Views");
2 26 Feb 07 jari 993         IViewer tabViewer = new ClusterTableViewer(this.experiment, this.clusters, this.data, this.auxTitles, this.auxData);
2 26 Feb 07 jari 994         for (int i=0; i<this.clusters.length; i++) {
2 26 Feb 07 jari 995             if (i < this.clusters.length - 1) {
2 26 Feb 07 jari 996                 node.add(new DefaultMutableTreeNode(new LeafInfo("Significant Genes ", tabViewer, new Integer(i))));
2 26 Feb 07 jari 997             } else if (i == this.clusters.length - 1) {
2 26 Feb 07 jari 998                 node.add(new DefaultMutableTreeNode(new LeafInfo("Non-significant Genes ", tabViewer, new Integer(i))));
2 26 Feb 07 jari 999                 
2 26 Feb 07 jari 1000             }
2 26 Feb 07 jari 1001         }
2 26 Feb 07 jari 1002         root.add(node);
2 26 Feb 07 jari 1003     }
2 26 Feb 07 jari 1004     
2 26 Feb 07 jari 1005     /**
2 26 Feb 07 jari 1006      * Adds nodes to display clusters data.
2 26 Feb 07 jari 1007      */
2 26 Feb 07 jari 1008     private void addExpressionImages(DefaultMutableTreeNode root) {
2 26 Feb 07 jari 1009         DefaultMutableTreeNode node = new DefaultMutableTreeNode("Expression Images");
2 26 Feb 07 jari 1010         IViewer expViewer = new TtestExperimentViewer(this.experiment, this.clusters, tTestDesign, oneClassMeans, oneClassSDs, meansA, meansB, sdA, sdB, rawPValues, adjPValues, tValues, dfValues);
2 26 Feb 07 jari 1011         for (int i=0; i<this.clusters.length; i++) {
2 26 Feb 07 jari 1012             if (i < this.clusters.length - 1) {
2 26 Feb 07 jari 1013                 node.add(new DefaultMutableTreeNode(new LeafInfo("Significant Genes ", expViewer, new Integer(i))));
2 26 Feb 07 jari 1014             } else if (i == this.clusters.length - 1) {
2 26 Feb 07 jari 1015                 node.add(new DefaultMutableTreeNode(new LeafInfo("Non-significant Genes ", expViewer, new Integer(i))));
2 26 Feb 07 jari 1016                 
2 26 Feb 07 jari 1017             }
2 26 Feb 07 jari 1018         }
2 26 Feb 07 jari 1019         root.add(node);
2 26 Feb 07 jari 1020     }
2 26 Feb 07 jari 1021     
2 26 Feb 07 jari 1022     /**
2 26 Feb 07 jari 1023      * Adds nodes to display hierarchical trees.
2 26 Feb 07 jari 1024      */
2 26 Feb 07 jari 1025     private void addHierarchicalTrees(DefaultMutableTreeNode root, Cluster result_cluster, GeneralInfo info) {
2 26 Feb 07 jari 1026         if (!info.hcl) {
2 26 Feb 07 jari 1027             return;
2 26 Feb 07 jari 1028         }
2 26 Feb 07 jari 1029         DefaultMutableTreeNode node = new DefaultMutableTreeNode("Hierarchical Trees");
2 26 Feb 07 jari 1030         NodeList nodeList = result_cluster.getNodeList();
2 26 Feb 07 jari 1031         
2 26 Feb 07 jari 1032         if (!drawSigTreesOnly) {
2 26 Feb 07 jari 1033             for (int i=0; i<nodeList.getSize(); i++) {
2 26 Feb 07 jari 1034                 if (i < nodeList.getSize() - 1 ) {
2 26 Feb 07 jari 1035                     node.add(new DefaultMutableTreeNode(new LeafInfo("Significant Genes ", createHCLViewer(nodeList.getNode(i), info))));
2 26 Feb 07 jari 1036                 } else if (i == nodeList.getSize() - 1) {
2 26 Feb 07 jari 1037                     node.add(new DefaultMutableTreeNode(new LeafInfo("Non-significant Genes ", createHCLViewer(nodeList.getNode(i), info))));
2 26 Feb 07 jari 1038                 }
2 26 Feb 07 jari 1039             }
2 26 Feb 07 jari 1040         } else {
2 26 Feb 07 jari 1041             node.add(new DefaultMutableTreeNode(new LeafInfo("Significant Genes ", createHCLViewer(nodeList.getNode(0), info))));            
2 26 Feb 07 jari 1042         }
2 26 Feb 07 jari 1043         root.add(node);
2 26 Feb 07 jari 1044     }
2 26 Feb 07 jari 1045     
2 26 Feb 07 jari 1046     /**
2 26 Feb 07 jari 1047      * Creates an <code>HCLViewer</code>.
2 26 Feb 07 jari 1048      */
2 26 Feb 07 jari 1049     private IViewer createHCLViewer(Node clusterNode, GeneralInfo info) {
2 26 Feb 07 jari 1050         HCLTreeData genes_result = info.hcl_genes ? getResult(clusterNode, 0) : null;
2 26 Feb 07 jari 1051         HCLTreeData samples_result = info.hcl_samples ? getResult(clusterNode, info.hcl_genes ? 4 : 0) : null;
2 26 Feb 07 jari 1052         return new HCLViewer(this.experiment, clusterNode.getFeaturesIndexes(), genes_result, samples_result);
2 26 Feb 07 jari 1053     }
2 26 Feb 07 jari 1054     
2 26 Feb 07 jari 1055     /**
2 26 Feb 07 jari 1056      * Returns a hcl tree data from the specified cluster node.
2 26 Feb 07 jari 1057      */
2 26 Feb 07 jari 1058     private HCLTreeData getResult(Node clusterNode, int pos) {
2 26 Feb 07 jari 1059         HCLTreeData data = new HCLTreeData();
2 26 Feb 07 jari 1060         NodeValueList valueList = clusterNode.getValues();
2 26 Feb 07 jari 1061         data.child_1_array = (int[])valueList.getNodeValue(pos).value;
2 26 Feb 07 jari 1062         data.child_2_array = (int[])valueList.getNodeValue(pos+1).value;
2 26 Feb 07 jari 1063         data.node_order = (int[])valueList.getNodeValue(pos+2).value;
2 26 Feb 07 jari 1064         data.height = (float[])valueList.getNodeValue(pos+3).value;
2 26 Feb 07 jari 1065         return data;
2 26 Feb 07 jari 1066     }
2 26 Feb 07 jari 1067     
2 26 Feb 07 jari 1068     /**
2 26 Feb 07 jari 1069      * Adds node with cluster information.
2 26 Feb 07 jari 1070      */
2 26 Feb 07 jari 1071     private void addClusterInfo(DefaultMutableTreeNode root) {
2 26 Feb 07 jari 1072         DefaultMutableTreeNode node = new DefaultMutableTreeNode("Cluster Information");
2 26 Feb 07 jari 1073         node.add(new DefaultMutableTreeNode(new LeafInfo("Results (#,%)", new TtestInfoViewer(this.clusters, this.experiment.getNumberOfGenes()))));
2 26 Feb 07 jari 1074         root.add(node);
2 26 Feb 07 jari 1075     }
2 26 Feb 07 jari 1076     
2 26 Feb 07 jari 1077     /**
2 26 Feb 07 jari 1078      * Adds nodes to display centroid charts.
2 26 Feb 07 jari 1079      */
2 26 Feb 07 jari 1080     private void addCentroidViews(DefaultMutableTreeNode root) {
2 26 Feb 07 jari 1081         DefaultMutableTreeNode centroidNode = new DefaultMutableTreeNode("Centroid Graphs");
2 26 Feb 07 jari 1082         DefaultMutableTreeNode expressionNode = new DefaultMutableTreeNode("Expression Graphs");
2 26 Feb 07 jari 1083         TtestCentroidViewer centroidViewer = new TtestCentroidViewer(this.experiment, clusters, tTestDesign, oneClassMeans, oneClassSDs, meansA, meansB, sdA, sdB, rawPValues, adjPValues, tValues, dfValues);
2 26 Feb 07 jari 1084         centroidViewer.setMeans(this.means.A);
2 26 Feb 07 jari 1085         centroidViewer.setVariances(this.variances.A);
2 26 Feb 07 jari 1086         for (int i=0; i<this.clusters.length; i++) {
2 26 Feb 07 jari 1087             
2 26 Feb 07 jari 1088             if (i == 0) {
2 26 Feb 07 jari 1089                 centroidNode.add(new DefaultMutableTreeNode(new LeafInfo("Significant Genes ", centroidViewer, new CentroidUserObject(i, CentroidUserObject.VARIANCES_MODE))));
2 26 Feb 07 jari 1090                 expressionNode.add(new DefaultMutableTreeNode(new LeafInfo("Significant Genes ", centroidViewer, new CentroidUserObject(i, CentroidUserObject.VALUES_MODE))));
2 26 Feb 07 jari 1091             } else if (i == 1) {
2 26 Feb 07 jari 1092                 centroidNode.add(new DefaultMutableTreeNode(new LeafInfo("Non-significant Genes ", centroidViewer, new CentroidUserObject(i, CentroidUserObject.VARIANCES_MODE))));
2 26 Feb 07 jari 1093                 expressionNode.add(new DefaultMutableTreeNode(new LeafInfo("Non-significant Genes ", centroidViewer, new CentroidUserObject(i, CentroidUserObject.VALUES_MODE))));
2 26 Feb 07 jari 1094                 
2 26 Feb 07 jari 1095             }
2 26 Feb 07 jari 1096         }
2 26 Feb 07 jari 1097         
2 26 Feb 07 jari 1098         TtestCentroidsViewer centroidsViewer = new TtestCentroidsViewer(this.experiment, clusters, tTestDesign, oneClassMeans, oneClassSDs, meansA, meansB, sdA, sdB, rawPValues, adjPValues, tValues, dfValues);
2 26 Feb 07 jari 1099         centroidsViewer.setMeans(this.means.A);
2 26 Feb 07 jari 1100         centroidsViewer.setVariances(this.variances.A);
2 26 Feb 07 jari 1101         
2 26 Feb 07 jari 1102         centroidNode.add(new DefaultMutableTreeNode(new LeafInfo("All Genes", centroidsViewer, new Integer(CentroidUserObject.VARIANCES_MODE))));
2 26 Feb 07 jari 1103         expressionNode.add(new DefaultMutableTreeNode(new LeafInfo("All Genes", centroidsViewer, new Integer(CentroidUserObject.VALUES_MODE))));
2 26 Feb 07 jari 1104         
2 26 Feb 07 jari 1105         root.add(centroidNode);
2 26 Feb 07 jari 1106         root.add(expressionNode);
2 26 Feb 07 jari 1107     }
2 26 Feb 07 jari 1108     /*
2 26 Feb 07 jari 1109     private void addTStatsViews(DefaultMutableTreeNode root) {
2 26 Feb 07 jari 1110         DefaultMutableTreeNode tStatsNode = new DefaultMutableTreeNode("Gene Statistics");
2 26 Feb 07 jari 1111         IViewer tSigViewer = new TStatsTableViewer(this.experiment, this.clusters, this.data, tTestDesign, oneClassMeans, oneClassSDs, meansA, meansB, sdA, sdB, pValues, tValues, dfValues, true);
2 26 Feb 07 jari 1112         IViewer tNonSigViewer = new TStatsTableViewer(this.experiment, this.clusters, this.data, tTestDesign, oneClassMeans, oneClassSDs, meansA, meansB, sdA, sdB, pValues, tValues, dfValues, false);
2 26 Feb 07 jari 1113         
2 26 Feb 07 jari 1114         tStatsNode.add(new DefaultMutableTreeNode(new LeafInfo("Significant Genes", tSigViewer)));
2 26 Feb 07 jari 1115         tStatsNode.add(new DefaultMutableTreeNode(new LeafInfo("Non-significant Genes", tNonSigViewer)));
2 26 Feb 07 jari 1116         
2 26 Feb 07 jari 1117         root.add(tStatsNode);
2 26 Feb 07 jari 1118     }
2 26 Feb 07 jari 1119      */
2 26 Feb 07 jari 1120     
2 26 Feb 07 jari 1121     private void addVolcanoPlot(DefaultMutableTreeNode root) {
2 26 Feb 07 jari 1122         //DefaultMutableTreeNode vNode = new DefaultMutableTreeNode("Volcano plot");
2 26 Feb 07 jari 1123         IViewer volcanoPlotViewer = new TTestVolcanoPlotViewer(this.experiment, diffMeansBA, negLog10PValues, isSig,  tTestDesign, oneClassMean, oneClassMeans, oneClassSDs, meansA, meansB, sdA, sdB, rawPValues, adjPValues, tValues, dfValues);
2 26 Feb 07 jari 1124         root.add(new DefaultMutableTreeNode(new LeafInfo("Volcano Plot", volcanoPlotViewer)));
2 26 Feb 07 jari 1125     }
2 26 Feb 07 jari 1126     
2 26 Feb 07 jari 1127     /**
2 26 Feb 07 jari 1128      * Adds node with general iformation.
2 26 Feb 07 jari 1129      */
2 26 Feb 07 jari 1130     private void addGeneralInfo(DefaultMutableTreeNode root, GeneralInfo info) {
2 26 Feb 07 jari 1131         DefaultMutableTreeNode node = new DefaultMutableTreeNode("General Information");
2 26 Feb 07 jari 1132         node.add(new DefaultMutableTreeNode("Test design: " + info.getTestDesign()));
2 26 Feb 07 jari 1133         node.add(getGroupAssignmentInfo());
2 26 Feb 07 jari 1134         if (tTestDesign == TtestInitDialog.ONE_CLASS) {
2 26 Feb 07 jari 1135             node.add(new DefaultMutableTreeNode("Mean tested against: " + oneClassMean));
2 26 Feb 07 jari 1136         }
2 26 Feb 07 jari 1137         if (tTestDesign == TtestInitDialog.BETWEEN_SUBJECTS) {
2 26 Feb 07 jari 1138             if (useWelchDf)
2 26 Feb 07 jari 1139                 node.add(new DefaultMutableTreeNode("used Welch approximation"));
2 26 Feb 07 jari 1140             else 
2 26 Feb 07 jari 1141                 node.add(new DefaultMutableTreeNode("assumed equal variances"));
2 26 Feb 07 jari 1142         }
2 26 Feb 07 jari 1143         if (info.sigMethod.startsWith("False")) {
2 26 Feb 07 jari 1144             node.add(new DefaultMutableTreeNode("Confidence (1 - alpha) : "+(1d - info.alpha)*100 + " %"));
2 26 Feb 07 jari 1145         } else {
2 26 Feb 07 jari 1146             node.add(new DefaultMutableTreeNode("Alpha (overall threshold p-value): "+info.alpha));
2 26 Feb 07 jari 1147         }
2 26 Feb 07 jari 1148         node.add(new DefaultMutableTreeNode("P-values based on: "+info.pValueBasedOn));
2 26 Feb 07 jari 1149         if (isPermutations) {
2 26 Feb 07 jari 1150             node.add(new DefaultMutableTreeNode("All permutations used: " + info.useAllCombs));
2 26 Feb 07 jari 1151             node.add(new DefaultMutableTreeNode("Number of permutations per gene: " + info.numCombs));
2 26 Feb 07 jari 1152         }
2 26 Feb 07 jari 1153         if (info.sigMethod.startsWith("False")) {
2 26 Feb 07 jari 1154            node.add(new DefaultMutableTreeNode(info.sigMethod)); 
2 26 Feb 07 jari 1155         } else {
2 26 Feb 07 jari 1156             node.add(new DefaultMutableTreeNode("Significance determined by: "+info.sigMethod));
2 26 Feb 07 jari 1157         }
2 26 Feb 07 jari 1158         if (info.sigMethod.startsWith("False")) {
2 26 Feb 07 jari 1159             if (doFastFDRApprox)
2 26 Feb 07 jari 1160                 node.add(new DefaultMutableTreeNode("False discovery calculation: fast approximation"));
2 26 Feb 07 jari 1161             else
2 26 Feb 07 jari 1162                 node.add(new DefaultMutableTreeNode("False discovery calculation: exhaustive computation"));
2 26 Feb 07 jari 1163         }
2 26 Feb 07 jari 1164         node.add(new DefaultMutableTreeNode("HCL: "+info.getMethodName()));
2 26 Feb 07 jari 1165         node.add(new DefaultMutableTreeNode("Time: "+String.valueOf(info.time)+" ms"));
2 26 Feb 07 jari 1166         if (info.hcl) {
2 26 Feb 07 jari 1167             node.add(new DefaultMutableTreeNode(info.function));
2 26 Feb 07 jari 1168         }
2 26 Feb 07 jari 1169         root.add(node);
2 26 Feb 07 jari 1170     }
2 26 Feb 07 jari 1171     
2 26 Feb 07 jari 1172     
2 26 Feb 07 jari 1173     private DefaultMutableTreeNode getGroupAssignmentInfo() {
2 26 Feb 07 jari 1174         DefaultMutableTreeNode groupAssignmentInfo = new DefaultMutableTreeNode();
2 26 Feb 07 jari 1175         if (tTestDesign == TtestInitDialog.BETWEEN_SUBJECTS) {
2 26 Feb 07 jari 1176             groupAssignmentInfo = new DefaultMutableTreeNode("Group assigments ");
2 26 Feb 07 jari 1177             DefaultMutableTreeNode groupA = new DefaultMutableTreeNode("Group A ");
2 26 Feb 07 jari 1178             DefaultMutableTreeNode groupB = new DefaultMutableTreeNode("Group B ");
2 26 Feb 07 jari 1179             DefaultMutableTreeNode neitherGroup = new DefaultMutableTreeNode("Neither group ");
2 26 Feb 07 jari 1180             
2 26 Feb 07 jari 1181             int neitherGroupCounter = 0;
2 26 Feb 07 jari 1182             
2 26 Feb 07 jari 1183             for (int i = 0; i < groupAssignments.length; i++) {
2 26 Feb 07 jari 1184                 if (groupAssignments[i] == TtestInitDialog.GROUP_A) {
2 26 Feb 07 jari 1185                     groupA.add(new DefaultMutableTreeNode((String)(exptNamesVector.get(i))));
2 26 Feb 07 jari 1186                 } else if (groupAssignments[i] == TtestInitDialog.GROUP_B) {
2 26 Feb 07 jari 1187                     groupB.add(new DefaultMutableTreeNode((String)(exptNamesVector.get(i))));
2 26 Feb 07 jari 1188                 } else {
2 26 Feb 07 jari 1189                     neitherGroup.add(new DefaultMutableTreeNode((String)(exptNamesVector.get(i))));
2 26 Feb 07 jari 1190                     neitherGroupCounter++;
2 26 Feb 07 jari 1191                 }
2 26 Feb 07 jari 1192             }
2 26 Feb 07 jari 1193             
2 26 Feb 07 jari 1194             groupAssignmentInfo.add(groupA);
2 26 Feb 07 jari 1195             groupAssignmentInfo.add(groupB);
2 26 Feb 07 jari 1196             if (neitherGroupCounter > 0) {
2 26 Feb 07 jari 1197                 groupAssignmentInfo.add(neitherGroup);
2 26 Feb 07 jari 1198             }
2 26 Feb 07 jari 1199         } else if (tTestDesign == TtestInitDialog.ONE_CLASS) {
2 26 Feb 07 jari 1200             groupAssignmentInfo = new DefaultMutableTreeNode("Sample details");
2 26 Feb 07 jari 1201             DefaultMutableTreeNode in = new DefaultMutableTreeNode("In analysis ");
2 26 Feb 07 jari 1202             DefaultMutableTreeNode out = new DefaultMutableTreeNode("Out of analysis ");
2 26 Feb 07 jari 1203             int outCounter = 0;
2 26 Feb 07 jari 1204             for (int i = 0; i < groupAssignments.length; i++) {
2 26 Feb 07 jari 1205                 if (groupAssignments[i] == 1) {
2 26 Feb 07 jari 1206                     in.add(new DefaultMutableTreeNode((String)(exptNamesVector.get(i))));
2 26 Feb 07 jari 1207                 } else {
2 26 Feb 07 jari 1208                     out.add(new DefaultMutableTreeNode((String)(exptNamesVector.get(i))));
2 26 Feb 07 jari 1209                     outCounter++;
2 26 Feb 07 jari 1210                 }
2 26 Feb 07 jari 1211             }
2 26 Feb 07 jari 1212             
2 26 Feb 07 jari 1213             if (outCounter == 0) {
2 26 Feb 07 jari 1214                 out.add(new DefaultMutableTreeNode("None"));
2 26 Feb 07 jari 1215             }
2 26 Feb 07 jari 1216             groupAssignmentInfo.add(in);
2 26 Feb 07 jari 1217             groupAssignmentInfo.add(out);
2 26 Feb 07 jari 1218         } else if (tTestDesign == TtestInitDialog.PAIRED) {
2 26 Feb 07 jari 1219             groupAssignmentInfo = new DefaultMutableTreeNode("Pairings ");
2 26 Feb 07 jari 1220             boolean paired[] = new boolean[exptNamesVector.size()];
2 26 Feb 07 jari 1221             for (int i = 0; i < paired.length; i++) {
2 26 Feb 07 jari 1222                 paired[i] = false;
2 26 Feb 07 jari 1223             }
2 26 Feb 07 jari 1224             DefaultMutableTreeNode pairs = new DefaultMutableTreeNode("Sample Pairs");
2 26 Feb 07 jari 1225             DefaultMutableTreeNode nonPairs = new DefaultMutableTreeNode("Unpaired Samples");
2 26 Feb 07 jari 1226             for (int i = 0; i < pairedGroupAExpts.size(); i++) {
2 26 Feb 07 jari 1227                 int currentA = ((Integer)(pairedGroupAExpts.get(i))).intValue();
2 26 Feb 07 jari 1228                 int currentB = ((Integer)(pairedGroupBExpts.get(i))).intValue();
2 26 Feb 07 jari 1229                 pairs.add(new DefaultMutableTreeNode("A: " + (String)(exptNamesVector.get(currentA)) + " - B: " + (String)(exptNamesVector.get(currentB)) ));
2 26 Feb 07 jari 1230                 paired[currentA] = true;
2 26 Feb 07 jari 1231                 paired[currentB] = true;
2 26 Feb 07 jari 1232             }
2 26 Feb 07 jari 1233             for (int i = 0 ; i < paired.length; i++) {
2 26 Feb 07 jari 1234                 if (!paired[i]) {
2 26 Feb 07 jari 1235                     nonPairs.add(new DefaultMutableTreeNode((String)(exptNamesVector.get(i))));
2 26 Feb 07 jari 1236                 }
2 26 Feb 07 jari 1237             }
2 26 Feb 07 jari 1238             groupAssignmentInfo.add(pairs);
2 26 Feb 07 jari 1239             if (!nonPairs.isLeaf()) {
2 26 Feb 07 jari 1240                 groupAssignmentInfo.add(nonPairs);
2 26 Feb 07 jari 1241             }
2 26 Feb 07 jari 1242             
2 26 Feb 07 jari 1243         }
2 26 Feb 07 jari 1244         
2 26 Feb 07 jari 1245         return groupAssignmentInfo;
2 26 Feb 07 jari 1246     }
2 26 Feb 07 jari 1247     
2 26 Feb 07 jari 1248     
2 26 Feb 07 jari 1249     
2 26 Feb 07 jari 1250     
2 26 Feb 07 jari 1251     
2 26 Feb 07 jari 1252     /**
2 26 Feb 07 jari 1253      * The class to listen to progress, monitor and algorithms events.
2 26 Feb 07 jari 1254      */
2 26 Feb 07 jari 1255     private class Listener extends DialogListener implements AlgorithmListener {
2 26 Feb 07 jari 1256         
2 26 Feb 07 jari 1257         public void valueChanged(AlgorithmEvent event) {
2 26 Feb 07 jari 1258             switch (event.getId()) {
2 26 Feb 07 jari 1259                 case AlgorithmEvent.SET_UNITS:
2 26 Feb 07 jari 1260                     progress.setUnits(event.getIntValue());
2 26 Feb 07 jari 1261                     progress.setDescription(event.getDescription());
2 26 Feb 07 jari 1262                     break;
2 26 Feb 07 jari 1263                 case AlgorithmEvent.PROGRESS_VALUE:
2 26 Feb 07 jari 1264                     progress.setValue(event.getIntValue());
2 26 Feb 07 jari 1265                     progress.setDescription(event.getDescription());
2 26 Feb 07 jari 1266                     break;
2 26 Feb 07 jari 1267                 case AlgorithmEvent.MONITOR_VALUE:
2 26 Feb 07 jari 1268                     int value = event.getIntValue();
2 26 Feb 07 jari 1269                     if (value == -1) {
2 26 Feb 07 jari 1270                         //monitor.dispose();
2 26 Feb 07 jari 1271                     } else {
2 26 Feb 07 jari 1272                         //monitor.update(value);
2 26 Feb 07 jari 1273                     }
2 26 Feb 07 jari 1274                     break;
2 26 Feb 07 jari 1275             }
2 26 Feb 07 jari 1276         }
2 26 Feb 07 jari 1277         
2 26 Feb 07 jari 1278         public void actionPerformed(ActionEvent e) {
2 26 Feb 07 jari 1279             String command = e.getActionCommand();
2 26 Feb 07 jari 1280             if (command.equals("cancel-command")) {
2 26 Feb 07 jari 1281                 algorithm.abort();
2 26 Feb 07 jari 1282                 progress.dispose();
2 26 Feb 07 jari 1283                 //monitor.dispose();
2 26 Feb 07 jari 1284             }
2 26 Feb 07 jari 1285         }
2 26 Feb 07 jari 1286         
2 26 Feb 07 jari 1287         public void windowClosing(WindowEvent e) {
2 26 Feb 07 jari 1288             algorithm.abort();
2 26 Feb 07 jari 1289             progress.dispose();
2 26 Feb 07 jari 1290             //monitor.dispose();
2 26 Feb 07 jari 1291         }
2 26 Feb 07 jari 1292     }
2 26 Feb 07 jari 1293     
2 26 Feb 07 jari 1294     private class GeneralInfo {
2 26 Feb 07 jari 1295         public int clusters;
2 26 Feb 07 jari 1296         public String design;
2 26 Feb 07 jari 1297         public String sigMethod;
2 26 Feb 07 jari 1298         public String pValueBasedOn;
2 26 Feb 07 jari 1299         public double alpha;
2 26 Feb 07 jari 1300         public int numCombs;
2 26 Feb 07 jari 1301         public boolean useAllCombs;
2 26 Feb 07 jari 1302         public long time;
2 26 Feb 07 jari 1303         public String function, fdrFastOrSlow;
2 26 Feb 07 jari 1304         
2 26 Feb 07 jari 1305         private boolean hcl;
2 26 Feb 07 jari 1306         private int hcl_method;
2 26 Feb 07 jari 1307         private boolean hcl_genes;
2 26 Feb 07 jari 1308         private boolean hcl_samples;
2 26 Feb 07 jari 1309         
2 26 Feb 07 jari 1310         public String getMethodName() {
2 26 Feb 07 jari 1311             return hcl ? HCLGUI.GeneralInfo.getMethodName(hcl_method) : "no linkage";
2 26 Feb 07 jari 1312         }
2 26 Feb 07 jari 1313         
2 26 Feb 07 jari 1314         public String getTestDesign() {
2 26 Feb 07 jari 1315             String design = "";
2 26 Feb 07 jari 1316             
2 26 Feb 07 jari 1317             if (tTestDesign == TtestInitDialog.ONE_CLASS) {
2 26 Feb 07 jari 1318                 design = "One-class";
2 26 Feb 07 jari 1319             } else if (tTestDesign == TtestInitDialog.BETWEEN_SUBJECTS) {
2 26 Feb 07 jari 1320                 design = "Between-subjects";
2 26 Feb 07 jari 1321             } else if (tTestDesign == TtestInitDialog.PAIRED) {
2 26 Feb 07 jari 1322                 design = "Paired";
2 26 Feb 07 jari 1323             }
2 26 Feb 07 jari 1324             
2 26 Feb 07 jari 1325             return design;
2 26 Feb 07 jari 1326         }
2 26 Feb 07 jari 1327         
2 26 Feb 07 jari 1328     }
2 26 Feb 07 jari 1329 }