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