@teselagen/sequence-utils 0.1.22 → 0.1.23

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 (135) hide show
  1. package/index.js +12030 -26126
  2. package/index.mjs +12119 -26124
  3. package/index.umd.js +24056 -38154
  4. package/package.json +2 -2
  5. package/src/DNAComplementMap.js +32 -0
  6. package/src/addGapsToSeqReads.js +417 -0
  7. package/src/addGapsToSeqReads.test.js +358 -0
  8. package/src/adjustAnnotationsToInsert.js +19 -0
  9. package/src/adjustBpsToReplaceOrInsert.js +50 -0
  10. package/src/adjustBpsToReplaceOrInsert.test.js +59 -0
  11. package/src/aliasedEnzymesByName.js +7363 -0
  12. package/src/aminoAcidToDegenerateDnaMap.js +32 -0
  13. package/src/aminoAcidToDegenerateRnaMap.js +32 -0
  14. package/src/aminoAcidToDnaRna.test.js +27 -0
  15. package/src/annotateSingleSeq.js +29 -0
  16. package/src/annotateSingleSeq.test.js +64 -0
  17. package/src/annotationTypes.js +23 -0
  18. package/src/autoAnnotate.js +242 -0
  19. package/src/autoAnnotate.test.js +1039 -0
  20. package/src/bioData.js +431 -0
  21. package/src/calculateNebTa.js +34 -0
  22. package/src/calculateNebTa.test.js +57 -0
  23. package/src/calculateNebTm.js +127 -0
  24. package/src/calculateNebTm.test.js +32 -0
  25. package/src/calculatePercentGC.js +3 -0
  26. package/src/calculatePercentGC.test.js +14 -0
  27. package/src/calculateTm.js +297 -0
  28. package/src/calculateTm.test.js +7 -0
  29. package/src/computeDigestFragments.js +179 -0
  30. package/src/computeDigestFragments.test.js +73 -0
  31. package/src/condensePairwiseAlignmentDifferences.js +85 -0
  32. package/src/condensePairwiseAlignmentDifferences.test.js +66 -0
  33. package/src/convertAACaretPositionOrRangeToDna.js +24 -0
  34. package/src/convertAACaretPositionOrRangeToDna.test.js +34 -0
  35. package/src/convertDnaCaretPositionOrRangeToAA.js +24 -0
  36. package/src/convertDnaCaretPositionOrRangeToAA.test.js +37 -0
  37. package/src/cutSequenceByRestrictionEnzyme.js +301 -0
  38. package/src/cutSequenceByRestrictionEnzyme.test.js +296 -0
  39. package/src/defaultEnzymesByName.js +278 -0
  40. package/src/degenerateDnaToAminoAcidMap.js +5 -0
  41. package/src/degenerateRnaToAminoAcidMap.js +5 -0
  42. package/src/deleteSequenceDataAtRange.js +5 -0
  43. package/src/deleteSequenceDataAtRange.test.js +146 -0
  44. package/src/diffUtils.js +64 -0
  45. package/src/diffUtils.test.js +74 -0
  46. package/src/doesEnzymeChopOutsideOfRecognitionSite.js +10 -0
  47. package/src/doesEnzymeChopOutsideOfRecognitionSite.test.js +41 -0
  48. package/src/featureTypesAndColors.js +152 -0
  49. package/src/featureTypesAndColors.test.js +52 -0
  50. package/src/filterAminoAcidSequenceString.js +13 -0
  51. package/src/filterAminoAcidSequenceString.test.js +22 -0
  52. package/src/filterSequenceString.js +22 -0
  53. package/src/filterSequenceString.test.js +13 -0
  54. package/src/findNearestRangeOfSequenceOverlapToPosition.js +39 -0
  55. package/src/findNearestRangeOfSequenceOverlapToPosition.test.js +31 -0
  56. package/src/findOrfsInPlasmid.js +26 -0
  57. package/src/findSequenceMatches.js +133 -0
  58. package/src/findSequenceMatches.test.js +286 -0
  59. package/src/generateAnnotations.js +34 -0
  60. package/src/generateSequenceData.js +206 -0
  61. package/src/generateSequenceData.test.js +22 -0
  62. package/src/getAllInsertionsInSeqReads.js +83 -0
  63. package/src/getAllInsertionsInSeqReads.test.js +26 -0
  64. package/src/getAminoAcidDataForEachBaseOfDna.js +163 -0
  65. package/src/getAminoAcidDataForEachBaseOfDna.test.js +424 -0
  66. package/src/getAminoAcidFromSequenceTriplet.js +22 -0
  67. package/src/getAminoAcidStringFromSequenceString.js +18 -0
  68. package/src/getAminoAcidStringFromSequenceString.test.js +18 -0
  69. package/src/getCodonRangeForAASliver.js +63 -0
  70. package/src/getComplementAminoAcidStringFromSequenceString.js +11 -0
  71. package/src/getComplementSequenceAndAnnotations.js +20 -0
  72. package/src/getComplementSequenceString.js +19 -0
  73. package/src/getComplementSequenceString.test.js +13 -0
  74. package/src/getCutsiteType.js +10 -0
  75. package/src/getCutsitesFromSequence.js +17 -0
  76. package/src/getDegenerateDnaStringFromAAString.js +8 -0
  77. package/src/getDegenerateRnaStringFromAAString.js +8 -0
  78. package/src/getDigestFragmentsForCutsites.js +105 -0
  79. package/src/getDigestFragmentsForRestrictionEnzymes.js +27 -0
  80. package/src/getDigestFragmentsForRestrictionEnzymes.test.js +228 -0
  81. package/src/getInsertBetweenVals.js +28 -0
  82. package/src/getInsertBetweenVals.test.js +33 -0
  83. package/src/getLeftAndRightOfSequenceInRangeGivenPosition.js +39 -0
  84. package/src/getLeftAndRightOfSequenceInRangeGivenPosition.test.js +80 -0
  85. package/src/getMassOfAaString.js +24 -0
  86. package/src/getMassofAaString.test.js +18 -0
  87. package/src/getOrfsFromSequence.js +124 -0
  88. package/src/getOrfsFromSequence.test.js +210 -0
  89. package/src/getOverlapBetweenTwoSequences.js +30 -0
  90. package/src/getOverlapBetweenTwoSequences.test.js +23 -0
  91. package/src/getPossiblePartsFromSequenceAndEnzymes.js +121 -0
  92. package/src/getPossiblePartsFromSequenceAndEnzymes.test.js +208 -0
  93. package/src/getReverseAminoAcidStringFromSequenceString.js +20 -0
  94. package/src/getReverseAminoAcidStringFromSequenceString.test.js +11 -0
  95. package/src/getReverseComplementAminoAcidStringFromSequenceString.js +7 -0
  96. package/src/getReverseComplementAnnotation.js +23 -0
  97. package/src/getReverseComplementAnnotation.test.js +44 -0
  98. package/src/getReverseComplementSequenceAndAnnotations.js +38 -0
  99. package/src/getReverseComplementSequenceAndAnnotations.test.js +105 -0
  100. package/src/getReverseComplementSequenceString.js +17 -0
  101. package/src/getReverseComplementSequenceString.test.js +11 -0
  102. package/src/getReverseSequenceString.js +12 -0
  103. package/src/getReverseSequenceString.test.js +9 -0
  104. package/src/getSequenceDataBetweenRange.js +131 -0
  105. package/src/getSequenceDataBetweenRange.test.js +474 -0
  106. package/src/getVirtualDigest.js +125 -0
  107. package/src/getVirtualDigest.test.js +134 -0
  108. package/src/guessIfSequenceIsDnaAndNotProtein.js +33 -0
  109. package/src/guessIfSequenceIsDnaAndNotProtein.test.js +34 -0
  110. package/src/index.js +106 -0
  111. package/src/index.test.js +38 -0
  112. package/src/insertGapsIntoRefSeq.js +38 -0
  113. package/src/insertGapsIntoRefSeq.test.js +20 -0
  114. package/src/insertSequenceDataAtPosition.js +2 -0
  115. package/src/insertSequenceDataAtPosition.test.js +75 -0
  116. package/src/insertSequenceDataAtPositionOrRange.js +249 -0
  117. package/src/insertSequenceDataAtPositionOrRange.test.js +547 -0
  118. package/src/isEnzymeType2S.js +3 -0
  119. package/src/mapAnnotationsToRows.js +174 -0
  120. package/src/mapAnnotationsToRows.test.js +425 -0
  121. package/src/prepareCircularViewData.js +17 -0
  122. package/src/prepareCircularViewData.test.js +196 -0
  123. package/src/prepareRowData.js +41 -0
  124. package/src/prepareRowData.test.js +36 -0
  125. package/src/prepareRowData_output1.json +391 -0
  126. package/src/proteinAlphabet.js +257 -0
  127. package/src/rotateBpsToPosition.js +13 -0
  128. package/src/rotateBpsToPosition.test.js +6 -0
  129. package/src/rotateSequenceDataToPosition.js +48 -0
  130. package/src/rotateSequenceDataToPosition.test.js +71 -0
  131. package/src/shiftAnnotationsByLen.js +17 -0
  132. package/src/threeLetterSequenceStringToAminoAcidMap.js +106 -0
  133. package/src/tidyUpAnnotation.js +182 -0
  134. package/src/tidyUpSequenceData.js +169 -0
  135. package/src/tidyUpSequenceData.test.js +332 -0
@@ -0,0 +1,547 @@
1
+ //tnr: half finished test.
2
+
3
+
4
+ import chai from "chai";
5
+
6
+ import {getRangeLength} from "@teselagen/range-utils";
7
+ import assert from "assert";
8
+ import chaiSubset from "chai-subset";
9
+
10
+ import insertSequenceDataAtPositionOrRange from "./insertSequenceDataAtPositionOrRange";
11
+
12
+ chai.should();
13
+ chai.use(chaiSubset);
14
+
15
+ describe("insertSequenceData", () => {
16
+ it("adjusts annotations to protein-only inserts correctly", () => {
17
+ const sequenceToInsert = {
18
+ proteinSequence: "IDR",
19
+ isProtein: true
20
+ };
21
+ const sequenceToInsertInto = {
22
+ // 012345
23
+ features: [{ name: "feat2", start: 0, end: 5 }],
24
+ // M R E K
25
+ // 012345678901
26
+ sequence: "atgagagagaaa",
27
+ proteinSequence: "MREK",
28
+ isProtein: true
29
+ };
30
+ // M I D R R E K
31
+ // 012345678901234567890
32
+ // atgauhgaymngagagagaaa
33
+ const caret = 3;
34
+ const postInsertSeq = insertSequenceDataAtPositionOrRange(
35
+ sequenceToInsert,
36
+ sequenceToInsertInto,
37
+ caret
38
+ );
39
+ postInsertSeq.sequence.should.equal("atgathgaymgnagagagaaa");
40
+ postInsertSeq.proteinSequence.should.equal("MIDRREK");
41
+ postInsertSeq.features.should.containSubset([
42
+ { name: "feat2", start: 0, end: 14 }
43
+ ]);
44
+ });
45
+ it("inserts protein and dna characters at correct caret", () => {
46
+ const sequenceToInsert = {
47
+ isProtein: true,
48
+ sequence: "atagatagg",
49
+ proteinSequence: "IDR"
50
+ };
51
+ const sequenceToInsertInto = {
52
+ // 012345
53
+ isProtein: true,
54
+ sequence: "atgagagagaaa",
55
+ proteinSequence: "MREK"
56
+ };
57
+ const caret = 3;
58
+ const postInsertSeq = insertSequenceDataAtPositionOrRange(
59
+ sequenceToInsert,
60
+ sequenceToInsertInto,
61
+ caret
62
+ );
63
+ postInsertSeq.sequence.should.equal("atgatagataggagagagaaa");
64
+ postInsertSeq.proteinSequence.should.equal("MIDRREK");
65
+ });
66
+ it("inserts protein and dna characters at correct range", () => {
67
+ const sequenceToInsert = {
68
+ isProtein: true,
69
+ sequence: "atagatagg",
70
+ proteinSequence: "IDR"
71
+ };
72
+ const sequenceToInsertInto = {
73
+ // 012345
74
+ isProtein: true,
75
+ sequence: "atgagagagaaa",
76
+ proteinSequence: "MREK"
77
+ };
78
+ const range = { start: 3, end: 5 };
79
+ const postInsertSeq = insertSequenceDataAtPositionOrRange(
80
+ sequenceToInsert,
81
+ sequenceToInsertInto,
82
+ range
83
+ );
84
+ postInsertSeq.sequence.should.equal("atgatagatagggagaaa");
85
+ postInsertSeq.proteinSequence.should.equal("MIDREK");
86
+ });
87
+ it("inserts characters at correct range and computes the new size correctly", () => {
88
+ const sequenceToInsert = {
89
+ sequence: "rrrrrrr"
90
+ };
91
+ const sequenceToInsertInto = {
92
+ sequence: "atgagagaga"
93
+ };
94
+ const range = { start: 3, end: 5 };
95
+ const postInsertSeq = insertSequenceDataAtPositionOrRange(
96
+ sequenceToInsert,
97
+ sequenceToInsertInto,
98
+ range
99
+ );
100
+ postInsertSeq.sequence.should.equal("atgrrrrrrrgaga");
101
+ postInsertSeq.sequence.length.should.equal(
102
+ sequenceToInsertInto.sequence.length +
103
+ sequenceToInsert.sequence.length -
104
+ getRangeLength(range)
105
+ );
106
+ postInsertSeq.sequence.length.should.equal(postInsertSeq.size);
107
+ });
108
+ it("inserts characters at correct origin spanning range", () => {
109
+ const sequenceToInsert = {
110
+ sequence: "rrrrrrr",
111
+ // fffffff
112
+ features: [{ name: "feat1", start: 0, end: 6 }]
113
+ };
114
+ const sequenceToInsertInto = {
115
+ sequence: "atgagagaga",
116
+ // fff
117
+ features: [{ name: "feat2", start: 4, end: 6 }]
118
+ };
119
+ const range = { start: 8, end: 2 };
120
+ const postInsertSeq = insertSequenceDataAtPositionOrRange(
121
+ sequenceToInsert,
122
+ sequenceToInsertInto,
123
+ range
124
+ );
125
+ postInsertSeq.sequence.should.equal("rrrrrrragaga");
126
+ // fffffff fff
127
+ postInsertSeq.features.should.containSubset([
128
+ { name: "feat1", start: 0, end: 6 },
129
+ { name: "feat2", start: 8, end: 10 }
130
+ ]);
131
+ postInsertSeq.sequence.length.should.equal(
132
+ sequenceToInsertInto.sequence.length +
133
+ sequenceToInsert.sequence.length -
134
+ getRangeLength(range, sequenceToInsertInto.sequence.length)
135
+ );
136
+ });
137
+ it("inserts characters at correct origin spanning range with {maintainOriginSplit: true} option", () => {
138
+ const sequenceToInsert = {
139
+ sequence: "xrrrrry",
140
+ // fffffff
141
+ features: [{ name: "feat1", start: 0, end: 6 }]
142
+ };
143
+ const sequenceToInsertInto = {
144
+ // sss ss
145
+ sequence: "atgagagaga",
146
+ // fff
147
+ features: [{ name: "feat2", start: 4, end: 6 }]
148
+ };
149
+ const range = { start: 8, end: 2 };
150
+ const postInsertSeq = insertSequenceDataAtPositionOrRange(
151
+ sequenceToInsert,
152
+ sequenceToInsertInto,
153
+ range,
154
+ {
155
+ maintainOriginSplit: true
156
+ }
157
+ );
158
+ postInsertSeq.sequence.should.equal("rrrryagagaxr");
159
+ // fffff fff ff
160
+ postInsertSeq.features.should.containSubset([
161
+ { name: "feat1", start: 10, end: 4 },
162
+ { name: "feat2", start: 6, end: 8 }
163
+ ]);
164
+ postInsertSeq.sequence.length.should.equal(
165
+ sequenceToInsertInto.sequence.length +
166
+ sequenceToInsert.sequence.length -
167
+ getRangeLength(range, sequenceToInsertInto.sequence.length)
168
+ );
169
+ });
170
+ it("inserts characters at correct origin spanning range with {maintainOriginSplit: true} option", () => {
171
+ const sequenceToInsert = {
172
+ sequence: "r",
173
+ // fffffff
174
+ features: [{ name: "feat1", start: 0, end: 0 }]
175
+ };
176
+ const sequenceToInsertInto = {
177
+ // sss ss
178
+ sequence: "atgagagaga",
179
+ // fff
180
+ features: [{ name: "feat2", start: 4, end: 6 }]
181
+ };
182
+ const range = { start: 8, end: 2 };
183
+ const postInsertSeq = insertSequenceDataAtPositionOrRange(
184
+ sequenceToInsert,
185
+ sequenceToInsertInto,
186
+ range,
187
+ {
188
+ maintainOriginSplit: true
189
+ }
190
+ );
191
+ postInsertSeq.sequence.should.equal("agagar");
192
+ // fff f
193
+ postInsertSeq.features.should.containSubset([
194
+ { name: "feat1", start: 5, end: 5 },
195
+ { name: "feat2", start: 1, end: 3 }
196
+ ]);
197
+ postInsertSeq.sequence.length.should.equal(
198
+ sequenceToInsertInto.sequence.length +
199
+ sequenceToInsert.sequence.length -
200
+ getRangeLength(range, sequenceToInsertInto.sequence.length)
201
+ );
202
+ });
203
+ it("inserts characters at correct range, and doesn't clobber other properties on the existing sequence data", () => {
204
+ const sequenceToInsert = {
205
+ sequence: "atgagagaga"
206
+ };
207
+ const sequenceToInsertInto = {
208
+ sequence: "atagatag",
209
+ name: "thomasDaMan!",
210
+ circular: true
211
+ };
212
+ const range = { start: 3, end: 5 };
213
+ const postInsertSeq = insertSequenceDataAtPositionOrRange(
214
+ sequenceToInsert,
215
+ sequenceToInsertInto,
216
+ range
217
+ );
218
+ postInsertSeq.sequence.length.should.equal(
219
+ sequenceToInsertInto.sequence.length +
220
+ sequenceToInsert.sequence.length -
221
+ getRangeLength(range)
222
+ );
223
+ postInsertSeq.name.should.equal("thomasDaMan!");
224
+ postInsertSeq.circular.should.equal(true);
225
+ });
226
+ it("inserts characters at correct caret position", () => {
227
+ const sequenceToInsert = {
228
+ sequence: "atgagagaga"
229
+ };
230
+ const sequenceToInsertInto = {
231
+ sequence: "g"
232
+ };
233
+ const caretPosition = 0;
234
+ const postInsertSeq = insertSequenceDataAtPositionOrRange(
235
+ sequenceToInsert,
236
+ sequenceToInsertInto,
237
+ caretPosition
238
+ );
239
+ postInsertSeq.sequence.length.should.equal(
240
+ sequenceToInsertInto.sequence.length + sequenceToInsert.sequence.length
241
+ );
242
+ });
243
+ it("inserts characters when whole sequence is selected but maintains properties like circularity, name", () => {
244
+ const sequenceToInsert = {
245
+ sequence: "atgagagaga"
246
+ };
247
+ const sequenceToInsertInto = {
248
+ sequence: "ggggaaaa",
249
+ circular: true,
250
+ name: "testName"
251
+ };
252
+ const range = { start: 0, end: 7 };
253
+ const postInsertSeq = insertSequenceDataAtPositionOrRange(
254
+ sequenceToInsert,
255
+ sequenceToInsertInto,
256
+ range
257
+ );
258
+ postInsertSeq.sequence.length.should.equal(
259
+ sequenceToInsert.sequence.length
260
+ );
261
+ postInsertSeq.circular.should.equal(sequenceToInsertInto.circular);
262
+ postInsertSeq.name.should.equal(sequenceToInsertInto.name);
263
+ });
264
+
265
+ it("inserts characters at correct caret position", () => {
266
+ const sequenceToInsert = {
267
+ sequence: "atgagagaga"
268
+ };
269
+ const sequenceToInsertInto = {
270
+ sequence: "atgagagaga",
271
+ features: [{ start: 0, end: 9 }],
272
+ warnings: [{ start: 0, end: 9 }]
273
+ };
274
+ const caretPosition = 0;
275
+ const postInsertSeq = insertSequenceDataAtPositionOrRange(
276
+ sequenceToInsert,
277
+ sequenceToInsertInto,
278
+ caretPosition
279
+ );
280
+ postInsertSeq.sequence.length.should.equal(
281
+ sequenceToInsertInto.sequence.length + sequenceToInsert.sequence.length
282
+ );
283
+ postInsertSeq.features.length.should.equal(1);
284
+ postInsertSeq.features[0].start.should.equal(
285
+ sequenceToInsertInto.features[0].start + sequenceToInsert.sequence.length
286
+ );
287
+ postInsertSeq.warnings.length.should.equal(1);
288
+ postInsertSeq.warnings[0].start.should.equal(
289
+ sequenceToInsertInto.warnings[0].start + sequenceToInsert.sequence.length
290
+ );
291
+ });
292
+ it("deletes the whole sequence if nothing is being inserted and the range spans the entire sequence ", () => {
293
+ const sequenceToInsert = {};
294
+ const sequenceToInsertInto = {
295
+ sequence: "atgagagaga",
296
+ chromatogramData: { baseTraces: [] },
297
+ features: [{ start: 0, end: 9 }],
298
+ warnings: [{ start: 0, end: 9 }]
299
+ };
300
+ const range = { start: 0, end: 9 };
301
+ const postInsertSeq = insertSequenceDataAtPositionOrRange(
302
+ sequenceToInsert,
303
+ sequenceToInsertInto,
304
+ range
305
+ );
306
+ postInsertSeq.sequence.length.should.equal(0);
307
+ postInsertSeq.features.length.should.equal(0);
308
+ postInsertSeq.warnings.length.should.equal(0);
309
+ assert.deepStrictEqual(postInsertSeq.chromatogramData, undefined);
310
+ });
311
+ it("deletes chromatogramData correctly", () => {
312
+ const sequenceToInsert = {};
313
+ const sequenceToInsertInto = {
314
+ sequence: "atgagagaga",
315
+ chromatogramData: {
316
+ baseCalls: ["G", "G", "C", "G", "T", "G", "G", "A", "C", "G"],
317
+ baseTraces: [
318
+ {
319
+ aTrace: [0, 2, 6, 8],
320
+ cTrace: [5, 2, 3, 4],
321
+ gTrace: [0, 2, 6, 8],
322
+ tTrace: [5, 2, 3, 4]
323
+ },
324
+ {
325
+ aTrace: [0, 2, 6, 8],
326
+ cTrace: [5, 2, 3, 4],
327
+ gTrace: [0, 2, 6, 8],
328
+ tTrace: [5, 2, 3, 4]
329
+ },
330
+ {
331
+ aTrace: [0, 2, 6, 8],
332
+ cTrace: [5, 2, 3, 4],
333
+ gTrace: [0, 2, 6, 8],
334
+ tTrace: [5, 2, 3, 4]
335
+ },
336
+ {
337
+ aTrace: [0, 2, 6, 8],
338
+ cTrace: [5, 2, 3, 4],
339
+ gTrace: [0, 2, 6, 8],
340
+ tTrace: [5, 2, 3, 4]
341
+ },
342
+ {
343
+ aTrace: [0, 2, 6, 8],
344
+ cTrace: [5, 2, 3, 4],
345
+ gTrace: [0, 2, 6, 8],
346
+ tTrace: [5, 2, 3, 4]
347
+ },
348
+ {
349
+ aTrace: [0, 2, 6, 8],
350
+ cTrace: [5, 2, 3, 4],
351
+ gTrace: [0, 2, 6, 8],
352
+ tTrace: [5, 2, 3, 4]
353
+ },
354
+ {
355
+ aTrace: [0, 2, 6, 8],
356
+ cTrace: [5, 2, 3, 4],
357
+ gTrace: [0, 2, 6, 8],
358
+ tTrace: [5, 2, 3, 4]
359
+ },
360
+ {
361
+ aTrace: [0, 2, 6, 8],
362
+ cTrace: [5, 2, 3, 4],
363
+ gTrace: [0, 2, 6, 8],
364
+ tTrace: [5, 2, 3, 4]
365
+ },
366
+ {
367
+ aTrace: [0, 2, 6, 8],
368
+ cTrace: [5, 2, 3, 4],
369
+ gTrace: [0, 2, 6, 8],
370
+ tTrace: [5, 2, 3, 4]
371
+ },
372
+ {
373
+ aTrace: [0, 2, 6, 8],
374
+ cTrace: [5, 2, 3, 4],
375
+ gTrace: [0, 2, 6, 8],
376
+ tTrace: [5, 2, 3, 4]
377
+ }
378
+ ]
379
+ }
380
+ };
381
+ const range = { start: 2, end: 3 };
382
+ const postInsertSeq = insertSequenceDataAtPositionOrRange(
383
+ sequenceToInsert,
384
+ sequenceToInsertInto,
385
+ range
386
+ );
387
+ postInsertSeq.sequence.length.should.equal(8);
388
+ postInsertSeq.chromatogramData.baseCalls.length.should.equal(8);
389
+ postInsertSeq.chromatogramData.baseTraces.length.should.equal(8);
390
+ });
391
+ it("properly inserts into chromatogramData", () => {
392
+ const sequenceToInsert = {
393
+ sequence: "rrr"
394
+ };
395
+ const sequenceToInsertInto = {
396
+ sequence: "atgagag",
397
+ chromatogramData: {
398
+ baseCalls: ["G", "G", "C", "G", "T", "G", "G"],
399
+ baseTraces: [
400
+ {
401
+ aTrace: [0, 2, 6, 8],
402
+ cTrace: [5, 2, 3, 4],
403
+ gTrace: [0, 2, 6, 8],
404
+ tTrace: [5, 2, 3, 4]
405
+ },
406
+ {
407
+ aTrace: [0, 2, 6, 8],
408
+ cTrace: [5, 2, 3, 4],
409
+ gTrace: [0, 2, 6, 8],
410
+ tTrace: [5, 2, 3, 4]
411
+ },
412
+ {
413
+ aTrace: [0, 2, 6, 8],
414
+ cTrace: [5, 2, 3, 4],
415
+ gTrace: [0, 2, 6, 8],
416
+ tTrace: [5, 2, 3, 4]
417
+ },
418
+ {
419
+ aTrace: [0, 2, 6, 8],
420
+ cTrace: [5, 2, 3, 4],
421
+ gTrace: [0, 2, 6, 8],
422
+ tTrace: [5, 2, 3, 4]
423
+ },
424
+ {
425
+ aTrace: [0, 2, 6, 8],
426
+ cTrace: [5, 2, 3, 4],
427
+ gTrace: [0, 2, 6, 8],
428
+ tTrace: [5, 2, 3, 4]
429
+ },
430
+ {
431
+ aTrace: [0, 2, 6, 8],
432
+ cTrace: [5, 2, 3, 4],
433
+ gTrace: [0, 2, 6, 8],
434
+ tTrace: [5, 2, 3, 4]
435
+ },
436
+ {
437
+ aTrace: [0, 2, 6, 8],
438
+ cTrace: [5, 2, 3, 4],
439
+ gTrace: [0, 2, 6, 8],
440
+ tTrace: [5, 2, 3, 4]
441
+ }
442
+ ]
443
+ }
444
+ };
445
+ const range = { start: 3, end: 4 };
446
+ const postInsertSeq = insertSequenceDataAtPositionOrRange(
447
+ sequenceToInsert,
448
+ sequenceToInsertInto,
449
+ range
450
+ );
451
+ postInsertSeq.sequence.length.should.equal(8);
452
+ postInsertSeq.chromatogramData.baseCalls.length.should.equal(8);
453
+ postInsertSeq.chromatogramData.baseTraces.length.should.equal(8);
454
+ postInsertSeq.chromatogramData.baseTraces[4].aTrace.should.deep.equal([
455
+ 0,
456
+ 0,
457
+ 0,
458
+ 0,
459
+ 0,
460
+ 0,
461
+ 0,
462
+ 0,
463
+ 0,
464
+ 0,
465
+ 0
466
+ ]);
467
+ });
468
+ it("properly inserts into chromatogramData, keeping the chromatogramData intact if the insert length is the same length as the selection range", () => {
469
+ const sequenceToInsert = {
470
+ sequence: "rrr"
471
+ };
472
+ const sequenceToInsertInto = {
473
+ sequence: "atgagag",
474
+ chromatogramData: {
475
+ baseCalls: ["G", "G", "C", "G", "T", "G", "G"],
476
+ baseTraces: [
477
+ {
478
+ aTrace: [0, 2, 6, 8],
479
+ cTrace: [5, 2, 3, 4],
480
+ gTrace: [0, 2, 6, 8],
481
+ tTrace: [5, 2, 3, 4]
482
+ },
483
+ {
484
+ aTrace: [0, 2, 6, 8],
485
+ cTrace: [5, 2, 3, 4],
486
+ gTrace: [0, 2, 6, 8],
487
+ tTrace: [5, 2, 3, 4]
488
+ },
489
+ {
490
+ aTrace: [0, 2, 6, 8],
491
+ cTrace: [5, 2, 3, 4],
492
+ gTrace: [0, 2, 6, 8],
493
+ tTrace: [5, 2, 3, 4]
494
+ },
495
+ {
496
+ aTrace: [0, 2, 6, 8],
497
+ cTrace: [5, 2, 3, 4],
498
+ gTrace: [0, 2, 6, 8],
499
+ tTrace: [5, 2, 3, 4]
500
+ },
501
+ {
502
+ aTrace: [0, 2, 6, 8],
503
+ cTrace: [5, 2, 3, 4],
504
+ gTrace: [0, 2, 6, 8],
505
+ tTrace: [5, 2, 3, 4]
506
+ },
507
+ {
508
+ aTrace: [0, 2, 6, 8],
509
+ cTrace: [5, 2, 3, 4],
510
+ gTrace: [0, 2, 6, 8],
511
+ tTrace: [5, 2, 3, 4]
512
+ },
513
+ {
514
+ aTrace: [0, 2, 6, 8],
515
+ cTrace: [5, 2, 3, 4],
516
+ gTrace: [0, 2, 6, 8],
517
+ tTrace: [5, 2, 3, 4]
518
+ }
519
+ ]
520
+ }
521
+ };
522
+ const range = { start: 3, end: 5 };
523
+ const postInsertSeq = insertSequenceDataAtPositionOrRange(
524
+ sequenceToInsert,
525
+ sequenceToInsertInto,
526
+ range
527
+ );
528
+ postInsertSeq.sequence.length.should.equal(7);
529
+ postInsertSeq.chromatogramData.baseCalls.length.should.equal(7);
530
+ postInsertSeq.chromatogramData.baseCalls.should.deep.equal([
531
+ "G",
532
+ "G",
533
+ "C",
534
+ "r",
535
+ "r",
536
+ "r",
537
+ "G"
538
+ ]);
539
+ postInsertSeq.chromatogramData.baseTraces.length.should.equal(7);
540
+ postInsertSeq.chromatogramData.baseTraces[4].aTrace.should.deep.equal([
541
+ 0,
542
+ 2,
543
+ 6,
544
+ 8
545
+ ]);
546
+ });
547
+ });
@@ -0,0 +1,3 @@
1
+ export default function isEnzymeType2S(e) {
2
+ return e.site.length < e.topSnipOffset || e.site.length < e.bottomSnipOffset;
3
+ };