mev-4.0.01/source/org/tigr/microarray/mev/cluster/gui/impl/sam/SAMCentroidViewer.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: SAMCentroidViewer.java,v $
2 26 Feb 07 jari 7  * $Revision: 1.7 $
2 26 Feb 07 jari 8  * $Date: 2006/05/02 16:57:04 $
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  * SAMCentroidViewer.java
2 26 Feb 07 jari 14  *
2 26 Feb 07 jari 15  * Created on January 13, 2003, 11:49 AM
2 26 Feb 07 jari 16  */
2 26 Feb 07 jari 17
2 26 Feb 07 jari 18 package org.tigr.microarray.mev.cluster.gui.impl.sam;
2 26 Feb 07 jari 19
2 26 Feb 07 jari 20 import java.awt.Color;
2 26 Feb 07 jari 21 import java.awt.Frame;
2 26 Feb 07 jari 22 import java.awt.event.ActionEvent;
2 26 Feb 07 jari 23 import java.awt.event.ActionListener;
2 26 Feb 07 jari 24 import java.awt.event.MouseAdapter;
2 26 Feb 07 jari 25 import java.awt.event.MouseEvent;
2 26 Feb 07 jari 26 import java.beans.Expression;
2 26 Feb 07 jari 27 import java.io.File;
2 26 Feb 07 jari 28 import java.io.FileOutputStream;
2 26 Feb 07 jari 29 import java.io.PrintWriter;
2 26 Feb 07 jari 30
2 26 Feb 07 jari 31 import javax.swing.JColorChooser;
2 26 Feb 07 jari 32 import javax.swing.JFileChooser;
2 26 Feb 07 jari 33 import javax.swing.JOptionPane;
2 26 Feb 07 jari 34 import javax.swing.JPopupMenu;
2 26 Feb 07 jari 35
2 26 Feb 07 jari 36 import org.tigr.microarray.mev.TMEV;
2 26 Feb 07 jari 37 import org.tigr.microarray.mev.cluster.gui.Experiment;
2 26 Feb 07 jari 38 import org.tigr.microarray.mev.cluster.gui.IData;
2 26 Feb 07 jari 39 import org.tigr.microarray.mev.cluster.gui.helpers.CentroidViewer;
2 26 Feb 07 jari 40 import org.tigr.microarray.mev.cluster.gui.helpers.ExpressionFileFilter;
2 26 Feb 07 jari 41 import org.tigr.microarray.mev.cluster.gui.helpers.ExpressionFileView;
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 SAMCentroidViewer extends CentroidViewer {
2 26 Feb 07 jari 49         
2 26 Feb 07 jari 50     private JPopupMenu popup;
2 26 Feb 07 jari 51     
2 26 Feb 07 jari 52     private float[] dValues, rValues, foldChangeArray, qLowestFDR;
2 26 Feb 07 jari 53     private int studyDesign;
2 26 Feb 07 jari 54     //private Vector geneNamesVector;
2 26 Feb 07 jari 55
2 26 Feb 07 jari 56     private boolean calculateQLowestFDR;
2 26 Feb 07 jari 57
2 26 Feb 07 jari 58     /** Creates new SAMCentroidViewer */
2 26 Feb 07 jari 59     public SAMCentroidViewer(Experiment experiment, int[][] clusters, int studyDesign, float[] dValues, float[] rValues, float[] foldChangeArray, float[] qLowestFDR, boolean calculateQLowestFDR) {
2 26 Feb 07 jari 60   super(experiment, clusters);
2 26 Feb 07 jari 61     initialize(studyDesign, dValues, rValues, foldChangeArray, qLowestFDR, calculateQLowestFDR);
2 26 Feb 07 jari 62     }
2 26 Feb 07 jari 63     
2 26 Feb 07 jari 64     /**
2 26 Feb 07 jari 65      * @inheritDoc
2 26 Feb 07 jari 66      */
2 26 Feb 07 jari 67     public SAMCentroidViewer(Experiment e, int[][] clusters, float[][] variances, float[][] means, float[][] codes,
2 26 Feb 07 jari 68         Integer studyDesign, float[] dValues, float[] rValues, float[] foldChangeArray, float[] qLowestFDR, Boolean calculateQLowestFDR) {
2 26 Feb 07 jari 69       super(e, clusters, variances, means, codes);
2 26 Feb 07 jari 70     initialize(studyDesign.intValue(), dValues, rValues, foldChangeArray, qLowestFDR, calculateQLowestFDR.booleanValue());
2 26 Feb 07 jari 71     }
2 26 Feb 07 jari 72
2 26 Feb 07 jari 73     public Expression getExpression(){
2 26 Feb 07 jari 74       Object[] temp = super.getExpression().getArguments();
2 26 Feb 07 jari 75       return new Expression(this, this.getClass(), "new", 
2 26 Feb 07 jari 76           new Object[]{temp[0], temp[1], temp[2], temp[3], temp[4],
2 26 Feb 07 jari 77           new Integer(studyDesign), dValues, rValues, foldChangeArray, qLowestFDR, new Boolean(calculateQLowestFDR)});
2 26 Feb 07 jari 78     }
2 26 Feb 07 jari 79     
2 26 Feb 07 jari 80     private void initialize(int studyDesign, float[] dValues, float[] rValues, float[] foldChangeArray, float[] qLowestFDR, boolean calculateQLowestFDR) {
2 26 Feb 07 jari 81   Listener listener = new Listener();
2 26 Feb 07 jari 82   this.popup = createJPopupMenu(listener);
2 26 Feb 07 jari 83         this.studyDesign = studyDesign;
2 26 Feb 07 jari 84         this.dValues = dValues;
2 26 Feb 07 jari 85         this.rValues = rValues;
2 26 Feb 07 jari 86         //this.geneNamesVector = geneNamesVector;
2 26 Feb 07 jari 87         this.qLowestFDR = qLowestFDR;
2 26 Feb 07 jari 88         this.calculateQLowestFDR = calculateQLowestFDR;
2 26 Feb 07 jari 89         this.foldChangeArray = foldChangeArray;
2 26 Feb 07 jari 90   getContentComponent().addMouseListener(listener);        
2 26 Feb 07 jari 91     }
2 26 Feb 07 jari 92     
2 26 Feb 07 jari 93     
2 26 Feb 07 jari 94     /**
2 26 Feb 07 jari 95      * Creates a popup menu.
2 26 Feb 07 jari 96      */
2 26 Feb 07 jari 97     private JPopupMenu createJPopupMenu(Listener listener) {
2 26 Feb 07 jari 98   JPopupMenu popup = new JPopupMenu();
2 26 Feb 07 jari 99   addMenuItems(popup, listener);
2 26 Feb 07 jari 100   return popup;
2 26 Feb 07 jari 101     }
2 26 Feb 07 jari 102     
2 26 Feb 07 jari 103     
2 26 Feb 07 jari 104     /**
2 26 Feb 07 jari 105      * Saves all clusters.
2 26 Feb 07 jari 106      */
2 26 Feb 07 jari 107     private void onSaveClusters() {
2 26 Feb 07 jari 108   Frame frame = JOptionPane.getFrameForComponent(getContentComponent());
2 26 Feb 07 jari 109   try {
2 26 Feb 07 jari 110       saveExperiment(frame, getExperiment(), getData(), getClusters());
2 26 Feb 07 jari 111   } catch (Exception e) {
2 26 Feb 07 jari 112       JOptionPane.showMessageDialog(frame, "Can not save clusters!", e.toString(), JOptionPane.ERROR_MESSAGE);
2 26 Feb 07 jari 113       e.printStackTrace();
2 26 Feb 07 jari 114   }
2 26 Feb 07 jari 115     }
2 26 Feb 07 jari 116     
2 26 Feb 07 jari 117     /**
2 26 Feb 07 jari 118      * Save the viewer cluster.
2 26 Feb 07 jari 119      */
2 26 Feb 07 jari 120     private void onSaveCluster() {
2 26 Feb 07 jari 121   Frame frame = JOptionPane.getFrameForComponent(getContentComponent());
2 26 Feb 07 jari 122   try {
2 26 Feb 07 jari 123       saveExperiment(frame, getExperiment(), getData(), getCluster());
2 26 Feb 07 jari 124   } catch (Exception e) {
2 26 Feb 07 jari 125       JOptionPane.showMessageDialog(frame, "Can not save cluster!", e.toString(), JOptionPane.ERROR_MESSAGE);
2 26 Feb 07 jari 126       e.printStackTrace();
2 26 Feb 07 jari 127   }
2 26 Feb 07 jari 128     }
2 26 Feb 07 jari 129     
2 26 Feb 07 jari 130     /**
2 26 Feb 07 jari 131      * Sets a public color.
2 26 Feb 07 jari 132      */
2 26 Feb 07 jari 133     private void onSetColor() {
2 26 Feb 07 jari 134   Frame frame = JOptionPane.getFrameForComponent(getContentComponent());
2 26 Feb 07 jari 135   Color newColor = JColorChooser.showDialog(frame, "Choose color", DEF_CLUSTER_COLOR);
2 26 Feb 07 jari 136   if (newColor != null) {
2 26 Feb 07 jari 137       setClusterColor(newColor);
2 26 Feb 07 jari 138   }
2 26 Feb 07 jari 139     }
2 26 Feb 07 jari 140     
2 26 Feb 07 jari 141     /**
2 26 Feb 07 jari 142      * Removes a public color.
2 26 Feb 07 jari 143      */
2 26 Feb 07 jari 144     private void onSetDefaultColor() {
2 26 Feb 07 jari 145   setClusterColor(null);
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 its rows.
2 26 Feb 07 jari 151      */
2 26 Feb 07 jari 152     public void saveExperiment(Frame frame, Experiment experiment, IData data, int[] rows) 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             saveCluster(file, experiment, data, rows);
2 26 Feb 07 jari 156         }
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 values from specified experiment and cluster.
2 26 Feb 07 jari 161      */
2 26 Feb 07 jari 162     public void saveExperiment(Frame frame, Experiment experiment, IData data, int[][] clusters) throws Exception {
2 26 Feb 07 jari 163         File file = getFile(frame);
2 26 Feb 07 jari 164         if (file != null) {
2 26 Feb 07 jari 165             File aFile;
2 26 Feb 07 jari 166             for (int i=0; i<clusters.length; i++) {
2 26 Feb 07 jari 167                 if (clusters[i] == null || clusters[i].length == 0) {
2 26 Feb 07 jari 168                     continue;
2 26 Feb 07 jari 169                 }
2 26 Feb 07 jari 170                 aFile = new File(file.getPath()+"-"+String.valueOf(i+1)+".txt");
2 26 Feb 07 jari 171                 saveCluster(aFile, experiment, data, clusters[i]);
2 26 Feb 07 jari 172             }
2 26 Feb 07 jari 173         }
2 26 Feb 07 jari 174     }
2 26 Feb 07 jari 175     
2 26 Feb 07 jari 176     private void saveCluster(File file, Experiment experiment, IData data, int[] rows) throws Exception {
2 26 Feb 07 jari 177         PrintWriter out = new PrintWriter(new FileOutputStream(file));
2 26 Feb 07 jari 178         String[] fieldNames = data.getFieldNames();
2 26 Feb 07 jari 179         out.print("Original row");
2 26 Feb 07 jari 180         out.print("\t");
2 26 Feb 07 jari 181         for (int i = 0; i < fieldNames.length; i++) {
2 26 Feb 07 jari 182             out.print(fieldNames[i]);
2 26 Feb 07 jari 183             if (i < fieldNames.length - 1) {
2 26 Feb 07 jari 184                 out.print("\t");
2 26 Feb 07 jari 185             }
2 26 Feb 07 jari 186         }
2 26 Feb 07 jari 187         //out.print("\t");
2 26 Feb 07 jari 188         //out.print("GeneNamesVector");        
2 26 Feb 07 jari 189         out.print("\t");
2 26 Feb 07 jari 190         out.print("Score (d)");
2 26 Feb 07 jari 191         out.print("\t");
2 26 Feb 07 jari 192         out.print("Numerator (r)\t");
2 26 Feb 07 jari 193         out.print("Denominator (s+s0)\t");
2 26 Feb 07 jari 194         if ((studyDesign == SAMInitDialog.TWO_CLASS_PAIRED) || (studyDesign == SAMInitDialog.TWO_CLASS_UNPAIRED)) {
2 26 Feb 07 jari 195             out.print("Fold change");
2 26 Feb 07 jari 196         }
2 26 Feb 07 jari 197         if (calculateQLowestFDR) {
2 26 Feb 07 jari 198             out.print("\t");
2 26 Feb 07 jari 199             out.print("q-value (%)");
2 26 Feb 07 jari 200         }
2 26 Feb 07 jari 201         
2 26 Feb 07 jari 202         //out.print("UniqueID\tName");
2 26 Feb 07 jari 203         for (int i=0; i<experiment.getNumberOfSamples(); i++) {
2 26 Feb 07 jari 204             out.print("\t");
2 26 Feb 07 jari 205             out.print(data.getFullSampleName(experiment.getSampleIndex(i)));
2 26 Feb 07 jari 206         }
2 26 Feb 07 jari 207         out.print("\n");
2 26 Feb 07 jari 208         for (int i=0; i<rows.length; i++) {
2 26 Feb 07 jari 209             out.print(Integer.toString(experiment.getGeneIndexMappedToData(rows[i]) + 1));  //handles cutoffs
2 26 Feb 07 jari 210             //out.print(data.getUniqueId(rows[i]));
2 26 Feb 07 jari 211             out.print("\t");
2 26 Feb 07 jari 212             //out.print(data.getGeneName(rows[i]));
2 26 Feb 07 jari 213             for (int k = 0; k < fieldNames.length; k++) {
2 26 Feb 07 jari 214                 out.print(data.getElementAttribute(experiment.getGeneIndexMappedToData(rows[i]), k));
2 26 Feb 07 jari 215                 if (k < fieldNames.length - 1) {
2 26 Feb 07 jari 216                     out.print("\t"); 
2 26 Feb 07 jari 217                 }
2 26 Feb 07 jari 218             }
2 26 Feb 07 jari 219             //out.print("\t");
2 26 Feb 07 jari 220             //out.print((String)(geneNamesVector.get(rows[i])));
2 26 Feb 07 jari 221             out.print("\t");
2 26 Feb 07 jari 222             out.print("" + dValues[rows[i]]);
2 26 Feb 07 jari 223             out.print("\t");
2 26 Feb 07 jari 224             out.print("" + rValues[rows[i]] + "\t");    
2 26 Feb 07 jari 225             out.print("" + (float)(rValues[rows[i]]/dValues[rows[i]]) + "\t");
2 26 Feb 07 jari 226             if ((studyDesign == SAMInitDialog.TWO_CLASS_PAIRED) || (studyDesign == SAMInitDialog.TWO_CLASS_UNPAIRED)) {            
2 26 Feb 07 jari 227                 out.print("" + foldChangeArray[rows[i]]);
2 26 Feb 07 jari 228             }
2 26 Feb 07 jari 229             if (calculateQLowestFDR) {
2 26 Feb 07 jari 230                 out.print("\t");
2 26 Feb 07 jari 231                 out.print("" + qLowestFDR[rows[i]]);
2 26 Feb 07 jari 232             }
2 26 Feb 07 jari 233             for (int j=0; j<experiment.getNumberOfSamples(); j++) {
2 26 Feb 07 jari 234                 out.print("\t");
2 26 Feb 07 jari 235                 out.print(Float.toString(experiment.get(rows[i], j)));
2 26 Feb 07 jari 236             }
2 26 Feb 07 jari 237             out.print("\n");
2 26 Feb 07 jari 238         }
2 26 Feb 07 jari 239         out.flush();
2 26 Feb 07 jari 240         out.close();
2 26 Feb 07 jari 241     }  
2 26 Feb 07 jari 242     
2 26 Feb 07 jari 243     /**
2 26 Feb 07 jari 244      * Returns a file choosed by the user.
2 26 Feb 07 jari 245      */
2 26 Feb 07 jari 246     private static File getFile(Frame frame) {
2 26 Feb 07 jari 247         File file = null;
2 26 Feb 07 jari 248         final JFileChooser fc = new JFileChooser(TMEV.getFile("data/"));
2 26 Feb 07 jari 249         fc.addChoosableFileFilter(new ExpressionFileFilter());
2 26 Feb 07 jari 250         fc.setFileView(new ExpressionFileView());
2 26 Feb 07 jari 251         int ret = fc.showSaveDialog(frame);
2 26 Feb 07 jari 252         if (ret == JFileChooser.APPROVE_OPTION) {
2 26 Feb 07 jari 253             file = fc.getSelectedFile();
2 26 Feb 07 jari 254         }
2 26 Feb 07 jari 255         return file;
2 26 Feb 07 jari 256     }    
2 26 Feb 07 jari 257     
2 26 Feb 07 jari 258     /**
2 26 Feb 07 jari 259      * The class to listen to mouse and action events.
2 26 Feb 07 jari 260      */
2 26 Feb 07 jari 261     private class Listener extends MouseAdapter implements ActionListener {
2 26 Feb 07 jari 262   
2 26 Feb 07 jari 263   public void actionPerformed(ActionEvent e) {
2 26 Feb 07 jari 264       String command = e.getActionCommand();
2 26 Feb 07 jari 265       if (command.equals(SAVE_CLUSTER_CMD)) {
2 26 Feb 07 jari 266     onSaveCluster();
2 26 Feb 07 jari 267       } else if (command.equals(SAVE_ALL_CLUSTERS_CMD)) {
2 26 Feb 07 jari 268     onSaveClusters();
2 26 Feb 07 jari 269       } else if (command.equals(SET_DEF_COLOR_CMD)) {
2 26 Feb 07 jari 270     onSetDefaultColor();
2 26 Feb 07 jari 271       } else if(command.equals(SET_Y_TO_EXPERIMENT_MAX_CMD)){
2 26 Feb 07 jari 272                 yRangeOption = CentroidViewer.USE_EXPERIMENT_MAX;
2 26 Feb 07 jari 273                 setClusterMaxMenuItem.setEnabled(true);
2 26 Feb 07 jari 274                 setOverallMaxMenuItem.setEnabled(false);
2 26 Feb 07 jari 275                 repaint();
2 26 Feb 07 jari 276             } else if(command.equals(SET_Y_TO_CLUSTER_MAX_CMD)){
2 26 Feb 07 jari 277                 yRangeOption = CentroidViewer.USE_CLUSTER_MAX;
2 26 Feb 07 jari 278                 setClusterMaxMenuItem.setEnabled(false);
2 26 Feb 07 jari 279                 setOverallMaxMenuItem.setEnabled(true);
2 26 Feb 07 jari 280                 repaint();
2 26 Feb 07 jari 281             } else if (command.equals(STORE_CLUSTER_CMD)) {
2 26 Feb 07 jari 282     storeCluster();
2 26 Feb 07 jari 283       } else if(command.equals(LAUNCH_NEW_SESSION_CMD)){
2 26 Feb 07 jari 284                 launchNewSession();
2 26 Feb 07 jari 285             } else if(command.equals(TOGGLE_REF_LINE_CMD)){
2 26 Feb 07 jari 286                 showRefLine = !showRefLine;
2 26 Feb 07 jari 287                 repaint();
2 26 Feb 07 jari 288             }            
2 26 Feb 07 jari 289   }
2 26 Feb 07 jari 290   
2 26 Feb 07 jari 291   public void mouseReleased(MouseEvent event) {
2 26 Feb 07 jari 292       maybeShowPopup(event);
2 26 Feb 07 jari 293   }
2 26 Feb 07 jari 294   
2 26 Feb 07 jari 295   public void mousePressed(MouseEvent event) {
2 26 Feb 07 jari 296       maybeShowPopup(event);
2 26 Feb 07 jari 297   }
2 26 Feb 07 jari 298   
2 26 Feb 07 jari 299   private void maybeShowPopup(MouseEvent e) {
2 26 Feb 07 jari 300       if (!e.isPopupTrigger() || getCluster() == null || getCluster().length == 0) {
2 26 Feb 07 jari 301     return;
2 26 Feb 07 jari 302       }
2 26 Feb 07 jari 303       popup.show(e.getComponent(), e.getX(), e.getY());
2 26 Feb 07 jari 304   }
2 26 Feb 07 jari 305     }    
2 26 Feb 07 jari 306
2 26 Feb 07 jari 307 }