mev-4.0.01/source/org/tigr/microarray/mev/cluster/gui/impl/sam/SAMDeltaInfoViewer.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  * SAMDeltaInfoViewer.java
2 26 Feb 07 jari 7  *
2 26 Feb 07 jari 8  * Created on January 28, 2003, 1:17 PM
2 26 Feb 07 jari 9  */
2 26 Feb 07 jari 10
2 26 Feb 07 jari 11 package org.tigr.microarray.mev.cluster.gui.impl.sam;
2 26 Feb 07 jari 12
2 26 Feb 07 jari 13 import java.awt.Color;
2 26 Feb 07 jari 14 import java.awt.Dimension;
2 26 Feb 07 jari 15 import java.awt.GridBagConstraints;
2 26 Feb 07 jari 16 import java.awt.GridBagLayout;
2 26 Feb 07 jari 17 import java.awt.Insets;
2 26 Feb 07 jari 18 import java.awt.event.ActionEvent;
2 26 Feb 07 jari 19 import java.awt.event.ActionListener;
2 26 Feb 07 jari 20 import java.awt.event.MouseAdapter;
2 26 Feb 07 jari 21 import java.awt.event.MouseEvent;
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.text.DecimalFormat;
2 26 Feb 07 jari 26
2 26 Feb 07 jari 27 import javax.swing.JComponent;
2 26 Feb 07 jari 28 import javax.swing.JFileChooser;
2 26 Feb 07 jari 29 import javax.swing.JLabel;
2 26 Feb 07 jari 30 import javax.swing.JMenuItem;
2 26 Feb 07 jari 31 import javax.swing.JPanel;
2 26 Feb 07 jari 32 import javax.swing.JPopupMenu;
2 26 Feb 07 jari 33 import javax.swing.JTextArea;
2 26 Feb 07 jari 34
2 26 Feb 07 jari 35 import org.tigr.microarray.mev.cluster.gui.impl.GUIFactory;
2 26 Feb 07 jari 36 import org.tigr.microarray.mev.cluster.gui.impl.ViewerAdapter;
2 26 Feb 07 jari 37
2 26 Feb 07 jari 38 /**
2 26 Feb 07 jari 39  *
2 26 Feb 07 jari 40  * @author  nbhagaba
2 26 Feb 07 jari 41  * @version 
2 26 Feb 07 jari 42  */
2 26 Feb 07 jari 43 public class SAMDeltaInfoViewer extends ViewerAdapter {
2 26 Feb 07 jari 44     
2 26 Feb 07 jari 45     private JComponent header;
2 26 Feb 07 jari 46     private JTextArea  content; 
2 26 Feb 07 jari 47     private double[] deltaGrid, medNumFalse,false90th, FDRMedian, FDR90th;
2 26 Feb 07 jari 48     private int[] numSig;
2 26 Feb 07 jari 49     private JPopupMenu popup;
2 26 Feb 07 jari 50     
2 26 Feb 07 jari 51     //private SAMState localSAMState;
2 26 Feb 07 jari 52
2 26 Feb 07 jari 53     /** Creates new SAMDeltaInfoViewer */
2 26 Feb 07 jari 54     public SAMDeltaInfoViewer(double[] deltaGrid, double[] medNumFalse, double[] false90th, int[] numSig, double[] FDRMedian, double[] FDR90th) {
2 26 Feb 07 jari 55         this.deltaGrid = deltaGrid;
2 26 Feb 07 jari 56         this.medNumFalse = medNumFalse;
2 26 Feb 07 jari 57         this.false90th = false90th;
2 26 Feb 07 jari 58         this.numSig = numSig;
2 26 Feb 07 jari 59         this.FDRMedian = FDRMedian;
2 26 Feb 07 jari 60         this.FDR90th = FDR90th;
2 26 Feb 07 jari 61         /*
2 26 Feb 07 jari 62         this.localSAMState = new SAMState();
2 26 Feb 07 jari 63         
2 26 Feb 07 jari 64         System.out.println("Before new SAMState(): ");
2 26 Feb 07 jari 65         System.out.println("SAMState.firstRun = " + SAMState.firstRun);
2 26 Feb 07 jari 66         System.out.println("SAMState.groupAssignments.length = " + SAMState.groupAssignments.length);
2 26 Feb 07 jari 67         SAMState localSAMState = new SAMState(); 
2 26 Feb 07 jari 68         System.out.println("After new SAMState(): ");        
2 26 Feb 07 jari 69         System.out.println("localSAMState.firstRun = " + localSAMState.firstRun);
2 26 Feb 07 jari 70         System.out.println("localSAMState.groupAssignments.length = " + localSAMState.groupAssignments.length); 
2 26 Feb 07 jari 71              
2 26 Feb 07 jari 72          */  
2 26 Feb 07 jari 73   header  = createHeader();
2 26 Feb 07 jari 74   content = createContent();
2 26 Feb 07 jari 75   setMaxWidth(content, header);   
2 26 Feb 07 jari 76
2 26 Feb 07 jari 77     }
2 26 Feb 07 jari 78     
2 26 Feb 07 jari 79     public SAMDeltaInfoViewer(JTextArea content, JComponent header){
2 26 Feb 07 jari 80       this.header = header;
2 26 Feb 07 jari 81       this.content = content;
2 26 Feb 07 jari 82         setMaxWidth(content, header);
2 26 Feb 07 jari 83     }
2 26 Feb 07 jari 84     
2 26 Feb 07 jari 85     /**
2 26 Feb 07 jari 86      * Returns component to be inserted into the framework scroll pane.
2 26 Feb 07 jari 87      */
2 26 Feb 07 jari 88     public JComponent getContentComponent() {
2 26 Feb 07 jari 89   return content;
2 26 Feb 07 jari 90     }
2 26 Feb 07 jari 91     
2 26 Feb 07 jari 92     /**
2 26 Feb 07 jari 93      * Returns the viewer header.
2 26 Feb 07 jari 94      */
2 26 Feb 07 jari 95     public JComponent getHeaderComponent() {
2 26 Feb 07 jari 96   return header;
2 26 Feb 07 jari 97     }
2 26 Feb 07 jari 98     
2 26 Feb 07 jari 99     /**
2 26 Feb 07 jari 100      * Creates the viewer header.
2 26 Feb 07 jari 101      */
2 26 Feb 07 jari 102     /*
2 26 Feb 07 jari 103     private JComponent createHeader() {
2 26 Feb 07 jari 104   JPanel panel = new JPanel(new GridBagLayout());
2 26 Feb 07 jari 105   panel.setBackground(Color.white);
2 26 Feb 07 jari 106   GridBagConstraints gbc = new GridBagConstraints();
2 26 Feb 07 jari 107   gbc.fill = GridBagConstraints.HORIZONTAL;
2 26 Feb 07 jari 108   gbc.insets = new Insets(10, 0, 10, 0);
2 26 Feb 07 jari 109   panel.add(new JLabel("<html><body bgcolor='#FFFFFF'><font face='serif' size='5' color='#000080'><b>Delta Table</b></font></body></html>"), gbc);
2 26 Feb 07 jari 110         //panel.add(new JLabel("Delta\tMedian false\t90th %ile false\t  # sig. genes\tFDR(%) Median\t   FDR(%) 90th %ile\n\n"), gbc);
2 26 Feb 07 jari 111   return panel;
2 26 Feb 07 jari 112     } 
2 26 Feb 07 jari 113      */
2 26 Feb 07 jari 114     
2 26 Feb 07 jari 115     void buildConstraints(GridBagConstraints gbc, int gx, int gy,
2 26 Feb 07 jari 116     int gw, int gh, int wx, int wy) {
2 26 Feb 07 jari 117   
2 26 Feb 07 jari 118   gbc.gridx = gx;
2 26 Feb 07 jari 119   gbc.gridy = gy;
2 26 Feb 07 jari 120   gbc.gridwidth = gw;
2 26 Feb 07 jari 121   gbc.gridheight = gh;
2 26 Feb 07 jari 122   gbc.weightx = wx;
2 26 Feb 07 jari 123   gbc.weighty = wy;
2 26 Feb 07 jari 124     }    
2 26 Feb 07 jari 125     
2 26 Feb 07 jari 126     private JComponent createHeader() {
2 26 Feb 07 jari 127   JPanel panel = new JPanel();
2 26 Feb 07 jari 128         GridBagLayout gridbag = new GridBagLayout();
2 26 Feb 07 jari 129         GridBagConstraints constraints = new GridBagConstraints();
2 26 Feb 07 jari 130   panel.setBackground(Color.white);
2 26 Feb 07 jari 131         panel.setLayout(gridbag);
2 26 Feb 07 jari 132         constraints.fill = GridBagConstraints.HORIZONTAL;
2 26 Feb 07 jari 133   constraints.insets = new Insets(10, 200, 10, 200);
2 26 Feb 07 jari 134   JLabel label1 = new JLabel("<html><body bgcolor='#FFFFFF'><font face='serif' size='5' color='#000080'><b>Delta Table</b></font></body></html>");
2 26 Feb 07 jari 135         
2 26 Feb 07 jari 136         buildConstraints(constraints, 0, 0, 1, 1, 100, 80);
2 26 Feb 07 jari 137         //constraints.fill = GridBagConstraints.BOTH;
2 26 Feb 07 jari 138         //constraints.anchor = GridBagConstraints.EAST;
2 26 Feb 07 jari 139         gridbag.setConstraints(label1, constraints);
2 26 Feb 07 jari 140         panel.add(label1);
2 26 Feb 07 jari 141         
2 26 Feb 07 jari 142         JTextArea area = new JTextArea();
2 26 Feb 07 jari 143         area.setEditable(false);
2 26 Feb 07 jari 144         StringBuffer sb = new StringBuffer();
2 26 Feb 07 jari 145         sb.append("  Delta\tMedian false\t90th %ile false\t  # sig. genes\tFDR(%) Median\t   FDR(%) 90th %ile");
2 26 Feb 07 jari 146         area.setForeground(Color.blue);
2 26 Feb 07 jari 147         area.setText(sb.toString());
2 26 Feb 07 jari 148   area.setCaretPosition(0);
2 26 Feb 07 jari 149         
2 26 Feb 07 jari 150         buildConstraints(constraints, 0, 1, 1, 1, 0, 20);
2 26 Feb 07 jari 151         constraints.anchor = GridBagConstraints.SOUTH;
2 26 Feb 07 jari 152         constraints.insets = new Insets(10, 0, 0, 0);
2 26 Feb 07 jari 153         //constraints.fill = GridBagConstraints.BOTH;
2 26 Feb 07 jari 154         gridbag.setConstraints(area, constraints);
2 26 Feb 07 jari 155         panel.add(area);        
2 26 Feb 07 jari 156         
2 26 Feb 07 jari 157   return panel;
2 26 Feb 07 jari 158     }    
2 26 Feb 07 jari 159     
2 26 Feb 07 jari 160     private JTextArea createContent() {
2 26 Feb 07 jari 161         JTextArea area = new JTextArea();
2 26 Feb 07 jari 162         area.setEditable(false);
2 26 Feb 07 jari 163         StringBuffer sb = new StringBuffer();
2 26 Feb 07 jari 164         DecimalFormat nf = new DecimalFormat();
2 26 Feb 07 jari 165         nf.setMaximumFractionDigits(3);
2 26 Feb 07 jari 166         nf.setMinimumFractionDigits(3);        
2 26 Feb 07 jari 167         //sb.append("Delta\tMedian false\t90th %ile false\t  # sig. genes\tFDR(%) Median\t   FDR(%) 90th %ile\n\n");
2 26 Feb 07 jari 168         //counter = 0;
2 26 Feb 07 jari 169         for (int counter = 0; counter < deltaGrid.length; counter++) {            
2 26 Feb 07 jari 170             sb.append("  " + printFormat(deltaGrid[counter]) + "\t" + printFormat(medNumFalse[counter]) + "\t" + printFormat(false90th[counter]) + "\t  " + numSig[counter] + "\t" + printFormat(FDRMedian[counter]) + "\t   " + printFormat(FDR90th[counter]) + "\n");
2 26 Feb 07 jari 171             //counter += 100;
2 26 Feb 07 jari 172         }
2 26 Feb 07 jari 173         area.setText(sb.toString());
2 26 Feb 07 jari 174   area.setCaretPosition(0);
2 26 Feb 07 jari 175
2 26 Feb 07 jari 176         final JFileChooser fc = new JFileChooser();
2 26 Feb 07 jari 177         fc.setCurrentDirectory(new File("Data"));   
2 26 Feb 07 jari 178         fc.setDialogTitle("Save delta table");
2 26 Feb 07 jari 179         
2 26 Feb 07 jari 180         popup = new JPopupMenu();
2 26 Feb 07 jari 181         JMenuItem menuItem = new JMenuItem("Save delta table", GUIFactory.getIcon("save16.gif"));
2 26 Feb 07 jari 182         menuItem.addActionListener(new ActionListener() {
2 26 Feb 07 jari 183             public void actionPerformed(ActionEvent evt) {
2 26 Feb 07 jari 184                     int returnVal = fc.showSaveDialog(SAMDeltaInfoViewer.this.getHeaderComponent());
2 26 Feb 07 jari 185                     if (returnVal == JFileChooser.APPROVE_OPTION) {
2 26 Feb 07 jari 186                         File file = fc.getSelectedFile();
2 26 Feb 07 jari 187                         try {
2 26 Feb 07 jari 188                             PrintWriter out = new PrintWriter(new FileOutputStream(file));
2 26 Feb 07 jari 189                             out.print("Delta\tMedian false\t90th %ile false\t# sig. genes\tFDR(%) Median\tFDR(%) 90th %ile\n\n");
2 26 Feb 07 jari 190                             //int[] groupAssgn = getGroupAssignments();
2 26 Feb 07 jari 191                             for (int i = 0; i < deltaGrid.length; i++) {
2 26 Feb 07 jari 192                                 //out.print(groupAssgn[i]);
2 26 Feb 07 jari 193                                 out.print(deltaGrid[i] + "\t" + medNumFalse[i] + "\t" + false90th[i] + "\t" + numSig[i] + "\t" + FDRMedian[i] + "\t" + FDR90th[i] + "\n");
2 26 Feb 07 jari 194                             }
2 26 Feb 07 jari 195                             out.println();
2 26 Feb 07 jari 196                             out.flush();
2 26 Feb 07 jari 197                             out.close();
2 26 Feb 07 jari 198                        } catch (Exception e) {
2 26 Feb 07 jari 199                             //e.printStackTrace();
2 26 Feb 07 jari 200                         }
2 26 Feb 07 jari 201                         //this is where a real application would save the file.
2 26 Feb 07 jari 202                         //log.append("Saving: " + file.getName() + "." + newline);
2 26 Feb 07 jari 203                     } else {
2 26 Feb 07 jari 204                         //log.append("Save command cancelled by user." + newline);
2 26 Feb 07 jari 205                     }                
2 26 Feb 07 jari 206             }
2 26 Feb 07 jari 207         });
2 26 Feb 07 jari 208         
2 26 Feb 07 jari 209         popup.add(menuItem);
2 26 Feb 07 jari 210         
2 26 Feb 07 jari 211         area.addMouseListener(new MouseAdapter() {
2 26 Feb 07 jari 212             public void mousePressed(MouseEvent e) {
2 26 Feb 07 jari 213                 maybeShowPopup(e);
2 26 Feb 07 jari 214             }
2 26 Feb 07 jari 215             
2 26 Feb 07 jari 216             public void mouseReleased(MouseEvent e) {
2 26 Feb 07 jari 217                 maybeShowPopup(e);
2 26 Feb 07 jari 218             }
2 26 Feb 07 jari 219             
2 26 Feb 07 jari 220             private void maybeShowPopup(MouseEvent e) {
2 26 Feb 07 jari 221                 if (e.isPopupTrigger()) {
2 26 Feb 07 jari 222                     popup.show(e.getComponent(),
2 26 Feb 07 jari 223                     e.getX(), e.getY());
2 26 Feb 07 jari 224                 }
2 26 Feb 07 jari 225             }            
2 26 Feb 07 jari 226             /*
2 26 Feb 07 jari 227             public void mouseClicked(MouseEvent event) {
2 26 Feb 07 jari 228                 if (SwingUtilities.isRightMouseButton(event)) {
2 26 Feb 07 jari 229                     //System.out.println("Right clicked");
2 26 Feb 07 jari 230                     fc.setDialogTitle("Save delta table");
2 26 Feb 07 jari 231                     int returnVal = fc.showSaveDialog(SAMDeltaInfoViewer.this.getHeaderComponent());
2 26 Feb 07 jari 232                     if (returnVal == JFileChooser.APPROVE_OPTION) {
2 26 Feb 07 jari 233                         File file = fc.getSelectedFile();
2 26 Feb 07 jari 234                         try {
2 26 Feb 07 jari 235                             PrintWriter out = new PrintWriter(new FileOutputStream(file));
2 26 Feb 07 jari 236                             out.print("Delta\tMedian false\t90th %ile false\t# sig. genes\tFDR(%) Median\tFDR(%) 90th %ile");
2 26 Feb 07 jari 237                             //int[] groupAssgn = getGroupAssignments();
2 26 Feb 07 jari 238                             for (int i = 0; i < deltaGrid.length; i++) {
2 26 Feb 07 jari 239                                 //out.print(groupAssgn[i]);
2 26 Feb 07 jari 240                                 out.print(deltaGrid[i] + "\t" + medNumFalse[i] + "\t" + false90th[i] + "\t" + numSig[i] + "\t" + FDRMedian[i] + "\t" + FDR90th[i] + "\n");
2 26 Feb 07 jari 241                             }
2 26 Feb 07 jari 242                             out.println();
2 26 Feb 07 jari 243                             out.flush();
2 26 Feb 07 jari 244                             out.close();
2 26 Feb 07 jari 245                        } catch (Exception e) {
2 26 Feb 07 jari 246                             //e.printStackTrace();
2 26 Feb 07 jari 247                         }
2 26 Feb 07 jari 248                         //this is where a real application would save the file.
2 26 Feb 07 jari 249                         //log.append("Saving: " + file.getName() + "." + newline);
2 26 Feb 07 jari 250                     } else {
2 26 Feb 07 jari 251                         //log.append("Save command cancelled by user." + newline);
2 26 Feb 07 jari 252                     }                     
2 26 Feb 07 jari 253                     
2 26 Feb 07 jari 254                 }
2 26 Feb 07 jari 255             }
2 26 Feb 07 jari 256              */
2 26 Feb 07 jari 257         });
2 26 Feb 07 jari 258         
2 26 Feb 07 jari 259   return area;        
2 26 Feb 07 jari 260     }
2 26 Feb 07 jari 261
2 26 Feb 07 jari 262     /**
2 26 Feb 07 jari 263      * Synchronize content and header sizes.
2 26 Feb 07 jari 264      */
2 26 Feb 07 jari 265     private void setMaxWidth(JComponent content, JComponent header) {
2 26 Feb 07 jari 266   int c_width = content.getPreferredSize().width;
2 26 Feb 07 jari 267   int h_width = header.getPreferredSize().width;
2 26 Feb 07 jari 268   if (c_width > h_width) {
2 26 Feb 07 jari 269       header.setPreferredSize(new Dimension(c_width, header.getPreferredSize().height));
2 26 Feb 07 jari 270   } else {
2 26 Feb 07 jari 271       content.setPreferredSize(new Dimension(h_width, content.getPreferredSize().height));
2 26 Feb 07 jari 272   }
2 26 Feb 07 jari 273     } 
2 26 Feb 07 jari 274     
2 26 Feb 07 jari 275     private String printFormat(double d) {
2 26 Feb 07 jari 276         DecimalFormat nf = new DecimalFormat();
2 26 Feb 07 jari 277         nf.setMaximumFractionDigits(3);
2 26 Feb 07 jari 278         nf.setMinimumFractionDigits(3); 
2 26 Feb 07 jari 279         if (Double.isNaN(d)) {
2 26 Feb 07 jari 280             return "N/A";
2 26 Feb 07 jari 281         } else {
2 26 Feb 07 jari 282             return nf.format(d);
2 26 Feb 07 jari 283         }
2 26 Feb 07 jari 284     }
2 26 Feb 07 jari 285     
2 26 Feb 07 jari 286 }