@jbrowse/plugin-alignments 1.6.6 → 1.6.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 (32) hide show
  1. package/dist/BamAdapter/BamSlightlyLazyFeature.d.ts +1 -10
  2. package/dist/BamAdapter/MismatchParser.d.ts +3 -5
  3. package/dist/CramAdapter/CramSlightlyLazyFeature.d.ts +1 -2
  4. package/dist/LinearSNPCoverageDisplay/models/model.d.ts +2 -2
  5. package/dist/PileupRenderer/PileupRenderer.d.ts +20 -6
  6. package/dist/SNPCoverageAdapter/SNPCoverageAdapter.d.ts +3 -11
  7. package/dist/plugin-alignments.cjs.development.js +591 -552
  8. package/dist/plugin-alignments.cjs.development.js.map +1 -1
  9. package/dist/plugin-alignments.cjs.production.min.js +1 -1
  10. package/dist/plugin-alignments.cjs.production.min.js.map +1 -1
  11. package/dist/plugin-alignments.esm.js +594 -555
  12. package/dist/plugin-alignments.esm.js.map +1 -1
  13. package/dist/util.d.ts +4 -0
  14. package/package.json +3 -3
  15. package/src/BamAdapter/BamAdapter.ts +10 -7
  16. package/src/BamAdapter/BamSlightlyLazyFeature.ts +11 -79
  17. package/src/BamAdapter/MismatchParser.test.ts +53 -297
  18. package/src/BamAdapter/MismatchParser.ts +54 -116
  19. package/src/BamAdapter/configSchema.ts +0 -4
  20. package/src/CramAdapter/CramSlightlyLazyFeature.ts +3 -10
  21. package/src/LinearAlignmentsDisplay/models/model.tsx +4 -6
  22. package/src/LinearPileupDisplay/components/ColorByModifications.tsx +76 -80
  23. package/src/LinearPileupDisplay/components/ColorByTag.tsx +24 -23
  24. package/src/LinearPileupDisplay/components/FilterByTag.tsx +73 -68
  25. package/src/LinearPileupDisplay/components/SetFeatureHeight.tsx +28 -26
  26. package/src/LinearPileupDisplay/components/SetMaxHeight.tsx +24 -13
  27. package/src/LinearPileupDisplay/components/SortByTag.tsx +29 -21
  28. package/src/LinearPileupDisplay/model.ts +6 -0
  29. package/src/PileupRenderer/PileupRenderer.tsx +178 -57
  30. package/src/SNPCoverageAdapter/SNPCoverageAdapter.ts +180 -229
  31. package/src/SNPCoverageRenderer/SNPCoverageRenderer.ts +12 -11
  32. package/src/util.ts +25 -0
package/dist/util.d.ts CHANGED
@@ -1,4 +1,6 @@
1
+ import { BaseFeatureDataAdapter } from '@jbrowse/core/data_adapters/BaseAdapter';
1
2
  import { Feature } from '@jbrowse/core/util/simpleFeature';
3
+ import { AugmentedRegion } from '@jbrowse/core/util';
2
4
  export declare function getTag(feature: Feature, tag: string): any;
3
5
  export declare function getTagAlt(feature: Feature, tag: string, alt: string): any;
4
6
  export declare const orientationTypes: {
@@ -13,3 +15,5 @@ export declare const orientationTypes: {
13
15
  };
14
16
  };
15
17
  export declare function getColorWGBS(strand: number, base: string): "#f00" | "#00f" | "#888";
18
+ export declare function fetchSequence(region: AugmentedRegion, adapter: BaseFeatureDataAdapter): Promise<any>;
19
+ export declare function shouldFetchReferenceSequence(type?: string): boolean;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@jbrowse/plugin-alignments",
3
- "version": "1.6.6",
3
+ "version": "1.6.9",
4
4
  "description": "JBrowse 2 alignments adapters, tracks, etc.",
5
5
  "keywords": [
6
6
  "jbrowse",
@@ -35,7 +35,7 @@
35
35
  "useSrc": "node ../../scripts/useSrc.js"
36
36
  },
37
37
  "dependencies": {
38
- "@gmod/bam": "^1.1.14",
38
+ "@gmod/bam": "^1.1.15",
39
39
  "@gmod/cram": "^1.6.1",
40
40
  "@material-ui/icons": "^4.9.1",
41
41
  "abortable-promise-cache": "^1.5.0",
@@ -61,5 +61,5 @@
61
61
  "publishConfig": {
62
62
  "access": "public"
63
63
  },
64
- "gitHead": "9fcca7793af0df2d6e527ddaace2b368c8ed2879"
64
+ "gitHead": "f6c3d4edfadc26f7ac635a2fa7259f50f0c7e5e3"
65
65
  }
@@ -38,7 +38,6 @@ export default class BamAdapter extends BaseFeatureDataAdapter {
38
38
  const bamLocation = readConfObject(this.config, 'bamLocation')
39
39
  const location = readConfObject(this.config, ['index', 'location'])
40
40
  const indexType = readConfObject(this.config, ['index', 'indexType'])
41
- const chunkSizeLimit = readConfObject(this.config, 'chunkSizeLimit')
42
41
  const bam = new BamFile({
43
42
  bamFilehandle: openLocation(bamLocation, this.pluginManager),
44
43
  csiFilehandle:
@@ -49,8 +48,13 @@ export default class BamAdapter extends BaseFeatureDataAdapter {
49
48
  indexType !== 'CSI'
50
49
  ? openLocation(location, this.pluginManager)
51
50
  : undefined,
52
- chunkSizeLimit,
53
- fetchSizeLimit: 100_000_000,
51
+
52
+ // chunkSizeLimit and fetchSizeLimit are more troublesome than
53
+ // helpful, and have given overly large values on the ultra long
54
+ // nanopore reads even with 500MB limits, so disabled with infinity
55
+ chunkSizeLimit: Infinity,
56
+ fetchSizeLimit: Infinity,
57
+ yieldThreadTime: Infinity,
54
58
  })
55
59
 
56
60
  const adapterConfig = readConfObject(this.config, 'sequenceAdapter')
@@ -139,7 +143,7 @@ export default class BamAdapter extends BaseFeatureDataAdapter {
139
143
 
140
144
  const seqChunks = await features.pipe(toArray()).toPromise()
141
145
 
142
- const trimmed: string[] = []
146
+ let sequence = ''
143
147
  seqChunks
144
148
  .sort((a, b) => a.get('start') - b.get('start'))
145
149
  .forEach(chunk => {
@@ -149,10 +153,9 @@ export default class BamAdapter extends BaseFeatureDataAdapter {
149
153
  const trimEnd = Math.min(end - chunkStart, chunkEnd - chunkStart)
150
154
  const trimLength = trimEnd - trimStart
151
155
  const chunkSeq = chunk.get('seq') || chunk.get('residues')
152
- trimmed.push(chunkSeq.substr(trimStart, trimLength))
156
+ sequence += chunkSeq.substr(trimStart, trimLength)
153
157
  })
154
158
 
155
- const sequence = trimmed.join('')
156
159
  if (sequence.length !== end - start) {
157
160
  throw new Error(
158
161
  `sequence fetch failed: fetching ${refName}:${(
@@ -181,7 +184,7 @@ export default class BamAdapter extends BaseFeatureDataAdapter {
181
184
 
182
185
  for (const record of records) {
183
186
  let ref: string | undefined
184
- if (!record.get('md')) {
187
+ if (!record.get('MD')) {
185
188
  ref = await this.seqFetch(
186
189
  originalRefName || refName,
187
190
  record.get('start'),
@@ -4,18 +4,13 @@ import {
4
4
  SimpleFeatureSerialized,
5
5
  } from '@jbrowse/core/util/simpleFeature'
6
6
  import { BamRecord } from '@gmod/bam'
7
- import {
8
- parseCigar,
9
- generateMD,
10
- cigarToMismatches,
11
- mdToMismatches,
12
- Mismatch,
13
- } from './MismatchParser'
7
+ import { getMismatches } from './MismatchParser'
14
8
 
15
9
  import BamAdapter from './BamAdapter'
16
10
 
17
11
  export default class BamSlightlyLazyFeature implements Feature {
18
- private cachedMD = ''
12
+ // uses parameter properties to automatically create fields on the class
13
+ // https://www.typescriptlang.org/docs/handbook/classes.html#parameter-properties
19
14
  constructor(
20
15
  private record: BamRecord,
21
16
  private adapter: BamAdapter,
@@ -70,18 +65,6 @@ export default class BamSlightlyLazyFeature implements Feature {
70
65
  return this.record.getReadBases()
71
66
  }
72
67
 
73
- _get_MD() {
74
- const md = this.record.get('MD') || this.cachedMD
75
- if (!md) {
76
- const seq = this.get('seq')
77
- if (seq && this.ref) {
78
- this.cachedMD = generateMD(this.ref, this.get('seq'), this.get('CIGAR'))
79
- return this.cachedMD
80
- }
81
- }
82
- return md
83
- }
84
-
85
68
  qualRaw() {
86
69
  return this.record.qualRaw()
87
70
  }
@@ -100,8 +83,6 @@ export default class BamSlightlyLazyFeature implements Feature {
100
83
  prop =>
101
84
  prop.startsWith('_get_') &&
102
85
  prop !== '_get_mismatches' &&
103
- prop !== '_get_skips_and_dels' &&
104
- prop !== '_get_cram_read_features' &&
105
86
  prop !== '_get_tags' &&
106
87
  prop !== '_get_next_seq_id' &&
107
88
  prop !== '_get_seq_id',
@@ -154,63 +135,14 @@ export default class BamSlightlyLazyFeature implements Feature {
154
135
  }
155
136
  }
156
137
 
157
- _get_skips_and_dels(
158
- opts: {
159
- cigarAttributeName: string
160
- } = {
161
- cigarAttributeName: 'CIGAR',
162
- },
163
- ) {
164
- const { cigarAttributeName } = opts
165
- let mismatches: Mismatch[] = []
166
- let cigarOps: string[] = []
167
-
168
- // parse the CIGAR tag if it has one
169
- const cigarString = this.get(cigarAttributeName)
170
- if (cigarString) {
171
- cigarOps = parseCigar(cigarString)
172
- mismatches = mismatches.concat(
173
- cigarToMismatches(cigarOps, this.get('seq'), this.qualRaw()),
174
- )
175
- }
176
- return mismatches
177
- }
178
-
179
- _get_mismatches({
180
- cigarAttributeName = 'CIGAR',
181
- mdAttributeName = 'MD',
182
- }: {
183
- cigarAttributeName?: string
184
- mdAttributeName?: string
185
- } = {}) {
186
- let mismatches: Mismatch[] = []
187
- let cigarOps: string[] = []
188
-
189
- // parse the CIGAR tag if it has one
190
- const cigarString = this.get(cigarAttributeName)
191
- const seq = this.get('seq')
192
- const qual = this.qualRaw()
193
- if (cigarString) {
194
- cigarOps = parseCigar(cigarString)
195
- mismatches = mismatches.concat(cigarToMismatches(cigarOps, seq, qual))
196
- }
197
-
198
- // now let's look for CRAM or MD mismatches
199
- const mdString = this.get(mdAttributeName)
200
- if (mdString) {
201
- mismatches = mismatches.concat(
202
- mdToMismatches(mdString, cigarOps, mismatches, seq, qual),
203
- )
204
- }
205
-
206
- // uniqify the mismatches
207
- const seen: { [index: string]: boolean } = {}
208
- return mismatches.filter(m => {
209
- const key = `${m.type},${m.start},${m.length}`
210
- const s = seen[key]
211
- seen[key] = true
212
- return !s
213
- })
138
+ _get_mismatches() {
139
+ return getMismatches(
140
+ this.get('CIGAR'),
141
+ this.get('MD'),
142
+ this.get('seq'),
143
+ this.ref,
144
+ this.qualRaw(),
145
+ )
214
146
  }
215
147
 
216
148
  _get_clipPos() {
@@ -1,9 +1,8 @@
1
1
  import {
2
- generateMD,
3
2
  getMismatches,
4
3
  cigarToMismatches,
5
- parseCigar,
6
4
  mdToMismatches,
5
+ parseCigar,
7
6
  getNextRefPos,
8
7
  getModificationPositions,
9
8
  } from './MismatchParser'
@@ -29,48 +28,58 @@ test('md to mismatches', () => {
29
28
  ])
30
29
  })
31
30
 
32
- test('get mismatches', () => {
33
- // simple deletion
34
- expect(getMismatches('56M1D45M', '56^A45', seq)).toEqual([
35
- { start: 56, type: 'deletion', base: '*', length: 1 },
36
- ])
31
+ describe('get mismatches', () => {
32
+ it('simple deletion', () => {
33
+ // simple deletion
34
+ expect(getMismatches('56M1D45M', '56^A45', seq)).toEqual([
35
+ { start: 56, type: 'deletion', base: '*', length: 1 },
36
+ ])
37
+ })
37
38
 
38
- // simple insertion
39
- expect(
40
- getMismatches(
41
- '89M1I11M',
42
- '100',
43
- 'AAAAAAAAAACAAAAAAAAAAAAAACCCCCCCCCCCCCCCCCCCCCCCCCGGGGGGGGGGGGGGGGGGGGGGGGGTTTTTTTTTTTTTTTTTTTTTTTTTA',
44
- ),
45
- ).toEqual([{ start: 89, type: 'insertion', base: '1', length: 0 }])
39
+ it('simple insertion', () => {
40
+ // simple insertion
41
+ expect(
42
+ getMismatches(
43
+ '89M1I11M',
44
+ '100',
45
+ 'AAAAAAAAAACAAAAAAAAAAAAAACCCCCCCCCCCCCCCCCCCCCCCCCGGGGGGGGGGGGGGGGGGGGGGGGGTTTTTTTTTTTTTTTTTTTTTTTTTA',
46
+ ),
47
+ ).toEqual([{ start: 89, type: 'insertion', base: '1', length: 0 }])
48
+ })
46
49
 
47
- // contains a deletion and a SNP
48
- // read GGGGG--ATTTTTT
49
- // ||||| ||||||
50
- // GGGGGACCTTTTTT
51
- expect(getMismatches('5M2D6M', '5^AC0C5', 'GGGGGATTTTTT')).toEqual([
52
- { start: 5, type: 'deletion', base: '*', length: 2 },
53
- { start: 7, type: 'mismatch', base: 'A', altbase: 'C', length: 1 },
54
- ])
50
+ it('deletion and a SNP', () => {
51
+ // contains a deletion and a SNP
52
+ // read GGGGG--ATTTTTT
53
+ // ||||| ||||||
54
+ // GGGGGACCTTTTTT
55
+ expect(getMismatches('5M2D6M', '5^AC0C5', 'GGGGGATTTTTT')).toEqual([
56
+ { start: 5, type: 'deletion', base: '*', length: 2 },
57
+ { start: 7, type: 'mismatch', base: 'A', altbase: 'C', length: 1 },
58
+ ])
59
+ })
55
60
 
56
- // 0-length MD entries, which indicates two SNPs right next to each other
57
- // "They generally occur between SNPs, or between a deletion then a SNP."
58
- // http://seqanswers.com/forums/showthread.php?t=8978
59
- //
60
- // read GGGGGCATTTTT
61
- // ||||| |||||
62
- // ref GGGGGACTTTTT
63
- expect(getMismatches('12M', '5A0C5', 'GGGGGCATTTTT')).toEqual([
64
- { altbase: 'A', base: 'C', length: 1, start: 5, type: 'mismatch' },
65
- { altbase: 'C', base: 'A', length: 1, start: 6, type: 'mismatch' },
66
- ])
61
+ it('0-length MD entries', () => {
62
+ // 0-length MD entries, which indicates two SNPs right next to each other
63
+ // "They generally occur between SNPs, or between a deletion then a SNP."
64
+ // http://seqanswers.com/forums/showthread.php?t=8978
65
+ //
66
+ // read GGGGGCATTTTT
67
+ // ||||| |||||
68
+ // ref GGGGGACTTTTT
69
+ expect(getMismatches('12M', '5A0C5', 'GGGGGCATTTTT')).toEqual([
70
+ { altbase: 'A', base: 'C', length: 1, start: 5, type: 'mismatch' },
71
+ { altbase: 'C', base: 'A', length: 1, start: 6, type: 'mismatch' },
72
+ ])
73
+ })
67
74
 
68
- // same as above but with the non-0-length MD string
69
- // not sure if it is entirely legal, but may appear in the wild
70
- expect(getMismatches('12M', '5AC5', 'GGGGGCATTTTT')).toEqual([
71
- { altbase: 'A', base: 'C', length: 1, start: 5, type: 'mismatch' },
72
- { altbase: 'C', base: 'A', length: 1, start: 6, type: 'mismatch' },
73
- ])
75
+ it('non-0-length-MD string', () => {
76
+ // same as above but with the non-0-length MD string
77
+ // not sure if it is entirely legal, but may appear in the wild
78
+ expect(getMismatches('12M', '5AC5', 'GGGGGCATTTTT')).toEqual([
79
+ { altbase: 'A', base: 'C', length: 1, start: 5, type: 'mismatch' },
80
+ { altbase: 'C', base: 'A', length: 1, start: 6, type: 'mismatch' },
81
+ ])
82
+ })
74
83
  })
75
84
 
76
85
  test('basic skip', () => {
@@ -224,268 +233,15 @@ test('clipping', () => {
224
233
  ])
225
234
  })
226
235
 
227
- test('md generation', () => {
228
- const query =
229
- `CACACTAGCCCGTCAGCGAACGCGTGCGCGGCCGCTGCCCTGCAGCGAATGGGGCTAACGACGCATAAAACGCCCGCATA
230
- ACCACTCGAGCTACGGGAAATTCACTCAGGCTGTGTTGCTTCGACGTGTAGATCTCATTCACATATCATAATACCTCCAA
231
- GACCAACGGCTGCTCATGACTCTCTTACCTTGTTAGGGACATTTCGGCACTAGGGAAGAGCTGAGGACTTTGAAAACGTC
232
- GATAAAACCATCGCGGGAACTAGCCTGCGTTAGAACTCCCATATTTTACGGGTCGCAAGCTTGAGAGTCCTGTCCCGGCA
233
- GCTGCAAGTGCTACGGCAGGAGGGGATCTACCATAACGTGCAGTAAGACCCCTGCCCGTAATGAGGCGGTACTCGTCTCT
234
- AATCGTCAGTAGTTACTATGTCCGAGGACGTGCCTCTACGAGTTGAACTCTGGCTAGGCCCACCTGTCCGCGCCACTGCT
235
- CGGGTACCCCATCTGCTTTATCCAACTTCACCTGCGCCTTAACGGAATCTCTGGTTGCCAGTCATCCGATGGTCATTAAG
236
- CAGCGTGGTACATCGTAAGCCAATACTTCAGGGCGCCTAGCCATATTCCCAGCCAAGCGGCTGCATAATTACAAGCGCTG
237
- GCACGACTAATCGATCCCACGAAGCCTGGGAGATGACCCTAGCCCTAAAAGTCTGCCCTCGTGACCTATCTGCCACGTGA
238
- TACTTGATATATTTGTAATGAGCGGAGCAGGGTAGATGACTAATATACAGGGTCGTCTAGGTTTGCACGAATGCAGACAT
239
- CATCCGCGCAAGGCCCGGACGGCTGTACTCACACAAGCGTAGGTCTCCATTCTCCCTCAGCCAGCACTAAGATTCCCACG
240
- TGACCAGGGCGACGGGCCCTCAGCCAAACGTATACCTTGATATCTACTTAAGTCAAGGTTGACTCCGAACCCTATGGGTC
241
- GGTGCCGTTAACAGGGAGTCTATAGTCTCGGCGTTTCCATTGTTGTTTCAAACTCCTGCTTATAAGGGTGAAAGCGCTGG
242
- AGGGCATAGTTTATGCCCAAAGTTGCGCGTAGATCCGTCGGGATAGTGTGCTATAATAAGGACTGCTCGAGGTGTAGGCG
243
- GTAACGGCTCCCGCCTTCAGTAGGGCGCGGAACTCGAATCGGAGTTACAGGACTTGACCCGAGTCATATCCAAGTTTATG
244
- TTAGCCCGATCGGATCTCGGATGCTCGTATCTGCGACGAGGTCGAAGACGGACGAAATACGATTCAACCGCGCGAACCAT
245
- TGCATCTAACCTTTAGCCTCAATGGGTGTTAACGTGGTGGTGCTCACTGGTCGTACTCTTTTGTGCAACTACTTCCAGTA
246
- TGAACAACAGTCAAGTTGCGACATGATGCCTCTTTACGTGATTCCCACAGTTTCCCACCTCAGGATGCTTGCTTCTTTAG
247
- CTAAACCCAATAGTTATGGCGGCCACCTTCAGACGTCCCACGAGGACGGCTATGACGTTGCTAAACGCATTCGCCGCCGA
248
- AAGGTAGCGCTAACGAGTTCTGTAGAGTTTGTTCCGGGCCAGATCTCCAGGATGGTCGCAACAACGCAGTACCGGTTTTA
249
- TACTGGTGAACCCTCTACCTGTTATTAAGTTTACAGCGTTGTCCTACGGTACATGGTCGTGAGTACTCGCGTAGTCAAAC
250
- GCCAGGACTAGCAGCGAGAATTATTGGTCGCGATACTTACTACAATAACTTACCCGATATTGACAGTGCAGGGTTGAAAG
251
- AGATGGACAGTTGAATATCTACTTTTGACGGAATCCTCAAAACTCCCTCCACCTACAGGTAACGGCCCTGTCCGGGACCG
252
- CTTTCTTGCATATATTGGTTTCCACAGAGCGTATCTAAGTTAGTCTCTTGACCGTTCACCGACTCTAGGGCGACTCGTTA
253
- TCGCCCTCCGAAACGATGCTATTCGTTACCTCAATGATGACAGTTGGTCAGACGTAAGTGATCCCAATCTCACTCGTGCC
254
- TTGTCCACCAGTTCCGTGAAGACGAAGCAATACGCGGAATACGTGGCTTCGTAATATTTTGACGATATGGGGCTGGGACG
255
- CTCAAGACTTCCAGTGACAAACAAAGTGAAGAGCAACTTGCATCCCTCATCATGACACTATTACCAGAGTAGCCGATGGA
256
- TTAACGCTAATTTGGTCAGGGCAGCTATCGCATCCCGCAGGTGTAGGCGGAGACTTTTTTTTTTTGCGAGTTGACAGGTA
257
- ATCTCACGGTATAAGCACGGTTATTTACGCAAGCGACGTCCCTGGGAGAATCCGCCCACGGTAGGACCCCATAATCCATA
258
- AATACTGCGGTCGAAACCGTTCATATCGTGATCAGGAACCTGCTTTCTAGGGATGCGGTCCCCGCATTCAGAGTTCTACT
259
- TTGGCCAGCGTGAGACGTTAACAACCCACTTACGCGGTACATTGAAGTCGTTCGAGTCCAGTGTGACCTGTGTACCGAAT
260
- AACGTGTAGACCAGCGCGTCTACGACTTAGCGCGGCTCCACTCCAAAGCACCTTTTGGGACTTTGCCAACGAGCCTGTTG
261
- GCCGTTAAGCGGTATTTGCACAAACTAGATCACCCTAGTGTCGGTAACCGACTCACCCTATTGGGATCATCGTGAGCTCG
262
- AAACACTAGGCGGACCAACGGATGAGCATTTGATTCGGCTCTACAGAGCTTGTCGCCAGAGAAAAACTGTGGCAACTCTA
263
- CGCTCGCGGGGAATTGACTTTAGCGGCCCCCTAGACAGGTGTGGGACACCTAGTCTAGATTCACGTCCTACACGACATAA
264
- CAGCACCTTCCTGGCCAGCCCAGAAATATGTACCTGGACGACACTCCAGTCCTTCCGACGCCATAATGTGAGCCGTAGCG
265
- CCCACGACGATCAACGAGGAGAAATTTACAAAGGCTAGTGTGAATGCTACGTCGTCTACCCATTGCTCCATCGAAACGAA
266
- CGCAACGCACAGCATACAACGTTCTACCATGCCGGAGCGCGGATCCTCAAGTACAGAAAACAGTAGGTCTAAACATGATC
267
- CGAACAAATCGGTAGGTTTACACAGCTACCTCCGTCCATATGGCGTACTGCATCGATCGTGCTTACTACGGTCATCGCCG
268
- GCCCGCGATGCACGTACGAAGGAATACCCTGTCTGCCCCCGCGCGAGCTTACGCTGTCTCGCACATACCGAGCACTGTCG
269
- CTTCGAAGCTAAACTATGAGCCCAGCCGAGCTCCTTATGGCCGCAACGCTGGTGCGCCAGTCTGATAAATTCCACACGTA
270
- CACGATCCTCGTGTAAGATCTCGGGCAGTAGTAAGTCATTATCACATGGTTAGGAGATGATAGAATACATGGGTTCTGGT
271
- AGCTACAACACAGGATTTGTGAACCCTTGGCCCTTTGGTGAGTGCTACAATAAAATTCTCCGTATGGGACTAACCTAAAG
272
- GGTGCTGCGATTGACTTCCCGGCCCAGGTTAGATGTCCATATCATTCATACATTCCCGACCGACCCAATGCCTAAATCAG
273
- AGGCGCCTTAGCTAGTTCTTGTATGTGTGCCACGATCCAGGCCACGCAGACACGACCCCTCGGCGAGTGATCACCATTAC
274
- CGGATTTGGCATCGAAGTCTTTTTCTGGGAAGTTAGCCAGTTTGGTGTGCGGTGCTTAGAATCTTATTCCCAGTCAAACG
275
- CCCCTGAGGACGAATTGCTATACCCTAGTTGCCACGCCGGAACCATCTTCGGGAGAGTAGACAAATCCGAGTTAGATATG
276
- TTAGCGTCTTCGTGGAGTCTGAAATGTATCACTTCTACCAGCAGAATACGCGAATGTCTGTTTGCCCTGGATGAGCGGAA
277
- TTGGCTTAAAAGCACAGACTACGAGCATTTTGAGTACGGTTCCATATCGCGATGTAATTACCTATACTAGGTTATCGCTA
278
- GTACGAATAGCGAAGTACAGTGTAGCAGGCCCTTTGTTAGCAAGTTGCTCTAAACAGTTGTCAATACGTAGGCACAATAG
279
- TGCGATATCTTCCTAAATCCGGGAAGCCATGGCGCTGGGCAGAATATCACATACGGAATAATCAACCTCCATATTTGGTT
280
- CGTTTTACTCGATGAGTGCCCCTTGCTTGAGACGAGCGTTCTGAGTTGATGGCATGTCGAAAGGTTTACGCGGTGAGTAG
281
- AGCACTCTTGACCCCTACAGATCGGAATCCTCGGAGGTAGGACAGTTGGAACTTCACAGTTAACCTTTGTTCGATTGCAT
282
- GAAGGTTGTGTTCTGGGAGTAGGCTCCCAAGGTAGCGGTTCATGCCTGGGGGCAGCCCTAAGTTTGTATATATGTGAGTT
283
- TGCGTCTGAACACATTATAGCATGAGGAAACGTAAGCTTTCTGGAGGGATCTTCTAAAGCCAGGTATCGCCCGCTACGAT
284
- GCCGGAGCGCAGGGTGGATTCACAGCTACCTCGTGCCTCAAAGGCTTAAGGCTAATCCATAGCAACAGTGCGAAAGGACG
285
- TCCTTTCAGATTTCGAAAGGTGCTGACACATACAAGGGTCAGGGCGGTCCTACCCTTCTGATGTCCCTACCTGGTTTTTT
286
- AGCAAGGGTCAAGGCTAGGCTTATACTCCCGAACGCTTTAAACATCTATTCCCACCCCTGACGGGGGGAAGTTGCCGCGT
287
- TAAGTATAAGAATAAGATTTAACAGTACACTTTAGGTTCCTCTTCCGCGAGCCGTCATACAGCACCGAGCGCCGTTGAAA
288
- CGCAATTAACGCGTATTTGTCGCTGCGAAAAAAAAACGCTCGCCAGCATATTGGAGTGTCGACTTGAAATATTGAACAAC
289
- ACCGCATATCAAGACGAATAGTAGGGCTTCACTACCTCCACCTGACGGCCCTAGGACTTATACTCGAAAAAGACCTTCCA
290
- TCACGATGTCCCTTACCGGCGAGAGTGCTATAATACGCATGAATAGCAGATCTTGCCGTCGCTGAGTGTCACCCAGGGTT
291
- GCTCCCAGAAAGAGATAGGGCGGAGAGCCATCGACAGCAGCTCTCGATCTAGGTGGTAGCAGGCTAAGGAGTCGTGTCGT
292
- CGCGCCCGAGTTGGAACCATTATCGATGTACATCAATGCAGTGAATGATGCTGATAGACTCGGGAGTTTGCCTCAAAACC
293
- CCAGAGTTACGTAGAAGACGCAGGTCTATTAGTTAGAAGGAGTCAGTATTGGCCTTTGAAAGATCTTATGCTCATGCCCT
294
- AATCGTAGTTAAACGGCGAATCCGTGGAAGGCCAATCTGGCCGGTTTTGACCCCCGGACTCTTAAGACGTCCAATGTGGC
295
- TAGACATAAGTCAACGAATTACCTATACCGAGGGCGGGAACCGGCCAATTTATTACGAGAGCACGAGAGCCTTGTAGCGA
296
- CCCAGCACACTAGTCCTCGAGTCCCTCTCATCCTGAGACGTAGAATAGCATATACCGCCTAGGAGAGAATGAGCGCGTCT
297
- AGGCTTCCGTCGCCCTCTCCGTCGTCTCGGGTGAACCGTAAGTCCTTCCGCATTCCCTTACCTCAAGCGCGTTGGTGTGA
298
- AGTGGTATTGAGGCCCAGTCTCTATAACGCATATACTTGTGCACTCTATTACTTACCATGGGAACCAATGGCACTCTACG
299
- AATCATGCTCACAGCTGAGCAACGGTGCTGCTCACCAATTACATATGAGCTCGTGGATTTAGCGTTGGAGCGGAACGATG
300
- AATTTCCATCTGTTCGCGCGCATCCACTAATCCAATATACGGTTATCCCGAGCGCTACTAGTGTCTGACCGGGTTGGTAG
301
- CCGAACCCTTTTGCAAGCCGCGCTTAGTGGATGTTGAAGTGGGAGTGATAAGCTTAAGCCGCCACGTTCGGGGGGGACTC
302
- GTTTATATTGGTGCTGGAATTACGAACGGCGTGATTCGTAGTCGGCCCTAATCGGGCGCGACCGAACACATGTAGTACTG
303
- TCGAGGCGGTTTAAACCCCCACAGTAGGTACTCTATCAGCAGAATTATGCTAGAAAGTTTCACACACAACTTTCCGCATG
304
- AGGCTCATGCGGAGCGTCGCACTCCCAATGGCCAGTGCCGGTAGTCGATGTTTGGTCGGAACTTAGTTCCTTCGGAATAA
305
- CGAACCGGATTTAAAAGAGCCTCAGGAGAACCTAAACGAATCCGTACGCATCTTGCCCAAGGTTGCTGAGCCTCGTCGCC
306
- TTTCTCAGTTCCACCTACATTAATGCAATGCGTTCGAAGCTTGACCTGCAAACAGGAATCAAGTTCAGACAGAGTGCAAG
307
- AGTTTCGCAGATAATTGGGAGACGACCCACTTGGATATAGGTGCTTTTTGAGATGTGTGTACGACCGTCCTTTCGAGCAT
308
- ACCTACGGGTTACAATTGCTCCGGTAAGTCAGGCACATAGAAAACATAGCCACTACTGAGGTGTATCAAGATTACCTCAT
309
- GTAGACTTGAAATACAGCACATCCGCTTTAAGCTTAACCGATGTAGAACAGCATTTTGGGCGGCGTTGACAGCGTGGCCC
310
- GCTCACCGGTTTGCTCCCTTCTCACCAAATAACCAATGAGCACGACTTTGGTGACTGGACTGCCAGATGACGGCTACAAC
311
- CCGTTTTTGGTTCCGAATTCCGCTCTAACTCAACTAACATCCATACTATATGCGCCAGGATATTCTCGCGGTTGGACCCC
312
- CCTGCCAATTCGGGTTAAAACCACTCCGCACCCCCATGTAGGGGAGCTGGGCCCGCATTACAATATGCGAATCGATCCCG
313
- CAGATGGACGCTCACAAAATTCAGTCCTTTCACGACTCCGCTCATATAGACGGTAGAAGGGATACTGAGGCTGTTAGATA
314
- GGACGTCGAGCATGGCGTAGACGAGCGCAACCGGGTCGAAGGCCCGCATTACCGTGACACCCAGTTGAAAGGATTTACAC
315
- TGCTTCATATCGATATTTACCACTTTGTAATTGGGAGCTCAAAGACCTAAGTCAACACGGACCATCATACAGGGTCGCCA
316
- GTAAATGAGAAGCGCTGTCTGTGCCATGGAGAAGCGCTGCTACAGCACACAACGAACAATCTGCATGTGAAGGAGGGTGC
317
- CTCTTTTGGGATGAGCCTACGGGGATGTGTATCCCATGCCCTGTAGGCAGTTGGGACTAGCGCCGAGCTAATCTAGTAAC
318
- TAAGGCGCCAGCCGCGGCTGTTTGCCGAAGTCGTGCTGACTGCTGTACAACGAAGGGCGAGCGTGTTAACATGCCTACAC
319
- GTTGACCTAGACTAGTCCAAGTTCTGAAAGTCCCATTAGGTCCGGGTAGTACAGTCCTCGGTTCCAGTCCCATCTTGTGC
320
- CGCCAAGGACAAGCGATCATCAAAATCTGACTGAGTAATTGAATCAGCTACCTCAGACCACATTCAGCTCTCGGTAAACA
321
- TGCGATGGCTTGTGGTTGCACCGTAAAAGGGGGAAGCCCATCCATCCTGTAACACCACAATCGCGCGTAGCTTAATAACG
322
- GCTCCACCATTAGAATTCGATCGAGAGACACTGGTTTCAAGAGCCTTCCCTTTTGCTTTAGTGGGCCAAATCGCAACCCT
323
- GCTCCCCTCCCTTACGCCTTATACACTTCAGTGCAAATTCATCGCGTTCGAGCGAACAACCTGGACTTCTGTTGTACGTA
324
- GTCCACGGGGGCTTTATTCATTATAGAAAGCCCCCTACTGTACACCGTTTATCATGGTTCACATCATGAGCTGATCACCT
325
- AGAGAGTCGTCATGCACATTCGCACTAACAAGGACATATGAGTAACCGGGAGAG`.replace(/[\r\n]+/gm, '')
326
-
327
- const target = `cacactagccccgtcagcgacggtgcgcggccgctgccctgcagcgaatggggctaacac
328
- gcataaaacgcccgcataaccactcgagctacgggaattcactcaggctgttgcttcgac
329
- gtgtagtctcattacataatcataatacctccaagaccaacggctgctcatgactctctt
330
- accttgttagggacatttcggcactagggaagagctgaggactttgaaaacgtcgataaa
331
- accatcgcgggaactagctgcgttagaactccatattttacgggtcgcaagcttgaggtc
332
- ctgtcccggcagctgcaagtgctacggcaggaggggatctacctaacgtgcagtaacgag
333
- cccctgcccgtaatgaggcgtactcgtctctaatcgtcagtaagttactatgtccgagga
334
- cgcctctacgagttgaactctggctaggcccacctgtccgcgccctgctcgggtacccca
335
- tctgcttatccaacttcacctcgccttacggaatctctggttgccagtcatccgatggtc
336
- attaagcagcgtggtacatcgtagccaatacttcagggcgccagccatattcccagccaa
337
- gcggctgcataattacagcgcctggcacgactaatcgatcccacaagcctggtagatgac
338
- ccttagccctaaagcgccctctgacctatctgcacgtgatacttgattatttgtaatgag
339
- cggacagggtagatgactaatatacagggtcgtctaggtttgcacaatgcagacatcatc
340
- cgcgcaaggcccggacggctgtactcacacagctagctccatctccctcagcagcactaa
341
- gattcccacgtgaccagggcgacgggcctcagccaaacgtatccttgatatctacttaag
342
- tcaaggttgactccgaaccctatgggtcggtgccgttaacagggagtctatatctcggcg
343
- ttccattgcttgtttcaaactcctgctataaggtgaaagcgctggagggcatagtttatg
344
- cccaaagttgcgcgtagatccgtcgggatatgtgctataataaggactgctcgaggtagg
345
- cggtaacggctcccgccttcagtaggcgcggaactcgaatcggagttacaggacttgacc
346
- gagtcatatccaagtttatgttacccgatcggatccggatgctcgtatctgcgacgaggt
347
- cggaagacggacgaaatacgattcaaccgcgcgaaccattagcatctaacctttagcctc
348
- aatgggtgttaacgtggtgggctcactcggcgtactctttgtgcaactattccgtatgaa
349
- caacagtcaagttgcgacatgatgctcttacgtgattcccacagtttcccacctcaggat
350
- gctttctttagctaaacccaatagttatggcggcaccttcagactcccacgaggacggct
351
- atgacgttgctaaaccattcgccgccaaaggctagcgctaacgagttctgtgagtttgtt
352
- ccgggccagatctccaggatggtcgcaacaacgcagtaccggttttatactggtgaccct
353
- ctacctgttattaagttacagcgttgtcctacgtacatggtcgtgagtactcgcgtagtc
354
- aaacgccaggactagcagcgagaattattgtcgcgatacttactacaatacttacccgat
355
- attgacgtgcagggttgaaagagatggacagttgaatatctattttgacggaatcctcaa
356
- aactccctccacctcaggtaacggccctgtccgggaccgcattcttgcatatattggttc
357
- ccagagcgtatctaagttagtctcttgaccgttcaccgactctagggcgactcgttatcg
358
- ccctccgaaacgatgctttcgttacctcaatgatgacaggctgtaacgtaagtgatccca
359
- atctcactcgtgccttgtccaccgttccgtgaagacgaagcaatacgcggaatacgtggc
360
- ttcgtaatattttgacgatatggggctgggacgctcaagacttccatgacaaacaaagtg
361
- aagagcaactgcatccctcatcatgatcactattaccagagtagcgatggataacgctaa
362
- tttggtcagggcagctatcgcatcccgcaggtgtaggcggagactttttcttttgttgcg
363
- agttgacaggtaatctcacggtataagcacggttatttacgcaagcgacgtccctgggag
364
- aatccgcccacgtaggaccccataatccataaatactgcggtcgaaaccttcatatcgtg
365
- acagaaccgctttctagggatgcggtccccgcattcagagttctactttggccagcgtga
366
- gacttaacaactccacttacgcggtacattgaagtcgttcagtccagtgtgacctgtgta
367
- ccgaataacgtgtagaccagcgcgtctacgacttagcgcggctccactccaaagcacctt
368
- ttgggactttccaacgagcctgttggccgttaagcggtatttcacaaatagatcacccta
369
- gtgtcggtaaccgactaccctattgggatcatcgtgagctcgaaacactagaggcggacc
370
- aacggatgacatttgattcggctctacagagcttgtcgccagagaaaaactgtggcaatc
371
- tacgctcgcggggaattgactttagcggcccctagacaggtgtgggacactagtctagat
372
- tcacgtcctacacgacataacagcaccttcctggccagcccagaaatagtacctggacga
373
- catccagccttccgacgccataatgtgagccgtagcgcccacgacgatcaacgaggagaa
374
- atttacaaaggctgtgtgaatgctacgtcgtctaccattgctcatcgaaacgaacgcaac
375
- gcacagcatacaacgtttaccatgccggagcgggatcctcaagtacagaaaacagaggtc
376
- taaacatgatccgaacaaatcggtaggtttacacagctacctcgtccattggcgtactgc
377
- atcgatcgtgcttactacggtcatgccggcccgcgatgcacgtacgaaggaataccctgt
378
- ctgcccccgcgcgagttacgctgtctcgcacataccgagcactgtcgttcgaagctaaac
379
- tatgagcccagccgagctccttatggccgcaacgctggtgcggccagctgataaattcca
380
- cagtacacgatcctcgtgtaagatctcgggcatagtaagtcatttcacatggttaggaga
381
- gatagaatacatggttctggtagctcaaccaggatttgtggaacccttggcccttggtga
382
- gtgctacaataaaattctccgtatgggacaaccaaagggtgctggatgtgacttcccggc
383
- ccaggttagatgtccatatcattcatacattgcccgaccgacccaatgcctaaatcagag
384
- gcgccttagctagttcttgtagtgtgccacgtccggccacgcagacacgaccctcggcga
385
- gtgatcaccattaccggattggcatcgaagtctttttctgggaagttagccagtttggtg
386
- tgcggtgcttagaatcttattcccagtcaaacgcccctgggacgaattgctaaccctagt
387
- tgccacgccggaaccatcttcgggagagtagacaaatccgagttagatatgttagcgtct
388
- tcgtgagtctgaaatgtatcacttcaccgcagaatacgcgaatgtctgtttgccctggac
389
- tgacggaattggcttaaaagccgactagagcattttggtacggttcctatccgcgatgta
390
- attacctatctaggttatcgctagacgaatagcgagtacagtgtagcaggccctttgtta
391
- gcaagttgctctaaacagttgtcaaaacgtaggcacaatagtgcgattcttctaaatccg
392
- ggaagctcatggcgctgggcagaaatatcacatacgggaataatcaacctccattttggt
393
- tcgttttactcgatgagtgccccttgcttgagacgagcgttctgagttgatggcatgtcg
394
- aaaggtttacgcggtgagtagagcactttacccctacagatcggaatcctcgaggaggac
395
- agttggaacttcacattaacctttgttcgattgcatgaaggttgtgttctgggagtaggc
396
- tcccaaggtagcggttcatgctgggggcagccctaagtttgtattatgtgagtttgcgtc
397
- tgaaactacatttagcatgaggaacgtaagctttctggagggatcttctaaagccaggta
398
- tcgcccgctacgatgccggagccggtggttcacagctacctgtgctcaaaggcttaaggc
399
- taatcatagcaacagtgcgaaaggacgtctttcagatttcgaaaggtgctgacacaacaa
400
- gggtcagggcggtcctacccttctgattccctacctggttttttagcaagggtcaaggct
401
- aggcttatactcccgaacgctttaaacactatcccacccctgacggggggaagttgcgcg
402
- ttaagtataagaataagatttaacagtacactttaggttcctcttccgcgagccgtcata
403
- cagcaccgagcgccgttgaaacgcgattaacgcgtattgtcgtgcgaaaaaaaaacgctc
404
- gccagcatattggagtgtcgacttgaaatattgaacaacaccgcatatcaaggacgaata
405
- gtagggcttcactacctccacctgacggccctaggacttatactcgaaaaagaccttcca
406
- tcacgatgtcccttaccggcgagagggctatatacgcatgaatagcagatcttgccgtcg
407
- ctgagtgtcacccagggttgctccagaaaggagatagggcggagagccatcgacagcagc
408
- tctcgtctaggtggtagcagctaaggagtcgtgtcgtcgcgccgagttggaacattatcg
409
- atgtacatcaatgcagtaatgatgctgatagactcgggagtttcctcaaacccagagtta
410
- cgagaagacgcaggtctatcagttagaaggagtcagtattggcctttgaaagatcttatg
411
- ctcatgcccaatcgtagttaaacgcgaatcgggaaggccaatctggcggttttgaccccc
412
- ggactcttaagacgtccaatgtggctagacataagtaacgaattactctataccgagggg
413
- cgggaaccggccaatttattacgagagcacgagagccttgtagcggccagcacactatcc
414
- tcgagtccctctatcctgagacgtagatatacatatacgcctagagagaatagccgtcta
415
- ggcttccgtcgccctctccgtcgttcgcgtgaaccgtaagtcttccgcattcccttcctc
416
- aagcgcgttggtgtgagagtggtattgaggcccagtcttataacgcatatacttgtgcac
417
- tctattacttaccatgggaaccaatggcactctcgaatcatgctcacagctgagcaacgg
418
- tgctgctcaccaattacatatgagtcgtggtttagcgttggagcggaagatgaatttcca
419
- tctgttcgcgcgcatcactaaccaatatacggttatcccagcgctatctagttctgaccg
420
- ggttggtagcgaacccttttgcaagccggcttagtggatgtgaagtgggagtgataactt
421
- aagccgccacgttcgggggggactcgtttatattggtgctggaatacgaacggcgtgatt
422
- cgtagtcgccctaatcgggcgcgacaacacatgtagtactgtcgaggcggtttaaaccca
423
- cagtaggtactctatcagcagaattatgctagaagtttcacaacaactttccgcatgagg
424
- ctcagcggcagcgtcgcactcccaatggccagtgccggtagcgatgtttggtggaattag
425
- ttccttcggaatacgaaccggatttaaagagcctcggagaacctaaacgaatccgtacgc
426
- atcttgcccaaggtgctgagccttgtcgcctttctcagttccacctacattaatgcaatg
427
- cgttcgaagctctgaccgcaaacaggaatcaagttcagacagagtgcaagagtttcgcaa
428
- taattgggaacgacccacttgatataggtgcttttagagatgtgtgtacgaccgtccttc
429
- gagcatacctacgggttacaattgctccggtaagtcaaggcacatagaaaacatagccaa
430
- ctgagagtgtatacaagattacctcatgtagactgaaatacacacatcgctttaagctct
431
- caaccgatgtagaacagattttgggcggcgttgacagcgtgcccgctcaccggtttgctc
432
- ccttctcaccaaataaccatgagacgactttggtgactggactgccagatgacgggctac
433
- aaccgttttggttccgaattcgctctaactcaactaacatcatactatatgcgccaggat
434
- attctcgcggttggacccccctgccaattcgggttaaaaccactccccccatgtagggag
435
- ctgccgcaattacaatatcgacgatcccagatggacgctcacaaaatatcagtcctttca
436
- cgatccgctcatatagacggatgaagggactgaggctgttagatagtgacgtcgagcatg
437
- gcgtagacgagcgcaaccgggtcgaggcccgcattaccgtgacacccagttgaaaggatt
438
- tacactgcttcattcgatatttaccactttgtatgaggagctcaacctaagtcaacacgg
439
- accatcatacaggtcgccagtaatgagaaggctgctgtgccatggagaagcgctgctaca
440
- gcacacaacgaacatcttgcaatgtgaaggagggtgctcttttgggatgagcctacgggg
441
- atgtgtatccctgccctgtaggcagttgggacttagcgcgactatctagataactaaggc
442
- gccagccgcggctgtttgccgaagtcgtgctgatgctgtacaacgaagggcgagcgtgtt
443
- aacatgctacacgttgacctagactagtccaagtctgaaagtcccaatttaggtcgggta
444
- gtacagtcctcggttccagtcccatgttgtgccgacaaggacaagcgatcatcaaatcga
445
- ctgaaattgaatcagctacctcagaccacattcagctctcggtaacatgggaggcttgtg
446
- gttgcaccgtaaaagggggatagcccatccatcctgtaaacctacaatcgcgcgtagctt
447
- aatacgctcacattagacattcgatcgagagacctggtttcaagagccttcccttttgct
448
- ttagtgggccaaatcgcaaccctgctcccctcccttacgccttatacacttcagtgcaaa
449
- ttcatgcgttcagcgaacaactggacttctgttgtacgtagtccacgggggcttattcat
450
- tatagaaagccccctactgtcaccgttatatggttcacacatgagctgatcacctagaga
451
- gtcgtcatgcacattcgcctaacaaggacatatgagtaaccgggaggg`.replace(/[\r\n]+/gm, '')
452
- const cigar =
453
- `8M1D10M1I3M1I36M1I37M1I13M2I18M1I7M1I4M1D119M1I13M1I27M1I46M1I13M1D2M1D19M1I22M1
454
- D19M2I43M1I21M1I16M1I6M1I55M1I20M1I34M1I4M1D23M1I18M1D10M3I8M1I11M1I15M1I17M1I41
455
- M1I45M1I3M1I3M2I5M1I10M1I35M1I16M1I70M1I8M1I8M1D17M1I5M1I59M1I25M2I29M1I34M1I25M
456
- 1I12M1I26M1D38M1D39M1I17M1I12M1I4M1I31M1I3M1I36M3I30M1I11M1I31M1I36M1I64M1I20M1I
457
- 17M1I57M1I20M1I17M1I36M1I32M1I45M2I78M1I22M2I44M1I83M1I23M1I17M1D17M1I7M1I57M2D8
458
- 1M1I38M1I12M1I2M1I5M1I55M1I8M1D28M1I90M1I32M1I6M1I28M1I33M2D18M1I49M1I30M1I21M1I
459
- 59M1I14M1I5M1I66M1I21M1I8M1I35M1I15M1I23M1I47M1I7M1I35M1I51M1I32M1I54M1D5M1I15M1
460
- I30M1I12M1I16M1I12M1I13M1I4M1I10M1D13M1I36M1I4M1I11M1I3M1D43M1D49M1I10M1I3M1I16M
461
- 1I28M1I81M1I13M1I72M1I21M1I3M1I31M1D3M1I17M2I7M1I10M1I10M1I3M1D18M1I15M1I10M1I73
462
- M1I4M1I15M1D15M1D12M1D18M1I91M2I26M1I4M1I20M1I65M1I24M1I20M2D6M1I10M1I60M3I6M1I1
463
- 3M1I3M1I20M1I24M1I28M1I31M1I61M1I3M1I25M1I100M1I6M1I69M1D99M1I51M1I7M1D35M1I14M1
464
- I22M1I11M1I25M1I26M1I7M2I12M1I67M1I14M1I7M2I16M1I50M1I10M1D9M1D48M1I12M1I15M1I15
465
- M1D3M1I6M1I6M1I8M1I3M1I30M1I17M1I15M1I20M1D21M1I55M1I51M1I6M1I18M1I27M1I6M1I18M1
466
- I7M1D5M1I17M1I19M1I12M1I17M1I47M1I23M1I18M2I31M2I36M1I10M1I22M1I4M1D32M1I11M1I4M
467
- 1I16M1I13M1I10M1I38M1I58M1D5M1I42M1I10M1I11M1I37M1I39M1D22M2I6M1D6M1D20M1I9M1I5M
468
- 1I9M2D19M1I23M1I38M1I5M1I30M1D10M2I16M1I20M1I65M4I10M1I8M3I4M1D10M1I3M2I6M2I20M1
469
- D15M1I25M2I18M1D37M1I49M1I20M2I2M1D8M3I27M1I10M1I9M1I4M1I46M1D15M1I35M1I21M1D5M1
470
- I3M1I2M1I6M1D43M1I33M1I27M1I13M2D6M1I59M1I5M1I6M2I39M1I9M1I28M1D43M2I5M2I8M1D15M
471
- 1I92M1I6M1I9M1I32M1I28M1I5M1I4M1I10M1I39M1I30M`.replace(/[\r\n]+/gm, '')
472
-
473
- expect(generateMD(target, query, cigar)).toBe(
474
- '8^C128^A218^C2^G41^A218^C31T9^T10G0C293^C232^G38^A46C1G176A2G1C308A19C99C1G0T0A161^T81^TC4G196^T217^AG590^G117^G67^G43^G327^C21C28^C94A40^T15^A12^G112T155^AC0T75C301G86^G93G63^G169C70G75^T9^G48G41^T59C48^G209^T261^C134T47^C83A60^A28^A6^A43^CT2C112^G10G122^A39^A32A0T24^T108^A98T0C0T3^A71^T16^A116^AT37G8A74G30^T18A0C1T21C4A7^C268G1',
475
- )
476
- })
477
-
478
236
  test('getNextRefPos basic', () => {
479
- const cigar = '10S10M1I4M1D15M'
480
- const cigarOps = parseCigar(cigar)
481
- const iter = getNextRefPos(cigarOps, [5, 10, 15, 20, 25, 30, 35])
237
+ const cigar = parseCigar('10S10M1I4M1D15M')
238
+ const iter = getNextRefPos(cigar, [5, 10, 15, 20, 25, 30, 35])
482
239
  const [...vals] = iter
483
240
  expect(vals).toEqual([-5, 0, 5, 10, 14, 20, 25])
484
241
  })
485
242
  test('getNextRefPos with many indels', () => {
486
- const cigar = '10S4M1D1IM10'
487
- const cigarOps = parseCigar(cigar)
488
- const iter = getNextRefPos(cigarOps, [5, 10, 15])
243
+ const cigar = parseCigar('10S4M1D1IM10')
244
+ const iter = getNextRefPos(cigar, [5, 10, 15])
489
245
  const [...vals] = iter
490
246
  expect(vals).toEqual([-5, 0, 5])
491
247
  })