@teselagen/sequence-utils 0.1.21 → 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,424 @@
|
|
|
1
|
+
|
|
2
|
+
|
|
3
|
+
import getAminoAcidDataForEachBaseOfDna from "./getAminoAcidDataForEachBaseOfDna.js";
|
|
4
|
+
|
|
5
|
+
import getAA from "./getAminoAcidFromSequenceTriplet";
|
|
6
|
+
|
|
7
|
+
import assert from "assert";
|
|
8
|
+
|
|
9
|
+
let aaData;
|
|
10
|
+
describe("getAminoAcidDataForEachBaseOfDna tranlates a", () => {
|
|
11
|
+
//: It gets correct amino acid mapping and position in codon for each basepair in sequence
|
|
12
|
+
it("1 amino acid long sequence", () => {
|
|
13
|
+
aaData = getAminoAcidDataForEachBaseOfDna("atg", true);
|
|
14
|
+
assert.deepEqual(aaData, [
|
|
15
|
+
{
|
|
16
|
+
aminoAcid: getAA("atg"),
|
|
17
|
+
positionInCodon: 0,
|
|
18
|
+
aminoAcidIndex: 0,
|
|
19
|
+
sequenceIndex: 0,
|
|
20
|
+
codonRange: {
|
|
21
|
+
start: 0,
|
|
22
|
+
end: 2
|
|
23
|
+
},
|
|
24
|
+
fullCodon: true
|
|
25
|
+
},
|
|
26
|
+
{
|
|
27
|
+
aminoAcid: getAA("atg"),
|
|
28
|
+
positionInCodon: 1,
|
|
29
|
+
aminoAcidIndex: 0,
|
|
30
|
+
sequenceIndex: 1,
|
|
31
|
+
codonRange: {
|
|
32
|
+
start: 0,
|
|
33
|
+
end: 2
|
|
34
|
+
},
|
|
35
|
+
fullCodon: true
|
|
36
|
+
},
|
|
37
|
+
{
|
|
38
|
+
aminoAcid: getAA("atg"),
|
|
39
|
+
positionInCodon: 2,
|
|
40
|
+
aminoAcidIndex: 0,
|
|
41
|
+
sequenceIndex: 2,
|
|
42
|
+
codonRange: {
|
|
43
|
+
start: 0,
|
|
44
|
+
end: 2
|
|
45
|
+
},
|
|
46
|
+
fullCodon: true
|
|
47
|
+
}
|
|
48
|
+
]);
|
|
49
|
+
});
|
|
50
|
+
it("1 amino acid long sequence which is subrange of a larger sequence", () => {
|
|
51
|
+
aaData = getAminoAcidDataForEachBaseOfDna(
|
|
52
|
+
"atgtatgagagtagagatagagata",
|
|
53
|
+
true,
|
|
54
|
+
{ start: 4, end: 6 }
|
|
55
|
+
);
|
|
56
|
+
assert.deepEqual(aaData, [
|
|
57
|
+
{
|
|
58
|
+
aminoAcid: getAA("atg"),
|
|
59
|
+
positionInCodon: 0,
|
|
60
|
+
aminoAcidIndex: 0,
|
|
61
|
+
sequenceIndex: 4,
|
|
62
|
+
codonRange: {
|
|
63
|
+
start: 4,
|
|
64
|
+
end: 6
|
|
65
|
+
},
|
|
66
|
+
fullCodon: true
|
|
67
|
+
},
|
|
68
|
+
{
|
|
69
|
+
aminoAcid: getAA("atg"),
|
|
70
|
+
positionInCodon: 1,
|
|
71
|
+
aminoAcidIndex: 0,
|
|
72
|
+
sequenceIndex: 5,
|
|
73
|
+
codonRange: {
|
|
74
|
+
start: 4,
|
|
75
|
+
end: 6
|
|
76
|
+
},
|
|
77
|
+
fullCodon: true
|
|
78
|
+
},
|
|
79
|
+
{
|
|
80
|
+
aminoAcid: getAA("atg"),
|
|
81
|
+
positionInCodon: 2,
|
|
82
|
+
aminoAcidIndex: 0,
|
|
83
|
+
sequenceIndex: 6,
|
|
84
|
+
codonRange: {
|
|
85
|
+
start: 4,
|
|
86
|
+
end: 6
|
|
87
|
+
},
|
|
88
|
+
fullCodon: true
|
|
89
|
+
}
|
|
90
|
+
]);
|
|
91
|
+
});
|
|
92
|
+
it("1 amino acid long sequence which is origin spanning subrange of a larger sequence", () => {
|
|
93
|
+
// 012345678
|
|
94
|
+
aaData = getAminoAcidDataForEachBaseOfDna("atgatgatg", true, {
|
|
95
|
+
start: 6,
|
|
96
|
+
end: 2
|
|
97
|
+
});
|
|
98
|
+
assert.deepEqual(aaData, [
|
|
99
|
+
{
|
|
100
|
+
aminoAcid: getAA("atg"),
|
|
101
|
+
positionInCodon: 0,
|
|
102
|
+
aminoAcidIndex: 0,
|
|
103
|
+
sequenceIndex: 6,
|
|
104
|
+
codonRange: {
|
|
105
|
+
start: 6,
|
|
106
|
+
end: 8
|
|
107
|
+
},
|
|
108
|
+
fullCodon: true
|
|
109
|
+
},
|
|
110
|
+
{
|
|
111
|
+
aminoAcid: getAA("atg"),
|
|
112
|
+
positionInCodon: 1,
|
|
113
|
+
aminoAcidIndex: 0,
|
|
114
|
+
sequenceIndex: 7,
|
|
115
|
+
codonRange: {
|
|
116
|
+
start: 6,
|
|
117
|
+
end: 8
|
|
118
|
+
},
|
|
119
|
+
fullCodon: true
|
|
120
|
+
},
|
|
121
|
+
{
|
|
122
|
+
aminoAcid: getAA("atg"),
|
|
123
|
+
positionInCodon: 2,
|
|
124
|
+
aminoAcidIndex: 0,
|
|
125
|
+
sequenceIndex: 8,
|
|
126
|
+
codonRange: {
|
|
127
|
+
start: 6,
|
|
128
|
+
end: 8
|
|
129
|
+
},
|
|
130
|
+
fullCodon: true
|
|
131
|
+
},
|
|
132
|
+
{
|
|
133
|
+
aminoAcid: getAA("atg"),
|
|
134
|
+
positionInCodon: 0,
|
|
135
|
+
aminoAcidIndex: 1,
|
|
136
|
+
sequenceIndex: 0,
|
|
137
|
+
codonRange: {
|
|
138
|
+
start: 0,
|
|
139
|
+
end: 2
|
|
140
|
+
},
|
|
141
|
+
fullCodon: true
|
|
142
|
+
},
|
|
143
|
+
{
|
|
144
|
+
aminoAcid: getAA("atg"),
|
|
145
|
+
positionInCodon: 1,
|
|
146
|
+
aminoAcidIndex: 1,
|
|
147
|
+
sequenceIndex: 1,
|
|
148
|
+
codonRange: {
|
|
149
|
+
start: 0,
|
|
150
|
+
end: 2
|
|
151
|
+
},
|
|
152
|
+
fullCodon: true
|
|
153
|
+
},
|
|
154
|
+
{
|
|
155
|
+
aminoAcid: getAA("atg"),
|
|
156
|
+
positionInCodon: 2,
|
|
157
|
+
aminoAcidIndex: 1,
|
|
158
|
+
sequenceIndex: 2,
|
|
159
|
+
codonRange: {
|
|
160
|
+
start: 0,
|
|
161
|
+
end: 2
|
|
162
|
+
},
|
|
163
|
+
fullCodon: true
|
|
164
|
+
}
|
|
165
|
+
]);
|
|
166
|
+
});
|
|
167
|
+
it("1 amino acid long sequence in reverse direction", () => {
|
|
168
|
+
aaData = getAminoAcidDataForEachBaseOfDna("atg", false);
|
|
169
|
+
assert.deepEqual(aaData, [
|
|
170
|
+
{
|
|
171
|
+
aminoAcid: getAA("cat"),
|
|
172
|
+
positionInCodon: 2,
|
|
173
|
+
aminoAcidIndex: 0,
|
|
174
|
+
fullCodon: true,
|
|
175
|
+
sequenceIndex: 0,
|
|
176
|
+
codonRange: {
|
|
177
|
+
start: 0,
|
|
178
|
+
end: 2
|
|
179
|
+
}
|
|
180
|
+
},
|
|
181
|
+
{
|
|
182
|
+
aminoAcid: getAA("cat"),
|
|
183
|
+
positionInCodon: 1,
|
|
184
|
+
aminoAcidIndex: 0,
|
|
185
|
+
fullCodon: true,
|
|
186
|
+
sequenceIndex: 1,
|
|
187
|
+
codonRange: {
|
|
188
|
+
start: 0,
|
|
189
|
+
end: 2
|
|
190
|
+
}
|
|
191
|
+
},
|
|
192
|
+
{
|
|
193
|
+
aminoAcid: getAA("cat"),
|
|
194
|
+
positionInCodon: 0,
|
|
195
|
+
aminoAcidIndex: 0,
|
|
196
|
+
fullCodon: true,
|
|
197
|
+
sequenceIndex: 2,
|
|
198
|
+
codonRange: {
|
|
199
|
+
start: 0,
|
|
200
|
+
end: 2
|
|
201
|
+
}
|
|
202
|
+
}
|
|
203
|
+
]);
|
|
204
|
+
});
|
|
205
|
+
it("> 1 amino acid long sequence", () => {
|
|
206
|
+
aaData = getAminoAcidDataForEachBaseOfDna("atgtaat", true);
|
|
207
|
+
assert.deepEqual(aaData, [
|
|
208
|
+
{
|
|
209
|
+
aminoAcid: getAA("atg"),
|
|
210
|
+
positionInCodon: 0,
|
|
211
|
+
aminoAcidIndex: 0,
|
|
212
|
+
fullCodon: true,
|
|
213
|
+
sequenceIndex: 0,
|
|
214
|
+
codonRange: {
|
|
215
|
+
start: 0,
|
|
216
|
+
end: 2
|
|
217
|
+
}
|
|
218
|
+
},
|
|
219
|
+
{
|
|
220
|
+
aminoAcid: getAA("atg"),
|
|
221
|
+
positionInCodon: 1,
|
|
222
|
+
aminoAcidIndex: 0,
|
|
223
|
+
fullCodon: true,
|
|
224
|
+
sequenceIndex: 1,
|
|
225
|
+
codonRange: {
|
|
226
|
+
start: 0,
|
|
227
|
+
end: 2
|
|
228
|
+
}
|
|
229
|
+
},
|
|
230
|
+
{
|
|
231
|
+
aminoAcid: getAA("atg"),
|
|
232
|
+
positionInCodon: 2,
|
|
233
|
+
aminoAcidIndex: 0,
|
|
234
|
+
fullCodon: true,
|
|
235
|
+
sequenceIndex: 2,
|
|
236
|
+
codonRange: {
|
|
237
|
+
start: 0,
|
|
238
|
+
end: 2
|
|
239
|
+
}
|
|
240
|
+
},
|
|
241
|
+
{
|
|
242
|
+
aminoAcid: getAA("taa"),
|
|
243
|
+
positionInCodon: 0,
|
|
244
|
+
aminoAcidIndex: 1,
|
|
245
|
+
fullCodon: true,
|
|
246
|
+
sequenceIndex: 3,
|
|
247
|
+
codonRange: {
|
|
248
|
+
start: 3,
|
|
249
|
+
end: 5
|
|
250
|
+
}
|
|
251
|
+
},
|
|
252
|
+
{
|
|
253
|
+
aminoAcid: getAA("taa"),
|
|
254
|
+
positionInCodon: 1,
|
|
255
|
+
aminoAcidIndex: 1,
|
|
256
|
+
fullCodon: true,
|
|
257
|
+
sequenceIndex: 4,
|
|
258
|
+
codonRange: {
|
|
259
|
+
start: 3,
|
|
260
|
+
end: 5
|
|
261
|
+
}
|
|
262
|
+
},
|
|
263
|
+
{
|
|
264
|
+
aminoAcid: getAA("taa"),
|
|
265
|
+
positionInCodon: 2,
|
|
266
|
+
aminoAcidIndex: 1,
|
|
267
|
+
fullCodon: true,
|
|
268
|
+
sequenceIndex: 5,
|
|
269
|
+
codonRange: {
|
|
270
|
+
start: 3,
|
|
271
|
+
end: 5
|
|
272
|
+
}
|
|
273
|
+
},
|
|
274
|
+
{
|
|
275
|
+
aminoAcid: getAA("xxx"),
|
|
276
|
+
positionInCodon: 0,
|
|
277
|
+
aminoAcidIndex: 2,
|
|
278
|
+
fullCodon: false,
|
|
279
|
+
sequenceIndex: 6,
|
|
280
|
+
codonRange: {
|
|
281
|
+
start: 6,
|
|
282
|
+
end: 6
|
|
283
|
+
}
|
|
284
|
+
}
|
|
285
|
+
]);
|
|
286
|
+
});
|
|
287
|
+
it("> 1 amino acid long sequence in reverse direction", () => {
|
|
288
|
+
aaData = getAminoAcidDataForEachBaseOfDna("atgtaat", false);
|
|
289
|
+
|
|
290
|
+
assert.deepEqual(aaData, [
|
|
291
|
+
{
|
|
292
|
+
aminoAcid: getAA("xxx"),
|
|
293
|
+
positionInCodon: 0,
|
|
294
|
+
aminoAcidIndex: 2,
|
|
295
|
+
sequenceIndex: 0,
|
|
296
|
+
codonRange: {
|
|
297
|
+
start: 0,
|
|
298
|
+
end: 0
|
|
299
|
+
},
|
|
300
|
+
fullCodon: false
|
|
301
|
+
},
|
|
302
|
+
{
|
|
303
|
+
aminoAcid: getAA("aca"),
|
|
304
|
+
positionInCodon: 2,
|
|
305
|
+
aminoAcidIndex: 1,
|
|
306
|
+
sequenceIndex: 1,
|
|
307
|
+
codonRange: {
|
|
308
|
+
start: 1,
|
|
309
|
+
end: 3
|
|
310
|
+
},
|
|
311
|
+
fullCodon: true
|
|
312
|
+
},
|
|
313
|
+
{
|
|
314
|
+
aminoAcid: getAA("aca"),
|
|
315
|
+
positionInCodon: 1,
|
|
316
|
+
aminoAcidIndex: 1,
|
|
317
|
+
sequenceIndex: 2,
|
|
318
|
+
codonRange: {
|
|
319
|
+
start: 1,
|
|
320
|
+
end: 3
|
|
321
|
+
},
|
|
322
|
+
fullCodon: true
|
|
323
|
+
},
|
|
324
|
+
{
|
|
325
|
+
aminoAcid: getAA("aca"),
|
|
326
|
+
positionInCodon: 0,
|
|
327
|
+
aminoAcidIndex: 1,
|
|
328
|
+
sequenceIndex: 3,
|
|
329
|
+
codonRange: {
|
|
330
|
+
start: 1,
|
|
331
|
+
end: 3
|
|
332
|
+
},
|
|
333
|
+
fullCodon: true
|
|
334
|
+
},
|
|
335
|
+
{
|
|
336
|
+
aminoAcid: getAA("att"),
|
|
337
|
+
positionInCodon: 2,
|
|
338
|
+
aminoAcidIndex: 0,
|
|
339
|
+
sequenceIndex: 4,
|
|
340
|
+
codonRange: {
|
|
341
|
+
start: 4,
|
|
342
|
+
end: 6
|
|
343
|
+
},
|
|
344
|
+
fullCodon: true
|
|
345
|
+
},
|
|
346
|
+
{
|
|
347
|
+
aminoAcid: getAA("att"),
|
|
348
|
+
positionInCodon: 1,
|
|
349
|
+
aminoAcidIndex: 0,
|
|
350
|
+
sequenceIndex: 5,
|
|
351
|
+
codonRange: {
|
|
352
|
+
start: 4,
|
|
353
|
+
end: 6
|
|
354
|
+
},
|
|
355
|
+
fullCodon: true
|
|
356
|
+
},
|
|
357
|
+
{
|
|
358
|
+
aminoAcid: getAA("att"),
|
|
359
|
+
positionInCodon: 0,
|
|
360
|
+
aminoAcidIndex: 0,
|
|
361
|
+
sequenceIndex: 6,
|
|
362
|
+
codonRange: {
|
|
363
|
+
start: 4,
|
|
364
|
+
end: 6
|
|
365
|
+
},
|
|
366
|
+
fullCodon: true
|
|
367
|
+
}
|
|
368
|
+
]);
|
|
369
|
+
});
|
|
370
|
+
it("< 1 amino acid long sequence", () => {
|
|
371
|
+
aaData = getAminoAcidDataForEachBaseOfDna("at", true);
|
|
372
|
+
assert.deepEqual(aaData, [
|
|
373
|
+
{
|
|
374
|
+
aminoAcid: getAA("xxx"),
|
|
375
|
+
positionInCodon: 0,
|
|
376
|
+
aminoAcidIndex: 0,
|
|
377
|
+
sequenceIndex: 0,
|
|
378
|
+
fullCodon: false,
|
|
379
|
+
codonRange: {
|
|
380
|
+
start: 0,
|
|
381
|
+
end: 1
|
|
382
|
+
}
|
|
383
|
+
},
|
|
384
|
+
{
|
|
385
|
+
aminoAcid: getAA("xxx"),
|
|
386
|
+
positionInCodon: 1,
|
|
387
|
+
aminoAcidIndex: 0,
|
|
388
|
+
sequenceIndex: 1,
|
|
389
|
+
fullCodon: false,
|
|
390
|
+
codonRange: {
|
|
391
|
+
start: 0,
|
|
392
|
+
end: 1
|
|
393
|
+
}
|
|
394
|
+
}
|
|
395
|
+
]);
|
|
396
|
+
});
|
|
397
|
+
it("< 1 amino acid long sequence in reverse direction", () => {
|
|
398
|
+
aaData = getAminoAcidDataForEachBaseOfDna("at", false);
|
|
399
|
+
assert.deepEqual(aaData, [
|
|
400
|
+
{
|
|
401
|
+
aminoAcid: getAA("xxx"),
|
|
402
|
+
positionInCodon: 1,
|
|
403
|
+
aminoAcidIndex: 0,
|
|
404
|
+
sequenceIndex: 0,
|
|
405
|
+
fullCodon: false,
|
|
406
|
+
codonRange: {
|
|
407
|
+
start: 0,
|
|
408
|
+
end: 1
|
|
409
|
+
}
|
|
410
|
+
},
|
|
411
|
+
{
|
|
412
|
+
aminoAcid: getAA("xxx"),
|
|
413
|
+
positionInCodon: 0,
|
|
414
|
+
aminoAcidIndex: 0,
|
|
415
|
+
sequenceIndex: 1,
|
|
416
|
+
fullCodon: false,
|
|
417
|
+
codonRange: {
|
|
418
|
+
start: 0,
|
|
419
|
+
end: 1
|
|
420
|
+
}
|
|
421
|
+
}
|
|
422
|
+
]);
|
|
423
|
+
});
|
|
424
|
+
});
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import threeLetterSequenceStringToAminoAcidMap from "./threeLetterSequenceStringToAminoAcidMap";
|
|
2
|
+
import proteinAlphabet from "./proteinAlphabet";
|
|
3
|
+
import degenerateDnaToAminoAcidMap from "./degenerateDnaToAminoAcidMap";
|
|
4
|
+
|
|
5
|
+
//tnrtodo: expand the threeLetterSequenceStringToAminoAcidMap mappings to include RNA characters.
|
|
6
|
+
//currently stop bps aren't all mapped!
|
|
7
|
+
export default function getAminoAcidFromSequenceTriplet(sequenceString) {
|
|
8
|
+
sequenceString = sequenceString.toLowerCase();
|
|
9
|
+
if (sequenceString.length !== 3) {
|
|
10
|
+
throw new Error("must pass a string of length 3");
|
|
11
|
+
}
|
|
12
|
+
const aa = threeLetterSequenceStringToAminoAcidMap[sequenceString];
|
|
13
|
+
if (aa) {
|
|
14
|
+
return aa;
|
|
15
|
+
}
|
|
16
|
+
const letter =
|
|
17
|
+
degenerateDnaToAminoAcidMap[
|
|
18
|
+
sequenceString.replace("x", "n") //replace x's with n's as those are equivalent dna chars
|
|
19
|
+
] || "x";
|
|
20
|
+
|
|
21
|
+
return proteinAlphabet[letter.toUpperCase()];
|
|
22
|
+
};
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import getAminoAcidDataForEachBaseOfDna from "./getAminoAcidDataForEachBaseOfDna";
|
|
2
|
+
|
|
3
|
+
export default function getAminoAcidStringFromSequenceString(sequenceString) {
|
|
4
|
+
const aminoAcidsPerBase = getAminoAcidDataForEachBaseOfDna(
|
|
5
|
+
sequenceString,
|
|
6
|
+
true
|
|
7
|
+
);
|
|
8
|
+
const aaArray = [];
|
|
9
|
+
let aaString = "";
|
|
10
|
+
aminoAcidsPerBase.forEach(aa => {
|
|
11
|
+
if (!aa.fullCodon) {
|
|
12
|
+
return;
|
|
13
|
+
}
|
|
14
|
+
aaArray[aa.aminoAcidIndex] = aa.aminoAcid.value;
|
|
15
|
+
});
|
|
16
|
+
aaString = aaArray.join("");
|
|
17
|
+
return aaString;
|
|
18
|
+
};
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import getAminoAcidStringFromSequenceString from "./getAminoAcidStringFromSequenceString";
|
|
2
|
+
import assert from "assert";
|
|
3
|
+
|
|
4
|
+
describe("getAminoAcidStringFromSequenceString", () => {
|
|
5
|
+
it("computes a aa string from dna", () => {
|
|
6
|
+
assert.equal("M", getAminoAcidStringFromSequenceString("atg"));
|
|
7
|
+
assert.equal("MM", getAminoAcidStringFromSequenceString("atgatg"));
|
|
8
|
+
assert.equal("MXM", getAminoAcidStringFromSequenceString("atgxxxatg"));
|
|
9
|
+
assert.equal("M.M", getAminoAcidStringFromSequenceString("atg...atg"));
|
|
10
|
+
assert.equal("M*M", getAminoAcidStringFromSequenceString("atgtrratg"));
|
|
11
|
+
assert.equal("M*M", getAminoAcidStringFromSequenceString("atgtaaatg"));
|
|
12
|
+
assert.equal("MB", getAminoAcidStringFromSequenceString("atgray"));
|
|
13
|
+
assert.equal("MX", getAminoAcidStringFromSequenceString("atgrRr"));
|
|
14
|
+
assert.equal("MM", getAminoAcidStringFromSequenceString("atgatg"));
|
|
15
|
+
assert.equal("M--", getAminoAcidStringFromSequenceString("atg------"));
|
|
16
|
+
assert.equal("", getAminoAcidStringFromSequenceString("at"));
|
|
17
|
+
});
|
|
18
|
+
});
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
export default function getCodonRangeForAASliver(
|
|
2
|
+
aminoAcidPositionInSequence,
|
|
3
|
+
aminoAcidSliver,
|
|
4
|
+
AARepresentationOfTranslation,
|
|
5
|
+
relativeAAPositionInTranslation
|
|
6
|
+
) {
|
|
7
|
+
const AASliverOneBefore =
|
|
8
|
+
AARepresentationOfTranslation[relativeAAPositionInTranslation - 1];
|
|
9
|
+
if (
|
|
10
|
+
AASliverOneBefore &&
|
|
11
|
+
AASliverOneBefore.aminoAcidIndex === aminoAcidSliver.aminoAcidIndex
|
|
12
|
+
) {
|
|
13
|
+
const AASliverTwoBefore =
|
|
14
|
+
AARepresentationOfTranslation[relativeAAPositionInTranslation - 2];
|
|
15
|
+
if (
|
|
16
|
+
AASliverTwoBefore &&
|
|
17
|
+
AASliverTwoBefore.aminoAcidIndex === aminoAcidSliver.aminoAcidIndex
|
|
18
|
+
) {
|
|
19
|
+
return {
|
|
20
|
+
start: aminoAcidPositionInSequence - 2,
|
|
21
|
+
end: aminoAcidPositionInSequence
|
|
22
|
+
};
|
|
23
|
+
} else {
|
|
24
|
+
if (aminoAcidSliver.fullCodon === true) {
|
|
25
|
+
return {
|
|
26
|
+
start: aminoAcidPositionInSequence - 1,
|
|
27
|
+
end: aminoAcidPositionInSequence + 1
|
|
28
|
+
};
|
|
29
|
+
} else {
|
|
30
|
+
return {
|
|
31
|
+
start: aminoAcidPositionInSequence - 1,
|
|
32
|
+
end: aminoAcidPositionInSequence
|
|
33
|
+
};
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
} else {
|
|
37
|
+
//no AASliver before with same index
|
|
38
|
+
if (aminoAcidSliver.fullCodon === true) {
|
|
39
|
+
//sliver is part of a full codon, so we know the codon will expand 2 more slivers ahead
|
|
40
|
+
return {
|
|
41
|
+
start: aminoAcidPositionInSequence,
|
|
42
|
+
end: aminoAcidPositionInSequence + 2
|
|
43
|
+
};
|
|
44
|
+
} else {
|
|
45
|
+
const AASliverOneAhead =
|
|
46
|
+
AARepresentationOfTranslation[relativeAAPositionInTranslation - 2];
|
|
47
|
+
if (
|
|
48
|
+
AASliverOneAhead &&
|
|
49
|
+
AASliverOneAhead.aminoAcidIndex === aminoAcidSliver.aminoAcidIndex
|
|
50
|
+
) {
|
|
51
|
+
return {
|
|
52
|
+
start: aminoAcidPositionInSequence,
|
|
53
|
+
end: aminoAcidPositionInSequence + 1
|
|
54
|
+
};
|
|
55
|
+
} else {
|
|
56
|
+
return {
|
|
57
|
+
start: aminoAcidPositionInSequence,
|
|
58
|
+
end: aminoAcidPositionInSequence + 1
|
|
59
|
+
};
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
};
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import getAminoAcidStringFromSequenceString from "./getAminoAcidStringFromSequenceString";
|
|
2
|
+
|
|
3
|
+
export default function getComplementAminoAcidStringFromSequenceString(
|
|
4
|
+
sequenceString
|
|
5
|
+
) {
|
|
6
|
+
const aaString = getAminoAcidStringFromSequenceString(sequenceString, true);
|
|
7
|
+
return aaString
|
|
8
|
+
.split("")
|
|
9
|
+
.reverse()
|
|
10
|
+
.join("");
|
|
11
|
+
};
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import getComplementSequenceString from "./getComplementSequenceString";
|
|
2
|
+
import tidyUpSequenceData from "./tidyUpSequenceData";
|
|
3
|
+
|
|
4
|
+
|
|
5
|
+
import getSequenceDataBetweenRange from "./getSequenceDataBetweenRange";
|
|
6
|
+
|
|
7
|
+
// ac.throw([ac.string,ac.bool],arguments);
|
|
8
|
+
export default function getComplementSequenceAndAnnotations(
|
|
9
|
+
pSeqObj,
|
|
10
|
+
options = {}
|
|
11
|
+
) {
|
|
12
|
+
const seqObj = tidyUpSequenceData(
|
|
13
|
+
getSequenceDataBetweenRange(pSeqObj, options.range),
|
|
14
|
+
options
|
|
15
|
+
);
|
|
16
|
+
const newSeqObj = Object.assign({}, seqObj, {
|
|
17
|
+
sequence: getComplementSequenceString(seqObj.sequence, seqObj.isRna)
|
|
18
|
+
});
|
|
19
|
+
return tidyUpSequenceData(newSeqObj, options);
|
|
20
|
+
};
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import DNAComplementMap from "./DNAComplementMap";
|
|
2
|
+
import { merge } from "lodash";
|
|
3
|
+
|
|
4
|
+
|
|
5
|
+
// ac.throw([ac.string,ac.bool],arguments);
|
|
6
|
+
export default function getComplementSequenceString(sequence, isRna) {
|
|
7
|
+
// ac.throw([ac.string],arguments);
|
|
8
|
+
let complementSeqString = "";
|
|
9
|
+
const complementMap = merge(DNAComplementMap, isRna ? { a: 'u', A: 'U'} : {a: 't', A: 'T'});
|
|
10
|
+
for (let i = 0; i < sequence.length; i++) {
|
|
11
|
+
let complementChar = complementMap[sequence[i]];
|
|
12
|
+
if (!complementChar) {
|
|
13
|
+
complementChar = sequence[i];
|
|
14
|
+
// throw new Error('trying to get the reverse compelement of an invalid base');
|
|
15
|
+
}
|
|
16
|
+
complementSeqString += complementChar;
|
|
17
|
+
}
|
|
18
|
+
return complementSeqString;
|
|
19
|
+
};
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import getComplementSequenceString from "./getComplementSequenceString";
|
|
2
|
+
|
|
3
|
+
import assert from "assert";
|
|
4
|
+
|
|
5
|
+
describe('complement base should be shown correctly', () => {
|
|
6
|
+
it('complement base should be shown correctly for RNA sequence', () => {
|
|
7
|
+
assert.equal('UUA', getComplementSequenceString('AAU', true))
|
|
8
|
+
});
|
|
9
|
+
|
|
10
|
+
it('complement base should be shown correctly for DNA sequence', () => {
|
|
11
|
+
assert.equal('TTA', getComplementSequenceString('AAT'))
|
|
12
|
+
});
|
|
13
|
+
});
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
export default function getCutsiteType(restrictionEnzyme) {
|
|
2
|
+
const { topSnipOffset, bottomSnipOffset } = restrictionEnzyme;
|
|
3
|
+
if (topSnipOffset === bottomSnipOffset) {
|
|
4
|
+
return "blunt";
|
|
5
|
+
} else if (topSnipOffset < bottomSnipOffset) {
|
|
6
|
+
return "5' overhang";
|
|
7
|
+
} else {
|
|
8
|
+
return "3' overhang";
|
|
9
|
+
}
|
|
10
|
+
};
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import cutSequenceByRestrictionEnzyme from "./cutSequenceByRestrictionEnzyme";
|
|
2
|
+
|
|
3
|
+
export default function getCutsitesFromSequence(
|
|
4
|
+
sequence,
|
|
5
|
+
circular,
|
|
6
|
+
restrictionEnzymes
|
|
7
|
+
) {
|
|
8
|
+
const cutsitesByName = {};
|
|
9
|
+
for (let i = 0; i < restrictionEnzymes.length; i++) {
|
|
10
|
+
const re = restrictionEnzymes[i];
|
|
11
|
+
const cutsites = cutSequenceByRestrictionEnzyme(sequence, circular, re);
|
|
12
|
+
if (cutsites.length) {
|
|
13
|
+
cutsitesByName[re.name] = cutsites;
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
return cutsitesByName;
|
|
17
|
+
};
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import aminoAcidToDegenerateDnaMap from "./aminoAcidToDegenerateDnaMap";
|
|
2
|
+
|
|
3
|
+
export default function getDegenerateDnaStringFromAAString(aaString) {
|
|
4
|
+
return aaString
|
|
5
|
+
.split("")
|
|
6
|
+
.map(char => aminoAcidToDegenerateDnaMap[char.toLowerCase()] || "nnn")
|
|
7
|
+
.join("");
|
|
8
|
+
};
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import aminoAcidToDegenerateRnaMap from "./aminoAcidToDegenerateRnaMap";
|
|
2
|
+
|
|
3
|
+
export default function getDegenerateRnaStringFromAAString(aaString) {
|
|
4
|
+
return aaString
|
|
5
|
+
.split("")
|
|
6
|
+
.map(char => aminoAcidToDegenerateRnaMap[char.toLowerCase()] || "nnn")
|
|
7
|
+
.join("");
|
|
8
|
+
};
|