nucleotide
Version:
Deal with nucleotides and molecular formula
71 lines (61 loc) • 1.81 kB
JavaScript
import { addFiveTerm } from './addFiveTerm';
import { addFiveTermBaseLoss } from './addFiveTermBaseLoss';
import { addInternalTerm } from './addInternalTerm';
import { addThreeTerm } from './addThreeTerm';
import { addThreeTermBaseLoss } from './addThreeTermBaseLoss';
export function generateFragments(mf, options) {
if (options === undefined) {
options = {
a: false,
ab: false,
b: false,
c: false,
d: false,
dh2o: false,
w: false,
x: false,
y: false,
z: false,
zch2: false,
aw: false,
bw: false,
abw: false,
aby: false,
abcdBaseLoss: false,
wxyzBaseLoss: false,
};
}
let mfs = [];
// need to allow 0-9 to deal with neutral loss
let mfparts = mf
.replaceAll(/([\d)a-z])([A-Z][a-z](?=[a-z]))/g, '$1 $2')
.split(/ /);
let fiveTerm = '';
let threeTerm = '';
if (mfparts[0].startsWith('(')) {
fiveTerm += mfparts[0];
mfparts = mfparts.splice(1);
}
if (mfparts.at(-1).includes('(')) {
threeTerm += mfparts.at(-1).replace(/^[^()]*/, '');
mfparts[mfparts.length - 1] = mfparts.at(-1).replace(/\(.*/, '');
}
for (let ter5 = 1; ter5 < mfparts.length; ter5++) {
fiveTerm += mfparts[ter5 - 1];
threeTerm = mfparts[mfparts.length - ter5] + threeTerm;
addFiveTerm(mfs, fiveTerm, ter5, options);
addFiveTermBaseLoss(mfs, fiveTerm, ter5, options);
addThreeTerm(mfs, threeTerm, ter5, options);
addThreeTermBaseLoss(mfs, threeTerm, ter5, options);
}
for (let i = 1; i < mfparts.length - 1; i++) {
let internal = '';
for (let j = i; j < mfparts.length - 1; j++) {
internal += mfparts[j];
if (j > i) {
addInternalTerm(mfs, internal, mfparts.length - i, j + 1, options);
}
}
}
return mfs;
}