mev-4.0.01/source/org/tigr/microarray/mev/cluster/gui/impl/tease/TEASEInfoBox.java

Code
Comments
Other
Rev Date Author Line
2 26 Feb 07 jari 1 /*
2 26 Feb 07 jari 2  * Created on Aug 26, 2005
2 26 Feb 07 jari 3  *
2 26 Feb 07 jari 4  * TODO To change the template for this generated file go to
2 26 Feb 07 jari 5  * Window - Preferences - Java - Code Style - Code Templates
2 26 Feb 07 jari 6  */
2 26 Feb 07 jari 7 package org.tigr.microarray.mev.cluster.gui.impl.tease;
2 26 Feb 07 jari 8
2 26 Feb 07 jari 9 import java.awt.Color;
2 26 Feb 07 jari 10 import java.awt.Dimension;
2 26 Feb 07 jari 11 import java.awt.Graphics;
2 26 Feb 07 jari 12
2 26 Feb 07 jari 13 import javax.swing.JLabel;
2 26 Feb 07 jari 14
2 26 Feb 07 jari 15 import org.tigr.microarray.mev.cluster.algorithm.AlgorithmData;
2 26 Feb 07 jari 16 import org.tigr.microarray.mev.cluster.algorithm.AlgorithmParameters;
2 26 Feb 07 jari 17
2 26 Feb 07 jari 18
2 26 Feb 07 jari 19 /**
2 26 Feb 07 jari 20  * @author Annie Liu
2 26 Feb 07 jari 21  * @version Aug 26, 2005
2 26 Feb 07 jari 22  *
2 26 Feb 07 jari 23  * TEASEInfoBox is representd in the viewer as a dot at the node.
2 26 Feb 07 jari 24  * info box is invoked when roll-over mouse event happen
2 26 Feb 07 jari 25  */
2 26 Feb 07 jari 26 public class TEASEInfoBox extends JLabel{
2 26 Feb 07 jari 27   
2 26 Feb 07 jari 28   public final int SIZE = 8;
2 26 Feb 07 jari 29   public static final int displayLimit = 5;
2 26 Feb 07 jari 30   public static final double defaultUpperBoundary = 0.1;
2 26 Feb 07 jari 31   public static final double defaultLowerBoundary = 0.00001;
2 26 Feb 07 jari 32
2 26 Feb 07 jari 33   private int stepSize;
2 26 Feb 07 jari 34   private float yPos;
2 26 Feb 07 jari 35   public int x;
2 26 Feb 07 jari 36   public int y;
2 26 Feb 07 jari 37   public int rootNode;
2 26 Feb 07 jari 38   private double upperBound;
2 26 Feb 07 jari 39   private double lowerBound;
2 26 Feb 07 jari 40   private boolean isCluster;
2 26 Feb 07 jari 41   private Color color;     //color of the dots, indicates the significance of the result 
2 26 Feb 07 jari 42   private String[][] matrix;   //a reference to the result matrix
2 26 Feb 07 jari 43   
2 26 Feb 07 jari 44   public TEASEInfoBox(){
2 26 Feb 07 jari 45     
2 26 Feb 07 jari 46   }
2 26 Feb 07 jari 47   
2 26 Feb 07 jari 48   /**
2 26 Feb 07 jari 49    * create an instance of TEASEInfoBox
2 26 Feb 07 jari 50    * @param x
2 26 Feb 07 jari 51    * @param y
2 26 Feb 07 jari 52    * @param matrix
2 26 Feb 07 jari 53    */
2 26 Feb 07 jari 54   public TEASEInfoBox(float x, float y, AlgorithmData data, int rootNode) {
2 26 Feb 07 jari 55     this.yPos = y;
2 26 Feb 07 jari 56     this.x = (int)x;
2 26 Feb 07 jari 57     this.rootNode = rootNode;
2 26 Feb 07 jari 58     //check if result valiable
2 26 Feb 07 jari 59     if (data == null)
2 26 Feb 07 jari 60       return;
2 26 Feb 07 jari 61
2 26 Feb 07 jari 62     AlgorithmParameters param = data.getParams();
2 26 Feb 07 jari 63
2 26 Feb 07 jari 64     this.matrix = (String[][])data.getObjectMatrix("result-matrix");
2 26 Feb 07 jari 65     this.upperBound = param.getDouble("upper-boundary");
2 26 Feb 07 jari 66     this.lowerBound = param.getDouble("lower-boundary");
2 26 Feb 07 jari 67
2 26 Feb 07 jari 68     //System.out.println("matrix is null: " + (matrix == null));
2 26 Feb 07 jari 69 //    System.out.println(matrix.length);
2 26 Feb 07 jari 70 //    System.out.println("matrix[1] is null: " + (matrix[1] == null));
2 26 Feb 07 jari 71     if (matrix != null) {
2 26 Feb 07 jari 72       if (Double.valueOf(matrix[1][matrix[1].length - 1]).doubleValue() <= 1.1) 
2 26 Feb 07 jari 73         this.isCluster = true;
2 26 Feb 07 jari 74       else 
2 26 Feb 07 jari 75         this.isCluster = false;
2 26 Feb 07 jari 76     }
2 26 Feb 07 jari 77     setColor();
2 26 Feb 07 jari 78   }
2 26 Feb 07 jari 79
2 26 Feb 07 jari 80   /**
2 26 Feb 07 jari 81    * Format the text displayed in the info box using HTML tags
2 26 Feb 07 jari 82    * @return text to be displayed in genesTree panel
2 26 Feb 07 jari 83    */
2 26 Feb 07 jari 84   public String getInfoText() {
2 26 Feb 07 jari 85     if (matrix == null)
2 26 Feb 07 jari 86       return "";
2 26 Feb 07 jari 87     
2 26 Feb 07 jari 88     String text = "<html><body bgcolor = #ffffcc><table cellspacing = 10>";
2 26 Feb 07 jari 89     int midpoint;
2 26 Feb 07 jari 90     if (isCluster)
2 26 Feb 07 jari 91       midpoint = matrix[0].length - 6;
2 26 Feb 07 jari 92     else 
2 26 Feb 07 jari 93       midpoint = matrix[0].length - 3;
2 26 Feb 07 jari 94     
2 26 Feb 07 jari 95     for (int i = 0; i < TEASEInfoBox.displayLimit; i++) {
2 26 Feb 07 jari 96       text += "<tr>";
2 26 Feb 07 jari 97       for (int j = 1; j < midpoint; j++) {
2 26 Feb 07 jari 98         text += "<td align = left>" + this.matrix[i][j] + "</td>";
2 26 Feb 07 jari 99       }
2 26 Feb 07 jari 100       text += "<td align = left><em>" + this.matrix[i][midpoint] + "</em></td>";
2 26 Feb 07 jari 101       if (isCluster)
2 26 Feb 07 jari 102         text += "<td align = right>" + matrix[i][matrix[i].length-1] + "</td>";
2 26 Feb 07 jari 103       else 
2 26 Feb 07 jari 104         text += "<td align = right>" + matrix[i][midpoint+1] +  "\t" + matrix[i][midpoint+2] + "</td>";
2 26 Feb 07 jari 105       text += "</tr>";
2 26 Feb 07 jari 106     }
2 26 Feb 07 jari 107     return text;
2 26 Feb 07 jari 108   }
2 26 Feb 07 jari 109   
2 26 Feb 07 jari 110   /**
2 26 Feb 07 jari 111    * Set the color of the dot according to the score 
2 26 Feb 07 jari 112    * @param score
2 26 Feb 07 jari 113    */
2 26 Feb 07 jari 114   public void setColor() {
2 26 Feb 07 jari 115     if (matrix == null)
2 26 Feb 07 jari 116       this.color = Color.BLACK;
2 26 Feb 07 jari 117     else if (this.isCluster) {
2 26 Feb 07 jari 118         double upperLog = Math.log(this.upperBound);
2 26 Feb 07 jari 119         double lowerLog = Math.log(this.lowerBound);
2 26 Feb 07 jari 120         double score = Math.log(Double.valueOf(this.matrix[1][this.matrix[1].length - 1]).doubleValue());
2 26 Feb 07 jari 121         double middle = (upperLog+lowerLog)/2;
2 26 Feb 07 jari 122         int distance;
2 26 Feb 07 jari 123   
2 26 Feb 07 jari 124         if (score < lowerLog) 
2 26 Feb 07 jari 125           this.color = new Color(255, 20, 0);
2 26 Feb 07 jari 126         else if (score > upperLog)
2 26 Feb 07 jari 127           this.color = new Color(0, 20, 255);
2 26 Feb 07 jari 128         else if (score < upperLog && score > middle) {
2 26 Feb 07 jari 129           distance = (int)(((upperLog - score)/(upperLog-middle)) * 255);
2 26 Feb 07 jari 130           this.color = new Color(distance, 20, 255);
2 26 Feb 07 jari 131         }
2 26 Feb 07 jari 132         else {      //between the two boundaries
2 26 Feb 07 jari 133           distance = (int)(((middle - score)/(middle-lowerLog)) * 255);
2 26 Feb 07 jari 134           this.color = new Color(255, 20, 255 - distance);
2 26 Feb 07 jari 135       }
2 26 Feb 07 jari 136     } else
2 26 Feb 07 jari 137       this.color = new Color(234, 72, 173);
2 26 Feb 07 jari 138   }
2 26 Feb 07 jari 139   
2 26 Feb 07 jari 140   /**
2 26 Feb 07 jari 141    * paint the dot
2 26 Feb 07 jari 142    * @param g
2 26 Feb 07 jari 143    * @param size
2 26 Feb 07 jari 144    */
2 26 Feb 07 jari 145   public void render(Graphics g) {
2 26 Feb 07 jari 146     this.y = (int)(this.yPos*this.stepSize + this.stepSize/2);
2 26 Feb 07 jari 147     g.setColor(this.color);
2 26 Feb 07 jari 148     //System.out.println("x = "+this.x + "  y = "+this.y);
2 26 Feb 07 jari 149     g.fillOval((int)(this.x - SIZE/2), (int)(this.y - SIZE/2), (int)SIZE, (int)SIZE);
2 26 Feb 07 jari 150   }
2 26 Feb 07 jari 151   
2 26 Feb 07 jari 152     /**
2 26 Feb 07 jari 153      * Updates the tree size with specified element size.
2 26 Feb 07 jari 154      */
2 26 Feb 07 jari 155     public void updateSize(Dimension elementSize) {
2 26 Feb 07 jari 156         if (this.stepSize == elementSize.height) {
2 26 Feb 07 jari 157           return;
2 26 Feb 07 jari 158         }
2 26 Feb 07 jari 159         this.stepSize = elementSize.height;
2 26 Feb 07 jari 160     }
2 26 Feb 07 jari 161     
2 26 Feb 07 jari 162     /**
2 26 Feb 07 jari 163      * Reset the x position when the height of the tree is adjusted
2 26 Feb 07 jari 164      * @param x
2 26 Feb 07 jari 165      */
2 26 Feb 07 jari 166     public void resetX(int x) {
2 26 Feb 07 jari 167       this.x = x;
2 26 Feb 07 jari 168     }
2 26 Feb 07 jari 169     
2 26 Feb 07 jari 170     /**
2 26 Feb 07 jari 171      * Set the score boundary to determine the color.
2 26 Feb 07 jari 172      * @param upper
2 26 Feb 07 jari 173      * @param lower
2 26 Feb 07 jari 174      */
2 26 Feb 07 jari 175     public void setColorBoundary(double upper, double lower) {
2 26 Feb 07 jari 176       this.upperBound = upper;
2 26 Feb 07 jari 177       this.lowerBound = lower;
2 26 Feb 07 jari 178       setColor();
2 26 Feb 07 jari 179     }
2 26 Feb 07 jari 180     
2 26 Feb 07 jari 181     public double getUpperBound() {
2 26 Feb 07 jari 182       return this.upperBound;
2 26 Feb 07 jari 183     }
2 26 Feb 07 jari 184     
2 26 Feb 07 jari 185     public double getLowerBound() {
2 26 Feb 07 jari 186       return this.lowerBound;
2 26 Feb 07 jari 187     }
2 26 Feb 07 jari 188     
2 26 Feb 07 jari 189     public String toString() {
2 26 Feb 07 jari 190       String text = "";
2 26 Feb 07 jari 191       text += "x = " + this.x + "  y = " + this.y;
2 26 Feb 07 jari 192       return text;
2 26 Feb 07 jari 193     }
2 26 Feb 07 jari 194   /**
2 26 Feb 07 jari 195    * @return Returns the x.
2 26 Feb 07 jari 196    */
2 26 Feb 07 jari 197   public int getX() {
2 26 Feb 07 jari 198     return x;
2 26 Feb 07 jari 199   }
2 26 Feb 07 jari 200   /**
2 26 Feb 07 jari 201    * @param x The x to set.
2 26 Feb 07 jari 202    */
2 26 Feb 07 jari 203   public void setX(int x) {
2 26 Feb 07 jari 204     this.x = x;
2 26 Feb 07 jari 205   }
2 26 Feb 07 jari 206   /**
2 26 Feb 07 jari 207    * @return Returns the y.
2 26 Feb 07 jari 208    */
2 26 Feb 07 jari 209   public int getY() {
2 26 Feb 07 jari 210     return y;
2 26 Feb 07 jari 211   }
2 26 Feb 07 jari 212   /**
2 26 Feb 07 jari 213    * @param y The y to set.
2 26 Feb 07 jari 214    */
2 26 Feb 07 jari 215   public void setY(int y) {
2 26 Feb 07 jari 216     this.y = y;
2 26 Feb 07 jari 217   }
2 26 Feb 07 jari 218   /**
2 26 Feb 07 jari 219    * @return Returns the stepSize.
2 26 Feb 07 jari 220    */
2 26 Feb 07 jari 221   public int getStepSize() {
2 26 Feb 07 jari 222     return stepSize;
2 26 Feb 07 jari 223   }
2 26 Feb 07 jari 224   /**
2 26 Feb 07 jari 225    * @param stepSize The stepSize to set.
2 26 Feb 07 jari 226    */
2 26 Feb 07 jari 227   public void setStepSize(int stepSize) {
2 26 Feb 07 jari 228     this.stepSize = stepSize;
2 26 Feb 07 jari 229   }
2 26 Feb 07 jari 230
2 26 Feb 07 jari 231   /**
2 26 Feb 07 jari 232    * @return Returns the color.
2 26 Feb 07 jari 233    */
2 26 Feb 07 jari 234   public Color getColor() {
2 26 Feb 07 jari 235     return color;
2 26 Feb 07 jari 236   }
2 26 Feb 07 jari 237   /**
2 26 Feb 07 jari 238    * @param color The color to set.
2 26 Feb 07 jari 239    */
2 26 Feb 07 jari 240   public void setColor(Color color) {
2 26 Feb 07 jari 241     this.color = color;
2 26 Feb 07 jari 242   }
2 26 Feb 07 jari 243   /**
2 26 Feb 07 jari 244    * @return Returns the isCluster.
2 26 Feb 07 jari 245    */
2 26 Feb 07 jari 246   public boolean isCluster() {
2 26 Feb 07 jari 247     return isCluster;
2 26 Feb 07 jari 248   }
2 26 Feb 07 jari 249   /**
2 26 Feb 07 jari 250    * @param isCluster The isCluster to set.
2 26 Feb 07 jari 251    */
2 26 Feb 07 jari 252   public void setCluster(boolean isCluster) {
2 26 Feb 07 jari 253     this.isCluster = isCluster;
2 26 Feb 07 jari 254   }
2 26 Feb 07 jari 255   /**
2 26 Feb 07 jari 256    * @return Returns the matrix.
2 26 Feb 07 jari 257    */
2 26 Feb 07 jari 258   public String[][] getMatrix() {
2 26 Feb 07 jari 259     return matrix;
2 26 Feb 07 jari 260   }
2 26 Feb 07 jari 261   /**
2 26 Feb 07 jari 262    * @param matrix The matrix to set.
2 26 Feb 07 jari 263    */
2 26 Feb 07 jari 264   public void setMatrix(String[][] matrix) {
2 26 Feb 07 jari 265     this.matrix = matrix;
2 26 Feb 07 jari 266   }
2 26 Feb 07 jari 267   /**
2 26 Feb 07 jari 268    * @return Returns the rootNode.
2 26 Feb 07 jari 269    */
2 26 Feb 07 jari 270   public int getRootNode() {
2 26 Feb 07 jari 271     return rootNode;
2 26 Feb 07 jari 272   }
2 26 Feb 07 jari 273   /**
2 26 Feb 07 jari 274    * @param rootNode The rootNode to set.
2 26 Feb 07 jari 275    */
2 26 Feb 07 jari 276   public void setRootNode(int rootNode) {
2 26 Feb 07 jari 277     this.rootNode = rootNode;
2 26 Feb 07 jari 278   }
2 26 Feb 07 jari 279   /**
2 26 Feb 07 jari 280    * @param lowerBound The lowerBound to set.
2 26 Feb 07 jari 281    */
2 26 Feb 07 jari 282   public void setLowerBound(double lowerBound) {
2 26 Feb 07 jari 283     this.lowerBound = lowerBound;
2 26 Feb 07 jari 284   }
2 26 Feb 07 jari 285   /**
2 26 Feb 07 jari 286    * @param upperBound The upperBound to set.
2 26 Feb 07 jari 287    */
2 26 Feb 07 jari 288   public void setUpperBound(double upperBound) {
2 26 Feb 07 jari 289     this.upperBound = upperBound;
2 26 Feb 07 jari 290   }
2 26 Feb 07 jari 291   /**
2 26 Feb 07 jari 292    * @return Returns the yPos.
2 26 Feb 07 jari 293    */
2 26 Feb 07 jari 294   public float getYPos() {
2 26 Feb 07 jari 295     return yPos;
2 26 Feb 07 jari 296   }
2 26 Feb 07 jari 297   /**
2 26 Feb 07 jari 298    * @param pos The yPos to set.
2 26 Feb 07 jari 299    */
2 26 Feb 07 jari 300   public void setYPos(float pos) {
2 26 Feb 07 jari 301     yPos = pos;
2 26 Feb 07 jari 302   }
2 26 Feb 07 jari 303 }