$logic = $logic . $toAdd;
}
-$query="select concat(acc, \": \", name) from (select distinct name, acc from (select term_id from gene_product left join association on association.gene_product_id=gene_product.id " . $logic . ") as mytable left join term on term_id=term.id order by acc) as secondTable";
+$query="select concat(acc, \": \", name),term_type from (select distinct name, acc,term_type from (select term_id from gene_product left join association on association.gene_product_id=gene_product.id " . $logic . ") as mytable left join term on term_id=term.id order by acc) as secondTable";
$results=mysql_query($query);
$i = 0;
for($row = mysql_fetch_row($results); $row != null; $row = mysql_fetch_row($results)) {
- $terms[$i] = $row[0];
+ $add = "";
+ if($row[1]=="plant_anatomy") $add= " (A)";
+ if($row[1]=="plant_structure_development_stage") $add= " (G)";
+ $terms[$i][0] = $row[0];
+ $terms[$i][1] = $add;
$i++;
}
}
$query = "select full_name,term_id,concat(acc, \": \", name),evnum from (select full_name,term_id,count(*) as evnum from gene_product left join association on association.gene_product_id=gene_product.id " . $logic . "group by full_name,term_id order by full_name,term_id) as temp left join term on term.id=term_id order by full_name,acc";
-
-echo $query;
$results=mysql_query($query);
$t = 0;
$g ++;
$genes[$g];
for($t = 0; $t < sizeof($terms); $t++) {
- $cellData[$g][$t] = 0;
+ $cellData[$g][$t][0] = 0;
}
}
for($t = 0; $t < sizeof($terms); $t++) {
- if($row[2] == $terms[$t]) {
- $cellData[$g][$t] = 1;
+ if($row[2] == $terms[$t][0]) {
+ $cellData[$g][$t][0] = 1;
+ $cellData[$g][$t][1] = $row[3];
} //TODO optimize this by using PO ID's instead of the entire term string
}
}
+$semiFinalCellData;
+for ($i = 0; $i < sizeof($cellData); $i ++)
+ {
+ for($j = 0; $j < sizeof($cellData[$i]); $j++)
+ {
+ $semiFinalCellData[$i][$j] = implode(",",$cellData[$i][$j]);
+ }
+ }
+
$finalCellData;
-for ($i = 0; $i < sizeof($cellData); $i ++)
+for ($i = 0; $i < sizeof($semiFinalCellData); $i ++)
{
- $finalCellData[$i] = implode(",", $cellData[$i]);
+ $finalCellData[$i] = implode(";", $semiFinalCellData[$i]);
}
$height = 800;
$width = 1200;
+
+$printTerms;
+for($i = 0; $i < sizeof($terms); $i ++) {
+ $printTerms[$i] = $terms[$i][0] . $terms[$i][1];
+}
?>
+<div id="Legend" style="float: right; height: 200px; width: 400px;">
+Note: The colors have no relevance to the data, they simply serve to distinguish rows visually. <br>
+ The numbers printed inside each cell represent the confidence rating of the ontological assignment; a higher number indicates more confidence.
+</div>
+
<div id="canvasDiv" style="overflow: hidden; float: left; height: <?php echo $height ?>px; width: <?php echo $width ?>px;">
<canvas id="myCanvas" width="1500" height="1000" style="border:1px solid #c3c3c3;">
<script type="text/javascript">
-var rawCellData = "<?php echo implode(";",$finalCellData); ?>";
-var rareCellData = rawCellData.split(";");
-var cellData = new Array(rareCellData.length);
+var rawCellData = "<?php echo implode(".",$finalCellData); ?>";
+var rareCellData = rawCellData.split(".");
+
+var mediumRareCellData = Array(rareCellData.length);
for(var i=0; i<rareCellData.length; i++) {
- cellData[i] = rareCellData[i].split(",");
+ mediumRareCellData[i] = rareCellData[i].split(";");
+ }
+var cellData = new Array(mediumRareCellData.length);
+for(var i=0; i<mediumRareCellData.length; i++) {
+ cellData[i] = new Array(mediumRareCellData[i].length);
+ for(var j=0; j<mediumRareCellData[i].length; j++) {
+ cellData[i][j] = mediumRareCellData[i][j].split(",");
+ }
}
-
var rawGenes = "<?php echo implode(",",$genes) ?>";
var genes = rawGenes.split(",");
var geneCount = genes.length;
-var rawTerms = "<?php echo implode(",",$terms) ?>";
+var rawTerms = "<?php echo implode(",",$printTerms) ?>";
var terms = rawTerms.split(",");
var termCount = terms.length;
//labeling the terms
var translated = 0;
for (var s=startTerm; (s<termCount) && (s<=startTerm+maxCols); s++) {
- term = terms[s];
+ term=terms[s];
finalTerm = term.replace("_", " ");
ontMap.fillText(finalTerm,4, leftOffset + 15);
ontMap.translate(0,cellSize);
ontMap.fillText(genes[c],5,(c-startGene)*cellSize + topOffset + cellSize/2);
}
}
+
drawGenes(0);
drawTerms(0);
+
function drawMap(init) {
scrolledLeft = document.getElementById("sideScrollDiv").scrollLeft;
scrolledTop = document.getElementById("topScrollDiv").scrollTop;
startYCell = Math.floor(scrolledTop/cellSize);
for(var t=startXCell; (t<termCount) && ((t-startXCell)<maxCols); t++) {
- var changed=true;
for(var g=startYCell; (g<geneCount) && ((g-startYCell)<maxRows); g++) {
- if(changed && cellData[g][t] != 0) {
+ if(cellData[g][t][0] != 0) {
redcolor = "00";
var greenfrequency = Math.floor((t / termCount) * 255);
greencolor = greenfrequency.toString(16);
if(greencolor.length < 2) {
greencolor = "0" + greencolor;
}
- changed=false;
ontMap.fillStyle= "#" + redcolor + greencolor + bluecolor;
}
- if(cellData[g][t] == 0) {
+ if(cellData[g][t][0] == 0) {
redcolor = "FF";
greencolor = "FF";
bluecolor = "FF";
- changed=true;
ontMap.fillStyle= "#" + redcolor + greencolor + bluecolor;
}
var xCoord = leftOffset+(t-startXCell+.5)*cellSize;
var yCoord = topOffset+(g-startYCell)*cellSize;
ontMap.fillRect(xCoord, yCoord, cellSize, cellSize);
+ if(cellData[g][t][0] != 0) {
+ ontMap.fillStyle="#000000";
+ ontMap.fillText(cellData[g][t][1],xCoord,yCoord+cellSize);
+ }
}
}
drawTerms(startXCell);
drawMap(true);
+/*
+function showInfo(event) {
+ var x = event.clientX + document.body.scrollLeft + document.documentElement.scrollLeft - canvas.offsetLeft;
+ var y = event.clientY + document.body.scrollTop + document.documentElement.scrollTop - canvas.offsetTop;
+
+ if((x<leftOffset) && (y>topOffset)) {
+ var index = Math.floor((y-topOffset)/cellSize) + Math.floor(scrolledTop/cellSize);
+ var gene = genes[index];
+ getGeneInfo(gene, index);
+ }
+ if((y<topOffset) && (x>leftOffset) && (y<leftOffset+maxCols*cellSize)) {
+ var index = Math.floor((x-leftOffset)/cellSize) + Math.floor(scrolledLeft/cellSize);
+ var species = allSpecies[index];
+ getSpeciesInfo(species);
+ }
+ if((y>topOffset) && ((y+scrolledTop)<(topOffset + cellSize*clusterCount)) && (x>leftOffset) && ((x+scrolledLeft)<leftOffset + speciesCount*cellSize)) {
+ var clusterIndex = Math.floor((y-topOffset)/cellSize) + Math.floor(scrolledTop/cellSize);
+ var cluster = allClusterIDs[clusterIndex];
+ var index = Math.floor((x-leftOffset)/cellSize) + Math.floor(scrolledLeft/cellSize);
+ var species = allSpecies[index];
+ getBoxInfo(cluster, species, clusterIndex, index);
+ }
+}*/
+
+
</script>