diff --git a/VQI_GenomeBrowser.js b/VQI_GenomeBrowser.js
index 840aea6..ddc3f4c 100755
--- a/VQI_GenomeBrowser.js
+++ b/VQI_GenomeBrowser.js
@@ -26,6 +26,10 @@ function VQI_GenomeBrowser(id) {
var isready = false;
var zoomOnly = false;
+ var trackInfo = [];
+ trackInfo[0] = {name: "HG19", type: "bed", fileHandle: "upload1436481988"};
+ trackInfo[1] = {name: "Tile2 Content Snp", type: "bed", fileHandle: "upload1436411775"};
+
// $("#" + id).append("
CPG:Shore:Shelve:
");
// d3.select("#" + id).append("div").text("Chromosome: ")
@@ -471,6 +475,7 @@ function VQI_GenomeBrowser(id) {
};
var updateTrack = function(){
+
if (isready){
//console.log(trackList);
@@ -487,25 +492,35 @@ function VQI_GenomeBrowser(id) {
var chrom = "chr1";
$.ajax({
- url: 'http://localhost/dynamic_loading.php',
+ url: 'dynamic_loading.php',
type: 'POST',
dataType: "json",
data: {
- "getHG19Data": "",
- "fileHandle": fileHandle,
+ "getTrackData": "",
+ "fileHandles": [trackInfo[0].fileHandle,trackInfo[1].fileHandle],
+ "name": [trackInfo[0].name,trackInfo[1].name],
"chrom": chrom,
"start": start,
"end": end
}
}).success(function (returnData) {
-
+ console.log(returnData);
var i = getTrackIndexByName("HG19");
- trackList[i] = returnData;
+ trackList[i] = returnData[0][0];
trackList[i]['name'] = "HG19";
- trackList['type'] = "bed";
+ trackList[i]['type'] = "bed";
+ //console.log(trackList);
+ addBEDTrack(returnData[0][0], "HG19",returnData[0][1]);
+
+ var i = getTrackIndexByName("Tile2 Content Snp");
+ trackList[i] = returnData[1];
+ trackList[i]['name'] = "Tile2 Content Snp";
+ trackList[i]['type'] = "bed";
//console.log(trackList);
- addBEDTrack(returnData, "HG19");
+ addBEDTrack(returnData[1], "Tile2 Content Snp");
+ //console.log(trackList);
+
zoomOnly = true;
zoomed();
zoomOnly = false;
@@ -909,7 +924,7 @@ function VQI_GenomeBrowser(id) {
});
}
- var addBEDTrack = function (data, name) {
+ var addBEDTrack = function (data, name, exons) {
testdata = data;
//console.log(data);
/**
@@ -990,59 +1005,44 @@ function VQI_GenomeBrowser(id) {
.attr("class", "scalable")*/
- // if (data[0].length >= indexArray.exonEnds)
- // {
- // var exons = [];
- // $.each(data, function (index, value) {
-
- // var exonStarts = value[indexArray.exonStarts].slice(1, value[indexArray.exonStarts].length - 2).split(",");
- // var exonEnds = value[indexArray.exonEnds].slice(1, value[indexArray.exonEnds].length - 2).split(",");
-
- // for (var i = 0; i < exonStarts.length; i++)
- // {
- // var exon = [];
- // exon[indexArray.chr] = value[indexArray.chr];
- // exon[indexArray.name] = value[indexArray.name] + " Exon " + (i + 1) + "/" + exonStarts.length;
- // exon[indexArray.start] = parseInt(exonStarts[i]);
- // exon[indexArray.end] = parseInt(exonEnds[i]);
- // exons.push(exon);
- // }
- // });
-
- // //console.log(exons[1]);
-
- // trackScalableGroup.selectAll("rect")
- // .data(data, function (d) {
- // return d;
- // })
- // .exit()
- // .remove();
-
- // trackScalableGroup.selectAll("rect")
- // .data(exons, function (d) {
- // return d;
- // })
- // .enter()
- // .append("rect");
- // trackScalableGroup.selectAll("rect")
- // .data(exons, function (d) {
- // return d;
- // })
- // .attr("x", function (d) {
- // return fullXScale(d[indexArray.start]);
- // })
- // .attr("y", -10)
- // .attr("height", 20)
- // .attr("width", function (d) {
- // return fullXScale(d[indexArray.end]) - fullXScale(d[indexArray.start]);
- // })
- // .style("fill-opacity", ".8")
- // .style("stroke", "black")
- // .style("fill", "black")
- // .style("vector-effect", "non-scaling-stroke")
- // .attr("class", "scalable")
-
- // }
+ if (exons)
+ {
+
+
+ //console.log(exons[1]);
+
+ trackScalableGroup.selectAll("rect")
+ .data(data, function (d) {
+ return d;
+ })
+ .exit()
+ .remove();
+
+ trackScalableGroup.selectAll("rect")
+ .data(exons, function (d) {
+ return d;
+ })
+ .enter()
+ .append("rect");
+ trackScalableGroup.selectAll("rect")
+ .data(exons, function (d) {
+ return d;
+ })
+ .attr("x", function (d) {
+ return fullXScale(d[0]);
+ })
+ .attr("y", -10)
+ .attr("height", 20)
+ .attr("width", function (d) {
+ return fullXScale(d[1]) - fullXScale(d[0]);
+ })
+ .style("fill-opacity", ".8")
+ .style("stroke", "black")
+ .style("fill", "black")
+ .style("vector-effect", "non-scaling-stroke")
+ .attr("class", "scalable")
+
+ }
// //addHeightTrack(thisData, name);
@@ -1185,22 +1185,27 @@ function VQI_GenomeBrowser(id) {
// var xScale = d3.scale.linear()
// .domain([-3953, 249241810])
// .range([0,1000]);
- var fileHandle = "upload1435711655";
+ var fileHandle = "upload1436411775";
var chrom = "chr1";
-
+
$.ajax({
- url: 'http://localhost/dynamic_loading.php',
+ url: 'dynamic_loading.php',
type: 'POST',
dataType: "json",
data: {
- "getStartEndHG19Data": "",
- "fileHandle": fileHandle,
+ "getStartEndTrackData": "",
+ "fileHandles": [trackInfo[0].fileHandle,trackInfo[1].fileHandle],
+ "name": [trackInfo[0].name, trackInfo[1].name],
"chrom": chrom
}
}).success(function (returnData) {
- thisObj.addTrack(returnData, "HG19", "BED");
+ //console.log(returnData);
+ thisObj.addTrack(returnData[0], "HG19", "bed");
+ thisObj.addTrack(returnData[1], "Tile2 Content Snp", "bed");
+ isready = true;
+ updateTrack();
}).error(function (req, status, error) {
$("body").append(status + ": " + error);
});
@@ -1215,14 +1220,12 @@ function VQI_GenomeBrowser(id) {
data.unshift(["chrom", "chrom_start", "chrom_end", "name", "score", "strand"])
}
data = addOneTrack(data, name, type);
- //console.log("haha");
trackList.push(data);
reorderTracks();
updateAllTracksSelectBoxes();
- isready = true;
- updateTrack();
+
}
this.addTrackFile = function (dataFile, name, type, header) {
diff --git a/dynamic_loading.php b/dynamic_loading.php
index 0da5969..a9acc6e 100644
--- a/dynamic_loading.php
+++ b/dynamic_loading.php
@@ -41,12 +41,12 @@
$result = getData($_POST["getCurrentData"], $currentRow, 17);
ajaxReturn($result);
}
- else if (isset($_POST["getHG19Data"])){
- $result = getHG19Data($_POST["fileHandle"], $_POST["chrom"], $_POST["start"], $_POST["end"]);
+ else if (isset($_POST["getTrackData"])){
+ $result = getTrackData($_POST["fileHandles"], $_POST["name"], $_POST["chrom"], $_POST["start"], $_POST["end"]);
ajaxReturn($result);
}
- else if (isset($_POST["getStartEndHG19Data"])){
- $result = getStartEndHG19Data($_POST["fileHandle"], $_POST["chrom"]);
+ else if (isset($_POST["getStartEndTrackData"])){
+ $result = getStartEndTrackData($_POST["fileHandles"], $_POST["name"], $_POST["chrom"]);
ajaxReturn($result);
}
else {
@@ -143,25 +143,102 @@
//echo json_encode($resArray);
}
- function getHG19Data($fileHandle,$chrom,$start,$end){
+ function mergeExonsArray($exons, $scale){
+ $resArray = [];
+ $mergedExon = $exons[0];
+ for ($i=1; $i < count($exons); $i++) {
+ if ($exons[$i][0] - $mergedExon[1] > 1/$scale){
+ array_push($resArray, $mergedExon);
+ $mergedExon[0] = $exons[$i][0];
+ $mergedExon[1] = $exons[$i][1];
+ }
+ else{
+ if ($exons[$i][1] > $mergedExon[1]){
+ $mergedExon[1] = $exons[$i][1];
+
+ }
+ }
+ }
+ $LastElement = end($resArray);
+ reset($resArray);
+ if ($mergedExon[1] != $LastElement[1] || count($resArray) == 0){
+ array_push($resArray, $mergedExon);
+
+ }
+ return $resArray;
+ }
+
+ function mergeExons($geneStart, $geneEnd, $Exstart, $Exend, $start,$end, $scale){
+ $ExStartArray = explode(",",substr($Exstart,0,-1));
+ $ExEndArray = explode(",",substr($Exend,0,-1));
+
+ if ($geneEnd-$geneStart < 1/$scale){
+
+ return [[$ExStartArray[0],max($ExEndArray)]];
+ }
+ else{
+ $resArray = [];
+ if(count($ExStartArray) > 1){
+ $mergedExon = [$ExStartArray[0],$ExEndArray[0]];
+ for ($i=1; $i < count($ExStartArray); $i++) {
+ if ($ExStartArray[$i] - $ExEndArray[$i-1] > 1/$scale){
+ array_push($resArray, $mergedExon);
+ $mergedExon[0] = $ExStartArray[$i];
+ $mergedExon[1] = $ExEndArray[$i];
+ }
+ else{
+ if ($ExEndArray[$i] > $ExEndArray[$i-1]){
+ $mergedExon[1] = $ExEndArray[$i];
+
+ }
+ }
+ }
+ $LastElement = end($resArray);
+ reset($resArray);
+ if ($mergedExon[1] != $LastElement[1]){
+ array_push($resArray, $mergedExon);
+
+ }
+
+ }
+ else{
+ array_push($resArray, [$ExStartArray[0],$ExEndArray[0]]);
+
+ }
+ return $resArray;
+ }
+ }
+
+ function getHG19TrackData($fileHandle,$chrom,$start,$end){
+
$db_name = $GLOBALS['db_name'];
$link = $GLOBALS['DBlink'];
$resArray = [];
+ $exonArray = [];
$scale = 1000/($end - $start);
- $sql = "SELECT `CHROM`, `CHROM_START`, `CHROM_END`, `GENESYMBOL`, `SCORE` FROM {$db_name}.{$fileHandle}";
- $sql .= " WHERE `CHROM` = '".$chrom."'";
- $sql .= " AND (((`CHROM_START` BETWEEN $start AND $end) OR (`CHROM_END` BETWEEN $start AND $end))";
- $sql .= " OR (`CHROM_START` <= $start AND `CHROM_END` >= $end))";
- $sql .= " ORDER BY `CHROM_START` * 1 ASC";
+ $sql = "SELECT `chrom`, `txStart`, `txEnd`, `name2`, `score`, `exonStarts`, `exonEnds` FROM {$db_name}.{$fileHandle}";
+ $sql .= " WHERE `chrom` = '".$chrom."'";
+ $sql .= " AND (((`txStart` BETWEEN $start AND $end) OR (`txEnd` BETWEEN $start AND $end))";
+ $sql .= " OR (`txStart` <= $start AND `txEnd` >= $end))";
+ $sql .= " ORDER BY `txStart` * 1 ASC";
$res = mysqli_query ($link,$sql);
$mergedRect = [];
$firstRow = mysqli_fetch_row($res);
+
+ $exons = mergeExons($firstRow[1],$firstRow[2],$firstRow[5], $firstRow[6], $start,$end, $scale);
+ //print_r($exons);
+
+ foreach ($exons as $key => $value) {
+ array_push($exonArray, $value);
+ }
+
$mergedRect = [$chrom,$firstRow[1],$firstRow[2],"",""];
+ $noMergedRect = false;
while($row = mysqli_fetch_row($res)){
$tempStartPix = ($row[1] - $start) * $scale;
@@ -170,15 +247,39 @@
$mergedRectStartPix = ($mergedRect[1] - $start) * $scale;
$mergedRectEndtPix = ($mergedRect[2] - $start) * $scale;
+ $exons = mergeExons($row[1],$row[2],$row[5], $row[6], $start,$end, $scale);
+ foreach ($exons as $key => $value) {
+ array_push($exonArray, $value);
+ }
+ if ($noMergedRect){
+
+ $mergedRect = [$chrom,$row[1],$row[2],"",$row[4]];
+ $noMergedRect = false;
+ continue;
+ }
+ //print_r($row);
+ if (is_numeric($row[4])){
+ array_push($resArray, $mergedRect);
+ array_push($resArray, [$chrom,$row[1],$row[2],"",$row[4]]);
+ $noMergedRect = true;
+ continue;
+ }
if ($tempStartPix - $mergedRectEndtPix > 1){
- //array_push($result, $mergedRect);
+ //$mergedRect[5] = mergeExonsArray($mergedRect[5],$scale);
array_push($resArray, $mergedRect);
$mergedRect[1] = $row[1];
$mergedRect[2] = $row[2];
+ //$mergedRect[5] = [$exons];
}
else{
- $mergedRect[2] = $row[2];
+ if ($mergedRect[2] < $row[2]){
+ $mergedRect[2] = $row[2];
+ }
+ // foreach ($exons as $key => $value) {
+ // array_push($mergedRect[5], $value);
+ // }
}
+
}
$LastElement = end($resArray);
@@ -187,41 +288,131 @@
array_push($resArray, $mergedRect);
}
+ $resExon = mergeExonsArray($exonArray,$scale);
+ return [$resArray,$resExon];
+ }
- return $resArray;
+ function getTrackData($fileHandles,$name,$chrom,$start,$end){
+ $returnArray = [];
+ foreach ($fileHandles as $key => $value) {
+ # code...
+ if ($name[$key] == "HG19"){
+ $resArray = getHG19TrackData($fileHandles[$key],$chrom,$start,$end);
+ array_push($returnArray, $resArray);
+ continue;
+ }
+
+ $fileHandle = $value;
+
+ $db_name = $GLOBALS['db_name'];
+ $link = $GLOBALS['DBlink'];
+ $resArray = [];
+ $scale = 1000/($end - $start);
+
+ $sql = "SELECT `CHROM`, `CHROM_START`, `CHROM_END`, `GENESYMBOL`, `SCORE` FROM {$db_name}.{$fileHandle}";
+ $sql .= " WHERE `CHROM` = '".$chrom."'";
+ $sql .= " AND (((`CHROM_START` BETWEEN $start AND $end) OR (`CHROM_END` BETWEEN $start AND $end))";
+ $sql .= " OR (`CHROM_START` <= $start AND `CHROM_END` >= $end))";
+ $sql .= " ORDER BY `CHROM_START` * 1 ASC";
+
+ $res = mysqli_query ($link,$sql);
+
+ $mergedRect = [];
+ $firstRow = mysqli_fetch_row($res);
+
+ $mergedRect = [$chrom,$firstRow[1],$firstRow[2],"",""];
+
+ $noMergedRect = false;
+
+ while($row = mysqli_fetch_row($res)){
+ $tempStartPix = ($row[1] - $start) * $scale;
+ $tempEndtPix = ($row[2] -$start)* $scale;
+
+ $mergedRectStartPix = ($mergedRect[1] - $start) * $scale;
+ $mergedRectEndtPix = ($mergedRect[2] - $start) * $scale;
+
+ if ($noMergedRect){
+ $mergedRect = [$chrom,$row[1],$row[2],"",$row[4]];
+ $noMergedRect = false;
+ continue;
+ }
+ //print_r($row);
+ if (is_numeric($row[4])){
+ array_push($resArray, $mergedRect);
+ array_push($resArray, [$chrom,$row[1],$row[2],"",$row[4]]);
+ $noMergedRect = true;
+ continue;
+ }
+ if ($tempStartPix - $mergedRectEndtPix > 1){
+ //array_push($result, $mergedRect);
+ array_push($resArray, $mergedRect);
+ $mergedRect[1] = $row[1];
+ $mergedRect[2] = $row[2];
+ }
+ else{
+ if ($mergedRect[2] < $row[2]){
+ $mergedRect[2] = $row[2];
+ }
+ }
+ }
+
+ $LastElement = end($resArray);
+ reset($resArray);
+ if ($mergedRect[1] != $LastElement[1]){
+ array_push($resArray, $mergedRect);
+
+ }
+
+ array_push($returnArray, $resArray);
+ }
+ return $returnArray;
}
- function getStartEndHG19Data($fileHandle,$chrom){
+ function getStartEndTrackData($fileHandles,$name,$chrom){
$db_name = $GLOBALS['db_name'];
$link = $GLOBALS['DBlink'];
- $resArray = [];
-
+
+ $returnArray = [];
$sql = "SELECT `CHROM`, `CHROM_START`, `CHROM_END`, `GENESYMBOL`, `SCORE` FROM {$db_name}.{$fileHandle}";
$sql .= " WHERE `CHROM` = '".$chrom."'";
$sql .= " ORDER BY `CHROM_START` * 1 ASC";
- $minsql = "SELECT `CHROM`, `CHROM_START`, `CHROM_END`, `GENESYMBOL`, `SCORE` FROM {$db_name}.{$fileHandle} ORDER BY `CHROM_START` * 1 ASC LIMIT 1";
- $minres = mysqli_query ($link,$minsql);
+ foreach ($fileHandles as $key => $value) {
+ # code...
+ $resArray = [];
+ $fileHandle = $value;
- while($row = mysqli_fetch_row($minres))
- {
- $minRect = [$chrom,$row[1],$row[2],"",""];
+ $minsql = "SELECT `CHROM`, `CHROM_START`, `CHROM_END`, `GENESYMBOL`, `SCORE` FROM {$db_name}.{$fileHandle} ORDER BY `CHROM_START` * 1 ASC LIMIT 1";
+ if ($name[$key] == "HG19"){
+ $minsql = "SELECT `chrom`, `txStart`, `txEnd`, `name2`, `score` FROM {$db_name}.{$fileHandle} ORDER BY `txStart` * 1 ASC LIMIT 1";
+ }
+ $minres = mysqli_query ($link,$minsql);
- array_push($resArray, $minRect);
- }
+ while($row = mysqli_fetch_row($minres))
+ {
+ $minRect = [$chrom,$row[1],$row[2],"",""];
- $maxsql = "SELECT `CHROM`, `CHROM_START`, `CHROM_END`, `GENESYMBOL`, `SCORE` FROM {$db_name}.{$fileHandle} ORDER BY `CHROM_END` * 1 DESC LIMIT 1";
- $maxres = mysqli_query ($link,$maxsql);
+ array_push($resArray, $minRect);
+ }
- while($row = mysqli_fetch_row($maxres))
- {
- $maxRect = [$chrom,$row[1],$row[2],"",""];
+ $maxsql = "SELECT `CHROM`, `CHROM_START`, `CHROM_END`, `GENESYMBOL`, `SCORE` FROM {$db_name}.{$fileHandle} ORDER BY `CHROM_END` * 1 DESC LIMIT 1";
+ if ($name[$key] == "HG19"){
+ $maxsql = "SELECT `chrom`, `txStart`, `txEnd`, `name2`, `score` FROM {$db_name}.{$fileHandle} ORDER BY `txEnd` * 1 DESC LIMIT 1";
+ }
+ $maxres = mysqli_query ($link,$maxsql);
- array_push($resArray, $maxRect);
- }
+ while($row = mysqli_fetch_row($maxres))
+ {
+ $maxRect = [$chrom,$row[1],$row[2],"",""];
- return $resArray;
+ array_push($resArray, $maxRect);
+ }
+
+ array_push($returnArray, $resArray);
+
+ }
+ return $returnArray;
}
function ajaxReturn($result){