diff --git a/VQI_GenomeBrowser.js b/VQI_GenomeBrowser.js
index 618a3e4..7a536f2 100644
--- a/VQI_GenomeBrowser.js
+++ b/VQI_GenomeBrowser.js
@@ -14,29 +14,35 @@ function VQI_GenomeBrowser(id) {
var chromosomes = [];
var thisObj = this;
var chrom_curr = "chr1";
- var indexArray = {chr: 0, start: 1, end: 2, name: 3, type: 3, score: 4, strand: 5, options: 6};
+ var indexArray = {chr: 0, start: 1, end: 2, name: 3, type: 3, score: 4, strand: 5, options: 6, exonStarts: 9, exonEnds: 10};
// $("#" + id).append("
CPG:Shore:Shelve:
");
d3.select("#" + id).append("div").text("Chromosome: ")
- var select = d3.select("#" + id)
+ var chromosomeSelect = d3.select("#" + id)
.append("div")
.append("select")
.on("change", function (d) {
- graph(select.property("value"));
+ graph(chromosomeSelect.property("value"));
});
d3.select("#" + id).append("div").text("Start: ")
var minNumber = d3.select("#" + id)
.append("input")
.attr("type", "number")
- .property("value", 0);
+ .property("value", 0)
+ .on("change", function () {
+ setBounds(minNumber.property("value"), maxNumber.property("value"))
+ });
d3.select("#" + id).append("div").text("End: ")
var maxNumber = d3.select("#" + id)
.append("input")
.attr("type", "number")
- .property("value", 0);
+ .property("value", 0)
+ .on("change", function () {
+ setBounds(minNumber.property("value"), maxNumber.property("value"))
+ });
var colocalize = function () {
@@ -105,13 +111,13 @@ function VQI_GenomeBrowser(id) {
var self = this;
- var graphButton = d3.select("#" + id)
+ /*var graphButton = d3.select("#" + id)
.append("input")
.attr("type", "button")
.attr("value", "Graph")
.on("click", function () {
graph(select.property("value"), minNumber.property("value"), maxNumber.property("value"))
- });
+ });*/
this.svg = d3.select("#" + id)
.append("svg")
@@ -139,9 +145,17 @@ function VQI_GenomeBrowser(id) {
var zoom = d3.behavior.zoom();
+ //Just a line
+ svg.append("line")
+ .attr("x1", margin)
+ .attr("y1", height / 2 + margin + 20)
+ .attr("x2", width + margin)
+ .attr("y2", height / 2 + margin + 20)
+ .style("stroke", "blue");
+
//set up tool tips
- var tip = d3.tip()
+ /* var tip = d3.tip()
.attr('class', 'd3-tip')
.offset([-20, 0])
.html(function (d) {
@@ -155,7 +169,7 @@ function VQI_GenomeBrowser(id) {
+ "(" + d[indexArray.chr] + " : " + d[indexArray.start] + " - " + d[indexArray.end] + ")" + "";
});
- svg.call(tip);
+ svg.call(tip);*/
d3.selectAll(".d3-tip").style({
"line-height": "1",
@@ -190,62 +204,30 @@ function VQI_GenomeBrowser(id) {
"font-size": "11px"});
}
- var graph = function (chromosome, min, max) {
- var indexList = indexArray;
- //Graphs the current chromosome. If min and max are specified, graph only in that range.
- //Otherwise, graphs the whole chromosome
- var self = this;
-
- var currentData;
- var xMax = 0;
- var xMin = 0;
-
- //Populates drop down list with different chromosomes
- select.selectAll("option")
- .data(chromosomes)
- .enter()
- .append("option")
- .attr("value", function (d) {
- return d;
- })
- .text(function (d) {
- return d;
- })
- chrom_curr = chromosome;
-
- //Gets relevant data and calculates min/max if needed
- if (min == null || max == null) {
- currentData = genomeData.filter(function (d) {
- return d[indexList.chr] == chromosome
- });
-
- xMax = d3.max(currentData, function (d) {
- return d[indexList.end]
- });
- xMin = d3.min(currentData, function (d) {
- return d[indexList.start]
- });
- minNumber.property("value", xMin);
- maxNumber.property("value", xMax);
- }
- else {
- currentData = genomeData.filter(function (d) {
- return d.chromosome == chromosome && d[indexList.start] >= min && d[indexList.end] <= max
- });
- xMax = Number(max);
- xMin = Number(min);
- }
+ var setBounds = function(min, max){
+ var xMax = Number(max);
+ var xMin = Number(min);
xScale.domain([xMin - (xMax - xMin) * 1 / 10, xMax + (xMax - xMin) * 1 / 10])
.range([margin, width + margin]);
xAxisSelection.call(xAxis);
- zoom.x(xScale)
- .on("zoom", zoomed.bind(self));
+ svg.selectAll("rect")
+ .attr("width", function (d) {
+ return xScale(d[indexArray.end]) - xScale(d[indexArray.start])
+ })
+ .attr("x", function (d) {
+ return xScale(d[indexArray.start])
+ })
+
+ zoom.x(xScale).on("zoom", zoomed);
svg.call(zoom);
+ minNumber.property("value", xMin);
+ maxNumber.property("value", xMax);
+
d3.selectAll(".axis path, .axis line").style({
"fill": "none",
"stroke": "black",
@@ -254,28 +236,54 @@ function VQI_GenomeBrowser(id) {
d3.selectAll(".axis text").style({
"font-family": "sans-serif",
"font-size": "11px"});
+ }
- //Just a line
- svg.append("line")
- .attr("x1", margin)
- .attr("y1", height / 2 + margin + 20)
- .attr("x2", width + margin)
- .attr("y2", height / 2 + margin + 20)
- .style("stroke", "blue");
+ var graph = function (chromosome) {
+ var indexList = indexArray;
+ var self = this;
+ var currentData;
+
+ //Populates drop down list with different chromosomes
+ chromosomeSelect.selectAll("option")
+ .data(chromosomes)
+ .enter()
+ .append("option")
+ .attr("value", function (d) {
+ return d;
+ })
+ .text(function (d) {
+ return d;
+ })
+ chrom_curr = chromosome;
+
+ //Gets relevant data and calculates min/max if needed
+ currentData = genomeData.filter(function (d) {
+ return d[indexList.chr] == chromosome
+ });
+
+ var xMax = d3.max(currentData, function (d) {
+ return d[indexList.end]
+ });
+ var xMin = d3.min(currentData, function (d) {
+ return d[indexList.start]
+ });
+
+ setBounds(xMin,xMax);
svg.selectAll("rect")
- .data(currentData)
+ .data(currentData, function(d){return d;})
.exit()
.remove();
svg.selectAll("rect")
- .data(currentData)
+ .data(currentData, function(d){return d;})
.enter()
.append("rect");
svg.selectAll("rect")
+ .data(currentData, function(d){return d;})
.style("fill-opacity", ".4")
.style("stroke", function (d) {
var type = d[indexList.type];
@@ -300,8 +308,8 @@ function VQI_GenomeBrowser(id) {
var offset = type == "cpg" ? 0 : type == "shore" ? 10 : 12.5;
return height / 2 + margin + offset
})
- .on('mouseover', tip.show)
- .on('mouseout', tip.hide);
+ //.on('mouseover', tip.show)
+ //.on('mouseout', tip.hide);
for (var i in trackList) {
addOneTrack(trackList[i], trackList[i]['name'], i);
@@ -335,15 +343,22 @@ function VQI_GenomeBrowser(id) {
svg.attr("height", height + 2 * margin + ySpace);
var thisY = height / 2 + margin + 20 + ySpace;
+
if (!i) {
- svg.append("line")
+ svg.selectAll("line")
+ .data([name], function (d) {return d;})
+ .enter()
+ .append("line")
.attr("x1", margin)
.attr("y1", height / 2 + margin + 20 + ySpace)
.attr("x2", width + margin)
.attr("y2", height / 2 + margin + 20 + ySpace)
.style("stroke-width", 1)
.style("stroke", "black");
- svg.append("text")
+ svg.selectAll("text")
+ .data([name], function (d) {return d;})
+ .enter()
+ .append("text")
.attr("x", 0)
.attr("y", thisY - 10)
.attr("font-family", "sans-serif")
@@ -352,8 +367,8 @@ function VQI_GenomeBrowser(id) {
.text(name);
}
// test.addTrack({start:20000000, end:20000100})
- var tracks = svg.selectAll("track")
- .data(thisData)
+ var tracks = svg.selectAll("tracks")
+ .data(thisData, function (d) {return d;})
.enter()
.append("rect");
var rectAttributes = tracks
@@ -373,9 +388,55 @@ function VQI_GenomeBrowser(id) {
})
.style("fill-opacity", ".4")
.style("stroke", "blue")
- .style("fill", "green")
- .on('mouseover', tip.show)
- .on('mouseout', tip.hide);
+ .style("fill", "green");
+
+ var exons = [];
+
+ $.each(thisData, function (index, value) {
+
+ value[indexArray.exonStarts] = value[indexArray.exonStarts].slice(1,value[indexArray.exonStarts].length - 2).split(",");
+ value[indexArray.exonEnds] = value[indexArray.exonEnds].slice(1,value[indexArray.exonEnds].length - 2).split(",");
+
+ for(var i = 0; i < value[indexArray.exonStarts].length; i++)
+ {
+
+ var exon = value.slice(0);
+ exon[indexArray.start] = parseInt(exon[indexArray.exonStarts][i]);
+ exon[indexArray.end] = parseInt(exon[indexArray.exonEnds][i]);
+ exons.push(exon);
+ if(index == 1)
+ {
+ console.log(exon);
+ }
+
+ }
+ });
+
+ var exonRect = svg.selectAll("tracks")
+ .data(exons, function (d) {return d;})
+ .enter()
+ .append("rect");
+ var exonRectAttributes = exonRect
+ .attr("x", function (d) {
+ return xScale(d[index.start]);
+ })
+ .attr("y", function (d) {
+
+ return thisY - fHeight;
+ })
+ .attr("height", function (d) {
+ return fHeight*2;
+ })
+ .attr("width", function (d) {
+// return 50;
+ return xScale(d[index.end]) - xScale(d[index.start]);
+ })
+ .style("fill-opacity", ".4")
+ .style("stroke", "blue")
+ .style("fill", "blue");
+
+ //.on('mouseover', tip.show)
+ //.on('mouseout', tip.hide);
// .tipsy({
// gravity: 'w',
// html: true,
@@ -389,8 +450,12 @@ function VQI_GenomeBrowser(id) {
html: true,
title: function () {
var d = this.__data__;
+ var strand = "";
+ if (d.length > indexArray.strand) {
+ strand = " (" + d[indexArray.strand] + ")";
+ }
// , c = colors(d.i);
- return d[indexArray.name] + " (" + d[indexArray.chr] + " : " + d[indexArray.start] + " - " + d[indexArray.end] + ")";
+ return d[indexArray.name] + strand + " (" + d[indexArray.chr] + " : " + d[indexArray.start] + " - " + d[indexArray.end] + ")";
}
});
// .text(function (d) {
@@ -428,7 +493,7 @@ function VQI_GenomeBrowser(id) {
return genomeData;
}
- var submitFile = function () {
+ /* var submitFile = function () {
genomeData = [];
chromosomes = [];
var file_dir = "./saved-data/";
@@ -504,7 +569,7 @@ function VQI_GenomeBrowser(id) {
}
d3.select("#" + id + " #submit").on("click", submitFile.bind(this));
-// submitFile();
+// submitFile();*/
this.loadCPGFiles = function (cpg, shoer, shelf) {
genomeData = [];