mev-4.0.01/source/org/tigr/microarray/mev/cluster/gui/impl/sam/SAMCentroidsViewer.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: SAMCentroidsViewer.java,v $
2 26 Feb 07 jari 7  * $Revision: 1.6 $
2 26 Feb 07 jari 8  * $Date: 2006/03/24 15:51:28 $
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 package org.tigr.microarray.mev.cluster.gui.impl.sam;
2 26 Feb 07 jari 13
2 26 Feb 07 jari 14 import java.awt.Frame;
2 26 Feb 07 jari 15 import java.awt.event.ActionEvent;
2 26 Feb 07 jari 16 import java.awt.event.ActionListener;
2 26 Feb 07 jari 17 import java.awt.event.MouseAdapter;
2 26 Feb 07 jari 18 import java.awt.event.MouseEvent;
2 26 Feb 07 jari 19 import java.io.File;
2 26 Feb 07 jari 20 import java.io.FileOutputStream;
2 26 Feb 07 jari 21 import java.io.PrintWriter;
2 26 Feb 07 jari 22
2 26 Feb 07 jari 23 import javax.swing.JFileChooser;
2 26 Feb 07 jari 24 import javax.swing.JMenuItem;
2 26 Feb 07 jari 25 import javax.swing.JOptionPane;
2 26 Feb 07 jari 26 import javax.swing.JPopupMenu;
2 26 Feb 07 jari 27
2 26 Feb 07 jari 28 import org.tigr.microarray.mev.TMEV;
2 26 Feb 07 jari 29 import org.tigr.microarray.mev.cluster.gui.Experiment;
2 26 Feb 07 jari 30 import org.tigr.microarray.mev.cluster.gui.IData;
2 26 Feb 07 jari 31 import org.tigr.microarray.mev.cluster.gui.helpers.CentroidViewer;
2 26 Feb 07 jari 32 import org.tigr.microarray.mev.cluster.gui.helpers.CentroidsViewer;
2 26 Feb 07 jari 33 import org.tigr.microarray.mev.cluster.gui.helpers.ExpressionFileFilter;
2 26 Feb 07 jari 34 import org.tigr.microarray.mev.cluster.gui.helpers.ExpressionFileView;
2 26 Feb 07 jari 35 import org.tigr.microarray.mev.cluster.gui.impl.GUIFactory;
2 26 Feb 07 jari 36
2 26 Feb 07 jari 37 public class SAMCentroidsViewer extends CentroidsViewer {
2 26 Feb 07 jari 38     
2 26 Feb 07 jari 39     private static final String SAVE_ALL_CLUSTERS_CMD = "save-all-clusters-cmd";
2 26 Feb 07 jari 40     private static final String SET_Y_TO_EXPERIMENT_MAX_CMD = "set-y-to-exp-max-cmd";
2 26 Feb 07 jari 41     private static final String SET_Y_TO_CLUSTER_MAX_CMD = "set-y-to-cluster-max-cmd";
2 26 Feb 07 jari 42     
2 26 Feb 07 jari 43     private JPopupMenu popup;
2 26 Feb 07 jari 44     private JMenuItem setOverallMaxMenuItem;
2 26 Feb 07 jari 45     private JMenuItem setClusterMaxMenuItem;
2 26 Feb 07 jari 46     private int studyDesign;
2 26 Feb 07 jari 47     private float[] dValues, rValues, foldChangeArray, qLowestFDR;
2 26 Feb 07 jari 48     private boolean calculateQLowestFDR;
2 26 Feb 07 jari 49     //private Vector geneNamesVector;    
2 26 Feb 07 jari 50     /**
2 26 Feb 07 jari 51      * Constructs a <code>KMCCentroidsViewer</code> for specified experiment
2 26 Feb 07 jari 52      * and clusters.
2 26 Feb 07 jari 53      */
2 26 Feb 07 jari 54     public SAMCentroidsViewer(Experiment experiment, int[][] clusters, int studyDesign,/*Vector geneNamesVector,*/ float[] dValues, float[] rValues, float[] foldChangeArray, float[] qLowestFDR, boolean calculateQLowestFDR) {
2 26 Feb 07 jari 55         super(experiment, clusters);
2 26 Feb 07 jari 56         Listener listener = new Listener();
2 26 Feb 07 jari 57         this.popup = createJPopupMenu(listener);
2 26 Feb 07 jari 58         this.studyDesign = studyDesign;
2 26 Feb 07 jari 59         this.dValues = dValues;
2 26 Feb 07 jari 60         this.rValues = rValues;
2 26 Feb 07 jari 61         //this.geneNamesVector = geneNamesVector;        
2 26 Feb 07 jari 62         this.foldChangeArray = foldChangeArray;
2 26 Feb 07 jari 63         this.qLowestFDR = qLowestFDR;
2 26 Feb 07 jari 64         this.calculateQLowestFDR = calculateQLowestFDR;
2 26 Feb 07 jari 65         getContentComponent().addMouseListener(listener);
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 SAMCentroidsViewer(CentroidViewer cv) {
2 26 Feb 07 jari 71     super(cv);
2 26 Feb 07 jari 72   }
2 26 Feb 07 jari 73     
2 26 Feb 07 jari 74     private void readObject(java.io.ObjectInputStream ois) throws java.io.IOException, ClassNotFoundException {
2 26 Feb 07 jari 75         ois.defaultReadObject();
2 26 Feb 07 jari 76         Listener listener = new Listener();
2 26 Feb 07 jari 77         this.popup = createJPopupMenu(listener);
2 26 Feb 07 jari 78         getContentComponent().addMouseListener(listener);
2 26 Feb 07 jari 79     }
2 26 Feb 07 jari 80     
2 26 Feb 07 jari 81     private void writeObject(java.io.ObjectOutputStream oos) throws java.io.IOException { 
2 26 Feb 07 jari 82         oos.defaultWriteObject();
2 26 Feb 07 jari 83     }
2 26 Feb 07 jari 84     
2 26 Feb 07 jari 85     
2 26 Feb 07 jari 86     
2 26 Feb 07 jari 87     
2 26 Feb 07 jari 88     /**
2 26 Feb 07 jari 89      * Creates a popup menu.
2 26 Feb 07 jari 90      */
2 26 Feb 07 jari 91     private JPopupMenu createJPopupMenu(Listener listener) {
2 26 Feb 07 jari 92         JPopupMenu popup = new JPopupMenu();
2 26 Feb 07 jari 93         addMenuItems(popup, listener);
2 26 Feb 07 jari 94         return popup;
2 26 Feb 07 jari 95     }
2 26 Feb 07 jari 96     
2 26 Feb 07 jari 97     /**
2 26 Feb 07 jari 98      * Adds the viewer specific menu items.
2 26 Feb 07 jari 99      */
2 26 Feb 07 jari 100     private void addMenuItems(JPopupMenu menu, Listener listener) {
2 26 Feb 07 jari 101         JMenuItem menuItem;
2 26 Feb 07 jari 102         menuItem = new JMenuItem("Save all clusters", GUIFactory.getIcon("save16.gif"));
2 26 Feb 07 jari 103         menuItem.setActionCommand(SAVE_ALL_CLUSTERS_CMD);
2 26 Feb 07 jari 104         menuItem.addActionListener(listener);
2 26 Feb 07 jari 105         menu.add(menuItem);
2 26 Feb 07 jari 106         
2 26 Feb 07 jari 107         setOverallMaxMenuItem = new JMenuItem("Set Y to overall max...", GUIFactory.getIcon("Y_range_expand.gif"));
2 26 Feb 07 jari 108         setOverallMaxMenuItem.setActionCommand(SET_Y_TO_EXPERIMENT_MAX_CMD);
2 26 Feb 07 jari 109         setOverallMaxMenuItem.addActionListener(listener);
2 26 Feb 07 jari 110         setOverallMaxMenuItem.setEnabled(false);
2 26 Feb 07 jari 111         menu.add(setOverallMaxMenuItem);
2 26 Feb 07 jari 112         
2 26 Feb 07 jari 113         setClusterMaxMenuItem = new JMenuItem("Set Y to cluster max...", GUIFactory.getIcon("Y_range_expand.gif"));
2 26 Feb 07 jari 114         setClusterMaxMenuItem.setActionCommand(SET_Y_TO_CLUSTER_MAX_CMD);
2 26 Feb 07 jari 115         setClusterMaxMenuItem.addActionListener(listener);
2 26 Feb 07 jari 116         menu.add(setClusterMaxMenuItem);
2 26 Feb 07 jari 117     }
2 26 Feb 07 jari 118     
2 26 Feb 07 jari 119     /**
2 26 Feb 07 jari 120      * Saves all clusters.
2 26 Feb 07 jari 121      */
2 26 Feb 07 jari 122     private void onSaveClusters() {
2 26 Feb 07 jari 123         Frame frame = JOptionPane.getFrameForComponent(getContentComponent());
2 26 Feb 07 jari 124         try {
2 26 Feb 07 jari 125             saveExperiment(frame, getExperiment(), getData(), getClusters());
2 26 Feb 07 jari 126         } catch (Exception e) {
2 26 Feb 07 jari 127             JOptionPane.showMessageDialog(frame, "Can not save cluster!", e.toString(), JOptionPane.ERROR_MESSAGE);
2 26 Feb 07 jari 128             e.printStackTrace();
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      * Saves values from specified experiment and cluster.
2 26 Feb 07 jari 134      */
2 26 Feb 07 jari 135     public void saveExperiment(Frame frame, Experiment experiment, IData data, int[][] clusters) throws Exception {
2 26 Feb 07 jari 136         File file = getFile(frame);
2 26 Feb 07 jari 137         if (file != null) {
2 26 Feb 07 jari 138             File aFile;
2 26 Feb 07 jari 139             for (int i=0; i<clusters.length; i++) {
2 26 Feb 07 jari 140                 if (clusters[i] == null || clusters[i].length == 0) {
2 26 Feb 07 jari 141                     continue;
2 26 Feb 07 jari 142                 }
2 26 Feb 07 jari 143                 aFile = new File(file.getPath()+"-"+String.valueOf(i+1)+".txt");
2 26 Feb 07 jari 144                 saveCluster(aFile, experiment, data, clusters[i]);
2 26 Feb 07 jari 145             }
2 26 Feb 07 jari 146         }
2 26 Feb 07 jari 147     } 
2 26 Feb 07 jari 148     
2 26 Feb 07 jari 149     private void saveCluster(File file, Experiment experiment, IData data, int[] rows) throws Exception {
2 26 Feb 07 jari 150         PrintWriter out = new PrintWriter(new FileOutputStream(file));
2 26 Feb 07 jari 151         String[] fieldNames = data.getFieldNames();
2 26 Feb 07 jari 152         out.print("Original row");
2 26 Feb 07 jari 153         out.print("\t");
2 26 Feb 07 jari 154         for (int i = 0; i < fieldNames.length; i++) {
2 26 Feb 07 jari 155             out.print(fieldNames[i]);
2 26 Feb 07 jari 156             if (i < fieldNames.length - 1) {
2 26 Feb 07 jari 157                 out.print("\t");
2 26 Feb 07 jari 158             }
2 26 Feb 07 jari 159         }
2 26 Feb 07 jari 160         //out.print("\t");
2 26 Feb 07 jari 161         //out.print("GeneNamesVector");         
2 26 Feb 07 jari 162         out.print("\t");
2 26 Feb 07 jari 163         out.print("Score (d)");
2 26 Feb 07 jari 164         out.print("\t");
2 26 Feb 07 jari 165         out.print("Numerator (r)\t");
2 26 Feb 07 jari 166         out.print("Denominator (s+s0)\t");
2 26 Feb 07 jari 167         if ((studyDesign == SAMInitDialog.TWO_CLASS_PAIRED) || (studyDesign == SAMInitDialog.TWO_CLASS_UNPAIRED)) {        
2 26 Feb 07 jari 168             out.print("Fold Change");
2 26 Feb 07 jari 169         }
2 26 Feb 07 jari 170         if (calculateQLowestFDR) {
2 26 Feb 07 jari 171             out.print("\t");
2 26 Feb 07 jari 172             out.print("q-value (%)");
2 26 Feb 07 jari 173         }
2 26 Feb 07 jari 174         
2 26 Feb 07 jari 175         //out.print("UniqueID\tName");
2 26 Feb 07 jari 176         for (int i=0; i<experiment.getNumberOfSamples(); i++) {
2 26 Feb 07 jari 177             out.print("\t");
2 26 Feb 07 jari 178             out.print(data.getFullSampleName(experiment.getSampleIndex(i)));
2 26 Feb 07 jari 179         }
2 26 Feb 07 jari 180         out.print("\n");
2 26 Feb 07 jari 181         for (int i=0; i<rows.length; i++) {
2 26 Feb 07 jari 182             out.print(Integer.toString(experiment.getGeneIndexMappedToData(rows[i]) + 1));  //handles cutoffs
2 26 Feb 07 jari 183             //out.print(data.getUniqueId(rows[i]));
2 26 Feb 07 jari 184             out.print("\t");
2 26 Feb 07 jari 185             //out.print(data.getGeneName(rows[i]));
2 26 Feb 07 jari 186             for (int k = 0; k < fieldNames.length; k++) {
2 26 Feb 07 jari 187                 out.print(data.getElementAttribute(experiment.getGeneIndexMappedToData(rows[i]), k));
2 26 Feb 07 jari 188                 if (k < fieldNames.length - 1) {
2 26 Feb 07 jari 189                     out.print("\t"); 
2 26 Feb 07 jari 190                 }
2 26 Feb 07 jari 191             }
2 26 Feb 07 jari 192             //out.print("\t");
2 26 Feb 07 jari 193             //out.print((String)(geneNamesVector.get(rows[i])));            
2 26 Feb 07 jari 194             out.print("\t");
2 26 Feb 07 jari 195             out.print("" + dValues[rows[i]]);
2 26 Feb 07 jari 196             out.print("\t");
2 26 Feb 07 jari 197             out.print("" + rValues[rows[i]] + "\t");    
2 26 Feb 07 jari 198             out.print("" + (float)(rValues[rows[i]]/dValues[rows[i]]) + "\t");
2 26 Feb 07 jari 199             if ((studyDesign == SAMInitDialog.TWO_CLASS_PAIRED) || (studyDesign == SAMInitDialog.TWO_CLASS_UNPAIRED)) {            
2 26 Feb 07 jari 200                 out.print(""+ foldChangeArray[rows[i]]);
2 26 Feb 07 jari 201             }
2 26 Feb 07 jari 202             if (calculateQLowestFDR) {
2 26 Feb 07 jari 203                 out.print("\t");
2 26 Feb 07 jari 204                 out.print("" + qLowestFDR[rows[i]]);
2 26 Feb 07 jari 205             }
2 26 Feb 07 jari 206             for (int j=0; j<experiment.getNumberOfSamples(); j++) {
2 26 Feb 07 jari 207                 out.print("\t");
2 26 Feb 07 jari 208                 out.print(Float.toString(experiment.get(rows[i], j)));
2 26 Feb 07 jari 209             }
2 26 Feb 07 jari 210             out.print("\n");
2 26 Feb 07 jari 211         }
2 26 Feb 07 jari 212         out.flush();
2 26 Feb 07 jari 213         out.close();
2 26 Feb 07 jari 214     } 
2 26 Feb 07 jari 215     
2 26 Feb 07 jari 216     /**
2 26 Feb 07 jari 217      * Returns a file choosed by the user.
2 26 Feb 07 jari 218      */
2 26 Feb 07 jari 219     private static File getFile(Frame frame) {
2 26 Feb 07 jari 220         File file = null;
2 26 Feb 07 jari 221         final JFileChooser fc = new JFileChooser(TMEV.getFile("data/"));
2 26 Feb 07 jari 222         fc.addChoosableFileFilter(new ExpressionFileFilter());
2 26 Feb 07 jari 223         fc.setFileView(new ExpressionFileView());
2 26 Feb 07 jari 224         int ret = fc.showSaveDialog(frame);
2 26 Feb 07 jari 225         if (ret == JFileChooser.APPROVE_OPTION) {
2 26 Feb 07 jari 226             file = fc.getSelectedFile();
2 26 Feb 07 jari 227         }
2 26 Feb 07 jari 228         return file;
2 26 Feb 07 jari 229     }    
2 26 Feb 07 jari 230     
2 26 Feb 07 jari 231     /**
2 26 Feb 07 jari 232      * The class to listen to mouse and action events.
2 26 Feb 07 jari 233      */
2 26 Feb 07 jari 234     private class Listener extends MouseAdapter implements ActionListener {
2 26 Feb 07 jari 235         
2 26 Feb 07 jari 236         public void actionPerformed(ActionEvent e) {
2 26 Feb 07 jari 237             String command = e.getActionCommand();
2 26 Feb 07 jari 238             if (command.equals(SAVE_ALL_CLUSTERS_CMD)) {
2 26 Feb 07 jari 239                 onSaveClusters();
2 26 Feb 07 jari 240             } else if(command.equals(SET_Y_TO_EXPERIMENT_MAX_CMD)){
2 26 Feb 07 jari 241                 setAllYRanges(CentroidViewer.USE_EXPERIMENT_MAX);
2 26 Feb 07 jari 242                 setClusterMaxMenuItem.setEnabled(true);
2 26 Feb 07 jari 243                 setOverallMaxMenuItem.setEnabled(false);
2 26 Feb 07 jari 244                 repaint();
2 26 Feb 07 jari 245             } else if(command.equals(SET_Y_TO_CLUSTER_MAX_CMD)){
2 26 Feb 07 jari 246                 setAllYRanges(CentroidViewer.USE_CLUSTER_MAX);
2 26 Feb 07 jari 247                 setClusterMaxMenuItem.setEnabled(false);
2 26 Feb 07 jari 248                 setOverallMaxMenuItem.setEnabled(true);
2 26 Feb 07 jari 249                 repaint();
2 26 Feb 07 jari 250             }
2 26 Feb 07 jari 251         }
2 26 Feb 07 jari 252         
2 26 Feb 07 jari 253         private void setAllYRanges(int yRangeOption){
2 26 Feb 07 jari 254             int numClusters = getClusters().length;
2 26 Feb 07 jari 255             for(int i = 0; i < numClusters; i++){
2 26 Feb 07 jari 256                 centroidViewer.setClusterIndex(i);
2 26 Feb 07 jari 257                 centroidViewer.setYRangeOption(yRangeOption);
2 26 Feb 07 jari 258             }
2 26 Feb 07 jari 259         }
2 26 Feb 07 jari 260         
2 26 Feb 07 jari 261         public void mouseReleased(MouseEvent event) {
2 26 Feb 07 jari 262             maybeShowPopup(event);
2 26 Feb 07 jari 263         }
2 26 Feb 07 jari 264         
2 26 Feb 07 jari 265         public void mousePressed(MouseEvent event) {
2 26 Feb 07 jari 266             maybeShowPopup(event);
2 26 Feb 07 jari 267         }
2 26 Feb 07 jari 268         
2 26 Feb 07 jari 269         private void maybeShowPopup(MouseEvent e) {
2 26 Feb 07 jari 270             if (!e.isPopupTrigger()) {
2 26 Feb 07 jari 271                 return;
2 26 Feb 07 jari 272             }
2 26 Feb 07 jari 273             popup.show(e.getComponent(), e.getX(), e.getY());
2 26 Feb 07 jari 274         }
2 26 Feb 07 jari 275     }
2 26 Feb 07 jari 276 }