@gmod/tabix 1.5.4 → 1.5.5
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 -0
- package/README.md +37 -37
- package/dist/chunk.js +12 -14
- package/dist/chunk.js.map +1 -1
- package/dist/csi.js +170 -253
- package/dist/csi.js.map +1 -1
- package/dist/index.js +3 -3
- package/dist/index.js.map +1 -1
- package/dist/indexFile.js +27 -73
- package/dist/indexFile.js.map +1 -1
- package/dist/tabixIndexedFile.d.ts +1 -1
- package/dist/tabixIndexedFile.js +205 -306
- package/dist/tabixIndexedFile.js.map +1 -1
- package/dist/tbi.js +185 -256
- package/dist/tbi.js.map +1 -1
- package/dist/util.js +10 -64
- package/dist/util.js.map +1 -1
- package/dist/virtualOffset.js +13 -20
- package/dist/virtualOffset.js.map +1 -1
- package/esm/tabixIndexedFile.d.ts +1 -1
- package/package.json +6 -7
package/dist/csi.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 __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
29
3
|
if (k2 === undefined) k2 = k;
|
|
30
4
|
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
@@ -57,135 +31,97 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
|
|
|
57
31
|
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
58
32
|
});
|
|
59
33
|
};
|
|
60
|
-
var __generator = (this && this.__generator) || function (thisArg, body) {
|
|
61
|
-
var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
|
|
62
|
-
return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
|
|
63
|
-
function verb(n) { return function (v) { return step([n, v]); }; }
|
|
64
|
-
function step(op) {
|
|
65
|
-
if (f) throw new TypeError("Generator is already executing.");
|
|
66
|
-
while (_) try {
|
|
67
|
-
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;
|
|
68
|
-
if (y = 0, t) op = [op[0] & 2, t.value];
|
|
69
|
-
switch (op[0]) {
|
|
70
|
-
case 0: case 1: t = op; break;
|
|
71
|
-
case 4: _.label++; return { value: op[1], done: false };
|
|
72
|
-
case 5: _.label++; y = op[1]; op = [0]; continue;
|
|
73
|
-
case 7: op = _.ops.pop(); _.trys.pop(); continue;
|
|
74
|
-
default:
|
|
75
|
-
if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
|
|
76
|
-
if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
|
|
77
|
-
if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
|
|
78
|
-
if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
|
|
79
|
-
if (t[2]) _.ops.pop();
|
|
80
|
-
_.trys.pop(); continue;
|
|
81
|
-
}
|
|
82
|
-
op = body.call(thisArg, _);
|
|
83
|
-
} catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
|
|
84
|
-
if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
|
|
85
|
-
}
|
|
86
|
-
};
|
|
87
34
|
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
88
35
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
89
36
|
};
|
|
90
37
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
38
|
+
const long_1 = __importDefault(require("long"));
|
|
39
|
+
const bgzf_filehandle_1 = require("@gmod/bgzf-filehandle");
|
|
40
|
+
const virtualOffset_1 = __importStar(require("./virtualOffset"));
|
|
41
|
+
const chunk_1 = __importDefault(require("./chunk"));
|
|
42
|
+
const util_1 = require("./util");
|
|
43
|
+
const indexFile_1 = __importDefault(require("./indexFile"));
|
|
44
|
+
const CSI1_MAGIC = 21582659; // CSI\1
|
|
45
|
+
const CSI2_MAGIC = 38359875; // CSI\2
|
|
99
46
|
function lshift(num, bits) {
|
|
100
47
|
return num * Math.pow(2, bits);
|
|
101
48
|
}
|
|
102
49
|
function rshift(num, bits) {
|
|
103
50
|
return Math.floor(num / Math.pow(2, bits));
|
|
104
51
|
}
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
_this.minShift = 0;
|
|
112
|
-
return _this;
|
|
52
|
+
class CSI extends indexFile_1.default {
|
|
53
|
+
constructor(args) {
|
|
54
|
+
super(args);
|
|
55
|
+
this.maxBinNumber = 0;
|
|
56
|
+
this.depth = 0;
|
|
57
|
+
this.minShift = 0;
|
|
113
58
|
}
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
}
|
|
131
|
-
stats = indexData.indices[refId].stats;
|
|
132
|
-
if (stats) {
|
|
133
|
-
return [2 /*return*/, stats.lineCount];
|
|
134
|
-
}
|
|
135
|
-
return [2 /*return*/, -1];
|
|
136
|
-
}
|
|
137
|
-
});
|
|
59
|
+
lineCount(refName, opts = {}) {
|
|
60
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
61
|
+
const indexData = yield this.parse(opts);
|
|
62
|
+
if (!indexData) {
|
|
63
|
+
return -1;
|
|
64
|
+
}
|
|
65
|
+
const refId = indexData.refNameToId[refName];
|
|
66
|
+
const idx = indexData.indices[refId];
|
|
67
|
+
if (!idx) {
|
|
68
|
+
return -1;
|
|
69
|
+
}
|
|
70
|
+
const { stats } = indexData.indices[refId];
|
|
71
|
+
if (stats) {
|
|
72
|
+
return stats.lineCount;
|
|
73
|
+
}
|
|
74
|
+
return -1;
|
|
138
75
|
});
|
|
139
|
-
}
|
|
140
|
-
|
|
141
|
-
return __awaiter(this, void 0, void 0, function () {
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
});
|
|
76
|
+
}
|
|
77
|
+
indexCov() {
|
|
78
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
79
|
+
throw new Error('CSI indexes do not support indexcov');
|
|
80
|
+
return [];
|
|
145
81
|
});
|
|
146
|
-
}
|
|
147
|
-
|
|
82
|
+
}
|
|
83
|
+
parseAuxData(bytes, offset, auxLength) {
|
|
148
84
|
if (auxLength < 30) {
|
|
149
85
|
return {
|
|
150
86
|
refIdToName: [],
|
|
151
87
|
refNameToId: {},
|
|
152
88
|
};
|
|
153
89
|
}
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
90
|
+
const formatFlags = bytes.readInt32LE(offset);
|
|
91
|
+
const coordinateType = formatFlags & 0x10000 ? 'zero-based-half-open' : '1-based-closed';
|
|
92
|
+
const format = { 0: 'generic', 1: 'SAM', 2: 'VCF' }[formatFlags & 0xf];
|
|
157
93
|
if (!format) {
|
|
158
|
-
throw new Error(
|
|
94
|
+
throw new Error(`invalid Tabix preset format flags ${formatFlags}`);
|
|
159
95
|
}
|
|
160
|
-
|
|
96
|
+
const columnNumbers = {
|
|
161
97
|
ref: bytes.readInt32LE(offset + 4),
|
|
162
98
|
start: bytes.readInt32LE(offset + 8),
|
|
163
99
|
end: bytes.readInt32LE(offset + 12),
|
|
164
100
|
};
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
101
|
+
const metaValue = bytes.readInt32LE(offset + 16);
|
|
102
|
+
const metaChar = metaValue ? String.fromCharCode(metaValue) : '';
|
|
103
|
+
const skipLines = bytes.readInt32LE(offset + 20);
|
|
104
|
+
const nameSectionLength = bytes.readInt32LE(offset + 24);
|
|
105
|
+
const { refIdToName, refNameToId } = this._parseNameBytes(bytes.slice(offset + 28, offset + 28 + nameSectionLength));
|
|
170
106
|
return {
|
|
171
|
-
refIdToName
|
|
172
|
-
refNameToId
|
|
173
|
-
skipLines
|
|
174
|
-
metaChar
|
|
175
|
-
columnNumbers
|
|
176
|
-
format
|
|
177
|
-
coordinateType
|
|
107
|
+
refIdToName,
|
|
108
|
+
refNameToId,
|
|
109
|
+
skipLines,
|
|
110
|
+
metaChar,
|
|
111
|
+
columnNumbers,
|
|
112
|
+
format,
|
|
113
|
+
coordinateType,
|
|
178
114
|
};
|
|
179
|
-
}
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
for (
|
|
115
|
+
}
|
|
116
|
+
_parseNameBytes(namesBytes) {
|
|
117
|
+
let currRefId = 0;
|
|
118
|
+
let currNameStart = 0;
|
|
119
|
+
const refIdToName = [];
|
|
120
|
+
const refNameToId = {};
|
|
121
|
+
for (let i = 0; i < namesBytes.length; i += 1) {
|
|
186
122
|
if (!namesBytes[i]) {
|
|
187
123
|
if (currNameStart < i) {
|
|
188
|
-
|
|
124
|
+
let refName = namesBytes.toString('utf8', currNameStart, i);
|
|
189
125
|
refName = this.renameRefSeq(refName);
|
|
190
126
|
refIdToName[currRefId] = refName;
|
|
191
127
|
refNameToId[refName] = currRefId;
|
|
@@ -194,134 +130,116 @@ var CSI = /** @class */ (function (_super) {
|
|
|
194
130
|
currRefId += 1;
|
|
195
131
|
}
|
|
196
132
|
}
|
|
197
|
-
return { refNameToId
|
|
198
|
-
}
|
|
133
|
+
return { refNameToId, refIdToName };
|
|
134
|
+
}
|
|
199
135
|
// fetch and parse the index
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
136
|
+
_parse(opts = {}) {
|
|
137
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
138
|
+
const bytes = yield (0, bgzf_filehandle_1.unzip)((yield this.filehandle.readFile(opts)));
|
|
139
|
+
// check TBI magic numbers
|
|
140
|
+
let csiVersion;
|
|
141
|
+
if (bytes.readUInt32LE(0) === CSI1_MAGIC) {
|
|
142
|
+
csiVersion = 1;
|
|
143
|
+
}
|
|
144
|
+
else if (bytes.readUInt32LE(0) === CSI2_MAGIC) {
|
|
145
|
+
csiVersion = 2;
|
|
146
|
+
}
|
|
147
|
+
else {
|
|
148
|
+
throw new Error('Not a CSI file');
|
|
149
|
+
// TODO: do we need to support big-endian CSI files?
|
|
150
|
+
}
|
|
151
|
+
this.minShift = bytes.readInt32LE(4);
|
|
152
|
+
this.depth = bytes.readInt32LE(8);
|
|
153
|
+
this.maxBinNumber = ((1 << ((this.depth + 1) * 3)) - 1) / 7;
|
|
154
|
+
const maxRefLength = Math.pow(2, (this.minShift + this.depth * 3));
|
|
155
|
+
const auxLength = bytes.readInt32LE(12);
|
|
156
|
+
let aux = {
|
|
157
|
+
refIdToName: [],
|
|
158
|
+
refNameToId: {},
|
|
159
|
+
};
|
|
160
|
+
if (auxLength) {
|
|
161
|
+
aux = this.parseAuxData(bytes, 16, auxLength);
|
|
162
|
+
}
|
|
163
|
+
const refCount = bytes.readInt32LE(16 + auxLength);
|
|
164
|
+
// read the indexes for each reference sequence
|
|
165
|
+
let firstDataLine;
|
|
166
|
+
let currOffset = 16 + auxLength + 4;
|
|
167
|
+
const indices = new Array(refCount).fill(0).map(() => {
|
|
168
|
+
// the binning index
|
|
169
|
+
const binCount = bytes.readInt32LE(currOffset);
|
|
170
|
+
currOffset += 4;
|
|
171
|
+
const binIndex = {};
|
|
172
|
+
let stats; // < provided by parsing a pseudo-bin, if present
|
|
173
|
+
for (let j = 0; j < binCount; j += 1) {
|
|
174
|
+
const bin = bytes.readUInt32LE(currOffset);
|
|
175
|
+
if (bin > this.maxBinNumber) {
|
|
176
|
+
// this is a fake bin that actually has stats information
|
|
177
|
+
// about the reference sequence in it
|
|
178
|
+
stats = this.parsePseudoBin(bytes, currOffset + 4);
|
|
179
|
+
currOffset += 4 + 8 + 4 + 16 + 16;
|
|
180
|
+
}
|
|
181
|
+
else {
|
|
182
|
+
const loffset = (0, virtualOffset_1.fromBytes)(bytes, currOffset + 4);
|
|
183
|
+
firstDataLine = this._findFirstData(firstDataLine, loffset);
|
|
184
|
+
const chunkCount = bytes.readInt32LE(currOffset + 12);
|
|
185
|
+
currOffset += 16;
|
|
186
|
+
const chunks = new Array(chunkCount);
|
|
187
|
+
for (let k = 0; k < chunkCount; k += 1) {
|
|
188
|
+
const u = (0, virtualOffset_1.fromBytes)(bytes, currOffset);
|
|
189
|
+
const v = (0, virtualOffset_1.fromBytes)(bytes, currOffset + 8);
|
|
190
|
+
currOffset += 16;
|
|
191
|
+
// this._findFirstData(data, u)
|
|
192
|
+
chunks[k] = new chunk_1.default(u, v, bin);
|
|
236
193
|
}
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
indices = new Array(refCount).fill(0).map(function () {
|
|
240
|
-
// the binning index
|
|
241
|
-
var binCount = bytes.readInt32LE(currOffset);
|
|
242
|
-
currOffset += 4;
|
|
243
|
-
var binIndex = {};
|
|
244
|
-
var stats; // < provided by parsing a pseudo-bin, if present
|
|
245
|
-
for (var j = 0; j < binCount; j += 1) {
|
|
246
|
-
var bin = bytes.readUInt32LE(currOffset);
|
|
247
|
-
if (bin > _this.maxBinNumber) {
|
|
248
|
-
// this is a fake bin that actually has stats information
|
|
249
|
-
// about the reference sequence in it
|
|
250
|
-
stats = _this.parsePseudoBin(bytes, currOffset + 4);
|
|
251
|
-
currOffset += 4 + 8 + 4 + 16 + 16;
|
|
252
|
-
}
|
|
253
|
-
else {
|
|
254
|
-
var loffset = (0, virtualOffset_1.fromBytes)(bytes, currOffset + 4);
|
|
255
|
-
firstDataLine = _this._findFirstData(firstDataLine, loffset);
|
|
256
|
-
var chunkCount = bytes.readInt32LE(currOffset + 12);
|
|
257
|
-
currOffset += 16;
|
|
258
|
-
var chunks = new Array(chunkCount);
|
|
259
|
-
for (var k = 0; k < chunkCount; k += 1) {
|
|
260
|
-
var u = (0, virtualOffset_1.fromBytes)(bytes, currOffset);
|
|
261
|
-
var v = (0, virtualOffset_1.fromBytes)(bytes, currOffset + 8);
|
|
262
|
-
currOffset += 16;
|
|
263
|
-
// this._findFirstData(data, u)
|
|
264
|
-
chunks[k] = new chunk_1.default(u, v, bin);
|
|
265
|
-
}
|
|
266
|
-
binIndex[bin] = chunks;
|
|
267
|
-
}
|
|
268
|
-
}
|
|
269
|
-
return { binIndex: binIndex, stats: stats };
|
|
270
|
-
});
|
|
271
|
-
return [2 /*return*/, __assign(__assign({}, aux), { csi: true, refCount: refCount, maxBlockSize: 1 << 16, firstDataLine: firstDataLine, csiVersion: csiVersion, indices: indices, depth: this.depth, maxBinNumber: this.maxBinNumber, maxRefLength: maxRefLength })];
|
|
194
|
+
binIndex[bin] = chunks;
|
|
195
|
+
}
|
|
272
196
|
}
|
|
197
|
+
return { binIndex, stats };
|
|
273
198
|
});
|
|
199
|
+
return Object.assign(Object.assign({}, aux), { csi: true, refCount, maxBlockSize: 1 << 16, firstDataLine,
|
|
200
|
+
csiVersion,
|
|
201
|
+
indices, depth: this.depth, maxBinNumber: this.maxBinNumber, maxRefLength });
|
|
274
202
|
});
|
|
275
|
-
}
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
return { lineCount
|
|
279
|
-
}
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
;
|
|
303
|
-
|
|
304
|
-
// Find chunks in overlapping bins. Leaf bins (< 4681) are not pruned
|
|
305
|
-
for (_i = 0, overlappingBins_1 = overlappingBins; _i < overlappingBins_1.length; _i++) {
|
|
306
|
-
_a = overlappingBins_1[_i], start = _a[0], end = _a[1];
|
|
307
|
-
for (bin = start; bin <= end; bin++) {
|
|
308
|
-
if (ba.binIndex[bin]) {
|
|
309
|
-
binChunks = ba.binIndex[bin];
|
|
310
|
-
for (c = 0; c < binChunks.length; ++c) {
|
|
311
|
-
chunks.push(new chunk_1.default(binChunks[c].minv, binChunks[c].maxv, bin));
|
|
312
|
-
}
|
|
313
|
-
}
|
|
314
|
-
}
|
|
203
|
+
}
|
|
204
|
+
parsePseudoBin(bytes, offset) {
|
|
205
|
+
const lineCount = (0, util_1.longToNumber)(long_1.default.fromBytesLE(Array.prototype.slice.call(bytes, offset + 28, offset + 36), true));
|
|
206
|
+
return { lineCount };
|
|
207
|
+
}
|
|
208
|
+
blocksForRange(refName, min, max, opts = {}) {
|
|
209
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
210
|
+
if (min < 0) {
|
|
211
|
+
min = 0;
|
|
212
|
+
}
|
|
213
|
+
const indexData = yield this.parse(opts);
|
|
214
|
+
if (!indexData) {
|
|
215
|
+
return [];
|
|
216
|
+
}
|
|
217
|
+
const refId = indexData.refNameToId[refName];
|
|
218
|
+
const ba = indexData.indices[refId];
|
|
219
|
+
if (!ba) {
|
|
220
|
+
return [];
|
|
221
|
+
}
|
|
222
|
+
// const { linearIndex, binIndex } = indexes
|
|
223
|
+
const overlappingBins = this.reg2bins(min, max); // List of bin #s that overlap min, max
|
|
224
|
+
const chunks = [];
|
|
225
|
+
// Find chunks in overlapping bins. Leaf bins (< 4681) are not pruned
|
|
226
|
+
for (const [start, end] of overlappingBins) {
|
|
227
|
+
for (let bin = start; bin <= end; bin++) {
|
|
228
|
+
if (ba.binIndex[bin]) {
|
|
229
|
+
const binChunks = ba.binIndex[bin];
|
|
230
|
+
for (let c = 0; c < binChunks.length; ++c) {
|
|
231
|
+
chunks.push(new chunk_1.default(binChunks[c].minv, binChunks[c].maxv, bin));
|
|
315
232
|
}
|
|
316
|
-
|
|
233
|
+
}
|
|
317
234
|
}
|
|
318
|
-
}
|
|
235
|
+
}
|
|
236
|
+
return (0, util_1.optimizeChunks)(chunks, new virtualOffset_1.default(0, 0));
|
|
319
237
|
});
|
|
320
|
-
}
|
|
238
|
+
}
|
|
321
239
|
/**
|
|
322
240
|
* calculate the list of bins that may overlap with region [beg,end) (zero-based half-open)
|
|
323
241
|
*/
|
|
324
|
-
|
|
242
|
+
reg2bins(beg, end) {
|
|
325
243
|
beg -= 1; // < convert to 1-based closed
|
|
326
244
|
if (beg < 1) {
|
|
327
245
|
beg = 1;
|
|
@@ -330,21 +248,20 @@ var CSI = /** @class */ (function (_super) {
|
|
|
330
248
|
end = Math.pow(2, 34);
|
|
331
249
|
} // 17 GiB ought to be enough for anybody
|
|
332
250
|
end -= 1;
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
|
|
251
|
+
let l = 0;
|
|
252
|
+
let t = 0;
|
|
253
|
+
let s = this.minShift + this.depth * 3;
|
|
254
|
+
const bins = [];
|
|
337
255
|
for (; l <= this.depth; s -= 3, t += lshift(1, l * 3), l += 1) {
|
|
338
|
-
|
|
339
|
-
|
|
256
|
+
const b = t + rshift(beg, s);
|
|
257
|
+
const e = t + rshift(end, s);
|
|
340
258
|
if (e - b + bins.length > this.maxBinNumber) {
|
|
341
|
-
throw new Error(
|
|
259
|
+
throw new Error(`query ${beg}-${end} is too large for current binning scheme (shift ${this.minShift}, depth ${this.depth}), try a smaller query or a coarser index binning scheme`);
|
|
342
260
|
}
|
|
343
261
|
bins.push([b, e]);
|
|
344
262
|
}
|
|
345
263
|
return bins;
|
|
346
|
-
}
|
|
347
|
-
|
|
348
|
-
}(indexFile_1.default));
|
|
264
|
+
}
|
|
265
|
+
}
|
|
349
266
|
exports.default = CSI;
|
|
350
267
|
//# sourceMappingURL=csi.js.map
|
package/dist/csi.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"csi.js","sourceRoot":"","sources":["../src/csi.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"csi.js","sourceRoot":"","sources":["../src/csi.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -4,10 +4,10 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
4
4
|
};
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
6
|
exports.CSI = exports.TBI = exports.TabixIndexedFile = void 0;
|
|
7
|
-
|
|
7
|
+
const tabixIndexedFile_1 = __importDefault(require("./tabixIndexedFile"));
|
|
8
8
|
exports.TabixIndexedFile = tabixIndexedFile_1.default;
|
|
9
|
-
|
|
9
|
+
const tbi_1 = __importDefault(require("./tbi"));
|
|
10
10
|
exports.TBI = tbi_1.default;
|
|
11
|
-
|
|
11
|
+
const csi_1 = __importDefault(require("./csi"));
|
|
12
12
|
exports.CSI = csi_1.default;
|
|
13
13
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;AAAA,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;AAAA,0EAAiD;AAIxC,2BAJF,0BAAgB,CAIE;AAHzB,gDAAuB;AAGI,cAHpB,aAAG,CAGoB;AAF9B,gDAAuB;AAES,cAFzB,aAAG,CAEyB"}
|