@gmod/bbi 1.0.35 → 2.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +6 -1
- package/dist/bbi.d.ts +2 -2
- package/dist/bbi.js +55 -59
- package/dist/bbi.js.map +1 -1
- package/dist/bigbed.d.ts +1 -2
- package/dist/bigbed.js +22 -20
- package/dist/bigbed.js.map +1 -1
- package/dist/bigwig.d.ts +1 -3
- package/dist/bigwig.js +4 -8
- package/dist/bigwig.js.map +1 -1
- package/dist/blockView.d.ts +8 -9
- package/dist/blockView.js +155 -95
- package/dist/blockView.js.map +1 -1
- package/dist/unzip-pako.d.ts +1 -1
- package/dist/unzip-pako.js +1 -1
- package/dist/unzip-pako.js.map +1 -1
- package/dist/util.d.ts +11 -1
- package/dist/util.js +9 -4
- package/dist/util.js.map +1 -1
- package/esm/bbi.d.ts +2 -2
- package/esm/bbi.js +45 -44
- package/esm/bbi.js.map +1 -1
- package/esm/bigbed.d.ts +1 -2
- package/esm/bigbed.js +22 -19
- package/esm/bigbed.js.map +1 -1
- package/esm/bigwig.d.ts +1 -3
- package/esm/bigwig.js +3 -7
- package/esm/bigwig.js.map +1 -1
- package/esm/blockView.d.ts +8 -9
- package/esm/blockView.js +143 -87
- package/esm/blockView.js.map +1 -1
- package/esm/unzip-pako.d.ts +1 -1
- package/esm/unzip-pako.js +2 -2
- package/esm/unzip-pako.js.map +1 -1
- package/esm/util.d.ts +11 -1
- package/esm/util.js +9 -4
- package/esm/util.js.map +1 -1
- package/package.json +9 -10
- package/src/bbi.ts +49 -54
- package/src/bigbed.ts +31 -26
- package/src/bigwig.ts +5 -13
- package/src/blockView.ts +177 -143
- package/src/declare.d.ts +0 -2
- package/src/unzip-pako.ts +2 -2
- package/src/util.ts +14 -5
package/esm/bbi.js
CHANGED
|
@@ -1,9 +1,7 @@
|
|
|
1
|
-
import { Parser } from '
|
|
1
|
+
import { Parser } from 'binary-parser';
|
|
2
2
|
import { LocalFile, RemoteFile } from 'generic-filehandle';
|
|
3
3
|
import { Observable } from 'rxjs';
|
|
4
4
|
import { reduce } from 'rxjs/operators';
|
|
5
|
-
import AbortablePromiseCache from 'abortable-promise-cache';
|
|
6
|
-
import QuickLRU from 'quick-lru';
|
|
7
5
|
import { BlockView } from './blockView';
|
|
8
6
|
const BIG_WIG_MAGIC = -2003829722;
|
|
9
7
|
const BIG_BED_MAGIC = -2021002517;
|
|
@@ -31,6 +29,7 @@ function getParsers(isBE) {
|
|
|
31
29
|
.array('zoomLevels', {
|
|
32
30
|
length: 'numZoomLevels',
|
|
33
31
|
type: new Parser()
|
|
32
|
+
.endianess(le)
|
|
34
33
|
.uint32('reductionLevel')
|
|
35
34
|
.uint32('reserved')
|
|
36
35
|
.uint64('dataOffset')
|
|
@@ -39,10 +38,10 @@ function getParsers(isBE) {
|
|
|
39
38
|
const totalSummaryParser = new Parser()
|
|
40
39
|
.endianess(le)
|
|
41
40
|
.uint64('basesCovered')
|
|
42
|
-
.
|
|
43
|
-
.
|
|
44
|
-
.
|
|
45
|
-
.
|
|
41
|
+
.doublele('scoreMin')
|
|
42
|
+
.doublele('scoreMax')
|
|
43
|
+
.doublele('scoreSum')
|
|
44
|
+
.doublele('scoreSumSquares');
|
|
46
45
|
const chromTreeParser = new Parser()
|
|
47
46
|
.endianess(le)
|
|
48
47
|
.uint32('magic')
|
|
@@ -54,7 +53,8 @@ function getParsers(isBE) {
|
|
|
54
53
|
.endianess(le)
|
|
55
54
|
.uint8('isLeafNode')
|
|
56
55
|
.skip(1)
|
|
57
|
-
.uint16('cnt')
|
|
56
|
+
.uint16('cnt')
|
|
57
|
+
.saveOffset('offset');
|
|
58
58
|
return {
|
|
59
59
|
chromTreeParser,
|
|
60
60
|
totalSummaryParser,
|
|
@@ -70,14 +70,8 @@ export class BBI {
|
|
|
70
70
|
* @param renameRefSeqs - an optional method to rename the internal reference sequences using a mapping function
|
|
71
71
|
*/
|
|
72
72
|
constructor(options = {}) {
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
fill: async (params, signal) => {
|
|
76
|
-
return this._getHeader({ ...params, signal });
|
|
77
|
-
},
|
|
78
|
-
});
|
|
79
|
-
const { filehandle, renameRefSeqs, path, url } = options;
|
|
80
|
-
this.renameRefSeqs = renameRefSeqs || ((s) => s);
|
|
73
|
+
const { filehandle, renameRefSeqs = s => s, path, url } = options;
|
|
74
|
+
this.renameRefSeqs = renameRefSeqs;
|
|
81
75
|
if (filehandle) {
|
|
82
76
|
this.bbi = filehandle;
|
|
83
77
|
}
|
|
@@ -97,7 +91,13 @@ export class BBI {
|
|
|
97
91
|
*/
|
|
98
92
|
getHeader(opts = {}) {
|
|
99
93
|
const options = 'aborted' in opts ? { signal: opts } : opts;
|
|
100
|
-
|
|
94
|
+
if (!this.headerP) {
|
|
95
|
+
this.headerP = this._getHeader(options).catch(e => {
|
|
96
|
+
this.headerP = undefined;
|
|
97
|
+
throw e;
|
|
98
|
+
});
|
|
99
|
+
}
|
|
100
|
+
return this.headerP;
|
|
101
101
|
}
|
|
102
102
|
async _getHeader(opts) {
|
|
103
103
|
const header = await this._getMainHeader(opts);
|
|
@@ -108,23 +108,24 @@ export class BBI {
|
|
|
108
108
|
const { buffer } = await this.bbi.read(Buffer.alloc(requestSize), 0, requestSize, 0, opts);
|
|
109
109
|
const isBigEndian = this._isBigEndian(buffer);
|
|
110
110
|
const ret = getParsers(isBigEndian);
|
|
111
|
-
const header = ret.headerParser.parse(buffer)
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
111
|
+
const header = ret.headerParser.parse(buffer);
|
|
112
|
+
const { magic, asOffset, totalSummaryOffset } = header;
|
|
113
|
+
header.fileType = magic === BIG_BED_MAGIC ? 'bigbed' : 'bigwig';
|
|
114
|
+
if (asOffset > requestSize || totalSummaryOffset > requestSize) {
|
|
115
115
|
return this._getMainHeader(opts, requestSize * 2);
|
|
116
116
|
}
|
|
117
|
-
if (
|
|
117
|
+
if (asOffset) {
|
|
118
|
+
const off = Number(header.asOffset);
|
|
118
119
|
header.autoSql = buffer
|
|
119
|
-
.
|
|
120
|
+
.subarray(off, buffer.indexOf(0, off))
|
|
120
121
|
.toString('utf8');
|
|
121
122
|
}
|
|
122
123
|
if (header.totalSummaryOffset > requestSize) {
|
|
123
124
|
return this._getMainHeader(opts, requestSize * 2);
|
|
124
125
|
}
|
|
125
126
|
if (header.totalSummaryOffset) {
|
|
126
|
-
const tail = buffer.
|
|
127
|
-
header.totalSummary = ret.totalSummaryParser.parse(tail)
|
|
127
|
+
const tail = buffer.subarray(Number(header.totalSummaryOffset));
|
|
128
|
+
header.totalSummary = ret.totalSummaryParser.parse(tail);
|
|
128
129
|
}
|
|
129
130
|
return { ...header, isBigEndian };
|
|
130
131
|
}
|
|
@@ -145,37 +146,40 @@ export class BBI {
|
|
|
145
146
|
const le = isBE ? 'big' : 'little';
|
|
146
147
|
const refsByNumber = [];
|
|
147
148
|
const refsByName = {};
|
|
148
|
-
|
|
149
|
-
|
|
149
|
+
let unzoomedDataOffset = Number(header.unzoomedDataOffset);
|
|
150
|
+
const chromTreeOffset = Number(header.chromTreeOffset);
|
|
150
151
|
while (unzoomedDataOffset % 4 !== 0) {
|
|
151
152
|
unzoomedDataOffset += 1;
|
|
152
153
|
}
|
|
153
|
-
const
|
|
154
|
+
const off = unzoomedDataOffset - chromTreeOffset;
|
|
155
|
+
const { buffer } = await this.bbi.read(Buffer.alloc(off), 0, off, Number(chromTreeOffset), opts);
|
|
154
156
|
const p = getParsers(isBE);
|
|
155
|
-
const { keySize } = p.chromTreeParser.parse(
|
|
157
|
+
const { keySize } = p.chromTreeParser.parse(buffer);
|
|
156
158
|
const leafNodeParser = new Parser()
|
|
157
159
|
.endianess(le)
|
|
158
160
|
.string('key', { stripNull: true, length: keySize })
|
|
159
161
|
.uint32('refId')
|
|
160
|
-
.uint32('refSize')
|
|
162
|
+
.uint32('refSize')
|
|
163
|
+
.saveOffset('offset');
|
|
161
164
|
const nonleafNodeParser = new Parser()
|
|
162
165
|
.endianess(le)
|
|
163
166
|
.skip(keySize)
|
|
164
|
-
.uint64('childOffset')
|
|
167
|
+
.uint64('childOffset')
|
|
168
|
+
.saveOffset('offset');
|
|
165
169
|
const rootNodeOffset = 32;
|
|
166
170
|
const bptReadNode = async (currentOffset) => {
|
|
167
171
|
let offset = currentOffset;
|
|
168
|
-
if (offset >=
|
|
172
|
+
if (offset >= buffer.length) {
|
|
169
173
|
throw new Error('reading beyond end of buffer');
|
|
170
174
|
}
|
|
171
|
-
const ret = p.isLeafNode.parse(
|
|
172
|
-
const { isLeafNode, cnt } = ret
|
|
175
|
+
const ret = p.isLeafNode.parse(buffer.subarray(offset));
|
|
176
|
+
const { isLeafNode, cnt } = ret;
|
|
173
177
|
offset += ret.offset;
|
|
174
178
|
if (isLeafNode) {
|
|
175
179
|
for (let n = 0; n < cnt; n += 1) {
|
|
176
|
-
const leafRet = leafNodeParser.parse(
|
|
180
|
+
const leafRet = leafNodeParser.parse(buffer.subarray(offset));
|
|
177
181
|
offset += leafRet.offset;
|
|
178
|
-
const { key, refId, refSize } = leafRet
|
|
182
|
+
const { key, refId, refSize } = leafRet;
|
|
179
183
|
const refRec = { name: key, id: refId, length: refSize };
|
|
180
184
|
refsByName[this.renameRefSeqs(key)] = refId;
|
|
181
185
|
refsByNumber[refId] = refRec;
|
|
@@ -185,11 +189,10 @@ export class BBI {
|
|
|
185
189
|
// parse index node
|
|
186
190
|
const nextNodes = [];
|
|
187
191
|
for (let n = 0; n < cnt; n += 1) {
|
|
188
|
-
const nonleafRet = nonleafNodeParser.parse(
|
|
189
|
-
|
|
192
|
+
const nonleafRet = nonleafNodeParser.parse(buffer.subarray(offset));
|
|
193
|
+
const { childOffset } = nonleafRet;
|
|
190
194
|
offset += nonleafRet.offset;
|
|
191
|
-
childOffset
|
|
192
|
-
nextNodes.push(bptReadNode(childOffset));
|
|
195
|
+
nextNodes.push(bptReadNode(Number(childOffset) - Number(chromTreeOffset)));
|
|
193
196
|
}
|
|
194
197
|
await Promise.all(nextNodes);
|
|
195
198
|
}
|
|
@@ -205,10 +208,8 @@ export class BBI {
|
|
|
205
208
|
* @param abortSignal - a signal to optionally abort this operation
|
|
206
209
|
*/
|
|
207
210
|
async getUnzoomedView(opts) {
|
|
208
|
-
const { unzoomedIndexOffset,
|
|
209
|
-
|
|
210
|
-
const cirLen = nzl ? nzl.dataOffset - unzoomedIndexOffset : 4000;
|
|
211
|
-
return new BlockView(this.bbi, refsByName, unzoomedIndexOffset, cirLen, isBigEndian, uncompressBufSize > 0, fileType);
|
|
211
|
+
const { unzoomedIndexOffset, refsByName, uncompressBufSize, isBigEndian, fileType, } = await this.getHeader(opts);
|
|
212
|
+
return new BlockView(this.bbi, refsByName, unzoomedIndexOffset, isBigEndian, uncompressBufSize > 0, fileType);
|
|
212
213
|
}
|
|
213
214
|
/**
|
|
214
215
|
* Gets features from a BigWig file
|
package/esm/bbi.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bbi.js","sourceRoot":"","sources":["../src/bbi.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"bbi.js","sourceRoot":"","sources":["../src/bbi.ts"],"names":[],"mappings":"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"}
|
package/esm/bigbed.d.ts
CHANGED
|
@@ -3,9 +3,8 @@ import { BlockView } from './blockView';
|
|
|
3
3
|
export declare function filterUndef<T>(ts: (T | undefined)[]): T[];
|
|
4
4
|
export declare class BigBed extends BBI {
|
|
5
5
|
readIndicesCache: any;
|
|
6
|
-
constructor(opts?: any);
|
|
7
6
|
readIndices(opts?: AbortSignal | RequestOptions): any;
|
|
8
|
-
protected getView(
|
|
7
|
+
protected getView(_scale: number, opts: RequestOptions): Promise<BlockView>;
|
|
9
8
|
private _readIndices;
|
|
10
9
|
private searchExtraIndexBlocks;
|
|
11
10
|
searchExtraIndex(name: string, opts?: RequestOptions): Promise<Feature[]>;
|
package/esm/bigbed.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { Parser } from '
|
|
1
|
+
import { Parser } from 'binary-parser';
|
|
2
2
|
import { Observable, merge } from 'rxjs';
|
|
3
3
|
import { map, reduce } from 'rxjs/operators';
|
|
4
4
|
import AbortablePromiseCache from 'abortable-promise-cache';
|
|
@@ -8,8 +8,8 @@ export function filterUndef(ts) {
|
|
|
8
8
|
return ts.filter((t) => !!t);
|
|
9
9
|
}
|
|
10
10
|
export class BigBed extends BBI {
|
|
11
|
-
constructor(
|
|
12
|
-
super(
|
|
11
|
+
constructor() {
|
|
12
|
+
super(...arguments);
|
|
13
13
|
this.readIndicesCache = new AbortablePromiseCache({
|
|
14
14
|
cache: new QuickLRU({ maxSize: 1 }),
|
|
15
15
|
fill: async (args, signal) => {
|
|
@@ -27,7 +27,7 @@ export class BigBed extends BBI {
|
|
|
27
27
|
* @param abortSignal - an optional AbortSignal to kill operation
|
|
28
28
|
* @return promise for a BlockView
|
|
29
29
|
*/
|
|
30
|
-
async getView(
|
|
30
|
+
async getView(_scale, opts) {
|
|
31
31
|
return this.getUnzoomedView(opts);
|
|
32
32
|
}
|
|
33
33
|
/*
|
|
@@ -37,14 +37,14 @@ export class BigBed extends BBI {
|
|
|
37
37
|
*/
|
|
38
38
|
async _readIndices(opts) {
|
|
39
39
|
const { extHeaderOffset, isBigEndian } = await this.getHeader(opts);
|
|
40
|
-
const { buffer: data } = await this.bbi.read(Buffer.alloc(64), 0, 64, extHeaderOffset);
|
|
40
|
+
const { buffer: data } = await this.bbi.read(Buffer.alloc(64), 0, 64, Number(extHeaderOffset));
|
|
41
41
|
const le = isBigEndian ? 'big' : 'little';
|
|
42
42
|
const ret = new Parser()
|
|
43
43
|
.endianess(le)
|
|
44
44
|
.uint16('size')
|
|
45
45
|
.uint16('count')
|
|
46
46
|
.uint64('offset')
|
|
47
|
-
.parse(data)
|
|
47
|
+
.parse(data);
|
|
48
48
|
const { count, offset } = ret;
|
|
49
49
|
// no extra index is defined if count==0
|
|
50
50
|
if (count === 0) {
|
|
@@ -52,7 +52,7 @@ export class BigBed extends BBI {
|
|
|
52
52
|
}
|
|
53
53
|
const blocklen = 20;
|
|
54
54
|
const len = blocklen * count;
|
|
55
|
-
const { buffer } = await this.bbi.read(Buffer.alloc(len), 0, len, offset);
|
|
55
|
+
const { buffer } = await this.bbi.read(Buffer.alloc(len), 0, len, Number(offset));
|
|
56
56
|
const extParser = new Parser()
|
|
57
57
|
.endianess(le)
|
|
58
58
|
.int16('type')
|
|
@@ -62,7 +62,7 @@ export class BigBed extends BBI {
|
|
|
62
62
|
.int16('field');
|
|
63
63
|
const indices = [];
|
|
64
64
|
for (let i = 0; i < count; i += 1) {
|
|
65
|
-
indices.push(extParser.parse(buffer.
|
|
65
|
+
indices.push(extParser.parse(buffer.subarray(i * blocklen)));
|
|
66
66
|
}
|
|
67
67
|
return indices;
|
|
68
68
|
}
|
|
@@ -82,17 +82,19 @@ export class BigBed extends BBI {
|
|
|
82
82
|
}
|
|
83
83
|
const locs = indices.map(async (index) => {
|
|
84
84
|
const { offset, field } = index;
|
|
85
|
-
const { buffer: data } = await this.bbi.read(Buffer.alloc(32), 0, 32, offset, opts);
|
|
85
|
+
const { buffer: data } = await this.bbi.read(Buffer.alloc(32), 0, 32, Number(offset), opts);
|
|
86
|
+
const le = isBigEndian ? 'big' : 'little';
|
|
86
87
|
const p = new Parser()
|
|
87
|
-
.endianess(
|
|
88
|
+
.endianess(le)
|
|
88
89
|
.int32('magic')
|
|
89
90
|
.int32('blockSize')
|
|
90
91
|
.int32('keySize')
|
|
91
92
|
.int32('valSize')
|
|
92
93
|
.uint64('itemCount');
|
|
93
|
-
const { blockSize, keySize, valSize } = p.parse(data)
|
|
94
|
+
const { blockSize, keySize, valSize } = p.parse(data);
|
|
95
|
+
// console.log({blockSize,keySize,valSize})
|
|
94
96
|
const bpt = new Parser()
|
|
95
|
-
.endianess(
|
|
97
|
+
.endianess(le)
|
|
96
98
|
.int8('nodeType')
|
|
97
99
|
.skip(1)
|
|
98
100
|
.int16('cnt')
|
|
@@ -102,12 +104,14 @@ export class BigBed extends BBI {
|
|
|
102
104
|
0: new Parser().array('leafkeys', {
|
|
103
105
|
length: 'cnt',
|
|
104
106
|
type: new Parser()
|
|
107
|
+
.endianess(le)
|
|
105
108
|
.string('key', { length: keySize, stripNull: true })
|
|
106
109
|
.uint64('offset'),
|
|
107
110
|
}),
|
|
108
111
|
1: new Parser().array('keys', {
|
|
109
112
|
length: 'cnt',
|
|
110
113
|
type: new Parser()
|
|
114
|
+
.endianess(le)
|
|
111
115
|
.string('key', { length: keySize, stripNull: true })
|
|
112
116
|
.uint64('offset')
|
|
113
117
|
.uint32('length')
|
|
@@ -116,9 +120,10 @@ export class BigBed extends BBI {
|
|
|
116
120
|
},
|
|
117
121
|
});
|
|
118
122
|
const bptReadNode = async (nodeOffset) => {
|
|
123
|
+
const val = Number(nodeOffset);
|
|
119
124
|
const len = 4 + blockSize * (keySize + valSize);
|
|
120
|
-
const { buffer } = await this.bbi.read(Buffer.alloc(len), 0, len,
|
|
121
|
-
const node = bpt.parse(buffer)
|
|
125
|
+
const { buffer } = await this.bbi.read(Buffer.alloc(len), 0, len, val, opts);
|
|
126
|
+
const node = bpt.parse(buffer);
|
|
122
127
|
if (node.leafkeys) {
|
|
123
128
|
let lastOffset;
|
|
124
129
|
for (let i = 0; i < node.leafkeys.length; i += 1) {
|
|
@@ -138,7 +143,7 @@ export class BigBed extends BBI {
|
|
|
138
143
|
return undefined;
|
|
139
144
|
};
|
|
140
145
|
const rootNodeOffset = 32;
|
|
141
|
-
return bptReadNode(offset + rootNodeOffset);
|
|
146
|
+
return bptReadNode(Number(offset) + rootNodeOffset);
|
|
142
147
|
});
|
|
143
148
|
return filterUndef(await Promise.all(locs));
|
|
144
149
|
}
|
|
@@ -157,7 +162,7 @@ export class BigBed extends BBI {
|
|
|
157
162
|
}
|
|
158
163
|
const view = await this.getUnzoomedView(opts);
|
|
159
164
|
const res = blocks.map(block => {
|
|
160
|
-
return new Observable(
|
|
165
|
+
return new Observable(observer => {
|
|
161
166
|
view.readFeatures(observer, [block], opts);
|
|
162
167
|
}).pipe(reduce((acc, curr) => acc.concat(curr)), map(x => {
|
|
163
168
|
for (let i = 0; i < x.length; i += 1) {
|
|
@@ -167,9 +172,7 @@ export class BigBed extends BBI {
|
|
|
167
172
|
}));
|
|
168
173
|
});
|
|
169
174
|
const ret = await merge(...res).toPromise();
|
|
170
|
-
return ret.filter((f)
|
|
171
|
-
return f.rest.split('\t')[f.field - 3] === name;
|
|
172
|
-
});
|
|
175
|
+
return ret.filter(f => { var _a; return ((_a = f.rest) === null || _a === void 0 ? void 0 : _a.split('\t')[(f.field || 0) - 3]) === name; });
|
|
173
176
|
}
|
|
174
177
|
}
|
|
175
178
|
//# sourceMappingURL=bigbed.js.map
|
package/esm/bigbed.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bigbed.js","sourceRoot":"","sources":["../src/bigbed.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"bigbed.js","sourceRoot":"","sources":["../src/bigbed.ts"],"names":[],"mappings":"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"}
|
package/esm/bigwig.d.ts
CHANGED
|
@@ -4,9 +4,7 @@ export declare class BigWig extends BBI {
|
|
|
4
4
|
/**
|
|
5
5
|
* Retrieves a BlockView of a specific zoomLevel
|
|
6
6
|
*
|
|
7
|
-
* @param
|
|
8
|
-
* @param start - The start of a region
|
|
9
|
-
* @param end - The end of a region
|
|
7
|
+
* @param scale - number
|
|
10
8
|
* @param opts - An object containing basesPerSpan (e.g. pixels per basepair) or scale used to infer the zoomLevel to use
|
|
11
9
|
*/
|
|
12
10
|
protected getView(scale: number, opts: RequestOptions): Promise<BlockView>;
|
package/esm/bigwig.js
CHANGED
|
@@ -4,9 +4,7 @@ export class BigWig extends BBI {
|
|
|
4
4
|
/**
|
|
5
5
|
* Retrieves a BlockView of a specific zoomLevel
|
|
6
6
|
*
|
|
7
|
-
* @param
|
|
8
|
-
* @param start - The start of a region
|
|
9
|
-
* @param end - The end of a region
|
|
7
|
+
* @param scale - number
|
|
10
8
|
* @param opts - An object containing basesPerSpan (e.g. pixels per basepair) or scale used to infer the zoomLevel to use
|
|
11
9
|
*/
|
|
12
10
|
async getView(scale, opts) {
|
|
@@ -20,10 +18,8 @@ export class BigWig extends BBI {
|
|
|
20
18
|
for (let i = maxLevel; i >= 0; i -= 1) {
|
|
21
19
|
const zh = zoomLevels[i];
|
|
22
20
|
if (zh && zh.reductionLevel <= 2 * basesPerPx) {
|
|
23
|
-
const
|
|
24
|
-
|
|
25
|
-
: fileSize - 4 - zh.indexOffset;
|
|
26
|
-
return new BlockView(this.bbi, refsByName, zh.indexOffset, indexLength, isBigEndian, uncompressBufSize > 0, 'summary');
|
|
21
|
+
const indexOffset = Number(zh.indexOffset);
|
|
22
|
+
return new BlockView(this.bbi, refsByName, indexOffset, isBigEndian, uncompressBufSize > 0, 'summary');
|
|
27
23
|
}
|
|
28
24
|
}
|
|
29
25
|
return this.getUnzoomedView(opts);
|
package/esm/bigwig.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bigwig.js","sourceRoot":"","sources":["../src/bigwig.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAA;AACvC,OAAO,EAAE,GAAG,EAAkB,MAAM,OAAO,CAAA;AAE3C,MAAM,OAAO,MAAO,SAAQ,GAAG;IAC7B
|
|
1
|
+
{"version":3,"file":"bigwig.js","sourceRoot":"","sources":["../src/bigwig.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAA;AACvC,OAAO,EAAE,GAAG,EAAkB,MAAM,OAAO,CAAA;AAE3C,MAAM,OAAO,MAAO,SAAQ,GAAG;IAC7B;;;;;OAKG;IACO,KAAK,CAAC,OAAO,CAAC,KAAa,EAAE,IAAoB;QACzD,MAAM,EAAE,UAAU,EAAE,UAAU,EAAE,QAAQ,EAAE,WAAW,EAAE,iBAAiB,EAAE,GACxE,MAAM,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAA;QAC5B,MAAM,UAAU,GAAG,CAAC,GAAG,KAAK,CAAA;QAC5B,IAAI,QAAQ,GAAG,UAAU,CAAC,MAAM,CAAA;QAChC,IAAI,CAAC,QAAQ,EAAE;YACb,4EAA4E;YAC5E,QAAQ,IAAI,CAAC,CAAA;SACd;QAED,KAAK,IAAI,CAAC,GAAG,QAAQ,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE;YACrC,MAAM,EAAE,GAAG,UAAU,CAAC,CAAC,CAAC,CAAA;YACxB,IAAI,EAAE,IAAI,EAAE,CAAC,cAAc,IAAI,CAAC,GAAG,UAAU,EAAE;gBAC7C,MAAM,WAAW,GAAG,MAAM,CAAC,EAAE,CAAC,WAAW,CAAC,CAAA;gBAE1C,OAAO,IAAI,SAAS,CAClB,IAAI,CAAC,GAAG,EACR,UAAU,EACV,WAAW,EACX,WAAW,EACX,iBAAiB,GAAG,CAAC,EACrB,SAAS,CACV,CAAA;aACF;SACF;QACD,OAAO,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,CAAA;IACnC,CAAC;CACF"}
|
package/esm/blockView.d.ts
CHANGED
|
@@ -18,25 +18,24 @@ interface Options {
|
|
|
18
18
|
* @constructs
|
|
19
19
|
*/
|
|
20
20
|
export declare class BlockView {
|
|
21
|
-
private cirTreeOffset;
|
|
22
|
-
private cirTreeLength;
|
|
23
21
|
private bbi;
|
|
24
|
-
private isCompressed;
|
|
25
|
-
private isBigEndian;
|
|
26
22
|
private refsByName;
|
|
23
|
+
private cirTreeOffset;
|
|
24
|
+
private isBigEndian;
|
|
25
|
+
private isCompressed;
|
|
27
26
|
private blockType;
|
|
28
27
|
private cirTreePromise?;
|
|
29
28
|
private featureCache;
|
|
30
29
|
private leafParser;
|
|
31
|
-
private bigWigParser;
|
|
32
30
|
private bigBedParser;
|
|
33
|
-
|
|
34
|
-
constructor(bbi: GenericFilehandle, refsByName: any, cirTreeOffset: number, cirTreeLength: number, isBigEndian: boolean, isCompressed: boolean, blockType: string);
|
|
31
|
+
constructor(bbi: GenericFilehandle, refsByName: any, cirTreeOffset: number, isBigEndian: boolean, isCompressed: boolean, blockType: string);
|
|
35
32
|
readWigData(chrName: string, start: number, end: number, observer: Observer<Feature[]>, opts: Options): Promise<void>;
|
|
36
33
|
private parseSummaryBlock;
|
|
37
34
|
private parseBigBedBlock;
|
|
38
35
|
private parseBigWigBlock;
|
|
39
|
-
|
|
40
|
-
|
|
36
|
+
readFeatures(observer: Observer<Feature[]>, blocks: {
|
|
37
|
+
offset: bigint;
|
|
38
|
+
length: bigint;
|
|
39
|
+
}[], opts?: Options): Promise<void>;
|
|
41
40
|
}
|
|
42
41
|
export {};
|