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