@zakodium/nmrium-core-plugins 0.6.29 → 0.6.31
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,4 +1,4 @@
|
|
|
1
|
-
var si=Object.defineProperty;var xt=(e,t)=>{for(var r in t)si(e,r,{get:t[r],enumerable:!0})};import{NMRiumCore as Fa}from"@zakodium/nmrium-core";import{defineNMRiumPlugin as xi}from"@zakodium/nmrium-core";import{nextPowerOfTwo as di}from"ml-spectra-processing";import{Filters1D as gi,Filters2D as yi}from"nmr-processing";import{getOneIfArray as ai}from"@zakodium/nmrium-core";function ce(e={},t={},r={}){e===null&&(e={}),typeof e=="string"&&(e={pulseSequence:e});let n=Array.isArray(e.pulseSequence)?e.pulseSequence[0]:e.pulseSequence||"";if(typeof n!="string")return e.dimension?`${e.dimension}d`:"";if(n=n.toLowerCase(),n.includes("zg")||n.includes("single_pulse_dec")||n.includes("udeft"))return"1d";if(n.includes("hsqct")||n.includes("invi")&&(n.includes("ml")||n.includes("di")))return"hsqctocsy";if(n.includes("hsqc")||n.includes("invi"))return"hsqc";if(n.includes("hmbc")||n.includes("inv4")&&n.includes("lp"))return"hmbc";if(n.includes("hmqc"))return"hmqc";if(n.includes("cosy"))return"cosy";if(n.includes("jres"))return"jres";if(n.includes("dosy"))return"dosy";if(n.includes("tocsy")||n.includes("mlev")||n.includes("dipsi"))return"tocsy";if(n.includes("noesy"))return"noesy";if(n.includes("roesy"))return"roesy";if(n.includes("dept"))return"dept";if(n.includes("jmod")||n.includes("apt"))return"aptjmod";if(n.includes("inad"))return"inadequate";if(n.includes("adeq"))return"adequate";let{prefix:i=""}=r,o=(ai(t[`${i}SPECTYP`])||"").replace(/^<(.*)>$/,"$1").toLowerCase();return o.length>0&&o!=="undefined"?o:e.dimension?`${e.dimension}d`:""}import{getOneIfArray as Dt}from"@zakodium/nmrium-core";var ci=["no","exponential","modifiedGaussian","sine","qsine","trap","user","sinc","qsinc","traf","trafs"];function li(e){return e in At}function qe(e,t){let{prefix:r="",index:n=0}=t,i=Dt(e[`${r}WDW`],n),o=ci[i?Number(i):0],s={};if(!li(o))return s;let a=At[o];if(a){let{kind:c,parameters:l}=a,m={};for(let u in l){let f=l[u],{source:g,processor:y}=f;if(g){let p=Dt(e[`${r}${g}`],n),h=Number.parseFloat(String(p));if(Number.isNaN(h))continue;m[u]=y?y(h):h}else f.value!==void 0&&(m[u]=f.value)}s[c]={apply:!0,options:m}}return s}var At={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:St},exponent:{value:1}}},qsine:{kind:"sineSquare",parameters:{offset:{source:"SSB",processor:St}}},traf:{kind:"traf",parameters:{lineBroadening:{source:"LB"}}}};function St(e){return e===0||e===1?0:1/e}var It={sineBell:Nt({offset:0})},Mt={cosy:{...It},hmbc:{...It},hsqc:{sineBell:Nt({offset:.5})}},mi={...Mt};function je(e="",t=1){let r=ui(e),n={},i=t===1?Mt[r||""]:mi[r||""];return i&&(n=structuredClone(i)),n}function Nt(e){return{apply:!0,options:e}}function ui(e){let r=e.toLowerCase().match(/cosy|hsqc|hmbc/);return r?r[0]:null}function Pt(e,t={}){let{prefix:r="",experiment:n=ce(e)}=t;return e[`${r}WDW`]?{f2:qe(e,{...t,index:0}),f1:qe(e,{...t,index:1})}:{f2:je(n,1),f1:je(n,2)}}import{Filters1D as pi}from"nmr-processing";var Be=["digitalFilter","backwardLinearPrediction","forwardLinearPrediction","apodization","zeroFilling","fft",["shiftX","phaseCorrection","baselineCorrection"]],W={};for(let e=0;e<Be.length;e++){let t=Be[e];for(let r of Array.isArray(t)?t:[t])W[r]=e}for(let e of Object.values(pi))e.name in W||(W[e.name]=Be.length);import{Filters2D as fi}from"nmr-processing";var Ue=["digitalFilter2D","blpDimension1","flpDimension1","apodizationDimension1","zeroFillingDimension1","fftDimension1","blpDimension2","flpDimension2","nusDimension2","apodizationDimension2","zeroFillingDimension2","fftDimension2","phaseCorrectionTwoDimensions",["shift2DX","shift2DY","symmetrizeCosyLike"]],X={};for(let e=0;e<Ue.length;e++){let t=Ue[e];for(let r of Array.isArray(t)?t:[t])X[r]=e}for(let e of Object.values(fi))e.name in X||(X[e.name]=Ue.length);var hi=new Set;function bi(e,t){let{filter:r,experimentalFeatures:n=!1}=t,{name:i}=r;({...gi,...yi})[i]&&(e.some(s=>s.name===i)||hi.has(i)&&!n||e.push({...r,enabled:!0}))}function Tt(e,t={}){let{data:r}=e;if(!r)return;let{autoProcessing:n,experimentalFeatures:i}=t,o=(a,c)=>bi(a,{...c,experimentalFeatures:i}),{spectra:s}=r;for(let a of s){let{data:c,info:l,meta:m,filters:u}=a,{dimension:f,isFid:g}=l;if(g){if(f===1){let y=c.re.length,{tdOff:p,digitalFilter:h}=l;if(h&&h>0&&o(u,{filter:{name:"digitalFilter",value:{digitalFilterValue:h}}}),!n)continue;p&&Math.abs(p)>0&&o(u,{filter:{name:"backwardLinearPrediction",value:{nbInputs:y/2}}}),o(u,{filter:{name:"apodization",value:{exponential:{apply:!0,options:{lineBroadening:1}}}}}),o(u,{filter:{name:"zeroFilling",value:{nbPoints:2*y}}}),o(u,{filter:{name:"fft",value:{}}}),o(u,{filter:{name:"phaseCorrection",value:Fi(l)}}),u.sort((d,b)=>W[d.name]-W[b.name])}else if(f===2){if(!n)continue;let y=c.re.z.length,p=c.re.z[0].length,{tdOff:h,experiment:d=""}=l,b=l.spectrumSize,{nuslist:F,NusTD:S}=m;Array.isArray(b)&&b.length>1?(F&&(b[1]=Math.max(di(S[1]),1024)),b[1]=Et(b[1],y),b[0]=Et(b[0],p)):b=[Math.max(p,1024),Math.max(y,1024)];let I=d.toLowerCase().includes("cosy");h&&Math.abs(h[0])>0&&o(u,{filter:{name:"blpDimension1",value:{nbInputs:p/2}}});let x=Pt(m,{experiment:d});o(u,{filter:{name:"apodizationDimension1",value:x.f2}}),o(u,{filter:{name:"zeroFillingDimension1",value:{nbPoints:b[0]}}}),o(u,{filter:{name:"fftDimension1",value:{}}}),m&&"nuslist"in m&&o(u,{filter:{name:"nusDimension2",value:{}}}),o(u,{filter:{name:"apodizationDimension2",value:x.f1}}),o(u,{filter:{name:"zeroFillingDimension2",value:{nbPoints:b[I?0:1]}}}),I?o(u,{filter:{name:"symmetrizeCosyLike",value:{}}}):o(u,{filter:{name:"phaseCorrectionTwoDimensions",value:{}}}),o(u,{filter:{name:"fftDimension2",value:{}}}),u.sort((A,M)=>X[A.name]-X[M.name])}}}}function Et(e,t,r=1024){return e<t?Math.max(t,r):e>t?Math.min(e,r):Math.max(t,r)}function Fi(e){let{phc0:t=0,phc1:r=0}=e;return Ot([t,r])?{}:{ph0:t,ph1:r}}function Ot(e){return Array.isArray(e)?e.every(t=>!t&&t===0):Ot([e])}function $e(){return xi({id:"@zakodium/nmrium-core-plugins#AutoPostProcessingPlugin",version:1,shouldSerialize:!0,migrations:[],onReadProcess:{onProcessing:Tt}})}import{defineNMRiumPlugin as Io}from"@zakodium/nmrium-core";import{FileCollection as $c}from"file-collection";var Ct=["acqus","acqu2s"],le=["procs","proc2s"];function Rt(e){return e.is1D?Di(e):e.is2D?Si(e):{checked:!1,message:"Multi-dimensional n > 2 is not supported"}}function Di(e){let t=e.isFID?["acqus"]:["acqus","procs"],r=t.every(n=>e[n]);return{checked:r,message:r?"":`File: ${e[e.isFID?"fid":"1r"]?.relativePath} is ignored, files: ${t.join(",")} are required.`}}function Si(e){let t=e.isFID?Ct:Ct.concat(le),r=t.every(n=>e[n]);return r&&e.isFID&&le.some(n=>e[n])&&!le.every(n=>e[n])&&(r=!1,t.push(...le)),{checked:r,message:r?"":`File: ${e.name} is ignored, files: ${t.join(",")} are required.`}}function ze(e,t={}){let{logger:r,processingNumbers:n,experimentNumbers:i,dataSelection:o="both",keep1D:s=!0,keep2D:a=!0,onlyFirstProcessedData:c=!0}=t,l={},m=e.files.map(g=>g.relativePath);for(let g of e){let y,p,h,d=g.relativePath.split("/"),b=d.indexOf("pdata");if(b!==-1)y=Number(d[b+1]),p=Number(d[b-1]),h=d.slice(0,-3).join("/");else if(Ii(g,m)){let S=d.indexOf(g.name);p=Number(d[S-1]),h=d.slice(0,-1).join("/")}else continue;if(Number.isNaN(p)&&(p=void 0),Number.isNaN(y)&&(y=void 0),i&&!i.includes(p))continue;l[h]||(l[h]={name:h,expno:p,processedData:{},fileCollectionItems:[]});let F=l[h];if(g.name==="vdlist"&&(F.vdlist=g),g.name==="difflist"&&(F.difflist=g),y){F.processedData||(F.processedData={}),F.processedData[y]||(F.processedData[y]={fileCollectionItems:[],name:h,expno:p,procno:y});let S=F.processedData[y];S.fileCollectionItems.push(g),g.name.match(/^(?:1r|1i|2rr|2ir|2ii|2ri|procs|proc2s|title|integrals.txt)$/)&&(S[g.name]=g),g.name==="2rr"&&(S.is2D=!0,S.isFT=!0),g.name==="1r"&&(S.is1D=!0,S.isFT=!0)}else F.fileCollectionItems.push(g),g.name.match(/^(?:ser|fid|acqus|acqu2s|nuslist)$/)&&(F[g.name]=g),g.name==="ser"&&(F.is2D=!0,F.isFID=!0),g.name==="fid"&&(F.is1D=!0,F.isFID=!0);g.name==="QuantFactorSample.xml"&&(F.quantFactorSample=g)}if(n)for(let g in l){let y=l[g].processedData,p={};for(let h in y)n.includes(Number.parseInt(h,10))&&(p[h]=y[h]);l[g].processedData=p}else if(c)for(let g in l){let y=l[g].processedData,p=Object.keys(y??{});p.sort((d,b)=>Number(d)-Number(b));let h=p[0];y&&h!==void 0&&(l[g].processedData={firstProcessedNumber:y[h]})}let u=Mi(r),f=[];for(let g in l){let y=l[g],{processedData:p,...h}=y;if(u(y,o)){let b=Object.keys(p??{});if(p&&b.length>0){let F=p[b[0]];F.procs&&(h.fileCollectionItems.push(F.procs),h.procs=F.procs),F.proc2s&&(h.fileCollectionItems.push(F.proc2s),h.proc2s=F.proc2s),F["integrals.txt"]&&(h.integrals=F["integrals.txt"])}f.push(h)}let d="ser"in h||"fid"in h;if(o==="fid"||o==="preferFID"&&d){r?.warn("Skipping FT data because it does not match the import filters");continue}for(let b in p){let F=p[b];(F["1r"]||F["2rr"])&&(h.acqus&&F.fileCollectionItems.push(h.acqus),h.acqu2s&&F.fileCollectionItems.push(h.acqu2s),h.vdlist&&(F.vdlist=h.vdlist),f.push({integrals:F["integrals.txt"],acqus:h.acqus,acqu2s:h.acqu2s,...F}))}}return s||(r?.warn("Skipping 1D data because it does not match the import filters"),f=f.filter(g=>!g.is1D)),a||(r?.warn("Skipping 2D data because it does not match the import filters"),f=f.filter(g=>!g.is2D)),Ai(f,t.logger)}function Ai(e,t){return e.filter(r=>{let{checked:n,message:i}=Rt(r);return n||t?.warn(i),n})}function Ii(e,t){return e.name.match(/^(?:ser|acqus|acqu2s|nuslist|vdlist|difflist|QuantFactorSample.xml)$/)||e.name.match(/^fid$/)&&t.includes(e.relativePath.replace(/fid$/,"acqus"))}function Mi(e){return(t,r)=>{let{processedData:n}=t,i=Object.keys(n??{}),o=n&&i.length>0&&["1r","1i","2rr"].some(m=>m in n[i[0]]),s="ser"in t||"fid"in t,l=s&&(r!=="ft"&&r!=="preferFT"||r==="preferFT"&&!o);return s&&!l&&e?.warn("Skipping RAW data because it does not match import filters"),l}}function me(e){if(e===void 0||Array.isArray(e)&&e.length===0)return{epoch:null,date:""};let t=e[0]*1e3;return{epoch:t,date:new Date(t).toUTCString()}}function ue(e,t){for(let r in t.meta)e.meta[r]===void 0&&(e.meta[r]=t.meta[r]);for(let r in t.info)e.info[r]===void 0&&(e.info[r]=t.info[r]);for(let r in e.meta)Array.isArray(e.meta[r])||(e.meta[r]=[e.meta[r]])}import{convert as Ni}from"jcampconverter";async function _(e,t){if(!e)return wt();let r=await e.text(),{keepRecordsRegExp:n=/.*/}=t,i=Ni(r,{keepRecordsRegExp:n});return i.flatten.length===0?wt():i.flatten[0]}function wt(){return{info:{},meta:{},tmp:{},spectra:[],ntuples:{}}}async function vt(e){let r=(await e.integrals?.text())?.split(/\r?\n/).slice(3).filter(Boolean)??[],n=[];for(let i=1;i<r.length;i++){let o=r[i].replace(/^\s*/,"").replaceAll(/[\s\t]+/g,";").match(/\d+;(?<from>[0-9.]+);(?<to>[0-9.]+);(?<integration>[0-9.]+)/)?.groups;if(o){let{from:s,to:a,integration:c}=o;n.push({from:Number.parseFloat(s),to:Number.parseFloat(a),integration:Number.parseFloat(c)})}}return n}function Je(e,t="utf8"){return new TextDecoder(t).decode(e)}var Pi=new TextEncoder;function Lt(e){return Pi.encode(e)}var Ei=1024*8,Ti=(()=>{let e=new Uint8Array(4),t=new Uint32Array(e.buffer);return!((t[0]=1)&e[0])})(),We={int8:globalThis.Int8Array,uint8:globalThis.Uint8Array,int16:globalThis.Int16Array,uint16:globalThis.Uint16Array,int32:globalThis.Int32Array,uint32:globalThis.Uint32Array,uint64:globalThis.BigUint64Array,int64:globalThis.BigInt64Array,float32:globalThis.Float32Array,float64:globalThis.Float64Array},R=class e{buffer;byteLength;byteOffset;length;offset;lastWrittenByte;littleEndian;_data;_mark;_marks;constructor(t=Ei,r={}){let n=!1;typeof t=="number"?t=new ArrayBuffer(t):(n=!0,this.lastWrittenByte=t.byteLength);let i=r.offset?r.offset>>>0:0,o=t.byteLength-i,s=i;(ArrayBuffer.isView(t)||t instanceof e)&&(t.byteLength!==t.buffer.byteLength&&(s=t.byteOffset+i),t=t.buffer),n?this.lastWrittenByte=o:this.lastWrittenByte=0,this.buffer=t,this.length=o,this.byteLength=o,this.byteOffset=s,this.offset=0,this.littleEndian=!0,this._data=new DataView(this.buffer,s,o),this._mark=0,this._marks=[]}available(t=1){return this.offset+t<=this.length}isLittleEndian(){return this.littleEndian}setLittleEndian(){return this.littleEndian=!0,this}isBigEndian(){return!this.littleEndian}setBigEndian(){return this.littleEndian=!1,this}skip(t=1){return this.offset+=t,this}back(t=1){return this.offset-=t,this}seek(t){return this.offset=t,this}mark(){return this._mark=this.offset,this}reset(){return this.offset=this._mark,this}pushMark(){return this._marks.push(this.offset),this}popMark(){let t=this._marks.pop();if(t===void 0)throw new Error("Mark stack empty");return this.seek(t),this}rewind(){return this.offset=0,this}ensureAvailable(t=1){if(!this.available(t)){let n=(this.offset+t)*2,i=new Uint8Array(n);i.set(new Uint8Array(this.buffer)),this.buffer=i.buffer,this.length=n,this.byteLength=n,this._data=new DataView(this.buffer)}return this}readBoolean(){return this.readUint8()!==0}readInt8(){return this._data.getInt8(this.offset++)}readUint8(){return this._data.getUint8(this.offset++)}readByte(){return this.readUint8()}readBytes(t=1){return this.readArray(t,"uint8")}readArray(t,r){let n=We[r].BYTES_PER_ELEMENT*t,i=this.byteOffset+this.offset,o=this.buffer.slice(i,i+n);if(this.littleEndian===Ti&&r!=="uint8"&&r!=="int8"){let a=new Uint8Array(this.buffer.slice(i,i+n));a.reverse();let c=new We[r](a.buffer);return this.offset+=n,c.reverse(),c}let s=new We[r](o);return this.offset+=n,s}readInt16(){let t=this._data.getInt16(this.offset,this.littleEndian);return this.offset+=2,t}readUint16(){let t=this._data.getUint16(this.offset,this.littleEndian);return this.offset+=2,t}readInt32(){let t=this._data.getInt32(this.offset,this.littleEndian);return this.offset+=4,t}readUint32(){let t=this._data.getUint32(this.offset,this.littleEndian);return this.offset+=4,t}readFloat32(){let t=this._data.getFloat32(this.offset,this.littleEndian);return this.offset+=4,t}readFloat64(){let t=this._data.getFloat64(this.offset,this.littleEndian);return this.offset+=8,t}readBigInt64(){let t=this._data.getBigInt64(this.offset,this.littleEndian);return this.offset+=8,t}readBigUint64(){let t=this._data.getBigUint64(this.offset,this.littleEndian);return this.offset+=8,t}readChar(){return String.fromCharCode(this.readInt8())}readChars(t=1){let r="";for(let n=0;n<t;n++)r+=this.readChar();return r}readUtf8(t=1){return Je(this.readBytes(t))}decodeText(t=1,r="utf8"){return Je(this.readBytes(t),r)}writeBoolean(t){return this.writeUint8(t?255:0),this}writeInt8(t){return this.ensureAvailable(1),this._data.setInt8(this.offset++,t),this._updateLastWrittenByte(),this}writeUint8(t){return this.ensureAvailable(1),this._data.setUint8(this.offset++,t),this._updateLastWrittenByte(),this}writeByte(t){return this.writeUint8(t)}writeBytes(t){this.ensureAvailable(t.length);for(let r=0;r<t.length;r++)this._data.setUint8(this.offset++,t[r]);return this._updateLastWrittenByte(),this}writeInt16(t){return this.ensureAvailable(2),this._data.setInt16(this.offset,t,this.littleEndian),this.offset+=2,this._updateLastWrittenByte(),this}writeUint16(t){return this.ensureAvailable(2),this._data.setUint16(this.offset,t,this.littleEndian),this.offset+=2,this._updateLastWrittenByte(),this}writeInt32(t){return this.ensureAvailable(4),this._data.setInt32(this.offset,t,this.littleEndian),this.offset+=4,this._updateLastWrittenByte(),this}writeUint32(t){return this.ensureAvailable(4),this._data.setUint32(this.offset,t,this.littleEndian),this.offset+=4,this._updateLastWrittenByte(),this}writeFloat32(t){return this.ensureAvailable(4),this._data.setFloat32(this.offset,t,this.littleEndian),this.offset+=4,this._updateLastWrittenByte(),this}writeFloat64(t){return this.ensureAvailable(8),this._data.setFloat64(this.offset,t,this.littleEndian),this.offset+=8,this._updateLastWrittenByte(),this}writeBigInt64(t){return this.ensureAvailable(8),this._data.setBigInt64(this.offset,t,this.littleEndian),this.offset+=8,this._updateLastWrittenByte(),this}writeBigUint64(t){return this.ensureAvailable(8),this._data.setBigUint64(this.offset,t,this.littleEndian),this.offset+=8,this._updateLastWrittenByte(),this}writeChar(t){return this.writeUint8(t.charCodeAt(0))}writeChars(t){for(let r=0;r<t.length;r++)this.writeUint8(t.charCodeAt(r));return this}writeUtf8(t){return this.writeBytes(Lt(t))}toArray(){return new Uint8Array(this.buffer,this.byteOffset,this.lastWrittenByte)}getWrittenByteLength(){return this.lastWrittenByte-this.byteOffset}_updateLastWrittenByte(){this.offset>this.lastWrittenByte&&(this.lastWrittenByte=this.offset)}};import{isAnyArray as Oi}from"is-any-array";import{matrixCreateEmpty as Ci,xSequentialFillFromStep as Ri}from"ml-spectra-processing";function kt(e){for(let t in e){let{z:r}=e[t],{minX:n,minY:i,maxX:o,maxY:s}=e[t];if(n>o){[n,o]=[o,n];for(let a of r)a.reverse()}i>s&&(r.reverse(),[i,s]=[s,i]),e[t]={...e[t],z:r,minX:n,minY:i,maxY:s,maxX:o}}}function pe(e,t){let{x:r,minMax:n,nbSubSpectra:i,template:o}=t;e.spectra||(e.spectra=[]);for(let s=0;s<i;s++){let a={};for(let c in n)a[c]=n[c].z[s];e.spectra.push({...o,data:{...a,x:r}})}}function de(e,t,r={}){let n={};for(let y in e)e[y]&&(n[y]=new R(e[y]));let i=fe(t.meta.SI),o=fe(t.meta.SW_p),s=fe(t.meta.SF),a=s,c=fe(t.shiftOffsetVal||t.meta.OFFSET);t.meta.observeFrequency=s,t.meta.brukerReference=a,t.meta.DATATYPE="NMR Spectrum";let l=Number.parseInt(t.meta.BYTORDP,10);l=l?0:1;let m=t.meta.nbSubSpectra||1;if(l)for(let y in n)n[y].setLittleEndian();else for(let y in n)n[y].setBigEndian();let u={dataType:"NMR Spectrum",nbPoints:i,firstX:c,lastX:c-o/s,xUnit:"PPM",yUnit:"Arbitrary",isXYdata:!0,isFT:!0,nucleus:t.meta.NUC1,observeFrequency:s,title:t.meta.TITLE,deltaX:-(o/s)/(i-1)},f=u.deltaX,g=Ri({from:c,step:f,size:i});if(m===1){let y={};for(let p in n){let h=n[p],d=new Float64Array(i);for(let b=0;b<i;++b)d[b]=h.readInt32();y[p]=d}t.spectra.push({...u,data:{...y,x:g}})}else{let{meta:y}=t,p=Number(y.SF[1]),h=Number(y.SW_p[1]||y.SW[1]),d=Number(y.OFFSET[1]),b=d-h/p,F={};for(let S in n)F[S]={minY:d,maxY:b,minX:g[0],maxX:g.at(-1),...wi(y,n[S])};kt(F),r.keepSpectra&&pe(t,{minMax:F,x:g,nbSubSpectra:m,template:u}),t.minMax=F}}function fe(e){return Number(Oi(e)?e[0]:e)}function wi(e,t){let r=e.SI.toReversed(),n=e.XDIM.toReversed(),i=r.map((g,y)=>Number.parseInt(String(g/n[y]),10)),[o,s]=r,[a,c]=n,l=Ci({nbRows:o,nbColumns:s}),[m,u]=[Number.MAX_SAFE_INTEGER,Number.MIN_SAFE_INTEGER],f=[];for(let g=0;g<i[0];g++)for(let y=0;y<i[1];y++){let p=y*c,h=g*a;f.push([h,p])}for(let[g,y]of f)for(let p=0;p<a;p++)for(let h=0;h<c;h++){let d=t.readInt32();m>d&&(m=d),u<d&&(u=d),l[p+g][h+y]=d}return{z:l,minZ:m,maxZ:u}}import{createStepArray as _i,xMinMaxValues as qi}from"ml-spectra-processing";var H={};xt(H,{DQD:()=>ki,QF:()=>vi,QSEQ:()=>V,QSIM:()=>Li});var vi=0,Li=1,V=2,ki=3;function ge(e,t,r){let n=Number.parseInt(t.meta.TD[0],10),i=new R(e),o=t.meta.nbSubSpectra||1,s=t.meta.AQ_mod,c=Number.parseInt(t.meta.DTYPA,10)===2,l=Number.parseFloat(t.meta.SW_h[0]),m=Number.parseFloat(t.meta.SFO1[0]);t.meta.DATATYPE="NMR FID";let u=1/(2*l),f=n*u,g=Number.parseInt(t.meta.BYTORDA,10);g=g?0:1,g?i.setLittleEndian():i.setBigEndian();let y=s===2?u:2*u,p=ji({nbSubSpectra:o,isFloat:c,aqMode:s,td:n}),h={dataType:"NMR FID",dataTable:"(X++(R..R))",nbPoints:p,firstX:0,lastX:f,nucleus:t.meta.NUC1,xUnit:"Sec",yUnit:"Arbitrary",isXYdata:!0,isFID:!0,observeFrequency:m,title:t.meta.TITLE,deltaX:y},d=_i({length:p,step:y});if(o<2){let b=qt(i,{nbPoints:p,isFloat:c,aqMode:s});t.spectra=[{data:{x:d,...b},...h}]}else{let b={minX:d[0],maxX:d.at(-1),minY:0,maxY:o,minZ:0,maxZ:0},F=s===2?{re:{z:[],...b}}:{re:{z:[],...b},im:{z:[],...b}},S={re:{min:Number.MAX_SAFE_INTEGER,max:Number.MIN_SAFE_INTEGER},im:{min:Number.MAX_SAFE_INTEGER,max:Number.MIN_SAFE_INTEGER}};for(let I=0;I<o;I++){let x=qt(i,{nbPoints:p,isFloat:c,aqMode:s});S.re=_t(x.re,S.re),S.im=_t(x.im??new Float64Array,S.im),F.re.z.push(x.re),F.im&&x.im&&F.im.z.push(x.im)}F.re={...F.re,minZ:S.re.min,maxZ:S.re.max},F.im={...F.im,minZ:S.im.min,maxZ:S.im.max},r.keepSpectra&&pe(t,{minMax:F,x:d,nbSubSpectra:o,template:h}),t.minMax=F}}function _t(e,t){let{min:r,max:n}=qi(e),{min:i,max:o}=t;return{min:Math.min(i,r),max:Math.max(o,n)}}function qt(e,t){let{nbPoints:r,isFloat:n,aqMode:i}=t,o={re:new Float64Array(r),im:null},s=n?"readFloat64":"readInt32";if(i===2)for(let a=0;a<r;a++)o.re[a]=e[s]();else{o.im=new Float64Array(r);for(let a=0;a<r;a++)o.re[a]=e[s](),o.im[a]=e[s]()}return o}function ji(e){let{nbSubSpectra:t,isFloat:r,aqMode:n,td:i}=e,o=i;if(t>1){let s=r?128:256;o=Math.trunc(Math.ceil(i/s)*s)}return n===2?o:o/2>>0}async function jt(e,t){let r={},n=[],i=e["1r"]||e["1i"]?["1r","1i"]:["fid"];function o(a,c){return a.then(l=>{r[c]=l})}for(let a of i){let c=e[a];c&&n.push(o(c.arrayBuffer(),a))}n.push(_(e.procs,t).then(a=>{r.procs=a}),_(e.acqus,t).then(a=>{r.acqus=a})),e.quantFactorSample&&n.push($i(e).then(a=>{r.ereticFactor=a})),e.integrals&&n.push(vt(e).then(a=>{r.integrals=a}));let s=Bi(e);return s&&n.push(s.text().then(a=>{r.titleFile=a})),await Promise.all(n),Ui(r)}function Bi(e){if("title"in e&&e.title)return e.title}function Ui(e){let{procs:t,acqus:r,integrals:n,ereticFactor:i,titleFile:o}=e,s={...t};ue(s,r);let a={...s.info};s.info=a;let c={...s.meta};s.meta=c;let{epoch:l,date:m}=me(c.DATE);return l!==null&&Object.assign(a,{epoch:l,date:m}),n&&Object.assign(s,{integrals:n}),i&&(a.ereticFactor=i),o&&(c.TITLE_FILE=o),e["1r"]||e["1i"]?de({re:e["1r"],im:e["1i"]},s):e.fid&&ge(e.fid,s),s}async function $i(e){let r=(await e.quantFactorSample?.text())?.match(/<Application[\w\W]+<Eretic_Factor>(?<ereticFactor>[\d.]+)/);return Number(r?.groups?.ereticFactor)}function Xe(e,t){for(let r in t.meta)r in e.meta?(Array.isArray(e.meta[r])||(e.meta[r]=[e.meta[r]]),e.meta[r].push(t.meta[r])):e.meta[r]===void 0&&(e.meta[r]=[t.meta[r]]);return e}async function Bt(e,t){let r={},n=[],i=["2rr","2ri","2ir","2ii","ser"];function o(s,a){return s.then(c=>{r[a]=c})}for(let s of i){let a=e[s];a&&n.push(o(a.arrayBuffer(),s))}if(n.push(o(_(e.procs,t),"procs"),o(_(e.proc2s,t),"proc2s"),o(_(e.acqus,t),"acqus"),o(_(e.acqu2s,t),"acqu2s")),"nuslist"in e&&e.nuslist){let s=e.nuslist;n.push(o(s.text(),"nuslist"))}return e.vdlist&&n.push(o(e.vdlist.text(),"vdlist")),e.difflist&&n.push(o(e.difflist.text(),"difflist")),await Promise.all(n),zi(r,t)}function zi(e,t){let r=Xe(e.procs,e.proc2s),n=Xe(e.acqus,e.acqu2s);ue(r,n);let{epoch:i,date:o}=me(r.meta.DATE);if(o.length>0&&(r.info={...r.info,epoch:i,date:o}),e.nuslist&&(r.info.nuslist=e.nuslist.split(/\r?\n/).filter(Boolean).map(Number.parseFloat)),e.vdlist){let p=[];for(let h of e.vdlist.split(`
|
|
1
|
+
var si=Object.defineProperty;var xt=(e,t)=>{for(var r in t)si(e,r,{get:t[r],enumerable:!0})};import{NMRiumCore as Fa}from"@zakodium/nmrium-core";import{defineNMRiumPlugin as xi}from"@zakodium/nmrium-core";import{nextPowerOfTwo as di}from"ml-spectra-processing";import{Filters1D as gi,Filters2D as yi}from"nmr-processing";import{getOneIfArray as ai}from"@zakodium/nmrium-core";function ce(e={},t={},r={}){e===null&&(e={}),typeof e=="string"&&(e={pulseSequence:e});let n=Array.isArray(e.pulseSequence)?e.pulseSequence[0]:e.pulseSequence||"";if(typeof n!="string")return e.dimension?`${e.dimension}d`:"";if(n=n.toLowerCase(),n.includes("zg")||n.includes("single_pulse_dec")||n.includes("udeft"))return"1d";if(n.includes("hsqct")||n.includes("invi")&&(n.includes("ml")||n.includes("di")))return"hsqctocsy";if(n.includes("hsqc")||n.includes("invi"))return"hsqc";if(n.includes("hmbc")||n.includes("inv4")&&n.includes("lp"))return"hmbc";if(n.includes("hmqc"))return"hmqc";if(n.includes("cosy"))return"cosy";if(n.includes("jres"))return"jres";if(n.includes("dosy"))return"dosy";if(n.includes("tocsy")||n.includes("mlev")||n.includes("dipsi"))return"tocsy";if(n.includes("noesy"))return"noesy";if(n.includes("roesy"))return"roesy";if(n.includes("dept"))return"dept";if(n.includes("jmod")||n.includes("apt"))return"aptjmod";if(n.includes("inad"))return"inadequate";if(n.includes("adeq"))return"adequate";let{prefix:i=""}=r,o=(ai(t[`${i}SPECTYP`])||"").replace(/^<(.*)>$/,"$1").toLowerCase();return o.length>0&&o!=="undefined"?o:e.dimension?`${e.dimension}d`:""}import{getOneIfArray as Dt}from"@zakodium/nmrium-core";var ci=["no","exponential","modifiedGaussian","sine","qsine","trap","user","sinc","qsinc","traf","trafs"];function li(e){return e in At}function qe(e,t){let{prefix:r="",index:n=0}=t,i=Dt(e[`${r}WDW`],n),o=ci[i?Number(i):0],s={};if(!li(o))return s;let a=At[o];if(a){let{kind:c,parameters:l}=a,m={};for(let u in l){let f=l[u],{source:g,processor:y}=f;if(g){let p=Dt(e[`${r}${g}`],n),h=Number.parseFloat(String(p));if(Number.isNaN(h))continue;m[u]=y?y(h):h}else f.value!==void 0&&(m[u]=f.value)}s[c]={apply:!0,options:m}}return s}var At={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:St},exponent:{value:1}}},qsine:{kind:"sineSquare",parameters:{offset:{source:"SSB",processor:St}}},traf:{kind:"traf",parameters:{lineBroadening:{source:"LB"}}}};function St(e){return e===0||e===1?0:1/e}var It={sineBell:Nt({offset:0})},Mt={cosy:{...It},hmbc:{...It},hsqc:{sineBell:Nt({offset:.5})}},mi={...Mt};function je(e="",t=1){let r=ui(e),n={},i=t===1?Mt[r||""]:mi[r||""];return i&&(n=structuredClone(i)),n}function Nt(e){return{apply:!0,options:e}}function ui(e){let r=e.toLowerCase().match(/cosy|hsqc|hmbc/);return r?r[0]:null}function Pt(e,t={}){let{prefix:r="",experiment:n=ce(e)}=t;return e[`${r}WDW`]?{f2:qe(e,{...t,index:0}),f1:qe(e,{...t,index:1})}:{f2:je(n,1),f1:je(n,2)}}import{Filters1D as pi}from"nmr-processing";var Be=["digitalFilter","backwardLinearPrediction","forwardLinearPrediction","apodization","zeroFilling","fft",["shiftX","phaseCorrection"],"trim","baselineCorrection"],W={};for(let e=0;e<Be.length;e++){let t=Be[e];for(let r of Array.isArray(t)?t:[t])W[r]=e}for(let e of Object.values(pi))e.name in W||(W[e.name]=Be.length);import{Filters2D as fi}from"nmr-processing";var Ue=["digitalFilter2D","blpDimension1","flpDimension1","apodizationDimension1","zeroFillingDimension1","fftDimension1","blpDimension2","flpDimension2","nusDimension2","apodizationDimension2","zeroFillingDimension2","fftDimension2","phaseCorrectionTwoDimensions",["shift2DX","shift2DY","symmetrizeCosyLike"]],X={};for(let e=0;e<Ue.length;e++){let t=Ue[e];for(let r of Array.isArray(t)?t:[t])X[r]=e}for(let e of Object.values(fi))e.name in X||(X[e.name]=Ue.length);var hi=new Set;function bi(e,t){let{filter:r,experimentalFeatures:n=!1}=t,{name:i}=r;({...gi,...yi})[i]&&(e.some(s=>s.name===i)||hi.has(i)&&!n||e.push({...r,enabled:!0}))}function Tt(e,t={}){let{data:r}=e;if(!r)return;let{autoProcessing:n,experimentalFeatures:i}=t,o=(a,c)=>bi(a,{...c,experimentalFeatures:i}),{spectra:s}=r;for(let a of s){let{data:c,info:l,meta:m,filters:u}=a,{dimension:f,isFid:g}=l;if(g){if(f===1){let y=c.re.length,{fileIdentifier:p}=m||{},{tdOff:h,digitalFilter:d}=l;if(d&&d>0&&o(u,{filter:{name:"digitalFilter",value:{digitalFilterValue:d}}}),!n)continue;p?.toLowerCase().includes("jeol")&&o(u,{filter:{name:"trim",value:{leftPercentage:10,rightPercentage:10}}}),h&&Math.abs(h)>0&&o(u,{filter:{name:"backwardLinearPrediction",value:{nbInputs:y/2}}}),o(u,{filter:{name:"apodization",value:{exponential:{apply:!0,options:{lineBroadening:1}}}}}),o(u,{filter:{name:"zeroFilling",value:{nbPoints:2*y}}}),o(u,{filter:{name:"fft",value:{}}}),o(u,{filter:{name:"phaseCorrection",value:Fi(l)}}),u.sort((b,F)=>W[b.name]-W[F.name])}else if(f===2){if(!n)continue;let y=c.re.z.length,p=c.re.z[0].length,{tdOff:h,experiment:d=""}=l,b=l.spectrumSize,{nuslist:F,NusTD:S}=m;Array.isArray(b)&&b.length>1?(F&&(b[1]=Math.max(di(S[1]),1024)),b[1]=Et(b[1],y),b[0]=Et(b[0],p)):b=[Math.max(p,1024),Math.max(y,1024)];let I=d.toLowerCase().includes("cosy");h&&Math.abs(h[0])>0&&o(u,{filter:{name:"blpDimension1",value:{nbInputs:p/2}}});let x=Pt(m,{experiment:d});o(u,{filter:{name:"apodizationDimension1",value:x.f2}}),o(u,{filter:{name:"zeroFillingDimension1",value:{nbPoints:b[0]}}}),o(u,{filter:{name:"fftDimension1",value:{}}}),m&&"nuslist"in m&&o(u,{filter:{name:"nusDimension2",value:{}}}),o(u,{filter:{name:"apodizationDimension2",value:x.f1}}),o(u,{filter:{name:"zeroFillingDimension2",value:{nbPoints:b[I?0:1]}}}),I&&o(u,{filter:{name:"symmetrizeCosyLike",value:{}}}),o(u,{filter:{name:"fftDimension2",value:{}}}),u.sort((A,M)=>X[A.name]-X[M.name])}}}}function Et(e,t,r=1024){return e<t?Math.max(t,r):e>t?Math.min(e,r):Math.max(t,r)}function Fi(e){let{phc0:t=0,phc1:r=0}=e;return Ot([t,r])?{}:{ph0:t,ph1:r}}function Ot(e){return Array.isArray(e)?e.every(t=>!t&&t===0):Ot([e])}function $e(){return xi({id:"@zakodium/nmrium-core-plugins#AutoPostProcessingPlugin",version:1,shouldSerialize:!0,migrations:[],onReadProcess:{onProcessing:Tt}})}import{defineNMRiumPlugin as Io}from"@zakodium/nmrium-core";import{FileCollection as $c}from"file-collection";var Ct=["acqus","acqu2s"],le=["procs","proc2s"];function Rt(e){return e.is1D?Di(e):e.is2D?Si(e):{checked:!1,message:"Multi-dimensional n > 2 is not supported"}}function Di(e){let t=e.isFID?["acqus"]:["acqus","procs"],r=t.every(n=>e[n]);return{checked:r,message:r?"":`File: ${e[e.isFID?"fid":"1r"]?.relativePath} is ignored, files: ${t.join(",")} are required.`}}function Si(e){let t=e.isFID?Ct:Ct.concat(le),r=t.every(n=>e[n]);return r&&e.isFID&&le.some(n=>e[n])&&!le.every(n=>e[n])&&(r=!1,t.push(...le)),{checked:r,message:r?"":`File: ${e.name} is ignored, files: ${t.join(",")} are required.`}}function ze(e,t={}){let{logger:r,processingNumbers:n,experimentNumbers:i,dataSelection:o="both",keep1D:s=!0,keep2D:a=!0,onlyFirstProcessedData:c=!0}=t,l={},m=e.files.map(g=>g.relativePath);for(let g of e){let y,p,h,d=g.relativePath.split("/"),b=d.indexOf("pdata");if(b!==-1)y=Number(d[b+1]),p=Number(d[b-1]),h=d.slice(0,-3).join("/");else if(Ii(g,m)){let S=d.indexOf(g.name);p=Number(d[S-1]),h=d.slice(0,-1).join("/")}else continue;if(Number.isNaN(p)&&(p=void 0),Number.isNaN(y)&&(y=void 0),i&&!i.includes(p))continue;l[h]||(l[h]={name:h,expno:p,processedData:{},fileCollectionItems:[]});let F=l[h];if(g.name==="vdlist"&&(F.vdlist=g),g.name==="difflist"&&(F.difflist=g),y){F.processedData||(F.processedData={}),F.processedData[y]||(F.processedData[y]={fileCollectionItems:[],name:h,expno:p,procno:y});let S=F.processedData[y];S.fileCollectionItems.push(g),g.name.match(/^(?:1r|1i|2rr|2ir|2ii|2ri|procs|proc2s|title|integrals.txt)$/)&&(S[g.name]=g),g.name==="2rr"&&(S.is2D=!0,S.isFT=!0),g.name==="1r"&&(S.is1D=!0,S.isFT=!0)}else F.fileCollectionItems.push(g),g.name.match(/^(?:ser|fid|acqus|acqu2s|nuslist)$/)&&(F[g.name]=g),g.name==="ser"&&(F.is2D=!0,F.isFID=!0),g.name==="fid"&&(F.is1D=!0,F.isFID=!0);g.name==="QuantFactorSample.xml"&&(F.quantFactorSample=g)}if(n)for(let g in l){let y=l[g].processedData,p={};for(let h in y)n.includes(Number.parseInt(h,10))&&(p[h]=y[h]);l[g].processedData=p}else if(c)for(let g in l){let y=l[g].processedData,p=Object.keys(y??{});p.sort((d,b)=>Number(d)-Number(b));let h=p[0];y&&h!==void 0&&(l[g].processedData={firstProcessedNumber:y[h]})}let u=Mi(r),f=[];for(let g in l){let y=l[g],{processedData:p,...h}=y;if(u(y,o)){let b=Object.keys(p??{});if(p&&b.length>0){let F=p[b[0]];F.procs&&(h.fileCollectionItems.push(F.procs),h.procs=F.procs),F.proc2s&&(h.fileCollectionItems.push(F.proc2s),h.proc2s=F.proc2s),F["integrals.txt"]&&(h.integrals=F["integrals.txt"])}f.push(h)}let d="ser"in h||"fid"in h;if(o==="fid"||o==="preferFID"&&d){r?.warn("Skipping FT data because it does not match the import filters");continue}for(let b in p){let F=p[b];(F["1r"]||F["2rr"])&&(h.acqus&&F.fileCollectionItems.push(h.acqus),h.acqu2s&&F.fileCollectionItems.push(h.acqu2s),h.vdlist&&(F.vdlist=h.vdlist),f.push({integrals:F["integrals.txt"],acqus:h.acqus,acqu2s:h.acqu2s,...F}))}}return s||(r?.warn("Skipping 1D data because it does not match the import filters"),f=f.filter(g=>!g.is1D)),a||(r?.warn("Skipping 2D data because it does not match the import filters"),f=f.filter(g=>!g.is2D)),Ai(f,t.logger)}function Ai(e,t){return e.filter(r=>{let{checked:n,message:i}=Rt(r);return n||t?.warn(i),n})}function Ii(e,t){return e.name.match(/^(?:ser|acqus|acqu2s|nuslist|vdlist|difflist|QuantFactorSample.xml)$/)||e.name.match(/^fid$/)&&t.includes(e.relativePath.replace(/fid$/,"acqus"))}function Mi(e){return(t,r)=>{let{processedData:n}=t,i=Object.keys(n??{}),o=n&&i.length>0&&["1r","1i","2rr"].some(m=>m in n[i[0]]),s="ser"in t||"fid"in t,l=s&&(r!=="ft"&&r!=="preferFT"||r==="preferFT"&&!o);return s&&!l&&e?.warn("Skipping RAW data because it does not match import filters"),l}}function me(e){if(e===void 0||Array.isArray(e)&&e.length===0)return{epoch:null,date:""};let t=e[0]*1e3;return{epoch:t,date:new Date(t).toUTCString()}}function ue(e,t){for(let r in t.meta)e.meta[r]===void 0&&(e.meta[r]=t.meta[r]);for(let r in t.info)e.info[r]===void 0&&(e.info[r]=t.info[r]);for(let r in e.meta)Array.isArray(e.meta[r])||(e.meta[r]=[e.meta[r]])}import{convert as Ni}from"jcampconverter";async function _(e,t){if(!e)return wt();let r=await e.text(),{keepRecordsRegExp:n=/.*/}=t,i=Ni(r,{keepRecordsRegExp:n});return i.flatten.length===0?wt():i.flatten[0]}function wt(){return{info:{},meta:{},tmp:{},spectra:[],ntuples:{}}}async function vt(e){let r=(await e.integrals?.text())?.split(/\r?\n/).slice(3).filter(Boolean)??[],n=[];for(let i=1;i<r.length;i++){let o=r[i].replace(/^\s*/,"").replaceAll(/[\s\t]+/g,";").match(/\d+;(?<from>[0-9.]+);(?<to>[0-9.]+);(?<integration>[0-9.]+)/)?.groups;if(o){let{from:s,to:a,integration:c}=o;n.push({from:Number.parseFloat(s),to:Number.parseFloat(a),integration:Number.parseFloat(c)})}}return n}function Je(e,t="utf8"){return new TextDecoder(t).decode(e)}var Pi=new TextEncoder;function Lt(e){return Pi.encode(e)}var Ei=1024*8,Ti=(()=>{let e=new Uint8Array(4),t=new Uint32Array(e.buffer);return!((t[0]=1)&e[0])})(),We={int8:globalThis.Int8Array,uint8:globalThis.Uint8Array,int16:globalThis.Int16Array,uint16:globalThis.Uint16Array,int32:globalThis.Int32Array,uint32:globalThis.Uint32Array,uint64:globalThis.BigUint64Array,int64:globalThis.BigInt64Array,float32:globalThis.Float32Array,float64:globalThis.Float64Array},R=class e{buffer;byteLength;byteOffset;length;offset;lastWrittenByte;littleEndian;_data;_mark;_marks;constructor(t=Ei,r={}){let n=!1;typeof t=="number"?t=new ArrayBuffer(t):(n=!0,this.lastWrittenByte=t.byteLength);let i=r.offset?r.offset>>>0:0,o=t.byteLength-i,s=i;(ArrayBuffer.isView(t)||t instanceof e)&&(t.byteLength!==t.buffer.byteLength&&(s=t.byteOffset+i),t=t.buffer),n?this.lastWrittenByte=o:this.lastWrittenByte=0,this.buffer=t,this.length=o,this.byteLength=o,this.byteOffset=s,this.offset=0,this.littleEndian=!0,this._data=new DataView(this.buffer,s,o),this._mark=0,this._marks=[]}available(t=1){return this.offset+t<=this.length}isLittleEndian(){return this.littleEndian}setLittleEndian(){return this.littleEndian=!0,this}isBigEndian(){return!this.littleEndian}setBigEndian(){return this.littleEndian=!1,this}skip(t=1){return this.offset+=t,this}back(t=1){return this.offset-=t,this}seek(t){return this.offset=t,this}mark(){return this._mark=this.offset,this}reset(){return this.offset=this._mark,this}pushMark(){return this._marks.push(this.offset),this}popMark(){let t=this._marks.pop();if(t===void 0)throw new Error("Mark stack empty");return this.seek(t),this}rewind(){return this.offset=0,this}ensureAvailable(t=1){if(!this.available(t)){let n=(this.offset+t)*2,i=new Uint8Array(n);i.set(new Uint8Array(this.buffer)),this.buffer=i.buffer,this.length=n,this.byteLength=n,this._data=new DataView(this.buffer)}return this}readBoolean(){return this.readUint8()!==0}readInt8(){return this._data.getInt8(this.offset++)}readUint8(){return this._data.getUint8(this.offset++)}readByte(){return this.readUint8()}readBytes(t=1){return this.readArray(t,"uint8")}readArray(t,r){let n=We[r].BYTES_PER_ELEMENT*t,i=this.byteOffset+this.offset,o=this.buffer.slice(i,i+n);if(this.littleEndian===Ti&&r!=="uint8"&&r!=="int8"){let a=new Uint8Array(this.buffer.slice(i,i+n));a.reverse();let c=new We[r](a.buffer);return this.offset+=n,c.reverse(),c}let s=new We[r](o);return this.offset+=n,s}readInt16(){let t=this._data.getInt16(this.offset,this.littleEndian);return this.offset+=2,t}readUint16(){let t=this._data.getUint16(this.offset,this.littleEndian);return this.offset+=2,t}readInt32(){let t=this._data.getInt32(this.offset,this.littleEndian);return this.offset+=4,t}readUint32(){let t=this._data.getUint32(this.offset,this.littleEndian);return this.offset+=4,t}readFloat32(){let t=this._data.getFloat32(this.offset,this.littleEndian);return this.offset+=4,t}readFloat64(){let t=this._data.getFloat64(this.offset,this.littleEndian);return this.offset+=8,t}readBigInt64(){let t=this._data.getBigInt64(this.offset,this.littleEndian);return this.offset+=8,t}readBigUint64(){let t=this._data.getBigUint64(this.offset,this.littleEndian);return this.offset+=8,t}readChar(){return String.fromCharCode(this.readInt8())}readChars(t=1){let r="";for(let n=0;n<t;n++)r+=this.readChar();return r}readUtf8(t=1){return Je(this.readBytes(t))}decodeText(t=1,r="utf8"){return Je(this.readBytes(t),r)}writeBoolean(t){return this.writeUint8(t?255:0),this}writeInt8(t){return this.ensureAvailable(1),this._data.setInt8(this.offset++,t),this._updateLastWrittenByte(),this}writeUint8(t){return this.ensureAvailable(1),this._data.setUint8(this.offset++,t),this._updateLastWrittenByte(),this}writeByte(t){return this.writeUint8(t)}writeBytes(t){this.ensureAvailable(t.length);for(let r=0;r<t.length;r++)this._data.setUint8(this.offset++,t[r]);return this._updateLastWrittenByte(),this}writeInt16(t){return this.ensureAvailable(2),this._data.setInt16(this.offset,t,this.littleEndian),this.offset+=2,this._updateLastWrittenByte(),this}writeUint16(t){return this.ensureAvailable(2),this._data.setUint16(this.offset,t,this.littleEndian),this.offset+=2,this._updateLastWrittenByte(),this}writeInt32(t){return this.ensureAvailable(4),this._data.setInt32(this.offset,t,this.littleEndian),this.offset+=4,this._updateLastWrittenByte(),this}writeUint32(t){return this.ensureAvailable(4),this._data.setUint32(this.offset,t,this.littleEndian),this.offset+=4,this._updateLastWrittenByte(),this}writeFloat32(t){return this.ensureAvailable(4),this._data.setFloat32(this.offset,t,this.littleEndian),this.offset+=4,this._updateLastWrittenByte(),this}writeFloat64(t){return this.ensureAvailable(8),this._data.setFloat64(this.offset,t,this.littleEndian),this.offset+=8,this._updateLastWrittenByte(),this}writeBigInt64(t){return this.ensureAvailable(8),this._data.setBigInt64(this.offset,t,this.littleEndian),this.offset+=8,this._updateLastWrittenByte(),this}writeBigUint64(t){return this.ensureAvailable(8),this._data.setBigUint64(this.offset,t,this.littleEndian),this.offset+=8,this._updateLastWrittenByte(),this}writeChar(t){return this.writeUint8(t.charCodeAt(0))}writeChars(t){for(let r=0;r<t.length;r++)this.writeUint8(t.charCodeAt(r));return this}writeUtf8(t){return this.writeBytes(Lt(t))}toArray(){return new Uint8Array(this.buffer,this.byteOffset,this.lastWrittenByte)}getWrittenByteLength(){return this.lastWrittenByte-this.byteOffset}_updateLastWrittenByte(){this.offset>this.lastWrittenByte&&(this.lastWrittenByte=this.offset)}};import{isAnyArray as Oi}from"is-any-array";import{matrixCreateEmpty as Ci,xSequentialFillFromStep as Ri}from"ml-spectra-processing";function kt(e){for(let t in e){let{z:r}=e[t],{minX:n,minY:i,maxX:o,maxY:s}=e[t];if(n>o){[n,o]=[o,n];for(let a of r)a.reverse()}i>s&&(r.reverse(),[i,s]=[s,i]),e[t]={...e[t],z:r,minX:n,minY:i,maxY:s,maxX:o}}}function pe(e,t){let{x:r,minMax:n,nbSubSpectra:i,template:o}=t;e.spectra||(e.spectra=[]);for(let s=0;s<i;s++){let a={};for(let c in n)a[c]=n[c].z[s];e.spectra.push({...o,data:{...a,x:r}})}}function de(e,t,r={}){let n={};for(let y in e)e[y]&&(n[y]=new R(e[y]));let i=fe(t.meta.SI),o=fe(t.meta.SW_p),s=fe(t.meta.SF),a=s,c=fe(t.shiftOffsetVal||t.meta.OFFSET);t.meta.observeFrequency=s,t.meta.brukerReference=a,t.meta.DATATYPE="NMR Spectrum";let l=Number.parseInt(t.meta.BYTORDP,10);l=l?0:1;let m=t.meta.nbSubSpectra||1;if(l)for(let y in n)n[y].setLittleEndian();else for(let y in n)n[y].setBigEndian();let u={dataType:"NMR Spectrum",nbPoints:i,firstX:c,lastX:c-o/s,xUnit:"PPM",yUnit:"Arbitrary",isXYdata:!0,isFT:!0,nucleus:t.meta.NUC1,observeFrequency:s,title:t.meta.TITLE,deltaX:-(o/s)/(i-1)},f=u.deltaX,g=Ri({from:c,step:f,size:i});if(m===1){let y={};for(let p in n){let h=n[p],d=new Float64Array(i);for(let b=0;b<i;++b)d[b]=h.readInt32();y[p]=d}t.spectra.push({...u,data:{...y,x:g}})}else{let{meta:y}=t,p=Number(y.SF[1]),h=Number(y.SW_p[1]||y.SW[1]),d=Number(y.OFFSET[1]),b=d-h/p,F={};for(let S in n)F[S]={minY:d,maxY:b,minX:g[0],maxX:g.at(-1),...wi(y,n[S])};kt(F),r.keepSpectra&&pe(t,{minMax:F,x:g,nbSubSpectra:m,template:u}),t.minMax=F}}function fe(e){return Number(Oi(e)?e[0]:e)}function wi(e,t){let r=e.SI.toReversed(),n=e.XDIM.toReversed(),i=r.map((g,y)=>Number.parseInt(String(g/n[y]),10)),[o,s]=r,[a,c]=n,l=Ci({nbRows:o,nbColumns:s}),[m,u]=[Number.MAX_SAFE_INTEGER,Number.MIN_SAFE_INTEGER],f=[];for(let g=0;g<i[0];g++)for(let y=0;y<i[1];y++){let p=y*c,h=g*a;f.push([h,p])}for(let[g,y]of f)for(let p=0;p<a;p++)for(let h=0;h<c;h++){let d=t.readInt32();m>d&&(m=d),u<d&&(u=d),l[p+g][h+y]=d}return{z:l,minZ:m,maxZ:u}}import{createStepArray as _i,xMinMaxValues as qi}from"ml-spectra-processing";var H={};xt(H,{DQD:()=>ki,QF:()=>vi,QSEQ:()=>V,QSIM:()=>Li});var vi=0,Li=1,V=2,ki=3;function ge(e,t,r){let n=Number.parseInt(t.meta.TD[0],10),i=new R(e),o=t.meta.nbSubSpectra||1,s=t.meta.AQ_mod,c=Number.parseInt(t.meta.DTYPA,10)===2,l=Number.parseFloat(t.meta.SW_h[0]),m=Number.parseFloat(t.meta.SFO1[0]);t.meta.DATATYPE="NMR FID";let u=1/(2*l),f=n*u,g=Number.parseInt(t.meta.BYTORDA,10);g=g?0:1,g?i.setLittleEndian():i.setBigEndian();let y=s===2?u:2*u,p=ji({nbSubSpectra:o,isFloat:c,aqMode:s,td:n}),h={dataType:"NMR FID",dataTable:"(X++(R..R))",nbPoints:p,firstX:0,lastX:f,nucleus:t.meta.NUC1,xUnit:"Sec",yUnit:"Arbitrary",isXYdata:!0,isFID:!0,observeFrequency:m,title:t.meta.TITLE,deltaX:y},d=_i({length:p,step:y});if(o<2){let b=qt(i,{nbPoints:p,isFloat:c,aqMode:s});t.spectra=[{data:{x:d,...b},...h}]}else{let b={minX:d[0],maxX:d.at(-1),minY:0,maxY:o,minZ:0,maxZ:0},F=s===2?{re:{z:[],...b}}:{re:{z:[],...b},im:{z:[],...b}},S={re:{min:Number.MAX_SAFE_INTEGER,max:Number.MIN_SAFE_INTEGER},im:{min:Number.MAX_SAFE_INTEGER,max:Number.MIN_SAFE_INTEGER}};for(let I=0;I<o;I++){let x=qt(i,{nbPoints:p,isFloat:c,aqMode:s});S.re=_t(x.re,S.re),S.im=_t(x.im??new Float64Array,S.im),F.re.z.push(x.re),F.im&&x.im&&F.im.z.push(x.im)}F.re={...F.re,minZ:S.re.min,maxZ:S.re.max},F.im={...F.im,minZ:S.im.min,maxZ:S.im.max},r.keepSpectra&&pe(t,{minMax:F,x:d,nbSubSpectra:o,template:h}),t.minMax=F}}function _t(e,t){let{min:r,max:n}=qi(e),{min:i,max:o}=t;return{min:Math.min(i,r),max:Math.max(o,n)}}function qt(e,t){let{nbPoints:r,isFloat:n,aqMode:i}=t,o={re:new Float64Array(r),im:null},s=n?"readFloat64":"readInt32";if(i===2)for(let a=0;a<r;a++)o.re[a]=e[s]();else{o.im=new Float64Array(r);for(let a=0;a<r;a++)o.re[a]=e[s](),o.im[a]=e[s]()}return o}function ji(e){let{nbSubSpectra:t,isFloat:r,aqMode:n,td:i}=e,o=i;if(t>1){let s=r?128:256;o=Math.trunc(Math.ceil(i/s)*s)}return n===2?o:o/2>>0}async function jt(e,t){let r={},n=[],i=e["1r"]||e["1i"]?["1r","1i"]:["fid"];function o(a,c){return a.then(l=>{r[c]=l})}for(let a of i){let c=e[a];c&&n.push(o(c.arrayBuffer(),a))}n.push(_(e.procs,t).then(a=>{r.procs=a}),_(e.acqus,t).then(a=>{r.acqus=a})),e.quantFactorSample&&n.push($i(e).then(a=>{r.ereticFactor=a})),e.integrals&&n.push(vt(e).then(a=>{r.integrals=a}));let s=Bi(e);return s&&n.push(s.text().then(a=>{r.titleFile=a})),await Promise.all(n),Ui(r)}function Bi(e){if("title"in e&&e.title)return e.title}function Ui(e){let{procs:t,acqus:r,integrals:n,ereticFactor:i,titleFile:o}=e,s={...t};ue(s,r);let a={...s.info};s.info=a;let c={...s.meta};s.meta=c;let{epoch:l,date:m}=me(c.DATE);return l!==null&&Object.assign(a,{epoch:l,date:m}),n&&Object.assign(s,{integrals:n}),i&&(a.ereticFactor=i),o&&(c.TITLE_FILE=o),e["1r"]||e["1i"]?de({re:e["1r"],im:e["1i"]},s):e.fid&&ge(e.fid,s),s}async function $i(e){let r=(await e.quantFactorSample?.text())?.match(/<Application[\w\W]+<Eretic_Factor>(?<ereticFactor>[\d.]+)/);return Number(r?.groups?.ereticFactor)}function Xe(e,t){for(let r in t.meta)r in e.meta?(Array.isArray(e.meta[r])||(e.meta[r]=[e.meta[r]]),e.meta[r].push(t.meta[r])):e.meta[r]===void 0&&(e.meta[r]=[t.meta[r]]);return e}async function Bt(e,t){let r={},n=[],i=["2rr","2ri","2ir","2ii","ser"];function o(s,a){return s.then(c=>{r[a]=c})}for(let s of i){let a=e[s];a&&n.push(o(a.arrayBuffer(),s))}if(n.push(o(_(e.procs,t),"procs"),o(_(e.proc2s,t),"proc2s"),o(_(e.acqus,t),"acqus"),o(_(e.acqu2s,t),"acqu2s")),"nuslist"in e&&e.nuslist){let s=e.nuslist;n.push(o(s.text(),"nuslist"))}return e.vdlist&&n.push(o(e.vdlist.text(),"vdlist")),e.difflist&&n.push(o(e.difflist.text(),"difflist")),await Promise.all(n),zi(r,t)}function zi(e,t){let r=Xe(e.procs,e.proc2s),n=Xe(e.acqus,e.acqu2s);ue(r,n);let{epoch:i,date:o}=me(r.meta.DATE);if(o.length>0&&(r.info={...r.info,epoch:i,date:o}),e.nuslist&&(r.info.nuslist=e.nuslist.split(/\r?\n/).filter(Boolean).map(Number.parseFloat)),e.vdlist){let p=[];for(let h of e.vdlist.split(`
|
|
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 Bt(e,t);else if(e["1r"]||e["1i"]||e.fid)i=!0,r=await jt(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:()=>Gi,QF:()=>Ji,QSEC:()=>Wi,STATES:()=>Vi,STATES_TPPI:()=>Hi,TTPI:()=>Xi});var Ji=1,Wi=2,Xi=3,Vi=4,Hi=5,Gi=6;import{formatSpectra as bo}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(Yi(n,i))}return t}function Yi(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 $t}from"is-any-array";function U(e){if(Ki(e))return Zi(e)?e.map(Ut):Ut(e);if(typeof e=="object"&&e!==null){let t={};for(let r in e)t[r]=U(e[r]);return t}return e}function Ki(e){return $t(e)}function Ut(e){return Float64Array.from(e)}function Zi(e){return $t(e[0])}import{isAnyArray as yo}from"is-any-array";import{getOneIfArray as eo}from"@zakodium/nmrium-core";var Qi=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 zt(e){let t=String(e).toLowerCase().replaceAll(" ","");return Qi.get(t)}function D(e,t,r,n=!1){r===void 0||t in e&&!n||(Array.isArray(r)?e[t]=r.map(Jt):e[t]=[Jt(r)])}function Jt(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(Wt):Wt(e)}function Wt(e){return typeof e=="string"?Number.parseFloat(e):e}function P(e,t,r){r!==void 0&&D(e,t,G(r))}function Xt(e,t,r){let{prefix:n=""}=r,i=t[`${n}.ACQUISITIONSCHEME`]||t[`${n}FnMODE`];i&&D(e,"acquisitionScheme",zt(eo(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 ao}from"@zakodium/nmrium-core";import{UTCDate as to}from"@date-fns/utc";import{getOneIfArray as ro}from"@zakodium/nmrium-core";import{getTime as Ht,isValid as Gt,parse as no,parseISO as io}from"date-fns";import{removeComment as oo}from"jcampconverter";function Vt(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 Yt(e,t,r={}){let n=t.LONGDATE??ro(t.DATE);if(!n)return;let{separator:i}=r,o=Number(n)*1e3;Vt(e,o||so(n,i))}function so(e,t){let r=oo(e,t),n=io(r,{});if(Gt(n)){let o=n.getTimezoneOffset()*60*1e3;return Ht(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=no(r,o,new to,{useAdditionalDayOfYearTokens:!0});if(Gt(s))return Ht(s)}return null}function Kt(e,t,r){let{prefix:n="",separator:i}=r;(t.LONGDATE||t.DATE)&&Yt(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"]||ao(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 Zt(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 co}from"is-any-array";import{calculateRelativeFrequency as lo}from"nmr-processing";function Qt(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(co(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=lo(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 mo}from"ml-spectra-processing";function ne(e,t){return mo(e).map(t)}function er(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&&uo(t,e)}function uo(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 tr(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 ir}from"@zakodium/nmrium-core";import{getGyromagneticRatio as po}from"gyromagnetic-ratio";function nr(e,t,r){if(e>0)return e;if(t>14||t===0)return 0;if(rr[t]){let n=rr[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 rr={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 or(e,t,r){let{prefix:n=""}=r,i=e.nucleus[0],o=po(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/(ir(t[`${n}P`]).split(r.separator||`
|
|
4
4
|
`)[1].split(" ")[1]*4);D(e,"pulseStrength90",a)}if(t[`${n}D`]){let a=ir(t[`${n}D`]).split(r.separator||`
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@zakodium/nmrium-core-plugins",
|
|
3
|
-
"version": "0.6.
|
|
3
|
+
"version": "0.6.31",
|
|
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",
|
|
@@ -30,7 +30,7 @@
|
|
|
30
30
|
"@types/node": "^24.10.1",
|
|
31
31
|
"@zakodium/bruker-parser": "^0.0.0",
|
|
32
32
|
"@zakodium/jeol-parser": "^0.0.0",
|
|
33
|
-
"@zakodium/nmr-types": "^0.5.
|
|
33
|
+
"@zakodium/nmr-types": "^0.5.1",
|
|
34
34
|
"@zakodium/nmredata": "^0.0.0",
|
|
35
35
|
"@zakodium/varian-parser": "^0.0.0",
|
|
36
36
|
"bruker-data-test": "^1.0.0",
|
|
@@ -47,7 +47,7 @@
|
|
|
47
47
|
},
|
|
48
48
|
"dependencies": {
|
|
49
49
|
"@date-fns/utc": "^2.1.1",
|
|
50
|
-
"@zakodium/nmrium-core": "^0.6.
|
|
50
|
+
"@zakodium/nmrium-core": "^0.6.1",
|
|
51
51
|
"cheminfo-types": "^1.8.1",
|
|
52
52
|
"convert-to-jcamp": "^6.0.0",
|
|
53
53
|
"date-fns": "^4.1.0",
|
|
@@ -58,7 +58,7 @@
|
|
|
58
58
|
"linear-sum-assignment": "^1.0.9",
|
|
59
59
|
"lodash.merge": "^4.6.2",
|
|
60
60
|
"ml-spectra-processing": "^14.18.2",
|
|
61
|
-
"nmr-processing": "^22.
|
|
61
|
+
"nmr-processing": "^22.3.0",
|
|
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": "
|
|
69
|
+
"gitHead": "e957463f18b6a01f82c929839fca2b70c7661893"
|
|
70
70
|
}
|