2 |
26 Feb 07 |
jari |
1 |
/* |
2 |
26 Feb 07 |
jari |
Copyright @ 1999-2003, The Institute for Genomic Research (TIGR). |
2 |
26 Feb 07 |
jari |
All rights reserved. |
2 |
26 Feb 07 |
jari |
4 |
*/ |
2 |
26 Feb 07 |
jari |
5 |
/* |
2 |
26 Feb 07 |
jari |
* $RCSfile: HCLNodeHeightGraph.java,v $ |
2 |
26 Feb 07 |
jari |
* $Revision: 1.4 $ |
2 |
26 Feb 07 |
jari |
* $Date: 2006/04/10 18:41:37 $ |
2 |
26 Feb 07 |
jari |
* $Author: eleanorahowe $ |
2 |
26 Feb 07 |
jari |
* $State: Exp $ |
2 |
26 Feb 07 |
jari |
11 |
*/ |
2 |
26 Feb 07 |
jari |
12 |
|
2 |
26 Feb 07 |
jari |
13 |
package org.tigr.microarray.mev.cluster.gui.impl.tease; |
2 |
26 Feb 07 |
jari |
14 |
|
2 |
26 Feb 07 |
jari |
15 |
import java.awt.Color; |
2 |
26 Feb 07 |
jari |
16 |
import java.awt.Font; |
2 |
26 Feb 07 |
jari |
17 |
import java.awt.FontMetrics; |
2 |
26 Feb 07 |
jari |
18 |
import java.awt.Graphics; |
2 |
26 Feb 07 |
jari |
19 |
import java.awt.image.BufferedImage; |
2 |
26 Feb 07 |
jari |
20 |
import java.beans.Expression; |
2 |
26 Feb 07 |
jari |
21 |
import java.text.DecimalFormat; |
2 |
26 Feb 07 |
jari |
22 |
|
2 |
26 Feb 07 |
jari |
23 |
import javax.swing.JComponent; |
2 |
26 Feb 07 |
jari |
24 |
import javax.swing.JPanel; |
2 |
26 Feb 07 |
jari |
25 |
|
2 |
26 Feb 07 |
jari |
26 |
import org.tigr.graph.GC; |
2 |
26 Feb 07 |
jari |
27 |
import org.tigr.graph.GraphLine; |
2 |
26 Feb 07 |
jari |
28 |
import org.tigr.graph.GraphPoint; |
2 |
26 Feb 07 |
jari |
29 |
import org.tigr.graph.GraphTick; |
2 |
26 Feb 07 |
jari |
30 |
import org.tigr.graph.GraphViewer; |
2 |
26 Feb 07 |
jari |
31 |
import org.tigr.microarray.mev.cluster.gui.Experiment; |
2 |
26 Feb 07 |
jari |
32 |
import org.tigr.microarray.mev.cluster.gui.IData; |
2 |
26 Feb 07 |
jari |
33 |
import org.tigr.microarray.mev.cluster.gui.IDisplayMenu; |
2 |
26 Feb 07 |
jari |
34 |
import org.tigr.microarray.mev.cluster.gui.IFramework; |
2 |
26 Feb 07 |
jari |
35 |
import org.tigr.microarray.mev.cluster.gui.IViewer; |
2 |
26 Feb 07 |
jari |
36 |
import org.tigr.microarray.mev.cluster.gui.impl.tease.HCLTreeData; |
2 |
26 Feb 07 |
jari |
37 |
|
2 |
26 Feb 07 |
jari |
38 |
public class HCLNodeHeightGraph extends JPanel implements IViewer { |
2 |
26 Feb 07 |
jari |
39 |
GraphViewer viewer; |
2 |
26 Feb 07 |
jari |
40 |
HCLTreeData treeData; |
2 |
26 Feb 07 |
jari |
41 |
float minX; |
2 |
26 Feb 07 |
jari |
42 |
float maxX; |
2 |
26 Feb 07 |
jari |
43 |
float minY; |
2 |
26 Feb 07 |
jari |
44 |
float maxY; |
2 |
26 Feb 07 |
jari |
45 |
boolean firstView = true; |
2 |
26 Feb 07 |
jari |
46 |
DecimalFormat format; |
2 |
26 Feb 07 |
jari |
47 |
|
2 |
26 Feb 07 |
jari |
/** Creates new HCLAvalancheViewer */ |
2 |
26 Feb 07 |
jari |
49 |
public HCLNodeHeightGraph(HCLTreeData data, boolean gene) { |
2 |
26 Feb 07 |
jari |
50 |
treeData = data; |
2 |
26 Feb 07 |
jari |
51 |
initializeViewer(); |
2 |
26 Feb 07 |
jari |
52 |
} |
2 |
26 Feb 07 |
jari |
53 |
public HCLNodeHeightGraph(HCLTreeData data){ |
2 |
26 Feb 07 |
jari |
54 |
this(data, false); |
2 |
26 Feb 07 |
jari |
55 |
} |
2 |
26 Feb 07 |
jari |
56 |
/** |
2 |
26 Feb 07 |
jari |
* This constructor is used by XMLEncoder |
2 |
26 Feb 07 |
jari |
58 |
* |
2 |
26 Feb 07 |
jari |
59 |
*/ |
2 |
26 Feb 07 |
jari |
60 |
|
2 |
26 Feb 07 |
jari |
61 |
public HCLNodeHeightGraph() { } |
2 |
26 Feb 07 |
jari |
62 |
|
2 |
26 Feb 07 |
jari |
63 |
/** |
2 |
26 Feb 07 |
jari |
* @inheritDoc |
2 |
26 Feb 07 |
jari |
* @author eleanorahowe |
2 |
26 Feb 07 |
jari |
66 |
* |
2 |
26 Feb 07 |
jari |
67 |
*/ |
2 |
26 Feb 07 |
jari |
68 |
public Expression getExpression(){ |
2 |
26 Feb 07 |
jari |
69 |
return new Expression(this, this.getClass(), "new", |
2 |
26 Feb 07 |
jari |
70 |
new Object[]{this.treeData}); |
2 |
26 Feb 07 |
jari |
71 |
} |
2 |
26 Feb 07 |
jari |
72 |
|
2 |
26 Feb 07 |
jari |
73 |
private void initializeViewer(){ |
2 |
26 Feb 07 |
jari |
74 |
minX = findMinDistance(); |
2 |
26 Feb 07 |
jari |
75 |
maxX = findMaxDistance(); |
2 |
26 Feb 07 |
jari |
76 |
minY = 0; |
2 |
26 Feb 07 |
jari |
77 |
maxY = treeData.node_order.length; |
2 |
26 Feb 07 |
jari |
78 |
viewer = new GraphViewer(null, (int)minX, (int)maxX, (int)minY, (int)maxY, minX, maxX, minY, maxY, |
2 |
26 Feb 07 |
jari |
79 |
50, 50, 50, 50, "Node Heights", "Distance", "Number of Terminal Nodes"); |
2 |
26 Feb 07 |
jari |
80 |
|
2 |
26 Feb 07 |
jari |
81 |
viewer.setYAxisValue(minX); |
2 |
26 Feb 07 |
jari |
82 |
viewer.setXAxisValue(minY); |
2 |
26 Feb 07 |
jari |
83 |
viewer.setShowCoordinates(true); |
2 |
26 Feb 07 |
jari |
84 |
|
2 |
26 Feb 07 |
jari |
/* public GraphViewer(JFrame frame, int startx, int stopx, int starty, int stopy, |
2 |
26 Feb 07 |
jari |
double graphstartx, double graphstopx, double graphstarty, double graphstopy, |
2 |
26 Feb 07 |
jari |
int preXSpacing, int postXSpacing, int preYSpacing, int postYSpacing, |
2 |
26 Feb 07 |
jari |
String title, String xLabel, String yLabel) |
2 |
26 Feb 07 |
jari |
89 |
*/ |
2 |
26 Feb 07 |
jari |
90 |
enterGraphData(); |
2 |
26 Feb 07 |
jari |
91 |
} |
2 |
26 Feb 07 |
jari |
92 |
|
2 |
26 Feb 07 |
jari |
93 |
/** |
2 |
26 Feb 07 |
jari |
* finds min dist in tree, initializes zeroThreshold |
2 |
26 Feb 07 |
jari |
95 |
*/ |
2 |
26 Feb 07 |
jari |
96 |
private float findMinDistance(){ |
2 |
26 Feb 07 |
jari |
97 |
float min = Float.POSITIVE_INFINITY; |
2 |
26 Feb 07 |
jari |
98 |
for(int i = 0; i < treeData.height.length;i++){ |
2 |
26 Feb 07 |
jari |
99 |
min = Math.min(min, treeData.height[i]); |
2 |
26 Feb 07 |
jari |
100 |
} |
2 |
26 Feb 07 |
jari |
101 |
return min; |
2 |
26 Feb 07 |
jari |
102 |
} |
2 |
26 Feb 07 |
jari |
103 |
|
2 |
26 Feb 07 |
jari |
104 |
/** |
2 |
26 Feb 07 |
jari |
* Returns min height of the tree nodes. |
2 |
26 Feb 07 |
jari |
106 |
*/ |
2 |
26 Feb 07 |
jari |
107 |
private float findMaxDistance() { |
2 |
26 Feb 07 |
jari |
108 |
float max = Float.MIN_VALUE; |
2 |
26 Feb 07 |
jari |
109 |
for (int i=0; i<treeData.node_order.length-1; i++) { |
2 |
26 Feb 07 |
jari |
110 |
max = Math.max(max, treeData.height[treeData.node_order[i]]); |
2 |
26 Feb 07 |
jari |
111 |
} |
2 |
26 Feb 07 |
jari |
112 |
return max; |
2 |
26 Feb 07 |
jari |
113 |
} |
2 |
26 Feb 07 |
jari |
114 |
|
2 |
26 Feb 07 |
jari |
115 |
private void enterGraphData(){ |
2 |
26 Feb 07 |
jari |
116 |
int [] nodeOrder = this.treeData.node_order; |
2 |
26 Feb 07 |
jari |
117 |
float [] height = this.treeData.height; |
2 |
26 Feb 07 |
jari |
118 |
double nodeHeight = 0d; |
2 |
26 Feb 07 |
jari |
119 |
double terminalNodes = nodeOrder.length; |
2 |
26 Feb 07 |
jari |
120 |
int numberOfNodes = (int)terminalNodes; |
2 |
26 Feb 07 |
jari |
121 |
|
2 |
26 Feb 07 |
jari |
122 |
if(nodeOrder.length>1){ |
2 |
26 Feb 07 |
jari |
123 |
viewer.addGraphElement(new GraphLine(minX, terminalNodes, height[nodeOrder[0]], terminalNodes, Color.black)); |
2 |
26 Feb 07 |
jari |
124 |
viewer.addGraphElement(new GraphLine(height[nodeOrder[0]], terminalNodes, height[nodeOrder[0]], terminalNodes-1, Color.blue)); |
2 |
26 Feb 07 |
jari |
125 |
} |
2 |
26 Feb 07 |
jari |
126 |
|
2 |
26 Feb 07 |
jari |
127 |
for(int i = 0; i < nodeOrder.length; i++){ |
2 |
26 Feb 07 |
jari |
128 |
if(nodeOrder[i] > -1){ |
2 |
26 Feb 07 |
jari |
129 |
nodeHeight = height[nodeOrder[i]]; |
2 |
26 Feb 07 |
jari |
//System.out.println("i= "+i+" ,nodeOrder = "+nodeOrder[i]+" ,nodeHeight = "+ nodeHeight);//**************************** |
2 |
26 Feb 07 |
jari |
terminalNodes--; |
2 |
26 Feb 07 |
jari |
viewer.addGraphElement(new GraphPoint(nodeHeight, terminalNodes, Color.blue, 2)); |
2 |
26 Feb 07 |
jari |
if(i+1<nodeOrder.length && nodeOrder[i+1] > -1){ |
2 |
26 Feb 07 |
jari |
viewer.addGraphElement(new GraphLine(nodeHeight, terminalNodes, height[nodeOrder[i+1]], terminalNodes, Color.black)); |
2 |
26 Feb 07 |
jari |
viewer.addGraphElement(new GraphLine(height[nodeOrder[i+1]], terminalNodes, height[nodeOrder[i+1]], terminalNodes-1, Color.blue)); |
2 |
26 Feb 07 |
jari |
136 |
|
2 |
26 Feb 07 |
jari |
137 |
} |
2 |
26 Feb 07 |
jari |
138 |
|
2 |
26 Feb 07 |
jari |
139 |
} |
2 |
26 Feb 07 |
jari |
140 |
} |
2 |
26 Feb 07 |
jari |
141 |
|
2 |
26 Feb 07 |
jari |
format = new java.text.DecimalFormat(); |
2 |
26 Feb 07 |
jari |
format.setMaximumFractionDigits(2); |
2 |
26 Feb 07 |
jari |
144 |
|
2 |
26 Feb 07 |
jari |
for(int i = 0; i < 10 ; i++){ |
2 |
26 Feb 07 |
jari |
146 |
|
2 |
26 Feb 07 |
jari |
if(minX >= 0) |
2 |
26 Feb 07 |
jari |
viewer.addGraphElement(new GraphTick((maxX-minX)/10 * i, 5, Color.black, GC.HORIZONTAL, GC.C, String.valueOf(format.format((maxX-minX)/10 * i)), Color.black)); |
2 |
26 Feb 07 |
jari |
else |
2 |
26 Feb 07 |
jari |
viewer.addGraphElement(new GraphTick(minX + (maxX-minX)/10 * i, 5, Color.black, GC.HORIZONTAL, GC.C, String.valueOf(format.format(minX + (maxX-minX)/10 * i)), Color.black)); |
2 |
26 Feb 07 |
jari |
151 |
|
2 |
26 Feb 07 |
jari |
viewer.addGraphElement(new GraphTick(nodeOrder.length/10 * i, 5, Color.black, GC.VERTICAL, GC.C, String.valueOf(nodeOrder.length/10 * i), Color.black)); |
2 |
26 Feb 07 |
jari |
153 |
|
2 |
26 Feb 07 |
jari |
154 |
} |
2 |
26 Feb 07 |
jari |
155 |
|
2 |
26 Feb 07 |
jari |
156 |
|
2 |
26 Feb 07 |
jari |
/* for(int i = height.length - nodeOrder.length; i < height.length; i++){ |
2 |
26 Feb 07 |
jari |
nodeHeight = height[this.treeData.node_order[i]]; |
2 |
26 Feb 07 |
jari |
terminalNodes -=i; |
2 |
26 Feb 07 |
jari |
viewer.addGraphPoint(nodeHeight, terminalNodes); |
2 |
26 Feb 07 |
jari |
161 |
} |
2 |
26 Feb 07 |
jari |
162 |
*/ |
2 |
26 Feb 07 |
jari |
163 |
|
2 |
26 Feb 07 |
jari |
164 |
} |
2 |
26 Feb 07 |
jari |
165 |
|
2 |
26 Feb 07 |
jari |
166 |
/** |
2 |
26 Feb 07 |
jari |
* Invoked by the framework when this viewer was deselected. |
2 |
26 Feb 07 |
jari |
168 |
*/ |
2 |
26 Feb 07 |
jari |
169 |
public void onDeselected() { |
2 |
26 Feb 07 |
jari |
170 |
} |
2 |
26 Feb 07 |
jari |
171 |
|
2 |
26 Feb 07 |
jari |
172 |
/** |
2 |
26 Feb 07 |
jari |
* Invoked by the framework when data is changed, |
2 |
26 Feb 07 |
jari |
* if this viewer is selected. |
2 |
26 Feb 07 |
jari |
* @see IData |
2 |
26 Feb 07 |
jari |
176 |
*/ |
2 |
26 Feb 07 |
jari |
177 |
public void onDataChanged(IData data) { |
2 |
26 Feb 07 |
jari |
178 |
} |
2 |
26 Feb 07 |
jari |
179 |
|
2 |
26 Feb 07 |
jari |
180 |
/** |
2 |
26 Feb 07 |
jari |
* Invoked when the framework is going to be closed. |
2 |
26 Feb 07 |
jari |
182 |
*/ |
2 |
26 Feb 07 |
jari |
183 |
public void onClosed() { |
2 |
26 Feb 07 |
jari |
184 |
} |
2 |
26 Feb 07 |
jari |
185 |
|
2 |
26 Feb 07 |
jari |
186 |
/** |
2 |
26 Feb 07 |
jari |
* Returns a component to be inserted into scroll pane view port. |
2 |
26 Feb 07 |
jari |
188 |
*/ |
2 |
26 Feb 07 |
jari |
189 |
public JComponent getContentComponent() { |
2 |
26 Feb 07 |
jari |
190 |
return viewer; |
2 |
26 Feb 07 |
jari |
191 |
} |
2 |
26 Feb 07 |
jari |
192 |
|
2 |
26 Feb 07 |
jari |
193 |
|
2 |
26 Feb 07 |
jari |
194 |
/** |
2 |
26 Feb 07 |
jari |
* Invoked by the framework to save or to print viewer image. |
2 |
26 Feb 07 |
jari |
196 |
*/ |
2 |
26 Feb 07 |
jari |
197 |
public BufferedImage getImage() { |
2 |
26 Feb 07 |
jari |
198 |
return null; |
2 |
26 Feb 07 |
jari |
199 |
} |
2 |
26 Feb 07 |
jari |
200 |
|
2 |
26 Feb 07 |
jari |
201 |
/** |
2 |
26 Feb 07 |
jari |
* Invoked by the framework when this viewer is selected. |
2 |
26 Feb 07 |
jari |
203 |
*/ |
2 |
26 Feb 07 |
jari |
204 |
public void onSelected(IFramework framework) { |
2 |
26 Feb 07 |
jari |
205 |
if(firstView && this.viewer.isVisible()){ |
2 |
26 Feb 07 |
jari |
206 |
Graphics g = viewer.getGraphics(); |
2 |
26 Feb 07 |
jari |
207 |
FontMetrics metrics = g.getFontMetrics(new Font("SansSerif", Font.BOLD, 10)); |
2 |
26 Feb 07 |
jari |
208 |
int preX = metrics.stringWidth(String.valueOf(format.format(this.maxX))); |
2 |
26 Feb 07 |
jari |
209 |
int preY = metrics.stringWidth(String.valueOf(format.format(this.maxY))); |
2 |
26 Feb 07 |
jari |
210 |
metrics = g.getFontMetrics(new Font("SansSerif", Font.BOLD, 12)); |
2 |
26 Feb 07 |
jari |
211 |
preX += metrics.getHeight(); |
2 |
26 Feb 07 |
jari |
212 |
preY += metrics.getHeight(); |
2 |
26 Feb 07 |
jari |
213 |
this.viewer.setPreXSpacing(preY+10); |
2 |
26 Feb 07 |
jari |
214 |
this.viewer.setPostYSpacing(preX+20); |
2 |
26 Feb 07 |
jari |
215 |
firstView = false; |
2 |
26 Feb 07 |
jari |
216 |
} |
2 |
26 Feb 07 |
jari |
217 |
} |
2 |
26 Feb 07 |
jari |
218 |
|
2 |
26 Feb 07 |
jari |
219 |
/** |
2 |
26 Feb 07 |
jari |
* Invoked by the framework when display menu is changed, |
2 |
26 Feb 07 |
jari |
* if this viewer is selected. |
2 |
26 Feb 07 |
jari |
* @see IDisplayMenu |
2 |
26 Feb 07 |
jari |
223 |
*/ |
2 |
26 Feb 07 |
jari |
224 |
public void onMenuChanged(IDisplayMenu menu) { |
2 |
26 Feb 07 |
jari |
225 |
} |
2 |
26 Feb 07 |
jari |
226 |
|
2 |
26 Feb 07 |
jari |
227 |
/** |
2 |
26 Feb 07 |
jari |
* Returns a component to be inserted into scroll pane header. |
2 |
26 Feb 07 |
jari |
229 |
*/ |
2 |
26 Feb 07 |
jari |
230 |
public JComponent getHeaderComponent() { |
2 |
26 Feb 07 |
jari |
231 |
return null; |
2 |
26 Feb 07 |
jari |
232 |
} |
2 |
26 Feb 07 |
jari |
233 |
|
2 |
26 Feb 07 |
jari |
/** Returns a component to be inserted into the scroll pane row header |
2 |
26 Feb 07 |
jari |
235 |
*/ |
2 |
26 Feb 07 |
jari |
236 |
public JComponent getRowHeaderComponent() { |
2 |
26 Feb 07 |
jari |
237 |
return null; |
2 |
26 Feb 07 |
jari |
238 |
} |
2 |
26 Feb 07 |
jari |
239 |
|
2 |
26 Feb 07 |
jari |
/** Returns the corner component corresponding to the indicated corner, |
2 |
26 Feb 07 |
jari |
* posibly null |
2 |
26 Feb 07 |
jari |
242 |
*/ |
2 |
26 Feb 07 |
jari |
243 |
public JComponent getCornerComponent(int cornerIndex) { |
2 |
26 Feb 07 |
jari |
244 |
return null; |
2 |
26 Feb 07 |
jari |
245 |
} |
2 |
26 Feb 07 |
jari |
246 |
|
2 |
26 Feb 07 |
jari |
247 |
public void setViewer(GraphViewer val){ |
2 |
26 Feb 07 |
jari |
248 |
viewer = val; |
2 |
26 Feb 07 |
jari |
249 |
} |
2 |
26 Feb 07 |
jari |
250 |
public GraphViewer getViewer(){ |
2 |
26 Feb 07 |
jari |
251 |
return viewer; |
2 |
26 Feb 07 |
jari |
252 |
} |
2 |
26 Feb 07 |
jari |
253 |
|
2 |
26 Feb 07 |
jari |
/** Returns the viewer's clusters or null |
2 |
26 Feb 07 |
jari |
255 |
*/ |
2 |
26 Feb 07 |
jari |
256 |
public int[][] getClusters() { |
2 |
26 Feb 07 |
jari |
257 |
return null; |
2 |
26 Feb 07 |
jari |
258 |
} |
2 |
26 Feb 07 |
jari |
259 |
|
2 |
26 Feb 07 |
jari |
/** Returns the viewer's experiment or null |
2 |
26 Feb 07 |
jari |
261 |
*/ |
2 |
26 Feb 07 |
jari |
262 |
public Experiment getExperiment() { |
2 |
26 Feb 07 |
jari |
263 |
return null; |
2 |
26 Feb 07 |
jari |
264 |
} |
2 |
26 Feb 07 |
jari |
265 |
|
2 |
26 Feb 07 |
jari |
266 |
public void setExperiment(Experiment e) { |
2 |
26 Feb 07 |
jari |
// this.exptID = e.getId(); |
2 |
26 Feb 07 |
jari |
268 |
} |
2 |
26 Feb 07 |
jari |
269 |
public int getExperimentID() {return 0;} |
2 |
26 Feb 07 |
jari |
270 |
public void setExperimentID(int id) {} |
2 |
26 Feb 07 |
jari |
271 |
|
2 |
26 Feb 07 |
jari |
/** Returns int value indicating viewer type |
2 |
26 Feb 07 |
jari |
* Cluster.GENE_CLUSTER, Cluster.EXPERIMENT_CLUSTER, or -1 for both or unspecified |
2 |
26 Feb 07 |
jari |
274 |
*/ |
2 |
26 Feb 07 |
jari |
275 |
public int getViewerType() { |
2 |
26 Feb 07 |
jari |
276 |
return -1; |
2 |
26 Feb 07 |
jari |
277 |
} |
2 |
26 Feb 07 |
jari |
278 |
|
2 |
26 Feb 07 |
jari |
279 |
|
2 |
26 Feb 07 |
jari |
280 |
} |