mev-4.0.01/source/org/tigr/microarray/mev/cluster/gui/impl/gdm/GDMExpSpotInfoDisplay.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: GDMExpSpotInfoDisplay.java,v $
2 26 Feb 07 jari 7  * $Revision: 1.3 $
2 26 Feb 07 jari 8  * $Date: 2005/03/10 20:22:00 $
2 26 Feb 07 jari 9  * $Author: braistedj $
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.gdm;
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.Font;
2 26 Feb 07 jari 16 import java.awt.Graphics;
2 26 Feb 07 jari 17 import java.awt.GridBagLayout;
2 26 Feb 07 jari 18 import java.awt.Insets;
2 26 Feb 07 jari 19 import java.awt.event.ActionEvent;
2 26 Feb 07 jari 20 import java.awt.event.ActionListener;
2 26 Feb 07 jari 21 import java.awt.event.KeyEvent;
2 26 Feb 07 jari 22 import java.awt.event.KeyListener;
2 26 Feb 07 jari 23
2 26 Feb 07 jari 24 import javax.swing.JButton;
2 26 Feb 07 jari 25 import javax.swing.JFrame;
2 26 Feb 07 jari 26 import javax.swing.JLabel;
2 26 Feb 07 jari 27 import javax.swing.JScrollPane;
2 26 Feb 07 jari 28 import javax.swing.JTextPane;
2 26 Feb 07 jari 29 import javax.swing.JViewport;
2 26 Feb 07 jari 30 import javax.swing.ScrollPaneConstants;
2 26 Feb 07 jari 31
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.impl.GUIFactory;
2 26 Feb 07 jari 35 import org.tigr.util.FloatMatrix;
2 26 Feb 07 jari 36 import org.tigr.util.awt.ActionInfoDialog;
2 26 Feb 07 jari 37 import org.tigr.util.awt.GBA;
2 26 Feb 07 jari 38
2 26 Feb 07 jari 39 public class GDMExpSpotInfoDisplay extends ActionInfoDialog {
2 26 Feb 07 jari 40     
2 26 Feb 07 jari 41     private int col;
2 26 Feb 07 jari 42     private int row;
2 26 Feb 07 jari 43     private FloatMatrix expDistMatrix;
2 26 Feb 07 jari 44     private FloatMatrix rawMatrix;
2 26 Feb 07 jari 45     
2 26 Feb 07 jari 46     private int LINEAR = 0; // to return just ratio
2 26 Feb 07 jari 47     private int LOG = 1;   //for log2(ratio)
2 26 Feb 07 jari 48     private String distanceMetric;
2 26 Feb 07 jari 49     private int vectorSize=0;
2 26 Feb 07 jari 50     
2 26 Feb 07 jari 51     private int rowMissingValues=0;
2 26 Feb 07 jari 52     private int colMissingValues=0;
2 26 Feb 07 jari 53     private int distanceBasedOn=0;
2 26 Feb 07 jari 54     private IData expData;
2 26 Feb 07 jari 55     private Experiment experiment;
2 26 Feb 07 jari 56     private Color rowExperimentColor;
2 26 Feb 07 jari 57     private Color colExperimentColor;
2 26 Feb 07 jari 58     
2 26 Feb 07 jari 59     public static Color zeroColor = Color.black;
2 26 Feb 07 jari 60     public static Color NaNColor = Color.gray;
2 26 Feb 07 jari 61     public static Color diagColor = Color.white;
2 26 Feb 07 jari 62     
2 26 Feb 07 jari 63     private boolean haveColor = true;
2 26 Feb 07 jari 64     
2 26 Feb 07 jari 65     public GDMExpSpotInfoDisplay(JFrame parent, IData expData, FloatMatrix gdMatrix,
2 26 Feb 07 jari 66     FloatMatrix rawMatrix, String distMetric, int col, int row) {
2 26 Feb 07 jari 67         super(parent, true);
2 26 Feb 07 jari 68         this.expData = expData;
2 26 Feb 07 jari 69         this.experiment = expData.getExperiment();
2 26 Feb 07 jari 70         
2 26 Feb 07 jari 71         this.expDistMatrix = gdMatrix;
2 26 Feb 07 jari 72         this.rawMatrix = rawMatrix;
2 26 Feb 07 jari 73         this.col = col;
2 26 Feb 07 jari 74         this.row = row;
2 26 Feb 07 jari 75         this.distanceMetric = distMetric;
2 26 Feb 07 jari 76         
2 26 Feb 07 jari 77         this.vectorSize = this.expData.getFeaturesSize();
2 26 Feb 07 jari 78         
2 26 Feb 07 jari 79         this.colExperimentColor = expData.getExperimentColor(col);
2 26 Feb 07 jari 80         this.rowExperimentColor = expData.getExperimentColor(row);
2 26 Feb 07 jari 81         
2 26 Feb 07 jari 82         if(colExperimentColor == null && rowExperimentColor == null){
2 26 Feb 07 jari 83             haveColor = false;
2 26 Feb 07 jari 84         } else {
2 26 Feb 07 jari 85             if(this.rowExperimentColor == null)
2 26 Feb 07 jari 86                 this.rowExperimentColor = new Color(Integer.parseInt("FFFFCC",16));
2 26 Feb 07 jari 87             if(this.colExperimentColor == null)
2 26 Feb 07 jari 88                 this.colExperimentColor = new Color(Integer.parseInt("FFFFCC",16));
2 26 Feb 07 jari 89         }
2 26 Feb 07 jari 90         this.setValues(col, row);
2 26 Feb 07 jari 91         init();
2 26 Feb 07 jari 92     }
2 26 Feb 07 jari 93     
2 26 Feb 07 jari 94     private void init(){
2 26 Feb 07 jari 95         
2 26 Feb 07 jari 96         Font infoDisplayFont = new Font("monospaced", Font.PLAIN, 10);
2 26 Feb 07 jari 97         JLabel spotImage = new JLabel(GUIFactory.getIcon("spot.gif"));
2 26 Feb 07 jari 98         EventListener listener = new EventListener();
2 26 Feb 07 jari 99         
2 26 Feb 07 jari 100         JTextPane infoDisplayTextPane = new JTextPane();
2 26 Feb 07 jari 101         infoDisplayTextPane.setContentType("text/html");
2 26 Feb 07 jari 102         infoDisplayTextPane.setFont(infoDisplayFont);
2 26 Feb 07 jari 103         infoDisplayTextPane.setEditable(false);
2 26 Feb 07 jari 104         infoDisplayTextPane.setBackground(new Color(Integer.parseInt("FFFFCC",16)));
2 26 Feb 07 jari 105         infoDisplayTextPane.setMargin(new Insets(10,15,10,10));
2 26 Feb 07 jari 106         infoDisplayTextPane.setText(createMessage());
2 26 Feb 07 jari 107         infoDisplayTextPane.setCaretPosition(0);
2 26 Feb 07 jari 108         infoDisplayTextPane.addKeyListener(listener);
2 26 Feb 07 jari 109         JButton closeButton = new JButton("Close");
2 26 Feb 07 jari 110         closeButton.setActionCommand("close");
2 26 Feb 07 jari 111         closeButton.addActionListener(listener);
2 26 Feb 07 jari 112         
2 26 Feb 07 jari 113         contentPane.setLayout(new GridBagLayout());
2 26 Feb 07 jari 114         JScrollPane scrollPane = new JScrollPane(infoDisplayTextPane, ScrollPaneConstants.VERTICAL_SCROLLBAR_AS_NEEDED, ScrollPaneConstants.HORIZONTAL_SCROLLBAR_AS_NEEDED);
2 26 Feb 07 jari 115         scrollPane.getViewport().setBackground(Color.white);
2 26 Feb 07 jari 116         scrollPane.getViewport().setScrollMode(JViewport.SIMPLE_SCROLL_MODE);
2 26 Feb 07 jari 117         scrollPane.getVerticalScrollBar().setValues(10, 10, 0, 100);
2 26 Feb 07 jari 118         
2 26 Feb 07 jari 119         GBA gba = new GBA();
2 26 Feb 07 jari 120         gba.add(contentPane, scrollPane, 0, 0, 3, 2, 1, 1, GBA.B, GBA.C, new Insets(5, 5, 5, 5), 0, 0);
2 26 Feb 07 jari 121         gba.add(contentPane, closeButton, 0, 3, 1, 1, 0, 0, GBA.NONE, GBA.C, new Insets(5, 5, 5, 5), 0, 0);
2 26 Feb 07 jari 122         gba.add(contentPane, spotImage, 2, 3, 1, 1, 0, 0, GBA.NONE, GBA.E, new Insets(5, 5, 5, 5), 0, 0);
2 26 Feb 07 jari 123         pack();
2 26 Feb 07 jari 124         setSize(500, 500);
2 26 Feb 07 jari 125         setResizable(true);
2 26 Feb 07 jari 126         setTitle("Sample Distance Spot Information");
2 26 Feb 07 jari 127         setLocation(300, 100);
2 26 Feb 07 jari 128         show();
2 26 Feb 07 jari 129     }
2 26 Feb 07 jari 130     
2 26 Feb 07 jari 131     private String createMessage() {
2 26 Feb 07 jari 132         int stringLength = 0;
2 26 Feb 07 jari 133         
2 26 Feb 07 jari 134         String rowName = this.expData.getSampleName(this.row);
2 26 Feb 07 jari 135         String colName = this.expData.getSampleName(this.col);
2 26 Feb 07 jari 136         
2 26 Feb 07 jari 137         int displayRowNum = this.row + 1;
2 26 Feb 07 jari 138         int displayColNum = this.col + 1;
2 26 Feb 07 jari 139         
2 26 Feb 07 jari 140         String colColor= "";
2 26 Feb 07 jari 141         String rowColor= "";
2 26 Feb 07 jari 142         if(haveColor){
2 26 Feb 07 jari 143            colColor = '#' + (Integer.toHexString(colExperimentColor.getRGB())).substring(2, 8);
2 26 Feb 07 jari 144            rowColor = '#' + (Integer.toHexString(rowExperimentColor.getRGB())).substring(2, 8);
2 26 Feb 07 jari 145         }
2 26 Feb 07 jari 146         String message = "<h3>Experiment Information</h3>" +
2 26 Feb 07 jari 147         "<table border=2 cellpadding=4 valign=top >" +
2 26 Feb 07 jari 148         "<tr><td valign=top></td><td  valign=top><b>Column Experiment</b></td><td  valign=top><b>Row Experiment</b></td></tr>" +
2 26 Feb 07 jari 149         "<tr><td  valign=top><b>Name</b></td><td  valign=top>" + colName + "</td><td  valign=top>" + rowName + "</td></tr>";
2 26 Feb 07 jari 150         if(haveColor)
2 26 Feb 07 jari 151             message += "<tr><td  valign=top><b>Experiment Color</b></td><td   valign=top bgcolor=" + colColor + "></td><td  valign=top bgcolor=" + rowColor + "></td></tr>";
2 26 Feb 07 jari 152         
2 26 Feb 07 jari 153         message += "</table>" +
2 26 Feb 07 jari 154         "<h3>Experiment Distance</h3>" +
2 26 Feb 07 jari 155         "<table border=2 cellpadding=4 valign=top >" +
2 26 Feb 07 jari 156         "<tr><td  valign=top><b>GDM Matrix Row </b></td><td width=34% valign=top>" + displayRowNum + "</td></tr>" +
2 26 Feb 07 jari 157         "<tr><td  valign=top><b>GDM Matrix Column </b></td><td width=34% valign=top>" + displayColNum + "</td></tr>" +
2 26 Feb 07 jari 158         "<tr><td  valign=top><b>Scaled Experiment Distance</b></td><td width=34% valign=top>" + expDistMatrix.get(col, row) + "</td></tr>" +
2 26 Feb 07 jari 159         "<tr><td  valign=top><b>Actual Experiment Distance</b></td><td width=34% valign=top>" + rawMatrix.get(col, row) + "</td></tr>" +
2 26 Feb 07 jari 160         "<tr><td  valign=top><b>Distance Metric</b></td><td width=34% valign=top>" + distanceMetric + "</td></tr>" +
2 26 Feb 07 jari 161         "<tr><td  valign=top><b>Vector Size</b></td><td width=34% valign=top>" + this.vectorSize + "</td></tr>" +
2 26 Feb 07 jari 162         "<tr><td  valign=top><b>Missing Values</b></td><td  valign=top>" + colMissingValues + ", " + rowMissingValues + "</td></tr>" +
2 26 Feb 07 jari 163         "<tr><td  valign=top><b>Distance Based on</b></td><td width=34% valign=top>" + this.distanceBasedOn+ "</td></tr>";
2 26 Feb 07 jari 164         
2 26 Feb 07 jari 165         return message;
2 26 Feb 07 jari 166     }
2 26 Feb 07 jari 167     
2 26 Feb 07 jari 168     private void setValues(int col, int row) {
2 26 Feb 07 jari 169         
2 26 Feb 07 jari 170         int rows = this.expData.getFeaturesSize();
2 26 Feb 07 jari 171         boolean [] rowMissingVector = new boolean[rows];
2 26 Feb 07 jari 172         boolean [] colMissingVector = new boolean[rows];
2 26 Feb 07 jari 173         
2 26 Feb 07 jari 174         for( int i=0; i< rows; i++) {
2 26 Feb 07 jari 175             rowMissingVector[i] = false;
2 26 Feb 07 jari 176             colMissingVector[i] = false;
2 26 Feb 07 jari 177         }
2 26 Feb 07 jari 178         
2 26 Feb 07 jari 179         for (int i = 0; i < rows; i++) {
2 26 Feb 07 jari 180             float value = experiment.get(i, row);
2 26 Feb 07 jari 181             if (Float.isNaN(value)) {
2 26 Feb 07 jari 182                 rowMissingVector[i] = true;
2 26 Feb 07 jari 183                 this.rowMissingValues ++;
2 26 Feb 07 jari 184             }
2 26 Feb 07 jari 185         }
2 26 Feb 07 jari 186         
2 26 Feb 07 jari 187         for (int i = 0; i < rows; i++) {
2 26 Feb 07 jari 188             float value = experiment.get(i, col);
2 26 Feb 07 jari 189             if (Float.isNaN(value)) {
2 26 Feb 07 jari 190                 colMissingVector[i] = true;
2 26 Feb 07 jari 191                 this.colMissingValues ++;
2 26 Feb 07 jari 192             }
2 26 Feb 07 jari 193         }
2 26 Feb 07 jari 194         
2 26 Feb 07 jari 195         for(int i =0; i<rows; i++) {
2 26 Feb 07 jari 196             if ((rowMissingVector[i] == false) && (colMissingVector[i] == false) && (row != col)) {
2 26 Feb 07 jari 197                 this.distanceBasedOn++;
2 26 Feb 07 jari 198             }
2 26 Feb 07 jari 199         }
2 26 Feb 07 jari 200     }
2 26 Feb 07 jari 201     
2 26 Feb 07 jari 202     private void drawExperimentColor() {
2 26 Feb 07 jari 203         
2 26 Feb 07 jari 204         Graphics g = getGraphics();
2 26 Feb 07 jari 205
2 26 Feb 07 jari 206         if (g != null) {
2 26 Feb 07 jari 207             g.setColor(rowExperimentColor);
2 26 Feb 07 jari 208             g.fillRect(0, 0, 10, 10);
2 26 Feb 07 jari 209             
2 26 Feb 07 jari 210             g.setColor(colExperimentColor);
2 26 Feb 07 jari 211             g.fillRect(20, 0, 10, 10);
2 26 Feb 07 jari 212         }
2 26 Feb 07 jari 213     }
2 26 Feb 07 jari 214     
2 26 Feb 07 jari 215     
2 26 Feb 07 jari 216     class EventListener implements ActionListener, KeyListener {
2 26 Feb 07 jari 217         
2 26 Feb 07 jari 218         public void actionPerformed(ActionEvent event) {
2 26 Feb 07 jari 219             String command = event.getActionCommand();
2 26 Feb 07 jari 220             if (command.equals("close")) {
2 26 Feb 07 jari 221                 dispose();
2 26 Feb 07 jari 222             }
2 26 Feb 07 jari 223         }
2 26 Feb 07 jari 224         
2 26 Feb 07 jari 225         public void keyPressed(KeyEvent event) {
2 26 Feb 07 jari 226             if (event.getKeyCode() == KeyEvent.VK_ENTER) {
2 26 Feb 07 jari 227                 dispose();
2 26 Feb 07 jari 228             }
2 26 Feb 07 jari 229         }
2 26 Feb 07 jari 230         
2 26 Feb 07 jari 231         public void keyReleased(KeyEvent event) {}
2 26 Feb 07 jari 232         public void keyTyped(KeyEvent event) {}
2 26 Feb 07 jari 233     }
2 26 Feb 07 jari 234 }