163e77dd2c371e031edc55e8bb4d1c77cade83df kate Tue Nov 1 19:43:18 2011 -0700 Complete features for ChIP-seq diff --git src/hg/js/encodeChipMatrix.js src/hg/js/encodeChipMatrix.js index 2f9a811..b8c4573 100644 --- src/hg/js/encodeChipMatrix.js +++ src/hg/js/encodeChipMatrix.js @@ -17,36 +17,38 @@ var cellType, antibody, target; var organism, assembly, server, header; var karyotype; var spinner; function tableOut(matrix, cellTiers, antibodyGroups) { // Create table with rows for each cell type and columns for each antibody target var table, tableHeader, row, td; // fill in column headers from antibody targets returned by server tableHeader = $('#columnHeaders'); $.each(antibodyGroups, function (i, group) { tableHeader.append('<th class="groupType"><div class="verticalText">' + group.label + '</div></th>'); $.each(group.targets, function (i, target) { + // prune out targets with no experiments if (targetHash[target] === undefined) { return true; } - // prune out targets with no experiments if (targetHash[target].count !== undefined) { - tableHeader.append('<th class="elementType"><div class="verticalText">' + + tableHeader.append('<th class="elementType" title="' + + targetHash[target].description + + '"><div class="verticalText">' + target + '</div></th>'); } }); }); // fill in matrix: // add rows with cell type labels (column 1) and cells for experiments table = $('#matrixTable'); // add sections for each Tier of cells $.each(cellTiers, function (i, tier) { //skip bogus 4th tier (not my property ?) if (tier === undefined) { return true; } table.append($('<tr class="matrix"><th class="groupType">' + "Tier " + @@ -89,35 +91,38 @@ 'target' : target, 'cellType' : cellType }); td.mouseover(function() { $(this).attr('title', 'Click to select: ' + $(this).data().target + ' ' + ' in ' + $(this).data().cellType +' cells'); }); td.click(function() { // TODO: base on preview ? var url = encodeProject.getSearchUrl(assembly); // TODO: encapsulate var names // TODO: search on antibody url += - ('&hgt_mdbVar1=dataType&hgt_mdbVal1=' + 'ChipSeq' + + '&hgt_mdbVar1=dataType&hgt_mdbVal1=' + 'ChipSeq' + '&hgt_mdbVar2=cell&hgt_mdbVal2=' + cellType + - // TODO: all antibodies for target - '&hgt_mdbVar3=target&hgt_mdbVal3=' + target + - '&hgt_mdbVar4=view&hgt_mdbVal4=Any'); + '&hgt_mdbVar3=antibody'; + // TODO: html encode ? + $.each(targetHash[target].antibodies, function (i, antibody) { + url += '&hgt_mdbVal3=' + antibody; + }); + url += '&hgt_mdbVar4=view&hgt_mdbVal4=Any'; // TODO: open search window //window.open(url, "searchWindow"); window.location = url; }); } row.append(td); }); table.append(row); }); table.append(row); }); }); $("body").append(table); // use floating-table-header plugin @@ -137,76 +142,78 @@ } }); } function handleServerData(responses) { // main actions, called when loading data from server is complete var experiments = responses[0], cellTypes = responses[1], antibodies = responses[2], expIds = responses[3]; var antibodyGroups, cellTiers, expIdHash; var matrix = {}; hideLoadingImage(spinner); $('#matrixTable').show(); // set up structures for antibodies and their groups - $.each(antibodies, function (i, item) { - antibodyHash[item.term] = item; + $.each(antibodies, function (i, antibody) { + antibodyHash[antibody.term] = antibody; + target = antibody.target; + if (targetHash[target] === undefined) { + targetHash[target] = { + count: 0, // experiments + description: antibody.targetDescription, + antibodies: [] + }; + } + targetHash[target].antibodies.push(antibody.term) }); antibodyGroups = encodeProject.getAntibodyGroups(antibodies); // set up structures for cell types and their tiers - $.each(cellTypes, function (i, item) { - cellTypeHash[item.term] = item; + $.each(cellTypes, function (i, cellType) { + cellTypeHash[cellType.term] = cellType; }); cellTiers = encodeProject.getCellTiers(cellTypes); // use to filter out experiments not in this assembly expIdHash = encodeProject.getExpIdHash(expIds); // gather experiments into matrix $.each(experiments, function (i, exp) { // todo: filter out with arg to hgApi if (exp.organism !== organism) { return true; } // exclude ref genome annotations if (exp.cellType === 'None') { return true; } if (expIdHash[exp.ix] === undefined) { return true; } // todo: filter out with arg to hgApi ? if (exp.dataType !== 'ChipSeq') { return true; } // count experiments per target so we can prune those having none // (the matrix[cellType] indicates this for cell types // so don't need hash for those antibody = encodeProject.antibodyFromExp(exp); target = encodeProject.targetFromAntibody(antibody, antibodyHash); - if (!targetHash[target]) { - targetHash[target] = { - count: 0, - antibodies: {} - }; - } - if (!targetHash[target].antibodies[antibody]) { - targetHash[target].antibodies[antibody] = antibody; - } + if (targetHash[target] !== undefined) { targetHash[target].count++; + } cellType = exp.cellType; if (!matrix[cellType]) { matrix[cellType] = {}; } if (!matrix[cellType][target]) { matrix[cellType][target] = 0; } matrix[cellType][target]++; }); // fill in table tableOut(matrix, cellTiers, antibodyGroups); }