@gmod/cram 3.0.7 → 4.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/craiIndex.js +70 -87
- package/dist/craiIndex.js.map +1 -1
- package/dist/cram-bundle.js +1 -1
- package/dist/cramFile/codecs/_base.d.ts +1 -1
- package/dist/cramFile/codecs/beta.d.ts +2 -2
- package/dist/cramFile/codecs/beta.js +1 -1
- package/dist/cramFile/codecs/beta.js.map +1 -1
- package/dist/cramFile/codecs/byteArrayLength.d.ts +2 -2
- package/dist/cramFile/codecs/byteArrayStop.d.ts +4 -4
- package/dist/cramFile/codecs/byteArrayStop.js +1 -1
- package/dist/cramFile/codecs/byteArrayStop.js.map +1 -1
- package/dist/cramFile/codecs/external.d.ts +1 -1
- package/dist/cramFile/codecs/external.js +1 -1
- package/dist/cramFile/codecs/external.js.map +1 -1
- package/dist/cramFile/codecs/gamma.d.ts +1 -1
- package/dist/cramFile/codecs/gamma.js +1 -1
- package/dist/cramFile/codecs/gamma.js.map +1 -1
- package/dist/cramFile/codecs/getBits.d.ts +1 -1
- package/dist/cramFile/codecs/getBits.js.map +1 -1
- package/dist/cramFile/codecs/huffman.d.ts +1 -1
- package/dist/cramFile/codecs/huffman.js +1 -1
- package/dist/cramFile/codecs/huffman.js.map +1 -1
- package/dist/cramFile/codecs/index.d.ts +1 -1
- package/dist/cramFile/codecs/index.js +5 -5
- package/dist/cramFile/codecs/index.js.map +1 -1
- package/dist/cramFile/codecs/subexp.d.ts +2 -2
- package/dist/cramFile/codecs/subexp.js +1 -1
- package/dist/cramFile/codecs/subexp.js.map +1 -1
- package/dist/cramFile/container/compressionScheme.d.ts +2 -2
- package/dist/cramFile/container/compressionScheme.js +1 -1
- package/dist/cramFile/container/compressionScheme.js.map +1 -1
- package/dist/cramFile/container/index.d.ts +1 -2
- package/dist/cramFile/container/index.js +62 -79
- package/dist/cramFile/container/index.js.map +1 -1
- package/dist/cramFile/file.d.ts +9 -13
- package/dist/cramFile/file.js +218 -247
- package/dist/cramFile/file.js.map +1 -1
- package/dist/cramFile/record.js +2 -2
- package/dist/cramFile/record.js.map +1 -1
- package/dist/cramFile/sectionParsers.d.ts +16 -16
- package/dist/cramFile/sectionParsers.js +12 -9
- package/dist/cramFile/sectionParsers.js.map +1 -1
- package/dist/cramFile/slice/decodeRecord.d.ts +3 -3
- package/dist/cramFile/slice/decodeRecord.js +11 -11
- package/dist/cramFile/slice/decodeRecord.js.map +1 -1
- package/dist/cramFile/slice/index.d.ts +2 -2
- package/dist/cramFile/slice/index.js +241 -262
- package/dist/cramFile/slice/index.js.map +1 -1
- package/dist/cramFile/util.d.ts +4 -2
- package/dist/cramFile/util.js +29 -6
- package/dist/cramFile/util.js.map +1 -1
- package/dist/htscodecs/arith_gen.d.ts +9 -17
- package/dist/htscodecs/arith_gen.js +32 -272
- package/dist/htscodecs/arith_gen.js.map +1 -1
- package/dist/htscodecs/fqzcomp.d.ts +1 -2
- package/dist/htscodecs/fqzcomp.js +2 -421
- package/dist/htscodecs/fqzcomp.js.map +1 -1
- package/dist/htscodecs/index.d.ts +5 -5
- package/dist/htscodecs/index.js +10 -10
- package/dist/htscodecs/index.js.map +1 -1
- package/dist/htscodecs/iostream.d.ts +2 -1
- package/dist/htscodecs/iostream.js +3 -2
- package/dist/htscodecs/iostream.js.map +1 -1
- package/dist/htscodecs/rans.d.ts +1 -2
- package/dist/htscodecs/rans.js +3 -270
- package/dist/htscodecs/rans.js.map +1 -1
- package/dist/htscodecs/rans4x16.d.ts +0 -1
- package/dist/htscodecs/rans4x16.js +6 -497
- package/dist/htscodecs/rans4x16.js.map +1 -1
- package/dist/htscodecs/tok3.js +17 -1
- package/dist/htscodecs/tok3.js.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.js +2 -2
- package/dist/index.js.map +1 -1
- package/dist/indexedCramFile.d.ts +4 -4
- package/dist/indexedCramFile.js +97 -108
- package/dist/indexedCramFile.js.map +1 -1
- package/dist/io/index.d.ts +2 -2
- package/dist/io/index.js +6 -6
- package/dist/io/index.js.map +1 -1
- package/dist/rans/constants.d.ts +1 -1
- package/dist/rans/constants.js +1 -1
- package/dist/rans/constants.js.map +1 -1
- package/dist/rans/d04.js.map +1 -1
- package/dist/rans/decoding.js.map +1 -1
- package/dist/rans/frequencies.js.map +1 -1
- package/dist/rans/index.js +5 -5
- package/dist/rans/index.js.map +1 -1
- package/dist/unzip.d.ts +1 -1
- package/dist/unzip.js +5 -3
- package/dist/unzip.js.map +1 -1
- package/esm/craiIndex.js +10 -12
- package/esm/craiIndex.js.map +1 -1
- package/esm/cramFile/codecs/_base.d.ts +1 -1
- package/esm/cramFile/codecs/beta.d.ts +2 -2
- package/esm/cramFile/codecs/beta.js +1 -1
- package/esm/cramFile/codecs/beta.js.map +1 -1
- package/esm/cramFile/codecs/byteArrayLength.d.ts +2 -2
- package/esm/cramFile/codecs/byteArrayStop.d.ts +4 -4
- package/esm/cramFile/codecs/byteArrayStop.js +1 -1
- package/esm/cramFile/codecs/byteArrayStop.js.map +1 -1
- package/esm/cramFile/codecs/external.d.ts +1 -1
- package/esm/cramFile/codecs/external.js +1 -1
- package/esm/cramFile/codecs/external.js.map +1 -1
- package/esm/cramFile/codecs/gamma.d.ts +1 -1
- package/esm/cramFile/codecs/gamma.js +1 -1
- package/esm/cramFile/codecs/gamma.js.map +1 -1
- package/esm/cramFile/codecs/getBits.d.ts +1 -1
- package/esm/cramFile/codecs/getBits.js.map +1 -1
- package/esm/cramFile/codecs/huffman.d.ts +1 -1
- package/esm/cramFile/codecs/huffman.js +1 -1
- package/esm/cramFile/codecs/huffman.js.map +1 -1
- package/esm/cramFile/codecs/index.d.ts +1 -1
- package/esm/cramFile/codecs/index.js +5 -5
- package/esm/cramFile/codecs/index.js.map +1 -1
- package/esm/cramFile/codecs/subexp.d.ts +2 -2
- package/esm/cramFile/codecs/subexp.js +1 -1
- package/esm/cramFile/codecs/subexp.js.map +1 -1
- package/esm/cramFile/container/compressionScheme.d.ts +2 -2
- package/esm/cramFile/container/compressionScheme.js +1 -1
- package/esm/cramFile/container/compressionScheme.js.map +1 -1
- package/esm/cramFile/container/index.d.ts +1 -2
- package/esm/cramFile/container/index.js +4 -7
- package/esm/cramFile/container/index.js.map +1 -1
- package/esm/cramFile/file.d.ts +9 -13
- package/esm/cramFile/file.js +47 -52
- package/esm/cramFile/file.js.map +1 -1
- package/esm/cramFile/record.js +2 -2
- package/esm/cramFile/record.js.map +1 -1
- package/esm/cramFile/sectionParsers.d.ts +16 -16
- package/esm/cramFile/sectionParsers.js +7 -7
- package/esm/cramFile/sectionParsers.js.map +1 -1
- package/esm/cramFile/slice/decodeRecord.d.ts +3 -3
- package/esm/cramFile/slice/decodeRecord.js +11 -11
- package/esm/cramFile/slice/decodeRecord.js.map +1 -1
- package/esm/cramFile/slice/index.d.ts +2 -2
- package/esm/cramFile/slice/index.js +7 -6
- package/esm/cramFile/slice/index.js.map +1 -1
- package/esm/cramFile/util.d.ts +4 -2
- package/esm/cramFile/util.js +19 -2
- package/esm/cramFile/util.js.map +1 -1
- package/esm/htscodecs/arith_gen.d.ts +9 -17
- package/esm/htscodecs/arith_gen.js +32 -272
- package/esm/htscodecs/arith_gen.js.map +1 -1
- package/esm/htscodecs/fqzcomp.d.ts +1 -2
- package/esm/htscodecs/fqzcomp.js +2 -421
- package/esm/htscodecs/fqzcomp.js.map +1 -1
- package/esm/htscodecs/index.d.ts +5 -5
- package/esm/htscodecs/index.js +10 -10
- package/esm/htscodecs/index.js.map +1 -1
- package/esm/htscodecs/iostream.d.ts +2 -1
- package/esm/htscodecs/iostream.js +3 -2
- package/esm/htscodecs/iostream.js.map +1 -1
- package/esm/htscodecs/rans.d.ts +1 -2
- package/esm/htscodecs/rans.js +3 -270
- package/esm/htscodecs/rans.js.map +1 -1
- package/esm/htscodecs/rans4x16.d.ts +0 -1
- package/esm/htscodecs/rans4x16.js +6 -497
- package/esm/htscodecs/rans4x16.js.map +1 -1
- package/esm/htscodecs/tok3.js +17 -1
- package/esm/htscodecs/tok3.js.map +1 -1
- package/esm/index.d.ts +1 -1
- package/esm/index.js +1 -1
- package/esm/index.js.map +1 -1
- package/esm/indexedCramFile.d.ts +4 -4
- package/esm/indexedCramFile.js +10 -10
- package/esm/indexedCramFile.js.map +1 -1
- package/esm/io/index.d.ts +2 -2
- package/esm/io/index.js +1 -1
- package/esm/io/index.js.map +1 -1
- package/esm/rans/constants.d.ts +1 -1
- package/esm/rans/constants.js +1 -1
- package/esm/rans/constants.js.map +1 -1
- package/esm/rans/d04.js.map +1 -1
- package/esm/rans/decoding.js.map +1 -1
- package/esm/rans/frequencies.js.map +1 -1
- package/esm/rans/index.js +5 -5
- package/esm/rans/index.js.map +1 -1
- package/esm/unzip.d.ts +1 -1
- package/esm/unzip.js +4 -1
- package/esm/unzip.js.map +1 -1
- package/package.json +7 -9
- package/src/craiIndex.ts +17 -16
- package/src/cramFile/codecs/_base.ts +1 -1
- package/src/cramFile/codecs/beta.ts +3 -3
- package/src/cramFile/codecs/byteArrayLength.ts +1 -1
- package/src/cramFile/codecs/byteArrayStop.ts +3 -4
- package/src/cramFile/codecs/external.ts +3 -3
- package/src/cramFile/codecs/gamma.ts +2 -2
- package/src/cramFile/codecs/getBits.ts +1 -1
- package/src/cramFile/codecs/huffman.ts +2 -3
- package/src/cramFile/codecs/index.ts +7 -8
- package/src/cramFile/codecs/subexp.ts +3 -3
- package/src/cramFile/container/compressionScheme.ts +3 -3
- package/src/cramFile/container/index.ts +7 -10
- package/src/cramFile/file.ts +71 -77
- package/src/cramFile/record.ts +3 -3
- package/src/cramFile/sectionParsers.ts +27 -22
- package/src/cramFile/slice/decodeRecord.ts +17 -17
- package/src/cramFile/slice/index.ts +8 -9
- package/src/cramFile/util.ts +24 -5
- package/src/htscodecs/arith_gen.js +33 -296
- package/src/htscodecs/fqzcomp.js +2 -476
- package/src/htscodecs/index.js +9 -11
- package/src/htscodecs/iostream.js +3 -2
- package/src/htscodecs/rans.js +3 -315
- package/src/htscodecs/rans4x16.js +6 -557
- package/src/htscodecs/tok3.js +18 -1
- package/src/index.ts +1 -1
- package/src/indexedCramFile.ts +6 -5
- package/src/io/index.ts +5 -4
- package/src/rans/constants.ts +1 -1
- package/src/rans/d04.ts +0 -1
- package/src/rans/decoding.ts +0 -1
- package/src/rans/frequencies.ts +0 -1
- package/src/rans/index.ts +5 -7
- package/src/unzip.ts +5 -1
- package/dist/cramFile/filehandle.d.ts +0 -1
- package/dist/cramFile/filehandle.js +0 -3
- package/dist/cramFile/filehandle.js.map +0 -1
- package/dist/htscodecs/main_arith_gen.d.ts +0 -1
- package/dist/htscodecs/main_arith_gen.js +0 -86
- package/dist/htscodecs/main_arith_gen.js.map +0 -1
- package/dist/htscodecs/main_fqzcomp.d.ts +0 -1
- package/dist/htscodecs/main_fqzcomp.js +0 -112
- package/dist/htscodecs/main_fqzcomp.js.map +0 -1
- package/dist/htscodecs/main_rans.d.ts +0 -1
- package/dist/htscodecs/main_rans.js +0 -83
- package/dist/htscodecs/main_rans.js.map +0 -1
- package/dist/htscodecs/main_rans4x16.d.ts +0 -1
- package/dist/htscodecs/main_rans4x16.js +0 -82
- package/dist/htscodecs/main_rans4x16.js.map +0 -1
- package/dist/htscodecs/main_tok3.d.ts +0 -1
- package/dist/htscodecs/main_tok3.js +0 -84
- package/dist/htscodecs/main_tok3.js.map +0 -1
- package/dist/unzip-pako.d.ts +0 -2
- package/dist/unzip-pako.js +0 -9
- package/dist/unzip-pako.js.map +0 -1
- package/esm/cramFile/filehandle.d.ts +0 -1
- package/esm/cramFile/filehandle.js +0 -2
- package/esm/cramFile/filehandle.js.map +0 -1
- package/esm/htscodecs/main_arith_gen.d.ts +0 -1
- package/esm/htscodecs/main_arith_gen.js +0 -86
- package/esm/htscodecs/main_arith_gen.js.map +0 -1
- package/esm/htscodecs/main_fqzcomp.d.ts +0 -1
- package/esm/htscodecs/main_fqzcomp.js +0 -112
- package/esm/htscodecs/main_fqzcomp.js.map +0 -1
- package/esm/htscodecs/main_rans.d.ts +0 -1
- package/esm/htscodecs/main_rans.js +0 -83
- package/esm/htscodecs/main_rans.js.map +0 -1
- package/esm/htscodecs/main_rans4x16.d.ts +0 -1
- package/esm/htscodecs/main_rans4x16.js +0 -82
- package/esm/htscodecs/main_rans4x16.js.map +0 -1
- package/esm/htscodecs/main_tok3.d.ts +0 -1
- package/esm/htscodecs/main_tok3.js +0 -84
- package/esm/htscodecs/main_tok3.js.map +0 -1
- package/esm/unzip-pako.d.ts +0 -2
- package/esm/unzip-pako.js +0 -6
- package/esm/unzip-pako.js.map +0 -1
- package/src/cramFile/filehandle.ts +0 -1
- package/src/htscodecs/Makefile +0 -142
- package/src/htscodecs/README.md +0 -64
- package/src/htscodecs/main_arith_gen.js +0 -96
- package/src/htscodecs/main_fqzcomp.js +0 -113
- package/src/htscodecs/main_rans.js +0 -88
- package/src/htscodecs/main_rans4x16.js +0 -87
- package/src/htscodecs/main_tok3.js +0 -86
- package/src/unzip-pako.ts +0 -6
package/src/htscodecs/fqzcomp.js
CHANGED
|
@@ -277,7 +277,7 @@ function decode_fqz(src, q_lens) {
|
|
|
277
277
|
// Create our entropy encoder and output buffers
|
|
278
278
|
var rc = new RangeCoder(src)
|
|
279
279
|
rc.RangeStartDecode(src)
|
|
280
|
-
var output = new
|
|
280
|
+
var output = new Uint8Array(n_out)
|
|
281
281
|
|
|
282
282
|
// Internal FQZ state
|
|
283
283
|
var state = {
|
|
@@ -357,478 +357,4 @@ function decode(src, q_lens) {
|
|
|
357
357
|
return decode_fqz(stream, q_lens)
|
|
358
358
|
}
|
|
359
359
|
|
|
360
|
-
|
|
361
|
-
// FQZComp encoder.
|
|
362
|
-
|
|
363
|
-
function pick_fqz_params(src, q_lens, q_dirs, qhist) {
|
|
364
|
-
// Find cardinality of q_dirs
|
|
365
|
-
var qd_last = q_dirs[0]
|
|
366
|
-
for (var i = 0; i < q_dirs.length; i++) if (q_dirs[i] != qd_last) break
|
|
367
|
-
var qd_fixed = i == q_dirs.length ? 1 : 0
|
|
368
|
-
|
|
369
|
-
// Scan input to find number of symbols and max symbol
|
|
370
|
-
var nsym = 0
|
|
371
|
-
var max_sym = 0
|
|
372
|
-
|
|
373
|
-
// selector == 0: Assume one single input dataset
|
|
374
|
-
for (var i = 0; i < 256; i++) qhist[0][i] = 0
|
|
375
|
-
|
|
376
|
-
var rec = 0
|
|
377
|
-
var len = 0
|
|
378
|
-
for (var i = 0; i < src.length; i++) {
|
|
379
|
-
if (len == 0) {
|
|
380
|
-
len = q_lens[rec < q_lens.length - 1 ? rec++ : rec]
|
|
381
|
-
}
|
|
382
|
-
qhist[0][src[i]]++
|
|
383
|
-
len--
|
|
384
|
-
}
|
|
385
|
-
for (var i = 0; i < 256; i++) {
|
|
386
|
-
if (!qhist[0][i]) continue
|
|
387
|
-
if (max_sym < i) max_sym = i
|
|
388
|
-
nsym++
|
|
389
|
-
}
|
|
390
|
-
|
|
391
|
-
var qshift = 5
|
|
392
|
-
var do_qmap = 0
|
|
393
|
-
// Reduced symbol frequencies implies lower qshift and
|
|
394
|
-
// a lookup table to go from qual to Q
|
|
395
|
-
if (nsym <= 16) {
|
|
396
|
-
do_qmap = 1 // based on qhist
|
|
397
|
-
if (nsym <= 2) qshift = 1
|
|
398
|
-
else if (nsym <= 4) qshift = 2
|
|
399
|
-
else if (nsym <= 8) qshift = 3
|
|
400
|
-
else qshift = 4
|
|
401
|
-
}
|
|
402
|
-
|
|
403
|
-
// // Two params and a 1-bit selector.
|
|
404
|
-
// // This is 1% overhead vs two data sets compressed independently.
|
|
405
|
-
// // It's 6.9% smaller than compressing both together with 1 param.
|
|
406
|
-
// if (0) return [{
|
|
407
|
-
// // q4
|
|
408
|
-
// qbits: 8,
|
|
409
|
-
// qshift: 2,
|
|
410
|
-
// qloc: 7,
|
|
411
|
-
//
|
|
412
|
-
// pbits: 7,
|
|
413
|
-
// pshift: 1,
|
|
414
|
-
// ploc: 0,
|
|
415
|
-
//
|
|
416
|
-
// dbits: 0,
|
|
417
|
-
// dshift: 0,
|
|
418
|
-
// dloc: 0,
|
|
419
|
-
//
|
|
420
|
-
// sbits: 0,
|
|
421
|
-
// sloc: 0,
|
|
422
|
-
//
|
|
423
|
-
// //sbits: 2,
|
|
424
|
-
// //do_stab: 1,
|
|
425
|
-
// sbits: 1,
|
|
426
|
-
// do_stab: 0,
|
|
427
|
-
// context: (0<<15),
|
|
428
|
-
//
|
|
429
|
-
// max_sym: 36,
|
|
430
|
-
// nsym: 4,
|
|
431
|
-
//
|
|
432
|
-
// do_qmap: 1,
|
|
433
|
-
// do_dedup: 0,
|
|
434
|
-
// fixed_len: 1,
|
|
435
|
-
// do_sel: 0,
|
|
436
|
-
// do_rev: 0,
|
|
437
|
-
// do_pos: 1,
|
|
438
|
-
// do_delta: 0,
|
|
439
|
-
// do_qtab: 0
|
|
440
|
-
// }, {
|
|
441
|
-
// //q40
|
|
442
|
-
// qbits: 9,
|
|
443
|
-
// qshift: 5,
|
|
444
|
-
// qloc: 7,
|
|
445
|
-
//
|
|
446
|
-
// pbits: 7,
|
|
447
|
-
// pshift: 0,
|
|
448
|
-
// ploc: 0,
|
|
449
|
-
//
|
|
450
|
-
// dbits: 0,
|
|
451
|
-
// dshift: 0,
|
|
452
|
-
// dloc: 0,
|
|
453
|
-
//
|
|
454
|
-
// sbits: 0,
|
|
455
|
-
// sloc: 0,
|
|
456
|
-
//
|
|
457
|
-
// //sbits: 2,
|
|
458
|
-
// //do_stab: 1,
|
|
459
|
-
// sbits: 1,
|
|
460
|
-
// do_stab: 0,
|
|
461
|
-
// context: (1<<15),
|
|
462
|
-
//
|
|
463
|
-
// max_sym: 44,
|
|
464
|
-
// nsym: 45,
|
|
465
|
-
//
|
|
466
|
-
// do_qmap: 0,
|
|
467
|
-
// do_dedup: 0,
|
|
468
|
-
// fixed_len: 1,
|
|
469
|
-
// do_sel: 0,
|
|
470
|
-
// do_rev: 0,
|
|
471
|
-
// do_pos: 1,
|
|
472
|
-
// do_delta: 0,
|
|
473
|
-
// do_qtab: 0
|
|
474
|
-
// }]
|
|
475
|
-
|
|
476
|
-
return [
|
|
477
|
-
{
|
|
478
|
-
qbits: 8 + (qshift > 4),
|
|
479
|
-
qshift: qshift,
|
|
480
|
-
qloc: 7,
|
|
481
|
-
|
|
482
|
-
pbits: 7,
|
|
483
|
-
pshift: q_lens[0] > 128 ? 1 : 0,
|
|
484
|
-
ploc: 0,
|
|
485
|
-
|
|
486
|
-
dbits: qshift > 4 ? 0 : 1,
|
|
487
|
-
dshift: 3,
|
|
488
|
-
dloc: 15,
|
|
489
|
-
|
|
490
|
-
// NB: Also useful as a way of embedding sel and doing sel
|
|
491
|
-
// specific contexts. Identical bar context. Eg 0<<15 or 1<<15.
|
|
492
|
-
sbits: 0,
|
|
493
|
-
sloc: 15,
|
|
494
|
-
do_stab: 0,
|
|
495
|
-
context: 0 << 15,
|
|
496
|
-
|
|
497
|
-
max_sym: max_sym,
|
|
498
|
-
nsym: nsym,
|
|
499
|
-
|
|
500
|
-
do_qmap: do_qmap,
|
|
501
|
-
do_dedup: 0,
|
|
502
|
-
fixed_len: q_lens.length == 1 ? 1 : 0,
|
|
503
|
-
do_sel: 0,
|
|
504
|
-
do_rev: 0,
|
|
505
|
-
do_pos: 1,
|
|
506
|
-
do_delta: qshift <= 4 ? 1 : 0,
|
|
507
|
-
do_qtab: 0,
|
|
508
|
-
|
|
509
|
-
// Override above with some attempt at using selectors
|
|
510
|
-
// when the q_dirs are specific and non-fixed.
|
|
511
|
-
qbits: 8 + (qshift > 4) - (qd_fixed == 0),
|
|
512
|
-
sbits: 1,
|
|
513
|
-
sloc: 15 - (qshift <= 4), // read1 vs read2
|
|
514
|
-
do_stab: 1,
|
|
515
|
-
do_sel: 1,
|
|
516
|
-
|
|
517
|
-
// // q4+dir: 7245769 with, 7353962 without. 1.5% saving
|
|
518
|
-
// qbits: 6,
|
|
519
|
-
// dbits: 2,
|
|
520
|
-
// dshift: 2,
|
|
521
|
-
// dloc: 13,
|
|
522
|
-
// sbits: 1,
|
|
523
|
-
// sloc: 15,
|
|
524
|
-
// do_stab: 1,
|
|
525
|
-
// do_sel: 1,
|
|
526
|
-
|
|
527
|
-
// with 20 bits of context, q40 = 31741545
|
|
528
|
-
// qbits 10, dbits 2, pbits 7, sbits 1
|
|
529
|
-
},
|
|
530
|
-
]
|
|
531
|
-
}
|
|
532
|
-
|
|
533
|
-
function store_array(out, tab, size) {
|
|
534
|
-
var i = 0 // index into tab
|
|
535
|
-
var j = 0 // current value in tab[i]
|
|
536
|
-
|
|
537
|
-
var tmp1 = new Array(size * 2)
|
|
538
|
-
var sz1 = 0
|
|
539
|
-
|
|
540
|
-
// First level of RLE. Replace all runs of 'j' values
|
|
541
|
-
// with run-lengths, including zeros for missing values.
|
|
542
|
-
// Eg 0 1 2 2 2 3 3 3 4 4 4 5 5 5 5 7 7
|
|
543
|
-
// to 1 1 3 3 3 4 0 2
|
|
544
|
-
while (i < size) {
|
|
545
|
-
// Length of j^{th} element
|
|
546
|
-
var i_start = i
|
|
547
|
-
while (i < size && tab[i] == j) i++
|
|
548
|
-
var run_len = i - i_start
|
|
549
|
-
|
|
550
|
-
// Encode run length to tmp array
|
|
551
|
-
do {
|
|
552
|
-
var r = Math.min(255, run_len)
|
|
553
|
-
tmp1[sz1++] = r
|
|
554
|
-
run_len -= r
|
|
555
|
-
} while (r == 255)
|
|
556
|
-
j++
|
|
557
|
-
}
|
|
558
|
-
|
|
559
|
-
// Second round of RLE on our tmp array, using a different
|
|
560
|
-
// RLE algorithm.
|
|
561
|
-
// Eg 1 1 3 3 3 4 0 2
|
|
562
|
-
// to 1 1 +0 3 3 +1 4 0 2
|
|
563
|
-
var last = -1
|
|
564
|
-
var tmp2 = new Array(size * 2)
|
|
565
|
-
var sz2 = 0
|
|
566
|
-
i = 0 // index into tmp1]
|
|
567
|
-
// k is used size of tmp1[]
|
|
568
|
-
while (i < sz1) {
|
|
569
|
-
var curr = tmp1[i++]
|
|
570
|
-
tmp2[sz2++] = curr
|
|
571
|
-
if (curr == last) {
|
|
572
|
-
var i_start = i
|
|
573
|
-
while (i < sz1 && tmp1[i] == last && i - i_start < 255) i++
|
|
574
|
-
tmp2[sz2++] = i - i_start
|
|
575
|
-
} else {
|
|
576
|
-
last = curr
|
|
577
|
-
}
|
|
578
|
-
}
|
|
579
|
-
|
|
580
|
-
// Append 2nd RLE, tmp2, to out.
|
|
581
|
-
out.WriteData(tmp2, sz2)
|
|
582
|
-
}
|
|
583
|
-
|
|
584
|
-
// q_lens is an array of quality lengths per record.
|
|
585
|
-
// (If they're all the same, just set one value.)
|
|
586
|
-
function encode_fqz_params(out, params, qhist, qtab, ptab, dtab, stab) {
|
|
587
|
-
var dsqr = [
|
|
588
|
-
0, 1, 1, 1, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4, 4, 4, 4,
|
|
589
|
-
5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 7,
|
|
590
|
-
7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
|
|
591
|
-
]
|
|
592
|
-
|
|
593
|
-
for (var i = 0; i < params.length; i++) stab[i] = i // 1 parameter set per selector value
|
|
594
|
-
for (; i < 256; i++) stab[i] = params.length - 1
|
|
595
|
-
|
|
596
|
-
// Store global meta-data
|
|
597
|
-
out.WriteByte(5) // FQZ format number
|
|
598
|
-
var gflags =
|
|
599
|
-
(params.length > 1 ? GFLAG_MULTI_PARAM : 0) |
|
|
600
|
-
(params[0].do_stab ? GFLAG_HAVE_STAB : 0)
|
|
601
|
-
out.WriteByte(gflags)
|
|
602
|
-
|
|
603
|
-
if (gflags & GFLAG_MULTI_PARAM) out.WriteByte(params.length) // Number of parameter blocks.
|
|
604
|
-
|
|
605
|
-
if (gflags & GFLAG_HAVE_STAB) {
|
|
606
|
-
var max_sel = 1 << params[0].sbits
|
|
607
|
-
if (max_sel > 0) max_sel--
|
|
608
|
-
out.WriteByte(max_sel)
|
|
609
|
-
store_array(out, stab, 256)
|
|
610
|
-
}
|
|
611
|
-
|
|
612
|
-
// Store per-param meta-data
|
|
613
|
-
for (var p = 0; p < params.length; p++) {
|
|
614
|
-
out.WriteUint16(params[p].context)
|
|
615
|
-
out.WriteByte(
|
|
616
|
-
(params[p].do_qtab ? FLAG_QTAB : 0) | // FLAG
|
|
617
|
-
(params[p].do_delta ? FLAG_DTAB : 0) |
|
|
618
|
-
(params[p].do_pos ? FLAG_PTAB : 0) |
|
|
619
|
-
(params[p].do_qmap ? FLAG_QMAP : 0) |
|
|
620
|
-
(params[p].do_sel ? FLAG_SEL : 0) |
|
|
621
|
-
(params[p].fixed_len ? FLAG_FLEN : 0) |
|
|
622
|
-
(params[p].do_dedup ? FLAG_DEDUP : 0),
|
|
623
|
-
)
|
|
624
|
-
if (params[p].do_qmap) out.WriteByte(params[p].nsym)
|
|
625
|
-
else out.WriteByte(params[p].max_sym)
|
|
626
|
-
out.WriteByte((params[p].qbits << 4) | params[p].qshift)
|
|
627
|
-
out.WriteByte((params[p].qloc << 4) | params[p].sloc)
|
|
628
|
-
out.WriteByte((params[p].ploc << 4) | params[p].dloc)
|
|
629
|
-
|
|
630
|
-
if (params[p].do_qmap) {
|
|
631
|
-
params[p].max_sym = params[p].nsym
|
|
632
|
-
var n = 0
|
|
633
|
-
for (var i = 0; i < 256; i++) {
|
|
634
|
-
if (qhist[p][i]) {
|
|
635
|
-
out.WriteByte(i)
|
|
636
|
-
qhist[p][i] = n++
|
|
637
|
-
}
|
|
638
|
-
}
|
|
639
|
-
// Ensure we have all matched input params
|
|
640
|
-
for (; n < params[p].nsym; n++) out.WriteByte(0)
|
|
641
|
-
} else {
|
|
642
|
-
//params[p].nsym = 255;
|
|
643
|
-
for (var i = 0; i < 256; i++) qhist[p][i] = i // NOP
|
|
644
|
-
}
|
|
645
|
-
|
|
646
|
-
if (params[p].qbits > 0) {
|
|
647
|
-
// // Eg map 0-44 to a smaller range, to improve context usage.
|
|
648
|
-
// // Makes q40 test set go from 33596471 to 33450075 (-0.4%)
|
|
649
|
-
// params[p].do_qtab = 1;
|
|
650
|
-
// for (var j = i = 0; i < params[p].max_sym; i++) {
|
|
651
|
-
// qtab[i]=j;
|
|
652
|
-
// if ((i%3)!=0 | i >= 28) j++
|
|
653
|
-
// console.log("qtab[",i,"]=",qtab[i]);
|
|
654
|
-
// }
|
|
655
|
-
// for (; i < 256; i++)
|
|
656
|
-
// qtab[i] = qtab[params[p].max_sym-1]
|
|
657
|
-
|
|
658
|
-
for (var i = 0; i < 256; i++) qtab[p][i] = i // NOP for now
|
|
659
|
-
|
|
660
|
-
if (params[p].do_qtab) store_array(out, qtab[p], 256)
|
|
661
|
-
}
|
|
662
|
-
|
|
663
|
-
if (params[p].pbits > 0) {
|
|
664
|
-
for (var i = 0; i < 1024; i++)
|
|
665
|
-
ptab[p][i] = Math.min((1 << params[p].pbits) - 1, i >> params[p].pshift)
|
|
666
|
-
|
|
667
|
-
store_array(out, ptab[p], 1024)
|
|
668
|
-
}
|
|
669
|
-
|
|
670
|
-
if (params[p].dbits > 0) {
|
|
671
|
-
for (var i = 0; i < 256; i++)
|
|
672
|
-
if (dsqr[i] > (1 << params[p].dbits) - 1)
|
|
673
|
-
dsqr[i] = (1 << params[p].dbits) - 1
|
|
674
|
-
for (var i = 0; i < 256; i++)
|
|
675
|
-
dtab[p][i] = dsqr[Math.min(dsqr.length - 1, i >> params[p].dshift)]
|
|
676
|
-
|
|
677
|
-
store_array(out, dtab[p], 256)
|
|
678
|
-
}
|
|
679
|
-
}
|
|
680
|
-
|
|
681
|
-
return out
|
|
682
|
-
}
|
|
683
|
-
|
|
684
|
-
function encode_fqz(
|
|
685
|
-
out,
|
|
686
|
-
src,
|
|
687
|
-
q_lens,
|
|
688
|
-
q_dirs,
|
|
689
|
-
params,
|
|
690
|
-
qhist,
|
|
691
|
-
qtab,
|
|
692
|
-
ptab,
|
|
693
|
-
dtab,
|
|
694
|
-
stab,
|
|
695
|
-
) {
|
|
696
|
-
//console.error("0:",params[0])
|
|
697
|
-
//console.error("1:",params[1])
|
|
698
|
-
|
|
699
|
-
var max_sel = 1 << params[0].sbits
|
|
700
|
-
if (max_sel > 0) max_sel--
|
|
701
|
-
var n_in = src.length
|
|
702
|
-
|
|
703
|
-
// Create the models
|
|
704
|
-
var max_sym = 0
|
|
705
|
-
for (var p = 0; p < params.length; p++)
|
|
706
|
-
if (max_sym < params[p].max_sym) max_sym = params[p].max_sym
|
|
707
|
-
|
|
708
|
-
var model_qual = new Array(1 << 16)
|
|
709
|
-
for (var i = 0; i < 1 << 16; i++) model_qual[i] = new ByteModel(max_sym + 1)
|
|
710
|
-
|
|
711
|
-
var model_len = new Array(4)
|
|
712
|
-
for (var i = 0; i < 4; i++) model_len[i] = new ByteModel(256)
|
|
713
|
-
|
|
714
|
-
var model_rev = new ByteModel(2)
|
|
715
|
-
var model_dup = new ByteModel(2)
|
|
716
|
-
var model_sel = new ByteModel(max_sel + 1)
|
|
717
|
-
|
|
718
|
-
// Note: our JavaScript encoder doesn't have a way for reversing
|
|
719
|
-
// some quality strings, so we ignore do_rev for now.
|
|
720
|
-
var rc = new RangeCoder(src)
|
|
721
|
-
|
|
722
|
-
// The main encoding loop
|
|
723
|
-
var p = 0 // remaining position along current record
|
|
724
|
-
var i = 0 // index in src data
|
|
725
|
-
var rec = 0
|
|
726
|
-
|
|
727
|
-
while (i < n_in) {
|
|
728
|
-
if (p == 0) {
|
|
729
|
-
//var s = 0 // single non-mixed sample
|
|
730
|
-
var s = q_dirs[rec]
|
|
731
|
-
if (params[0].sbits > 0) {
|
|
732
|
-
// FIXME: check All params[].do_stab / sbits must be identical
|
|
733
|
-
//console.log("Ssel", s)
|
|
734
|
-
model_sel.ModelEncode(out, rc, s)
|
|
735
|
-
}
|
|
736
|
-
var x = stab[s]
|
|
737
|
-
|
|
738
|
-
// Reset contexts at the statr of each new record
|
|
739
|
-
var len = q_lens[Math.min(q_lens.length - 1, rec++)]
|
|
740
|
-
if (params[x].fixed_len) {
|
|
741
|
-
if (params[x].fixed_len > 0) {
|
|
742
|
-
// First length
|
|
743
|
-
//console.log("Len", len)
|
|
744
|
-
model_len[0].ModelEncode(out, rc, len & 0xff)
|
|
745
|
-
model_len[1].ModelEncode(out, rc, (len >> 8) & 0xff)
|
|
746
|
-
model_len[2].ModelEncode(out, rc, (len >> 16) & 0xff)
|
|
747
|
-
model_len[3].ModelEncode(out, rc, (len >> 24) & 0xff)
|
|
748
|
-
params[x].fixed_len = -1 // indicate we've stored it once
|
|
749
|
-
}
|
|
750
|
-
} else {
|
|
751
|
-
//console.log("len", len)
|
|
752
|
-
model_len[0].ModelEncode(out, rc, len & 0xff)
|
|
753
|
-
model_len[1].ModelEncode(out, rc, (len >> 8) & 0xff)
|
|
754
|
-
model_len[2].ModelEncode(out, rc, (len >> 16) & 0xff)
|
|
755
|
-
model_len[3].ModelEncode(out, rc, (len >> 24) & 0xff)
|
|
756
|
-
}
|
|
757
|
-
|
|
758
|
-
if (params[x].do_dedup) process.exit(1) // FIXME
|
|
759
|
-
|
|
760
|
-
p = len
|
|
761
|
-
var delta = 0
|
|
762
|
-
//var last = 0
|
|
763
|
-
var last = params[x].context
|
|
764
|
-
var qlast = 0
|
|
765
|
-
var q1 = 0
|
|
766
|
-
}
|
|
767
|
-
|
|
768
|
-
// Encode current quality
|
|
769
|
-
var q = src[i++]
|
|
770
|
-
var Q = qhist[x][q]
|
|
771
|
-
model_qual[last].ModelEncode(out, rc, Q)
|
|
772
|
-
//console.log("Ctx",last,qhist[x][q])
|
|
773
|
-
|
|
774
|
-
// Update contexts for next quality
|
|
775
|
-
qlast = (qlast << params[x].qshift) + qtab[x][Q]
|
|
776
|
-
last = params[x].context
|
|
777
|
-
last += (qlast & ((1 << params[x].qbits) - 1)) << params[x].qloc
|
|
778
|
-
|
|
779
|
-
// 46.6-48.6 billion cycles with ifs + "<< params[x].?loc" shifts
|
|
780
|
-
// 47.3-47.3 billion cycles with ifs
|
|
781
|
-
// 47.1-47.9 billion cycles without ifs
|
|
782
|
-
if (params[x].pbits > 0)
|
|
783
|
-
last += ptab[x][Math.min(p, 1023)] << params[x].ploc
|
|
784
|
-
|
|
785
|
-
if (params[x].dbits > 0) {
|
|
786
|
-
last += dtab[x][Math.min(delta, 255)] << params[x].dloc
|
|
787
|
-
delta += q1 != Q ? 1 : 0
|
|
788
|
-
q1 = Q
|
|
789
|
-
}
|
|
790
|
-
|
|
791
|
-
if (params[x].do_sel) last += s << params[x].sloc
|
|
792
|
-
|
|
793
|
-
last = last & 0xffff
|
|
794
|
-
p--
|
|
795
|
-
}
|
|
796
|
-
|
|
797
|
-
rc.RangeFinishEncode(out)
|
|
798
|
-
return out.buf.slice(0, out.pos)
|
|
799
|
-
}
|
|
800
|
-
|
|
801
|
-
function encode(src, q_lens, q_dirs) {
|
|
802
|
-
var qhist = new Array(2)
|
|
803
|
-
var qtab = new Array(2)
|
|
804
|
-
var ptab = new Array(2)
|
|
805
|
-
var dtab = new Array(2)
|
|
806
|
-
var stab = new Array(256)
|
|
807
|
-
|
|
808
|
-
for (var s = 0; s < 2; s++) {
|
|
809
|
-
qhist[s] = new Array(256)
|
|
810
|
-
qtab[s] = new Array(256)
|
|
811
|
-
ptab[s] = new Array(1024)
|
|
812
|
-
dtab[s] = new Array(256)
|
|
813
|
-
}
|
|
814
|
-
|
|
815
|
-
var out = new IOStream('', 0, src.length * 1.1 + 100) // FIXME: guestimate worst case
|
|
816
|
-
|
|
817
|
-
out.WriteUint7(src.length)
|
|
818
|
-
var params = pick_fqz_params(src, q_lens, q_dirs, qhist)
|
|
819
|
-
var out = encode_fqz_params(out, params, qhist, qtab, ptab, dtab, stab)
|
|
820
|
-
return encode_fqz(
|
|
821
|
-
out,
|
|
822
|
-
src,
|
|
823
|
-
q_lens,
|
|
824
|
-
q_dirs,
|
|
825
|
-
params,
|
|
826
|
-
qhist,
|
|
827
|
-
qtab,
|
|
828
|
-
ptab,
|
|
829
|
-
dtab,
|
|
830
|
-
stab,
|
|
831
|
-
)
|
|
832
|
-
}
|
|
833
|
-
|
|
834
|
-
module.exports = { decode, encode }
|
|
360
|
+
module.exports = { decode }
|
package/src/htscodecs/index.js
CHANGED
|
@@ -37,8 +37,6 @@
|
|
|
37
37
|
// This JavaScript file is not part of the reference implementation
|
|
38
38
|
// and is simply and interface to get a consistent interface for cram-js.
|
|
39
39
|
|
|
40
|
-
'use strict'
|
|
41
|
-
|
|
42
40
|
var r4x8 = require('./rans')
|
|
43
41
|
var r4x16 = require('./rans4x16')
|
|
44
42
|
var arith = require('./arith_gen')
|
|
@@ -46,28 +44,28 @@ var fqzcomp = require('./fqzcomp')
|
|
|
46
44
|
var tok3 = require('./tok3')
|
|
47
45
|
|
|
48
46
|
function r4x8_uncompress(inputBuffer, outputBuffer) {
|
|
49
|
-
r4x8.decode(inputBuffer)
|
|
47
|
+
return r4x8.decode(inputBuffer)
|
|
50
48
|
}
|
|
51
49
|
|
|
52
|
-
function r4x16_uncompress(inputBuffer
|
|
53
|
-
r4x16.decode(inputBuffer)
|
|
50
|
+
function r4x16_uncompress(inputBuffer) {
|
|
51
|
+
return r4x16.decode(inputBuffer)
|
|
54
52
|
}
|
|
55
53
|
|
|
56
|
-
function arith_uncompress(inputBuffer
|
|
54
|
+
function arith_uncompress(inputBuffer) {
|
|
57
55
|
// fix by @cmdcolin for CRAM 3.1
|
|
58
56
|
// xref https://github.com/jkbonfield/htscodecs/pull/1/files
|
|
59
|
-
return new arith().decode(inputBuffer)
|
|
57
|
+
return new arith().decode(inputBuffer)
|
|
60
58
|
}
|
|
61
59
|
|
|
62
|
-
function fqzcomp_uncompress(inputBuffer
|
|
60
|
+
function fqzcomp_uncompress(inputBuffer) {
|
|
63
61
|
var q_lens = new Array()
|
|
64
|
-
fqzcomp.decode(inputBuffer, q_lens)
|
|
62
|
+
return fqzcomp.decode(inputBuffer, q_lens)
|
|
65
63
|
}
|
|
66
64
|
|
|
67
|
-
function tok3_uncompress(inputBuffer
|
|
65
|
+
function tok3_uncompress(inputBuffer) {
|
|
68
66
|
// Returns in string form instead of buffer
|
|
69
67
|
var out = tok3.decode(inputBuffer, 0, '\0')
|
|
70
|
-
|
|
68
|
+
return Uint8Array.from(Array.from(out).map(letter => letter.charCodeAt(0)))
|
|
71
69
|
}
|
|
72
70
|
|
|
73
71
|
module.exports = {
|
|
@@ -36,12 +36,13 @@
|
|
|
36
36
|
module.exports = class IOStream {
|
|
37
37
|
constructor(buf, start_pos = 0, size = 0) {
|
|
38
38
|
if (size != 0) {
|
|
39
|
-
this.buf =
|
|
39
|
+
this.buf = new Uint8Array(size)
|
|
40
40
|
this.length = size
|
|
41
41
|
} else {
|
|
42
42
|
this.buf = buf
|
|
43
43
|
this.length = buf.length
|
|
44
44
|
}
|
|
45
|
+
this.dataView = new DataView(this.buf.buffer)
|
|
45
46
|
this.pos = start_pos
|
|
46
47
|
}
|
|
47
48
|
|
|
@@ -76,7 +77,7 @@ module.exports = class IOStream {
|
|
|
76
77
|
}
|
|
77
78
|
|
|
78
79
|
ReadUint32() {
|
|
79
|
-
const i = this.
|
|
80
|
+
const i = this.dataView.getInt32(this.pos, true)
|
|
80
81
|
this.pos += 4
|
|
81
82
|
return i
|
|
82
83
|
}
|