UNPKG

@jbrowse/plugin-wiggle

Version:

JBrowse 2 wiggle adapters, tracks, etc.

82 lines (81 loc) 3.14 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); const bbi_1 = require("@gmod/bbi"); const BaseAdapter_1 = require("@jbrowse/core/data_adapters/BaseAdapter"); const util_1 = require("@jbrowse/core/util"); const io_1 = require("@jbrowse/core/util/io"); const rxjs_1 = require("@jbrowse/core/util/rxjs"); const stats_1 = require("@jbrowse/core/util/stats"); class BigWigAdapter extends BaseAdapter_1.BaseFeatureDataAdapter { async setupPre(opts) { const { statusCallback = () => { } } = opts || {}; const pluginManager = this.pluginManager; const bigwig = new bbi_1.BigWig({ filehandle: (0, io_1.openLocation)(this.getConf('bigWigLocation'), pluginManager), }); return { bigwig, header: await (0, util_1.updateStatus)('Downloading bigwig header', statusCallback, () => bigwig.getHeader(opts)), }; } async setup(opts) { if (!this.setupP) { this.setupP = this.setupPre(opts).catch((e) => { this.setupP = undefined; throw e; }); } return this.setupP; } async getRefNames(opts) { const { header } = await this.setup(opts); return Object.keys(header.refsByName); } async refIdToName(refId) { var _a; const { header } = await this.setup(); return (_a = header.refsByNumber[refId]) === null || _a === void 0 ? void 0 : _a.name; } async getGlobalStats(opts) { const { header } = await this.setup(opts); return (0, stats_1.rectifyStats)(header.totalSummary); } getFeatures(region, opts = {}) { const { refName, start, end } = region; const { bpPerPx = 0, resolution = 1, stopToken, statusCallback = () => { }, } = opts; return (0, rxjs_1.ObservableCreate)(async (observer) => { const source = this.getConf('source'); const resolutionMultiplier = this.getConf('resolutionMultiplier'); const { bigwig } = await this.setup(opts); const feats = await (0, util_1.updateStatus)('Downloading bigwig data', statusCallback, () => bigwig.getFeatures(refName, start, end, { ...opts, basesPerSpan: (bpPerPx / resolution) * resolutionMultiplier, })); for (const data of feats) { if (source) { data.source = source; } const uniqueId = `${source}:${region.refName}:${data.start}-${data.end}`; data.refName = refName; data.uniqueId = uniqueId; observer.next({ get: (str) => data[str], id: () => uniqueId, toJSON: () => data, }); } observer.complete(); }, stopToken); } async getMultiRegionFeatureDensityStats(_regions) { return { featureDensity: 0, }; } } BigWigAdapter.capabilities = [ 'hasResolution', 'hasLocalStats', 'hasGlobalStats', ]; exports.default = BigWigAdapter;