@zakodium/nmrium-core-plugins 0.0.1 → 0.1.1
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.
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
"use strict";var Er=Object.create;var K=Object.defineProperty;var Tr=Object.getOwnPropertyDescriptor;var Lr=Object.getOwnPropertyNames;var kr=Object.getPrototypeOf,wr=Object.prototype.hasOwnProperty;var vr=(e,r)=>{for(var t in r)K(e,t,{get:r[t],enumerable:!0})},_e=(e,r,t,i)=>{if(r&&typeof r=="object"||typeof r=="function")for(let n of Lr(r))!wr.call(e,n)&&n!==t&&K(e,n,{get:()=>r[n],enumerable:!(i=Tr(r,n))||i.enumerable});return e};var Se=(e,r,t)=>(t=e!=null?Er(kr(e)):{},_e(r||!e||!e.__esModule?K(t,"default",{value:e,enumerable:!0}):t,e)),qr=e=>_e(K({},"__esModule",{value:!0}),e);var Vn={};vr(Vn,{BrukerLoaderPlugin:()=>B,JDFLoaderPlugin:()=>J,JcampLoaderPlugin:()=>W,MolfileLoaderPlugin:()=>V,NMReLoaderPlugin:()=>_,SDFLoaderPlugin:()=>H,SmilesLoaderPlugin:()=>X,VarianLoaderPlugin:()=>Y,brukerLoader:()=>ce,default:()=>xr,init:()=>xr,jcampLoader:()=>ue,jdfLoader:()=>fe,molfileLoader:()=>de,nmreLoader:()=>ye,processJcamp:()=>Ee,readSDF:()=>We,readSMILES:()=>Je,recommended:()=>Mr,sdfLoader:()=>Fe,smilesLoader:()=>Ne,spectrum1DToJcamp:()=>Cr,varianLoader:()=>Pe});module.exports=qr(Vn);var Dr=require("@zakodium/nmrium-core");var nt=require("@zakodium/nmrium-core"),se=require("brukerconverter");function Z(e){let r=[];for(let t of e){if(!t)continue;let{groups:{value:i,unit:n}={}}=t.trim().match(/[$$]*\s*(?<value>[\d.]+)\s*(?<unit>[a-zA-Z]+)/)||{};r.push($r(i,n))}return r}function $r(e,r){switch(r.toLowerCase()){case"s":return Number.parseFloat(e);case"ms":return Number.parseFloat(e)/1e3;case"m":case"min":return Number.parseFloat(e)*60;default:return Number.NaN}}var Re=require("is-any-array");function I(e){if(jr(e))return Br(e)?e.map(He):He(e);if(typeof e=="object"&&e!==null){let r={};for(let t in e)r[t]=I(e[t]);return r}return e}function jr(e){return(0,Re.isAnyArray)(e)}function He(e){return Float64Array.from(e)}function Br(e){return(0,Re.isAnyArray)(e[0])}var k=require("@zakodium/nmrium-core"),et=require("gyromagnetic-ratio"),ie=require("is-any-array"),tt=require("nmr-processing");var E=require("is-any-array");function Q(e){return typeof e=="number"}function ee(e){let{phc0:r,phc1:t}=e;return!(0,E.isAnyArray)(r)&&!Q(r)||!(0,E.isAnyArray)(t)&&!Q(t)||(0,E.isAnyArray)(r)&&!Q(r[0])||(0,E.isAnyArray)(t)&&!Q(t[0])?{}:((0,E.isAnyArray)(t)?t[0]*=-1:t*=-1,(0,E.isAnyArray)(r)?r[0]*=-1:r*=-1,{phc0:r,phc1:t})}function Ye(e,r,t){if(e>0)return Number(e);if(r>14||r===0)return 0;if(Xe[r]){let i=Xe[r];if(!i[t])throw new Error(`decim ${t} not in lookup table for dspfvs ${r}`);return i[t]}else throw new Error(`dspfvs ${r} not in lookup table`)}var Xe={10:{2:44.75,3:33.5,4:66.625,6:59.08333333333333,8:68.5625,12:60.375,16:69.53125,24:61.02083333333333,32:70.015625,48:61.34375,64:70.2578125,96:61.50520833333333,128:70.37890625,192:61.5859375,256:70.439453125,384:61.62630208333333,512:70.4697265625,768:61.646484375,1024:70.48486328125,1536:61.65657552083333,2048:70.492431640625},11:{2:46,3:36.5,4:48,6:50.16666666666667,8:53.25,12:69.5,16:72.25,24:70.16666666666667,32:72.75,48:70.5,64:73,96:70.66666666666667,128:72.5,192:71.33333333333333,256:72.25,384:71.66666666666667,512:72.125,768:71.83333333333333,1024:72.0625,1536:71.91666666666667,2048:72.03125},12:{2:46,3:36.5,4:48,6:50.16666666666667,8:53.25,12:69.5,16:71.625,24:70.16666666666667,32:72.125,48:70.5,64:72.375,96:70.66666666666666,128:72.5,192:71.333333333,256:72.25,384:71.66666666666667,512:72.125,768:71.83333333333333,1024:72.0625,1536:71.91666666666667,2048:72.03125},13:{2:2.75,3:2.833333333333333,4:2.875,6:2.916666666666667,8:2.9375,12:2.958333333333333,16:2.96875,24:2.979166666666667,32:2.984375,48:2.989583333333333,64:2.9921875,96:2.994791666666667}};var Ke=require("nmr-processing");function T(e,r=","){if(e&&typeof e=="string")return e.split(r)}function te(e,r,t){let i=[];if(e[`${t}AXNUC`]&&(i=e[`${t}AXNUC`],Array.isArray(i)||(i=[i]),i=O(i)),i.length===0&&e[`${t}NUC1`]&&(i=e[`${t}NUC1`],Array.isArray(i)||(i=[i]),i=O(i)),i.length===0&&e[".NUCLEUS"]){let n=T(e[".NUCLEUS"]);if(e[`${t}SYMBOL`]){let o=e[`${t}SYMBOL`].split(","),s=o.findIndex(a=>a.includes("2")),l=o.findIndex(a=>a.includes("1"));s!==-1&&l!==-1&&n?i=O([n[s],n[l]]):i=O(n).reverse()}else i=O(n)}return i.length===0&&e[".OBSERVENUCLEUS"]&&(i=O([e[".OBSERVENUCLEUS"]])),i.length===0&&r.experiment&&(i=O(Ge(r.experiment[0]))),zr(e)&&(i=[e["2D_X_NUCLEUS"].replaceAll(/[^A-Za-z0-9]/g,""),e["2D_Y_NUCLEUS"].replaceAll(/[^A-Za-z0-9]/g,"")]),r.experiment&&(r.experiment[0].match("jres")||r.experiment[0].match("dosy"))&&(i=Ge(r.experiment[0])),i.map(Ke.normalizeNucleus)}function zr(e){return e["2D_X_NUCLEUS"]&&!e["2D_X_NUCLEUS"].includes("off")&&e["2D_Y_NUCLEUS"]&&!e["2D_Y_NUCLEUS"].includes("off")}function Ge(e){return typeof e!="string"?[]:(e=e.toLowerCase(),e.includes("jres")?["1H","Hz"]:e.includes("dosy")?["1H","D"]:e.includes("hmbc")||e.includes("hsqc")?["1H","13C"]:e.includes("cosy")||e.includes("tocsy")?["1H","1H"]:[])}function O(e){if(!e)return[];let r=e.map(i=>String(i).replaceAll(/[^A-Za-z0-9]/g,"").replace("NA","").replace("off","")),t=0;for(let i of r)i||t++;return t===0?r:[]}var Ze=require("@zakodium/nmrium-core");function re(e={},r={},t={}){e===null&&(e={}),typeof e=="string"&&(e={pulseSequence:e});let i=Array.isArray(e.pulseSequence)?e.pulseSequence[0]:e.pulseSequence||"";if(typeof i!="string")return e.dimension?`${e.dimension}d`:"";if(i=i.toLowerCase(),i.includes("zg")||i.includes("single_pulse_dec")||i.includes("udeft"))return"1d";if(i.includes("hsqct")||i.includes("invi")&&(i.includes("ml")||i.includes("di")))return"hsqctocsy";if(i.includes("hsqc")||i.includes("invi"))return"hsqc";if(i.includes("hmbc")||i.includes("inv4")&&i.includes("lp"))return"hmbc";if(i.includes("hmqc"))return"hmqc";if(i.includes("cosy"))return"cosy";if(i.includes("jres"))return"jres";if(i.includes("dosy"))return"dosy";if(i.includes("tocsy")||i.includes("mlev")||i.includes("dipsi"))return"tocsy";if(i.includes("noesy"))return"noesy";if(i.includes("roesy"))return"roesy";if(i.includes("dept"))return"dept";if(i.includes("jmod")||i.includes("apt"))return"aptjmod";if(i.includes("inad"))return"inadequate";if(i.includes("adeq"))return"adequate";let{prefix:n=""}=t,o=((0,Ze.getOneIfArray)(r[`${n}SPECTYP`])||"").replace(/^<(.*)>$/,"$1").toLowerCase();return o.length>0&&o!=="undefined"?o:e.dimension?`${e.dimension}d`:""}function N(e,r,t,i=!1){t===void 0||r in e&&!i||(Array.isArray(t)?e[r]=t.map(Qe):e[r]=[Qe(t)])}function Qe(e){return typeof e=="string"&&(e.startsWith("<")&&e.endsWith(">")&&(e=e.slice(1,-1)),e=e.replace(/\$.*/,"").trim()),e}function oe(e,r={}){let{prefix:t="",logger:i}=r,n={dimension:0,nucleus:[],isFid:!1,isFt:!1},o=JSON.stringify(e),s=/\r\n/.exec(o)?`\r
|
|
1
|
+
"use strict";var Tr=Object.create;var Z=Object.defineProperty;var Er=Object.getOwnPropertyDescriptor;var Lr=Object.getOwnPropertyNames;var kr=Object.getPrototypeOf,wr=Object.prototype.hasOwnProperty;var vr=(e,r)=>{for(var t in r)Z(e,t,{get:r[t],enumerable:!0})},_e=(e,r,t,i)=>{if(r&&typeof r=="object"||typeof r=="function")for(let n of Lr(r))!wr.call(e,n)&&n!==t&&Z(e,n,{get:()=>r[n],enumerable:!(i=Er(r,n))||i.enumerable});return e};var Se=(e,r,t)=>(t=e!=null?Tr(kr(e)):{},_e(r||!e||!e.__esModule?Z(t,"default",{value:e,enumerable:!0}):t,e)),qr=e=>_e(Z({},"__esModule",{value:!0}),e);var Jn={};vr(Jn,{AutoPostProcessingPlugin:()=>z,BrukerLoaderPlugin:()=>B,JCAMPDXLoaderPlugin:()=>X,JEOLLoaderPlugin:()=>J,MolfileLoaderPlugin:()=>_,NMReDATALoaderPlugin:()=>V,SDFLoaderPlugin:()=>H,SMILESLoaderPlugin:()=>Y,VarianLoaderPlugin:()=>G,autoPostProcessing:()=>te,brukerLoader:()=>ue,default:()=>Ar,init:()=>Ar,jcampDXLoader:()=>de,jeolLoader:()=>ye,molfileLoader:()=>he,nmreDATALoader:()=>Fe,processJCAMPDX:()=>qe,readSDF:()=>We,readSMILES:()=>Xe,recommended:()=>Mr,sdfLoader:()=>Pe,smilesLoader:()=>Ne,spectrum1DToJCAMPDX:()=>Or,varianLoader:()=>De});module.exports=qr(Jn);var Rr=require("@zakodium/nmrium-core");var ee=require("nmr-processing");var Ve=require("@zakodium/nmrium-core");function Q(e={},r={},t={}){e===null&&(e={}),typeof e=="string"&&(e={pulseSequence:e});let i=Array.isArray(e.pulseSequence)?e.pulseSequence[0]:e.pulseSequence||"";if(typeof i!="string")return e.dimension?`${e.dimension}d`:"";if(i=i.toLowerCase(),i.includes("zg")||i.includes("single_pulse_dec")||i.includes("udeft"))return"1d";if(i.includes("hsqct")||i.includes("invi")&&(i.includes("ml")||i.includes("di")))return"hsqctocsy";if(i.includes("hsqc")||i.includes("invi"))return"hsqc";if(i.includes("hmbc")||i.includes("inv4")&&i.includes("lp"))return"hmbc";if(i.includes("hmqc"))return"hmqc";if(i.includes("cosy"))return"cosy";if(i.includes("jres"))return"jres";if(i.includes("dosy"))return"dosy";if(i.includes("tocsy")||i.includes("mlev")||i.includes("dipsi"))return"tocsy";if(i.includes("noesy"))return"noesy";if(i.includes("roesy"))return"roesy";if(i.includes("dept"))return"dept";if(i.includes("jmod")||i.includes("apt"))return"aptjmod";if(i.includes("inad"))return"inadequate";if(i.includes("adeq"))return"adequate";let{prefix:n=""}=t,o=((0,Ve.getOneIfArray)(r[`${n}SPECTYP`])||"").replace(/^<(.*)>$/,"$1").toLowerCase();return o.length>0&&o!=="undefined"?o:e.dimension?`${e.dimension}d`:""}var Re=require("@zakodium/nmrium-core"),$r=["no","exponential","modifiedGaussian","sine","qsine","trap","user","sinc","qsinc","traf","trafs"];function jr(e){return e in He}function Me(e,r){let{prefix:t="",index:i=0}=r,n=(0,Re.getOneIfArray)(e[`${t}WDW`],i),o=$r[n?Number(n):0],s={};if(!jr(o))return s;let l=He[o];if(l){let{kind:a,parameters:m}=l,u={};for(let c in m){let g=m[c],{source:y,processor:d}=g;if(y){let p=(0,Re.getOneIfArray)(e[`${t}${y}`],i);if(!p)continue;let f=Number(p);u[c]=d?d(f):f}else g.value!==void 0&&(u[c]=g.value)}s[a]={apply:!0,options:u}}return s}var He={exponential:{kind:"exponential",parameters:{lineBroadening:{source:"LB"}}},modifiedGaussian:{kind:"gaussian",parameters:{lineBroadening:{source:"LB"},lineBroadeningCenter:{source:"GB"}}},sine:{kind:"sineBell",parameters:{offset:{source:"SSB",processor:e=>1/e},exponent:{value:1}}},qsine:{kind:"sineSquare",parameters:{offset:{source:"SSB",processor:e=>1/e}}},traf:{kind:"traf",parameters:{lineBroadening:{source:"LB"}}}};var Ye={sineBell:Ke({offset:0})},Ge={cosy:{...Ye},hmbc:{...Ye},hsqc:{sineBell:Ke({offset:.5})}},zr={...Ge};function Ae(e="",r=1){let t=Br(e),i={},n=r===1?Ge[t||""]:zr[t||""];return n&&(i=structuredClone(n)),i}function Ke(e){return{apply:!0,options:e}}function Br(e){let t=e.toLowerCase().match(/cosy|hsqc|hmbc/);return t?t[0]:null}function Ze(e,r={}){let{prefix:t="",experiment:i=Q(e)}=r;return e[`${t}WDW`]?{f2:Me(e,{...r,index:0}),f1:Me(e,{...r,index:1})}:{f2:Ae(i,1),f1:Ae(i,2)}}var Qe=require("nmr-processing"),xe=["digitalFilter","backwardLinearPrediction","forwardLinearPrediction","apodization","zeroFilling","fft",["shiftX","phaseCorrection","baselineCorrection"]],k={};for(let e=0;e<xe.length;e++){let r=xe[e];for(let t of Array.isArray(r)?r:[r])k[t]=e}for(let e of Object.values(Qe.Filters1D))e.name in k||(k[e.name]=xe.length);var et=require("nmr-processing"),Ce=["digitalFilter2D","blpDimension1","flpDimension1","apodizationDimension1","zeroFillingDimension1","fftDimension1","blpDimension2","flpDimension2","nusDimension2","apodizationDimension2","zeroFillingDimension2","fftDimension2","phaseCorrectionTwoDimensions",["shift2DX","shift2DY","symmetrizeCosyLike"]],w={};for(let e=0;e<Ce.length;e++){let r=Ce[e];for(let t of Array.isArray(r)?r:[r])w[t]=e}for(let e of Object.values(et.Filters2D))e.name in w||(w[e.name]=Ce.length);var Ur=new Set(["backwardLinearPrediction","forwardLinearPrediction","digitalFilter2D","phaseCorrectionTwoDimensions","blpDimension1","flpDimension1","apodizationDimension1","apodizationDimension2","zeroFillingDimension1","fftDimension1","blpDimension2","flpDimension2","zeroFillingDimension2","fftDimension2","nusDimension2","symmetrizeCosyLike"]);function Wr(e,r){let{filter:t,experimentalFeatures:i=!1}=r,{name:n}=t;({...ee.Filters1D,...ee.Filters2D})[n]&&(e.some(s=>s.name===n)||(i||!Ur.has(n))&&e.push({...t,enabled:!0}))}function tt(e,r={}){let{data:t}=e;if(!t)return e;let{autoProcessing:i,experimentalFeatures:n}=r,o=(l,a)=>Wr(l,{...a,experimentalFeatures:n}),{spectra:s}=t;for(let l of s){let{data:a,info:m,meta:u,filters:c}=l,{dimension:g,isFid:y}=m;if(y){if(g===1){let d=a.re.length,{tdOff:p,digitalFilter:f}=m;if(f&&f>0&&o(c,{filter:{name:"digitalFilter",value:{digitalFilterValue:f}}}),!i)continue;p&&Math.abs(p)>0&&o(c,{filter:{name:"backwardLinearPrediction",value:{nbInputs:d/2}}}),o(c,{filter:{name:"apodization",value:{exponential:{apply:!0,options:{lineBroadening:1}}}}}),o(c,{filter:{name:"zeroFilling",value:{nbPoints:2*d}}}),o(c,{filter:{name:"fft",value:{}}}),o(c,{filter:{name:"phaseCorrection",value:Xr(m)}}),c.sort((F,h)=>k[F.name]-k[h.name])}else if(g===2){if(!i||!n)continue;let d=a.re.z.length,p=a.re.z[0].length,{tdOff:f,experiment:F=""}=m,h=m.spectrumSize;Array.isArray(h)&&h.length>1?(h[0]<=p&&(h[0]=p*2),h[0]<=d&&(h[0]=d*2)):h=[p*2,2*d];let b=F.toLowerCase().includes("cosy");f&&Math.abs(f[0])>0&&o(c,{filter:{name:"blpDimension1",value:{nbInputs:p/2}}});let N=Ze(u,{experiment:F});o(c,{filter:{name:"apodizationDimension1",value:N.f2}}),o(c,{filter:{name:"zeroFillingDimension1",value:{nbPoints:h[0]}}}),o(c,{filter:{name:"fftDimension1",value:{}}}),u&&"nuslist"in u&&o(c,{filter:{name:"nusDimension2",value:{}}}),o(c,{filter:{name:"apodizationDimension2",value:N.f1}}),o(c,{filter:{name:"zeroFillingDimension2",value:{nbPoints:h[b?0:1]}}}),b?o(c,{filter:{name:"symmetrizeCosyLike",value:{}}}):o(c,{filter:{name:"phaseCorrectionTwoDimensions",value:{}}}),o(c,{filter:{name:"fftDimension2",value:{}}}),c.sort((S,D)=>w[S.name]-w[D.name])}}}}function Xr(e){let{phc0:r=0,phc1:t=0}=e;return rt([r,t])?{}:{ph0:r,ph1:t}}function rt(e){return Array.isArray(e)?e.every(r=>!r&&r===0):rt([e])}var z=class{id="@zakodium/nmrium-core-plugins#AutoPostProcessingPlugin";version=1;migrations=[];onReadProcess;constructor(){this.onReadProcess={onProcessing:this.onPostProcessing.bind(this)}}onPostProcessing(r,t){tt(r,t)}};function te(){return new z}var pt=require("@zakodium/nmrium-core"),me=require("brukerconverter");function re(e){let r=[];for(let t of e){if(!t)continue;let{groups:{value:i,unit:n}={}}=t.trim().match(/[$$]*\s*(?<value>[\d.]+)\s*(?<unit>[a-zA-Z]+)/)||{};r.push(Jr(i,n))}return r}function Jr(e,r){switch(r.toLowerCase()){case"s":return Number.parseFloat(e);case"ms":return Number.parseFloat(e)/1e3;case"m":case"min":return Number.parseFloat(e)*60;default:return Number.NaN}}var Oe=require("is-any-array");function I(e){if(_r(e))return Vr(e)?e.map(nt):nt(e);if(typeof e=="object"&&e!==null){let r={};for(let t in e)r[t]=I(e[t]);return r}return e}function _r(e){return(0,Oe.isAnyArray)(e)}function nt(e){return Float64Array.from(e)}function Vr(e){return(0,Oe.isAnyArray)(e[0])}var v=require("@zakodium/nmrium-core"),mt=require("gyromagnetic-ratio"),ae=require("is-any-array"),lt=require("nmr-processing");var T=require("is-any-array");function ne(e){return typeof e=="number"}function ie(e){let{phc0:r,phc1:t}=e;return!(0,T.isAnyArray)(r)&&!ne(r)||!(0,T.isAnyArray)(t)&&!ne(t)||(0,T.isAnyArray)(r)&&!ne(r[0])||(0,T.isAnyArray)(t)&&!ne(t[0])?{}:((0,T.isAnyArray)(t)?t[0]*=-1:t*=-1,(0,T.isAnyArray)(r)?r[0]*=-1:r*=-1,{phc0:r,phc1:t})}function ot(e,r,t){if(e>0)return Number(e);if(r>14||r===0)return 0;if(it[r]){let i=it[r];if(!i[t])throw new Error(`decim ${t} not in lookup table for dspfvs ${r}`);return i[t]}else throw new Error(`dspfvs ${r} not in lookup table`)}var it={10:{2:44.75,3:33.5,4:66.625,6:59.08333333333333,8:68.5625,12:60.375,16:69.53125,24:61.02083333333333,32:70.015625,48:61.34375,64:70.2578125,96:61.50520833333333,128:70.37890625,192:61.5859375,256:70.439453125,384:61.62630208333333,512:70.4697265625,768:61.646484375,1024:70.48486328125,1536:61.65657552083333,2048:70.492431640625},11:{2:46,3:36.5,4:48,6:50.16666666666667,8:53.25,12:69.5,16:72.25,24:70.16666666666667,32:72.75,48:70.5,64:73,96:70.66666666666667,128:72.5,192:71.33333333333333,256:72.25,384:71.66666666666667,512:72.125,768:71.83333333333333,1024:72.0625,1536:71.91666666666667,2048:72.03125},12:{2:46,3:36.5,4:48,6:50.16666666666667,8:53.25,12:69.5,16:71.625,24:70.16666666666667,32:72.125,48:70.5,64:72.375,96:70.66666666666666,128:72.5,192:71.333333333,256:72.25,384:71.66666666666667,512:72.125,768:71.83333333333333,1024:72.0625,1536:71.91666666666667,2048:72.03125},13:{2:2.75,3:2.833333333333333,4:2.875,6:2.916666666666667,8:2.9375,12:2.958333333333333,16:2.96875,24:2.979166666666667,32:2.984375,48:2.989583333333333,64:2.9921875,96:2.994791666666667}};var at=require("nmr-processing");function E(e,r=","){if(e&&typeof e=="string")return e.split(r)}function oe(e,r,t){let i=[];if(e[`${t}AXNUC`]&&(i=e[`${t}AXNUC`],Array.isArray(i)||(i=[i]),i=C(i)),i.length===0&&e[`${t}NUC1`]&&(i=e[`${t}NUC1`],Array.isArray(i)||(i=[i]),i=C(i)),i.length===0&&e[".NUCLEUS"]){let n=E(e[".NUCLEUS"]);if(e[`${t}SYMBOL`]){let o=e[`${t}SYMBOL`].split(","),s=o.findIndex(a=>a.includes("2")),l=o.findIndex(a=>a.includes("1"));s!==-1&&l!==-1&&n?i=C([n[s],n[l]]):i=C(n).reverse()}else i=C(n)}return i.length===0&&e[".OBSERVENUCLEUS"]&&(i=C([e[".OBSERVENUCLEUS"]])),i.length===0&&r.experiment&&(i=C(st(r.experiment[0]))),Hr(e)&&(i=[e["2D_X_NUCLEUS"].replaceAll(/[^A-Za-z0-9]/g,""),e["2D_Y_NUCLEUS"].replaceAll(/[^A-Za-z0-9]/g,"")]),r.experiment&&(r.experiment[0].match("jres")||r.experiment[0].match("dosy"))&&(i=st(r.experiment[0])),i.map(at.normalizeNucleus)}function Hr(e){return e["2D_X_NUCLEUS"]&&!e["2D_X_NUCLEUS"].includes("off")&&e["2D_Y_NUCLEUS"]&&!e["2D_Y_NUCLEUS"].includes("off")}function st(e){return typeof e!="string"?[]:(e=e.toLowerCase(),e.includes("jres")?["1H","Hz"]:e.includes("dosy")?["1H","D"]:e.includes("hmbc")||e.includes("hsqc")?["1H","13C"]:e.includes("cosy")||e.includes("tocsy")?["1H","1H"]:[])}function C(e){if(!e)return[];let r=e.map(i=>String(i).replaceAll(/[^A-Za-z0-9]/g,"").replace("NA","").replace("off","")),t=0;for(let i of r)i||t++;return t===0?r:[]}function P(e,r,t,i=!1){t===void 0||r in e&&!i||(Array.isArray(t)?e[r]=t.map(ct):e[r]=[ct(t)])}function ct(e){return typeof e=="string"&&(e.startsWith("<")&&e.endsWith(">")&&(e=e.slice(1,-1)),e=e.replace(/\$.*/,"").trim()),e}function ce(e,r={}){let{prefix:t="",logger:i}=r,n={dimension:0,nucleus:[],isFid:!1,isFt:!1},o=JSON.stringify(e),s=/\r\n/.exec(o)?`\r
|
|
2
2
|
`:`
|
|
3
|
-
`,{JCAMPDX:l="",ORIGIN:a=""}=e,m=String(l).toLowerCase()+String(a).toLowerCase();"SPECTROMETER/DATASYSTEM"in e&&(m=e["SPECTROMETER/DATASYSTEM"]);let u=(d=[])=>{for(let p of d)if(!(p in n))return!1;return!0};(m.includes("mestre")||m.includes("nova"))&&(m="mnova"),n.creator=m,e.LONGDATE&&
|
|
4
|
-
`}=t;
|
|
5
|
-
because it didn't match the import filters`);continue}s.push(u)}let l=[],a=s.some(at),m=s.some(st);for(let u of s){if(o!=="both"&&u.dataType!=="LINK"){if(at(u)&&(o==="ft"||o==="preferFT"&&m)){i?.warn(`Skipping raw data ${t?`in ${t}`:"in the JCAMP-DX"} because it didn't match the import filters`);continue}if(st(u)&&(o==="fid"||o==="preferFID"&&a)){i?.warn(`Skipping FFT data ${t?`in ${t}`:"in the JCAMP-DX"} because it didn't match the import filters`);continue}}l.push(u)}return l}function st(e){return e.dataType?.toUpperCase().includes("SPECTRUM")&&e.dataClass&&!e.dataClass.toUpperCase().includes("PEAK")}function at(e){return e.dataType?.toUpperCase().includes("FID")}function mt(e,r={}){let{logger:t,name:i=""}=r;for(let n of e){if(n.dataType==="LINK"&&mt(n.children,r))return!0;let{dataType:o=""}=n,s=o.toLowerCase();if(s.length>0){if(s.includes("spectrum")&&!s.includes("nmr"))return t?.warn(`File ${i} was ignored because it is a ${o}`),!1;if(s.includes("nmr"))return!0}}return!1}var Ae=require("@zakodium/nmrium-core"),yt=require("jcampconverter"),Qr=Se(require("openchemlib/full"),1);var lt=require("nmr-processing"),ut=require("openchemlib/full");async function pt(e,r={}){let t=await e.text(),i=w(t),n={molecules:i,spectra:[]};return i.length===0&&r.logger?.debug(`${e.name} is an empty molfile`),n}function w(e){let r=[];if(!(0,lt.isMolfileNotEmpty)(e))return[];let i=ut.Molecule.fromMolfile(e).toMolfile();return r.push({molfile:i}),r}var ft=require("nmr-processing"),Zr=Se(require("openchemlib/full"),1),dt=require("openchemlib-utils");var Kr=new Set(["ndnmrspectrum","ndnmrfid","nmrspectrum","nmrfid"]);function me(e){let{dataType:r="",dataClass:t=""}=e,i=r.replaceAll(/\s/g,"").toLowerCase(),n=t.replaceAll(/\s/g,"").toLowerCase();return Kr.has(i)&&n!=="peaktable"}function gt(e,r,t={}){let{spectra:i,info:n,meta:o}=e,s=i[0].data,l=[],a={x:"delta",y:"intensity",w:"width",m:"multiplicity",a:"atom"},{logger:m,name:u,spectraData:c}=t,{CROSSREFERENCE:g}=n,y=typeof g!="string"?g:g.split(/\r?\n/).map(S=>S.trim()).filter(Boolean),d=y.find(S=>S?.toLowerCase().includes("structure"));if(d===void 0)return m&&m.warn(`There is not a structure reference for ${u} file, assignment object could not be completed`),null;let p=Number.parseInt(d?.toLowerCase().replace(/_/,"").replace(/structure:\s*blockid\s*=\s*(?<blockId>.*)/,"$<blockId>"),10);if(Number.isNaN(p)||p<1)return m&&m.warn(`Structure block_id not found for ${u} file, assignment object could not be completed`),null;let F=c?.molecules?.find(S=>S.blockId===p)?.molfile??"";if(F===""){let S=r.find(x=>x.info.BLOCKID===p),{MOLFILE:D=""}=S?.meta||{};F=D}if(!(0,ft.isMolfileNotEmpty)(F))return m&&m.warn(`Empty molfile for ${u} file with structure block_id = ${p}, assignment object could not be completed`),null;let h=(0,dt.getDiastereotopicAtomIDsFromMolfile)(Zr,F),b=te({...n,...o},{},"");for(let S=0;S<s.x.length;S++){let D={};for(let x in s){let A=s[x][S];typeof A=="string"&&A.startsWith("<")&&A.endsWith(">")&&(A=A.slice(1,-1)),D[a[x]]=A}if("atom"in D){let x=h.map[D.atom-1];b.includes("1H")?x.nbHydrogens>0?(D.diaIDs=x.hydrogenOCLIDs,D.nbHydrogens=x.nbHydrogens):(D.diaIDs=[x.oclID],D.nbHydrogens=x.nbHydrogens):(D.diaIDs=[x.oclID],D.nbHydrogens=1)}l.push(D)}let P={};for(let S of l){let{delta:D,diaIDs:x}=S,A=`${D}_${x.join("_")}`;if(P[A])P[A].atoms.push(S.atom);else{let{atom:_n,...Ir}=S;P[A]={...Ir,atoms:[S.atom]}}}let R=[];for(let S of y)S.toLowerCase().includes("spectrum")&&R.push(Number(S.toLowerCase().replace(/_/,"").replace(/.*:\s*blockid=(?<blockId>.*)/,"$<blockId>")));if(R.length===0){for(let S of r)if(me(S)){let{BLOCKID:D}=S.info;R.push(Number(D))}R.length>1&&(R=[],m&&m.warn(`There is not a spectral cross-reference for the peak assignment in the ${u} file`))}return{moleculeBlockID:p,spectraBlockIDs:R,assignments:Object.values(P),molecule:h.molecule}}function ht(e,r,t,i){for(let n of e){let{meta:o,dataClass:s="",dataType:l="",info:a}=n,m=Number.parseInt(String(a.BLOCKID),10);o.MOLFILE?nn(String(o.MOLFILE),r,m):n.jcampCS&&rn(n,r,m),en(s,l)&&tn(r,n,e,i),me(n)&&t.push(n)}}function en(e,r){return e?.toLowerCase().includes("assignments")&&r?.toLowerCase().includes("assignments")}function tn(e,r,t,i){let n=gt(r,t,{spectraData:e,logger:i.logger,name:i.name});if(e.assignmentsByBlocks||(e.assignmentsByBlocks={}),n){let{spectraBlockIDs:o}=n;for(let s of o)e.assignmentsByBlocks[s]=n}}function rn(e,r,t){r.molecules||(r.molecules=[]);let i=(0,yt.parseJcampCS)(e,{OCL:Qr}),n=w(i?.molfile||"");n.length>0&&r.molecules.push({id:(0,Ae.generateID)(),blockId:t,...n[0]})}function nn(e,r,t){r.molecules||(r.molecules=[]);let i=w(String(e));r.molecules.push({id:(0,Ae.generateID)(),blockId:t,...i[0]})}var Ie=require("@zakodium/nmrium-core"),U=require("ml-spectra-processing"),Tt=require("nmr-processing");function v(e){return e.slice(0,Math.max(0,e.lastIndexOf(".")))}function q(e){e.sort((r,t)=>r.from-t.from);for(let r=0;r<e.length-1;r++)e[r].to>e[r+1].from&&(e[r].to=Math.max(e[r+1].to,e[r].to),e[r].signals=e[r].signals.concat(e[r+1].signals),e[r].integration+=e[r+1].integration,e.splice(r+1,1),r--);return e}var Pt=require("nmr-processing");var Ft=require("ml-spectra-processing");function z(e){return e.trim().slice(1,-1).split(/,\s*/).map(r=>r.trim())}var on={I:"id",X:"from",Y:"to",Hs:"delta",An:"integration",H:"nbAtoms",C:"multiplicity",N:"assignment","(J)":"js"},bt=["I","X","Y","Hs","An","H","C","N","(J)"];function Nt(e){let r={headersFromParenthesis:[],headersFromComments:[],comments:[],data:[],multiplets:[]},t=e.split(/\r?\n/).filter(i=>i.trim()!=="");if(t.length===0)return r;if(t[0].startsWith("(")&&!t[0].match(/\d/)){let i=t.shift();r.headersFromParenthesis=z(i)}return r.comments=t.filter(i=>i.startsWith("$$")).map(i=>i.replace(/^\$\$\s*/,"")),r.headersFromComments=an(r.comments),r.data=t.filter(i=>!i.startsWith("$$")).map(z),r.multiplets=sn(r),r}function sn(e,r={}){let{logger:t}=r,i=e.data[0].map((a,m)=>m).filter(a=>e.data.every(m=>Number.isNaN(m[a])||Number.isNaN(Number(m[a]))));if(t?.trace(`Parsing JCAMP-DX assignment: stringColumnIndexes: ${i.join(",")}`),i.length===0)return t?.warn("Parsing JCAMP-DX assignment: No string columns found. Skipping parsing of assignment."),[];let n=i[0],o;if(e.headersFromParenthesis.length>0&&e.headersFromParenthesis[n]==="C")o=e.headersFromParenthesis;else if(e.headersFromComments.length>0&&e.headersFromComments[n]==="C")o=e.headersFromComments;else if(bt[n]==="C")o=bt;else return t?.warn("No header found for multiplicity. Skipping parsing of assignment."),[];return(0,Ft.xMaxValue)(e.data.map(a=>a.length))>o.length&&t?.warn("Some assignments are containing more values than headers"),e.data.map(a=>{let m={};for(let u=0;u<o.length;u++){let c=o[u];m[on[c]||c]=a[u]}return m})}function an(e){return e.map(r=>r.split(":")[0].trim()).filter(r=>r.length>0)}function St(e,r={}){let{logger:t}=r,i=Nt(e),n={multiplets:[],comments:i.comments};for(let o of i.multiplets){let{id:s,from:l,to:a,delta:m,integration:u,nbAtoms:c,multiplicity:g}=o,y={id:s,js:[],multiplicity:"",...cn({from:l,to:a,delta:m,integration:u,nbAtoms:c})};if(typeof o.js=="string"){let d=o.js.split(/\s+/).map(Number.parseFloat),p=0,f=(0,Pt.splitPatterns)(g).map(b=>{let P=(b?.multiplicity||1)-1;return p+=P,{value:b.value,multiplicity:b?.multiplicity,js:d.slice(p-P,p)}}),F=f.reduce((b,P)=>b+(P.multiplicity?P.multiplicity-1:0),0);d.length!==F&&t?.warn(`The number of j values (${d.length}) is not equal to the sum of the multiplicities - 1 (${F})`);let h=[];for(let b of f){if(b.js.every(P=>P===b.js[0])){h.push(b);continue}if(b.multiplicity!==b.js.length+1){h.push(b);continue}for(let P=0;P<b.multiplicity-1;P++)h.push({value:"d",multiplicity:2,js:[b.js[P]]})}h.sort((b,P)=>P.js[0]-b.js[0]),y.js=h.map(b=>({coupling:b.js[0],multiplicity:b.value}))}typeof o.assignment=="string"&&(y.assignment=ln(o.assignment)),typeof o.multiplicity=="string"&&(y.multiplicity=o.multiplicity),n.multiplets.push(y)}return n}function cn(e){let r={};for(let t in e){let i=e[t],n=typeof i=="number"?i:Number.parseFloat(i);Number.isNaN(n)||(r[t]=n)}return r}var mn={quot:'"',apos:"'",comma:",",amp:"&",lpar:"(",rpar:")",lt:"<",gt:">",colon:":",semi:";"};function ln(e){return e.replaceAll(/&(\w+);/gi,(r,t)=>mn[t.toLowerCase()]||r)}function Rt(e){let r=e.split(/\r?\n/).filter(i=>i.trim()!==""),t=[];for(let i of r)if(i.startsWith("(")){let[n,o,s]=z(i).map(Number.parseFloat);t.push({id:n,x:o,y:s})}return t}function Dt(e,r={}){let t={};if(!e["OBSERVED MULTIPLETS"])return[];let i=St(e["OBSERVED MULTIPLETS"],r);if(!i)return[];let{multiplets:n}=i;for(let o of n){let{id:s,from:l,to:a,integration:m=0,...u}=o;t[s]={from:l,to:a,integration:m,signals:[{id:s,...u}]}}if(e["OBSERVED MULTIPLETS PEAKS"]){let o=Rt(e["OBSERVED MULTIPLETS PEAKS"]),s={};for(let l of o){let{id:a,x:m,y:u}=l;s[a]||(s[a]=[]),s[a].push({x:m,y:u,width:.05})}for(let l in t)s[l]&&(t[l].signals[0].peaks=s[l])}return q(Object.values(t))}function Mt(e,r){let i=[...e.getMolecularFormula().formula.matchAll(/(?<element>[A-Z][a-z]?)(?<count>\d*)/g)].map(o=>({element:o?.groups?.element,count:o?.groups?.count?Number(o.groups.count):1})),n=[...r.nucleus[0].matchAll(/[0-9]*(?<element>[A-Z][a-z]?)/g,"$element")][0].groups.element;return i.find(o=>o.element===n)?.count||100}function xt(e){let r={};return".PHASE0"in e&&(r.ph0=Number.parseFloat(e[".PHASE0"]),r.ph1=Number.parseFloat(e[".PHASE1"])),r}function Oe(e){let{ph0:r,ph1:t}=e;return Number.isFinite(r)&&Number.isFinite(t)}var Ce=require("@zakodium/nmrium-core");function At(e,r,t){for(let i=0;i<e.length;i++){if(r.includes(i))continue;let{delta:n,multiplicity:o="",diaIDs:s}=e[i],l=Number(n)-.01,a=Number(n)+.01;t.push({from:l,to:a,integration:1,id:(0,Ce.generateID)(),signals:[{id:(0,Ce.generateID)(),delta:n,multiplicity:o,diaIDs:s}]})}}var Ot=require("linear-sum-assignment"),Ct=require("ml-spectra-processing");function It(e,r){let t=e.map(s=>s.delta),i=r.map(s=>s.delta),n=(0,Ct.xCostMatrix)(i,t,{fct:(s,l)=>Math.abs(s-l)}),{rowAssignments:o}=(0,Ot.linearSumAssignment)(n,{maximaze:!1});return Array.from(o)}function Et(e,r){let{assignments:t,ranges:i}=r;t?.sort((s,l)=>l.delta-s.delta);let n=[],o=[];for(let s of i){let l=0,{from:a,to:m}=s,u=[];for(let c=l;c<t.length;c++){let{delta:g}=t[c];g<=m&&g>=a?(u.push(t[c]),o.push(c)):g>m&&(l=c)}if(u.length>0){let c=s.signals,g=[],y=u.length>1&&c.length>1?It(c,u):[0];for(let d=0;d<u.length;d++){let p=y[d],{delta:f,multiplicity:F,diaIDs:h}=u[d];p>-1?g.push({...c[p],diaIDs:h}):g.push({delta:f,multiplicity:F,diaIDs:h})}s.signals=g,n.push(s)}}At(t,o,n),n.sort((s,l)=>s.from-l.from),e.ranges={values:q(n).map(s=>{let{integration:l,...a}=s;return a}),options:{sum:r.integrationSum,isSumConstant:!0,sumAuto:!0}},e.ranges.options.moleculeId=String(r.moleculeId)}function Lt(e,r,t,i,n){let{logger:o}=n,s={components:kt(e)?fn(e,t.isFid):pn(e)},{name:l=t.title||`jcamp_${(0,Ie.generateID)()}`}=n,a={dependentVariables:[s],meta:r,info:{...t,name:v(l)}};return un(e)&&dn(a,i,r,e,t,{logger:o}),a}function kt(e){return"minMax"in e}function un(e){return!kt(e)}function pn(e){return e.spectra.map(r=>{let t=I(r.data);return{...r,data:t}})}function fn(e,r){let t={...e.minMax,z:I(e.minMax?.z)};return r?gn(t):{rr:t}}function dn(e,r,t,i,n,o){let{assignmentsByBlocks:s}=r,l=xt(t);Oe(l)&&yn(e,l);let a=String(i.info.BLOCKID);if(s?.[a]){let{molecule:m,assignments:u,moleculeBlockID:c}=s[a],g=Mt(m,n),y=I(i.spectra[0].data);if(y.x[0]>y.x[1])for(let F of i.spectra)F.data.x.reverse(),F.data.y.reverse();if(Oe(l)&&i.spectra.length>1){let{re:F}=hn(i,l);y.y=F}let{x:d,y:p}=y,f=Dt(t,o)??(0,Tt.xyAutoRangesPicking)({x:d,y:p},{peakPicking:{frequency:n.originFrequency},ranges:{frequency:n.originFrequency,integrationSum:g}});Et(e,{moleculeId:c,ranges:f,assignments:u,integrationSum:g})}}function gn(e){let{z:r,...t}=e,i=[],n=[];for(let l=0;l<r.length;l+=2)i.push(r[l].slice()),n.push(r[l+1].slice());let o=(0,U.matrixMinMaxZ)(i),s=(0,U.matrixMinMaxZ)(n);return{re:{...t,z:i,minZ:o.min,maxZ:o.max},im:{...t,z:n,minZ:s.min,maxZ:s.max}}}function yn(e,r){let{ph0:t,ph1:i}=r;e.filters||(e.filters=[]),e.filters.push({id:(0,Ie.generateID)(),name:"phaseCorrection",value:{ph0:t,ph1:i,absolute:!1},enabled:!0})}function hn(e,r){let{ph0:t,ph1:i}=r,{re:n,im:o}=(0,U.reimPhaseCorrection)({re:e.spectra[0].data.y,im:e.spectra[1].data.y},t*Math.PI/180,i*Math.PI/180);return{re:n,im:o}}function wt(e,r,t){let{logger:i}=t,n=[];for(let o of e)if(o.spectra&&o.spectra.length>0||o.minMax){bn(o);let s={...o.info,...o.meta},l=oe(s,{logger:i});if(l.experiment==="wobble_curve")continue;n.push(Lt(o,s,l,r,t))}return n}function bn(e){let r=e.meta["BRUKER FILE EXP"];if(!r)return;let i=(Array.isArray(r)?r:[r]).find(o=>o.slice(0,10).includes("vdlist"));if(!i)return;let n=i.split(`
|
|
6
|
-
`).slice(1);e.info.vdlistValues=Z(n)}async function le(e,r={}){let t=await e.text(),i=Ee(t,{name:e.name,...r});return it(i,e,r)}function Ee(e,r={}){let t={spectra:[],molecules:[]},{name:i,converter:n={},selector:o={},logger:s}=r,{keepRecordsRegExp:l=/.*/}=n,a={keepSpectra:!0,noContour:!0,noTrimRegExp:/\$MOLFILE/,keepRecordsRegExp:l,logger:s},m=ct((0,qt.createTree)(e),{name:i,...o,logger:s});for(let u of m)Fn(u,t,a,i);if(Nn(t,o),t.spectra.length===0&&m.length>0){let u=t.molecules.length===0?" nor molecule":"";s?.warn(`No spectra${u} data was loaded from file ${i}`)}return(0,vt.formatSpectra)(t)}function Fn(e,r,t,i){let n=[],o=[],s={molecules:[]},{logger:l}=t,a={name:i,logger:l};Me(e,o,t),ht(o,s,n,a),r.spectra.push(...wt(n,s,a)),r.molecules.push(...s.molecules)}function Nn(e,r){r.index!==void 0&&(e.spectra=e.spectra.slice(r.index,r.index+1))}var W=class{id="nmrium-core-plugins#JcampLoaderPlugin";version=1;migrations=[];onReadProcess;constructor(){this.onReadProcess={supportedExtensions:["jcamp","jdx","dx"],onFile:this.onReadProcessFile.bind(this)}}onReadProcessFile(r,t={}){let{sourceSelector:i={},converter:n,keepSource:o,logger:s}=t;return s?.debug(`Reading JCAMP-DX file: ${r.name}`),le(r,{selector:this.getJcampSelector(i),converter:n?.jcamp,keepSource:o,logger:s})}getJcampSelector(r={}){let{jcamp:t={},general:i={}}=r,{dataSelection:n="both"}=i;return{...t,dataSelection:n}}};function ue(){return new W}var pe=require("@zakodium/nmrium-core"),Ut=require("gyromagnetic-ratio"),Wt=require("is-any-array"),Jt=require("jeolconverter"),Vt=Se(require("lodash.merge"),1),_t=require("nmr-processing");var L=require("is-any-array");var $t={0:"uint8",1:"uint16",2:"uint32",3:"uint64",4:"int8",5:"int16",6:"int32",7:"int64",8:"float32",9:"float64",10:"complex64",11:"complex128"},jt={0:"scalar",1:"vector",2:"matrix",3:"symetricMatrix",4:"pixel"};function Bt(e,r,t={}){let{quantityType:i=0,encoding:n="none",name:o="",unit:s="",quantityName:l="",sparseSampling:a={},from:m=[0],to:u=[-1]}=t;if((0,L.isAnyArray)(e))throw new Error("jeol with an array of data is not yet supported");if(!("re"in e&&"im"in e))throw new Error("Only re/im data is supported");let c=Le(e,m,u),{componentLabels:g=c.componentLabels}=t;return{type:"internal",quantityType:jt[i],numericType:$t[r],encoding:n,name:o,unit:s,quantityName:l,componentLabels:g,sparseSampling:a,description:t.description||"",application:t.application||"",components:c.components,dataLength:c.dataLength}}function Pn(e){return(0,L.isAnyArray)(e.re)&&(0,L.isAnyArray)(e.im)}function Sn(e){return!(0,L.isAnyArray)(e.re[0])}function Le(e,r,t){let i=[],n=[],o=[];if(Pn(e))if(Sn(e)){i[0]=Te(r[0],t[0],e.re.length);let s=new Float64Array(i[0]);for(let l=0;l<i[0];l+=2){let a=l+r[0]*2;s[l]=e.re[a/2],s[l+1]=e.im[a/2]}o.push(s),n.push("complex")}else if((0,L.isAnyArray)(e.re[0])){i[0]=Rn(r[1],t[1],e.re.length),i[1]=Te(r[0],t[0],e.re[0].length);for(let s=0;s<i[0];s++){let l=new Float64Array(i[1]);for(let a=0;a<i[1];a+=2){let m=a+r[0]*2;l[a]=e.re[s][m/2],l[a+1]=e.im[s][m/2]}o.push(l)}}else throw new Error("check your object");else if((0,L.isAnyArray)(e.re.re)){i[0]=Te(r[1],t[1],e.re.re.length);let s=Le(e.re,r,t).components,l=Le(e.im,r,t).components;for(let a=0;a<i[0]/2;a++)o.push(s[a],l[a])}else throw new Error("check the dimension or the type of data in your array");return{dataLength:i,componentLabels:n,components:o}}function Rn(e,r,t){return r-e+1<t?r-e+1:t}function Te(e,r,t){return r-e+1<t?(r-e+1)*2:t*2}async function Ht(e,r={}){let t=await e.arrayBuffer(),{name:i=v(e.name),keepSource:n=!1}=r,o={spectra:[],molecules:[]},l=xn(t)[0],{metadata:a,...m}=l.description,u=0,c=m.dimension===1?"1d":"2d",g="NMR SPECTRUM",y=m.dimension===1?m.nucleus[0]:m.nucleus,d=m.spectralWidthClipped[0],p;l.dependentVariables&&(m.dimension===1?p=Dn(l):m.dimension===2&&(p=Mn(l)));for(let F in m)Array.isArray(m[F])&&m[F].length===1&&(m[F]=m[F][0]);let f={data:p,info:{...m,acquisitionMode:u,experiment:c,type:g,nucleus:y,spectralWidthClipped:d,name:i},meta:a};return n&&(f.sourceSelector={files:[e.relativePath]}),o.spectra=[f],(0,pe.formatSpectra)(o)}function Dn(e){let r=e.dimensions[0],t=e.dependentVariables,i=r.quantityName,n=r.count,o=r.increment.magnitude,s=r.originOffset.magnitude,l=r.coordinatesOffset.magnitude,a=t[0].components[0],m=new Float64Array(n),u=new Float64Array(n);for(let p=a.length-1,f=0;p>0;p-=2)m[f]=a[p-1],u[f++]=a[p];let c={},[g,y]=[0,0];switch(i){case"frequency":y=0+l/s*1e6,g=o/s*1e6,c.re=m,c.im=u;break;case"time":y=s,g=o,c.re=m.reverse(),c.im=u.reverse().map(p=>-p);break;default:break}let d=[];for(let p=0;p<n;p++)d.push(y+p*g);return c.x=d,c}function Mn(e){let r=e.dimensions,t=e.dependentVariables,i=r[0].quantityName,n=[],o=[],s=Number.MIN_SAFE_INTEGER,l=Number.MAX_SAFE_INTEGER,a=Number.MAX_SAFE_INTEGER,m=Number.MIN_SAFE_INTEGER;for(let g of t[0].components){let y=new Float64Array(g.length/2),d=new Float64Array(g.length/2);for(let p=g.length-1,f=0;p>0;p-=2){let F=g[p-1],h=g[p];F>s&&(s=F),F<l&&(l=F),h>m&&(m=h),h<a&&(a=h),y[f]=F,d[f++]=h}if(i==="frequency")n.push(y),o.push(d);else{let p=y.length,f=new Float64Array(d.length);for(let F=0,h=p-1;F<p;F++)f[F]=-d[h--];n.push(y.reverse()),o.push(f)}}let u={re:{z:n,minZ:l,maxZ:s},im:{z:o,minZ:a,maxZ:m}},c=["X","Y"];for(let g=0;g<c.length;g++){let y=r[g].count,d=r[g].increment.magnitude,p=r[g].originOffset.magnitude,f=r[g].coordinatesOffset.magnitude,F=c[g];for(let h of["re","im"])i==="frequency"?(u[h][`min${F}`]=0+f/p*1e6,u[h][`max${F}`]=y*(d/p)*1e6):(u[h][`min${F}`]=p,u[h][`max${F}`]=y*d)}return u}function xn(e){let r=(0,Jt.parseJEOL)(e),t=r.info,i=r.headers,n=r.parameters,{dimension:o}=t,s={};for(let f of n.paramArray){let{name:F,value:h}=f;s[F]=Xt(h,o)}delete n.paramArray;let l=r.data,a={};a.title=`title: ${i.title} / comment: ${i.comment} / author:${i.author} / site: ${i.site}`,a.nucleus=t.nucleus.map(_t.normalizeNucleus),a.sampleName=t.sampleName,a.date=t.date,a.epoch=t.epoch,a.localeDate=new Date((0,pe.getOneIfArray)(t.epoch)).toLocaleString(),a.author=t.author,a.solvent=t.solvent,a.temperature=t.temperature.magnitude,a.probeName=t.probeName||"",a.fieldStrength=t.fieldStrength.magnitude;let m=a.nucleus.map(Ut.getGyromagneticRatio);a.baseFrequency=m.map(f=>t.fieldStrength.magnitude*f/(2*Math.PI*1e6)),a.pulseSequence=t.experiment,a.temperature=t.temperature?.unit?.toLowerCase()==="celsius"?273.15+t.temperature.magnitude:t.temperature.magnitude,a.digitalFilter=t.digitalFilter,a.pulseStrength90=1/(4*t.pulseStrength90.magnitude),a.numberOfScans=t.numberOfScans,a.relaxationTime=t.relaxationTime.magnitude,a.isComplex=t.dataSections.includes("im"),a.isFid=t.dataUnits[0]==="Second",a.isFt=t.dataUnits[0]==="Ppm",a.dimension=t.dimension,a.originFrequency=t.originFrequency.map(f=>f.magnitude/1e6).slice(0,o),a.numberOfPoints=t.dataPoints.slice(0,1),a.frequencyOffset=t.frequencyOffset.map((f,F)=>f.magnitude*a.baseFrequency[F]).slice(0,o),a.acquisitionTime=t.acquisitionTime.map(f=>f.magnitude).slice(0,o),a.spectralWidth=t.spectralWidth.map((f,F)=>f.magnitude/t.originFrequency[F].magnitude*1e6).slice(0,o),a.spectralWidthClipped=t.spectralWidthClipped.map((f,F)=>f.magnitude/a.baseFrequency[F]*1e6).slice(0,o);let u=[],c={},g;for(let f=0;f<t.dimension;f++){if(g={magnitude:t.acquisitionTime[f].magnitude/(t.dataPoints[f]-1),unit:"s"},t.dataUnits[f]==="Second")c.quantityName="time",c.originOffset={magnitude:0,unit:"s"},f===0?c.coordinatesOffset={magnitude:t.digitalFilter*g.magnitude,unit:"s"}:c.coordinatesOffset={magnitude:0,unit:"s"},c.reciprocal={originOffset:{magnitude:t.originFrequency[f].magnitude,unit:"Hz"},quantityName:"frequency",coordinatesOffset:{magnitude:t.frequencyOffset[f].magnitude*t.originFrequency[f].magnitude/1e6,unit:"Hz"}};else if(t.dataUnits[f]==="Ppm"){c.quantityName="frequency";let F=t.originFrequency[f].magnitude;c.originOffset={magnitude:F,unit:"Hz"};let h=t.dataOffsetStart[f],P=t.dataOffsetStop[f]-h+1;g={magnitude:An(t,f)/(P-1),unit:"Hz"};let D=t.dataAxisStop[f]*F/1e6;c.coordinatesOffset={magnitude:D,unit:"Hz"},P!==t.dataPoints[f]&&(t.dataPoints[f]=P)}f===0?c.description="direct dimension":c.description="indirect dimension",u.push({label:String(i.dataAxisTitles[f]),count:Number(t.dataPoints[f]),increment:g,type:"linear",description:String(c.description)||"",application:c.application||{},coordinatesOffset:c.coordinatesOffset||0,originOffset:c.originOffset||0,quantityName:String(c.quantityName)||"",reciprocal:c.reciprocal||{},period:c.period||0,complexFFT:c.complexFFT||!1})}let y=[];y.push(Bt(l,11,{unit:"none",quantityName:"relative intensity",from:t.dataOffsetStart,to:t.dataOffsetStop}));let d={...a};return delete d.paramList,d.metadata={...zt(i,o),...zt(n,o),...(0,Vt.default)({},s)},[{timeStamp:Date.now(),description:d,dimensions:u,dependentVariables:y}]}function An(e,r){let{spectralWidth:t,spectralWidthClipped:i}=e;return i[r].magnitude!=="NA"?i[r].magnitude:t[r].magnitude}function zt(e,r){let t={};for(let i in e)t[i]=Xt(e[i],r);return t}function Xt(e,r){return(0,Wt.isAnyArray)(e)?r>1?e.slice(0,r):e[0]:e}var J=class{id="nmrium-core-plugins#JDFLoaderPlugin";version=1;migrations=[];onReadProcess;constructor(){this.onReadProcess={supportedExtensions:["jdf"],onFile:this.onReadProcessFile.bind(this)}}onReadProcessFile(r,t={}){let{logger:i,keepSource:n}=t;return i?.debug(`Reading JDF file: ${r.name}`),Ht(r,{name:r.name,keepSource:n,logger:i})}};function fe(){return new J}var V=class{id="nmrium-core-plugins#MolfileLoaderPlugin";version=1;migrations=[];onReadProcess;constructor(){this.onReadProcess={supportedExtensions:["mol"],onFile:this.onReadProcessFile.bind(this)}}onReadProcessFile(r,t={}){let{logger:i}=t;return i?.debug(`Reading molfile file: ${r.name}`),pt(r,{logger:i})}};function de(){return new V}var ge=require("nmredata");var we=require("@zakodium/nmrium-core");var ke=require("@zakodium/nmrium-core"),Yt=require("ml-spectra-processing");function Gt(e,r){let{x:t,re:i}=r.data;return e.map(n=>{let o=(0,Yt.xyIntegration)({x:t,y:i},{from:n.from,to:n.to}),s=[];for(let l of n.signals||[]){let{kind:a=null,id:m,js:u=[],diaIDs:c=[],...g}=l;s.push({...g,kind:a||"signal",js:u,id:m||(0,ke.generateID)(),diaIDs:c})}return{...n,id:n.id||(0,ke.generateID)(),kind:s?.[0].kind||"signal",absolute:o,signals:s}})}function Kt(e,r){let t=[],{baseFrequency:i=500}=r.info;for(let n of e){let{delta:o,diaIDs:s=[],multiplicity:l="",integration:a=0}=n,m=n.jCoupling||[],u=On({delta:o,js:m,frequency:i});if(m&&l&&m.length===l.length){m.sort((c,g)=>g.coupling-c.coupling);for(let c=0;c<m.length;c++)m[c].multiplicity=l[c]}t.push({id:(0,we.generateID)(),...u,integration:a,signals:[{id:(0,we.generateID)(),js:m,delta:o,diaIDs:s,multiplicity:l}]})}r.ranges.values=Gt(q(t),r)}function On(e){let{delta:r,js:t=[],frequency:i}=e,n=.5;for(let o of t)n+=o.coupling;return n/=i,{from:r-n,to:r+n}}var ve=require("@zakodium/nmrium-core"),Cn=["x","y"],In={x:0,y:0};function Zt(e,r,t={}){let i=[],{shift:n=In}=t,{originFrequency:o=[400,400]}=r.info,s={x:o[0],y:o[1]};for(let l of e){let a={x:{},y:{},id:(0,ve.generateID)(),kind:"signal"},m={id:(0,ve.generateID)(),kind:"signal",peaks:[]},u={x:10,y:10};for(let c of Cn){let{coupling:g=[],delta:y,diaIDs:d=[]}=l[c];for(let p of g)u[c]+=p.coupling;if(l.activeCoupling){let{activeCoupling:p=[]}=l;for(let f of p)u[c]+=f.coupling}u[c]/=s[c],a[c]={from:y-u[c],to:y+u[c]},m[c]={delta:y,diaIDs:d,originalDelta:y-n[c]}}i.push({...a,signals:[m]})}r.zones.values=i}function Qt(e){return En(e.data)}function En(e){return"rr"in e||!("x"in e)&&"re"in e}async function er(e,r,t={}){let i={spectra:[],molecules:[]},n=await Tn(e,r,t);if(n.spectra.length>0){let{spectra:o,molecules:s,usedFiles:l}=n;i.spectra.push(...o),i.molecules.push(...s);let a=e.files.length;for(let m=a-1;m>=0;m--){let u=e.files[m].relativePath;!u.match(/acqu.*/s)&&l.includes(u)&&e.files.splice(m,1)}}return i}async function Tn(e,r,t){let i=[],n=await(0,ge.getSDF)(e),o={spectra:[],molecules:[]};if(n.length===0)return{...o,usedFiles:i};let s=[];for(let a of n){let m=(0,ge.nmrRecordToJSON)({sdf:a,fileCollection:e}).then(u=>{let{spectra:c,molecules:g=[]}=u;return i.push(a.root+a.filename),o.molecules.push(...g),Ln(c,r,t)});s.push(m)}let l=await Promise.allSettled(s);for(let a of l)a.status==="fulfilled"?(o.spectra.push(...a.value.spectra),i.push(...a.value.usedFiles)):a.reason&&t?.logger?.error(a.reason);return{...o,usedFiles:i}}async function Ln(e,r,t){let i=[],n=[],o={spectra:[],molecules:[]};for(let s of e){let l=kn(s.source,r,t).then(a=>{let{spectra:m,files:u}=a;i.push(...u);for(let c of m)Qt(c)?Zt(s.signals,c):Kt(s.signals,c);o.spectra.push(...m)});n.push(l)}return await Promise.allSettled(n),{...o,usedFiles:i}}async function kn(e,r,t={}){let{file:i,jcampURL:n}=e,{converter:o}=t;if(n){let a=await wn(n,r,o?.jcamp);if(a)return{...a,files:[]}}let s=[];for(let a of i||[])s.push(vn(a,t).then(m=>({...m,files:a.fileCollection.files.map(u=>u.relativePath)})));let l=await Promise.allSettled(s);for(let a of l){if(a.status==="fulfilled")return a.value;a.reason&&t?.logger?.error(a.reason)}return{spectra:[],molecules:[],files:[]}}async function wn(e,r,t={}){let i={entries:[{relativePath:e}]},n={name:v(e||""),xy:!0,noContours:!0,...t},{data:o}=await r.readFromWebSource(i,n);return o}async function vn(e,r={}){let{converter:t,sourceSelector:i}=r;switch(e.type){case"jcamp":return le(e.fileCollection.files[0],{name:e?.fileCollection.files[0].name||"",converter:t?.jcamp,selector:i?.jcamp,logger:r.logger,keepSource:r.keepSource});case"brukerFiles":return ae(e.fileCollection,{converter:t?.bruker,selector:i});default:throw new Error("There is not a supported source")}}var _=class{constructor(r){this.core=r;this.onReadProcess={onFiles:this.onReadProcessFiles}}id="nmrium-core-plugins#NMReLoaderPlugin";version=1;migrations=[];onReadProcess;onReadProcessFiles=(r,t)=>er(r,this.core,t)};function ye(e){return new _(e)}var he=require("nmr-processing");var qe=require("@zakodium/nmrium-core"),qn=["no","exponential","modifiedGaussian","sine","qsine","trap","user","sinc","qsinc","traf","trafs"];function $n(e){return e in tr}function $e(e,r){let{prefix:t="",index:i=0}=r,n=(0,qe.getOneIfArray)(e[`${t}WDW`],i),o=qn[n?Number(n):0],s={};if(!$n(o))return s;let l=tr[o];if(l){let{kind:a,parameters:m}=l,u={};for(let c in m){let g=m[c],{source:y,processor:d}=g;if(y){let p=(0,qe.getOneIfArray)(e[`${t}${y}`],i);if(!p)continue;let f=Number(p);u[c]=d?d(f):f}else g.value!==void 0&&(u[c]=g.value)}s[a]={apply:!0,options:u}}return s}var tr={exponential:{kind:"exponential",parameters:{lineBroadening:{source:"LB"}}},modifiedGaussian:{kind:"gaussian",parameters:{lineBroadening:{source:"LB"},lineBroadeningCenter:{source:"GB"}}},sine:{kind:"sineBell",parameters:{offset:{source:"SSB",processor:e=>1/e},exponent:{value:1}}},qsine:{kind:"sineSquare",parameters:{offset:{source:"SSB",processor:e=>1/e}}},traf:{kind:"traf",parameters:{lineBroadening:{source:"LB"}}}};var rr={sineBell:ir({offset:0})},nr={cosy:{...rr},hmbc:{...rr},hsqc:{sineBell:ir({offset:.5})}},jn={...nr};function je(e="",r=1){let t=Bn(e),i={},n=r===1?nr[t||""]:jn[t||""];return n&&(i=structuredClone(n)),i}function ir(e){return{apply:!0,options:e}}function Bn(e){let t=e.toLowerCase().match(/cosy|hsqc|hmbc/);return t?t[0]:null}function or(e,r={}){let{prefix:t="",experiment:i=re(e)}=r;return e[`${t}WDW`]?{f2:$e(e,{...r,index:0}),f1:$e(e,{...r,index:1})}:{f2:je(i,1),f1:je(i,2)}}var sr=require("nmr-processing"),Be=["digitalFilter","backwardLinearPrediction","forwardLinearPrediction","apodization","zeroFilling","fft",["shiftX","phaseCorrection","baselineCorrection"]],$={};for(let e=0;e<Be.length;e++){let r=Be[e];for(let t of Array.isArray(r)?r:[r])$[t]=e}for(let e of Object.values(sr.Filters1D))e.name in $||($[e.name]=Be.length);var ar=require("nmr-processing"),ze=["digitalFilter2D","blpDimension1","flpDimension1","apodizationDimension1","zeroFillingDimension1","fftDimension1","blpDimension2","flpDimension2","nusDimension2","apodizationDimension2","zeroFillingDimension2","fftDimension2","phaseCorrectionTwoDimensions",["shift2DX","shift2DY","symmetrizeCosyLike"]],j={};for(let e=0;e<ze.length;e++){let r=ze[e];for(let t of Array.isArray(r)?r:[r])j[t]=e}for(let e of Object.values(ar.Filters2D))e.name in j||(j[e.name]=ze.length);var zn=new Set(["backwardLinearPrediction","forwardLinearPrediction","digitalFilter2D","phaseCorrectionTwoDimensions","blpDimension1","flpDimension1","apodizationDimension1","apodizationDimension2","zeroFillingDimension1","fftDimension1","blpDimension2","flpDimension2","zeroFillingDimension2","fftDimension2","nusDimension2","symmetrizeCosyLike"]);function Un(e,r){let{filter:t,experimentalFeatures:i=!1}=r,{name:n}=t;({...he.Filters1D,...he.Filters2D})[n]&&(e.some(s=>s.name===n)||(i||!zn.has(n))&&e.push({...t,enabled:!0}))}function cr(e,r={}){let{data:t}=e;if(!t)return e;let{autoProcessing:i,experimentalFeatures:n}=r,o=(l,a)=>Un(l,{...a,experimentalFeatures:n}),{spectra:s}=t;for(let l of s){let{data:a,info:m,meta:u,filters:c}=l,{dimension:g,isFid:y}=m;if(y){if(g===1){let d=a.re.length,{tdOff:p,digitalFilter:f}=m;if(f&&f>0&&o(c,{filter:{name:"digitalFilter",value:{digitalFilterValue:f}}}),!i)continue;p&&Math.abs(p)>0&&o(c,{filter:{name:"backwardLinearPrediction",value:{nbInputs:d/2}}}),o(c,{filter:{name:"apodization",value:{exponential:{apply:!0,options:{lineBroadening:1}}}}}),o(c,{filter:{name:"zeroFilling",value:{nbPoints:2*d}}}),o(c,{filter:{name:"fft",value:{}}}),o(c,{filter:{name:"phaseCorrection",value:Wn(m)}}),c.sort((F,h)=>$[F.name]-$[h.name])}else if(g===2){if(!i||!n)continue;let d=a.re.z.length,p=a.re.z[0].length,{tdOff:f,experiment:F=""}=m,h=m.spectrumSize;Array.isArray(h)&&h.length>1?(h[0]<=p&&(h[0]=p*2),h[0]<=d&&(h[0]=d*2)):h=[p*2,2*d];let b=F.toLowerCase().includes("cosy");f&&Math.abs(f[0])>0&&o(c,{filter:{name:"blpDimension1",value:{nbInputs:p/2}}});let P=or(u,{experiment:F});o(c,{filter:{name:"apodizationDimension1",value:P.f2}}),o(c,{filter:{name:"zeroFillingDimension1",value:{nbPoints:h[0]}}}),o(c,{filter:{name:"fftDimension1",value:{}}}),u&&"nuslist"in u&&o(c,{filter:{name:"nusDimension2",value:{}}}),o(c,{filter:{name:"apodizationDimension2",value:P.f1}}),o(c,{filter:{name:"zeroFillingDimension2",value:{nbPoints:h[b?0:1]}}}),b?o(c,{filter:{name:"symmetrizeCosyLike",value:{}}}):o(c,{filter:{name:"phaseCorrectionTwoDimensions",value:{}}}),o(c,{filter:{name:"fftDimension2",value:{}}}),c.sort((R,S)=>j[R.name]-j[S.name])}}}}function Wn(e){let{phc0:r=0,phc1:t=0}=e;return mr([r,t])?{}:{ph0:r,ph1:t}}function mr(e){return Array.isArray(e)?e.every(r=>!r&&r===0):mr([e])}var be=class{id="nmrium-core-plugins#NmriumPostProcessingPlugin";version=1;migrations=[];onReadProcess;constructor(){this.onReadProcess={onProcessing:this.onPostProcessing.bind(this)}}onPostProcessing(r,t){cr(r,t)}};function Ue(){return new be}var lr=require("sdf-parser");function We(e,r={}){let{mixedEOL:t}=r,{molecules:i}=(0,lr.parse)(e,{mixedEOL:t}),n=[];for(let{molfile:o}of i){let s=w(o);n.push(...s)}return n}async function ur(e,r={}){let{logger:t,mixedEOL:i}=r,n=await e.text(),o=We(n,{mixedEOL:i}),s={molecules:o,spectra:[]};return t&&t[o.length>0?"info":"debug"](`Loaded ${s.molecules.length} molecules from the ${e.name} file`),s}var H=class{id="nmrium-core-plugins#SDFLoaderPlugin";version=1;migrations=[];onReadProcess;constructor(){this.onReadProcess={supportedExtensions:["sdf"],onFile:this.onReadProcessFile.bind(this)}}onReadProcessFile(r,t={}){let{logger:i}=t;return i?.debug(`Reading sdf file: ${r.name}`),ur(r,{logger:i})}};function Fe(){return new H}var pr=require("openchemlib/full");function Je(e){let r=[],t=e.split(/\r?\n/).filter(Boolean);for(let i of t){let o=pr.Molecule.fromSmiles(i).toMolfile();r.push({molfile:o})}return r}async function fr(e,r={}){let t=await e.text(),i=Je(t),n={molecules:i,spectra:[]};return r.logger?.info(`Found ${i.length} molecules from the ${e.name} file`),n}var X=class{id="nmrium-core-plugins#SmilesLoaderPlugin";version=1;migrations=[];onReadProcess;constructor(){this.onReadProcess={supportedExtensions:["smi","smiles"],onFile:this.onReadProcessFile.bind(this)}}onReadProcessFile(r,t={}){let{logger:i}=t;return fr(r,{logger:i})}};function Ne(){return new X}var br=require("@zakodium/nmrium-core"),Fr=require("filelist-utils"),Nr=require("is-any-array"),Pr=require("ml-spectra-processing"),Sr=require("varian-converter");var dr=require("nmr-processing");function gr(e,r){let{meta:t,procpar:i}=e,n={};for(let h of i)n[h.name]=h.values;let o={},s={},{np:l,solvent:a,sfrq:m,reffrq:u,temp:c,rp:g,sw:y,rfl:d,rfp:p}=n;N(o,"numberOfPoints",l&&Number(C(l))/2),N(o,"solvent",C(a)),N(o,"originFrequency",C(m)),N(o,"baseFrequency",C(u)),(Number.isNaN(o.originFrequency)||o.originFrequency===0)&&(o.originFrequency=400,r?.warn("The frequency could not be determined and was set to 400MHz")),N(o,"temperature",C(c)),N(o,"phc0",g&&Number(g[0])),N(s,"rfl",d&&Number(C(d))),N(s,"rfp",p&&Number(C(p))),N(s,"sw",y&&Number(C(y)));for(let h in s){let b=s[h];Array.isArray(b)&&b.length===1&&(s[h]=b[0])}if(!("baseFrequency"in o)&&"originFrequency"in o){let h=Number.parseFloat(o.originFrequency);if(["sw","rfl","rfp"].every(b=>b in s)){let{sw:b=1,rfl:P=1,rfp:R=1}=Jn(s,["sw","rfl","rfp"]);N(o,"baseFrequency",h-(b/2-P+R)/1e6)}else N(o,"baseFrequency",h)}let{baseFrequency:f,originFrequency:F}=o;N(o,"frequencyOffset",(F-f)*1e6),N(o,"spectralWidth",y&&Number(y[0])/o.baseFrequency);for(let h in o)o[h].length===1&&(o[h]=o[h][0]);return n.tn&&(o.nucleus=n.tn.map(dr.normalizeNucleus)),o.dimension=1,o.isFid=!t.status.isSpectrum,{info:o,meta:{...s,...yr(t),...n}}}function C(e){return e&&(Array.isArray(e)?e[0]:e)}function Jn(e,r){let t={};for(let i of r){let n=e[i];n&&typeof n=="number"&&(t[i]=n)}return t}function yr(e){let r={};for(let t of Object.keys(e)){let i=e[t];typeof i=="object"&&i!==null&&i.constructor&&i.constructor!==Object?r[t]=yr(i):r[t]=i}return r}function hr(e){let r={},t=new Set(e.files.map(i=>i.relativePath));for(let i of e){let n=i.name.toLowerCase();if(n.match(/^(?:fid|procpar|text|log)$/)){if(n.match(/^(?:fid|text|log)$/)){let l=i.relativePath.replace(/(?:fid|text|log)$/,"procpar");if(!t.has(l))continue}let o=i.relativePath.split("/"),s=o.slice(0,-1).join("/");r[s]||(r[s]={name:o.at(-2),files:[]}),r[s].files.push(i)}}return Object.values(r)}async function Rr(e,r={}){let{keepSource:t,logger:i}=r,n=hr(e);i&&i.debug(`Found ${Object.keys(n).length} varian experiments`);let o=[],s={spectra:[],molecules:[]};for(let a of n){let{name:m,files:u}=a,c=new Fr.FileCollection(u),g=(0,Sr.convert1D)(c).then(y=>{let{info:d,meta:p}=gr(y),f=y.fid.data[0],F=(0,Nr.isAnyArray)(f.im),h={data:{...f,x:y.x},meta:p,info:{isComplex:F,name:m,...d},display:{name:m}};if(d.isFid&&F){let{im:b}=h.data;(0,Pr.xMultiply)(b,-1,{output:b})}u&&t&&(h.sourceSelector={files:u.map(b=>b.relativePath)}),s.spectra.push(h)});o.push(g)}let l=await Promise.allSettled(o);for(let a=0;a<l.length;a++){let m=l[a];if(m.status==="rejected"&&m.reason){let u=n[a].name;i?.warn(`Varian data: ${u}, fails with: ${m.reason}`)}}return s.spectra.length>0&&i?.info(`Loaded ${s.spectra.length} spectra from Varian files`),(0,br.formatSpectra)(s)}var Y=class{id="nmrium-core-plugins#VarianLoaderPlugin";version=1;migrations=[];onReadProcess;constructor(){this.onReadProcess={onFiles:this.onReadProcessFiles}}onReadProcessFiles=(r,t)=>{let{keepSource:i,logger:n}=t??{};return Rr(r,{keepSource:i,logger:n})}};function Pe(){return new Y}function Mr(e,r=[]){return[ye(e),Pe(),ce(),ue(),de(),Fe(),Ne(),fe(),Ue()].concat(r)}function xr(){let e=new Dr.NMRiumCore;return e.registerPlugins(Mr(e)),e}var Ve=require("@zakodium/nmrium-core"),Or=require("convert-to-jcamp");function Ar(e,r){return e.filters.find(t=>t.name===r)}function Cr(e,r={}){let{info:t,meta:i,data:n}=e,{onlyReal:o=!1}=r,{isFid:s,spectralWidth:l}=t,a=(0,Ve.getOneIfArray)(t.baseFrequency||t.originFrequency),{x:m,re:u,im:c}=n,g=new Float64Array(u),y=!o&&c?new Float64Array(c):void 0,d={};G(d,"SW",l),G(d,"BF1",a);let p=Ar(e,"fft")?.enabled,f={originFrequency:t.originFrequency,dataType:!t.isFid||p?"NMR SPECTRUM":"NMR FID",dataClass:!o&&c?"NTUPLES":"XYDATA"};if(s){let b=e.filters.find(P=>P.name==="digitalFilter");if(b&&!p){let{value:{digitalFilterValue:P},enabled:R}=b;if(R){let S=Math.floor(P);g.set(u.slice(u.length-S)),g.set(u.slice(0,u.length-S),S),c&&y&&(y.set(c.slice(c.length-S)),y.set(c.slice(0,c.length-S),S))}}G(f,"decim",t.decim),G(f,"dspfvs",t.dspfvs),G(f,"digitalFilter",t.digitalFilter)}let F={xyEncoding:"DIFDUP",info:{...t,...f},meta:{...i,...d}},h={x:{data:m,label:t.isFid?"TIME":"FREQUENCY",units:t.isFid?"second":"HZ",symbol:"X"},r:{data:g,label:`${t.isFid?"FID":"SPECTRUM"}/REAL`,units:"ARBITRARY UNITS",symbol:"R"}};return y&&(h.i={data:y,label:`${t.isFid?"FID":"SPECTRUM"}/IMAG`,units:"ARBITRARY UNITS",symbol:"I"}),(0,Or.from1DNMRVariables)(h,F)}function G(e,r,t){t!==void 0&&(e[r]=(0,Ve.getOneIfArray)(t))}
|
|
3
|
+
`,{JCAMPDX:l="",ORIGIN:a=""}=e,m=String(l).toLowerCase()+String(a).toLowerCase();"SPECTROMETER/DATASYSTEM"in e&&(m=e["SPECTROMETER/DATASYSTEM"]);let u=(d=[])=>{for(let p of d)if(!(p in n))return!1;return!0};(m.includes("mestre")||m.includes("nova"))&&(m="mnova"),n.creator=m,e.LONGDATE&&Ie(n,Date.parse(e.LONGDATE)),P(n,"pulseSequence",e[".PULSESEQUENCE"]||e[".PULPROG"]||e[`${t}PULPROG`]);let c=e[`${t}OWNER`];if(c&&P(n,"owner",c.replaceAll(/\$\$.*/gm,"")),P(n,"aqMod",e[`${t}AQ_mod`]),P(n,"experiment",Q(n,e,{prefix:t})),n.nucleus=oe(e,n,t),n.nucleus.length===0)if(i)i?.warn("There is not a nucleus detected, assuming 1H"),n.nucleus=["1H"];else throw new Error("There is not a nucleus detected");n.dimension=n.nucleus.length;let g=e[`${t}.ACQUISITIONSCHEME`]||e[`${t}FnMODE`];if(g&&P(n,"acquisitionScheme",Gr((0,v.getOneIfArray)(g,1))),P(n,"acquisitionMode",e[`${t}.ACQUISITIONMODE`]),M(n,"lpNumberOfCoefficients",e[`${t}NCOEF`]),M(n,"linearPredictionBin",e[`${t}LPBIN`]),M(n,"tdOff",e[`${t}TDoff`]),P(n,"windowMultiplicationMode",e[`${t}WDW`]),P(n,"title",e.TITLE),P(n,"solvent",e[".SOLVENTNAME"]),P(n,"temperature",e[`${t}TE`]||e[".TE"]),P(n,"type",e.DATATYPE),P(n,"dataClass",e[`${t}DATACLASS`]),P(n,"phc1",e[`${t}PHC1`]),P(n,"phc0",e[`${t}PHC0`]),n.type){let d=n.type[0].toUpperCase();d.includes("FID")?(n.isFid=!0,n.isComplex=!0):d.includes("SPECTRUM")&&(n.isFt=!0)}if(P(n,"firstX",e[`${t}FIRSTX`]),P(n,"lastX",e[`${t}LASTX`]),P(n,"numberOfPoints",e[`${t}NPOINTS`]),P(n,"originFrequency",e[`${t}SFO1`]),n.dimension===1&&M(n,"originFrequency",e[".OBSERVEFREQUENCY"]),"originFrequency"in n&&(n.originFrequency=se(n.originFrequency)),!n.originFrequency&&n.dimension===2&&".OBSERVEFREQUENCY"in e){let{nucleus:d}=n,p=se(e[".OBSERVEFREQUENCY"]);if((0,ae.isAnyArray)(p)&&p.length>1){let f=e[`${t}SYMBOL`].split(","),F=f.findIndex(b=>b.includes("2")),h=f.findIndex(b=>b.includes("1"));F!==-1&&h!==-1?n.originFrequency=[p[F],p[h]]:n.originFrequency=p.slice()}else if(typeof p=="number"){let f=(0,lt.getFrequency)(d[1],{frequency:p,nucleus:d[0]});n.originFrequency=[p,f]}}if((!n.originFrequency||n.originFrequency.some(d=>Number.isNaN(d)||d===0))&&(n.originFrequency||(n.originFrequency=n.dimension>1?[400,400]:[400]),n.originFrequency=n.originFrequency.map(d=>Number.isNaN(d)||d===0?400:d),i?.warn("The frequency could not be determined and was set to 400 MHz")),m.toLocaleLowerCase().includes("oxford instruments")?Kr(n,e,{...r,separator:s}):m.includes("nanalysis")&&Zr(n,e),m!=="mnova"&&m!=="mestre"){let d=n.nucleus[0],p=(0,mt.getGyromagneticRatio)(d);if(P(n,"probeName",e[`${t}PROBHD`]),P(n,"baseFrequency",e[`${t}BF1`]),P(n,"baseFrequency",e[`${t}SF`]),M(n,"scaleFactor",e[`${t}NC_proc`]),"scaleFactor"in n)for(let b=0;b<n.scaleFactor.length;)n.scaleFactor[b]=2**n.scaleFactor[b++];if(!("baseFrequency"in n)&&"originFrequency"in n?P(n,"baseFrequency",n.originFrequency):n.baseFrequency=se(n.baseFrequency),!["baseFrequency","originFrequency"].some(b=>!n[b])&&p){let{baseFrequency:b}=n,N=2*Math.PI*(b[0]/p)*1e6;P(n,"fieldStrength",N)}M(n,"spectralWidth",e[`${t}SW`]),M(n,"spectralWidth",e[`${t}QM_SPECTRAL_WIDTH`]),n.dimension===1&&e[`${t}SweepWidth`]&&n.originFrequency&&M(n,"spectralWidth",e[`${t}SweepWidth`]/n.originFrequency[0]),P(n,"numberOfPoints",e[`${t}TD`],!0);let f=n.numberOfPoints;if(P(n,"spectrumSize",e[`${t}SI`]??f),P(n,"sampleName",e[`${t}NAME`]),e[`${t}FNTYPE`]!==void 0&&P(n,"acquisitionMode",Number.parseInt(e[`${t}FNTYPE`],10)),(e[`${t}VARNAME`]?e[`${t}VARNAME`].split(",")[0]:"")==="TIME"){let b=typeof e.LAST=="string"?e.LAST.replace(" ","").split(",")[0]:e.LAST;M(n,"acquisitionTime",b)}if(!n.acquisitionTime&&u(["numberOfPoints","spectralWidth"])){let{spectralWidth:b,originFrequency:N}=n;P(n,"acquisitionTime",Number((f[0]-1)/(2*b[0]*N[0])))}if(e[`${t}P`]){let b=1e6/((0,v.getOneIfArray)(e[`${t}P`]).split(s)[1].split(" ")[1]*4);P(n,"pulseStrength90",b)}if(e[`${t}D`]){let b=(0,v.getOneIfArray)(e[`${t}D`]).split(s)[1].split(" ")[1];M(n,"relaxationTime",b)}if(M(n,"numberOfScans",e[`${t}NS`]),M(n,"numberOfScans",e[`${t}QM_NSCANS`]),P(n,"groupDelay",e[`${t}GRPDLY`]),P(n,"dspfvs",e[`${t}DSPFVS`]),P(n,"decim",e[`${t}DECIM`]),n.isFid&&("groupDelay"in n||u(["dspfvs","decim"]))){let{groupDelay:b,dspfvs:N,decim:S}=n,D=ot(b?.[0]??0,N?.[0],S?.[0]);P(n,"digitalFilter",D)}let h;if(u(["numberOfPoints","spectralWidth"])){let{spectralWidth:b,numberOfPoints:N}=n;n.isFid?h=N.map(S=>n.acquisitionTime[0]/(S-1)):h=N.map((S,D)=>b[D]/(S-1))}if(P(n,"increment",h),e[`${t}DATE`]){let b=(0,v.getOneIfArray)(e[`${t}DATE`]),N=Number.parseInt(b,10)*1e3;Number.isNaN(N)?Ie(n,Date.parse(b)):Ie(n,N)}n.solvent||P(n,"solvent",(0,v.getOneIfArray)(e[`${t}SOLVENT`]))}if(n.dimension<2&&"dataClass"in n&&n.dataClass[0].toUpperCase()==="NTUPLES"&&(P(n,"last",E(e[`${t}LAST`])),P(n,"first",E(e[`${t}FIRST`])),P(n,"varDim",E(e[`${t}VARDIM`])),P(n,"symbols",E(e[`${t}SYMBOL`])),n.symbols&&Array.isArray(n.symbols))){n.symbols.includes("R")&&n.symbols.includes("I")&&(n.isComplex=!0);let d=n.symbols.findIndex(p=>p.toLowerCase()==="x");if(M(n,"firstX",n.first[d]),M(n,"lastX",n.last[d]),M(n,"numberOfPoints",n.varDim[d]),!("spectralWidth"in n)){let{lastX:p,numberOfPoints:f,firstX:F}=n;P(n,"spectralWidth",n.isFid?f/(2*p):Math.abs(p-F)/n.originFrequency)}}if(`${t}REVERSE`in e){let d=e[`${t}REVERSE`];n.reverse=(Array.isArray(d)?d:[d]).map(p=>typeof p=="string"?p.includes("yes"):p)}let y=e[`${t}REFERENCE_POINT`];if(!("frequencyOffset"in n)&&y&&u(["spectralWidth","baseFrequency"])){let d=typeof y=="number"?y:e[`${t}REFERENCE_POINT`].match(/(?<reference>[+-]?\d+(?:\.\d+)?)\s*.*/),p;if(typeof y=="number"?p=y:(y.match(/(?<reference>[+-]?\d+(?:\.\d+)?)\s*.*/),p=Number(d?.groups?.reference)),!Number.isNaN(p)){let{spectralWidth:f,baseFrequency:F}=n;P(n,"frequencyOffset",.5*f*F-p)}}if(!("frequencyOffset"in n)&&u(["baseFrequency","originFrequency"])){let{baseFrequency:d,originFrequency:p}=n,f=d.map((F,h)=>(p[h]-F)*1e6);P(n,"frequencyOffset",f)}for(let d in n)n[d]&&n[d].length===1&&(n[d]=n[d][0]);return!n.frequencyOffset&&".SHIFTREFERENCE"in e&&Yr(e,n),Array.isArray(n.nucleus)||(n.nucleus=[n.nucleus]),n}function M(e,r,t){t!==void 0&&P(e,r,se(t))}function Ie(e,r){if(!Number.isNaN(r)){e.epoch=r;let t=new Date(r);e.date=t.toUTCString(),e.localeDate=t.toLocaleString()}}function Yr(e,r){let t=e[".SHIFTREFERENCE"],i=t.trim().startsWith("(")?/\((?<data>[^)]+)\)/:/(?<data>[^)]+)/,n=t.match(i);if(n.groups.data){let o=n.groups.data.split(",");if(o.length<4)return;let s=Number.parseInt(r.numberOfPoints,10),{spectralWidth:l,baseFrequency:a}=r,m=Number.parseInt(o[2],10),u=Number.parseFloat(o[3]),c;if(r.isFid){if(["baseFrequency","numberOfPoints","spectralWidth"].some(g=>!(g in r)))return;c=u+(s*.5-m)*l/s}else{let g=Number.parseFloat(r.firstX),y=Number.parseFloat(r.lastX),d=(y+g)/2,p=(y-g)/(s+1),f=p<0?g:y+(m-1)*p;c=(d-f)/a+u}c!==void 0&&!Number.isNaN(c)&&(r.frequencyOffset=c*a)}}function se(e){if((0,ae.isAnyArray)(e)){let r=[];for(let t of e)r.push(typeof t=="string"?Number.parseFloat(t):t);return r}return typeof e=="string"?Number.parseFloat(e):e}function Gr(e){switch(String((0,ae.isAnyArray)(e)?e[1]:e).toLowerCase().replaceAll(/\s/g,"")){case"1":case"notphasesensitive":return"notPhaseSensitive";case"2":return"QSEQ";case"3":case"tppi":return"TPPI";case"4":case"states":return"States";case"5":case"tppi-states":return"States-TPPI";case"6":case"echo-antiecho":return"Echo-antiecho";default:return"undefined"}}function Kr(e,r,t={}){let{prefix:i="",separator:n=`
|
|
4
|
+
`}=t;P(e,"spectralWidth",r[`${i}SweepWidth`]/e.originFrequency[0]);let o=r[`${i}.PULSESEQUENCE`].split(n),s=[];r[".OBSERVENUCLEUS"]&&s.push(r[".OBSERVENUCLEUS"]),r.INDIRECTNUCLEUS&&s.push(r.INDIRECTNUCLEUS),e.nucleus=C(s),e.pulseSequence=o[0];let l=o.slice(2,-1);if(s.length>1)if(s[0]===s[1])e.spectralWidth.push(e.spectralWidth[0]);else{let a=JSON.stringify(l).match(/\$\$SW1=\s*(?<sw>[+-]?(?:[0-9]*[.])?[0-9]+)/);if(a?.groups){let{originFrequency:m}=e,u=Number.parseFloat(a.groups.sw);e.spectralWidth.push(u/m[1])}}return e}function Zr(e,r){let{T1NUCLEUS:t,T2NUCLEUS:i,PAGE:n}=r;e.pulseSequence=r.EXPERIMENT||r[".PULSESEQUENCE"];let o=[],{dimension:s,isComplex:l}=e;if(s===2&&e.pulseSequence==="T1"){let u=l?2:1;for(let c=0;c<n.length;c+=u){let g=n[c].replace(/T1=/,"");o.push(Number(g))}r.vdlistValues=o}e.nucleus=s>1?[i,t]:i;let{phc0:a,phc1:m}=e;if(a&&m){let u=ie({phc0:a,phc1:m});e={...e,...u}}}var Qr={keepRecordsRegExp:/.*/,keepFiles:!0};async function le(e,r={}){let t={spectra:[],molecules:[]},{converter:i={},selector:n={},logger:o}=r,s=(0,me.groupByExperiments)(e,{logger:o,...tn(n)}),l=[];for(let m of s)l.push((0,me.convertOneExperiment)(m,{...Qr,...i}).then(u=>en(u,r)));let a=await Promise.allSettled(l);for(let m=0;m<a.length;m++){let u=a[m];if(u.status==="fulfilled"){let c=ie(u.value.info);t.spectra.push({...u.value,info:{...u.value.info,...c}})}else if(u.reason){let c=s[m].name;o?.warn(`Bruker data: ${c}, fails with: ${u.reason}`);continue}}return o&&o[t.spectra.length>0?"info":"debug"](`Loaded ${t.spectra.length} spectra from Bruker files`),(0,pt.formatSpectra)(t)}function en(e,r={}){let{keepSource:t=!1,logger:i}=r,n={...e.info,...e.meta},o=ce(n,{logger:i}),s={},{isFid:l}=o;if(rn(e)){let y=e.minMax;for(let d in y){let p=y[d];p&&(p.z=I(p.z))}s.components=e.minMax}else o.dimension===1&&(s.components=e.spectra);let{source:a}=e,{expno:m,name:u,files:c}=a;n.vdlist&&(n.vdlistValues=re(n.vdlist));let g={dependentVariables:[s],meta:n,info:{...o,experimentNumber:m,name:u}};return c&&t&&(g.sourceSelector={files:c.map(y=>y.relativePath)}),nn(g,e),g}function tn(e){let{general:r={},bruker:t={}}=e,{processingNumbers:i,experimentNumbers:n,...o}=t;return{...r,...o,processingNumbers:ut(i),experimentNumbers:ut(n)}}function ut(e){if(e)return e.split(/[^\d]+/).filter(Boolean).map(r=>Number.parseInt(r,10))}function rn(e){let{info:r}=e;return r.twoD}function nn(e,r){if(!("integrals"in r))return;let{integrals:t=[]}=r;e.integrals={values:t.map(i=>{let{from:n,to:o,integration:s}=i;return{from:n,to:o,integral:s,kind:"signal"}})}}var B=class{id="@zakodium/nmrium-core-plugins#BrukerLoaderPlugin";version=1;migrations=[];onReadProcess;constructor(){this.onReadProcess={onFiles:this.onReadProcessFiles}}onReadProcessFiles=(r,t)=>{let{sourceSelector:i,converter:n,keepSource:o,logger:s}=t??{};return le(r,{converter:n?.bruker,selector:i,keepSource:o,logger:s})}};function ue(){return new B}var Jt=require("@zakodium/nmrium-core"),_t=require("jcampconverter");function ft(e,r,t={}){let{selector:i={},keepSource:n=!1}=t;if(!n)return e;for(let o=0;o<e.spectra.length;o++){let s=e.spectra[o];s.sourceSelector={files:[r.relativePath],jcamp:{index:o,...i}}}return e}var dt=require("jcampconverter");function Te(e,r,t){let{dataType:i,children:n}=e,o=i==="LINK"&&n?n:[e];for(let s of o){if(s.dataType==="LINK"){Te(s,r,t);continue}let l=(0,dt.convert)(s.jcamp,t);r.push(...l.flatten)}}function ht(e,r={}){let t=[],i=bt(e,r);for(let s of i?e:[])s.dataType==="LINK"?s.children=Ee(s.children,r):s=Ee([s],r)[0],t.push(s);let{name:n,logger:o}=r;return e.length===0&&o?.warn(`There is no data ${n?`in ${n}`:"in the JCAMP-DX"}`),t}function Ee(e=[],r={}){let{name:t,logger:i,tree:n=[],dataSelection:o="both"}=r,s=[];for(let u of e){let{dataType:c,dataClass:g}=u;if(c==="LINK")u.children=Ee(u.children,r);else if(n.some(y=>{let{dataClass:d=g,dataType:p=c}=y;return g===d&&c===p})){i?.warn(`Skipping ${g} and ${c} ${t?`in ${t}`:"in the JCAMP-DX"},
|
|
5
|
+
because it didn't match the import filters`);continue}s.push(u)}let l=[],a=s.some(yt),m=s.some(gt);for(let u of s){if(o!=="both"&&u.dataType!=="LINK"){if(yt(u)&&(o==="ft"||o==="preferFT"&&m)){i?.warn(`Skipping raw data ${t?`in ${t}`:"in the JCAMP-DX"} because it didn't match the import filters`);continue}if(gt(u)&&(o==="fid"||o==="preferFID"&&a)){i?.warn(`Skipping FFT data ${t?`in ${t}`:"in the JCAMP-DX"} because it didn't match the import filters`);continue}}l.push(u)}return l}function gt(e){return e.dataType?.toUpperCase().includes("SPECTRUM")&&e.dataClass&&!e.dataClass.toUpperCase().includes("PEAK")}function yt(e){return e.dataType?.toUpperCase().includes("FID")}function bt(e,r={}){let{logger:t,name:i=""}=r;for(let n of e){if(n.dataType==="LINK"&&bt(n.children,r))return!0;let{dataType:o=""}=n,s=o.toLowerCase();if(s.length>0){if(s.includes("spectrum")&&!s.includes("nmr"))return t?.warn(`File ${i} was ignored because it is a ${o}`),!1;if(s.includes("nmr"))return!0}}return!1}var Le=require("@zakodium/nmrium-core"),Mt=require("jcampconverter"),an=Se(require("openchemlib"),1);var Ft=require("nmr-processing"),Pt=require("openchemlib");async function Nt(e,r={}){let t=await e.text(),i=q(t),n={molecules:i,spectra:[]};return i.length===0&&r.logger?.debug(`${e.name} is an empty molfile`),n}function q(e){let r=[];if(!(0,Ft.isMolfileNotEmpty)(e))return[];let i=Pt.Molecule.fromMolfile(e).toMolfile();return r.push({molfile:i}),r}var Dt=require("nmr-processing"),sn=Se(require("openchemlib"),1),St=require("openchemlib-utils");var on=new Set(["ndnmrspectrum","ndnmrfid","nmrspectrum","nmrfid"]);function pe(e){let{dataType:r="",dataClass:t=""}=e,i=r.replaceAll(/\s/g,"").toLowerCase(),n=t.replaceAll(/\s/g,"").toLowerCase();return on.has(i)&&n!=="peaktable"}function Rt(e,r,t={}){let{spectra:i,info:n,meta:o}=e,s=i[0].data,l=[],a={x:"delta",y:"intensity",w:"width",m:"multiplicity",a:"atom"},{logger:m,name:u,spectraData:c}=t,{CROSSREFERENCE:g}=n,y=typeof g!="string"?g:g.split(/\r?\n/).map(D=>D.trim()).filter(Boolean),d=y.find(D=>D?.toLowerCase().includes("structure"));if(d===void 0)return m&&m.warn(`There is not a structure reference for ${u} file, assignment object could not be completed`),null;let p=Number.parseInt(d?.toLowerCase().replace(/_/,"").replace(/structure:\s*blockid\s*=\s*(?<blockId>.*)/,"$<blockId>"),10);if(Number.isNaN(p)||p<1)return m&&m.warn(`Structure block_id not found for ${u} file, assignment object could not be completed`),null;let F=c?.molecules?.find(D=>D.blockId===p)?.molfile??"";if(F===""){let D=r.find(A=>A.info.BLOCKID===p),{MOLFILE:R=""}=D?.meta||{};F=R}if(!(0,Dt.isMolfileNotEmpty)(F))return m&&m.warn(`Empty molfile for ${u} file with structure block_id = ${p}, assignment object could not be completed`),null;let h=(0,St.getDiastereotopicAtomIDsFromMolfile)(sn,F),b=oe({...n,...o},{},"");for(let D=0;D<s.x.length;D++){let R={};for(let A in s){let x=s[A][D];typeof x=="string"&&x.startsWith("<")&&x.endsWith(">")&&(x=x.slice(1,-1)),R[a[A]]=x}if("atom"in R){let A=h.map[R.atom-1];b.includes("1H")?A.nbHydrogens>0?(R.diaIDs=A.hydrogenOCLIDs,R.nbHydrogens=A.nbHydrogens):(R.diaIDs=[A.oclID],R.nbHydrogens=A.nbHydrogens):(R.diaIDs=[A.oclID],R.nbHydrogens=1)}l.push(R)}let N={};for(let D of l){let{delta:R,diaIDs:A}=D,x=`${R}_${A.join("_")}`;if(N[x])N[x].atoms.push(D.atom);else{let{atom:_n,...Ir}=D;N[x]={...Ir,atoms:[D.atom]}}}let S=[];for(let D of y)D.toLowerCase().includes("spectrum")&&S.push(Number(D.toLowerCase().replace(/_/,"").replace(/.*:\s*blockid=(?<blockId>.*)/,"$<blockId>")));if(S.length===0){for(let D of r)if(pe(D)){let{BLOCKID:R}=D.info;S.push(Number(R))}S.length>1&&(S=[],m&&m.warn(`There is not a spectral cross-reference for the peak assignment in the ${u} file`))}return{moleculeBlockID:p,spectraBlockIDs:S,assignments:Object.values(N),molecule:h.molecule}}function At(e,r,t,i){for(let n of e){let{meta:o,dataClass:s="",dataType:l="",info:a}=n,m=Number.parseInt(String(a.BLOCKID),10);o.MOLFILE?un(String(o.MOLFILE),r,m):n.jcampCS&&ln(n,r,m),cn(s,l)&&mn(r,n,e,i),pe(n)&&t.push(n)}}function cn(e,r){return e?.toLowerCase().includes("assignments")&&r?.toLowerCase().includes("assignments")}function mn(e,r,t,i){let n=Rt(r,t,{spectraData:e,logger:i.logger,name:i.name});if(e.assignmentsByBlocks||(e.assignmentsByBlocks={}),n){let{spectraBlockIDs:o}=n;for(let s of o)e.assignmentsByBlocks[s]=n}}function ln(e,r,t){r.molecules||(r.molecules=[]);let i=(0,Mt.parseJcampCS)(e,{OCL:an}),n=q(i?.molfile||"");n.length>0&&r.molecules.push({id:(0,Le.generateID)(),blockId:t,...n[0]})}function un(e,r,t){r.molecules||(r.molecules=[]);let i=q(String(e));r.molecules.push({id:(0,Le.generateID)(),blockId:t,...i[0]})}var ve=require("@zakodium/nmrium-core"),W=require("ml-spectra-processing"),Bt=require("nmr-processing");function $(e){return e.slice(0,Math.max(0,e.lastIndexOf(".")))}function j(e){e.sort((r,t)=>r.from-t.from);for(let r=0;r<e.length-1;r++)e[r].to>e[r+1].from&&(e[r].to=Math.max(e[r+1].to,e[r].to),e[r].signals=e[r].signals.concat(e[r+1].signals),e[r].integration+=e[r+1].integration,e.splice(r+1,1),r--);return e}var It=require("nmr-processing");var Ct=require("ml-spectra-processing");function U(e){return e.trim().slice(1,-1).split(/,\s*/).map(r=>r.trim())}var pn={I:"id",X:"from",Y:"to",Hs:"delta",An:"integration",H:"nbAtoms",C:"multiplicity",N:"assignment","(J)":"js"},xt=["I","X","Y","Hs","An","H","C","N","(J)"];function Ot(e){let r={headersFromParenthesis:[],headersFromComments:[],comments:[],data:[],multiplets:[]},t=e.split(/\r?\n/).filter(i=>i.trim()!=="");if(t.length===0)return r;if(t[0].startsWith("(")&&!t[0].match(/\d/)){let i=t.shift();r.headersFromParenthesis=U(i)}return r.comments=t.filter(i=>i.startsWith("$$")).map(i=>i.replace(/^\$\$\s*/,"")),r.headersFromComments=dn(r.comments),r.data=t.filter(i=>!i.startsWith("$$")).map(U),r.multiplets=fn(r),r}function fn(e,r={}){let{logger:t}=r,i=e.data[0].map((a,m)=>m).filter(a=>e.data.every(m=>Number.isNaN(m[a])||Number.isNaN(Number(m[a]))));if(t?.trace(`Parsing JCAMP-DX assignment: stringColumnIndexes: ${i.join(",")}`),i.length===0)return t?.warn("Parsing JCAMP-DX assignment: No string columns found. Skipping parsing of assignment."),[];let n=i[0],o;if(e.headersFromParenthesis.length>0&&e.headersFromParenthesis[n]==="C")o=e.headersFromParenthesis;else if(e.headersFromComments.length>0&&e.headersFromComments[n]==="C")o=e.headersFromComments;else if(xt[n]==="C")o=xt;else return t?.warn("No header found for multiplicity. Skipping parsing of assignment."),[];return(0,Ct.xMaxValue)(e.data.map(a=>a.length))>o.length&&t?.warn("Some assignments are containing more values than headers"),e.data.map(a=>{let m={};for(let u=0;u<o.length;u++){let c=o[u];m[pn[c]||c]=a[u]}return m})}function dn(e){return e.map(r=>r.split(":")[0].trim()).filter(r=>r.length>0)}function Tt(e,r={}){let{logger:t}=r,i=Ot(e),n={multiplets:[],comments:i.comments};for(let o of i.multiplets){let{id:s,from:l,to:a,delta:m,integration:u,nbAtoms:c,multiplicity:g}=o,y={id:s,js:[],multiplicity:"",...gn({from:l,to:a,delta:m,integration:u,nbAtoms:c})};if(typeof o.js=="string"){let d=o.js.split(/\s+/).map(Number.parseFloat),p=0,f=(0,It.splitPatterns)(g).map(b=>{let N=(b?.multiplicity||1)-1;return p+=N,{value:b.value,multiplicity:b?.multiplicity,js:d.slice(p-N,p)}}),F=f.reduce((b,N)=>b+(N.multiplicity?N.multiplicity-1:0),0);d.length!==F&&t?.warn(`The number of j values (${d.length}) is not equal to the sum of the multiplicities - 1 (${F})`);let h=[];for(let b of f){if(b.js.every(N=>N===b.js[0])){h.push(b);continue}if(b.multiplicity!==b.js.length+1){h.push(b);continue}for(let N=0;N<b.multiplicity-1;N++)h.push({value:"d",multiplicity:2,js:[b.js[N]]})}h.sort((b,N)=>N.js[0]-b.js[0]),y.js=h.map(b=>({coupling:b.js[0],multiplicity:b.value}))}typeof o.assignment=="string"&&(y.assignment=hn(o.assignment)),typeof o.multiplicity=="string"&&(y.multiplicity=o.multiplicity),n.multiplets.push(y)}return n}function gn(e){let r={};for(let t in e){let i=e[t],n=typeof i=="number"?i:Number.parseFloat(i);Number.isNaN(n)||(r[t]=n)}return r}var yn={quot:'"',apos:"'",comma:",",amp:"&",lpar:"(",rpar:")",lt:"<",gt:">",colon:":",semi:";"};function hn(e){return e.replaceAll(/&(\w+);/gi,(r,t)=>yn[t.toLowerCase()]||r)}function Et(e){let r=e.split(/\r?\n/).filter(i=>i.trim()!==""),t=[];for(let i of r)if(i.startsWith("(")){let[n,o,s]=U(i).map(Number.parseFloat);t.push({id:n,x:o,y:s})}return t}function Lt(e,r={}){let t={};if(!e["OBSERVED MULTIPLETS"])return[];let i=Tt(e["OBSERVED MULTIPLETS"],r);if(!i)return[];let{multiplets:n}=i;for(let o of n){let{id:s,from:l,to:a,integration:m=0,...u}=o;t[s]={from:l,to:a,integration:m,signals:[{id:s,...u}]}}if(e["OBSERVED MULTIPLETS PEAKS"]){let o=Et(e["OBSERVED MULTIPLETS PEAKS"]),s={};for(let l of o){let{id:a,x:m,y:u}=l;s[a]||(s[a]=[]),s[a].push({x:m,y:u,width:.05})}for(let l in t)s[l]&&(t[l].signals[0].peaks=s[l])}return j(Object.values(t))}function kt(e,r){let i=[...e.getMolecularFormula().formula.matchAll(/(?<element>[A-Z][a-z]?)(?<count>\d*)/g)].map(o=>({element:o?.groups?.element,count:o?.groups?.count?Number(o.groups.count):1})),n=[...r.nucleus[0].matchAll(/[0-9]*(?<element>[A-Z][a-z]?)/g,"$element")][0].groups.element;return i.find(o=>o.element===n)?.count||100}function wt(e){let r={};return".PHASE0"in e&&(r.ph0=Number.parseFloat(e[".PHASE0"]),r.ph1=Number.parseFloat(e[".PHASE1"])),r}function ke(e){let{ph0:r,ph1:t}=e;return Number.isFinite(r)&&Number.isFinite(t)}var we=require("@zakodium/nmrium-core");function vt(e,r,t){for(let i=0;i<e.length;i++){if(r.includes(i))continue;let{delta:n,multiplicity:o="",diaIDs:s}=e[i],l=Number(n)-.01,a=Number(n)+.01;t.push({from:l,to:a,integration:1,id:(0,we.generateID)(),signals:[{id:(0,we.generateID)(),delta:n,multiplicity:o,diaIDs:s}]})}}var qt=require("linear-sum-assignment"),$t=require("ml-spectra-processing");function jt(e,r){let t=e.map(s=>s.delta),i=r.map(s=>s.delta),n=(0,$t.xCostMatrix)(i,t,{fct:(s,l)=>Math.abs(s-l)}),{rowAssignments:o}=(0,qt.linearSumAssignment)(n,{maximaze:!1});return Array.from(o)}function zt(e,r){let{assignments:t,ranges:i}=r;t?.sort((s,l)=>l.delta-s.delta);let n=[],o=[];for(let s of i){let l=0,{from:a,to:m}=s,u=[];for(let c=l;c<t.length;c++){let{delta:g}=t[c];g<=m&&g>=a?(u.push(t[c]),o.push(c)):g>m&&(l=c)}if(u.length>0){let c=s.signals,g=[],y=u.length>1&&c.length>1?jt(c,u):[0];for(let d=0;d<u.length;d++){let p=y[d],{delta:f,multiplicity:F,diaIDs:h}=u[d];p>-1?g.push({...c[p],diaIDs:h}):g.push({delta:f,multiplicity:F,diaIDs:h})}s.signals=g,n.push(s)}}vt(t,o,n),n.sort((s,l)=>s.from-l.from),e.ranges={values:j(n).map(s=>{let{integration:l,...a}=s;return a}),options:{sum:r.integrationSum,isSumConstant:!0,sumAuto:!0}},e.ranges.options.moleculeId=String(r.moleculeId)}function Ut(e,r,t,i,n){let{logger:o}=n,s={components:Wt(e)?Pn(e,t.isFid):Fn(e)},{name:l=t.title||`jcamp_${(0,ve.generateID)()}`}=n,a={dependentVariables:[s],meta:r,info:{...t,name:$(l)}};return bn(e)&&Nn(a,i,r,e,t,{logger:o}),a}function Wt(e){return"minMax"in e}function bn(e){return!Wt(e)}function Fn(e){return e.spectra.map(r=>{let t=I(r.data);return{...r,data:t}})}function Pn(e,r){let t={...e.minMax,z:I(e.minMax?.z)};return r?Dn(t):{rr:t}}function Nn(e,r,t,i,n,o){let{assignmentsByBlocks:s}=r,l=wt(t);ke(l)&&Sn(e,l);let a=String(i.info.BLOCKID);if(s?.[a]){let{molecule:m,assignments:u,moleculeBlockID:c}=s[a],g=kt(m,n),y=I(i.spectra[0].data);if(y.x[0]>y.x[1])for(let F of i.spectra)F.data.x.reverse(),F.data.y.reverse();if(ke(l)&&i.spectra.length>1){let{re:F}=Rn(i,l);y.y=F}let{x:d,y:p}=y,f=Lt(t,o)??(0,Bt.xyAutoRangesPicking)({x:d,y:p},{peakPicking:{frequency:n.originFrequency},ranges:{frequency:n.originFrequency,integrationSum:g}});zt(e,{moleculeId:c,ranges:f,assignments:u,integrationSum:g})}}function Dn(e){let{z:r,...t}=e,i=[],n=[];for(let l=0;l<r.length;l+=2)i.push(r[l].slice()),n.push(r[l+1].slice());let o=(0,W.matrixMinMaxZ)(i),s=(0,W.matrixMinMaxZ)(n);return{re:{...t,z:i,minZ:o.min,maxZ:o.max},im:{...t,z:n,minZ:s.min,maxZ:s.max}}}function Sn(e,r){let{ph0:t,ph1:i}=r;e.filters||(e.filters=[]),e.filters.push({id:(0,ve.generateID)(),name:"phaseCorrection",value:{ph0:t,ph1:i,absolute:!1},enabled:!0})}function Rn(e,r){let{ph0:t,ph1:i}=r,{re:n,im:o}=(0,W.reimPhaseCorrection)({re:e.spectra[0].data.y,im:e.spectra[1].data.y},t*Math.PI/180,i*Math.PI/180);return{re:n,im:o}}function Xt(e,r,t){let{logger:i}=t,n=[];for(let o of e)if(o.spectra&&o.spectra.length>0||o.minMax){Mn(o);let s={...o.info,...o.meta},l=ce(s,{logger:i});if(l.experiment==="wobble_curve")continue;n.push(Ut(o,s,l,r,t))}return n}function Mn(e){let r=e.meta["BRUKER FILE EXP"];if(!r)return;let i=(Array.isArray(r)?r:[r]).find(o=>o.slice(0,10).includes("vdlist"));if(!i)return;let n=i.split(`
|
|
6
|
+
`).slice(1);e.info.vdlistValues=re(n)}async function fe(e,r={}){let t=await e.text(),i=qe(t,{name:e.name,...r});return ft(i,e,r)}function qe(e,r={}){let t={spectra:[],molecules:[]},{name:i,converter:n={},selector:o={},logger:s}=r,{keepRecordsRegExp:l=/.*/}=n,a={keepSpectra:!0,noContour:!0,noTrimRegExp:/\$MOLFILE/,keepRecordsRegExp:l,logger:s},m=ht((0,_t.createTree)(e),{name:i,...o,logger:s});for(let u of m)An(u,t,a,i);if(xn(t,o),t.spectra.length===0&&m.length>0){let u=t.molecules.length===0?" nor molecule":"";s?.warn(`No spectra${u} data was loaded from file ${i}`)}return(0,Jt.formatSpectra)(t)}function An(e,r,t,i){let n=[],o=[],s={molecules:[]},{logger:l}=t,a={name:i,logger:l};Te(e,o,t),At(o,s,n,a),r.spectra.push(...Xt(n,s,a)),r.molecules.push(...s.molecules)}function xn(e,r){r.index!==void 0&&(e.spectra=e.spectra.slice(r.index,r.index+1))}var X=class{id="@zakodium/nmrium-core-plugins#JCAMPDXLoaderPlugin";version=1;migrations=[];onReadProcess;constructor(){this.onReadProcess={supportedExtensions:["jcamp","jdx","dx"],onFile:this.onReadProcessFile.bind(this)}}onReadProcessFile(r,t={}){let{sourceSelector:i={},converter:n,keepSource:o,logger:s}=t;return s?.debug(`Reading JCAMP-DX file: ${r.name}`),fe(r,{selector:this.getJCAMPDXSelector(i),converter:n?.jcamp,keepSource:o,logger:s})}getJCAMPDXSelector(r={}){let{jcamp:t={},general:i={}}=r,{dataSelection:n="both"}=i;return{...t,dataSelection:n}}};function de(){return new X}var ge=require("@zakodium/nmrium-core"),Kt=require("gyromagnetic-ratio"),Zt=require("is-any-array"),Qt=require("jeolconverter"),er=Se(require("lodash.merge"),1),tr=require("nmr-processing");var L=require("is-any-array");var Vt={0:"uint8",1:"uint16",2:"uint32",3:"uint64",4:"int8",5:"int16",6:"int32",7:"int64",8:"float32",9:"float64",10:"complex64",11:"complex128"},Ht={0:"scalar",1:"vector",2:"matrix",3:"symetricMatrix",4:"pixel"};function Yt(e,r,t={}){let{quantityType:i=0,encoding:n="none",name:o="",unit:s="",quantityName:l="",sparseSampling:a={},from:m=[0],to:u=[-1]}=t;if((0,L.isAnyArray)(e))throw new Error("JEOL with an array of data is not yet supported");if(!("re"in e&&"im"in e))throw new Error("Only re/im data is supported");let c=je(e,m,u),{componentLabels:g=c.componentLabels}=t;return{type:"internal",quantityType:Ht[i],numericType:Vt[r],encoding:n,name:o,unit:s,quantityName:l,componentLabels:g,sparseSampling:a,description:t.description||"",application:t.application||"",components:c.components,dataLength:c.dataLength}}function Cn(e){return(0,L.isAnyArray)(e.re)&&(0,L.isAnyArray)(e.im)}function On(e){return!(0,L.isAnyArray)(e.re[0])}function je(e,r,t){let i=[],n=[],o=[];if(Cn(e))if(On(e)){i[0]=$e(r[0],t[0],e.re.length);let s=new Float64Array(i[0]);for(let l=0;l<i[0];l+=2){let a=l+r[0]*2;s[l]=e.re[a/2],s[l+1]=e.im[a/2]}o.push(s),n.push("complex")}else if((0,L.isAnyArray)(e.re[0])){i[0]=In(r[1],t[1],e.re.length),i[1]=$e(r[0],t[0],e.re[0].length);for(let s=0;s<i[0];s++){let l=new Float64Array(i[1]);for(let a=0;a<i[1];a+=2){let m=a+r[0]*2;l[a]=e.re[s][m/2],l[a+1]=e.im[s][m/2]}o.push(l)}}else throw new Error("check your object");else if((0,L.isAnyArray)(e.re.re)){i[0]=$e(r[1],t[1],e.re.re.length);let s=je(e.re,r,t).components,l=je(e.im,r,t).components;for(let a=0;a<i[0]/2;a++)o.push(s[a],l[a])}else throw new Error("check the dimension or the type of data in your array");return{dataLength:i,componentLabels:n,components:o}}function In(e,r,t){return r-e+1<t?r-e+1:t}function $e(e,r,t){return r-e+1<t?(r-e+1)*2:t*2}async function rr(e,r={}){let t=await e.arrayBuffer(),{name:i=$(e.name),keepSource:n=!1}=r,o={spectra:[],molecules:[]},l=Ln(t)[0],{metadata:a,...m}=l.description,u=0,c=m.dimension===1?"1d":"2d",g="NMR SPECTRUM",y=m.dimension===1?m.nucleus[0]:m.nucleus,d=m.spectralWidthClipped[0],p;l.dependentVariables&&(m.dimension===1?p=Tn(l):m.dimension===2&&(p=En(l)));for(let F in m)Array.isArray(m[F])&&m[F].length===1&&(m[F]=m[F][0]);let f={data:p,info:{...m,acquisitionMode:u,experiment:c,type:g,nucleus:y,spectralWidthClipped:d,name:i},meta:a};return n&&(f.sourceSelector={files:[e.relativePath]}),o.spectra=[f],(0,ge.formatSpectra)(o)}function Tn(e){let r=e.dimensions[0],t=e.dependentVariables,i=r.quantityName,n=r.count,o=r.increment.magnitude,s=r.originOffset.magnitude,l=r.coordinatesOffset.magnitude,a=t[0].components[0],m=new Float64Array(n),u=new Float64Array(n);for(let p=a.length-1,f=0;p>0;p-=2)m[f]=a[p-1],u[f++]=a[p];let c={},[g,y]=[0,0];switch(i){case"frequency":y=0+l/s*1e6,g=o/s*1e6,c.re=m,c.im=u;break;case"time":y=s,g=o,c.re=m.reverse(),c.im=u.reverse().map(p=>-p);break;default:break}let d=[];for(let p=0;p<n;p++)d.push(y+p*g);return c.x=d,c}function En(e){let r=e.dimensions,t=e.dependentVariables,i=r[0].quantityName,n=[],o=[],s=Number.MIN_SAFE_INTEGER,l=Number.MAX_SAFE_INTEGER,a=Number.MAX_SAFE_INTEGER,m=Number.MIN_SAFE_INTEGER;for(let g of t[0].components){let y=new Float64Array(g.length/2),d=new Float64Array(g.length/2);for(let p=g.length-1,f=0;p>0;p-=2){let F=g[p-1],h=g[p];F>s&&(s=F),F<l&&(l=F),h>m&&(m=h),h<a&&(a=h),y[f]=F,d[f++]=h}if(i==="frequency")n.push(y),o.push(d);else{let p=y.length,f=new Float64Array(d.length);for(let F=0,h=p-1;F<p;F++)f[F]=-d[h--];n.push(y.reverse()),o.push(f)}}let u={re:{z:n,minZ:l,maxZ:s},im:{z:o,minZ:a,maxZ:m}},c=["X","Y"];for(let g=0;g<c.length;g++){let y=r[g].count,d=r[g].increment.magnitude,p=r[g].originOffset.magnitude,f=r[g].coordinatesOffset.magnitude,F=c[g];for(let h of["re","im"])i==="frequency"?(u[h][`min${F}`]=0+f/p*1e6,u[h][`max${F}`]=y*(d/p)*1e6):(u[h][`min${F}`]=p,u[h][`max${F}`]=y*d)}return u}function Ln(e){let r=(0,Qt.parseJEOL)(e),t=r.info,i=r.headers,n=r.parameters,{dimension:o}=t,s={};for(let f of n.paramArray){let{name:F,value:h}=f;s[F]=nr(h,o)}delete n.paramArray;let l=r.data,a={};a.title=`title: ${i.title} / comment: ${i.comment} / author:${i.author} / site: ${i.site}`,a.nucleus=t.nucleus.map(tr.normalizeNucleus),a.sampleName=t.sampleName,a.date=t.date,a.epoch=t.epoch,a.localeDate=new Date((0,ge.getOneIfArray)(t.epoch)).toLocaleString(),a.author=t.author,a.solvent=t.solvent,a.temperature=t.temperature.magnitude,a.probeName=t.probeName||"",a.fieldStrength=t.fieldStrength.magnitude;let m=a.nucleus.map(Kt.getGyromagneticRatio);a.baseFrequency=m.map(f=>t.fieldStrength.magnitude*f/(2*Math.PI*1e6)),a.pulseSequence=t.experiment,a.temperature=t.temperature?.unit?.toLowerCase()==="celsius"?273.15+t.temperature.magnitude:t.temperature.magnitude,a.digitalFilter=t.digitalFilter,a.pulseStrength90=1/(4*t.pulseStrength90.magnitude),a.numberOfScans=t.numberOfScans,a.relaxationTime=t.relaxationTime.magnitude,a.isComplex=t.dataSections.includes("im"),a.isFid=t.dataUnits[0]==="Second",a.isFt=t.dataUnits[0]==="Ppm",a.dimension=t.dimension,a.originFrequency=t.originFrequency.map(f=>f.magnitude/1e6).slice(0,o),a.numberOfPoints=t.dataPoints.slice(0,1),a.frequencyOffset=t.frequencyOffset.map((f,F)=>f.magnitude*a.baseFrequency[F]).slice(0,o),a.acquisitionTime=t.acquisitionTime.map(f=>f.magnitude).slice(0,o),a.spectralWidth=t.spectralWidth.map((f,F)=>f.magnitude/t.originFrequency[F].magnitude*1e6).slice(0,o),a.spectralWidthClipped=t.spectralWidthClipped.map((f,F)=>f.magnitude/a.baseFrequency[F]*1e6).slice(0,o);let u=[],c={},g;for(let f=0;f<t.dimension;f++){if(g={magnitude:t.acquisitionTime[f].magnitude/(t.dataPoints[f]-1),unit:"s"},t.dataUnits[f]==="Second")c.quantityName="time",c.originOffset={magnitude:0,unit:"s"},f===0?c.coordinatesOffset={magnitude:t.digitalFilter*g.magnitude,unit:"s"}:c.coordinatesOffset={magnitude:0,unit:"s"},c.reciprocal={originOffset:{magnitude:t.originFrequency[f].magnitude,unit:"Hz"},quantityName:"frequency",coordinatesOffset:{magnitude:t.frequencyOffset[f].magnitude*t.originFrequency[f].magnitude/1e6,unit:"Hz"}};else if(t.dataUnits[f]==="Ppm"){c.quantityName="frequency";let F=t.originFrequency[f].magnitude;c.originOffset={magnitude:F,unit:"Hz"};let h=t.dataOffsetStart[f],N=t.dataOffsetStop[f]-h+1;g={magnitude:kn(t,f)/(N-1),unit:"Hz"};let R=t.dataAxisStop[f]*F/1e6;c.coordinatesOffset={magnitude:R,unit:"Hz"},N!==t.dataPoints[f]&&(t.dataPoints[f]=N)}f===0?c.description="direct dimension":c.description="indirect dimension",u.push({label:String(i.dataAxisTitles[f]),count:Number(t.dataPoints[f]),increment:g,type:"linear",description:String(c.description)||"",application:c.application||{},coordinatesOffset:c.coordinatesOffset||0,originOffset:c.originOffset||0,quantityName:String(c.quantityName)||"",reciprocal:c.reciprocal||{},period:c.period||0,complexFFT:c.complexFFT||!1})}let y=[];y.push(Yt(l,11,{unit:"none",quantityName:"relative intensity",from:t.dataOffsetStart,to:t.dataOffsetStop}));let d={...a};return delete d.paramList,d.metadata={...Gt(i,o),...Gt(n,o),...(0,er.default)({},s)},[{timeStamp:Date.now(),description:d,dimensions:u,dependentVariables:y}]}function kn(e,r){let{spectralWidth:t,spectralWidthClipped:i}=e;return i[r].magnitude!=="NA"?i[r].magnitude:t[r].magnitude}function Gt(e,r){let t={};for(let i in e)t[i]=nr(e[i],r);return t}function nr(e,r){return(0,Zt.isAnyArray)(e)?r>1?e.slice(0,r):e[0]:e}var J=class{id="@zakodium/nmrium-core-plugins#JEOLLoaderPlugin";version=1;migrations=[];onReadProcess;constructor(){this.onReadProcess={supportedExtensions:["jdf"],onFile:this.onReadProcessFile.bind(this)}}onReadProcessFile(r,t={}){let{logger:i,keepSource:n}=t;return i?.debug(`Reading JEOL file: ${r.name}`),rr(r,{name:r.name,keepSource:n,logger:i})}};function ye(){return new J}var _=class{id="@zakodium/nmrium-core-plugins#MolfileLoaderPlugin";version=1;migrations=[];onReadProcess;constructor(){this.onReadProcess={supportedExtensions:["mol"],onFile:this.onReadProcessFile.bind(this)}}onReadProcessFile(r,t={}){let{logger:i}=t;return i?.debug(`Reading molfile file: ${r.name}`),Nt(r,{logger:i})}};function he(){return new _}var be=require("nmredata");var Be=require("@zakodium/nmrium-core");var ze=require("@zakodium/nmrium-core"),ir=require("ml-spectra-processing");function or(e,r){let{x:t,re:i}=r.data;return e.map(n=>{let o=(0,ir.xyIntegration)({x:t,y:i},{from:n.from,to:n.to}),s=[];for(let l of n.signals||[]){let{kind:a=null,id:m,js:u=[],diaIDs:c=[],...g}=l;s.push({...g,kind:a||"signal",js:u,id:m||(0,ze.generateID)(),diaIDs:c})}return{...n,id:n.id||(0,ze.generateID)(),kind:s?.[0].kind||"signal",absolute:o,signals:s}})}function sr(e,r){let t=[],{baseFrequency:i=500}=r.info;for(let n of e){let{delta:o,diaIDs:s=[],multiplicity:l="",integration:a=0}=n,m=n.jCoupling||[],u=wn({delta:o,js:m,frequency:i});if(m&&l&&m.length===l.length){m.sort((c,g)=>g.coupling-c.coupling);for(let c=0;c<m.length;c++)m[c].multiplicity=l[c]}t.push({id:(0,Be.generateID)(),...u,integration:a,signals:[{id:(0,Be.generateID)(),js:m,delta:o,diaIDs:s,multiplicity:l}]})}r.ranges.values=or(j(t),r)}function wn(e){let{delta:r,js:t=[],frequency:i}=e,n=.5;for(let o of t)n+=o.coupling;return n/=i,{from:r-n,to:r+n}}var Ue=require("@zakodium/nmrium-core"),vn=["x","y"],qn={x:0,y:0};function ar(e,r,t={}){let i=[],{shift:n=qn}=t,{originFrequency:o=[400,400]}=r.info,s={x:o[0],y:o[1]};for(let l of e){let a={x:{},y:{},id:(0,Ue.generateID)(),kind:"signal"},m={id:(0,Ue.generateID)(),kind:"signal",peaks:[]},u={x:10,y:10};for(let c of vn){let{coupling:g=[],delta:y,diaIDs:d=[]}=l[c];for(let p of g)u[c]+=p.coupling;if(l.activeCoupling){let{activeCoupling:p=[]}=l;for(let f of p)u[c]+=f.coupling}u[c]/=s[c],a[c]={from:y-u[c],to:y+u[c]},m[c]={delta:y,diaIDs:d,originalDelta:y-n[c]}}i.push({...a,signals:[m]})}r.zones.values=i}function cr(e){return $n(e.data)}function $n(e){return"rr"in e||!("x"in e)&&"re"in e}async function mr(e,r,t={}){let i={spectra:[],molecules:[]},n=await jn(e,r,t);if(n.spectra.length>0){let{spectra:o,molecules:s,usedFiles:l}=n;i.spectra.push(...o),i.molecules.push(...s);let a=e.files.length;for(let m=a-1;m>=0;m--){let u=e.files[m].relativePath;!u.match(/acqu.*/s)&&l.includes(u)&&e.files.splice(m,1)}}return i}async function jn(e,r,t){let i=[],n=await(0,be.getSDF)(e),o={spectra:[],molecules:[]};if(n.length===0)return{...o,usedFiles:i};let s=[];for(let a of n){let m=(0,be.nmrRecordToJSON)({sdf:a,fileCollection:e}).then(u=>{let{spectra:c,molecules:g=[]}=u;return i.push(a.root+a.filename),o.molecules.push(...g),zn(c,r,t)});s.push(m)}let l=await Promise.allSettled(s);for(let a of l)a.status==="fulfilled"?(o.spectra.push(...a.value.spectra),i.push(...a.value.usedFiles)):a.reason&&t?.logger?.error(a.reason);return{...o,usedFiles:i}}async function zn(e,r,t){let i=[],n=[],o={spectra:[],molecules:[]};for(let s of e){let l=Bn(s.source,r,t).then(a=>{let{spectra:m,files:u}=a;i.push(...u);for(let c of m)cr(c)?ar(s.signals,c):sr(s.signals,c);o.spectra.push(...m)});n.push(l)}return await Promise.allSettled(n),{...o,usedFiles:i}}async function Bn(e,r,t={}){let{file:i,jcampURL:n}=e,{converter:o}=t;if(n){let a=await Un(n,r,o?.jcamp);if(a)return{...a,files:[]}}let s=[];for(let a of i||[])s.push(Wn(a,t).then(m=>({...m,files:a.fileCollection.files.map(u=>u.relativePath)})));let l=await Promise.allSettled(s);for(let a of l){if(a.status==="fulfilled")return a.value;a.reason&&t?.logger?.error(a.reason)}return{spectra:[],molecules:[],files:[]}}async function Un(e,r,t={}){let i={entries:[{relativePath:e}]},n={name:$(e||""),xy:!0,noContours:!0,...t},{data:o}=await r.readFromWebSource(i,n);return o}async function Wn(e,r={}){let{converter:t,sourceSelector:i}=r;switch(e.type){case"jcamp":return fe(e.fileCollection.files[0],{name:e?.fileCollection.files[0].name||"",converter:t?.jcamp,selector:i?.jcamp,logger:r.logger,keepSource:r.keepSource});case"brukerFiles":return le(e.fileCollection,{converter:t?.bruker,selector:i});default:throw new Error("There is not a supported source")}}var V=class{constructor(r){this.core=r;this.onReadProcess={onFiles:this.onReadProcessFiles}}id="@zakodium/nmrium-core-plugins#NMReDATALoaderPlugin";version=1;migrations=[];onReadProcess;onReadProcessFiles=(r,t)=>mr(r,this.core,t)};function Fe(e){return new V(e)}var lr=require("sdf-parser");function We(e,r={}){let{mixedEOL:t}=r,{molecules:i}=(0,lr.parse)(e,{mixedEOL:t}),n=[];for(let{molfile:o}of i){let s=q(o);n.push(...s)}return n}async function ur(e,r={}){let{logger:t,mixedEOL:i}=r,n=await e.text(),o=We(n,{mixedEOL:i}),s={molecules:o,spectra:[]};return t&&t[o.length>0?"info":"debug"](`Loaded ${s.molecules.length} molecules from the ${e.name} file`),s}var H=class{id="@zakodium/nmrium-core-plugins#SDFLoaderPlugin";version=1;migrations=[];onReadProcess;constructor(){this.onReadProcess={supportedExtensions:["sdf"],onFile:this.onReadProcessFile.bind(this)}}onReadProcessFile(r,t={}){let{logger:i}=t;return i?.debug(`Reading sdf file: ${r.name}`),ur(r,{logger:i})}};function Pe(){return new H}var pr=require("openchemlib");function Xe(e){let r=[],t=e.split(/\r?\n/).filter(Boolean);for(let i of t){let o=pr.Molecule.fromSmiles(i).toMolfile();r.push({molfile:o})}return r}async function fr(e,r={}){let t=await e.text(),i=Xe(t),n={molecules:i,spectra:[]};return r.logger?.info(`Found ${i.length} molecules from the ${e.name} file`),n}var Y=class{id="@zakodium/nmrium-core-plugins#SMILESLoaderPlugin";version=1;migrations=[];onReadProcess;constructor(){this.onReadProcess={supportedExtensions:["smi","smiles"],onFile:this.onReadProcessFile.bind(this)}}onReadProcessFile(r,t={}){let{logger:i}=t;return fr(r,{logger:i})}};function Ne(){return new Y}var br=require("@zakodium/nmrium-core"),Fr=require("filelist-utils"),Pr=require("is-any-array"),Nr=require("ml-spectra-processing"),Dr=require("varian-converter");var dr=require("nmr-processing");function gr(e,r){let{meta:t,procpar:i}=e,n={};for(let h of i)n[h.name]=h.values;let o={},s={},{np:l,solvent:a,sfrq:m,reffrq:u,temp:c,rp:g,sw:y,rfl:d,rfp:p}=n;P(o,"numberOfPoints",l&&Number(O(l))/2),P(o,"solvent",O(a)),P(o,"originFrequency",O(m)),P(o,"baseFrequency",O(u)),(Number.isNaN(o.originFrequency)||o.originFrequency===0)&&(o.originFrequency=400,r?.warn("The frequency could not be determined and was set to 400MHz")),P(o,"temperature",O(c)),P(o,"phc0",g&&Number(g[0])),P(s,"rfl",d&&Number(O(d))),P(s,"rfp",p&&Number(O(p))),P(s,"sw",y&&Number(O(y)));for(let h in s){let b=s[h];Array.isArray(b)&&b.length===1&&(s[h]=b[0])}if(!("baseFrequency"in o)&&"originFrequency"in o){let h=Number.parseFloat(o.originFrequency);if(["sw","rfl","rfp"].every(b=>b in s)){let{sw:b=1,rfl:N=1,rfp:S=1}=Xn(s,["sw","rfl","rfp"]);P(o,"baseFrequency",h-(b/2-N+S)/1e6)}else P(o,"baseFrequency",h)}let{baseFrequency:f,originFrequency:F}=o;P(o,"frequencyOffset",(F-f)*1e6),P(o,"spectralWidth",y&&Number(y[0])/o.baseFrequency);for(let h in o)o[h].length===1&&(o[h]=o[h][0]);return n.tn&&(o.nucleus=n.tn.map(dr.normalizeNucleus)),o.dimension=1,o.isFid=!t.status.isSpectrum,{info:o,meta:{...s,...yr(t),...n}}}function O(e){return e&&(Array.isArray(e)?e[0]:e)}function Xn(e,r){let t={};for(let i of r){let n=e[i];n&&typeof n=="number"&&(t[i]=n)}return t}function yr(e){let r={};for(let t of Object.keys(e)){let i=e[t];typeof i=="object"&&i!==null&&i.constructor&&i.constructor!==Object?r[t]=yr(i):r[t]=i}return r}function hr(e){let r={},t=new Set(e.files.map(i=>i.relativePath));for(let i of e){let n=i.name.toLowerCase();if(n.match(/^(?:fid|procpar|text|log)$/)){if(n.match(/^(?:fid|text|log)$/)){let l=i.relativePath.replace(/(?:fid|text|log)$/,"procpar");if(!t.has(l))continue}let o=i.relativePath.split("/"),s=o.slice(0,-1).join("/");r[s]||(r[s]={name:o.at(-2),files:[]}),r[s].files.push(i)}}return Object.values(r)}async function Sr(e,r={}){let{keepSource:t,logger:i}=r,n=hr(e);i&&i.debug(`Found ${Object.keys(n).length} varian experiments`);let o=[],s={spectra:[],molecules:[]};for(let a of n){let{name:m,files:u}=a,c=new Fr.FileCollection(u),g=(0,Dr.convert1D)(c).then(y=>{let{info:d,meta:p}=gr(y),f=y.fid.data[0],F=(0,Pr.isAnyArray)(f.im),h={data:{...f,x:y.x},meta:p,info:{isComplex:F,name:m,...d},display:{name:m}};if(d.isFid&&F){let{im:b}=h.data;(0,Nr.xMultiply)(b,-1,{output:b})}u&&t&&(h.sourceSelector={files:u.map(b=>b.relativePath)}),s.spectra.push(h)});o.push(g)}let l=await Promise.allSettled(o);for(let a=0;a<l.length;a++){let m=l[a];if(m.status==="rejected"&&m.reason){let u=n[a].name;i?.warn(`Varian data: ${u}, fails with: ${m.reason}`)}}return s.spectra.length>0&&i?.info(`Loaded ${s.spectra.length} spectra from Varian files`),(0,br.formatSpectra)(s)}var G=class{id="@zakodium/nmrium-core-plugins#VarianLoaderPlugin";version=1;migrations=[];onReadProcess;constructor(){this.onReadProcess={onFiles:this.onReadProcessFiles}}onReadProcessFiles=(r,t)=>{let{keepSource:i,logger:n}=t??{};return Sr(r,{keepSource:i,logger:n})}};function De(){return new G}function Mr(e,r=[]){return[Fe(e),De(),ue(),de(),he(),Pe(),Ne(),ye(),te()].concat(r)}function Ar(){let e=new Rr.NMRiumCore;return e.registerPlugins(Mr(e)),e}var Je=require("@zakodium/nmrium-core"),Cr=require("convert-to-jcamp");function xr(e,r){return e.filters.find(t=>t.name===r)}function Or(e,r={}){let{info:t,meta:i,data:n}=e,{onlyReal:o=!1}=r,{isFid:s,spectralWidth:l}=t,a=(0,Je.getOneIfArray)(t.baseFrequency||t.originFrequency),{x:m,re:u,im:c}=n,g=new Float64Array(u),y=!o&&c?new Float64Array(c):void 0,d={};K(d,"SW",l),K(d,"BF1",a);let p=xr(e,"fft")?.enabled,f={originFrequency:t.originFrequency,dataType:!t.isFid||p?"NMR SPECTRUM":"NMR FID",dataClass:!o&&c?"NTUPLES":"XYDATA"};if(s){let b=e.filters.find(N=>N.name==="digitalFilter");if(b&&!p){let{value:{digitalFilterValue:N},enabled:S}=b;if(S){let D=Math.floor(N);g.set(u.slice(u.length-D)),g.set(u.slice(0,u.length-D),D),c&&y&&(y.set(c.slice(c.length-D)),y.set(c.slice(0,c.length-D),D))}}K(f,"decim",t.decim),K(f,"dspfvs",t.dspfvs),K(f,"digitalFilter",t.digitalFilter)}let F={xyEncoding:"DIFDUP",info:{...t,...f},meta:{...i,...d}},h={x:{data:m,label:t.isFid?"TIME":"FREQUENCY",units:t.isFid?"second":"HZ",symbol:"X"},r:{data:g,label:`${t.isFid?"FID":"SPECTRUM"}/REAL`,units:"ARBITRARY UNITS",symbol:"R"}};return y&&(h.i={data:y,label:`${t.isFid?"FID":"SPECTRUM"}/IMAG`,units:"ARBITRARY UNITS",symbol:"I"}),(0,Cr.from1DNMRVariables)(h,F)}function K(e,r,t){t!==void 0&&(e[r]=(0,Je.getOneIfArray)(t))}
|
|
@@ -10,6 +10,17 @@ import type { ParsingOptions } from '@zakodium/nmrium-core';
|
|
|
10
10
|
import type { Spectrum1D } from '@zakodium/nmrium-core';
|
|
11
11
|
import type { StateMolecule } from '@zakodium/nmrium-core';
|
|
12
12
|
|
|
13
|
+
export declare function autoPostProcessing(): NMRiumPlugin;
|
|
14
|
+
|
|
15
|
+
export declare class AutoPostProcessingPlugin implements NMRiumPlugin {
|
|
16
|
+
id: string;
|
|
17
|
+
version: number;
|
|
18
|
+
migrations: NMRiumPluginMigration[];
|
|
19
|
+
onReadProcess: NMRiumPluginOnReadProcess;
|
|
20
|
+
constructor();
|
|
21
|
+
private onPostProcessing;
|
|
22
|
+
}
|
|
23
|
+
|
|
13
24
|
export declare function brukerLoader(): NMRiumPlugin;
|
|
14
25
|
|
|
15
26
|
export declare class BrukerLoaderPlugin implements NMRiumPlugin {
|
|
@@ -41,40 +52,40 @@ declare function init(): NMRiumCore;
|
|
|
41
52
|
export default init;
|
|
42
53
|
export { init }
|
|
43
54
|
|
|
44
|
-
declare interface
|
|
55
|
+
declare interface JCAMPDXConverterOptions {
|
|
45
56
|
keepRecordsRegExp?: RegExp;
|
|
46
57
|
profiling?: boolean;
|
|
47
58
|
}
|
|
48
59
|
|
|
49
|
-
export declare function
|
|
60
|
+
export declare function jcampDXLoader(): NMRiumPlugin;
|
|
50
61
|
|
|
51
|
-
export declare class
|
|
62
|
+
export declare class JCAMPDXLoaderPlugin implements NMRiumPlugin {
|
|
52
63
|
id: string;
|
|
53
64
|
version: number;
|
|
54
65
|
migrations: NMRiumPluginMigration[];
|
|
55
66
|
onReadProcess: NMRiumPluginOnReadProcess;
|
|
56
67
|
constructor();
|
|
57
68
|
private onReadProcessFile;
|
|
58
|
-
private
|
|
69
|
+
private getJCAMPDXSelector;
|
|
59
70
|
}
|
|
60
71
|
|
|
61
|
-
declare interface
|
|
72
|
+
declare interface JCAMPDXParsingOptions {
|
|
62
73
|
name?: string;
|
|
63
|
-
converter?:
|
|
64
|
-
selector?:
|
|
74
|
+
converter?: JCAMPDXConverterOptions;
|
|
75
|
+
selector?: JCAMPDXSelectorOptions;
|
|
65
76
|
keepSource?: boolean;
|
|
66
77
|
logger?: Logger;
|
|
67
78
|
}
|
|
68
79
|
|
|
69
|
-
declare interface
|
|
80
|
+
declare interface JCAMPDXSelectorOptions {
|
|
70
81
|
index?: number;
|
|
71
82
|
tree?: FilterTreeByDataTypeDataClass[];
|
|
72
83
|
dataSelection?: DataSelectionOption;
|
|
73
84
|
}
|
|
74
85
|
|
|
75
|
-
export declare function
|
|
86
|
+
export declare function jeolLoader(): NMRiumPlugin;
|
|
76
87
|
|
|
77
|
-
export declare class
|
|
88
|
+
export declare class JEOLLoaderPlugin implements NMRiumPlugin {
|
|
78
89
|
id: string;
|
|
79
90
|
version: number;
|
|
80
91
|
migrations: NMRiumPluginMigration[];
|
|
@@ -94,9 +105,9 @@ export declare class MolfileLoaderPlugin implements NMRiumPlugin {
|
|
|
94
105
|
private onReadProcessFile;
|
|
95
106
|
}
|
|
96
107
|
|
|
97
|
-
export declare function
|
|
108
|
+
export declare function nmreDATALoader(core: NMRiumCore): NMRiumPlugin;
|
|
98
109
|
|
|
99
|
-
export declare class
|
|
110
|
+
export declare class NMReDATALoaderPlugin implements NMRiumPlugin {
|
|
100
111
|
private core;
|
|
101
112
|
id: string;
|
|
102
113
|
version: number;
|
|
@@ -110,7 +121,7 @@ declare interface ParseSDFOptions {
|
|
|
110
121
|
mixedEOL?: boolean;
|
|
111
122
|
}
|
|
112
123
|
|
|
113
|
-
export declare function
|
|
124
|
+
export declare function processJCAMPDX(text: string, options?: JCAMPDXParsingOptions): NmriumData;
|
|
114
125
|
|
|
115
126
|
export declare function readSDF(text: string, options?: ParseSDFOptions): StateMolecule[];
|
|
116
127
|
|
|
@@ -138,7 +149,7 @@ export declare class SDFLoaderPlugin implements NMRiumPlugin {
|
|
|
138
149
|
|
|
139
150
|
export declare function smilesLoader(): NMRiumPlugin;
|
|
140
151
|
|
|
141
|
-
export declare class
|
|
152
|
+
export declare class SMILESLoaderPlugin implements NMRiumPlugin {
|
|
142
153
|
id: string;
|
|
143
154
|
version: number;
|
|
144
155
|
migrations: NMRiumPluginMigration[];
|
|
@@ -147,7 +158,7 @@ export declare class SmilesLoaderPlugin implements NMRiumPlugin {
|
|
|
147
158
|
private onReadProcessFile;
|
|
148
159
|
}
|
|
149
160
|
|
|
150
|
-
export declare function
|
|
161
|
+
export declare function spectrum1DToJCAMPDX(spectrum: Spectrum1D, options?: {
|
|
151
162
|
onlyReal?: boolean;
|
|
152
163
|
}): string;
|
|
153
164
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import{NMRiumCore as wn}from"@zakodium/nmrium-core";import{formatSpectra as Kt}from"@zakodium/nmrium-core";import{convertOneExperiment as Zt,groupByExperiments as Qt}from"brukerconverter";function U(e){let r=[];for(let t of e){if(!t)continue;let{groups:{value:i,unit:n}={}}=t.trim().match(/[$$]*\s*(?<value>[\d.]+)\s*(?<unit>[a-zA-Z]+)/)||{};r.push(jt(i,n))}return r}function jt(e,r){switch(r.toLowerCase()){case"s":return Number.parseFloat(e);case"ms":return Number.parseFloat(e)/1e3;case"m":case"min":return Number.parseFloat(e)*60;default:return Number.NaN}}import{isAnyArray as Oe}from"is-any-array";function I(e){if(Bt(e))return zt(e)?e.map(Ae):Ae(e);if(typeof e=="object"&&e!==null){let r={};for(let t in e)r[t]=I(e[t]);return r}return e}function Bt(e){return Oe(e)}function Ae(e){return Float64Array.from(e)}function zt(e){return Oe(e[0])}import{getOneIfArray as j}from"@zakodium/nmrium-core";import{getGyromagneticRatio as Vt}from"gyromagnetic-ratio";import{isAnyArray as ce}from"is-any-array";import{getFrequency as _t}from"nmr-processing";import{isAnyArray as T}from"is-any-array";function W(e){return typeof e=="number"}function J(e){let{phc0:r,phc1:t}=e;return!T(r)&&!W(r)||!T(t)&&!W(t)||T(r)&&!W(r[0])||T(t)&&!W(t[0])?{}:(T(t)?t[0]*=-1:t*=-1,T(r)?r[0]*=-1:r*=-1,{phc0:r,phc1:t})}function Ie(e,r,t){if(e>0)return Number(e);if(r>14||r===0)return 0;if(Ce[r]){let i=Ce[r];if(!i[t])throw new Error(`decim ${t} not in lookup table for dspfvs ${r}`);return i[t]}else throw new Error(`dspfvs ${r} not in lookup table`)}var Ce={10:{2:44.75,3:33.5,4:66.625,6:59.08333333333333,8:68.5625,12:60.375,16:69.53125,24:61.02083333333333,32:70.015625,48:61.34375,64:70.2578125,96:61.50520833333333,128:70.37890625,192:61.5859375,256:70.439453125,384:61.62630208333333,512:70.4697265625,768:61.646484375,1024:70.48486328125,1536:61.65657552083333,2048:70.492431640625},11:{2:46,3:36.5,4:48,6:50.16666666666667,8:53.25,12:69.5,16:72.25,24:70.16666666666667,32:72.75,48:70.5,64:73,96:70.66666666666667,128:72.5,192:71.33333333333333,256:72.25,384:71.66666666666667,512:72.125,768:71.83333333333333,1024:72.0625,1536:71.91666666666667,2048:72.03125},12:{2:46,3:36.5,4:48,6:50.16666666666667,8:53.25,12:69.5,16:71.625,24:70.16666666666667,32:72.125,48:70.5,64:72.375,96:70.66666666666666,128:72.5,192:71.333333333,256:72.25,384:71.66666666666667,512:72.125,768:71.83333333333333,1024:72.0625,1536:71.91666666666667,2048:72.03125},13:{2:2.75,3:2.833333333333333,4:2.875,6:2.916666666666667,8:2.9375,12:2.958333333333333,16:2.96875,24:2.979166666666667,32:2.984375,48:2.989583333333333,64:2.9921875,96:2.994791666666667}};import{normalizeNucleus as Ut}from"nmr-processing";function E(e,r=","){if(e&&typeof e=="string")return e.split(r)}function V(e,r,t){let i=[];if(e[`${t}AXNUC`]&&(i=e[`${t}AXNUC`],Array.isArray(i)||(i=[i]),i=O(i)),i.length===0&&e[`${t}NUC1`]&&(i=e[`${t}NUC1`],Array.isArray(i)||(i=[i]),i=O(i)),i.length===0&&e[".NUCLEUS"]){let n=E(e[".NUCLEUS"]);if(e[`${t}SYMBOL`]){let o=e[`${t}SYMBOL`].split(","),s=o.findIndex(a=>a.includes("2")),l=o.findIndex(a=>a.includes("1"));s!==-1&&l!==-1&&n?i=O([n[s],n[l]]):i=O(n).reverse()}else i=O(n)}return i.length===0&&e[".OBSERVENUCLEUS"]&&(i=O([e[".OBSERVENUCLEUS"]])),i.length===0&&r.experiment&&(i=O(Ee(r.experiment[0]))),Wt(e)&&(i=[e["2D_X_NUCLEUS"].replaceAll(/[^A-Za-z0-9]/g,""),e["2D_Y_NUCLEUS"].replaceAll(/[^A-Za-z0-9]/g,"")]),r.experiment&&(r.experiment[0].match("jres")||r.experiment[0].match("dosy"))&&(i=Ee(r.experiment[0])),i.map(Ut)}function Wt(e){return e["2D_X_NUCLEUS"]&&!e["2D_X_NUCLEUS"].includes("off")&&e["2D_Y_NUCLEUS"]&&!e["2D_Y_NUCLEUS"].includes("off")}function Ee(e){return typeof e!="string"?[]:(e=e.toLowerCase(),e.includes("jres")?["1H","Hz"]:e.includes("dosy")?["1H","D"]:e.includes("hmbc")||e.includes("hsqc")?["1H","13C"]:e.includes("cosy")||e.includes("tocsy")?["1H","1H"]:[])}function O(e){if(!e)return[];let r=e.map(i=>String(i).replaceAll(/[^A-Za-z0-9]/g,"").replace("NA","").replace("off","")),t=0;for(let i of r)i||t++;return t===0?r:[]}import{getOneIfArray as Jt}from"@zakodium/nmrium-core";function _(e={},r={},t={}){e===null&&(e={}),typeof e=="string"&&(e={pulseSequence:e});let i=Array.isArray(e.pulseSequence)?e.pulseSequence[0]:e.pulseSequence||"";if(typeof i!="string")return e.dimension?`${e.dimension}d`:"";if(i=i.toLowerCase(),i.includes("zg")||i.includes("single_pulse_dec")||i.includes("udeft"))return"1d";if(i.includes("hsqct")||i.includes("invi")&&(i.includes("ml")||i.includes("di")))return"hsqctocsy";if(i.includes("hsqc")||i.includes("invi"))return"hsqc";if(i.includes("hmbc")||i.includes("inv4")&&i.includes("lp"))return"hmbc";if(i.includes("hmqc"))return"hmqc";if(i.includes("cosy"))return"cosy";if(i.includes("jres"))return"jres";if(i.includes("dosy"))return"dosy";if(i.includes("tocsy")||i.includes("mlev")||i.includes("dipsi"))return"tocsy";if(i.includes("noesy"))return"noesy";if(i.includes("roesy"))return"roesy";if(i.includes("dept"))return"dept";if(i.includes("jmod")||i.includes("apt"))return"aptjmod";if(i.includes("inad"))return"inadequate";if(i.includes("adeq"))return"adequate";let{prefix:n=""}=t,o=(Jt(r[`${n}SPECTYP`])||"").replace(/^<(.*)>$/,"$1").toLowerCase();return o.length>0&&o!=="undefined"?o:e.dimension?`${e.dimension}d`:""}function N(e,r,t,i=!1){t===void 0||r in e&&!i||(Array.isArray(t)?e[r]=t.map(Te):e[r]=[Te(t)])}function Te(e){return typeof e=="string"&&(e.startsWith("<")&&e.endsWith(">")&&(e=e.slice(1,-1)),e=e.replace(/\$.*/,"").trim()),e}function X(e,r={}){let{prefix:t="",logger:i}=r,n={dimension:0,nucleus:[],isFid:!1,isFt:!1},o=JSON.stringify(e),s=/\r\n/.exec(o)?`\r
|
|
1
|
+
import{NMRiumCore as wn}from"@zakodium/nmrium-core";import{Filters1D as _t,Filters2D as Vt}from"nmr-processing";import{getOneIfArray as jt}from"@zakodium/nmrium-core";function U(e={},r={},t={}){e===null&&(e={}),typeof e=="string"&&(e={pulseSequence:e});let i=Array.isArray(e.pulseSequence)?e.pulseSequence[0]:e.pulseSequence||"";if(typeof i!="string")return e.dimension?`${e.dimension}d`:"";if(i=i.toLowerCase(),i.includes("zg")||i.includes("single_pulse_dec")||i.includes("udeft"))return"1d";if(i.includes("hsqct")||i.includes("invi")&&(i.includes("ml")||i.includes("di")))return"hsqctocsy";if(i.includes("hsqc")||i.includes("invi"))return"hsqc";if(i.includes("hmbc")||i.includes("inv4")&&i.includes("lp"))return"hmbc";if(i.includes("hmqc"))return"hmqc";if(i.includes("cosy"))return"cosy";if(i.includes("jres"))return"jres";if(i.includes("dosy"))return"dosy";if(i.includes("tocsy")||i.includes("mlev")||i.includes("dipsi"))return"tocsy";if(i.includes("noesy"))return"noesy";if(i.includes("roesy"))return"roesy";if(i.includes("dept"))return"dept";if(i.includes("jmod")||i.includes("apt"))return"aptjmod";if(i.includes("inad"))return"inadequate";if(i.includes("adeq"))return"adequate";let{prefix:n=""}=t,o=(jt(r[`${n}SPECTYP`])||"").replace(/^<(.*)>$/,"$1").toLowerCase();return o.length>0&&o!=="undefined"?o:e.dimension?`${e.dimension}d`:""}import{getOneIfArray as xe}from"@zakodium/nmrium-core";var zt=["no","exponential","modifiedGaussian","sine","qsine","trap","user","sinc","qsinc","traf","trafs"];function Bt(e){return e in Ce}function ae(e,r){let{prefix:t="",index:i=0}=r,n=xe(e[`${t}WDW`],i),o=zt[n?Number(n):0],s={};if(!Bt(o))return s;let l=Ce[o];if(l){let{kind:a,parameters:m}=l,u={};for(let c in m){let g=m[c],{source:y,processor:d}=g;if(y){let p=xe(e[`${t}${y}`],i);if(!p)continue;let f=Number(p);u[c]=d?d(f):f}else g.value!==void 0&&(u[c]=g.value)}s[a]={apply:!0,options:u}}return s}var Ce={exponential:{kind:"exponential",parameters:{lineBroadening:{source:"LB"}}},modifiedGaussian:{kind:"gaussian",parameters:{lineBroadening:{source:"LB"},lineBroadeningCenter:{source:"GB"}}},sine:{kind:"sineBell",parameters:{offset:{source:"SSB",processor:e=>1/e},exponent:{value:1}}},qsine:{kind:"sineSquare",parameters:{offset:{source:"SSB",processor:e=>1/e}}},traf:{kind:"traf",parameters:{lineBroadening:{source:"LB"}}}};var Oe={sineBell:Te({offset:0})},Ie={cosy:{...Oe},hmbc:{...Oe},hsqc:{sineBell:Te({offset:.5})}},Ut={...Ie};function ce(e="",r=1){let t=Wt(e),i={},n=r===1?Ie[t||""]:Ut[t||""];return n&&(i=structuredClone(n)),i}function Te(e){return{apply:!0,options:e}}function Wt(e){let t=e.toLowerCase().match(/cosy|hsqc|hmbc/);return t?t[0]:null}function Ee(e,r={}){let{prefix:t="",experiment:i=U(e)}=r;return e[`${t}WDW`]?{f2:ae(e,{...r,index:0}),f1:ae(e,{...r,index:1})}:{f2:ce(i,1),f1:ce(i,2)}}import{Filters1D as Xt}from"nmr-processing";var me=["digitalFilter","backwardLinearPrediction","forwardLinearPrediction","apodization","zeroFilling","fft",["shiftX","phaseCorrection","baselineCorrection"]],E={};for(let e=0;e<me.length;e++){let r=me[e];for(let t of Array.isArray(r)?r:[r])E[t]=e}for(let e of Object.values(Xt))e.name in E||(E[e.name]=me.length);import{Filters2D as Jt}from"nmr-processing";var le=["digitalFilter2D","blpDimension1","flpDimension1","apodizationDimension1","zeroFillingDimension1","fftDimension1","blpDimension2","flpDimension2","nusDimension2","apodizationDimension2","zeroFillingDimension2","fftDimension2","phaseCorrectionTwoDimensions",["shift2DX","shift2DY","symmetrizeCosyLike"]],L={};for(let e=0;e<le.length;e++){let r=le[e];for(let t of Array.isArray(r)?r:[r])L[t]=e}for(let e of Object.values(Jt))e.name in L||(L[e.name]=le.length);var Ht=new Set(["backwardLinearPrediction","forwardLinearPrediction","digitalFilter2D","phaseCorrectionTwoDimensions","blpDimension1","flpDimension1","apodizationDimension1","apodizationDimension2","zeroFillingDimension1","fftDimension1","blpDimension2","flpDimension2","zeroFillingDimension2","fftDimension2","nusDimension2","symmetrizeCosyLike"]);function Yt(e,r){let{filter:t,experimentalFeatures:i=!1}=r,{name:n}=t;({..._t,...Vt})[n]&&(e.some(s=>s.name===n)||(i||!Ht.has(n))&&e.push({...t,enabled:!0}))}function Le(e,r={}){let{data:t}=e;if(!t)return e;let{autoProcessing:i,experimentalFeatures:n}=r,o=(l,a)=>Yt(l,{...a,experimentalFeatures:n}),{spectra:s}=t;for(let l of s){let{data:a,info:m,meta:u,filters:c}=l,{dimension:g,isFid:y}=m;if(y){if(g===1){let d=a.re.length,{tdOff:p,digitalFilter:f}=m;if(f&&f>0&&o(c,{filter:{name:"digitalFilter",value:{digitalFilterValue:f}}}),!i)continue;p&&Math.abs(p)>0&&o(c,{filter:{name:"backwardLinearPrediction",value:{nbInputs:d/2}}}),o(c,{filter:{name:"apodization",value:{exponential:{apply:!0,options:{lineBroadening:1}}}}}),o(c,{filter:{name:"zeroFilling",value:{nbPoints:2*d}}}),o(c,{filter:{name:"fft",value:{}}}),o(c,{filter:{name:"phaseCorrection",value:Gt(m)}}),c.sort((F,h)=>E[F.name]-E[h.name])}else if(g===2){if(!i||!n)continue;let d=a.re.z.length,p=a.re.z[0].length,{tdOff:f,experiment:F=""}=m,h=m.spectrumSize;Array.isArray(h)&&h.length>1?(h[0]<=p&&(h[0]=p*2),h[0]<=d&&(h[0]=d*2)):h=[p*2,2*d];let b=F.toLowerCase().includes("cosy");f&&Math.abs(f[0])>0&&o(c,{filter:{name:"blpDimension1",value:{nbInputs:p/2}}});let N=Ee(u,{experiment:F});o(c,{filter:{name:"apodizationDimension1",value:N.f2}}),o(c,{filter:{name:"zeroFillingDimension1",value:{nbPoints:h[0]}}}),o(c,{filter:{name:"fftDimension1",value:{}}}),u&&"nuslist"in u&&o(c,{filter:{name:"nusDimension2",value:{}}}),o(c,{filter:{name:"apodizationDimension2",value:N.f1}}),o(c,{filter:{name:"zeroFillingDimension2",value:{nbPoints:h[b?0:1]}}}),b?o(c,{filter:{name:"symmetrizeCosyLike",value:{}}}):o(c,{filter:{name:"phaseCorrectionTwoDimensions",value:{}}}),o(c,{filter:{name:"fftDimension2",value:{}}}),c.sort((S,D)=>L[S.name]-L[D.name])}}}}function Gt(e){let{phc0:r=0,phc1:t=0}=e;return ke([r,t])?{}:{ph0:r,ph1:t}}function ke(e){return Array.isArray(e)?e.every(r=>!r&&r===0):ke([e])}var W=class{id="@zakodium/nmrium-core-plugins#AutoPostProcessingPlugin";version=1;migrations=[];onReadProcess;constructor(){this.onReadProcess={onProcessing:this.onPostProcessing.bind(this)}}onPostProcessing(r,t){Le(r,t)}};function ue(){return new W}import{formatSpectra as cr}from"@zakodium/nmrium-core";import{convertOneExperiment as mr,groupByExperiments as lr}from"brukerconverter";function X(e){let r=[];for(let t of e){if(!t)continue;let{groups:{value:i,unit:n}={}}=t.trim().match(/[$$]*\s*(?<value>[\d.]+)\s*(?<unit>[a-zA-Z]+)/)||{};r.push(Kt(i,n))}return r}function Kt(e,r){switch(r.toLowerCase()){case"s":return Number.parseFloat(e);case"ms":return Number.parseFloat(e)/1e3;case"m":case"min":return Number.parseFloat(e)*60;default:return Number.NaN}}import{isAnyArray as ve}from"is-any-array";function I(e){if(Zt(e))return Qt(e)?e.map(we):we(e);if(typeof e=="object"&&e!==null){let r={};for(let t in e)r[t]=I(e[t]);return r}return e}function Zt(e){return ve(e)}function we(e){return Float64Array.from(e)}function Qt(e){return ve(e[0])}import{getOneIfArray as j}from"@zakodium/nmrium-core";import{getGyromagneticRatio as rr}from"gyromagnetic-ratio";import{isAnyArray as fe}from"is-any-array";import{getFrequency as nr}from"nmr-processing";import{isAnyArray as k}from"is-any-array";function J(e){return typeof e=="number"}function _(e){let{phc0:r,phc1:t}=e;return!k(r)&&!J(r)||!k(t)&&!J(t)||k(r)&&!J(r[0])||k(t)&&!J(t[0])?{}:(k(t)?t[0]*=-1:t*=-1,k(r)?r[0]*=-1:r*=-1,{phc0:r,phc1:t})}function $e(e,r,t){if(e>0)return Number(e);if(r>14||r===0)return 0;if(qe[r]){let i=qe[r];if(!i[t])throw new Error(`decim ${t} not in lookup table for dspfvs ${r}`);return i[t]}else throw new Error(`dspfvs ${r} not in lookup table`)}var qe={10:{2:44.75,3:33.5,4:66.625,6:59.08333333333333,8:68.5625,12:60.375,16:69.53125,24:61.02083333333333,32:70.015625,48:61.34375,64:70.2578125,96:61.50520833333333,128:70.37890625,192:61.5859375,256:70.439453125,384:61.62630208333333,512:70.4697265625,768:61.646484375,1024:70.48486328125,1536:61.65657552083333,2048:70.492431640625},11:{2:46,3:36.5,4:48,6:50.16666666666667,8:53.25,12:69.5,16:72.25,24:70.16666666666667,32:72.75,48:70.5,64:73,96:70.66666666666667,128:72.5,192:71.33333333333333,256:72.25,384:71.66666666666667,512:72.125,768:71.83333333333333,1024:72.0625,1536:71.91666666666667,2048:72.03125},12:{2:46,3:36.5,4:48,6:50.16666666666667,8:53.25,12:69.5,16:71.625,24:70.16666666666667,32:72.125,48:70.5,64:72.375,96:70.66666666666666,128:72.5,192:71.333333333,256:72.25,384:71.66666666666667,512:72.125,768:71.83333333333333,1024:72.0625,1536:71.91666666666667,2048:72.03125},13:{2:2.75,3:2.833333333333333,4:2.875,6:2.916666666666667,8:2.9375,12:2.958333333333333,16:2.96875,24:2.979166666666667,32:2.984375,48:2.989583333333333,64:2.9921875,96:2.994791666666667}};import{normalizeNucleus as er}from"nmr-processing";function T(e,r=","){if(e&&typeof e=="string")return e.split(r)}function V(e,r,t){let i=[];if(e[`${t}AXNUC`]&&(i=e[`${t}AXNUC`],Array.isArray(i)||(i=[i]),i=C(i)),i.length===0&&e[`${t}NUC1`]&&(i=e[`${t}NUC1`],Array.isArray(i)||(i=[i]),i=C(i)),i.length===0&&e[".NUCLEUS"]){let n=T(e[".NUCLEUS"]);if(e[`${t}SYMBOL`]){let o=e[`${t}SYMBOL`].split(","),s=o.findIndex(a=>a.includes("2")),l=o.findIndex(a=>a.includes("1"));s!==-1&&l!==-1&&n?i=C([n[s],n[l]]):i=C(n).reverse()}else i=C(n)}return i.length===0&&e[".OBSERVENUCLEUS"]&&(i=C([e[".OBSERVENUCLEUS"]])),i.length===0&&r.experiment&&(i=C(je(r.experiment[0]))),tr(e)&&(i=[e["2D_X_NUCLEUS"].replaceAll(/[^A-Za-z0-9]/g,""),e["2D_Y_NUCLEUS"].replaceAll(/[^A-Za-z0-9]/g,"")]),r.experiment&&(r.experiment[0].match("jres")||r.experiment[0].match("dosy"))&&(i=je(r.experiment[0])),i.map(er)}function tr(e){return e["2D_X_NUCLEUS"]&&!e["2D_X_NUCLEUS"].includes("off")&&e["2D_Y_NUCLEUS"]&&!e["2D_Y_NUCLEUS"].includes("off")}function je(e){return typeof e!="string"?[]:(e=e.toLowerCase(),e.includes("jres")?["1H","Hz"]:e.includes("dosy")?["1H","D"]:e.includes("hmbc")||e.includes("hsqc")?["1H","13C"]:e.includes("cosy")||e.includes("tocsy")?["1H","1H"]:[])}function C(e){if(!e)return[];let r=e.map(i=>String(i).replaceAll(/[^A-Za-z0-9]/g,"").replace("NA","").replace("off","")),t=0;for(let i of r)i||t++;return t===0?r:[]}function P(e,r,t,i=!1){t===void 0||r in e&&!i||(Array.isArray(t)?e[r]=t.map(ze):e[r]=[ze(t)])}function ze(e){return typeof e=="string"&&(e.startsWith("<")&&e.endsWith(">")&&(e=e.slice(1,-1)),e=e.replace(/\$.*/,"").trim()),e}function Y(e,r={}){let{prefix:t="",logger:i}=r,n={dimension:0,nucleus:[],isFid:!1,isFt:!1},o=JSON.stringify(e),s=/\r\n/.exec(o)?`\r
|
|
2
2
|
`:`
|
|
3
|
-
`,{JCAMPDX:l="",ORIGIN:a=""}=e,m=String(l).toLowerCase()+String(a).toLowerCase();"SPECTROMETER/DATASYSTEM"in e&&(m=e["SPECTROMETER/DATASYSTEM"]);let u=(d=[])=>{for(let p of d)if(!(p in n))return!1;return!0};(m.includes("mestre")||m.includes("nova"))&&(m="mnova"),n.creator=m,e.LONGDATE&&
|
|
4
|
-
`}=t;
|
|
5
|
-
because it didn't match the import filters`);continue}s.push(u)}let l=[],a=s.some(ve),m=s.some(we);for(let u of s){if(o!=="both"&&u.dataType!=="LINK"){if(ve(u)&&(o==="ft"||o==="preferFT"&&m)){i?.warn(`Skipping raw data ${t?`in ${t}`:"in the JCAMP-DX"} because it didn't match the import filters`);continue}if(we(u)&&(o==="fid"||o==="preferFID"&&a)){i?.warn(`Skipping FFT data ${t?`in ${t}`:"in the JCAMP-DX"} because it didn't match the import filters`);continue}}l.push(u)}return l}function we(e){return e.dataType?.toUpperCase().includes("SPECTRUM")&&e.dataClass&&!e.dataClass.toUpperCase().includes("PEAK")}function ve(e){return e.dataType?.toUpperCase().includes("FID")}function $e(e,r={}){let{logger:t,name:i=""}=r;for(let n of e){if(n.dataType==="LINK"&&$e(n.children,r))return!0;let{dataType:o=""}=n,s=o.toLowerCase();if(s.length>0){if(s.includes("spectrum")&&!s.includes("nmr"))return t?.warn(`File ${i} was ignored because it is a ${o}`),!1;if(s.includes("nmr"))return!0}}return!1}import{generateID as ze}from"@zakodium/nmrium-core";import{parseJcampCS as pr}from"jcampconverter";import*as fr from"openchemlib/full";import{isMolfileNotEmpty as sr}from"nmr-processing";import{Molecule as ar}from"openchemlib/full";async function je(e,r={}){let t=await e.text(),i=L(t),n={molecules:i,spectra:[]};return i.length===0&&r.logger?.debug(`${e.name} is an empty molfile`),n}function L(e){let r=[];if(!sr(e))return[];let i=ar.fromMolfile(e).toMolfile();return r.push({molfile:i}),r}import{isMolfileNotEmpty as mr}from"nmr-processing";import*as lr from"openchemlib/full";import{getDiastereotopicAtomIDsFromMolfile as ur}from"openchemlib-utils";var cr=new Set(["ndnmrspectrum","ndnmrfid","nmrspectrum","nmrfid"]);function K(e){let{dataType:r="",dataClass:t=""}=e,i=r.replaceAll(/\s/g,"").toLowerCase(),n=t.replaceAll(/\s/g,"").toLowerCase();return cr.has(i)&&n!=="peaktable"}function Be(e,r,t={}){let{spectra:i,info:n,meta:o}=e,s=i[0].data,l=[],a={x:"delta",y:"intensity",w:"width",m:"multiplicity",a:"atom"},{logger:m,name:u,spectraData:c}=t,{CROSSREFERENCE:g}=n,y=typeof g!="string"?g:g.split(/\r?\n/).map(S=>S.trim()).filter(Boolean),d=y.find(S=>S?.toLowerCase().includes("structure"));if(d===void 0)return m&&m.warn(`There is not a structure reference for ${u} file, assignment object could not be completed`),null;let p=Number.parseInt(d?.toLowerCase().replace(/_/,"").replace(/structure:\s*blockid\s*=\s*(?<blockId>.*)/,"$<blockId>"),10);if(Number.isNaN(p)||p<1)return m&&m.warn(`Structure block_id not found for ${u} file, assignment object could not be completed`),null;let F=c?.molecules?.find(S=>S.blockId===p)?.molfile??"";if(F===""){let S=r.find(x=>x.info.BLOCKID===p),{MOLFILE:D=""}=S?.meta||{};F=D}if(!mr(F))return m&&m.warn(`Empty molfile for ${u} file with structure block_id = ${p}, assignment object could not be completed`),null;let h=ur(lr,F),b=V({...n,...o},{},"");for(let S=0;S<s.x.length;S++){let D={};for(let x in s){let A=s[x][S];typeof A=="string"&&A.startsWith("<")&&A.endsWith(">")&&(A=A.slice(1,-1)),D[a[x]]=A}if("atom"in D){let x=h.map[D.atom-1];b.includes("1H")?x.nbHydrogens>0?(D.diaIDs=x.hydrogenOCLIDs,D.nbHydrogens=x.nbHydrogens):(D.diaIDs=[x.oclID],D.nbHydrogens=x.nbHydrogens):(D.diaIDs=[x.oclID],D.nbHydrogens=1)}l.push(D)}let P={};for(let S of l){let{delta:D,diaIDs:x}=S,A=`${D}_${x.join("_")}`;if(P[A])P[A].atoms.push(S.atom);else{let{atom:Bn,...$t}=S;P[A]={...$t,atoms:[S.atom]}}}let R=[];for(let S of y)S.toLowerCase().includes("spectrum")&&R.push(Number(S.toLowerCase().replace(/_/,"").replace(/.*:\s*blockid=(?<blockId>.*)/,"$<blockId>")));if(R.length===0){for(let S of r)if(K(S)){let{BLOCKID:D}=S.info;R.push(Number(D))}R.length>1&&(R=[],m&&m.warn(`There is not a spectral cross-reference for the peak assignment in the ${u} file`))}return{moleculeBlockID:p,spectraBlockIDs:R,assignments:Object.values(P),molecule:h.molecule}}function Ue(e,r,t,i){for(let n of e){let{meta:o,dataClass:s="",dataType:l="",info:a}=n,m=Number.parseInt(String(a.BLOCKID),10);o.MOLFILE?hr(String(o.MOLFILE),r,m):n.jcampCS&&yr(n,r,m),dr(s,l)&&gr(r,n,e,i),K(n)&&t.push(n)}}function dr(e,r){return e?.toLowerCase().includes("assignments")&&r?.toLowerCase().includes("assignments")}function gr(e,r,t,i){let n=Be(r,t,{spectraData:e,logger:i.logger,name:i.name});if(e.assignmentsByBlocks||(e.assignmentsByBlocks={}),n){let{spectraBlockIDs:o}=n;for(let s of o)e.assignmentsByBlocks[s]=n}}function yr(e,r,t){r.molecules||(r.molecules=[]);let i=pr(e,{OCL:fr}),n=L(i?.molfile||"");n.length>0&&r.molecules.push({id:ze(),blockId:t,...n[0]})}function hr(e,r,t){r.molecules||(r.molecules=[]);let i=L(String(e));r.molecules.push({id:ze(),blockId:t,...i[0]})}import{generateID as tt}from"@zakodium/nmrium-core";import{matrixMinMaxZ as et,reimPhaseCorrection as Or}from"ml-spectra-processing";import{xyAutoRangesPicking as Cr}from"nmr-processing";function k(e){return e.slice(0,Math.max(0,e.lastIndexOf(".")))}function w(e){e.sort((r,t)=>r.from-t.from);for(let r=0;r<e.length-1;r++)e[r].to>e[r+1].from&&(e[r].to=Math.max(e[r+1].to,e[r].to),e[r].signals=e[r].signals.concat(e[r+1].signals),e[r].integration+=e[r+1].integration,e.splice(r+1,1),r--);return e}import{splitPatterns as Sr}from"nmr-processing";import{xMaxValue as br}from"ml-spectra-processing";function B(e){return e.trim().slice(1,-1).split(/,\s*/).map(r=>r.trim())}var Fr={I:"id",X:"from",Y:"to",Hs:"delta",An:"integration",H:"nbAtoms",C:"multiplicity",N:"assignment","(J)":"js"},We=["I","X","Y","Hs","An","H","C","N","(J)"];function Je(e){let r={headersFromParenthesis:[],headersFromComments:[],comments:[],data:[],multiplets:[]},t=e.split(/\r?\n/).filter(i=>i.trim()!=="");if(t.length===0)return r;if(t[0].startsWith("(")&&!t[0].match(/\d/)){let i=t.shift();r.headersFromParenthesis=B(i)}return r.comments=t.filter(i=>i.startsWith("$$")).map(i=>i.replace(/^\$\$\s*/,"")),r.headersFromComments=Pr(r.comments),r.data=t.filter(i=>!i.startsWith("$$")).map(B),r.multiplets=Nr(r),r}function Nr(e,r={}){let{logger:t}=r,i=e.data[0].map((a,m)=>m).filter(a=>e.data.every(m=>Number.isNaN(m[a])||Number.isNaN(Number(m[a]))));if(t?.trace(`Parsing JCAMP-DX assignment: stringColumnIndexes: ${i.join(",")}`),i.length===0)return t?.warn("Parsing JCAMP-DX assignment: No string columns found. Skipping parsing of assignment."),[];let n=i[0],o;if(e.headersFromParenthesis.length>0&&e.headersFromParenthesis[n]==="C")o=e.headersFromParenthesis;else if(e.headersFromComments.length>0&&e.headersFromComments[n]==="C")o=e.headersFromComments;else if(We[n]==="C")o=We;else return t?.warn("No header found for multiplicity. Skipping parsing of assignment."),[];return br(e.data.map(a=>a.length))>o.length&&t?.warn("Some assignments are containing more values than headers"),e.data.map(a=>{let m={};for(let u=0;u<o.length;u++){let c=o[u];m[Fr[c]||c]=a[u]}return m})}function Pr(e){return e.map(r=>r.split(":")[0].trim()).filter(r=>r.length>0)}function Ve(e,r={}){let{logger:t}=r,i=Je(e),n={multiplets:[],comments:i.comments};for(let o of i.multiplets){let{id:s,from:l,to:a,delta:m,integration:u,nbAtoms:c,multiplicity:g}=o,y={id:s,js:[],multiplicity:"",...Rr({from:l,to:a,delta:m,integration:u,nbAtoms:c})};if(typeof o.js=="string"){let d=o.js.split(/\s+/).map(Number.parseFloat),p=0,f=Sr(g).map(b=>{let P=(b?.multiplicity||1)-1;return p+=P,{value:b.value,multiplicity:b?.multiplicity,js:d.slice(p-P,p)}}),F=f.reduce((b,P)=>b+(P.multiplicity?P.multiplicity-1:0),0);d.length!==F&&t?.warn(`The number of j values (${d.length}) is not equal to the sum of the multiplicities - 1 (${F})`);let h=[];for(let b of f){if(b.js.every(P=>P===b.js[0])){h.push(b);continue}if(b.multiplicity!==b.js.length+1){h.push(b);continue}for(let P=0;P<b.multiplicity-1;P++)h.push({value:"d",multiplicity:2,js:[b.js[P]]})}h.sort((b,P)=>P.js[0]-b.js[0]),y.js=h.map(b=>({coupling:b.js[0],multiplicity:b.value}))}typeof o.assignment=="string"&&(y.assignment=Mr(o.assignment)),typeof o.multiplicity=="string"&&(y.multiplicity=o.multiplicity),n.multiplets.push(y)}return n}function Rr(e){let r={};for(let t in e){let i=e[t],n=typeof i=="number"?i:Number.parseFloat(i);Number.isNaN(n)||(r[t]=n)}return r}var Dr={quot:'"',apos:"'",comma:",",amp:"&",lpar:"(",rpar:")",lt:"<",gt:">",colon:":",semi:";"};function Mr(e){return e.replaceAll(/&(\w+);/gi,(r,t)=>Dr[t.toLowerCase()]||r)}function _e(e){let r=e.split(/\r?\n/).filter(i=>i.trim()!==""),t=[];for(let i of r)if(i.startsWith("(")){let[n,o,s]=B(i).map(Number.parseFloat);t.push({id:n,x:o,y:s})}return t}function He(e,r={}){let t={};if(!e["OBSERVED MULTIPLETS"])return[];let i=Ve(e["OBSERVED MULTIPLETS"],r);if(!i)return[];let{multiplets:n}=i;for(let o of n){let{id:s,from:l,to:a,integration:m=0,...u}=o;t[s]={from:l,to:a,integration:m,signals:[{id:s,...u}]}}if(e["OBSERVED MULTIPLETS PEAKS"]){let o=_e(e["OBSERVED MULTIPLETS PEAKS"]),s={};for(let l of o){let{id:a,x:m,y:u}=l;s[a]||(s[a]=[]),s[a].push({x:m,y:u,width:.05})}for(let l in t)s[l]&&(t[l].signals[0].peaks=s[l])}return w(Object.values(t))}function Xe(e,r){let i=[...e.getMolecularFormula().formula.matchAll(/(?<element>[A-Z][a-z]?)(?<count>\d*)/g)].map(o=>({element:o?.groups?.element,count:o?.groups?.count?Number(o.groups.count):1})),n=[...r.nucleus[0].matchAll(/[0-9]*(?<element>[A-Z][a-z]?)/g,"$element")][0].groups.element;return i.find(o=>o.element===n)?.count||100}function Ye(e){let r={};return".PHASE0"in e&&(r.ph0=Number.parseFloat(e[".PHASE0"]),r.ph1=Number.parseFloat(e[".PHASE1"])),r}function pe(e){let{ph0:r,ph1:t}=e;return Number.isFinite(r)&&Number.isFinite(t)}import{generateID as Ge}from"@zakodium/nmrium-core";function Ke(e,r,t){for(let i=0;i<e.length;i++){if(r.includes(i))continue;let{delta:n,multiplicity:o="",diaIDs:s}=e[i],l=Number(n)-.01,a=Number(n)+.01;t.push({from:l,to:a,integration:1,id:Ge(),signals:[{id:Ge(),delta:n,multiplicity:o,diaIDs:s}]})}}import{linearSumAssignment as xr}from"linear-sum-assignment";import{xCostMatrix as Ar}from"ml-spectra-processing";function Ze(e,r){let t=e.map(s=>s.delta),i=r.map(s=>s.delta),n=Ar(i,t,{fct:(s,l)=>Math.abs(s-l)}),{rowAssignments:o}=xr(n,{maximaze:!1});return Array.from(o)}function Qe(e,r){let{assignments:t,ranges:i}=r;t?.sort((s,l)=>l.delta-s.delta);let n=[],o=[];for(let s of i){let l=0,{from:a,to:m}=s,u=[];for(let c=l;c<t.length;c++){let{delta:g}=t[c];g<=m&&g>=a?(u.push(t[c]),o.push(c)):g>m&&(l=c)}if(u.length>0){let c=s.signals,g=[],y=u.length>1&&c.length>1?Ze(c,u):[0];for(let d=0;d<u.length;d++){let p=y[d],{delta:f,multiplicity:F,diaIDs:h}=u[d];p>-1?g.push({...c[p],diaIDs:h}):g.push({delta:f,multiplicity:F,diaIDs:h})}s.signals=g,n.push(s)}}Ke(t,o,n),n.sort((s,l)=>s.from-l.from),e.ranges={values:w(n).map(s=>{let{integration:l,...a}=s;return a}),options:{sum:r.integrationSum,isSumConstant:!0,sumAuto:!0}},e.ranges.options.moleculeId=String(r.moleculeId)}function rt(e,r,t,i,n){let{logger:o}=n,s={components:nt(e)?Tr(e,t.isFid):Er(e)},{name:l=t.title||`jcamp_${tt()}`}=n,a={dependentVariables:[s],meta:r,info:{...t,name:k(l)}};return Ir(e)&&Lr(a,i,r,e,t,{logger:o}),a}function nt(e){return"minMax"in e}function Ir(e){return!nt(e)}function Er(e){return e.spectra.map(r=>{let t=I(r.data);return{...r,data:t}})}function Tr(e,r){let t={...e.minMax,z:I(e.minMax?.z)};return r?kr(t):{rr:t}}function Lr(e,r,t,i,n,o){let{assignmentsByBlocks:s}=r,l=Ye(t);pe(l)&&wr(e,l);let a=String(i.info.BLOCKID);if(s?.[a]){let{molecule:m,assignments:u,moleculeBlockID:c}=s[a],g=Xe(m,n),y=I(i.spectra[0].data);if(y.x[0]>y.x[1])for(let F of i.spectra)F.data.x.reverse(),F.data.y.reverse();if(pe(l)&&i.spectra.length>1){let{re:F}=vr(i,l);y.y=F}let{x:d,y:p}=y,f=He(t,o)??Cr({x:d,y:p},{peakPicking:{frequency:n.originFrequency},ranges:{frequency:n.originFrequency,integrationSum:g}});Qe(e,{moleculeId:c,ranges:f,assignments:u,integrationSum:g})}}function kr(e){let{z:r,...t}=e,i=[],n=[];for(let l=0;l<r.length;l+=2)i.push(r[l].slice()),n.push(r[l+1].slice());let o=et(i),s=et(n);return{re:{...t,z:i,minZ:o.min,maxZ:o.max},im:{...t,z:n,minZ:s.min,maxZ:s.max}}}function wr(e,r){let{ph0:t,ph1:i}=r;e.filters||(e.filters=[]),e.filters.push({id:tt(),name:"phaseCorrection",value:{ph0:t,ph1:i,absolute:!1},enabled:!0})}function vr(e,r){let{ph0:t,ph1:i}=r,{re:n,im:o}=Or({re:e.spectra[0].data.y,im:e.spectra[1].data.y},t*Math.PI/180,i*Math.PI/180);return{re:n,im:o}}function it(e,r,t){let{logger:i}=t,n=[];for(let o of e)if(o.spectra&&o.spectra.length>0||o.minMax){qr(o);let s={...o.info,...o.meta},l=X(s,{logger:i});if(l.experiment==="wobble_curve")continue;n.push(rt(o,s,l,r,t))}return n}function qr(e){let r=e.meta["BRUKER FILE EXP"];if(!r)return;let i=(Array.isArray(r)?r:[r]).find(o=>o.slice(0,10).includes("vdlist"));if(!i)return;let n=i.split(`
|
|
6
|
-
`).slice(1);e.info.vdlistValues=U(n)}async function Z(e,r={}){let t=await e.text(),i=ot(t,{name:e.name,...r});return ke(i,e,r)}function ot(e,r={}){let t={spectra:[],molecules:[]},{name:i,converter:n={},selector:o={},logger:s}=r,{keepRecordsRegExp:l=/.*/}=n,a={keepSpectra:!0,noContour:!0,noTrimRegExp:/\$MOLFILE/,keepRecordsRegExp:l,logger:s},m=qe(jr(e),{name:i,...o,logger:s});for(let u of m)Br(u,t,a,i);if(zr(t,o),t.spectra.length===0&&m.length>0){let u=t.molecules.length===0?" nor molecule":"";s?.warn(`No spectra${u} data was loaded from file ${i}`)}return $r(t)}function Br(e,r,t,i){let n=[],o=[],s={molecules:[]},{logger:l}=t,a={name:i,logger:l};le(e,o,t),Ue(o,s,n,a),r.spectra.push(...it(n,s,a)),r.molecules.push(...s.molecules)}function zr(e,r){r.index!==void 0&&(e.spectra=e.spectra.slice(r.index,r.index+1))}var Q=class{id="nmrium-core-plugins#JcampLoaderPlugin";version=1;migrations=[];onReadProcess;constructor(){this.onReadProcess={supportedExtensions:["jcamp","jdx","dx"],onFile:this.onReadProcessFile.bind(this)}}onReadProcessFile(r,t={}){let{sourceSelector:i={},converter:n,keepSource:o,logger:s}=t;return s?.debug(`Reading JCAMP-DX file: ${r.name}`),Z(r,{selector:this.getJcampSelector(i),converter:n?.jcamp,keepSource:o,logger:s})}getJcampSelector(r={}){let{jcamp:t={},general:i={}}=r,{dataSelection:n="both"}=i;return{...t,dataSelection:n}}};function fe(){return new Q}import{formatSpectra as Vr,getOneIfArray as _r}from"@zakodium/nmrium-core";import{getGyromagneticRatio as Hr}from"gyromagnetic-ratio";import{isAnyArray as Xr}from"is-any-array";import{parseJEOL as Yr}from"jeolconverter";import Gr from"lodash.merge";import{normalizeNucleus as Kr}from"nmr-processing";import{isAnyArray as v}from"is-any-array";var st={0:"uint8",1:"uint16",2:"uint32",3:"uint64",4:"int8",5:"int16",6:"int32",7:"int64",8:"float32",9:"float64",10:"complex64",11:"complex128"},at={0:"scalar",1:"vector",2:"matrix",3:"symetricMatrix",4:"pixel"};function ct(e,r,t={}){let{quantityType:i=0,encoding:n="none",name:o="",unit:s="",quantityName:l="",sparseSampling:a={},from:m=[0],to:u=[-1]}=t;if(v(e))throw new Error("jeol with an array of data is not yet supported");if(!("re"in e&&"im"in e))throw new Error("Only re/im data is supported");let c=ge(e,m,u),{componentLabels:g=c.componentLabels}=t;return{type:"internal",quantityType:at[i],numericType:st[r],encoding:n,name:o,unit:s,quantityName:l,componentLabels:g,sparseSampling:a,description:t.description||"",application:t.application||"",components:c.components,dataLength:c.dataLength}}function Ur(e){return v(e.re)&&v(e.im)}function Wr(e){return!v(e.re[0])}function ge(e,r,t){let i=[],n=[],o=[];if(Ur(e))if(Wr(e)){i[0]=de(r[0],t[0],e.re.length);let s=new Float64Array(i[0]);for(let l=0;l<i[0];l+=2){let a=l+r[0]*2;s[l]=e.re[a/2],s[l+1]=e.im[a/2]}o.push(s),n.push("complex")}else if(v(e.re[0])){i[0]=Jr(r[1],t[1],e.re.length),i[1]=de(r[0],t[0],e.re[0].length);for(let s=0;s<i[0];s++){let l=new Float64Array(i[1]);for(let a=0;a<i[1];a+=2){let m=a+r[0]*2;l[a]=e.re[s][m/2],l[a+1]=e.im[s][m/2]}o.push(l)}}else throw new Error("check your object");else if(v(e.re.re)){i[0]=de(r[1],t[1],e.re.re.length);let s=ge(e.re,r,t).components,l=ge(e.im,r,t).components;for(let a=0;a<i[0]/2;a++)o.push(s[a],l[a])}else throw new Error("check the dimension or the type of data in your array");return{dataLength:i,componentLabels:n,components:o}}function Jr(e,r,t){return r-e+1<t?r-e+1:t}function de(e,r,t){return r-e+1<t?(r-e+1)*2:t*2}async function lt(e,r={}){let t=await e.arrayBuffer(),{name:i=k(e.name),keepSource:n=!1}=r,o={spectra:[],molecules:[]},l=en(t)[0],{metadata:a,...m}=l.description,u=0,c=m.dimension===1?"1d":"2d",g="NMR SPECTRUM",y=m.dimension===1?m.nucleus[0]:m.nucleus,d=m.spectralWidthClipped[0],p;l.dependentVariables&&(m.dimension===1?p=Zr(l):m.dimension===2&&(p=Qr(l)));for(let F in m)Array.isArray(m[F])&&m[F].length===1&&(m[F]=m[F][0]);let f={data:p,info:{...m,acquisitionMode:u,experiment:c,type:g,nucleus:y,spectralWidthClipped:d,name:i},meta:a};return n&&(f.sourceSelector={files:[e.relativePath]}),o.spectra=[f],Vr(o)}function Zr(e){let r=e.dimensions[0],t=e.dependentVariables,i=r.quantityName,n=r.count,o=r.increment.magnitude,s=r.originOffset.magnitude,l=r.coordinatesOffset.magnitude,a=t[0].components[0],m=new Float64Array(n),u=new Float64Array(n);for(let p=a.length-1,f=0;p>0;p-=2)m[f]=a[p-1],u[f++]=a[p];let c={},[g,y]=[0,0];switch(i){case"frequency":y=0+l/s*1e6,g=o/s*1e6,c.re=m,c.im=u;break;case"time":y=s,g=o,c.re=m.reverse(),c.im=u.reverse().map(p=>-p);break;default:break}let d=[];for(let p=0;p<n;p++)d.push(y+p*g);return c.x=d,c}function Qr(e){let r=e.dimensions,t=e.dependentVariables,i=r[0].quantityName,n=[],o=[],s=Number.MIN_SAFE_INTEGER,l=Number.MAX_SAFE_INTEGER,a=Number.MAX_SAFE_INTEGER,m=Number.MIN_SAFE_INTEGER;for(let g of t[0].components){let y=new Float64Array(g.length/2),d=new Float64Array(g.length/2);for(let p=g.length-1,f=0;p>0;p-=2){let F=g[p-1],h=g[p];F>s&&(s=F),F<l&&(l=F),h>m&&(m=h),h<a&&(a=h),y[f]=F,d[f++]=h}if(i==="frequency")n.push(y),o.push(d);else{let p=y.length,f=new Float64Array(d.length);for(let F=0,h=p-1;F<p;F++)f[F]=-d[h--];n.push(y.reverse()),o.push(f)}}let u={re:{z:n,minZ:l,maxZ:s},im:{z:o,minZ:a,maxZ:m}},c=["X","Y"];for(let g=0;g<c.length;g++){let y=r[g].count,d=r[g].increment.magnitude,p=r[g].originOffset.magnitude,f=r[g].coordinatesOffset.magnitude,F=c[g];for(let h of["re","im"])i==="frequency"?(u[h][`min${F}`]=0+f/p*1e6,u[h][`max${F}`]=y*(d/p)*1e6):(u[h][`min${F}`]=p,u[h][`max${F}`]=y*d)}return u}function en(e){let r=Yr(e),t=r.info,i=r.headers,n=r.parameters,{dimension:o}=t,s={};for(let f of n.paramArray){let{name:F,value:h}=f;s[F]=ut(h,o)}delete n.paramArray;let l=r.data,a={};a.title=`title: ${i.title} / comment: ${i.comment} / author:${i.author} / site: ${i.site}`,a.nucleus=t.nucleus.map(Kr),a.sampleName=t.sampleName,a.date=t.date,a.epoch=t.epoch,a.localeDate=new Date(_r(t.epoch)).toLocaleString(),a.author=t.author,a.solvent=t.solvent,a.temperature=t.temperature.magnitude,a.probeName=t.probeName||"",a.fieldStrength=t.fieldStrength.magnitude;let m=a.nucleus.map(Hr);a.baseFrequency=m.map(f=>t.fieldStrength.magnitude*f/(2*Math.PI*1e6)),a.pulseSequence=t.experiment,a.temperature=t.temperature?.unit?.toLowerCase()==="celsius"?273.15+t.temperature.magnitude:t.temperature.magnitude,a.digitalFilter=t.digitalFilter,a.pulseStrength90=1/(4*t.pulseStrength90.magnitude),a.numberOfScans=t.numberOfScans,a.relaxationTime=t.relaxationTime.magnitude,a.isComplex=t.dataSections.includes("im"),a.isFid=t.dataUnits[0]==="Second",a.isFt=t.dataUnits[0]==="Ppm",a.dimension=t.dimension,a.originFrequency=t.originFrequency.map(f=>f.magnitude/1e6).slice(0,o),a.numberOfPoints=t.dataPoints.slice(0,1),a.frequencyOffset=t.frequencyOffset.map((f,F)=>f.magnitude*a.baseFrequency[F]).slice(0,o),a.acquisitionTime=t.acquisitionTime.map(f=>f.magnitude).slice(0,o),a.spectralWidth=t.spectralWidth.map((f,F)=>f.magnitude/t.originFrequency[F].magnitude*1e6).slice(0,o),a.spectralWidthClipped=t.spectralWidthClipped.map((f,F)=>f.magnitude/a.baseFrequency[F]*1e6).slice(0,o);let u=[],c={},g;for(let f=0;f<t.dimension;f++){if(g={magnitude:t.acquisitionTime[f].magnitude/(t.dataPoints[f]-1),unit:"s"},t.dataUnits[f]==="Second")c.quantityName="time",c.originOffset={magnitude:0,unit:"s"},f===0?c.coordinatesOffset={magnitude:t.digitalFilter*g.magnitude,unit:"s"}:c.coordinatesOffset={magnitude:0,unit:"s"},c.reciprocal={originOffset:{magnitude:t.originFrequency[f].magnitude,unit:"Hz"},quantityName:"frequency",coordinatesOffset:{magnitude:t.frequencyOffset[f].magnitude*t.originFrequency[f].magnitude/1e6,unit:"Hz"}};else if(t.dataUnits[f]==="Ppm"){c.quantityName="frequency";let F=t.originFrequency[f].magnitude;c.originOffset={magnitude:F,unit:"Hz"};let h=t.dataOffsetStart[f],P=t.dataOffsetStop[f]-h+1;g={magnitude:tn(t,f)/(P-1),unit:"Hz"};let D=t.dataAxisStop[f]*F/1e6;c.coordinatesOffset={magnitude:D,unit:"Hz"},P!==t.dataPoints[f]&&(t.dataPoints[f]=P)}f===0?c.description="direct dimension":c.description="indirect dimension",u.push({label:String(i.dataAxisTitles[f]),count:Number(t.dataPoints[f]),increment:g,type:"linear",description:String(c.description)||"",application:c.application||{},coordinatesOffset:c.coordinatesOffset||0,originOffset:c.originOffset||0,quantityName:String(c.quantityName)||"",reciprocal:c.reciprocal||{},period:c.period||0,complexFFT:c.complexFFT||!1})}let y=[];y.push(ct(l,11,{unit:"none",quantityName:"relative intensity",from:t.dataOffsetStart,to:t.dataOffsetStop}));let d={...a};return delete d.paramList,d.metadata={...mt(i,o),...mt(n,o),...Gr({},s)},[{timeStamp:Date.now(),description:d,dimensions:u,dependentVariables:y}]}function tn(e,r){let{spectralWidth:t,spectralWidthClipped:i}=e;return i[r].magnitude!=="NA"?i[r].magnitude:t[r].magnitude}function mt(e,r){let t={};for(let i in e)t[i]=ut(e[i],r);return t}function ut(e,r){return Xr(e)?r>1?e.slice(0,r):e[0]:e}var ee=class{id="nmrium-core-plugins#JDFLoaderPlugin";version=1;migrations=[];onReadProcess;constructor(){this.onReadProcess={supportedExtensions:["jdf"],onFile:this.onReadProcessFile.bind(this)}}onReadProcessFile(r,t={}){let{logger:i,keepSource:n}=t;return i?.debug(`Reading JDF file: ${r.name}`),lt(r,{name:r.name,keepSource:n,logger:i})}};function ye(){return new ee}var te=class{id="nmrium-core-plugins#MolfileLoaderPlugin";version=1;migrations=[];onReadProcess;constructor(){this.onReadProcess={supportedExtensions:["mol"],onFile:this.onReadProcessFile.bind(this)}}onReadProcessFile(r,t={}){let{logger:i}=t;return i?.debug(`Reading molfile file: ${r.name}`),je(r,{logger:i})}};function he(){return new te}import{getSDF as cn,nmrRecordToJSON as mn}from"nmredata";import{generateID as dt}from"@zakodium/nmrium-core";import{generateID as pt}from"@zakodium/nmrium-core";import{xyIntegration as rn}from"ml-spectra-processing";function ft(e,r){let{x:t,re:i}=r.data;return e.map(n=>{let o=rn({x:t,y:i},{from:n.from,to:n.to}),s=[];for(let l of n.signals||[]){let{kind:a=null,id:m,js:u=[],diaIDs:c=[],...g}=l;s.push({...g,kind:a||"signal",js:u,id:m||pt(),diaIDs:c})}return{...n,id:n.id||pt(),kind:s?.[0].kind||"signal",absolute:o,signals:s}})}function gt(e,r){let t=[],{baseFrequency:i=500}=r.info;for(let n of e){let{delta:o,diaIDs:s=[],multiplicity:l="",integration:a=0}=n,m=n.jCoupling||[],u=nn({delta:o,js:m,frequency:i});if(m&&l&&m.length===l.length){m.sort((c,g)=>g.coupling-c.coupling);for(let c=0;c<m.length;c++)m[c].multiplicity=l[c]}t.push({id:dt(),...u,integration:a,signals:[{id:dt(),js:m,delta:o,diaIDs:s,multiplicity:l}]})}r.ranges.values=ft(w(t),r)}function nn(e){let{delta:r,js:t=[],frequency:i}=e,n=.5;for(let o of t)n+=o.coupling;return n/=i,{from:r-n,to:r+n}}import{generateID as yt}from"@zakodium/nmrium-core";var on=["x","y"],sn={x:0,y:0};function ht(e,r,t={}){let i=[],{shift:n=sn}=t,{originFrequency:o=[400,400]}=r.info,s={x:o[0],y:o[1]};for(let l of e){let a={x:{},y:{},id:yt(),kind:"signal"},m={id:yt(),kind:"signal",peaks:[]},u={x:10,y:10};for(let c of on){let{coupling:g=[],delta:y,diaIDs:d=[]}=l[c];for(let p of g)u[c]+=p.coupling;if(l.activeCoupling){let{activeCoupling:p=[]}=l;for(let f of p)u[c]+=f.coupling}u[c]/=s[c],a[c]={from:y-u[c],to:y+u[c]},m[c]={delta:y,diaIDs:d,originalDelta:y-n[c]}}i.push({...a,signals:[m]})}r.zones.values=i}function bt(e){return an(e.data)}function an(e){return"rr"in e||!("x"in e)&&"re"in e}async function Ft(e,r,t={}){let i={spectra:[],molecules:[]},n=await ln(e,r,t);if(n.spectra.length>0){let{spectra:o,molecules:s,usedFiles:l}=n;i.spectra.push(...o),i.molecules.push(...s);let a=e.files.length;for(let m=a-1;m>=0;m--){let u=e.files[m].relativePath;!u.match(/acqu.*/s)&&l.includes(u)&&e.files.splice(m,1)}}return i}async function ln(e,r,t){let i=[],n=await cn(e),o={spectra:[],molecules:[]};if(n.length===0)return{...o,usedFiles:i};let s=[];for(let a of n){let m=mn({sdf:a,fileCollection:e}).then(u=>{let{spectra:c,molecules:g=[]}=u;return i.push(a.root+a.filename),o.molecules.push(...g),un(c,r,t)});s.push(m)}let l=await Promise.allSettled(s);for(let a of l)a.status==="fulfilled"?(o.spectra.push(...a.value.spectra),i.push(...a.value.usedFiles)):a.reason&&t?.logger?.error(a.reason);return{...o,usedFiles:i}}async function un(e,r,t){let i=[],n=[],o={spectra:[],molecules:[]};for(let s of e){let l=pn(s.source,r,t).then(a=>{let{spectra:m,files:u}=a;i.push(...u);for(let c of m)bt(c)?ht(s.signals,c):gt(s.signals,c);o.spectra.push(...m)});n.push(l)}return await Promise.allSettled(n),{...o,usedFiles:i}}async function pn(e,r,t={}){let{file:i,jcampURL:n}=e,{converter:o}=t;if(n){let a=await fn(n,r,o?.jcamp);if(a)return{...a,files:[]}}let s=[];for(let a of i||[])s.push(dn(a,t).then(m=>({...m,files:a.fileCollection.files.map(u=>u.relativePath)})));let l=await Promise.allSettled(s);for(let a of l){if(a.status==="fulfilled")return a.value;a.reason&&t?.logger?.error(a.reason)}return{spectra:[],molecules:[],files:[]}}async function fn(e,r,t={}){let i={entries:[{relativePath:e}]},n={name:k(e||""),xy:!0,noContours:!0,...t},{data:o}=await r.readFromWebSource(i,n);return o}async function dn(e,r={}){let{converter:t,sourceSelector:i}=r;switch(e.type){case"jcamp":return Z(e.fileCollection.files[0],{name:e?.fileCollection.files[0].name||"",converter:t?.jcamp,selector:i?.jcamp,logger:r.logger,keepSource:r.keepSource});case"brukerFiles":return Y(e.fileCollection,{converter:t?.bruker,selector:i});default:throw new Error("There is not a supported source")}}var re=class{constructor(r){this.core=r;this.onReadProcess={onFiles:this.onReadProcessFiles}}id="nmrium-core-plugins#NMReLoaderPlugin";version=1;migrations=[];onReadProcess;onReadProcessFiles=(r,t)=>Ft(r,this.core,t)};function be(e){return new re(e)}import{Filters1D as Pn,Filters2D as Sn}from"nmr-processing";import{getOneIfArray as Nt}from"@zakodium/nmrium-core";var gn=["no","exponential","modifiedGaussian","sine","qsine","trap","user","sinc","qsinc","traf","trafs"];function yn(e){return e in Pt}function Fe(e,r){let{prefix:t="",index:i=0}=r,n=Nt(e[`${t}WDW`],i),o=gn[n?Number(n):0],s={};if(!yn(o))return s;let l=Pt[o];if(l){let{kind:a,parameters:m}=l,u={};for(let c in m){let g=m[c],{source:y,processor:d}=g;if(y){let p=Nt(e[`${t}${y}`],i);if(!p)continue;let f=Number(p);u[c]=d?d(f):f}else g.value!==void 0&&(u[c]=g.value)}s[a]={apply:!0,options:u}}return s}var Pt={exponential:{kind:"exponential",parameters:{lineBroadening:{source:"LB"}}},modifiedGaussian:{kind:"gaussian",parameters:{lineBroadening:{source:"LB"},lineBroadeningCenter:{source:"GB"}}},sine:{kind:"sineBell",parameters:{offset:{source:"SSB",processor:e=>1/e},exponent:{value:1}}},qsine:{kind:"sineSquare",parameters:{offset:{source:"SSB",processor:e=>1/e}}},traf:{kind:"traf",parameters:{lineBroadening:{source:"LB"}}}};var St={sineBell:Dt({offset:0})},Rt={cosy:{...St},hmbc:{...St},hsqc:{sineBell:Dt({offset:.5})}},hn={...Rt};function Ne(e="",r=1){let t=bn(e),i={},n=r===1?Rt[t||""]:hn[t||""];return n&&(i=structuredClone(n)),i}function Dt(e){return{apply:!0,options:e}}function bn(e){let t=e.toLowerCase().match(/cosy|hsqc|hmbc/);return t?t[0]:null}function Mt(e,r={}){let{prefix:t="",experiment:i=_(e)}=r;return e[`${t}WDW`]?{f2:Fe(e,{...r,index:0}),f1:Fe(e,{...r,index:1})}:{f2:Ne(i,1),f1:Ne(i,2)}}import{Filters1D as Fn}from"nmr-processing";var Pe=["digitalFilter","backwardLinearPrediction","forwardLinearPrediction","apodization","zeroFilling","fft",["shiftX","phaseCorrection","baselineCorrection"]],q={};for(let e=0;e<Pe.length;e++){let r=Pe[e];for(let t of Array.isArray(r)?r:[r])q[t]=e}for(let e of Object.values(Fn))e.name in q||(q[e.name]=Pe.length);import{Filters2D as Nn}from"nmr-processing";var Se=["digitalFilter2D","blpDimension1","flpDimension1","apodizationDimension1","zeroFillingDimension1","fftDimension1","blpDimension2","flpDimension2","nusDimension2","apodizationDimension2","zeroFillingDimension2","fftDimension2","phaseCorrectionTwoDimensions",["shift2DX","shift2DY","symmetrizeCosyLike"]],$={};for(let e=0;e<Se.length;e++){let r=Se[e];for(let t of Array.isArray(r)?r:[r])$[t]=e}for(let e of Object.values(Nn))e.name in $||($[e.name]=Se.length);var Rn=new Set(["backwardLinearPrediction","forwardLinearPrediction","digitalFilter2D","phaseCorrectionTwoDimensions","blpDimension1","flpDimension1","apodizationDimension1","apodizationDimension2","zeroFillingDimension1","fftDimension1","blpDimension2","flpDimension2","zeroFillingDimension2","fftDimension2","nusDimension2","symmetrizeCosyLike"]);function Dn(e,r){let{filter:t,experimentalFeatures:i=!1}=r,{name:n}=t;({...Pn,...Sn})[n]&&(e.some(s=>s.name===n)||(i||!Rn.has(n))&&e.push({...t,enabled:!0}))}function xt(e,r={}){let{data:t}=e;if(!t)return e;let{autoProcessing:i,experimentalFeatures:n}=r,o=(l,a)=>Dn(l,{...a,experimentalFeatures:n}),{spectra:s}=t;for(let l of s){let{data:a,info:m,meta:u,filters:c}=l,{dimension:g,isFid:y}=m;if(y){if(g===1){let d=a.re.length,{tdOff:p,digitalFilter:f}=m;if(f&&f>0&&o(c,{filter:{name:"digitalFilter",value:{digitalFilterValue:f}}}),!i)continue;p&&Math.abs(p)>0&&o(c,{filter:{name:"backwardLinearPrediction",value:{nbInputs:d/2}}}),o(c,{filter:{name:"apodization",value:{exponential:{apply:!0,options:{lineBroadening:1}}}}}),o(c,{filter:{name:"zeroFilling",value:{nbPoints:2*d}}}),o(c,{filter:{name:"fft",value:{}}}),o(c,{filter:{name:"phaseCorrection",value:Mn(m)}}),c.sort((F,h)=>q[F.name]-q[h.name])}else if(g===2){if(!i||!n)continue;let d=a.re.z.length,p=a.re.z[0].length,{tdOff:f,experiment:F=""}=m,h=m.spectrumSize;Array.isArray(h)&&h.length>1?(h[0]<=p&&(h[0]=p*2),h[0]<=d&&(h[0]=d*2)):h=[p*2,2*d];let b=F.toLowerCase().includes("cosy");f&&Math.abs(f[0])>0&&o(c,{filter:{name:"blpDimension1",value:{nbInputs:p/2}}});let P=Mt(u,{experiment:F});o(c,{filter:{name:"apodizationDimension1",value:P.f2}}),o(c,{filter:{name:"zeroFillingDimension1",value:{nbPoints:h[0]}}}),o(c,{filter:{name:"fftDimension1",value:{}}}),u&&"nuslist"in u&&o(c,{filter:{name:"nusDimension2",value:{}}}),o(c,{filter:{name:"apodizationDimension2",value:P.f1}}),o(c,{filter:{name:"zeroFillingDimension2",value:{nbPoints:h[b?0:1]}}}),b?o(c,{filter:{name:"symmetrizeCosyLike",value:{}}}):o(c,{filter:{name:"phaseCorrectionTwoDimensions",value:{}}}),o(c,{filter:{name:"fftDimension2",value:{}}}),c.sort((R,S)=>$[R.name]-$[S.name])}}}}function Mn(e){let{phc0:r=0,phc1:t=0}=e;return At([r,t])?{}:{ph0:r,ph1:t}}function At(e){return Array.isArray(e)?e.every(r=>!r&&r===0):At([e])}var ne=class{id="nmrium-core-plugins#NmriumPostProcessingPlugin";version=1;migrations=[];onReadProcess;constructor(){this.onReadProcess={onProcessing:this.onPostProcessing.bind(this)}}onPostProcessing(r,t){xt(r,t)}};function Re(){return new ne}import{parse as xn}from"sdf-parser";function Ot(e,r={}){let{mixedEOL:t}=r,{molecules:i}=xn(e,{mixedEOL:t}),n=[];for(let{molfile:o}of i){let s=L(o);n.push(...s)}return n}async function Ct(e,r={}){let{logger:t,mixedEOL:i}=r,n=await e.text(),o=Ot(n,{mixedEOL:i}),s={molecules:o,spectra:[]};return t&&t[o.length>0?"info":"debug"](`Loaded ${s.molecules.length} molecules from the ${e.name} file`),s}var ie=class{id="nmrium-core-plugins#SDFLoaderPlugin";version=1;migrations=[];onReadProcess;constructor(){this.onReadProcess={supportedExtensions:["sdf"],onFile:this.onReadProcessFile.bind(this)}}onReadProcessFile(r,t={}){let{logger:i}=t;return i?.debug(`Reading sdf file: ${r.name}`),Ct(r,{logger:i})}};function De(){return new ie}import{Molecule as An}from"openchemlib/full";function It(e){let r=[],t=e.split(/\r?\n/).filter(Boolean);for(let i of t){let o=An.fromSmiles(i).toMolfile();r.push({molfile:o})}return r}async function Et(e,r={}){let t=await e.text(),i=It(t),n={molecules:i,spectra:[]};return r.logger?.info(`Found ${i.length} molecules from the ${e.name} file`),n}var oe=class{id="nmrium-core-plugins#SmilesLoaderPlugin";version=1;migrations=[];onReadProcess;constructor(){this.onReadProcess={supportedExtensions:["smi","smiles"],onFile:this.onReadProcessFile.bind(this)}}onReadProcessFile(r,t={}){let{logger:i}=t;return Et(r,{logger:i})}};function Me(){return new oe}import{formatSpectra as In}from"@zakodium/nmrium-core";import{FileCollection as En}from"filelist-utils";import{isAnyArray as Tn}from"is-any-array";import{xMultiply as Ln}from"ml-spectra-processing";import{convert1D as kn}from"varian-converter";import{normalizeNucleus as On}from"nmr-processing";function Tt(e,r){let{meta:t,procpar:i}=e,n={};for(let h of i)n[h.name]=h.values;let o={},s={},{np:l,solvent:a,sfrq:m,reffrq:u,temp:c,rp:g,sw:y,rfl:d,rfp:p}=n;N(o,"numberOfPoints",l&&Number(C(l))/2),N(o,"solvent",C(a)),N(o,"originFrequency",C(m)),N(o,"baseFrequency",C(u)),(Number.isNaN(o.originFrequency)||o.originFrequency===0)&&(o.originFrequency=400,r?.warn("The frequency could not be determined and was set to 400MHz")),N(o,"temperature",C(c)),N(o,"phc0",g&&Number(g[0])),N(s,"rfl",d&&Number(C(d))),N(s,"rfp",p&&Number(C(p))),N(s,"sw",y&&Number(C(y)));for(let h in s){let b=s[h];Array.isArray(b)&&b.length===1&&(s[h]=b[0])}if(!("baseFrequency"in o)&&"originFrequency"in o){let h=Number.parseFloat(o.originFrequency);if(["sw","rfl","rfp"].every(b=>b in s)){let{sw:b=1,rfl:P=1,rfp:R=1}=Cn(s,["sw","rfl","rfp"]);N(o,"baseFrequency",h-(b/2-P+R)/1e6)}else N(o,"baseFrequency",h)}let{baseFrequency:f,originFrequency:F}=o;N(o,"frequencyOffset",(F-f)*1e6),N(o,"spectralWidth",y&&Number(y[0])/o.baseFrequency);for(let h in o)o[h].length===1&&(o[h]=o[h][0]);return n.tn&&(o.nucleus=n.tn.map(On)),o.dimension=1,o.isFid=!t.status.isSpectrum,{info:o,meta:{...s,...Lt(t),...n}}}function C(e){return e&&(Array.isArray(e)?e[0]:e)}function Cn(e,r){let t={};for(let i of r){let n=e[i];n&&typeof n=="number"&&(t[i]=n)}return t}function Lt(e){let r={};for(let t of Object.keys(e)){let i=e[t];typeof i=="object"&&i!==null&&i.constructor&&i.constructor!==Object?r[t]=Lt(i):r[t]=i}return r}function kt(e){let r={},t=new Set(e.files.map(i=>i.relativePath));for(let i of e){let n=i.name.toLowerCase();if(n.match(/^(?:fid|procpar|text|log)$/)){if(n.match(/^(?:fid|text|log)$/)){let l=i.relativePath.replace(/(?:fid|text|log)$/,"procpar");if(!t.has(l))continue}let o=i.relativePath.split("/"),s=o.slice(0,-1).join("/");r[s]||(r[s]={name:o.at(-2),files:[]}),r[s].files.push(i)}}return Object.values(r)}async function wt(e,r={}){let{keepSource:t,logger:i}=r,n=kt(e);i&&i.debug(`Found ${Object.keys(n).length} varian experiments`);let o=[],s={spectra:[],molecules:[]};for(let a of n){let{name:m,files:u}=a,c=new En(u),g=kn(c).then(y=>{let{info:d,meta:p}=Tt(y),f=y.fid.data[0],F=Tn(f.im),h={data:{...f,x:y.x},meta:p,info:{isComplex:F,name:m,...d},display:{name:m}};if(d.isFid&&F){let{im:b}=h.data;Ln(b,-1,{output:b})}u&&t&&(h.sourceSelector={files:u.map(b=>b.relativePath)}),s.spectra.push(h)});o.push(g)}let l=await Promise.allSettled(o);for(let a=0;a<l.length;a++){let m=l[a];if(m.status==="rejected"&&m.reason){let u=n[a].name;i?.warn(`Varian data: ${u}, fails with: ${m.reason}`)}}return s.spectra.length>0&&i?.info(`Loaded ${s.spectra.length} spectra from Varian files`),In(s)}var se=class{id="nmrium-core-plugins#VarianLoaderPlugin";version=1;migrations=[];onReadProcess;constructor(){this.onReadProcess={onFiles:this.onReadProcessFiles}}onReadProcessFiles=(r,t)=>{let{keepSource:i,logger:n}=t??{};return wt(r,{keepSource:i,logger:n})}};function xe(){return new se}function vn(e,r=[]){return[be(e),xe(),me(),fe(),he(),De(),Me(),ye(),Re()].concat(r)}function qn(){let e=new wn;return e.registerPlugins(vn(e)),e}import{getOneIfArray as qt}from"@zakodium/nmrium-core";import{from1DNMRVariables as $n}from"convert-to-jcamp";function vt(e,r){return e.filters.find(t=>t.name===r)}function jn(e,r={}){let{info:t,meta:i,data:n}=e,{onlyReal:o=!1}=r,{isFid:s,spectralWidth:l}=t,a=qt(t.baseFrequency||t.originFrequency),{x:m,re:u,im:c}=n,g=new Float64Array(u),y=!o&&c?new Float64Array(c):void 0,d={};z(d,"SW",l),z(d,"BF1",a);let p=vt(e,"fft")?.enabled,f={originFrequency:t.originFrequency,dataType:!t.isFid||p?"NMR SPECTRUM":"NMR FID",dataClass:!o&&c?"NTUPLES":"XYDATA"};if(s){let b=e.filters.find(P=>P.name==="digitalFilter");if(b&&!p){let{value:{digitalFilterValue:P},enabled:R}=b;if(R){let S=Math.floor(P);g.set(u.slice(u.length-S)),g.set(u.slice(0,u.length-S),S),c&&y&&(y.set(c.slice(c.length-S)),y.set(c.slice(0,c.length-S),S))}}z(f,"decim",t.decim),z(f,"dspfvs",t.dspfvs),z(f,"digitalFilter",t.digitalFilter)}let F={xyEncoding:"DIFDUP",info:{...t,...f},meta:{...i,...d}},h={x:{data:m,label:t.isFid?"TIME":"FREQUENCY",units:t.isFid?"second":"HZ",symbol:"X"},r:{data:g,label:`${t.isFid?"FID":"SPECTRUM"}/REAL`,units:"ARBITRARY UNITS",symbol:"R"}};return y&&(h.i={data:y,label:`${t.isFid?"FID":"SPECTRUM"}/IMAG`,units:"ARBITRARY UNITS",symbol:"I"}),$n(h,F)}function z(e,r,t){t!==void 0&&(e[r]=qt(t))}export{G as BrukerLoaderPlugin,ee as JDFLoaderPlugin,Q as JcampLoaderPlugin,te as MolfileLoaderPlugin,re as NMReLoaderPlugin,ie as SDFLoaderPlugin,oe as SmilesLoaderPlugin,se as VarianLoaderPlugin,me as brukerLoader,qn as default,qn as init,fe as jcampLoader,ye as jdfLoader,he as molfileLoader,be as nmreLoader,ot as processJcamp,Ot as readSDF,It as readSMILES,vn as recommended,De as sdfLoader,Me as smilesLoader,jn as spectrum1DToJcamp,xe as varianLoader};
|
|
3
|
+
`,{JCAMPDX:l="",ORIGIN:a=""}=e,m=String(l).toLowerCase()+String(a).toLowerCase();"SPECTROMETER/DATASYSTEM"in e&&(m=e["SPECTROMETER/DATASYSTEM"]);let u=(d=[])=>{for(let p of d)if(!(p in n))return!1;return!0};(m.includes("mestre")||m.includes("nova"))&&(m="mnova"),n.creator=m,e.LONGDATE&&pe(n,Date.parse(e.LONGDATE)),P(n,"pulseSequence",e[".PULSESEQUENCE"]||e[".PULPROG"]||e[`${t}PULPROG`]);let c=e[`${t}OWNER`];if(c&&P(n,"owner",c.replaceAll(/\$\$.*/gm,"")),P(n,"aqMod",e[`${t}AQ_mod`]),P(n,"experiment",U(n,e,{prefix:t})),n.nucleus=V(e,n,t),n.nucleus.length===0)if(i)i?.warn("There is not a nucleus detected, assuming 1H"),n.nucleus=["1H"];else throw new Error("There is not a nucleus detected");n.dimension=n.nucleus.length;let g=e[`${t}.ACQUISITIONSCHEME`]||e[`${t}FnMODE`];if(g&&P(n,"acquisitionScheme",or(j(g,1))),P(n,"acquisitionMode",e[`${t}.ACQUISITIONMODE`]),M(n,"lpNumberOfCoefficients",e[`${t}NCOEF`]),M(n,"linearPredictionBin",e[`${t}LPBIN`]),M(n,"tdOff",e[`${t}TDoff`]),P(n,"windowMultiplicationMode",e[`${t}WDW`]),P(n,"title",e.TITLE),P(n,"solvent",e[".SOLVENTNAME"]),P(n,"temperature",e[`${t}TE`]||e[".TE"]),P(n,"type",e.DATATYPE),P(n,"dataClass",e[`${t}DATACLASS`]),P(n,"phc1",e[`${t}PHC1`]),P(n,"phc0",e[`${t}PHC0`]),n.type){let d=n.type[0].toUpperCase();d.includes("FID")?(n.isFid=!0,n.isComplex=!0):d.includes("SPECTRUM")&&(n.isFt=!0)}if(P(n,"firstX",e[`${t}FIRSTX`]),P(n,"lastX",e[`${t}LASTX`]),P(n,"numberOfPoints",e[`${t}NPOINTS`]),P(n,"originFrequency",e[`${t}SFO1`]),n.dimension===1&&M(n,"originFrequency",e[".OBSERVEFREQUENCY"]),"originFrequency"in n&&(n.originFrequency=H(n.originFrequency)),!n.originFrequency&&n.dimension===2&&".OBSERVEFREQUENCY"in e){let{nucleus:d}=n,p=H(e[".OBSERVEFREQUENCY"]);if(fe(p)&&p.length>1){let f=e[`${t}SYMBOL`].split(","),F=f.findIndex(b=>b.includes("2")),h=f.findIndex(b=>b.includes("1"));F!==-1&&h!==-1?n.originFrequency=[p[F],p[h]]:n.originFrequency=p.slice()}else if(typeof p=="number"){let f=nr(d[1],{frequency:p,nucleus:d[0]});n.originFrequency=[p,f]}}if((!n.originFrequency||n.originFrequency.some(d=>Number.isNaN(d)||d===0))&&(n.originFrequency||(n.originFrequency=n.dimension>1?[400,400]:[400]),n.originFrequency=n.originFrequency.map(d=>Number.isNaN(d)||d===0?400:d),i?.warn("The frequency could not be determined and was set to 400 MHz")),m.toLocaleLowerCase().includes("oxford instruments")?sr(n,e,{...r,separator:s}):m.includes("nanalysis")&&ar(n,e),m!=="mnova"&&m!=="mestre"){let d=n.nucleus[0],p=rr(d);if(P(n,"probeName",e[`${t}PROBHD`]),P(n,"baseFrequency",e[`${t}BF1`]),P(n,"baseFrequency",e[`${t}SF`]),M(n,"scaleFactor",e[`${t}NC_proc`]),"scaleFactor"in n)for(let b=0;b<n.scaleFactor.length;)n.scaleFactor[b]=2**n.scaleFactor[b++];if(!("baseFrequency"in n)&&"originFrequency"in n?P(n,"baseFrequency",n.originFrequency):n.baseFrequency=H(n.baseFrequency),!["baseFrequency","originFrequency"].some(b=>!n[b])&&p){let{baseFrequency:b}=n,N=2*Math.PI*(b[0]/p)*1e6;P(n,"fieldStrength",N)}M(n,"spectralWidth",e[`${t}SW`]),M(n,"spectralWidth",e[`${t}QM_SPECTRAL_WIDTH`]),n.dimension===1&&e[`${t}SweepWidth`]&&n.originFrequency&&M(n,"spectralWidth",e[`${t}SweepWidth`]/n.originFrequency[0]),P(n,"numberOfPoints",e[`${t}TD`],!0);let f=n.numberOfPoints;if(P(n,"spectrumSize",e[`${t}SI`]??f),P(n,"sampleName",e[`${t}NAME`]),e[`${t}FNTYPE`]!==void 0&&P(n,"acquisitionMode",Number.parseInt(e[`${t}FNTYPE`],10)),(e[`${t}VARNAME`]?e[`${t}VARNAME`].split(",")[0]:"")==="TIME"){let b=typeof e.LAST=="string"?e.LAST.replace(" ","").split(",")[0]:e.LAST;M(n,"acquisitionTime",b)}if(!n.acquisitionTime&&u(["numberOfPoints","spectralWidth"])){let{spectralWidth:b,originFrequency:N}=n;P(n,"acquisitionTime",Number((f[0]-1)/(2*b[0]*N[0])))}if(e[`${t}P`]){let b=1e6/(j(e[`${t}P`]).split(s)[1].split(" ")[1]*4);P(n,"pulseStrength90",b)}if(e[`${t}D`]){let b=j(e[`${t}D`]).split(s)[1].split(" ")[1];M(n,"relaxationTime",b)}if(M(n,"numberOfScans",e[`${t}NS`]),M(n,"numberOfScans",e[`${t}QM_NSCANS`]),P(n,"groupDelay",e[`${t}GRPDLY`]),P(n,"dspfvs",e[`${t}DSPFVS`]),P(n,"decim",e[`${t}DECIM`]),n.isFid&&("groupDelay"in n||u(["dspfvs","decim"]))){let{groupDelay:b,dspfvs:N,decim:S}=n,D=$e(b?.[0]??0,N?.[0],S?.[0]);P(n,"digitalFilter",D)}let h;if(u(["numberOfPoints","spectralWidth"])){let{spectralWidth:b,numberOfPoints:N}=n;n.isFid?h=N.map(S=>n.acquisitionTime[0]/(S-1)):h=N.map((S,D)=>b[D]/(S-1))}if(P(n,"increment",h),e[`${t}DATE`]){let b=j(e[`${t}DATE`]),N=Number.parseInt(b,10)*1e3;Number.isNaN(N)?pe(n,Date.parse(b)):pe(n,N)}n.solvent||P(n,"solvent",j(e[`${t}SOLVENT`]))}if(n.dimension<2&&"dataClass"in n&&n.dataClass[0].toUpperCase()==="NTUPLES"&&(P(n,"last",T(e[`${t}LAST`])),P(n,"first",T(e[`${t}FIRST`])),P(n,"varDim",T(e[`${t}VARDIM`])),P(n,"symbols",T(e[`${t}SYMBOL`])),n.symbols&&Array.isArray(n.symbols))){n.symbols.includes("R")&&n.symbols.includes("I")&&(n.isComplex=!0);let d=n.symbols.findIndex(p=>p.toLowerCase()==="x");if(M(n,"firstX",n.first[d]),M(n,"lastX",n.last[d]),M(n,"numberOfPoints",n.varDim[d]),!("spectralWidth"in n)){let{lastX:p,numberOfPoints:f,firstX:F}=n;P(n,"spectralWidth",n.isFid?f/(2*p):Math.abs(p-F)/n.originFrequency)}}if(`${t}REVERSE`in e){let d=e[`${t}REVERSE`];n.reverse=(Array.isArray(d)?d:[d]).map(p=>typeof p=="string"?p.includes("yes"):p)}let y=e[`${t}REFERENCE_POINT`];if(!("frequencyOffset"in n)&&y&&u(["spectralWidth","baseFrequency"])){let d=typeof y=="number"?y:e[`${t}REFERENCE_POINT`].match(/(?<reference>[+-]?\d+(?:\.\d+)?)\s*.*/),p;if(typeof y=="number"?p=y:(y.match(/(?<reference>[+-]?\d+(?:\.\d+)?)\s*.*/),p=Number(d?.groups?.reference)),!Number.isNaN(p)){let{spectralWidth:f,baseFrequency:F}=n;P(n,"frequencyOffset",.5*f*F-p)}}if(!("frequencyOffset"in n)&&u(["baseFrequency","originFrequency"])){let{baseFrequency:d,originFrequency:p}=n,f=d.map((F,h)=>(p[h]-F)*1e6);P(n,"frequencyOffset",f)}for(let d in n)n[d]&&n[d].length===1&&(n[d]=n[d][0]);return!n.frequencyOffset&&".SHIFTREFERENCE"in e&&ir(e,n),Array.isArray(n.nucleus)||(n.nucleus=[n.nucleus]),n}function M(e,r,t){t!==void 0&&P(e,r,H(t))}function pe(e,r){if(!Number.isNaN(r)){e.epoch=r;let t=new Date(r);e.date=t.toUTCString(),e.localeDate=t.toLocaleString()}}function ir(e,r){let t=e[".SHIFTREFERENCE"],i=t.trim().startsWith("(")?/\((?<data>[^)]+)\)/:/(?<data>[^)]+)/,n=t.match(i);if(n.groups.data){let o=n.groups.data.split(",");if(o.length<4)return;let s=Number.parseInt(r.numberOfPoints,10),{spectralWidth:l,baseFrequency:a}=r,m=Number.parseInt(o[2],10),u=Number.parseFloat(o[3]),c;if(r.isFid){if(["baseFrequency","numberOfPoints","spectralWidth"].some(g=>!(g in r)))return;c=u+(s*.5-m)*l/s}else{let g=Number.parseFloat(r.firstX),y=Number.parseFloat(r.lastX),d=(y+g)/2,p=(y-g)/(s+1),f=p<0?g:y+(m-1)*p;c=(d-f)/a+u}c!==void 0&&!Number.isNaN(c)&&(r.frequencyOffset=c*a)}}function H(e){if(fe(e)){let r=[];for(let t of e)r.push(typeof t=="string"?Number.parseFloat(t):t);return r}return typeof e=="string"?Number.parseFloat(e):e}function or(e){switch(String(fe(e)?e[1]:e).toLowerCase().replaceAll(/\s/g,"")){case"1":case"notphasesensitive":return"notPhaseSensitive";case"2":return"QSEQ";case"3":case"tppi":return"TPPI";case"4":case"states":return"States";case"5":case"tppi-states":return"States-TPPI";case"6":case"echo-antiecho":return"Echo-antiecho";default:return"undefined"}}function sr(e,r,t={}){let{prefix:i="",separator:n=`
|
|
4
|
+
`}=t;P(e,"spectralWidth",r[`${i}SweepWidth`]/e.originFrequency[0]);let o=r[`${i}.PULSESEQUENCE`].split(n),s=[];r[".OBSERVENUCLEUS"]&&s.push(r[".OBSERVENUCLEUS"]),r.INDIRECTNUCLEUS&&s.push(r.INDIRECTNUCLEUS),e.nucleus=C(s),e.pulseSequence=o[0];let l=o.slice(2,-1);if(s.length>1)if(s[0]===s[1])e.spectralWidth.push(e.spectralWidth[0]);else{let a=JSON.stringify(l).match(/\$\$SW1=\s*(?<sw>[+-]?(?:[0-9]*[.])?[0-9]+)/);if(a?.groups){let{originFrequency:m}=e,u=Number.parseFloat(a.groups.sw);e.spectralWidth.push(u/m[1])}}return e}function ar(e,r){let{T1NUCLEUS:t,T2NUCLEUS:i,PAGE:n}=r;e.pulseSequence=r.EXPERIMENT||r[".PULSESEQUENCE"];let o=[],{dimension:s,isComplex:l}=e;if(s===2&&e.pulseSequence==="T1"){let u=l?2:1;for(let c=0;c<n.length;c+=u){let g=n[c].replace(/T1=/,"");o.push(Number(g))}r.vdlistValues=o}e.nucleus=s>1?[i,t]:i;let{phc0:a,phc1:m}=e;if(a&&m){let u=_({phc0:a,phc1:m});e={...e,...u}}}var ur={keepRecordsRegExp:/.*/,keepFiles:!0};async function G(e,r={}){let t={spectra:[],molecules:[]},{converter:i={},selector:n={},logger:o}=r,s=lr(e,{logger:o,...fr(n)}),l=[];for(let m of s)l.push(mr(m,{...ur,...i}).then(u=>pr(u,r)));let a=await Promise.allSettled(l);for(let m=0;m<a.length;m++){let u=a[m];if(u.status==="fulfilled"){let c=_(u.value.info);t.spectra.push({...u.value,info:{...u.value.info,...c}})}else if(u.reason){let c=s[m].name;o?.warn(`Bruker data: ${c}, fails with: ${u.reason}`);continue}}return o&&o[t.spectra.length>0?"info":"debug"](`Loaded ${t.spectra.length} spectra from Bruker files`),cr(t)}function pr(e,r={}){let{keepSource:t=!1,logger:i}=r,n={...e.info,...e.meta},o=Y(n,{logger:i}),s={},{isFid:l}=o;if(dr(e)){let y=e.minMax;for(let d in y){let p=y[d];p&&(p.z=I(p.z))}s.components=e.minMax}else o.dimension===1&&(s.components=e.spectra);let{source:a}=e,{expno:m,name:u,files:c}=a;n.vdlist&&(n.vdlistValues=X(n.vdlist));let g={dependentVariables:[s],meta:n,info:{...o,experimentNumber:m,name:u}};return c&&t&&(g.sourceSelector={files:c.map(y=>y.relativePath)}),gr(g,e),g}function fr(e){let{general:r={},bruker:t={}}=e,{processingNumbers:i,experimentNumbers:n,...o}=t;return{...r,...o,processingNumbers:Be(i),experimentNumbers:Be(n)}}function Be(e){if(e)return e.split(/[^\d]+/).filter(Boolean).map(r=>Number.parseInt(r,10))}function dr(e){let{info:r}=e;return r.twoD}function gr(e,r){if(!("integrals"in r))return;let{integrals:t=[]}=r;e.integrals={values:t.map(i=>{let{from:n,to:o,integration:s}=i;return{from:n,to:o,integral:s,kind:"signal"}})}}var K=class{id="@zakodium/nmrium-core-plugins#BrukerLoaderPlugin";version=1;migrations=[];onReadProcess;constructor(){this.onReadProcess={onFiles:this.onReadProcessFiles}}onReadProcessFiles=(r,t)=>{let{sourceSelector:i,converter:n,keepSource:o,logger:s}=t??{};return G(r,{converter:n?.bruker,selector:i,keepSource:o,logger:s})}};function de(){return new K}import{formatSpectra as Yr}from"@zakodium/nmrium-core";import{createTree as Gr}from"jcampconverter";function Ue(e,r,t={}){let{selector:i={},keepSource:n=!1}=t;if(!n)return e;for(let o=0;o<e.spectra.length;o++){let s=e.spectra[o];s.sourceSelector={files:[r.relativePath],jcamp:{index:o,...i}}}return e}import{convert as yr}from"jcampconverter";function ge(e,r,t){let{dataType:i,children:n}=e,o=i==="LINK"&&n?n:[e];for(let s of o){if(s.dataType==="LINK"){ge(s,r,t);continue}let l=yr(s.jcamp,t);r.push(...l.flatten)}}function Je(e,r={}){let t=[],i=_e(e,r);for(let s of i?e:[])s.dataType==="LINK"?s.children=ye(s.children,r):s=ye([s],r)[0],t.push(s);let{name:n,logger:o}=r;return e.length===0&&o?.warn(`There is no data ${n?`in ${n}`:"in the JCAMP-DX"}`),t}function ye(e=[],r={}){let{name:t,logger:i,tree:n=[],dataSelection:o="both"}=r,s=[];for(let u of e){let{dataType:c,dataClass:g}=u;if(c==="LINK")u.children=ye(u.children,r);else if(n.some(y=>{let{dataClass:d=g,dataType:p=c}=y;return g===d&&c===p})){i?.warn(`Skipping ${g} and ${c} ${t?`in ${t}`:"in the JCAMP-DX"},
|
|
5
|
+
because it didn't match the import filters`);continue}s.push(u)}let l=[],a=s.some(Xe),m=s.some(We);for(let u of s){if(o!=="both"&&u.dataType!=="LINK"){if(Xe(u)&&(o==="ft"||o==="preferFT"&&m)){i?.warn(`Skipping raw data ${t?`in ${t}`:"in the JCAMP-DX"} because it didn't match the import filters`);continue}if(We(u)&&(o==="fid"||o==="preferFID"&&a)){i?.warn(`Skipping FFT data ${t?`in ${t}`:"in the JCAMP-DX"} because it didn't match the import filters`);continue}}l.push(u)}return l}function We(e){return e.dataType?.toUpperCase().includes("SPECTRUM")&&e.dataClass&&!e.dataClass.toUpperCase().includes("PEAK")}function Xe(e){return e.dataType?.toUpperCase().includes("FID")}function _e(e,r={}){let{logger:t,name:i=""}=r;for(let n of e){if(n.dataType==="LINK"&&_e(n.children,r))return!0;let{dataType:o=""}=n,s=o.toLowerCase();if(s.length>0){if(s.includes("spectrum")&&!s.includes("nmr"))return t?.warn(`File ${i} was ignored because it is a ${o}`),!1;if(s.includes("nmr"))return!0}}return!1}import{generateID as Ye}from"@zakodium/nmrium-core";import{parseJcampCS as Sr}from"jcampconverter";import*as Rr from"openchemlib";import{isMolfileNotEmpty as hr}from"nmr-processing";import{Molecule as br}from"openchemlib";async function Ve(e,r={}){let t=await e.text(),i=w(t),n={molecules:i,spectra:[]};return i.length===0&&r.logger?.debug(`${e.name} is an empty molfile`),n}function w(e){let r=[];if(!hr(e))return[];let i=br.fromMolfile(e).toMolfile();return r.push({molfile:i}),r}import{isMolfileNotEmpty as Pr}from"nmr-processing";import*as Nr from"openchemlib";import{getDiastereotopicAtomIDsFromMolfile as Dr}from"openchemlib-utils";var Fr=new Set(["ndnmrspectrum","ndnmrfid","nmrspectrum","nmrfid"]);function Z(e){let{dataType:r="",dataClass:t=""}=e,i=r.replaceAll(/\s/g,"").toLowerCase(),n=t.replaceAll(/\s/g,"").toLowerCase();return Fr.has(i)&&n!=="peaktable"}function He(e,r,t={}){let{spectra:i,info:n,meta:o}=e,s=i[0].data,l=[],a={x:"delta",y:"intensity",w:"width",m:"multiplicity",a:"atom"},{logger:m,name:u,spectraData:c}=t,{CROSSREFERENCE:g}=n,y=typeof g!="string"?g:g.split(/\r?\n/).map(D=>D.trim()).filter(Boolean),d=y.find(D=>D?.toLowerCase().includes("structure"));if(d===void 0)return m&&m.warn(`There is not a structure reference for ${u} file, assignment object could not be completed`),null;let p=Number.parseInt(d?.toLowerCase().replace(/_/,"").replace(/structure:\s*blockid\s*=\s*(?<blockId>.*)/,"$<blockId>"),10);if(Number.isNaN(p)||p<1)return m&&m.warn(`Structure block_id not found for ${u} file, assignment object could not be completed`),null;let F=c?.molecules?.find(D=>D.blockId===p)?.molfile??"";if(F===""){let D=r.find(A=>A.info.BLOCKID===p),{MOLFILE:R=""}=D?.meta||{};F=R}if(!Pr(F))return m&&m.warn(`Empty molfile for ${u} file with structure block_id = ${p}, assignment object could not be completed`),null;let h=Dr(Nr,F),b=V({...n,...o},{},"");for(let D=0;D<s.x.length;D++){let R={};for(let A in s){let x=s[A][D];typeof x=="string"&&x.startsWith("<")&&x.endsWith(">")&&(x=x.slice(1,-1)),R[a[A]]=x}if("atom"in R){let A=h.map[R.atom-1];b.includes("1H")?A.nbHydrogens>0?(R.diaIDs=A.hydrogenOCLIDs,R.nbHydrogens=A.nbHydrogens):(R.diaIDs=[A.oclID],R.nbHydrogens=A.nbHydrogens):(R.diaIDs=[A.oclID],R.nbHydrogens=1)}l.push(R)}let N={};for(let D of l){let{delta:R,diaIDs:A}=D,x=`${R}_${A.join("_")}`;if(N[x])N[x].atoms.push(D.atom);else{let{atom:zn,...$t}=D;N[x]={...$t,atoms:[D.atom]}}}let S=[];for(let D of y)D.toLowerCase().includes("spectrum")&&S.push(Number(D.toLowerCase().replace(/_/,"").replace(/.*:\s*blockid=(?<blockId>.*)/,"$<blockId>")));if(S.length===0){for(let D of r)if(Z(D)){let{BLOCKID:R}=D.info;S.push(Number(R))}S.length>1&&(S=[],m&&m.warn(`There is not a spectral cross-reference for the peak assignment in the ${u} file`))}return{moleculeBlockID:p,spectraBlockIDs:S,assignments:Object.values(N),molecule:h.molecule}}function Ge(e,r,t,i){for(let n of e){let{meta:o,dataClass:s="",dataType:l="",info:a}=n,m=Number.parseInt(String(a.BLOCKID),10);o.MOLFILE?Cr(String(o.MOLFILE),r,m):n.jcampCS&&xr(n,r,m),Mr(s,l)&&Ar(r,n,e,i),Z(n)&&t.push(n)}}function Mr(e,r){return e?.toLowerCase().includes("assignments")&&r?.toLowerCase().includes("assignments")}function Ar(e,r,t,i){let n=He(r,t,{spectraData:e,logger:i.logger,name:i.name});if(e.assignmentsByBlocks||(e.assignmentsByBlocks={}),n){let{spectraBlockIDs:o}=n;for(let s of o)e.assignmentsByBlocks[s]=n}}function xr(e,r,t){r.molecules||(r.molecules=[]);let i=Sr(e,{OCL:Rr}),n=w(i?.molfile||"");n.length>0&&r.molecules.push({id:Ye(),blockId:t,...n[0]})}function Cr(e,r,t){r.molecules||(r.molecules=[]);let i=w(String(e));r.molecules.push({id:Ye(),blockId:t,...i[0]})}import{generateID as mt}from"@zakodium/nmrium-core";import{matrixMinMaxZ as ct,reimPhaseCorrection as jr}from"ml-spectra-processing";import{xyAutoRangesPicking as zr}from"nmr-processing";function v(e){return e.slice(0,Math.max(0,e.lastIndexOf(".")))}function q(e){e.sort((r,t)=>r.from-t.from);for(let r=0;r<e.length-1;r++)e[r].to>e[r+1].from&&(e[r].to=Math.max(e[r+1].to,e[r].to),e[r].signals=e[r].signals.concat(e[r+1].signals),e[r].integration+=e[r+1].integration,e.splice(r+1,1),r--);return e}import{splitPatterns as Lr}from"nmr-processing";import{xMaxValue as Or}from"ml-spectra-processing";function z(e){return e.trim().slice(1,-1).split(/,\s*/).map(r=>r.trim())}var Ir={I:"id",X:"from",Y:"to",Hs:"delta",An:"integration",H:"nbAtoms",C:"multiplicity",N:"assignment","(J)":"js"},Ke=["I","X","Y","Hs","An","H","C","N","(J)"];function Ze(e){let r={headersFromParenthesis:[],headersFromComments:[],comments:[],data:[],multiplets:[]},t=e.split(/\r?\n/).filter(i=>i.trim()!=="");if(t.length===0)return r;if(t[0].startsWith("(")&&!t[0].match(/\d/)){let i=t.shift();r.headersFromParenthesis=z(i)}return r.comments=t.filter(i=>i.startsWith("$$")).map(i=>i.replace(/^\$\$\s*/,"")),r.headersFromComments=Er(r.comments),r.data=t.filter(i=>!i.startsWith("$$")).map(z),r.multiplets=Tr(r),r}function Tr(e,r={}){let{logger:t}=r,i=e.data[0].map((a,m)=>m).filter(a=>e.data.every(m=>Number.isNaN(m[a])||Number.isNaN(Number(m[a]))));if(t?.trace(`Parsing JCAMP-DX assignment: stringColumnIndexes: ${i.join(",")}`),i.length===0)return t?.warn("Parsing JCAMP-DX assignment: No string columns found. Skipping parsing of assignment."),[];let n=i[0],o;if(e.headersFromParenthesis.length>0&&e.headersFromParenthesis[n]==="C")o=e.headersFromParenthesis;else if(e.headersFromComments.length>0&&e.headersFromComments[n]==="C")o=e.headersFromComments;else if(Ke[n]==="C")o=Ke;else return t?.warn("No header found for multiplicity. Skipping parsing of assignment."),[];return Or(e.data.map(a=>a.length))>o.length&&t?.warn("Some assignments are containing more values than headers"),e.data.map(a=>{let m={};for(let u=0;u<o.length;u++){let c=o[u];m[Ir[c]||c]=a[u]}return m})}function Er(e){return e.map(r=>r.split(":")[0].trim()).filter(r=>r.length>0)}function Qe(e,r={}){let{logger:t}=r,i=Ze(e),n={multiplets:[],comments:i.comments};for(let o of i.multiplets){let{id:s,from:l,to:a,delta:m,integration:u,nbAtoms:c,multiplicity:g}=o,y={id:s,js:[],multiplicity:"",...kr({from:l,to:a,delta:m,integration:u,nbAtoms:c})};if(typeof o.js=="string"){let d=o.js.split(/\s+/).map(Number.parseFloat),p=0,f=Lr(g).map(b=>{let N=(b?.multiplicity||1)-1;return p+=N,{value:b.value,multiplicity:b?.multiplicity,js:d.slice(p-N,p)}}),F=f.reduce((b,N)=>b+(N.multiplicity?N.multiplicity-1:0),0);d.length!==F&&t?.warn(`The number of j values (${d.length}) is not equal to the sum of the multiplicities - 1 (${F})`);let h=[];for(let b of f){if(b.js.every(N=>N===b.js[0])){h.push(b);continue}if(b.multiplicity!==b.js.length+1){h.push(b);continue}for(let N=0;N<b.multiplicity-1;N++)h.push({value:"d",multiplicity:2,js:[b.js[N]]})}h.sort((b,N)=>N.js[0]-b.js[0]),y.js=h.map(b=>({coupling:b.js[0],multiplicity:b.value}))}typeof o.assignment=="string"&&(y.assignment=vr(o.assignment)),typeof o.multiplicity=="string"&&(y.multiplicity=o.multiplicity),n.multiplets.push(y)}return n}function kr(e){let r={};for(let t in e){let i=e[t],n=typeof i=="number"?i:Number.parseFloat(i);Number.isNaN(n)||(r[t]=n)}return r}var wr={quot:'"',apos:"'",comma:",",amp:"&",lpar:"(",rpar:")",lt:"<",gt:">",colon:":",semi:";"};function vr(e){return e.replaceAll(/&(\w+);/gi,(r,t)=>wr[t.toLowerCase()]||r)}function et(e){let r=e.split(/\r?\n/).filter(i=>i.trim()!==""),t=[];for(let i of r)if(i.startsWith("(")){let[n,o,s]=z(i).map(Number.parseFloat);t.push({id:n,x:o,y:s})}return t}function tt(e,r={}){let t={};if(!e["OBSERVED MULTIPLETS"])return[];let i=Qe(e["OBSERVED MULTIPLETS"],r);if(!i)return[];let{multiplets:n}=i;for(let o of n){let{id:s,from:l,to:a,integration:m=0,...u}=o;t[s]={from:l,to:a,integration:m,signals:[{id:s,...u}]}}if(e["OBSERVED MULTIPLETS PEAKS"]){let o=et(e["OBSERVED MULTIPLETS PEAKS"]),s={};for(let l of o){let{id:a,x:m,y:u}=l;s[a]||(s[a]=[]),s[a].push({x:m,y:u,width:.05})}for(let l in t)s[l]&&(t[l].signals[0].peaks=s[l])}return q(Object.values(t))}function rt(e,r){let i=[...e.getMolecularFormula().formula.matchAll(/(?<element>[A-Z][a-z]?)(?<count>\d*)/g)].map(o=>({element:o?.groups?.element,count:o?.groups?.count?Number(o.groups.count):1})),n=[...r.nucleus[0].matchAll(/[0-9]*(?<element>[A-Z][a-z]?)/g,"$element")][0].groups.element;return i.find(o=>o.element===n)?.count||100}function nt(e){let r={};return".PHASE0"in e&&(r.ph0=Number.parseFloat(e[".PHASE0"]),r.ph1=Number.parseFloat(e[".PHASE1"])),r}function he(e){let{ph0:r,ph1:t}=e;return Number.isFinite(r)&&Number.isFinite(t)}import{generateID as it}from"@zakodium/nmrium-core";function ot(e,r,t){for(let i=0;i<e.length;i++){if(r.includes(i))continue;let{delta:n,multiplicity:o="",diaIDs:s}=e[i],l=Number(n)-.01,a=Number(n)+.01;t.push({from:l,to:a,integration:1,id:it(),signals:[{id:it(),delta:n,multiplicity:o,diaIDs:s}]})}}import{linearSumAssignment as qr}from"linear-sum-assignment";import{xCostMatrix as $r}from"ml-spectra-processing";function st(e,r){let t=e.map(s=>s.delta),i=r.map(s=>s.delta),n=$r(i,t,{fct:(s,l)=>Math.abs(s-l)}),{rowAssignments:o}=qr(n,{maximaze:!1});return Array.from(o)}function at(e,r){let{assignments:t,ranges:i}=r;t?.sort((s,l)=>l.delta-s.delta);let n=[],o=[];for(let s of i){let l=0,{from:a,to:m}=s,u=[];for(let c=l;c<t.length;c++){let{delta:g}=t[c];g<=m&&g>=a?(u.push(t[c]),o.push(c)):g>m&&(l=c)}if(u.length>0){let c=s.signals,g=[],y=u.length>1&&c.length>1?st(c,u):[0];for(let d=0;d<u.length;d++){let p=y[d],{delta:f,multiplicity:F,diaIDs:h}=u[d];p>-1?g.push({...c[p],diaIDs:h}):g.push({delta:f,multiplicity:F,diaIDs:h})}s.signals=g,n.push(s)}}ot(t,o,n),n.sort((s,l)=>s.from-l.from),e.ranges={values:q(n).map(s=>{let{integration:l,...a}=s;return a}),options:{sum:r.integrationSum,isSumConstant:!0,sumAuto:!0}},e.ranges.options.moleculeId=String(r.moleculeId)}function lt(e,r,t,i,n){let{logger:o}=n,s={components:ut(e)?Wr(e,t.isFid):Ur(e)},{name:l=t.title||`jcamp_${mt()}`}=n,a={dependentVariables:[s],meta:r,info:{...t,name:v(l)}};return Br(e)&&Xr(a,i,r,e,t,{logger:o}),a}function ut(e){return"minMax"in e}function Br(e){return!ut(e)}function Ur(e){return e.spectra.map(r=>{let t=I(r.data);return{...r,data:t}})}function Wr(e,r){let t={...e.minMax,z:I(e.minMax?.z)};return r?Jr(t):{rr:t}}function Xr(e,r,t,i,n,o){let{assignmentsByBlocks:s}=r,l=nt(t);he(l)&&_r(e,l);let a=String(i.info.BLOCKID);if(s?.[a]){let{molecule:m,assignments:u,moleculeBlockID:c}=s[a],g=rt(m,n),y=I(i.spectra[0].data);if(y.x[0]>y.x[1])for(let F of i.spectra)F.data.x.reverse(),F.data.y.reverse();if(he(l)&&i.spectra.length>1){let{re:F}=Vr(i,l);y.y=F}let{x:d,y:p}=y,f=tt(t,o)??zr({x:d,y:p},{peakPicking:{frequency:n.originFrequency},ranges:{frequency:n.originFrequency,integrationSum:g}});at(e,{moleculeId:c,ranges:f,assignments:u,integrationSum:g})}}function Jr(e){let{z:r,...t}=e,i=[],n=[];for(let l=0;l<r.length;l+=2)i.push(r[l].slice()),n.push(r[l+1].slice());let o=ct(i),s=ct(n);return{re:{...t,z:i,minZ:o.min,maxZ:o.max},im:{...t,z:n,minZ:s.min,maxZ:s.max}}}function _r(e,r){let{ph0:t,ph1:i}=r;e.filters||(e.filters=[]),e.filters.push({id:mt(),name:"phaseCorrection",value:{ph0:t,ph1:i,absolute:!1},enabled:!0})}function Vr(e,r){let{ph0:t,ph1:i}=r,{re:n,im:o}=jr({re:e.spectra[0].data.y,im:e.spectra[1].data.y},t*Math.PI/180,i*Math.PI/180);return{re:n,im:o}}function pt(e,r,t){let{logger:i}=t,n=[];for(let o of e)if(o.spectra&&o.spectra.length>0||o.minMax){Hr(o);let s={...o.info,...o.meta},l=Y(s,{logger:i});if(l.experiment==="wobble_curve")continue;n.push(lt(o,s,l,r,t))}return n}function Hr(e){let r=e.meta["BRUKER FILE EXP"];if(!r)return;let i=(Array.isArray(r)?r:[r]).find(o=>o.slice(0,10).includes("vdlist"));if(!i)return;let n=i.split(`
|
|
6
|
+
`).slice(1);e.info.vdlistValues=X(n)}async function Q(e,r={}){let t=await e.text(),i=ft(t,{name:e.name,...r});return Ue(i,e,r)}function ft(e,r={}){let t={spectra:[],molecules:[]},{name:i,converter:n={},selector:o={},logger:s}=r,{keepRecordsRegExp:l=/.*/}=n,a={keepSpectra:!0,noContour:!0,noTrimRegExp:/\$MOLFILE/,keepRecordsRegExp:l,logger:s},m=Je(Gr(e),{name:i,...o,logger:s});for(let u of m)Kr(u,t,a,i);if(Zr(t,o),t.spectra.length===0&&m.length>0){let u=t.molecules.length===0?" nor molecule":"";s?.warn(`No spectra${u} data was loaded from file ${i}`)}return Yr(t)}function Kr(e,r,t,i){let n=[],o=[],s={molecules:[]},{logger:l}=t,a={name:i,logger:l};ge(e,o,t),Ge(o,s,n,a),r.spectra.push(...pt(n,s,a)),r.molecules.push(...s.molecules)}function Zr(e,r){r.index!==void 0&&(e.spectra=e.spectra.slice(r.index,r.index+1))}var ee=class{id="@zakodium/nmrium-core-plugins#JCAMPDXLoaderPlugin";version=1;migrations=[];onReadProcess;constructor(){this.onReadProcess={supportedExtensions:["jcamp","jdx","dx"],onFile:this.onReadProcessFile.bind(this)}}onReadProcessFile(r,t={}){let{sourceSelector:i={},converter:n,keepSource:o,logger:s}=t;return s?.debug(`Reading JCAMP-DX file: ${r.name}`),Q(r,{selector:this.getJCAMPDXSelector(i),converter:n?.jcamp,keepSource:o,logger:s})}getJCAMPDXSelector(r={}){let{jcamp:t={},general:i={}}=r,{dataSelection:n="both"}=i;return{...t,dataSelection:n}}};function be(){return new ee}import{formatSpectra as rn,getOneIfArray as nn}from"@zakodium/nmrium-core";import{getGyromagneticRatio as on}from"gyromagnetic-ratio";import{isAnyArray as sn}from"is-any-array";import{parseJEOL as an}from"jeolconverter";import cn from"lodash.merge";import{normalizeNucleus as mn}from"nmr-processing";import{isAnyArray as $}from"is-any-array";var dt={0:"uint8",1:"uint16",2:"uint32",3:"uint64",4:"int8",5:"int16",6:"int32",7:"int64",8:"float32",9:"float64",10:"complex64",11:"complex128"},gt={0:"scalar",1:"vector",2:"matrix",3:"symetricMatrix",4:"pixel"};function yt(e,r,t={}){let{quantityType:i=0,encoding:n="none",name:o="",unit:s="",quantityName:l="",sparseSampling:a={},from:m=[0],to:u=[-1]}=t;if($(e))throw new Error("JEOL with an array of data is not yet supported");if(!("re"in e&&"im"in e))throw new Error("Only re/im data is supported");let c=Pe(e,m,u),{componentLabels:g=c.componentLabels}=t;return{type:"internal",quantityType:gt[i],numericType:dt[r],encoding:n,name:o,unit:s,quantityName:l,componentLabels:g,sparseSampling:a,description:t.description||"",application:t.application||"",components:c.components,dataLength:c.dataLength}}function Qr(e){return $(e.re)&&$(e.im)}function en(e){return!$(e.re[0])}function Pe(e,r,t){let i=[],n=[],o=[];if(Qr(e))if(en(e)){i[0]=Fe(r[0],t[0],e.re.length);let s=new Float64Array(i[0]);for(let l=0;l<i[0];l+=2){let a=l+r[0]*2;s[l]=e.re[a/2],s[l+1]=e.im[a/2]}o.push(s),n.push("complex")}else if($(e.re[0])){i[0]=tn(r[1],t[1],e.re.length),i[1]=Fe(r[0],t[0],e.re[0].length);for(let s=0;s<i[0];s++){let l=new Float64Array(i[1]);for(let a=0;a<i[1];a+=2){let m=a+r[0]*2;l[a]=e.re[s][m/2],l[a+1]=e.im[s][m/2]}o.push(l)}}else throw new Error("check your object");else if($(e.re.re)){i[0]=Fe(r[1],t[1],e.re.re.length);let s=Pe(e.re,r,t).components,l=Pe(e.im,r,t).components;for(let a=0;a<i[0]/2;a++)o.push(s[a],l[a])}else throw new Error("check the dimension or the type of data in your array");return{dataLength:i,componentLabels:n,components:o}}function tn(e,r,t){return r-e+1<t?r-e+1:t}function Fe(e,r,t){return r-e+1<t?(r-e+1)*2:t*2}async function bt(e,r={}){let t=await e.arrayBuffer(),{name:i=v(e.name),keepSource:n=!1}=r,o={spectra:[],molecules:[]},l=pn(t)[0],{metadata:a,...m}=l.description,u=0,c=m.dimension===1?"1d":"2d",g="NMR SPECTRUM",y=m.dimension===1?m.nucleus[0]:m.nucleus,d=m.spectralWidthClipped[0],p;l.dependentVariables&&(m.dimension===1?p=ln(l):m.dimension===2&&(p=un(l)));for(let F in m)Array.isArray(m[F])&&m[F].length===1&&(m[F]=m[F][0]);let f={data:p,info:{...m,acquisitionMode:u,experiment:c,type:g,nucleus:y,spectralWidthClipped:d,name:i},meta:a};return n&&(f.sourceSelector={files:[e.relativePath]}),o.spectra=[f],rn(o)}function ln(e){let r=e.dimensions[0],t=e.dependentVariables,i=r.quantityName,n=r.count,o=r.increment.magnitude,s=r.originOffset.magnitude,l=r.coordinatesOffset.magnitude,a=t[0].components[0],m=new Float64Array(n),u=new Float64Array(n);for(let p=a.length-1,f=0;p>0;p-=2)m[f]=a[p-1],u[f++]=a[p];let c={},[g,y]=[0,0];switch(i){case"frequency":y=0+l/s*1e6,g=o/s*1e6,c.re=m,c.im=u;break;case"time":y=s,g=o,c.re=m.reverse(),c.im=u.reverse().map(p=>-p);break;default:break}let d=[];for(let p=0;p<n;p++)d.push(y+p*g);return c.x=d,c}function un(e){let r=e.dimensions,t=e.dependentVariables,i=r[0].quantityName,n=[],o=[],s=Number.MIN_SAFE_INTEGER,l=Number.MAX_SAFE_INTEGER,a=Number.MAX_SAFE_INTEGER,m=Number.MIN_SAFE_INTEGER;for(let g of t[0].components){let y=new Float64Array(g.length/2),d=new Float64Array(g.length/2);for(let p=g.length-1,f=0;p>0;p-=2){let F=g[p-1],h=g[p];F>s&&(s=F),F<l&&(l=F),h>m&&(m=h),h<a&&(a=h),y[f]=F,d[f++]=h}if(i==="frequency")n.push(y),o.push(d);else{let p=y.length,f=new Float64Array(d.length);for(let F=0,h=p-1;F<p;F++)f[F]=-d[h--];n.push(y.reverse()),o.push(f)}}let u={re:{z:n,minZ:l,maxZ:s},im:{z:o,minZ:a,maxZ:m}},c=["X","Y"];for(let g=0;g<c.length;g++){let y=r[g].count,d=r[g].increment.magnitude,p=r[g].originOffset.magnitude,f=r[g].coordinatesOffset.magnitude,F=c[g];for(let h of["re","im"])i==="frequency"?(u[h][`min${F}`]=0+f/p*1e6,u[h][`max${F}`]=y*(d/p)*1e6):(u[h][`min${F}`]=p,u[h][`max${F}`]=y*d)}return u}function pn(e){let r=an(e),t=r.info,i=r.headers,n=r.parameters,{dimension:o}=t,s={};for(let f of n.paramArray){let{name:F,value:h}=f;s[F]=Ft(h,o)}delete n.paramArray;let l=r.data,a={};a.title=`title: ${i.title} / comment: ${i.comment} / author:${i.author} / site: ${i.site}`,a.nucleus=t.nucleus.map(mn),a.sampleName=t.sampleName,a.date=t.date,a.epoch=t.epoch,a.localeDate=new Date(nn(t.epoch)).toLocaleString(),a.author=t.author,a.solvent=t.solvent,a.temperature=t.temperature.magnitude,a.probeName=t.probeName||"",a.fieldStrength=t.fieldStrength.magnitude;let m=a.nucleus.map(on);a.baseFrequency=m.map(f=>t.fieldStrength.magnitude*f/(2*Math.PI*1e6)),a.pulseSequence=t.experiment,a.temperature=t.temperature?.unit?.toLowerCase()==="celsius"?273.15+t.temperature.magnitude:t.temperature.magnitude,a.digitalFilter=t.digitalFilter,a.pulseStrength90=1/(4*t.pulseStrength90.magnitude),a.numberOfScans=t.numberOfScans,a.relaxationTime=t.relaxationTime.magnitude,a.isComplex=t.dataSections.includes("im"),a.isFid=t.dataUnits[0]==="Second",a.isFt=t.dataUnits[0]==="Ppm",a.dimension=t.dimension,a.originFrequency=t.originFrequency.map(f=>f.magnitude/1e6).slice(0,o),a.numberOfPoints=t.dataPoints.slice(0,1),a.frequencyOffset=t.frequencyOffset.map((f,F)=>f.magnitude*a.baseFrequency[F]).slice(0,o),a.acquisitionTime=t.acquisitionTime.map(f=>f.magnitude).slice(0,o),a.spectralWidth=t.spectralWidth.map((f,F)=>f.magnitude/t.originFrequency[F].magnitude*1e6).slice(0,o),a.spectralWidthClipped=t.spectralWidthClipped.map((f,F)=>f.magnitude/a.baseFrequency[F]*1e6).slice(0,o);let u=[],c={},g;for(let f=0;f<t.dimension;f++){if(g={magnitude:t.acquisitionTime[f].magnitude/(t.dataPoints[f]-1),unit:"s"},t.dataUnits[f]==="Second")c.quantityName="time",c.originOffset={magnitude:0,unit:"s"},f===0?c.coordinatesOffset={magnitude:t.digitalFilter*g.magnitude,unit:"s"}:c.coordinatesOffset={magnitude:0,unit:"s"},c.reciprocal={originOffset:{magnitude:t.originFrequency[f].magnitude,unit:"Hz"},quantityName:"frequency",coordinatesOffset:{magnitude:t.frequencyOffset[f].magnitude*t.originFrequency[f].magnitude/1e6,unit:"Hz"}};else if(t.dataUnits[f]==="Ppm"){c.quantityName="frequency";let F=t.originFrequency[f].magnitude;c.originOffset={magnitude:F,unit:"Hz"};let h=t.dataOffsetStart[f],N=t.dataOffsetStop[f]-h+1;g={magnitude:fn(t,f)/(N-1),unit:"Hz"};let R=t.dataAxisStop[f]*F/1e6;c.coordinatesOffset={magnitude:R,unit:"Hz"},N!==t.dataPoints[f]&&(t.dataPoints[f]=N)}f===0?c.description="direct dimension":c.description="indirect dimension",u.push({label:String(i.dataAxisTitles[f]),count:Number(t.dataPoints[f]),increment:g,type:"linear",description:String(c.description)||"",application:c.application||{},coordinatesOffset:c.coordinatesOffset||0,originOffset:c.originOffset||0,quantityName:String(c.quantityName)||"",reciprocal:c.reciprocal||{},period:c.period||0,complexFFT:c.complexFFT||!1})}let y=[];y.push(yt(l,11,{unit:"none",quantityName:"relative intensity",from:t.dataOffsetStart,to:t.dataOffsetStop}));let d={...a};return delete d.paramList,d.metadata={...ht(i,o),...ht(n,o),...cn({},s)},[{timeStamp:Date.now(),description:d,dimensions:u,dependentVariables:y}]}function fn(e,r){let{spectralWidth:t,spectralWidthClipped:i}=e;return i[r].magnitude!=="NA"?i[r].magnitude:t[r].magnitude}function ht(e,r){let t={};for(let i in e)t[i]=Ft(e[i],r);return t}function Ft(e,r){return sn(e)?r>1?e.slice(0,r):e[0]:e}var te=class{id="@zakodium/nmrium-core-plugins#JEOLLoaderPlugin";version=1;migrations=[];onReadProcess;constructor(){this.onReadProcess={supportedExtensions:["jdf"],onFile:this.onReadProcessFile.bind(this)}}onReadProcessFile(r,t={}){let{logger:i,keepSource:n}=t;return i?.debug(`Reading JEOL file: ${r.name}`),bt(r,{name:r.name,keepSource:n,logger:i})}};function Ne(){return new te}var re=class{id="@zakodium/nmrium-core-plugins#MolfileLoaderPlugin";version=1;migrations=[];onReadProcess;constructor(){this.onReadProcess={supportedExtensions:["mol"],onFile:this.onReadProcessFile.bind(this)}}onReadProcessFile(r,t={}){let{logger:i}=t;return i?.debug(`Reading molfile file: ${r.name}`),Ve(r,{logger:i})}};function De(){return new re}import{getSDF as Fn,nmrRecordToJSON as Pn}from"nmredata";import{generateID as Dt}from"@zakodium/nmrium-core";import{generateID as Pt}from"@zakodium/nmrium-core";import{xyIntegration as dn}from"ml-spectra-processing";function Nt(e,r){let{x:t,re:i}=r.data;return e.map(n=>{let o=dn({x:t,y:i},{from:n.from,to:n.to}),s=[];for(let l of n.signals||[]){let{kind:a=null,id:m,js:u=[],diaIDs:c=[],...g}=l;s.push({...g,kind:a||"signal",js:u,id:m||Pt(),diaIDs:c})}return{...n,id:n.id||Pt(),kind:s?.[0].kind||"signal",absolute:o,signals:s}})}function St(e,r){let t=[],{baseFrequency:i=500}=r.info;for(let n of e){let{delta:o,diaIDs:s=[],multiplicity:l="",integration:a=0}=n,m=n.jCoupling||[],u=gn({delta:o,js:m,frequency:i});if(m&&l&&m.length===l.length){m.sort((c,g)=>g.coupling-c.coupling);for(let c=0;c<m.length;c++)m[c].multiplicity=l[c]}t.push({id:Dt(),...u,integration:a,signals:[{id:Dt(),js:m,delta:o,diaIDs:s,multiplicity:l}]})}r.ranges.values=Nt(q(t),r)}function gn(e){let{delta:r,js:t=[],frequency:i}=e,n=.5;for(let o of t)n+=o.coupling;return n/=i,{from:r-n,to:r+n}}import{generateID as Rt}from"@zakodium/nmrium-core";var yn=["x","y"],hn={x:0,y:0};function Mt(e,r,t={}){let i=[],{shift:n=hn}=t,{originFrequency:o=[400,400]}=r.info,s={x:o[0],y:o[1]};for(let l of e){let a={x:{},y:{},id:Rt(),kind:"signal"},m={id:Rt(),kind:"signal",peaks:[]},u={x:10,y:10};for(let c of yn){let{coupling:g=[],delta:y,diaIDs:d=[]}=l[c];for(let p of g)u[c]+=p.coupling;if(l.activeCoupling){let{activeCoupling:p=[]}=l;for(let f of p)u[c]+=f.coupling}u[c]/=s[c],a[c]={from:y-u[c],to:y+u[c]},m[c]={delta:y,diaIDs:d,originalDelta:y-n[c]}}i.push({...a,signals:[m]})}r.zones.values=i}function At(e){return bn(e.data)}function bn(e){return"rr"in e||!("x"in e)&&"re"in e}async function xt(e,r,t={}){let i={spectra:[],molecules:[]},n=await Nn(e,r,t);if(n.spectra.length>0){let{spectra:o,molecules:s,usedFiles:l}=n;i.spectra.push(...o),i.molecules.push(...s);let a=e.files.length;for(let m=a-1;m>=0;m--){let u=e.files[m].relativePath;!u.match(/acqu.*/s)&&l.includes(u)&&e.files.splice(m,1)}}return i}async function Nn(e,r,t){let i=[],n=await Fn(e),o={spectra:[],molecules:[]};if(n.length===0)return{...o,usedFiles:i};let s=[];for(let a of n){let m=Pn({sdf:a,fileCollection:e}).then(u=>{let{spectra:c,molecules:g=[]}=u;return i.push(a.root+a.filename),o.molecules.push(...g),Dn(c,r,t)});s.push(m)}let l=await Promise.allSettled(s);for(let a of l)a.status==="fulfilled"?(o.spectra.push(...a.value.spectra),i.push(...a.value.usedFiles)):a.reason&&t?.logger?.error(a.reason);return{...o,usedFiles:i}}async function Dn(e,r,t){let i=[],n=[],o={spectra:[],molecules:[]};for(let s of e){let l=Sn(s.source,r,t).then(a=>{let{spectra:m,files:u}=a;i.push(...u);for(let c of m)At(c)?Mt(s.signals,c):St(s.signals,c);o.spectra.push(...m)});n.push(l)}return await Promise.allSettled(n),{...o,usedFiles:i}}async function Sn(e,r,t={}){let{file:i,jcampURL:n}=e,{converter:o}=t;if(n){let a=await Rn(n,r,o?.jcamp);if(a)return{...a,files:[]}}let s=[];for(let a of i||[])s.push(Mn(a,t).then(m=>({...m,files:a.fileCollection.files.map(u=>u.relativePath)})));let l=await Promise.allSettled(s);for(let a of l){if(a.status==="fulfilled")return a.value;a.reason&&t?.logger?.error(a.reason)}return{spectra:[],molecules:[],files:[]}}async function Rn(e,r,t={}){let i={entries:[{relativePath:e}]},n={name:v(e||""),xy:!0,noContours:!0,...t},{data:o}=await r.readFromWebSource(i,n);return o}async function Mn(e,r={}){let{converter:t,sourceSelector:i}=r;switch(e.type){case"jcamp":return Q(e.fileCollection.files[0],{name:e?.fileCollection.files[0].name||"",converter:t?.jcamp,selector:i?.jcamp,logger:r.logger,keepSource:r.keepSource});case"brukerFiles":return G(e.fileCollection,{converter:t?.bruker,selector:i});default:throw new Error("There is not a supported source")}}var ne=class{constructor(r){this.core=r;this.onReadProcess={onFiles:this.onReadProcessFiles}}id="@zakodium/nmrium-core-plugins#NMReDATALoaderPlugin";version=1;migrations=[];onReadProcess;onReadProcessFiles=(r,t)=>xt(r,this.core,t)};function Se(e){return new ne(e)}import{parse as An}from"sdf-parser";function Ct(e,r={}){let{mixedEOL:t}=r,{molecules:i}=An(e,{mixedEOL:t}),n=[];for(let{molfile:o}of i){let s=w(o);n.push(...s)}return n}async function Ot(e,r={}){let{logger:t,mixedEOL:i}=r,n=await e.text(),o=Ct(n,{mixedEOL:i}),s={molecules:o,spectra:[]};return t&&t[o.length>0?"info":"debug"](`Loaded ${s.molecules.length} molecules from the ${e.name} file`),s}var ie=class{id="@zakodium/nmrium-core-plugins#SDFLoaderPlugin";version=1;migrations=[];onReadProcess;constructor(){this.onReadProcess={supportedExtensions:["sdf"],onFile:this.onReadProcessFile.bind(this)}}onReadProcessFile(r,t={}){let{logger:i}=t;return i?.debug(`Reading sdf file: ${r.name}`),Ot(r,{logger:i})}};function Re(){return new ie}import{Molecule as xn}from"openchemlib";function It(e){let r=[],t=e.split(/\r?\n/).filter(Boolean);for(let i of t){let o=xn.fromSmiles(i).toMolfile();r.push({molfile:o})}return r}async function Tt(e,r={}){let t=await e.text(),i=It(t),n={molecules:i,spectra:[]};return r.logger?.info(`Found ${i.length} molecules from the ${e.name} file`),n}var oe=class{id="@zakodium/nmrium-core-plugins#SMILESLoaderPlugin";version=1;migrations=[];onReadProcess;constructor(){this.onReadProcess={supportedExtensions:["smi","smiles"],onFile:this.onReadProcessFile.bind(this)}}onReadProcessFile(r,t={}){let{logger:i}=t;return Tt(r,{logger:i})}};function Me(){return new oe}import{formatSpectra as In}from"@zakodium/nmrium-core";import{FileCollection as Tn}from"filelist-utils";import{isAnyArray as En}from"is-any-array";import{xMultiply as Ln}from"ml-spectra-processing";import{convert1D as kn}from"varian-converter";import{normalizeNucleus as Cn}from"nmr-processing";function Et(e,r){let{meta:t,procpar:i}=e,n={};for(let h of i)n[h.name]=h.values;let o={},s={},{np:l,solvent:a,sfrq:m,reffrq:u,temp:c,rp:g,sw:y,rfl:d,rfp:p}=n;P(o,"numberOfPoints",l&&Number(O(l))/2),P(o,"solvent",O(a)),P(o,"originFrequency",O(m)),P(o,"baseFrequency",O(u)),(Number.isNaN(o.originFrequency)||o.originFrequency===0)&&(o.originFrequency=400,r?.warn("The frequency could not be determined and was set to 400MHz")),P(o,"temperature",O(c)),P(o,"phc0",g&&Number(g[0])),P(s,"rfl",d&&Number(O(d))),P(s,"rfp",p&&Number(O(p))),P(s,"sw",y&&Number(O(y)));for(let h in s){let b=s[h];Array.isArray(b)&&b.length===1&&(s[h]=b[0])}if(!("baseFrequency"in o)&&"originFrequency"in o){let h=Number.parseFloat(o.originFrequency);if(["sw","rfl","rfp"].every(b=>b in s)){let{sw:b=1,rfl:N=1,rfp:S=1}=On(s,["sw","rfl","rfp"]);P(o,"baseFrequency",h-(b/2-N+S)/1e6)}else P(o,"baseFrequency",h)}let{baseFrequency:f,originFrequency:F}=o;P(o,"frequencyOffset",(F-f)*1e6),P(o,"spectralWidth",y&&Number(y[0])/o.baseFrequency);for(let h in o)o[h].length===1&&(o[h]=o[h][0]);return n.tn&&(o.nucleus=n.tn.map(Cn)),o.dimension=1,o.isFid=!t.status.isSpectrum,{info:o,meta:{...s,...Lt(t),...n}}}function O(e){return e&&(Array.isArray(e)?e[0]:e)}function On(e,r){let t={};for(let i of r){let n=e[i];n&&typeof n=="number"&&(t[i]=n)}return t}function Lt(e){let r={};for(let t of Object.keys(e)){let i=e[t];typeof i=="object"&&i!==null&&i.constructor&&i.constructor!==Object?r[t]=Lt(i):r[t]=i}return r}function kt(e){let r={},t=new Set(e.files.map(i=>i.relativePath));for(let i of e){let n=i.name.toLowerCase();if(n.match(/^(?:fid|procpar|text|log)$/)){if(n.match(/^(?:fid|text|log)$/)){let l=i.relativePath.replace(/(?:fid|text|log)$/,"procpar");if(!t.has(l))continue}let o=i.relativePath.split("/"),s=o.slice(0,-1).join("/");r[s]||(r[s]={name:o.at(-2),files:[]}),r[s].files.push(i)}}return Object.values(r)}async function wt(e,r={}){let{keepSource:t,logger:i}=r,n=kt(e);i&&i.debug(`Found ${Object.keys(n).length} varian experiments`);let o=[],s={spectra:[],molecules:[]};for(let a of n){let{name:m,files:u}=a,c=new Tn(u),g=kn(c).then(y=>{let{info:d,meta:p}=Et(y),f=y.fid.data[0],F=En(f.im),h={data:{...f,x:y.x},meta:p,info:{isComplex:F,name:m,...d},display:{name:m}};if(d.isFid&&F){let{im:b}=h.data;Ln(b,-1,{output:b})}u&&t&&(h.sourceSelector={files:u.map(b=>b.relativePath)}),s.spectra.push(h)});o.push(g)}let l=await Promise.allSettled(o);for(let a=0;a<l.length;a++){let m=l[a];if(m.status==="rejected"&&m.reason){let u=n[a].name;i?.warn(`Varian data: ${u}, fails with: ${m.reason}`)}}return s.spectra.length>0&&i?.info(`Loaded ${s.spectra.length} spectra from Varian files`),In(s)}var se=class{id="@zakodium/nmrium-core-plugins#VarianLoaderPlugin";version=1;migrations=[];onReadProcess;constructor(){this.onReadProcess={onFiles:this.onReadProcessFiles}}onReadProcessFiles=(r,t)=>{let{keepSource:i,logger:n}=t??{};return wt(r,{keepSource:i,logger:n})}};function Ae(){return new se}function vn(e,r=[]){return[Se(e),Ae(),de(),be(),De(),Re(),Me(),Ne(),ue()].concat(r)}function qn(){let e=new wn;return e.registerPlugins(vn(e)),e}import{getOneIfArray as qt}from"@zakodium/nmrium-core";import{from1DNMRVariables as $n}from"convert-to-jcamp";function vt(e,r){return e.filters.find(t=>t.name===r)}function jn(e,r={}){let{info:t,meta:i,data:n}=e,{onlyReal:o=!1}=r,{isFid:s,spectralWidth:l}=t,a=qt(t.baseFrequency||t.originFrequency),{x:m,re:u,im:c}=n,g=new Float64Array(u),y=!o&&c?new Float64Array(c):void 0,d={};B(d,"SW",l),B(d,"BF1",a);let p=vt(e,"fft")?.enabled,f={originFrequency:t.originFrequency,dataType:!t.isFid||p?"NMR SPECTRUM":"NMR FID",dataClass:!o&&c?"NTUPLES":"XYDATA"};if(s){let b=e.filters.find(N=>N.name==="digitalFilter");if(b&&!p){let{value:{digitalFilterValue:N},enabled:S}=b;if(S){let D=Math.floor(N);g.set(u.slice(u.length-D)),g.set(u.slice(0,u.length-D),D),c&&y&&(y.set(c.slice(c.length-D)),y.set(c.slice(0,c.length-D),D))}}B(f,"decim",t.decim),B(f,"dspfvs",t.dspfvs),B(f,"digitalFilter",t.digitalFilter)}let F={xyEncoding:"DIFDUP",info:{...t,...f},meta:{...i,...d}},h={x:{data:m,label:t.isFid?"TIME":"FREQUENCY",units:t.isFid?"second":"HZ",symbol:"X"},r:{data:g,label:`${t.isFid?"FID":"SPECTRUM"}/REAL`,units:"ARBITRARY UNITS",symbol:"R"}};return y&&(h.i={data:y,label:`${t.isFid?"FID":"SPECTRUM"}/IMAG`,units:"ARBITRARY UNITS",symbol:"I"}),$n(h,F)}function B(e,r,t){t!==void 0&&(e[r]=qt(t))}export{W as AutoPostProcessingPlugin,K as BrukerLoaderPlugin,ee as JCAMPDXLoaderPlugin,te as JEOLLoaderPlugin,re as MolfileLoaderPlugin,ne as NMReDATALoaderPlugin,ie as SDFLoaderPlugin,oe as SMILESLoaderPlugin,se as VarianLoaderPlugin,ue as autoPostProcessing,de as brukerLoader,qn as default,qn as init,be as jcampDXLoader,Ne as jeolLoader,De as molfileLoader,Se as nmreDATALoader,ft as processJCAMPDX,Ct as readSDF,It as readSMILES,vn as recommended,Re as sdfLoader,Me as smilesLoader,jn as spectrum1DToJCAMPDX,Ae as varianLoader};
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@zakodium/nmrium-core-plugins",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.1.1",
|
|
4
4
|
"description": "Recommended plugins for NMRium, loaders of common formats like bruker or jcamp, and some post-processing plugins",
|
|
5
5
|
"author": "",
|
|
6
6
|
"license": "CC-BY-NC-SA-4.0",
|
|
@@ -28,11 +28,11 @@
|
|
|
28
28
|
"bundle-esm": "npm run bundle-common -- --format=esm --outfile=./dist/nmrium-core-plugins.mjs",
|
|
29
29
|
"bundle-types": "npm run tsc && npm run api-extractor",
|
|
30
30
|
"check-types": "tsc --noEmit",
|
|
31
|
-
"clean": "rimraf types",
|
|
31
|
+
"clean": "rimraf types dist coverage",
|
|
32
32
|
"eslint": "eslint src --cache",
|
|
33
33
|
"eslint-fix": "npm run eslint -- --fix",
|
|
34
34
|
"dev:eslint-fix": "eslint --cache --fix $(git diff --name-only --relative) --quiet",
|
|
35
|
-
"prepack": "npm run bundle
|
|
35
|
+
"prepack": "npm run bundle",
|
|
36
36
|
"prettier": "prettier --check src",
|
|
37
37
|
"prettier-write": "prettier --write src",
|
|
38
38
|
"dev:prettier-write": "prettier --write $(git diff --name-only --relative)",
|
|
@@ -51,6 +51,7 @@
|
|
|
51
51
|
"eslint-config-cheminfo-typescript": "^18.0.0",
|
|
52
52
|
"fifo-logger": "^1.0.0",
|
|
53
53
|
"jcamp-data-test": "^0.8.3",
|
|
54
|
+
"jeol-data-test": "^0.5.2",
|
|
54
55
|
"jest-matcher-deep-close-to": "^3.0.2",
|
|
55
56
|
"msw": "^2.7.5",
|
|
56
57
|
"nmredata-data-test": "^0.4.0",
|
|
@@ -60,22 +61,21 @@
|
|
|
60
61
|
"vitest": "^3.0.9"
|
|
61
62
|
},
|
|
62
63
|
"dependencies": {
|
|
63
|
-
"@zakodium/nmrium-core": "^0.0
|
|
64
|
+
"@zakodium/nmrium-core": "^0.1.0",
|
|
64
65
|
"brukerconverter": "^8.0.3",
|
|
65
66
|
"convert-to-jcamp": "^5.4.11",
|
|
66
67
|
"filelist-utils": "^1.11.3",
|
|
67
68
|
"gyromagnetic-ratio": "^1.2.1",
|
|
68
69
|
"is-any-array": "^2.0.1",
|
|
69
70
|
"jcampconverter": "^11.0.1",
|
|
70
|
-
"jeol-data-test": "^0.5.2",
|
|
71
71
|
"jeolconverter": "^1.0.4",
|
|
72
72
|
"linear-sum-assignment": "^1.0.7",
|
|
73
73
|
"lodash.merge": "^4.6.2",
|
|
74
74
|
"ml-spectra-processing": "^14.11.0",
|
|
75
|
-
"nmr-processing": "^18.0.
|
|
75
|
+
"nmr-processing": "^18.0.1",
|
|
76
76
|
"nmredata": "^1.0.0",
|
|
77
|
-
"openchemlib": "^
|
|
78
|
-
"openchemlib-utils": "^
|
|
77
|
+
"openchemlib": "^9.0.1",
|
|
78
|
+
"openchemlib-utils": "^8.1.0",
|
|
79
79
|
"sdf-parser": "^7.0.4",
|
|
80
80
|
"varian-converter": "^2.0.1"
|
|
81
81
|
},
|