/**
*
*/
package de.uni_luebeck.inb.krabbenhoeft.eQTL.client.tracks;
import com.google.gwt.core.client.GWT;
import com.google.gwt.user.client.Window;
import com.google.gwt.user.client.rpc.AsyncCallback;
import de.uni_luebeck.inb.krabbenhoeft.eQTL.api.gwt.DataRetrieval;
import de.uni_luebeck.inb.krabbenhoeft.eQTL.api.gwt.DataRetrievalAsync;
import de.uni_luebeck.inb.krabbenhoeft.eQTL.api.gwt.ExpressionQtlTrackEntry;
import de.uni_luebeck.inb.krabbenhoeft.eQTL.api.gwt.GenomeRange;
import de.uni_luebeck.inb.krabbenhoeft.eQTL.client.scroller.GenomeDisplayTrack;
public class ExpressionQtlTrack extends GenomeDisplayTrack<ExpressionQtlTrackEntry> {
final DataRetrievalAsync dataRetrievalAsync = (DataRetrievalAsync) GWT.create(DataRetrieval.class);
private final int dataSetLayerKey;
public ExpressionQtlTrack(String label, int dataSetLayerKey, String positionColumn) {
super(label, Integer.MAX_VALUE);
this.dataSetLayerKey = dataSetLayerKey;
this.positionColumn = positionColumn;
}
private String positionColumn;
public void setPositionColumn(String value) {
positionColumn = value;
}
@Override
public void fetchData(String chromosome, long fromBP, long toBP, AsyncCallback<ExpressionQtlTrackEntry[]> callback) {
final GenomeRange genomeRange = new GenomeRange(chromosome, fromBP, toBP);
dataRetrievalAsync.getTopEntriesForRange(dataSetLayerKey, positionColumn, genomeRange, callback);
}
@Override
protected void renderBlockInternal(int topY, long fromBP, long toBP, long bpPerPixel, de.uni_luebeck.inb.krabbenhoeft.eQTL.client.scroller.GenomeDisplayTrack.Block<ExpressionQtlTrackEntry> b) {
b.bottomY = topY + 20;
b.html = "";
for (int i = 0; i < b.data.length; i++) {
ExpressionQtlTrackEntry eqtl = b.data[i];
// draw marker
long posS = (eqtl.positionStart - fromBP) / bpPerPixel;
if (posS < 0)
posS = 0;
else
posS -= 2;
long posE = (eqtl.positionEnd - fromBP) / bpPerPixel;
if (posE > 512)
posE = 512;
else
posE += 2;
int red = (int) ((1 - eqtl.lodScoreInMinMaxRange) * 255.0f);
int green = (int) (eqtl.lodScoreInMinMaxRange * 255.0f);
final String style = "background-color: rgb(" + red + "," + green + ",0);";
b.html += genBox("chr-eqtl-marker", (int) posS, topY, (int) (posE - posS), 10, style, genAutomation(fromBP, i), "");
}
}
@Override
public void onMouseClick(Object object) {
ExpressionQtlTrackEntry e = (ExpressionQtlTrackEntry) object;
Window.open("http://www.ensembl.org/Mus_musculus/Location/View?r=" + chromosome + ":" + (e.positionStart - 1000) + "-" + (e.positionEnd + 1000), "_blank", "");
}
}