New Case Study:See how Anthropic automated 95% of dependency reviews with Socket.Learn More
Socket
Sign inDemoInstall
Socket

mass-fragmentation

Package Overview
Dependencies
Maintainers
1
Versions
44
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

mass-fragmentation - npm Package Compare versions

Comparing version

to
0.4.0

src/__tests__/__snapshots__/reactionFragmentation.test.js.snap

470

lib/index.js

@@ -7,3 +7,8 @@ 'use strict';

var openchemlibUtils = require('openchemlib-utils');
var OCL = require('openchemlib');
function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
var OCL__default = /*#__PURE__*/_interopDefaultLegacy(OCL);
/**

@@ -330,2 +335,467 @@ * The function performs the fragmentation of all single linear bonds

const cid = {
positive: [
{
Label: 'Alpha cleavage',
rxnCode:
'gCa@@duPGtF@!fI@Gu` eM@bXzB#qbq a` qQp#!RtEJHC^h@GPhB !RGUi| !R@FN?Dquz_@',
},
{
Label: 'Alpha cleavage',
rxnCode:
'gJPI@DBTijhCzB@!gK`I@DJTcj`OhH@#qbqh qfUH#!Rmwwp_[]|_g|]lcp !R?`BE@[_|b@H]vgp',
},
{
Label: 'Alpha cleavage',
rxnCode:
'gJPa@eJSKTA}E@!eMH`eIxH eFHBLGtP#qbqh qbH qu#!Rw`BH?J_|bMt]|hH !Rwpq?Dquz?@ !R?`@]vgp',
},
{
Label: 'Alpha cleavage',
rxnCode:
'gJQIL@`ReMS@_PP!eMH`eIxH eFB@HcA}D@#qbqh qJh Ql#!Rm?wpwXE?y{p]lmp !Rwxq?Dquz?@ !R@NL]vgp',
},
{
Label: 'Alpha cleavage',
rxnCode:
'gJXA@IRij`OhH@!gKhAAirPFhB#qbuH qfjH#!RM{upoPD@Mwp]lgp !R@BL?x~WAwrp]Vgp',
},
{
Label: 'Alpha cleavage',
rxnCode:
'gJYADEJSKTA}E`!eMH`eIxH eF`BLGtX#qbqh qbH qu#!RO`BH?C_|bGt]|hH !Rwtq?Dquz_@ !R?`@]vgp',
},
{
Label: 'Alpha cleavage',
rxnCode:
'gC`AAJTu@P!eF@bXpP eF@HpP#qTq qa Q\\#!R@AM?DpAlGTJB !R@DQCrip !R_sL}Nmp',
},
{
Label: 'Alpha cleavage',
rxnCode:
'gChA@IRfhCzC@!eF`BLD eF@bXpP#qbq Ql qQ#!R{|L@p~~lG[K| !R@DL]Vgp !R_xp]ngp',
},
{
Label: 'Aromatic Indicutive Cleavage',
rxnCode:
'gC`AAJTu@]SP!eF@bXpP eF@HhP#qrL QX qq#!Rgzp@kI}cG]K| !R@BL]vgp !R@BL]~kp',
},
{
Label: 'Benzyl carbocation Resonance',
rxnCode:
'gOpAGJUKutkPD!gOpAMJUNusMHD#qkOfP qi{tP#!Rm?w~@Hc}mpJw@ox@GWHB !R?`BH?[_}mpJw@k_}G]k|',
},
{
Label: 'Benzyl carbocation Resonance',
rxnCode:
'gOpAMJUNusMHD!gOpAGJUKutkPD#qkyfP qkOfP#!Rb@Jw@oy?bOvH?_y?G_H| !Rb@K~_{\\BbOvH?_y?GXY|',
},
{
Label: 'Benzyl carbocation Resonance',
rxnCode:
'gOpAMJUNusMHD!gOpAMJUKua@@D#qi{tP qkOfP#!R?`BH?[_}mpJw@k_}GWK| !Rm?w~@Hc}mpJw@ox@G]k|',
},
{
Label: 'Carbon monoxide eliminations from cyclic carbonyls compounds',
rxnCode:
'gOp`@tfUkZj`H!gKQ@@eKcUPD eFHBND#q~QeX q\\jH q~#!RmpK~@K_}mpJw@k_}GUJB !RXFUSY?y?KF\\]Vmp !R_vp]^gp',
},
{
Label: 'Dioxolane elimination (aromatic)',
rxnCode:
'detDB@iiRfUwJFZB@H@H!eFHBJD daDHB@RTfUVyiZPB#IaLhfGed Ql IZdDezP#!RXJhcFCx@NALlFC`Lp@[@FZJpGWK| !R@FL]vkp !R@CzbuzJppAg@Ac`LNAL]aop',
},
{
Label: 'Displacement Reaction a.',
rxnCode:
'daxDB@XIRUUzj`CZNcGPpUqDX`d_{G@!gKQA@IReqjhB eFHBND#qbqkx q~Yh Qd#!R_g}~_?A}|Gsp?_A||Gt]Rap !R_g|_za~eTv\\]vcp !R@FL]Agp',
},
{
Label: 'Displacement Reaction a.',
rxnCode:
'daxHbN@HzTiuZjl@vaHpdLE\\QFHIG~p`!gKPI@DBTi\\Zj@` eFHBND#q{ENT q~Yh Qd#!Rm?vH?[\\Bm?vw@ox@?`@]ThH !R?g|_Fa}eTv\\]vcp !R@AL]Agp',
},
{
Label: 'Displacement Reaction a.',
rxnCode:
'dazHBF@IRUUzj`CZNcGPpUqDX`d_{G@!gKXA@IReqjhB eFHBND#q]|VH qOtP q]#!RO`@~@N\\Byswg@n\\}y?p]XbH !RcLbLipBe@Lh]Ngp !R_pp]~op',
},
{
Label: 'Displacement Reaction b.',
rxnCode:
'gJXA@IRUjPH!eM@fXvB eF`BLGtP#qlVH qrH ql#!R@FL@[@CC@Fp]bgp !RGtL@PqwZO@ !R@DL]~gp',
},
{
Label: 'Displacement Reaction b.',
rxnCode:
'gFpa@eJSJZuLA}E@!gBQA@IReZf@~`` eFHBND#qYuT quT qY#!RE?rQ@G\\M[xYsAAwR`` !R@Cx~Gsx_GUj| !R_pp]nop',
},
{
Label: 'Displacement Reaction b.',
rxnCode:
'gFpa@eJSJZuRA|eE`!gCaA@IRUdCzB@ eFHBND#qYuT qre qY#!RM?sQ@D}MW|YKAAwb`` !R_rq?Dw|lGYk| !R_rp]~gp',
},
{
Label: 'Displacement Reaction b.',
rxnCode:
'gFpa@eJSJZuTA|eE`!gJQA@IRUzPH fI@Gu`#qYuT qYlP Qp#!RM?sQ@D}MW|YKAAvR`` !R_`A~@M\\Buwt]fdH !RGWi|',
},
{
Label: 'Displacement Reaction b.',
rxnCode:
'gFqIL@`ReLfts@_HQX@!gC`I@DBTeY@~`` eFHBND#qrlK quY Qd#!Rsg}_qdc}Stw}mquRw@ !R_rq?Dw|lGYk| !R_rp]~gp',
},
{
Label: 'Displacement Reaction b.',
rxnCode:
'gFqIL@`ReLftt`_PP!gBPI@DBTiVi`OhH@ eFHBND#qrlK qqk Qd#!Rsg}_qdc}Stu}mqvrw@ !R@Gy~Owx?GUj| !R_rp]ngp',
},
{
Label: 'Displacement Reaction b.',
rxnCode:
'gFqIL@`ReLftu@_HQX@!gJQA@IRUzPH fH`PA}X#qrlK qbKh Qp#!RSg}_Q`a}Sxu}mqtrw@ !Ro`B~@I_|e{t]fdH !RGWi|',
},
{
Label: 'Displacement Reaction b.',
rxnCode:
'gFyADEJSJZuTA|ee`!gJQA@IRUzPH fJ@Gup#qYuT qYlP Qp#!R]?pq@B?MOrXkAAvR`` !R?`C~@K\\Bm?t]fdH !RG_i|',
},
{
Label: 'Displacement Reaction b.',
rxnCode:
'gOpiEPDBTfVKZj`OdHl@!gGQIJ@`Rdj|tHgzV@ fI@Gu`#qbqkx qbOn qX#!RU?qQ@@~MGtXYGplDG^K| !Rog~~_{B}lCrpoQtzg@ !RGPY|',
},
{
Label: 'Displacement Reaction b.',
rxnCode:
'gOqa@jIRYXmjj@~Pbp!gGPaAQJRksPb_iX@ fI@Gu`#qYuW` qYlV qx#!RU?qQ@@~MGtXYGplDG^K| !Rog~~_{B}lCrpoQtzg@ !RGPY|',
},
{
Label: 'Grob-Wharton',
rxnCode:
'gNpaAQJSOMU@_HQX@!gCa@@duPGtD@ eMH`eIXOh`#qNWeX qNW qlX#!Rb@JH_Wx@b@I~@Ha}GWJB !Ru?sW_Wx@GYjB !R_rq?Dqwz_@',
},
{
Label: 'Grob-Wharton',
rxnCode:
'gNxaLJIRU[jXCzZ@!eMH`eIxH eF`BJGtP eFHBND#q{iV` Qv qM q{#!Rm?vw?[\\|m?v~_{\\|GXJ\\ !R@Kx@oauZ_@ !R@BL]^gp !R_tp]Agp',
},
{
Label: 'Inductive cleavage',
rxnCode:
'gChA@IRVhCTB!eF``fJD eF@Hp_za@#qbq Qd qq#!R@AL@[@@SGPi| !R@AL]Vgp !R@AL]^kp',
},
{
Label: 'Inductive cleavages assisted by β-hydrogen removal',
rxnCode:
'daxHB@zTeVVjh@~ah@!gGQA@IRUVi@~`` eF@HhP#IaLJnXP qbqk IxP#!RtEsPO]A\\tCwPWCy?tCt]Bkp !R@DL@[@AC@Fp@Pquz_@ !R@DL]akp',
},
{
Label: 'Inductive cleavages assisted by β-hydrogen removal',
rxnCode:
'gFqAAYRe|Zj`OiH@!gGQA@IRezY@~``#qbqk qbqk#!R_O@T~pAYDEKp@quJ_@ !R@Fq?[@@S_qM?[AwZ_@',
},
{
Label: 'Ionization',
rxnCode: 'eF`BLGtX!eF``fLGt\\#Qd Qd#!R@FL]Rgp !R@FL]vgp',
},
{
Label: 'Ionization',
rxnCode: 'eM`BN`~b@!eM``fN`~c@#Q[ Q[#!R@AM?DquRo@ !R@AM?Dqtzo@',
},
{
Label: 'Ionization',
rxnCode: 'gCh@AGj@`!gChA@Icu@_PP#qTq qTq#!RbOvw?_x@GYK| !RbOvw?_x@GWk|',
},
{
Label: 'Ionization',
rxnCode:
'gCa@@dmPFtwhHcMCAlp!eMH`eIhOhp#Qv@ Qv#!R@AL@[@@SGSH| !R@Fp@Dqwz``',
},
{
Label: 'Ionization',
rxnCode: 'eFB@HcA}D@!eFB`HIcA}F@#QX QX#!R_vp]bgp !R_vp]vgp',
},
{
Label: 'Ionization',
rxnCode: 'eMB@HchH!eMB`HIchOh`#Q[ Q[#!R@AM?Dqtbo@ !R@AM?Dquz@`',
},
{
Label: 'Ionization',
rxnCode: 'eMHAIXMicLLG~r!eFH`fJGtP#QX QX#!R@AL@[AtbO@ !R@AL]nkp',
},
{
Label: 'Ionization',
rxnCode: 'eMHBN``!eMH`fN`~b@#Qg Qg#!R@FL?XqtJ_@ !R@FL?XqwZ_@',
},
{
Label: 'Ionization',
rxnCode: 'eFB@HcA}D@!eFB`HIcA}F@#QX QX#!R_vp]bgp !R_vp]vgp',
},
{
Label: 'Ionization',
rxnCode: 'eFHBLGtP!eFH`fLGtX#QX QX#!R@AL]Pmp !R@AL]^gp',
},
{
Label: 'Ionization',
rxnCode: 'eM`BN`~b@!eM``fN`~bOza@#Qg Qg#!R@Fq?[AuJ?@ !R@FM?Dqvz_@',
},
{
Label: 'Oxonium Resonance',
rxnCode: 'eFH`fJGtP!eFHbfLGtP#QX QX#!R@Fp]rgp !R@FL]Nkp',
},
{
Label: 'Remote Hydrogen rearrangement',
rxnCode:
'gCa@@dmPGtD@!fI@Gu` eM@HvB#qbq a` qrH#!RuKWT|`AIw[I\\ !RGUi| !RTMq?[Ivz_@',
},
{
Label: 'Remote Hydrogen rearrangement',
rxnCode:
'gCa@@eMPD!eFHBLGtP eF@HhP#qTq Q\\ qa#!R@NL?xpAlG_K\\ !R@FL]Ngp !R@FL]Akp',
},
{
Label: 'Remote Hydrogen rearrangement',
rxnCode:
'dcN@B@J\\bRbRaWCUUUL@_ITC@!gFpAEJTjZuRA@ eM`AIhH eM@HvB#IO^adkBFU qb^i IO^ IeQ#!Rm?u~_?C}|Gq~_?A}|Gu~_?A||Gwp_Atr{@ !R_g~w_K_}mwvw_AvZo@ !R@Fp@XqtF_@ !ROvL@XquFo@',
},
{
Label: 'Resonance',
rxnCode: 'eMB`HIRVB!eMB`HiRZB#Qg Qg#!R@Fp@HquJ_@ !R@Fp@Hqtz?@',
},
{
Label: 'Resonance',
rxnCode: 'eM``eIXH!eM`beIhH#Qg Qg#!R@Fp@XquJ_@ !R@Fp@Xqtz?@',
},
{
Label: 'Retro-Diels–Alder ',
rxnCode:
'daD@@DiURijj`B!gC`@Die@` gC`@DiZDC@#IZhILxP q]a ISND#!RmwvH__y??g~H_Xa}?g|]lnp !R@Fq?[@@SGWk| !Rb@K~_xc}GUj|',
},
{
Label: 'Retro-Diels–Alder ',
rxnCode:
'daDH@@RfVijZj@H!gGQ@@dsMLA@ eF@HhP#IhfpXS` IhlEN qc#!RbGw~@H`B?g~H@ox@bGt]Bgp !RmpJw?_x@?g~w@atZ?@ !R@AL]~kp',
},
{
Label: 'Retro-Diels–Alder ',
rxnCode:
'dclD@@QIeUeieujZij@H!eFHBJD deTH@@RUf\\YYif`aF#ItYyRkFMH IeP It^JlMd`#!R?g~H?[_}?g?~_{_}m?w~_xc}?g~w?QuRK@ !R_vp]~gp !RmpK~@K\\Bm?w~@Oy?m?rw@ox@G^hb',
},
{
Label: 'Retro-Diels–Alder ',
rxnCode:
'dieH@DxLbbbQ[fjZ`B!gGY@BDeUYaLp eM`BM``#IgBRnaa IgDaa qMx#!RmpJw__x@mpK~_{\\B?`Bw@atb@` !Rb@JH@hc}b@K~@Atz`` !R_qL@DqtF_@',
},
{
Label: 'Retro-Diels–Alder ',
rxnCode:
'dif@@@Ri^zZjfh@`!gGP@DjZY`H eM`BM``#IZhddp^ Ipdza IZI#!R?g~H@k\\BbGvH_X`B?g~H_Qurg@ !Rm?w~@Hc}mpK~_qvZo@ !R_qL@Dqwz_@',
},
{
Label: 'Retro-Diels–Alder ',
rxnCode:
'dclDB@{iRYeevz]ZA`b@B!gGPa@QJRmsPbX gFp@DiTt@@B#IwbFleVPx IwaeS qb^i#!RbCvH?Ky_bCv~@H`}oe~H?Hc|oe~~@Aurw@ !RbKvHoX`Bo`BHoQtz_@ !Rog~wOK_}m?vwOAwzO@',
},
{
Label: 'Retro-Diels–Alder ',
rxnCode:
'dmLDB@{irJJIQEneV`hB@B!eF@HhP didDB@hIRVY~G``@@`#IwlDdeZa` IFP IwlIEjF#!Rg`BH?H_|g`BHGYx@a?rH?Hc|bAt]\\bH !R_uP]Fop !RmuvwWYy?mrr`g[^]muvwKAtzg@',
},
{
Label: 'Retro-Diels–Alder ',
rxnCode:
'fdeA`D@\\brTfYY_m]gIZ|EhJB@@h@@~aF@!didHB@BTfUvfZVV@OhB@ didD@@iIYgxUie`B#iup`jXdibCPcXKoI iSxKhvMHP IwbkEYH#!RbOrHW]x@bOs^[xc|w`BHWXa]w`C^[xc|ipK^@Mx@i?s^@AuRx` !Ri?rgW]x@i?rg?Mx@i?rg?Aujp` !RmsvwO]y?mqrPw[_]msvwGAwzG@',
},
{
Label: 'Retro-heteroene (Claisen rearrangement)',
rxnCode:
'daxH@@Re^jf`B!daxH@@RUiZjPB#IphiFG` IrDZax`#!RbOrW?Hb}e{vH?Hb}o`@]|hH !R@BL@[@@c@FqlWrM_@BL]~cp',
},
{
Label: 'Retro-heteroene (McLafferty-type rearrangement)',
rxnCode:
'daxH@@RUiZjPB!gJP@DjYdB eMHAIdOh`#IaLJfxP IJfxP Qg#!R@FL@[@Ac@FqlOvL?@FL]Bcp !R|Grw_Gy?|Ot]vkp !R@Fp@XqtF_@',
},
{
Label: 'Tropylium rearragement',
rxnCode:
'gOpAMJUKua@@D!gOpAGJTju`@@D#qgVMX qYoTp#!Rg`BGgXb]a?rG?H^]GPhB !RN@swnix@C[AkCDJpGSkB',
},
{
Label: 'Tropylium resonance',
rxnCode:
'gOpAGJTju`@@D!gOpAGJTju`@@D#IaLkit I{MbTh#!Rh@VUDFcl?H`N@HCfGXiB !R[X~@abJwFEL@F[y_GSi\\',
},
{
Label: 'Tropylium resonance',
rxnCode:
'gOpAGJTju`@@D!gOpAGJTju`@@D#q]yfP qgSuH#!R[X?@qaJONGO@v_y?GWK\\ !RQps~_}?YQwMmc}?FG[i|',
},
{
Label: 'Tropylium resonance',
rxnCode:
'gOpAGJTju`@@D!gOpAGJTju`@@D#qrLoX qMsW`#!RN@s_qox@[[AGCAJpGWKB !R[[C@vQJpN@s@qox@G_iB',
},
{
Label: 'Tropylium resonance',
rxnCode:
'gOpAGJTju`@@D!gOpAGJTju`@@D#qMsW` q{eQp#!R[[C@vQJpN@s@qox@GPkB !Rw}dx\\vvO?g|Rct]sGP[\\',
},
{
Label: 'Tropylium resonance',
rxnCode:
'gOpAGJTju`@@D!gOpAGJTju`@@D#q{eQp qTwKh#!Rw}dx\\vvO?g|Rct]sG]K\\ !R?`AG\\t\\Lw|[_vVvpGSiB',
},
{
Label: 'Tropylium resonance',
rxnCode:
'gOpAGJTju`@@D!gOpAGJTju`@@D#qTwKh qqUcx#!R?`AG\\t\\Lw|[_vVvpG]JB !Rw|XxCFvp?`@RlD\\LG[kB',
},
{
Label: 'Tropylium resonance ',
rxnCode:
'gOpAGJTju`@@D!gOpAGJTju`@@D#qgSuH qrLoX#!RQps~_}?YQwMmc}?FGUH| !RN@s_qox@[[AGCAJpGXXb',
},
],
negative: [],
};
function applyFragmentationReactions(
ionizedFragments,
reactions,
maxDepth,
) {
const fragmentationReactions = reactions.filter(
(reaction) => reaction.Label !== 'Ionization',
);
for (let ionizedMolecule of ionizedFragments.products) {
if (ionizedMolecule.children?.length > 0) {
for (let child of ionizedMolecule.children) {
applyFragmentationReactions(child, fragmentationReactions, maxDepth);
}
} else {
let moleculeToFragment = OCL__default["default"].Molecule.fromIDCode(ionizedMolecule.idCode);
let fragmentation = openchemlibUtils.applyReactions(
[moleculeToFragment],
fragmentationReactions,
{
maxDepth,
},
);
ionizedMolecule.children = fragmentation;
}
}
}
function applyIonizationReactions(molecule, reactions, ionizationLevel) {
const ionizationReaction = reactions.filter(
(reaction) => reaction.Label === 'Ionization',
);
let ionization = openchemlibUtils.applyReactions([molecule], ionizationReaction, {
maxDepth: 1,
});
function ionize(reactant, ionizationReactions, currentIonizationLevel) {
for (let product of reactant.products) {
if (currentIonizationLevel < ionizationLevel) {
let currentMolecule = OCL__default["default"].Molecule.fromIDCode(product.idCode);
let ionizedFragments = openchemlibUtils.applyReactions(
[currentMolecule],
ionizationReactions,
{
maxDepth: 1,
},
);
product.children = ionizedFragments;
currentIonizationLevel = currentIonizationLevel + 1;
if (product.children.length > 0) {
for (let child of product.children) {
ionize(child, ionizationReactions, currentIonizationLevel);
}
}
}
}
}
for (let ionizedFragment of ionization) {
ionize(ionizedFragment, ionizationReaction, 1);
}
return ionization;
}
const masses = {};
function insertMfInfoFragments(fragmentation) {
for (let fragment of fragmentation) {
mfInfoFragments(fragment);
}
return {
masses: Object.keys(masses).map(Number),
tree: fragmentation,
};
}
function mfInfoFragments(reaction) {
if (reaction?.reactant) {
const reactantMF = new mfParser.MF(reaction.reactant.mf);
reaction.reactant.monoisotopicMass =
Math.round(
(reactantMF.getInfo().observedMonoisotopicMass ??
reactantMF.getInfo().monoisotopicMass) * 10000,
) / 10000;
masses[reaction.reactant.monoisotopicMass] = true;
}
if (reaction?.products?.length > 0) {
for (const product of reaction.products) {
if (product.children?.length > 0) {
for (const child of product.children) {
mfInfoFragments(child);
}
}
const productMF = new mfParser.MF(product.mf);
product.monoisotopicMass =
Math.round(
(productMF.getInfo().observedMonoisotopicMass ??
productMF.getInfo().monoisotopicMass) * 10000,
) / 10000;
masses[product.monoisotopicMass] = true;
}
}
}
const databases = {
cid,
};
//ionizationLevel fix the maximum depth of the ionization reactions in the molecule
function reactionFragmentation(molecule, options = {}) {
let {
database = 'cid',
mode = 'positive',
maxDepth = 0,
ionizationLevel = 1,
} = options;
if (maxDepth === 0) {
let mass = molecule.getMolecularFormula().absoluteWeight;
maxDepth = Math.round(mass / 10);
}
const reactions = databases[database][mode];
let ionizedFragments = applyIonizationReactions(
molecule,
reactions,
ionizationLevel,
);
for (let ionizedFragment of ionizedFragments) {
applyFragmentationReactions(ionizedFragment, reactions, maxDepth);
}
let { masses, tree } = insertMfInfoFragments(ionizedFragments);
return {
masses,
tree,
};
}
exports.fragment = fragment;
exports.reactionFragmentation = reactionFragmentation;

4

package.json
{
"name": "mass-fragmentation",
"version": "0.3.0",
"version": "0.4.0",
"description": "Code to fragment molecules",

@@ -29,3 +29,3 @@ "main": "lib/index.js",

},
"gitHead": "2f92cd4423018e7dad9594565f1fae4557de0ca3"
"gitHead": "bc42b1937c4d78b61bf0548c5bf1397ab52d645a"
}
export * from './fragment.js';
export * from './reactionFragmentation.js';