@gmod/bbi 7.1.0 → 8.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 +4 -0
- package/README.md +59 -0
- package/dist/bbi.d.ts +13 -3
- package/dist/bbi.js +77 -17
- package/dist/bbi.js.map +1 -1
- package/dist/bigbed.d.ts +14 -2
- package/dist/bigbed.js +115 -76
- package/dist/bigbed.js.map +1 -1
- package/dist/bigwig.js +1 -2
- package/dist/bigwig.js.map +1 -1
- package/dist/block-view.d.ts +13 -4
- package/dist/block-view.js +324 -148
- package/dist/block-view.js.map +1 -1
- package/dist/index.d.ts +2 -1
- package/dist/index.js +3 -1
- package/dist/index.js.map +1 -1
- package/dist/parse-bigwig.d.ts +3 -0
- package/dist/parse-bigwig.js +15 -0
- package/dist/parse-bigwig.js.map +1 -0
- package/dist/range.js +11 -24
- package/dist/range.js.map +1 -1
- package/dist/types.d.ts +14 -2
- package/dist/unzip.d.ts +18 -1
- package/dist/unzip.js +33 -4
- package/dist/unzip.js.map +1 -1
- package/dist/util.d.ts +2 -4
- package/dist/util.js +6 -5
- package/dist/util.js.map +1 -1
- package/dist/wasm/inflate-wasm-inlined.d.ts +19 -0
- package/dist/wasm/inflate-wasm-inlined.js +117 -0
- package/dist/wasm/inflate-wasm-inlined.js.map +1 -0
- package/dist/wasm/inflate_wasm.d.ts +1 -0
- package/dist/wasm/inflate_wasm.js +43 -0
- package/dist/wasm/inflate_wasm.js.map +1 -0
- package/dist/wasm/inflate_wasm_bg.d.ts +68 -0
- package/dist/wasm/inflate_wasm_bg.js +307 -0
- package/dist/wasm/inflate_wasm_bg.js.map +1 -0
- package/esm/bbi.d.ts +13 -3
- package/esm/bbi.js +77 -17
- package/esm/bbi.js.map +1 -1
- package/esm/bigbed.d.ts +14 -2
- package/esm/bigbed.js +115 -76
- package/esm/bigbed.js.map +1 -1
- package/esm/bigwig.js +1 -2
- package/esm/bigwig.js.map +1 -1
- package/esm/block-view.d.ts +13 -4
- package/esm/block-view.js +326 -150
- package/esm/block-view.js.map +1 -1
- package/esm/index.d.ts +2 -1
- package/esm/index.js +1 -0
- package/esm/index.js.map +1 -1
- package/esm/parse-bigwig.d.ts +3 -0
- package/esm/parse-bigwig.js +12 -0
- package/esm/parse-bigwig.js.map +1 -0
- package/esm/range.js +11 -24
- package/esm/range.js.map +1 -1
- package/esm/types.d.ts +14 -2
- package/esm/unzip.d.ts +18 -1
- package/esm/unzip.js +30 -3
- package/esm/unzip.js.map +1 -1
- package/esm/util.d.ts +2 -4
- package/esm/util.js +6 -5
- package/esm/util.js.map +1 -1
- package/esm/wasm/inflate-wasm-inlined.d.ts +19 -0
- package/esm/wasm/inflate-wasm-inlined.js +111 -0
- package/esm/wasm/inflate-wasm-inlined.js.map +1 -0
- package/esm/wasm/inflate_wasm.d.ts +1 -0
- package/esm/wasm/inflate_wasm.js +5 -0
- package/esm/wasm/inflate_wasm.js.map +1 -0
- package/esm/wasm/inflate_wasm_bg.d.ts +68 -0
- package/esm/wasm/inflate_wasm_bg.js +296 -0
- package/esm/wasm/inflate_wasm_bg.js.map +1 -0
- package/package.json +15 -10
- package/src/bbi.ts +100 -20
- package/src/bigbed.ts +157 -80
- package/src/bigwig.ts +1 -2
- package/src/block-view.ts +415 -156
- package/src/index.ts +8 -1
- package/src/parse-bigwig.ts +19 -0
- package/src/range.ts +13 -21
- package/src/types.ts +19 -2
- package/src/unzip.ts +88 -3
- package/src/util.ts +9 -10
- package/src/wasm/inflate-wasm-inlined.d.ts +49 -0
- package/src/wasm/inflate-wasm-inlined.js +1 -0
- package/src/wasm/inflate_wasm.d.ts +35 -0
- package/src/wasm/inflate_wasm.js +4 -0
- package/src/wasm/inflate_wasm_bg.js +309 -0
- package/src/wasm/inflate_wasm_bg.wasm +0 -0
- package/src/wasm/inflate_wasm_bg.wasm.d.ts +13 -0
package/esm/bigbed.js
CHANGED
|
@@ -3,9 +3,108 @@ import QuickLRU from 'quick-lru';
|
|
|
3
3
|
import { Observable, firstValueFrom, merge } from 'rxjs';
|
|
4
4
|
import { map, reduce } from 'rxjs/operators';
|
|
5
5
|
import { BBI } from "./bbi.js";
|
|
6
|
+
const decoder = new TextDecoder('utf8');
|
|
6
7
|
export function filterUndef(ts) {
|
|
7
8
|
return ts.filter((t) => !!t);
|
|
8
9
|
}
|
|
10
|
+
function getTabField(str, fieldIndex) {
|
|
11
|
+
if (fieldIndex < 0) {
|
|
12
|
+
return undefined;
|
|
13
|
+
}
|
|
14
|
+
let start = 0;
|
|
15
|
+
for (let i = 0; i < fieldIndex; i++) {
|
|
16
|
+
start = str.indexOf('\t', start);
|
|
17
|
+
if (start === -1) {
|
|
18
|
+
return undefined;
|
|
19
|
+
}
|
|
20
|
+
start++;
|
|
21
|
+
}
|
|
22
|
+
const end = str.indexOf('\t', start);
|
|
23
|
+
return end === -1 ? str.slice(start) : str.slice(start, end);
|
|
24
|
+
}
|
|
25
|
+
// Parses a null-terminated string key from a B+ tree node
|
|
26
|
+
function parseKey(buffer, offset, keySize) {
|
|
27
|
+
const keyEnd = buffer.indexOf(0, offset);
|
|
28
|
+
return decoder.decode(buffer.subarray(offset, keyEnd !== -1 ? keyEnd : offset + keySize));
|
|
29
|
+
}
|
|
30
|
+
// Recursively traverses a B+ tree to search for a specific name in the BigBed extraIndex
|
|
31
|
+
// B+ trees are balanced tree structures optimized for disk-based searches
|
|
32
|
+
async function readBPlusTreeNode(bbi, nodeOffset, blockSize, keySize, valSize, name, field, opts) {
|
|
33
|
+
const len = 4 + blockSize * (keySize + valSize);
|
|
34
|
+
const buffer = await bbi.read(len, nodeOffset, opts);
|
|
35
|
+
const dataView = new DataView(buffer.buffer, buffer.byteOffset, buffer.length);
|
|
36
|
+
let offset = 0;
|
|
37
|
+
const nodeType = dataView.getInt8(offset);
|
|
38
|
+
offset += 2; // skip nodeType byte + 1 reserved byte
|
|
39
|
+
const cnt = dataView.getInt16(offset, true);
|
|
40
|
+
offset += 2;
|
|
41
|
+
// Non-leaf node (nodeType === 0): contains keys and child node pointers for navigation
|
|
42
|
+
if (nodeType === 0) {
|
|
43
|
+
const leafkeys = [];
|
|
44
|
+
for (let i = 0; i < cnt; i++) {
|
|
45
|
+
const key = parseKey(buffer, offset, keySize);
|
|
46
|
+
offset += keySize;
|
|
47
|
+
const dataOffset = Number(dataView.getBigUint64(offset, true));
|
|
48
|
+
offset += 8;
|
|
49
|
+
leafkeys.push({
|
|
50
|
+
key,
|
|
51
|
+
offset: dataOffset,
|
|
52
|
+
});
|
|
53
|
+
}
|
|
54
|
+
// Binary search to find the appropriate child node
|
|
55
|
+
let left = 0;
|
|
56
|
+
let right = leafkeys.length - 1;
|
|
57
|
+
let targetIndex = leafkeys.length - 1;
|
|
58
|
+
while (left <= right) {
|
|
59
|
+
const mid = Math.floor((left + right) / 2);
|
|
60
|
+
const cmp = name.localeCompare(leafkeys[mid].key);
|
|
61
|
+
if (cmp < 0) {
|
|
62
|
+
targetIndex = mid - 1;
|
|
63
|
+
right = mid - 1;
|
|
64
|
+
}
|
|
65
|
+
else {
|
|
66
|
+
left = mid + 1;
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
const childOffset = targetIndex >= 0 ? leafkeys[targetIndex].offset : leafkeys[0].offset;
|
|
70
|
+
return readBPlusTreeNode(bbi, childOffset, blockSize, keySize, valSize, name, field, opts);
|
|
71
|
+
}
|
|
72
|
+
else if (nodeType === 1) {
|
|
73
|
+
// Leaf node (nodeType === 1): contains actual key-value data
|
|
74
|
+
const keys = [];
|
|
75
|
+
for (let i = 0; i < cnt; i++) {
|
|
76
|
+
const key = parseKey(buffer, offset, keySize);
|
|
77
|
+
offset += keySize;
|
|
78
|
+
const dataOffset = Number(dataView.getBigUint64(offset, true));
|
|
79
|
+
offset += 8;
|
|
80
|
+
const length = dataView.getUint32(offset, true);
|
|
81
|
+
offset += 4;
|
|
82
|
+
offset += 4; // skip reserved
|
|
83
|
+
keys.push({
|
|
84
|
+
key,
|
|
85
|
+
offset: dataOffset,
|
|
86
|
+
length,
|
|
87
|
+
});
|
|
88
|
+
}
|
|
89
|
+
// Binary search for exact key match in sorted leaf node
|
|
90
|
+
let left = 0;
|
|
91
|
+
let right = keys.length - 1;
|
|
92
|
+
while (left <= right) {
|
|
93
|
+
const mid = Math.floor((left + right) / 2);
|
|
94
|
+
const cmp = name.localeCompare(keys[mid].key);
|
|
95
|
+
if (cmp === 0) {
|
|
96
|
+
return { ...keys[mid], field };
|
|
97
|
+
}
|
|
98
|
+
else if (cmp < 0) {
|
|
99
|
+
right = mid - 1;
|
|
100
|
+
}
|
|
101
|
+
else {
|
|
102
|
+
left = mid + 1;
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
return undefined;
|
|
106
|
+
}
|
|
107
|
+
}
|
|
9
108
|
export class BigBed extends BBI {
|
|
10
109
|
readIndicesCache = new AbortablePromiseCache({
|
|
11
110
|
cache: new QuickLRU({ maxSize: 1 }),
|
|
@@ -56,7 +155,7 @@ export class BigBed extends BBI {
|
|
|
56
155
|
const fieldcount = dataView.getInt16(offset, true);
|
|
57
156
|
offset += 2;
|
|
58
157
|
const dataOffset = Number(dataView.getBigUint64(offset, true));
|
|
59
|
-
offset += 8 + 4; //4
|
|
158
|
+
offset += 8 + 4; // skip 8-byte offset + 4 reserved bytes
|
|
60
159
|
const field = dataView.getInt16(offset, true);
|
|
61
160
|
indices.push({
|
|
62
161
|
type,
|
|
@@ -82,7 +181,6 @@ export class BigBed extends BBI {
|
|
|
82
181
|
if (indices.length === 0) {
|
|
83
182
|
return [];
|
|
84
183
|
}
|
|
85
|
-
const decoder = new TextDecoder('utf8');
|
|
86
184
|
const locs = indices.map(async (index) => {
|
|
87
185
|
const { offset: offset2, field } = index;
|
|
88
186
|
const b = await this.bbi.read(32, offset2, opts);
|
|
@@ -98,72 +196,7 @@ export class BigBed extends BBI {
|
|
|
98
196
|
offset += 4;
|
|
99
197
|
// const _itemCount = Number(dataView.getBigUint64(offset, true))
|
|
100
198
|
offset += 8;
|
|
101
|
-
|
|
102
|
-
const val = nodeOffset;
|
|
103
|
-
const len = 4 + blockSize * (keySize + valSize);
|
|
104
|
-
const buffer = await this.bbi.read(len, val, opts);
|
|
105
|
-
const b = buffer;
|
|
106
|
-
const dataView = new DataView(b.buffer, b.byteOffset, b.length);
|
|
107
|
-
let offset = 0;
|
|
108
|
-
const nodeType = dataView.getInt8(offset);
|
|
109
|
-
offset += 2; //skip 1
|
|
110
|
-
const cnt = dataView.getInt16(offset, true);
|
|
111
|
-
offset += 2;
|
|
112
|
-
const keys = [];
|
|
113
|
-
if (nodeType === 0) {
|
|
114
|
-
const leafkeys = [];
|
|
115
|
-
for (let i = 0; i < cnt; i++) {
|
|
116
|
-
const key = decoder
|
|
117
|
-
.decode(b.subarray(offset, offset + keySize))
|
|
118
|
-
.replaceAll('\0', '');
|
|
119
|
-
offset += keySize;
|
|
120
|
-
const dataOffset = Number(dataView.getBigUint64(offset, true));
|
|
121
|
-
offset += 8;
|
|
122
|
-
leafkeys.push({
|
|
123
|
-
key,
|
|
124
|
-
offset: dataOffset,
|
|
125
|
-
});
|
|
126
|
-
}
|
|
127
|
-
let lastOffset = 0;
|
|
128
|
-
for (const { key, offset } of leafkeys) {
|
|
129
|
-
if (name.localeCompare(key) < 0 && lastOffset) {
|
|
130
|
-
return bptReadNode(lastOffset);
|
|
131
|
-
}
|
|
132
|
-
lastOffset = offset;
|
|
133
|
-
}
|
|
134
|
-
return bptReadNode(lastOffset);
|
|
135
|
-
}
|
|
136
|
-
else if (nodeType === 1) {
|
|
137
|
-
for (let i = 0; i < cnt; i++) {
|
|
138
|
-
const key = decoder
|
|
139
|
-
.decode(b.subarray(offset, offset + keySize))
|
|
140
|
-
.replaceAll('\0', '');
|
|
141
|
-
offset += keySize;
|
|
142
|
-
const dataOffset = Number(dataView.getBigUint64(offset, true));
|
|
143
|
-
offset += 8;
|
|
144
|
-
const length = dataView.getUint32(offset, true);
|
|
145
|
-
offset += 4;
|
|
146
|
-
const reserved = dataView.getUint32(offset, true);
|
|
147
|
-
offset += 4;
|
|
148
|
-
keys.push({
|
|
149
|
-
key,
|
|
150
|
-
offset: dataOffset,
|
|
151
|
-
length,
|
|
152
|
-
reserved,
|
|
153
|
-
});
|
|
154
|
-
}
|
|
155
|
-
for (const n of keys) {
|
|
156
|
-
if (n.key === name) {
|
|
157
|
-
return {
|
|
158
|
-
...n,
|
|
159
|
-
field,
|
|
160
|
-
};
|
|
161
|
-
}
|
|
162
|
-
}
|
|
163
|
-
return undefined;
|
|
164
|
-
}
|
|
165
|
-
};
|
|
166
|
-
return bptReadNode(offset2 + 32);
|
|
199
|
+
return readBPlusTreeNode(this.bbi, offset2 + 32, blockSize, keySize, valSize, name, field, opts);
|
|
167
200
|
});
|
|
168
201
|
return filterUndef(await Promise.all(locs));
|
|
169
202
|
}
|
|
@@ -174,7 +207,7 @@ export class BigBed extends BBI {
|
|
|
174
207
|
*
|
|
175
208
|
* @param name - the name to search for
|
|
176
209
|
*
|
|
177
|
-
* @param opts - options object with optional
|
|
210
|
+
* @param opts - options object with optional AbortSignal
|
|
178
211
|
*
|
|
179
212
|
* @return array of Feature
|
|
180
213
|
*/
|
|
@@ -189,15 +222,21 @@ export class BigBed extends BBI {
|
|
|
189
222
|
view.readFeatures(observer, [block], opts).catch((e) => {
|
|
190
223
|
observer.error(e);
|
|
191
224
|
});
|
|
192
|
-
}).pipe(reduce((acc, curr) =>
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
return x;
|
|
197
|
-
}));
|
|
225
|
+
}).pipe(reduce((acc, curr) => {
|
|
226
|
+
acc.push(...curr);
|
|
227
|
+
return acc;
|
|
228
|
+
}, []), map(features => features.map(f => ({ ...f, field: block.field }))));
|
|
198
229
|
});
|
|
199
230
|
const ret = await firstValueFrom(merge(...res));
|
|
200
|
-
|
|
231
|
+
// Filter to features where the indexed field matches the search name
|
|
232
|
+
// field offset is adjusted by -3 to account for chrom, chromStart, chromEnd columns
|
|
233
|
+
return ret.filter(f => {
|
|
234
|
+
if (!f.rest) {
|
|
235
|
+
return false;
|
|
236
|
+
}
|
|
237
|
+
const fieldIndex = (f.field || 0) - 3;
|
|
238
|
+
return getTabField(f.rest, fieldIndex) === name;
|
|
239
|
+
});
|
|
201
240
|
}
|
|
202
241
|
}
|
|
203
242
|
//# 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,qBAAqB,MAAM,+BAA+B,CAAA;AACjE,OAAO,QAAQ,MAAM,WAAW,CAAA;AAChC,OAAO,EAAE,UAAU,EAAE,cAAc,EAAE,KAAK,EAAE,MAAM,MAAM,CAAA;AACxD,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAA;AAE5C,OAAO,EAAE,GAAG,EAAE,MAAM,UAAU,CAAA;
|
|
1
|
+
{"version":3,"file":"bigbed.js","sourceRoot":"","sources":["../src/bigbed.ts"],"names":[],"mappings":"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"}
|
package/esm/bigwig.js
CHANGED
|
@@ -15,9 +15,8 @@ export class BigWig extends BBI {
|
|
|
15
15
|
const maxLevel = zoomLevels.length - 1;
|
|
16
16
|
for (let i = maxLevel; i >= 0; i -= 1) {
|
|
17
17
|
const zh = zoomLevels[i];
|
|
18
|
-
// eslint-disable-next-line @typescript-eslint/no-unnecessary-condition
|
|
19
18
|
if (zh && zh.reductionLevel <= 2 * basesPerPx) {
|
|
20
|
-
return new BlockView(this.bbi, refsByName, zh.indexOffset, uncompressBufSize
|
|
19
|
+
return new BlockView(this.bbi, refsByName, zh.indexOffset, uncompressBufSize, 'summary');
|
|
21
20
|
}
|
|
22
21
|
}
|
|
23
22
|
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,GAAG,EAAE,MAAM,UAAU,CAAA;AAC9B,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAA;AAI3C,MAAM,OAAO,MAAO,SAAQ,GAAG;IAC7B;;;;;;;OAOG;IACO,KAAK,CAAC,OAAO,CAAC,KAAa,EAAE,IAAoB;QACzD,MAAM,EAAE,UAAU,EAAE,UAAU,EAAE,iBAAiB,EAAE,GACjD,MAAM,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAA;QAC5B,MAAM,UAAU,GAAG,CAAC,GAAG,KAAK,CAAA;QAC5B,MAAM,QAAQ,GAAG,UAAU,CAAC,MAAM,GAAG,CAAC,CAAA;QAEtC,KAAK,IAAI,CAAC,GAAG,QAAQ,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;YACtC,MAAM,EAAE,GAAG,UAAU,CAAC,CAAC,CAAC,CAAA;YACxB,
|
|
1
|
+
{"version":3,"file":"bigwig.js","sourceRoot":"","sources":["../src/bigwig.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,UAAU,CAAA;AAC9B,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAA;AAI3C,MAAM,OAAO,MAAO,SAAQ,GAAG;IAC7B;;;;;;;OAOG;IACO,KAAK,CAAC,OAAO,CAAC,KAAa,EAAE,IAAoB;QACzD,MAAM,EAAE,UAAU,EAAE,UAAU,EAAE,iBAAiB,EAAE,GACjD,MAAM,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAA;QAC5B,MAAM,UAAU,GAAG,CAAC,GAAG,KAAK,CAAA;QAC5B,MAAM,QAAQ,GAAG,UAAU,CAAC,MAAM,GAAG,CAAC,CAAA;QAEtC,KAAK,IAAI,CAAC,GAAG,QAAQ,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;YACtC,MAAM,EAAE,GAAG,UAAU,CAAC,CAAC,CAAC,CAAA;YACxB,IAAI,EAAE,IAAI,EAAE,CAAC,cAAc,IAAI,CAAC,GAAG,UAAU,EAAE,CAAC;gBAC9C,OAAO,IAAI,SAAS,CAClB,IAAI,CAAC,GAAG,EACR,UAAU,EACV,EAAE,CAAC,WAAW,EACd,iBAAiB,EACjB,SAAS,CACV,CAAA;YACH,CAAC;QACH,CAAC;QACD,OAAO,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,CAAA;IACnC,CAAC;CACF"}
|
package/esm/block-view.d.ts
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import type { Feature } from './types.ts';
|
|
2
|
+
import type { BigWigFeatureArrays, SummaryFeatureArrays } from './unzip.ts';
|
|
2
3
|
import type { GenericFilehandle } from 'generic-filehandle2';
|
|
3
4
|
import type { Observer } from 'rxjs';
|
|
4
5
|
interface CoordRequest {
|
|
@@ -19,12 +20,12 @@ interface Options {
|
|
|
19
20
|
export declare class BlockView {
|
|
20
21
|
private bbi;
|
|
21
22
|
private refsByName;
|
|
22
|
-
private
|
|
23
|
-
private
|
|
23
|
+
private rTreeOffset;
|
|
24
|
+
private uncompressBufSize;
|
|
24
25
|
private blockType;
|
|
25
|
-
private
|
|
26
|
+
private rTreePromise?;
|
|
26
27
|
private featureCache;
|
|
27
|
-
constructor(bbi: GenericFilehandle, refsByName:
|
|
28
|
+
constructor(bbi: GenericFilehandle, refsByName: Record<string, number>, rTreeOffset: number, uncompressBufSize: number, blockType: string);
|
|
28
29
|
readWigData(chrName: string, start: number, end: number, observer: Observer<Feature[]>, opts?: Options): Promise<void>;
|
|
29
30
|
private parseSummaryBlock;
|
|
30
31
|
private parseBigBedBlock;
|
|
@@ -33,5 +34,13 @@ export declare class BlockView {
|
|
|
33
34
|
offset: number;
|
|
34
35
|
length: number;
|
|
35
36
|
}[], opts?: Options): Promise<void>;
|
|
37
|
+
readBigWigFeaturesAsArrays(blocks: {
|
|
38
|
+
offset: number;
|
|
39
|
+
length: number;
|
|
40
|
+
}[], opts?: Options): Promise<BigWigFeatureArrays>;
|
|
41
|
+
readSummaryFeaturesAsArrays(blocks: {
|
|
42
|
+
offset: number;
|
|
43
|
+
length: number;
|
|
44
|
+
}[], opts?: Options): Promise<SummaryFeatureArrays>;
|
|
36
45
|
}
|
|
37
46
|
export {};
|