Skip to content

Commit c434822

Browse files
author
Seren
committed
viewRegion instead of length used. Possible to select a SNP (draws a line in dygraph)
1 parent e5fc8f3 commit c434822

File tree

1 file changed

+81
-12
lines changed

1 file changed

+81
-12
lines changed

src/at/gmi/nordborglab/widgets/gwasgeneviewer/client/GWASGeneViewer.java

Lines changed: 81 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package at.gmi.nordborglab.widgets.gwasgeneviewer.client;
22

33
import java.util.ArrayList;
4+
import java.util.List;
45

56
import org.danvk.dygraphs.client.Dygraphs;
67
import org.danvk.dygraphs.client.Dygraphs.Options;
@@ -19,13 +20,17 @@
1920
import at.gmi.nordborglab.widgets.geneviewer.client.event.ZoomResizeHandler;
2021

2122
import com.google.gwt.core.client.GWT;
23+
import com.google.gwt.core.client.JsArray;
24+
import com.google.gwt.core.client.JsArrayInteger;
25+
import com.google.gwt.core.client.JsArrayMixed;
2226
import com.google.gwt.uibinder.client.UiBinder;
2327
import com.google.gwt.user.client.ui.Composite;
2428
import com.google.gwt.user.client.ui.HTMLPanel;
2529
import com.google.gwt.user.client.ui.Widget;
2630
import com.google.gwt.uibinder.client.UiField;
2731
import com.google.gwt.user.client.ui.Label;
2832
import com.google.gwt.visualization.client.DataTable;
33+
import com.google.gwt.visualization.client.Selection;
2934

3035
public class GWASGeneViewer extends Composite {
3136

@@ -45,10 +50,13 @@ interface ScatterGenomeChartUiBinder extends UiBinder<Widget, GWASGeneViewer> {
4550
protected String color;
4651
protected String gene_marker_color;
4752
protected int pointSize =2;
48-
protected int chr_length;
4953
protected int scatterChartHeight=200;
5054
protected DataTable dataTable;
5155
protected boolean isScatterChartLoaded = false;
56+
protected int snpPosX = -1;
57+
58+
// use instance because getSelection() does not work in onUnderlay event, because date_graph is not properly initialized
59+
protected JsArray<Selection> selections =JsArray.createArray().cast();
5260

5361
protected SelectHandler selectHandler=null;
5462
protected ClickGeneHandler clickGeneHandler = null;
@@ -62,10 +70,12 @@ interface ScatterGenomeChartUiBinder extends UiBinder<Widget, GWASGeneViewer> {
6270
protected int width = 1000;
6371
protected int geneViewerHeight = 200;
6472
protected DataSource datasource = null;
65-
73+
protected int viewStart = 0;
74+
protected int viewEnd = 0;
6675
protected ArrayList<Gene> displayGenes = new ArrayList<Gene>();
6776

6877

78+
6979

7080
public GWASGeneViewer() {
7181
initWidget(uiBinder.createAndBindUi(this));
@@ -101,7 +111,7 @@ private void initGenomeView()
101111
{
102112
try
103113
{
104-
geneViewer.setLength(chr_length);
114+
geneViewer.setViewRegion(viewStart, viewEnd);
105115
geneViewer.setSize(width - DYGRAPHOFFSET, geneViewerHeight);
106116
geneViewer.load(new Runnable() {
107117
@Override
@@ -119,7 +129,13 @@ public void onZoomResize(ZoomResizeEvent event) {
119129
});
120130
if (clickGeneHandler != null)
121131
geneViewer.addClickGeneHandler(clickGeneHandler);
132+
133+
if (minZoomLevelForGenomeView >= (viewEnd- viewStart)) {
134+
toggleGenomeViewVisible(true);
135+
geneViewer.redraw(true);
136+
}
122137
}
138+
123139
});
124140
}
125141
catch (Exception e)
@@ -131,12 +147,13 @@ public void refresh() {
131147
scatterChart.redraw();
132148
}
133149

134-
public void draw(DataTable dataTable,double max_value, int chr_length)
150+
public void draw(DataTable dataTable,double max_value, int start,int end)
135151
{
136152
this.dataTable = dataTable;
137153
this.max_value = max_value;
138-
this.chr_length = chr_length;
139-
geneViewer.setLength(chr_length);
154+
this.viewStart = start;
155+
this.viewEnd = end;
156+
geneViewer.setViewRegion(start,end);
140157
geneViewer.setChromosome(chromosome);
141158
geneViewer.setDataSource(datasource);
142159
geneViewer.setSize(width - DYGRAPHOFFSET, geneViewerHeight);
@@ -147,14 +164,22 @@ public void draw(DataTable dataTable,double max_value, int chr_length)
147164

148165
@Override
149166
public void onZoom(ZoomEvent event) {
150-
151-
if (event.maxX - event.minX<= minZoomLevelForGenomeView)
167+
int zoomLength = event.maxX - event.minX;
168+
if (zoomLength > viewEnd - viewStart)
152169
{
170+
scatterChart.setValueRangeX(viewStart, viewEnd);
153171
geneViewer.updateZoom(event.minX, event.maxX);
154-
toggleGenomeViewVisible(true);
155172
}
156173
else
157-
toggleGenomeViewVisible(false);
174+
{
175+
if (event.maxX - event.minX<= minZoomLevelForGenomeView)
176+
{
177+
geneViewer.updateZoom(event.minX, event.maxX);
178+
toggleGenomeViewVisible(true);
179+
}
180+
else
181+
toggleGenomeViewVisible(false);
182+
}
158183
}
159184
});
160185

@@ -185,7 +210,7 @@ protected void drawScatterChart()
185210
@Override
186211
public void onUnderlay(UnderlayEvent event) {
187212
for (Gene gene:displayGenes) {
188-
if (gene.getChromosome().equals(chromosome))
213+
if (gene.getChromosome().equals(chromosome) && (gene.getStart() >= viewStart || gene.getEnd() <= viewEnd))
189214
{
190215
double left = event.dygraph.toDomXCoord(gene.getStart());
191216
double right = event.dygraph.toDomXCoord(gene.getEnd());
@@ -195,14 +220,45 @@ public void onUnderlay(UnderlayEvent event) {
195220
left = left -0.5;
196221
length = 1;
197222
}
223+
event.canvas.save();
198224
event.canvas.setFillStyle(gene_marker_color);
199225
event.canvas.fillRect(left, event.area.getY(), length, event.area.getH());
226+
event.canvas.restore();
200227
}
201228
}
229+
230+
for (int i =0;i<selections.length();i++)
231+
{
232+
Selection selection = selections.get(i);
233+
double posX = event.dygraph.toDomXCoord(dataTable.getValueInt(selection.getRow(), 0));
234+
double posY = event.dygraph.toDomYCoord(dataTable.getValueDouble(selection.getRow(), 1), 0);
235+
event.canvas.save();
236+
event.canvas.beginPath();
237+
event.canvas.setFillStyle(gene_marker_color);
238+
event.canvas.fillRect(posX-0.5, posY, 1, event.area.getH());
239+
event.canvas.arc(posX, posY, 3, 0, 2*Math.PI, false);
240+
event.canvas.fill();
241+
event.canvas.restore();
242+
}
202243
}
244+
203245
},options);
204246
scatterChart.setID(chromosome);
247+
if (snpPosX > -1) {
248+
Selection selection = null;
249+
for (int i=0;i<dataTable.getNumberOfRows();i++) {
250+
if (dataTable.getValueInt(i, 0) == snpPosX) {
251+
selection = Selection.createRowSelection(i);
252+
break;
253+
}
254+
}
255+
selections.set(0, selection);
256+
}
205257
scatterChart.draw(dataTable,setOptions(options));
258+
if (selections.length() > 0)
259+
scatterChart.setSelections(selections);
260+
261+
//scatterChart.setSelections()
206262
isScatterChartLoaded = true;
207263
}
208264

@@ -220,6 +276,7 @@ protected Options setOptions(Dygraphs.Options options){
220276
options.setColors(new String[] {color});
221277
options.setMinimumDistanceForHighlight(10);
222278
options.setIncludeYPositionForHightlight(true);
279+
options.setDateWindow(viewStart, viewEnd);
223280
return options;
224281
}
225282

@@ -242,7 +299,11 @@ public void setColor(String color) {
242299

243300
public void setPointSize(int pointSize) {
244301
this.pointSize = pointSize;
245-
302+
}
303+
304+
public void setViewRegion(int start, int end) {
305+
this.viewStart = start;
306+
this.viewEnd = end;
246307
}
247308

248309
public void setWidth(int width) {
@@ -272,4 +333,12 @@ public void addClickGeneHandler(ClickGeneHandler handler) {
272333
else
273334
this.clickGeneHandler = handler;
274335
}
336+
337+
public void setSnpPosX(int snpPosX) {
338+
this.snpPosX = snpPosX;
339+
}
340+
341+
public void setGeneInfoUrl(String geneInfoUrl) {
342+
geneViewer.setGeneInfoUrl(geneInfoUrl);
343+
}
275344
}

0 commit comments

Comments
 (0)