@gmod/cram 1.5.9 → 1.6.2
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 +90 -0
- package/README.md +182 -172
- package/dist/craiIndex.d.ts +37 -0
- package/dist/craiIndex.js +196 -301
- package/dist/craiIndex.js.map +1 -0
- package/dist/cram-bundle.js +6 -15
- package/dist/cramFile/codecs/_base.d.ts +6 -0
- package/dist/cramFile/codecs/_base.js +44 -53
- package/dist/cramFile/codecs/_base.js.map +1 -0
- package/dist/cramFile/codecs/beta.d.ts +4 -0
- package/dist/cramFile/codecs/beta.js +38 -48
- package/dist/cramFile/codecs/beta.js.map +1 -0
- package/dist/cramFile/codecs/byteArrayLength.d.ts +8 -0
- package/dist/cramFile/codecs/byteArrayLength.js +58 -78
- package/dist/cramFile/codecs/byteArrayLength.js.map +1 -0
- package/dist/cramFile/codecs/byteArrayStop.d.ts +6 -0
- package/dist/cramFile/codecs/byteArrayStop.js +62 -76
- package/dist/cramFile/codecs/byteArrayStop.js.map +1 -0
- package/dist/cramFile/codecs/external.d.ts +7 -0
- package/dist/cramFile/codecs/external.js +63 -81
- package/dist/cramFile/codecs/external.js.map +1 -0
- package/dist/cramFile/codecs/gamma.d.ts +4 -0
- package/dist/cramFile/codecs/gamma.js +43 -56
- package/dist/cramFile/codecs/gamma.js.map +1 -0
- package/dist/cramFile/codecs/huffman.d.ts +17 -0
- package/dist/cramFile/codecs/huffman.js +126 -199
- package/dist/cramFile/codecs/huffman.js.map +1 -0
- package/dist/cramFile/codecs/index.d.ts +2 -0
- package/dist/cramFile/codecs/index.js +31 -38
- package/dist/cramFile/codecs/index.js.map +1 -0
- package/dist/cramFile/codecs/subexp.d.ts +4 -0
- package/dist/cramFile/codecs/subexp.js +51 -64
- package/dist/cramFile/codecs/subexp.js.map +1 -0
- package/dist/cramFile/constants.d.ts +36 -0
- package/dist/cramFile/constants.js +52 -50
- package/dist/cramFile/constants.js.map +1 -0
- package/dist/cramFile/container/compressionScheme.d.ts +23 -0
- package/dist/cramFile/container/compressionScheme.js +115 -153
- package/dist/cramFile/container/compressionScheme.js.map +1 -0
- package/dist/cramFile/container/index.d.ts +13 -0
- package/dist/cramFile/container/index.js +169 -283
- package/dist/cramFile/container/index.js.map +1 -0
- package/dist/cramFile/file.d.ts +63 -0
- package/dist/cramFile/file.js +440 -766
- package/dist/cramFile/file.js.map +1 -0
- package/dist/cramFile/index.d.ts +2 -0
- package/dist/cramFile/index.js +7 -4
- package/dist/cramFile/index.js.map +1 -0
- package/dist/cramFile/record.d.ts +79 -0
- package/dist/cramFile/record.js +253 -308
- package/dist/cramFile/record.js.map +1 -0
- package/dist/cramFile/sectionParsers.d.ts +18 -0
- package/dist/cramFile/sectionParsers.js +324 -362
- package/dist/cramFile/sectionParsers.js.map +1 -0
- package/dist/cramFile/slice/decodeRecord.d.ts +2 -0
- package/dist/cramFile/slice/decodeRecord.js +278 -298
- package/dist/cramFile/slice/decodeRecord.js.map +1 -0
- package/dist/cramFile/slice/index.d.ts +20 -0
- package/dist/cramFile/slice/index.js +488 -789
- package/dist/cramFile/slice/index.js.map +1 -0
- package/dist/cramFile/util.d.ts +5 -0
- package/dist/cramFile/util.js +158 -144
- package/dist/cramFile/util.js.map +1 -0
- package/dist/errors.d.ts +23 -0
- package/dist/errors.js +66 -103
- package/dist/errors.js.map +1 -0
- package/dist/index.d.ts +4 -0
- package/dist/index.js +12 -12
- package/dist/index.js.map +1 -0
- package/dist/indexedCramFile.d.ts +39 -0
- package/dist/indexedCramFile.js +213 -315
- package/dist/indexedCramFile.js.map +1 -0
- package/dist/io/bufferCache.d.ts +12 -0
- package/dist/io/bufferCache.js +108 -128
- package/dist/io/bufferCache.js.map +1 -0
- package/dist/io/index.d.ts +5 -0
- package/dist/io/index.js +29 -27
- package/dist/io/index.js.map +1 -0
- package/dist/io/localFile.d.ts +10 -0
- package/dist/io/localFile.js +105 -162
- package/dist/io/localFile.js.map +1 -0
- package/dist/io/remoteFile.d.ts +16 -0
- package/dist/io/remoteFile.js +137 -206
- package/dist/io/remoteFile.js.map +1 -0
- package/dist/rans/constants.d.ts +3 -0
- package/dist/rans/constants.js +6 -6
- package/dist/rans/constants.js.map +1 -0
- package/dist/rans/d04.d.ts +1 -0
- package/dist/rans/d04.js +70 -99
- package/dist/rans/d04.js.map +1 -0
- package/dist/rans/d14.d.ts +1 -0
- package/dist/rans/d14.js +55 -93
- package/dist/rans/d14.js.map +1 -0
- package/dist/rans/decoding.d.ts +30 -0
- package/dist/rans/decoding.js +112 -159
- package/dist/rans/decoding.js.map +1 -0
- package/dist/rans/frequencies.d.ts +2 -0
- package/dist/rans/frequencies.js +110 -119
- package/dist/rans/frequencies.js.map +1 -0
- package/dist/rans/index.d.ts +1 -0
- package/dist/rans/index.js +111 -174
- package/dist/rans/index.js.map +1 -0
- package/dist/sam.d.ts +1 -0
- package/dist/sam.js +16 -41
- package/dist/sam.js.map +1 -0
- package/dist/unzip-pako.d.ts +2 -0
- package/dist/unzip-pako.js +9 -0
- package/dist/unzip-pako.js.map +1 -0
- package/dist/unzip.d.ts +2 -0
- package/dist/unzip.js +6 -0
- package/dist/unzip.js.map +1 -0
- package/errors.js +66 -103
- package/esm/craiIndex.d.ts +37 -0
- package/esm/craiIndex.js +158 -0
- package/esm/craiIndex.js.map +1 -0
- package/esm/cramFile/codecs/_base.d.ts +6 -0
- package/esm/cramFile/codecs/_base.js +42 -0
- package/esm/cramFile/codecs/_base.js.map +1 -0
- package/esm/cramFile/codecs/beta.d.ts +4 -0
- package/esm/cramFile/codecs/beta.js +15 -0
- package/esm/cramFile/codecs/beta.js.map +1 -0
- package/esm/cramFile/codecs/byteArrayLength.d.ts +8 -0
- package/esm/cramFile/codecs/byteArrayLength.js +35 -0
- package/esm/cramFile/codecs/byteArrayLength.js.map +1 -0
- package/esm/cramFile/codecs/byteArrayStop.d.ts +6 -0
- package/esm/cramFile/codecs/byteArrayStop.js +40 -0
- package/esm/cramFile/codecs/byteArrayStop.js.map +1 -0
- package/esm/cramFile/codecs/external.d.ts +7 -0
- package/esm/cramFile/codecs/external.js +40 -0
- package/esm/cramFile/codecs/external.js.map +1 -0
- package/esm/cramFile/codecs/gamma.d.ts +4 -0
- package/esm/cramFile/codecs/gamma.js +20 -0
- package/esm/cramFile/codecs/gamma.js.map +1 -0
- package/esm/cramFile/codecs/huffman.d.ts +17 -0
- package/esm/cramFile/codecs/huffman.js +107 -0
- package/esm/cramFile/codecs/huffman.js.map +1 -0
- package/esm/cramFile/codecs/index.d.ts +2 -0
- package/esm/cramFile/codecs/index.js +30 -0
- package/esm/cramFile/codecs/index.js.map +1 -0
- package/esm/cramFile/codecs/subexp.d.ts +4 -0
- package/esm/cramFile/codecs/subexp.js +28 -0
- package/esm/cramFile/codecs/subexp.js.map +1 -0
- package/esm/cramFile/constants.d.ts +36 -0
- package/esm/cramFile/constants.js +51 -0
- package/esm/cramFile/constants.js.map +1 -0
- package/esm/cramFile/container/compressionScheme.d.ts +23 -0
- package/esm/cramFile/container/compressionScheme.js +123 -0
- package/esm/cramFile/container/compressionScheme.js.map +1 -0
- package/esm/cramFile/container/index.d.ts +13 -0
- package/esm/cramFile/container/index.js +84 -0
- package/esm/cramFile/container/index.js.map +1 -0
- package/esm/cramFile/file.d.ts +63 -0
- package/esm/cramFile/file.js +281 -0
- package/esm/cramFile/file.js.map +1 -0
- package/esm/cramFile/index.d.ts +2 -0
- package/esm/cramFile/index.js +3 -0
- package/esm/cramFile/index.js.map +1 -0
- package/esm/cramFile/record.d.ts +79 -0
- package/esm/cramFile/record.js +297 -0
- package/esm/cramFile/record.js.map +1 -0
- package/esm/cramFile/sectionParsers.d.ts +18 -0
- package/esm/cramFile/sectionParsers.js +347 -0
- package/esm/cramFile/sectionParsers.js.map +1 -0
- package/esm/cramFile/slice/decodeRecord.d.ts +2 -0
- package/esm/cramFile/slice/decodeRecord.js +299 -0
- package/esm/cramFile/slice/decodeRecord.js.map +1 -0
- package/esm/cramFile/slice/index.d.ts +20 -0
- package/esm/cramFile/slice/index.js +364 -0
- package/esm/cramFile/slice/index.js.map +1 -0
- package/esm/cramFile/util.d.ts +5 -0
- package/esm/cramFile/util.js +161 -0
- package/esm/cramFile/util.js.map +1 -0
- package/esm/errors.d.ts +23 -0
- package/esm/errors.js +24 -0
- package/esm/errors.js.map +1 -0
- package/esm/index.d.ts +4 -0
- package/esm/index.js +5 -0
- package/esm/index.js.map +1 -0
- package/esm/indexedCramFile.d.ts +39 -0
- package/esm/indexedCramFile.js +155 -0
- package/esm/indexedCramFile.js.map +1 -0
- package/esm/io/bufferCache.d.ts +12 -0
- package/esm/io/bufferCache.js +54 -0
- package/esm/io/bufferCache.js.map +1 -0
- package/esm/io/index.d.ts +5 -0
- package/esm/io/index.js +24 -0
- package/esm/io/index.js.map +1 -0
- package/esm/io/localFile.d.ts +10 -0
- package/esm/io/localFile.js +31 -0
- package/esm/io/localFile.js.map +1 -0
- package/esm/io/remoteFile.d.ts +16 -0
- package/esm/io/remoteFile.js +64 -0
- package/esm/io/remoteFile.js.map +1 -0
- package/esm/rans/constants.d.ts +3 -0
- package/esm/rans/constants.js +5 -0
- package/esm/rans/constants.js.map +1 -0
- package/esm/rans/d04.d.ts +1 -0
- package/esm/rans/d04.js +67 -0
- package/esm/rans/d04.js.map +1 -0
- package/esm/rans/d14.d.ts +1 -0
- package/esm/rans/d14.js +52 -0
- package/esm/rans/d14.js.map +1 -0
- package/esm/rans/decoding.d.ts +30 -0
- package/esm/rans/decoding.js +118 -0
- package/esm/rans/decoding.js.map +1 -0
- package/esm/rans/frequencies.d.ts +2 -0
- package/esm/rans/frequencies.js +110 -0
- package/esm/rans/frequencies.js.map +1 -0
- package/esm/rans/index.d.ts +1 -0
- package/esm/rans/index.js +195 -0
- package/esm/rans/index.js.map +1 -0
- package/esm/sam.d.ts +1 -0
- package/esm/sam.js +16 -0
- package/esm/sam.js.map +1 -0
- package/esm/unzip-pako.d.ts +2 -0
- package/esm/unzip-pako.js +5 -0
- package/esm/unzip-pako.js.map +1 -0
- package/esm/unzip.d.ts +2 -0
- package/esm/unzip.js +3 -0
- package/esm/unzip.js.map +1 -0
- package/package.json +38 -35
- package/src/craiIndex.js +180 -0
- package/src/cramFile/codecs/_base.js +49 -0
- package/src/cramFile/codecs/beta.js +23 -0
- package/src/cramFile/codecs/byteArrayLength.js +55 -0
- package/src/cramFile/codecs/byteArrayStop.js +50 -0
- package/src/cramFile/codecs/external.js +54 -0
- package/src/cramFile/codecs/gamma.js +30 -0
- package/src/cramFile/codecs/huffman.js +137 -0
- package/src/cramFile/codecs/index.js +38 -0
- package/src/cramFile/codecs/subexp.js +32 -0
- package/src/cramFile/constants.js +55 -0
- package/src/cramFile/container/compressionScheme.js +144 -0
- package/src/cramFile/container/index.js +119 -0
- package/src/cramFile/file.js +347 -0
- package/src/cramFile/index.js +3 -0
- package/src/cramFile/record.js +337 -0
- package/src/cramFile/sectionParsers.js +379 -0
- package/src/cramFile/slice/decodeRecord.js +362 -0
- package/src/cramFile/slice/index.js +497 -0
- package/src/cramFile/util.js +169 -0
- package/src/errors.js +22 -0
- package/src/index.js +5 -0
- package/src/indexedCramFile.js +191 -0
- package/src/io/bufferCache.js +66 -0
- package/src/io/index.js +26 -0
- package/src/io/localFile.js +35 -0
- package/src/io/remoteFile.js +71 -0
- package/src/rans/README.md +1 -0
- package/src/rans/constants.js +5 -0
- package/src/rans/d04.js +83 -0
- package/src/rans/d14.js +59 -0
- package/src/rans/decoding.js +141 -0
- package/src/rans/frequencies.js +121 -0
- package/src/rans/index.js +249 -0
- package/src/sam.js +15 -0
- package/src/unzip-pako.ts +5 -0
- package/src/unzip.ts +2 -0
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { CramUnimplementedError } from '../../errors';
|
|
2
|
+
import CramCodec from './_base';
|
|
3
|
+
export default class GammaCodec extends CramCodec {
|
|
4
|
+
constructor(parameters = {}, dataType) {
|
|
5
|
+
super(parameters, dataType);
|
|
6
|
+
if (this.dataType !== 'int') {
|
|
7
|
+
throw new CramUnimplementedError(`${this.dataType} decoding not yet implemented by GAMMA codec`);
|
|
8
|
+
}
|
|
9
|
+
}
|
|
10
|
+
decode(slice, coreDataBlock, blocksByContentId, cursors) {
|
|
11
|
+
let length = 1;
|
|
12
|
+
while (this._getBits(coreDataBlock.content, cursors.coreBlock, 1) === 0) {
|
|
13
|
+
length += 1;
|
|
14
|
+
}
|
|
15
|
+
const readBits = this._getBits(coreDataBlock.content, cursors.coreBlock, length - 1);
|
|
16
|
+
const value = readBits | (1 << (length - 1));
|
|
17
|
+
return value - this.parameters.offset;
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
//# sourceMappingURL=gamma.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"gamma.js","sourceRoot":"","sources":["../../../src/cramFile/codecs/gamma.js"],"names":[],"mappings":"AAAA,OAAO,EAAE,sBAAsB,EAAE,MAAM,cAAc,CAAA;AACrD,OAAO,SAAS,MAAM,SAAS,CAAA;AAE/B,MAAM,CAAC,OAAO,OAAO,UAAW,SAAQ,SAAS;IAC/C,YAAY,UAAU,GAAG,EAAE,EAAE,QAAQ;QACnC,KAAK,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAA;QAC3B,IAAI,IAAI,CAAC,QAAQ,KAAK,KAAK,EAAE;YAC3B,MAAM,IAAI,sBAAsB,CAC9B,GAAG,IAAI,CAAC,QAAQ,8CAA8C,CAC/D,CAAA;SACF;IACH,CAAC;IAED,MAAM,CAAC,KAAK,EAAE,aAAa,EAAE,iBAAiB,EAAE,OAAO;QACrD,IAAI,MAAM,GAAG,CAAC,CAAA;QAEd,OAAO,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,OAAO,EAAE,OAAO,CAAC,SAAS,EAAE,CAAC,CAAC,KAAK,CAAC,EAAE;YACvE,MAAM,IAAI,CAAC,CAAA;SACZ;QAED,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAC5B,aAAa,CAAC,OAAO,EACrB,OAAO,CAAC,SAAS,EACjB,MAAM,GAAG,CAAC,CACX,CAAA;QAED,MAAM,KAAK,GAAG,QAAQ,GAAG,CAAC,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAA;QAC5C,OAAO,KAAK,GAAG,IAAI,CAAC,UAAU,CAAC,MAAM,CAAA;IACvC,CAAC;CACF"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
export default class HuffmanIntCodec extends CramCodec {
|
|
2
|
+
_decode(slice: any, coreDataBlock: any, coreCursor: any): any;
|
|
3
|
+
buildCodeBook(): void;
|
|
4
|
+
codeBook: {} | undefined;
|
|
5
|
+
buildCodes(): void;
|
|
6
|
+
codes: {} | undefined;
|
|
7
|
+
buildCaches(): void;
|
|
8
|
+
sortedCodes: any[] | undefined;
|
|
9
|
+
sortedByValue: any[] | undefined;
|
|
10
|
+
sortedValuesByBitCode: any[] | undefined;
|
|
11
|
+
sortedBitCodes: any[] | undefined;
|
|
12
|
+
sortedBitLengthsByBitCode: any[] | undefined;
|
|
13
|
+
bitCodeToValue: any[] | undefined;
|
|
14
|
+
decode(slice: any, coreDataBlock: any, blocksByContentId: any, cursors: any): any;
|
|
15
|
+
_decodeZeroLengthCode(): any;
|
|
16
|
+
}
|
|
17
|
+
import CramCodec from "./_base";
|
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
import { CramMalformedError } from '../../errors';
|
|
2
|
+
import CramCodec from './_base';
|
|
3
|
+
function numberOfSetBits(ii) {
|
|
4
|
+
let i = (ii - (ii >> 1)) & 0x55555555;
|
|
5
|
+
i = (i & 0x33333333) + ((i >> 2) & 0x33333333);
|
|
6
|
+
return (((i + (i >> 4)) & 0x0f0f0f0f) * 0x01010101) >> 24;
|
|
7
|
+
}
|
|
8
|
+
export default class HuffmanIntCodec extends CramCodec {
|
|
9
|
+
constructor(parameters = {}, dataType) {
|
|
10
|
+
super(parameters, dataType);
|
|
11
|
+
if (!['byte', 'int'].includes(this.dataType)) {
|
|
12
|
+
throw new TypeError(`${this.dataType} decoding not yet implemented by HUFFMAN_INT codec`);
|
|
13
|
+
}
|
|
14
|
+
this.buildCodeBook();
|
|
15
|
+
this.buildCodes();
|
|
16
|
+
this.buildCaches();
|
|
17
|
+
// if this is a degenerate zero-length huffman code, special-case the decoding
|
|
18
|
+
if (this.sortedCodes[0].bitLength === 0) {
|
|
19
|
+
this._decode = this._decodeZeroLengthCode;
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
buildCodeBook() {
|
|
23
|
+
// parse the parameters together into a `codes` data structure
|
|
24
|
+
let codes = new Array(this.parameters.numCodes);
|
|
25
|
+
for (let i = 0; i < this.parameters.numCodes; i += 1) {
|
|
26
|
+
codes[i] = {
|
|
27
|
+
symbol: this.parameters.symbols[i],
|
|
28
|
+
bitLength: this.parameters.bitLengths[i],
|
|
29
|
+
};
|
|
30
|
+
}
|
|
31
|
+
// sort the codes by bit length and symbol value
|
|
32
|
+
codes = codes.sort((a, b) => a.bitLength - b.bitLength || a.symbol - b.symbol);
|
|
33
|
+
this.codeBook = {};
|
|
34
|
+
codes.forEach(code => {
|
|
35
|
+
if (!this.codeBook[code.bitLength]) {
|
|
36
|
+
this.codeBook[code.bitLength] = [];
|
|
37
|
+
}
|
|
38
|
+
this.codeBook[code.bitLength].push(code.symbol);
|
|
39
|
+
});
|
|
40
|
+
}
|
|
41
|
+
buildCodes() {
|
|
42
|
+
this.codes = {}; /* new TreeMap<Integer, HuffmanBitCode>(); */
|
|
43
|
+
let codeLength = 0;
|
|
44
|
+
let codeValue = -1;
|
|
45
|
+
Object.entries(this.codeBook).forEach(([bitLength, symbols]) => {
|
|
46
|
+
bitLength = parseInt(bitLength, 10);
|
|
47
|
+
symbols.forEach(symbol => {
|
|
48
|
+
const code = { bitLength, value: symbol };
|
|
49
|
+
codeValue += 1;
|
|
50
|
+
const delta = bitLength - codeLength; // new length?
|
|
51
|
+
codeValue <<= delta; // pad with 0's
|
|
52
|
+
code.bitCode = codeValue; // calculated: huffman code
|
|
53
|
+
codeLength += delta; // adjust current code length
|
|
54
|
+
if (numberOfSetBits(codeValue) > bitLength) {
|
|
55
|
+
throw new CramMalformedError('Symbol out of range');
|
|
56
|
+
}
|
|
57
|
+
this.codes[symbol] = code;
|
|
58
|
+
});
|
|
59
|
+
});
|
|
60
|
+
}
|
|
61
|
+
buildCaches() {
|
|
62
|
+
this.sortedCodes = Object.values(this.codes).sort((a, b) => a.bitLength - b.bitLength || a.bitCode - b.bitCode);
|
|
63
|
+
// this.sortedValues = this.parameters.values.sort((a,b) => a-b)
|
|
64
|
+
this.sortedByValue = Object.values(this.codes).sort((a, b) => a.value - b.value);
|
|
65
|
+
this.sortedValuesByBitCode = this.sortedCodes.map(c => c.value);
|
|
66
|
+
this.sortedBitCodes = this.sortedCodes.map(c => c.bitCode);
|
|
67
|
+
this.sortedBitLengthsByBitCode = this.sortedCodes.map(c => c.bitLength);
|
|
68
|
+
const maxBitCode = Math.max(...this.sortedBitCodes);
|
|
69
|
+
this.bitCodeToValue = new Array(maxBitCode + 1).fill(-1);
|
|
70
|
+
for (let i = 0; i < this.sortedBitCodes.length; i += 1) {
|
|
71
|
+
this.bitCodeToValue[this.sortedCodes[i].bitCode] = i;
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
decode(slice, coreDataBlock, blocksByContentId, cursors) {
|
|
75
|
+
return this._decode(slice, coreDataBlock, cursors.coreBlock);
|
|
76
|
+
}
|
|
77
|
+
// _decodeNull() {
|
|
78
|
+
// return -1
|
|
79
|
+
// }
|
|
80
|
+
// the special case for zero-length codes
|
|
81
|
+
_decodeZeroLengthCode() {
|
|
82
|
+
return this.sortedCodes[0].value;
|
|
83
|
+
}
|
|
84
|
+
_decode(slice, coreDataBlock, coreCursor) {
|
|
85
|
+
const input = coreDataBlock.content;
|
|
86
|
+
let prevLen = 0;
|
|
87
|
+
let bits = 0;
|
|
88
|
+
for (let i = 0; i < this.sortedCodes.length; i += 1) {
|
|
89
|
+
const length = this.sortedCodes[i].bitLength;
|
|
90
|
+
bits <<= length - prevLen;
|
|
91
|
+
bits |= this._getBits(input, coreCursor, length - prevLen);
|
|
92
|
+
prevLen = length;
|
|
93
|
+
{
|
|
94
|
+
const index = this.bitCodeToValue[bits];
|
|
95
|
+
if (index > -1 && this.sortedBitLengthsByBitCode[index] === length) {
|
|
96
|
+
return this.sortedValuesByBitCode[index];
|
|
97
|
+
}
|
|
98
|
+
for (let j = i; this.sortedCodes[j + 1].bitLength === length &&
|
|
99
|
+
j < this.sortedCodes.length; j += 1) {
|
|
100
|
+
i += 1;
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
throw new CramMalformedError('Huffman symbol not found.');
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
//# sourceMappingURL=huffman.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"huffman.js","sourceRoot":"","sources":["../../../src/cramFile/codecs/huffman.js"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { CramUnimplementedError } from '../../errors';
|
|
2
|
+
import HuffmanIntCodec from './huffman';
|
|
3
|
+
import ExternalCodec from './external';
|
|
4
|
+
import ByteArrayStopCodec from './byteArrayStop';
|
|
5
|
+
import ByteArrayLengthCodec from './byteArrayLength';
|
|
6
|
+
import BetaCodec from './beta';
|
|
7
|
+
import GammaCodec from './gamma';
|
|
8
|
+
import SubexpCodec from './subexp';
|
|
9
|
+
const codecClasses = {
|
|
10
|
+
1: ExternalCodec,
|
|
11
|
+
// 2: GolombCodec,
|
|
12
|
+
3: HuffmanIntCodec,
|
|
13
|
+
4: ByteArrayLengthCodec,
|
|
14
|
+
5: ByteArrayStopCodec,
|
|
15
|
+
6: BetaCodec,
|
|
16
|
+
7: SubexpCodec,
|
|
17
|
+
// 8: GolombRiceCodec,
|
|
18
|
+
9: GammaCodec,
|
|
19
|
+
};
|
|
20
|
+
export function getCodecClassWithId(id) {
|
|
21
|
+
return codecClasses[id];
|
|
22
|
+
}
|
|
23
|
+
export function instantiateCodec(encodingData, dataType) {
|
|
24
|
+
const CodecClass = getCodecClassWithId(dataType === 'ignore' ? 0 : encodingData.codecId);
|
|
25
|
+
if (!CodecClass) {
|
|
26
|
+
throw new CramUnimplementedError(`no codec implemented for codec ID ${encodingData.codecId}`);
|
|
27
|
+
}
|
|
28
|
+
return new CodecClass(encodingData.parameters, dataType, instantiateCodec);
|
|
29
|
+
}
|
|
30
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/cramFile/codecs/index.js"],"names":[],"mappings":"AAAA,OAAO,EAAE,sBAAsB,EAAE,MAAM,cAAc,CAAA;AAErD,OAAO,eAAe,MAAM,WAAW,CAAA;AACvC,OAAO,aAAa,MAAM,YAAY,CAAA;AACtC,OAAO,kBAAkB,MAAM,iBAAiB,CAAA;AAChD,OAAO,oBAAoB,MAAM,mBAAmB,CAAA;AACpD,OAAO,SAAS,MAAM,QAAQ,CAAA;AAC9B,OAAO,UAAU,MAAM,SAAS,CAAA;AAChC,OAAO,WAAW,MAAM,UAAU,CAAA;AAElC,MAAM,YAAY,GAAG;IACnB,CAAC,EAAE,aAAa;IAChB,kBAAkB;IAClB,CAAC,EAAE,eAAe;IAClB,CAAC,EAAE,oBAAoB;IACvB,CAAC,EAAE,kBAAkB;IACrB,CAAC,EAAE,SAAS;IACZ,CAAC,EAAE,WAAW;IACd,sBAAsB;IACtB,CAAC,EAAE,UAAU;CACd,CAAA;AAED,MAAM,UAAU,mBAAmB,CAAC,EAAE;IACpC,OAAO,YAAY,CAAC,EAAE,CAAC,CAAA;AACzB,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,YAAY,EAAE,QAAQ;IACrD,MAAM,UAAU,GAAG,mBAAmB,CACpC,QAAQ,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,OAAO,CACjD,CAAA;IACD,IAAI,CAAC,UAAU,EAAE;QACf,MAAM,IAAI,sBAAsB,CAC9B,qCAAqC,YAAY,CAAC,OAAO,EAAE,CAC5D,CAAA;KACF;IAED,OAAO,IAAI,UAAU,CAAC,YAAY,CAAC,UAAU,EAAE,QAAQ,EAAE,gBAAgB,CAAC,CAAA;AAC5E,CAAC"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { CramUnimplementedError } from '../../errors';
|
|
2
|
+
import CramCodec from './_base';
|
|
3
|
+
export default class SubexpCodec extends CramCodec {
|
|
4
|
+
constructor(parameters = {}, dataType) {
|
|
5
|
+
super(parameters, dataType);
|
|
6
|
+
if (this.dataType !== 'int') {
|
|
7
|
+
throw new CramUnimplementedError(`${this.dataType} decoding not yet implemented by SUBEXP codec`);
|
|
8
|
+
}
|
|
9
|
+
}
|
|
10
|
+
decode(slice, coreDataBlock, blocksByContentId, cursors) {
|
|
11
|
+
let numLeadingOnes = 0;
|
|
12
|
+
while (this._getBits(coreDataBlock.content, cursors.coreBlock, 1)) {
|
|
13
|
+
numLeadingOnes += 1;
|
|
14
|
+
}
|
|
15
|
+
let b;
|
|
16
|
+
let n;
|
|
17
|
+
if (numLeadingOnes === 0) {
|
|
18
|
+
b = this.parameters.K;
|
|
19
|
+
n = this._getBits(coreDataBlock.content, cursors.coreBlock, b);
|
|
20
|
+
}
|
|
21
|
+
else {
|
|
22
|
+
b = numLeadingOnes + this.parameters.K - 1;
|
|
23
|
+
n = (1 << b) | this._getBits(coreDataBlock.content, cursors.coreBlock, b);
|
|
24
|
+
}
|
|
25
|
+
return n - this.parameters.offset;
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
//# sourceMappingURL=subexp.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"subexp.js","sourceRoot":"","sources":["../../../src/cramFile/codecs/subexp.js"],"names":[],"mappings":"AAAA,OAAO,EAAE,sBAAsB,EAAE,MAAM,cAAc,CAAA;AACrD,OAAO,SAAS,MAAM,SAAS,CAAA;AAE/B,MAAM,CAAC,OAAO,OAAO,WAAY,SAAQ,SAAS;IAChD,YAAY,UAAU,GAAG,EAAE,EAAE,QAAQ;QACnC,KAAK,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAA;QAC3B,IAAI,IAAI,CAAC,QAAQ,KAAK,KAAK,EAAE;YAC3B,MAAM,IAAI,sBAAsB,CAC9B,GAAG,IAAI,CAAC,QAAQ,+CAA+C,CAChE,CAAA;SACF;IACH,CAAC;IAED,MAAM,CAAC,KAAK,EAAE,aAAa,EAAE,iBAAiB,EAAE,OAAO;QACrD,IAAI,cAAc,GAAG,CAAC,CAAA;QACtB,OAAO,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,OAAO,EAAE,OAAO,CAAC,SAAS,EAAE,CAAC,CAAC,EAAE;YACjE,cAAc,IAAI,CAAC,CAAA;SACpB;QAED,IAAI,CAAC,CAAA;QACL,IAAI,CAAC,CAAA;QACL,IAAI,cAAc,KAAK,CAAC,EAAE;YACxB,CAAC,GAAG,IAAI,CAAC,UAAU,CAAC,CAAC,CAAA;YACrB,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,OAAO,EAAE,OAAO,CAAC,SAAS,EAAE,CAAC,CAAC,CAAA;SAC/D;aAAM;YACL,CAAC,GAAG,cAAc,GAAG,IAAI,CAAC,UAAU,CAAC,CAAC,GAAG,CAAC,CAAA;YAC1C,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,OAAO,EAAE,OAAO,CAAC,SAAS,EAAE,CAAC,CAAC,CAAA;SAC1E;QAED,OAAO,CAAC,GAAG,IAAI,CAAC,UAAU,CAAC,MAAM,CAAA;IACnC,CAAC;CACF"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
export default Constants;
|
|
2
|
+
declare namespace Constants {
|
|
3
|
+
const CRAM_FLAG_PRESERVE_QUAL_SCORES: number;
|
|
4
|
+
const CRAM_FLAG_DETACHED: number;
|
|
5
|
+
const CRAM_FLAG_MATE_DOWNSTREAM: number;
|
|
6
|
+
const CRAM_FLAG_NO_SEQ: number;
|
|
7
|
+
const CRAM_FLAG_MASK: number;
|
|
8
|
+
const CRAM_M_REVERSE: number;
|
|
9
|
+
const CRAM_M_UNMAP: number;
|
|
10
|
+
const BAM_FPAIRED: number;
|
|
11
|
+
const BAM_FPROPER_PAIR: number;
|
|
12
|
+
const BAM_FUNMAP: number;
|
|
13
|
+
const BAM_FMUNMAP: number;
|
|
14
|
+
const BAM_FREVERSE: number;
|
|
15
|
+
const BAM_FMREVERSE: number;
|
|
16
|
+
const BAM_FREAD1: number;
|
|
17
|
+
const BAM_FREAD2: number;
|
|
18
|
+
const BAM_FSECONDARY: number;
|
|
19
|
+
const BAM_FQCFAIL: number;
|
|
20
|
+
const BAM_FDUP: number;
|
|
21
|
+
const BAM_FSUPPLEMENTARY: number;
|
|
22
|
+
const BAM_CMATCH: number;
|
|
23
|
+
const BAM_CINS: number;
|
|
24
|
+
const BAM_CDEL: number;
|
|
25
|
+
const BAM_CREF_SKIP: number;
|
|
26
|
+
const BAM_CSOFT_CLIP: number;
|
|
27
|
+
const BAM_CHARD_CLIP: number;
|
|
28
|
+
const BAM_CPAD: number;
|
|
29
|
+
const BAM_CEQUAL: number;
|
|
30
|
+
const BAM_CDIFF: number;
|
|
31
|
+
const BAM_CBACK: number;
|
|
32
|
+
const BAM_CIGAR_STR: string;
|
|
33
|
+
const BAM_CIGAR_SHIFT: number;
|
|
34
|
+
const BAM_CIGAR_MASK: number;
|
|
35
|
+
const BAM_CIGAR_TYPE: number;
|
|
36
|
+
}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
const Constants = {
|
|
2
|
+
CRAM_FLAG_PRESERVE_QUAL_SCORES: 1 << 0,
|
|
3
|
+
CRAM_FLAG_DETACHED: 1 << 1,
|
|
4
|
+
CRAM_FLAG_MATE_DOWNSTREAM: 1 << 2,
|
|
5
|
+
CRAM_FLAG_NO_SEQ: 1 << 3,
|
|
6
|
+
CRAM_FLAG_MASK: (1 << 4) - 1,
|
|
7
|
+
// mate read is reversed
|
|
8
|
+
CRAM_M_REVERSE: 1,
|
|
9
|
+
// mated read is unmapped
|
|
10
|
+
CRAM_M_UNMAP: 2,
|
|
11
|
+
// the read is paired in sequencing, no matter whether it is mapped in a pair
|
|
12
|
+
BAM_FPAIRED: 1,
|
|
13
|
+
// the read is mapped in a proper pair
|
|
14
|
+
BAM_FPROPER_PAIR: 2,
|
|
15
|
+
// the read itself is unmapped; conflictive with BAM_FPROPER_PAIR
|
|
16
|
+
BAM_FUNMAP: 4,
|
|
17
|
+
// the mate is unmapped
|
|
18
|
+
BAM_FMUNMAP: 8,
|
|
19
|
+
// the read is mapped to the reverse strand
|
|
20
|
+
BAM_FREVERSE: 16,
|
|
21
|
+
// the mate is mapped to the reverse strand
|
|
22
|
+
BAM_FMREVERSE: 32,
|
|
23
|
+
// this is read1
|
|
24
|
+
BAM_FREAD1: 64,
|
|
25
|
+
// this is read2
|
|
26
|
+
BAM_FREAD2: 128,
|
|
27
|
+
// not primary alignment
|
|
28
|
+
BAM_FSECONDARY: 256,
|
|
29
|
+
// QC failure
|
|
30
|
+
BAM_FQCFAIL: 512,
|
|
31
|
+
// optical or PCR duplicate
|
|
32
|
+
BAM_FDUP: 1024,
|
|
33
|
+
// supplementary alignment
|
|
34
|
+
BAM_FSUPPLEMENTARY: 2048,
|
|
35
|
+
BAM_CMATCH: 0,
|
|
36
|
+
BAM_CINS: 1,
|
|
37
|
+
BAM_CDEL: 2,
|
|
38
|
+
BAM_CREF_SKIP: 3,
|
|
39
|
+
BAM_CSOFT_CLIP: 4,
|
|
40
|
+
BAM_CHARD_CLIP: 5,
|
|
41
|
+
BAM_CPAD: 6,
|
|
42
|
+
BAM_CEQUAL: 7,
|
|
43
|
+
BAM_CDIFF: 8,
|
|
44
|
+
BAM_CBACK: 9,
|
|
45
|
+
BAM_CIGAR_STR: 'MIDNSHP:XB',
|
|
46
|
+
BAM_CIGAR_SHIFT: 4,
|
|
47
|
+
BAM_CIGAR_MASK: 0xf,
|
|
48
|
+
BAM_CIGAR_TYPE: 0x3c1a7,
|
|
49
|
+
};
|
|
50
|
+
export default Constants;
|
|
51
|
+
//# sourceMappingURL=constants.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"constants.js","sourceRoot":"","sources":["../../src/cramFile/constants.js"],"names":[],"mappings":"AAAA,MAAM,SAAS,GAAG;IAChB,8BAA8B,EAAE,CAAC,IAAI,CAAC;IACtC,kBAAkB,EAAE,CAAC,IAAI,CAAC;IAC1B,yBAAyB,EAAE,CAAC,IAAI,CAAC;IACjC,gBAAgB,EAAE,CAAC,IAAI,CAAC;IACxB,cAAc,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC;IAE5B,wBAAwB;IACxB,cAAc,EAAE,CAAC;IACjB,yBAAyB;IACzB,YAAY,EAAE,CAAC;IAEf,8EAA8E;IAC9E,WAAW,EAAE,CAAC;IACd,uCAAuC;IACvC,gBAAgB,EAAE,CAAC;IACnB,kEAAkE;IAClE,UAAU,EAAE,CAAC;IACb,wBAAwB;IACxB,WAAW,EAAE,CAAC;IACd,4CAA4C;IAC5C,YAAY,EAAE,EAAE;IAChB,4CAA4C;IAC5C,aAAa,EAAE,EAAE;IACjB,iBAAiB;IACjB,UAAU,EAAE,EAAE;IACd,iBAAiB;IACjB,UAAU,EAAE,GAAG;IACf,yBAAyB;IACzB,cAAc,EAAE,GAAG;IACnB,cAAc;IACd,WAAW,EAAE,GAAG;IAChB,4BAA4B;IAC5B,QAAQ,EAAE,IAAI;IACd,2BAA2B;IAC3B,kBAAkB,EAAE,IAAI;IAExB,UAAU,EAAE,CAAC;IACb,QAAQ,EAAE,CAAC;IACX,QAAQ,EAAE,CAAC;IACX,aAAa,EAAE,CAAC;IAChB,cAAc,EAAE,CAAC;IACjB,cAAc,EAAE,CAAC;IACjB,QAAQ,EAAE,CAAC;IACX,UAAU,EAAE,CAAC;IACb,SAAS,EAAE,CAAC;IACZ,SAAS,EAAE,CAAC;IAEZ,aAAa,EAAE,YAAY;IAC3B,eAAe,EAAE,CAAC;IAClB,cAAc,EAAE,GAAG;IACnB,cAAc,EAAE,OAAO;CACxB,CAAA;AAED,eAAe,SAAS,CAAA"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
export default class CramContainerCompressionScheme {
|
|
2
|
+
constructor(content: any);
|
|
3
|
+
readNamesIncluded: any;
|
|
4
|
+
APdelta: any;
|
|
5
|
+
referenceRequired: boolean;
|
|
6
|
+
tagIdsDictionary: any;
|
|
7
|
+
substitutionMatrix: any[];
|
|
8
|
+
dataSeriesCodecCache: {};
|
|
9
|
+
tagCodecCache: {};
|
|
10
|
+
/**
|
|
11
|
+
* @param {string} tagName three-character tag name
|
|
12
|
+
* @private
|
|
13
|
+
*/
|
|
14
|
+
private getCodecForTag;
|
|
15
|
+
/**
|
|
16
|
+
*
|
|
17
|
+
* @param {number} tagListId ID of the tag list to fetch from the tag dictionary
|
|
18
|
+
* @private
|
|
19
|
+
*/
|
|
20
|
+
private getTagNames;
|
|
21
|
+
getCodecForDataSeries(dataSeriesName: any): any;
|
|
22
|
+
toJSON(): {};
|
|
23
|
+
}
|
|
@@ -0,0 +1,123 @@
|
|
|
1
|
+
import { CramMalformedError } from '../../errors';
|
|
2
|
+
import { instantiateCodec } from '../codecs';
|
|
3
|
+
// the hardcoded data type to be decoded for each core
|
|
4
|
+
// data field
|
|
5
|
+
const dataSeriesTypes = {
|
|
6
|
+
BF: 'int',
|
|
7
|
+
CF: 'int',
|
|
8
|
+
RI: 'int',
|
|
9
|
+
RL: 'int',
|
|
10
|
+
AP: 'int',
|
|
11
|
+
RG: 'int',
|
|
12
|
+
MF: 'int',
|
|
13
|
+
NS: 'int',
|
|
14
|
+
NP: 'int',
|
|
15
|
+
TS: 'int',
|
|
16
|
+
NF: 'int',
|
|
17
|
+
TC: 'byte',
|
|
18
|
+
TN: 'int',
|
|
19
|
+
FN: 'int',
|
|
20
|
+
FC: 'byte',
|
|
21
|
+
FP: 'int',
|
|
22
|
+
BS: 'byte',
|
|
23
|
+
IN: 'byteArray',
|
|
24
|
+
SC: 'byteArray',
|
|
25
|
+
DL: 'int',
|
|
26
|
+
BA: 'byte',
|
|
27
|
+
BB: 'byteArray',
|
|
28
|
+
RS: 'int',
|
|
29
|
+
PD: 'int',
|
|
30
|
+
HC: 'int',
|
|
31
|
+
MQ: 'int',
|
|
32
|
+
RN: 'byteArray',
|
|
33
|
+
QS: 'byte',
|
|
34
|
+
QQ: 'byteArray',
|
|
35
|
+
TL: 'int',
|
|
36
|
+
TM: 'ignore',
|
|
37
|
+
TV: 'ignore',
|
|
38
|
+
};
|
|
39
|
+
function parseSubstitutionMatrix(byteArray) {
|
|
40
|
+
const matrix = new Array(5);
|
|
41
|
+
for (let i = 0; i < 5; i += 1) {
|
|
42
|
+
matrix[i] = new Array(4);
|
|
43
|
+
}
|
|
44
|
+
matrix[0][(byteArray[0] >> 6) & 3] = 'C';
|
|
45
|
+
matrix[0][(byteArray[0] >> 4) & 3] = 'G';
|
|
46
|
+
matrix[0][(byteArray[0] >> 2) & 3] = 'T';
|
|
47
|
+
matrix[0][(byteArray[0] >> 0) & 3] = 'N';
|
|
48
|
+
matrix[1][(byteArray[1] >> 6) & 3] = 'A';
|
|
49
|
+
matrix[1][(byteArray[1] >> 4) & 3] = 'G';
|
|
50
|
+
matrix[1][(byteArray[1] >> 2) & 3] = 'T';
|
|
51
|
+
matrix[1][(byteArray[1] >> 0) & 3] = 'N';
|
|
52
|
+
matrix[2][(byteArray[2] >> 6) & 3] = 'A';
|
|
53
|
+
matrix[2][(byteArray[2] >> 4) & 3] = 'C';
|
|
54
|
+
matrix[2][(byteArray[2] >> 2) & 3] = 'T';
|
|
55
|
+
matrix[2][(byteArray[2] >> 0) & 3] = 'N';
|
|
56
|
+
matrix[3][(byteArray[3] >> 6) & 3] = 'A';
|
|
57
|
+
matrix[3][(byteArray[3] >> 4) & 3] = 'C';
|
|
58
|
+
matrix[3][(byteArray[3] >> 2) & 3] = 'G';
|
|
59
|
+
matrix[3][(byteArray[3] >> 0) & 3] = 'N';
|
|
60
|
+
matrix[4][(byteArray[4] >> 6) & 3] = 'A';
|
|
61
|
+
matrix[4][(byteArray[4] >> 4) & 3] = 'C';
|
|
62
|
+
matrix[4][(byteArray[4] >> 2) & 3] = 'G';
|
|
63
|
+
matrix[4][(byteArray[4] >> 0) & 3] = 'T';
|
|
64
|
+
return matrix;
|
|
65
|
+
}
|
|
66
|
+
export default class CramContainerCompressionScheme {
|
|
67
|
+
constructor(content) {
|
|
68
|
+
Object.assign(this, content);
|
|
69
|
+
// interpret some of the preservation map tags for convenient use
|
|
70
|
+
this.readNamesIncluded = content.preservation.RN;
|
|
71
|
+
this.APdelta = content.preservation.AP;
|
|
72
|
+
this.referenceRequired = !!content.preservation.RR;
|
|
73
|
+
this.tagIdsDictionary = content.preservation.TD;
|
|
74
|
+
this.substitutionMatrix = parseSubstitutionMatrix(content.preservation.SM);
|
|
75
|
+
this.dataSeriesCodecCache = {};
|
|
76
|
+
this.tagCodecCache = {};
|
|
77
|
+
}
|
|
78
|
+
/**
|
|
79
|
+
* @param {string} tagName three-character tag name
|
|
80
|
+
* @private
|
|
81
|
+
*/
|
|
82
|
+
getCodecForTag(tagName) {
|
|
83
|
+
if (!this.tagCodecCache[tagName]) {
|
|
84
|
+
const encodingData = this.tagEncoding[tagName];
|
|
85
|
+
if (encodingData) {
|
|
86
|
+
this.tagCodecCache[tagName] = instantiateCodec(encodingData, 'byteArray');
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
return this.tagCodecCache[tagName];
|
|
90
|
+
}
|
|
91
|
+
/**
|
|
92
|
+
*
|
|
93
|
+
* @param {number} tagListId ID of the tag list to fetch from the tag dictionary
|
|
94
|
+
* @private
|
|
95
|
+
*/
|
|
96
|
+
getTagNames(tagListId) {
|
|
97
|
+
return this.tagIdsDictionary[tagListId];
|
|
98
|
+
}
|
|
99
|
+
getCodecForDataSeries(dataSeriesName) {
|
|
100
|
+
if (!this.dataSeriesCodecCache[dataSeriesName]) {
|
|
101
|
+
const encodingData = this.dataSeriesEncoding[dataSeriesName];
|
|
102
|
+
if (encodingData) {
|
|
103
|
+
const dataType = dataSeriesTypes[dataSeriesName];
|
|
104
|
+
if (!dataType) {
|
|
105
|
+
throw new CramMalformedError(`data series name ${dataSeriesName} not defined in file compression header`);
|
|
106
|
+
}
|
|
107
|
+
this.dataSeriesCodecCache[dataSeriesName] = instantiateCodec(encodingData, dataType);
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
return this.dataSeriesCodecCache[dataSeriesName];
|
|
111
|
+
}
|
|
112
|
+
toJSON() {
|
|
113
|
+
const data = {};
|
|
114
|
+
Object.keys(this).forEach(k => {
|
|
115
|
+
if (/Cache$/.test(k)) {
|
|
116
|
+
return;
|
|
117
|
+
}
|
|
118
|
+
data[k] = this[k];
|
|
119
|
+
});
|
|
120
|
+
return data;
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
//# sourceMappingURL=compressionScheme.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"compressionScheme.js","sourceRoot":"","sources":["../../../src/cramFile/container/compressionScheme.js"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAA;AACjD,OAAO,EAAE,gBAAgB,EAAE,MAAM,WAAW,CAAA;AAE5C,sDAAsD;AACtD,aAAa;AACb,MAAM,eAAe,GAAG;IACtB,EAAE,EAAE,KAAK;IACT,EAAE,EAAE,KAAK;IACT,EAAE,EAAE,KAAK;IACT,EAAE,EAAE,KAAK;IACT,EAAE,EAAE,KAAK;IACT,EAAE,EAAE,KAAK;IACT,EAAE,EAAE,KAAK;IACT,EAAE,EAAE,KAAK;IACT,EAAE,EAAE,KAAK;IACT,EAAE,EAAE,KAAK;IACT,EAAE,EAAE,KAAK;IACT,EAAE,EAAE,MAAM;IACV,EAAE,EAAE,KAAK;IACT,EAAE,EAAE,KAAK;IACT,EAAE,EAAE,MAAM;IACV,EAAE,EAAE,KAAK;IACT,EAAE,EAAE,MAAM;IACV,EAAE,EAAE,WAAW;IACf,EAAE,EAAE,WAAW;IACf,EAAE,EAAE,KAAK;IACT,EAAE,EAAE,MAAM;IACV,EAAE,EAAE,WAAW;IACf,EAAE,EAAE,KAAK;IACT,EAAE,EAAE,KAAK;IACT,EAAE,EAAE,KAAK;IACT,EAAE,EAAE,KAAK;IACT,EAAE,EAAE,WAAW;IACf,EAAE,EAAE,MAAM;IACV,EAAE,EAAE,WAAW;IACf,EAAE,EAAE,KAAK;IACT,EAAE,EAAE,QAAQ;IACZ,EAAE,EAAE,QAAQ;CACb,CAAA;AAED,SAAS,uBAAuB,CAAC,SAAS;IACxC,MAAM,MAAM,GAAG,IAAI,KAAK,CAAC,CAAC,CAAC,CAAA;IAC3B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE;QAC7B,MAAM,CAAC,CAAC,CAAC,GAAG,IAAI,KAAK,CAAC,CAAC,CAAC,CAAA;KACzB;IAED,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,GAAG,CAAA;IACxC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,GAAG,CAAA;IACxC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,GAAG,CAAA;IACxC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,GAAG,CAAA;IAExC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,GAAG,CAAA;IACxC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,GAAG,CAAA;IACxC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,GAAG,CAAA;IACxC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,GAAG,CAAA;IAExC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,GAAG,CAAA;IACxC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,GAAG,CAAA;IACxC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,GAAG,CAAA;IACxC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,GAAG,CAAA;IAExC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,GAAG,CAAA;IACxC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,GAAG,CAAA;IACxC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,GAAG,CAAA;IACxC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,GAAG,CAAA;IAExC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,GAAG,CAAA;IACxC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,GAAG,CAAA;IACxC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,GAAG,CAAA;IACxC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,GAAG,CAAA;IAExC,OAAO,MAAM,CAAA;AACf,CAAC;AAED,MAAM,CAAC,OAAO,OAAO,8BAA8B;IACjD,YAAY,OAAO;QACjB,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,CAAA;QAC5B,iEAAiE;QACjE,IAAI,CAAC,iBAAiB,GAAG,OAAO,CAAC,YAAY,CAAC,EAAE,CAAA;QAChD,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC,YAAY,CAAC,EAAE,CAAA;QACtC,IAAI,CAAC,iBAAiB,GAAG,CAAC,CAAC,OAAO,CAAC,YAAY,CAAC,EAAE,CAAA;QAClD,IAAI,CAAC,gBAAgB,GAAG,OAAO,CAAC,YAAY,CAAC,EAAE,CAAA;QAC/C,IAAI,CAAC,kBAAkB,GAAG,uBAAuB,CAAC,OAAO,CAAC,YAAY,CAAC,EAAE,CAAC,CAAA;QAE1E,IAAI,CAAC,oBAAoB,GAAG,EAAE,CAAA;QAC9B,IAAI,CAAC,aAAa,GAAG,EAAE,CAAA;IACzB,CAAC;IAED;;;OAGG;IACH,cAAc,CAAC,OAAO;QACpB,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,EAAE;YAChC,MAAM,YAAY,GAAG,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,CAAA;YAC9C,IAAI,YAAY,EAAE;gBAChB,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,GAAG,gBAAgB,CAC5C,YAAY,EACZ,WAAW,CACZ,CAAA;aACF;SACF;QACD,OAAO,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,CAAA;IACpC,CAAC;IAED;;;;OAIG;IACH,WAAW,CAAC,SAAS;QACnB,OAAO,IAAI,CAAC,gBAAgB,CAAC,SAAS,CAAC,CAAA;IACzC,CAAC;IAED,qBAAqB,CAAC,cAAc;QAClC,IAAI,CAAC,IAAI,CAAC,oBAAoB,CAAC,cAAc,CAAC,EAAE;YAC9C,MAAM,YAAY,GAAG,IAAI,CAAC,kBAAkB,CAAC,cAAc,CAAC,CAAA;YAC5D,IAAI,YAAY,EAAE;gBAChB,MAAM,QAAQ,GAAG,eAAe,CAAC,cAAc,CAAC,CAAA;gBAChD,IAAI,CAAC,QAAQ,EAAE;oBACb,MAAM,IAAI,kBAAkB,CAC1B,oBAAoB,cAAc,yCAAyC,CAC5E,CAAA;iBACF;gBACD,IAAI,CAAC,oBAAoB,CAAC,cAAc,CAAC,GAAG,gBAAgB,CAC1D,YAAY,EACZ,QAAQ,CACT,CAAA;aACF;SACF;QACD,OAAO,IAAI,CAAC,oBAAoB,CAAC,cAAc,CAAC,CAAA;IAClD,CAAC;IAED,MAAM;QACJ,MAAM,IAAI,GAAG,EAAE,CAAA;QACf,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE;YAC5B,IAAI,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE;gBACpB,OAAM;aACP;YACD,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,CAAA;QACnB,CAAC,CAAC,CAAA;QACF,OAAO,IAAI,CAAA;IACb,CAAC;CACF"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
export default class CramContainer {
|
|
2
|
+
constructor(cramFile: any, position: any);
|
|
3
|
+
file: any;
|
|
4
|
+
filePosition: any;
|
|
5
|
+
getHeader(): Promise<any>;
|
|
6
|
+
getCompressionHeaderBlock(): Promise<any>;
|
|
7
|
+
getFirstBlock(): Promise<any>;
|
|
8
|
+
getCompressionScheme(): Promise<CramContainerCompressionScheme | undefined>;
|
|
9
|
+
getSlice(slicePosition: any, sliceSize: any): CramSlice;
|
|
10
|
+
_readContainerHeader(position: any): Promise<any>;
|
|
11
|
+
}
|
|
12
|
+
import CramContainerCompressionScheme from "./compressionScheme";
|
|
13
|
+
import CramSlice from "../slice";
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
import { CramMalformedError } from '../../errors';
|
|
2
|
+
import { itf8Size, parseItem, tinyMemoize } from '../util';
|
|
3
|
+
import CramSlice from '../slice';
|
|
4
|
+
import CramContainerCompressionScheme from './compressionScheme';
|
|
5
|
+
export default class CramContainer {
|
|
6
|
+
constructor(cramFile, position) {
|
|
7
|
+
// cram file this container comes from
|
|
8
|
+
this.file = cramFile;
|
|
9
|
+
// position of this container in the file
|
|
10
|
+
this.filePosition = position;
|
|
11
|
+
// console.log(`container: ${this.filePosition}`)
|
|
12
|
+
}
|
|
13
|
+
// memoize
|
|
14
|
+
getHeader() {
|
|
15
|
+
return this._readContainerHeader(this.filePosition);
|
|
16
|
+
}
|
|
17
|
+
// memoize
|
|
18
|
+
async getCompressionHeaderBlock() {
|
|
19
|
+
const containerHeader = await this.getHeader();
|
|
20
|
+
// if there are no records in the container, there will be no compression header
|
|
21
|
+
if (!containerHeader.numRecords) {
|
|
22
|
+
return null;
|
|
23
|
+
}
|
|
24
|
+
const sectionParsers = await this.file.getSectionParsers();
|
|
25
|
+
const block = await this.getFirstBlock();
|
|
26
|
+
if (block.contentType !== 'COMPRESSION_HEADER') {
|
|
27
|
+
throw new CramMalformedError(`invalid content type ${block.contentType} in what is supposed to be the compression header block`);
|
|
28
|
+
}
|
|
29
|
+
const content = parseItem(block.content, sectionParsers.cramCompressionHeader.parser, 0, block.contentPosition);
|
|
30
|
+
block.content = content;
|
|
31
|
+
return block;
|
|
32
|
+
}
|
|
33
|
+
async getFirstBlock() {
|
|
34
|
+
const containerHeader = await this.getHeader();
|
|
35
|
+
return this.file.readBlock(containerHeader._endPosition);
|
|
36
|
+
}
|
|
37
|
+
// parses the compression header data into a CramContainerCompressionScheme object
|
|
38
|
+
// memoize
|
|
39
|
+
async getCompressionScheme() {
|
|
40
|
+
const header = await this.getCompressionHeaderBlock();
|
|
41
|
+
if (!header) {
|
|
42
|
+
return undefined;
|
|
43
|
+
}
|
|
44
|
+
return new CramContainerCompressionScheme(header.content);
|
|
45
|
+
}
|
|
46
|
+
getSlice(slicePosition, sliceSize) {
|
|
47
|
+
// note: slicePosition is relative to the end of the container header
|
|
48
|
+
// TODO: perhaps we should cache slices?
|
|
49
|
+
return new CramSlice(this, slicePosition, sliceSize);
|
|
50
|
+
}
|
|
51
|
+
async _readContainerHeader(position) {
|
|
52
|
+
const sectionParsers = await this.file.getSectionParsers();
|
|
53
|
+
const { cramContainerHeader1, cramContainerHeader2 } = sectionParsers;
|
|
54
|
+
const { size: fileSize } = await this.file.stat();
|
|
55
|
+
if (position >= fileSize) {
|
|
56
|
+
return undefined;
|
|
57
|
+
}
|
|
58
|
+
// parse the container header. do it in 2 pieces because you cannot tell
|
|
59
|
+
// how much to buffer until you read numLandmarks
|
|
60
|
+
const bytes1 = Buffer.allocUnsafe(cramContainerHeader1.maxLength);
|
|
61
|
+
await this.file.read(bytes1, 0, cramContainerHeader1.maxLength, position);
|
|
62
|
+
const header1 = parseItem(bytes1, cramContainerHeader1.parser);
|
|
63
|
+
const numLandmarksSize = itf8Size(header1.numLandmarks);
|
|
64
|
+
if (position + header1.length >= fileSize) {
|
|
65
|
+
console.warn(`${this.file}: container header at ${position} indicates that the container has length ${header1.length}, which extends beyond the length of the file. Skipping this container.`);
|
|
66
|
+
return undefined;
|
|
67
|
+
}
|
|
68
|
+
const bytes2 = Buffer.allocUnsafe(cramContainerHeader2.maxLength(header1.numLandmarks));
|
|
69
|
+
await this.file.read(bytes2, 0, cramContainerHeader2.maxLength(header1.numLandmarks), position + header1._size - numLandmarksSize);
|
|
70
|
+
const header2 = parseItem(bytes2, cramContainerHeader2.parser);
|
|
71
|
+
if (this.file.validateChecksums && header2.crc32 !== undefined) {
|
|
72
|
+
await this.file.checkCrc32(position, header1._size + header2._size - numLandmarksSize - 4, header2.crc32, `container header beginning at position ${position}`);
|
|
73
|
+
}
|
|
74
|
+
const completeHeader = Object.assign(header1, header2, {
|
|
75
|
+
_size: header1._size + header2._size - numLandmarksSize,
|
|
76
|
+
_endPosition: header1._size + header2._size - numLandmarksSize + position,
|
|
77
|
+
});
|
|
78
|
+
return completeHeader;
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
'getHeader getCompressionHeaderBlock getCompressionScheme'
|
|
82
|
+
.split(' ')
|
|
83
|
+
.forEach(method => tinyMemoize(CramContainer, method));
|
|
84
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/cramFile/container/index.js"],"names":[],"mappings":"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"}
|