mev-4.0.01/source/org/tigr/microarray/mev/cluster/gui/impl/ttest/TtestExperimentViewer.java

Code
Comments
Other
Rev Date Author Line
2 26 Feb 07 jari 1 /*
2 26 Feb 07 jari 2 Copyright @ 1999-2005, The Institute for Genomic Research (TIGR).
2 26 Feb 07 jari 3 All rights reserved.
2 26 Feb 07 jari 4 */
2 26 Feb 07 jari 5 /*
2 26 Feb 07 jari 6  * $RCSfile: TtestExperimentViewer.java,v $
2 26 Feb 07 jari 7  * $Revision: 1.9 $
2 26 Feb 07 jari 8  * $Date: 2006/05/02 16:57:56 $
2 26 Feb 07 jari 9  * $Author: eleanorahowe $
2 26 Feb 07 jari 10  * $State: Exp $
2 26 Feb 07 jari 11  */
2 26 Feb 07 jari 12
2 26 Feb 07 jari 13 package org.tigr.microarray.mev.cluster.gui.impl.ttest;
2 26 Feb 07 jari 14
2 26 Feb 07 jari 15 import java.awt.Color;
2 26 Feb 07 jari 16 import java.awt.Frame;
2 26 Feb 07 jari 17 import java.awt.Insets;
2 26 Feb 07 jari 18 import java.awt.event.ActionEvent;
2 26 Feb 07 jari 19 import java.awt.event.ActionListener;
2 26 Feb 07 jari 20 import java.awt.event.MouseAdapter;
2 26 Feb 07 jari 21 import java.awt.event.MouseEvent;
2 26 Feb 07 jari 22 import java.beans.Expression;
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.JColorChooser;
2 26 Feb 07 jari 29 import javax.swing.JFileChooser;
2 26 Feb 07 jari 30 import javax.swing.JOptionPane;
2 26 Feb 07 jari 31 import javax.swing.JPopupMenu;
2 26 Feb 07 jari 32
2 26 Feb 07 jari 33 import org.tigr.microarray.mev.TMEV;
2 26 Feb 07 jari 34 import org.tigr.microarray.mev.cluster.gui.Experiment;
2 26 Feb 07 jari 35 import org.tigr.microarray.mev.cluster.gui.IData;
2 26 Feb 07 jari 36 import org.tigr.microarray.mev.cluster.gui.helpers.CentroidViewer;
2 26 Feb 07 jari 37 import org.tigr.microarray.mev.cluster.gui.helpers.ExperimentHeader;
2 26 Feb 07 jari 38 import org.tigr.microarray.mev.cluster.gui.helpers.ExperimentViewer;
2 26 Feb 07 jari 39 import org.tigr.microarray.mev.cluster.gui.helpers.ExpressionFileFilter;
2 26 Feb 07 jari 40 import org.tigr.microarray.mev.cluster.gui.helpers.ExpressionFileView;
2 26 Feb 07 jari 41
2 26 Feb 07 jari 42 public class TtestExperimentViewer extends ExperimentViewer {
2 26 Feb 07 jari 43
2 26 Feb 07 jari 44     private JPopupMenu popup;
2 26 Feb 07 jari 45     private Vector tValues, rawPValues, adjPValues, dfValues, meansA, meansB, sdA, sdB, oneClassMeans, oneClassSDs;
2 26 Feb 07 jari 46     private int tTestDesign;    
2 26 Feb 07 jari 47     
2 26 Feb 07 jari 48     /**
2 26 Feb 07 jari 49      * Constructs a <code>TtestExperimentViewer</code> with specified
2 26 Feb 07 jari 50      * experiment and clusters.
2 26 Feb 07 jari 51      */
2 26 Feb 07 jari 52     public TtestExperimentViewer(Experiment experiment, int[][] clusters, int tTestDesign, Vector oneClassMeans, Vector oneClassSDs, Vector meansA, Vector meansB, Vector sdA, Vector sdB, Vector rawPValues, Vector adjPValues, Vector tValues, Vector dfValues) {
2 26 Feb 07 jari 53   super(experiment, clusters);
2 26 Feb 07 jari 54   Listener listener = new Listener();
2 26 Feb 07 jari 55   this.popup = createJPopupMenu(listener);
2 26 Feb 07 jari 56         this.tTestDesign = tTestDesign;
2 26 Feb 07 jari 57         this.oneClassMeans = oneClassMeans;
2 26 Feb 07 jari 58         this.oneClassSDs = oneClassSDs;        
2 26 Feb 07 jari 59         this.rawPValues = rawPValues;
2 26 Feb 07 jari 60         this.adjPValues = adjPValues;
2 26 Feb 07 jari 61         this.tValues = tValues;
2 26 Feb 07 jari 62         this.dfValues = dfValues;
2 26 Feb 07 jari 63         this.meansA = meansA;
2 26 Feb 07 jari 64         this.meansB = meansB;
2 26 Feb 07 jari 65         this.sdA = sdA; 
2 26 Feb 07 jari 66         this.sdB =sdB;        
2 26 Feb 07 jari 67   getContentComponent().addMouseListener(listener);
2 26 Feb 07 jari 68   getHeaderComponent().addMouseListener(listener);
2 26 Feb 07 jari 69     }
2 26 Feb 07 jari 70     /**
2 26 Feb 07 jari 71      * @inheritDoc
2 26 Feb 07 jari 72      */ 
2 26 Feb 07 jari 73     public TtestExperimentViewer(Experiment e, int[][] clusters, 
2 26 Feb 07 jari 74         Integer tTestDesign, Vector oneClassMeans, Vector oneClassSDs, Vector meansA, Vector meansB, Vector sdA, Vector sdB, Vector rawPValues, Vector adjPValues, Vector tValues, Vector dfValues) {
2 26 Feb 07 jari 75       super(e, clusters);
2 26 Feb 07 jari 76         Listener listener = new Listener();
2 26 Feb 07 jari 77         this.popup = createJPopupMenu(listener);
2 26 Feb 07 jari 78         this.tTestDesign = tTestDesign.intValue();
2 26 Feb 07 jari 79         this.oneClassMeans = oneClassMeans;
2 26 Feb 07 jari 80         this.oneClassSDs = oneClassSDs;        
2 26 Feb 07 jari 81         this.rawPValues = rawPValues;
2 26 Feb 07 jari 82         this.adjPValues = adjPValues;
2 26 Feb 07 jari 83         this.tValues = tValues;
2 26 Feb 07 jari 84         this.dfValues = dfValues;
2 26 Feb 07 jari 85         this.meansA = meansA;
2 26 Feb 07 jari 86         this.meansB = meansB;
2 26 Feb 07 jari 87         this.sdA = sdA; 
2 26 Feb 07 jari 88         this.sdB =sdB;        
2 26 Feb 07 jari 89         getContentComponent().addMouseListener(listener);
2 26 Feb 07 jari 90         getHeaderComponent().addMouseListener(listener);        
2 26 Feb 07 jari 91      }
2 26 Feb 07 jari 92          
2 26 Feb 07 jari 93     public Expression getExpression(){
2 26 Feb 07 jari 94       Object[] superExpressionArgs = super.getExpression().getArguments();
2 26 Feb 07 jari 95       
2 26 Feb 07 jari 96       return new Expression(this, this.getClass(), "new", 
2 26 Feb 07 jari 97           new Object[]{superExpressionArgs[0], superExpressionArgs[1], /*superExpressionArgs[2], superExpressionArgs[3], superExpressionArgs[4], superExpressionArgs[5], */new Integer(this.tTestDesign), this.oneClassMeans, this.oneClassSDs, this.meansA, this.meansB, this.sdA, this.sdB, this.rawPValues, this.adjPValues, this.tValues, this.dfValues});
2 26 Feb 07 jari 98     }
2 26 Feb 07 jari 99          
2 26 Feb 07 jari 100      /**
2 26 Feb 07 jari 101      * Creates a popup menu.
2 26 Feb 07 jari 102      */
2 26 Feb 07 jari 103     private JPopupMenu createJPopupMenu(Listener listener) {
2 26 Feb 07 jari 104   JPopupMenu popup = new JPopupMenu();
2 26 Feb 07 jari 105   addMenuItems(popup, listener);
2 26 Feb 07 jari 106   return popup;
2 26 Feb 07 jari 107     }    
2 26 Feb 07 jari 108     
2 26 Feb 07 jari 109     /**
2 26 Feb 07 jari 110      * Saves clusters.
2 26 Feb 07 jari 111      */
2 26 Feb 07 jari 112     private void onSaveClusters() {
2 26 Feb 07 jari 113   Frame frame = JOptionPane.getFrameForComponent(getContentComponent());
2 26 Feb 07 jari 114   try {
2 26 Feb 07 jari 115       saveClusters(frame);
2 26 Feb 07 jari 116   } catch (Exception e) {
2 26 Feb 07 jari 117       JOptionPane.showMessageDialog(frame, "Can not save clusters!", e.toString(), JOptionPane.ERROR_MESSAGE);
2 26 Feb 07 jari 118       e.printStackTrace();
2 26 Feb 07 jari 119   }
2 26 Feb 07 jari 120     }
2 26 Feb 07 jari 121     
2 26 Feb 07 jari 122     /**
2 26 Feb 07 jari 123      * Save the viewer cluster.
2 26 Feb 07 jari 124      */
2 26 Feb 07 jari 125     private void onSaveCluster() {
2 26 Feb 07 jari 126   Frame frame = JOptionPane.getFrameForComponent(getContentComponent());
2 26 Feb 07 jari 127   try {
2 26 Feb 07 jari 128       saveCluster(frame);
2 26 Feb 07 jari 129   } catch (Exception e) {
2 26 Feb 07 jari 130       JOptionPane.showMessageDialog(frame, "Can not save cluster!", e.toString(), JOptionPane.ERROR_MESSAGE);
2 26 Feb 07 jari 131       e.printStackTrace();
2 26 Feb 07 jari 132   }
2 26 Feb 07 jari 133     }
2 26 Feb 07 jari 134     
2 26 Feb 07 jari 135     /**
2 26 Feb 07 jari 136      * Sets a public color.
2 26 Feb 07 jari 137      */
2 26 Feb 07 jari 138     private void onSetColor() {
2 26 Feb 07 jari 139   Frame frame = JOptionPane.getFrameForComponent(getContentComponent());
2 26 Feb 07 jari 140   Color newColor = JColorChooser.showDialog(frame, "Choose color", CentroidViewer.DEF_CLUSTER_COLOR);
2 26 Feb 07 jari 141   if (newColor != null) {
2 26 Feb 07 jari 142       setClusterColor(newColor);
2 26 Feb 07 jari 143   }
2 26 Feb 07 jari 144     }
2 26 Feb 07 jari 145     
2 26 Feb 07 jari 146     /**
2 26 Feb 07 jari 147      * Removes a public color.
2 26 Feb 07 jari 148      */
2 26 Feb 07 jari 149     private void onSetDefaultColor() {
2 26 Feb 07 jari 150   setClusterColor(null);
2 26 Feb 07 jari 151     }
2 26 Feb 07 jari 152     
2 26 Feb 07 jari 153     /**
2 26 Feb 07 jari 154      * Saves all the clusters.
2 26 Feb 07 jari 155      */
2 26 Feb 07 jari 156     public void saveClusters(Frame frame) throws Exception {
2 26 Feb 07 jari 157         frame = frame == null ? JOptionPane.getFrameForComponent(this) : frame;
2 26 Feb 07 jari 158         saveExperiment(frame, getExperiment(), getData(), getClusters());
2 26 Feb 07 jari 159     }
2 26 Feb 07 jari 160
2 26 Feb 07 jari 161     /**
2 26 Feb 07 jari 162      * Saves current cluster.
2 26 Feb 07 jari 163      */
2 26 Feb 07 jari 164     public void saveCluster(Frame frame) throws Exception {
2 26 Feb 07 jari 165         frame = frame == null ? JOptionPane.getFrameForComponent(this) : frame;
2 26 Feb 07 jari 166         saveExperiment(frame, getExperiment(), getData(), getCluster());
2 26 Feb 07 jari 167     }   
2 26 Feb 07 jari 168     
2 26 Feb 07 jari 169     /**
2 26 Feb 07 jari 170      * Saves values from specified experiment and its rows.
2 26 Feb 07 jari 171      */
2 26 Feb 07 jari 172     public void saveExperiment(Frame frame, Experiment experiment, IData data, int[] rows) throws Exception {
2 26 Feb 07 jari 173         File file = getFile(frame);
2 26 Feb 07 jari 174         if (file != null) {
2 26 Feb 07 jari 175             saveCluster(file, experiment, data, rows);
2 26 Feb 07 jari 176         }
2 26 Feb 07 jari 177     }
2 26 Feb 07 jari 178
2 26 Feb 07 jari 179     /**
2 26 Feb 07 jari 180      * Saves values from specified experiment and cluster.
2 26 Feb 07 jari 181      */
2 26 Feb 07 jari 182     public void saveExperiment(Frame frame, Experiment experiment, IData data, int[][] clusters) throws Exception {
2 26 Feb 07 jari 183         File file = getFile(frame);
2 26 Feb 07 jari 184         if (file != null) {
2 26 Feb 07 jari 185             File aFile;
2 26 Feb 07 jari 186             for (int i=0; i<clusters.length; i++) {
2 26 Feb 07 jari 187                 if (clusters[i] == null || clusters[i].length == 0) {
2 26 Feb 07 jari 188                     continue;
2 26 Feb 07 jari 189                 }
2 26 Feb 07 jari 190                 aFile = new File(file.getPath()+"-"+String.valueOf(i+1)+".txt");
2 26 Feb 07 jari 191                 saveCluster(aFile, experiment, data, clusters[i]);
2 26 Feb 07 jari 192             }
2 26 Feb 07 jari 193         }
2 26 Feb 07 jari 194     } 
2 26 Feb 07 jari 195     
2 26 Feb 07 jari 196     private void saveCluster(File file, Experiment experiment, IData data, int[] rows) throws Exception {
2 26 Feb 07 jari 197         PrintWriter out = new PrintWriter(new FileOutputStream(file));
2 26 Feb 07 jari 198         String[] fieldNames = data.getFieldNames();
2 26 Feb 07 jari 199         out.print("Original row");
2 26 Feb 07 jari 200         out.print("\t");
2 26 Feb 07 jari 201         for (int i = 0; i < fieldNames.length; i++) {
2 26 Feb 07 jari 202             out.print(fieldNames[i]);
2 26 Feb 07 jari 203             //if (i < fieldNames.length - 1) {
2 26 Feb 07 jari 204                 out.print("\t");
2 26 Feb 07 jari 205             //}
2 26 Feb 07 jari 206         }
2 26 Feb 07 jari 207         if ((tTestDesign == TtestInitDialog.BETWEEN_SUBJECTS) || (tTestDesign == TtestInitDialog.PAIRED)) {        
2 26 Feb 07 jari 208             out.print("GroupA mean\t");
2 26 Feb 07 jari 209             out.print("GroupA std.dev.\t");
2 26 Feb 07 jari 210             out.print("GroupB mean\t");
2 26 Feb 07 jari 211             out.print("GroupB std.dev.\t");    
2 26 Feb 07 jari 212             out.print("Absolute t value");            
2 26 Feb 07 jari 213         } else if (tTestDesign == TtestInitDialog.ONE_CLASS) {
2 26 Feb 07 jari 214             out.print("Gene mean\t");
2 26 Feb 07 jari 215             out.print("Gene std.dev.\t");
2 26 Feb 07 jari 216             out.print("t value");
2 26 Feb 07 jari 217         }
2 26 Feb 07 jari 218         //out.print("UniqueID\tName");        
2 26 Feb 07 jari 219         //out.print("\t");
2 26 Feb 07 jari 220         
2 26 Feb 07 jari 221         out.print("\t");
2 26 Feb 07 jari 222         out.print("Degrees of freedom\t");
2 26 Feb 07 jari 223         out.print("Raw p value\t");
2 26 Feb 07 jari 224         out.print("Adj p value");
2 26 Feb 07 jari 225
2 26 Feb 07 jari 226         for (int i=0; i<experiment.getNumberOfSamples(); i++) {
2 26 Feb 07 jari 227             out.print("\t");
2 26 Feb 07 jari 228             out.print(data.getSampleName(experiment.getSampleIndex(i)));
2 26 Feb 07 jari 229         }
2 26 Feb 07 jari 230         out.print("\n");
2 26 Feb 07 jari 231         for (int i=0; i<rows.length; i++) {
2 26 Feb 07 jari 232             out.print(Integer.toString(experiment.getGeneIndexMappedToData(rows[i]) + 1));  //handles cutoffs
2 26 Feb 07 jari 233             //out.print(data.getUniqueId(rows[i]));
2 26 Feb 07 jari 234             out.print("\t");
2 26 Feb 07 jari 235             //out.print(data.getGeneName(rows[i]));
2 26 Feb 07 jari 236             for (int k = 0; k < fieldNames.length; k++) {
2 26 Feb 07 jari 237                 out.print(data.getElementAttribute(experiment.getGeneIndexMappedToData(rows[i]), k));
2 26 Feb 07 jari 238                 //if (k < fieldNames.length - 1) {
2 26 Feb 07 jari 239                     out.print("\t"); 
2 26 Feb 07 jari 240                 //}
2 26 Feb 07 jari 241             }
2 26 Feb 07 jari 242             if ((tTestDesign == TtestInitDialog.BETWEEN_SUBJECTS) || (tTestDesign == TtestInitDialog.PAIRED)) {            
2 26 Feb 07 jari 243                 out.print(((Float)meansA.get(rows[i])).floatValue() + "\t");
2 26 Feb 07 jari 244                 out.print(((Float)sdA.get(rows[i])).floatValue() + "\t");
2 26 Feb 07 jari 245                 out.print(((Float)meansB.get(rows[i])).floatValue() + "\t");
2 26 Feb 07 jari 246                 out.print(((Float)sdB.get(rows[i])).floatValue() + "\t"); 
2 26 Feb 07 jari 247             } else if (tTestDesign == TtestInitDialog.ONE_CLASS) {
2 26 Feb 07 jari 248                 out.print(((Float)oneClassMeans.get(rows[i])).floatValue() + "\t");
2 26 Feb 07 jari 249                 out.print(((Float)oneClassSDs.get(rows[i])).floatValue() + "\t");
2 26 Feb 07 jari 250             }
2 26 Feb 07 jari 251             //out.print("\t");
2 26 Feb 07 jari 252             out.print("" + ((Float)tValues.get(rows[i])).floatValue());
2 26 Feb 07 jari 253             out.print("\t");
2 26 Feb 07 jari 254             out.print("" + ((Float)dfValues.get(rows[i])).intValue());
2 26 Feb 07 jari 255             out.print("\t");            
2 26 Feb 07 jari 256             out.print("" + ((Float)rawPValues.get(rows[i])).floatValue());   
2 26 Feb 07 jari 257             out.print("\t");            
2 26 Feb 07 jari 258             out.print("" + ((Float)adjPValues.get(rows[i])).floatValue());            
2 26 Feb 07 jari 259             for (int j=0; j<experiment.getNumberOfSamples(); j++) {
2 26 Feb 07 jari 260                 out.print("\t");
2 26 Feb 07 jari 261                 out.print(Float.toString(experiment.get(rows[i], j)));
2 26 Feb 07 jari 262             }
2 26 Feb 07 jari 263             out.print("\n");
2 26 Feb 07 jari 264         }
2 26 Feb 07 jari 265         out.flush();
2 26 Feb 07 jari 266         out.close();
2 26 Feb 07 jari 267     }    
2 26 Feb 07 jari 268     
2 26 Feb 07 jari 269     /**
2 26 Feb 07 jari 270      * Returns a file choosed by the user.
2 26 Feb 07 jari 271      */
2 26 Feb 07 jari 272     private static File getFile(Frame frame) {
2 26 Feb 07 jari 273         File file = null;
2 26 Feb 07 jari 274         final JFileChooser fc = new JFileChooser(TMEV.getFile("data/"));
2 26 Feb 07 jari 275         fc.addChoosableFileFilter(new ExpressionFileFilter());
2 26 Feb 07 jari 276         fc.setFileView(new ExpressionFileView());
2 26 Feb 07 jari 277         int ret = fc.showSaveDialog(frame);
2 26 Feb 07 jari 278         if (ret == JFileChooser.APPROVE_OPTION) {
2 26 Feb 07 jari 279             file = fc.getSelectedFile();
2 26 Feb 07 jari 280         }
2 26 Feb 07 jari 281         return file;
2 26 Feb 07 jari 282     }    
2 26 Feb 07 jari 283     
2 26 Feb 07 jari 284     /**
2 26 Feb 07 jari 285      * The class to listen to mouse and action events.
2 26 Feb 07 jari 286      */
2 26 Feb 07 jari 287     private class Listener extends MouseAdapter implements ActionListener {
2 26 Feb 07 jari 288   
2 26 Feb 07 jari 289   public void actionPerformed(ActionEvent e) {
2 26 Feb 07 jari 290       String command = e.getActionCommand();
2 26 Feb 07 jari 291       if (command.equals(SAVE_CLUSTER_CMD)) {
2 26 Feb 07 jari 292     onSaveCluster();
2 26 Feb 07 jari 293       } else if (command.equals(SAVE_ALL_CLUSTERS_CMD)) {
2 26 Feb 07 jari 294     onSaveClusters();
2 26 Feb 07 jari 295       } else if (command.equals(SET_DEF_COLOR_CMD)) {
2 26 Feb 07 jari 296     onSetDefaultColor();
2 26 Feb 07 jari 297       } else if (command.equals(STORE_CLUSTER_CMD)) {
2 26 Feb 07 jari 298     storeCluster();
2 26 Feb 07 jari 299       } else if(command.equals(LAUNCH_NEW_SESSION_CMD)){
2 26 Feb 07 jari 300                 launchNewSession();
2 26 Feb 07 jari 301             }
2 26 Feb 07 jari 302   }
2 26 Feb 07 jari 303   
2 26 Feb 07 jari 304   public void mouseReleased(MouseEvent event) {
2 26 Feb 07 jari 305       maybeShowPopup(event);
2 26 Feb 07 jari 306   }
2 26 Feb 07 jari 307   
2 26 Feb 07 jari 308   public void mousePressed(MouseEvent event) {
2 26 Feb 07 jari 309       maybeShowPopup(event);
2 26 Feb 07 jari 310   }
2 26 Feb 07 jari 311   
2 26 Feb 07 jari 312   
2 26 Feb 07 jari 313   private void maybeShowPopup(MouseEvent e) {
2 26 Feb 07 jari 314       
2 26 Feb 07 jari 315       if (!e.isPopupTrigger() || getCluster() == null || getCluster().length == 0) {
2 26 Feb 07 jari 316     return;
2 26 Feb 07 jari 317       }
2 26 Feb 07 jari 318       popup.show(e.getComponent(), e.getX(), e.getY());
2 26 Feb 07 jari 319   }
2 26 Feb 07 jari 320     }
2 26 Feb 07 jari 321 }