mev-4.0.01/source/org/tigr/microarray/mev/cluster/gui/impl/sam/SAMExperimentViewer.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: SAMExperimentViewer.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 package org.tigr.microarray.mev.cluster.gui.impl.sam;
2 26 Feb 07 jari 13
2 26 Feb 07 jari 14 import java.awt.Color;
2 26 Feb 07 jari 15 import java.awt.Frame;
2 26 Feb 07 jari 16 import java.awt.Insets;
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
2 26 Feb 07 jari 26 import javax.swing.JColorChooser;
2 26 Feb 07 jari 27 import javax.swing.JFileChooser;
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.ExperimentHeader;
2 26 Feb 07 jari 36 import org.tigr.microarray.mev.cluster.gui.helpers.ExperimentViewer;
2 26 Feb 07 jari 37 import org.tigr.microarray.mev.cluster.gui.helpers.ExpressionFileFilter;
2 26 Feb 07 jari 38 import org.tigr.microarray.mev.cluster.gui.helpers.ExpressionFileView;
2 26 Feb 07 jari 39
2 26 Feb 07 jari 40 public class SAMExperimentViewer extends ExperimentViewer {
2 26 Feb 07 jari 41
2 26 Feb 07 jari 42     
2 26 Feb 07 jari 43     private JPopupMenu popup;
2 26 Feb 07 jari 44     
2 26 Feb 07 jari 45     private float[] dValues, rValues, foldChangeArray, qLowestFDR;
2 26 Feb 07 jari 46     private int studyDesign;
2 26 Feb 07 jari 47     private boolean calculateQLowestFDR;
2 26 Feb 07 jari 48     //private Vector geneNamesVector;    
2 26 Feb 07 jari 49     /**
2 26 Feb 07 jari 50      * Constructs a <code>KMCExperimentViewer</code> with specified
2 26 Feb 07 jari 51      * experiment and clusters.
2 26 Feb 07 jari 52      */
2 26 Feb 07 jari 53     public SAMExperimentViewer(Experiment experiment, int[][] clusters, int studyDesign, float[] dValues, float[] rValues, float[] foldChangeArray, float[] qLowestFDR, boolean calculateQLowestFDR) {
2 26 Feb 07 jari 54   super(experiment, clusters);
2 26 Feb 07 jari 55      initialize(studyDesign, dValues, rValues, foldChangeArray, qLowestFDR, calculateQLowestFDR);
2 26 Feb 07 jari 56   }
2 26 Feb 07 jari 57     
2 26 Feb 07 jari 58     /**
2 26 Feb 07 jari 59      * @inheritDoc
2 26 Feb 07 jari 60      */ 
2 26 Feb 07 jari 61     public SAMExperimentViewer(Experiment e, int[][] clusters, int[] samplesOrder, Boolean drawAnnotations, ExperimentHeader header, Insets insets, Integer exptID,
2 26 Feb 07 jari 62         Integer studyDesign, float[] dValues, float[] rValues, float[] foldChangeArray, float[] qLowestFDR, Boolean calculateQLowestFDR) {
2 26 Feb 07 jari 63       super(e, clusters, samplesOrder, drawAnnotations.booleanValue(), header, insets);
2 26 Feb 07 jari 64       initialize(studyDesign.intValue(), dValues, rValues, foldChangeArray, qLowestFDR, calculateQLowestFDR.booleanValue());
2 26 Feb 07 jari 65     } 
2 26 Feb 07 jari 66     
2 26 Feb 07 jari 67     public Expression getExpression(){
2 26 Feb 07 jari 68       Object[] temp = super.getExpression().getArguments();
2 26 Feb 07 jari 69       return new Expression(this, this.getClass(), "new", 
2 26 Feb 07 jari 70           new Object[]{temp[0], temp[1],
2 26 Feb 07 jari 71           new Integer(studyDesign), dValues, rValues, foldChangeArray, qLowestFDR, new Boolean(calculateQLowestFDR)});
2 26 Feb 07 jari 72     }
2 26 Feb 07 jari 73
2 26 Feb 07 jari 74     private void initialize(int studyDesign, float[] dValues, float[] rValues, float[] foldChangeArray, float[] qLowestFDR, boolean calculateQLowestFDR){
2 26 Feb 07 jari 75   Listener listener = new Listener();
2 26 Feb 07 jari 76   this.popup = createJPopupMenu(listener);
2 26 Feb 07 jari 77         this.studyDesign = studyDesign;
2 26 Feb 07 jari 78         this.dValues = dValues;
2 26 Feb 07 jari 79         this.rValues = rValues;
2 26 Feb 07 jari 80         //this.geneNamesVector = geneNamesVector;         
2 26 Feb 07 jari 81         this.foldChangeArray = foldChangeArray;
2 26 Feb 07 jari 82         this.qLowestFDR = qLowestFDR;
2 26 Feb 07 jari 83         this.calculateQLowestFDR = calculateQLowestFDR;
2 26 Feb 07 jari 84   getContentComponent().addMouseListener(listener);
2 26 Feb 07 jari 85   getHeaderComponent().addMouseListener(listener);
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     /**
2 26 Feb 07 jari 99      * Saves clusters.
2 26 Feb 07 jari 100      */
2 26 Feb 07 jari 101     private void onSaveClusters() {
2 26 Feb 07 jari 102   Frame frame = JOptionPane.getFrameForComponent(getContentComponent());
2 26 Feb 07 jari 103   try {
2 26 Feb 07 jari 104       saveClusters(frame);
2 26 Feb 07 jari 105   } catch (Exception e) {
2 26 Feb 07 jari 106       JOptionPane.showMessageDialog(frame, "Can not save clusters!", e.toString(), JOptionPane.ERROR_MESSAGE);
2 26 Feb 07 jari 107       e.printStackTrace();
2 26 Feb 07 jari 108   }
2 26 Feb 07 jari 109     }
2 26 Feb 07 jari 110     
2 26 Feb 07 jari 111     /**
2 26 Feb 07 jari 112      * Save the viewer cluster.
2 26 Feb 07 jari 113      */
2 26 Feb 07 jari 114     private void onSaveCluster() {
2 26 Feb 07 jari 115   Frame frame = JOptionPane.getFrameForComponent(getContentComponent());
2 26 Feb 07 jari 116   try {
2 26 Feb 07 jari 117       saveCluster(frame);
2 26 Feb 07 jari 118   } catch (Exception e) {
2 26 Feb 07 jari 119       JOptionPane.showMessageDialog(frame, "Can not save cluster!", e.toString(), JOptionPane.ERROR_MESSAGE);
2 26 Feb 07 jari 120       e.printStackTrace();
2 26 Feb 07 jari 121   }
2 26 Feb 07 jari 122     }
2 26 Feb 07 jari 123     
2 26 Feb 07 jari 124     /**
2 26 Feb 07 jari 125      * Sets a public color.
2 26 Feb 07 jari 126      */
2 26 Feb 07 jari 127     private void onSetColor() {
2 26 Feb 07 jari 128   Frame frame = JOptionPane.getFrameForComponent(getContentComponent());
2 26 Feb 07 jari 129   Color newColor = JColorChooser.showDialog(frame, "Choose color", CentroidViewer.DEF_CLUSTER_COLOR);
2 26 Feb 07 jari 130   if (newColor != null) {
2 26 Feb 07 jari 131       setClusterColor(newColor);
2 26 Feb 07 jari 132   }
2 26 Feb 07 jari 133     }
2 26 Feb 07 jari 134     
2 26 Feb 07 jari 135     /**
2 26 Feb 07 jari 136      * Removes a public color.
2 26 Feb 07 jari 137      */
2 26 Feb 07 jari 138     private void onSetDefaultColor() {
2 26 Feb 07 jari 139   setClusterColor(null);
2 26 Feb 07 jari 140     }
2 26 Feb 07 jari 141     
2 26 Feb 07 jari 142     /**
2 26 Feb 07 jari 143      * Saves all the clusters.
2 26 Feb 07 jari 144      */
2 26 Feb 07 jari 145     public void saveClusters(Frame frame) throws Exception {
2 26 Feb 07 jari 146         frame = frame == null ? JOptionPane.getFrameForComponent(this) : frame;
2 26 Feb 07 jari 147         saveExperiment(frame, getExperiment(), getData(), getClusters());
2 26 Feb 07 jari 148     }
2 26 Feb 07 jari 149
2 26 Feb 07 jari 150     /**
2 26 Feb 07 jari 151      * Saves current cluster.
2 26 Feb 07 jari 152      */
2 26 Feb 07 jari 153     public void saveCluster(Frame frame) throws Exception {
2 26 Feb 07 jari 154         frame = frame == null ? JOptionPane.getFrameForComponent(this) : frame;
2 26 Feb 07 jari 155         saveExperiment(frame, getExperiment(), getData(), getCluster());
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 its rows.
2 26 Feb 07 jari 161      */
2 26 Feb 07 jari 162     public void saveExperiment(Frame frame, Experiment experiment, IData data, int[] rows) 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             saveCluster(file, experiment, data, rows);
2 26 Feb 07 jari 166         }
2 26 Feb 07 jari 167     }
2 26 Feb 07 jari 168     
2 26 Feb 07 jari 169     /**
2 26 Feb 07 jari 170      * Saves values from specified experiment and cluster.
2 26 Feb 07 jari 171      */
2 26 Feb 07 jari 172     public void saveExperiment(Frame frame, Experiment experiment, IData data, int[][] clusters) throws Exception {
2 26 Feb 07 jari 173         File file = getFile(frame);
2 26 Feb 07 jari 174         if (file != null) {
2 26 Feb 07 jari 175             File aFile;
2 26 Feb 07 jari 176             for (int i=0; i<clusters.length; i++) {
2 26 Feb 07 jari 177                 if (clusters[i] == null || clusters[i].length == 0) {
2 26 Feb 07 jari 178                     continue;
2 26 Feb 07 jari 179                 }
2 26 Feb 07 jari 180                 aFile = new File(file.getPath()+"-"+String.valueOf(i+1)+".txt");
2 26 Feb 07 jari 181                 saveCluster(aFile, experiment, data, clusters[i]);
2 26 Feb 07 jari 182             }
2 26 Feb 07 jari 183         }
2 26 Feb 07 jari 184     }    
2 26 Feb 07 jari 185     
2 26 Feb 07 jari 186     private void saveCluster(File file, Experiment experiment, IData data, int[] rows) throws Exception {
2 26 Feb 07 jari 187         PrintWriter out = new PrintWriter(new FileOutputStream(file));
2 26 Feb 07 jari 188         String[] fieldNames = data.getFieldNames();
2 26 Feb 07 jari 189         out.print("Original row");
2 26 Feb 07 jari 190         out.print("\t");
2 26 Feb 07 jari 191         for (int i = 0; i < fieldNames.length; i++) {
2 26 Feb 07 jari 192             out.print(fieldNames[i]);
2 26 Feb 07 jari 193             if (i < 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         //out.print("\t");
2 26 Feb 07 jari 198         //out.print("GeneNamesVector");        
2 26 Feb 07 jari 199         out.print("\t");
2 26 Feb 07 jari 200         out.print("Score (d)");
2 26 Feb 07 jari 201         out.print("\t");
2 26 Feb 07 jari 202         out.print("Numerator (r)\t");
2 26 Feb 07 jari 203         out.print("Denominator (s+s0)\t");
2 26 Feb 07 jari 204         if ((studyDesign == SAMInitDialog.TWO_CLASS_PAIRED) || (studyDesign == SAMInitDialog.TWO_CLASS_UNPAIRED)) {        
2 26 Feb 07 jari 205             out.print("Fold Change");
2 26 Feb 07 jari 206         }
2 26 Feb 07 jari 207         if (calculateQLowestFDR) {
2 26 Feb 07 jari 208             out.print("\t");
2 26 Feb 07 jari 209             out.print("q-value (%)");
2 26 Feb 07 jari 210         }
2 26 Feb 07 jari 211         
2 26 Feb 07 jari 212         //out.print("UniqueID\tName");
2 26 Feb 07 jari 213         for (int i=0; i<experiment.getNumberOfSamples(); i++) {
2 26 Feb 07 jari 214             out.print("\t");
2 26 Feb 07 jari 215             out.print(data.getFullSampleName(experiment.getSampleIndex(i)));
2 26 Feb 07 jari 216         }
2 26 Feb 07 jari 217         out.print("\n");
2 26 Feb 07 jari 218         for (int i=0; i<rows.length; i++) {
2 26 Feb 07 jari 219             out.print(Integer.toString(experiment.getGeneIndexMappedToData(rows[i]) + 1));  //handles cutoffs
2 26 Feb 07 jari 220             //out.print(data.getUniqueId(rows[i]));
2 26 Feb 07 jari 221             out.print("\t");
2 26 Feb 07 jari 222             //out.print(data.getGeneName(rows[i]));
2 26 Feb 07 jari 223             for (int k = 0; k < fieldNames.length; k++) {
2 26 Feb 07 jari 224                 out.print(data.getElementAttribute(experiment.getGeneIndexMappedToData(rows[i]), k));
2 26 Feb 07 jari 225                 if (k < fieldNames.length - 1) {
2 26 Feb 07 jari 226                     out.print("\t"); 
2 26 Feb 07 jari 227                 }
2 26 Feb 07 jari 228             }
2 26 Feb 07 jari 229             //out.print("\t");
2 26 Feb 07 jari 230             //out.print((String)(geneNamesVector.get(rows[i])));            
2 26 Feb 07 jari 231             out.print("\t");
2 26 Feb 07 jari 232             out.print("" + dValues[rows[i]]);
2 26 Feb 07 jari 233             out.print("\t");
2 26 Feb 07 jari 234             out.print("" + rValues[rows[i]] + "\t");    
2 26 Feb 07 jari 235             out.print("" + (float)(rValues[rows[i]]/dValues[rows[i]]) + "\t");
2 26 Feb 07 jari 236             if ((studyDesign == SAMInitDialog.TWO_CLASS_PAIRED) || (studyDesign == SAMInitDialog.TWO_CLASS_UNPAIRED)) {            
2 26 Feb 07 jari 237                 out.print("" + foldChangeArray[rows[i]]);
2 26 Feb 07 jari 238             }
2 26 Feb 07 jari 239             if (calculateQLowestFDR) {
2 26 Feb 07 jari 240                 out.print("\t");
2 26 Feb 07 jari 241                 out.print("" + qLowestFDR[rows[i]]);
2 26 Feb 07 jari 242             }
2 26 Feb 07 jari 243             for (int j=0; j<experiment.getNumberOfSamples(); j++) {
2 26 Feb 07 jari 244                 out.print("\t");
2 26 Feb 07 jari 245                 out.print(Float.toString(experiment.get(rows[i], j)));
2 26 Feb 07 jari 246             }
2 26 Feb 07 jari 247             out.print("\n");
2 26 Feb 07 jari 248         }
2 26 Feb 07 jari 249         out.flush();
2 26 Feb 07 jari 250         out.close();
2 26 Feb 07 jari 251     }  
2 26 Feb 07 jari 252     
2 26 Feb 07 jari 253     /**
2 26 Feb 07 jari 254      * Returns a file choosed by the user.
2 26 Feb 07 jari 255      */
2 26 Feb 07 jari 256     private static File getFile(Frame frame) {
2 26 Feb 07 jari 257         File file = null;
2 26 Feb 07 jari 258         final JFileChooser fc = new JFileChooser(TMEV.getFile("data/"));
2 26 Feb 07 jari 259         fc.addChoosableFileFilter(new ExpressionFileFilter());
2 26 Feb 07 jari 260         fc.setFileView(new ExpressionFileView());
2 26 Feb 07 jari 261         int ret = fc.showSaveDialog(frame);
2 26 Feb 07 jari 262         if (ret == JFileChooser.APPROVE_OPTION) {
2 26 Feb 07 jari 263             file = fc.getSelectedFile();
2 26 Feb 07 jari 264         }
2 26 Feb 07 jari 265         return file;
2 26 Feb 07 jari 266     }    
2 26 Feb 07 jari 267     
2 26 Feb 07 jari 268     /**
2 26 Feb 07 jari 269      * The class to listen to mouse and action events.
2 26 Feb 07 jari 270      */
2 26 Feb 07 jari 271     private class Listener extends MouseAdapter implements ActionListener {
2 26 Feb 07 jari 272   
2 26 Feb 07 jari 273   public void actionPerformed(ActionEvent e) {
2 26 Feb 07 jari 274       String command = e.getActionCommand();
2 26 Feb 07 jari 275       if (command.equals(SAVE_CLUSTER_CMD)) {
2 26 Feb 07 jari 276     onSaveCluster();
2 26 Feb 07 jari 277       } else if (command.equals(SAVE_ALL_CLUSTERS_CMD)) {
2 26 Feb 07 jari 278     onSaveClusters();
2 26 Feb 07 jari 279       } else if (command.equals(SET_DEF_COLOR_CMD)) {
2 26 Feb 07 jari 280     onSetDefaultColor();
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             }
2 26 Feb 07 jari 286   }
2 26 Feb 07 jari 287   
2 26 Feb 07 jari 288   public void mouseReleased(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   public void mousePressed(MouseEvent event) {
2 26 Feb 07 jari 293       maybeShowPopup(event);
2 26 Feb 07 jari 294   }
2 26 Feb 07 jari 295   
2 26 Feb 07 jari 296   private void maybeShowPopup(MouseEvent e) {
2 26 Feb 07 jari 297       
2 26 Feb 07 jari 298       if (!e.isPopupTrigger() || getCluster() == null || getCluster().length == 0) {
2 26 Feb 07 jari 299     return;
2 26 Feb 07 jari 300       }
2 26 Feb 07 jari 301       popup.show(e.getComponent(), e.getX(), e.getY());
2 26 Feb 07 jari 302   }
2 26 Feb 07 jari 303     }
2 26 Feb 07 jari 304 }