From 874ec6518fec9ea333d970b5b30afe237691a250 Mon Sep 17 00:00:00 2001 From: corywang Date: Thu, 17 Sep 2015 22:32:50 -0400 Subject: [PATCH] Some changes when adding tracks --- VQI_GenomeBrowser.js | 190 +++++++++++++++++++++---------------------- dynamic_loading.php | 50 ++++++++---- 2 files changed, 126 insertions(+), 114 deletions(-) diff --git a/VQI_GenomeBrowser.js b/VQI_GenomeBrowser.js index 72e20a4..71f79b2 100755 --- a/VQI_GenomeBrowser.js +++ b/VQI_GenomeBrowser.js @@ -57,6 +57,7 @@ function VQI_GenomeBrowser(id, serviceURL) { } else { + setPanExtent(); graph(chrom, chrom_start, chrom_end); } } @@ -150,7 +151,7 @@ function VQI_GenomeBrowser(id, serviceURL) { var navigateBox = ""; var navigateButton = ""; var form = ""; - $("#" + divId + " #trackNavContainer").append(form); + $("#" + divId).append(form); $("#" + divId + " #navigatebutton").on("click", navigateToRegion.bind(this)); }; this.makeNavigationForm(); @@ -264,7 +265,7 @@ function VQI_GenomeBrowser(id, serviceURL) { }; this.makeFormForColocalization(); - var removeSelectedTracks = function () { + /*var removeSelectedTracks = function () { for (var i = trackList.length - 1; i >= 0; i--) { if (trackList[i].isSelected()) { @@ -274,7 +275,7 @@ function VQI_GenomeBrowser(id, serviceURL) { } reorderTracks(); updateAllTracksSelectBoxes(); - } + }*/ var removeTrack = function (track_name) { for (var i = trackList.length - 1; i >= 0; i--) { @@ -284,11 +285,13 @@ function VQI_GenomeBrowser(id, serviceURL) { trackList.splice(i, 1); } } + setPanExtent(); + graph(chrom_curr, xScale.domain()[0], xScale.domain()[1]); reorderTracks(); updateAllTracksSelectBoxes(); } - this.getSelectedTrackNames = function(){ +/* this.getSelectedTrackNames = function(){ var tracknames = [] for (var i in trackList) { if (trackList[i].isSelected()) @@ -319,7 +322,7 @@ function VQI_GenomeBrowser(id, serviceURL) { for (var i in tracknames) { exportTrack(tracknames[i]); } - } + }*/ var exportTrack = function (track_name) { @@ -391,8 +394,8 @@ function VQI_GenomeBrowser(id, serviceURL) { var mcEntForm = "
" + mcScoreButton + "   "+entScoreButton +"
"; //$("#" + divId +" #exportRemoveContainer").append(removeExportform); $("#" + divId +" #mcEntContainer").append(mcEntForm); - $("#" + divId + " #removetrackbutton").on("click", removeSelectedTracks.bind(this)); - $("#" + divId + " #exporttrackbutton").on("click", exportSelectedTracks.bind(this)); + //$("#" + divId + " #removetrackbutton").on("click", removeSelectedTracks.bind(this)); + //$("#" + divId + " #exporttrackbutton").on("click", exportSelectedTracks.bind(this)); }; this.makeSelectionForm(); @@ -568,10 +571,8 @@ function VQI_GenomeBrowser(id, serviceURL) { } var updateTrack = function(){ - if (isready){ - for (i in trackList) { - trackList[i].updateTrack(); - } + for (i in trackList) { + trackList[i].updateTrack(); } } var testRemove = function(){ @@ -646,24 +647,16 @@ function VQI_GenomeBrowser(id, serviceURL) { zoomed(); } - var setPanExtent = function (min, max) { + var setPanExtent = function () { var mins = []; var maxs = []; - if (min != null && max != null) - { - mins.push(Number(min)); - maxs.push(Number(max)); - } - for (var i in trackList) { - mins.push(d3.min(trackList[i], function (d) { - return Number(d[indexArray.start]) - })); - maxs.push(d3.max(trackList[i], function (d) { - return Number(d[indexArray.end]) - })); + range = trackList[i].getRange(); + + mins.push(Number(range[0])); + maxs.push(Number(range[1])); } min = d3.min(mins); @@ -700,22 +693,7 @@ function VQI_GenomeBrowser(id, serviceURL) { var trackIndex = trackList.length; - //check if min and max of whole graph needs to be readjusted - var min = d3.min(data, function (d) { - return Number(d[indexArray.start]) - }); - var max = d3.max(data, function (d) { - return Number(d[indexArray.start]) - }); - if (min < panExtent[0] || max > panExtent[1]) - { - setPanExtent(min, max); - graph(chrom_curr); - } - var thisData = data.filter(function (d) { - return (d[indexArray.chr] === chrom_curr); - }); var trackCount = trackIndex + 1; //name of track name = name || "track-" + (trackIndex + 1); @@ -727,6 +705,9 @@ function VQI_GenomeBrowser(id, serviceURL) { if(type == "fasta") trackList.push(new FastaTrack(name, graphRegion.append("g"), args)); + setPanExtent(); + graph(chrom_curr); + clipPath.attr("height", Number(svg.attr("height"))); zoomOnly = true; zoomed(); @@ -741,68 +722,13 @@ function VQI_GenomeBrowser(id, serviceURL) { } } - this.addTrackFromDatabase = function() { - var chrom = "chr1"; - var fileHandles = []; - var name = []; - for (i in trackInfo) { - fileHandles.push(trackInfo[i].fileHandle); - name.push(trackInfo[i].name); - } - - $.ajax({ - url: serviceURL, - type: 'POST', - dataType: "json", - data: { - "getStartEndTrackData": "", - "fileHandles": fileHandles, - "name": name, - "chrom": chrom - } - - }).success(function (returnData) { - for (i in trackInfo){ - thisObj.addTrack(returnData[i], trackInfo[i].name, trackInfo[i].type); - } - - isready = true; - updateTrack(); - }).error(function (req, status, error) { - $("body").append(status + ": " + error); - }); - } - this.addOneTrackFromDatabase = function(fileHandle,name,type) { - var chrom = "chr1"; - - $.ajax({ - url: serviceURL, - type: 'POST', - dataType: "json", - data: { - "getStartEndTrackData": "", - "fileHandles": [fileHandle], - "name": [name], - "chrom": chrom - } - - }).success(function (returnData) { - thisObj.addTrack(returnData[0], name, type, {"fileHandle" : fileHandle}); - isready = true; - updateTrack(); - }).error(function (req, status, error) { - $("body").append(status + ": " + error); - }); + thisObj.addTrack([], name, type, {"fileHandle" : fileHandle}); } this.addTrack = function (data, name, type, args) { - if(data[0][0] != "chrom") - { - data.unshift(["chrom", "chrom_start", "chrom_end", "name", "score", "strand"]) - } - data = addOneTrack(data, name, type, args); + addOneTrack(data, name, type, args); reorderTracks(); updateAllTracksSelectBoxes(); @@ -818,7 +744,7 @@ function VQI_GenomeBrowser(id, serviceURL) { }); } - this.setData = function (data) { +/* this.setData = function (data) { genomeData = data; graph(chromosomes[0]); } @@ -889,7 +815,7 @@ function VQI_GenomeBrowser(id, serviceURL) { genomeData = genomeData.concat(shelveData); thisObj.addTrack(genomeData, "cpg", 'cpg'); }); - } + }*/ this.parseTrackFile = function (data, header) { var delimeter = "\t"; @@ -1118,6 +1044,8 @@ function VQI_GenomeBrowser(id, serviceURL) { this.updateTrack = function(){}; this.getData = function(){}; + + this.getRange = function(){}; } function CpgTrack(name, group, args) { @@ -1132,6 +1060,7 @@ function VQI_GenomeBrowser(id, serviceURL) { var data; var redrawCutoff = 1000; //Scale at which rectangles will be drawn individually + var getScale = function(){ if(zoom.scale() < redrawCutoff) return fullXScale; @@ -1339,6 +1268,28 @@ function VQI_GenomeBrowser(id, serviceURL) { this.getData = function(){ return data; } + + this.getRange = function(){ + var range; + $.ajax({ + url: serviceURL, + type: 'POST', + dataType: "json", + async : false, + data: { + "getRange": "", + "fileHandles": [fileHandle], + "name": [name], + "chrom": chrom_curr + } + }).success(function (returnData) { + range = returnData; + }).error(function (req, status, error) { + $("body").append(status + ": " + error); + }); + + return range; + } } function BedTrack(name, group, args) { @@ -1591,6 +1542,28 @@ function VQI_GenomeBrowser(id, serviceURL) { this.getData = function(){ return data; } + + this.getRange = function(){ + var range; + $.ajax({ + url: serviceURL, + type: 'POST', + dataType: "json", + async : false, + data: { + "getRange": "", + "fileHandles": [fileHandle], + "name": [name], + "chrom": chrom_curr + } + }).success(function (returnData) { + range = returnData; + }).error(function (req, status, error) { + $("body").append(status + ": " + error); + }); + + return range; + } } function FastaTrack(name, group, args) { @@ -1716,6 +1689,27 @@ function VQI_GenomeBrowser(id, serviceURL) { clearTrack(); } } + + this.getRange = function(){ + var range; + $.ajax({ + url: serviceURL, + type: 'POST', + dataType: "json", + async : false, + data: { + "getFastaRange": "", + "chrom": chrom_curr, + "indexFile": indexFile + } + }).success(function (returnData) { + range = returnData; + }).error(function (req, status, error) { + $("body").append(status + ": " + error); + }); + + return range; + } } } diff --git a/dynamic_loading.php b/dynamic_loading.php index 07e44ca..b871d60 100644 --- a/dynamic_loading.php +++ b/dynamic_loading.php @@ -46,8 +46,8 @@ $result = getTrackData($_POST["fileHandles"], $_POST["name"], $_POST["chrom"], $_POST["start"], $_POST["end"]); ajaxReturn($result); } - else if (isset($_POST["getStartEndTrackData"])){ - $result = getStartEndTrackData($_POST["fileHandles"], $_POST["name"], $_POST["chrom"]); + else if (isset($_POST["getRange"])){ + $result = getRange($_POST["fileHandles"], $_POST["name"], $_POST["chrom"]); ajaxReturn($result); } else if (isset($_POST["loadTooltip"])){ @@ -58,6 +58,10 @@ $result = loadFastaData($_POST["chrom"],$_POST["start"], $_POST["length"], $_POST["file"],$_POST["indexFile"]); ajaxReturn($result); } + else if (isset($_POST["getFastaRange"])){ + $result = getFastaRange($_POST["chrom"],$_POST["indexFile"]); + ajaxReturn($result); + } else { loadTable(); } @@ -106,6 +110,29 @@ return substr($returnString,0,$length); } + function getFastaRange($chrom, $indexFile){ + + $indexFile = fopen($indexFile, "r"); + $indexArray = []; + while (($line = fgets($indexFile))) { + if($line !== ""){ + + $lineArray = explode("\t", $line); + array_push($indexArray,$lineArray); + + } + } + fclose($indexFile); + + foreach ($indexArray as $key => $value) { + if ($value[0] == $chrom){ + $chromLength = $value[1]; + } + } + + return [0,$chromLength]; + } + function processData($serviceUrl,$processFileHandle){ $data = getData($processFileHandle,"",""); @@ -485,7 +512,7 @@ return $returnArray; } - function getStartEndTrackData($fileHandles,$name,$chrom){ + function getRange($fileHandles,$name,$chrom){ $db_name = $GLOBALS['db_name']; $link = $GLOBALS['DBlink']; @@ -497,7 +524,6 @@ foreach ($fileHandles as $key => $value) { # code... - $resArray = []; $fileHandle = $value; $minsql = "SELECT `CHROM`, `CHROM_START`, `CHROM_END`, `GENESYMBOL`, `SCORE` FROM {$db_name}.{$fileHandle} ORDER BY `CHROM_START` * 1 ASC LIMIT 1"; @@ -513,11 +539,8 @@ while($row = mysqli_fetch_row($minres)) { - $minRect = [$chrom,$row[1],$row[2],"",""]; - if ($name[$key] == "cpg"){ - $minRect = [$chrom,$row[1],$row[2],"shelve"]; - } - array_push($resArray, $minRect); + $min = $row[1]; + array_push($returnArray, $min); } $maxsql = "SELECT `CHROM`, `CHROM_START`, `CHROM_END`, `GENESYMBOL`, `SCORE` FROM {$db_name}.{$fileHandle} ORDER BY `CHROM_END` * 1 DESC LIMIT 1"; @@ -533,14 +556,9 @@ while($row = mysqli_fetch_row($maxres)) { - $maxRect = [$chrom,$row[1],$row[2],"",""]; - if ($name[$key] == "cpg"){ - $maxRect = [$chrom,$row[1],$row[2],"shelve"]; - } - array_push($resArray, $maxRect); + $max = $row[2]; + array_push($returnArray, $max); } - - array_push($returnArray, $resArray); } return $returnArray;