Commit f46ea7be authored by Joshua Gould's avatar Joshua Gould

inline tooltips, maf summary

parent a620bde9
This diff is collapsed.
morpheus.MafFileReader = function() { morpheus.MafFileReader = function () {
this.geneFilter = null; this.geneFilter = null;
}; };
morpheus.MafFileReader.summarizeMutations = function(dataset) { morpheus.MafFileReader.summarizeMutations = function (dataset) {
var v = dataset.getRowMetadata().add('mutation_summary'); var vector = dataset.getRowMetadata().add('mutation_summary');
v.getProperties().set( vector.getProperties().set(
morpheus.VectorKeys.FIELDS, morpheus.VectorKeys.FIELDS,
[ 'Synonymous', 'In Frame Indel', 'Other Non-Synonymous', ['Synonymous', 'In Frame Indel', 'Other Non-Synonymous',
'Missense', 'Splice Site', 'Frame Shift', 'Nonsense' ]); 'Missense', 'Splice Site', 'Frame Shift', 'Nonsense']);
v.getProperties().set(morpheus.VectorKeys.DATA_TYPE, '[number]'); vector.getProperties().set(morpheus.VectorKeys.DATA_TYPE, '[number]');
v.getProperties().set(morpheus.VectorKeys.RECOMPUTE_FUNCTION, true);
v.getProperties().set(morpheus.VectorKeys.FUNCTION, function(view) { // v.getProperties().set(morpheus.VectorKeys.RECOMPUTE_FUNCTION, true);
var bins = new Int8Array(7); // 1-7 // v.getProperties().set(morpheus.VectorKeys.FUNCTION, function (view) {
for (var i = 0, size = view.size(); i < size; i++) { // var bins = new Int32Array(7); // 1-7
var value = view.getValue(i); // for (var i = 0, size = view.size(); i < size; i++) {
// var value = view.getValue(i);
// if (value > 0) {
// bins[value - 1]++;
// }
// }
// return bins;
// });
// computing dynamically screws things up b/c summary is computed for other data types (e.g. CN)
for (var i = 0, nrows = dataset.getRowCount(); i < nrows; i++) {
var bins = new Int32Array(7); // 1-7
for (var j = 0, ncols = dataset.getColumnCount(); j < ncols; j++) {
var value = dataset.getValue(i, j);
if (value > 0) { if (value > 0) {
bins[value - 1]++; bins[value - 1]++;
} }
} }
return bins; vector.setValue(i, bins);
}); }
}; };
morpheus.MafFileReader.getField = function(fieldNames, fieldNameToIndex, morpheus.MafFileReader.getField = function (fieldNames, fieldNameToIndex,
options) { options) {
options = $.extend({}, { options = $.extend({}, {
remove : true, remove: true,
lc : false lc: false
}, options); }, options);
var name; var name;
var index; var index;
...@@ -53,8 +64,8 @@ morpheus.MafFileReader.getField = function(fieldNames, fieldNameToIndex, ...@@ -53,8 +64,8 @@ morpheus.MafFileReader.getField = function(fieldNames, fieldNameToIndex,
} }
if (index !== undefined) { if (index !== undefined) {
return { return {
name : name, name: name,
index : index index: index
}; };
} }
}; };
...@@ -87,13 +98,13 @@ morpheus.MafFileReader.VARIANT_MAP.set('Frame_Shift_Ins', 6); ...@@ -87,13 +98,13 @@ morpheus.MafFileReader.VARIANT_MAP.set('Frame_Shift_Ins', 6);
// non-sense // non-sense
morpheus.MafFileReader.VARIANT_MAP.set('Nonsense_Mutation', 7); morpheus.MafFileReader.VARIANT_MAP.set('Nonsense_Mutation', 7);
morpheus.MafFileReader.prototype = { morpheus.MafFileReader.prototype = {
setGeneFilter : function(geneFilter) { setGeneFilter: function (geneFilter) {
this.geneFilter = geneFilter; this.geneFilter = geneFilter;
}, },
getFormatName : function() { getFormatName: function () {
return 'maf'; return 'maf';
}, },
_getGeneLevelDataset : function(datasetName, reader) { _getGeneLevelDataset: function (datasetName, reader) {
var _this = this; var _this = this;
var tab = /\t/; var tab = /\t/;
var header = reader.readLine().split(tab); var header = reader.readLine().split(tab);
...@@ -105,11 +116,11 @@ morpheus.MafFileReader.prototype = { ...@@ -105,11 +116,11 @@ morpheus.MafFileReader.prototype = {
// TODO six classes of base substitution—C>A, C>G, C>T, T>A, T>C, T>G // TODO six classes of base substitution—C>A, C>G, C>T, T>A, T>C, T>G
// (all substitutions are referred to by the pyrimidine of the mutated // (all substitutions are referred to by the pyrimidine of the mutated
// Watson–Crick base pair) // Watson–Crick base pair)
var fields = [ 'Hugo_Symbol', 'Chromosome', 'Start_position', var fields = ['Hugo_Symbol', 'Chromosome', 'Start_position',
'Reference_Allele', 'Tumor_Seq_Allele2', 'Reference_Allele', 'Tumor_Seq_Allele2',
'Variant_Classification', 'Protein_Change', 'ccf_hat', 'Variant_Classification', 'Protein_Change', 'ccf_hat',
'tumor_f', 'i_tumor_f', 'Tumor_Sample_Barcode', 'tumor_name', 'tumor_f', 'i_tumor_f', 'Tumor_Sample_Barcode', 'tumor_name',
'Tumor_Sample_UUID' ]; 'Tumor_Sample_UUID'];
var fieldNameToIndex = {}; var fieldNameToIndex = {};
for (var i = 0, length = fields.length; i < length; i++) { for (var i = 0, length = fields.length; i < length; i++) {
...@@ -119,17 +130,17 @@ morpheus.MafFileReader.prototype = { ...@@ -119,17 +130,17 @@ morpheus.MafFileReader.prototype = {
} }
} }
var sampleField = morpheus.MafFileReader.getField([ var sampleField = morpheus.MafFileReader.getField([
'Tumor_Sample_Barcode', 'tumor_name', 'Tumor_Sample_UUID' ], 'Tumor_Sample_Barcode', 'tumor_name', 'Tumor_Sample_UUID'],
fieldNameToIndex, { fieldNameToIndex, {
lc : true, lc: true,
remove : true remove: true
}); });
var sampleColumnName = sampleField.name; var sampleColumnName = sampleField.name;
var sampleIdColumnIndex = sampleField.index; var sampleIdColumnIndex = sampleField.index;
var tumorFractionField = morpheus.MafFileReader.getField([ 'ccf_hat', var tumorFractionField = morpheus.MafFileReader.getField(['ccf_hat',
'tumor_f', 'i_tumor_f' ], fieldNameToIndex, { 'tumor_f', 'i_tumor_f'], fieldNameToIndex, {
lc : true, lc: true,
remove : true remove: true
}); });
var ccfColumnName; var ccfColumnName;
var ccfColumnIndex; var ccfColumnIndex;
...@@ -154,13 +165,13 @@ morpheus.MafFileReader.prototype = { ...@@ -154,13 +165,13 @@ morpheus.MafFileReader.prototype = {
// keep fields that are in file only // keep fields that are in file only
fields = []; fields = [];
var geneFields = []; var geneFields = [];
for ( var key in fieldNameToIndex) { for (var key in fieldNameToIndex) {
if (key !== sampleColumnName && key !== ccfColumnName) { if (key !== sampleColumnName && key !== ccfColumnName) {
geneFields.push(key); geneFields.push(key);
} }
fields.push(key); fields.push(key);
} }
var geneColumnIndices = geneFields.map(function(field) { var geneColumnIndices = geneFields.map(function (field) {
return fieldNameToIndex[field]; return fieldNameToIndex[field];
}); });
var nGeneFields = geneColumnIndices.length; var nGeneFields = geneColumnIndices.length;
...@@ -235,18 +246,18 @@ morpheus.MafFileReader.prototype = { ...@@ -235,18 +246,18 @@ morpheus.MafFileReader.prototype = {
} }
} }
var dataset = new morpheus.Dataset({ var dataset = new morpheus.Dataset({
name : datasetName, name: datasetName,
array : variantMatrix, array: variantMatrix,
dataType : 'object', dataType: 'object',
rows : geneSymbolToIndex.size(), rows: geneSymbolToIndex.size(),
columns : sampleIdToIndex.size() columns: sampleIdToIndex.size()
}); });
var columnIds = dataset.getColumnMetadata().add('id'); var columnIds = dataset.getColumnMetadata().add('id');
sampleIdToIndex.forEach(function(index, id) { sampleIdToIndex.forEach(function (index, id) {
columnIds.setValue(index, id); columnIds.setValue(index, id);
}); });
var rowIds = dataset.getRowMetadata().add('id'); var rowIds = dataset.getRowMetadata().add('id');
geneSymbolToIndex.forEach(function(index, id) { geneSymbolToIndex.forEach(function (index, id) {
rowIds.setValue(index, id); rowIds.setValue(index, id);
}); });
for (var i = 0, nrows = dataset.getRowCount(), ncols = dataset for (var i = 0, nrows = dataset.getRowCount(), ncols = dataset
...@@ -259,9 +270,9 @@ morpheus.MafFileReader.prototype = { ...@@ -259,9 +270,9 @@ morpheus.MafFileReader.prototype = {
} }
if (ccfColumnIndex !== undefined) { if (ccfColumnIndex !== undefined) {
dataset.addSeries({ dataset.addSeries({
dataType : 'object', dataType: 'object',
name : 'allelic_fraction', name: 'allelic_fraction',
array : ccfMatrix array: ccfMatrix
}); });
} }
if (this.geneFilter) { if (this.geneFilter) {
...@@ -272,15 +283,15 @@ morpheus.MafFileReader.prototype = { ...@@ -272,15 +283,15 @@ morpheus.MafFileReader.prototype = {
orderVector.setValue(i, order); orderVector.setValue(i, order);
} }
var project = new morpheus.Project(dataset); var project = new morpheus.Project(dataset);
project.setRowSortKeys([ new morpheus.SortKey('order', project.setRowSortKeys([new morpheus.SortKey('order',
morpheus.SortKey.SortOrder.ASCENDING) ], true); // sort morpheus.SortKey.SortOrder.ASCENDING)], true); // sort
// collapsed // collapsed
// dataset // dataset
var tmp = project.getSortedFilteredDataset(); var tmp = project.getSortedFilteredDataset();
project = new morpheus.Project(tmp); project = new morpheus.Project(tmp);
var columnIndices = morpheus.Util.seq(tmp.getColumnCount()); var columnIndices = morpheus.Util.seq(tmp.getColumnCount());
columnIndices columnIndices
.sort(function(a, b) { .sort(function (a, b) {
for (var i = 0, nrows = tmp.getRowCount(); i < nrows; i++) { for (var i = 0, nrows = tmp.getRowCount(); i < nrows; i++) {
for (var seriesIndex = 0, nseries = tmp for (var seriesIndex = 0, nseries = tmp
.getSeriesCount(); seriesIndex < nseries; seriesIndex++) { .getSeriesCount(); seriesIndex < nseries; seriesIndex++) {
...@@ -311,11 +322,11 @@ morpheus.MafFileReader.prototype = { ...@@ -311,11 +322,11 @@ morpheus.MafFileReader.prototype = {
.summarizeMutations(new morpheus.TransposedDatasetView(dataset)); .summarizeMutations(new morpheus.TransposedDatasetView(dataset));
return dataset; return dataset;
}, },
read : function(fileOrUrl, callback) { read: function (fileOrUrl, callback) {
var _this = this; var _this = this;
var name = morpheus.Util.getBaseFileName(morpheus.Util var name = morpheus.Util.getBaseFileName(morpheus.Util
.getFileName(fileOrUrl)); .getFileName(fileOrUrl));
morpheus.BufferedReader.getArrayBuffer(fileOrUrl, function(err, morpheus.BufferedReader.getArrayBuffer(fileOrUrl, function (err,
arrayBuffer) { arrayBuffer) {
if (err) { if (err) {
callback(err); callback(err);
......
...@@ -376,7 +376,7 @@ morpheus.SampleDatasets.prototype = { ...@@ -376,7 +376,7 @@ morpheus.SampleDatasets.prototype = {
}], }],
columns: [{ columns: [{
field: 'id', field: 'id',
display: 'text' display: 'text,tooltip'
}, { }, {
field: 'mutation_summary', field: 'mutation_summary',
display: 'stacked_bar' display: 'stacked_bar'
......
...@@ -33,36 +33,22 @@ morpheus.HeatMapTooltipProvider = function (heatMap, rowIndex, columnIndex, ...@@ -33,36 +33,22 @@ morpheus.HeatMapTooltipProvider = function (heatMap, rowIndex, columnIndex,
var quickRowTracks = heatMap.rowTracks.filter(function (t) { var quickRowTracks = heatMap.rowTracks.filter(function (t) {
return t.settings.inlineTooltip; return t.settings.inlineTooltip;
}); });
morpheus.HeatMapTooltipProvider._tracksToString(options, morpheus.HeatMapTooltipProvider._tracksToString(quickRowTracks, dataset.getRowMetadata(), rowIndex, tipText, separator);
quickRowTracks, dataset.getRowMetadata(), rowIndex, morpheus.HeatMapTooltipProvider._tracksToString(heatMap.columnTracks.filter(function (t) {
tipText, separator);
// if (quickRowTracks.length > 0) {
// tipText
// .push('<div
// style="height:1px;background-color:LightGrey;"></div>');
// }
morpheus.HeatMapTooltipProvider._tracksToString(options,
heatMap.columnTracks.filter(function (t) {
return t.settings.inlineTooltip; return t.settings.inlineTooltip;
}), dataset.getColumnMetadata(), columnIndex, tipText, }), dataset.getColumnMetadata(), columnIndex, tipText, separator);
separator);
} }
} else if (quick) { } else if (quick) {
if (rowIndex !== -1) { if (rowIndex !== -1) {
morpheus.HeatMapTooltipProvider._tracksToString(options, morpheus.HeatMapTooltipProvider._tracksToString(heatMap.rowTracks.filter(function (t) {
heatMap.rowTracks.filter(function (t) { return t.settings.inlineTooltip && options.name !== t.getName();
return t.settings.inlineTooltip; }), dataset.getRowMetadata(), rowIndex, tipText, separator);
}), dataset.getRowMetadata(), rowIndex, tipText,
separator);
} }
if (columnIndex !== -1) { if (columnIndex !== -1) {
morpheus.HeatMapTooltipProvider._tracksToString(options, morpheus.HeatMapTooltipProvider._tracksToString(heatMap.columnTracks.filter(function (t) {
heatMap.columnTracks.filter(function (t) { return t.settings.inlineTooltip && options.name !== t.getName();
return t.settings.inlineTooltip; }), dataset.getColumnMetadata(), columnIndex, tipText, separator);
}), dataset.getColumnMetadata(), columnIndex, tipText,
separator);
} }
} }
...@@ -286,7 +272,7 @@ morpheus.HeatMapTooltipProvider.vectorToString = function (vector, index, ...@@ -286,7 +272,7 @@ morpheus.HeatMapTooltipProvider.vectorToString = function (vector, index,
} }
} }
}; };
morpheus.HeatMapTooltipProvider._tracksToString = function (options, tracks, metadata, index, tipText, separator) { morpheus.HeatMapTooltipProvider._tracksToString = function (tracks, metadata, index, tipText, separator) {
for (var i = 0; i < tracks.length; i++) { for (var i = 0; i < tracks.length; i++) {
morpheus.HeatMapTooltipProvider.vectorToString(metadata.getByName(tracks[i].name), index, tipText, morpheus.HeatMapTooltipProvider.vectorToString(metadata.getByName(tracks[i].name), index, tipText,
separator); separator);
...@@ -299,7 +285,7 @@ morpheus.HeatMapTooltipProvider._metadataToString = function (options, tracks, ...@@ -299,7 +285,7 @@ morpheus.HeatMapTooltipProvider._metadataToString = function (options, tracks,
for (var i = 0, ntracks = tracks.length; i < ntracks; i++) { for (var i = 0, ntracks = tracks.length; i < ntracks; i++) {
var track = tracks[i]; var track = tracks[i];
if ((track.isVisible() && track.isShowTooltip())) { if ((track.isVisible() && track.isShowTooltip())) {
if (tracks[i].name === options.name) { if (tracks[i].name === options.name) { // show the vector that we're mousing over 1st
filtered.splice(0, 0, track); filtered.splice(0, 0, track);
} else { } else {
filtered.push(track); filtered.push(track);
...@@ -307,9 +293,7 @@ morpheus.HeatMapTooltipProvider._metadataToString = function (options, tracks, ...@@ -307,9 +293,7 @@ morpheus.HeatMapTooltipProvider._metadataToString = function (options, tracks,
} }
} }
// show the vector that we're mousing over 1st morpheus.HeatMapTooltipProvider._tracksToString(filtered, metadata, index, tipText, separator);
morpheus.HeatMapTooltipProvider._tracksToString(options, filtered,
metadata, index, tipText, separator);
}; };
morpheus.HeatMapTooltipProvider._nodesToString = function (tipText, nodes, morpheus.HeatMapTooltipProvider._nodesToString = function (tipText, nodes,
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment