@gmod/bam 1.1.17 → 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 +65 -25
- package/README.md +108 -57
- package/dist/bai.d.ts +34 -15
- package/dist/bai.js +180 -273
- package/dist/bai.js.map +1 -1
- package/dist/bamFile.d.ts +33 -27
- package/dist/bamFile.js +353 -572
- package/dist/bamFile.js.map +1 -1
- package/dist/chunk.d.ts +4 -8
- package/dist/chunk.js +13 -21
- package/dist/chunk.js.map +1 -1
- package/dist/csi.d.ts +74 -10
- package/dist/csi.js +157 -256
- package/dist/csi.js.map +1 -1
- package/dist/errors.js +12 -57
- package/dist/errors.js.map +1 -1
- package/dist/htsget.d.ts +5 -8
- package/dist/htsget.js +120 -209
- package/dist/htsget.js.map +1 -1
- package/dist/index.d.ts +5 -6
- package/dist/index.js +11 -11
- package/dist/index.js.map +1 -1
- package/dist/indexFile.d.ts +0 -6
- package/dist/indexFile.js +3 -77
- package/dist/indexFile.js.map +1 -1
- package/dist/nullIndex.d.ts +7 -0
- package/dist/nullIndex.js +33 -0
- package/dist/nullIndex.js.map +1 -0
- package/dist/record.d.ts +2 -2
- package/dist/record.js +200 -193
- package/dist/record.js.map +1 -1
- package/dist/sam.js +12 -10
- package/dist/sam.js.map +1 -1
- package/dist/util.d.ts +13 -1
- package/dist/util.js +55 -58
- package/dist/util.js.map +1 -1
- package/dist/virtualOffset.js +13 -20
- package/dist/virtualOffset.js.map +1 -1
- package/esm/bai.d.ts +34 -15
- package/esm/bai.js +86 -91
- package/esm/bai.js.map +1 -1
- package/esm/bamFile.d.ts +33 -27
- package/esm/bamFile.js +124 -120
- package/esm/bamFile.js.map +1 -1
- package/esm/chunk.d.ts +4 -8
- package/esm/chunk.js +2 -8
- package/esm/chunk.js.map +1 -1
- package/esm/csi.d.ts +74 -10
- package/esm/csi.js +85 -93
- package/esm/csi.js.map +1 -1
- package/esm/htsget.d.ts +5 -8
- package/esm/htsget.js +68 -43
- package/esm/htsget.js.map +1 -1
- package/esm/index.d.ts +5 -6
- package/esm/index.js +5 -6
- package/esm/index.js.map +1 -1
- package/esm/indexFile.d.ts +0 -6
- package/esm/indexFile.js +0 -22
- package/esm/indexFile.js.map +1 -1
- package/esm/nullIndex.d.ts +7 -0
- package/esm/nullIndex.js +16 -0
- package/esm/nullIndex.js.map +1 -0
- package/esm/record.d.ts +2 -2
- package/esm/record.js +34 -24
- package/esm/record.js.map +1 -1
- package/esm/sam.js +9 -7
- package/esm/sam.js.map +1 -1
- package/esm/util.d.ts +13 -1
- package/esm/util.js +40 -14
- package/esm/util.js.map +1 -1
- package/package.json +19 -20
- package/src/bai.ts +99 -102
- package/src/bamFile.ts +174 -198
- package/src/chunk.ts +6 -20
- package/src/csi.ts +102 -111
- package/src/htsget.ts +81 -61
- package/src/index.ts +5 -7
- package/src/indexFile.ts +0 -27
- package/src/nullIndex.ts +18 -0
- package/src/record.ts +34 -24
- package/src/sam.ts +9 -7
- package/src/util.ts +54 -13
- package/src/declare.d.ts +0 -2
package/dist/bai.js
CHANGED
|
@@ -1,30 +1,4 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
var __extends = (this && this.__extends) || (function () {
|
|
3
|
-
var extendStatics = function (d, b) {
|
|
4
|
-
extendStatics = Object.setPrototypeOf ||
|
|
5
|
-
({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
|
|
6
|
-
function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };
|
|
7
|
-
return extendStatics(d, b);
|
|
8
|
-
};
|
|
9
|
-
return function (d, b) {
|
|
10
|
-
if (typeof b !== "function" && b !== null)
|
|
11
|
-
throw new TypeError("Class extends value " + String(b) + " is not a constructor or null");
|
|
12
|
-
extendStatics(d, b);
|
|
13
|
-
function __() { this.constructor = d; }
|
|
14
|
-
d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
|
|
15
|
-
};
|
|
16
|
-
})();
|
|
17
|
-
var __assign = (this && this.__assign) || function () {
|
|
18
|
-
__assign = Object.assign || function(t) {
|
|
19
|
-
for (var s, i = 1, n = arguments.length; i < n; i++) {
|
|
20
|
-
s = arguments[i];
|
|
21
|
-
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
|
|
22
|
-
t[p] = s[p];
|
|
23
|
-
}
|
|
24
|
-
return t;
|
|
25
|
-
};
|
|
26
|
-
return __assign.apply(this, arguments);
|
|
27
|
-
};
|
|
28
2
|
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
29
3
|
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
30
4
|
return new (P || (P = Promise))(function (resolve, reject) {
|
|
@@ -34,271 +8,204 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
|
|
|
34
8
|
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
35
9
|
});
|
|
36
10
|
};
|
|
37
|
-
var __generator = (this && this.__generator) || function (thisArg, body) {
|
|
38
|
-
var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
|
|
39
|
-
return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
|
|
40
|
-
function verb(n) { return function (v) { return step([n, v]); }; }
|
|
41
|
-
function step(op) {
|
|
42
|
-
if (f) throw new TypeError("Generator is already executing.");
|
|
43
|
-
while (_) try {
|
|
44
|
-
if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
|
|
45
|
-
if (y = 0, t) op = [op[0] & 2, t.value];
|
|
46
|
-
switch (op[0]) {
|
|
47
|
-
case 0: case 1: t = op; break;
|
|
48
|
-
case 4: _.label++; return { value: op[1], done: false };
|
|
49
|
-
case 5: _.label++; y = op[1]; op = [0]; continue;
|
|
50
|
-
case 7: op = _.ops.pop(); _.trys.pop(); continue;
|
|
51
|
-
default:
|
|
52
|
-
if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
|
|
53
|
-
if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
|
|
54
|
-
if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
|
|
55
|
-
if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
|
|
56
|
-
if (t[2]) _.ops.pop();
|
|
57
|
-
_.trys.pop(); continue;
|
|
58
|
-
}
|
|
59
|
-
op = body.call(thisArg, _);
|
|
60
|
-
} catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
|
|
61
|
-
if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
|
|
62
|
-
}
|
|
63
|
-
};
|
|
64
11
|
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
65
12
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
66
13
|
};
|
|
67
14
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
var BAI_MAGIC = 21578050; // BAI\1
|
|
15
|
+
const virtualOffset_1 = require("./virtualOffset");
|
|
16
|
+
const chunk_1 = __importDefault(require("./chunk"));
|
|
17
|
+
const util_1 = require("./util");
|
|
18
|
+
const indexFile_1 = __importDefault(require("./indexFile"));
|
|
19
|
+
const BAI_MAGIC = 21578050; // BAI\1
|
|
74
20
|
function roundDown(n, multiple) {
|
|
75
21
|
return n - (n % multiple);
|
|
76
22
|
}
|
|
77
23
|
function roundUp(n, multiple) {
|
|
78
24
|
return n - (n % multiple) + multiple;
|
|
79
25
|
}
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
prom = _a.sent();
|
|
98
|
-
index = prom.indices[refId];
|
|
99
|
-
if (!index) {
|
|
100
|
-
return [2 /*return*/, -1];
|
|
101
|
-
}
|
|
102
|
-
ret = index.stats || {};
|
|
103
|
-
return [2 /*return*/, ret.lineCount === undefined ? -1 : ret.lineCount];
|
|
104
|
-
}
|
|
105
|
-
});
|
|
26
|
+
function reg2bins(beg, end) {
|
|
27
|
+
end -= 1;
|
|
28
|
+
return [
|
|
29
|
+
[0, 0],
|
|
30
|
+
[1 + (beg >> 26), 1 + (end >> 26)],
|
|
31
|
+
[9 + (beg >> 23), 9 + (end >> 23)],
|
|
32
|
+
[73 + (beg >> 20), 73 + (end >> 20)],
|
|
33
|
+
[585 + (beg >> 17), 585 + (end >> 17)],
|
|
34
|
+
[4681 + (beg >> 14), 4681 + (end >> 14)],
|
|
35
|
+
];
|
|
36
|
+
}
|
|
37
|
+
class BAI extends indexFile_1.default {
|
|
38
|
+
lineCount(refId, opts) {
|
|
39
|
+
var _a, _b;
|
|
40
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
41
|
+
const indexData = yield this.parse(opts);
|
|
42
|
+
return ((_b = (_a = indexData.indices[refId]) === null || _a === void 0 ? void 0 : _a.stats) === null || _b === void 0 ? void 0 : _b.lineCount) || 0;
|
|
106
43
|
});
|
|
107
|
-
}
|
|
108
|
-
BAI.prototype.fetchBai = function (opts) {
|
|
109
|
-
var _this = this;
|
|
110
|
-
if (opts === void 0) { opts = {}; }
|
|
111
|
-
if (!this.baiP) {
|
|
112
|
-
this.baiP = this.filehandle.readFile(opts).catch(function (e) {
|
|
113
|
-
_this.baiP = undefined;
|
|
114
|
-
throw e;
|
|
115
|
-
});
|
|
116
|
-
}
|
|
117
|
-
return this.baiP;
|
|
118
|
-
};
|
|
44
|
+
}
|
|
119
45
|
// fetch and parse the index
|
|
120
|
-
|
|
121
|
-
return __awaiter(this, void 0, void 0, function () {
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
for (k = 0; k < chunkCount; k += 1) {
|
|
163
|
-
u = (0, virtualOffset_1.fromBytes)(bytes, currOffset);
|
|
164
|
-
v = (0, virtualOffset_1.fromBytes)(bytes, currOffset + 8);
|
|
165
|
-
currOffset += 16;
|
|
166
|
-
this._findFirstData(data, u);
|
|
167
|
-
chunks[k] = new chunk_1.default(u, v, bin);
|
|
168
|
-
}
|
|
169
|
-
binIndex[bin] = chunks;
|
|
170
|
-
}
|
|
171
|
-
}
|
|
172
|
-
linearCount = bytes.readInt32LE(currOffset);
|
|
173
|
-
currOffset += 4;
|
|
174
|
-
linearIndex = new Array(linearCount);
|
|
175
|
-
for (k = 0; k < linearCount; k += 1) {
|
|
176
|
-
linearIndex[k] = (0, virtualOffset_1.fromBytes)(bytes, currOffset);
|
|
177
|
-
currOffset += 8;
|
|
178
|
-
this._findFirstData(data, linearIndex[k]);
|
|
179
|
-
}
|
|
180
|
-
data.indices[i] = { binIndex: binIndex, linearIndex: linearIndex, stats: stats };
|
|
46
|
+
_parse(opts) {
|
|
47
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
48
|
+
const bytes = (yield this.filehandle.readFile(opts));
|
|
49
|
+
// check BAI magic numbers
|
|
50
|
+
if (bytes.readUInt32LE(0) !== BAI_MAGIC) {
|
|
51
|
+
throw new Error('Not a BAI file');
|
|
52
|
+
}
|
|
53
|
+
const refCount = bytes.readInt32LE(4);
|
|
54
|
+
const depth = 5;
|
|
55
|
+
const binLimit = ((1 << ((depth + 1) * 3)) - 1) / 7;
|
|
56
|
+
// read the indexes for each reference sequence
|
|
57
|
+
let curr = 8;
|
|
58
|
+
let firstDataLine;
|
|
59
|
+
const indices = new Array(refCount);
|
|
60
|
+
for (let i = 0; i < refCount; i++) {
|
|
61
|
+
// the binning index
|
|
62
|
+
const binCount = bytes.readInt32LE(curr);
|
|
63
|
+
let stats;
|
|
64
|
+
curr += 4;
|
|
65
|
+
const binIndex = {};
|
|
66
|
+
for (let j = 0; j < binCount; j += 1) {
|
|
67
|
+
const bin = bytes.readUInt32LE(curr);
|
|
68
|
+
curr += 4;
|
|
69
|
+
if (bin === binLimit + 1) {
|
|
70
|
+
curr += 4;
|
|
71
|
+
stats = (0, util_1.parsePseudoBin)(bytes, curr + 16);
|
|
72
|
+
curr += 32;
|
|
73
|
+
}
|
|
74
|
+
else if (bin > binLimit + 1) {
|
|
75
|
+
throw new Error('bai index contains too many bins, please use CSI');
|
|
76
|
+
}
|
|
77
|
+
else {
|
|
78
|
+
const chunkCount = bytes.readInt32LE(curr);
|
|
79
|
+
curr += 4;
|
|
80
|
+
const chunks = new Array(chunkCount);
|
|
81
|
+
for (let k = 0; k < chunkCount; k++) {
|
|
82
|
+
const u = (0, virtualOffset_1.fromBytes)(bytes, curr);
|
|
83
|
+
curr += 8;
|
|
84
|
+
const v = (0, virtualOffset_1.fromBytes)(bytes, curr);
|
|
85
|
+
curr += 8;
|
|
86
|
+
firstDataLine = (0, util_1.findFirstData)(firstDataLine, u);
|
|
87
|
+
chunks[k] = new chunk_1.default(u, v, bin);
|
|
181
88
|
}
|
|
182
|
-
|
|
89
|
+
binIndex[bin] = chunks;
|
|
90
|
+
}
|
|
183
91
|
}
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
range = start !== undefined;
|
|
196
|
-
return [4 /*yield*/, this.parse(opts)];
|
|
197
|
-
case 1:
|
|
198
|
-
indexData = _b.sent();
|
|
199
|
-
seqIdx = indexData.indices[seqId];
|
|
200
|
-
if (!seqIdx) {
|
|
201
|
-
return [2 /*return*/, []];
|
|
202
|
-
}
|
|
203
|
-
_a = seqIdx.linearIndex, linearIndex = _a === void 0 ? [] : _a, stats = seqIdx.stats;
|
|
204
|
-
if (!linearIndex.length) {
|
|
205
|
-
return [2 /*return*/, []];
|
|
206
|
-
}
|
|
207
|
-
e = end !== undefined ? roundUp(end, v) : (linearIndex.length - 1) * v;
|
|
208
|
-
s = start !== undefined ? roundDown(start, v) : 0;
|
|
209
|
-
if (range) {
|
|
210
|
-
depths = new Array((e - s) / v);
|
|
211
|
-
}
|
|
212
|
-
else {
|
|
213
|
-
depths = new Array(linearIndex.length - 1);
|
|
214
|
-
}
|
|
215
|
-
totalSize = linearIndex[linearIndex.length - 1].blockPosition;
|
|
216
|
-
if (e > (linearIndex.length - 1) * v) {
|
|
217
|
-
throw new Error('query outside of range of linear index');
|
|
218
|
-
}
|
|
219
|
-
currentPos = linearIndex[s / v].blockPosition;
|
|
220
|
-
for (i = s / v, j = 0; i < e / v; i++, j++) {
|
|
221
|
-
depths[j] = {
|
|
222
|
-
score: linearIndex[i + 1].blockPosition - currentPos,
|
|
223
|
-
start: i * v,
|
|
224
|
-
end: i * v + v,
|
|
225
|
-
};
|
|
226
|
-
currentPos = linearIndex[i + 1].blockPosition;
|
|
227
|
-
}
|
|
228
|
-
return [2 /*return*/, depths.map(function (d) {
|
|
229
|
-
return __assign(__assign({}, d), { score: (d.score * stats.lineCount) / totalSize });
|
|
230
|
-
})];
|
|
92
|
+
const linearCount = bytes.readInt32LE(curr);
|
|
93
|
+
curr += 4;
|
|
94
|
+
// as we're going through the linear index, figure out the smallest
|
|
95
|
+
// virtual offset in the indexes, which tells us where the BAM header
|
|
96
|
+
// ends
|
|
97
|
+
const linearIndex = new Array(linearCount);
|
|
98
|
+
for (let j = 0; j < linearCount; j++) {
|
|
99
|
+
const offset = (0, virtualOffset_1.fromBytes)(bytes, curr);
|
|
100
|
+
curr += 8;
|
|
101
|
+
firstDataLine = (0, util_1.findFirstData)(firstDataLine, offset);
|
|
102
|
+
linearIndex[j] = offset;
|
|
231
103
|
}
|
|
232
|
-
|
|
104
|
+
indices[i] = { binIndex, linearIndex, stats };
|
|
105
|
+
}
|
|
106
|
+
return {
|
|
107
|
+
bai: true,
|
|
108
|
+
firstDataLine,
|
|
109
|
+
maxBlockSize: 1 << 16,
|
|
110
|
+
indices,
|
|
111
|
+
refCount,
|
|
112
|
+
};
|
|
233
113
|
});
|
|
234
|
-
}
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
lowest = vp;
|
|
293
|
-
}
|
|
294
|
-
}
|
|
114
|
+
}
|
|
115
|
+
indexCov(seqId, start, end, opts = {}) {
|
|
116
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
117
|
+
const v = 16384;
|
|
118
|
+
const range = start !== undefined;
|
|
119
|
+
const indexData = yield this.parse(opts);
|
|
120
|
+
const seqIdx = indexData.indices[seqId];
|
|
121
|
+
if (!seqIdx) {
|
|
122
|
+
return [];
|
|
123
|
+
}
|
|
124
|
+
const { linearIndex = [], stats } = seqIdx;
|
|
125
|
+
if (linearIndex.length === 0) {
|
|
126
|
+
return [];
|
|
127
|
+
}
|
|
128
|
+
const e = end === undefined ? (linearIndex.length - 1) * v : roundUp(end, v);
|
|
129
|
+
const s = start === undefined ? 0 : roundDown(start, v);
|
|
130
|
+
const depths = range
|
|
131
|
+
? new Array((e - s) / v)
|
|
132
|
+
: new Array(linearIndex.length - 1);
|
|
133
|
+
const totalSize = linearIndex[linearIndex.length - 1].blockPosition;
|
|
134
|
+
if (e > (linearIndex.length - 1) * v) {
|
|
135
|
+
throw new Error('query outside of range of linear index');
|
|
136
|
+
}
|
|
137
|
+
let currentPos = linearIndex[s / v].blockPosition;
|
|
138
|
+
for (let i = s / v, j = 0; i < e / v; i++, j++) {
|
|
139
|
+
depths[j] = {
|
|
140
|
+
score: linearIndex[i + 1].blockPosition - currentPos,
|
|
141
|
+
start: i * v,
|
|
142
|
+
end: i * v + v,
|
|
143
|
+
};
|
|
144
|
+
currentPos = linearIndex[i + 1].blockPosition;
|
|
145
|
+
}
|
|
146
|
+
return depths.map(d => (Object.assign(Object.assign({}, d), { score: (d.score * ((stats === null || stats === void 0 ? void 0 : stats.lineCount) || 0)) / totalSize })));
|
|
147
|
+
});
|
|
148
|
+
}
|
|
149
|
+
blocksForRange(refId, min, max, opts = {}) {
|
|
150
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
151
|
+
if (min < 0) {
|
|
152
|
+
min = 0;
|
|
153
|
+
}
|
|
154
|
+
const indexData = yield this.parse(opts);
|
|
155
|
+
if (!indexData) {
|
|
156
|
+
return [];
|
|
157
|
+
}
|
|
158
|
+
const ba = indexData.indices[refId];
|
|
159
|
+
if (!ba) {
|
|
160
|
+
return [];
|
|
161
|
+
}
|
|
162
|
+
// List of bin #s that overlap min, max
|
|
163
|
+
const overlappingBins = reg2bins(min, max);
|
|
164
|
+
const chunks = [];
|
|
165
|
+
// Find chunks in overlapping bins. Leaf bins (< 4681) are not pruned
|
|
166
|
+
for (const [start, end] of overlappingBins) {
|
|
167
|
+
for (let bin = start; bin <= end; bin++) {
|
|
168
|
+
if (ba.binIndex[bin]) {
|
|
169
|
+
const binChunks = ba.binIndex[bin];
|
|
170
|
+
for (const binChunk of binChunks) {
|
|
171
|
+
chunks.push(binChunk);
|
|
295
172
|
}
|
|
296
|
-
|
|
173
|
+
}
|
|
297
174
|
}
|
|
298
|
-
}
|
|
175
|
+
}
|
|
176
|
+
// Use the linear index to find minimum file position of chunks that could
|
|
177
|
+
// contain alignments in the region
|
|
178
|
+
const nintv = ba.linearIndex.length;
|
|
179
|
+
let lowest;
|
|
180
|
+
const minLin = Math.min(min >> 14, nintv - 1);
|
|
181
|
+
const maxLin = Math.min(max >> 14, nintv - 1);
|
|
182
|
+
for (let i = minLin; i <= maxLin; ++i) {
|
|
183
|
+
const vp = ba.linearIndex[i];
|
|
184
|
+
if (vp && (!lowest || vp.compareTo(lowest) < 0)) {
|
|
185
|
+
lowest = vp;
|
|
186
|
+
}
|
|
187
|
+
}
|
|
188
|
+
return (0, util_1.optimizeChunks)(chunks, lowest);
|
|
189
|
+
});
|
|
190
|
+
}
|
|
191
|
+
parse(opts = {}) {
|
|
192
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
193
|
+
if (!this.setupP) {
|
|
194
|
+
this.setupP = this._parse(opts).catch(e => {
|
|
195
|
+
this.setupP = undefined;
|
|
196
|
+
throw e;
|
|
197
|
+
});
|
|
198
|
+
}
|
|
199
|
+
return this.setupP;
|
|
200
|
+
});
|
|
201
|
+
}
|
|
202
|
+
hasRefSeq(seqId, opts = {}) {
|
|
203
|
+
var _a;
|
|
204
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
205
|
+
const header = yield this.parse(opts);
|
|
206
|
+
return !!((_a = header.indices[seqId]) === null || _a === void 0 ? void 0 : _a.binIndex);
|
|
299
207
|
});
|
|
300
|
-
}
|
|
301
|
-
|
|
302
|
-
}(indexFile_1.default));
|
|
208
|
+
}
|
|
209
|
+
}
|
|
303
210
|
exports.default = BAI;
|
|
304
211
|
//# sourceMappingURL=bai.js.map
|
package/dist/bai.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bai.js","sourceRoot":"","sources":["../src/bai.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"bai.js","sourceRoot":"","sources":["../src/bai.ts"],"names":[],"mappings":"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"}
|