| 'use strict'; | ||
| var splitSequence=require('./splitSequence'); | ||
| function digestSequence(sequence, options) { | ||
| var options=options || {}; | ||
| sequence=sequence.replace(/^H([^a-z])/,'$1').replace(/OH$/,''); | ||
| options.enzyme = options.enzyme || 'trypsin'; | ||
| if (options.minMissed===undefined) options.minMissed=0; | ||
| if (options.maxMissed===undefined) options.maxMissed=0; | ||
| if (options.minResidue===undefined) options.minResidue=0; | ||
| if (options.maxResidue===undefined) options.maxResidue=Number.MAX_VALUE; | ||
| var regexp=getRegexp(options.enzyme); | ||
| var fragments=sequence.replace(regexp,"$1 ").split(/ /); | ||
| if (!fragments[fragments.length]) fragments=fragments.slice(0, fragments.length-1); | ||
| for (var i=0; i<fragments.length; i++) { | ||
| fragments[i]={ | ||
| sequence:fragments[i], | ||
| nbResidue:splitSequence(fragments[i]).length | ||
| } | ||
| } | ||
| var results=[]; | ||
| for (var i=0; i<fragments.length-options.minMissed; i++) { | ||
| for (var j=options.minMissed; j<=Math.min(options.maxMissed,fragments.length-i-1); j++) { | ||
| var fragment=''; | ||
| var nbResidue=0; | ||
| for (var k=i; k<=(i+j); k++) { | ||
| fragment+=fragments[k].sequence; | ||
| nbResidue+=fragments[k].nbResidue | ||
| } | ||
| if (fragment && nbResidue>=options.minResidue && nbResidue<=options.maxResidue) { | ||
| results.push("H"+fragment+"OH"); | ||
| } | ||
| } | ||
| } | ||
| return results; | ||
| } | ||
| function getRegexp(enzyme) { | ||
| switch (enzyme.toLowerCase().replace(/[^a-z0-9]/g,'')) { | ||
| case 'chymotrypsin': | ||
| return /(Phe|Tyr|Trp)(?!Pro)/g; | ||
| case 'trypsin': | ||
| return /(Lys|Arg)(?!Pro)/g; | ||
| case 'lysc': | ||
| return /(Lys)(?!Pro)/g; | ||
| case 'glucph4': | ||
| return /(Glu)(?!Pro|Glu)/g; | ||
| case 'glucph8': | ||
| return /(Asp|Glu)(?!Pro|Glu)/g; | ||
| case 'thermolysin': | ||
| return /(Leu|Ile|Met|Phe|Trp)/g; | ||
| case 'cyanogenbromide': | ||
| return /(Met)/g; | ||
| } | ||
| throw new Error('Digestion enzyme: '+enzyme+' is unknown'); | ||
| } | ||
| module.exports = digestSequence; | ||
| 'use strict'; | ||
| function splitSequence(sequence) { | ||
| var aas=sequence.replace(/([A-Z])/g," $1").split(/ /); | ||
| var begin=0; | ||
| while (aas[begin]==='' || aas[begin]==='H') { | ||
| begin++; | ||
| } | ||
| var end=aas.length-1; | ||
| while (aas[end]==='O' || aas[end]==='H') { | ||
| end--; | ||
| } | ||
| aas=aas.slice(begin,end+1); | ||
| return aas; | ||
| } | ||
| module.exports = splitSequence; | ||
+1
-1
| { | ||
| "name": "peptide", | ||
| "version": "1.1.0", | ||
| "version": "1.2.0", | ||
| "description": "Peptide", | ||
@@ -5,0 +5,0 @@ "keywords": [ |
+1
-1
| { | ||
| "name": "peptide", | ||
| "version": "1.1.0", | ||
| "version": "1.2.0", | ||
| "description": "Peptide", | ||
@@ -5,0 +5,0 @@ "keywords": [ |
+31
-1
@@ -49,3 +49,4 @@ # peptide | ||
| You can also specify internal fragments using the options 'ya' and 'yb' as well as the maximal length for internal fragments 'maxInternal' | ||
| You can also specify internal fragments using the options 'ya' and 'yb' as well as the minimal length of internal fragments 'minInternal' | ||
| and the maximal length of internal fragments 'maxInternal' | ||
@@ -67,2 +68,31 @@ ## Isoelectric Point | ||
| #### splitSequence(sequence) | ||
| Split a 3 letter code sequence respecting uppercase, lowercase in an array of residu. | ||
| __Arguments__ | ||
| * `sequence` - string with the amino acids sequence | ||
| #### digestSequence(sequence, options) | ||
| Allows to digest virtually a sequence | ||
| __Arguments__ | ||
| * `sequence` - string with the amino acids sequence | ||
| * `options` | ||
| * `minMissed` - minimal missed cleavage (default: 0) | ||
| * `maxMissed` - maximal missed cleavage (default: 0) | ||
| * `minResidue` - minimal number of residues (default: 0) | ||
| * `maxResidue` - maximal number of residues (default: infinity) | ||
| * `enzyme` - enzyme used for digestion | ||
| * chymotrypsin : (Phe|Tyr|Trp)(?!Pro) | ||
| * trypsin : (Lys|Arg)(?!Pro) | ||
| * lysc : (Lys)(?!Pro) | ||
| * glucph4 : (Glu)(?!Pro|Glu) | ||
| * glucph8 : (Asp|Glu)(?!Pro|Glu) | ||
| * thermolysin : (Leu|Ile|Met|Phe|Trp) | ||
| * cyanogenbromide : (Met) | ||
| #### calculateIEP(sequence) | ||
@@ -69,0 +99,0 @@ |
+14
-9
@@ -6,2 +6,4 @@ 'use strict'; | ||
| var chargePeptide = require('./chargePeptide'); | ||
| var splitSequence = require('./splitSequence'); | ||
| var digestSequence = require('./digestSequence'); | ||
@@ -14,5 +16,7 @@ exports.getInfo = function () { | ||
| exports.splitSequence=splitSequence; | ||
| exports.digestSequence=digestSequence; | ||
| exports.calculateIEP = function (sequence) { | ||
| var aas=sequence.replace(/([A-Z])/g," $1").split(/ /); | ||
| aas=aas.slice(2,aas.length-2); | ||
| var aas=splitSequence(sequence); | ||
| var result=IEP.calculateIEP(aas); | ||
@@ -23,4 +27,3 @@ return result; | ||
| exports.calculateIEPChart = function (sequence) { | ||
| var aas=sequence.replace(/([A-Z])/g," $1").split(/ /); | ||
| aas=aas.slice(2,aas.length-2); | ||
| var aas=splitSequence(sequence); | ||
| var result=IEP.calculateChart(aas); | ||
@@ -36,4 +39,3 @@ return result; | ||
| exports.calculateCharge = function (sequence, ph) { | ||
| var aas=sequence.replace(/([A-Z])/g," $1").split(/ /); | ||
| aas=aas.slice(2,aas.length-2); | ||
| var aas=splitSequence(sequence); | ||
| return IEP.calculateCharge(aas, ph); | ||
@@ -57,2 +59,3 @@ } | ||
| options.maxInternal = options.maxInternal || Number.MAX_VALUE; | ||
| options.minInternal = options.minInternal || 0; | ||
@@ -75,6 +78,8 @@ var mfs = []; | ||
| var iTerm=''; | ||
| for (var k=i; k<j; k++) { | ||
| iTerm+=mfparts[k]; | ||
| if ((j-i)>=options.minInternal){ | ||
| for (var k = i; k < j; k++) { | ||
| iTerm += mfparts[k]; | ||
| } | ||
| addITerm(mfs, iTerm, mfparts.length - i, j, options); | ||
| } | ||
| addITerm(mfs, iTerm, mfparts.length-i, j, options); | ||
| } | ||
@@ -81,0 +86,0 @@ } |
24087
17.47%16
14.29%666
12.5%137
28.04%