@teselagen/sequence-utils 0.3.7 → 0.3.8

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 (104) hide show
  1. package/README.md +89 -0
  2. package/bioData.d.ts +0 -339
  3. package/index.d.ts +7 -7
  4. package/index.js +238 -384
  5. package/index.mjs +238 -384
  6. package/index.umd.js +238 -384
  7. package/package.json +1 -2
  8. package/src/addGapsToSeqReads.js +2 -2
  9. package/src/adjustAnnotationsToInsert.js +3 -3
  10. package/src/adjustBpsToReplaceOrInsert.js +3 -3
  11. package/src/adjustBpsToReplaceOrInsert.test.js +0 -1
  12. package/src/aminoAcidToDnaRna.test.js +1 -1
  13. package/src/annotateSingleSeq.js +1 -1
  14. package/src/annotateSingleSeq.test.js +1 -4
  15. package/src/autoAnnotate.js +5 -2
  16. package/src/autoAnnotate.test.js +6 -30
  17. package/src/bioData.js +0 -365
  18. package/src/calculateNebTa.js +1 -1
  19. package/src/calculateNebTm.js +1 -1
  20. package/src/calculatePercentGC.js +2 -2
  21. package/src/calculateTm.js +19 -102
  22. package/src/computeDigestFragments.js +7 -4
  23. package/src/computeDigestFragments.test.js +1 -1
  24. package/src/condensePairwiseAlignmentDifferences.js +1 -1
  25. package/src/convertAACaretPositionOrRangeToDna.js +1 -1
  26. package/src/convertDnaCaretPositionOrRangeToAA.js +1 -1
  27. package/src/cutSequenceByRestrictionEnzyme.js +3 -3
  28. package/src/cutSequenceByRestrictionEnzyme.test.js +0 -1
  29. package/src/degenerateDnaToAminoAcidMap.js +1 -1
  30. package/src/degenerateRnaToAminoAcidMap.js +1 -1
  31. package/src/deleteSequenceDataAtRange.js +1 -1
  32. package/src/deleteSequenceDataAtRange.test.js +23 -9
  33. package/src/diffUtils.js +4 -4
  34. package/src/diffUtils.test.js +2 -2
  35. package/src/doesEnzymeChopOutsideOfRecognitionSite.js +1 -1
  36. package/src/doesEnzymeChopOutsideOfRecognitionSite.test.js +0 -2
  37. package/src/featureTypesAndColors.js +5 -5
  38. package/src/featureTypesAndColors.test.js +1 -1
  39. package/src/filterAminoAcidSequenceString.js +4 -7
  40. package/src/filterAminoAcidSequenceString.test.js +3 -1
  41. package/src/filterSequenceString.js +5 -3
  42. package/src/findNearestRangeOfSequenceOverlapToPosition.js +1 -1
  43. package/src/findOrfsInPlasmid.js +1 -1
  44. package/src/findSequenceMatches.js +9 -10
  45. package/src/generateAnnotations.js +1 -1
  46. package/src/generateSequenceData.js +1 -1
  47. package/src/generateSequenceData.test.js +1 -1
  48. package/src/getAllInsertionsInSeqReads.js +1 -1
  49. package/src/getAminoAcidDataForEachBaseOfDna.js +2 -2
  50. package/src/getAminoAcidDataForEachBaseOfDna.test.js +0 -2
  51. package/src/getAminoAcidFromSequenceTriplet.js +1 -1
  52. package/src/getAminoAcidStringFromSequenceString.js +1 -1
  53. package/src/getCodonRangeForAASliver.js +1 -1
  54. package/src/getComplementAminoAcidStringFromSequenceString.js +2 -5
  55. package/src/getComplementSequenceAndAnnotations.js +1 -2
  56. package/src/getComplementSequenceString.js +5 -3
  57. package/src/getComplementSequenceString.test.js +6 -6
  58. package/src/getCutsiteType.js +1 -1
  59. package/src/getCutsitesFromSequence.js +1 -1
  60. package/src/getDegenerateDnaStringFromAAString.js +1 -1
  61. package/src/getDegenerateRnaStringFromAAString.js +1 -1
  62. package/src/getDigestFragmentsForCutsites.js +5 -2
  63. package/src/getDigestFragmentsForRestrictionEnzymes.js +2 -2
  64. package/src/getInsertBetweenVals.js +2 -2
  65. package/src/getLeftAndRightOfSequenceInRangeGivenPosition.js +2 -2
  66. package/src/getLeftAndRightOfSequenceInRangeGivenPosition.test.js +0 -2
  67. package/src/getMassOfAaString.js +4 -1
  68. package/src/getMassofAaString.test.js +9 -8
  69. package/src/getOrfsFromSequence.js +1 -2
  70. package/src/getOrfsFromSequence.test.js +1 -3
  71. package/src/getOverlapBetweenTwoSequences.js +3 -3
  72. package/src/getOverlapBetweenTwoSequences.test.js +1 -1
  73. package/src/getPossiblePartsFromSequenceAndEnzymes.js +2 -2
  74. package/src/getReverseAminoAcidStringFromSequenceString.js +1 -1
  75. package/src/getReverseComplementAminoAcidStringFromSequenceString.js +9 -6
  76. package/src/getReverseComplementAnnotation.js +1 -1
  77. package/src/getReverseComplementSequenceAndAnnotations.js +2 -3
  78. package/src/getReverseComplementSequenceString.js +1 -2
  79. package/src/getReverseSequenceString.js +1 -1
  80. package/src/getSequenceDataBetweenRange.js +7 -4
  81. package/src/getSequenceDataBetweenRange.test.js +0 -1
  82. package/src/getVirtualDigest.js +6 -3
  83. package/src/guessIfSequenceIsDnaAndNotProtein.js +2 -2
  84. package/src/index.js +80 -80
  85. package/src/index.test.js +5 -4
  86. package/src/insertGapsIntoRefSeq.js +1 -1
  87. package/src/insertSequenceDataAtPosition.test.js +4 -2
  88. package/src/insertSequenceDataAtPositionOrRange.js +5 -5
  89. package/src/insertSequenceDataAtPositionOrRange.test.js +3 -17
  90. package/src/isEnzymeType2S.js +1 -1
  91. package/src/mapAnnotationsToRows.js +3 -3
  92. package/src/mapAnnotationsToRows.test.js +1 -3
  93. package/src/prepareCircularViewData.js +5 -5
  94. package/src/prepareCircularViewData.test.js +1 -1
  95. package/src/prepareRowData.js +1 -2
  96. package/src/prepareRowData.test.js +1 -3
  97. package/src/prepareRowData_output1.json +381 -381
  98. package/src/proteinAlphabet.js +34 -26
  99. package/src/rotateBpsToPosition.js +7 -11
  100. package/src/rotateBpsToPosition.test.js +6 -6
  101. package/src/rotateSequenceDataToPosition.js +4 -4
  102. package/src/shiftAnnotationsByLen.js +2 -2
  103. package/src/tidyUpAnnotation.js +8 -7
  104. package/src/tidyUpSequenceData.js +3 -3
@@ -1,10 +1,9 @@
1
1
  //tnr: half finished test.
2
2
 
3
-
4
3
  import chai from "chai";
5
4
 
6
- import {getRangeLength} from "@teselagen/range-utils";
7
- import {cloneDeep} from "lodash";
5
+ import { getRangeLength } from "@teselagen/range-utils";
6
+ import { cloneDeep } from "lodash";
8
7
  import chaiSubset from "chai-subset";
9
8
 
10
9
  import deleteSequenceDataAtRange from "./deleteSequenceDataAtRange";
@@ -18,7 +17,10 @@ describe("deleteSequenceDataAtRange", () => {
18
17
  sequence: "atagatag"
19
18
  };
20
19
  const range = { start: 0, end: 7 };
21
- const postDeleteSeqData = deleteSequenceDataAtRange(existingSequence, range);
20
+ const postDeleteSeqData = deleteSequenceDataAtRange(
21
+ existingSequence,
22
+ range
23
+ );
22
24
  postDeleteSeqData.sequence.length.should.equal(
23
25
  existingSequence.sequence.length - getRangeLength(range)
24
26
  );
@@ -28,7 +30,10 @@ describe("deleteSequenceDataAtRange", () => {
28
30
  sequence: "atagatag"
29
31
  };
30
32
  const range = { start: 4, end: 3 };
31
- const postDeleteSeqData = deleteSequenceDataAtRange(existingSequence, range);
33
+ const postDeleteSeqData = deleteSequenceDataAtRange(
34
+ existingSequence,
35
+ range
36
+ );
32
37
  postDeleteSeqData.sequence.length.should.equal(
33
38
  existingSequence.sequence.length -
34
39
  getRangeLength(range, existingSequence.sequence.length)
@@ -39,7 +44,10 @@ describe("deleteSequenceDataAtRange", () => {
39
44
  sequence: "atagatag"
40
45
  };
41
46
  const range = { start: 3, end: 5 };
42
- const postDeleteSeqData = deleteSequenceDataAtRange(existingSequence, range);
47
+ const postDeleteSeqData = deleteSequenceDataAtRange(
48
+ existingSequence,
49
+ range
50
+ );
43
51
  postDeleteSeqData.sequence.length.should.equal(
44
52
  existingSequence.sequence.length - getRangeLength(range)
45
53
  );
@@ -48,7 +56,7 @@ describe("deleteSequenceDataAtRange", () => {
48
56
  const existingSequence = {
49
57
  sequence: "atagatag",
50
58
  features: {
51
- "1": {
59
+ 1: {
52
60
  start: 7,
53
61
  end: 7
54
62
  }
@@ -56,7 +64,10 @@ describe("deleteSequenceDataAtRange", () => {
56
64
  };
57
65
  const clonedExistingSeq = cloneDeep(existingSequence);
58
66
  const range = { start: 3, end: 5 };
59
- const postDeleteSeqData = deleteSequenceDataAtRange(existingSequence, range);
67
+ const postDeleteSeqData = deleteSequenceDataAtRange(
68
+ existingSequence,
69
+ range
70
+ );
60
71
  existingSequence.should.deep.equal(clonedExistingSeq);
61
72
  postDeleteSeqData.sequence.length.should.equal(
62
73
  existingSequence.sequence.length - getRangeLength(range)
@@ -78,7 +89,10 @@ describe("deleteSequenceDataAtRange", () => {
78
89
  ]
79
90
  };
80
91
  const range = { start: -1, end: -1 };
81
- const postDeleteSeqData = deleteSequenceDataAtRange(existingSequence, range);
92
+ const postDeleteSeqData = deleteSequenceDataAtRange(
93
+ existingSequence,
94
+ range
95
+ );
82
96
  postDeleteSeqData.should.containSubset({
83
97
  sequence: "atgagagaga",
84
98
  features: [
package/src/diffUtils.js CHANGED
@@ -13,7 +13,7 @@ const getDiffFromSeqs = (oldData, newData, { ignoreKeys = [] } = {}) => {
13
13
  noTranslationData: true
14
14
  });
15
15
 
16
- [oldData, newData].forEach((d) => {
16
+ [oldData, newData].forEach(d => {
17
17
  [
18
18
  "cutsites",
19
19
  "orfs",
@@ -23,7 +23,7 @@ const getDiffFromSeqs = (oldData, newData, { ignoreKeys = [] } = {}) => {
23
23
  "description",
24
24
  "materiallyAvailable",
25
25
  ...ignoreKeys
26
- ].forEach((prop) => {
26
+ ].forEach(prop => {
27
27
  delete d[prop];
28
28
  });
29
29
  if (d.translations) {
@@ -43,7 +43,7 @@ const getDiffFromSeqs = (oldData, newData, { ignoreKeys = [] } = {}) => {
43
43
  return diff(oldData, newData);
44
44
  };
45
45
  const patchSeqWithDiff = (oldData, diff, { ignoreKeys = [] } = {}) => {
46
- ignoreKeys.forEach((k) => {
46
+ ignoreKeys.forEach(k => {
47
47
  delete diff[k];
48
48
  });
49
49
  return patch(
@@ -51,7 +51,7 @@ const patchSeqWithDiff = (oldData, diff, { ignoreKeys = [] } = {}) => {
51
51
  diff
52
52
  );
53
53
  };
54
- const reverseSeqDiff = (diff) => {
54
+ const reverseSeqDiff = diff => {
55
55
  return reverse(diff);
56
56
  };
57
57
 
@@ -1,8 +1,8 @@
1
1
  import chai from "chai";
2
2
  import assert from "assert";
3
- import {map} from "lodash";
3
+ import { map } from "lodash";
4
4
  import tidyUpSequenceData from "./tidyUpSequenceData";
5
- import {getDiffFromSeqs, patchSeqWithDiff, reverseSeqDiff} from "./diffUtils";
5
+ import { getDiffFromSeqs, patchSeqWithDiff, reverseSeqDiff } from "./diffUtils";
6
6
  import chaiSubset from "chai-subset";
7
7
 
8
8
  chai.should();
@@ -7,4 +7,4 @@ export default function doesEnzymeChopOutsideOfRecognitionSite(enzyme) {
7
7
  } else {
8
8
  return false;
9
9
  }
10
- };
10
+ }
@@ -1,5 +1,3 @@
1
-
2
-
3
1
  import chai from "chai";
4
2
  import doesEnzymeChopOutsideOfRecognitionSite from "./doesEnzymeChopOutsideOfRecognitionSite.js";
5
3
  import enzymeList from "./aliasedEnzymesByName";
@@ -1,4 +1,4 @@
1
- import {get, keyBy, filter} from "lodash";
1
+ import { get, keyBy, filter } from "lodash";
2
2
 
3
3
  const genbankFeatureTypes = [
4
4
  { name: "-10_signal", color: "#4ECDC4" },
@@ -137,7 +137,7 @@ const getFeatureTypes = ({ includeHidden } = {}) =>
137
137
  f => f.name
138
138
  );
139
139
 
140
- export {genbankFeatureTypes};
140
+ export { genbankFeatureTypes };
141
141
 
142
142
  export function getGenbankFeatureToColorMap() {
143
143
  const toRet = {};
@@ -147,6 +147,6 @@ export function getGenbankFeatureToColorMap() {
147
147
  return toRet;
148
148
  }
149
149
 
150
- export {getFeatureToColorMap};
151
- export {getFeatureTypes};
152
- export {getMergedFeatureMap};
150
+ export { getFeatureToColorMap };
151
+ export { getFeatureTypes };
152
+ export { getMergedFeatureMap };
@@ -2,7 +2,7 @@ import {
2
2
  getFeatureTypes,
3
3
  getFeatureToColorMap,
4
4
  getMergedFeatureMap,
5
- getGenbankFeatureToColorMap,
5
+ getGenbankFeatureToColorMap
6
6
  } from "./featureTypesAndColors";
7
7
 
8
8
  describe("getFeatureToColorMap", () => {
@@ -1,13 +1,10 @@
1
1
  //
2
- export default function filterAminoAcidSequenceString(
3
- sequenceString,
4
- options
5
- ) {
2
+ export default function filterAminoAcidSequenceString(sequenceString, options) {
6
3
  options = options || {};
7
4
  if (options.includeStopCodon) {
8
5
  //tnrtodo this maybe needs the stop codon char in it?
9
- return sequenceString.replace(/[^xtgalmfwkqespvicyhrndu.*]/gi, "");
6
+ return sequenceString?.replace(/[^xtgalmfwkqespvicyhrndu.*]/gi, "");
10
7
  }
11
8
  // ac.throw(ac.string, sequenceString);
12
- return sequenceString.replace(/[^xtgalmfwkqespvicyhrndu]/gi, "");
13
- };
9
+ return sequenceString?.replace(/[^xtgalmfwkqespvicyhrndu]/gi, "");
10
+ }
@@ -8,7 +8,9 @@ describe("filterAminoAcidSequenceString", () => {
8
8
  assert.equal(filteredString, "xtgalmfwkqespvicyhrnd");
9
9
  });
10
10
  it("should handle upper case letters", () => {
11
- const filteredString = filterAminoAcidSequenceString("xtgalmfWKQEspvicyhrnd");
11
+ const filteredString = filterAminoAcidSequenceString(
12
+ "xtgalmfWKQEspvicyhrnd"
13
+ );
12
14
  assert.equal(filteredString, "xtgalmfWKQEspvicyhrnd");
13
15
  });
14
16
  it("should handle the option to includeStopCodon by allowing periods", () => {
@@ -10,8 +10,10 @@ export default function filterSequenceString(
10
10
  if (sequenceString) {
11
11
  return sequenceString.replace(
12
12
  new RegExp(
13
- `[^${charOverrides ||
14
- `atgcyrswkmbvdhnu${additionalValidChars.split("").join("\\")}`}]`,
13
+ `[^${
14
+ charOverrides ||
15
+ `atgcyrswkmbvdhnu${additionalValidChars.split("").join("\\")}`
16
+ }]`,
15
17
  "gi"
16
18
  ),
17
19
  ""
@@ -19,4 +21,4 @@ export default function filterSequenceString(
19
21
  } else {
20
22
  return sequenceString;
21
23
  }
22
- };
24
+ }
@@ -1,4 +1,4 @@
1
- import {normalizeRange} from "@teselagen/range-utils";
1
+ import { normalizeRange } from "@teselagen/range-utils";
2
2
  function findNearestRangeOfSequenceOverlapToPosition(
3
3
  sequenceToSearch,
4
4
  overlapSequence,
@@ -23,4 +23,4 @@ export default function findOrfsInPlasmid(
23
23
  useAdditionalOrfStartCodons
24
24
  });
25
25
  return forwardOrfs.concat(reverseOrfs);
26
- };
26
+ }
@@ -1,8 +1,11 @@
1
- import {modulateRangeBySequenceLength, flipContainedRange} from "@teselagen/range-utils";
2
- import {reduce, uniqBy} from "lodash";
1
+ import {
2
+ modulateRangeBySequenceLength,
3
+ flipContainedRange
4
+ } from "@teselagen/range-utils";
5
+ import { reduce, uniqBy } from "lodash";
3
6
  import escapeStringRegexp from "escape-string-regexp";
4
7
  import getAminoAcidStringFromSequenceString from "./getAminoAcidStringFromSequenceString";
5
- import {ambiguous_dna_values, extended_protein_values} from "./bioData";
8
+ import { ambiguous_dna_values, extended_protein_values } from "./bioData";
6
9
  import getReverseComplementSequenceString from "./getReverseComplementSequenceString";
7
10
 
8
11
  export default function findSequenceMatches(
@@ -34,15 +37,11 @@ export default function findSequenceMatches(
34
37
  matches = [...matches, ...flippedReverseMatches];
35
38
  }
36
39
  return matches;
37
- };
40
+ }
38
41
 
39
42
  function findSequenceMatchesTopStrand(sequence, searchString, options = {}) {
40
- const {
41
- isCircular,
42
- isAmbiguous,
43
- isProteinSequence,
44
- isProteinSearch
45
- } = options;
43
+ const { isCircular, isAmbiguous, isProteinSequence, isProteinSearch } =
44
+ options;
46
45
  let searchStringToUse = escapeStringRegexp(searchString);
47
46
  if (isAmbiguous) {
48
47
  if (isProteinSearch || isProteinSequence) {
@@ -1,4 +1,4 @@
1
- import {generateRandomRange} from "@teselagen/range-utils";
1
+ import { generateRandomRange } from "@teselagen/range-utils";
2
2
  import shortid from "shortid";
3
3
 
4
4
  function generateAnnotations(
@@ -46,7 +46,7 @@ export default function generateSequenceData({
46
46
  sequenceLength / 3
47
47
  )
48
48
  };
49
- };
49
+ }
50
50
 
51
51
  // export default tidyUpSequenceData(exampleData)
52
52
 
@@ -1,7 +1,7 @@
1
1
  import generateSequenceData from "./generateSequenceData";
2
2
  import chai from "chai";
3
3
  import chaiSubset from "chai-subset";
4
- import {map} from "lodash";
4
+ import { map } from "lodash";
5
5
 
6
6
  chai.should();
7
7
  chai.use(chaiSubset);
@@ -52,7 +52,7 @@ export default function getAllInsertionsInSeqReads(seqReads) {
52
52
  }
53
53
  // sortedInsertions is an array of objects [{bpPos: bp pos of insertion, number: # of insertions}, {bpPos, number}, ...]
54
54
  return sortedInsertions;
55
- };
55
+ }
56
56
 
57
57
  // function getAllInsertionsInSeqReads(seqReads) {
58
58
  // let allInsertionBpPosInSeqReads = [];
@@ -1,4 +1,4 @@
1
- import {translateRange, getSequenceWithinRange} from "@teselagen/range-utils";
1
+ import { translateRange, getSequenceWithinRange } from "@teselagen/range-utils";
2
2
  import revComp from "./getReverseComplementSequenceString";
3
3
  import getAA from "./getAminoAcidFromSequenceTriplet";
4
4
 
@@ -160,4 +160,4 @@ export default function getAminoAcidDataForEachBaseOfDna(
160
160
  throw new Error("something went wrong!");
161
161
  }
162
162
  return aminoAcidDataForEachBaseOfDNA;
163
- };
163
+ }
@@ -1,5 +1,3 @@
1
-
2
-
3
1
  import getAminoAcidDataForEachBaseOfDna from "./getAminoAcidDataForEachBaseOfDna.js";
4
2
 
5
3
  import getAA from "./getAminoAcidFromSequenceTriplet";
@@ -19,4 +19,4 @@ export default function getAminoAcidFromSequenceTriplet(sequenceString) {
19
19
  ] || "x";
20
20
 
21
21
  return proteinAlphabet[letter.toUpperCase()];
22
- };
22
+ }
@@ -15,4 +15,4 @@ export default function getAminoAcidStringFromSequenceString(sequenceString) {
15
15
  });
16
16
  aaString = aaArray.join("");
17
17
  return aaString;
18
- };
18
+ }
@@ -60,4 +60,4 @@ export default function getCodonRangeForAASliver(
60
60
  }
61
61
  }
62
62
  }
63
- };
63
+ }
@@ -4,8 +4,5 @@ export default function getComplementAminoAcidStringFromSequenceString(
4
4
  sequenceString
5
5
  ) {
6
6
  const aaString = getAminoAcidStringFromSequenceString(sequenceString, true);
7
- return aaString
8
- .split("")
9
- .reverse()
10
- .join("");
11
- };
7
+ return aaString.split("").reverse().join("");
8
+ }
@@ -1,7 +1,6 @@
1
1
  import getComplementSequenceString from "./getComplementSequenceString";
2
2
  import tidyUpSequenceData from "./tidyUpSequenceData";
3
3
 
4
-
5
4
  import getSequenceDataBetweenRange from "./getSequenceDataBetweenRange";
6
5
 
7
6
  // ac.throw([ac.string,ac.bool],arguments);
@@ -17,4 +16,4 @@ export default function getComplementSequenceAndAnnotations(
17
16
  sequence: getComplementSequenceString(seqObj.sequence, seqObj.isRna)
18
17
  });
19
18
  return tidyUpSequenceData(newSeqObj, options);
20
- };
19
+ }
@@ -1,12 +1,14 @@
1
1
  import DNAComplementMap from "./DNAComplementMap";
2
2
  import { merge } from "lodash";
3
3
 
4
-
5
4
  // ac.throw([ac.string,ac.bool],arguments);
6
5
  export default function getComplementSequenceString(sequence, isRna) {
7
6
  // ac.throw([ac.string],arguments);
8
7
  let complementSeqString = "";
9
- const complementMap = merge(DNAComplementMap, isRna ? { a: 'u', A: 'U'} : {a: 't', A: 'T'});
8
+ const complementMap = merge(
9
+ DNAComplementMap,
10
+ isRna ? { a: "u", A: "U" } : { a: "t", A: "T" }
11
+ );
10
12
  for (let i = 0; i < sequence.length; i++) {
11
13
  let complementChar = complementMap[sequence[i]];
12
14
  if (!complementChar) {
@@ -16,4 +18,4 @@ export default function getComplementSequenceString(sequence, isRna) {
16
18
  complementSeqString += complementChar;
17
19
  }
18
20
  return complementSeqString;
19
- };
21
+ }
@@ -2,12 +2,12 @@ import getComplementSequenceString from "./getComplementSequenceString";
2
2
 
3
3
  import assert from "assert";
4
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))
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
8
  });
9
9
 
10
- it('complement base should be shown correctly for DNA sequence', () => {
11
- assert.equal('TTA', getComplementSequenceString('AAT'))
10
+ it("complement base should be shown correctly for DNA sequence", () => {
11
+ assert.equal("TTA", getComplementSequenceString("AAT"));
12
12
  });
13
- });
13
+ });
@@ -7,4 +7,4 @@ export default function getCutsiteType(restrictionEnzyme) {
7
7
  } else {
8
8
  return "3' overhang";
9
9
  }
10
- };
10
+ }
@@ -14,4 +14,4 @@ export default function getCutsitesFromSequence(
14
14
  }
15
15
  }
16
16
  return cutsitesByName;
17
- };
17
+ }
@@ -5,4 +5,4 @@ export default function getDegenerateDnaStringFromAAString(aaString) {
5
5
  .split("")
6
6
  .map(char => aminoAcidToDegenerateDnaMap[char.toLowerCase()] || "nnn")
7
7
  .join("");
8
- };
8
+ }
@@ -5,4 +5,4 @@ export default function getDegenerateRnaStringFromAAString(aaString) {
5
5
  .split("")
6
6
  .map(char => aminoAcidToDegenerateRnaMap[char.toLowerCase()] || "nnn")
7
7
  .join("");
8
- };
8
+ }
@@ -1,4 +1,7 @@
1
- import {normalizePositionByRangeLength, getRangeLength} from "@teselagen/range-utils";
1
+ import {
2
+ normalizePositionByRangeLength,
3
+ getRangeLength
4
+ } from "@teselagen/range-utils";
2
5
 
3
6
  export default function getDigestFragmentsForCutsites(
4
7
  sequenceLength,
@@ -102,4 +105,4 @@ export default function getDigestFragmentsForCutsites(
102
105
  return true;
103
106
  });
104
107
  return fragments;
105
- };
108
+ }
@@ -1,6 +1,6 @@
1
1
  import getDigestFragmentsForCutsites from "./getDigestFragmentsForCutsites";
2
2
  import cutSequenceByRestrictionEnzyme from "./cutSequenceByRestrictionEnzyme";
3
- import {flatMap} from "lodash";
3
+ import { flatMap } from "lodash";
4
4
 
5
5
  export default function getDigestFragmentsForRestrictionEnzymes(
6
6
  sequence,
@@ -24,4 +24,4 @@ export default function getDigestFragmentsForRestrictionEnzymes(
24
24
  cutsites,
25
25
  opts
26
26
  );
27
- };
27
+ }
@@ -1,4 +1,4 @@
1
- import {normalizePositionByRangeLength1Based} from "@teselagen/range-utils";
1
+ import { normalizePositionByRangeLength1Based } from "@teselagen/range-utils";
2
2
 
3
3
  export default function getInsertBetweenVals(
4
4
  caretPosition,
@@ -25,4 +25,4 @@ export default function getInsertBetweenVals(
25
25
  } else {
26
26
  return [sequenceLength, 1];
27
27
  }
28
- };
28
+ }
@@ -2,7 +2,7 @@ import {
2
2
  isPositionWithinRange,
3
3
  getSequenceWithinRange,
4
4
  normalizePositionByRangeLength,
5
- isPositionCloserToRangeStartThanRangeEnd,
5
+ isPositionCloserToRangeStartThanRangeEnd
6
6
  } from "@teselagen/range-utils";
7
7
 
8
8
  export default function getLeftAndRightOfSequenceInRangeGivenPosition(
@@ -36,4 +36,4 @@ export default function getLeftAndRightOfSequenceInRangeGivenPosition(
36
36
  }
37
37
  }
38
38
  return result;
39
- };
39
+ }
@@ -1,5 +1,3 @@
1
-
2
-
3
1
  import chai from "chai";
4
2
  import cutSequenceByRestrictionEnzyme from "./cutSequenceByRestrictionEnzyme.js";
5
3
  import enzymeList from "./aliasedEnzymesByName";
@@ -20,5 +20,8 @@ export default function getMassOfAaString(
20
20
  if (divideByThree) {
21
21
  sumMass /= 3;
22
22
  }
23
+ if (aaString.length > 0) {
24
+ sumMass = sumMass + 18.0153;
25
+ }
23
26
  return Math.round(sumMass * 10 ** numsAfterDecimal) / 10 ** numsAfterDecimal;
24
- };
27
+ }
@@ -5,14 +5,15 @@ describe("getMassOfAaString", () => {
5
5
  it("an empty string has a mass of 0", () => {
6
6
  assert.equal(getMassOfAaString(""), 0);
7
7
  });
8
- it("A string with one amino acids returns the correct results", () => {
9
- assert.equal(getMassOfAaString("T"), 119.1);
10
- assert.equal(getMassOfAaString("A"), 89.1);
11
- assert.equal(getMassOfAaString("F"), 165.2);
8
+ it("string with one amino acid returns the correct results", () => {
9
+ assert.equal(getMassOfAaString("T"), 119.12);
10
+ assert.equal(getMassOfAaString("A"), 89.09);
11
+ assert.equal(getMassOfAaString("F"), 165.19);
12
12
  });
13
- it("A string a long string of amino acids returns the correct results", () => {
14
- assert.equal(getMassOfAaString("TAGATAFPFPFPA"), 1510.6);
15
- assert.equal(getMassOfAaString("TFPMAV"), 754.8);
16
- assert.equal(getMassOfAaString("TFPMAVTAGATAFPFPFPA"), 2265.4);
13
+ it("a long string of amino acids returns the correct results", () => {
14
+ assert.equal(getMassOfAaString("TAGATAFPFPFPA"), 1294.45);
15
+ assert.equal(getMassOfAaString("TFPMAV"), 664.81);
16
+ assert.equal(getMassOfAaString("TFPMAVTAGATAFPFPFPA"), 1941.25);
17
+ assert.equal(getMassOfAaString("ARNDCEQGHILKMFPSTWYV"), 2395.71);
17
18
  });
18
19
  });
@@ -1,7 +1,6 @@
1
1
  import shortid from "shortid";
2
2
  import getReverseComplementSequenceString from "./getReverseComplementSequenceString";
3
3
 
4
-
5
4
  /**
6
5
  * @private
7
6
  * Finds ORFs in a given DNA forward in a given frame.
@@ -121,4 +120,4 @@ export default function getOrfsFromSequence(options) {
121
120
  return false;
122
121
  });
123
122
  return nonDuplicatedOrfRanges;
124
- };
123
+ }
@@ -1,6 +1,4 @@
1
-
2
-
3
- import {expect} from "chai";
1
+ import { expect } from "chai";
4
2
 
5
3
  import getOrfsFromSequence from "./getOrfsFromSequence.js";
6
4
  // getOrfsFromSequence(frame, sequence, minimumOrfSize, forward, circular)
@@ -1,4 +1,4 @@
1
- import {modulatePositionByRange} from "@teselagen/range-utils";
1
+ import { modulatePositionByRange } from "@teselagen/range-utils";
2
2
 
3
3
  /**
4
4
  * This function gets the overlapping of one sequence to another based on sequence equality.
@@ -10,7 +10,7 @@ import {modulatePositionByRange} from "@teselagen/range-utils";
10
10
  */
11
11
  export default function getOverlapBetweenTwoSequences(
12
12
  sequenceToFind,
13
- sequenceToSearchIn,
13
+ sequenceToSearchIn
14
14
  ) {
15
15
  sequenceToSearchIn = sequenceToSearchIn.toLowerCase();
16
16
  sequenceToFind = sequenceToFind.toLowerCase();
@@ -27,4 +27,4 @@ export default function getOverlapBetweenTwoSequences(
27
27
  } else {
28
28
  return null;
29
29
  }
30
- };
30
+ }
@@ -1,4 +1,4 @@
1
- import {expect} from "chai";
1
+ import { expect } from "chai";
2
2
  import getOverlapBetweenTwoSequences from "./getOverlapBetweenTwoSequences.js";
3
3
  describe("getOverlapBetweenTwoSequences", () => {
4
4
  it("should get the range overlap given a seq and a seq to search in", () => {
@@ -1,5 +1,5 @@
1
1
  import getComplementSequenceString from "./getComplementSequenceString";
2
- import {normalizePositionByRangeLength} from "@teselagen/range-utils";
2
+ import { normalizePositionByRangeLength } from "@teselagen/range-utils";
3
3
  import cutSequenceByRestrictionEnzyme from "./cutSequenceByRestrictionEnzyme";
4
4
 
5
5
  export default function getPossiblePartsFromSequenceAndEnzyme(
@@ -67,7 +67,7 @@ export default function getPossiblePartsFromSequenceAndEnzyme(
67
67
  });
68
68
  return parts;
69
69
  }
70
- };
70
+ }
71
71
 
72
72
  function getPartBetweenEnzymesWithInclusiveOverhangs(cut1, cut2, seqLen) {
73
73
  const firstCutOffset = getEnzymeRelativeOffset(cut1.restrictionEnzyme);
@@ -17,4 +17,4 @@ export default function getReverseAminoAcidStringFromSequenceString(
17
17
  });
18
18
  aaString = aaArray.join("");
19
19
  return aaString;
20
- };
20
+ }