Bring data provided by data manager in line with Trackster's bigwig datatype. Also allow LinePainter to draw regions of variable length.

This commit is contained in:
jgoecks
2016-08-23 16:55:20 -04:00
parent d99cbd79b6
commit 41d0ee4f43
12 changed files with 40 additions and 29 deletions
-2
View File
@@ -807,7 +807,6 @@ define(["libs/bbi/spans", "libs/bbi/jszlib", "libs/bbi/jquery-ajax-native"], fun
// If no zooming needed or available (common in bigbed), use unzoomed view.
if (range <= MAX_DATA_POINTS || this.zoomLevels.length === 0) {
view = this.getUnzoomedView();
console.log("zoomLevel unzoomed");
}
else {
// Find reasonable zoom level. Reduction is the # of bases represented
@@ -815,7 +814,6 @@ define(["libs/bbi/spans", "libs/bbi/jszlib", "libs/bbi/jquery-ajax-native"], fun
for (var i = 0; i < this.zoomLevels.length; i++) {
if (range/this.zoomLevels[i].reduction < MAX_DATA_POINTS) {
view = this.getZoomedView(i);
console.log("zoomLevel", i);
break;
}
}
+22 -15
View File
@@ -7,7 +7,7 @@ define( ["viz/visualization", "libs/bbi/bigwig"],
var BBIDataManager = visualization.GenomeDataManager.extend({
/**
* Load data from server and manages data entries. Adds a Deferred to manager
* Load data from server and manage data entries. Adds a Deferred to manager
* for region; when data becomes available, replaces Deferred with data.
* Returns the Deferred that resolves when data is available.
*/
@@ -20,22 +20,29 @@ define( ["viz/visualization", "libs/bbi/bigwig"],
var promise = new $.Deferred();
$.when(bigwig.makeBwg(url)).then(function(bb, err) {
$.when(bb.readWigData(region.get("chrom"), region.get("start"), region.get("end"))).then(function(data) {
// Transform data into "bigwig" format. "bigwig" format is an array of 2-element arrays
// where each array is [position, score].
var result = [];
// Transform data into "bigwig" format for LinePainter. "bigwig" format is an array of 2-element arrays
// where each element is [position, score]; unlike real bigwig format, no gaps are allowed.
var result = [],
prev = { max: Number.MIN_VALUE };
data.forEach(function(d) {
// Each data element includes a min and max. If min and max are the same,
// then entry is single base-pair resolution and only a single data point
// is added. Otherwise entry is multiple base pairs and two data points are
// added, one for the start and one for the end.
// Add data point for entry start.
result.push([d.min, d.score]);
if (d.min !== d.max) {
// Multi base-pair entry, so two data points are generated.
result.push([d.max, d.score]);
// If there is a gap between prev and d, fill it with an interval with score 0.
// This is necessary for LinePainter to draw correctly.
if (prev.max !== d.min - 1) {
// +1 to start after previous region.
result.push([prev.max + 1, 0]);
// -2 = -1 for converting from 1-based to 0-based coordinates,
// -1 for ending before current region.
result.push([d.min - 2, 0]);
}
// Add data point for entry start. -1 to convert from wiggle
// 1-based coordinates to 0-based browser coordinates.
result.push([d.min - 1, d.score]);
// Add data point for entry end:
result.push([d.max, d.score]);
prev = d;
});
var entry = {
@@ -194,12 +194,14 @@ LinePainter.prototype.draw = function(ctx, width, height, w_scale) {
}
ctx.beginPath();
var x_scaled, y, delta_x_px;
var x_scaled, y, delta_x_pxs;
if (data.length > 1) {
delta_x_px = Math.ceil((data[1][0] - data[0][0]) * w_scale);
delta_x_pxs = _.map(data.slice(0,-1), function(d, i) {
return Math.ceil((data[i+1][0] - data[i][0]) * w_scale);
});
}
else {
delta_x_px = 10;
delta_x_pxs = [10];
}
// Painter color can be in either block_color (FeatureTrack) or color pref (LineTrack).
@@ -214,12 +216,14 @@ LinePainter.prototype.draw = function(ctx, width, height, w_scale) {
// Paint track.
var delta_x_px;
for (var i = 0, len = data.length; i < len; i++) {
// Reset attributes for next point.
ctx.fillStyle = ctx.strokeStyle = painter_color;
top_overflow = bot_overflow = false;
delta_x_px = delta_x_pxs[i];
x_scaled = Math.ceil((data[i][0] - view_start) * w_scale);
x_scaled = Math.ceil((data[i][0] - view_start - 0.5) * w_scale);
y = data[i][1];
// Process Y (scaler) value.
@@ -3614,6 +3614,8 @@ extend(ReferenceTrack.prototype, Drawable.prototype, TiledTrack.prototype, {
var LineTrack = function (view, container, obj_dict) {
this.mode = "Histogram";
TiledTrack.call(this, view, container, obj_dict);
// Need left offset for drawing overlap near tile boundaries.
this.left_offset = 30;
// var self = this;
// $.when(supportsByteRanges(galaxy_config.root + 'datasets/' + this.dataset.id + '/display'))
File diff suppressed because one or more lines are too long
+1 -1
View File
@@ -1 +1 @@
{"version":3,"file":"bbi-data-manager.js","sources":["../../src/viz/bbi-data-manager.js"],"names":["define","visualization","bigwig","BBIDataManager","GenomeDataManager","extend","load_data","region","deferred","$","Deferred","this","set_data","url","galaxy_config","root","get","id","self","when","makeBwg","then","bb","readWigData","data","result","forEach","d","push","min","score","max","entry","dataset_type","resolve"],"mappings":"AAAAA,QAAS,oBAAqB,mBACtB,SAASC,EAAeC,GAK5B,GAAIC,GAAiBF,EAAcG,kBAAkBC,QAOjDC,UAAW,SAASC,GAChB,GAAIC,GAAWC,EAAEC,UACjBC,MAAKC,SAASL,EAAQC,EAEtB,EAAA,GAAIK,GAAMC,cAAcC,KAAO,YAAcJ,KAAKK,IAAI,WAAWC,GAAK,WAClEC,EAAOP,IACO,IAAIF,GAAEC,SAgCxB,MA/BID,GAAEU,KAAKjB,EAAOkB,QAAQP,IAAMQ,KAAK,SAASC,GACtCb,EAAEU,KAAKG,EAAGC,YAAYhB,EAAOS,IAAI,SAAUT,EAAOS,IAAI,SAAUT,EAAOS,IAAI,SAASK,KAAK,SAASG,GAGlG,GAAIC,KACJD,GAAKE,QAAQ,SAASC,GAOlBF,EAAOG,MAAMD,EAAEE,IAAKF,EAAEG,QAElBH,EAAEE,MAAQF,EAAEI,KAEZN,EAAOG,MAAMD,EAAEI,IAAKJ,EAAEG,SAI9B,IAAIE,IACIR,KAAMC,EACNlB,OAAQA,EACR0B,aAAc,SAGtBf,GAAKN,SAASL,EAAQyB,GACtBxB,EAAS0B,QAAQF,OAIlBxB,IAIf,QACIL,eAAgBA"}
{"version":3,"file":"bbi-data-manager.js","sources":["../../src/viz/bbi-data-manager.js"],"names":["define","visualization","bigwig","BBIDataManager","GenomeDataManager","extend","load_data","region","deferred","$","Deferred","this","set_data","url","galaxy_config","root","get","id","self","when","makeBwg","then","bb","readWigData","data","result","prev","max","Number","MIN_VALUE","forEach","d","min","push","score","entry","dataset_type","resolve"],"mappings":"AAAAA,QAAS,oBAAqB,mBACtB,SAASC,EAAeC,GAK5B,GAAIC,GAAiBF,EAAcG,kBAAkBC,QAOjDC,UAAW,SAASC,GAChB,GAAIC,GAAWC,EAAEC,UACjBC,MAAKC,SAASL,EAAQC,EAEtB,EAAA,GAAIK,GAAMC,cAAcC,KAAO,YAAcJ,KAAKK,IAAI,WAAWC,GAAK,WAClEC,EAAOP,IACO,IAAIF,GAAEC,SAuCxB,MAtCID,GAAEU,KAAKjB,EAAOkB,QAAQP,IAAMQ,KAAK,SAASC,GACtCb,EAAEU,KAAKG,EAAGC,YAAYhB,EAAOS,IAAI,SAAUT,EAAOS,IAAI,SAAUT,EAAOS,IAAI,SAASK,KAAK,SAASG,GAGlG,GAAIC,MACAC,GAASC,IAAKC,OAAOC,UACzBL,GAAKM,QAAQ,SAASC,GAGdL,EAAKC,MAAQI,EAAEC,IAAM,IAErBP,EAAOQ,MAAMP,EAAKC,IAAM,EAAG,IAG3BF,EAAOQ,MAAMF,EAAEC,IAAM,EAAG,KAK5BP,EAAOQ,MAAMF,EAAEC,IAAM,EAAGD,EAAEG,QAG1BT,EAAOQ,MAAMF,EAAEJ,IAAKI,EAAEG,QAEtBR,EAAOK,GAGX,IAAII,IACIX,KAAMC,EACNlB,OAAQA,EACR6B,aAAc,SAGtBlB,GAAKN,SAASL,EAAQ4B,GACtB3B,EAAS6B,QAAQF,OAIlB3B,IAIf,QACIL,eAAgBA"}
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
+1 -1
View File
@@ -1,2 +1,2 @@
define(["viz/visualization","libs/bbi/bigwig"],function(a,b){var c=a.GenomeDataManager.extend({load_data:function(a){var c=$.Deferred();this.set_data(a,c);{var d=galaxy_config.root+"datasets/"+this.get("dataset").id+"/display",e=this;new $.Deferred}return $.when(b.makeBwg(d)).then(function(b){$.when(b.readWigData(a.get("chrom"),a.get("start"),a.get("end"))).then(function(b){var d=[];b.forEach(function(a){d.push([a.min,a.score]),a.min!==a.max&&d.push([a.max,a.score])});var f={data:d,region:a,dataset_type:"bigwig"};e.set_data(a,f),c.resolve(f)})}),c}});return{BBIDataManager:c}});
define(["viz/visualization","libs/bbi/bigwig"],function(a,b){var c=a.GenomeDataManager.extend({load_data:function(a){var c=$.Deferred();this.set_data(a,c);{var d=galaxy_config.root+"datasets/"+this.get("dataset").id+"/display",e=this;new $.Deferred}return $.when(b.makeBwg(d)).then(function(b){$.when(b.readWigData(a.get("chrom"),a.get("start"),a.get("end"))).then(function(b){var d=[],f={max:Number.MIN_VALUE};b.forEach(function(a){f.max!==a.min-1&&(d.push([f.max+1,0]),d.push([a.min-2,0])),d.push([a.min-1,a.score]),d.push([a.max,a.score]),f=a});var g={data:d,region:a,dataset_type:"bigwig"};e.set_data(a,g),c.resolve(g)})}),c}});return{BBIDataManager:c}});
//# sourceMappingURL=../../maps/viz/bbi-data-manager.js.map
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long