diff --git a/Tile2contentsnpplotter.txt b/Tile2contentsnpplotter.txt index 064ff93..dc45c2e 100644 --- a/Tile2contentsnpplotter.txt +++ b/Tile2contentsnpplotter.txt @@ -1,3 +1,4 @@ +CHROM CHROM_START CHROM_END GENESYMBOL SCORE STRAND chrUn_gl000237 2659 2660 . 0 + chrUn_gl000225 2877 2878 . 0 + chrUn_gl000234 3210 3211 . 0 + diff --git a/VQI_GenomeBrowser.js b/VQI_GenomeBrowser.js index b90df2e..495533b 100755 --- a/VQI_GenomeBrowser.js +++ b/VQI_GenomeBrowser.js @@ -86,6 +86,22 @@ function VQI_GenomeBrowser(id, serviceURL) { browseToGene(); } }; + var addRecentTrack = function(){ + console.log(trackInfo); + var track = $("#" + divId + " #RecentTracks").val(); + for (i in trackList){ + if (trackList[i]['name'] == track){ + return; + } + } + for (i in trackInfo){ + + if (trackInfo[i].name == track){ + self.addOneTrackFromDatabase(trackInfo[i].fileHandle,track,trackInfo[i].type); + break; + } + } + } /*this.makeNavigationForm = function () { var navigateBox = ""; var navigateButton = ""; @@ -364,6 +380,57 @@ function VQI_GenomeBrowser(id, serviceURL) { $("#" + divId + " #exporttrackbutton").on("click", exportTrack.bind(this)); } this.makeFormForExportTrack();*/ + this.makeUploadForm = function() { + + var fileInput = document.createElement('input'); + fileInput.type = 'file'; + + + fileInput.addEventListener('change', function (e) { + var file = fileInput.files[0]; + var textType = /text.*/; + if (file.type.match(textType)) { + var reader = new FileReader(); + + reader.onload = function (e) { + var Data = reader.result; + uploadFile(Data); + } + + reader.readAsText(file); + + } else { + alert("File not supported!"); + + } + + }); + + var f = document.createElement("form"); + f.innerHTML = "Add track by uploading file: "; + f.appendChild(fileInput); + $("#" + divId).append(f); + } + this.makeUploadForm(); + + this.makeRecentTrackForm = function (){ + var trackSelect = "Recent tracks: "; + + var addTrackButton = ""; + var form = "
" + trackSelect + addTrackButton + "
"; + $("#" + divId).append(form); + $("#" + divId + " #addTrackButton").on("click", addRecentTrack.bind(this)); + } + this.makeRecentTrackForm(); + + this.makeSelectionForm = function () { var removeButton = ""; @@ -478,6 +545,38 @@ function VQI_GenomeBrowser(id, serviceURL) { $("#" + divId + " #navigate").val(chrom_curr + ":" + Math.round(xScale.domain()[0]) + "-" + Math.round(xScale.domain()[1])); }; + var uploadFile = function(data){ + var rows = data.split("\n"); + headerArray = rows[0].split("\t"); + + for (i in headerArray) { + indexArray[headerArray[i]] = i; + } + + $.ajax({ + url: serviceURL, + type: 'POST', + dataType: "json", + data: { + "header": headerArray, + "indexArray": indexArray, + "upload": data + } + + }).success(function (data) { + var CurrentFileHandle = data; + console.log(CurrentFileHandle); + trackInfo.push({name: CurrentFileHandle, type: "bed", fileHandle: CurrentFileHandle}); + updateRecentTrackDropDown(); + self.addOneTrackFromDatabase(CurrentFileHandle,CurrentFileHandle,"bed"); + //self.loadData(CurrentFileHandle); + //setTimeout(function() { this.getCurrentData(); }, 1000); + + }).error(function (req, status, error) { + $("body").append(status + ": " + error); + }); + } + var updateTrack = function(){ if (isready){ @@ -494,6 +593,17 @@ function VQI_GenomeBrowser(id, serviceURL) { // .range([0,1000]); var chrom = "chr1"; + var fileHandles = []; + var name = []; + for (i in trackList) { + for(j in trackInfo){ + if(trackInfo[j].name == trackList[i].name){ + fileHandles.push(trackInfo[j].fileHandle); + break; + } + } + name.push(trackList[i].name); + } $.ajax({ url: serviceURL, @@ -501,8 +611,8 @@ function VQI_GenomeBrowser(id, serviceURL) { dataType: "json", data: { "getTrackData": "", - "fileHandles": [trackInfo[0].fileHandle,trackInfo[1].fileHandle,trackInfo[2].fileHandle], - "name": [trackInfo[0].name,trackInfo[1].name,trackInfo[2].name], + "fileHandles": fileHandles, + "name": name, "chrom": chrom, "start": start, "end": end @@ -510,27 +620,46 @@ function VQI_GenomeBrowser(id, serviceURL) { }).success(function (returnData) { //console.log(returnData); - var i = getTrackIndexByName("HG19"); - trackList[i] = returnData["HG19"][0]; - trackList[i]['name'] = "HG19"; - trackList[i]['type'] = "bed"; //console.log(trackList); - addBEDTrack(returnData["HG19"][0], "HG19",returnData["HG19"][1]); + for (i in trackList){ + var name = trackList[i]['name']; + var type = trackList[i]['type']; + trackList[i] = returnData[name]; + trackList[i]['name'] = name; + trackList[i]['type'] = type; + if (name == "HG19"){ + addBEDTrack(returnData[name][0], name, returnData[name][1]); + } + else if (name == "cpg"){ + addCpgTrack(returnData[name], name); + } + else{ + addBEDTrack(returnData[name], name); + //console.log("hellow"); + } + } - var i = getTrackIndexByName("Tile2 Content Snp"); - trackList[i] = returnData["Tile2 Content Snp"]; - trackList[i]['name'] = "Tile2 Content Snp"; - trackList[i]['type'] = "bed"; - //console.log(trackList); - addBEDTrack(returnData["Tile2 Content Snp"], "Tile2 Content Snp"); - //console.log(trackList); - - var i = getTrackIndexByName("cpg"); - trackList[i] = returnData["cpg"]; - trackList[i]['name'] = "cpg"; - trackList[i]['type'] = "cpg"; - //console.log(trackList); - addCpgTrack(returnData["cpg"], "cpg"); + // var i = getTrackIndexByName("HG19"); + // trackList[i] = returnData["HG19"]; + // trackList[i]['name'] = "HG19"; + // trackList[i]['type'] = "bed"; + // //console.log(trackList); + // addBEDTrack(returnData["HG19"][0], "HG19",returnData["HG19"][1]); + + // var i = getTrackIndexByName("Tile2 Content Snp"); + // trackList[i] = returnData["Tile2 Content Snp"]; + // trackList[i]['name'] = "Tile2 Content Snp"; + // trackList[i]['type'] = "bed"; + // //console.log(trackList); + // addBEDTrack(returnData["Tile2 Content Snp"], "Tile2 Content Snp"); + // //console.log(trackList); + + // var i = getTrackIndexByName("cpg"); + // trackList[i] = returnData["cpg"]; + // trackList[i]['name'] = "cpg"; + // trackList[i]['type'] = "cpg"; + // //console.log(trackList); + // addCpgTrack(returnData["cpg"], "cpg"); zoomOnly = true; @@ -711,7 +840,9 @@ function VQI_GenomeBrowser(id, serviceURL) { data['name'] = name; clipPath.attr("height", Number(svg.attr("height"))); + zoomOnly = true; zoomed(); + zoomOnly = false; return data; } @@ -1058,16 +1189,16 @@ function VQI_GenomeBrowser(id, serviceURL) { // //addHeightTrack(thisData, name); - // $(trackScalableGroup.selectAll('*')[0]).tipsy({ - // gravity: 'n', - // html: true, - // follow: 'x', - // title: function () { - // var d = this.__data__; - // var name = (d.length > indexArray.name) ? d[indexArray.name] : ''; - // return name + " (" + d[indexArray.chr] + " : " + d[indexArray.start] + " - " + d[indexArray.end] + ")"; - // } - // }); + $(trackScalableGroup.selectAll('*')[0]).tipsy({ + gravity: 'n', + html: true, + follow: 'x', + title: function () { + var d = this.__data__; + var name = (d.length > indexArray.name) ? d[indexArray.name] : ''; + return name + " (" + d[indexArray.chr] + " : " + d[indexArray.start] + " - " + d[indexArray.end] + ")"; + } + }); } /* var addHeightTrack = function (data, name) { @@ -1199,7 +1330,12 @@ function VQI_GenomeBrowser(id, serviceURL) { // .range([0,1000]); var chrom = "chr1"; - + var fileHandles = []; + var name = []; + for (i in trackInfo) { + fileHandles.push(trackInfo[i].fileHandle); + name.push(trackInfo[i].name); + } $.ajax({ url: serviceURL, @@ -1207,16 +1343,20 @@ function VQI_GenomeBrowser(id, serviceURL) { dataType: "json", data: { "getStartEndTrackData": "", - "fileHandles": [trackInfo[0].fileHandle,trackInfo[1].fileHandle,trackInfo[2].fileHandle], - "name": [trackInfo[0].name, trackInfo[1].name,trackInfo[2].name], + "fileHandles": fileHandles, + "name": name, "chrom": chrom } }).success(function (returnData) { //console.log(returnData); - thisObj.addTrack(returnData[0], "HG19", "bed"); - thisObj.addTrack(returnData[1], "Tile2 Content Snp", "bed"); - thisObj.addTrack(returnData[2], "cpg", "cpg"); + for (i in trackInfo){ + thisObj.addTrack(returnData[i], trackInfo[i].name, trackInfo[i].type); + } + //console.log + // thisObj.addTrack(returnData[0], "HG19", "bed"); + // thisObj.addTrack(returnData[1], "Tile2 Content Snp", "bed"); + // thisObj.addTrack(returnData[2], "cpg", "cpg"); isready = true; updateTrack(); }).error(function (req, status, error) { @@ -1226,6 +1366,33 @@ function VQI_GenomeBrowser(id, serviceURL) { } + 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); + //console.log(trackList); + isready = true; + updateTrack(); + }).error(function (req, status, error) { + $("body").append(status + ": " + error); + }); + } + this.addTrack = function (data, name, type) { // data['name'] = name; if(data[0][0] != "chrom") @@ -1532,6 +1699,19 @@ function VQI_GenomeBrowser(id, serviceURL) { }; + var updateRecentTrackDropDown = function () { + var trackSelect = $("#" + divId + " #RecentTracks"); + selectBox = trackSelect.get(0); + selectBox.options.length = 0; + var optionIndex = 0; + for (var i in trackInfo) { + var text = trackInfo[i].name; + var value = text; + selectBox.options[optionIndex++] = new Option(text, value); + } + + }; + var exportTrackToText = function (data, filename) { temp = [];