diff --git a/VQI_PathwayEditor.js b/VQI_PathwayEditor.js
index 50739ff..4663f05 100755
--- a/VQI_PathwayEditor.js
+++ b/VQI_PathwayEditor.js
@@ -585,14 +585,8 @@ var VQI_PathwayEditor = function (parent) {
var header = {};
for (var i = 0; i < lines[0].length; i++) {
- if (lines[0][i].toLowerCase() == "gene")
- header["gene"] = i;
- else if (lines[0][i].toLowerCase() == "mut")
- header["mut"] = i;
- else if (lines[0][i].toLowerCase() == "cnv")
- header["cnv"] = i;
- else if (lines[0][i].toLowerCase() == "rna")
- header["rna"] = i;
+ var value = lines[0][i].toLowerCase().trim();
+ header[value] = i;
}
for (var line = 1; line < lines.length; line++) {
@@ -1161,323 +1155,73 @@ var VQI_PathwayEditor = function (parent) {
}
- function findPath(Json, sid, vid) {
- var nodes = Json['elements']['nodes'];
- nodes = nodes.filter(function (item) {
- if (item['data']['NODE_TYPE'] !== 'GROUP') {
- return true;
- }
- });
-
- var edges = Json['elements']['edges'];
- var result = [];
- //array of arrays containing the graphids for edges in the path
- var path = [];
- var nodeTrack = [];
-
- function mapLocation(x, y) {
- var deta = 1;
-
- for (var j = 0; j < nodes.length; j++) {
- var x0 = nodes[j]['position']['x'];
- var y0 = nodes[j]['position']['y'];
- var w = nodes[j]['data']['Width'];
- var h = nodes[j]['data']['Height'];
-
- if (x > x0 - w / 2 - deta & x < x0 + w / 2 + deta & y > y0 - h / 2 - deta & y < y0 + h / 2 + deta) {
- return nodes[j]['data']['SUID'];
- }
- }
- }
-
- function findEdgeBySource(gid) {
- if (gid == undefined | gid == '0') {
- return;
- }
+ function wrapperFindPath() {
+ var cy = $('#' + parent + '-cy').cytoscape('get');
+ var sid = orderedSelectedNodes[0]._private.data['id'];
+ var vid = orderedSelectedNodes[1]._private.data['id'];
+ $.post('score_json.txt', {
+ data_json: JSON.stringify(JSON.parse(states[states.length - 1]))
+ }, function (yue_data) {
+ console.log(yue_data);
+ var result = JSON.parse(yue_data);
+ var table = document.getElementById(parent + "-inner-table");
+ var length = document.getElementById(parent + "-inner-table").rows.length;
- var end = true;
- for (var i = 0; i < edges.length; i++) {
- var eid = edges[i]['data']['id'];
- var s = (!('source' in edges[i]['data']) ? mapLocation(edges[i]['data']['Coords'][0]['x'], edges[i]['data']['Coords'][0]['y']) : edges[i]['data']['source']);
-
- if (s == gid) {
- var cl = edges[i]['data']['Coords'].length;
- var t = (!('target' in edges[i]['data']) ? mapLocation(edges[i]['data']['Coords'][cl - 1]['x'], edges[i]['data']['Coords'][cl - 1]['y']) : edges[i]['data']['target']);
-
- if (t == vid) {
- var p = path.slice();
- p.push(eid);
- result.push(p);
- continue;
-
- } else if (nodeTrack.indexOf(eid) == -1 & t !== undefined & t !== '0') {
- path.push(eid);
- nodeTrack.push(eid);
- findEdgeBySource(t);
- } else {
- continue;
- }
- }
- }
- if (end == true) {
- path.pop();
- nodeTrack.pop();
+ for (var n = 0; n < length; n++) {
+ table.deleteRow(0);
}
- return true;
- }
- findEdgeBySource(sid);
- return result;
-
- }
-
- function getPathScore(edgeArray, scoreJSON) {
- var sum = 0;
- var max = 0;
- for (var i = 0; i < edgeArray.length; i++) {
- sum = sum + (i + 1) * scoreJSON[edgeArray[i]] / edgeArray.length;
- max = max + (i + 1) / edgeArray.length;
- }
- return parseFloat((sum / max).toFixed(5));
- }
+
+ for (var n = 0; n <= result.length; n++) {
+ var row = table.insertRow();
- function convertEdgePathtoNodePathNoGUI(selectedPaths, obj) {
- var nodePath = [];
- var lookupNodes = {};
- var lookupEdges = {};
+ var path = row.insertCell(0);
+ var rScore = row.insertCell(1);
+ var mScore = row.insertCell(2);
+ var mFdr = row.insertCell(3)
+ var lowP = row.insertCell(4);
+ var consistentLowP = row.insertCell(5);
- for (var i = 0, len = obj.elements.nodes.length; i < len; i++) {
- lookupNodes[obj.elements.nodes[i].data.id] = obj.elements.nodes[i].data;
- }
- for (var i = 0, len = obj.elements.edges.length; i < len; i++) {
- lookupEdges[obj.elements.edges[i].data.id] = obj.elements.edges[i].data;
- }
- for (var i = 0, len = obj.elements.nodes.length; i < len; i++) {
- if (obj.elements.nodes[i].data.parent != "") {
- if (typeof (lookupNodes[obj.elements.nodes[i].data.parent].children) != "undefined" &&
- lookupNodes[obj.elements.nodes[i].data.parent].children.indexOf(obj.elements.nodes[i].data) == -1)
- lookupNodes[obj.elements.nodes[i].data.parent].children.push(obj.elements.nodes[i].data);
- else
- lookupNodes[obj.elements.nodes[i].data.parent].children = [obj.elements.nodes[i].data];
- }
- }
- for (var n = 0; n < selectedPaths.length; n++) {
- nodePath.push([])
- for (var j = 0; j < selectedPaths[n].length; j++) {
- if (j < selectedPaths[n].length - 1) {
- var sourceNodeId = lookupEdges[selectedPaths[n][j]].source;
- var sourceNodeName = lookupNodes[sourceNodeId].name;
- var sourceNodeCnv = lookupNodes[sourceNodeId].cnv;
- var sourceNodeRna = lookupNodes[sourceNodeId].rna;
- var sourceNodeMut = lookupNodes[sourceNodeId].mut;
- if (typeof (lookupNodes[sourceNodeId].children) != "undefined") {
- nodePath[n].push([]);
- for (var k = 0; k < lookupNodes[sourceNodeId].children.length; k++) {
- var sourceNodeName = lookupNodes[sourceNodeId].children[k].name
- var sourceNodeCnv = lookupNodes[sourceNodeId].children[k].cnv
- var sourceNodeRna = lookupNodes[sourceNodeId].children[k].rna
- var sourceNodeMut = lookupNodes[sourceNodeId].children[k].mut
- nodePath[n][j].push({"name": sourceNodeName, "cnv": sourceNodeCnv, "rna": sourceNodeRna, "mut": sourceNodeMut});
- }
- } else {
- nodePath[n].push([{"name": sourceNodeName, "cnv": sourceNodeCnv, "rna": sourceNodeRna, "mut": sourceNodeMut}]);
- }
- } else {
- var sourceNodeId = lookupEdges[selectedPaths[n][j]].source;
- var targetNodeId = lookupEdges[selectedPaths[n][j]].target;
-
- var sourceNodeName = lookupNodes[sourceNodeId].name;
- var sourceNodeCnv = lookupNodes[sourceNodeId].cnv;
- var sourceNodeRna = lookupNodes[sourceNodeId].rna;
- var sourceNodeMut = lookupNodes[sourceNodeId].mut;
-
- var targetNodeName = lookupNodes[targetNodeId].name;
- var targetNodeCnv = lookupNodes[targetNodeId].cnv;
- var targetNodeRna = lookupNodes[targetNodeId].rna;
- var targetNodeMut = lookupNodes[targetNodeId].mut;
-
- if (typeof (lookupNodes[sourceNodeId].children) != "undefined") {
- nodePath[n].push([]);
- for (var k = 0; k < lookupNodes[sourceNodeId].children.length; k++) {
- var sourceNodeName = lookupNodes[sourceNodeId].children[k].name
- var sourceNodeCnv = lookupNodes[sourceNodeId].children[k].cnv
- var sourceNodeRna = lookupNodes[sourceNodeId].children[k].rna
- var sourceNodeMut = lookupNodes[sourceNodeId].children[k].mut
- nodePath[n][j].push({"name": sourceNodeName, "cnv": sourceNodeCnv, "rna": sourceNodeRna, "mut": sourceNodeMut});
- }
- } else {
- nodePath[n].push([{"name": sourceNodeName, "cnv": sourceNodeCnv, "rna": sourceNodeRna, "mut": sourceNodeMut}]);
- }
- if (typeof (lookupNodes[targetNodeId].children) != "undefined") {
- nodePath[n].push([]);
- for (var k = 0; k < lookupNodes[lookupNodes[targetNodeId].parent].children.length; k++) {
- var sourceNodeName = lookupNodes[targetNodeId].children[k].name
- var sourceNodeCnv = lookupNodes[targetNodeId].children[k].cnv
- var sourceNodeRna = lookupNodes[targetNodeId].children[k].rna
- var sourceNodeMut = lookupNodes[targetNodeId].children[k].mut
- nodePath[n][j].push({"name": targetNodeName, "cnv": targetNodeCnv, "rna": targetNodeRna, "mut": targetNodeMut});
- }
- } else {
- nodePath[n].push([{"name": targetNodeName, "cnv": targetNodeCnv, "rna": targetNodeRna, "mut": targetNodeMut}]);
- }
- }
- }
- }
- return nodePath;
- }
-
- function convertEdgePathtoNodePath(selectedPaths) {
- var cy = $('#' + parent + '-cy').cytoscape('get');
- var nodePath = [];
- for (var n = 0; n < selectedPaths.length; n++) {
- nodePath.push([])
- for (var j = 0; j < selectedPaths[n].length; j++) {
- if (j < selectedPaths[n].length - 1) {
- var sourceNodeId = cy.elements("edge[id = \"" + selectedPaths[n][j] + "\"]").data('source');
- var sourceNodeName = cy.elements("node[id = \"" + sourceNodeId + "\"]").data('name');
- var sourceNodeCnv = cy.elements("node[id = \"" + sourceNodeId + "\"]").data('cnv');
- var sourceNodeRna = cy.elements("node[id = \"" + sourceNodeId + "\"]").data('rna');
- var sourceNodeMut = cy.elements("node[id = \"" + sourceNodeId + "\"]").data('mut');
- if (cy.elements("node[id = \"" + sourceNodeId + "\"]").isParent()) {
- nodePath[n].push([]);
- for (var k = 0; k < cy.elements("node[id = \"" + sourceNodeId + "\"]").children().length; k++) {
- var sourceNodeName = cy.elements("node[id = \"" + sourceNodeId + "\"]").children()[k]._private.data.name
- var sourceNodeCnv = cy.elements("node[id = \"" + sourceNodeId + "\"]").children()[k]._private.data.cnv
- var sourceNodeRna = cy.elements("node[id = \"" + sourceNodeId + "\"]").children()[k]._private.data.rna
- var sourceNodeMut = cy.elements("node[id = \"" + sourceNodeId + "\"]").children()[k]._private.data.mut
- nodePath[n][j].push({"name": sourceNodeName, "cnv": sourceNodeCnv, "rna": sourceNodeRna, "mut": sourceNodeMut});
- }
- } else {
- nodePath[n].push([{"name": sourceNodeName, "cnv": sourceNodeCnv, "rna": sourceNodeRna, "mut": sourceNodeMut}]);
+ // Add some text to the new cells:
- }
+ if (n == 0) {
+ path.innerHTML = "paths
";
+ rScore.innerHTML = "R-Score
";
+ mScore.innerHTML = "M-Score
";
+ mFdr.innerHTML = "M-FDR
";
+ lowP.innerHTML = "LowP
"
+ consistentLowP.innerHTML = "Consistent Low P
"
} else {
- var sourceNodeId = cy.elements("edge[id = \"" + selectedPaths[n][j] + "\"]").data('source');
- var targetNodeId = cy.elements("edge[id = \"" + selectedPaths[n][j] + "\"]").data('target');
-
- var sourceNodeName = cy.elements("node[id = \"" + sourceNodeId + "\"]").data('name');
- var sourceNodeCnv = cy.elements("node[id = \"" + sourceNodeId + "\"]").data('cnv');
- var sourceNodeRna = cy.elements("node[id = \"" + sourceNodeId + "\"]").data('rna');
- var sourceNodeMut = cy.elements("node[id = \"" + sourceNodeId + "\"]").data('mut');
-
- var targetNodeName = cy.elements("node[id = \"" + targetNodeId + "\"]").data('name');
- var targetNodeCnv = cy.elements("node[id = \"" + targetNodeId + "\"]").data('cnv');
- var targetNodeRna = cy.elements("node[id = \"" + targetNodeId + "\"]").data('rna');
- var targetNodeMut = cy.elements("node[id = \"" + targetNodeId + "\"]").data('mut');
-
- if (cy.elements("node[id = \"" + sourceNodeId + "\"]").isParent()) {
- nodePath[n].push([]);
- for (var k = 0; k < cy.elements("node[id = \"" + sourceNodeId + "\"]").children().length; k++) {
- var sourceNodeName = cy.elements("node[id = \"" + sourceNodeId + "\"]").children()[k]._private.data.name
- var sourceNodeCnv = cy.elements("node[id = \"" + sourceNodeId + "\"]").children()[k]._private.data.cnv
- var sourceNodeRna = cy.elements("node[id = \"" + sourceNodeId + "\"]").children()[k]._private.data.rna
- var sourceNodeMut = cy.elements("node[id = \"" + sourceNodeId + "\"]").children()[k]._private.data.mut
- nodePath[n][j].push({"name": sourceNodeName, "cnv": sourceNodeCnv, "rna": sourceNodeRna, "mut": sourceNodeMut});
+ var btn = document.createElement("button");
+ var t = document.createTextNode((n - 1).toString());
+ btn.className = "btn btn-link";
+ btn.appendChild(t);
+ btn.addEventListener('click', function (event) {
+ var k = parseInt(event.currentTarget.innerHTML);
+ cy.$('node').unselect();
+ cy.$('edge').unselect();
+ for (var j = 0; j < result[k].edges.length; j++) {
+ cy.elements("edge[id = \"" + result[k].edges[j] + "\"]").select();
+ var sourceNode = cy.elements("edge[id = \"" + result[k].edges[j] + "\"]").data('source');
+ var targetNode = cy.elements("edge[id = \"" + result[k].edges[j] + "\"]").data('target');
+ cy.elements("node[id = \"" + targetNode + "\"]").select();
+ cy.elements("node[id = \"" + sourceNode + "\"]").select();
+ cy.$('node').style("opacity", 0.2);
+ cy.$('edge').style("opacity", 0.2);
+ cy.$('node:selected').style("opacity", 1.0);
+ cy.$('edge:selected').style("opacity", 1.0);
}
- } else {
- nodePath[n].push([{"name": sourceNodeName, "cnv": sourceNodeCnv, "rna": sourceNodeRna, "mut": sourceNodeMut}]);
- }
- if (cy.elements("node[id = \"" + targetNodeId + "\"]").isParent()) {
- nodePath[n].push([]);
- for (var k = 0; k < cy.elements("node[id = \"" + targetNodeId + "\"]").children().length; k++) {
- var targetNodeName = cy.elements("node[id = \"" + targetNodeId + "\"]").children()[k]._private.data.name
- var targetNodeCnv = cy.elements("node[id = \"" + targetNodeId + "\"]").children()[k]._private.data.cnv
- var targetNodeRna = cy.elements("node[id = \"" + targetNodeId + "\"]").children()[k]._private.data.rna
- var targetNodeMut = cy.elements("node[id = \"" + targetNodeId + "\"]").children()[k]._private.data.mut
- nodePath[n][j].push({"name": targetNodeName, "cnv": targetNodeCnv, "rna": targetNodeRna, "mut": targetNodeMut});
- }
- } else {
- nodePath[n].push([{"name": targetNodeName, "cnv": targetNodeCnv, "rna": targetNodeRna, "mut": targetNodeMut}]);
- }
+ });
+ path.appendChild(btn);
+ rScore.appendChild(document.createTextNode(result[n-1].rscore));
+ mScore.appendChild(document.createTextNode(result[n-1].mscore));
+ mFdr.appendChild(document.createTextNode(result[n-1].mFDR));
+ lowP.appendChild(document.createTextNode(result[n-1].lowp));
+ consistentLowP.appendChild(document.createTextNode(result[n-1].consistent_lowp));
}
}
- }
- return nodePath;
- }
-
- function wrapperFindPath() {
- var cy = $('#' + parent + '-cy').cytoscape('get');
- var sid = orderedSelectedNodes[0]._private.data['id'];
- var vid = orderedSelectedNodes[1]._private.data['id'];
- $.post(services['pathwayScorer'], {
- data_json: JSON.stringify(JSON.parse(states[states.length - 1]))
- }, function (yue_data) {
- var selectedPaths = findPath(JSON.parse(states[states.length - 1]), sid, vid);
- var nodePaths = convertEdgePathtoNodePath(selectedPaths);
- $.post(services['pathwayWeightedScorer'], {
- data_paths: JSON.stringify(nodePaths)
- }, function (tham_data) {
- var scoreJSON = JSON.parse(yue_data);
- var fdrJSON = JSON.parse(tham_data);
- var table = document.getElementById(parent + "-inner-table");
- var length = document.getElementById(parent + "-inner-table").rows.length;
-
- if (typeof (selectedPaths) == "undefined") {
- dialogPathfind.dialog("close");
- }
-
- for (var n = 0; n < length; n++) {
- table.deleteRow(0);
- }
- for (var n = 0; n <= selectedPaths.length; n++) {
- var row = table.insertRow();
-
- var path = row.insertCell(0);
- var score = row.insertCell(1);
- var consistency = row.insertCell(2);
- var consLowP = row.insertCell(3)
- var rfdr = row.insertCell(4);
- var mfdr = row.insertCell(5);
- var mrfdr = row.insertCell(6);
- var m = row.insertCell(7);
-
- // Add some text to the new cells:
-
- if (n == 0) {
- path.innerHTML = "paths
";
- score.innerHTML = "R
";
- consistency.innerHTML = "consistent
";
- consLowP.innerHTML = "cons+low P
";
-
- rfdr.innerHTML = "FDR(R)
"
- mfdr.innerHTML = "FDR(M)
"
- mrfdr.innerHTML = "FDR(M+R)
"
- m.innerHTML = "M
"
- } else {
- var btn = document.createElement("button");
- var t = document.createTextNode((n - 1).toString());
- btn.className = "btn btn-link";
- btn.appendChild(t);
- btn.addEventListener('click', function (event) {
- var k = parseInt(event.currentTarget.innerHTML);
- cy.$('node').unselect();
- cy.$('edge').unselect();
- for (var j = 0; j < selectedPaths[k].length; j++) {
- cy.elements("edge[id = \"" + selectedPaths[k][j] + "\"]").select();
- var sourceNode = cy.elements("edge[id = \"" + selectedPaths[k][j] + "\"]").data('source');
- var targetNode = cy.elements("edge[id = \"" + selectedPaths[k][j] + "\"]").data('target');
- cy.elements("node[id = \"" + targetNode + "\"]").select();
- cy.elements("node[id = \"" + sourceNode + "\"]").select();
- cy.$('node').style("opacity", 0.2);
- cy.$('edge').style("opacity", 0.2);
- cy.$('node:selected').style("opacity", 1.0);
- cy.$('edge:selected').style("opacity", 1.0);
- }
- });
- var res = fdrJSON[n - 1].split(" ");
- path.appendChild(btn);
- score.appendChild(document.createTextNode(getPathScore(selectedPaths[n - 1], scoreJSON).toString()));
- consistency.appendChild(document.createTextNode(res[0]));
- consLowP.appendChild(document.createTextNode(res[1]));
- rfdr.appendChild(document.createTextNode(res[2]));
- mfdr.appendChild(document.createTextNode(res[3]));
- mrfdr.appendChild(document.createTextNode(res[4]));
- m.appendChild(document.createTextNode(res[5]));
- }
- }
- dialogTable.dialog("open");
- dialogPathfind.dialog("close");
- });
- })
+ dialogTable.dialog("open");
+ dialogPathfind.dialog("close");
+ });
}
function saveState() {
diff --git a/score_json.txt b/score_json.txt
new file mode 100644
index 0000000..b0a3c6b
--- /dev/null
+++ b/score_json.txt
@@ -0,0 +1,13 @@
+[{
+ "edges": ["e0", "e2", "e8", "e9", "e11", "e15", "e78", "e87"],
+ "rscore": 0.47222,
+ "genes": ["BMP", "IGF"],
+ "source": "n0",
+ "destination": "n22",
+ "person": "X1728790",
+ "pathway": 342,
+ "mscore": 0,
+ "mFDR": 0.00143,
+ "lowp": 1,
+ "consistent_lowp": 0
+ }]
\ No newline at end of file