@zakodium/nmrium-core-plugins 0.0.1 → 0.1.0

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&&De(n,Date.parse(e.LONGDATE)),N(n,"pulseSequence",e[".PULSESEQUENCE"]||e[".PULPROG"]||e[`${t}PULPROG`]);let c=e[`${t}OWNER`];if(c&&N(n,"owner",c.replaceAll(/\$\$.*/gm,"")),N(n,"aqMod",e[`${t}AQ_mod`]),N(n,"experiment",re(n,e,{prefix:t})),n.nucleus=te(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&&N(n,"acquisitionScheme",Wr((0,k.getOneIfArray)(g,1))),N(n,"acquisitionMode",e[`${t}.ACQUISITIONMODE`]),M(n,"lpNumberOfCoefficients",e[`${t}NCOEF`]),M(n,"linearPredictionBin",e[`${t}LPBIN`]),M(n,"tdOff",e[`${t}TDoff`]),N(n,"windowMultiplicationMode",e[`${t}WDW`]),N(n,"title",e.TITLE),N(n,"solvent",e[".SOLVENTNAME"]),N(n,"temperature",e[`${t}TE`]||e[".TE"]),N(n,"type",e.DATATYPE),N(n,"dataClass",e[`${t}DATACLASS`]),N(n,"phc1",e[`${t}PHC1`]),N(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(N(n,"firstX",e[`${t}FIRSTX`]),N(n,"lastX",e[`${t}LASTX`]),N(n,"numberOfPoints",e[`${t}NPOINTS`]),N(n,"originFrequency",e[`${t}SFO1`]),n.dimension===1&&M(n,"originFrequency",e[".OBSERVEFREQUENCY"]),"originFrequency"in n&&(n.originFrequency=ne(n.originFrequency)),!n.originFrequency&&n.dimension===2&&".OBSERVEFREQUENCY"in e){let{nucleus:d}=n,p=ne(e[".OBSERVEFREQUENCY"]);if((0,ie.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,tt.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")?Jr(n,e,{...r,separator:s}):m.includes("nanalysis")&&Vr(n,e),m!=="mnova"&&m!=="mestre"){let d=n.nucleus[0],p=(0,et.getGyromagneticRatio)(d);if(N(n,"probeName",e[`${t}PROBHD`]),N(n,"baseFrequency",e[`${t}BF1`]),N(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?N(n,"baseFrequency",n.originFrequency):n.baseFrequency=ne(n.baseFrequency),!["baseFrequency","originFrequency"].some(b=>!n[b])&&p){let{baseFrequency:b}=n,P=2*Math.PI*(b[0]/p)*1e6;N(n,"fieldStrength",P)}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]),N(n,"numberOfPoints",e[`${t}TD`],!0);let f=n.numberOfPoints;if(N(n,"spectrumSize",e[`${t}SI`]??f),N(n,"sampleName",e[`${t}NAME`]),e[`${t}FNTYPE`]!==void 0&&N(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:P}=n;N(n,"acquisitionTime",Number((f[0]-1)/(2*b[0]*P[0])))}if(e[`${t}P`]){let b=1e6/((0,k.getOneIfArray)(e[`${t}P`]).split(s)[1].split(" ")[1]*4);N(n,"pulseStrength90",b)}if(e[`${t}D`]){let b=(0,k.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`]),N(n,"groupDelay",e[`${t}GRPDLY`]),N(n,"dspfvs",e[`${t}DSPFVS`]),N(n,"decim",e[`${t}DECIM`]),n.isFid&&("groupDelay"in n||u(["dspfvs","decim"]))){let{groupDelay:b,dspfvs:P,decim:R}=n,S=Ye(b?.[0]??0,P?.[0],R?.[0]);N(n,"digitalFilter",S)}let h;if(u(["numberOfPoints","spectralWidth"])){let{spectralWidth:b,numberOfPoints:P}=n;n.isFid?h=P.map(R=>n.acquisitionTime[0]/(R-1)):h=P.map((R,S)=>b[S]/(R-1))}if(N(n,"increment",h),e[`${t}DATE`]){let b=(0,k.getOneIfArray)(e[`${t}DATE`]),P=Number.parseInt(b,10)*1e3;Number.isNaN(P)?De(n,Date.parse(b)):De(n,P)}n.solvent||N(n,"solvent",(0,k.getOneIfArray)(e[`${t}SOLVENT`]))}if(n.dimension<2&&"dataClass"in n&&n.dataClass[0].toUpperCase()==="NTUPLES"&&(N(n,"last",T(e[`${t}LAST`])),N(n,"first",T(e[`${t}FIRST`])),N(n,"varDim",T(e[`${t}VARDIM`])),N(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;N(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;N(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);N(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&&Ur(e,n),Array.isArray(n.nucleus)||(n.nucleus=[n.nucleus]),n}function M(e,r,t){t!==void 0&&N(e,r,ne(t))}function De(e,r){if(!Number.isNaN(r)){e.epoch=r;let t=new Date(r);e.date=t.toUTCString(),e.localeDate=t.toLocaleString()}}function Ur(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 ne(e){if((0,ie.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 Wr(e){switch(String((0,ie.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 Jr(e,r,t={}){let{prefix:i="",separator:n=`
4
- `}=t;N(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=O(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 Vr(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=ee({phc0:a,phc1:m});e={...e,...u}}}var _r={keepRecordsRegExp:/.*/,keepFiles:!0};async function ae(e,r={}){let t={spectra:[],molecules:[]},{converter:i={},selector:n={},logger:o}=r,s=(0,se.groupByExperiments)(e,{logger:o,...Xr(n)}),l=[];for(let m of s)l.push((0,se.convertOneExperiment)(m,{..._r,...i}).then(u=>Hr(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=ee(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,nt.formatSpectra)(t)}function Hr(e,r={}){let{keepSource:t=!1,logger:i}=r,n={...e.info,...e.meta},o=oe(n,{logger:i}),s={},{isFid:l}=o;if(Yr(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=Z(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 Xr(e){let{general:r={},bruker:t={}}=e,{processingNumbers:i,experimentNumbers:n,...o}=t;return{...r,...o,processingNumbers:rt(i),experimentNumbers:rt(n)}}function rt(e){if(e)return e.split(/[^\d]+/).filter(Boolean).map(r=>Number.parseInt(r,10))}function Yr(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 B=class{id="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 ae(r,{converter:n?.bruker,selector:i,keepSource:o,logger:s})}};function ce(){return new B}var vt=require("@zakodium/nmrium-core"),qt=require("jcampconverter");function it(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 ot=require("jcampconverter");function Me(e,r,t){let{dataType:i,children:n}=e,o=i==="LINK"&&n?n:[e];for(let s of o){if(s.dataType==="LINK"){Me(s,r,t);continue}let l=(0,ot.convert)(s.jcamp,t);r.push(...l.flatten)}}function ct(e,r={}){let t=[],i=mt(e,r);for(let s of i?e:[])s.dataType==="LINK"?s.children=xe(s.children,r):s=xe([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 xe(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=xe(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(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))}
@@ -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&&ae(n,Date.parse(e.LONGDATE)),N(n,"pulseSequence",e[".PULSESEQUENCE"]||e[".PULPROG"]||e[`${t}PULPROG`]);let c=e[`${t}OWNER`];if(c&&N(n,"owner",c.replaceAll(/\$\$.*/gm,"")),N(n,"aqMod",e[`${t}AQ_mod`]),N(n,"experiment",_(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&&N(n,"acquisitionScheme",Xt(j(g,1))),N(n,"acquisitionMode",e[`${t}.ACQUISITIONMODE`]),M(n,"lpNumberOfCoefficients",e[`${t}NCOEF`]),M(n,"linearPredictionBin",e[`${t}LPBIN`]),M(n,"tdOff",e[`${t}TDoff`]),N(n,"windowMultiplicationMode",e[`${t}WDW`]),N(n,"title",e.TITLE),N(n,"solvent",e[".SOLVENTNAME"]),N(n,"temperature",e[`${t}TE`]||e[".TE"]),N(n,"type",e.DATATYPE),N(n,"dataClass",e[`${t}DATACLASS`]),N(n,"phc1",e[`${t}PHC1`]),N(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(N(n,"firstX",e[`${t}FIRSTX`]),N(n,"lastX",e[`${t}LASTX`]),N(n,"numberOfPoints",e[`${t}NPOINTS`]),N(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(ce(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=_t(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")?Yt(n,e,{...r,separator:s}):m.includes("nanalysis")&&Gt(n,e),m!=="mnova"&&m!=="mestre"){let d=n.nucleus[0],p=Vt(d);if(N(n,"probeName",e[`${t}PROBHD`]),N(n,"baseFrequency",e[`${t}BF1`]),N(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?N(n,"baseFrequency",n.originFrequency):n.baseFrequency=H(n.baseFrequency),!["baseFrequency","originFrequency"].some(b=>!n[b])&&p){let{baseFrequency:b}=n,P=2*Math.PI*(b[0]/p)*1e6;N(n,"fieldStrength",P)}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]),N(n,"numberOfPoints",e[`${t}TD`],!0);let f=n.numberOfPoints;if(N(n,"spectrumSize",e[`${t}SI`]??f),N(n,"sampleName",e[`${t}NAME`]),e[`${t}FNTYPE`]!==void 0&&N(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:P}=n;N(n,"acquisitionTime",Number((f[0]-1)/(2*b[0]*P[0])))}if(e[`${t}P`]){let b=1e6/(j(e[`${t}P`]).split(s)[1].split(" ")[1]*4);N(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`]),N(n,"groupDelay",e[`${t}GRPDLY`]),N(n,"dspfvs",e[`${t}DSPFVS`]),N(n,"decim",e[`${t}DECIM`]),n.isFid&&("groupDelay"in n||u(["dspfvs","decim"]))){let{groupDelay:b,dspfvs:P,decim:R}=n,S=Ie(b?.[0]??0,P?.[0],R?.[0]);N(n,"digitalFilter",S)}let h;if(u(["numberOfPoints","spectralWidth"])){let{spectralWidth:b,numberOfPoints:P}=n;n.isFid?h=P.map(R=>n.acquisitionTime[0]/(R-1)):h=P.map((R,S)=>b[S]/(R-1))}if(N(n,"increment",h),e[`${t}DATE`]){let b=j(e[`${t}DATE`]),P=Number.parseInt(b,10)*1e3;Number.isNaN(P)?ae(n,Date.parse(b)):ae(n,P)}n.solvent||N(n,"solvent",j(e[`${t}SOLVENT`]))}if(n.dimension<2&&"dataClass"in n&&n.dataClass[0].toUpperCase()==="NTUPLES"&&(N(n,"last",E(e[`${t}LAST`])),N(n,"first",E(e[`${t}FIRST`])),N(n,"varDim",E(e[`${t}VARDIM`])),N(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;N(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;N(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);N(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&&Ht(e,n),Array.isArray(n.nucleus)||(n.nucleus=[n.nucleus]),n}function M(e,r,t){t!==void 0&&N(e,r,H(t))}function ae(e,r){if(!Number.isNaN(r)){e.epoch=r;let t=new Date(r);e.date=t.toUTCString(),e.localeDate=t.toLocaleString()}}function Ht(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(ce(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 Xt(e){switch(String(ce(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 Yt(e,r,t={}){let{prefix:i="",separator:n=`
4
- `}=t;N(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=O(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 Gt(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=J({phc0:a,phc1:m});e={...e,...u}}}var er={keepRecordsRegExp:/.*/,keepFiles:!0};async function Y(e,r={}){let t={spectra:[],molecules:[]},{converter:i={},selector:n={},logger:o}=r,s=Qt(e,{logger:o,...rr(n)}),l=[];for(let m of s)l.push(Zt(m,{...er,...i}).then(u=>tr(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=J(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`),Kt(t)}function tr(e,r={}){let{keepSource:t=!1,logger:i}=r,n={...e.info,...e.meta},o=X(n,{logger:i}),s={},{isFid:l}=o;if(nr(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=U(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)}),ir(g,e),g}function rr(e){let{general:r={},bruker:t={}}=e,{processingNumbers:i,experimentNumbers:n,...o}=t;return{...r,...o,processingNumbers:Le(i),experimentNumbers:Le(n)}}function Le(e){if(e)return e.split(/[^\d]+/).filter(Boolean).map(r=>Number.parseInt(r,10))}function nr(e){let{info:r}=e;return r.twoD}function ir(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 G=class{id="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 Y(r,{converter:n?.bruker,selector:i,keepSource:o,logger:s})}};function me(){return new G}import{formatSpectra as $r}from"@zakodium/nmrium-core";import{createTree as jr}from"jcampconverter";function ke(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 or}from"jcampconverter";function le(e,r,t){let{dataType:i,children:n}=e,o=i==="LINK"&&n?n:[e];for(let s of o){if(s.dataType==="LINK"){le(s,r,t);continue}let l=or(s.jcamp,t);r.push(...l.flatten)}}function qe(e,r={}){let t=[],i=$e(e,r);for(let s of i?e:[])s.dataType==="LINK"?s.children=ue(s.children,r):s=ue([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 ue(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=ue(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(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.0.1",
3
+ "version": "0.1.0",
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",
@@ -32,7 +32,7 @@
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 && npm run bundle-types",
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.1",
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.0",
75
+ "nmr-processing": "^18.0.1",
76
76
  "nmredata": "^1.0.0",
77
- "openchemlib": "^8.19.0",
78
- "openchemlib-utils": "^6.6.0",
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
  },