Initial commit to get working BBI reader into Trackster.

This commit is contained in:
jgoecks
2016-08-12 16:30:15 -04:00
parent 0dee01934a
commit de763bedee
18 changed files with 3877 additions and 5 deletions
File diff suppressed because it is too large Load Diff
+157
View File
@@ -0,0 +1,157 @@
// jQuery Ajax Native Plugin
// (c) 2015 Tarik Zakaria Benmerar, Acigna Inc.
// jQuery Ajax Native Plugin may be freely distributed under the MIT license.
(function (root, factory) {
if (typeof define === 'function' && define.amd) {
// AMD. Register as an anonymous module.
define(['jquery'], factory);
} else if (typeof exports === 'object') {
// Node. Does not work with strict CommonJS, but
// only CommonJS-like environments that support module.exports,
// like Node.
module.exports = factory(require('jquery'));
} else {
// Browser globals (root is window)
factory(root.jQuery);
}
}(this, function ( $ ) {
var ajaxSettings = $.ajaxSettings;
ajaxSettings.responseFields.native = 'responseNative';
ajaxSettings.converters[ '* native' ] = true;
var support = {},
xhrId = 0,
xhrSuccessStatus = {
// file protocol always yields status code 0, assume 200
0: 200,
// Support: IE9
// #1450: sometimes IE returns 1223 when it should be 204
1223: 204
},
xhrCallbacks = {},
xhrSupported = jQuery.ajaxSettings.xhr();
// Support: IE9
// Open requests must be manually aborted on unload (#5280)
if ( window.ActiveXObject ) {
$( window ).on( "unload", function() {
for ( var key in xhrCallbacks ) {
xhrCallbacks[ key ]();
}
});
}
support.cors = !!xhrSupported && ( "withCredentials" in xhrSupported );
support.ajax = xhrSupported = !!xhrSupported;
//Native Data Type Ajax Transport
$.ajaxTransport('native', function ( options ) {
var callback;
// Cross domain only allowed if supported through XMLHttpRequest
if ( support.cors || xhrSupported && !options.crossDomain ) {
return {
send: function( headers, complete ) {
var i,
xhr = options.xhr(),
id = ++xhrId,
responses = {};
xhr.open( options.type, options.url, options.async, options.username, options.password );
// Apply custom fields if provided
if ( options.xhrFields ) {
for ( i in options.xhrFields ) {
xhr[ i ] = options.xhrFields[ i ];
}
}
// Override mime type if needed
if ( options.mimeType && xhr.overrideMimeType ) {
xhr.overrideMimeType( options.mimeType );
}
// X-Requested-With header
// For cross-domain requests, seeing as conditions for a preflight are
// akin to a jigsaw puzzle, we simply never set it to be sure.
// (it can always be set on a per-request basis or even using ajaxSetup)
// For same-domain requests, won't change header if already provided.
if ( !options.crossDomain && !headers["X-Requested-With"] ) {
headers["X-Requested-With"] = "XMLHttpRequest";
}
// Set headers
for ( i in headers ) {
xhr.setRequestHeader( i, headers[ i ] );
}
// Callback
callback = function( type ) {
return function() {
if ( callback ) {
delete xhrCallbacks[ id ];
callback = xhr.onload = xhr.onerror = null;
if ( type === "abort" ) {
xhr.abort();
} else if ( type === "error" ) {
complete(
// file: protocol always yields status 0; see #8605, #14207
xhr.status,
xhr.statusText
);
} else {
// The native response associated with the responseType
// Stored in the xhr.response attribute (XHR2 Spec)
if ( xhr.response ) {
responses.native = xhr.response;
}
complete(
xhrSuccessStatus[ xhr.status ] || xhr.status,
xhr.statusText,
responses,
xhr.getAllResponseHeaders()
);
}
}
};
};
// Listen to events
xhr.onload = callback();
xhr.onerror = callback("error");
// Create the abort callback
callback = xhrCallbacks[ id ] = callback("abort");
try {
// Do send the request (this may raise an exception)
xhr.send( options.hasContent && options.data || null );
} catch ( e ) {
// #14683: Only rethrow if this hasn't been notified as an error yet
if ( callback ) {
throw e;
}
}
},
abort: function() {
if ( callback ) {
callback();
}
}
};
}
});
//$.getNative wrapper
$.getNative = function ( url, callback ) {
return $.ajax({
dataType: 'native',
url: url,
xhrFields: {
responseType: 'arraybuffer'
},
success: callback
});
}
}));
File diff suppressed because it is too large Load Diff
+257
View File
@@ -0,0 +1,257 @@
/* -*- mode: javascript; c-basic-offset: 4; indent-tabs-mode: nil -*- */
//
// Dalliance Genome Explorer
// (c) Thomas Down 2006-2010
//
// spans.js: JavaScript Intset/Location port.
//
define([], function() {
"use strict";
function Range(min, max)
{
if (typeof(min) != 'number' || typeof(max) != 'number')
throw 'Bad range ' + min + ',' + max;
this._min = min;
this._max = max;
}
Range.prototype.min = function() {
return this._min;
}
Range.prototype.max = function() {
return this._max;
}
Range.prototype.contains = function(pos) {
return pos >= this._min && pos <= this._max;
}
Range.prototype.isContiguous = function() {
return true;
}
Range.prototype.ranges = function() {
return [this];
}
Range.prototype._pushRanges = function(ranges) {
ranges.push(this);
}
Range.prototype.toString = function() {
return '[' + this._min + '-' + this._max + ']';
}
function _Compound(ranges) {
// given: a set of unsorted possibly overlapping ranges
// sort the input ranges
var sorted = ranges.sort(_rangeOrder);
// merge overlaps between adjacent ranges
var merged = [];
var current = sorted.shift();
sorted.forEach(function(range) {
if (range._min <= current._max) {
if (range._max > current._max) {
current._max = range._max;
}
}
else {
merged.push(current);
current = range;
}
});
merged.push(current);
this._ranges = merged;
}
_Compound.prototype.min = function() {
return this._ranges[0].min();
}
_Compound.prototype.max = function() {
return this._ranges[this._ranges.length - 1].max();
}
// returns the index of the first range that is not less than pos
_Compound.prototype.lower_bound = function(pos) {
// first check if pos is out of range
var r = this.ranges();
if (pos > this.max()) return r.length;
if (pos < this.min()) return 0;
// do a binary search
var a=0, b=r.length - 1;
while (a <= b) {
var m = Math.floor((a+b)/2);
if (pos > r[m]._max) {
a = m+1;
}
else if (pos < r[m]._min) {
b = m-1;
}
else {
return m;
}
}
return a;
}
_Compound.prototype.contains = function(pos) {
var lb = this.lower_bound(pos);
if (lb < this._ranges.length && this._ranges[lb].contains(pos)) {
return true;
}
return false;
}
_Compound.prototype.insertRange = function(range) {
var lb = this.lower_bound(range._min);
if (lb === this._ranges.length) { // range follows this
this._ranges.push(range);
return;
}
var r = this.ranges();
if (range._max < r[lb]._min) { // range preceeds lb
this._ranges.splice(lb,0,range);
return;
}
// range overlaps lb (at least)
if (r[lb]._min < range._min) range._min = r[lb]._min;
var ub = lb+1;
while (ub < r.length && r[ub]._min <= range._max) {
ub++;
}
ub--;
// ub is the upper bound of the new range
if (r[ub]._max > range._max) range._max = r[ub]._max;
// splice range into this._ranges
this._ranges.splice(lb,ub-lb+1,range);
return;
}
_Compound.prototype.isContiguous = function() {
return this._ranges.length > 1;
}
_Compound.prototype.ranges = function() {
return this._ranges;
}
_Compound.prototype._pushRanges = function(ranges) {
for (var ri = 0; ri < this._ranges.length; ++ri)
ranges.push(this._ranges[ri]);
}
_Compound.prototype.toString = function() {
var s = '';
for (var r = 0; r < this._ranges.length; ++r) {
if (r>0) {
s = s + ',';
}
s = s + this._ranges[r].toString();
}
return s;
}
function union(s0, s1) {
if (! (s0 instanceof _Compound)) {
if (! (s0 instanceof Array))
s0 = [s0];
s0 = new _Compound(s0);
}
if (s1)
s0.insertRange(s1);
return s0;
}
function intersection(s0, s1) {
var r0 = s0.ranges();
var r1 = s1.ranges();
var l0 = r0.length, l1 = r1.length;
var i0 = 0, i1 = 0;
var or = [];
while (i0 < l0 && i1 < l1) {
var s0 = r0[i0], s1 = r1[i1];
var lapMin = Math.max(s0.min(), s1.min());
var lapMax = Math.min(s0.max(), s1.max());
if (lapMax >= lapMin) {
or.push(new Range(lapMin, lapMax));
}
if (s0.max() > s1.max()) {
++i1;
} else {
++i0;
}
}
if (or.length == 0) {
return null; // FIXME
} else if (or.length == 1) {
return or[0];
} else {
return new _Compound(or);
}
}
function coverage(s) {
var tot = 0;
var rl = s.ranges();
for (var ri = 0; ri < rl.length; ++ri) {
var r = rl[ri];
tot += (r.max() - r.min() + 1);
}
return tot;
}
function rangeOrder(a, b)
{
if (a.min() < b.min()) {
return -1;
} else if (a.min() > b.min()) {
return 1;
} else if (a.max() < b.max()) {
return -1;
} else if (b.max() > a.max()) {
return 1;
} else {
return 0;
}
}
function _rangeOrder(a, b)
{
if (a._min < b._min) {
return -1;
} else if (a._min > b._min) {
return 1;
} else if (a._max < b._max) {
return -1;
} else if (b._max > a._max) {
return 1;
} else {
return 0;
}
}
return {
Range: Range,
union: union,
intersection: intersection,
coverage: coverage,
rangeOver: rangeOrder,
_rangeOrder: _rangeOrder
};
});
@@ -0,0 +1,60 @@
define( ["viz/visualization", "libs/bbi/bigwig"],
function(visualization, bigwig) {
/**
* Data manager for BBI datasets/files, including BigWig and BigBed.
*/
var BBIDataManager = visualization.GenomeDataManager.extend({
/**
* Load data from server and manages 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.
*/
load_data: function(region, mode, resolution, extra_params) {
var deferred = $.Deferred();
this.set_data(region, deferred);
var url = galaxy_config.root + 'datasets/' + this.get('dataset').id + '/display',
self = this;
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 = [];
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]);
}
});
var entry = {
data: result,
region: region,
dataset_type: 'bigwig'
};
self.set_data(region, entry);
deferred.resolve(entry);
});
});
return deferred;
},
});
return {
BBIDataManager: BBIDataManager
};
});
+30 -2
View File
@@ -9,8 +9,9 @@ define([
"mvc/dataset/data",
"mvc/tool/tools",
"utils/config",
"viz/bbi-data-manager",
"ui/editable-text",
], function(_, visualization, viz_views, util, slotting, painters, filters_mod, data, tools_mod, config_mod) {
], function(_, visualization, viz_views, util, slotting, painters, filters_mod, data, tools_mod, config_mod, bbi) {
var extend = _.extend;
@@ -187,6 +188,18 @@ function round(num, places) {
return Math.round(num * val) / val;
}
/**
* Check if a server can do byte range requests.
*/
function supportsByteRanges(url) {
var promise = $.Deferred();
$.get(url).success(function (result, status, xhr) {
promise.resolve(xhr.getResponseHeader("Accept-Ranges") === "bytes");
});
return promise;
}
/**
* Drawables hierarchy:
*
@@ -3078,7 +3091,7 @@ extend(TiledTrack.prototype, Drawable.prototype, Track.prototype, {
if ( [undefined, null, 0].indexOf(this.config.get_value("max_value")) !== -1 ) {
this.config.set_value("max_value", _.max( _.map(result.data, function(d) { return d[1]; }) ) || 0);
}
var canvas = ctx.canvas,
painter = new painters.LinePainter(result.data, region.get('start'), region.get('end'), this.config.to_key_value_dict(), mode);
painter.draw(ctx, canvas.width, canvas.height, w_scale);
@@ -3601,7 +3614,22 @@ extend(ReferenceTrack.prototype, Drawable.prototype, TiledTrack.prototype, {
var LineTrack = function (view, container, obj_dict) {
this.mode = "Histogram";
TiledTrack.call(this, view, container, obj_dict);
// var self = this;
// $.when(supportsByteRanges(galaxy_config.root + 'datasets/' + this.dataset.id + '/display'))
// .then(function(supportsByteRanges) {
// if (supportsByteRanges) {
// self.data_manager = new bbi.BBIDataManager({
// dataset: this.dataset
// });
// }
//
// });
this.data_manager = new bbi.BBIDataManager({
dataset: this.dataset
});
};
extend(LineTrack.prototype, Drawable.prototype, TiledTrack.prototype, {
display_modes: CONTINUOUS_DATA_MODES,
File diff suppressed because one or more lines are too long
@@ -0,0 +1 @@
{"version":3,"file":"jquery-ajax-native.js","sources":["../../../src/libs/bbi/jquery-ajax-native.js"],"names":["root","factory","define","amd","exports","module","require","jQuery","this","$","ajaxSettings","responseFields","native","converters","support","xhrId","xhrSuccessStatus",1223,"xhrCallbacks","xhrSupported","xhr","window","ActiveXObject","on","key","cors","ajax","ajaxTransport","options","callback","crossDomain","send","headers","complete","i","id","responses","open","type","url","async","username","password","xhrFields","mimeType","overrideMimeType","setRequestHeader","onload","onerror","abort","status","statusText","response","getAllResponseHeaders","hasContent","data","e","getNative","dataType","responseType","success"],"mappings":"CAIC,SAAUA,EAAMC,GACS,kBAAXC,SAAyBA,OAAOC,IAEvCD,QAAQ,UAAWD,GACO,gBAAZG,SAIdC,OAAOD,QAAUH,EAAQK,QAAQ,WAGjCL,EAAQD,EAAKO,SAEnBC,KAAM,SAAWC,GACf,GAAIC,GAAeD,EAAEC,YACrBA,GAAaC,eAAeC,OAAS,iBACrCF,EAAaG,WAAY,aAAe,CACxC,IAAIC,MACAC,EAAQ,EACRC,GAEI,EAAG,IAGHC,KAAM,KAEVC,KACAC,EAAeZ,OAAOG,aAAaU,KAGlCC,QAAOC,eACRb,EAAGY,QAASE,GAAI,SAAU,WACtB,IAAM,GAAIC,KAAON,GACbA,EAAcM,OAI1BV,EAAQW,OAASN,GAAkB,mBAAqBA,GACxDL,EAAQY,KAAOP,IAAiBA,EAGhCV,EAAEkB,cAAc,SAAU,SAAWC,GACjC,GAAIC,EAEJ,OAAKf,GAAQW,MAAQN,IAAiBS,EAAQE,aAEtCC,KAAM,SAAUC,EAASC,GACrB,GAAIC,GACAd,EAAMQ,EAAQR,MACde,IAAOpB,EACPqB,IAKJ,IAHAhB,EAAIiB,KAAMT,EAAQU,KAAMV,EAAQW,IAAKX,EAAQY,MAAOZ,EAAQa,SAAUb,EAAQc,UAGzEd,EAAQe,UACT,IAAMT,IAAKN,GAAQe,UACfvB,EAAKc,GAAMN,EAAQe,UAAWT,EAKjCN,GAAQgB,UAAYxB,EAAIyB,kBACzBzB,EAAIyB,iBAAkBjB,EAAQgB,UAQ5BhB,EAAQE,aAAgBE,EAAQ,sBAClCA,EAAQ,oBAAsB,iBAIlC,KAAME,IAAKF,GACPZ,EAAI0B,iBAAkBZ,EAAGF,EAASE,GAItCL,GAAW,SAAUS,GACjB,MAAO,YACET,UACMX,GAAciB,GACrBN,EAAWT,EAAI2B,OAAS3B,EAAI4B,QAAU,KAExB,UAATV,EACDlB,EAAI6B,QACa,UAATX,EACRL,EAEIb,EAAI8B,OACJ9B,EAAI+B,aAKH/B,EAAIgC,WACLhB,EAAUxB,OAASQ,EAAIgC,UAG3BnB,EACIjB,EAAkBI,EAAI8B,SAAY9B,EAAI8B,OACtC9B,EAAI+B,WACJf,EACAhB,EAAIiC,6BAQxBjC,EAAI2B,OAASlB,IACbT,EAAI4B,QAAUnB,EAAS,SAGvBA,EAAWX,EAAciB,GAAON,EAAS,QAEzC,KAEIT,EAAIW,KAAMH,EAAQ0B,YAAc1B,EAAQ2B,MAAQ,MAClD,MAAQC,GAEN,GAAK3B,EACD,KAAM2B,KAKlBP,MAAO,WACEpB,GACDA,MAzFhB,SAkGJpB,EAAEgD,UAAY,SAAWlB,EAAKV,GAC1B,MAAOpB,GAAEiB,MACLgC,SAAU,SACVnB,IAAKA,EACLI,WACIgB,aAAc,eAElBC,QAAS/B"}
File diff suppressed because one or more lines are too long
+1
View File
@@ -0,0 +1 @@
{"version":3,"file":"spans.js","sources":["../../../src/libs/bbi/spans.js"],"names":["define","Range","min","max","this","_min","_max","_Compound","ranges","sorted","sort","_rangeOrder","merged","current","shift","forEach","range","push","_ranges","union","s0","s1","Array","insertRange","intersection","r0","r1","l0","length","l1","i0","i1","or","lapMin","Math","lapMax","coverage","s","tot","rl","ri","r","rangeOrder","a","b","prototype","contains","pos","isContiguous","_pushRanges","toString","lower_bound","m","floor","lb","splice","ub","rangeOver"],"mappings":"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"}
+1
View File
@@ -0,0 +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"}
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
+2
View File
@@ -0,0 +1,2 @@
!function(a,b){"function"==typeof define&&define.amd?define(["jquery"],b):"object"==typeof exports?module.exports=b(require("jquery")):b(a.jQuery)}(this,function(a){var b=a.ajaxSettings;b.responseFields.native="responseNative",b.converters["* native"]=!0;var c={},d=0,e={0:200,1223:204},f={},g=jQuery.ajaxSettings.xhr();window.ActiveXObject&&a(window).on("unload",function(){for(var a in f)f[a]()}),c.cors=!!g&&"withCredentials"in g,c.ajax=g=!!g,a.ajaxTransport("native",function(a){var b;return c.cors||g&&!a.crossDomain?{send:function(c,g){var h,i=a.xhr(),j=++d,k={};if(i.open(a.type,a.url,a.async,a.username,a.password),a.xhrFields)for(h in a.xhrFields)i[h]=a.xhrFields[h];a.mimeType&&i.overrideMimeType&&i.overrideMimeType(a.mimeType),a.crossDomain||c["X-Requested-With"]||(c["X-Requested-With"]="XMLHttpRequest");for(h in c)i.setRequestHeader(h,c[h]);b=function(a){return function(){b&&(delete f[j],b=i.onload=i.onerror=null,"abort"===a?i.abort():"error"===a?g(i.status,i.statusText):(i.response&&(k.native=i.response),g(e[i.status]||i.status,i.statusText,k,i.getAllResponseHeaders())))}},i.onload=b(),i.onerror=b("error"),b=f[j]=b("abort");try{i.send(a.hasContent&&a.data||null)}catch(l){if(b)throw l}},abort:function(){b&&b()}}:void 0}),a.getNative=function(b,c){return a.ajax({dataType:"native",url:b,xhrFields:{responseType:"arraybuffer"},success:c})}});
//# sourceMappingURL=../../../maps/libs/bbi/jquery-ajax-native.js.map
File diff suppressed because one or more lines are too long
+2
View File
@@ -0,0 +1,2 @@
define([],function(){"use strict";function a(a,b){if("number"!=typeof a||"number"!=typeof b)throw"Bad range "+a+","+b;this._min=a,this._max=b}function b(a){var b=a.sort(g),c=[],d=b.shift();b.forEach(function(a){a._min<=d._max?a._max>d._max&&(d._max=a._max):(c.push(d),d=a)}),c.push(d),this._ranges=c}function c(a,c){return a instanceof b||(a instanceof Array||(a=[a]),a=new b(a)),c&&a.insertRange(c),a}function d(c,d){for(var e=c.ranges(),f=d.ranges(),g=e.length,h=f.length,i=0,j=0,k=[];g>i&&h>j;){var c=e[i],d=f[j],l=Math.max(c.min(),d.min()),m=Math.min(c.max(),d.max());m>=l&&k.push(new a(l,m)),c.max()>d.max()?++j:++i}return 0==k.length?null:1==k.length?k[0]:new b(k)}function e(a){for(var b=0,c=a.ranges(),d=0;d<c.length;++d){var e=c[d];b+=e.max()-e.min()+1}return b}function f(a,b){return a.min()<b.min()?-1:a.min()>b.min()?1:a.max()<b.max()?-1:b.max()>a.max()?1:0}function g(a,b){return a._min<b._min?-1:a._min>b._min?1:a._max<b._max?-1:b._max>a._max?1:0}return a.prototype.min=function(){return this._min},a.prototype.max=function(){return this._max},a.prototype.contains=function(a){return a>=this._min&&a<=this._max},a.prototype.isContiguous=function(){return!0},a.prototype.ranges=function(){return[this]},a.prototype._pushRanges=function(a){a.push(this)},a.prototype.toString=function(){return"["+this._min+"-"+this._max+"]"},b.prototype.min=function(){return this._ranges[0].min()},b.prototype.max=function(){return this._ranges[this._ranges.length-1].max()},b.prototype.lower_bound=function(a){var b=this.ranges();if(a>this.max())return b.length;if(a<this.min())return 0;for(var c=0,d=b.length-1;d>=c;){var e=Math.floor((c+d)/2);if(a>b[e]._max)c=e+1;else{if(!(a<b[e]._min))return e;d=e-1}}return c},b.prototype.contains=function(a){var b=this.lower_bound(a);return b<this._ranges.length&&this._ranges[b].contains(a)?!0:!1},b.prototype.insertRange=function(a){var b=this.lower_bound(a._min);if(b===this._ranges.length)return void this._ranges.push(a);var c=this.ranges();if(a._max<c[b]._min)return void this._ranges.splice(b,0,a);c[b]._min<a._min&&(a._min=c[b]._min);for(var d=b+1;d<c.length&&c[d]._min<=a._max;)d++;d--,c[d]._max>a._max&&(a._max=c[d]._max),this._ranges.splice(b,d-b+1,a)},b.prototype.isContiguous=function(){return this._ranges.length>1},b.prototype.ranges=function(){return this._ranges},b.prototype._pushRanges=function(a){for(var b=0;b<this._ranges.length;++b)a.push(this._ranges[b])},b.prototype.toString=function(){for(var a="",b=0;b<this._ranges.length;++b)b>0&&(a+=","),a+=this._ranges[b].toString();return a},{Range:a,union:c,intersection:d,coverage:e,rangeOver:f,_rangeOrder:g}});
//# sourceMappingURL=../../../maps/libs/bbi/spans.js.map
+2
View File
@@ -0,0 +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}});
//# sourceMappingURL=../../maps/viz/bbi-data-manager.js.map
File diff suppressed because one or more lines are too long