Genome browser for phamerator.org
forked from scresawn's block: genome browser
forked from Wanagram's block: genome browser
xxxxxxxxxx
<had>
<meta charset="utf-8">
<script src="https://cdnjs.cloudflare.com/ajax/libs/d3/3.5.5/d3.min.js"></script>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.0/jquery.min.js"></script>
</head>
<body>
<script>
//jQuery
var maxLength= 0;
window.addEventListener('load', function () {
$.getJSON("genes.json.txt", function(data){
for(i=0; i < data.length; i++){
if(data[i].stop > maxLength){
maxLength = data[i].stop;
}
}
genomelength = maxLength + maxLength/50;
//Tick mark object
var tickMarks = {thousand: [], fivehundred: [], onehundred: []};
//Array with numbers from 1->genomelength
var genome_positions = [];
for (var i = 1; i <= genomelength; i++) {
genome_positions.push(i);
}
//Creates 1000, 500 and 100 bp ticks
genome_positions.forEach(function(currentValue, index, myArray){
if (currentValue % 1000 === 0) {
tickMarks.thousand.push(currentValue);
}
else if (currentValue % 500 === 0) {
tickMarks.fivehundred.push(currentValue);
}
else if (currentValue % 100 === 0) {
tickMarks.onehundred.push(currentValue);
}
});
var svg = d3.select("body").append("svg").attr({height: 500,width: genomelength/10});
svg.append("g")
.append("rect")
.attr({x: 0, y: 100, width: genomelength/10, height: 30})
.style({"stroke-width": "2px", "fill": "white", "stroke": "black"});
d3.json("genes.json.txt", function(error, json) {
if (error) return console.warn(error);
// var jsonData = svg.selectAll(".genes")
// .data(json)
// .enter();
var rects = svg.selectAll(".genes")
.data(json)
.enter()
.append("rect");
var rectAttributes = rects
.attr("x", function (d) { return d.start/10; })
.attr("width", function (d) { return (d.stop-d.start)/10; })
.style({"stroke":"black", "stroke-width": "2px", "fill-opacity":0.5})
.attr("y", function (d) {
if(d.direction == "reverse" && d.name%2==0){
return 130
}
else if(d.direction == "reverse" && d.name%2!=0){
return 160
}
else if(d.direction == "forward" && d.name%2!=0){
return 70
}
else{
return 40
};
})
.attr("height", function (d) {return 30;})
.style({"fill": function(d) {if(d.direction == "forward"){
return "green"}
else if(d.direction == "reverse"){
return "red"
}
}})
var text = svg.selectAll(".genes")
.data(json)
.enter()
.append("text");
var texts = text
.text(function(d){return d.name})
.attr("y", function(d){
if(d.direction == "reverse" && d.name%2==0){
return 150
}
else if(d.direction == "reverse" && d.name%2!=0){
return 180
}
else if(d.direction == "forward" && d.name%2!=0){
return 90
}
else{
return 60
}
})
.attr("x", function(d) {return ((d.start+(d.stop-d.start)/2)/10)})
.attr("font-size", "20px")
});
var group = svg.selectAll(".a")
.data(tickMarks.thousand)
.enter()
.append("g");
group.append("rect")
.style({"fill": "black"})
.attr({x: 0, y: 100, width: "1px", height: 30})
.attr("transform", function (d) { return "translate(" + d/10 + ",0)"; });
group.append("text")
.text(function(d){return d/1000})
.attr("x", function (d){return d/10 })
.attr("y",110)
var group2 = svg.selectAll(".b")
.data(tickMarks.fivehundred)
.enter()
.append("g");
group2.append("rect")
.style({"fill": "black"})
.attr({x: 0, y: 100, width: "1px", height: 15})
.attr("transform", function (d) { return "translate(" + d/10 + ",0)"; });
var group3 = svg.selectAll(".c")
.data(tickMarks.onehundred)
.enter()
.append("g");
group3.append("rect")
.style({"fill": "black"})
.attr({x: 0, y: 115, width: "1px", height: 15})
.attr("transform", function (d) { return "translate(" + d/10 + ",0)"; });
}
)
}, false);
</script>
</body>
https://cdnjs.cloudflare.com/ajax/libs/d3/3.5.5/d3.min.js
https://ajax.googleapis.com/ajax/libs/jquery/1.12.0/jquery.min.js