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

Code
Comments
Other
Rev Date Author Line
2 26 Feb 07 jari 1 /*
2 26 Feb 07 jari 2 Copyright @ 1999-2003, 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: OWACentroidsViewer.java,v $
2 26 Feb 07 jari 7  * $Revision: 1.9 $
2 26 Feb 07 jari 8  * $Date: 2006/03/24 15:51:02 $
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.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 /**
2 26 Feb 07 jari 41  *
2 26 Feb 07 jari 42  * @author  nbhagaba
2 26 Feb 07 jari 43  * @version 
2 26 Feb 07 jari 44  */
2 26 Feb 07 jari 45 public class OWACentroidsViewer extends CentroidsViewer {
2 26 Feb 07 jari 46
2 26 Feb 07 jari 47     private static final String SAVE_ALL_CLUSTERS_CMD = "save-all-clusters-cmd";
2 26 Feb 07 jari 48     private static final String SET_Y_TO_EXPERIMENT_MAX_CMD = "set-y-to-exp-max-cmd";
2 26 Feb 07 jari 49     private static final String SET_Y_TO_CLUSTER_MAX_CMD = "set-y-to-cluster-max-cmd";
2 26 Feb 07 jari 50     
2 26 Feb 07 jari 51     private JPopupMenu popup;
2 26 Feb 07 jari 52     private JMenuItem setOverallMaxMenuItem;
2 26 Feb 07 jari 53     private JMenuItem setClusterMaxMenuItem;
2 26 Feb 07 jari 54     
2 26 Feb 07 jari 55     private Vector fValues, rawPValues, adjPValues, dfNumValues, dfDenomValues, ssGroups, ssError;
2 26 Feb 07 jari 56     private float[][] geneGroupMeans, geneGroupSDs;
2 26 Feb 07 jari 57     
2 26 Feb 07 jari 58     /** Creates new OWACentroidsViewer */
2 26 Feb 07 jari 59     public OWACentroidsViewer(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 60         super(experiment, clusters);        
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 OWACentroidsViewer(CentroidViewer cv, float[][] geneGroupMeans, float[][] geneGroupSDs, Vector rawPValues, Vector adjPValues, Vector fValues, Vector ssGroups, Vector ssError, Vector dfNumValues, Vector dfDenomValues) {
2 26 Feb 07 jari 67     super(cv);
2 26 Feb 07 jari 68     initialize(geneGroupMeans, geneGroupSDs, rawPValues, adjPValues, fValues, ssGroups, ssError, dfNumValues, dfDenomValues);
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 Expression getExpression(){
2 26 Feb 07 jari 74     Object[] parentExpressionArgs = super.getExpression().getArguments();
2 26 Feb 07 jari 75     return new Expression(this, this.getClass(), "new", 
2 26 Feb 07 jari 76         new Object[]{parentExpressionArgs[0], geneGroupMeans, geneGroupSDs, rawPValues, adjPValues, fValues, ssGroups, ssError, dfNumValues, dfDenomValues});
2 26 Feb 07 jari 77   }
2 26 Feb 07 jari 78   
2 26 Feb 07 jari 79   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 80         Listener listener = new Listener();
2 26 Feb 07 jari 81         this.popup = createJPopupMenu(listener);
2 26 Feb 07 jari 82         this.rawPValues = rawPValues;
2 26 Feb 07 jari 83         this.adjPValues = adjPValues;
2 26 Feb 07 jari 84         this.fValues = fValues;
2 26 Feb 07 jari 85         this.geneGroupMeans = geneGroupMeans;
2 26 Feb 07 jari 86         this.geneGroupSDs = geneGroupSDs;
2 26 Feb 07 jari 87         this.ssGroups = ssGroups;
2 26 Feb 07 jari 88         this.ssError = ssError;
2 26 Feb 07 jari 89         this.dfNumValues = dfNumValues;
2 26 Feb 07 jari 90         this.dfDenomValues = dfDenomValues;
2 26 Feb 07 jari 91         getContentComponent().addMouseListener(listener);        
2 26 Feb 07 jari 92     }
2 26 Feb 07 jari 93     /**
2 26 Feb 07 jari 94      * Creates a popup menu.
2 26 Feb 07 jari 95      */
2 26 Feb 07 jari 96     private JPopupMenu createJPopupMenu(Listener listener) {
2 26 Feb 07 jari 97         JPopupMenu popup = new JPopupMenu();
2 26 Feb 07 jari 98         addMenuItems(popup, listener);
2 26 Feb 07 jari 99         return popup;
2 26 Feb 07 jari 100     } 
2 26 Feb 07 jari 101     
2 26 Feb 07 jari 102     /**
2 26 Feb 07 jari 103      * Adds the viewer specific menu items.
2 26 Feb 07 jari 104      */
2 26 Feb 07 jari 105     private void addMenuItems(JPopupMenu menu, Listener listener) {
2 26 Feb 07 jari 106         JMenuItem menuItem;
2 26 Feb 07 jari 107         menuItem = new JMenuItem("Save all clusters", GUIFactory.getIcon("save16.gif"));
2 26 Feb 07 jari 108         menuItem.setActionCommand(SAVE_ALL_CLUSTERS_CMD);
2 26 Feb 07 jari 109         menuItem.addActionListener(listener);
2 26 Feb 07 jari 110         menu.add(menuItem);
2 26 Feb 07 jari 111         
2 26 Feb 07 jari 112         setOverallMaxMenuItem = new JMenuItem("Set Y to overall max...", GUIFactory.getIcon("Y_range_expand.gif"));
2 26 Feb 07 jari 113         setOverallMaxMenuItem.setActionCommand(SET_Y_TO_EXPERIMENT_MAX_CMD);
2 26 Feb 07 jari 114         setOverallMaxMenuItem.addActionListener(listener);
2 26 Feb 07 jari 115         setOverallMaxMenuItem.setEnabled(false);
2 26 Feb 07 jari 116         menu.add(setOverallMaxMenuItem);
2 26 Feb 07 jari 117         
2 26 Feb 07 jari 118         setClusterMaxMenuItem = new JMenuItem("Set Y to cluster max...", GUIFactory.getIcon("Y_range_expand.gif"));
2 26 Feb 07 jari 119         setClusterMaxMenuItem.setActionCommand(SET_Y_TO_CLUSTER_MAX_CMD);
2 26 Feb 07 jari 120         setClusterMaxMenuItem.addActionListener(listener);
2 26 Feb 07 jari 121         menu.add(setClusterMaxMenuItem);
2 26 Feb 07 jari 122     }
2 26 Feb 07 jari 123     
2 26 Feb 07 jari 124     /**
2 26 Feb 07 jari 125      * Saves all clusters.
2 26 Feb 07 jari 126      */
2 26 Feb 07 jari 127     private void onSaveClusters() {
2 26 Feb 07 jari 128         Frame frame = JOptionPane.getFrameForComponent(getContentComponent());
2 26 Feb 07 jari 129         try {
2 26 Feb 07 jari 130             saveExperiment(frame, getExperiment(), getData(), getClusters());
2 26 Feb 07 jari 131         } catch (Exception e) {
2 26 Feb 07 jari 132             JOptionPane.showMessageDialog(frame, "Can not save cluster!", e.toString(), JOptionPane.ERROR_MESSAGE);
2 26 Feb 07 jari 133             e.printStackTrace();
2 26 Feb 07 jari 134         }
2 26 Feb 07 jari 135     }
2 26 Feb 07 jari 136     
2 26 Feb 07 jari 137     
2 26 Feb 07 jari 138     /**
2 26 Feb 07 jari 139      * Saves values from specified experiment and cluster.
2 26 Feb 07 jari 140      */
2 26 Feb 07 jari 141     public void saveExperiment(Frame frame, Experiment experiment, IData data, int[][] clusters) throws Exception {
2 26 Feb 07 jari 142         File file = getFile(frame);
2 26 Feb 07 jari 143         if (file != null) {
2 26 Feb 07 jari 144             File aFile;
2 26 Feb 07 jari 145             for (int i=0; i<clusters.length; i++) {
2 26 Feb 07 jari 146                 if (clusters[i] == null || clusters[i].length == 0) {
2 26 Feb 07 jari 147                     continue;
2 26 Feb 07 jari 148                 }
2 26 Feb 07 jari 149                 aFile = new File(file.getPath()+"-"+String.valueOf(i+1)+".txt");
2 26 Feb 07 jari 150                 saveCluster(aFile, experiment, data, clusters[i]);
2 26 Feb 07 jari 151             }
2 26 Feb 07 jari 152         }
2 26 Feb 07 jari 153     }
2 26 Feb 07 jari 154     
2 26 Feb 07 jari 155     private void saveCluster(File file, Experiment experiment, IData data, int[] rows) throws Exception {
2 26 Feb 07 jari 156         PrintWriter out = new PrintWriter(new FileOutputStream(file));
2 26 Feb 07 jari 157         String[] fieldNames = data.getFieldNames();
2 26 Feb 07 jari 158         out.print("Original row");
2 26 Feb 07 jari 159         out.print("\t");
2 26 Feb 07 jari 160         for (int i = 0; i < fieldNames.length; i++) {
2 26 Feb 07 jari 161             out.print(fieldNames[i]);
2 26 Feb 07 jari 162             //if (i < fieldNames.length - 1) {
2 26 Feb 07 jari 163                 out.print("\t");
2 26 Feb 07 jari 164             //}
2 26 Feb 07 jari 165         }
2 26 Feb 07 jari 166         for (int i = 0; i < geneGroupMeans[0].length; i++) {
2 26 Feb 07 jari 167             out.print("Group" + (i+1) + " mean\t");
2 26 Feb 07 jari 168             out.print("Group" + (i + 1) + " std.dev.\t");
2 26 Feb 07 jari 169         }        
2 26 Feb 07 jari 170         //out.print("\t");
2 26 Feb 07 jari 171         out.print("F ratio");
2 26 Feb 07 jari 172         out.print("\t");
2 26 Feb 07 jari 173         out.print("SS(Groups)\t");
2 26 Feb 07 jari 174         out.print("SS(Error)\t");
2 26 Feb 07 jari 175         out.print("df (Groups)\t");
2 26 Feb 07 jari 176         out.print("df (Error)\t");
2 26 Feb 07 jari 177         out.print("raw p value\t");
2 26 Feb 07 jari 178         out.print("adj p value");
2 26 Feb 07 jari 179         
2 26 Feb 07 jari 180         //out.print("UniqueID\tName");
2 26 Feb 07 jari 181         for (int i=0; i<experiment.getNumberOfSamples(); i++) {
2 26 Feb 07 jari 182             out.print("\t");
2 26 Feb 07 jari 183             out.print(data.getFullSampleName(experiment.getSampleIndex(i)));
2 26 Feb 07 jari 184         }
2 26 Feb 07 jari 185         out.print("\n");
2 26 Feb 07 jari 186         for (int i=0; i<rows.length; i++) {
2 26 Feb 07 jari 187             out.print(Integer.toString(experiment.getGeneIndexMappedToData(rows[i]) + 1));
2 26 Feb 07 jari 188             //out.print(data.getUniqueId(rows[i]));
2 26 Feb 07 jari 189             out.print("\t");
2 26 Feb 07 jari 190             //out.print(data.getGeneName(rows[i]));
2 26 Feb 07 jari 191             for (int k = 0; k < fieldNames.length; k++) {
2 26 Feb 07 jari 192                 out.print(data.getElementAttribute(experiment.getGeneIndexMappedToData(rows[i]), k));
2 26 Feb 07 jari 193                 //if (k < fieldNames.length - 1) {
2 26 Feb 07 jari 194                     out.print("\t");
2 26 Feb 07 jari 195                 //}
2 26 Feb 07 jari 196             }
2 26 Feb 07 jari 197             for (int j = 0; j < geneGroupMeans[rows[i]].length; j++) {
2 26 Feb 07 jari 198                 out.print(geneGroupMeans[rows[i]][j] + "\t");
2 26 Feb 07 jari 199                 out.print(geneGroupSDs[rows[i]][j] + "\t");
2 26 Feb 07 jari 200             }            
2 26 Feb 07 jari 201             //out.print("\t");
2 26 Feb 07 jari 202             out.print("" + ((Float)fValues.get(rows[i])).floatValue());
2 26 Feb 07 jari 203             out.print("\t");
2 26 Feb 07 jari 204             out.print("" + ((Float)ssGroups.get(rows[i])).floatValue());
2 26 Feb 07 jari 205             out.print("\t");
2 26 Feb 07 jari 206             out.print("" + ((Float)ssError.get(rows[i])).floatValue());
2 26 Feb 07 jari 207             out.print("\t");            
2 26 Feb 07 jari 208             out.print("" + ((Float)dfNumValues.get(rows[i])).floatValue());
2 26 Feb 07 jari 209             out.print("\t"); 
2 26 Feb 07 jari 210             out.print("" + ((Float)dfDenomValues.get(rows[i])).floatValue());
2 26 Feb 07 jari 211             out.print("\t");            
2 26 Feb 07 jari 212             out.print("" + ((Float)rawPValues.get(rows[i])).floatValue());
2 26 Feb 07 jari 213             out.print("\t");            
2 26 Feb 07 jari 214             out.print("" + ((Float)adjPValues.get(rows[i])).floatValue());            
2 26 Feb 07 jari 215             for (int j=0; j<experiment.getNumberOfSamples(); j++) {
2 26 Feb 07 jari 216                 out.print("\t");
2 26 Feb 07 jari 217                 out.print(Float.toString(experiment.get(rows[i], j)));
2 26 Feb 07 jari 218             }
2 26 Feb 07 jari 219             out.print("\n");
2 26 Feb 07 jari 220         }
2 26 Feb 07 jari 221         out.flush();
2 26 Feb 07 jari 222         out.close();
2 26 Feb 07 jari 223     } 
2 26 Feb 07 jari 224     
2 26 Feb 07 jari 225     /**
2 26 Feb 07 jari 226      * Returns a file choosed by the user.
2 26 Feb 07 jari 227      */
2 26 Feb 07 jari 228     private static File getFile(Frame frame) {
2 26 Feb 07 jari 229         File file = null;
2 26 Feb 07 jari 230         final JFileChooser fc = new JFileChooser(TMEV.getFile("data/"));
2 26 Feb 07 jari 231         fc.addChoosableFileFilter(new ExpressionFileFilter());
2 26 Feb 07 jari 232         fc.setFileView(new ExpressionFileView());
2 26 Feb 07 jari 233         int ret = fc.showSaveDialog(frame);
2 26 Feb 07 jari 234         if (ret == JFileChooser.APPROVE_OPTION) {
2 26 Feb 07 jari 235             file = fc.getSelectedFile();
2 26 Feb 07 jari 236         }
2 26 Feb 07 jari 237         return file;
2 26 Feb 07 jari 238     }
2 26 Feb 07 jari 239     
2 26 Feb 07 jari 240     /**
2 26 Feb 07 jari 241      * The class to listen to mouse and action events.
2 26 Feb 07 jari 242      */
2 26 Feb 07 jari 243     private class Listener extends MouseAdapter implements ActionListener {
2 26 Feb 07 jari 244         
2 26 Feb 07 jari 245         public void actionPerformed(ActionEvent e) {
2 26 Feb 07 jari 246             String command = e.getActionCommand();
2 26 Feb 07 jari 247             if (command.equals(SAVE_ALL_CLUSTERS_CMD)) {
2 26 Feb 07 jari 248                 onSaveClusters();
2 26 Feb 07 jari 249             } else if(command.equals(SET_Y_TO_EXPERIMENT_MAX_CMD)){
2 26 Feb 07 jari 250                 setAllYRanges(CentroidViewer.USE_EXPERIMENT_MAX);
2 26 Feb 07 jari 251                 setClusterMaxMenuItem.setEnabled(true);
2 26 Feb 07 jari 252                 setOverallMaxMenuItem.setEnabled(false);
2 26 Feb 07 jari 253                 repaint();
2 26 Feb 07 jari 254             } else if(command.equals(SET_Y_TO_CLUSTER_MAX_CMD)){
2 26 Feb 07 jari 255                 setAllYRanges(CentroidViewer.USE_CLUSTER_MAX);
2 26 Feb 07 jari 256                 setClusterMaxMenuItem.setEnabled(false);
2 26 Feb 07 jari 257                 setOverallMaxMenuItem.setEnabled(true);
2 26 Feb 07 jari 258                 repaint();
2 26 Feb 07 jari 259             }
2 26 Feb 07 jari 260         }
2 26 Feb 07 jari 261         
2 26 Feb 07 jari 262         private void setAllYRanges(int yRangeOption){
2 26 Feb 07 jari 263             int numClusters = getClusters().length;
2 26 Feb 07 jari 264             for(int i = 0; i < numClusters; i++){
2 26 Feb 07 jari 265                 centroidViewer.setClusterIndex(i);
2 26 Feb 07 jari 266                 centroidViewer.setYRangeOption(yRangeOption);
2 26 Feb 07 jari 267             }
2 26 Feb 07 jari 268         }
2 26 Feb 07 jari 269         
2 26 Feb 07 jari 270         public void mouseReleased(MouseEvent event) {
2 26 Feb 07 jari 271             maybeShowPopup(event);
2 26 Feb 07 jari 272         }
2 26 Feb 07 jari 273         
2 26 Feb 07 jari 274         public void mousePressed(MouseEvent event) {
2 26 Feb 07 jari 275             maybeShowPopup(event);
2 26 Feb 07 jari 276         }
2 26 Feb 07 jari 277         
2 26 Feb 07 jari 278         
2 26 Feb 07 jari 279         private void maybeShowPopup(MouseEvent e) {
2 26 Feb 07 jari 280             if (!e.isPopupTrigger()) {
2 26 Feb 07 jari 281                 return;
2 26 Feb 07 jari 282             }
2 26 Feb 07 jari 283             popup.show(e.getComponent(), e.getX(), e.getY());
2 26 Feb 07 jari 284         }
2 26 Feb 07 jari 285     }    
2 26 Feb 07 jari 286
2 26 Feb 07 jari 287 }