@gmod/bam 1.1.8 → 1.1.9

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.
Files changed (73) hide show
  1. package/CHANGELOG.md +8 -0
  2. package/README.md +2 -3
  3. package/dist/bai.d.ts +2 -0
  4. package/dist/bai.js +300 -548
  5. package/dist/bai.js.map +1 -0
  6. package/dist/bamFile.d.ts +4 -6
  7. package/dist/bamFile.js +675 -1203
  8. package/dist/bamFile.js.map +1 -0
  9. package/dist/chunk.js +34 -69
  10. package/dist/chunk.js.map +1 -0
  11. package/dist/constants.js +27 -35
  12. package/dist/constants.js.map +1 -0
  13. package/dist/csi.js +317 -515
  14. package/dist/csi.js.map +1 -0
  15. package/dist/errors.js +64 -120
  16. package/dist/errors.js.map +1 -0
  17. package/dist/htsget.js +275 -396
  18. package/dist/htsget.js.map +1 -0
  19. package/dist/index.js +16 -54
  20. package/dist/index.js.map +1 -0
  21. package/dist/indexFile.d.ts +1 -2
  22. package/dist/indexFile.js +77 -163
  23. package/dist/indexFile.js.map +1 -0
  24. package/dist/record.js +496 -707
  25. package/dist/record.js.map +1 -0
  26. package/dist/sam.js +16 -49
  27. package/dist/sam.js.map +1 -0
  28. package/dist/util.d.ts +0 -1
  29. package/dist/util.js +115 -126
  30. package/dist/util.js.map +1 -0
  31. package/dist/virtualOffset.js +44 -77
  32. package/dist/virtualOffset.js.map +1 -0
  33. package/esm/bai.d.ts +26 -0
  34. package/esm/bai.js +191 -0
  35. package/esm/bai.js.map +1 -0
  36. package/esm/bamFile.d.ts +77 -0
  37. package/esm/bamFile.js +388 -0
  38. package/esm/bamFile.js.map +1 -0
  39. package/esm/chunk.d.ts +18 -0
  40. package/esm/chunk.js +33 -0
  41. package/esm/chunk.js.map +1 -0
  42. package/esm/constants.d.ts +15 -0
  43. package/esm/constants.js +27 -0
  44. package/esm/constants.js.map +1 -0
  45. package/esm/csi.d.ts +35 -0
  46. package/esm/csi.js +209 -0
  47. package/esm/csi.js.map +1 -0
  48. package/esm/errors.d.ts +23 -0
  49. package/esm/errors.js +24 -0
  50. package/esm/errors.js.map +1 -0
  51. package/esm/htsget.d.ts +33 -0
  52. package/esm/htsget.js +100 -0
  53. package/esm/htsget.js.map +1 -0
  54. package/esm/index.d.ts +6 -0
  55. package/esm/index.js +7 -0
  56. package/esm/index.js.map +1 -0
  57. package/esm/indexFile.d.ts +27 -0
  58. package/esm/indexFile.js +27 -0
  59. package/esm/indexFile.js.map +1 -0
  60. package/esm/record.d.ts +88 -0
  61. package/esm/record.js +534 -0
  62. package/esm/record.js.map +1 -0
  63. package/esm/sam.d.ts +7 -0
  64. package/esm/sam.js +16 -0
  65. package/esm/sam.js.map +1 -0
  66. package/esm/util.d.ts +35 -0
  67. package/esm/util.js +92 -0
  68. package/esm/util.js.map +1 -0
  69. package/esm/virtualOffset.d.ts +10 -0
  70. package/esm/virtualOffset.js +37 -0
  71. package/esm/virtualOffset.js.map +1 -0
  72. package/package.json +21 -29
  73. package/dist/declare.d.js +0 -2
@@ -0,0 +1,27 @@
1
+ export default class IndexFile {
2
+ /**
3
+ * @param {filehandle} filehandle
4
+ * @param {function} [renameRefSeqs]
5
+ */
6
+ constructor({ filehandle, renameRefSeq = (n) => n, }) {
7
+ this.filehandle = filehandle;
8
+ this.renameRefSeq = renameRefSeq;
9
+ }
10
+ _findFirstData(data, virtualOffset) {
11
+ const currentFdl = data.firstDataLine;
12
+ if (currentFdl) {
13
+ data.firstDataLine =
14
+ currentFdl.compareTo(virtualOffset) > 0 ? virtualOffset : currentFdl;
15
+ }
16
+ else {
17
+ data.firstDataLine = virtualOffset;
18
+ }
19
+ }
20
+ async parse(opts = {}) {
21
+ return this._parse(opts);
22
+ }
23
+ async hasRefSeq(seqId, opts = {}) {
24
+ return !!((await this.parse(opts)).indices[seqId] || {}).binIndex;
25
+ }
26
+ }
27
+ //# sourceMappingURL=indexFile.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"indexFile.js","sourceRoot":"","sources":["../src/indexFile.ts"],"names":[],"mappings":"AAKA,MAAM,CAAC,OAAO,OAAgB,SAAS;IAIrC;;;OAGG;IACH,YAAY,EACV,UAAU,EACV,YAAY,GAAG,CAAC,CAAS,EAAE,EAAE,CAAC,CAAC,GAIhC;QACC,IAAI,CAAC,UAAU,GAAG,UAAU,CAAA;QAC5B,IAAI,CAAC,YAAY,GAAG,YAAY,CAAA;IAClC,CAAC;IAeD,cAAc,CAAC,IAAS,EAAE,aAA4B;QACpD,MAAM,UAAU,GAAG,IAAI,CAAC,aAAa,CAAA;QACrC,IAAI,UAAU,EAAE;YACd,IAAI,CAAC,aAAa;gBAChB,UAAU,CAAC,SAAS,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,UAAU,CAAA;SACvE;aAAM;YACL,IAAI,CAAC,aAAa,GAAG,aAAa,CAAA;SACnC;IACH,CAAC;IAED,KAAK,CAAC,KAAK,CAAC,OAAiB,EAAE;QAC7B,OAAO,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAA;IAC1B,CAAC;IAED,KAAK,CAAC,SAAS,CAAC,KAAa,EAAE,OAAiB,EAAE;QAChD,OAAO,CAAC,CAAC,CAAC,CAAC,MAAM,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,QAAQ,CAAA;IACnE,CAAC;CACF"}
@@ -0,0 +1,88 @@
1
+ /// <reference types="node" />
2
+ /**
3
+ * Class of each BAM record returned by this API.
4
+ */
5
+ export default class BamRecord {
6
+ private data;
7
+ private bytes;
8
+ private flags;
9
+ private _id;
10
+ private _refID;
11
+ private _tagOffset;
12
+ private _tagList;
13
+ private _allTagsParsed;
14
+ constructor(args: any);
15
+ get(field: string): any;
16
+ end(): any;
17
+ seq_id(): number;
18
+ _get(field: string): any;
19
+ _tags(): string[];
20
+ parent(): undefined;
21
+ children(): any;
22
+ id(): number;
23
+ /**
24
+ * Mapping quality score.
25
+ */
26
+ mq(): number | undefined;
27
+ score(): any;
28
+ qual(): string | undefined;
29
+ qualRaw(): Buffer | undefined;
30
+ strand(): 1 | -1;
31
+ multi_segment_next_segment_strand(): 1 | -1 | undefined;
32
+ name(): any;
33
+ _read_name(): any;
34
+ /**
35
+ * Get the value of a tag, parsing the tags as far as necessary.
36
+ * Only called if we have not already parsed that field.
37
+ */
38
+ _parseTag(tagName?: string): any;
39
+ _parseAllTags(): void;
40
+ _parseCigar(cigar: string): (string | number)[][];
41
+ /**
42
+ * @returns {boolean} true if the read is paired, regardless of whether both segments are mapped
43
+ */
44
+ isPaired(): boolean;
45
+ /** @returns {boolean} true if the read is paired, and both segments are mapped */
46
+ isProperlyPaired(): boolean;
47
+ /** @returns {boolean} true if the read itself is unmapped; conflictive with isProperlyPaired */
48
+ isSegmentUnmapped(): boolean;
49
+ /** @returns {boolean} true if the read itself is unmapped; conflictive with isProperlyPaired */
50
+ isMateUnmapped(): boolean;
51
+ /** @returns {boolean} true if the read is mapped to the reverse strand */
52
+ isReverseComplemented(): boolean;
53
+ /** @returns {boolean} true if the mate is mapped to the reverse strand */
54
+ isMateReverseComplemented(): boolean;
55
+ /** @returns {boolean} true if this is read number 1 in a pair */
56
+ isRead1(): boolean;
57
+ /** @returns {boolean} true if this is read number 2 in a pair */
58
+ isRead2(): boolean;
59
+ /** @returns {boolean} true if this is a secondary alignment */
60
+ isSecondary(): boolean;
61
+ /** @returns {boolean} true if this read has failed QC checks */
62
+ isFailedQc(): boolean;
63
+ /** @returns {boolean} true if the read is an optical or PCR duplicate */
64
+ isDuplicate(): boolean;
65
+ /** @returns {boolean} true if this is a supplementary alignment */
66
+ isSupplementary(): boolean;
67
+ cigar(): any;
68
+ _flags(): void;
69
+ length_on_ref(): any;
70
+ _n_cigar_op(): number;
71
+ _l_read_name(): number;
72
+ /**
73
+ * number of bytes in the sequence field
74
+ */
75
+ _seq_bytes(): number;
76
+ getReadBases(): string;
77
+ seq(): string;
78
+ getPairOrientation(): string | null;
79
+ _bin_mq_nl(): any;
80
+ _flag_nc(): any;
81
+ seq_length(): any;
82
+ _next_refid(): any;
83
+ _next_pos(): any;
84
+ template_length(): any;
85
+ toJSON(): {
86
+ [key: string]: any;
87
+ };
88
+ }
package/esm/record.js ADDED
@@ -0,0 +1,534 @@
1
+ /* eslint-disable @typescript-eslint/no-empty-function */
2
+ import Constants from './constants';
3
+ const SEQRET_DECODER = '=ACMGRSVTWYHKDBN'.split('').map(s => s.charCodeAt(0));
4
+ const CIGAR_DECODER = 'MIDNSHP=X???????'.split('');
5
+ /**
6
+ * Class of each BAM record returned by this API.
7
+ */
8
+ export default class BamRecord {
9
+ constructor(args) {
10
+ this._tagOffset = undefined;
11
+ this._tagList = [];
12
+ this._allTagsParsed = false;
13
+ this.data = {};
14
+ this.bytes = {
15
+ start: args.bytes.start,
16
+ end: args.bytes.end,
17
+ byteArray: args.bytes.byteArray,
18
+ };
19
+ this._id = args.fileOffset;
20
+ const { start, byteArray } = this.bytes;
21
+ this._refID = byteArray.readInt32LE(start + 4);
22
+ this.data.start = byteArray.readInt32LE(start + 8);
23
+ this.flags = (byteArray.readInt32LE(start + 16) & 0xffff0000) >> 16;
24
+ }
25
+ get(field) {
26
+ //@ts-ignore
27
+ if (this[field]) {
28
+ //@ts-ignore
29
+ if (this.data[field]) {
30
+ return this.data[field];
31
+ }
32
+ //@ts-ignore
33
+ this.data[field] = this[field]();
34
+ return this.data[field];
35
+ }
36
+ return this._get(field.toLowerCase());
37
+ }
38
+ end() {
39
+ return (this.get('start') +
40
+ (this.get('length_on_ref') || this.get('seq_length') || undefined));
41
+ }
42
+ seq_id() {
43
+ return this._refID;
44
+ }
45
+ // same as get(), except requires lower-case arguments. used
46
+ // internally to save lots of calls to field.toLowerCase()
47
+ _get(field) {
48
+ if (field in this.data) {
49
+ return this.data[field];
50
+ }
51
+ this.data[field] = this._parseTag(field);
52
+ return this.data[field];
53
+ }
54
+ _tags() {
55
+ this._parseAllTags();
56
+ let tags = ['seq'];
57
+ if (!this.isSegmentUnmapped()) {
58
+ tags.push('start', 'end', 'strand', 'score', 'qual', 'MQ', 'CIGAR', 'length_on_ref', 'template_length');
59
+ }
60
+ if (this.isPaired()) {
61
+ tags.push('next_segment_position', 'pair_orientation');
62
+ }
63
+ tags = tags.concat(this._tagList || []);
64
+ Object.keys(this.data).forEach(k => {
65
+ if (k[0] !== '_' && k !== 'next_seq_id') {
66
+ tags.push(k);
67
+ }
68
+ });
69
+ const seen = {};
70
+ tags = tags.filter(t => {
71
+ if ((t in this.data && this.data[t] === undefined) ||
72
+ t === 'CG' ||
73
+ t === 'cg') {
74
+ return false;
75
+ }
76
+ const lt = t.toLowerCase();
77
+ const s = seen[lt];
78
+ seen[lt] = true;
79
+ return !s;
80
+ });
81
+ return tags;
82
+ }
83
+ parent() {
84
+ return undefined;
85
+ }
86
+ children() {
87
+ return this.get('subfeatures');
88
+ }
89
+ id() {
90
+ return this._id;
91
+ }
92
+ // special parsers
93
+ /**
94
+ * Mapping quality score.
95
+ */
96
+ mq() {
97
+ const mq = (this.get('_bin_mq_nl') & 0xff00) >> 8;
98
+ return mq === 255 ? undefined : mq;
99
+ }
100
+ score() {
101
+ return this.get('mq');
102
+ }
103
+ qual() {
104
+ var _a;
105
+ return (_a = this.qualRaw()) === null || _a === void 0 ? void 0 : _a.join(' ');
106
+ }
107
+ qualRaw() {
108
+ if (this.isSegmentUnmapped()) {
109
+ return undefined;
110
+ }
111
+ const { byteArray } = this.bytes;
112
+ const p = this.bytes.start +
113
+ 36 +
114
+ this.get('_l_read_name') +
115
+ this.get('_n_cigar_op') * 4 +
116
+ this.get('_seq_bytes');
117
+ const lseq = this.get('seq_length');
118
+ const qseq = Buffer.allocUnsafe(lseq);
119
+ for (let j = 0; j < lseq; ++j) {
120
+ qseq[j] = byteArray[p + j];
121
+ }
122
+ return qseq;
123
+ }
124
+ strand() {
125
+ return this.isReverseComplemented() ? -1 : 1;
126
+ }
127
+ multi_segment_next_segment_strand() {
128
+ if (this.isMateUnmapped()) {
129
+ return undefined;
130
+ }
131
+ return this.isMateReverseComplemented() ? -1 : 1;
132
+ }
133
+ name() {
134
+ return this.get('_read_name');
135
+ }
136
+ _read_name() {
137
+ const nl = this.get('_l_read_name');
138
+ return this.bytes.byteArray.toString('ascii', this.bytes.start + 36, this.bytes.start + 36 + nl - 1);
139
+ }
140
+ /**
141
+ * Get the value of a tag, parsing the tags as far as necessary.
142
+ * Only called if we have not already parsed that field.
143
+ */
144
+ _parseTag(tagName) {
145
+ // if all of the tags have been parsed and we're still being
146
+ // called, we already know that we have no such tag, because
147
+ // it would already have been cached.
148
+ if (this._allTagsParsed) {
149
+ return undefined;
150
+ }
151
+ const { byteArray } = this.bytes;
152
+ let p = this._tagOffset ||
153
+ this.bytes.start +
154
+ 36 +
155
+ this.get('_l_read_name') +
156
+ this.get('_n_cigar_op') * 4 +
157
+ this.get('_seq_bytes') +
158
+ this.get('seq_length');
159
+ const blockEnd = this.bytes.end;
160
+ let lcTag;
161
+ while (p < blockEnd && lcTag !== tagName) {
162
+ const tag = String.fromCharCode(byteArray[p], byteArray[p + 1]);
163
+ lcTag = tag.toLowerCase();
164
+ const type = String.fromCharCode(byteArray[p + 2]);
165
+ p += 3;
166
+ let value;
167
+ switch (type) {
168
+ case 'A':
169
+ value = String.fromCharCode(byteArray[p]);
170
+ p += 1;
171
+ break;
172
+ case 'i':
173
+ value = byteArray.readInt32LE(p);
174
+ p += 4;
175
+ break;
176
+ case 'I':
177
+ value = byteArray.readUInt32LE(p);
178
+ p += 4;
179
+ break;
180
+ case 'c':
181
+ value = byteArray.readInt8(p);
182
+ p += 1;
183
+ break;
184
+ case 'C':
185
+ value = byteArray.readUInt8(p);
186
+ p += 1;
187
+ break;
188
+ case 's':
189
+ value = byteArray.readInt16LE(p);
190
+ p += 2;
191
+ break;
192
+ case 'S':
193
+ value = byteArray.readUInt16LE(p);
194
+ p += 2;
195
+ break;
196
+ case 'f':
197
+ value = byteArray.readFloatLE(p);
198
+ p += 4;
199
+ break;
200
+ case 'Z':
201
+ case 'H':
202
+ value = '';
203
+ while (p <= blockEnd) {
204
+ const cc = byteArray[p++];
205
+ if (cc === 0) {
206
+ break;
207
+ }
208
+ else {
209
+ value += String.fromCharCode(cc);
210
+ }
211
+ }
212
+ break;
213
+ case 'B': {
214
+ value = '';
215
+ const cc = byteArray[p++];
216
+ const Btype = String.fromCharCode(cc);
217
+ const limit = byteArray.readInt32LE(p);
218
+ p += 4;
219
+ if (Btype === 'i') {
220
+ if (tag === 'CG') {
221
+ for (let k = 0; k < limit; k++) {
222
+ const cigop = byteArray.readInt32LE(p);
223
+ const lop = cigop >> 4;
224
+ const op = CIGAR_DECODER[cigop & 0xf];
225
+ value += lop + op;
226
+ p += 4;
227
+ }
228
+ }
229
+ else {
230
+ for (let k = 0; k < limit; k++) {
231
+ value += byteArray.readInt32LE(p);
232
+ if (k + 1 < limit) {
233
+ value += ',';
234
+ }
235
+ p += 4;
236
+ }
237
+ }
238
+ }
239
+ if (Btype === 'I') {
240
+ if (tag === 'CG') {
241
+ for (let k = 0; k < limit; k++) {
242
+ const cigop = byteArray.readUInt32LE(p);
243
+ const lop = cigop >> 4;
244
+ const op = CIGAR_DECODER[cigop & 0xf];
245
+ value += lop + op;
246
+ p += 4;
247
+ }
248
+ }
249
+ else {
250
+ for (let k = 0; k < limit; k++) {
251
+ value += byteArray.readUInt32LE(p);
252
+ if (k + 1 < limit) {
253
+ value += ',';
254
+ }
255
+ p += 4;
256
+ }
257
+ }
258
+ }
259
+ if (Btype === 's') {
260
+ for (let k = 0; k < limit; k++) {
261
+ value += byteArray.readInt16LE(p);
262
+ if (k + 1 < limit) {
263
+ value += ',';
264
+ }
265
+ p += 2;
266
+ }
267
+ }
268
+ if (Btype === 'S') {
269
+ for (let k = 0; k < limit; k++) {
270
+ value += byteArray.readUInt16LE(p);
271
+ if (k + 1 < limit) {
272
+ value += ',';
273
+ }
274
+ p += 2;
275
+ }
276
+ }
277
+ if (Btype === 'c') {
278
+ for (let k = 0; k < limit; k++) {
279
+ value += byteArray.readInt8(p);
280
+ if (k + 1 < limit) {
281
+ value += ',';
282
+ }
283
+ p += 1;
284
+ }
285
+ }
286
+ if (Btype === 'C') {
287
+ for (let k = 0; k < limit; k++) {
288
+ value += byteArray.readUInt8(p);
289
+ if (k + 1 < limit) {
290
+ value += ',';
291
+ }
292
+ p += 1;
293
+ }
294
+ }
295
+ if (Btype === 'f') {
296
+ for (let k = 0; k < limit; k++) {
297
+ value += byteArray.readFloatLE(p);
298
+ if (k + 1 < limit) {
299
+ value += ',';
300
+ }
301
+ p += 4;
302
+ }
303
+ }
304
+ break;
305
+ }
306
+ default:
307
+ console.warn(`Unknown BAM tag type '${type}', tags may be incomplete`);
308
+ value = undefined;
309
+ p = blockEnd; // stop parsing tags
310
+ }
311
+ this._tagOffset = p;
312
+ this._tagList.push(tag);
313
+ if (lcTag === tagName) {
314
+ return value;
315
+ }
316
+ this.data[lcTag] = value;
317
+ }
318
+ this._allTagsParsed = true;
319
+ return undefined;
320
+ }
321
+ _parseAllTags() {
322
+ this._parseTag('');
323
+ }
324
+ _parseCigar(cigar) {
325
+ return (
326
+ //@ts-ignore
327
+ cigar
328
+ .match(/\d+\D/g)
329
+ //@ts-ignore
330
+ .map(op => [op.match(/\D/)[0].toUpperCase(), parseInt(op, 10)]));
331
+ }
332
+ /**
333
+ * @returns {boolean} true if the read is paired, regardless of whether both segments are mapped
334
+ */
335
+ isPaired() {
336
+ return !!(this.flags & Constants.BAM_FPAIRED);
337
+ }
338
+ /** @returns {boolean} true if the read is paired, and both segments are mapped */
339
+ isProperlyPaired() {
340
+ return !!(this.flags & Constants.BAM_FPROPER_PAIR);
341
+ }
342
+ /** @returns {boolean} true if the read itself is unmapped; conflictive with isProperlyPaired */
343
+ isSegmentUnmapped() {
344
+ return !!(this.flags & Constants.BAM_FUNMAP);
345
+ }
346
+ /** @returns {boolean} true if the read itself is unmapped; conflictive with isProperlyPaired */
347
+ isMateUnmapped() {
348
+ return !!(this.flags & Constants.BAM_FMUNMAP);
349
+ }
350
+ /** @returns {boolean} true if the read is mapped to the reverse strand */
351
+ isReverseComplemented() {
352
+ return !!(this.flags & Constants.BAM_FREVERSE);
353
+ }
354
+ /** @returns {boolean} true if the mate is mapped to the reverse strand */
355
+ isMateReverseComplemented() {
356
+ return !!(this.flags & Constants.BAM_FMREVERSE);
357
+ }
358
+ /** @returns {boolean} true if this is read number 1 in a pair */
359
+ isRead1() {
360
+ return !!(this.flags & Constants.BAM_FREAD1);
361
+ }
362
+ /** @returns {boolean} true if this is read number 2 in a pair */
363
+ isRead2() {
364
+ return !!(this.flags & Constants.BAM_FREAD2);
365
+ }
366
+ /** @returns {boolean} true if this is a secondary alignment */
367
+ isSecondary() {
368
+ return !!(this.flags & Constants.BAM_FSECONDARY);
369
+ }
370
+ /** @returns {boolean} true if this read has failed QC checks */
371
+ isFailedQc() {
372
+ return !!(this.flags & Constants.BAM_FQCFAIL);
373
+ }
374
+ /** @returns {boolean} true if the read is an optical or PCR duplicate */
375
+ isDuplicate() {
376
+ return !!(this.flags & Constants.BAM_FDUP);
377
+ }
378
+ /** @returns {boolean} true if this is a supplementary alignment */
379
+ isSupplementary() {
380
+ return !!(this.flags & Constants.BAM_FSUPPLEMENTARY);
381
+ }
382
+ cigar() {
383
+ if (this.isSegmentUnmapped()) {
384
+ return undefined;
385
+ }
386
+ const { byteArray, start } = this.bytes;
387
+ const numCigarOps = this.get('_n_cigar_op');
388
+ let p = start + 36 + this.get('_l_read_name');
389
+ const seqLen = this.get('seq_length');
390
+ let cigar = '';
391
+ let lref = 0;
392
+ // check for CG tag by inspecting whether the CIGAR field
393
+ // contains a clip that consumes entire seqLen
394
+ let cigop = byteArray.readInt32LE(p);
395
+ let lop = cigop >> 4;
396
+ let op = CIGAR_DECODER[cigop & 0xf];
397
+ if (op === 'S' && lop === seqLen) {
398
+ // if there is a CG the second CIGAR field will
399
+ // be a N tag the represents the length on ref
400
+ p += 4;
401
+ cigop = byteArray.readInt32LE(p);
402
+ lop = cigop >> 4;
403
+ op = CIGAR_DECODER[cigop & 0xf];
404
+ if (op !== 'N') {
405
+ console.warn('CG tag with no N tag');
406
+ }
407
+ this.data.length_on_ref = lop;
408
+ return this.get('CG');
409
+ }
410
+ else {
411
+ for (let c = 0; c < numCigarOps; ++c) {
412
+ cigop = byteArray.readInt32LE(p);
413
+ lop = cigop >> 4;
414
+ op = CIGAR_DECODER[cigop & 0xf];
415
+ cigar += lop + op;
416
+ // soft clip, hard clip, and insertion don't count toward
417
+ // the length on the reference
418
+ if (op !== 'H' && op !== 'S' && op !== 'I') {
419
+ lref += lop;
420
+ }
421
+ p += 4;
422
+ }
423
+ this.data.length_on_ref = lref;
424
+ return cigar;
425
+ }
426
+ }
427
+ _flags() { }
428
+ length_on_ref() {
429
+ this.get('cigar'); // the length_on_ref is set as a
430
+ // side effect of the CIGAR parsing
431
+ return this.data.length_on_ref;
432
+ }
433
+ _n_cigar_op() {
434
+ return this.get('_flag_nc') & 0xffff;
435
+ }
436
+ _l_read_name() {
437
+ return this.get('_bin_mq_nl') & 0xff;
438
+ }
439
+ /**
440
+ * number of bytes in the sequence field
441
+ */
442
+ _seq_bytes() {
443
+ return (this.get('seq_length') + 1) >> 1;
444
+ }
445
+ getReadBases() {
446
+ return this.seq();
447
+ }
448
+ seq() {
449
+ const { byteArray } = this.bytes;
450
+ const p = this.bytes.start +
451
+ 36 +
452
+ this.get('_l_read_name') +
453
+ this.get('_n_cigar_op') * 4;
454
+ const seqBytes = this.get('_seq_bytes');
455
+ const len = this.get('seq_length');
456
+ let buf = '';
457
+ let i = 0;
458
+ for (let j = 0; j < seqBytes; ++j) {
459
+ const sb = byteArray[p + j];
460
+ buf += String.fromCharCode(SEQRET_DECODER[(sb & 0xf0) >> 4]);
461
+ i++;
462
+ if (i < len) {
463
+ buf += String.fromCharCode(SEQRET_DECODER[sb & 0x0f]);
464
+ i++;
465
+ }
466
+ }
467
+ return buf;
468
+ }
469
+ // adapted from igv.js
470
+ getPairOrientation() {
471
+ if (!this.isSegmentUnmapped() &&
472
+ !this.isMateUnmapped() &&
473
+ this._refID === this._next_refid()) {
474
+ const s1 = this.isReverseComplemented() ? 'R' : 'F';
475
+ const s2 = this.isMateReverseComplemented() ? 'R' : 'F';
476
+ let o1 = ' ';
477
+ let o2 = ' ';
478
+ if (this.isRead1()) {
479
+ o1 = '1';
480
+ o2 = '2';
481
+ }
482
+ else if (this.isRead2()) {
483
+ o1 = '2';
484
+ o2 = '1';
485
+ }
486
+ const tmp = [];
487
+ const isize = this.template_length();
488
+ if (isize > 0) {
489
+ tmp[0] = s1;
490
+ tmp[1] = o1;
491
+ tmp[2] = s2;
492
+ tmp[3] = o2;
493
+ }
494
+ else {
495
+ tmp[2] = s1;
496
+ tmp[3] = o1;
497
+ tmp[0] = s2;
498
+ tmp[1] = o2;
499
+ }
500
+ return tmp.join('');
501
+ }
502
+ return null;
503
+ }
504
+ _bin_mq_nl() {
505
+ return this.bytes.byteArray.readInt32LE(this.bytes.start + 12);
506
+ }
507
+ _flag_nc() {
508
+ return this.bytes.byteArray.readInt32LE(this.bytes.start + 16);
509
+ }
510
+ seq_length() {
511
+ return this.bytes.byteArray.readInt32LE(this.bytes.start + 20);
512
+ }
513
+ _next_refid() {
514
+ return this.bytes.byteArray.readInt32LE(this.bytes.start + 24);
515
+ }
516
+ _next_pos() {
517
+ return this.bytes.byteArray.readInt32LE(this.bytes.start + 28);
518
+ }
519
+ template_length() {
520
+ return this.bytes.byteArray.readInt32LE(this.bytes.start + 32);
521
+ }
522
+ toJSON() {
523
+ const data = {};
524
+ Object.keys(this).forEach(k => {
525
+ if (k.charAt(0) === '_' || k === 'bytes') {
526
+ return;
527
+ }
528
+ //@ts-ignore
529
+ data[k] = this[k];
530
+ });
531
+ return data;
532
+ }
533
+ }
534
+ //# sourceMappingURL=record.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"record.js","sourceRoot":"","sources":["../src/record.ts"],"names":[],"mappings":"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"}