@zakodium/nmrium-core-plugins 0.6.18 → 0.6.20

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.
@@ -2,7 +2,7 @@ var oi=Object.defineProperty;var xt=(e,t)=>{for(var r in t)oi(e,r,{get:t[r],enum
2
2
  `)){if(!h)continue;let[d,b]=h.trim().match(/\s*([\d.]+)\s*([a-zA-Z]+)/)?.slice(1)||[];b&&p.push(`${d}${b}`)}r.meta.vdlist=p}if(e.difflist){let p=[];for(let h of e.difflist.split(`
3
3
  `)){if(!h)continue;let[d]=h.trim().match(/\s*([\d.]+)\s*/)?.slice(1)||[];p.push(d)}r.meta.difflist=p}r.meta.SW_p||(r.meta.SW_p=r.meta.SW_h),r.meta.SF||(r.meta.SF=r.meta.SFO1);let s=["2rr","2ri","2ir","2ii"].some(p=>p in e);r.meta.nbSubSpectra=s?Number.parseInt(r.meta.SI[1],10):Number.parseInt(r.meta.TD[1],10);let a=0,c=0,l=0,m=0;if(s){let p=Number(r.meta.SF[1]),h=Number(r.meta.SW_p[1]||r.meta.SW[1]);m=Number(r.meta.OFFSET[1]),l=Number(r.meta.OFFSET[0]),a=m,c=m-h/p,r.meta.firstY=a,r.meta.lastY=c,de({rr:e["2rr"],ri:e["2ri"],ir:e["2ir"],ii:e["2ii"]},r,t)}else if(e.ser){a=0,c=r.meta.nbSubSpectra;let p=Number(r.meta.SW[0]),h=Number(r.meta.SW[1]),d=Number(r.meta.SFO1[0]),b=Number(r.meta.SFO1[1]),F=Number(r.meta.O1[0]),S=Number(r.meta.O1[1]);l=F/d+p/2,m=S/b+h/2,ge(e.ser,r,t)}if(t.keepSpectra){let{nbSubSpectra:p}=r.meta,h=(c-a)/(p-1),d=a;for(let b=0;b<p;b++)d+=h,r.spectra[b].pageValue=d}let{NUC1:u,AXNUC:f,SF:g}=r.meta,y=f||u||[];return r.info["2D_Y_NUCLEUS"]=y[1],r.info["2D_X_NUCLEUS"]=y[0],r.info["2D_Y_FRECUENCY"]=g[1],r.info["2D_X_FRECUENCY"]=g[0],r.info["2D_Y_OFFSET"]=m,r.info["2D_X_OFFSET"]=l,r.info.twoD=!0,r.twoD=!0,r}async function He(e,t={}){let r,n=!1,i=!1;if(["ser","2rr","2ri","2ir","2ii"].some(s=>s in e))n=!0,r=await jt(e,t);else if(e["1r"]||e["1i"]||e.fid)i=!0,r=await qt(e,t);else throw new RangeError("The current files are invalid");let o={name:e.name,expno:e.expno,isFID:!!e.isFID};for(let s in e){let a=s;(typeof e[a]).match(/number|string|boolean/)&&(o[a]=e[a])}r.source=n?{...o,is2D:n}:{...o,is1D:i},t.keepFiles&&(r.source.files=e.fileCollectionItems),r.meta.DATE=Number(r.meta.DATE),r.meta.GRPDLY&&(Ve(r.meta,"DSPFVS",r.meta.DSPFVS),Ve(r.meta,"GRPDLY",r.meta.GRPDLY),Ve(r.meta,"DECIM",r.meta.DECIM));for(let s in r.meta)Array.isArray(r.meta[s])&&(r.meta[s].length===1||typeof r.meta[s][0]=="string"&&r.meta[s][0].includes("(0.."))&&(r.meta[s]=r.meta[s][0]);return r}function Ve(e,t,r){r!==void 0&&(Array.isArray(r)?e[t]=r.slice():e[t]=[r])}var B={};xt(B,{ECHO_ANTIECHO:()=>Vi,QF:()=>$i,QSEC:()=>zi,STATES:()=>Wi,STATES_TPPI:()=>Xi,TTPI:()=>Ji});var $i=1,zi=2,Ji=3,Wi=4,Xi=5,Vi=6;import{formatSpectra as yo}from"@zakodium/nmrium-core";function ye(e){let t=[];for(let r of e){if(!r)continue;let{groups:{value:n,unit:i}={}}=r.trim().match(/[$$]*\s*(?<value>[\d.]+)\s*(?<unit>[a-zA-Z]+)/)||{};t.push(Hi(n,i))}return t}function Hi(e,t){switch(t.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 Ut}from"is-any-array";function U(e){if(Gi(e))return Yi(e)?e.map(Bt):Bt(e);if(typeof e=="object"&&e!==null){let t={};for(let r in e)t[r]=U(e[r]);return t}return e}function Gi(e){return Ut(e)}function Bt(e){return Float64Array.from(e)}function Yi(e){return Ut(e[0])}import{isAnyArray as fo}from"is-any-array";import{getOneIfArray as Zi}from"@zakodium/nmrium-core";var Ki=new Map([[String(H.QSIM),"notPhaseSensitive"],["notphasesensitive","notPhaseSensitive"],[String(H.QSEQ),"QSEQ"],["qseq","QSEQ"],[String(B.TTPI),"TPPI"],["tppi","TPPI"],[String(B.STATES),"States"],["states","States"],[String(B.STATES_TPPI),"States-TPPI"],["tppi-states","States-TPPI"],["states-tppi","States-TPPI"],[String(B.ECHO_ANTIECHO),"Echo-antiecho"],["echo-antiecho","Echo-antiecho"]]);function $t(e){let t=String(e).toLowerCase().replaceAll(" ","");return Ki.get(t)}function D(e,t,r,n=!1){r===void 0||t in e&&!n||(Array.isArray(r)?e[t]=r.map(zt):e[t]=[zt(r)])}function zt(e){return typeof e=="string"&&(e.startsWith("<")&&e.endsWith(">")&&(e=e.slice(1,-1)),e=e.replace(/\$.*/,"").trim()),e}function G(e){return Array.isArray(e)?e.map(Jt):Jt(e)}function Jt(e){return typeof e=="string"?Number.parseFloat(e):e}function P(e,t,r){r!==void 0&&D(e,t,G(r))}function Wt(e,t,r){let{prefix:n=""}=r,i=t[`${n}.ACQUISITIONSCHEME`]||t[`${n}FnMODE`];i&&D(e,"acquisitionScheme",$t(Zi(i,1))),D(e,"acquisitionMode",t[`${n}.ACQUISITIONMODE`]),P(e,"lpNumberOfCoefficients",t[`${n}NCOEF`]),P(e,"linearPredictionBin",t[`${n}LPBIN`]),P(e,"tdOff",t[`${n}TDoff`])}import{getOneIfArray as oo}from"@zakodium/nmrium-core";import{UTCDate as Qi}from"@date-fns/utc";import{getOneIfArray as eo}from"@zakodium/nmrium-core";import{getTime as Vt,isValid as Ht,parse as to,parseISO as ro}from"date-fns";import{removeComment as no}from"jcampconverter";function Xt(e,t){if(t!==null&&Number.isInteger(t)){e.epoch=t;let r=new Date(t);e.date=r.toISOString(),e.localeDate=r.toLocaleString()}}function Gt(e,t,r={}){let n=t.LONGDATE??eo(t.DATE);if(!n)return;let{separator:i}=r,o=Number(n)*1e3;Xt(e,o||io(n,i))}function io(e,t){let r=no(e,t),n=ro(r,{});if(Ht(n)){let o=n.getTimezoneOffset()*60*1e3;return Vt(n)-o}let i=["dd/MM/yyyy HH:mm:ss","EEE MMM dd HH:mm:ss yyyy","dd/MM/yyyy HH:mm:ss","yyyy/MM/dd HH:mm:ss.SSS X","yyyy/MM/dd HH:mm:ssX","yyyy/MM/dd HH:mm:ss.SSS","yyyy/MM/dd HH:mm:ss","yyyy/MM/dd HH:mm","yyyy/MM/dd","yy/MM/dd"];for(let o of i){let s=to(r,o,new Qi,{useAdditionalDayOfYearTokens:!0});if(Ht(s))return Vt(s)}return null}function Yt(e,t,r){let{prefix:n="",separator:i}=r;(t.LONGDATE||t.DATE)&&Gt(e,t,{separator:i}),D(e,"pulseSequence",t[".PULSESEQUENCE"]||t[".PULPROG"]||t[`${n}PULPROG`]);let o=t[`${n}OWNER`];if(o&&D(e,"owner",o.replaceAll(/\$\$.*/gm,"")),D(e,"title",t.TITLE),D(e,"aqMod",t[`${n}AQ_mod`]),D(e,"windowMultiplicationMode",t[`${n}WDW`]),D(e,"experiment",ce(e,t,{prefix:n})),D(e,"solvent",t[".SOLVENTNAME"]||oo(t[`${n}SOLVENT`])),D(e,"temperature",t[`${n}TE`]||t[".TE"]),D(e,"type",t.DATATYPE),D(e,"dataClass",t[`${n}DATACLASS`]),D(e,"phc0",t[`${n}PHC0`]),D(e,"phc1",t[`${n}PHC1`]),e.type){let s=e.type[0].toUpperCase();s.includes("FID")?(e.isFid=!0,e.isComplex=!0):s.includes("SPECTRUM")&&(e.isFt=!0)}if(D(e,"firstX",t[`${n}FIRSTX`]),D(e,"lastX",t[`${n}LASTX`]),D(e,"numberOfPoints",t[`${n}NPOINTS`]),`${n}REVERSE`in t){let s=t[`${n}REVERSE`];e.reverse=(Array.isArray(s)?s:[s]).map(a=>typeof a=="string"?a.includes("yes"):a)}}function Kt(e){let{JCAMPDX:t="",ORIGIN:r=""}=e,n=String(t).toLowerCase()+String(r).toLowerCase();return"SPECTROMETER/DATASYSTEM"in e&&(n=e["SPECTROMETER/DATASYSTEM"]),(n.includes("mestre")||n.includes("nova"))&&(n="mnova"),n}import{isAnyArray as so}from"is-any-array";import{calculateRelativeFrequency as ao}from"nmr-processing";function Zt(e,t,r){let{prefix:n=""}=r;if(P(e,"originFrequency",t[`${n}SFO1`]),e.dimension===1&&P(e,"originFrequency",t[".OBSERVEFREQUENCY"]),!e.originFrequency&&e.dimension===2&&".OBSERVEFREQUENCY"in t){let i=G(t[".OBSERVEFREQUENCY"]);if(so(i)&&i.length>1){let o=t[`${n}SYMBOL`].split(","),s=o.findIndex(c=>c.includes("2")),a=o.findIndex(c=>c.includes("1"));s!==-1&&a!==-1?e.originFrequency=[i[s],i[a]]:e.originFrequency=i.slice()}else typeof i=="number"&&(e.originFrequency=ao(e.nucleus,i))}(!e.originFrequency||e.originFrequency.some(i=>Number.isNaN(i)||i===0))&&(e.originFrequency=e.dimension>1?[400,400]:[400],r.logger?.warn("Frequency could not be determined, set to 400 MHz"))}function C(e,t,r=""){return e.every(n=>`${r}${n}`in t)}import{matrixTranspose as co}from"ml-spectra-processing";function ne(e,t){return co(e).map(t)}function Qt(e,t,r){let{prefix:n=""}=r,i=t[`${n}REFERENCE_POINT`];if(!("baseFrequency"in e)&&"originFrequency"in e&&D(e,"baseFrequency",e.originFrequency),!("frequencyOffset"in e)&&i&&C(["spectralWidth","baseFrequency"],e)){let o=typeof i=="number"?i:Number(t[`${n}REFERENCE_POINT`].match(/(?<reference>[+-]?\d+(?:\.\d+)?)\s*.*/)?.groups?.reference);if(!Number.isNaN(o)){let{spectralWidth:s,baseFrequency:a}=e;D(e,"frequencyOffset",.5*s[0]*a[0]-o)}}if(!("frequencyOffset"in e)&&C(["baseFrequency","originFrequency"],e)){let{baseFrequency:o,originFrequency:s}=e;D(e,"frequencyOffset",ne([s,o],a=>(a[0]-a[1])*1e6))}!e.frequencyOffset[0]&&".SHIFTREFERENCE"in t&&lo(t,e)}function lo(e,t){let r=e[".SHIFTREFERENCE"],n=r.trim().startsWith("(")?/\((?<data>[^)]+)\)/:/(?<data>[^)]+)/,i=r.match(n);if(i.groups.data){let o=i.groups.data.split(",");if(o.length<4)return;let s=Number.parseInt(t.numberOfPoints,10),{spectralWidth:a,baseFrequency:c}=t,l=Number.parseInt(o[2],10),m=Number.parseFloat(o[3]),u;if(t.isFid){if(!C(["numberOfPoints","spectralWidth"],t))return;u=m+(s*.5-l)*a/s}else if(C(["firstX","lastX","numberOfPoints"],t)){let f=Number.parseFloat(t.firstX),g=Number.parseFloat(t.lastX),y=(g+f)/2,p=(g-f)/(s+1),h=p<0?f:g+(l-1)*p;u=(y-h)/c+m}u!==void 0&&!Number.isNaN(u)&&(t.frequencyOffset=u*c)}}import{isAnyArray as Y}from"is-any-array";function he(e){return typeof e=="number"}function be(e){let{phc0:t,phc1:r}=e;return!Y(t)&&!he(t)||!Y(r)&&!he(r)||Y(t)&&!he(t[0])||Y(r)&&!he(r[0])?{}:(Y(r)?r[0]*=-1:r*=-1,Y(t)?t[0]*=-1:t*=-1,{phc0:t,phc1:r})}function er(e,t){let{T1NUCLEUS:r,T2NUCLEUS:n,PAGE:i}=t;e.pulseSequence=t.EXPERIMENT||t[".PULSESEQUENCE"];let o=[],{dimension:s,isComplex:a}=e;if(s===2&&e.pulseSequence==="T1"){let m=a?2:1;for(let u=0;u<i.length;u+=m){let f=i[u].replace(/T1=/,"");o.push(Number(f))}t.vdlistValues=o}e.nucleus=s>1?[n,r]:[n];let{phc0:c,phc1:l}=e;if(c&&l){let m=be({phc0:c,phc1:l});e={...e,...m}}}import{getOneIfArray as nr}from"@zakodium/nmrium-core";import{getGyromagneticRatio as mo}from"gyromagnetic-ratio";function rr(e,t,r){if(e>0)return e;if(t>14||t===0)return 0;if(tr[t]){let n=tr[t];if(!n[r])throw new Error(`decim ${r} not in lookup table for dspfvs ${t}`);return n[r]}else throw new Error(`dspfvs ${t} not in lookup table`)}var tr={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}};function ir(e,t,r){let{prefix:n=""}=r,i=e.nucleus[0],o=mo(i);if(D(e,"probeName",t[`${n}PROBHD`]),D(e,"baseFrequency",t[`${n}BF1`]||t[`${n}SF`]),P(e,"scaleFactor",t[`${n}NC_proc`]),"scaleFactor"in e&&(e.scaleFactor=e.scaleFactor.map(a=>2**a)),!("baseFrequency"in e)&&"originFrequency"in e?D(e,"baseFrequency",e.originFrequency):e.baseFrequency=G(e.baseFrequency),o&&C(["baseFrequency","originFrequency"],e)){let a=2*Math.PI*(e.baseFrequency[0]/o)*1e6;D(e,"fieldStrength",a)}if(P(e,"spectralWidth",t[`${n}SW`]||t[`${n}QM_SPECTRAL_WIDTH`]),e.dimension===1&&t[`${n}SweepWidth`]&&e.originFrequency&&P(e,"spectralWidth",t[`${n}SweepWidth`]/e.originFrequency[0]),D(e,"numberOfPoints",t[`${n}TD`],!0),D(e,"spectrumSize",t[`${n}SI`]??e.numberOfPoints),D(e,"sampleName",t[`${n}NAME`]),t[`${n}FNTYPE`]!==void 0&&D(e,"acquisitionMode",Number.parseInt(t[`${n}FNTYPE`],10)),t[`${n}VARNAME`]?.split(",")[0]==="TIME"){let a=typeof t.LAST=="string"?t.LAST.replace(" ","").split(",")[0]:t.LAST;P(e,"acquisitionTime",a)}if(!e.acquisitionTime&&C(["numberOfPoints","spectralWidth"],e)){let{spectralWidth:a,originFrequency:c,numberOfPoints:l}=e;D(e,"acquisitionTime",(l[0]-1)/(2*a[0]*c[0]))}if(t[`${n}P`]){let a=1e6/(nr(t[`${n}P`]).split(r.separator||`
4
4
  `)[1].split(" ")[1]*4);D(e,"pulseStrength90",a)}if(t[`${n}D`]){let a=nr(t[`${n}D`]).split(r.separator||`
5
- `)[1].split(" ")[1];P(e,"relaxationTime",a)}if(P(e,"numberOfScans",t[`${n}NS`]||t[`${n}QM_NSCANS`]),D(e,"groupDelay",t[`${n}GRPDLY`]),D(e,"dspfvs",t[`${n}DSPFVS`]),D(e,"decim",t[`${n}DECIM`]),e.isFid&&("groupDelay"in e||C(["dspfvs","decim"],e))){let{groupDelay:a,dspfvs:c,decim:l}=e,m=rr(a?.[0]??0,c?.[0],l?.[0]);D(e,"digitalFilter",m)}if(C(["numberOfPoints","spectralWidth"],e)){let{spectralWidth:a,numberOfPoints:c}=e,l=c.map((m,u)=>e.isFid?e.acquisitionTime[0]/(m-1):a[u]/(m-1));D(e,"increment",l)}}function $(e,t=","){if(e&&typeof e=="string")return e.split(t)}function or(e,t,r){let{prefix:n=""}=r,i=e.dimension<2,o=e.dataClass?.[0].toUpperCase()==="NTUPLES",s=C(["LAST","FIRST","VARDIM","SYMBOL"],t,n);if(i&&(o||s)&&(D(e,"last",$(t[`${n}LAST`])),D(e,"first",$(t[`${n}FIRST`])),D(e,"varDim",$(t[`${n}VARDIM`])),D(e,"symbols",$(t[`${n}SYMBOL`])),e.symbols&&Array.isArray(e.symbols))){e.symbols.includes("R")&&e.symbols.includes("I")&&(e.isComplex=!0);let a=e.symbols.findIndex(c=>c.toLowerCase()==="x");if(P(e,"firstX",e.first[a]),P(e,"lastX",e.last[a]),P(e,"numberOfPoints",e.varDim[a]),!("spectralWidth"in e)){let{lastX:c,numberOfPoints:l,firstX:m,originFrequency:u}=e;D(e,"spectralWidth",e.isFid?ne([l,c],f=>f[0]/(2*f[1])):ne([c,m,u],f=>Math.abs(f[0]-f[1])/f[2]))}}}import{normalizeNucleus as uo}from"nmr-processing";function Fe(e,t,r){let n=[];if(e[`${r}AXNUC`]&&(n=e[`${r}AXNUC`],Array.isArray(n)||(n=[n]),n=v(n)),n.length===0&&e[`${r}NUC1`]&&(n=e[`${r}NUC1`],Array.isArray(n)||(n=[n]),n=v(n)),n.length===0&&e[".NUCLEUS"]){let i=$(e[".NUCLEUS"]);if(e[`${r}SYMBOL`]){let o=e[`${r}SYMBOL`].split(","),s=o.findIndex(c=>c.includes("2")),a=o.findIndex(c=>c.includes("1"));s!==-1&&a!==-1&&i?n=v([i[s],i[a]]):n=v(i).toReversed()}else n=v(i)}return n.length===0&&e[".OBSERVENUCLEUS"]&&(n=v([e[".OBSERVENUCLEUS"]])),n.length===0&&t.experiment&&(n=v(sr(t.experiment[0]))),po(e)&&(n=[e["2D_X_NUCLEUS"].replaceAll(/[^A-Za-z0-9]/g,""),e["2D_Y_NUCLEUS"].replaceAll(/[^A-Za-z0-9]/g,"")]),t.experiment&&(t.experiment[0].match("jres")||t.experiment[0].match("dosy"))&&(n=sr(t.experiment[0])),n.map(uo)}function po(e){return e["2D_X_NUCLEUS"]&&!e["2D_X_NUCLEUS"].includes("off")&&e["2D_Y_NUCLEUS"]&&!e["2D_Y_NUCLEUS"].includes("off")}function sr(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 v(e){if(!e)return[];let t=e.map(n=>String(n).replaceAll(/[^A-Za-z0-9]/g,"").replace("NA","").replace("off","")),r=0;for(let n of t)n||r++;return r===0?t:[]}function ar(e,t,r){let{logger:n,prefix:i=""}=r;if(e.nucleus=Fe(t,e,i),e.nucleus.length===0)if(n)n.warn("No nucleus detected, assuming 1H"),e.nucleus=["1H"];else throw new Error("No nucleus detected");e.dimension=e.nucleus.length}function cr(e,t,r={}){let{prefix:n="",separator:i=`
5
+ `)[1].split(" ")[1];P(e,"relaxationTime",a)}if(P(e,"numberOfScans",t[`${n}NS`]||t[`${n}QM_NSCANS`]),D(e,"groupDelay",t[`${n}GRPDLY`]),D(e,"dspfvs",t[`${n}DSPFVS`]),D(e,"decim",t[`${n}DECIM`]),e.isFid&&("groupDelay"in e||C(["dspfvs","decim"],e))){let{groupDelay:a,dspfvs:c,decim:l}=e,m=rr(a?.[0]??0,c?.[0],l?.[0]);D(e,"digitalFilter",m)}if(C(["numberOfPoints","spectralWidth"],e)){let{spectralWidth:a,numberOfPoints:c}=e,l=c.map((m,u)=>e.isFid?e.acquisitionTime[0]/(m-1):a[u]/(m-1));D(e,"increment",l)}}function $(e,t=","){if(e&&typeof e=="string")return e.split(t)}function or(e,t,r){let{prefix:n=""}=r,i=e.dimension<2,o=e.dataClass?.[0].toUpperCase()==="NTUPLES",s=C(["LAST","FIRST","VARDIM","SYMBOL"],t,n);if(i&&(o||s)&&(D(e,"last",$(t[`${n}LAST`])),D(e,"first",$(t[`${n}FIRST`])),D(e,"varDim",$(t[`${n}VARDIM`])),D(e,"symbols",$(t[`${n}SYMBOL`])),e.symbols&&Array.isArray(e.symbols))){e.symbols.includes("R")&&e.symbols.includes("I")&&(e.isComplex=!0);let a=e.symbols.findIndex(c=>c.toLowerCase()==="x");if(P(e,"firstX",e.first[a]),P(e,"lastX",e.last[a]),P(e,"numberOfPoints",e.varDim[a]),!("spectralWidth"in e)){let{lastX:c,numberOfPoints:l,firstX:m,originFrequency:u}=e;D(e,"spectralWidth",e.isFid?ne([l,c],f=>f[0]/(2*f[1])):ne([c,m,u],f=>Math.abs(f[0]-f[1])/f[2]))}}}import{normalizeNucleus as uo}from"nmr-processing";function Fe(e,t,r){let n=[];if(e[`${r}AXNUC`]&&(n=e[`${r}AXNUC`],Array.isArray(n)||(n=[n]),n=v(n)),n.length===0&&e[`${r}NUC1`]&&(n=e[`${r}NUC1`],Array.isArray(n)||(n=[n]),n=v(n)),n.length===0&&e[".NUCLEUS"]){let s=$(e[".NUCLEUS"]);if(e[`${r}SYMBOL`]){let a=e[`${r}SYMBOL`].split(","),c=a.findIndex(m=>m.includes("2")),l=a.findIndex(m=>m.includes("1"));c!==-1&&l!==-1&&s?n=v([s[c],s[l]]):n=v(s).toReversed()}else n=v(s)}n.length===0&&e[".OBSERVENUCLEUS"]&&(n=v([e[".OBSERVENUCLEUS"]])),n.length===0&&t.experiment&&(n=v(sr(t.experiment[0]))),po(e)&&(n=[e["2D_X_NUCLEUS"].replaceAll(/[^A-Za-z0-9]/g,""),e["2D_Y_NUCLEUS"].replaceAll(/[^A-Za-z0-9]/g,"")]);let{pulseSequence:i=[""],experiment:o}=t;return!i[0].toLowerCase().match("1d")&&o&&(o[0].match("jres")||o[0].match("dosy"))&&(n=sr(t.experiment[0])),n.map(uo)}function po(e){return e["2D_X_NUCLEUS"]&&!e["2D_X_NUCLEUS"].includes("off")&&e["2D_Y_NUCLEUS"]&&!e["2D_Y_NUCLEUS"].includes("off")}function sr(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 v(e){if(!e)return[];let t=e.map(n=>String(n).replaceAll(/[^A-Za-z0-9]/g,"").replace("NA","").replace("off","")),r=0;for(let n of t)n||r++;return r===0?t:[]}function ar(e,t,r){let{logger:n,prefix:i=""}=r;if(e.nucleus=Fe(t,e,i),e.nucleus.length===0)if(n)n.warn("No nucleus detected, assuming 1H"),e.nucleus=["1H"];else throw new Error("No nucleus detected");e.dimension=e.nucleus.length}function cr(e,t,r={}){let{prefix:n="",separator:i=`
6
6
  `}=r;D(e,"spectralWidth",t[`${n}SweepWidth`]/e.originFrequency[0]);let o=t[`${n}.PULSESEQUENCE`].split(i),s=[];t[".OBSERVENUCLEUS"]&&s.push(t[".OBSERVENUCLEUS"]),t.INDIRECTNUCLEUS&&s.push(t.INDIRECTNUCLEUS),e.nucleus=v(s),e.pulseSequence=o[0];let a=o.slice(2,-1);if(s.length>1)if(s[0]===s[1])e.spectralWidth.push(e.spectralWidth[0]);else{let c=JSON.stringify(a).match(/\$\$SW1=\s*(?<sw>[+-]?(?:[0-9]*[.])?[0-9]+)/);if(c?.groups){let{originFrequency:l}=e,m=Number.parseFloat(c.groups.sw);e.spectralWidth.push(m/l[1])}}}function xe(e,t={}){let{prefix:r="",logger:n}=t,i={creator:Kt(e),dimension:0,nucleus:[],isFid:!1,isFt:!1},o=JSON.stringify(e),s=/\r\n/.exec(o)?`\r
7
7
  `:`
8
8
  `,a=[Yt,ar,Wt,Zt],{creator:c=""}=i;c.includes("nanalysis")?a.push(er):c.toLocaleLowerCase().includes("oxford instruments")&&a.push(cr),c!=="mnova"&&c!=="mestre"&&a.push(ir),a.push(or,Qt);for(let l of a)l(i,e,{prefix:r,logger:n,separator:s});return go(i)}function go(e){return e.dimension===1&&(e.nucleus=[e.nucleus]),Object.fromEntries(Object.entries(e).map(([t,r])=>[t,fo(r)&&r.length===1?r[0]:r]))}var ho={keepRecordsRegExp:/.*/,keepFiles:!0};async function De(e,t={}){let r={spectra:[],molecules:[]},{converter:n={},selector:i={},logger:o}=t,s=ze(e,{logger:o,...Fo(i)}),a=[];for(let l of s)a.push(He(l,{...ho,...n,keepFiles:!0}).then(m=>bo(m,t)));let c=await Promise.allSettled(a);for(let l=0;l<c.length;l++){let m=c[l];if(m.status==="fulfilled"){let u=be(m.value.info);r.spectra.push({...m.value,info:{...m.value.info,...u}})}else if(m.reason){let u=s[l].name;o?.warn(`Bruker data: ${u}, fails with: ${m.reason}`);continue}}return o&&o[r.spectra.length>0?"info":"debug"](`Loaded ${r.spectra.length} spectra from Bruker files`),yo(r)}function bo(e,t={}){let{logger:r}=t,n={...e.info,...e.meta},i=xe(n,{logger:r}),o={},{isFid:s}=i;if(xo(e)){let f=e.minMax;for(let g in f){let y=f[g];y&&(y.z=U(y.z))}o.components=e.minMax}else i.dimension===1&&(o.components=e.spectra);let{source:a}=e,{expno:c,name:l,files:m}=a;n.vdlist&&(n.vdlistValues=ye(n.vdlist));let u={dependentVariables:[o],meta:n,info:{...i,experimentNumber:c,name:l}};return m&&(u.selector={files:m.map(f=>f.relativePath)}),Do(u,e),u}function Fo(e){let{general:t={},bruker:r={}}=e,{processingNumbers:n,experimentNumbers:i,...o}=r;return{...t,...o,processingNumbers:lr(n),experimentNumbers:lr(i)}}function lr(e){if(e)return e.split(/[^\d]+/).filter(Boolean).map(t=>Number.parseInt(t,10))}function xo(e){let{info:t}=e;return t.twoD}function Do(e,t){if(!("integrals"in t))return;let{integrals:r=[]}=t;e.integrals={values:r.map(n=>{let{from:i,to:o,integration:s}=n;return{from:i,to:o,integral:s,kind:"signal"}})}}function Ao(e,t){let{selector:r,converter:n,logger:i}=t??{};return De(e,{converter:n?.bruker,selector:r,logger:i})}function Ge(){return So({id:"@zakodium/nmrium-core-plugins#BrukerLoaderPlugin",version:1,shouldSerialize:!0,migrations:[],onReadProcess:{onFiles:Ao}})}import{defineNMRiumPlugin as ss}from"@zakodium/nmrium-core";import{formatSpectra as rs}from"@zakodium/nmrium-core";import{createTree as ns}from"jcampconverter";function mr(e,t,r={}){let{selector:n={}}=r;for(let i=0;i<e.spectra.length;i++){let o=e.spectra[i];o.selector={files:[t.relativePath],jcamp:{index:i,...n}}}return e}import{convert as Io}from"jcampconverter";function Ye(e,t,r){let{dataType:n,children:i}=e,o=n==="LINK"&&i?i:[e];for(let s of o){if(s.dataType==="LINK"){Ye(s,t,r);continue}let a=Io(s.jcamp,r);t.push(...a.flatten)}}function fr(e,t={}){let r=[],n=dr(e,t);for(let s of n?e:[])s.dataType==="LINK"?s.children=Ke(s.children,t):s=Ke([s],t)[0],r.push(s);let{name:i,logger:o}=t;return e.length===0&&o?.warn(`There is no data ${i?`in ${i}`:"in the JCAMP-DX"}`),r}function Ke(e=[],t={}){let{name:r,logger:n,tree:i=[],dataSelection:o="both"}=t,s=[];for(let m of e){let{dataType:u,dataClass:f}=m;if(u==="LINK")m.children=Ke(m.children,t);else if(i.some(g=>{let{dataClass:y=f,dataType:p=u}=g;return f===y&&u===p})){n?.warn(`Skipping ${f} and ${u} ${r?`in ${r}`:"in the JCAMP-DX"},
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@zakodium/nmrium-core-plugins",
3
- "version": "0.6.18",
3
+ "version": "0.6.20",
4
4
  "description": "Recommended plugins for NMRium, loaders of common formats like bruker or jcamp, and some post-processing plugins",
5
5
  "author": "Zakodium Sàrl",
6
6
  "license": "CC-BY-NC-SA-4.0",
@@ -36,7 +36,7 @@
36
36
  "bruker-data-test": "^1.0.0",
37
37
  "esbuild": "^0.27.0",
38
38
  "fifo-logger": "^2.0.1",
39
- "jcamp-data-test": "^2.4.0",
39
+ "jcamp-data-test": "^2.5.0",
40
40
  "jeol-data-test": "^1.0.0",
41
41
  "jest-matcher-deep-close-to": "^3.0.2",
42
42
  "msw": "^2.12.3",
@@ -47,18 +47,18 @@
47
47
  },
48
48
  "dependencies": {
49
49
  "@date-fns/utc": "^2.1.1",
50
- "@zakodium/nmrium-core": "^0.5.0",
50
+ "@zakodium/nmrium-core": "^0.5.1",
51
51
  "cheminfo-types": "^1.8.1",
52
52
  "convert-to-jcamp": "^6.0.0",
53
53
  "date-fns": "^4.1.0",
54
- "file-collection": "^6.3.0",
54
+ "file-collection": "^6.5.0",
55
55
  "gyromagnetic-ratio": "^2.0.0",
56
56
  "is-any-array": "^2.0.1",
57
- "jcampconverter": "^12.0.3",
57
+ "jcampconverter": "^12.0.4",
58
58
  "linear-sum-assignment": "^1.0.9",
59
59
  "lodash.merge": "^4.6.2",
60
- "ml-spectra-processing": "^14.18.1",
61
- "nmr-processing": "^22.0.0",
60
+ "ml-spectra-processing": "^14.18.2",
61
+ "nmr-processing": "^22.0.1",
62
62
  "openchemlib": "^9.18.2",
63
63
  "openchemlib-utils": "^8.8.1",
64
64
  "sdf-parser": "^7.0.4"
@@ -66,5 +66,5 @@
66
66
  "volta": {
67
67
  "extends": "../../../package.json"
68
68
  },
69
- "gitHead": "0ff1a936a58bd6558cb50d8ec618e2dbf2f1f70b"
69
+ "gitHead": "30e7019e4d2d497e5b1bd1822eee7a7319073725"
70
70
  }