@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.
- package/index.js +12030 -26126
- package/index.mjs +12119 -26124
- package/index.umd.js +24056 -38154
- package/package.json +2 -2
- package/src/DNAComplementMap.js +32 -0
- package/src/addGapsToSeqReads.js +417 -0
- package/src/addGapsToSeqReads.test.js +358 -0
- package/src/adjustAnnotationsToInsert.js +19 -0
- package/src/adjustBpsToReplaceOrInsert.js +50 -0
- package/src/adjustBpsToReplaceOrInsert.test.js +59 -0
- package/src/aliasedEnzymesByName.js +7363 -0
- package/src/aminoAcidToDegenerateDnaMap.js +32 -0
- package/src/aminoAcidToDegenerateRnaMap.js +32 -0
- package/src/aminoAcidToDnaRna.test.js +27 -0
- package/src/annotateSingleSeq.js +29 -0
- package/src/annotateSingleSeq.test.js +64 -0
- package/src/annotationTypes.js +23 -0
- package/src/autoAnnotate.js +242 -0
- package/src/autoAnnotate.test.js +1039 -0
- package/src/bioData.js +431 -0
- package/src/calculateNebTa.js +34 -0
- package/src/calculateNebTa.test.js +57 -0
- package/src/calculateNebTm.js +127 -0
- package/src/calculateNebTm.test.js +32 -0
- package/src/calculatePercentGC.js +3 -0
- package/src/calculatePercentGC.test.js +14 -0
- package/src/calculateTm.js +297 -0
- package/src/calculateTm.test.js +7 -0
- package/src/computeDigestFragments.js +179 -0
- package/src/computeDigestFragments.test.js +73 -0
- package/src/condensePairwiseAlignmentDifferences.js +85 -0
- package/src/condensePairwiseAlignmentDifferences.test.js +66 -0
- package/src/convertAACaretPositionOrRangeToDna.js +24 -0
- package/src/convertAACaretPositionOrRangeToDna.test.js +34 -0
- package/src/convertDnaCaretPositionOrRangeToAA.js +24 -0
- package/src/convertDnaCaretPositionOrRangeToAA.test.js +37 -0
- package/src/cutSequenceByRestrictionEnzyme.js +301 -0
- package/src/cutSequenceByRestrictionEnzyme.test.js +296 -0
- package/src/defaultEnzymesByName.js +278 -0
- package/src/degenerateDnaToAminoAcidMap.js +5 -0
- package/src/degenerateRnaToAminoAcidMap.js +5 -0
- package/src/deleteSequenceDataAtRange.js +5 -0
- package/src/deleteSequenceDataAtRange.test.js +146 -0
- package/src/diffUtils.js +64 -0
- package/src/diffUtils.test.js +74 -0
- package/src/doesEnzymeChopOutsideOfRecognitionSite.js +10 -0
- package/src/doesEnzymeChopOutsideOfRecognitionSite.test.js +41 -0
- package/src/featureTypesAndColors.js +152 -0
- package/src/featureTypesAndColors.test.js +52 -0
- package/src/filterAminoAcidSequenceString.js +13 -0
- package/src/filterAminoAcidSequenceString.test.js +22 -0
- package/src/filterSequenceString.js +22 -0
- package/src/filterSequenceString.test.js +13 -0
- package/src/findNearestRangeOfSequenceOverlapToPosition.js +39 -0
- package/src/findNearestRangeOfSequenceOverlapToPosition.test.js +31 -0
- package/src/findOrfsInPlasmid.js +26 -0
- package/src/findSequenceMatches.js +133 -0
- package/src/findSequenceMatches.test.js +286 -0
- package/src/generateAnnotations.js +34 -0
- package/src/generateSequenceData.js +206 -0
- package/src/generateSequenceData.test.js +22 -0
- package/src/getAllInsertionsInSeqReads.js +83 -0
- package/src/getAllInsertionsInSeqReads.test.js +26 -0
- package/src/getAminoAcidDataForEachBaseOfDna.js +163 -0
- package/src/getAminoAcidDataForEachBaseOfDna.test.js +424 -0
- package/src/getAminoAcidFromSequenceTriplet.js +22 -0
- package/src/getAminoAcidStringFromSequenceString.js +18 -0
- package/src/getAminoAcidStringFromSequenceString.test.js +18 -0
- package/src/getCodonRangeForAASliver.js +63 -0
- package/src/getComplementAminoAcidStringFromSequenceString.js +11 -0
- package/src/getComplementSequenceAndAnnotations.js +20 -0
- package/src/getComplementSequenceString.js +19 -0
- package/src/getComplementSequenceString.test.js +13 -0
- package/src/getCutsiteType.js +10 -0
- package/src/getCutsitesFromSequence.js +17 -0
- package/src/getDegenerateDnaStringFromAAString.js +8 -0
- package/src/getDegenerateRnaStringFromAAString.js +8 -0
- package/src/getDigestFragmentsForCutsites.js +105 -0
- package/src/getDigestFragmentsForRestrictionEnzymes.js +27 -0
- package/src/getDigestFragmentsForRestrictionEnzymes.test.js +228 -0
- package/src/getInsertBetweenVals.js +28 -0
- package/src/getInsertBetweenVals.test.js +33 -0
- package/src/getLeftAndRightOfSequenceInRangeGivenPosition.js +39 -0
- package/src/getLeftAndRightOfSequenceInRangeGivenPosition.test.js +80 -0
- package/src/getMassOfAaString.js +24 -0
- package/src/getMassofAaString.test.js +18 -0
- package/src/getOrfsFromSequence.js +124 -0
- package/src/getOrfsFromSequence.test.js +210 -0
- package/src/getOverlapBetweenTwoSequences.js +30 -0
- package/src/getOverlapBetweenTwoSequences.test.js +23 -0
- package/src/getPossiblePartsFromSequenceAndEnzymes.js +121 -0
- package/src/getPossiblePartsFromSequenceAndEnzymes.test.js +208 -0
- package/src/getReverseAminoAcidStringFromSequenceString.js +20 -0
- package/src/getReverseAminoAcidStringFromSequenceString.test.js +11 -0
- package/src/getReverseComplementAminoAcidStringFromSequenceString.js +7 -0
- package/src/getReverseComplementAnnotation.js +23 -0
- package/src/getReverseComplementAnnotation.test.js +44 -0
- package/src/getReverseComplementSequenceAndAnnotations.js +38 -0
- package/src/getReverseComplementSequenceAndAnnotations.test.js +105 -0
- package/src/getReverseComplementSequenceString.js +17 -0
- package/src/getReverseComplementSequenceString.test.js +11 -0
- package/src/getReverseSequenceString.js +12 -0
- package/src/getReverseSequenceString.test.js +9 -0
- package/src/getSequenceDataBetweenRange.js +131 -0
- package/src/getSequenceDataBetweenRange.test.js +474 -0
- package/src/getVirtualDigest.js +125 -0
- package/src/getVirtualDigest.test.js +134 -0
- package/src/guessIfSequenceIsDnaAndNotProtein.js +33 -0
- package/src/guessIfSequenceIsDnaAndNotProtein.test.js +34 -0
- package/src/index.js +106 -0
- package/src/index.test.js +38 -0
- package/src/insertGapsIntoRefSeq.js +38 -0
- package/src/insertGapsIntoRefSeq.test.js +20 -0
- package/src/insertSequenceDataAtPosition.js +2 -0
- package/src/insertSequenceDataAtPosition.test.js +75 -0
- package/src/insertSequenceDataAtPositionOrRange.js +249 -0
- package/src/insertSequenceDataAtPositionOrRange.test.js +547 -0
- package/src/isEnzymeType2S.js +3 -0
- package/src/mapAnnotationsToRows.js +174 -0
- package/src/mapAnnotationsToRows.test.js +425 -0
- package/src/prepareCircularViewData.js +17 -0
- package/src/prepareCircularViewData.test.js +196 -0
- package/src/prepareRowData.js +41 -0
- package/src/prepareRowData.test.js +36 -0
- package/src/prepareRowData_output1.json +391 -0
- package/src/proteinAlphabet.js +257 -0
- package/src/rotateBpsToPosition.js +13 -0
- package/src/rotateBpsToPosition.test.js +6 -0
- package/src/rotateSequenceDataToPosition.js +48 -0
- package/src/rotateSequenceDataToPosition.test.js +71 -0
- package/src/shiftAnnotationsByLen.js +17 -0
- package/src/threeLetterSequenceStringToAminoAcidMap.js +106 -0
- package/src/tidyUpAnnotation.js +182 -0
- package/src/tidyUpSequenceData.js +169 -0
- 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
|
+
});
|