mev-4.0.01/source/org/tigr/microarray/mev/cluster/gui/impl/owa/OWAExperimentViewer.java

Code
Comments
Other
Rev Date Author Line
2 26 Feb 07 jari 1 /*
2 26 Feb 07 jari 2 Copyright @ 1999-2004, 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: OWAExperimentViewer.java,v $
2 26 Feb 07 jari 7  * $Revision: 1.10 $
2 26 Feb 07 jari 8  * $Date: 2006/05/02 16:56:57 $
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.owa;
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
2 26 Feb 07 jari 43 /**
2 26 Feb 07 jari 44  *
2 26 Feb 07 jari 45  * @author  nbhagaba
2 26 Feb 07 jari 46  * @version 
2 26 Feb 07 jari 47  */
2 26 Feb 07 jari 48 public class OWAExperimentViewer extends ExperimentViewer {
2 26 Feb 07 jari 49     
2 26 Feb 07 jari 50     private JPopupMenu popup;
2 26 Feb 07 jari 51     private Vector fValues, rawPValues, adjPValues, dfNumValues, dfDenomValues, ssGroups, ssError;  
2 26 Feb 07 jari 52     private float[][] geneGroupMeans, geneGroupSDs;
2 26 Feb 07 jari 53     
2 26 Feb 07 jari 54     /** Creates new OWAExperimentViewer */
2 26 Feb 07 jari 55     public OWAExperimentViewer(Experiment experiment, int[][] clusters, float[][] geneGroupMeans, float[][] geneGroupSDs, Vector rawPValues, Vector adjPValues, Vector fValues, Vector ssGroups, Vector ssError, Vector dfNumValues, Vector dfDenomValues) {
2 26 Feb 07 jari 56   super(experiment, clusters);
2 26 Feb 07 jari 57     Listener listener = new Listener();
2 26 Feb 07 jari 58     this.popup = createJPopupMenu(listener);
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.fValues = fValues;
2 26 Feb 07 jari 62           this.ssGroups = ssGroups;
2 26 Feb 07 jari 63           this.ssError = ssError;
2 26 Feb 07 jari 64           this.geneGroupMeans = geneGroupMeans;
2 26 Feb 07 jari 65           this.geneGroupSDs = geneGroupSDs;
2 26 Feb 07 jari 66           this.dfNumValues = dfNumValues;
2 26 Feb 07 jari 67           this.dfDenomValues = dfDenomValues;
2 26 Feb 07 jari 68     getContentComponent().addMouseListener(listener);
2 26 Feb 07 jari 69     getHeaderComponent().addMouseListener(listener);  
2 26 Feb 07 jari 70     }
2 26 Feb 07 jari 71
2 26 Feb 07 jari 72   /**
2 26 Feb 07 jari 73    * @inheritDoc
2 26 Feb 07 jari 74    */
2 26 Feb 07 jari 75   public Expression getExpression(){
2 26 Feb 07 jari 76     Object[] parentExpressionArgs = super.getExpression().getArguments();
2 26 Feb 07 jari 77     Object[] temp2 = new Object[parentExpressionArgs.length + 9];
2 26 Feb 07 jari 78     int i=0;
2 26 Feb 07 jari 79     for (i=0; i<parentExpressionArgs.length; i++){
2 26 Feb 07 jari 80       temp2[i] = parentExpressionArgs[i];
2 26 Feb 07 jari 81     }
2 26 Feb 07 jari 82     temp2[i] = geneGroupMeans;
2 26 Feb 07 jari 83     temp2[++i] = geneGroupSDs;
2 26 Feb 07 jari 84     temp2[++i] = rawPValues;
2 26 Feb 07 jari 85     temp2[++i] = adjPValues;
2 26 Feb 07 jari 86     temp2[++i] = fValues;
2 26 Feb 07 jari 87     temp2[++i] = ssGroups;
2 26 Feb 07 jari 88     temp2[++i] = ssError;
2 26 Feb 07 jari 89     temp2[++i] = dfNumValues;
2 26 Feb 07 jari 90     temp2[++i] = dfDenomValues;
2 26 Feb 07 jari 91     return new Expression(this, this.getClass(), "new", temp2);
2 26 Feb 07 jari 92   }
2 26 Feb 07 jari 93
2 26 Feb 07 jari 94     
2 26 Feb 07 jari 95     
2 26 Feb 07 jari 96     
2 26 Feb 07 jari 97     /**
2 26 Feb 07 jari 98      * Creates a popup menu.
2 26 Feb 07 jari 99      */
2 26 Feb 07 jari 100     private JPopupMenu createJPopupMenu(Listener listener) {
2 26 Feb 07 jari 101   JPopupMenu popup = new JPopupMenu();
2 26 Feb 07 jari 102   addMenuItems(popup, listener);
2 26 Feb 07 jari 103   return popup;
2 26 Feb 07 jari 104     } 
2 26 Feb 07 jari 105     
2 26 Feb 07 jari 106     
2 26 Feb 07 jari 107     /**
2 26 Feb 07 jari 108      * Saves clusters.
2 26 Feb 07 jari 109      */
2 26 Feb 07 jari 110     private void onSaveClusters() {
2 26 Feb 07 jari 111   Frame frame = JOptionPane.getFrameForComponent(getContentComponent());
2 26 Feb 07 jari 112   try {
2 26 Feb 07 jari 113       saveClusters(frame);
2 26 Feb 07 jari 114   } catch (Exception e) {
2 26 Feb 07 jari 115       JOptionPane.showMessageDialog(frame, "Can not save clusters!", e.toString(), JOptionPane.ERROR_MESSAGE);
2 26 Feb 07 jari 116       e.printStackTrace();
2 26 Feb 07 jari 117   }
2 26 Feb 07 jari 118     }  
2 26 Feb 07 jari 119     
2 26 Feb 07 jari 120     /**
2 26 Feb 07 jari 121      * Save the viewer cluster.
2 26 Feb 07 jari 122      */
2 26 Feb 07 jari 123     private void onSaveCluster() {
2 26 Feb 07 jari 124   Frame frame = JOptionPane.getFrameForComponent(getContentComponent());
2 26 Feb 07 jari 125   try {
2 26 Feb 07 jari 126       saveCluster(frame);
2 26 Feb 07 jari 127   } catch (Exception e) {
2 26 Feb 07 jari 128       JOptionPane.showMessageDialog(frame, "Can not save cluster!", e.toString(), JOptionPane.ERROR_MESSAGE);
2 26 Feb 07 jari 129       e.printStackTrace();
2 26 Feb 07 jari 130   }
2 26 Feb 07 jari 131     }
2 26 Feb 07 jari 132     
2 26 Feb 07 jari 133     /**
2 26 Feb 07 jari 134      * Sets a public color.
2 26 Feb 07 jari 135      */
2 26 Feb 07 jari 136     private void onSetColor() {
2 26 Feb 07 jari 137   Frame frame = JOptionPane.getFrameForComponent(getContentComponent());
2 26 Feb 07 jari 138   Color newColor = JColorChooser.showDialog(frame, "Choose color", CentroidViewer.DEF_CLUSTER_COLOR);
2 26 Feb 07 jari 139   if (newColor != null) {
2 26 Feb 07 jari 140       setClusterColor(newColor);
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      * Removes a public color.
2 26 Feb 07 jari 146      */
2 26 Feb 07 jari 147     private void onSetDefaultColor() {
2 26 Feb 07 jari 148   setClusterColor(null);
2 26 Feb 07 jari 149     }   
2 26 Feb 07 jari 150     
2 26 Feb 07 jari 151     /**
2 26 Feb 07 jari 152      * Saves all the clusters.
2 26 Feb 07 jari 153      */
2 26 Feb 07 jari 154     public void saveClusters(Frame frame) throws Exception {
2 26 Feb 07 jari 155         frame = frame == null ? JOptionPane.getFrameForComponent(this) : frame;
2 26 Feb 07 jari 156         saveExperiment(frame, getExperiment(), getData(), getClusters());
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 current cluster.
2 26 Feb 07 jari 161      */
2 26 Feb 07 jari 162     public void saveCluster(Frame frame) throws Exception {
2 26 Feb 07 jari 163         frame = frame == null ? JOptionPane.getFrameForComponent(this) : frame;
2 26 Feb 07 jari 164         saveExperiment(frame, getExperiment(), getData(), getCluster());
2 26 Feb 07 jari 165     }    
2 26 Feb 07 jari 166     
2 26 Feb 07 jari 167     /**
2 26 Feb 07 jari 168      * Saves values from specified experiment and its rows.
2 26 Feb 07 jari 169      */
2 26 Feb 07 jari 170     public void saveExperiment(Frame frame, Experiment experiment, IData data, int[] rows) throws Exception {
2 26 Feb 07 jari 171         File file = getFile(frame);
2 26 Feb 07 jari 172         if (file != null) {
2 26 Feb 07 jari 173             saveCluster(file, experiment, data, rows);
2 26 Feb 07 jari 174         }
2 26 Feb 07 jari 175     }
2 26 Feb 07 jari 176
2 26 Feb 07 jari 177     /**
2 26 Feb 07 jari 178      * Saves values from specified experiment and cluster.
2 26 Feb 07 jari 179      */
2 26 Feb 07 jari 180     public void saveExperiment(Frame frame, Experiment experiment, IData data, int[][] clusters) throws Exception {
2 26 Feb 07 jari 181         File file = getFile(frame);
2 26 Feb 07 jari 182         if (file != null) {
2 26 Feb 07 jari 183             File aFile;
2 26 Feb 07 jari 184             for (int i=0; i<clusters.length; i++) {
2 26 Feb 07 jari 185                 if (clusters[i] == null || clusters[i].length == 0) {
2 26 Feb 07 jari 186                     continue;
2 26 Feb 07 jari 187                 }
2 26 Feb 07 jari 188                 aFile = new File(file.getPath()+"-"+String.valueOf(i+1)+".txt");
2 26 Feb 07 jari 189                 saveCluster(aFile, experiment, data, clusters[i]);
2 26 Feb 07 jari 190             }
2 26 Feb 07 jari 191         }
2 26 Feb 07 jari 192     }  
2 26 Feb 07 jari 193     
2 26 Feb 07 jari 194     private void saveCluster(File file, Experiment experiment, IData data, int[] rows) throws Exception {
2 26 Feb 07 jari 195         PrintWriter out = new PrintWriter(new FileOutputStream(file));
2 26 Feb 07 jari 196         String[] fieldNames = data.getFieldNames();
2 26 Feb 07 jari 197         out.print("Original row");
2 26 Feb 07 jari 198         out.print("\t");
2 26 Feb 07 jari 199         for (int i = 0; i < fieldNames.length; i++) {
2 26 Feb 07 jari 200             out.print(fieldNames[i]);
2 26 Feb 07 jari 201             //if (i < fieldNames.length - 1) {
2 26 Feb 07 jari 202                 out.print("\t");
2 26 Feb 07 jari 203             //}
2 26 Feb 07 jari 204         }
2 26 Feb 07 jari 205         for (int i = 0; i < geneGroupMeans[0].length; i++) {
2 26 Feb 07 jari 206             out.print("Group" + (i+1) + " mean\t");
2 26 Feb 07 jari 207             out.print("Group" + (i + 1) + " std.dev.\t");
2 26 Feb 07 jari 208         }        
2 26 Feb 07 jari 209         //out.print("\t");
2 26 Feb 07 jari 210         out.print("F ratio");
2 26 Feb 07 jari 211         out.print("\t");
2 26 Feb 07 jari 212         out.print("SS(Groups)\t");
2 26 Feb 07 jari 213         out.print("SS(Error)\t");
2 26 Feb 07 jari 214         out.print("df (Groups)\t");
2 26 Feb 07 jari 215         out.print("df (Error)\t");
2 26 Feb 07 jari 216         out.print(" raw p value\t");
2 26 Feb 07 jari 217         out.print("adj. p value");
2 26 Feb 07 jari 218         
2 26 Feb 07 jari 219         //out.print("UniqueID\tName");
2 26 Feb 07 jari 220         for (int i=0; i<experiment.getNumberOfSamples(); i++) {
2 26 Feb 07 jari 221             out.print("\t");
2 26 Feb 07 jari 222             out.print(data.getFullSampleName(experiment.getSampleIndex(i)));
2 26 Feb 07 jari 223         }
2 26 Feb 07 jari 224         out.print("\n");
2 26 Feb 07 jari 225         for (int i=0; i<rows.length; i++) {
2 26 Feb 07 jari 226             out.print(Integer.toString(experiment.getGeneIndexMappedToData(rows[i]) + 1));  //handles cutoffs
2 26 Feb 07 jari 227             //out.print(data.getUniqueId(rows[i]));
2 26 Feb 07 jari 228             out.print("\t");
2 26 Feb 07 jari 229             //out.print(data.getGeneName(rows[i]));
2 26 Feb 07 jari 230             for (int k = 0; k < fieldNames.length; k++) {
2 26 Feb 07 jari 231                 out.print(data.getElementAttribute(experiment.getGeneIndexMappedToData(rows[i]), k));
2 26 Feb 07 jari 232                 //if (k < fieldNames.length - 1) {
2 26 Feb 07 jari 233                     out.print("\t"); 
2 26 Feb 07 jari 234                 //}
2 26 Feb 07 jari 235             }
2 26 Feb 07 jari 236             for (int j = 0; j < geneGroupMeans[rows[i]].length; j++) {
2 26 Feb 07 jari 237                 out.print(geneGroupMeans[rows[i]][j] + "\t");
2 26 Feb 07 jari 238                 out.print(geneGroupSDs[rows[i]][j] + "\t");
2 26 Feb 07 jari 239             }            
2 26 Feb 07 jari 240             //out.print("\t");
2 26 Feb 07 jari 241             out.print("" + ((Float)fValues.get(rows[i])).floatValue());
2 26 Feb 07 jari 242             out.print("\t");
2 26 Feb 07 jari 243             out.print("" + ((Float)ssGroups.get(rows[i])).floatValue());
2 26 Feb 07 jari 244             out.print("\t");
2 26 Feb 07 jari 245             out.print("" + ((Float)ssError.get(rows[i])).floatValue());
2 26 Feb 07 jari 246             out.print("\t");            
2 26 Feb 07 jari 247             out.print("" + ((Float)dfNumValues.get(rows[i])).floatValue());
2 26 Feb 07 jari 248             out.print("\t");   
2 26 Feb 07 jari 249             out.print("" + ((Float)dfDenomValues.get(rows[i])).floatValue());
2 26 Feb 07 jari 250             out.print("\t");            
2 26 Feb 07 jari 251             out.print("" + ((Float)rawPValues.get(rows[i])).floatValue());   
2 26 Feb 07 jari 252             out.print("\t");            
2 26 Feb 07 jari 253             out.print("" + ((Float)adjPValues.get(rows[i])).floatValue());            
2 26 Feb 07 jari 254             for (int j=0; j<experiment.getNumberOfSamples(); j++) {
2 26 Feb 07 jari 255                 out.print("\t");
2 26 Feb 07 jari 256                 out.print(Float.toString(experiment.get(rows[i], j)));
2 26 Feb 07 jari 257             }
2 26 Feb 07 jari 258             out.print("\n");
2 26 Feb 07 jari 259         }
2 26 Feb 07 jari 260         out.flush();
2 26 Feb 07 jari 261         out.close();
2 26 Feb 07 jari 262     }    
2 26 Feb 07 jari 263     
2 26 Feb 07 jari 264     /**
2 26 Feb 07 jari 265      * Returns a file choosed by the user.
2 26 Feb 07 jari 266      */
2 26 Feb 07 jari 267     private static File getFile(Frame frame) {
2 26 Feb 07 jari 268         File file = null;
2 26 Feb 07 jari 269         final JFileChooser fc = new JFileChooser(TMEV.getFile("data/"));
2 26 Feb 07 jari 270         fc.addChoosableFileFilter(new ExpressionFileFilter());
2 26 Feb 07 jari 271         fc.setFileView(new ExpressionFileView());
2 26 Feb 07 jari 272         int ret = fc.showSaveDialog(frame);
2 26 Feb 07 jari 273         if (ret == JFileChooser.APPROVE_OPTION) {
2 26 Feb 07 jari 274             file = fc.getSelectedFile();
2 26 Feb 07 jari 275         }
2 26 Feb 07 jari 276         return file;
2 26 Feb 07 jari 277     } 
2 26 Feb 07 jari 278     
2 26 Feb 07 jari 279     /**
2 26 Feb 07 jari 280      * The class to listen to mouse and action events.
2 26 Feb 07 jari 281      */
2 26 Feb 07 jari 282     private class Listener extends MouseAdapter implements ActionListener {
2 26 Feb 07 jari 283   
2 26 Feb 07 jari 284   public void actionPerformed(ActionEvent e) {
2 26 Feb 07 jari 285       String command = e.getActionCommand();
2 26 Feb 07 jari 286       if (command.equals(SAVE_CLUSTER_CMD)) {
2 26 Feb 07 jari 287     onSaveCluster();
2 26 Feb 07 jari 288       } else if (command.equals(SAVE_ALL_CLUSTERS_CMD)) {
2 26 Feb 07 jari 289     onSaveClusters();
2 26 Feb 07 jari 290       } else if (command.equals(SET_DEF_COLOR_CMD)) {
2 26 Feb 07 jari 291     onSetDefaultColor();
2 26 Feb 07 jari 292       } else if (command.equals(STORE_CLUSTER_CMD)) {
2 26 Feb 07 jari 293     storeCluster();
2 26 Feb 07 jari 294       } else if(command.equals(LAUNCH_NEW_SESSION_CMD)){
2 26 Feb 07 jari 295                 launchNewSession();
2 26 Feb 07 jari 296             }
2 26 Feb 07 jari 297   }
2 26 Feb 07 jari 298   
2 26 Feb 07 jari 299   public void mouseReleased(MouseEvent event) {
2 26 Feb 07 jari 300       maybeShowPopup(event);
2 26 Feb 07 jari 301   }
2 26 Feb 07 jari 302   
2 26 Feb 07 jari 303   public void mousePressed(MouseEvent event) {
2 26 Feb 07 jari 304       maybeShowPopup(event);
2 26 Feb 07 jari 305   }
2 26 Feb 07 jari 306   
2 26 Feb 07 jari 307   
2 26 Feb 07 jari 308   private void maybeShowPopup(MouseEvent e) {
2 26 Feb 07 jari 309       
2 26 Feb 07 jari 310       if (!e.isPopupTrigger() || getCluster() == null || getCluster().length == 0) {
2 26 Feb 07 jari 311     return;
2 26 Feb 07 jari 312       }
2 26 Feb 07 jari 313       popup.show(e.getComponent(), e.getX(), e.getY());
2 26 Feb 07 jari 314   }
2 26 Feb 07 jari 315     }    
2 26 Feb 07 jari 316     
2 26 Feb 07 jari 317 }