mev-4.0.01/source/org/tigr/microarray/mev/cluster/gui/impl/sam/SAMGUI.java

Code
Comments
Other
Rev Date Author Line
2 26 Feb 07 jari 1 /*
2 26 Feb 07 jari 2 Copyright @ 1999-2003, The Institute for Genomic Research (TIGR).
2 26 Feb 07 jari 3 All rights reserved.
2 26 Feb 07 jari 4  */
2 26 Feb 07 jari 5 /*
2 26 Feb 07 jari 6  * $RCSfile: SAMGUI.java,v $
2 26 Feb 07 jari 7  * $Revision: 1.8 $
2 26 Feb 07 jari 8  * $Date: 2005/03/10 20:21:59 $
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
2 26 Feb 07 jari 13 /*
2 26 Feb 07 jari 14  * SAMGUI.java
2 26 Feb 07 jari 15  *
2 26 Feb 07 jari 16  * Created on December 16, 2002, 11:13 AM
2 26 Feb 07 jari 17  */
2 26 Feb 07 jari 18
2 26 Feb 07 jari 19 package org.tigr.microarray.mev.cluster.gui.impl.sam;
2 26 Feb 07 jari 20
2 26 Feb 07 jari 21 import java.awt.event.ActionEvent;
2 26 Feb 07 jari 22 import java.awt.event.WindowEvent;
2 26 Feb 07 jari 23 import java.io.File;
2 26 Feb 07 jari 24 import java.io.FileOutputStream;
2 26 Feb 07 jari 25 import java.io.PrintWriter;
2 26 Feb 07 jari 26 import java.util.Vector;
2 26 Feb 07 jari 27
2 26 Feb 07 jari 28 import javax.swing.JFileChooser;
2 26 Feb 07 jari 29 import javax.swing.JFrame;
2 26 Feb 07 jari 30 import javax.swing.JOptionPane;
2 26 Feb 07 jari 31 import javax.swing.tree.DefaultMutableTreeNode;
2 26 Feb 07 jari 32
2 26 Feb 07 jari 33 import org.tigr.microarray.mev.cluster.Cluster;
2 26 Feb 07 jari 34 import org.tigr.microarray.mev.cluster.Node;
2 26 Feb 07 jari 35 import org.tigr.microarray.mev.cluster.NodeList;
2 26 Feb 07 jari 36 import org.tigr.microarray.mev.cluster.NodeValueList;
2 26 Feb 07 jari 37 import org.tigr.microarray.mev.cluster.algorithm.Algorithm;
2 26 Feb 07 jari 38 import org.tigr.microarray.mev.cluster.algorithm.AlgorithmData;
2 26 Feb 07 jari 39 import org.tigr.microarray.mev.cluster.algorithm.AlgorithmEvent;
2 26 Feb 07 jari 40 import org.tigr.microarray.mev.cluster.algorithm.AlgorithmException;
2 26 Feb 07 jari 41 import org.tigr.microarray.mev.cluster.algorithm.AlgorithmListener;
2 26 Feb 07 jari 42 import org.tigr.microarray.mev.cluster.algorithm.AlgorithmParameters;
2 26 Feb 07 jari 43 import org.tigr.microarray.mev.cluster.gui.Experiment;
2 26 Feb 07 jari 44 import org.tigr.microarray.mev.cluster.gui.IClusterGUI;
2 26 Feb 07 jari 45 import org.tigr.microarray.mev.cluster.gui.IData;
2 26 Feb 07 jari 46 import org.tigr.microarray.mev.cluster.gui.IDistanceMenu;
2 26 Feb 07 jari 47 import org.tigr.microarray.mev.cluster.gui.IFramework;
2 26 Feb 07 jari 48 import org.tigr.microarray.mev.cluster.gui.IViewer;
2 26 Feb 07 jari 49 import org.tigr.microarray.mev.cluster.gui.LeafInfo;
2 26 Feb 07 jari 50 import org.tigr.microarray.mev.cluster.gui.helpers.CentroidUserObject;
2 26 Feb 07 jari 51 import org.tigr.microarray.mev.cluster.gui.helpers.ClusterTableViewer;
2 26 Feb 07 jari 52 import org.tigr.microarray.mev.cluster.gui.impl.dialogs.DialogListener;
2 26 Feb 07 jari 53 import org.tigr.microarray.mev.cluster.gui.impl.dialogs.Progress;
2 26 Feb 07 jari 54 import org.tigr.microarray.mev.cluster.gui.impl.hcl.HCLGUI;
2 26 Feb 07 jari 55 import org.tigr.microarray.mev.cluster.gui.impl.hcl.HCLInitDialog;
2 26 Feb 07 jari 56 import org.tigr.microarray.mev.cluster.gui.impl.hcl.HCLTreeData;
2 26 Feb 07 jari 57 import org.tigr.microarray.mev.cluster.gui.impl.hcl.HCLViewer;
2 26 Feb 07 jari 58 import org.tigr.microarray.mev.script.scriptGUI.IScriptGUI;
2 26 Feb 07 jari 59 import org.tigr.util.FloatMatrix;
2 26 Feb 07 jari 60
2 26 Feb 07 jari 61 /**
2 26 Feb 07 jari 62  *
2 26 Feb 07 jari 63  * @author  nbhagaba
2 26 Feb 07 jari 64  * @version
2 26 Feb 07 jari 65  */
2 26 Feb 07 jari 66 public class SAMGUI implements IClusterGUI, IScriptGUI {
2 26 Feb 07 jari 67     
2 26 Feb 07 jari 68     private Algorithm algorithm;
2 26 Feb 07 jari 69     private Progress progress;
2 26 Feb 07 jari 70     //private Monitor monitor;
2 26 Feb 07 jari 71     private IData data;
2 26 Feb 07 jari 72     
2 26 Feb 07 jari 73     private Experiment experiment;
2 26 Feb 07 jari 74     private int[][] clusters;
2 26 Feb 07 jari 75     private FloatMatrix means;
2 26 Feb 07 jari 76     private FloatMatrix variances;
2 26 Feb 07 jari 77     private float[] dValues, rValues, qLowestFDR, foldChangeArray;
2 26 Feb 07 jari 78     private double[] xArray, yArray;
2 26 Feb 07 jari 79     private float delta, oneClassMean;
2 26 Feb 07 jari 80     private double[] deltaGrid, medNumFalse, false90th, FDRMedian, FDR90th;
2 26 Feb 07 jari 81     private int[] numSig;
2 26 Feb 07 jari 82     private String[] auxTitles;
2 26 Feb 07 jari 83     private Object[][] auxData;
2 26 Feb 07 jari 84     //private String[] allTitles;
2 26 Feb 07 jari 85     
2 26 Feb 07 jari 86     int[] groupAssignments;
2 26 Feb 07 jari 87     int numMultiClassGroups;
2 26 Feb 07 jari 88     int studyDesign;
2 26 Feb 07 jari 89     boolean[] inSurvivalAnalysis, censored;
2 26 Feb 07 jari 90     private boolean drawSigTreesOnly;    
2 26 Feb 07 jari 91     double[] survivalTimes;
2 26 Feb 07 jari 92     public static JFrame SAMFrame;
2 26 Feb 07 jari 93     boolean calculateQLowestFDR;
2 26 Feb 07 jari 94     Vector exptNamesVector;
2 26 Feb 07 jari 95     Vector geneNamesVector;
2 26 Feb 07 jari 96     Vector pairedGroupAExpts, pairedGroupBExpts;
2 26 Feb 07 jari 97     /** Creates new SAMGUI */
2 26 Feb 07 jari 98     public SAMGUI() {
2 26 Feb 07 jari 99     }
2 26 Feb 07 jari 100     
2 26 Feb 07 jari 101     
2 26 Feb 07 jari 102     public DefaultMutableTreeNode execute(IFramework framework) throws AlgorithmException {
2 26 Feb 07 jari 103         
2 26 Feb 07 jari 104         SAMGUI.SAMFrame = (JFrame) framework.getFrame();
2 26 Feb 07 jari 105         this.experiment = framework.getData().getExperiment();
2 26 Feb 07 jari 106         this.data = framework.getData();
2 26 Feb 07 jari 107         exptNamesVector = new Vector();
2 26 Feb 07 jari 108         geneNamesVector = new Vector();
2 26 Feb 07 jari 109         int number_of_samples = experiment.getNumberOfSamples();
2 26 Feb 07 jari 110         int number_of_genes = experiment.getNumberOfGenes();
2 26 Feb 07 jari 111         int [] columnIndices = experiment.getColumnIndicesCopy();
2 26 Feb 07 jari 112         
2 26 Feb 07 jari 113         for (int i = 0; i < number_of_samples; i++) {
2 26 Feb 07 jari 114             exptNamesVector.add(framework.getData().getFullSampleName(columnIndices[i]));
2 26 Feb 07 jari 115         }
2 26 Feb 07 jari 116         for (int i = 0; i < number_of_genes; i++) {
2 26 Feb 07 jari 117             geneNamesVector.add(framework.getData().getGeneName(i));
2 26 Feb 07 jari 118         }
2 26 Feb 07 jari 119         
2 26 Feb 07 jari 120         SAMInitDialog sDialog;
2 26 Feb 07 jari 121         studyDesign = 0;
2 26 Feb 07 jari 122         int numCombs = 0;
2 26 Feb 07 jari 123         int numUniquePerms = 0;
2 26 Feb 07 jari 124         int numNeighbors = 0;
2 26 Feb 07 jari 125         numMultiClassGroups = 0;
2 26 Feb 07 jari 126         
2 26 Feb 07 jari 127         boolean useKNearest = true;
2 26 Feb 07 jari 128         boolean isHierarchicalTree = false;
2 26 Feb 07 jari 129         drawSigTreesOnly = true;
2 26 Feb 07 jari 130         boolean usePreviousGraph = false;
2 26 Feb 07 jari 131         boolean saveImputedMatrix = false;
2 26 Feb 07 jari 132         boolean useTusherEtAlS0 = false;
2 26 Feb 07 jari 133         boolean useAllUniquePerms = false;
2 26 Feb 07 jari 134         
2 26 Feb 07 jari 135         double userPercentile = 0;
2 26 Feb 07 jari 136         
2 26 Feb 07 jari 137         //SAMState.fieldNames = framework.getData().getFieldNames();
2 26 Feb 07 jari 138         
2 26 Feb 07 jari 139         if (!SAMState.firstRun) {
2 26 Feb 07 jari 140             SAMPreDialog spDialog = new SAMPreDialog((JFrame)framework.getFrame(), true);
2 26 Feb 07 jari 141             spDialog.setVisible(true);
2 26 Feb 07 jari 142             if (!spDialog.isOkPressed()) return null;
2 26 Feb 07 jari 143             
2 26 Feb 07 jari 144             if (spDialog.usePrevious()) {
2 26 Feb 07 jari 145                 usePreviousGraph = true;
2 26 Feb 07 jari 146                 groupAssignments = SAMState.groupAssignments;
2 26 Feb 07 jari 147                 studyDesign = SAMState.studyDesign;
2 26 Feb 07 jari 148                 if (studyDesign == SAMInitDialog.MULTI_CLASS) {
2 26 Feb 07 jari 149                     numMultiClassGroups = SAMState.numMultiClassGroups;
2 26 Feb 07 jari 150                 }
2 26 Feb 07 jari 151                 if (studyDesign == SAMInitDialog.TWO_CLASS_PAIRED) {
2 26 Feb 07 jari 152                     pairedGroupAExpts = SAMState.pairedGroupAExpts;
2 26 Feb 07 jari 153                     pairedGroupBExpts = SAMState.pairedGroupBExpts;
2 26 Feb 07 jari 154                 }
2 26 Feb 07 jari 155                 if (studyDesign == SAMInitDialog.CENSORED_SURVIVAL) {
2 26 Feb 07 jari 156                     inSurvivalAnalysis = SAMState.inSurvivalAnalysis;
2 26 Feb 07 jari 157                     survivalTimes = SAMState.survivalTimes;
2 26 Feb 07 jari 158                     censored = SAMState.censored;
2 26 Feb 07 jari 159                 } else if (studyDesign == SAMInitDialog.ONE_CLASS) {
2 26 Feb 07 jari 160                     oneClassMean = (float)(SAMState.oneClassMean);
2 26 Feb 07 jari 161                 }
2 26 Feb 07 jari 162                 useAllUniquePerms = SAMState.useAllUniquePerms;
2 26 Feb 07 jari 163                 if (useAllUniquePerms) {
2 26 Feb 07 jari 164                     numUniquePerms = SAMState.numUniquePerms;
2 26 Feb 07 jari 165                 }
2 26 Feb 07 jari 166                 numCombs = SAMState.numCombs;
2 26 Feb 07 jari 167                 numNeighbors = SAMState.numNeighbors;
2 26 Feb 07 jari 168                 useKNearest = SAMState.useKNearest;
2 26 Feb 07 jari 169                 isHierarchicalTree = spDialog.drawTrees();
2 26 Feb 07 jari 170                 if (isHierarchicalTree) {
2 26 Feb 07 jari 171                     drawSigTreesOnly = spDialog.drawSigTreesOnly();
2 26 Feb 07 jari 172                 }           
2 26 Feb 07 jari 173                 useTusherEtAlS0 = SAMState.useTusherEtAlS0;
2 26 Feb 07 jari 174                 calculateQLowestFDR = SAMState.calculateQLowestFDR;
2 26 Feb 07 jari 175                 
2 26 Feb 07 jari 176             } else {
2 26 Feb 07 jari 177                 usePreviousGraph = false;
2 26 Feb 07 jari 178                 sDialog = new SAMInitDialog((JFrame) framework.getFrame(), true, exptNamesVector, number_of_genes);
2 26 Feb 07 jari 179                 sDialog.setVisible(true);
2 26 Feb 07 jari 180                 
2 26 Feb 07 jari 181                 if (!sDialog.isOkPressed()) {
2 26 Feb 07 jari 182                     return null;
2 26 Feb 07 jari 183                 } else {
2 26 Feb 07 jari 184                     SAMState.firstRun = false;
2 26 Feb 07 jari 185                 }
2 26 Feb 07 jari 186                 
2 26 Feb 07 jari 187                 //SAMState.firstRun = false;
2 26 Feb 07 jari 188                 studyDesign = sDialog.getStudyDesign();
2 26 Feb 07 jari 189                 SAMState.studyDesign = studyDesign;
2 26 Feb 07 jari 190                 if (studyDesign == SAMInitDialog.TWO_CLASS_PAIRED) {
2 26 Feb 07 jari 191                     pairedGroupAExpts = sDialog.getPairedAExpts();
2 26 Feb 07 jari 192                     pairedGroupBExpts = sDialog.getPairedBExpts();
2 26 Feb 07 jari 193                     SAMState.pairedGroupAExpts = pairedGroupAExpts;
2 26 Feb 07 jari 194                     SAMState.pairedGroupBExpts = pairedGroupBExpts;
2 26 Feb 07 jari 195                 }
2 26 Feb 07 jari 196                 if (studyDesign == SAMInitDialog.MULTI_CLASS) {
2 26 Feb 07 jari 197                     numMultiClassGroups = sDialog.getMultiClassNumGroups();
2 26 Feb 07 jari 198                     SAMState.numMultiClassGroups = numMultiClassGroups;
2 26 Feb 07 jari 199                 }
2 26 Feb 07 jari 200                 if (studyDesign == SAMInitDialog.CENSORED_SURVIVAL) {
2 26 Feb 07 jari 201                     inSurvivalAnalysis = sDialog.isInSurvivalAnalysis();
2 26 Feb 07 jari 202                     SAMState.inSurvivalAnalysis = inSurvivalAnalysis;
2 26 Feb 07 jari 203                     censored = sDialog.isCensored();
2 26 Feb 07 jari 204                     SAMState.censored = censored;
2 26 Feb 07 jari 205                     survivalTimes =sDialog.getSurvivalTimes();
2 26 Feb 07 jari 206                     SAMState.survivalTimes = survivalTimes;
2 26 Feb 07 jari 207                 }
2 26 Feb 07 jari 208                 
2 26 Feb 07 jari 209                 if (studyDesign == SAMInitDialog.ONE_CLASS) {
2 26 Feb 07 jari 210                     oneClassMean = (float)(sDialog.getOneClassMean());
2 26 Feb 07 jari 211                     SAMState.oneClassMean = (double)oneClassMean;
2 26 Feb 07 jari 212                 }
2 26 Feb 07 jari 213                 groupAssignments = sDialog.getGroupAssignments();
2 26 Feb 07 jari 214                 SAMState.groupAssignments = groupAssignments;
2 26 Feb 07 jari 215                 //boolean useAllCombs = sDialog.useAllCombs();
2 26 Feb 07 jari 216                 //if (!useAllCombs) {
2 26 Feb 07 jari 217                 numCombs = sDialog.getUserNumCombs();
2 26 Feb 07 jari 218                 SAMState.numCombs = numCombs;
2 26 Feb 07 jari 219                 useAllUniquePerms = sDialog.useAllUniquePerms();
2 26 Feb 07 jari 220                 SAMState.useAllUniquePerms = useAllUniquePerms;
2 26 Feb 07 jari 221                 if (useAllUniquePerms) {
2 26 Feb 07 jari 222                     numUniquePerms = sDialog.getNumUniquePerms();
2 26 Feb 07 jari 223                     SAMState.numUniquePerms = numUniquePerms;
2 26 Feb 07 jari 224                 }
2 26 Feb 07 jari 225                 //}
2 26 Feb 07 jari 226                 useKNearest = sDialog.useKNearest();
2 26 Feb 07 jari 227                 SAMState.useKNearest = useKNearest;
2 26 Feb 07 jari 228                 //numNeighbors = 10;
2 26 Feb 07 jari 229                 if (useKNearest) {
2 26 Feb 07 jari 230                     numNeighbors = sDialog.getNumNeighbors();
2 26 Feb 07 jari 231                     SAMState.numNeighbors = numNeighbors;
2 26 Feb 07 jari 232                 }
2 26 Feb 07 jari 233                 saveImputedMatrix = sDialog.isSaveMatrix();
2 26 Feb 07 jari 234                 
2 26 Feb 07 jari 235                 userPercentile = sDialog.getPercentile();
2 26 Feb 07 jari 236                 useTusherEtAlS0 = sDialog.useTusherEtAlS0();
2 26 Feb 07 jari 237                 SAMState.useTusherEtAlS0 = useTusherEtAlS0;
2 26 Feb 07 jari 238                 
2 26 Feb 07 jari 239                 calculateQLowestFDR = sDialog.calculateQLowestFDR();
2 26 Feb 07 jari 240                 SAMState.calculateQLowestFDR = calculateQLowestFDR;
2 26 Feb 07 jari 241                 
2 26 Feb 07 jari 242                 isHierarchicalTree = sDialog.drawTrees();
2 26 Feb 07 jari 243                 if (isHierarchicalTree) {
2 26 Feb 07 jari 244                     drawSigTreesOnly = sDialog.drawSigTreesOnly();
2 26 Feb 07 jari 245                 }             
2 26 Feb 07 jari 246                 //SAMState.isHierarchicalTree = isHierarchicalTree;
2 26 Feb 07 jari 247             }
2 26 Feb 07 jari 248             
2 26 Feb 07 jari 249         } else { //if (SAMState.firstRun)
2 26 Feb 07 jari 250             usePreviousGraph = false;
2 26 Feb 07 jari 251             sDialog = new SAMInitDialog((JFrame) framework.getFrame(), true, exptNamesVector, number_of_genes);
2 26 Feb 07 jari 252             sDialog.setVisible(true);
2 26 Feb 07 jari 253             
2 26 Feb 07 jari 254             if (!sDialog.isOkPressed()) {
2 26 Feb 07 jari 255                 return null;
2 26 Feb 07 jari 256             } else {
2 26 Feb 07 jari 257                 SAMState.firstRun = false;
2 26 Feb 07 jari 258             }
2 26 Feb 07 jari 259             
2 26 Feb 07 jari 260             //SAMState.firstRun = false;
2 26 Feb 07 jari 261             studyDesign = sDialog.getStudyDesign();
2 26 Feb 07 jari 262             SAMState.studyDesign = studyDesign;
2 26 Feb 07 jari 263             if (studyDesign == SAMInitDialog.TWO_CLASS_PAIRED) {
2 26 Feb 07 jari 264                 pairedGroupAExpts = sDialog.getPairedAExpts();
2 26 Feb 07 jari 265                 pairedGroupBExpts = sDialog.getPairedBExpts();
2 26 Feb 07 jari 266                 SAMState.pairedGroupAExpts = pairedGroupAExpts;
2 26 Feb 07 jari 267                 SAMState.pairedGroupBExpts = pairedGroupBExpts;
2 26 Feb 07 jari 268             }
2 26 Feb 07 jari 269             if (studyDesign == SAMInitDialog.MULTI_CLASS) {
2 26 Feb 07 jari 270                 numMultiClassGroups = sDialog.getMultiClassNumGroups();
2 26 Feb 07 jari 271                 SAMState.numMultiClassGroups = numMultiClassGroups;
2 26 Feb 07 jari 272             }
2 26 Feb 07 jari 273             if (studyDesign == SAMInitDialog.CENSORED_SURVIVAL) {
2 26 Feb 07 jari 274                 inSurvivalAnalysis = sDialog.isInSurvivalAnalysis();
2 26 Feb 07 jari 275                 SAMState.inSurvivalAnalysis = inSurvivalAnalysis;
2 26 Feb 07 jari 276                 censored = sDialog.isCensored();
2 26 Feb 07 jari 277                 SAMState.censored = censored;
2 26 Feb 07 jari 278                 survivalTimes =sDialog.getSurvivalTimes();
2 26 Feb 07 jari 279                 SAMState.survivalTimes = survivalTimes;
2 26 Feb 07 jari 280             }
2 26 Feb 07 jari 281             
2 26 Feb 07 jari 282             if (studyDesign == SAMInitDialog.ONE_CLASS) {
2 26 Feb 07 jari 283                 oneClassMean = (float)(sDialog.getOneClassMean());
2 26 Feb 07 jari 284                 SAMState.oneClassMean = (double)oneClassMean;
2 26 Feb 07 jari 285             }
2 26 Feb 07 jari 286             groupAssignments = sDialog.getGroupAssignments();
2 26 Feb 07 jari 287             SAMState.groupAssignments = groupAssignments;
2 26 Feb 07 jari 288             //boolean useAllCombs = sDialog.useAllCombs();
2 26 Feb 07 jari 289             //if (!useAllCombs) {
2 26 Feb 07 jari 290             numCombs = sDialog.getUserNumCombs();
2 26 Feb 07 jari 291             SAMState.numCombs = numCombs;
2 26 Feb 07 jari 292             
2 26 Feb 07 jari 293             useAllUniquePerms = sDialog.useAllUniquePerms();
2 26 Feb 07 jari 294             SAMState.useAllUniquePerms = useAllUniquePerms;
2 26 Feb 07 jari 295             if (useAllUniquePerms) {
2 26 Feb 07 jari 296                 numUniquePerms = sDialog.getNumUniquePerms();
2 26 Feb 07 jari 297                 SAMState.numUniquePerms = numUniquePerms;
2 26 Feb 07 jari 298             }
2 26 Feb 07 jari 299             //}
2 26 Feb 07 jari 300             useKNearest = sDialog.useKNearest();
2 26 Feb 07 jari 301             SAMState.useKNearest = useKNearest;
2 26 Feb 07 jari 302             //numNeighbors = 10;
2 26 Feb 07 jari 303             if (useKNearest) {
2 26 Feb 07 jari 304                 numNeighbors = sDialog.getNumNeighbors();
2 26 Feb 07 jari 305                 SAMState.numNeighbors = numNeighbors;
2 26 Feb 07 jari 306             }
2 26 Feb 07 jari 307             isHierarchicalTree = sDialog.drawTrees();
2 26 Feb 07 jari 308             if (isHierarchicalTree) {
2 26 Feb 07 jari 309                 drawSigTreesOnly = sDialog.drawSigTreesOnly();
2 26 Feb 07 jari 310             }            
2 26 Feb 07 jari 311             //SAMState.isHierarchicalTree = isHierarchicalTree;
2 26 Feb 07 jari 312             saveImputedMatrix = sDialog.isSaveMatrix();
2 26 Feb 07 jari 313             
2 26 Feb 07 jari 314             userPercentile = sDialog.getPercentile();
2 26 Feb 07 jari 315             useTusherEtAlS0 = sDialog.useTusherEtAlS0();
2 26 Feb 07 jari 316             SAMState.useTusherEtAlS0 = useTusherEtAlS0;
2 26 Feb 07 jari 317             
2 26 Feb 07 jari 318             calculateQLowestFDR = sDialog.calculateQLowestFDR();
2 26 Feb 07 jari 319             SAMState.calculateQLowestFDR = calculateQLowestFDR;
2 26 Feb 07 jari 320         }
2 26 Feb 07 jari 321
2 26 Feb 07 jari 322                     IDistanceMenu menu = framework.getDistanceMenu();
2 26 Feb 07 jari 323         int function = menu.getDistanceFunction();
2 26 Feb 07 jari 324             if (function == Algorithm.DEFAULT) {
2 26 Feb 07 jari 325                 function = Algorithm.EUCLIDEAN;
2 26 Feb 07 jari 326             }
2 26 Feb 07 jari 327         
2 26 Feb 07 jari 328         // hcl init
2 26 Feb 07 jari 329         int hcl_method = 0;
2 26 Feb 07 jari 330         boolean hcl_samples = false;
2 26 Feb 07 jari 331         boolean hcl_genes = false;
2 26 Feb 07 jari 332         int hcl_function = 4;
2 26 Feb 07 jari 333         boolean hcl_absolute = false;
2 26 Feb 07 jari 334         if (isHierarchicalTree) {
2 26 Feb 07 jari 335             HCLInitDialog hcl_dialog = new HCLInitDialog(framework.getFrame(), menu.getFunctionName(function), menu.isAbsoluteDistance(), true);
2 26 Feb 07 jari 336             if (hcl_dialog.showModal() != JOptionPane.OK_OPTION) {
2 26 Feb 07 jari 337                 return null;
2 26 Feb 07 jari 338             }
2 26 Feb 07 jari 339             hcl_method = hcl_dialog.getMethod();
2 26 Feb 07 jari 340             hcl_samples = hcl_dialog.isClusterExperiments();
2 26 Feb 07 jari 341             hcl_genes = hcl_dialog.isClusterGenes();
2 26 Feb 07 jari 342             hcl_function = hcl_dialog.getDistanceMetric();
2 26 Feb 07 jari 343             hcl_absolute = hcl_dialog.getAbsoluteSelection();
2 26 Feb 07 jari 344         }
2 26 Feb 07 jari 345         
2 26 Feb 07 jari 346         Listener listener = new Listener();
2 26 Feb 07 jari 347         
2 26 Feb 07 jari 348         try {
2 26 Feb 07 jari 349             algorithm = framework.getAlgorithmFactory().getAlgorithm("SAM");
2 26 Feb 07 jari 350             //System.out.println("SAMGUI: getting algorithm");
2 26 Feb 07 jari 351             algorithm.addAlgorithmListener(listener);
2 26 Feb 07 jari 352             
2 26 Feb 07 jari 353             //this.progress = new Progress(framework.getFrame(), "Finding significant genes", listener); // **** MAKE PROGRESS BARS LATER
2 26 Feb 07 jari 354             //this.progress.show();
2 26 Feb 07 jari 355             
2 26 Feb 07 jari 356             this.progress = new Progress(framework.getFrame(), "SAM Execution", listener);
2 26 Feb 07 jari 357             this.progress.show();
2 26 Feb 07 jari 358             
2 26 Feb 07 jari 359             AlgorithmData data = new AlgorithmData();
2 26 Feb 07 jari 360             
2 26 Feb 07 jari 361             data.addMatrix("experiment", experiment.getMatrix());
2 26 Feb 07 jari 362             data.addParam("distance-factor", String.valueOf(1.0f));
2 26 Feb 07 jari 363             data.addParam("distance-absolute", String.valueOf(menu.isAbsoluteDistance()));
2 26 Feb 07 jari 364             
2 26 Feb 07 jari 365             data.addParam("distance-function", String.valueOf(function));
2 26 Feb 07 jari 366             data.addIntArray("group-assignments", groupAssignments);
2 26 Feb 07 jari 367             data.addParam("study-design", String.valueOf(studyDesign));
2 26 Feb 07 jari 368             if (studyDesign == SAMInitDialog.TWO_CLASS_PAIRED) {
2 26 Feb 07 jari 369                 FloatMatrix pairedAExptsMatrix = new FloatMatrix(pairedGroupAExpts.size(), 1);
2 26 Feb 07 jari 370                 FloatMatrix pairedBExptsMatrix = new FloatMatrix(pairedGroupBExpts.size(), 1);
2 26 Feb 07 jari 371                 
2 26 Feb 07 jari 372                 for (int i = 0; i < pairedGroupAExpts.size(); i++) {
2 26 Feb 07 jari 373                     pairedAExptsMatrix.A[i][0] = ((Integer)(pairedGroupAExpts.get(i))).floatValue();
2 26 Feb 07 jari 374                     pairedBExptsMatrix.A[i][0] = ((Integer)(pairedGroupBExpts.get(i))).floatValue();
2 26 Feb 07 jari 375                 }
2 26 Feb 07 jari 376                 data.addMatrix("pairedAExptsMatrix", pairedAExptsMatrix);
2 26 Feb 07 jari 377                 data.addMatrix("pairedBExptsMatrix", pairedBExptsMatrix);
2 26 Feb 07 jari 378             }
2 26 Feb 07 jari 379             
2 26 Feb 07 jari 380             if (studyDesign == SAMInitDialog.MULTI_CLASS) {
2 26 Feb 07 jari 381                 data.addParam("numMultiClassGroups", String.valueOf(numMultiClassGroups));
2 26 Feb 07 jari 382             }
2 26 Feb 07 jari 383             
2 26 Feb 07 jari 384             if (studyDesign == SAMInitDialog.CENSORED_SURVIVAL) {
2 26 Feb 07 jari 385                 FloatMatrix inAnalysisMatrix, isCensoredMatrix, survivalTimesMatrix;
2 26 Feb 07 jari 386                 inAnalysisMatrix = new FloatMatrix(inSurvivalAnalysis.length, 1);
2 26 Feb 07 jari 387                 isCensoredMatrix = new FloatMatrix(inSurvivalAnalysis.length, 1);
2 26 Feb 07 jari 388                 survivalTimesMatrix = new FloatMatrix(inSurvivalAnalysis.length, 1);
2 26 Feb 07 jari 389                 for (int i = 0; i < inSurvivalAnalysis.length; i++) {
2 26 Feb 07 jari 390                     if (!inSurvivalAnalysis[i]) {
2 26 Feb 07 jari 391                         inAnalysisMatrix.A[i][0] = 0.0f;
2 26 Feb 07 jari 392                     } else {
2 26 Feb 07 jari 393                         inAnalysisMatrix.A[i][0] = 1.0f;
2 26 Feb 07 jari 394                     }
2 26 Feb 07 jari 395                     if (!censored[i]) {
2 26 Feb 07 jari 396                         isCensoredMatrix.A[i][0] = 0.0f;
2 26 Feb 07 jari 397                     } else {
2 26 Feb 07 jari 398                         isCensoredMatrix.A[i][0] = 1.0f;
2 26 Feb 07 jari 399                     }
2 26 Feb 07 jari 400                     survivalTimesMatrix.A[i][0] = (float)survivalTimes[i];
2 26 Feb 07 jari 401                 }
2 26 Feb 07 jari 402                 data.addMatrix("inAnalysisMatrix", inAnalysisMatrix);
2 26 Feb 07 jari 403                 data.addMatrix("isCensoredMatrix", isCensoredMatrix);
2 26 Feb 07 jari 404                 data.addMatrix("survivalTimesMatrix", survivalTimesMatrix);
2 26 Feb 07 jari 405             }
2 26 Feb 07 jari 406             
2 26 Feb 07 jari 407             if (studyDesign == SAMInitDialog.ONE_CLASS) {
2 26 Feb 07 jari 408                 data.addParam("oneClassMean", String.valueOf(oneClassMean));
2 26 Feb 07 jari 409             }
2 26 Feb 07 jari 410             data.addParam("useAllUniquePerms", String.valueOf(useAllUniquePerms));
2 26 Feb 07 jari 411             
2 26 Feb 07 jari 412             if (useAllUniquePerms) {
2 26 Feb 07 jari 413                 data.addParam("numUniquePerms", String.valueOf(numUniquePerms));
2 26 Feb 07 jari 414             }
2 26 Feb 07 jari 415             
2 26 Feb 07 jari 416             data.addParam("num-combs", String.valueOf(numCombs));
2 26 Feb 07 jari 417             //data.addParam("use-all-combs", String.valueOf(useAllCombs));
2 26 Feb 07 jari 418             data.addParam("use-k-nearest", String.valueOf(useKNearest));
2 26 Feb 07 jari 419             data.addParam("num-neighbors", String.valueOf(numNeighbors));
2 26 Feb 07 jari 420             data.addParam("saveImputedMatrix", String.valueOf(saveImputedMatrix));
2 26 Feb 07 jari 421             data.addParam("use-previous-graph", String.valueOf(usePreviousGraph));
2 26 Feb 07 jari 422             data.addParam("userPercentile", String.valueOf(userPercentile));
2 26 Feb 07 jari 423             data.addParam("useTusherEtAlS0", String.valueOf(useTusherEtAlS0));
2 26 Feb 07 jari 424             data.addParam("calculateQLowestFDR", String.valueOf(calculateQLowestFDR));
2 26 Feb 07 jari 425             // hcl parameters
2 26 Feb 07 jari 426             if (isHierarchicalTree) {
2 26 Feb 07 jari 427                 data.addParam("hierarchical-tree", String.valueOf(true));
2 26 Feb 07 jari 428                 data.addParam("draw-sig-trees-only", String.valueOf(drawSigTreesOnly));                
2 26 Feb 07 jari 429                 data.addParam("method-linkage", String.valueOf(hcl_method));
2 26 Feb 07 jari 430                 data.addParam("calculate-genes", String.valueOf(hcl_genes));
2 26 Feb 07 jari 431                 data.addParam("calculate-experiments", String.valueOf(hcl_samples));
2 26 Feb 07 jari 432                 data.addParam("hcl-distance-function", String.valueOf(hcl_function));
2 26 Feb 07 jari 433                 data.addParam("hcl-distance-absolute", String.valueOf(hcl_absolute));
2 26 Feb 07 jari 434             }
2 26 Feb 07 jari 435             
2 26 Feb 07 jari 436             long start = System.currentTimeMillis();
2 26 Feb 07 jari 437             AlgorithmData result = algorithm.execute(data);
2 26 Feb 07 jari 438             //System.out.println("After algorithm.execute()");
2 26 Feb 07 jari 439             long time = System.currentTimeMillis() - start;
2 26 Feb 07 jari 440             // getting the results
2 26 Feb 07 jari 441             Cluster result_cluster = result.getCluster("cluster");
2 26 Feb 07 jari 442             NodeList nodeList = result_cluster.getNodeList();
2 26 Feb 07 jari 443             AlgorithmParameters resultMap = result.getParams();
2 26 Feb 07 jari 444             int k = 0;
2 26 Feb 07 jari 445             if ((studyDesign == SAMInitDialog.TWO_CLASS_UNPAIRED) || (studyDesign == SAMInitDialog.TWO_CLASS_PAIRED) || (studyDesign == SAMInitDialog.CENSORED_SURVIVAL) || (studyDesign == SAMInitDialog.ONE_CLASS)) {
2 26 Feb 07 jari 446                 k = 4; //resultMap.getInt("number-of-clusters"); // NEED THIS TO GET THE VALUE OF NUMBER-OF-CLUSTERS
2 26 Feb 07 jari 447             } else {
2 26 Feb 07 jari 448                 k = 2;
2 26 Feb 07 jari 449             }
2 26 Feb 07 jari 450             
2 26 Feb 07 jari 451             this.clusters = new int[k][];
2 26 Feb 07 jari 452             for (int i=0; i<k; i++) {
2 26 Feb 07 jari 453                 clusters[i] = nodeList.getNode(i).getFeaturesIndexes();
2 26 Feb 07 jari 454             }
2 26 Feb 07 jari 455             this.means = result.getMatrix("clusters_means");
2 26 Feb 07 jari 456             this.variances = result.getMatrix("clusters_variances");
2 26 Feb 07 jari 457             
2 26 Feb 07 jari 458             delta = resultMap.getFloat("delta");
2 26 Feb 07 jari 459             String numSigGenes = resultMap.getString("numSigGenes");
2 26 Feb 07 jari 460             String numFalseSigMed = resultMap.getString("numFalseSigMed");
2 26 Feb 07 jari 461             String numFalseSig90th = resultMap.getString("numFalseSig90th");
2 26 Feb 07 jari 462             String FDRMedianString = resultMap.getString("FDRMedian");
2 26 Feb 07 jari 463             String FDR90thString = resultMap.getString("FDR90th");
2 26 Feb 07 jari 464             float sNought = resultMap.getFloat("sNought");
2 26 Feb 07 jari 465             float s0Percentile = resultMap.getFloat("s0Percentile");
2 26 Feb 07 jari 466             float pi0Hat = resultMap.getFloat("pi0Hat");
2 26 Feb 07 jari 467             float upperCutoff;
2 26 Feb 07 jari 468             try {
2 26 Feb 07 jari 469                 upperCutoff = resultMap.getFloat("upperCutoff");
2 26 Feb 07 jari 470             } catch (NumberFormatException nfe) {
2 26 Feb 07 jari 471                 upperCutoff = Float.POSITIVE_INFINITY;
2 26 Feb 07 jari 472             }
2 26 Feb 07 jari 473             float lowerCutoff;
2 26 Feb 07 jari 474             try {
2 26 Feb 07 jari 475                 lowerCutoff = resultMap.getFloat("lowerCutoff");
2 26 Feb 07 jari 476             } catch (NumberFormatException nfe) {
2 26 Feb 07 jari 477                 lowerCutoff = Float.NEGATIVE_INFINITY;
2 26 Feb 07 jari 478             }
2 26 Feb 07 jari 479             boolean useFoldChange = resultMap.getBoolean("useFoldChange");
2 26 Feb 07 jari 480             float foldChangeValue = resultMap.getFloat("foldChangeValue");
2 26 Feb 07 jari 481             FloatMatrix dValuesMatrix = result.getMatrix("dValuesMatrix");
2 26 Feb 07 jari 482             FloatMatrix rValuesMatrix = result.getMatrix("rValuesMatrix");
2 26 Feb 07 jari 483             FloatMatrix qLowestFDRMatrix = result.getMatrix("qLowestFDRMatrix");
2 26 Feb 07 jari 484             FloatMatrix foldChangeMatrix = result.getMatrix("foldChangeMatrix");
2 26 Feb 07 jari 485             dValues = new float[dValuesMatrix.getRowDimension()];
2 26 Feb 07 jari 486             rValues = new float[rValuesMatrix.getRowDimension()];
2 26 Feb 07 jari 487             foldChangeArray =new float[foldChangeMatrix.getRowDimension()];
2 26 Feb 07 jari 488             qLowestFDR = new float[qLowestFDRMatrix.getRowDimension()];
2 26 Feb 07 jari 489             for (int i = 0; i < dValues.length; i++) {
2 26 Feb 07 jari 490                 dValues[i] = dValuesMatrix.A[i][0];
2 26 Feb 07 jari 491                 rValues[i] = rValuesMatrix.A[i][0];
2 26 Feb 07 jari 492                 qLowestFDR[i] = qLowestFDRMatrix.A[i][0];
2 26 Feb 07 jari 493                 foldChangeArray[i] = foldChangeMatrix.A[i][0];
2 26 Feb 07 jari 494             }
2 26 Feb 07 jari 495             FloatMatrix dBarMatrixX = result.getMatrix("dBarMatrixX");
2 26 Feb 07 jari 496             FloatMatrix sortedDMatrixY = result.getMatrix("sortedDMatrixY");
2 26 Feb 07 jari 497             xArray = new double[dBarMatrixX.getRowDimension()];
2 26 Feb 07 jari 498             yArray = new double[sortedDMatrixY.getRowDimension()];
2 26 Feb 07 jari 499             for (int i = 0; i < xArray.length; i++) {
2 26 Feb 07 jari 500                 xArray[i] = (double)(dBarMatrixX.A[i][0]);
2 26 Feb 07 jari 501                 yArray[i] = (double)(sortedDMatrixY.A[i][0]);
2 26 Feb 07 jari 502             }
2 26 Feb 07 jari 503             
2 26 Feb 07 jari 504             FloatMatrix deltaGridMatrix = result.getMatrix("deltaGridMatrix");
2 26 Feb 07 jari 505             FloatMatrix medNumFalseMatrix = result.getMatrix("medNumFalseMatrix");
2 26 Feb 07 jari 506             FloatMatrix false90thMatrix = result.getMatrix("false90thMatrix");
2 26 Feb 07 jari 507             FloatMatrix numSigMatrix = result.getMatrix("numSigMatrix");
2 26 Feb 07 jari 508             FloatMatrix FDRMedianMatrix = result.getMatrix("FDRMedianMatrix");
2 26 Feb 07 jari 509             FloatMatrix FDR90thMatrix = result.getMatrix("FDR90thMatrix");
2 26 Feb 07 jari 510             
2 26 Feb 07 jari 511             deltaGrid = new double[deltaGridMatrix.getRowDimension()];
2 26 Feb 07 jari 512             medNumFalse = new double[medNumFalseMatrix.getRowDimension()];
2 26 Feb 07 jari 513             false90th = new double[false90thMatrix.getRowDimension()];
2 26 Feb 07 jari 514             numSig = new int[numSigMatrix.getRowDimension()];
2 26 Feb 07 jari 515             FDRMedian = new double[FDRMedianMatrix.getRowDimension()];
2 26 Feb 07 jari 516             FDR90th = new double[FDR90thMatrix.getRowDimension()];
2 26 Feb 07 jari 517             
2 26 Feb 07 jari 518             
2 26 Feb 07 jari 519             for (int i= 0; i < deltaGrid.length; i++) {
2 26 Feb 07 jari 520                 deltaGrid[i] = (double)(deltaGridMatrix.A[i][0]);
2 26 Feb 07 jari 521                 medNumFalse[i] = (double)(medNumFalseMatrix.A[i][0]);
2 26 Feb 07 jari 522                 false90th[i] = (double)(false90thMatrix.A[i][0]);
2 26 Feb 07 jari 523                 numSig[i] = (int)(numSigMatrix.A[i][0]);
2 26 Feb 07 jari 524                 FDRMedian[i] = (double)(FDRMedianMatrix.A[i][0]);
2 26 Feb 07 jari 525                 FDR90th[i] = (double)(FDR90thMatrix.A[i][0]);
2 26 Feb 07 jari 526             }
2 26 Feb 07 jari 527             //int studyDesign = resultMap.getInt("studyDesign");
2 26 Feb 07 jari 528             
2 26 Feb 07 jari 529             if ((!usePreviousGraph) && (saveImputedMatrix)) {
2 26 Feb 07 jari 530                 FloatMatrix imputedMatrix = result.getMatrix("imputedMatrix");
2 26 Feb 07 jari 531                 final JFileChooser fc = new JFileChooser();
2 26 Feb 07 jari 532                 fc.setDialogTitle("Save imputed matrix");
2 26 Feb 07 jari 533                 fc.setCurrentDirectory(new File("Data"));
2 26 Feb 07 jari 534                 int returnVal = fc.showSaveDialog((JFrame) framework.getFrame());
2 26 Feb 07 jari 535                 if (returnVal == JFileChooser.APPROVE_OPTION) {
2 26 Feb 07 jari 536                     File file = fc.getSelectedFile();
2 26 Feb 07 jari 537                     try {
2 26 Feb 07 jari 538                         PrintWriter out = new PrintWriter(new FileOutputStream(file));
2 26 Feb 07 jari 539                         String[] fieldNames = framework.getData().getFieldNames();
2 26 Feb 07 jari 540                         //out.print("Original row");
2 26 Feb 07 jari 541                         //out.print("\t");
2 26 Feb 07 jari 542                         for (int i = 0; i < fieldNames.length; i++) {
2 26 Feb 07 jari 543                             out.print(fieldNames[i]);
2 26 Feb 07 jari 544                             if (i < fieldNames.length - 1) {
2 26 Feb 07 jari 545                                 out.print("\t");
2 26 Feb 07 jari 546                             }
2 26 Feb 07 jari 547                         }
2 26 Feb 07 jari 548                         for (int i=0; i<experiment.getNumberOfSamples(); i++) {
2 26 Feb 07 jari 549                             out.print("\t");
2 26 Feb 07 jari 550                             out.print(framework.getData().getFullSampleName(experiment.getSampleIndex(i)));
2 26 Feb 07 jari 551                         }
2 26 Feb 07 jari 552                         out.print("\n");
2 26 Feb 07 jari 553                         for (int i=0; i<imputedMatrix.getRowDimension(); i++) {
2 26 Feb 07 jari 554                             //out.print(Integer.toString(experiment.getGeneIndexMappedToData(rows[i]) + 1));  //handles cutoffs
2 26 Feb 07 jari 555                             //out.print(data.getUniqueId(rows[i]));
2 26 Feb 07 jari 556                             //out.print("\t");
2 26 Feb 07 jari 557                             //out.print(data.getGeneName(rows[i]));
2 26 Feb 07 jari 558                             for (int f = 0; f < fieldNames.length; f++) {
2 26 Feb 07 jari 559                                 out.print(framework.getData().getElementAttribute(experiment.getGeneIndexMappedToData(i), f));
2 26 Feb 07 jari 560                                 if (f < fieldNames.length - 1) {
2 26 Feb 07 jari 561                                     out.print("\t");
2 26 Feb 07 jari 562                                 }
2 26 Feb 07 jari 563                             }
2 26 Feb 07 jari 564                             for (int j=0; j<imputedMatrix.getColumnDimension(); j++) {
2 26 Feb 07 jari 565                                 out.print("\t");
2 26 Feb 07 jari 566                                 out.print(Float.toString(imputedMatrix.A[i][j]));
2 26 Feb 07 jari 567                             }
2 26 Feb 07 jari 568                             out.print("\n");
2 26 Feb 07 jari 569                         }
2 26 Feb 07 jari 570                         //int[] groupAssgn = getGroupAssignments();
2 26 Feb 07 jari 571                         /*
2 26 Feb 07 jari 572                         for (int i = 0; i < groupAssgn.length; i++) {
2 26 Feb 07 jari 573                             out.print(groupAssgn[i]);
2 26 Feb 07 jari 574                             if (i < groupAssgn.length - 1) {
2 26 Feb 07 jari 575                                 out.print("\t");
2 26 Feb 07 jari 576                             }
2 26 Feb 07 jari 577                         }
2 26 Feb 07 jari 578                         out.println();
2 26 Feb 07 jari 579                          */
2 26 Feb 07 jari 580                         out.flush();
2 26 Feb 07 jari 581                         out.close();
2 26 Feb 07 jari 582                     } catch (Exception e) {
2 26 Feb 07 jari 583                         //e.printStackTrace();
2 26 Feb 07 jari 584                     }
2 26 Feb 07 jari 585                     //this is where a real application would save the file.
2 26 Feb 07 jari 586                     //log.append("Saving: " + file.getName() + "." + newline);
2 26 Feb 07 jari 587                 } else {
2 26 Feb 07 jari 588                     //log.append("Save command cancelled by user." + newline);
2 26 Feb 07 jari 589                 }
2 26 Feb 07 jari 590             }
2 26 Feb 07 jari 591             
2 26 Feb 07 jari 592             GeneralInfo info = new GeneralInfo();
2 26 Feb 07 jari 593             
2 26 Feb 07 jari 594             info.time = time;
2 26 Feb 07 jari 595             //ADD MORE INFO PARAMETERS HERE
2 26 Feb 07 jari 596             info.delta = delta;
2 26 Feb 07 jari 597             info.upperCutoff = upperCutoff;
2 26 Feb 07 jari 598             info.lowerCutoff = lowerCutoff;
2 26 Feb 07 jari 599             info.useAllUniquePerms = useAllUniquePerms;
2 26 Feb 07 jari 600             info.numUniquePerms = numUniquePerms;
2 26 Feb 07 jari 601             if ((studyDesign == SAMInitDialog.TWO_CLASS_UNPAIRED) || (studyDesign == SAMInitDialog.TWO_CLASS_PAIRED)) {
2 26 Feb 07 jari 602                 if (useFoldChange) {
2 26 Feb 07 jari 603                     info.useFoldChange = "Yes";
2 26 Feb 07 jari 604                     info.foldChangeValue = foldChangeValue;
2 26 Feb 07 jari 605                 } else {
2 26 Feb 07 jari 606                     info.useFoldChange = "No";
2 26 Feb 07 jari 607                 }
2 26 Feb 07 jari 608             } else {
2 26 Feb 07 jari 609                 info.useFoldChange = "N/A";
2 26 Feb 07 jari 610             }
2 26 Feb 07 jari 611             if (studyDesign == SAMInitDialog.MULTI_CLASS) {
2 26 Feb 07 jari 612                 info.numMultiClassGroups = numMultiClassGroups;
2 26 Feb 07 jari 613             }
2 26 Feb 07 jari 614             
2 26 Feb 07 jari 615             if (studyDesign == SAMInitDialog.ONE_CLASS) {
2 26 Feb 07 jari 616                 info.oneClassMean = oneClassMean;
2 26 Feb 07 jari 617             }
2 26 Feb 07 jari 618             info.numSigGenes = numSigGenes;
2 26 Feb 07 jari 619             info.numFalseSigMed = numFalseSigMed;
2 26 Feb 07 jari 620             info.numFalseSig90th = numFalseSig90th;
2 26 Feb 07 jari 621             info.FDRMedian = FDRMedianString;
2 26 Feb 07 jari 622             info.FDR90th = FDR90thString;
2 26 Feb 07 jari 623             info.studyDesign = studyDesign;
2 26 Feb 07 jari 624             if (useKNearest) {
2 26 Feb 07 jari 625                 info.imputationEngine = "K-Nearest Neighbors";
2 26 Feb 07 jari 626                 info.numNeighbors = numNeighbors;
2 26 Feb 07 jari 627             } else {
2 26 Feb 07 jari 628                 info.imputationEngine = "Row Average";
2 26 Feb 07 jari 629             }
2 26 Feb 07 jari 630             info.numCombs = numCombs;
2 26 Feb 07 jari 631             info.sNought = sNought;
2 26 Feb 07 jari 632             info.s0Percentile = s0Percentile;
2 26 Feb 07 jari 633             info.pi0Hat = pi0Hat;
2 26 Feb 07 jari 634             //info.function = menu.getFunctionName(function);
2 26 Feb 07 jari 635             info.hcl = isHierarchicalTree;
2 26 Feb 07 jari 636             info.hcl_genes = hcl_genes;
2 26 Feb 07 jari 637             info.hcl_samples = hcl_samples;
2 26 Feb 07 jari 638             info.hcl_method = hcl_method;
2 26 Feb 07 jari 639             
2 26 Feb 07 jari 640             Vector allFields = new Vector();
2 26 Feb 07 jari 641             
2 26 Feb 07 jari 642             allFields.add("Expected score (dExp)");
2 26 Feb 07 jari 643             allFields.add(" Observed score(d)");
2 26 Feb 07 jari 644             allFields.add("Numerator(r)");
2 26 Feb 07 jari 645             allFields.add("Denominator (s+s0)");
2 26 Feb 07 jari 646             if ((studyDesign == SAMInitDialog.TWO_CLASS_PAIRED) || (studyDesign == SAMInitDialog.TWO_CLASS_UNPAIRED)) {
2 26 Feb 07 jari 647                 allFields.add("Fold change");
2 26 Feb 07 jari 648             }
2 26 Feb 07 jari 649             if (calculateQLowestFDR) {
2 26 Feb 07 jari 650                 allFields.add("q-value (%)");
2 26 Feb 07 jari 651             }
2 26 Feb 07 jari 652             
2 26 Feb 07 jari 653             auxTitles = new String[allFields.size()];
2 26 Feb 07 jari 654             for (int i = 0; i < auxTitles.length; i++) {
2 26 Feb 07 jari 655                 auxTitles[i] = (String)(allFields.get(i));
2 26 Feb 07 jari 656             }
2 26 Feb 07 jari 657             
2 26 Feb 07 jari 658             auxData = new Object[experiment.getNumberOfGenes()][auxTitles.length];
2 26 Feb 07 jari 659             for (int i = 0; i < auxData.length; i++) {
2 26 Feb 07 jari 660                 int counter = 0;
2 26 Feb 07 jari 661                 auxData[i][counter++] = new Float(dBarMatrixX.A[i][0]);
2 26 Feb 07 jari 662                 auxData[i][counter++] = new Float(dValues[i]);
2 26 Feb 07 jari 663                 auxData[i][counter++] = new Float(rValues[i]);
2 26 Feb 07 jari 664                 auxData[i][counter++] = new Float((float)(rValues[i]/dValues[i]));
2 26 Feb 07 jari 665                 if ((studyDesign == SAMInitDialog.TWO_CLASS_PAIRED) || (studyDesign == SAMInitDialog.TWO_CLASS_UNPAIRED)) {
2 26 Feb 07 jari 666                     auxData[i][counter++] = new Float(foldChangeArray[i]);
2 26 Feb 07 jari 667                 }
2 26 Feb 07 jari 668                 if (calculateQLowestFDR) {
2 26 Feb 07 jari 669                     auxData[i][counter++] = new Float(qLowestFDR[i]);
2 26 Feb 07 jari 670                 }
2 26 Feb 07 jari 671             }
2 26 Feb 07 jari 672             
2 26 Feb 07 jari 673             return createResultTree(result_cluster, info);
2 26 Feb 07 jari 674             
2 26 Feb 07 jari 675         } finally {
2 26 Feb 07 jari 676             if (algorithm != null) {
2 26 Feb 07 jari 677                 algorithm.removeAlgorithmListener(listener);
2 26 Feb 07 jari 678             }
2 26 Feb 07 jari 679             if (progress != null) {
2 26 Feb 07 jari 680                 progress.dispose();
2 26 Feb 07 jari 681             }
2 26 Feb 07 jari 682         }
2 26 Feb 07 jari 683         
2 26 Feb 07 jari 684         //return null; //for now
2 26 Feb 07 jari 685         
2 26 Feb 07 jari 686     }
2 26 Feb 07 jari 687     
2 26 Feb 07 jari 688     /**
2 26 Feb 07 jari 689      * Creates a result tree to be inserted into the framework analysis node.
2 26 Feb 07 jari 690      */
2 26 Feb 07 jari 691     private DefaultMutableTreeNode createResultTree(Cluster result_cluster, GeneralInfo info) {
2 26 Feb 07 jari 692         DefaultMutableTreeNode root = new DefaultMutableTreeNode("SAM");
2 26 Feb 07 jari 693         addResultNodes(root, result_cluster, info);
2 26 Feb 07 jari 694         return root;
2 26 Feb 07 jari 695     }
2 26 Feb 07 jari 696     
2 26 Feb 07 jari 697     /**
2 26 Feb 07 jari 698      * Adds result nodes into the tree root.
2 26 Feb 07 jari 699      */
2 26 Feb 07 jari 700     private void addResultNodes(DefaultMutableTreeNode root, Cluster result_cluster, GeneralInfo info) {
2 26 Feb 07 jari 701         addSAMGraph(root);
2 26 Feb 07 jari 702         addSAMDeltaInfo(root);
2 26 Feb 07 jari 703         addExpressionImages(root);
2 26 Feb 07 jari 704         addHierarchicalTrees(root, result_cluster, info);
2 26 Feb 07 jari 705         addCentroidViews(root);
2 26 Feb 07 jari 706         addTableViews(root);
2 26 Feb 07 jari 707         addClusterInfo(root);
2 26 Feb 07 jari 708         addGeneralInfo(root, info);
2 26 Feb 07 jari 709     }
2 26 Feb 07 jari 710     
2 26 Feb 07 jari 711     private void addSAMGraph(DefaultMutableTreeNode root) {
2 26 Feb 07 jari 712         //DefaultMutableTreeNode node = new DefaultMutableTreeNode("SAM Graph");
2 26 Feb 07 jari 713         IViewer sgViewer = new SAMGraphViewer(xArray, yArray, studyDesign, (double)delta);
2 26 Feb 07 jari 714         root.add(new DefaultMutableTreeNode(new LeafInfo("SAM Graph", sgViewer)));
2 26 Feb 07 jari 715     }
2 26 Feb 07 jari 716     
2 26 Feb 07 jari 717     private void addSAMDeltaInfo(DefaultMutableTreeNode root) {
2 26 Feb 07 jari 718         IViewer sdInfoViewer = new SAMDeltaInfoViewer(deltaGrid, medNumFalse, false90th, numSig, FDRMedian, FDR90th);
2 26 Feb 07 jari 719         root.add(new DefaultMutableTreeNode(new LeafInfo("Delta table", sdInfoViewer)));
2 26 Feb 07 jari 720     }
2 26 Feb 07 jari 721     
2 26 Feb 07 jari 722     /**
2 26 Feb 07 jari 723      * Adds nodes to display clusters data.
2 26 Feb 07 jari 724      */
2 26 Feb 07 jari 725     private void addExpressionImages(DefaultMutableTreeNode root) {
2 26 Feb 07 jari 726         DefaultMutableTreeNode node = new DefaultMutableTreeNode("Expression Images");
2 26 Feb 07 jari 727         IViewer expViewer = new SAMExperimentViewer(this.experiment, this.clusters, studyDesign, /*geneNamesVector,*/ dValues, rValues, foldChangeArray, qLowestFDR, calculateQLowestFDR);
2 26 Feb 07 jari 728         
2 26 Feb 07 jari 729         if ((studyDesign == SAMInitDialog.TWO_CLASS_PAIRED) || (studyDesign == SAMInitDialog.TWO_CLASS_UNPAIRED) || (studyDesign == SAMInitDialog.CENSORED_SURVIVAL) || (studyDesign == SAMInitDialog.ONE_CLASS)) {
2 26 Feb 07 jari 730             for (int i=0; i<this.clusters.length; i++) {
2 26 Feb 07 jari 731                 if (i == 0) {
2 26 Feb 07 jari 732                     node.add(new DefaultMutableTreeNode(new LeafInfo("Positive Significant Genes ", expViewer, new Integer(i))));
2 26 Feb 07 jari 733                 } else if (i == 1) {
2 26 Feb 07 jari 734                     node.add(new DefaultMutableTreeNode(new LeafInfo("Negative Significant Genes ", expViewer, new Integer(i))));
2 26 Feb 07 jari 735                     
2 26 Feb 07 jari 736                 } else if (i == 2) {
2 26 Feb 07 jari 737                     node.add(new DefaultMutableTreeNode(new LeafInfo("All Significant Genes ", expViewer, new Integer(i))));
2 26 Feb 07 jari 738                     
2 26 Feb 07 jari 739                 }  else if (i == 3) {
2 26 Feb 07 jari 740                     node.add(new DefaultMutableTreeNode(new LeafInfo("Non-significant Genes ", expViewer, new Integer(i))));
2 26 Feb 07 jari 741                     
2 26 Feb 07 jari 742                 }
2 26 Feb 07 jari 743             }
2 26 Feb 07 jari 744         } else {
2 26 Feb 07 jari 745             for (int i=0; i<this.clusters.length; i++) {
2 26 Feb 07 jari 746                 if (i == 0) {
2 26 Feb 07 jari 747                     node.add(new DefaultMutableTreeNode(new LeafInfo("Significant Genes ", expViewer, new Integer(i))));
2 26 Feb 07 jari 748                 } else if (i == 1) {
2 26 Feb 07 jari 749                     node.add(new DefaultMutableTreeNode(new LeafInfo("Non-significant Genes ", expViewer, new Integer(i))));
2 26 Feb 07 jari 750                 }
2 26 Feb 07 jari 751             }
2 26 Feb 07 jari 752         }
2 26 Feb 07 jari 753         root.add(node);
2 26 Feb 07 jari 754     }
2 26 Feb 07 jari 755     
2 26 Feb 07 jari 756     /**
2 26 Feb 07 jari 757      * Adds nodes to display hierarchical trees.
2 26 Feb 07 jari 758      */
2 26 Feb 07 jari 759     private void addHierarchicalTrees(DefaultMutableTreeNode root, Cluster result_cluster, GeneralInfo info) {
2 26 Feb 07 jari 760         if (!info.hcl) {
2 26 Feb 07 jari 761             return;
2 26 Feb 07 jari 762         }
2 26 Feb 07 jari 763         DefaultMutableTreeNode node = new DefaultMutableTreeNode("Hierarchical Trees");
2 26 Feb 07 jari 764         NodeList nodeList = result_cluster.getNodeList();
2 26 Feb 07 jari 765         if (!drawSigTreesOnly) {
2 26 Feb 07 jari 766             if ((studyDesign == SAMInitDialog.TWO_CLASS_PAIRED) || (studyDesign == SAMInitDialog.TWO_CLASS_UNPAIRED) || (studyDesign == SAMInitDialog.CENSORED_SURVIVAL) || (studyDesign == SAMInitDialog.ONE_CLASS)) {
2 26 Feb 07 jari 767                 for (int i=0; i<nodeList.getSize(); i++) {
2 26 Feb 07 jari 768                     if (i == 0) {
2 26 Feb 07 jari 769                         node.add(new DefaultMutableTreeNode(new LeafInfo("Positive Significant Genes ", createHCLViewer(nodeList.getNode(i), info))));
2 26 Feb 07 jari 770                     } else if (i == 1) {
2 26 Feb 07 jari 771                         node.add(new DefaultMutableTreeNode(new LeafInfo("Negative Significant Genes ", createHCLViewer(nodeList.getNode(i), info))));
2 26 Feb 07 jari 772                     } else if (i == 2) {
2 26 Feb 07 jari 773                         node.add(new DefaultMutableTreeNode(new LeafInfo("All Significant Genes ", createHCLViewer(nodeList.getNode(i), info))));
2 26 Feb 07 jari 774                     } else if (i == 3) {
2 26 Feb 07 jari 775                         node.add(new DefaultMutableTreeNode(new LeafInfo("Non-significant Genes ", createHCLViewer(nodeList.getNode(i), info))));
2 26 Feb 07 jari 776                     }
2 26 Feb 07 jari 777                 }
2 26 Feb 07 jari 778             } else {
2 26 Feb 07 jari 779                 for (int i=0; i<nodeList.getSize(); i++) {
2 26 Feb 07 jari 780                     if (i == 0) {
2 26 Feb 07 jari 781                         node.add(new DefaultMutableTreeNode(new LeafInfo("Significant Genes ", createHCLViewer(nodeList.getNode(i), info))));
2 26 Feb 07 jari 782                     } else if (i == 1) {
2 26 Feb 07 jari 783                         node.add(new DefaultMutableTreeNode(new LeafInfo("Non-significant Genes ", createHCLViewer(nodeList.getNode(i), info))));
2 26 Feb 07 jari 784                     }
2 26 Feb 07 jari 785                 }
2 26 Feb 07 jari 786             }
2 26 Feb 07 jari 787             
2 26 Feb 07 jari 788         } else {//if (drawSigTreesOnly)
2 26 Feb 07 jari 789             if ((studyDesign == SAMInitDialog.TWO_CLASS_PAIRED) || (studyDesign == SAMInitDialog.TWO_CLASS_UNPAIRED) || (studyDesign == SAMInitDialog.CENSORED_SURVIVAL) || (studyDesign == SAMInitDialog.ONE_CLASS)) {
2 26 Feb 07 jari 790                 for (int i=0; i<nodeList.getSize(); i++) {
2 26 Feb 07 jari 791                     if (i == 0) {
2 26 Feb 07 jari 792                         node.add(new DefaultMutableTreeNode(new LeafInfo("Positive Significant Genes ", createHCLViewer(nodeList.getNode(i), info))));
2 26 Feb 07 jari 793                     } else if (i == 1) {
2 26 Feb 07 jari 794                         node.add(new DefaultMutableTreeNode(new LeafInfo("Negative Significant Genes ", createHCLViewer(nodeList.getNode(i), info))));
2 26 Feb 07 jari 795                     } else if (i == 2) {
2 26 Feb 07 jari 796                         node.add(new DefaultMutableTreeNode(new LeafInfo("All Significant Genes ", createHCLViewer(nodeList.getNode(i), info))));
2 26 Feb 07 jari 797                     } 
2 26 Feb 07 jari 798                 }
2 26 Feb 07 jari 799                 
2 26 Feb 07 jari 800             } else {
2 26 Feb 07 jari 801                 for (int i=0; i<nodeList.getSize(); i++) {
2 26 Feb 07 jari 802                     if (i == 0) {
2 26 Feb 07 jari 803                         node.add(new DefaultMutableTreeNode(new LeafInfo("Significant Genes ", createHCLViewer(nodeList.getNode(i), info))));
2 26 Feb 07 jari 804                     } 
2 26 Feb 07 jari 805                 }
2 26 Feb 07 jari 806             }            
2 26 Feb 07 jari 807         }
2 26 Feb 07 jari 808         root.add(node);
2 26 Feb 07 jari 809     }
2 26 Feb 07 jari 810     
2 26 Feb 07 jari 811     private IViewer createHCLViewer(Node clusterNode, GeneralInfo info) {
2 26 Feb 07 jari 812         HCLTreeData genes_result = info.hcl_genes ? getResult(clusterNode, 0) : null;
2 26 Feb 07 jari 813         HCLTreeData samples_result = info.hcl_samples ? getResult(clusterNode, info.hcl_genes ? 4 : 0) : null;
2 26 Feb 07 jari 814         return new HCLViewer(this.experiment, clusterNode.getFeaturesIndexes(), genes_result, samples_result);
2 26 Feb 07 jari 815     }
2 26 Feb 07 jari 816     
2 26 Feb 07 jari 817     /**
2 26 Feb 07 jari 818      * Returns a hcl tree data from the specified cluster node.
2 26 Feb 07 jari 819      */
2 26 Feb 07 jari 820     private HCLTreeData getResult(Node clusterNode, int pos) {
2 26 Feb 07 jari 821         HCLTreeData data = new HCLTreeData();
2 26 Feb 07 jari 822         NodeValueList valueList = clusterNode.getValues();
2 26 Feb 07 jari 823         data.child_1_array = (int[])valueList.getNodeValue(pos).value;
2 26 Feb 07 jari 824         data.child_2_array = (int[])valueList.getNodeValue(pos+1).value;
2 26 Feb 07 jari 825         data.node_order = (int[])valueList.getNodeValue(pos+2).value;
2 26 Feb 07 jari 826         data.height = (float[])valueList.getNodeValue(pos+3).value;
2 26 Feb 07 jari 827         return data;
2 26 Feb 07 jari 828     }
2 26 Feb 07 jari 829     
2 26 Feb 07 jari 830     /**
2 26 Feb 07 jari 831      * Adds node with cluster information.
2 26 Feb 07 jari 832      */
2 26 Feb 07 jari 833     private void addClusterInfo(DefaultMutableTreeNode root) {
2 26 Feb 07 jari 834         DefaultMutableTreeNode node = new DefaultMutableTreeNode("Cluster Information");
2 26 Feb 07 jari 835         //System.out.println("SAMGUI.addClusterInfo(): studyDesign = " + studyDesign);
2 26 Feb 07 jari 836         node.add(new DefaultMutableTreeNode(new LeafInfo("Results (#,%)", new SAMInfoViewer(this.clusters, this.experiment.getNumberOfGenes(), studyDesign))));
2 26 Feb 07 jari 837         root.add(node);
2 26 Feb 07 jari 838     }
2 26 Feb 07 jari 839     
2 26 Feb 07 jari 840     private void addTableViews(DefaultMutableTreeNode root) {
2 26 Feb 07 jari 841         DefaultMutableTreeNode tabNode = new DefaultMutableTreeNode("Table Views");
2 26 Feb 07 jari 842         IViewer tabViewer = new ClusterTableViewer(this.experiment, this.clusters, this.data, this.auxTitles, this.auxData);
2 26 Feb 07 jari 843         if ((studyDesign == SAMInitDialog.TWO_CLASS_UNPAIRED) || (studyDesign == SAMInitDialog.TWO_CLASS_PAIRED) || (studyDesign == SAMInitDialog.CENSORED_SURVIVAL) || (studyDesign == SAMInitDialog.ONE_CLASS)) {
2 26 Feb 07 jari 844             for (int i=0; i<this.clusters.length; i++) {
2 26 Feb 07 jari 845                 if (i == 0) {
2 26 Feb 07 jari 846                     tabNode.add(new DefaultMutableTreeNode(new LeafInfo("Positive Significant Genes ", tabViewer, new Integer(i))));
2 26 Feb 07 jari 847                 } else if (i == 1) {
2 26 Feb 07 jari 848                     tabNode.add(new DefaultMutableTreeNode(new LeafInfo("Negative Significant Genes ", tabViewer, new Integer(i))));
2 26 Feb 07 jari 849                 } else if (i == 2) {
2 26 Feb 07 jari 850                     tabNode.add(new DefaultMutableTreeNode(new LeafInfo("All Significant Genes ", tabViewer, new Integer(i))));
2 26 Feb 07 jari 851                 } else if (i == 3) {
2 26 Feb 07 jari 852                     tabNode.add(new DefaultMutableTreeNode(new LeafInfo("Non-significant Genes ", tabViewer, new Integer(i))));
2 26 Feb 07 jari 853                 }
2 26 Feb 07 jari 854             }
2 26 Feb 07 jari 855         } else {
2 26 Feb 07 jari 856             for (int i=0; i<this.clusters.length; i++) {
2 26 Feb 07 jari 857                 if (i == 0) {
2 26 Feb 07 jari 858                     tabNode.add(new DefaultMutableTreeNode(new LeafInfo("Significant Genes ", tabViewer, new Integer(i))));
2 26 Feb 07 jari 859                 } else if (i == 1) {
2 26 Feb 07 jari 860                     tabNode.add(new DefaultMutableTreeNode(new LeafInfo("Non-significant Genes ", tabViewer, new Integer(i))));
2 26 Feb 07 jari 861                 }
2 26 Feb 07 jari 862             }
2 26 Feb 07 jari 863         }
2 26 Feb 07 jari 864         root.add(tabNode);
2 26 Feb 07 jari 865     }
2 26 Feb 07 jari 866     
2 26 Feb 07 jari 867     /**
2 26 Feb 07 jari 868      * Adds nodes to display centroid charts.
2 26 Feb 07 jari 869      */
2 26 Feb 07 jari 870     private void addCentroidViews(DefaultMutableTreeNode root) {
2 26 Feb 07 jari 871         DefaultMutableTreeNode centroidNode = new DefaultMutableTreeNode("Centroid Graphs");
2 26 Feb 07 jari 872         DefaultMutableTreeNode expressionNode = new DefaultMutableTreeNode("Expression Graphs");
2 26 Feb 07 jari 873         SAMCentroidViewer centroidViewer = new SAMCentroidViewer(this.experiment, clusters, studyDesign, /*geneNamesVector,*/ dValues, rValues, foldChangeArray, qLowestFDR, calculateQLowestFDR);
2 26 Feb 07 jari 874         centroidViewer.setMeans(this.means.A);
2 26 Feb 07 jari 875         centroidViewer.setVariances(this.variances.A);
2 26 Feb 07 jari 876         if ((studyDesign == SAMInitDialog.TWO_CLASS_UNPAIRED) || (studyDesign == SAMInitDialog.TWO_CLASS_PAIRED) || (studyDesign == SAMInitDialog.CENSORED_SURVIVAL) || (studyDesign == SAMInitDialog.ONE_CLASS)) {
2 26 Feb 07 jari 877             for (int i=0; i<this.clusters.length; i++) {
2 26 Feb 07 jari 878                 
2 26 Feb 07 jari 879                 if (i == 0) {
2 26 Feb 07 jari 880                     centroidNode.add(new DefaultMutableTreeNode(new LeafInfo("Positive Significant Genes ", centroidViewer, new CentroidUserObject(i, CentroidUserObject.VARIANCES_MODE))));
2 26 Feb 07 jari 881                     expressionNode.add(new DefaultMutableTreeNode(new LeafInfo("Positive Significant Genes ", centroidViewer, new CentroidUserObject(i, CentroidUserObject.VALUES_MODE))));
2 26 Feb 07 jari 882                 } else if (i == 1) {
2 26 Feb 07 jari 883                     centroidNode.add(new DefaultMutableTreeNode(new LeafInfo("Negative Significant Genes ", centroidViewer, new CentroidUserObject(i, CentroidUserObject.VARIANCES_MODE))));
2 26 Feb 07 jari 884                     expressionNode.add(new DefaultMutableTreeNode(new LeafInfo("Negative Significant Genes ", centroidViewer, new CentroidUserObject(i, CentroidUserObject.VALUES_MODE))));
2 26 Feb 07 jari 885                     
2 26 Feb 07 jari 886                 } else if (i == 2) {
2 26 Feb 07 jari 887                     centroidNode.add(new DefaultMutableTreeNode(new LeafInfo("All Significant Genes ", centroidViewer, new CentroidUserObject(i, CentroidUserObject.VARIANCES_MODE))));
2 26 Feb 07 jari 888                     expressionNode.add(new DefaultMutableTreeNode(new LeafInfo("All Significant Genes ", centroidViewer, new CentroidUserObject(i, CentroidUserObject.VALUES_MODE))));
2 26 Feb 07 jari 889                     
2 26 Feb 07 jari 890                 } else if (i == 3) {
2 26 Feb 07 jari 891                     centroidNode.add(new DefaultMutableTreeNode(new LeafInfo("Non-significant Genes ", centroidViewer, new CentroidUserObject(i, CentroidUserObject.VARIANCES_MODE))));
2 26 Feb 07 jari 892                     expressionNode.add(new DefaultMutableTreeNode(new LeafInfo("Non-significant Genes ", centroidViewer, new CentroidUserObject(i, CentroidUserObject.VALUES_MODE))));
2 26 Feb 07 jari 893                     
2 26 Feb 07 jari 894                 }
2 26 Feb 07 jari 895             }
2 26 Feb 07 jari 896         } else {
2 26 Feb 07 jari 897             for (int i=0; i<this.clusters.length; i++) {
2 26 Feb 07 jari 898                 
2 26 Feb 07 jari 899                 if (i == 0) {
2 26 Feb 07 jari 900                     centroidNode.add(new DefaultMutableTreeNode(new LeafInfo("Significant Genes ", centroidViewer, new CentroidUserObject(i, CentroidUserObject.VARIANCES_MODE))));
2 26 Feb 07 jari 901                     expressionNode.add(new DefaultMutableTreeNode(new LeafInfo("Significant Genes ", centroidViewer, new CentroidUserObject(i, CentroidUserObject.VALUES_MODE))));
2 26 Feb 07 jari 902                 } else if (i == 1) {
2 26 Feb 07 jari 903                     centroidNode.add(new DefaultMutableTreeNode(new LeafInfo("Non-significant Genes ", centroidViewer, new CentroidUserObject(i, CentroidUserObject.VARIANCES_MODE))));
2 26 Feb 07 jari 904                     expressionNode.add(new DefaultMutableTreeNode(new LeafInfo("Non-significant Genes ", centroidViewer, new CentroidUserObject(i, CentroidUserObject.VALUES_MODE))));
2 26 Feb 07 jari 905                     
2 26 Feb 07 jari 906                 }
2 26 Feb 07 jari 907             }
2 26 Feb 07 jari 908         }
2 26 Feb 07 jari 909         
2 26 Feb 07 jari 910         SAMCentroidsViewer centroidsViewer = new SAMCentroidsViewer(this.experiment, clusters, studyDesign, /*geneNamesVector,*/ dValues, rValues, foldChangeArray, qLowestFDR, calculateQLowestFDR);
2 26 Feb 07 jari 911         centroidsViewer.setMeans(this.means.A);
2 26 Feb 07 jari 912         centroidsViewer.setVariances(this.variances.A);
2 26 Feb 07 jari 913         
2 26 Feb 07 jari 914         centroidNode.add(new DefaultMutableTreeNode(new LeafInfo("All Genes", centroidsViewer, new Integer(CentroidUserObject.VARIANCES_MODE))));
2 26 Feb 07 jari 915         expressionNode.add(new DefaultMutableTreeNode(new LeafInfo("All Genes", centroidsViewer, new Integer(CentroidUserObject.VALUES_MODE))));
2 26 Feb 07 jari 916         
2 26 Feb 07 jari 917         root.add(centroidNode);
2 26 Feb 07 jari 918         root.add(expressionNode);
2 26 Feb 07 jari 919     }
2 26 Feb 07 jari 920     
2 26 Feb 07 jari 921     /**
2 26 Feb 07 jari 922      * Adds node with general iformation.
2 26 Feb 07 jari 923      */
2 26 Feb 07 jari 924     private void addGeneralInfo(DefaultMutableTreeNode root, GeneralInfo info) {
2 26 Feb 07 jari 925         DefaultMutableTreeNode node = new DefaultMutableTreeNode("General Information");
2 26 Feb 07 jari 926         DefaultMutableTreeNode inputSubNode = new DefaultMutableTreeNode("Input Parameters");
2 26 Feb 07 jari 927         DefaultMutableTreeNode computedSubNode = new DefaultMutableTreeNode("Computed Quantities");
2 26 Feb 07 jari 928         inputSubNode.add(new DefaultMutableTreeNode("Study Design: " + info.getStudyDesign()));
2 26 Feb 07 jari 929         if ((studyDesign == SAMInitDialog.TWO_CLASS_UNPAIRED) || (studyDesign == SAMInitDialog.TWO_CLASS_PAIRED) || (studyDesign == SAMInitDialog.MULTI_CLASS) || (studyDesign == SAMInitDialog.ONE_CLASS)) {
2 26 Feb 07 jari 930             inputSubNode.add(getGroupAssignmentInfo(info.studyDesign));
2 26 Feb 07 jari 931         }
2 26 Feb 07 jari 932         if (info.studyDesign == SAMInitDialog.MULTI_CLASS) {
2 26 Feb 07 jari 933             inputSubNode.add(new DefaultMutableTreeNode("Number of classes: " + info.numMultiClassGroups));
2 26 Feb 07 jari 934         }
2 26 Feb 07 jari 935         if (info.studyDesign == SAMInitDialog.ONE_CLASS) {
2 26 Feb 07 jari 936             inputSubNode.add(new DefaultMutableTreeNode("Hypothesized one-class mean: " + info.oneClassMean));
2 26 Feb 07 jari 937         }
2 26 Feb 07 jari 938         if (info.studyDesign == SAMInitDialog.CENSORED_SURVIVAL) {
2 26 Feb 07 jari 939             inputSubNode.add(getSampleSurvivalInfo());
2 26 Feb 07 jari 940         }
2 26 Feb 07 jari 941         inputSubNode.add(new DefaultMutableTreeNode("Imputation Engine: " + info.imputationEngine));
2 26 Feb 07 jari 942         if (info.imputationEngine == "K-Nearest Neighbors") {
2 26 Feb 07 jari 943             inputSubNode.add(new DefaultMutableTreeNode("Number of K-Nearest Neighbors: " + info.numNeighbors));
2 26 Feb 07 jari 944         }
2 26 Feb 07 jari 945         inputSubNode.add(new DefaultMutableTreeNode("Delta: " + info.delta));
2 26 Feb 07 jari 946         inputSubNode.add(new DefaultMutableTreeNode("Upper Cutoff: " + info.upperCutoff));
2 26 Feb 07 jari 947         inputSubNode.add(new DefaultMutableTreeNode("Lower Cutoff: " + info.lowerCutoff));
2 26 Feb 07 jari 948         inputSubNode.add(new DefaultMutableTreeNode("All permutations unique? " + info.useAllUniquePerms));
2 26 Feb 07 jari 949         if (info.useAllUniquePerms) {
2 26 Feb 07 jari 950             inputSubNode.add(new DefaultMutableTreeNode("Number of unique permutations " + info.numUniquePerms));
2 26 Feb 07 jari 951         } else {
2 26 Feb 07 jari 952             inputSubNode.add(new DefaultMutableTreeNode("Number of Permutations: " + info.numCombs));
2 26 Feb 07 jari 953         }
2 26 Feb 07 jari 954         inputSubNode.add(new DefaultMutableTreeNode("Fold Change Criterion Used: " + info.useFoldChange));
2 26 Feb 07 jari 955         if (info.useFoldChange == "Yes") {
2 26 Feb 07 jari 956             inputSubNode.add(new DefaultMutableTreeNode("Fold Change Value: " + info.foldChangeValue));
2 26 Feb 07 jari 957         }
2 26 Feb 07 jari 958         //ADD MORE INFO HERE
2 26 Feb 07 jari 959         inputSubNode.add(new DefaultMutableTreeNode("HCL: "+info.getMethodName()));
2 26 Feb 07 jari 960         inputSubNode.add(new DefaultMutableTreeNode("Time: "+String.valueOf(info.time)+" ms"));
2 26 Feb 07 jari 961         
2 26 Feb 07 jari 962         computedSubNode.add(new DefaultMutableTreeNode("Computed Exchangeability Factor s0: " + info.sNought));
2 26 Feb 07 jari 963         computedSubNode.add(new DefaultMutableTreeNode("s0 Percentile: " + info.s0Percentile));
2 26 Feb 07 jari 964         computedSubNode.add(new DefaultMutableTreeNode("Pi0Hat: " + info.pi0Hat));
2 26 Feb 07 jari 965         //computedSubNode.add(new DefaultMutableTreeNode("Number of Significant Genes: " + info.numSigGenes));
2 26 Feb 07 jari 966         computedSubNode.add(new DefaultMutableTreeNode("Num. False Sig. Genes (Median): " + info.numFalseSigMed));
2 26 Feb 07 jari 967         computedSubNode.add(new DefaultMutableTreeNode("Num. False Sig. Genes (90th %ile): " + info.numFalseSig90th));
2 26 Feb 07 jari 968         computedSubNode.add(new DefaultMutableTreeNode("False Discovery Rate (Median): " + info.FDRMedian + " %"));
2 26 Feb 07 jari 969         computedSubNode.add(new DefaultMutableTreeNode("False Discovery Rate (90th %ile): " + info.FDR90th + " %"));
2 26 Feb 07 jari 970         //node.add(new DefaultMutableTreeNode(info.function));
2 26 Feb 07 jari 971         node.add(inputSubNode);
2 26 Feb 07 jari 972         node.add(computedSubNode);
2 26 Feb 07 jari 973         root.add(node);
2 26 Feb 07 jari 974     }
2 26 Feb 07 jari 975     
2 26 Feb 07 jari 976     private DefaultMutableTreeNode getSampleSurvivalInfo() {
2 26 Feb 07 jari 977         DefaultMutableTreeNode sampleSurvivalInfo = new DefaultMutableTreeNode("Sample information ");
2 26 Feb 07 jari 978         DefaultMutableTreeNode notInAnalysisNode = new DefaultMutableTreeNode("Not in analysis ");
2 26 Feb 07 jari 979         for (int i = 0; i < inSurvivalAnalysis.length; i++) {
2 26 Feb 07 jari 980             DefaultMutableTreeNode sampleNode = new DefaultMutableTreeNode((String)(exptNamesVector.get(i)));
2 26 Feb 07 jari 981             if (inSurvivalAnalysis[i]) {
2 26 Feb 07 jari 982                 sampleNode.add(new DefaultMutableTreeNode("Time: " + survivalTimes[i]));
2 26 Feb 07 jari 983                 sampleNode.add(new DefaultMutableTreeNode("State: " + (censored[i]?"Censored":"Dead")));
2 26 Feb 07 jari 984                 sampleSurvivalInfo.add(sampleNode);
2 26 Feb 07 jari 985             } else {
2 26 Feb 07 jari 986                 notInAnalysisNode.add(sampleNode);
2 26 Feb 07 jari 987             }
2 26 Feb 07 jari 988         }
2 26 Feb 07 jari 989         
2 26 Feb 07 jari 990         if (notInAnalysisNode.getChildCount() > 0) {
2 26 Feb 07 jari 991             sampleSurvivalInfo.add(notInAnalysisNode);
2 26 Feb 07 jari 992         }
2 26 Feb 07 jari 993         return sampleSurvivalInfo;
2 26 Feb 07 jari 994     }
2 26 Feb 07 jari 995     
2 26 Feb 07 jari 996     private DefaultMutableTreeNode getGroupAssignmentInfo(int studyDesign) {
2 26 Feb 07 jari 997         DefaultMutableTreeNode groupAssignmentInfo = new DefaultMutableTreeNode("Group assigments ");
2 26 Feb 07 jari 998         if (studyDesign == SAMInitDialog.TWO_CLASS_UNPAIRED) {
2 26 Feb 07 jari 999             DefaultMutableTreeNode groupA = new DefaultMutableTreeNode("Group A ");
2 26 Feb 07 jari 1000             DefaultMutableTreeNode groupB = new DefaultMutableTreeNode("Group B ");
2 26 Feb 07 jari 1001             DefaultMutableTreeNode neitherGroup = new DefaultMutableTreeNode("Neither group ");
2 26 Feb 07 jari 1002             
2 26 Feb 07 jari 1003             int neitherGroupCounter = 0;
2 26 Feb 07 jari 1004             
2 26 Feb 07 jari 1005             for (int i = 0; i < groupAssignments.length; i++) {
2 26 Feb 07 jari 1006                 if (groupAssignments[i] == SAMInitDialog.GROUP_A) {
2 26 Feb 07 jari 1007                     groupA.add(new DefaultMutableTreeNode((String)(exptNamesVector.get(i))));
2 26 Feb 07 jari 1008                 } else if (groupAssignments[i] == SAMInitDialog.GROUP_B) {
2 26 Feb 07 jari 1009                     groupB.add(new DefaultMutableTreeNode((String)(exptNamesVector.get(i))));
2 26 Feb 07 jari 1010                 } else {
2 26 Feb 07 jari 1011                     neitherGroup.add(new DefaultMutableTreeNode((String)(exptNamesVector.get(i))));
2 26 Feb 07 jari 1012                     neitherGroupCounter++;
2 26 Feb 07 jari 1013                 }
2 26 Feb 07 jari 1014             }
2 26 Feb 07 jari 1015             
2 26 Feb 07 jari 1016             groupAssignmentInfo.add(groupA);
2 26 Feb 07 jari 1017             groupAssignmentInfo.add(groupB);
2 26 Feb 07 jari 1018             if (neitherGroupCounter > 0) {
2 26 Feb 07 jari 1019                 groupAssignmentInfo.add(neitherGroup);
2 26 Feb 07 jari 1020             }
2 26 Feb 07 jari 1021         } else if (studyDesign == SAMInitDialog.TWO_CLASS_PAIRED) {
2 26 Feb 07 jari 1022             groupAssignmentInfo = new DefaultMutableTreeNode("Pairings ");
2 26 Feb 07 jari 1023             boolean paired[] = new boolean[exptNamesVector.size()];
2 26 Feb 07 jari 1024             for (int i = 0; i < paired.length; i++) {
2 26 Feb 07 jari 1025                 paired[i] = false;
2 26 Feb 07 jari 1026             }
2 26 Feb 07 jari 1027             DefaultMutableTreeNode pairs = new DefaultMutableTreeNode("Sample Pairs");
2 26 Feb 07 jari 1028             DefaultMutableTreeNode nonPairs = new DefaultMutableTreeNode("Unpaired Experiments");
2 26 Feb 07 jari 1029             for (int i = 0; i < pairedGroupAExpts.size(); i++) {
2 26 Feb 07 jari 1030                 int currentA = ((Integer)(pairedGroupAExpts.get(i))).intValue();
2 26 Feb 07 jari 1031                 int currentB = ((Integer)(pairedGroupBExpts.get(i))).intValue();
2 26 Feb 07 jari 1032                 pairs.add(new DefaultMutableTreeNode("A: " + (String)(exptNamesVector.get(currentA)) + " - B: " + (String)(exptNamesVector.get(currentB)) ));
2 26 Feb 07 jari 1033                 paired[currentA] = true;
2 26 Feb 07 jari 1034                 paired[currentB] = true;
2 26 Feb 07 jari 1035             }
2 26 Feb 07 jari 1036             for (int i = 0 ; i < paired.length; i++) {
2 26 Feb 07 jari 1037                 if (!paired[i]) {
2 26 Feb 07 jari 1038                     nonPairs.add(new DefaultMutableTreeNode((String)(exptNamesVector.get(i))));
2 26 Feb 07 jari 1039                 }
2 26 Feb 07 jari 1040             }
2 26 Feb 07 jari 1041             groupAssignmentInfo.add(pairs);
2 26 Feb 07 jari 1042             if (!nonPairs.isLeaf()) {
2 26 Feb 07 jari 1043                 groupAssignmentInfo.add(nonPairs);
2 26 Feb 07 jari 1044             }
2 26 Feb 07 jari 1045             
2 26 Feb 07 jari 1046         } else if (studyDesign == SAMInitDialog.MULTI_CLASS) {
2 26 Feb 07 jari 1047             DefaultMutableTreeNode notInGroups = new DefaultMutableTreeNode("Not in groups");
2 26 Feb 07 jari 1048             DefaultMutableTreeNode[] groups = new DefaultMutableTreeNode[numMultiClassGroups];
2 26 Feb 07 jari 1049             for (int i = 0; i < numMultiClassGroups; i++) {
2 26 Feb 07 jari 1050                 groups[i] = new DefaultMutableTreeNode("Group " + (i + 1));
2 26 Feb 07 jari 1051                 
2 26 Feb 07 jari 1052             }
2 26 Feb 07 jari 1053             
2 26 Feb 07 jari 1054             for (int i = 0; i < groupAssignments.length; i++) {
2 26 Feb 07 jari 1055                 int currentGroup = groupAssignments[i];
2 26 Feb 07 jari 1056                 if (currentGroup == 0) {
2 26 Feb 07 jari 1057                     notInGroups.add(new DefaultMutableTreeNode((String)(exptNamesVector.get(i))));
2 26 Feb 07 jari 1058                 } else {
2 26 Feb 07 jari 1059                     groups[currentGroup - 1].add(new DefaultMutableTreeNode((String)(exptNamesVector.get(i))));
2 26 Feb 07 jari 1060                 }
2 26 Feb 07 jari 1061             }
2 26 Feb 07 jari 1062             
2 26 Feb 07 jari 1063             for (int i = 0; i < groups.length; i++) {
2 26 Feb 07 jari 1064                 groupAssignmentInfo.add(groups[i]);
2 26 Feb 07 jari 1065             }
2 26 Feb 07 jari 1066             if (notInGroups.getChildCount() > 0) {
2 26 Feb 07 jari 1067                 groupAssignmentInfo.add(notInGroups);
2 26 Feb 07 jari 1068             }
2 26 Feb 07 jari 1069         } else if (studyDesign == SAMInitDialog.ONE_CLASS) {
2 26 Feb 07 jari 1070             groupAssignmentInfo = new DefaultMutableTreeNode("Sample details");
2 26 Feb 07 jari 1071             DefaultMutableTreeNode in = new DefaultMutableTreeNode("In analysis ");
2 26 Feb 07 jari 1072             DefaultMutableTreeNode out = new DefaultMutableTreeNode("Out of analysis ");
2 26 Feb 07 jari 1073             int outCounter = 0;
2 26 Feb 07 jari 1074             for (int i = 0; i < groupAssignments.length; i++) {
2 26 Feb 07 jari 1075                 if (groupAssignments[i] == 1) {
2 26 Feb 07 jari 1076                     in.add(new DefaultMutableTreeNode((String)(exptNamesVector.get(i))));
2 26 Feb 07 jari 1077                 } else {
2 26 Feb 07 jari 1078                     out.add(new DefaultMutableTreeNode((String)(exptNamesVector.get(i))));
2 26 Feb 07 jari 1079                     outCounter++;
2 26 Feb 07 jari 1080                 }
2 26 Feb 07 jari 1081             }
2 26 Feb 07 jari 1082             
2 26 Feb 07 jari 1083             if (outCounter == 0) {
2 26 Feb 07 jari 1084                 out.add(new DefaultMutableTreeNode("None"));
2 26 Feb 07 jari 1085             }
2 26 Feb 07 jari 1086             groupAssignmentInfo.add(in);
2 26 Feb 07 jari 1087             groupAssignmentInfo.add(out);
2 26 Feb 07 jari 1088         }
2 26 Feb 07 jari 1089         //
2 26 Feb 07 jari 1090         return groupAssignmentInfo;
2 26 Feb 07 jari 1091     }
2 26 Feb 07 jari 1092     
2 26 Feb 07 jari 1093     
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     public AlgorithmData getScriptParameters(IFramework framework) {
2 26 Feb 07 jari 1099         AlgorithmData data = new AlgorithmData();
2 26 Feb 07 jari 1100         SAMGUI.SAMFrame = (JFrame) framework.getFrame();
2 26 Feb 07 jari 1101         this.experiment = framework.getData().getExperiment();
2 26 Feb 07 jari 1102         this.data = framework.getData();
2 26 Feb 07 jari 1103         exptNamesVector = new Vector();
2 26 Feb 07 jari 1104         geneNamesVector = new Vector();
2 26 Feb 07 jari 1105         int number_of_samples = experiment.getNumberOfSamples();
2 26 Feb 07 jari 1106         int number_of_genes = experiment.getNumberOfGenes();
2 26 Feb 07 jari 1107         
2 26 Feb 07 jari 1108         for (int i = 0; i < number_of_samples; i++) {
2 26 Feb 07 jari 1109             exptNamesVector.add(framework.getData().getFullSampleName(experiment.getSampleIndex(i)));
2 26 Feb 07 jari 1110         }
2 26 Feb 07 jari 1111         for (int i = 0; i < number_of_genes; i++) {
2 26 Feb 07 jari 1112             geneNamesVector.add(framework.getData().getGeneName(i));
2 26 Feb 07 jari 1113         }
2 26 Feb 07 jari 1114         
2 26 Feb 07 jari 1115         SAMInitDialog sDialog;
2 26 Feb 07 jari 1116         studyDesign = 0;
2 26 Feb 07 jari 1117         int numCombs = 0;
2 26 Feb 07 jari 1118         int numUniquePerms = 0;
2 26 Feb 07 jari 1119         int numNeighbors = 0;
2 26 Feb 07 jari 1120         numMultiClassGroups = 0;
2 26 Feb 07 jari 1121         
2 26 Feb 07 jari 1122         boolean useKNearest = true;
2 26 Feb 07 jari 1123         boolean isHierarchicalTree = false;
2 26 Feb 07 jari 1124         boolean usePreviousGraph = false;
2 26 Feb 07 jari 1125         boolean saveImputedMatrix = false;
2 26 Feb 07 jari 1126         boolean useTusherEtAlS0 = false;
2 26 Feb 07 jari 1127         boolean useAllUniquePerms = false;
2 26 Feb 07 jari 1128         
2 26 Feb 07 jari 1129         double userPercentile = 0;
2 26 Feb 07 jari 1130         
2 26 Feb 07 jari 1131         //Always launch as first run
2 26 Feb 07 jari 1132         
2 26 Feb 07 jari 1133         usePreviousGraph = false;
2 26 Feb 07 jari 1134         sDialog = new SAMInitDialog((JFrame) framework.getFrame(), true, exptNamesVector, number_of_genes);
2 26 Feb 07 jari 1135         sDialog.setVisible(true);
2 26 Feb 07 jari 1136         
2 26 Feb 07 jari 1137         if (!sDialog.isOkPressed()) {
2 26 Feb 07 jari 1138             return null;
2 26 Feb 07 jari 1139         } else {
2 26 Feb 07 jari 1140             SAMState.firstRun = false;
2 26 Feb 07 jari 1141         }
2 26 Feb 07 jari 1142         
2 26 Feb 07 jari 1143         //get delta value
2 26 Feb 07 jari 1144         SAMScriptDeltaValueInitDialog deltaDialog = new SAMScriptDeltaValueInitDialog((JFrame)framework.getFrame());
2 26 Feb 07 jari 1145         if(deltaDialog.showModal() != JOptionPane.OK_OPTION)
2 26 Feb 07 jari 1146             return null;
2 26 Feb 07 jari 1147         
2 26 Feb 07 jari 1148         boolean graphInteraction = deltaDialog.interactWithGraph();       
2 26 Feb 07 jari 1149         if(!graphInteraction)
2 26 Feb 07 jari 1150             delta = deltaDialog.getDeltaValue();
2 26 Feb 07 jari 1151
2 26 Feb 07 jari 1152         data.addParam("permit-graph-interaction", String.valueOf(graphInteraction));
2 26 Feb 07 jari 1153         data.addParam("delta", String.valueOf(delta));
2 26 Feb 07 jari 1154         
2 26 Feb 07 jari 1155         //SAMState.firstRun = false;
2 26 Feb 07 jari 1156         studyDesign = sDialog.getStudyDesign();
2 26 Feb 07 jari 1157         SAMState.studyDesign = studyDesign;
2 26 Feb 07 jari 1158         if (studyDesign == SAMInitDialog.TWO_CLASS_PAIRED) {
2 26 Feb 07 jari 1159             pairedGroupAExpts = sDialog.getPairedAExpts();
2 26 Feb 07 jari 1160             pairedGroupBExpts = sDialog.getPairedBExpts();
2 26 Feb 07 jari 1161             SAMState.pairedGroupAExpts = pairedGroupAExpts;
2 26 Feb 07 jari 1162             SAMState.pairedGroupBExpts = pairedGroupBExpts;
2 26 Feb 07 jari 1163         }
2 26 Feb 07 jari 1164         if (studyDesign == SAMInitDialog.MULTI_CLASS) {
2 26 Feb 07 jari 1165             numMultiClassGroups = sDialog.getMultiClassNumGroups();
2 26 Feb 07 jari 1166             SAMState.numMultiClassGroups = numMultiClassGroups;
2 26 Feb 07 jari 1167         }
2 26 Feb 07 jari 1168         if (studyDesign == SAMInitDialog.CENSORED_SURVIVAL) {
2 26 Feb 07 jari 1169             inSurvivalAnalysis = sDialog.isInSurvivalAnalysis();
2 26 Feb 07 jari 1170             SAMState.inSurvivalAnalysis = inSurvivalAnalysis;
2 26 Feb 07 jari 1171             censored = sDialog.isCensored();
2 26 Feb 07 jari 1172             SAMState.censored = censored;
2 26 Feb 07 jari 1173             survivalTimes =sDialog.getSurvivalTimes();
2 26 Feb 07 jari 1174             SAMState.survivalTimes = survivalTimes;
2 26 Feb 07 jari 1175         }
2 26 Feb 07 jari 1176         
2 26 Feb 07 jari 1177         if (studyDesign == SAMInitDialog.ONE_CLASS) {
2 26 Feb 07 jari 1178             oneClassMean = (float)(sDialog.getOneClassMean());
2 26 Feb 07 jari 1179             SAMState.oneClassMean = (double)oneClassMean;
2 26 Feb 07 jari 1180         }
2 26 Feb 07 jari 1181         groupAssignments = sDialog.getGroupAssignments();
2 26 Feb 07 jari 1182         SAMState.groupAssignments = groupAssignments;
2 26 Feb 07 jari 1183         //boolean useAllCombs = sDialog.useAllCombs();
2 26 Feb 07 jari 1184         //if (!useAllCombs) {
2 26 Feb 07 jari 1185         numCombs = sDialog.getUserNumCombs();
2 26 Feb 07 jari 1186         SAMState.numCombs = numCombs;
2 26 Feb 07 jari 1187         
2 26 Feb 07 jari 1188         useAllUniquePerms = sDialog.useAllUniquePerms();
2 26 Feb 07 jari 1189         SAMState.useAllUniquePerms = useAllUniquePerms;
2 26 Feb 07 jari 1190         if (useAllUniquePerms) {
2 26 Feb 07 jari 1191             numUniquePerms = sDialog.getNumUniquePerms();
2 26 Feb 07 jari 1192             SAMState.numUniquePerms = numUniquePerms;
2 26 Feb 07 jari 1193         }
2 26 Feb 07 jari 1194         //}
2 26 Feb 07 jari 1195         useKNearest = sDialog.useKNearest();
2 26 Feb 07 jari 1196         SAMState.useKNearest = useKNearest;
2 26 Feb 07 jari 1197         //numNeighbors = 10;
2 26 Feb 07 jari 1198         if (useKNearest) {
2 26 Feb 07 jari 1199             numNeighbors = sDialog.getNumNeighbors();
2 26 Feb 07 jari 1200             SAMState.numNeighbors = numNeighbors;
2 26 Feb 07 jari 1201         }
2 26 Feb 07 jari 1202         isHierarchicalTree = sDialog.drawTrees();
2 26 Feb 07 jari 1203         drawSigTreesOnly = true;
2 26 Feb 07 jari 1204         if (isHierarchicalTree) {
2 26 Feb 07 jari 1205             drawSigTreesOnly = sDialog.drawSigTreesOnly();
2 26 Feb 07 jari 1206         }        
2 26 Feb 07 jari 1207         //SAMState.isHierarchicalTree = isHierarchicalTree;
2 26 Feb 07 jari 1208         saveImputedMatrix = sDialog.isSaveMatrix();
2 26 Feb 07 jari 1209         
2 26 Feb 07 jari 1210         userPercentile = sDialog.getPercentile();
2 26 Feb 07 jari 1211         useTusherEtAlS0 = sDialog.useTusherEtAlS0();
2 26 Feb 07 jari 1212         SAMState.useTusherEtAlS0 = useTusherEtAlS0;
2 26 Feb 07 jari 1213         
2 26 Feb 07 jari 1214         calculateQLowestFDR = sDialog.calculateQLowestFDR();
2 26 Feb 07 jari 1215         SAMState.calculateQLowestFDR = calculateQLowestFDR;
2 26 Feb 07 jari 1216         
2 26 Feb 07 jari 1217         IDistanceMenu menu = framework.getDistanceMenu();
2 26 Feb 07 jari 1218         int function = menu.getDistanceFunction();
2 26 Feb 07 jari 1219         if (function == Algorithm.DEFAULT) {
2 26 Feb 07 jari 1220             function = Algorithm.EUCLIDEAN;
2 26 Feb 07 jari 1221         }
2 26 Feb 07 jari 1222         
2 26 Feb 07 jari 1223         // hcl init
2 26 Feb 07 jari 1224         int hcl_method = 0;
2 26 Feb 07 jari 1225         boolean hcl_samples = false;
2 26 Feb 07 jari 1226         boolean hcl_genes = false;
2 26 Feb 07 jari 1227         int hcl_function = 4;
2 26 Feb 07 jari 1228         boolean hcl_absolute = false;
2 26 Feb 07 jari 1229         if (isHierarchicalTree) {
2 26 Feb 07 jari 1230             HCLInitDialog hcl_dialog = new HCLInitDialog(framework.getFrame(), menu.getFunctionName(function), menu.isAbsoluteDistance(), true);
2 26 Feb 07 jari 1231             if (hcl_dialog.showModal() != JOptionPane.OK_OPTION) {
2 26 Feb 07 jari 1232                 return null;
2 26 Feb 07 jari 1233             }
2 26 Feb 07 jari 1234             hcl_method = hcl_dialog.getMethod();
2 26 Feb 07 jari 1235             hcl_samples = hcl_dialog.isClusterExperiments();
2 26 Feb 07 jari 1236             hcl_genes = hcl_dialog.isClusterGenes();
2 26 Feb 07 jari 1237             hcl_function = hcl_dialog.getDistanceMetric();
2 26 Feb 07 jari 1238             hcl_absolute = hcl_dialog.getAbsoluteSelection();
2 26 Feb 07 jari 1239         }
2 26 Feb 07 jari 1240         
2 26 Feb 07 jari 1241         
2 26 Feb 07 jari 1242         data.addParam("distance-factor", String.valueOf(1.0f));
2 26 Feb 07 jari 1243         data.addParam("distance-absolute", String.valueOf(menu.isAbsoluteDistance()));
2 26 Feb 07 jari 1244                 
2 26 Feb 07 jari 1245         data.addParam("distance-function", String.valueOf(function));
2 26 Feb 07 jari 1246         data.addIntArray("group-assignments", groupAssignments);
2 26 Feb 07 jari 1247         data.addParam("study-design", String.valueOf(studyDesign));
2 26 Feb 07 jari 1248         if (studyDesign == SAMInitDialog.TWO_CLASS_PAIRED) {
2 26 Feb 07 jari 1249             FloatMatrix pairedAExptsMatrix = new FloatMatrix(pairedGroupAExpts.size(), 1);
2 26 Feb 07 jari 1250             FloatMatrix pairedBExptsMatrix = new FloatMatrix(pairedGroupBExpts.size(), 1);
2 26 Feb 07 jari 1251             
2 26 Feb 07 jari 1252             for (int i = 0; i < pairedGroupAExpts.size(); i++) {
2 26 Feb 07 jari 1253                 pairedAExptsMatrix.A[i][0] = ((Integer)(pairedGroupAExpts.get(i))).floatValue();
2 26 Feb 07 jari 1254                 pairedBExptsMatrix.A[i][0] = ((Integer)(pairedGroupBExpts.get(i))).floatValue();
2 26 Feb 07 jari 1255             }
2 26 Feb 07 jari 1256             data.addMatrix("pairedAExptsMatrix", pairedAExptsMatrix);
2 26 Feb 07 jari 1257             data.addMatrix("pairedBExptsMatrix", pairedBExptsMatrix);
2 26 Feb 07 jari 1258         }
2 26 Feb 07 jari 1259         
2 26 Feb 07 jari 1260         if (studyDesign == SAMInitDialog.MULTI_CLASS) {
2 26 Feb 07 jari 1261             data.addParam("numMultiClassGroups", String.valueOf(numMultiClassGroups));
2 26 Feb 07 jari 1262         }
2 26 Feb 07 jari 1263         
2 26 Feb 07 jari 1264         if (studyDesign == SAMInitDialog.CENSORED_SURVIVAL) {
2 26 Feb 07 jari 1265             FloatMatrix inAnalysisMatrix, isCensoredMatrix, survivalTimesMatrix;
2 26 Feb 07 jari 1266             inAnalysisMatrix = new FloatMatrix(inSurvivalAnalysis.length, 1);
2 26 Feb 07 jari 1267             isCensoredMatrix = new FloatMatrix(inSurvivalAnalysis.length, 1);
2 26 Feb 07 jari 1268             survivalTimesMatrix = new FloatMatrix(inSurvivalAnalysis.length, 1);
2 26 Feb 07 jari 1269             for (int i = 0; i < inSurvivalAnalysis.length; i++) {
2 26 Feb 07 jari 1270                 if (!inSurvivalAnalysis[i]) {
2 26 Feb 07 jari 1271                     inAnalysisMatrix.A[i][0] = 0.0f;
2 26 Feb 07 jari 1272                 } else {
2 26 Feb 07 jari 1273                     inAnalysisMatrix.A[i][0] = 1.0f;
2 26 Feb 07 jari 1274                 }
2 26 Feb 07 jari 1275                 if (!censored[i]) {
2 26 Feb 07 jari 1276                     isCensoredMatrix.A[i][0] = 0.0f;
2 26 Feb 07 jari 1277                 } else {
2 26 Feb 07 jari 1278                     isCensoredMatrix.A[i][0] = 1.0f;
2 26 Feb 07 jari 1279                 }
2 26 Feb 07 jari 1280                 survivalTimesMatrix.A[i][0] = (float)survivalTimes[i];
2 26 Feb 07 jari 1281             }
2 26 Feb 07 jari 1282             data.addMatrix("inAnalysisMatrix", inAnalysisMatrix);
2 26 Feb 07 jari 1283             data.addMatrix("isCensoredMatrix", isCensoredMatrix);
2 26 Feb 07 jari 1284             data.addMatrix("survivalTimesMatrix", survivalTimesMatrix);
2 26 Feb 07 jari 1285         }
2 26 Feb 07 jari 1286         
2 26 Feb 07 jari 1287         if (studyDesign == SAMInitDialog.ONE_CLASS) {
2 26 Feb 07 jari 1288             data.addParam("oneClassMean", String.valueOf(oneClassMean));
2 26 Feb 07 jari 1289         }
2 26 Feb 07 jari 1290         data.addParam("useAllUniquePerms", String.valueOf(useAllUniquePerms));
2 26 Feb 07 jari 1291         
2 26 Feb 07 jari 1292         if (useAllUniquePerms) {
2 26 Feb 07 jari 1293             data.addParam("numUniquePerms", String.valueOf(numUniquePerms));
2 26 Feb 07 jari 1294         }
2 26 Feb 07 jari 1295         
2 26 Feb 07 jari 1296         data.addParam("num-combs", String.valueOf(numCombs));
2 26 Feb 07 jari 1297         //data.addParam("use-all-combs", String.valueOf(useAllCombs));
2 26 Feb 07 jari 1298         data.addParam("use-k-nearest", String.valueOf(useKNearest));
2 26 Feb 07 jari 1299         data.addParam("num-neighbors", String.valueOf(numNeighbors));
2 26 Feb 07 jari 1300         data.addParam("saveImputedMatrix", String.valueOf(saveImputedMatrix));
2 26 Feb 07 jari 1301         data.addParam("use-previous-graph", String.valueOf(usePreviousGraph));
2 26 Feb 07 jari 1302         data.addParam("userPercentile", String.valueOf(userPercentile));
2 26 Feb 07 jari 1303         data.addParam("useTusherEtAlS0", String.valueOf(useTusherEtAlS0));
2 26 Feb 07 jari 1304         data.addParam("calculateQLowestFDR", String.valueOf(calculateQLowestFDR));
2 26 Feb 07 jari 1305         // hcl parameters
2 26 Feb 07 jari 1306         if (isHierarchicalTree) {
2 26 Feb 07 jari 1307             data.addParam("hierarchical-tree", String.valueOf(true));
2 26 Feb 07 jari 1308             data.addParam("draw-sig-trees-only", String.valueOf(drawSigTreesOnly));            
2 26 Feb 07 jari 1309             data.addParam("method-linkage", String.valueOf(hcl_method));
2 26 Feb 07 jari 1310             data.addParam("calculate-genes", String.valueOf(hcl_genes));
2 26 Feb 07 jari 1311             data.addParam("calculate-experiments", String.valueOf(hcl_samples));
2 26 Feb 07 jari 1312             data.addParam("hcl-distance-function", String.valueOf(hcl_function));
2 26 Feb 07 jari 1313             data.addParam("hcl-distance-absolute", String.valueOf(hcl_absolute));
2 26 Feb 07 jari 1314         }
2 26 Feb 07 jari 1315         
2 26 Feb 07 jari 1316         // alg name
2 26 Feb 07 jari 1317         data.addParam("name", "SAM");
2 26 Feb 07 jari 1318         
2 26 Feb 07 jari 1319         // alg type
2 26 Feb 07 jari 1320         data.addParam("alg-type", "cluster-genes");
2 26 Feb 07 jari 1321         
2 26 Feb 07 jari 1322         // output class
2 26 Feb 07 jari 1323         data.addParam("output-class", "partition-output");
2 26 Feb 07 jari 1324         
2 26 Feb 07 jari 1325         //output nodes
2 26 Feb 07 jari 1326         String [] outputNodes;
2 26 Feb 07 jari 1327         if(studyDesign == SAMInitDialog.MULTI_CLASS) {
2 26 Feb 07 jari 1328             outputNodes = new String[2];
2 26 Feb 07 jari 1329             outputNodes[0] = "Significant Genes";
2 26 Feb 07 jari 1330             outputNodes[1] = "Non-significant Genes";
2 26 Feb 07 jari 1331         } else {
2 26 Feb 07 jari 1332             outputNodes = new String[4];
2 26 Feb 07 jari 1333             outputNodes[0] = "Positive Significant Genes";
2 26 Feb 07 jari 1334             outputNodes[1] = "Negative Significant Genes";
2 26 Feb 07 jari 1335             outputNodes[2] = "All Significant Genes";
2 26 Feb 07 jari 1336             outputNodes[3] = "Non-significant Genes";
2 26 Feb 07 jari 1337         }
2 26 Feb 07 jari 1338         
2 26 Feb 07 jari 1339         data.addStringArray("output-nodes", outputNodes);
2 26 Feb 07 jari 1340         return data;
2 26 Feb 07 jari 1341     }
2 26 Feb 07 jari 1342     
2 26 Feb 07 jari 1343     
2 26 Feb 07 jari 1344     public DefaultMutableTreeNode executeScript(IFramework framework, AlgorithmData algData, Experiment experiment) throws AlgorithmException {
2 26 Feb 07 jari 1345      
2 26 Feb 07 jari 1346         Listener listener = new Listener();
2 26 Feb 07 jari 1347         this.experiment = experiment;
2 26 Feb 07 jari 1348         algData.addMatrix("experiment", experiment.getMatrix());
2 26 Feb 07 jari 1349         this.data = framework.getData();
2 26 Feb 07 jari 1350         AlgorithmParameters params = algData.getParams();
2 26 Feb 07 jari 1351         this.drawSigTreesOnly = algData.getParams().getBoolean("draw-sig-trees-only");        
2 26 Feb 07 jari 1352         this.studyDesign = params.getInt("study-design");
2 26 Feb 07 jari 1353         
2 26 Feb 07 jari 1354         if(this.studyDesign == SAMInitDialog.TWO_CLASS_UNPAIRED || this.studyDesign == SAMInitDialog.ONE_CLASS ||
2 26 Feb 07 jari 1355             this.studyDesign == SAMInitDialog.MULTI_CLASS) {
2 26 Feb 07 jari 1356             this.groupAssignments = algData.getIntArray("group-assignments");
2 26 Feb 07 jari 1357             if(this.studyDesign == SAMInitDialog.MULTI_CLASS)
2 26 Feb 07 jari 1358                 this.numMultiClassGroups = params.getInt("numMultiClassGroups");
2 26 Feb 07 jari 1359         } else if(this.studyDesign == SAMInitDialog.TWO_CLASS_PAIRED) {
2 26 Feb 07 jari 1360             FloatMatrix fm = algData.getMatrix("pairedAExptsMatrix");
2 26 Feb 07 jari 1361             this.pairedGroupAExpts = new Vector();
2 26 Feb 07 jari 1362             for(int i = 0; i < fm.getRowDimension(); i++)
2 26 Feb 07 jari 1363                 this.pairedGroupAExpts.addElement(new Integer((int)(fm.get(i,0))));
2 26 Feb 07 jari 1364
2 26 Feb 07 jari 1365             fm = algData.getMatrix("pairedBExptsMatrix");           
2 26 Feb 07 jari 1366             this.pairedGroupBExpts = new Vector();
2 26 Feb 07 jari 1367             for(int i = 0; i < fm.getRowDimension(); i++)
2 26 Feb 07 jari 1368                 this.pairedGroupBExpts.addElement(new Integer((int)(fm.get(i,0))));
2 26 Feb 07 jari 1369         }
2 26 Feb 07 jari 1370         
2 26 Feb 07 jari 1371         int number_of_samples = experiment.getNumberOfSamples();
2 26 Feb 07 jari 1372         this.exptNamesVector = new Vector();       
2 26 Feb 07 jari 1373         for (int i = 0; i < number_of_samples; i++) {
2 26 Feb 07 jari 1374             exptNamesVector.add(framework.getData().getFullSampleName(i));
2 26 Feb 07 jari 1375         }
2 26 Feb 07 jari 1376
2 26 Feb 07 jari 1377         
2 26 Feb 07 jari 1378         try {
2 26 Feb 07 jari 1379             algorithm = framework.getAlgorithmFactory().getAlgorithm("SAM");
2 26 Feb 07 jari 1380             //System.out.println("SAMGUI: getting algorithm");
2 26 Feb 07 jari 1381             algorithm.addAlgorithmListener(listener);
2 26 Feb 07 jari 1382             
2 26 Feb 07 jari 1383             //this.progress = new Progress(framework.getFrame(), "Finding significant genes", listener); // **** MAKE PROGRESS BARS LATER
2 26 Feb 07 jari 1384             //this.progress.show();
2 26 Feb 07 jari 1385             
2 26 Feb 07 jari 1386             this.progress = new Progress(framework.getFrame(), "SAM Execution", listener);
2 26 Feb 07 jari 1387             this.progress.show();
2 26 Feb 07 jari 1388             
2 26 Feb 07 jari 1389             long start = System.currentTimeMillis();
2 26 Feb 07 jari 1390             AlgorithmData result = algorithm.execute(algData);
2 26 Feb 07 jari 1391             //System.out.println("After algorithm.execute()");
2 26 Feb 07 jari 1392             long time = System.currentTimeMillis() - start;
2 26 Feb 07 jari 1393             // getting the results
2 26 Feb 07 jari 1394             Cluster result_cluster = result.getCluster("cluster");
2 26 Feb 07 jari 1395             NodeList nodeList = result_cluster.getNodeList();
2 26 Feb 07 jari 1396             AlgorithmParameters resultMap = result.getParams();
2 26 Feb 07 jari 1397             int k = 0;
2 26 Feb 07 jari 1398             if ((studyDesign == SAMInitDialog.TWO_CLASS_UNPAIRED) || (studyDesign == SAMInitDialog.TWO_CLASS_PAIRED) || (studyDesign == SAMInitDialog.CENSORED_SURVIVAL) || (studyDesign == SAMInitDialog.ONE_CLASS)) {
2 26 Feb 07 jari 1399                 k = 4; //resultMap.getInt("number-of-clusters"); // NEED THIS TO GET THE VALUE OF NUMBER-OF-CLUSTERS
2 26 Feb 07 jari 1400             } else {
2 26 Feb 07 jari 1401                 k = 2;
2 26 Feb 07 jari 1402             }
2 26 Feb 07 jari 1403             
2 26 Feb 07 jari 1404             this.clusters = new int[k][];
2 26 Feb 07 jari 1405             for (int i=0; i<k; i++) {
2 26 Feb 07 jari 1406                 clusters[i] = nodeList.getNode(i).getFeaturesIndexes();
2 26 Feb 07 jari 1407             }
2 26 Feb 07 jari 1408             this.means = result.getMatrix("clusters_means");
2 26 Feb 07 jari 1409             this.variances = result.getMatrix("clusters_variances");
2 26 Feb 07 jari 1410             
2 26 Feb 07 jari 1411             delta = resultMap.getFloat("delta");
2 26 Feb 07 jari 1412             String numSigGenes = resultMap.getString("numSigGenes");
2 26 Feb 07 jari 1413             String numFalseSigMed = resultMap.getString("numFalseSigMed");
2 26 Feb 07 jari 1414             String numFalseSig90th = resultMap.getString("numFalseSig90th");
2 26 Feb 07 jari 1415             String FDRMedianString = resultMap.getString("FDRMedian");
2 26 Feb 07 jari 1416             String FDR90thString = resultMap.getString("FDR90th");
2 26 Feb 07 jari 1417             float sNought = resultMap.getFloat("sNought");
2 26 Feb 07 jari 1418             float s0Percentile = resultMap.getFloat("s0Percentile");
2 26 Feb 07 jari 1419             float pi0Hat = resultMap.getFloat("pi0Hat");
2 26 Feb 07 jari 1420             float upperCutoff;
2 26 Feb 07 jari 1421             try {
2 26 Feb 07 jari 1422                 upperCutoff = resultMap.getFloat("upperCutoff");
2 26 Feb 07 jari 1423             } catch (NumberFormatException nfe) {
2 26 Feb 07 jari 1424                 upperCutoff = Float.POSITIVE_INFINITY;
2 26 Feb 07 jari 1425             }
2 26 Feb 07 jari 1426             float lowerCutoff;
2 26 Feb 07 jari 1427             try {
2 26 Feb 07 jari 1428                 lowerCutoff = resultMap.getFloat("lowerCutoff");
2 26 Feb 07 jari 1429             } catch (NumberFormatException nfe) {
2 26 Feb 07 jari 1430                 lowerCutoff = Float.NEGATIVE_INFINITY;
2 26 Feb 07 jari 1431             }
2 26 Feb 07 jari 1432             boolean useFoldChange = resultMap.getBoolean("useFoldChange");
2 26 Feb 07 jari 1433             float foldChangeValue = resultMap.getFloat("foldChangeValue");
2 26 Feb 07 jari 1434             FloatMatrix dValuesMatrix = result.getMatrix("dValuesMatrix");
2 26 Feb 07 jari 1435             FloatMatrix rValuesMatrix = result.getMatrix("rValuesMatrix");
2 26 Feb 07 jari 1436             FloatMatrix qLowestFDRMatrix = result.getMatrix("qLowestFDRMatrix");
2 26 Feb 07 jari 1437             FloatMatrix foldChangeMatrix = result.getMatrix("foldChangeMatrix");
2 26 Feb 07 jari 1438             dValues = new float[dValuesMatrix.getRowDimension()];
2 26 Feb 07 jari 1439             rValues = new float[rValuesMatrix.getRowDimension()];
2 26 Feb 07 jari 1440             foldChangeArray =new float[foldChangeMatrix.getRowDimension()];
2 26 Feb 07 jari 1441             qLowestFDR = new float[qLowestFDRMatrix.getRowDimension()];
2 26 Feb 07 jari 1442             for (int i = 0; i < dValues.length; i++) {
2 26 Feb 07 jari 1443                 dValues[i] = dValuesMatrix.A[i][0];
2 26 Feb 07 jari 1444                 rValues[i] = rValuesMatrix.A[i][0];
2 26 Feb 07 jari 1445                 qLowestFDR[i] = qLowestFDRMatrix.A[i][0];
2 26 Feb 07 jari 1446                 foldChangeArray[i] = foldChangeMatrix.A[i][0];
2 26 Feb 07 jari 1447             }
2 26 Feb 07 jari 1448             FloatMatrix dBarMatrixX = result.getMatrix("dBarMatrixX");
2 26 Feb 07 jari 1449             FloatMatrix sortedDMatrixY = result.getMatrix("sortedDMatrixY");
2 26 Feb 07 jari 1450             xArray = new double[dBarMatrixX.getRowDimension()];
2 26 Feb 07 jari 1451             yArray = new double[sortedDMatrixY.getRowDimension()];
2 26 Feb 07 jari 1452             for (int i = 0; i < xArray.length; i++) {
2 26 Feb 07 jari 1453                 xArray[i] = (double)(dBarMatrixX.A[i][0]);
2 26 Feb 07 jari 1454                 yArray[i] = (double)(sortedDMatrixY.A[i][0]);
2 26 Feb 07 jari 1455             }
2 26 Feb 07 jari 1456             
2 26 Feb 07 jari 1457             FloatMatrix deltaGridMatrix = result.getMatrix("deltaGridMatrix");
2 26 Feb 07 jari 1458             FloatMatrix medNumFalseMatrix = result.getMatrix("medNumFalseMatrix");
2 26 Feb 07 jari 1459             FloatMatrix false90thMatrix = result.getMatrix("false90thMatrix");
2 26 Feb 07 jari 1460             FloatMatrix numSigMatrix = result.getMatrix("numSigMatrix");
2 26 Feb 07 jari 1461             FloatMatrix FDRMedianMatrix = result.getMatrix("FDRMedianMatrix");
2 26 Feb 07 jari 1462             FloatMatrix FDR90thMatrix = result.getMatrix("FDR90thMatrix");
2 26 Feb 07 jari 1463             
2 26 Feb 07 jari 1464             deltaGrid = new double[deltaGridMatrix.getRowDimension()];
2 26 Feb 07 jari 1465             medNumFalse = new double[medNumFalseMatrix.getRowDimension()];
2 26 Feb 07 jari 1466             false90th = new double[false90thMatrix.getRowDimension()];
2 26 Feb 07 jari 1467             numSig = new int[numSigMatrix.getRowDimension()];
2 26 Feb 07 jari 1468             FDRMedian = new double[FDRMedianMatrix.getRowDimension()];
2 26 Feb 07 jari 1469             FDR90th = new double[FDR90thMatrix.getRowDimension()];
2 26 Feb 07 jari 1470             
2 26 Feb 07 jari 1471             
2 26 Feb 07 jari 1472             for (int i= 0; i < deltaGrid.length; i++) {
2 26 Feb 07 jari 1473                 deltaGrid[i] = (double)(deltaGridMatrix.A[i][0]);
2 26 Feb 07 jari 1474                 medNumFalse[i] = (double)(medNumFalseMatrix.A[i][0]);
2 26 Feb 07 jari 1475                 false90th[i] = (double)(false90thMatrix.A[i][0]);
2 26 Feb 07 jari 1476                 numSig[i] = (int)(numSigMatrix.A[i][0]);
2 26 Feb 07 jari 1477                 FDRMedian[i] = (double)(FDRMedianMatrix.A[i][0]);
2 26 Feb 07 jari 1478                 FDR90th[i] = (double)(FDR90thMatrix.A[i][0]);
2 26 Feb 07 jari 1479             }
2 26 Feb 07 jari 1480             //int studyDesign = resultMap.getInt("studyDesign");
2 26 Feb 07 jari 1481             
2 26 Feb 07 jari 1482            /*
2 26 Feb 07 jari 1483             *  Scripting will not support saving the imputed matrix to file
2 26 Feb 07 jari 1484             * on the first pass
2 26 Feb 07 jari 1485             *
2 26 Feb 07 jari 1486             *
2 26 Feb 07 jari 1487             if ((!usePreviousGraph) && (saveImputedMatrix)) {
2 26 Feb 07 jari 1488                 FloatMatrix imputedMatrix = result.getMatrix("imputedMatrix");
2 26 Feb 07 jari 1489                 final JFileChooser fc = new JFileChooser();
2 26 Feb 07 jari 1490                 fc.setDialogTitle("Save imputed matrix");
2 26 Feb 07 jari 1491                 fc.setCurrentDirectory(new File("Data"));
2 26 Feb 07 jari 1492                 int returnVal = fc.showSaveDialog((JFrame) framework.getFrame());
2 26 Feb 07 jari 1493                 if (returnVal == JFileChooser.APPROVE_OPTION) {
2 26 Feb 07 jari 1494                     File file = fc.getSelectedFile();
2 26 Feb 07 jari 1495                     try {
2 26 Feb 07 jari 1496                         PrintWriter out = new PrintWriter(new FileOutputStream(file));
2 26 Feb 07 jari 1497                         String[] fieldNames = framework.getData().getFieldNames();
2 26 Feb 07 jari 1498                         //out.print("Original row");
2 26 Feb 07 jari 1499                         //out.print("\t");
2 26 Feb 07 jari 1500                         for (int i = 0; i < fieldNames.length; i++) {
2 26 Feb 07 jari 1501                             out.print(fieldNames[i]);
2 26 Feb 07 jari 1502                             if (i < fieldNames.length - 1) {
2 26 Feb 07 jari 1503                                 out.print("\t");
2 26 Feb 07 jari 1504                             }
2 26 Feb 07 jari 1505                         }
2 26 Feb 07 jari 1506                         for (int i=0; i<experiment.getNumberOfSamples(); i++) {
2 26 Feb 07 jari 1507                             out.print("\t");
2 26 Feb 07 jari 1508                             out.print(framework.getData().getFullSampleName(experiment.getSampleIndex(i)));
2 26 Feb 07 jari 1509                         }
2 26 Feb 07 jari 1510                         out.print("\n");
2 26 Feb 07 jari 1511                         for (int i=0; i<imputedMatrix.getRowDimension(); i++) {
2 26 Feb 07 jari 1512                             //out.print(Integer.toString(experiment.getGeneIndexMappedToData(rows[i]) + 1));  //handles cutoffs
2 26 Feb 07 jari 1513                             //out.print(data.getUniqueId(rows[i]));
2 26 Feb 07 jari 1514                             //out.print("\t");
2 26 Feb 07 jari 1515                             //out.print(data.getGeneName(rows[i]));
2 26 Feb 07 jari 1516                             for (int f = 0; f < fieldNames.length; f++) {
2 26 Feb 07 jari 1517                                 out.print(framework.getData().getElementAttribute(experiment.getGeneIndexMappedToData(i), f));
2 26 Feb 07 jari 1518                                 if (f < fieldNames.length - 1) {
2 26 Feb 07 jari 1519                                     out.print("\t");
2 26 Feb 07 jari 1520                                 }
2 26 Feb 07 jari 1521                             }
2 26 Feb 07 jari 1522                             for (int j=0; j<imputedMatrix.getColumnDimension(); j++) {
2 26 Feb 07 jari 1523                                 out.print("\t");
2 26 Feb 07 jari 1524                                 out.print(Float.toString(imputedMatrix.A[i][j]));
2 26 Feb 07 jari 1525                             }
2 26 Feb 07 jari 1526                             out.print("\n");
2 26 Feb 07 jari 1527                         }
2 26 Feb 07 jari 1528                         //int[] groupAssgn = getGroupAssignments();
2 26 Feb 07 jari 1529             *
2 26 Feb 07 jari 1530             */
2 26 Feb 07 jari 1531                         /*
2 26 Feb 07 jari 1532                         for (int i = 0; i < groupAssgn.length; i++) {
2 26 Feb 07 jari 1533                             out.print(groupAssgn[i]);
2 26 Feb 07 jari 1534                             if (i < groupAssgn.length - 1) {
2 26 Feb 07 jari 1535                                 out.print("\t");
2 26 Feb 07 jari 1536                             }
2 26 Feb 07 jari 1537                         }
2 26 Feb 07 jari 1538                         out.println();
2 26 Feb 07 jari 1539                          */
2 26 Feb 07 jari 1540               /*
2 26 Feb 07 jari 1541                         out.flush();
2 26 Feb 07 jari 1542                         out.close();
2 26 Feb 07 jari 1543                     } catch (Exception e) {
2 26 Feb 07 jari 1544                         //e.printStackTrace();
2 26 Feb 07 jari 1545                     }
2 26 Feb 07 jari 1546                     //this is where a real application would save the file.
2 26 Feb 07 jari 1547                     //log.append("Saving: " + file.getName() + "." + newline);
2 26 Feb 07 jari 1548               
2 26 Feb 07 jari 1549                 } else {
2 26 Feb 07 jari 1550                     //log.append("Save command cancelled by user." + newline);
2 26 Feb 07 jari 1551                 }
2 26 Feb 07 jari 1552             }
2 26 Feb 07 jari 1553             
2 26 Feb 07 jari 1554             */
2 26 Feb 07 jari 1555            
2 26 Feb 07 jari 1556
2 26 Feb 07 jari 1557             
2 26 Feb 07 jari 1558             GeneralInfo info = new GeneralInfo();
2 26 Feb 07 jari 1559
2 26 Feb 07 jari 1560             info.time = time;
2 26 Feb 07 jari 1561             //ADD MORE INFO PARAMETERS HERE
2 26 Feb 07 jari 1562             info.delta = delta;
2 26 Feb 07 jari 1563             info.upperCutoff = upperCutoff;
2 26 Feb 07 jari 1564             info.lowerCutoff = lowerCutoff;
2 26 Feb 07 jari 1565             info.useAllUniquePerms = params.getBoolean("useAllUniquePerms");
2 26 Feb 07 jari 1566             if(info.useAllUniquePerms)
2 26 Feb 07 jari 1567                 info.numUniquePerms = params.getInt("numUniquePerms");
2 26 Feb 07 jari 1568             if ((studyDesign == SAMInitDialog.TWO_CLASS_UNPAIRED) || (studyDesign == SAMInitDialog.TWO_CLASS_PAIRED)) {
2 26 Feb 07 jari 1569                 if (params.getBoolean("useFoldChange")) {
2 26 Feb 07 jari 1570                     info.useFoldChange = "Yes";
2 26 Feb 07 jari 1571                     info.foldChangeValue = params.getFloat("foldChangeValue");
2 26 Feb 07 jari 1572                 } else {
2 26 Feb 07 jari 1573                     info.useFoldChange = "No";
2 26 Feb 07 jari 1574                 }
2 26 Feb 07 jari 1575             } else {
2 26 Feb 07 jari 1576                 info.useFoldChange = "N/A";
2 26 Feb 07 jari 1577             }
2 26 Feb 07 jari 1578             if (studyDesign == SAMInitDialog.MULTI_CLASS) {
2 26 Feb 07 jari 1579                 info.numMultiClassGroups = params.getInt("numMultiClassGroups");
2 26 Feb 07 jari 1580             }
2 26 Feb 07 jari 1581             
2 26 Feb 07 jari 1582             if (studyDesign == SAMInitDialog.ONE_CLASS) {
2 26 Feb 07 jari 1583                 info.oneClassMean = params.getFloat("oneClassMean");
2 26 Feb 07 jari 1584             }
2 26 Feb 07 jari 1585             
2 26 Feb 07 jari 1586             info.numSigGenes = numSigGenes;
2 26 Feb 07 jari 1587             info.numFalseSigMed = numFalseSigMed;
2 26 Feb 07 jari 1588             info.numFalseSig90th = numFalseSig90th;
2 26 Feb 07 jari 1589             info.FDRMedian = FDRMedianString;
2 26 Feb 07 jari 1590             info.FDR90th = FDR90thString;
2 26 Feb 07 jari 1591             info.studyDesign = studyDesign;
2 26 Feb 07 jari 1592             
2 26 Feb 07 jari 1593             if (params.getBoolean("useKNearest")) {
2 26 Feb 07 jari 1594                 info.imputationEngine = "K-Nearest Neighbors";
2 26 Feb 07 jari 1595                 info.numNeighbors = params.getInt("numNeighbors");
2 26 Feb 07 jari 1596             } else {
2 26 Feb 07 jari 1597                 info.imputationEngine = "Row Average";
2 26 Feb 07 jari 1598             }
2 26 Feb 07 jari 1599             info.numCombs = params.getInt("num-combs");
2 26 Feb 07 jari 1600             info.sNought = sNought;
2 26 Feb 07 jari 1601             info.s0Percentile = s0Percentile;
2 26 Feb 07 jari 1602             info.pi0Hat = pi0Hat;
2 26 Feb 07 jari 1603             //info.function = menu.getFunctionName(function);
2 26 Feb 07 jari 1604             
2 26 Feb 07 jari 1605             info.hcl = params.getBoolean("hierarchical-tree");
2 26 Feb 07 jari 1606             info.hcl_genes = params.getBoolean("calculate-genes");
2 26 Feb 07 jari 1607             info.hcl_samples = params.getBoolean("calculate-experiments");
2 26 Feb 07 jari 1608             if(info.hcl)
2 26 Feb 07 jari 1609                 info.hcl_method = params.getInt("method-linkage");
2 26 Feb 07 jari 1610             
2 26 Feb 07 jari 1611             Vector allFields = new Vector();
2 26 Feb 07 jari 1612             
2 26 Feb 07 jari 1613             allFields.add("Score(d)");
2 26 Feb 07 jari 1614             allFields.add("Numerator(r)");
2 26 Feb 07 jari 1615             allFields.add("Denominator (s+s0)");
2 26 Feb 07 jari 1616             if ((studyDesign == SAMInitDialog.TWO_CLASS_PAIRED) || (studyDesign == SAMInitDialog.TWO_CLASS_UNPAIRED)) {
2 26 Feb 07 jari 1617                 allFields.add("Fold change");
2 26 Feb 07 jari 1618             }
2 26 Feb 07 jari 1619             if (calculateQLowestFDR) {
2 26 Feb 07 jari 1620                 allFields.add("q-value (%)");
2 26 Feb 07 jari 1621             }
2 26 Feb 07 jari 1622             
2 26 Feb 07 jari 1623             auxTitles = new String[allFields.size()];
2 26 Feb 07 jari 1624             for (int i = 0; i < auxTitles.length; i++) {
2 26 Feb 07 jari 1625                 auxTitles[i] = (String)(allFields.get(i));
2 26 Feb 07 jari 1626             }
2 26 Feb 07 jari 1627             
2 26 Feb 07 jari 1628             auxData = new Object[experiment.getNumberOfGenes()][auxTitles.length];
2 26 Feb 07 jari 1629             for (int i = 0; i < auxData.length; i++) {
2 26 Feb 07 jari 1630                 int counter = 0;
2 26 Feb 07 jari 1631                 auxData[i][counter++] = new Float(dValues[i]);
2 26 Feb 07 jari 1632                 auxData[i][counter++] = new Float(rValues[i]);
2 26 Feb 07 jari 1633                 auxData[i][counter++] = new Float((float)(rValues[i]/dValues[i]));
2 26 Feb 07 jari 1634                 if ((studyDesign == SAMInitDialog.TWO_CLASS_PAIRED) || (studyDesign == SAMInitDialog.TWO_CLASS_UNPAIRED)) {
2 26 Feb 07 jari 1635                     auxData[i][counter++] = new Float(foldChangeArray[i]);
2 26 Feb 07 jari 1636                 }
2 26 Feb 07 jari 1637                 if (calculateQLowestFDR) {
2 26 Feb 07 jari 1638                     auxData[i][counter++] = new Float(qLowestFDR[i]);
2 26 Feb 07 jari 1639                 }
2 26 Feb 07 jari 1640             }
2 26 Feb 07 jari 1641             
2 26 Feb 07 jari 1642             return createResultTree(result_cluster, info);
2 26 Feb 07 jari 1643             
2 26 Feb 07 jari 1644         } finally {
2 26 Feb 07 jari 1645             if (algorithm != null) {
2 26 Feb 07 jari 1646                 algorithm.removeAlgorithmListener(listener);
2 26 Feb 07 jari 1647             }
2 26 Feb 07 jari 1648             if (progress != null) {
2 26 Feb 07 jari 1649                 progress.dispose();
2 26 Feb 07 jari 1650             }
2 26 Feb 07 jari 1651         }
2 26 Feb 07 jari 1652
2 26 Feb 07 jari 1653     }
2 26 Feb 07 jari 1654     
2 26 Feb 07 jari 1655     
2 26 Feb 07 jari 1656     
2 26 Feb 07 jari 1657     
2 26 Feb 07 jari 1658     
2 26 Feb 07 jari 1659     
2 26 Feb 07 jari 1660     /**
2 26 Feb 07 jari 1661      * The class to listen to progress, monitor and algorithms events.
2 26 Feb 07 jari 1662      */
2 26 Feb 07 jari 1663     private class Listener extends DialogListener implements AlgorithmListener {
2 26 Feb 07 jari 1664         
2 26 Feb 07 jari 1665         public void valueChanged(AlgorithmEvent event) {
2 26 Feb 07 jari 1666             switch (event.getId()) {
2 26 Feb 07 jari 1667                 case AlgorithmEvent.SET_UNITS:
2 26 Feb 07 jari 1668                     progress.setUnits(event.getIntValue());
2 26 Feb 07 jari 1669                     progress.setDescription(event.getDescription());
2 26 Feb 07 jari 1670                     break;
2 26 Feb 07 jari 1671                 case AlgorithmEvent.PROGRESS_VALUE:
2 26 Feb 07 jari 1672                     progress.setValue(event.getIntValue());
2 26 Feb 07 jari 1673                     progress.setDescription(event.getDescription());
2 26 Feb 07 jari 1674                     break;
2 26 Feb 07 jari 1675                 case AlgorithmEvent.MONITOR_VALUE:
2 26 Feb 07 jari 1676                     int value = event.getIntValue();
2 26 Feb 07 jari 1677                     if (value == -1) {
2 26 Feb 07 jari 1678                         //monitor.dispose();
2 26 Feb 07 jari 1679                     } else {
2 26 Feb 07 jari 1680                         //monitor.update(value);
2 26 Feb 07 jari 1681                     }
2 26 Feb 07 jari 1682                     break;
2 26 Feb 07 jari 1683             }
2 26 Feb 07 jari 1684         }
2 26 Feb 07 jari 1685         
2 26 Feb 07 jari 1686         public void actionPerformed(ActionEvent e) {
2 26 Feb 07 jari 1687             String command = e.getActionCommand();
2 26 Feb 07 jari 1688             if (command.equals("cancel-command")) {
2 26 Feb 07 jari 1689                 algorithm.abort();
2 26 Feb 07 jari 1690                 progress.dispose();
2 26 Feb 07 jari 1691                 //monitor.dispose();
2 26 Feb 07 jari 1692             }
2 26 Feb 07 jari 1693         }
2 26 Feb 07 jari 1694         
2 26 Feb 07 jari 1695         public void windowClosing(WindowEvent e) {
2 26 Feb 07 jari 1696             algorithm.abort();
2 26 Feb 07 jari 1697             progress.dispose();
2 26 Feb 07 jari 1698             //monitor.dispose();
2 26 Feb 07 jari 1699         }
2 26 Feb 07 jari 1700     }
2 26 Feb 07 jari 1701     
2 26 Feb 07 jari 1702     private class GeneralInfo {
2 26 Feb 07 jari 1703         public int clusters;
2 26 Feb 07 jari 1704         public String sigMethod, useFoldChange;
2 26 Feb 07 jari 1705         
2 26 Feb 07 jari 1706         //public boolean converged;
2 26 Feb 07 jari 1707         //public int iterations;
2 26 Feb 07 jari 1708         //public int userNumClusters;
2 26 Feb 07 jari 1709         public long time;
2 26 Feb 07 jari 1710         //public String function;
2 26 Feb 07 jari 1711         //public int numReps;
2 26 Feb 07 jari 1712         //public double thresholdPercent;
2 26 Feb 07 jari 1713         private float delta, sNought, s0Percentile, pi0Hat, foldChangeValue, upperCutoff, lowerCutoff, oneClassMean;
2 26 Feb 07 jari 1714         private String numSigGenes, numFalseSigMed, numFalseSig90th, FDRMedian, FDR90th;
2 26 Feb 07 jari 1715         private int studyDesign;
2 26 Feb 07 jari 1716         private int numCombs, numUniquePerms;
2 26 Feb 07 jari 1717         private String imputationEngine;
2 26 Feb 07 jari 1718         private int numNeighbors;
2 26 Feb 07 jari 1719         private int numMultiClassGroups;
2 26 Feb 07 jari 1720         private boolean hcl;
2 26 Feb 07 jari 1721         private int hcl_method;
2 26 Feb 07 jari 1722         private boolean hcl_genes;
2 26 Feb 07 jari 1723         private boolean hcl_samples;
2 26 Feb 07 jari 1724         private boolean useAllUniquePerms;
2 26 Feb 07 jari 1725         
2 26 Feb 07 jari 1726         public String getMethodName() {
2 26 Feb 07 jari 1727             return hcl ? HCLGUI.GeneralInfo.getMethodName(hcl_method) : "no linkage";
2 26 Feb 07 jari 1728         }
2 26 Feb 07 jari 1729         
2 26 Feb 07 jari 1730         public String getStudyDesign() {
2 26 Feb 07 jari 1731             String study = "None";
2 26 Feb 07 jari 1732             if (studyDesign == SAMInitDialog.TWO_CLASS_UNPAIRED) {
2 26 Feb 07 jari 1733                 study = "Two Class Unpaired";
2 26 Feb 07 jari 1734             } else if (studyDesign == SAMInitDialog.TWO_CLASS_PAIRED) {
2 26 Feb 07 jari 1735                 study = "Two Class Paired";
2 26 Feb 07 jari 1736             } else if (studyDesign == SAMInitDialog.MULTI_CLASS) {
2 26 Feb 07 jari 1737                 study = "Multi Class";
2 26 Feb 07 jari 1738             } else if (studyDesign == SAMInitDialog.CENSORED_SURVIVAL) {
2 26 Feb 07 jari 1739                 study = "Censored Survival";
2 26 Feb 07 jari 1740             } else if (studyDesign == SAMInitDialog.ONE_CLASS) {
2 26 Feb 07 jari 1741                 study = "One Class";
2 26 Feb 07 jari 1742             }
2 26 Feb 07 jari 1743             return study;
2 26 Feb 07 jari 1744         }
2 26 Feb 07 jari 1745         
2 26 Feb 07 jari 1746     }
2 26 Feb 07 jari 1747     
2 26 Feb 07 jari 1748 }