@gmod/bam 9.0.1 → 10.0.1
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/README.md +18 -17
- package/dist/bai.d.ts +2 -0
- package/dist/bai.js +19 -0
- package/dist/bai.js.map +1 -1
- package/dist/bamFile.js +12 -21
- package/dist/bamFile.js.map +1 -1
- package/dist/csi.d.ts +20 -29
- package/dist/csi.js +27 -10
- package/dist/csi.js.map +1 -1
- package/dist/indexFile.d.ts +21 -1
- package/dist/indexFile.js +60 -2
- package/dist/indexFile.js.map +1 -1
- package/dist/record.d.ts +1 -0
- package/dist/record.js +33 -21
- package/dist/record.js.map +1 -1
- package/dist/streamBam.js +9 -8
- package/dist/streamBam.js.map +1 -1
- package/dist/util.d.ts +24 -4
- package/dist/util.js +52 -4
- package/dist/util.js.map +1 -1
- package/dist/virtualOffset.d.ts +1 -0
- package/dist/virtualOffset.js +4 -0
- package/dist/virtualOffset.js.map +1 -1
- package/esm/bai.d.ts +2 -0
- package/esm/bai.js +19 -0
- package/esm/bai.js.map +1 -1
- package/esm/bamFile.js +13 -22
- package/esm/bamFile.js.map +1 -1
- package/esm/csi.d.ts +20 -29
- package/esm/csi.js +27 -10
- package/esm/csi.js.map +1 -1
- package/esm/indexFile.d.ts +21 -1
- package/esm/indexFile.js +59 -2
- package/esm/indexFile.js.map +1 -1
- package/esm/record.d.ts +1 -0
- package/esm/record.js +33 -21
- package/esm/record.js.map +1 -1
- package/esm/streamBam.js +10 -9
- package/esm/streamBam.js.map +1 -1
- package/esm/util.d.ts +24 -4
- package/esm/util.js +49 -4
- package/esm/util.js.map +1 -1
- package/esm/virtualOffset.d.ts +1 -0
- package/esm/virtualOffset.js +3 -0
- package/esm/virtualOffset.js.map +1 -1
- package/package.json +8 -8
- package/src/bai.ts +21 -0
- package/src/bamFile.ts +16 -23
- package/src/csi.ts +41 -14
- package/src/indexFile.ts +72 -3
- package/src/record.ts +39 -20
- package/src/streamBam.ts +11 -10
- package/src/util.ts +56 -4
- package/src/virtualOffset.ts +4 -0
package/esm/util.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"util.js","sourceRoot":"","sources":["../src/util.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"util.js","sourceRoot":"","sources":["../src/util.ts"],"names":[],"mappings":"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"}
|
package/esm/virtualOffset.d.ts
CHANGED
package/esm/virtualOffset.js
CHANGED
|
@@ -17,4 +17,7 @@ export function fromBytes(bytes, offset = 0) {
|
|
|
17
17
|
bytes[offset + 3] * 0x100 +
|
|
18
18
|
bytes[offset + 2], (bytes[offset + 1] << 8) | bytes[offset]);
|
|
19
19
|
}
|
|
20
|
+
export function compareOffsets(a, b) {
|
|
21
|
+
return a.blockPosition - b.blockPosition || a.dataPosition - b.dataPosition;
|
|
22
|
+
}
|
|
20
23
|
//# sourceMappingURL=virtualOffset.js.map
|
package/esm/virtualOffset.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"virtualOffset.js","sourceRoot":"","sources":["../src/virtualOffset.ts"],"names":[],"mappings":"AAcA,MAAM,OAAO,aAAa;IACjB,aAAa,CAAQ;IACrB,YAAY,CAAQ;IAC3B,YAAY,aAAqB,EAAE,YAAoB;QACrD,IAAI,CAAC,aAAa,GAAG,aAAa,CAAA,CAAC,wCAAwC;QAC3E,IAAI,CAAC,YAAY,GAAG,YAAY,CAAA,CAAC,sCAAsC;IACzE,CAAC;IAED,QAAQ;QACN,OAAO,GAAG,IAAI,CAAC,aAAa,IAAI,IAAI,CAAC,YAAY,EAAE,CAAA;IACrD,CAAC;CACF;AACD,MAAM,UAAU,SAAS,CAAC,KAAiB,EAAE,MAAM,GAAG,CAAC;IACrD,OAAO,IAAI,aAAa,CACtB,KAAK,CAAC,MAAM,GAAG,CAAC,CAAE,GAAG,aAAa;QAChC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAE,GAAG,WAAW;QAChC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAE,GAAG,SAAS;QAC9B,KAAK,CAAC,MAAM,GAAG,CAAC,CAAE,GAAG,OAAO;QAC5B,KAAK,CAAC,MAAM,GAAG,CAAC,CAAE,GAAG,KAAK;QAC1B,KAAK,CAAC,MAAM,GAAG,CAAC,CAAE,EACpB,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAE,IAAI,CAAC,CAAC,GAAG,KAAK,CAAC,MAAM,CAAE,CAC3C,CAAA;AACH,CAAC"}
|
|
1
|
+
{"version":3,"file":"virtualOffset.js","sourceRoot":"","sources":["../src/virtualOffset.ts"],"names":[],"mappings":"AAcA,MAAM,OAAO,aAAa;IACjB,aAAa,CAAQ;IACrB,YAAY,CAAQ;IAC3B,YAAY,aAAqB,EAAE,YAAoB;QACrD,IAAI,CAAC,aAAa,GAAG,aAAa,CAAA,CAAC,wCAAwC;QAC3E,IAAI,CAAC,YAAY,GAAG,YAAY,CAAA,CAAC,sCAAsC;IACzE,CAAC;IAED,QAAQ;QACN,OAAO,GAAG,IAAI,CAAC,aAAa,IAAI,IAAI,CAAC,YAAY,EAAE,CAAA;IACrD,CAAC;CACF;AACD,MAAM,UAAU,SAAS,CAAC,KAAiB,EAAE,MAAM,GAAG,CAAC;IACrD,OAAO,IAAI,aAAa,CACtB,KAAK,CAAC,MAAM,GAAG,CAAC,CAAE,GAAG,aAAa;QAChC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAE,GAAG,WAAW;QAChC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAE,GAAG,SAAS;QAC9B,KAAK,CAAC,MAAM,GAAG,CAAC,CAAE,GAAG,OAAO;QAC5B,KAAK,CAAC,MAAM,GAAG,CAAC,CAAE,GAAG,KAAK;QAC1B,KAAK,CAAC,MAAM,GAAG,CAAC,CAAE,EACpB,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAE,IAAI,CAAC,CAAC,GAAG,KAAK,CAAC,MAAM,CAAE,CAC3C,CAAA;AACH,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,CAAe,EAAE,CAAe;IAC7D,OAAO,CAAC,CAAC,aAAa,GAAG,CAAC,CAAC,aAAa,IAAI,CAAC,CAAC,YAAY,GAAG,CAAC,CAAC,YAAY,CAAA;AAC7E,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@gmod/bam",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "10.0.1",
|
|
4
4
|
"packageManager": "pnpm@11.15.1",
|
|
5
5
|
"description": "Parser for BAM and BAM index (bai) files",
|
|
6
6
|
"license": "MIT",
|
|
@@ -54,21 +54,21 @@
|
|
|
54
54
|
"@gmod/bgzf-filehandle": "^6.6.0",
|
|
55
55
|
"@gmod/shared-read-cache": "^1.7.2",
|
|
56
56
|
"@jbrowse/quick-lru": "^7.3.5",
|
|
57
|
-
"
|
|
58
|
-
"generic-filehandle2": "^2.2.1"
|
|
57
|
+
"generic-filehandle2": "^2.4.0"
|
|
59
58
|
},
|
|
60
59
|
"devDependencies": {
|
|
61
60
|
"@eslint/js": "^10.0.1",
|
|
62
|
-
"@types/node": "^
|
|
63
|
-
"@vitest/coverage-v8": "^4.1.
|
|
64
|
-
"
|
|
61
|
+
"@types/node": "^26.2.0",
|
|
62
|
+
"@vitest/coverage-v8": "^4.1.11",
|
|
63
|
+
"crc": "^4.3.2",
|
|
64
|
+
"eslint": "^10.9.0",
|
|
65
65
|
"eslint-plugin-import-x": "^4.17.1",
|
|
66
66
|
"git-cliff": "^2.13.1",
|
|
67
67
|
"prettier": "^3.9.6",
|
|
68
68
|
"rimraf": "^6.1.3",
|
|
69
69
|
"typescript": "^6.0.3",
|
|
70
|
-
"typescript-eslint": "^8.
|
|
71
|
-
"vitest": "^4.1.
|
|
70
|
+
"typescript-eslint": "^8.67.0",
|
|
71
|
+
"vitest": "^4.1.11"
|
|
72
72
|
},
|
|
73
73
|
"publishConfig": {
|
|
74
74
|
"access": "public"
|
package/src/bai.ts
CHANGED
|
@@ -49,6 +49,23 @@ function roundUp(n: number, multiple: number) {
|
|
|
49
49
|
return rem === 0 ? n : n - rem + multiple
|
|
50
50
|
}
|
|
51
51
|
|
|
52
|
+
/**
|
|
53
|
+
* Older samtools leaves 0:0 in linear-index windows no read overlaps. htslib
|
|
54
|
+
* fills interior ones from the next entry on load (`hts.c`, "fill missing
|
|
55
|
+
* values"); this also fills leading ones, which htslib leaves at 0. Either
|
|
56
|
+
* way the entry stays a lower bound, since no record overlaps that window.
|
|
57
|
+
* Left as 0, a leading entry scores its whole absolute file offset in
|
|
58
|
+
* `indexCov`, and `getLowestChunk` falls back to the start of the file.
|
|
59
|
+
*/
|
|
60
|
+
function fillLinearGaps(blocks: Float64Array, data: Float64Array) {
|
|
61
|
+
for (let j = blocks.length - 2; j >= 0; j--) {
|
|
62
|
+
if (blocks[j] === 0 && data[j] === 0) {
|
|
63
|
+
blocks[j] = blocks[j + 1]!
|
|
64
|
+
data[j] = data[j + 1]!
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
|
|
52
69
|
export interface IndexCovEntry {
|
|
53
70
|
start: number
|
|
54
71
|
end: number
|
|
@@ -83,6 +100,9 @@ function reg2bins(beg: number, end: number) {
|
|
|
83
100
|
}
|
|
84
101
|
|
|
85
102
|
export default class BAI extends IndexFile<BaiParsed> {
|
|
103
|
+
protected minShift = BAI_LINEAR_SHIFT
|
|
104
|
+
protected depth = BAI_DEPTH
|
|
105
|
+
|
|
86
106
|
async _parse(opts: BaseOpts): Promise<BaiParsed> {
|
|
87
107
|
const bytes = await this.filehandle.readFile(opts)
|
|
88
108
|
const dataView = new DataView(
|
|
@@ -192,6 +212,7 @@ export default class BAI extends IndexFile<BaiParsed> {
|
|
|
192
212
|
linearDataPositions[j] = (bytes[curr + 1]! << 8) | bytes[curr]!
|
|
193
213
|
curr += 8
|
|
194
214
|
}
|
|
215
|
+
fillLinearGaps(linearBlockPositions, linearDataPositions)
|
|
195
216
|
|
|
196
217
|
clampChunkEnds(Object.values(binIndex).flat(), linearBlockPositions)
|
|
197
218
|
return {
|
package/src/bamFile.ts
CHANGED
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
import { unzip, unzipChunkSlice } from '@gmod/bgzf-filehandle'
|
|
2
2
|
import { SharedReadCache } from '@gmod/shared-read-cache'
|
|
3
|
-
import crc32 from 'crc/calculators/crc32'
|
|
4
3
|
|
|
5
4
|
import BAI from './bai.ts'
|
|
6
5
|
import CSI from './csi.ts'
|
|
@@ -12,7 +11,11 @@ import {
|
|
|
12
11
|
BAM_MAGIC,
|
|
13
12
|
MAX_CONCURRENT_CHUNK_READS,
|
|
14
13
|
appendInRange,
|
|
14
|
+
contentHash53,
|
|
15
|
+
decodeHeaderText,
|
|
16
|
+
optimizeChunks,
|
|
15
17
|
parseRefSeqs,
|
|
18
|
+
readBlockSize,
|
|
16
19
|
resolveFilehandle,
|
|
17
20
|
throwIfAborted,
|
|
18
21
|
} from './util.ts'
|
|
@@ -464,9 +467,7 @@ export default class BamFile<T extends BamRecordLike = BAMFeature> {
|
|
|
464
467
|
const parsed = parseRefSeqs(uncba, headLen + 8, this.renameRefSeq)
|
|
465
468
|
let samHeader
|
|
466
469
|
if (parsed) {
|
|
467
|
-
const headerText =
|
|
468
|
-
uncba.subarray(8, 8 + headLen),
|
|
469
|
-
)
|
|
470
|
+
const headerText = decodeHeaderText(uncba, headLen)
|
|
470
471
|
this.header = headerText
|
|
471
472
|
this.chrToIndex = parsed.chrToIndex
|
|
472
473
|
this.indexToChr = parsed.indexToChr
|
|
@@ -539,7 +540,7 @@ export default class BamFile<T extends BamRecordLike = BAMFeature> {
|
|
|
539
540
|
if (chrId === undefined || !this.index) {
|
|
540
541
|
return []
|
|
541
542
|
}
|
|
542
|
-
const chunks = await this.index.blocksForRange(chrId, min
|
|
543
|
+
const chunks = await this.index.blocksForRange(chrId, min, max, opts)
|
|
543
544
|
return this._fetchChunkFeatures(chunks, chrId, chr, min, max, opts)
|
|
544
545
|
}
|
|
545
546
|
|
|
@@ -818,10 +819,12 @@ export default class BamFile<T extends BamRecordLike = BAMFeature> {
|
|
|
818
819
|
// make the count NaN.
|
|
819
820
|
const readNameCounts = new Map<string, number>()
|
|
820
821
|
const readIds = new Set<number>()
|
|
822
|
+
const names = new Array<string>(records.length)
|
|
821
823
|
|
|
822
824
|
for (let i = 0, l = records.length; i < l; i++) {
|
|
823
825
|
const r = records[i]!
|
|
824
826
|
const name = r.name
|
|
827
|
+
names[i] = name
|
|
825
828
|
readNameCounts.set(name, (readNameCounts.get(name) ?? 0) + 1)
|
|
826
829
|
readIds.add(r.fileOffset)
|
|
827
830
|
}
|
|
@@ -829,10 +832,9 @@ export default class BamFile<T extends BamRecordLike = BAMFeature> {
|
|
|
829
832
|
const matePromises: Promise<Chunk[]>[] = []
|
|
830
833
|
for (let i = 0, l = records.length; i < l; i++) {
|
|
831
834
|
const f = records[i]!
|
|
832
|
-
const name = f.name
|
|
833
835
|
if (
|
|
834
836
|
this.index &&
|
|
835
|
-
readNameCounts.get(
|
|
837
|
+
readNameCounts.get(names[i]!) === 1 &&
|
|
836
838
|
(pairAcrossChr ||
|
|
837
839
|
(f.next_refid === chrId &&
|
|
838
840
|
Math.abs(f.start - f.next_pos) < maxInsertSize))
|
|
@@ -848,20 +850,11 @@ export default class BamFile<T extends BamRecordLike = BAMFeature> {
|
|
|
848
850
|
}
|
|
849
851
|
}
|
|
850
852
|
|
|
851
|
-
|
|
852
|
-
|
|
853
|
-
|
|
854
|
-
|
|
855
|
-
|
|
856
|
-
const m = chunks[j]!
|
|
857
|
-
// Key on the virtual-offset span — the same key _cachedChunkFeatures
|
|
858
|
-
// uses. Chunk.toString() also folds in `bin` and fetchedSize(), which
|
|
859
|
-
// keeps two chunks covering an identical span apart here even though
|
|
860
|
-
// the cache below collapses them, so their records came back twice.
|
|
861
|
-
map.set(chunkCacheKey(m), m)
|
|
862
|
-
}
|
|
863
|
-
}
|
|
864
|
-
const mateChunks = [...map.values()]
|
|
853
|
+
// Each mate's lookup is merged on its own, so two of them can resolve to
|
|
854
|
+
// different spans over the same records. Merging the union again makes
|
|
855
|
+
// them disjoint, which is what keeps a mate in the overlap from coming
|
|
856
|
+
// back once per span.
|
|
857
|
+
const mateChunks = optimizeChunks((await Promise.all(matePromises)).flat())
|
|
865
858
|
|
|
866
859
|
// Bounded for the reason ADR 0008 bounds the main query path: a viewAsPairs
|
|
867
860
|
// query over a busy region resolves to many distinct mate chunks, and an
|
|
@@ -961,7 +954,7 @@ export default class BamFile<T extends BamRecordLike = BAMFeature> {
|
|
|
961
954
|
const hasCpositions = cpositions.length > 0
|
|
962
955
|
|
|
963
956
|
while (blockStart + 4 < ba.length) {
|
|
964
|
-
const blockSize = dataView
|
|
957
|
+
const blockSize = readBlockSize(dataView, blockStart)
|
|
965
958
|
const blockEnd = blockStart + 4 + blockSize - 1
|
|
966
959
|
|
|
967
960
|
if (hasDpositions) {
|
|
@@ -981,7 +974,7 @@ export default class BamFile<T extends BamRecordLike = BAMFeature> {
|
|
|
981
974
|
(blockStart - dpositions[pos]!) +
|
|
982
975
|
chunk.minv.dataPosition +
|
|
983
976
|
1
|
|
984
|
-
:
|
|
977
|
+
: contentHash53(ba, blockStart, blockEnd),
|
|
985
978
|
dataView,
|
|
986
979
|
)
|
|
987
980
|
|
package/src/csi.ts
CHANGED
|
@@ -10,6 +10,7 @@ import {
|
|
|
10
10
|
} from './util.ts'
|
|
11
11
|
import { VirtualOffset, fromBytes } from './virtualOffset.ts'
|
|
12
12
|
|
|
13
|
+
import type { ParsedIndexBase, RefIndex } from './indexFile.ts'
|
|
13
14
|
import type { BaseOpts } from './util.ts'
|
|
14
15
|
|
|
15
16
|
const CSI1_MAGIC = 21582659 // CSI\1
|
|
@@ -24,10 +25,18 @@ function rshift(num: number, bits: number) {
|
|
|
24
25
|
return Math.floor(num / 2 ** bits)
|
|
25
26
|
}
|
|
26
27
|
|
|
27
|
-
|
|
28
|
+
interface CsiRefIndex extends RefIndex {
|
|
29
|
+
loffsets: Map<number, VirtualOffset>
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
interface CsiParsed extends ParsedIndexBase<CsiRefIndex> {
|
|
33
|
+
csi: true
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
export default class CSI extends IndexFile<CsiParsed> {
|
|
28
37
|
private maxBinNumber = 0
|
|
29
|
-
|
|
30
|
-
|
|
38
|
+
protected depth = 0
|
|
39
|
+
protected minShift = 0
|
|
31
40
|
|
|
32
41
|
// CSI omits the linear index that BAI's indexCov derives coverage from
|
|
33
42
|
// (CSIv1.tex §3, hts-specs), so there's no equivalent to return.
|
|
@@ -74,7 +83,7 @@ export default class CSI extends IndexFile {
|
|
|
74
83
|
}
|
|
75
84
|
|
|
76
85
|
// fetch and parse the index
|
|
77
|
-
async _parse(opts: BaseOpts) {
|
|
86
|
+
async _parse(opts: BaseOpts): Promise<CsiParsed> {
|
|
78
87
|
const buffer = await this.filehandle.readFile(opts)
|
|
79
88
|
const bytes = await unzip(buffer)
|
|
80
89
|
|
|
@@ -93,7 +102,7 @@ export default class CSI extends IndexFile {
|
|
|
93
102
|
|
|
94
103
|
this.minShift = dataView.getInt32(4, true)
|
|
95
104
|
this.depth = dataView.getInt32(8, true)
|
|
96
|
-
this.maxBinNumber = (
|
|
105
|
+
this.maxBinNumber = (8 ** (this.depth + 1) - 1) / 7
|
|
97
106
|
const maxBinNumber = this.maxBinNumber
|
|
98
107
|
const auxLength = dataView.getInt32(12, true)
|
|
99
108
|
// A tabix-only branch, which is why parseAuxData and the parseNameBytes it
|
|
@@ -128,10 +137,10 @@ export default class CSI extends IndexFile {
|
|
|
128
137
|
if (bin > this.maxBinNumber) {
|
|
129
138
|
curr += 28 + 16
|
|
130
139
|
} else {
|
|
131
|
-
// A bin's loffset is the
|
|
132
|
-
//
|
|
133
|
-
//
|
|
134
|
-
//
|
|
140
|
+
// A bin's loffset is the linear-index entry at its first window, so
|
|
141
|
+
// the smallest over every bin is the first record's offset — one
|
|
142
|
+
// read per bin instead of one per chunk. Checked against every .csi
|
|
143
|
+
// in test/data: same answer on all 19.
|
|
135
144
|
firstDataLine = minVirtualOffset(bytes, curr, 1, firstDataLine)
|
|
136
145
|
curr += 8 // loffset
|
|
137
146
|
const chunkCount = dataView.getInt32(curr, true)
|
|
@@ -149,6 +158,7 @@ export default class CSI extends IndexFile {
|
|
|
149
158
|
const binCount = dataView.getInt32(curr, true)
|
|
150
159
|
curr += 4
|
|
151
160
|
const binIndex: Record<number, Chunk[]> = {}
|
|
161
|
+
const loffsets = new Map<number, VirtualOffset>()
|
|
152
162
|
let pseudoBinStats
|
|
153
163
|
for (let j = 0; j < binCount; j++) {
|
|
154
164
|
const bin = dataView.getUint32(curr, true)
|
|
@@ -157,7 +167,8 @@ export default class CSI extends IndexFile {
|
|
|
157
167
|
pseudoBinStats = parsePseudoBin(bytes, curr + 28)
|
|
158
168
|
curr += 28 + 16
|
|
159
169
|
} else {
|
|
160
|
-
|
|
170
|
+
loffsets.set(bin, fromBytes(bytes, curr))
|
|
171
|
+
curr += 8
|
|
161
172
|
const chunkCount = dataView.getInt32(curr, true)
|
|
162
173
|
curr += 4
|
|
163
174
|
const chunks = new Array<Chunk>(chunkCount)
|
|
@@ -175,6 +186,7 @@ export default class CSI extends IndexFile {
|
|
|
175
186
|
clampChunkEnds(Object.values(binIndex).flat())
|
|
176
187
|
return {
|
|
177
188
|
binIndex,
|
|
189
|
+
loffsets,
|
|
178
190
|
stats: pseudoBinStats,
|
|
179
191
|
}
|
|
180
192
|
}
|
|
@@ -188,12 +200,27 @@ export default class CSI extends IndexFile {
|
|
|
188
200
|
}
|
|
189
201
|
}
|
|
190
202
|
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
203
|
+
/**
|
|
204
|
+
* CSI has no linear index, but each bin's `loffset` is the linear-index entry
|
|
205
|
+
* at the bin's first window (htslib's `update_loff`), so the finest bin at or
|
|
206
|
+
* left of `min` bounds the query from below the way BAI's linear index does.
|
|
207
|
+
* Walks left through siblings and then up to the parent, as `hts_itr_query`
|
|
208
|
+
* does for CSI.
|
|
209
|
+
*/
|
|
210
|
+
protected getLowestChunk(refIndex: CsiRefIndex, min: number) {
|
|
211
|
+
const { loffsets } = refIndex
|
|
212
|
+
const leaves = 8 ** this.depth
|
|
213
|
+
let bin =
|
|
214
|
+
(leaves - 1) / 7 +
|
|
215
|
+
Math.min(Math.floor(min / 2 ** this.minShift), leaves - 1)
|
|
216
|
+
while (bin > 0 && !loffsets.has(bin)) {
|
|
217
|
+
const parent = Math.floor((bin - 1) / 8)
|
|
218
|
+
bin = bin > parent * 8 + 1 ? bin - 1 : parent
|
|
219
|
+
}
|
|
220
|
+
return loffsets.get(bin) ?? ZERO_OFFSET
|
|
194
221
|
}
|
|
195
222
|
|
|
196
|
-
//
|
|
223
|
+
// No linear index means nothing to forecast the far end of a query with, so
|
|
197
224
|
// estimatedBytesForRegions keeps summing every chunk on a CSI-indexed file.
|
|
198
225
|
protected getHighestChunk() {
|
|
199
226
|
return undefined
|
package/src/indexFile.ts
CHANGED
|
@@ -2,6 +2,7 @@ import { SharedReadCache } from '@gmod/shared-read-cache'
|
|
|
2
2
|
import QuickLRU from '@jbrowse/quick-lru'
|
|
3
3
|
|
|
4
4
|
import { chunksLikelyRead, optimizeChunks } from './util.ts'
|
|
5
|
+
import { compareOffsets } from './virtualOffset.ts'
|
|
5
6
|
|
|
6
7
|
import type Chunk from './chunk.ts'
|
|
7
8
|
import type { BaseOpts } from './util.ts'
|
|
@@ -48,6 +49,58 @@ export function memoizeByRefId<T>(
|
|
|
48
49
|
}
|
|
49
50
|
}
|
|
50
51
|
|
|
52
|
+
/**
|
|
53
|
+
* The virtual offset past which a coordinate-sorted file holds nothing
|
|
54
|
+
* overlapping `[.., end)`, from the binning index alone: htslib's `max_off`
|
|
55
|
+
* (`hts_itr_query` in hts.c).
|
|
56
|
+
*
|
|
57
|
+
* Walk right from the finest bin after the one holding `end - 1`, stepping up
|
|
58
|
+
* to the parent at every first child, so each bin visited begins at or past
|
|
59
|
+
* `end` and never overlaps the query. Every record in such a bin starts at or
|
|
60
|
+
* past `end`, so the first chunk of the first bin that exists is a record past
|
|
61
|
+
* the query, and in a sorted file so is every record after it.
|
|
62
|
+
*
|
|
63
|
+
* A bound, unlike the linear-index forecast in `chunksLikelyRead`: it rests on
|
|
64
|
+
* the same sort order `appendInRange` and the early stop already assume, and
|
|
65
|
+
* cannot drop a record they would keep. See ADR 0023 for why the caller drops
|
|
66
|
+
* whole merged chunks with it rather than trimming them.
|
|
67
|
+
*/
|
|
68
|
+
export function maxOffset(
|
|
69
|
+
binIndex: Record<number, Chunk[]>,
|
|
70
|
+
end: number,
|
|
71
|
+
minShift: number,
|
|
72
|
+
depth: number,
|
|
73
|
+
) {
|
|
74
|
+
if (end > 2 ** (minShift + depth * 3)) {
|
|
75
|
+
return undefined
|
|
76
|
+
}
|
|
77
|
+
const binCount = (8 ** (depth + 1) - 1) / 7
|
|
78
|
+
let bin = (8 ** depth - 1) / 7 + Math.floor((end - 1) / 2 ** minShift) + 1
|
|
79
|
+
if (bin >= binCount) {
|
|
80
|
+
bin = 0
|
|
81
|
+
}
|
|
82
|
+
for (;;) {
|
|
83
|
+
while (bin % 8 === 1) {
|
|
84
|
+
bin = (bin - 1) / 8
|
|
85
|
+
}
|
|
86
|
+
if (bin === 0) {
|
|
87
|
+
return undefined
|
|
88
|
+
}
|
|
89
|
+
const chunks = binIndex[bin]
|
|
90
|
+
if (chunks?.length) {
|
|
91
|
+
let lowest = chunks[0]!.minv
|
|
92
|
+
for (let i = 1; i < chunks.length; i++) {
|
|
93
|
+
const minv = chunks[i]!.minv
|
|
94
|
+
if (compareOffsets(minv, lowest) < 0) {
|
|
95
|
+
lowest = minv
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
return lowest
|
|
99
|
+
}
|
|
100
|
+
bin++
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
|
|
51
104
|
export default abstract class IndexFile<
|
|
52
105
|
TParsed extends ParsedIndexBase = ParsedIndexBase,
|
|
53
106
|
> {
|
|
@@ -79,6 +132,11 @@ export default abstract class IndexFile<
|
|
|
79
132
|
end?: number,
|
|
80
133
|
): Promise<{ start: number; end: number; score: number }[]>
|
|
81
134
|
|
|
135
|
+
// The binning scheme: the finest bins are 2^minShift wide, and there are
|
|
136
|
+
// depth levels below bin 0. BAI is CSI with minShift 14 and depth 5.
|
|
137
|
+
protected abstract minShift: number
|
|
138
|
+
protected abstract depth: number
|
|
139
|
+
|
|
82
140
|
// Bin numbers that overlap [min, max). Subclasses implement BAI's fixed
|
|
83
141
|
// 5-level scheme or CSI's configurable scheme (SAMv1.pdf §5.1.1, CSIv1.tex §2).
|
|
84
142
|
protected abstract reg2bins(
|
|
@@ -87,7 +145,8 @@ export default abstract class IndexFile<
|
|
|
87
145
|
): readonly (readonly [number, number])[]
|
|
88
146
|
|
|
89
147
|
// Lower-bound virtual offset for chunks that could contain alignments in
|
|
90
|
-
// [min, ...). BAI uses its linear index
|
|
148
|
+
// [min, ...). BAI uses its linear index, CSI the loffset of a bin at or left
|
|
149
|
+
// of min.
|
|
91
150
|
protected abstract getLowestChunk(
|
|
92
151
|
refIndex: RefIndex,
|
|
93
152
|
min: number,
|
|
@@ -133,7 +192,16 @@ export default abstract class IndexFile<
|
|
|
133
192
|
}
|
|
134
193
|
}
|
|
135
194
|
}
|
|
136
|
-
|
|
195
|
+
const merged = optimizeChunks(chunks, this.getLowestChunk(ba, min))
|
|
196
|
+
const past = maxOffset(binIndex, max, this.minShift, this.depth)
|
|
197
|
+
if (past) {
|
|
198
|
+
let n = merged.length
|
|
199
|
+
while (n > 0 && compareOffsets(merged[n - 1]!.minv, past) >= 0) {
|
|
200
|
+
n--
|
|
201
|
+
}
|
|
202
|
+
merged.length = n
|
|
203
|
+
}
|
|
204
|
+
return merged
|
|
137
205
|
}
|
|
138
206
|
|
|
139
207
|
// SYNC: ~/src/gmod/tabix-js/src/indexFile.ts parse — same shape and the same
|
|
@@ -197,7 +265,8 @@ export default abstract class IndexFile<
|
|
|
197
265
|
* exists — was being told 5.6x the truth on exactly the windows a reader
|
|
198
266
|
* spends their time in, and cannot answer it by zooming: every window narrower
|
|
199
267
|
* than a linear-index interval resolves to the same chunks and so to the same
|
|
200
|
-
* number.
|
|
268
|
+
* number. The table predates `max_off` (ADR 0023), which now drops most of
|
|
269
|
+
* the gap between the first two columns from `blocksForRange` itself.
|
|
201
270
|
*
|
|
202
271
|
* Still summed over merged chunks rather than per region, so two regions
|
|
203
272
|
* sharing a chunk are charged for it once.
|
package/src/record.ts
CHANGED
|
@@ -440,16 +440,18 @@ export default class BamRecord {
|
|
|
440
440
|
}
|
|
441
441
|
|
|
442
442
|
// QUAL is present whenever the record has bases — independent of the unmapped
|
|
443
|
-
// flag (unmapped reads routinely carry SEQ/QUAL).
|
|
444
|
-
//
|
|
443
|
+
// flag (unmapped reads routinely carry SEQ/QUAL). null for a zero-length SEQ,
|
|
444
|
+
// and for a QUAL of `*`, which BAM stores as 0xFF in every byte (SAMv1
|
|
445
|
+
// §4.2.3). htslib decides on the first byte alone, and so does this.
|
|
445
446
|
get qual() {
|
|
446
447
|
const seqLen = this.seq_length
|
|
447
448
|
if (seqLen === 0) {
|
|
448
449
|
return null
|
|
449
|
-
} else {
|
|
450
|
-
const p = this.seqStart + ((seqLen + 1) >> 1)
|
|
451
|
-
return this._byteArray.subarray(p, p + seqLen)
|
|
452
450
|
}
|
|
451
|
+
const p = this.seqStart + ((seqLen + 1) >> 1)
|
|
452
|
+
return this._byteArray[p] === 0xff
|
|
453
|
+
? null
|
|
454
|
+
: this._byteArray.subarray(p, p + seqLen)
|
|
453
455
|
}
|
|
454
456
|
|
|
455
457
|
get strand() {
|
|
@@ -475,7 +477,7 @@ export default class BamRecord {
|
|
|
475
477
|
return this.seqStart + ((seqLen + 1) >> 1) + seqLen
|
|
476
478
|
}
|
|
477
479
|
|
|
478
|
-
// batch fromCharCode: fastest for typical name lengths (
|
|
480
|
+
// batch fromCharCode: fastest for typical name lengths (benchmarks/string-building.bench.ts, removed in 36a3968)
|
|
479
481
|
//
|
|
480
482
|
// Deliberately NOT memoized, unlike end/tags/length_on_ref. Consumers read a
|
|
481
483
|
// read name about once — jbrowse-components' buildBaseFeatureData copies it
|
|
@@ -510,8 +512,8 @@ export default class BamRecord {
|
|
|
510
512
|
}
|
|
511
513
|
|
|
512
514
|
getTag(tagName: string) {
|
|
513
|
-
if (this._cachedTags !== undefined) {
|
|
514
|
-
return this.
|
|
515
|
+
if (this._cachedTags !== undefined || tagName === 'CG') {
|
|
516
|
+
return this.tags[tagName]
|
|
515
517
|
}
|
|
516
518
|
return this._findTag(tagName, false)
|
|
517
519
|
}
|
|
@@ -621,6 +623,9 @@ export default class BamRecord {
|
|
|
621
623
|
)
|
|
622
624
|
p = end
|
|
623
625
|
}
|
|
626
|
+
if (this._hasCGPlaceholder() && isNumericCigar(tags.CG)) {
|
|
627
|
+
delete tags.CG
|
|
628
|
+
}
|
|
624
629
|
return tags
|
|
625
630
|
}
|
|
626
631
|
|
|
@@ -672,7 +677,7 @@ export default class BamRecord {
|
|
|
672
677
|
return !!(this.flags & Constants.BAM_FSUPPLEMENTARY)
|
|
673
678
|
}
|
|
674
679
|
|
|
675
|
-
// Benchmark results for CIGAR parsing strategies (
|
|
680
|
+
// Benchmark results for CIGAR parsing strategies (benchmarks/cigar-strategies.bench.ts, removed in 36a3968):
|
|
676
681
|
//
|
|
677
682
|
// Aligned data:
|
|
678
683
|
// - Plain array is 1.6-1.8x faster than Uint32Array for small CIGARs (≤50 ops)
|
|
@@ -696,12 +701,23 @@ export default class BamRecord {
|
|
|
696
701
|
// htslib stores the placeholder as exactly two ops: <seqlen>S<reflen>N.
|
|
697
702
|
if (numCigarOps === 2) {
|
|
698
703
|
const cigop = this._dataView.getInt32(p, true)
|
|
699
|
-
return (
|
|
704
|
+
return (
|
|
705
|
+
(cigop & 0xf) === CIGAR_SOFT_CLIP && cigop >>> 4 === this.seq_length
|
|
706
|
+
)
|
|
700
707
|
} else {
|
|
701
708
|
return false
|
|
702
709
|
}
|
|
703
710
|
}
|
|
704
711
|
|
|
712
|
+
// SAMv1 §4.2.2: with the placeholder and a CG tag, the tag is the CIGAR and
|
|
713
|
+
// a reader removes it from the tags, as htslib does
|
|
714
|
+
private _hasCGPlaceholder() {
|
|
715
|
+
return this._isCGTagPattern(
|
|
716
|
+
this.b0 + this.read_name_length,
|
|
717
|
+
this.flag_nc & 0xffff,
|
|
718
|
+
)
|
|
719
|
+
}
|
|
720
|
+
|
|
705
721
|
private _computeLengthOnRef(): number {
|
|
706
722
|
const flag_nc = this._dataView.getInt32(this._start + 16, true)
|
|
707
723
|
if (flag_nc & (Constants.BAM_FUNMAP << 16)) {
|
|
@@ -716,7 +732,7 @@ export default class BamRecord {
|
|
|
716
732
|
if ((cigop2 & 0xf) !== CIGAR_REF_SKIP) {
|
|
717
733
|
console.warn('CG tag with no N tag')
|
|
718
734
|
}
|
|
719
|
-
return cigop2
|
|
735
|
+
return cigop2 >>> 4
|
|
720
736
|
}
|
|
721
737
|
|
|
722
738
|
const absOffset = this._byteArray.byteOffset + p
|
|
@@ -732,7 +748,7 @@ export default class BamRecord {
|
|
|
732
748
|
let lref = 0
|
|
733
749
|
for (let c = 0; c < numCigarOps; ++c) {
|
|
734
750
|
const co = cigarView[c]!
|
|
735
|
-
lref += (co
|
|
751
|
+
lref += (co >>> 4) * ((CIGAR_CONSUMES_REF_MASK >> (co & 0xf)) & 1)
|
|
736
752
|
}
|
|
737
753
|
return lref
|
|
738
754
|
}
|
|
@@ -740,7 +756,7 @@ export default class BamRecord {
|
|
|
740
756
|
let lref = 0
|
|
741
757
|
for (let c = 0; c < numCigarOps; ++c) {
|
|
742
758
|
const co = this._dataView.getInt32(p + c * 4, true)
|
|
743
|
-
lref += (co
|
|
759
|
+
lref += (co >>> 4) * ((CIGAR_CONSUMES_REF_MASK >> (co & 0xf)) & 1)
|
|
744
760
|
}
|
|
745
761
|
return lref
|
|
746
762
|
}
|
|
@@ -761,10 +777,10 @@ export default class BamRecord {
|
|
|
761
777
|
const p = this.b0 + this.read_name_length
|
|
762
778
|
|
|
763
779
|
if (this._isCGTagPattern(p, numCigarOps)) {
|
|
764
|
-
|
|
765
|
-
|
|
766
|
-
|
|
767
|
-
|
|
780
|
+
const cg = this._findTag('CG', false)
|
|
781
|
+
if (isNumericCigar(cg)) {
|
|
782
|
+
return cg
|
|
783
|
+
}
|
|
768
784
|
}
|
|
769
785
|
|
|
770
786
|
const absOffset = this._byteArray.byteOffset + p
|
|
@@ -811,18 +827,21 @@ export default class BamRecord {
|
|
|
811
827
|
let result = ''
|
|
812
828
|
for (let i = 0, l = numeric.length; i < l; i++) {
|
|
813
829
|
const packed = numeric[i]!
|
|
814
|
-
result += packed
|
|
830
|
+
result += packed >>> 4
|
|
815
831
|
result += String.fromCharCode(ASCII_CIGAR_CODES[packed & 0xf]!)
|
|
816
832
|
}
|
|
817
833
|
return result
|
|
818
834
|
}
|
|
819
835
|
|
|
820
836
|
get num_cigar_ops() {
|
|
821
|
-
return this.
|
|
837
|
+
return this._hasCGPlaceholder()
|
|
838
|
+
? this.NUMERIC_CIGAR.length
|
|
839
|
+
: this.flag_nc & 0xffff
|
|
822
840
|
}
|
|
823
841
|
|
|
842
|
+
// the stored CIGAR field, which for a long CIGAR is the two-op placeholder
|
|
824
843
|
get num_cigar_bytes() {
|
|
825
|
-
return this.
|
|
844
|
+
return (this.flag_nc & 0xffff) << 2
|
|
826
845
|
}
|
|
827
846
|
|
|
828
847
|
get read_name_length() {
|