2 |
26 Feb 07 |
jari |
1 |
/* |
2 |
26 Feb 07 |
jari |
* Created on Aug 26, 2005 |
2 |
26 Feb 07 |
jari |
3 |
* |
2 |
26 Feb 07 |
jari |
* TODO To change the template for this generated file go to |
2 |
26 Feb 07 |
jari |
* 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 |
* @author Annie Liu |
2 |
26 Feb 07 |
jari |
* @version Aug 26, 2005 |
2 |
26 Feb 07 |
jari |
22 |
* |
2 |
26 Feb 07 |
jari |
* TEASEInfoBox is representd in the viewer as a dot at the node. |
2 |
26 Feb 07 |
jari |
* 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 |
* create an instance of TEASEInfoBox |
2 |
26 Feb 07 |
jari |
* @param x |
2 |
26 Feb 07 |
jari |
* @param y |
2 |
26 Feb 07 |
jari |
* @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 |
//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 |
//System.out.println("matrix is null: " + (matrix == null)); |
2 |
26 Feb 07 |
jari |
// System.out.println(matrix.length); |
2 |
26 Feb 07 |
jari |
// 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 |
* Format the text displayed in the info box using HTML tags |
2 |
26 Feb 07 |
jari |
* @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 |
* Set the color of the dot according to the score |
2 |
26 Feb 07 |
jari |
* @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 |
* paint the dot |
2 |
26 Feb 07 |
jari |
* @param g |
2 |
26 Feb 07 |
jari |
* @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 |
//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 |
* 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 |
* Reset the x position when the height of the tree is adjusted |
2 |
26 Feb 07 |
jari |
* @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 |
* Set the score boundary to determine the color. |
2 |
26 Feb 07 |
jari |
* @param upper |
2 |
26 Feb 07 |
jari |
* @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 |
* @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 |
* @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 |
* @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 |
* @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 |
* @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 |
* @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 |
* @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 |
* @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 |
* @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 |
* @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 |
* @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 |
* @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 |
* @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 |
* @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 |
* @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 |
* @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 |
* @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 |
* @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 |
} |