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