@jbrowse/plugin-wiggle
Version:
JBrowse 2 wiggle adapters, tracks, etc.
82 lines (81 loc) • 3.14 kB
JavaScript
;
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;