@zakodium/nmrium-core-plugins 0.1.7 → 0.1.9

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.
@@ -46,9 +46,9 @@ declare interface FilterTreeByDataTypeDataClass {
46
46
  }
47
47
 
48
48
  /**
49
- * Init NMRiumCore with recommended plugins.
49
+ * Init NMRiumCore with recommended plugins and plugins passed as argument.
50
50
  */
51
- declare function init(): NMRiumCore;
51
+ declare function init(plugins?: NMRiumPlugin[]): NMRiumCore;
52
52
  export default init;
53
53
  export { init }
54
54
 
@@ -1,18 +1,20 @@
1
- var Yr=Object.defineProperty;var Nt=(e,t)=>{for(var n in t)Yr(e,n,{get:t[n],enumerable:!0})};import{NMRiumCore as Ls}from"@zakodium/nmrium-core";import{Filters1D as ii,Filters2D as oi}from"nmr-processing";import{getOneIfArray as Kr}from"@zakodium/nmrium-core";function te(e={},t={},n={}){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:r=""}=n,o=(Kr(t[`${r}SPECTYP`])||"").replace(/^<(.*)>$/,"$1").toLowerCase();return o.length>0&&o!=="undefined"?o:e.dimension?`${e.dimension}d`:""}import{getOneIfArray as At}from"@zakodium/nmrium-core";var Zr=["no","exponential","modifiedGaussian","sine","qsine","trap","user","sinc","qsinc","traf","trafs"];function Qr(e){return e in Mt}function Be(e,t){let{prefix:n="",index:i=0}=t,r=At(e[`${n}WDW`],i),o=Zr[r?Number(r):0],s={};if(!Qr(o))return s;let a=Mt[o];if(a){let{kind:l,parameters:c}=a,u={};for(let f in c){let d=c[f],{source:g,processor:h}=d;if(g){let p=At(e[`${n}${g}`],i);if(!p)continue;let b=Number(p);u[f]=h?h(b):b}else d.value!==void 0&&(u[f]=d.value)}s[l]={apply:!0,options:u}}return s}var Mt={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 It={sineBell:Et({offset:0})},Rt={cosy:{...It},hmbc:{...It},hsqc:{sineBell:Et({offset:.5})}},ei={...Rt};function Ue(e="",t=1){let n=ti(e),i={},r=t===1?Rt[n||""]:ei[n||""];return r&&(i=structuredClone(r)),i}function Et(e){return{apply:!0,options:e}}function ti(e){let n=e.toLowerCase().match(/cosy|hsqc|hmbc/);return n?n[0]:null}function Tt(e,t={}){let{prefix:n="",experiment:i=te(e)}=t;return e[`${n}WDW`]?{f2:Be(e,{...t,index:0}),f1:Be(e,{...t,index:1})}:{f2:Ue(i,1),f1:Ue(i,2)}}import{Filters1D as ni}from"nmr-processing";var $e=["digitalFilter","backwardLinearPrediction","forwardLinearPrediction","apodization","zeroFilling","fft",["shiftX","phaseCorrection","baselineCorrection"]],U={};for(let e=0;e<$e.length;e++){let t=$e[e];for(let n of Array.isArray(t)?t:[t])U[n]=e}for(let e of Object.values(ni))e.name in U||(U[e.name]=$e.length);import{Filters2D as ri}from"nmr-processing";var ze=["digitalFilter2D","blpDimension1","flpDimension1","apodizationDimension1","zeroFillingDimension1","fftDimension1","blpDimension2","flpDimension2","nusDimension2","apodizationDimension2","zeroFillingDimension2","fftDimension2","phaseCorrectionTwoDimensions",["shift2DX","shift2DY","symmetrizeCosyLike"]],$={};for(let e=0;e<ze.length;e++){let t=ze[e];for(let n of Array.isArray(t)?t:[t])$[n]=e}for(let e of Object.values(ri))e.name in $||($[e.name]=ze.length);var si=new Set(["backwardLinearPrediction","forwardLinearPrediction","digitalFilter2D","phaseCorrectionTwoDimensions","blpDimension1","flpDimension1","apodizationDimension1","apodizationDimension2","zeroFillingDimension1","fftDimension1","blpDimension2","flpDimension2","zeroFillingDimension2","fftDimension2","nusDimension2","symmetrizeCosyLike"]);function ai(e,t){let{filter:n,experimentalFeatures:i=!1}=t,{name:r}=n;({...ii,...oi})[r]&&(e.some(s=>s.name===r)||(i||!si.has(r))&&e.push({...n,enabled:!0}))}function Ot(e,t={}){let{data:n}=e;if(!n)return;let{autoProcessing:i,experimentalFeatures:r}=t,o=(a,l)=>ai(a,{...l,experimentalFeatures:r}),{spectra:s}=n;for(let a of s){let{data:l,info:c,meta:u,filters:f}=a,{dimension:d,isFid:g}=c;if(g){if(d===1){let h=l.re.length,{tdOff:p,digitalFilter:b}=c;if(b&&b>0&&o(f,{filter:{name:"digitalFilter",value:{digitalFilterValue:b}}}),!i)continue;p&&Math.abs(p)>0&&o(f,{filter:{name:"backwardLinearPrediction",value:{nbInputs:h/2}}}),o(f,{filter:{name:"apodization",value:{exponential:{apply:!0,options:{lineBroadening:1}}}}}),o(f,{filter:{name:"zeroFilling",value:{nbPoints:2*h}}}),o(f,{filter:{name:"fft",value:{}}}),o(f,{filter:{name:"phaseCorrection",value:ci(c)}}),f.sort((m,y)=>U[m.name]-U[y.name])}else if(d===2){if(!i||!r)continue;let h=l.re.z.length,p=l.re.z[0].length,{tdOff:b,experiment:m=""}=c,y=c.spectrumSize;Array.isArray(y)&&y.length>1?(y[0]<=p&&(y[0]=p*2),y[0]<=h&&(y[0]=h*2)):y=[p*2,2*h];let F=m.toLowerCase().includes("cosy");b&&Math.abs(b[0])>0&&o(f,{filter:{name:"blpDimension1",value:{nbInputs:p/2}}});let x=Tt(u,{experiment:m});o(f,{filter:{name:"apodizationDimension1",value:x.f2}}),o(f,{filter:{name:"zeroFillingDimension1",value:{nbPoints:y[0]}}}),o(f,{filter:{name:"fftDimension1",value:{}}}),u&&"nuslist"in u&&o(f,{filter:{name:"nusDimension2",value:{}}}),o(f,{filter:{name:"apodizationDimension2",value:x.f1}}),o(f,{filter:{name:"zeroFillingDimension2",value:{nbPoints:y[F?0:1]}}}),F?o(f,{filter:{name:"symmetrizeCosyLike",value:{}}}):o(f,{filter:{name:"phaseCorrectionTwoDimensions",value:{}}}),o(f,{filter:{name:"fftDimension2",value:{}}}),f.sort((N,D)=>$[N.name]-$[D.name])}}}}function ci(e){let{phc0:t=0,phc1:n=0}=e;return Ct([t,n])?{}:{ph0:t,ph1:n}}function Ct(e){return Array.isArray(e)?e.every(t=>!t&&t===0):Ct([e])}var ne=class{id="@zakodium/nmrium-core-plugins#AutoPostProcessingPlugin";version=1;migrations=[];onReadProcess;constructor(){this.onReadProcess={onProcessing:this.onPostProcessing.bind(this)}}onPostProcessing(t,n){Ot(t,n)}};function Je(){return new ne}import{FileCollection as nc}from"file-collection";var wt=["acqus","acqu2s"],re=["procs","proc2s"];function vt(e){return e.is1D?li(e):e.is2D?mi(e):{checked:!1,message:"Multi-dimensional n > 2 is not supported"}}function li(e){let t=e.isFID?["acqus"]:["acqus","procs"],n=t.every(i=>e[i]);return{checked:n,message:n?"":`File: ${e[e.isFID?"fid":"1r"]?.relativePath} is ignored, files: ${t.join(",")} are required.`}}function mi(e){let t=e.isFID?wt:wt.concat(re),n=t.every(i=>e[i]);return n&&e.isFID&&re.some(i=>e[i])&&!re.every(i=>e[i])&&(n=!1,t.push(...re)),{checked:n,message:n?"":`File: ${e.name} is ignored, files: ${t.join(",")} are required.`}}function We(e,t={}){let{logger:n,processingNumbers:i,experimentNumbers:r,dataSelection:o="both",keep1D:s=!0,keep2D:a=!0,onlyFirstProcessedData:l=!0}=t,c={},u=e.files.map(g=>g.relativePath);for(let g of e){let h,p,b,m=g.relativePath.split("/"),y=m.indexOf("pdata");if(y!==-1)h=Number(m[y+1]),p=Number(m[y-1]),b=m.slice(0,-3).join("/");else if(pi(g,u)){let x=m.indexOf(g.name);p=Number(m[x-1]),b=m.slice(0,-1).join("/")}else continue;if(Number.isNaN(p)&&(p=void 0),Number.isNaN(h)&&(h=void 0),r&&!r.includes(p))continue;c[b]||(c[b]={name:b,expno:p,processedData:{},fileCollectionItems:[]});let F=c[b];if(g.name==="vdlist"&&(F.vdlist=g),g.name==="difflist"&&(F.difflist=g),h){F.processedData||(F.processedData={}),F.processedData[h]||(F.processedData[h]={fileCollectionItems:[],name:b,expno:p,procno:h});let x=F.processedData[h];x.fileCollectionItems.push(g),g.name.match(/^(?:1r|1i|2rr|2ir|2ii|2ri|procs|proc2s|title|integrals.txt)$/)&&(x[g.name]=g),g.name==="2rr"&&(x.is2D=!0,x.isFT=!0),g.name==="1r"&&(x.is1D=!0,x.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(i)for(let g in c){let h=c[g].processedData,p={};for(let b in h)i.includes(Number.parseInt(b,10))&&(p[b]=h[b]);c[g].processedData=p}else if(l)for(let g in c){let h=c[g].processedData,p=Object.keys(h??{}).sort((b,m)=>Number(b)-Number(m))[0];h&&p!==void 0&&(c[g].processedData={firstProcessedNumber:h[p]})}let f=fi(n),d=[];for(let g in c){let h=c[g],{processedData:p,...b}=h;if(f(h,o)){let y=Object.keys(p??{});if(p&&y.length>0){let F=p[y[0]];F.procs&&(b.fileCollectionItems.push(F.procs),b.procs=F.procs),F.proc2s&&(b.fileCollectionItems.push(F.proc2s),b.proc2s=F.proc2s),F["integrals.txt"]&&(b.integrals=F["integrals.txt"])}d.push(b)}let m="ser"in b||"fid"in b;if(o==="fid"||o==="preferFID"&&m){n?.warn("Skipping FT data because it does not match the import filters");continue}for(let y in p){let F=p[y];(F["1r"]||F["2rr"])&&(b.acqus&&F.fileCollectionItems.push(b.acqus),b.acqu2s&&F.fileCollectionItems.push(b.acqu2s),b.vdlist&&(F.vdlist=b.vdlist),d.push({integrals:F["integrals.txt"],acqus:b.acqus,acqu2s:b.acqu2s,...F}))}}return s||(n?.warn("Skipping 1D data because it does not match the import filters"),d=d.filter(g=>!g.is1D)),a||(n?.warn("Skipping 2D data because it does not match the import filters"),d=d.filter(g=>!g.is2D)),ui(d,t.logger)}function ui(e,t){return e.filter(n=>{let{checked:i,message:r}=vt(n);return i||t?.warn(r),i})}function pi(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 fi(e){return(t,n)=>{let{processedData:i}=t,r=Object.keys(i??{}),o=i&&r.length>0&&["1r","1i","2rr"].some(u=>u in i[r[0]]),s="ser"in t||"fid"in t,c=s&&(n!=="ft"&&n!=="preferFT"||n==="preferFT"&&!o);return s&&!c&&e?.warn("Skipping RAW data because it does not match import filters"),c}}function ie(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 oe(e,t){for(let n in t.meta)e.meta[n]===void 0&&(e.meta[n]=t.meta[n]);for(let n in t.info)e.info[n]===void 0&&(e.info[n]=t.info[n]);for(let n in e.meta)Array.isArray(e.meta[n])||(e.meta[n]=[e.meta[n]])}import{convert as di}from"jcampconverter";async function k(e,t){if(!e)return kt();let n=await e.text(),{keepRecordsRegExp:i=/.*/}=t,r=di(n,{keepRecordsRegExp:i});return r.flatten.length===0?kt():r.flatten[0]}function kt(){return{info:{},meta:{},tmp:{},spectra:[],ntuples:{}}}async function Lt(e){let n=(await e.integrals?.text())?.split(/\r?\n/).slice(3).filter(Boolean)??[],i=[];for(let r=1;r<n.length;r++){let o=n[r].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:l}=o;i.push({from:Number.parseFloat(s),to:Number.parseFloat(a),integration:Number.parseFloat(l)})}}return i}function Ve(e,t="utf8"){return new TextDecoder(t).decode(e)}var gi=new TextEncoder;function qt(e){return gi.encode(e)}var yi=1024*8,hi=(()=>{let e=new Uint8Array(4),t=new Uint32Array(e.buffer);return!((t[0]=1)&e[0])})(),Xe={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},O=class e{buffer;byteLength;byteOffset;length;offset;lastWrittenByte;littleEndian;_data;_mark;_marks;constructor(t=yi,n={}){let i=!1;typeof t=="number"?t=new ArrayBuffer(t):(i=!0,this.lastWrittenByte=t.byteLength);let r=n.offset?n.offset>>>0:0,o=t.byteLength-r,s=r;(ArrayBuffer.isView(t)||t instanceof e)&&(t.byteLength!==t.buffer.byteLength&&(s=t.byteOffset+r),t=t.buffer),i?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 i=(this.offset+t)*2,r=new Uint8Array(i);r.set(new Uint8Array(this.buffer)),this.buffer=r.buffer,this.length=i,this.byteLength=i,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,n){let i=Xe[n].BYTES_PER_ELEMENT*t,r=this.byteOffset+this.offset,o=this.buffer.slice(r,r+i);if(this.littleEndian===hi&&n!=="uint8"&&n!=="int8"){let a=new Uint8Array(this.buffer.slice(r,r+i));a.reverse();let l=new Xe[n](a.buffer);return this.offset+=i,l.reverse(),l}let s=new Xe[n](o);return this.offset+=i,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 n="";for(let i=0;i<t;i++)n+=this.readChar();return n}readUtf8(t=1){return Ve(this.readBytes(t))}decodeText(t=1,n="utf8"){return Ve(this.readBytes(t),n)}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 n=0;n<t.length;n++)this._data.setUint8(this.offset++,t[n]);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 n=0;n<t.length;n++)this.writeUint8(t.charCodeAt(n));return this}writeUtf8(t){return this.writeBytes(qt(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 bi}from"is-any-array";import{matrixCreateEmpty as Fi,xSequentialFillFromStep as Di}from"ml-spectra-processing";function _t(e){for(let t in e){let{z:n}=e[t],{minX:i,minY:r,maxX:o,maxY:s}=e[t];if(i>o){[i,o]=[o,i];for(let a of n)a.reverse()}r>s&&(n.reverse(),[r,s]=[s,r]),e[t]={...e[t],z:n,minX:i,minY:r,maxY:s,maxX:o}}}function se(e,t){let{x:n,minMax:i,nbSubSpectra:r,template:o}=t;e.spectra||(e.spectra=[]);for(let s=0;s<r;s++){let a={};for(let l in i)a[l]=i[l].z[s];e.spectra.push({...o,data:{...a,x:n}})}}function ce(e,t,n={}){let i={};for(let h in e)e[h]&&(i[h]=new O(e[h]));let r=ae(t.meta.SI),o=ae(t.meta.SW_p),s=ae(t.meta.SF),a=s,l=ae(t.shiftOffsetVal||t.meta.OFFSET);t.meta.observeFrequency=s,t.meta.brukerReference=a,t.meta.DATATYPE="NMR Spectrum";let c=Number.parseInt(t.meta.BYTORDP,10);c=c?0:1;let u=t.meta.nbSubSpectra||1;if(c)for(let h in i)i[h].setLittleEndian();else for(let h in i)i[h].setBigEndian();let f={dataType:"NMR Spectrum",nbPoints:r,firstX:l,lastX:l-o/s,xUnit:"PPM",yUnit:"Arbitrary",isXYdata:!0,isFT:!0,nucleus:t.meta.NUC1,observeFrequency:s,title:t.meta.TITLE,deltaX:-(o/s)/(r-1)},d=f.deltaX,g=Di({from:l,step:d,size:r});if(u===1){let h={};for(let p in i){let b=i[p],m=new Float64Array(r);for(let y=0;y<r;++y)m[y]=b.readInt32();h[p]=m}t.spectra.push({...f,data:{...h,x:g}})}else{let{meta:h}=t,p=Number(h.SF[1]),b=Number(h.SW_p[1]||h.SW[1]),m=Number(h.OFFSET[1]),y=m-b/p,F={};for(let x in i)F[x]={minY:m,maxY:y,minX:g[0],maxX:g.at(-1),...xi(h,i[x])};_t(F),n.keepSpectra&&se(t,{minMax:F,x:g,nbSubSpectra:u,template:f}),t.minMax=F}}function ae(e){return Number(bi(e)?e[0]:e)}function xi(e,t){let n=e.SI.slice().reverse(),i=e.XDIM.slice().reverse(),r=n.map((g,h)=>Number.parseInt(String(g/i[h]),10)),[o,s]=n,[a,l]=i,c=Fi({nbRows:o,nbColumns:s}),[u,f]=[Number.MAX_SAFE_INTEGER,Number.MIN_SAFE_INTEGER],d=[];for(let g=0;g<r[0];g++)for(let h=0;h<r[1];h++){let p=h*l,b=g*a;d.push([b,p])}for(let[g,h]of d)for(let p=0;p<a;p++)for(let b=0;b<l;b++){let m=t.readInt32();u>m&&(u=m),f<m&&(f=m),c[p+g][b+h]=m}return{z:c,minZ:u,maxZ:f}}import{createStepArray as Ai,xMinMaxValues as Mi}from"ml-spectra-processing";var J={};Nt(J,{DQD:()=>Ni,QF:()=>Si,QSEQ:()=>z,QSIM:()=>Pi});var Si=0,Pi=1,z=2,Ni=3;function le(e,t,n){let i=Number.parseInt(t.meta.TD[0],10),r=new O(e),o=t.meta.nbSubSpectra||1,s=t.meta.AQ_mod,l=Number.parseInt(t.meta.DTYPA,10)===2,c=Number.parseFloat(t.meta.SW_h[0]),u=Number.parseFloat(t.meta.SFO1[0]);t.meta.DATATYPE="NMR FID";let f=1/(2*c),d=i*f,g=Number.parseInt(t.meta.BYTORDA,10);g=g?0:1,g?r.setLittleEndian():r.setBigEndian();let h=s===2?f:2*f,p=Ii({nbSubSpectra:o,isFloat:l,aqMode:s,td:i}),b={dataType:"NMR FID",dataTable:"(X++(R..R))",nbPoints:p,firstX:0,lastX:d,nucleus:t.meta.NUC1,xUnit:"Sec",yUnit:"Arbitrary",isXYdata:!0,isFID:!0,observeFrequency:u,title:t.meta.TITLE,deltaX:h},m=Ai({length:p,step:h});if(o<2){let y=Bt(r,{nbPoints:p,isFloat:l,aqMode:s});t.spectra=[{data:{x:m,...y},...b}]}else{let y={minX:m[0],maxX:m.at(-1),minY:0,maxY:o,minZ:0,maxZ:0},F=s===2?{re:{z:[],...y}}:{re:{z:[],...y},im:{z:[],...y}},x={re:{min:Number.MAX_SAFE_INTEGER,max:Number.MIN_SAFE_INTEGER},im:{min:Number.MAX_SAFE_INTEGER,max:Number.MIN_SAFE_INTEGER}};for(let N=0;N<o;N++){let D=Bt(r,{nbPoints:p,isFloat:l,aqMode:s});x.re=jt(D.re,x.re),x.im=jt(D.im??new Float64Array,x.im),F.re.z.push(D.re),F.im&&D.im&&F.im.z.push(D.im)}F.re={...F.re,minZ:x.re.min,maxZ:x.re.max},F.im={...F.im,minZ:x.im.min,maxZ:x.im.max},n.keepSpectra&&se(t,{minMax:F,x:m,nbSubSpectra:o,template:b}),t.minMax=F}}function jt(e,t){let{min:n,max:i}=Mi(e),{min:r,max:o}=t;return{min:Math.min(r,n),max:Math.max(o,i)}}function Bt(e,t){let{nbPoints:n,isFloat:i,aqMode:r}=t,o={re:new Float64Array(n),im:null},s=i?"readFloat64":"readInt32";if(r===2)for(let a=0;a<n;a++)o.re[a]=e[s]();else{o.im=new Float64Array(n);for(let a=0;a<n;a++)o.re[a]=e[s](),o.im[a]=e[s]()}return o}function Ii(e){let{nbSubSpectra:t,isFloat:n,aqMode:i,td:r}=e,o=r;if(t>1){let s=n?128:256;o=Math.trunc(Math.ceil(r/s)*s)}return i===2?o:o/2>>0}async function Ut(e,t){let n={},i=[],r=e["1r"]||e["1i"]?["1r","1i"]:["fid"];function o(a,l){return a.then(c=>{n[l]=c})}for(let a of r){let l=e[a];l&&i.push(o(l.arrayBuffer(),a))}i.push(k(e.procs,t).then(a=>{n.procs=a}),k(e.acqus,t).then(a=>{n.acqus=a})),e.quantFactorSample&&i.push(Ti(e).then(a=>{n.ereticFactor=a})),e.integrals&&i.push(Lt(e).then(a=>{n.integrals=a}));let s=Ri(e);return s&&i.push(s.text().then(a=>{n.titleFile=a})),await Promise.all(i),Ei(n)}function Ri(e){if("title"in e&&e.title)return e.title}function Ei(e){let{procs:t,acqus:n,integrals:i,ereticFactor:r,titleFile:o}=e,s={...t};oe(s,n);let a={...s.info};s.info=a;let l={...s.meta};s.meta=l;let{epoch:c,date:u}=ie(l.DATE);return c!==null&&Object.assign(a,{epoch:c,date:u}),i&&Object.assign(s,{integrals:i}),r&&(a.ereticFactor=r),o&&(l.TITLE_FILE=o),e["1r"]||e["1i"]?ce({re:e["1r"],im:e["1i"]},s):e.fid&&le(e.fid,s),s}async function Ti(e){let n=(await e.quantFactorSample?.text())?.match(/<Application[\w\W]+<Eretic_Factor>(?<ereticFactor>[\d.]+)/);return Number(n?.groups?.ereticFactor)}function He(e,t){for(let n in t.meta)n in e.meta?(Array.isArray(e.meta[n])||(e.meta[n]=[e.meta[n]]),e.meta[n].push(t.meta[n])):e.meta[n]===void 0&&(e.meta[n]=[t.meta[n]]);return e}async function $t(e,t){let n={},i=[],r=["2rr","2ri","2ir","2ii","ser"];function o(s,a){return s.then(l=>{n[a]=l})}for(let s of r){let a=e[s];a&&i.push(o(a.arrayBuffer(),s))}if(i.push(o(k(e.procs,t),"procs"),o(k(e.proc2s,t),"proc2s"),o(k(e.acqus,t),"acqus"),o(k(e.acqu2s,t),"acqu2s")),"nuslist"in e&&e.nuslist){let s=e.nuslist;i.push(o(s.text(),"nuslist"))}return e.vdlist&&i.push(o(e.vdlist.text(),"vdlist")),e.difflist&&i.push(o(e.difflist.text(),"difflist")),await Promise.all(i),Oi(n,t)}function Oi(e,t){let n=He(e.procs,e.proc2s),i=He(e.acqus,e.acqu2s);oe(n,i);let{epoch:r,date:o}=ie(n.meta.DATE);if(o.length>0&&(n.info={...n.info,epoch:r,date:o}),e.nuslist&&(n.info.nuslist=e.nuslist.split(/\r?\n/).filter(Boolean).map(Number.parseFloat)),e.vdlist){let p=[];for(let b of e.vdlist.split(`
2
- `)){if(!b)continue;let[m,y]=b.trim().match(/\s*([\d.]+)\s*([a-zA-Z]+)/)?.slice(1)||[];y&&p.push(`${m}${y}`)}n.meta.vdlist=p}if(e.difflist){let p=[];for(let b of e.difflist.split(`
3
- `)){if(!b)continue;let[m]=b.trim().match(/\s*([\d.]+)\s*/)?.slice(1)||[];p.push(m)}n.meta.difflist=p}n.meta.SW_p||(n.meta.SW_p=n.meta.SW_h),n.meta.SF||(n.meta.SF=n.meta.SFO1);let s=["2rr","2ri","2ir","2ii"].some(p=>p in e);n.meta.nbSubSpectra=s?Number.parseInt(n.meta.SI[1],10):Number.parseInt(n.meta.TD[1],10);let a=0,l=0,c=0,u=0;if(s){let p=Number(n.meta.SF[1]),b=Number(n.meta.SW_p[1]||n.meta.SW[1]);u=Number(n.meta.OFFSET[1]),c=Number(n.meta.OFFSET[0]),a=u,l=u-b/p,n.meta.firstY=a,n.meta.lastY=l,ce({rr:e["2rr"],ri:e["2ri"],ir:e["2ir"],ii:e["2ii"]},n,t)}else if(e.ser){a=0,l=n.meta.nbSubSpectra;let p=Number(n.meta.SW[0]),b=Number(n.meta.SW[1]),m=Number(n.meta.SFO1[0]),y=Number(n.meta.SFO1[1]),F=Number(n.meta.O1[0]),x=Number(n.meta.O1[1]);c=F/m+p/2,u=x/y+b/2,le(e.ser,n,t)}if(t.keepSpectra){let{nbSubSpectra:p}=n.meta,b=(l-a)/(p-1),m=a;for(let y=0;y<p;y++)m+=b,n.spectra[y].pageValue=m}let{NUC1:f,AXNUC:d,SF:g}=n.meta,h=d||f||[];return n.info["2D_Y_NUCLEUS"]=h[1],n.info["2D_X_NUCLEUS"]=h[0],n.info["2D_Y_FRECUENCY"]=g[1],n.info["2D_X_FRECUENCY"]=g[0],n.info["2D_Y_OFFSET"]=u,n.info["2D_X_OFFSET"]=c,n.info.twoD=!0,n.twoD=!0,n}async function Ye(e,t={}){let n,i=!1,r=!1;if(["ser","2rr","2ri","2ir","2ii"].some(s=>s in e))i=!0,n=await $t(e,t);else if(e["1r"]||e["1i"]||e.fid)r=!0,n=await Ut(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])}n.source=i?{...o,is2D:i}:{...o,is1D:r},t.keepFiles&&(n.source.files=e.fileCollectionItems),n.meta.DATE=Number(n.meta.DATE),n.meta.GRPDLY&&(Ge(n.meta,"DSPFVS",n.meta.DSPFVS),Ge(n.meta,"GRPDLY",n.meta.GRPDLY),Ge(n.meta,"DECIM",n.meta.DECIM));for(let s in n.meta)Array.isArray(n.meta[s])&&(n.meta[s].length===1||typeof n.meta[s][0]=="string"&&n.meta[s][0].includes("(0.."))&&(n.meta[s]=n.meta[s][0]);return n}function Ge(e,t,n){n!==void 0&&(Array.isArray(n)?e[t]=n.slice():e[t]=[n])}var q={};Nt(q,{ECHO_ANTIECHO:()=>qi,QF:()=>Ci,QSEC:()=>wi,STATES:()=>ki,STATES_TPPI:()=>Li,TTPI:()=>vi});var Ci=1,wi=2,vi=3,ki=4,Li=5,qi=6;import{formatSpectra as Gi}from"@zakodium/nmrium-core";function me(e){let t=[];for(let n of e){if(!n)continue;let{groups:{value:i,unit:r}={}}=n.trim().match(/[$$]*\s*(?<value>[\d.]+)\s*(?<unit>[a-zA-Z]+)/)||{};t.push(_i(i,r))}return t}function _i(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 Jt}from"is-any-array";function _(e){if(ji(e))return Bi(e)?e.map(zt):zt(e);if(typeof e=="object"&&e!==null){let t={};for(let n in e)t[n]=_(e[n]);return t}return e}function ji(e){return Jt(e)}function zt(e){return Float64Array.from(e)}function Bi(e){return Jt(e[0])}import{getOneIfArray as K}from"@zakodium/nmrium-core";import{getGyromagneticRatio as Ji}from"gyromagnetic-ratio";import{isAnyArray as Yt}from"is-any-array";import{getFrequency as Wi}from"nmr-processing";import{isAnyArray as W}from"is-any-array";function ue(e){return typeof e=="number"}function pe(e){let{phc0:t,phc1:n}=e;return!W(t)&&!ue(t)||!W(n)&&!ue(n)||W(t)&&!ue(t[0])||W(n)&&!ue(n[0])?{}:(W(n)?n[0]*=-1:n*=-1,W(t)?t[0]*=-1:t*=-1,{phc0:t,phc1:n})}function Vt(e,t,n){if(e>0)return Number(e);if(t>14||t===0)return 0;if(Wt[t]){let i=Wt[t];if(!i[n])throw new Error(`decim ${n} not in lookup table for dspfvs ${t}`);return i[n]}else throw new Error(`dspfvs ${t} not in lookup table`)}var Wt={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 Ui=new Map([[String(J.QSIM),"notPhaseSensitive"],["notphasesensitive","notPhaseSensitive"],[String(J.QSEQ),"QSEQ"],["qseq","QSEQ"],[String(q.TTPI),"TPPI"],["tppi","TPPI"],[String(q.STATES),"States"],["states","States"],[String(q.STATES_TPPI),"States-TPPI"],["tppi-states","States-TPPI"],[String(q.ECHO_ANTIECHO),"Echo-antiecho"],["echo-antiecho","Echo-antiecho"]]);function Xt(e){let t=String(e).toLowerCase().replaceAll(" ","");return Ui.get(t)}import{normalizeNucleus as $i}from"nmr-processing";function j(e,t=","){if(e&&typeof e=="string")return e.split(t)}function fe(e,t,n){let i=[];if(e[`${n}AXNUC`]&&(i=e[`${n}AXNUC`],Array.isArray(i)||(i=[i]),i=w(i)),i.length===0&&e[`${n}NUC1`]&&(i=e[`${n}NUC1`],Array.isArray(i)||(i=[i]),i=w(i)),i.length===0&&e[".NUCLEUS"]){let r=j(e[".NUCLEUS"]);if(e[`${n}SYMBOL`]){let o=e[`${n}SYMBOL`].split(","),s=o.findIndex(l=>l.includes("2")),a=o.findIndex(l=>l.includes("1"));s!==-1&&a!==-1&&r?i=w([r[s],r[a]]):i=w(r).reverse()}else i=w(r)}return i.length===0&&e[".OBSERVENUCLEUS"]&&(i=w([e[".OBSERVENUCLEUS"]])),i.length===0&&t.experiment&&(i=w(Ht(t.experiment[0]))),zi(e)&&(i=[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"))&&(i=Ht(t.experiment[0])),i.map($i)}function zi(e){return e["2D_X_NUCLEUS"]&&!e["2D_X_NUCLEUS"].includes("off")&&e["2D_Y_NUCLEUS"]&&!e["2D_Y_NUCLEUS"].includes("off")}function Ht(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 w(e){if(!e)return[];let t=e.map(i=>String(i).replaceAll(/[^A-Za-z0-9]/g,"").replace("NA","").replace("off","")),n=0;for(let i of t)i||n++;return n===0?t:[]}function S(e,t,n,i=!1){n===void 0||t in e&&!i||(Array.isArray(n)?e[t]=n.map(Gt):e[t]=[Gt(n)])}function Gt(e){return typeof e=="string"&&(e.startsWith("<")&&e.endsWith(">")&&(e=e.slice(1,-1)),e=e.replace(/\$.*/,"").trim()),e}function ge(e,t={}){let{prefix:n="",logger:i}=t,r={dimension:0,nucleus:[],isFid:!1,isFt:!1},o=JSON.stringify(e),s=/\r\n/.exec(o)?`\r
1
+ var pi=Object.defineProperty;var Ot=(e,t)=>{for(var r in t)pi(e,r,{get:t[r],enumerable:!0})};import{NMRiumCore as ca}from"@zakodium/nmrium-core";import{Filters1D as xi,Filters2D as Di}from"nmr-processing";import{getOneIfArray as fi}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=(fi(t[`${i}SPECTYP`])||"").replace(/^<(.*)>$/,"$1").toLowerCase();return o.length>0&&o!=="undefined"?o:e.dimension?`${e.dimension}d`:""}import{getOneIfArray as Et}from"@zakodium/nmrium-core";var di=["no","exponential","modifiedGaussian","sine","qsine","trap","user","sinc","qsinc","traf","trafs"];function gi(e){return e in Tt}function Ve(e,t){let{prefix:r="",index:n=0}=t,i=Et(e[`${r}WDW`],n),o=di[i?Number(i):0],s={};if(!gi(o))return s;let a=Tt[o];if(a){let{kind:c,parameters:l}=a,m={};for(let p in l){let f=l[p],{source:g,processor:y}=f;if(g){let u=Et(e[`${r}${g}`],n);if(!u)continue;let h=Number(u);m[p]=y?y(h):h}else f.value!==void 0&&(m[p]=f.value)}s[c]={apply:!0,options:m}}return s}var Tt={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 Ct={sineBell:vt({offset:0})},wt={cosy:{...Ct},hmbc:{...Ct},hsqc:{sineBell:vt({offset:.5})}},yi={...wt};function He(e="",t=1){let r=hi(e),n={},i=t===1?wt[r||""]:yi[r||""];return i&&(n=structuredClone(i)),n}function vt(e){return{apply:!0,options:e}}function hi(e){let r=e.toLowerCase().match(/cosy|hsqc|hmbc/);return r?r[0]:null}function Lt(e,t={}){let{prefix:r="",experiment:n=ce(e)}=t;return e[`${r}WDW`]?{f2:Ve(e,{...t,index:0}),f1:Ve(e,{...t,index:1})}:{f2:He(n,1),f1:He(n,2)}}import{Filters1D as bi}from"nmr-processing";var Ge=["digitalFilter","backwardLinearPrediction","forwardLinearPrediction","apodization","zeroFilling","fft",["shiftX","phaseCorrection","baselineCorrection"]],W={};for(let e=0;e<Ge.length;e++){let t=Ge[e];for(let r of Array.isArray(t)?t:[t])W[r]=e}for(let e of Object.values(bi))e.name in W||(W[e.name]=Ge.length);import{Filters2D as Fi}from"nmr-processing";var Ye=["digitalFilter2D","blpDimension1","flpDimension1","apodizationDimension1","zeroFillingDimension1","fftDimension1","blpDimension2","flpDimension2","nusDimension2","apodizationDimension2","zeroFillingDimension2","fftDimension2","phaseCorrectionTwoDimensions",["shift2DX","shift2DY","symmetrizeCosyLike"]],X={};for(let e=0;e<Ye.length;e++){let t=Ye[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]=Ye.length);var Si=new Set(["backwardLinearPrediction","forwardLinearPrediction","digitalFilter2D","phaseCorrectionTwoDimensions","blpDimension1","flpDimension1","apodizationDimension1","apodizationDimension2","zeroFillingDimension1","fftDimension1","blpDimension2","flpDimension2","zeroFillingDimension2","fftDimension2","nusDimension2","symmetrizeCosyLike"]);function Mi(e,t){let{filter:r,experimentalFeatures:n=!1}=t,{name:i}=r;({...xi,...Di})[i]&&(e.some(s=>s.name===i)||(n||!Si.has(i))&&e.push({...r,enabled:!0}))}function kt(e,t={}){let{data:r}=e;if(!r)return;let{autoProcessing:n,experimentalFeatures:i}=t,o=(a,c)=>Mi(a,{...c,experimentalFeatures:i}),{spectra:s}=r;for(let a of s){let{data:c,info:l,meta:m,filters:p}=a,{dimension:f,isFid:g}=l;if(g){if(f===1){let y=c.re.length,{tdOff:u,digitalFilter:h}=l;if(h&&h>0&&o(p,{filter:{name:"digitalFilter",value:{digitalFilterValue:h}}}),!n)continue;u&&Math.abs(u)>0&&o(p,{filter:{name:"backwardLinearPrediction",value:{nbInputs:y/2}}}),o(p,{filter:{name:"apodization",value:{exponential:{apply:!0,options:{lineBroadening:1}}}}}),o(p,{filter:{name:"zeroFilling",value:{nbPoints:2*y}}}),o(p,{filter:{name:"fft",value:{}}}),o(p,{filter:{name:"phaseCorrection",value:Pi(l)}}),p.sort((d,b)=>W[d.name]-W[b.name])}else if(f===2){if(!n)continue;let y=c.re.z.length,u=c.re.z[0].length,{tdOff:h,experiment:d=""}=l,b=l.spectrumSize;Array.isArray(b)&&b.length>1?(b[0]<=u&&(b[0]=u*2),b[0]<=y&&(b[0]=y*2)):b=[u*2,2*y];let F=d.toLowerCase().includes("cosy");h&&Math.abs(h[0])>0&&o(p,{filter:{name:"blpDimension1",value:{nbInputs:u/2}}});let S=Lt(m,{experiment:d});o(p,{filter:{name:"apodizationDimension1",value:S.f2}}),o(p,{filter:{name:"zeroFillingDimension1",value:{nbPoints:b[0]}}}),o(p,{filter:{name:"fftDimension1",value:{}}}),m&&"nuslist"in m&&o(p,{filter:{name:"nusDimension2",value:{}}}),o(p,{filter:{name:"apodizationDimension2",value:S.f1}}),o(p,{filter:{name:"zeroFillingDimension2",value:{nbPoints:b[F?0:1]}}}),F?o(p,{filter:{name:"symmetrizeCosyLike",value:{}}}):o(p,{filter:{name:"phaseCorrectionTwoDimensions",value:{}}}),o(p,{filter:{name:"fftDimension2",value:{}}}),p.sort((P,x)=>X[P.name]-X[x.name])}}}}function Pi(e){let{phc0:t=0,phc1:r=0}=e;return _t([t,r])?{}:{ph0:t,ph1:r}}function _t(e){return Array.isArray(e)?e.every(t=>!t&&t===0):_t([e])}var le=class{id="@zakodium/nmrium-core-plugins#AutoPostProcessingPlugin";version=1;migrations=[];onReadProcess;constructor(){this.onReadProcess={onProcessing:this.onPostProcessing.bind(this)}}onPostProcessing(t,r){kt(t,r)}};function Ke(){return new le}import{FileCollection as Oc}from"file-collection";var qt=["acqus","acqu2s"],me=["procs","proc2s"];function jt(e){return e.is1D?Ai(e):e.is2D?Ni(e):{checked:!1,message:"Multi-dimensional n > 2 is not supported"}}function Ai(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 Ni(e){let t=e.isFID?qt:qt.concat(me),r=t.every(n=>e[n]);return r&&e.isFID&&me.some(n=>e[n])&&!me.every(n=>e[n])&&(r=!1,t.push(...me)),{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,u,h,d=g.relativePath.split("/"),b=d.indexOf("pdata");if(b!==-1)y=Number(d[b+1]),u=Number(d[b-1]),h=d.slice(0,-3).join("/");else if(Ri(g,m)){let S=d.indexOf(g.name);u=Number(d[S-1]),h=d.slice(0,-1).join("/")}else continue;if(Number.isNaN(u)&&(u=void 0),Number.isNaN(y)&&(y=void 0),i&&!i.includes(u))continue;l[h]||(l[h]={name:h,expno:u,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:u,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,u={};for(let h in y)n.includes(Number.parseInt(h,10))&&(u[h]=y[h]);l[g].processedData=u}else if(c)for(let g in l){let y=l[g].processedData,u=Object.keys(y??{}).sort((h,d)=>Number(h)-Number(d))[0];y&&u!==void 0&&(l[g].processedData={firstProcessedNumber:y[u]})}let p=Oi(r),f=[];for(let g in l){let y=l[g],{processedData:u,...h}=y;if(p(y,o)){let b=Object.keys(u??{});if(u&&b.length>0){let F=u[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 u){let F=u[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)),Ii(f,t.logger)}function Ii(e,t){return e.filter(r=>{let{checked:n,message:i}=jt(r);return n||t?.warn(i),n})}function Ri(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 Oi(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 ue(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 pe(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 Ei}from"jcampconverter";async function _(e,t){if(!e)return Bt();let r=await e.text(),{keepRecordsRegExp:n=/.*/}=t,i=Ei(r,{keepRecordsRegExp:n});return i.flatten.length===0?Bt():i.flatten[0]}function Bt(){return{info:{},meta:{},tmp:{},spectra:[],ntuples:{}}}async function Ut(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 Qe(e,t="utf8"){return new TextDecoder(t).decode(e)}var Ti=new TextEncoder;function $t(e){return Ti.encode(e)}var Ci=1024*8,wi=(()=>{let e=new Uint8Array(4),t=new Uint32Array(e.buffer);return!((t[0]=1)&e[0])})(),et={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},C=class e{buffer;byteLength;byteOffset;length;offset;lastWrittenByte;littleEndian;_data;_mark;_marks;constructor(t=Ci,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=et[r].BYTES_PER_ELEMENT*t,i=this.byteOffset+this.offset,o=this.buffer.slice(i,i+n);if(this.littleEndian===wi&&r!=="uint8"&&r!=="int8"){let a=new Uint8Array(this.buffer.slice(i,i+n));a.reverse();let c=new et[r](a.buffer);return this.offset+=n,c.reverse(),c}let s=new et[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 Qe(this.readBytes(t))}decodeText(t=1,r="utf8"){return Qe(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($t(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 vi}from"is-any-array";import{matrixCreateEmpty as Li,xSequentialFillFromStep as ki}from"ml-spectra-processing";function zt(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 fe(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 ge(e,t,r={}){let n={};for(let y in e)e[y]&&(n[y]=new C(e[y]));let i=de(t.meta.SI),o=de(t.meta.SW_p),s=de(t.meta.SF),a=s,c=de(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 p={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=p.deltaX,g=ki({from:c,step:f,size:i});if(m===1){let y={};for(let u in n){let h=n[u],d=new Float64Array(i);for(let b=0;b<i;++b)d[b]=h.readInt32();y[u]=d}t.spectra.push({...p,data:{...y,x:g}})}else{let{meta:y}=t,u=Number(y.SF[1]),h=Number(y.SW_p[1]||y.SW[1]),d=Number(y.OFFSET[1]),b=d-h/u,F={};for(let S in n)F[S]={minY:d,maxY:b,minX:g[0],maxX:g.at(-1),..._i(y,n[S])};zt(F),r.keepSpectra&&fe(t,{minMax:F,x:g,nbSubSpectra:m,template:p}),t.minMax=F}}function de(e){return Number(vi(e)?e[0]:e)}function _i(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=Li({nbRows:o,nbColumns:s}),[m,p]=[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 u=y*c,h=g*a;f.push([h,u])}for(let[g,y]of f)for(let u=0;u<a;u++)for(let h=0;h<c;h++){let d=t.readInt32();m>d&&(m=d),p<d&&(p=d),l[u+g][h+y]=d}return{z:l,minZ:m,maxZ:p}}import{createStepArray as Ui,xMinMaxValues as $i}from"ml-spectra-processing";var H={};Ot(H,{DQD:()=>Bi,QF:()=>qi,QSEQ:()=>V,QSIM:()=>ji});var qi=0,ji=1,V=2,Bi=3;function ye(e,t,r){let n=Number.parseInt(t.meta.TD[0],10),i=new C(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 p=1/(2*l),f=n*p,g=Number.parseInt(t.meta.BYTORDA,10);g=g?0:1,g?i.setLittleEndian():i.setBigEndian();let y=s===2?p:2*p,u=zi({nbSubSpectra:o,isFloat:c,aqMode:s,td:n}),h={dataType:"NMR FID",dataTable:"(X++(R..R))",nbPoints:u,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=Ui({length:u,step:y});if(o<2){let b=Wt(i,{nbPoints:u,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 P=0;P<o;P++){let x=Wt(i,{nbPoints:u,isFloat:c,aqMode:s});S.re=Jt(x.re,S.re),S.im=Jt(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&&fe(t,{minMax:F,x:d,nbSubSpectra:o,template:h}),t.minMax=F}}function Jt(e,t){let{min:r,max:n}=$i(e),{min:i,max:o}=t;return{min:Math.min(i,r),max:Math.max(o,n)}}function Wt(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 zi(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 Xt(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(Xi(e).then(a=>{r.ereticFactor=a})),e.integrals&&n.push(Ut(e).then(a=>{r.integrals=a}));let s=Ji(e);return s&&n.push(s.text().then(a=>{r.titleFile=a})),await Promise.all(n),Wi(r)}function Ji(e){if("title"in e&&e.title)return e.title}function Wi(e){let{procs:t,acqus:r,integrals:n,ereticFactor:i,titleFile:o}=e,s={...t};pe(s,r);let a={...s.info};s.info=a;let c={...s.meta};s.meta=c;let{epoch:l,date:m}=ue(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"]?ge({re:e["1r"],im:e["1i"]},s):e.fid&&ye(e.fid,s),s}async function Xi(e){let r=(await e.quantFactorSample?.text())?.match(/<Application[\w\W]+<Eretic_Factor>(?<ereticFactor>[\d.]+)/);return Number(r?.groups?.ereticFactor)}function tt(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 Vt(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),Vi(r,t)}function Vi(e,t){let r=tt(e.procs,e.proc2s),n=tt(e.acqus,e.acqu2s);pe(r,n);let{epoch:i,date:o}=ue(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 u=[];for(let h of e.vdlist.split(`
2
+ `)){if(!h)continue;let[d,b]=h.trim().match(/\s*([\d.]+)\s*([a-zA-Z]+)/)?.slice(1)||[];b&&u.push(`${d}${b}`)}r.meta.vdlist=u}if(e.difflist){let u=[];for(let h of e.difflist.split(`
3
+ `)){if(!h)continue;let[d]=h.trim().match(/\s*([\d.]+)\s*/)?.slice(1)||[];u.push(d)}r.meta.difflist=u}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(u=>u 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 u=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/u,r.meta.firstY=a,r.meta.lastY=c,ge({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 u=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+u/2,m=S/b+h/2,ye(e.ser,r,t)}if(t.keepSpectra){let{nbSubSpectra:u}=r.meta,h=(c-a)/(u-1),d=a;for(let b=0;b<u;b++)d+=h,r.spectra[b].pageValue=d}let{NUC1:p,AXNUC:f,SF:g}=r.meta,y=f||p||[];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 nt(e,t={}){let r,n=!1,i=!1;if(["ser","2rr","2ri","2ir","2ii"].some(s=>s in e))n=!0,r=await Vt(e,t);else if(e["1r"]||e["1i"]||e.fid)i=!0,r=await Xt(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&&(rt(r.meta,"DSPFVS",r.meta.DSPFVS),rt(r.meta,"GRPDLY",r.meta.GRPDLY),rt(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 rt(e,t,r){r!==void 0&&(Array.isArray(r)?e[t]=r.slice():e[t]=[r])}var B={};Ot(B,{ECHO_ANTIECHO:()=>Qi,QF:()=>Hi,QSEC:()=>Gi,STATES:()=>Ki,STATES_TPPI:()=>Zi,TTPI:()=>Yi});var Hi=1,Gi=2,Yi=3,Ki=4,Zi=5,Qi=6;import{formatSpectra as So}from"@zakodium/nmrium-core";function he(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(eo(n,i))}return t}function eo(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 Gt}from"is-any-array";function U(e){if(to(e))return ro(e)?e.map(Ht):Ht(e);if(typeof e=="object"&&e!==null){let t={};for(let r in e)t[r]=U(e[r]);return t}return e}function to(e){return Gt(e)}function Ht(e){return Float64Array.from(e)}function ro(e){return Gt(e[0])}import{isAnyArray as xo}from"is-any-array";import{getOneIfArray as io}from"@zakodium/nmrium-core";var no=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"],[String(B.ECHO_ANTIECHO),"Echo-antiecho"],["echo-antiecho","Echo-antiecho"]]);function Yt(e){let t=String(e).toLowerCase().replaceAll(" ","");return no.get(t)}function D(e,t,r,n=!1){r===void 0||t in e&&!n||(Array.isArray(r)?e[t]=r.map(Kt):e[t]=[Kt(r)])}function Kt(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(Zt):Zt(e)}function Zt(e){return typeof e=="string"?Number.parseFloat(e):e}function I(e,t,r){r!==void 0&&D(e,t,G(r))}function Qt(e,t,r){let{prefix:n=""}=r,i=t[`${n}.ACQUISITIONSCHEME`]||t[`${n}FnMODE`];i&&D(e,"acquisitionScheme",Yt(io(i,1))),D(e,"acquisitionMode",t[`${n}.ACQUISITIONMODE`]),I(e,"lpNumberOfCoefficients",t[`${n}NCOEF`]),I(e,"linearPredictionBin",t[`${n}LPBIN`]),I(e,"tdOff",t[`${n}TDoff`])}import{getOneIfArray as uo}from"@zakodium/nmrium-core";import{UTCDate as oo}from"@date-fns/utc";import{getOneIfArray as so}from"@zakodium/nmrium-core";import{getTime as tr,isValid as rr,parse as ao,parseISO as co}from"date-fns";import{removeComment as lo}from"jcampconverter";function er(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 nr(e,t,r={}){let n=t.LONGDATE??so(t.DATE);if(!n)return;let{separator:i}=r,o=Number(n)*1e3;er(e,o||mo(n,i))}function mo(e,t){let r=lo(e,t),n=co(r,{});if(rr(n)){let o=n.getTimezoneOffset()*60*1e3;return tr(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=ao(r,o,new oo,{useAdditionalDayOfYearTokens:!0});if(rr(s))return tr(s)}return null}function ir(e,t,r){let{prefix:n="",separator:i}=r;(t.LONGDATE||t.DATE)&&nr(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"]||uo(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 or(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 po}from"is-any-array";import{calculateRelativeFrequency as fo}from"nmr-processing";function sr(e,t,r){let{prefix:n=""}=r;if(I(e,"originFrequency",t[`${n}SFO1`]),e.dimension===1&&I(e,"originFrequency",t[".OBSERVEFREQUENCY"]),!e.originFrequency&&e.dimension===2&&".OBSERVEFREQUENCY"in t){let i=G(t[".OBSERVEFREQUENCY"]);if(po(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=fo(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 T(e,t,r=""){return e.every(n=>`${r}${n}`in t)}import{matrixTranspose as go}from"ml-spectra-processing";function ne(e,t){return go(e).map(t)}function ar(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&&T(["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)&&T(["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&&yo(t,e)}function yo(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]),p;if(t.isFid){if(!T(["numberOfPoints","spectralWidth"],t))return;p=m+(s*.5-l)*a/s}else if(T(["firstX","lastX","numberOfPoints"],t)){let f=Number.parseFloat(t.firstX),g=Number.parseFloat(t.lastX),y=(g+f)/2,u=(g-f)/(s+1),h=u<0?f:g+(l-1)*u;p=(y-h)/c+m}p!==void 0&&!Number.isNaN(p)&&(t.frequencyOffset=p*c)}}import{isAnyArray as Y}from"is-any-array";function be(e){return typeof e=="number"}function Fe(e){let{phc0:t,phc1:r}=e;return!Y(t)&&!be(t)||!Y(r)&&!be(r)||Y(t)&&!be(t[0])||Y(r)&&!be(r[0])?{}:(Y(r)?r[0]*=-1:r*=-1,Y(t)?t[0]*=-1:t*=-1,{phc0:t,phc1:r})}function cr(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 p=0;p<i.length;p+=m){let f=i[p].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=Fe({phc0:c,phc1:l});e={...e,...m}}}import{getOneIfArray as ur}from"@zakodium/nmrium-core";import{getGyromagneticRatio as ho}from"gyromagnetic-ratio";function mr(e,t,r){if(e>0)return e;if(t>14||t===0)return 0;if(lr[t]){let n=lr[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 lr={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 pr(e,t,r){let{prefix:n=""}=r,i=e.nucleus[0],o=ho(i);if(D(e,"probeName",t[`${n}PROBHD`]),D(e,"baseFrequency",t[`${n}BF1`]||t[`${n}SF`]),I(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&&T(["baseFrequency","originFrequency"],e)){let a=2*Math.PI*(e.baseFrequency[0]/o)*1e6;D(e,"fieldStrength",a)}if(I(e,"spectralWidth",t[`${n}SW`]||t[`${n}QM_SPECTRAL_WIDTH`]),e.dimension===1&&t[`${n}SweepWidth`]&&e.originFrequency&&I(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;I(e,"acquisitionTime",a)}if(!e.acquisitionTime&&T(["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/(ur(t[`${n}P`]).split(r.separator||`
4
+ `)[1].split(" ")[1]*4);D(e,"pulseStrength90",a)}if(t[`${n}D`]){let a=ur(t[`${n}D`]).split(r.separator||`
5
+ `)[1].split(" ")[1];I(e,"relaxationTime",a)}if(I(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||T(["dspfvs","decim"],e))){let{groupDelay:a,dspfvs:c,decim:l}=e,m=mr(a?.[0]??0,c?.[0],l?.[0]);D(e,"digitalFilter",m)}if(T(["numberOfPoints","spectralWidth"],e)){let{spectralWidth:a,numberOfPoints:c}=e,l=c.map((m,p)=>e.isFid?e.acquisitionTime[0]/(m-1):a[p]/(m-1));D(e,"increment",l)}}function $(e,t=","){if(e&&typeof e=="string")return e.split(t)}function fr(e,t,r){let{prefix:n=""}=r,i=e.dimension<2,o=e.dataClass?.[0].toUpperCase()==="NTUPLES",s=T(["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(I(e,"firstX",e.first[a]),I(e,"lastX",e.last[a]),I(e,"numberOfPoints",e.varDim[a]),!("spectralWidth"in e)){let{lastX:c,numberOfPoints:l,firstX:m,originFrequency:p}=e;D(e,"spectralWidth",e.isFid?ne([l,c],f=>f[0]/(2*f[1])):ne([c,m,p],f=>Math.abs(f[0]-f[1])/f[2]))}}}import{normalizeNucleus as bo}from"nmr-processing";function xe(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(dr(t.experiment[0]))),Fo(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=dr(t.experiment[0])),n.map(bo)}function Fo(e){return e["2D_X_NUCLEUS"]&&!e["2D_X_NUCLEUS"].includes("off")&&e["2D_Y_NUCLEUS"]&&!e["2D_Y_NUCLEUS"].includes("off")}function dr(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 gr(e,t,r){let{logger:n,prefix:i=""}=r;if(e.nucleus=xe(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 yr(e,t,r={}){let{prefix:n="",separator:i=`
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 De(e,t={}){let{prefix:r="",logger:n}=t,i={creator:or(e),dimension:0,nucleus:[],isFid:!1,isFt:!1},o=JSON.stringify(e),s=/\r\n/.exec(o)?`\r
4
7
  `:`
5
- `,{JCAMPDX:a="",ORIGIN:l=""}=e,c=String(a).toLowerCase()+String(l).toLowerCase();"SPECTROMETER/DATASYSTEM"in e&&(c=e["SPECTROMETER/DATASYSTEM"]);let u=(m=[])=>{for(let y of m)if(!(y in r))return!1;return!0};(c.includes("mestre")||c.includes("nova"))&&(c="mnova"),r.creator=c,e.LONGDATE&&Ke(r,Date.parse(e.LONGDATE)),S(r,"pulseSequence",e[".PULSESEQUENCE"]||e[".PULPROG"]||e[`${n}PULPROG`]);let f=e[`${n}OWNER`];if(f&&S(r,"owner",f.replaceAll(/\$\$.*/gm,"")),S(r,"aqMod",e[`${n}AQ_mod`]),S(r,"experiment",te(r,e,{prefix:n})),r.nucleus=fe(e,r,n),r.nucleus.length===0)if(i)i?.warn("There is not a nucleus detected, assuming 1H"),r.nucleus=["1H"];else throw new Error("There is not a nucleus detected");r.dimension=r.nucleus.length;let d=e[`${n}.ACQUISITIONSCHEME`]||e[`${n}FnMODE`];if(d&&S(r,"acquisitionScheme",Xt(K(d,1))),S(r,"acquisitionMode",e[`${n}.ACQUISITIONMODE`]),E(r,"lpNumberOfCoefficients",e[`${n}NCOEF`]),E(r,"linearPredictionBin",e[`${n}LPBIN`]),E(r,"tdOff",e[`${n}TDoff`]),S(r,"windowMultiplicationMode",e[`${n}WDW`]),S(r,"title",e.TITLE),S(r,"solvent",e[".SOLVENTNAME"]),S(r,"temperature",e[`${n}TE`]||e[".TE"]),S(r,"type",e.DATATYPE),S(r,"dataClass",e[`${n}DATACLASS`]),S(r,"phc1",e[`${n}PHC1`]),S(r,"phc0",e[`${n}PHC0`]),r.type){let m=r.type[0].toUpperCase();m.includes("FID")?(r.isFid=!0,r.isComplex=!0):m.includes("SPECTRUM")&&(r.isFt=!0)}if(S(r,"firstX",e[`${n}FIRSTX`]),S(r,"lastX",e[`${n}LASTX`]),S(r,"numberOfPoints",e[`${n}NPOINTS`]),S(r,"originFrequency",e[`${n}SFO1`]),r.dimension===1&&E(r,"originFrequency",e[".OBSERVEFREQUENCY"]),"originFrequency"in r&&(r.originFrequency=de(r.originFrequency)),!r.originFrequency&&r.dimension===2&&".OBSERVEFREQUENCY"in e){let{nucleus:m}=r,y=de(e[".OBSERVEFREQUENCY"]);if(Yt(y)&&y.length>1){let F=e[`${n}SYMBOL`].split(","),x=F.findIndex(D=>D.includes("2")),N=F.findIndex(D=>D.includes("1"));x!==-1&&N!==-1?r.originFrequency=[y[x],y[N]]:r.originFrequency=y.slice()}else if(typeof y=="number"){let F=Wi(m[1],{frequency:y,nucleus:m[0]});r.originFrequency=[y,F]}}if((!r.originFrequency||r.originFrequency.some(m=>Number.isNaN(m)||m===0))&&(r.originFrequency||(r.originFrequency=r.dimension>1?[400,400]:[400]),r.originFrequency=r.originFrequency.map(m=>Number.isNaN(m)||m===0?400:m),i?.warn("The frequency could not be determined and was set to 400 MHz")),c.toLocaleLowerCase().includes("oxford instruments")?Xi(r,e,{...t,separator:s}):c.includes("nanalysis")&&Hi(r,e),c!=="mnova"&&c!=="mestre"){let m=r.nucleus[0],y=Ji(m);if(S(r,"probeName",e[`${n}PROBHD`]),S(r,"baseFrequency",e[`${n}BF1`]),S(r,"baseFrequency",e[`${n}SF`]),E(r,"scaleFactor",e[`${n}NC_proc`]),"scaleFactor"in r)for(let D=0;D<r.scaleFactor.length;)r.scaleFactor[D]=2**r.scaleFactor[D++];if(!("baseFrequency"in r)&&"originFrequency"in r?S(r,"baseFrequency",r.originFrequency):r.baseFrequency=de(r.baseFrequency),!["baseFrequency","originFrequency"].some(D=>!r[D])&&y){let{baseFrequency:D}=r,P=2*Math.PI*(D[0]/y)*1e6;S(r,"fieldStrength",P)}E(r,"spectralWidth",e[`${n}SW`]),E(r,"spectralWidth",e[`${n}QM_SPECTRAL_WIDTH`]),r.dimension===1&&e[`${n}SweepWidth`]&&r.originFrequency&&E(r,"spectralWidth",e[`${n}SweepWidth`]/r.originFrequency[0]),S(r,"numberOfPoints",e[`${n}TD`],!0);let F=r.numberOfPoints;if(S(r,"spectrumSize",e[`${n}SI`]??F),S(r,"sampleName",e[`${n}NAME`]),e[`${n}FNTYPE`]!==void 0&&S(r,"acquisitionMode",Number.parseInt(e[`${n}FNTYPE`],10)),(e[`${n}VARNAME`]?e[`${n}VARNAME`].split(",")[0]:"")==="TIME"){let D=typeof e.LAST=="string"?e.LAST.replace(" ","").split(",")[0]:e.LAST;E(r,"acquisitionTime",D)}if(!r.acquisitionTime&&u(["numberOfPoints","spectralWidth"])){let{spectralWidth:D,originFrequency:P}=r;S(r,"acquisitionTime",Number((F[0]-1)/(2*D[0]*P[0])))}if(e[`${n}P`]){let D=1e6/(K(e[`${n}P`]).split(s)[1].split(" ")[1]*4);S(r,"pulseStrength90",D)}if(e[`${n}D`]){let D=K(e[`${n}D`]).split(s)[1].split(" ")[1];E(r,"relaxationTime",D)}if(E(r,"numberOfScans",e[`${n}NS`]),E(r,"numberOfScans",e[`${n}QM_NSCANS`]),S(r,"groupDelay",e[`${n}GRPDLY`]),S(r,"dspfvs",e[`${n}DSPFVS`]),S(r,"decim",e[`${n}DECIM`]),r.isFid&&("groupDelay"in r||u(["dspfvs","decim"]))){let{groupDelay:D,dspfvs:P,decim:A}=r,I=Vt(D?.[0]??0,P?.[0],A?.[0]);S(r,"digitalFilter",I)}let N;if(u(["numberOfPoints","spectralWidth"])){let{spectralWidth:D,numberOfPoints:P}=r;r.isFid?N=P.map(A=>r.acquisitionTime[0]/(A-1)):N=P.map((A,I)=>D[I]/(A-1))}if(S(r,"increment",N),e[`${n}DATE`]){let D=K(e[`${n}DATE`]),P=Number.parseInt(D,10)*1e3;Number.isNaN(P)?Ke(r,Date.parse(D)):Ke(r,P)}r.solvent||S(r,"solvent",K(e[`${n}SOLVENT`]))}!("baseFrequency"in r)&&"originFrequency"in r&&S(r,"baseFrequency",r.originFrequency);let g=r.dimension<2,h="dataClass"in r&&r.dataClass[0].toUpperCase()==="NTUPLES",p=["LAST","FIRST","VARDIM","SYMBOL"].every(m=>`${n}${m}`in e);if(g&&(h||p)&&(S(r,"last",j(e[`${n}LAST`])),S(r,"first",j(e[`${n}FIRST`])),S(r,"varDim",j(e[`${n}VARDIM`])),S(r,"symbols",j(e[`${n}SYMBOL`])),r.symbols&&Array.isArray(r.symbols))){r.symbols.includes("R")&&r.symbols.includes("I")&&(r.isComplex=!0);let m=r.symbols.findIndex(y=>y.toLowerCase()==="x");if(E(r,"firstX",r.first[m]),E(r,"lastX",r.last[m]),E(r,"numberOfPoints",r.varDim[m]),!("spectralWidth"in r)){let{lastX:y,numberOfPoints:F,firstX:x}=r;S(r,"spectralWidth",r.isFid?F/(2*y):Math.abs(y-x)/r.originFrequency)}}if(`${n}REVERSE`in e){let m=e[`${n}REVERSE`];r.reverse=(Array.isArray(m)?m:[m]).map(y=>typeof y=="string"?y.includes("yes"):y)}let b=e[`${n}REFERENCE_POINT`];if(!("frequencyOffset"in r)&&b&&u(["spectralWidth","baseFrequency"])){let m=typeof b=="number"?b:e[`${n}REFERENCE_POINT`].match(/(?<reference>[+-]?\d+(?:\.\d+)?)\s*.*/),y;if(typeof b=="number"?y=b:(b.match(/(?<reference>[+-]?\d+(?:\.\d+)?)\s*.*/),y=Number(m?.groups?.reference)),!Number.isNaN(y)){let{spectralWidth:F,baseFrequency:x}=r;S(r,"frequencyOffset",.5*F*x-y)}}if(!("frequencyOffset"in r)&&u(["baseFrequency","originFrequency"])){let{baseFrequency:m,originFrequency:y}=r,F=m.map((x,N)=>(y[N]-x)*1e6);S(r,"frequencyOffset",F)}for(let m in r)r[m]&&r[m].length===1&&(r[m]=r[m][0]);return!r.frequencyOffset&&".SHIFTREFERENCE"in e&&Vi(e,r),Array.isArray(r.nucleus)||(r.nucleus=[r.nucleus]),r}function E(e,t,n){n!==void 0&&S(e,t,de(n))}function Ke(e,t){if(!Number.isNaN(t)){e.epoch=t;let n=new Date(t);e.date=n.toUTCString(),e.localeDate=n.toLocaleString()}}function Vi(e,t){let n=e[".SHIFTREFERENCE"],i=n.trim().startsWith("(")?/\((?<data>[^)]+)\)/:/(?<data>[^)]+)/,r=n.match(i);if(r.groups.data){let o=r.groups.data.split(",");if(o.length<4)return;let s=Number.parseInt(t.numberOfPoints,10),{spectralWidth:a,baseFrequency:l}=t,c=Number.parseInt(o[2],10),u=Number.parseFloat(o[3]),f;if(t.isFid){if(["baseFrequency","numberOfPoints","spectralWidth"].some(d=>!(d in t)))return;f=u+(s*.5-c)*a/s}else{let d=Number.parseFloat(t.firstX),g=Number.parseFloat(t.lastX),h=(g+d)/2,p=(g-d)/(s+1),b=p<0?d:g+(c-1)*p;f=(h-b)/l+u}f!==void 0&&!Number.isNaN(f)&&(t.frequencyOffset=f*l)}}function de(e){if(Yt(e)){let t=[];for(let n of e)t.push(typeof n=="string"?Number.parseFloat(n):n);return t}return typeof e=="string"?Number.parseFloat(e):e}function Xi(e,t,n={}){let{prefix:i="",separator:r=`
6
- `}=n;S(e,"spectralWidth",t[`${i}SweepWidth`]/e.originFrequency[0]);let o=t[`${i}.PULSESEQUENCE`].split(r),s=[];t[".OBSERVENUCLEUS"]&&s.push(t[".OBSERVENUCLEUS"]),t.INDIRECTNUCLEUS&&s.push(t.INDIRECTNUCLEUS),e.nucleus=w(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 l=JSON.stringify(a).match(/\$\$SW1=\s*(?<sw>[+-]?(?:[0-9]*[.])?[0-9]+)/);if(l?.groups){let{originFrequency:c}=e,u=Number.parseFloat(l.groups.sw);e.spectralWidth.push(u/c[1])}}return e}function Hi(e,t){let{T1NUCLEUS:n,T2NUCLEUS:i,PAGE:r}=t;e.pulseSequence=t.EXPERIMENT||t[".PULSESEQUENCE"];let o=[],{dimension:s,isComplex:a}=e;if(s===2&&e.pulseSequence==="T1"){let u=a?2:1;for(let f=0;f<r.length;f+=u){let d=r[f].replace(/T1=/,"");o.push(Number(d))}t.vdlistValues=o}e.nucleus=s>1?[i,n]:i;let{phc0:l,phc1:c}=e;if(l&&c){let u=pe({phc0:l,phc1:c});e={...e,...u}}}var Yi={keepRecordsRegExp:/.*/,keepFiles:!0};async function ye(e,t={}){let n={spectra:[],molecules:[]},{converter:i={},selector:r={},logger:o}=t,s=We(e,{logger:o,...Zi(r)}),a=[];for(let c of s)a.push(Ye(c,{...Yi,...i}).then(u=>Ki(u,t)));let l=await Promise.allSettled(a);for(let c=0;c<l.length;c++){let u=l[c];if(u.status==="fulfilled"){let f=pe(u.value.info);n.spectra.push({...u.value,info:{...u.value.info,...f}})}else if(u.reason){let f=s[c].name;o?.warn(`Bruker data: ${f}, fails with: ${u.reason}`);continue}}return o&&o[n.spectra.length>0?"info":"debug"](`Loaded ${n.spectra.length} spectra from Bruker files`),Gi(n)}function Ki(e,t={}){let{keepSource:n=!1,logger:i}=t,r={...e.info,...e.meta},o=ge(r,{logger:i}),s={},{isFid:a}=o;if(Qi(e)){let g=e.minMax;for(let h in g){let p=g[h];p&&(p.z=_(p.z))}s.components=e.minMax}else o.dimension===1&&(s.components=e.spectra);let{source:l}=e,{expno:c,name:u,files:f}=l;r.vdlist&&(r.vdlistValues=me(r.vdlist));let d={dependentVariables:[s],meta:r,info:{...o,experimentNumber:c,name:u}};return f&&n&&(d.sourceSelector={files:f.map(g=>g.relativePath)}),eo(d,e),d}function Zi(e){let{general:t={},bruker:n={}}=e,{processingNumbers:i,experimentNumbers:r,...o}=n;return{...t,...o,processingNumbers:Kt(i),experimentNumbers:Kt(r)}}function Kt(e){if(e)return e.split(/[^\d]+/).filter(Boolean).map(t=>Number.parseInt(t,10))}function Qi(e){let{info:t}=e;return t.twoD}function eo(e,t){if(!("integrals"in t))return;let{integrals:n=[]}=t;e.integrals={values:n.map(i=>{let{from:r,to:o,integration:s}=i;return{from:r,to:o,integral:s,kind:"signal"}})}}var he=class{id="@zakodium/nmrium-core-plugins#BrukerLoaderPlugin";version=1;migrations=[];onReadProcess;constructor(){this.onReadProcess={onFiles:this.onReadProcessFiles}}onReadProcessFiles=(t,n)=>{let{sourceSelector:i,converter:r,keepSource:o,logger:s}=n??{};return ye(t,{converter:r?.bruker,selector:i,keepSource:o,logger:s})}};function Ze(){return new he}import{formatSpectra as ko}from"@zakodium/nmrium-core";import{createTree as Lo}from"jcampconverter";function Zt(e,t,n={}){let{selector:i={},keepSource:r=!1}=n;if(!r)return e;for(let o=0;o<e.spectra.length;o++){let s=e.spectra[o];s.sourceSelector={files:[t.relativePath],jcamp:{index:o,...i}}}return e}import{convert as to}from"jcampconverter";function Qe(e,t,n){let{dataType:i,children:r}=e,o=i==="LINK"&&r?r:[e];for(let s of o){if(s.dataType==="LINK"){Qe(s,t,n);continue}let a=to(s.jcamp,n);t.push(...a.flatten)}}function tn(e,t={}){let n=[],i=nn(e,t);for(let s of i?e:[])s.dataType==="LINK"?s.children=et(s.children,t):s=et([s],t)[0],n.push(s);let{name:r,logger:o}=t;return e.length===0&&o?.warn(`There is no data ${r?`in ${r}`:"in the JCAMP-DX"}`),n}function et(e=[],t={}){let{name:n,logger:i,tree:r=[],dataSelection:o="both"}=t,s=[];for(let u of e){let{dataType:f,dataClass:d}=u;if(f==="LINK")u.children=et(u.children,t);else if(r.some(g=>{let{dataClass:h=d,dataType:p=f}=g;return d===h&&f===p})){i?.warn(`Skipping ${d} and ${f} ${n?`in ${n}`:"in the JCAMP-DX"},
7
- because it didn't match the import filters`);continue}s.push(u)}let a=[],l=s.some(en),c=s.some(Qt);for(let u of s){if(o!=="both"&&u.dataType!=="LINK"){if(en(u)&&(o==="ft"||o==="preferFT"&&c)){i?.warn(`Skipping raw data ${n?`in ${n}`:"in the JCAMP-DX"} because it didn't match the import filters`);continue}if(Qt(u)&&(o==="fid"||o==="preferFID"&&l)){i?.warn(`Skipping FFT data ${n?`in ${n}`:"in the JCAMP-DX"} because it didn't match the import filters`);continue}}a.push(u)}return a}function Qt(e){return e.dataType?.toUpperCase().includes("SPECTRUM")&&e.dataClass&&!e.dataClass.toUpperCase().includes("PEAK")}function en(e){return e.dataType?.toUpperCase().includes("FID")}function nn(e,t={}){let{logger:n,name:i=""}=t;for(let r of e){if(r.dataType==="LINK"&&nn(r.children,t))return!0;let{dataType:o=""}=r,s=o.toLowerCase();if(s.length>0){if(s.includes("spectrum")&&!s.includes("nmr"))return n?.warn(`File ${i} was ignored because it is a ${o}`),!1;if(s.includes("nmr"))return!0}}return!1}import{generateID as sn}from"@zakodium/nmrium-core";import{parseJcampCS as co}from"jcampconverter";import*as lo from"openchemlib";import{isMolfileNotEmpty as no}from"nmr-processing";import{Molecule as ro}from"openchemlib";async function rn(e,t={}){let n=await e.text(),i=V(n),r={molecules:i,spectra:[]};return i.length===0&&t.logger?.debug(`${e.name} is an empty molfile`),r}function V(e){let t=[];if(!no(e))return[];let i=ro.fromMolfile(e).toMolfile();return t.push({molfile:i}),t}import{isMolfileNotEmpty as oo}from"nmr-processing";import*as so from"openchemlib";import{getDiastereotopicAtomIDsFromMolfile as ao}from"openchemlib-utils";var io=new Set(["ndnmrspectrum","ndnmrfid","nmrspectrum","nmrfid"]);function be(e){let{dataType:t="",dataClass:n=""}=e,i=t.replaceAll(/\s/g,"").toLowerCase(),r=n.replaceAll(/\s/g,"").toLowerCase();return io.has(i)&&r!=="peaktable"}function on(e,t,n={}){let{spectra:i,info:r,meta:o}=e,s=i[0].data,a=[],l={x:"delta",y:"intensity",w:"width",m:"multiplicity",a:"atom"},{logger:c,name:u,spectraData:f}=n,{CROSSREFERENCE:d}=r,g=typeof d!="string"?d:d.split(/\r?\n/).map(D=>D.trim()).filter(Boolean),h=g.find(D=>D?.toLowerCase().includes("structure"));if(h===void 0)return c&&c.warn(`There is not a structure reference for ${u} file, assignment object could not be completed`),null;let p=Number.parseInt(h?.toLowerCase().replace(/_/,"").replace(/structure:\s*blockid\s*=\s*(?<blockId>.*)/,"$<blockId>"),10);if(Number.isNaN(p)||p<1)return c&&c.warn(`Structure block_id not found for ${u} file, assignment object could not be completed`),null;let m=f?.molecules?.find(D=>D.blockId===p)?.molfile??"";if(m===""){let D=t.find(A=>A.info.BLOCKID===p),{MOLFILE:P=""}=D?.meta||{};m=P}if(!oo(m))return c&&c.warn(`Empty molfile for ${u} file with structure block_id = ${p}, assignment object could not be completed`),null;let y=ao(so,m),F=fe({...r,...o},{},"");for(let D=0;D<s.x.length;D++){let P={};for(let A in s){let I=s[A][D];typeof I=="string"&&I.startsWith("<")&&I.endsWith(">")&&(I=I.slice(1,-1)),P[l[A]]=I}if("atom"in P){let A=y.map[P.atom-1];F.includes("1H")?A.nbHydrogens>0?(P.diaIDs=A.hydrogenOCLIDs,P.nbHydrogens=A.nbHydrogens):(P.diaIDs=[A.oclID],P.nbHydrogens=A.nbHydrogens):(P.diaIDs=[A.oclID],P.nbHydrogens=1)}a.push(P)}let x={};for(let D of a){let{delta:P,diaIDs:A}=D,I=`${P}_${A.join("_")}`;if(x[I])x[I].atoms.push(D.atom);else{let{atom:Dt,..._e}=D;x[I]={..._e,atoms:[D.atom]}}}let N=[];for(let D of g)D.toLowerCase().includes("spectrum")&&N.push(Number(D.toLowerCase().replace(/_/,"").replace(/.*:\s*blockid=(?<blockId>.*)/,"$<blockId>")));if(N.length===0){for(let D of t)if(be(D)){let{BLOCKID:P}=D.info;N.push(Number(P))}N.length>1&&(N=[],c&&c.warn(`There is not a spectral cross-reference for the peak assignment in the ${u} file`))}return{moleculeBlockID:p,spectraBlockIDs:N,assignments:Object.values(x),molecule:y.molecule}}function an(e,t,n,i){for(let r of e){let{meta:o,dataClass:s="",dataType:a="",info:l}=r,c=Number.parseInt(String(l.BLOCKID),10);o.MOLFILE?fo(String(o.MOLFILE),t,c):r.jcampCS&&po(r,t,c),mo(s,a)&&uo(t,r,e,i),be(r)&&n.push(r)}}function mo(e,t){return e?.toLowerCase().includes("assignments")&&t?.toLowerCase().includes("assignments")}function uo(e,t,n,i){let r=on(t,n,{spectraData:e,logger:i.logger,name:i.name});if(e.assignmentsByBlocks||(e.assignmentsByBlocks={}),r){let{spectraBlockIDs:o}=r;for(let s of o)e.assignmentsByBlocks[s]=r}}function po(e,t,n){t.molecules||(t.molecules=[]);let i=co(e,{OCL:lo}),r=V(i?.molfile||"");r.length>0&&t.molecules.push({id:sn(),blockId:n,...r[0]})}function fo(e,t,n){t.molecules||(t.molecules=[]);let i=V(String(e));t.molecules.push({id:sn(),blockId:n,...i[0]})}import{generateID as Dn}from"@zakodium/nmrium-core";import{matrixMinMaxZ as Fn,reimPhaseCorrection as Ao}from"ml-spectra-processing";import{xyAutoRangesPicking as Mo}from"nmr-processing";function X(e){return e.slice(0,Math.max(0,e.lastIndexOf(".")))}function H(e){e.sort((t,n)=>t.from-n.from);for(let t=0;t<e.length-1;t++)e[t].to>e[t+1].from&&(e[t].to=Math.max(e[t+1].to,e[t].to),e[t].signals=e[t].signals.concat(e[t+1].signals),e[t].integration+=e[t+1].integration,e.splice(t+1,1),t--);return e}import{splitPatterns as Fo}from"nmr-processing";import{xMaxValue as go}from"ml-spectra-processing";function Z(e){return e.trim().slice(1,-1).split(/,\s*/).map(t=>t.trim())}var yo={I:"id",X:"from",Y:"to",Hs:"delta",An:"integration",H:"nbAtoms",C:"multiplicity",N:"assignment","(J)":"js"},cn=["I","X","Y","Hs","An","H","C","N","(J)"];function ln(e){let t={headersFromParenthesis:[],headersFromComments:[],comments:[],data:[],multiplets:[]},n=e.split(/\r?\n/).filter(i=>i.trim()!=="");if(n.length===0)return t;if(n[0].startsWith("(")&&!n[0].match(/\d/)){let i=n.shift();t.headersFromParenthesis=Z(i)}return t.comments=n.filter(i=>i.startsWith("$$")).map(i=>i.replace(/^\$\$\s*/,"")),t.headersFromComments=bo(t.comments),t.data=n.filter(i=>!i.startsWith("$$")).map(Z),t.multiplets=ho(t),t}function ho(e,t={}){let{logger:n}=t,i=e.data[0].map((l,c)=>c).filter(l=>e.data.every(c=>Number.isNaN(c[l])||Number.isNaN(Number(c[l]))));if(n?.trace(`Parsing JCAMP-DX assignment: stringColumnIndexes: ${i.join(",")}`),i.length===0)return n?.warn("Parsing JCAMP-DX assignment: No string columns found. Skipping parsing of assignment."),[];let r=i[0],o;if(e.headersFromParenthesis.length>0&&e.headersFromParenthesis[r]==="C")o=e.headersFromParenthesis;else if(e.headersFromComments.length>0&&e.headersFromComments[r]==="C")o=e.headersFromComments;else if(cn[r]==="C")o=cn;else return n?.warn("No header found for multiplicity. Skipping parsing of assignment."),[];return go(e.data.map(l=>l.length))>o.length&&n?.warn("Some assignments are containing more values than headers"),e.data.map(l=>{let c={};for(let u=0;u<o.length;u++){let f=o[u];c[yo[f]||f]=l[u]}return c})}function bo(e){return e.map(t=>t.split(":")[0].trim()).filter(t=>t.length>0)}function mn(e,t={}){let{logger:n}=t,i=ln(e),r={multiplets:[],comments:i.comments};for(let o of i.multiplets){let{id:s,from:a,to:l,delta:c,integration:u,nbAtoms:f,multiplicity:d}=o,g={id:s,js:[],multiplicity:"",...Do({from:a,to:l,delta:c,integration:u,nbAtoms:f})};if(typeof o.js=="string"){let h=o.js.split(/\s+/).map(Number.parseFloat),p=0,b=Fo(d).map(F=>{let x=(F?.multiplicity||1)-1;return p+=x,{value:F.value,multiplicity:F?.multiplicity,js:h.slice(p-x,p)}}),m=b.reduce((F,x)=>F+(x.multiplicity?x.multiplicity-1:0),0);h.length!==m&&n?.warn(`The number of j values (${h.length}) is not equal to the sum of the multiplicities - 1 (${m})`);let y=[];for(let F of b){if(F.js.every(x=>x===F.js[0])){y.push(F);continue}if(F.multiplicity!==F.js.length+1){y.push(F);continue}for(let x=0;x<F.multiplicity-1;x++)y.push({value:"d",multiplicity:2,js:[F.js[x]]})}y.sort((F,x)=>x.js[0]-F.js[0]),g.js=y.map(F=>({coupling:F.js[0],multiplicity:F.value}))}typeof o.assignment=="string"&&(g.assignment=So(o.assignment)),typeof o.multiplicity=="string"&&(g.multiplicity=o.multiplicity),r.multiplets.push(g)}return r}function Do(e){let t={};for(let n in e){let i=e[n],r=typeof i=="number"?i:Number.parseFloat(i);Number.isNaN(r)||(t[n]=r)}return t}var xo={quot:'"',apos:"'",comma:",",amp:"&",lpar:"(",rpar:")",lt:"<",gt:">",colon:":",semi:";"};function So(e){return e.replaceAll(/&(\w+);/gi,(t,n)=>xo[n.toLowerCase()]||t)}function un(e){let t=e.split(/\r?\n/).filter(i=>i.trim()!==""),n=[];for(let i of t)if(i.startsWith("(")){let[r,o,s]=Z(i).map(Number.parseFloat);n.push({id:r,x:o,y:s})}return n}function pn(e,t={}){let n={};if(!e["OBSERVED MULTIPLETS"])return[];let i=mn(e["OBSERVED MULTIPLETS"],t);if(!i)return[];let{multiplets:r}=i;for(let o of r){let{id:s,from:a,to:l,integration:c=0,...u}=o;n[s]={from:a,to:l,integration:c,signals:[{id:s,...u}]}}if(e["OBSERVED MULTIPLETS PEAKS"]){let o=un(e["OBSERVED MULTIPLETS PEAKS"]),s={};for(let a of o){let{id:l,x:c,y:u}=a;s[l]||(s[l]=[]),s[l].push({x:c,y:u,width:.05})}for(let a in n)s[a]&&(n[a].signals[0].peaks=s[a])}return H(Object.values(n))}function fn(e,t){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})),r=[...t.nucleus[0].matchAll(/[0-9]*(?<element>[A-Z][a-z]?)/g,"$element")][0].groups.element;return i.find(o=>o.element===r)?.count||100}function dn(e){let t={};return".PHASE0"in e&&(t.ph0=Number.parseFloat(e[".PHASE0"]),t.ph1=Number.parseFloat(e[".PHASE1"])),t}function tt(e){let{ph0:t,ph1:n}=e;return Number.isFinite(t)&&Number.isFinite(n)}import{generateID as gn}from"@zakodium/nmrium-core";function yn(e,t,n){for(let i=0;i<e.length;i++){if(t.includes(i))continue;let{delta:r,multiplicity:o="",diaIDs:s}=e[i],a=Number(r)-.01,l=Number(r)+.01;n.push({from:a,to:l,integration:1,id:gn(),signals:[{id:gn(),delta:r,multiplicity:o,diaIDs:s}]})}}import{linearSumAssignment as Po}from"linear-sum-assignment";import{xCostMatrix as No}from"ml-spectra-processing";function hn(e,t){let n=e.map(s=>s.delta),i=t.map(s=>s.delta),r=No(i,n,{fct:(s,a)=>Math.abs(s-a)}),{rowAssignments:o}=Po(r,{maximaze:!1});return Array.from(o)}function bn(e,t){let{assignments:n,ranges:i}=t;n?.sort((s,a)=>a.delta-s.delta);let r=[],o=[];for(let s of i){let a=0,{from:l,to:c}=s,u=[];for(let f=a;f<n.length;f++){let{delta:d}=n[f];d<=c&&d>=l?(u.push(n[f]),o.push(f)):d>c&&(a=f)}if(u.length>0){let f=s.signals,d=[],g=u.length>1&&f.length>1?hn(f,u):[0];for(let h=0;h<u.length;h++){let p=g[h],{delta:b,multiplicity:m,diaIDs:y}=u[h];p>-1?d.push({...f[p],diaIDs:y}):d.push({delta:b,multiplicity:m,diaIDs:y})}s.signals=d,r.push(s)}}yn(n,o,r),r.sort((s,a)=>s.from-a.from),e.ranges={values:H(r).map(s=>{let{integration:a,...l}=s;return l}),options:{sum:t.integrationSum,isSumConstant:!0,sumAuto:!0}},e.ranges.options.moleculeId=String(t.moleculeId)}function xn(e,t,n,i,r){let{logger:o}=r,s={components:Sn(e)?Eo(e,n.isFid):Ro(e)},{name:a=n.title||`jcamp_${Dn()}`}=r,l={dependentVariables:[s],meta:t,info:{...n,name:X(a)}};return Io(e)&&To(l,i,t,e,n,{logger:o}),l}function Sn(e){return"minMax"in e}function Io(e){return!Sn(e)}function Ro(e){return e.spectra.map(t=>{let n=_(t.data);return{...t,data:n}})}function Eo(e,t){let n={...e.minMax,z:_(e.minMax?.z)};return t?Oo(n):{rr:n}}function To(e,t,n,i,r,o){let{assignmentsByBlocks:s}=t,a=dn(n);tt(a)&&Co(e,a);let l=String(i.info.BLOCKID);if(s?.[l]){let{molecule:c,assignments:u,moleculeBlockID:f}=s[l],d=fn(c,r),g=_(i.spectra[0].data);if(g.x[0]>g.x[1])for(let m of i.spectra)m.data.x.reverse(),m.data.y.reverse();if(tt(a)&&i.spectra.length>1){let{re:m}=wo(i,a);g.y=m}let{x:h,y:p}=g,b=pn(n,o)??Mo({x:h,y:p},{peakPicking:{frequency:r.originFrequency},ranges:{frequency:r.originFrequency,integrationSum:d}});bn(e,{moleculeId:f,ranges:b,assignments:u,integrationSum:d})}}function Oo(e){let{z:t,...n}=e,i=[],r=[];for(let a=0;a<t.length;a+=2)i.push(t[a].slice()),r.push(t[a+1].slice());let o=Fn(i),s=Fn(r);return{re:{...n,z:i,minZ:o.min,maxZ:o.max},im:{...n,z:r,minZ:s.min,maxZ:s.max}}}function Co(e,t){let{ph0:n,ph1:i}=t;e.filters||(e.filters=[]),e.filters.push({id:Dn(),name:"phaseCorrection",value:{ph0:n,ph1:i,absolute:!1},enabled:!0})}function wo(e,t){let{ph0:n,ph1:i}=t,{re:r,im:o}=Ao({re:e.spectra[0].data.y,im:e.spectra[1].data.y},n*Math.PI/180,i*Math.PI/180);return{re:r,im:o}}function Pn(e,t,n){let{logger:i}=n,r=[];for(let o of e)if(o.spectra&&o.spectra.length>0||o.minMax){vo(o);let s={...o.info,...o.meta},a=ge(s,{logger:i});if(a.experiment==="wobble_curve")continue;r.push(xn(o,s,a,t,n))}return r}function vo(e){let t=e.meta["BRUKER FILE EXP"];if(!t)return;let i=(Array.isArray(t)?t:[t]).find(o=>o.slice(0,10).includes("vdlist"));if(!i)return;let r=i.split(`
8
- `).slice(1);e.info.vdlistValues=me(r)}async function Fe(e,t={}){let n=await e.text(),i=Nn(n,{name:e.name,...t});return Zt(i,e,t)}function Nn(e,t={}){let n={spectra:[],molecules:[]},{name:i,converter:r={},selector:o={},logger:s}=t,{keepRecordsRegExp:a=/.*/}=r,l={keepSpectra:!0,noContour:!0,noTrimRegExp:/\$MOLFILE/,keepRecordsRegExp:a,logger:s},c=tn(Lo(e),{name:i,...o,logger:s});for(let u of c)qo(u,n,l,i);if(_o(n,o),n.spectra.length===0&&c.length>0){let u=n.molecules.length===0?" nor molecule":"";s?.warn(`No spectra${u} data was loaded from file ${i}`)}return ko(n)}function qo(e,t,n,i){let r=[],o=[],s={molecules:[]},{logger:a}=n,l={name:i,logger:a};Qe(e,o,n),an(o,s,r,l),t.spectra.push(...Pn(r,s,l)),t.molecules.push(...s.molecules)}function _o(e,t){t.index!==void 0&&(e.spectra=e.spectra.slice(t.index,t.index+1))}var De=class{id="@zakodium/nmrium-core-plugins#JCAMPDXLoaderPlugin";version=1;migrations=[];onReadProcess;constructor(){this.onReadProcess={supportedExtensions:["jcamp","jdx","dx"],onFile:this.onReadProcessFile.bind(this)}}onReadProcessFile(t,n={}){let{sourceSelector:i={},converter:r,keepSource:o,logger:s}=n;return s?.debug(`Reading JCAMP-DX file: ${t.name}`),Fe(t,{selector:this.getJCAMPDXSelector(i),converter:r?.jcamp,keepSource:o,logger:s})}getJCAMPDXSelector(t={}){let{jcamp:n={},general:i={}}=t,{dataSelection:r="both"}=i;return{...n,dataSelection:r}}};function nt(){return new De}function An(e){if(e===void 0)return{epoch:null,date:""};let t=e*1e3;return{epoch:t,date:new Date(t).toUTCString()}}var Mn={0:"bigEndian",1:"littleEndian"},In={0:"NONE",1:"GSX",2:"ALPHA",3:"ECLIPSE",4:"MASS_SPEC",5:"COMPILER",6:"OTHER_NMR",7:"UNKNOWN",8:"GEMINI",9:"UNITY",10:"ASPECT",11:"UX",12:"FELIX",13:"LAMBDA",14:"GE_1280",15:"GE_OMEGA",16:"CHEMAGNETICS",17:"CDFF",18:"GALACTIC",19:"TRIAD",20:"GENERIC_NMR",21:"GAMMA",22:"JCAMP_DX",23:"AMX",24:"DMX",25:"ECA",26:"ALICE",27:"NMR_PIPE",28:"SIMPSON"},Rn={0:"64Bit Float",1:"32Bit Float",2:"Reserved",3:"Reserved"},En={1:"One_D",2:"Two_D",3:"Three_D",4:"Four_D",5:"Five_D",6:"Six_D",7:"Seven_D",8:"Eight_D",9:"not for NMR data formats",10:"not for NMR data formats",11:"not for NMR data formats",12:"Small_Two_D",13:"Small_Three_D",14:"Small_Four_D"},Tn={0:"None",1:"Real",2:"TPPI",3:"Complex",4:"Real_Complex",5:"Envelope"},On={"-8":"Yotta","-6":"Exa","-7":"Zetta","-5":"Pecta","-4":"Tera","-3":"Giga","-2":"Mega","-1":"Kilo",0:"None",1:"Milli",2:"Micro",3:"Nano",4:"Pico",5:"Femto",6:"Atto",7:"Zepto"},Cn={Yotta:24,Exa:21,Zetta:18,Pecta:15,Tera:12,Giga:9,Mega:6,Kilo:3,None:0,Milli:-3,Micro:-6,Nano:-9,Pico:-12,Femto:-15,Atto:-18,Zepto:-21},wn={0:"None",1:"Abundance",2:"Ampere",3:"Candela",4:"Celsius",5:"Coulomb",6:"Degree",7:"Electronvolt",8:"Farad",9:"Sievert",10:"Gram",11:"Gray",12:"Henry",13:"Hertz",14:"Kelvin",15:"Joule",16:"Liter",17:"Lumen",18:"Lux",19:"Meter",20:"Mole",21:"Newton",22:"Ohm",23:"Pascal",24:"Percent",25:"Point",26:"Ppm",27:"Radian",28:"Second",29:"Siemens",30:"Steradian",31:"Tesla",32:"Volt",33:"Watt",34:"Weber",35:"Decibel",36:"Dalton",37:"Thompson",38:"Ugeneric",39:"LPercent ",40:"PPT",41:"PPB ",42:"Index"},rt={0:"Ranged",1:"Listed",2:"Sparse",3:"Listed"};function C(e,t){return e.paramArray.find(n=>n.name===t)}function vn(e,t){let n=e.paramArray.find(p=>p.name==="orders"),i=e.paramArray.find(p=>p.name==="factors"),r=e.paramArray.find(p=>p.name==="x_sweep"),o=e.paramArray.find(p=>p.name==="x_acq_time"),s=e.paramArray.find(p=>p.name==="x_points");if(!n||!i||!r||!o||!s){t?.error("There is not all parameters to calculate the number of point of digital filter");return}let a=n.value,l=Number.parseInt(a.slice(0,1),10),c=a.slice(1).length/l,u=0,f=new Int8Array(l),d=1,g=0;for(let p=0;p<l;p++)f[p]=Number.parseInt(i.value.slice(g,g+1),10),g+=1;for(let p=0;p<l;p++){let b=1;for(let m=p;m<l;m++)b*=f[m];u+=(Number.parseInt(a.slice(d,d+c),10)-1)/b,d+=c}return u/=2,u/r.value/o.value*(s.value-1)}function R(e,t){let n=C(e,t);if(n===void 0)return{magnitude:"NA",unit:"NA"};let i=n.unit[0],r=i.base,o=Cn[i.prefix];return{magnitude:n.value*10**o,unit:r}}function it(e){let t=e.readBytes(4),n=1990+(t[0]>>1),i=(t[0]<<3&8)+(t[1]>>5),r=t[2]&31;return{year:n,month:i,day:r}}function xe(e,t){let n=[];for(let i=0;i<t;i++){let r=e.readByte(),o=r>>4,s=On[o],a=r&15,l=e.readInt8(),c=wn[l];n.push({prefix:s,power:a,base:c})}return n}function B(e,t){let n=[];for(let i=0;i<t;i++){let r=e.readChar();r!=="\0"&&n.push(r)}return n.join("")}function ot(e,t){let n=[];for(let i=0;i<t;i++){let r=e.readChar();r!==" "&&n.push(r)}return n.join("")}function M(e,t,n){let i=[];for(let r=0;r<t;r++)switch(n){case"readUint32":i.push(e.readUint32());break;case"readFloat64":i.push(e.readFloat64());break;case"readFloat32":i.push(e.readFloat32());break;case"readUint8":i.push(e.readUint8());break;default:break}return i}function kn(e,t){let n=[];for(let i=0;i<t;i++)n.push(e.readBoolean());return n}function Ln(e,t,n){let i=1,r=0;for(let o of t.dataAxisType)o==="Real_Complex"&&r===0&&(i+=1,r+=1),o==="Complex"&&(i*=2);if(t.dataType!=="32Bit Float"&&t.dataType!=="64Bit Float"){n?.error("Only 32Bit Float and 64Bit Float data types are implemented yet");return}if(t.dataFormat==="One_D"){if(i!==1&&i!==2){n?.error("One_D data must have one or two data sections");return}return Bo(e,t,i)}else if(t.dataFormat==="Two_D"){if(i===2)return Uo(e,t);if(i===4)return $o(e,t);n?.error("Two_D data must have two or four data sections");return}else{n?.error("Only One_D and two_D data formats are implemented yet");return}}function Bo(e,t,n){return n===1?{re:st(e,t)}:{re:st(e,t),im:st(e,t)}}function st(e,t){return t.dataType==="32Bit Float"?M(e,t.dataPoints[0],"readFloat32"):M(e,t.dataPoints[0],"readFloat64")}var v=32;function Uo(e,t){let n=t.dataPoints[0],r=t.dataPoints[1]/v,o=n/v;return{re:G(e,t,r,o),im:G(e,t,r,o)}}function $o(e,t){let n=t.dataPoints[0],r=t.dataPoints[1]/v,o=n/v;return{re:{re:G(e,t,r,o),im:G(e,t,r,o)},im:{re:G(e,t,r,o),im:G(e,t,r,o)}}}function G(e,t,n,i){let r=[];for(let o=0;o<n;o++){let s=[];for(let a=0;a<i;a++)for(let l=0;l<v;l++)a===0?t.dataType==="32Bit Float"?s[l]=M(e,v,"readFloat32"):t.dataType==="64Bit Float"&&(s[l]=M(e,v,"readFloat64")):t.dataType==="32Bit Float"?s[l]=s[l].concat(M(e,v,"readFloat32")):t.dataType==="64Bit Float"&&(s[l]=s[l].concat(M(e,v,"readFloat64")));r=r.concat(s)}return r}function qn(e){let t=e.readChars(8),n=e.readInt8(),i=Mn[n],r=e.readUint8(),o=e.readUint16(),s=e.readUint8(),a=e.readByte().toString(2).split("").map(T=>!!Number(T)),l=e.readByte(),c=l>>6,u=Rn[c],f=l&63,d=En[f],g=e.readInt8(),h=In[g],p=M(e,8,"readUint8"),b=M(e,8,"readUint8").map(T=>Tn[T]),m=xe(e,8),y=B(e,124),F=[];for(let T of M(e,4,"readUint8")){let ee=T>>4,je=T&15;F.push(rt[ee],rt[je])}let x=M(e,8,"readUint32"),N=M(e,8,"readUint32"),D=M(e,8,"readUint32"),P=M(e,8,"readFloat64"),A=M(e,8,"readFloat64"),I=it(e),Dt=it(e),_e=B(e,16),Er=B(e,128),Tr=B(e,128),Or=B(e,128),xt=[];for(let T=0;T<8;T++)xt.push(B(e,32));let Cr=M(e,8,"readFloat64"),wr=M(e,8,"readFloat64"),vr=kn(e,8);e.skip(3);let kr=!!(e.readByte()>>7),Lr=e.readUint32(),qr=e.readUint32(),_r=e.readUint32(),jr=e.readUint32(),Br=M(e,8,"readUint32"),Ur=M(e,8,"readUint32"),$r=e.readUint32(),zr=e.readUint32()<<32|e.readUint32(),Jr=e.readUint32()<<32|e.readUint32(),Wr=e.readUint32(),Vr=e.readUint32()<<32|e.readUint32(),Xr=e.readUint32(),Hr=e.readUint32()<<32|e.readUint32(),Gr=M(e,8,"readUint8"),St=[];for(let T=0;T<2;T++){let ee=[],je=e.readInt16();for(let Pt=0;Pt<5;Pt++)ee.push(e.readInt16());St.push({scaler:je,unit:ee})}return{fileIdentifier:t,endian:i,majorVersion:r,minorVersion:o,dataDimensionNumber:s,dataDimensionExist:a,dataType:u,dataFormat:d,dataInstrument:h,translate:p,dataAxisType:b,dataUnits:m,title:y,dataAxisRanged:F,dataPoints:x,dataOffsetStart:N,dataOffsetStop:D,dataAxisStart:P,dataAxisStop:A,creationTime:I,revisionTime:Dt,nodeName:_e,site:Er,author:Tr,comment:Or,dataAxisTitles:xt,baseFreq:Cr,zeroPoint:wr,reversed:vr,annotationOK:kr,historyUsed:Lr,historyLength:qr,paramStart:_r,paramLength:jr,ListStart:Br,ListLength:Ur,dataStart:$r,dataLength:zr,contextStart:Jr,contextLength:Wr,annoteStart:Vr,annoteLength:Xr,totalSize:Hr,unitLocation:Gr,compoundUnit:St}}var zo={0:"String",1:"Integer",2:"Float",3:"Complex",4:"Infinity"};function _n(e){let t=e.readUint32(),n=e.readUint32(),i=e.readUint32(),r=e.readUint32(),o=[];for(let s=0;s<i+1;s++){e.skip(4);let a=e.readInt16(),l=xe(e,5);e.skip(16);let c=e.readInt32(),u=zo[c];e.seek(e.offset-20);let f;switch(u){case"String":f=ot(e,16);break;case"Integer":f=e.readInt32(),e.skip(12);break;case"Float":f=e.readFloat64(),e.skip(8);break;case"Complex":f={Real:e.readFloat64(),Imag:e.readFloat64()};break;case"Infinity":f=e.readInt32(),e.skip(12);break;default:e.skip(16);break}e.skip(4);let d=ot(e,28);o.push({name:d.toLowerCase(),scaler:a,unit:l,value:f,valueType:u})}return{parameterSize:t,lowIndex:n,highIndex:i,totalSize:r,paramArray:o}}function jn(e,t){let n=new O(e);n.setBigEndian();let i=qn(n);i.endian==="littleEndian"&&n.setLittleEndian(),n.seek(i.paramStart);let r=_n(n);n.seek(i.dataStart);let o=Ln(n,i,t),s=[],a=[],l=[],c=[],u=[],f=[],d=[],g=[],h=[],p=[];if(i.dataFormat==="One_D"||i.dataFormat==="Two_D"){let m=An(C(r,"actual_start_time")?.value);m.date&&(a.push(m.date),l.push(m.epoch)),s.push(C(r,"x_domain")?.value),c.push(R(r,"x_acq_time")),u.push(R(r,"x_sweep")),f.push(R(r,"x_sweep_clipped")),d.push(R(r,"x_resolution")),g.push(R(r,"x_freq")),h.push(R(r,"x_offset")),p.push(i.dataUnits[0].base)}return i.dataFormat==="Two_D"&&(s.push(C(r,"y_domain")?.value),c.push(R(r,"y_acq_time")),u.push(R(r,"y_sweep")),d.push(R(r,"y_resolution")),g.push(R(r,"y_freq")),h.push(R(r,"y_offset")),p.push(i.dataUnits[1].base)),{info:{sampleName:C(r,"sample_id")?.value,creationTime:i.creationTime,revisionTime:i.revisionTime,author:i.author,comment:i.comment,solvent:C(r,"solvent")?.value,temperature:R(r,"temp_get"),probeName:C(r,"probe_id")?.value,fieldStrength:R(r,"field_strength"),experiment:C(r,"experiment")?.value,dimension:i.dataDimensionNumber,nucleus:s,date:a,epoch:l,pulseStrength90:R(r,"x90"),numberOfScans:C(r,"scans")?.value,relaxationTime:R(r,"relaxation_delay"),dataPoints:i.dataPoints.slice(0,i.dataDimensionNumber),dataOffsetStart:i.dataOffsetStart,dataOffsetStop:i.dataOffsetStop,dataUnits:p,dataSections:o?Object.keys(o):void 0,originFrequency:g,frequencyOffset:h,acquisitionTime:c,spectralWidth:u,spectralWidthClipped:f,dataAxisStart:i.dataAxisStart,dataAxisStop:i.dataAxisStop,resolution:d,decimationRate:C(r,"decimation_rate")?.value,paramList:JSON.stringify(r.paramArray.map(m=>m.name)),digitalFilter:vn(r,t)},headers:i,parameters:r,data:o}}import{formatSpectra as Xo}from"@zakodium/nmrium-core";import{getGyromagneticRatio as Ho}from"gyromagnetic-ratio";import{isAnyArray as Go}from"is-any-array";import Yo from"lodash.merge";import{normalizeNucleus as Ko}from"nmr-processing";import{isAnyArray as Y}from"is-any-array";var Bn={0:"uint8",1:"uint16",2:"uint32",3:"uint64",4:"int8",5:"int16",6:"int32",7:"int64",8:"float32",9:"float64",10:"complex64",11:"complex128"},Un={0:"scalar",1:"vector",2:"matrix",3:"symetricMatrix",4:"pixel"};function $n(e,t,n={}){let{quantityType:i=0,encoding:r="none",name:o="",unit:s="",quantityName:a="",sparseSampling:l={},from:c=[0],to:u=[-1]}=n;if(Y(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 f=ct(e,c,u),{componentLabels:d=f.componentLabels}=n;return{type:"internal",quantityType:Un[i],numericType:Bn[t],encoding:r,name:o,unit:s,quantityName:a,componentLabels:d,sparseSampling:l,description:n.description||"",application:n.application||"",components:f.components,dataLength:f.dataLength}}function Jo(e){return Y(e.re)&&Y(e.im)}function Wo(e){return!Y(e.re[0])}function ct(e,t,n){let i=[],r=[],o=[];if(Jo(e))if(Wo(e)){i[0]=at(t[0],n[0],e.re.length);let s=new Float64Array(i[0]);for(let a=0;a<i[0];a+=2){let l=a+t[0]*2;s[a]=e.re[l/2],s[a+1]=e.im[l/2]}o.push(s),r.push("complex")}else if(Y(e.re[0])){i[0]=Vo(t[1],n[1],e.re.length),i[1]=at(t[0],n[0],e.re[0].length);for(let s=0;s<i[0];s++){let a=new Float64Array(i[1]);for(let l=0;l<i[1];l+=2){let c=l+t[0]*2;a[l]=e.re[s][c/2],a[l+1]=e.im[s][c/2]}o.push(a)}}else throw new Error("check your object");else if(Y(e.re.re)){i[0]=at(t[1],n[1],e.re.re.length);let s=ct(e.re,t,n).components,a=ct(e.im,t,n).components;for(let l=0;l<i[0]/2;l++)o.push(s[l],a[l])}else throw new Error("check the dimension or the type of data in your array");return{dataLength:i,componentLabels:r,components:o}}function Vo(e,t,n){return t-e+1<n?t-e+1:n}function at(e,t,n){return t-e+1<n?(t-e+1)*2:n*2}async function Jn(e,t={}){let n=await e.arrayBuffer(),{name:i=X(e.name),keepSource:r=!1}=t,o={spectra:[],molecules:[]},a=es(n)[0],{metadata:l,...c}=a.description,u=0,f=c.dimension===1?"1d":"2d",d="NMR SPECTRUM",g=c.dimension===1?c.nucleus[0]:c.nucleus,h=c.spectralWidthClipped[0],p;a.dependentVariables&&(c.dimension===1?p=Zo(a):c.dimension===2&&(p=Qo(a)));for(let m in c)Array.isArray(c[m])&&c[m].length===1&&(c[m]=c[m][0]);let b={data:p,info:{...c,acquisitionMode:u,experiment:f,type:d,nucleus:g,spectralWidthClipped:h,name:i},meta:l};return r&&(b.sourceSelector={files:[e.relativePath]}),o.spectra=[b],Xo(o)}function Zo(e){let t=e.dimensions[0],n=e.dependentVariables,i=t.quantityName,r=t.count,o=t.increment.magnitude,s=t.originOffset.magnitude,a=t.coordinatesOffset.magnitude,l=n[0].components[0],c=new Float64Array(r),u=new Float64Array(r);for(let p=l.length-1,b=0;p>0;p-=2)c[b]=l[p-1],u[b++]=l[p];let f={},[d,g]=[0,0];switch(i){case"frequency":g=0+a/s*1e6,d=o/s*1e6,f.re=c,f.im=u;break;case"time":g=s,d=o,f.re=c.reverse(),f.im=u.reverse().map(p=>-p);break;default:break}let h=[];for(let p=0;p<r;p++)h.push(g+p*d);return f.x=h,f}function Qo(e){let t=e.dimensions,n=e.dependentVariables,i=t[0].quantityName,r=[],o=[],s=Number.MIN_SAFE_INTEGER,a=Number.MAX_SAFE_INTEGER,l=Number.MAX_SAFE_INTEGER,c=Number.MIN_SAFE_INTEGER;for(let d of n[0].components){let g=new Float64Array(d.length/2),h=new Float64Array(d.length/2);for(let p=d.length-1,b=0;p>0;p-=2){let m=d[p-1],y=d[p];m>s&&(s=m),m<a&&(a=m),y>c&&(c=y),y<l&&(l=y),g[b]=m,h[b++]=y}if(i==="frequency")r.push(g),o.push(h);else{let p=g.length,b=new Float64Array(h.length);for(let m=0,y=p-1;m<p;m++)b[m]=-h[y--];r.push(g.reverse()),o.push(b)}}let u={re:{z:r,minZ:a,maxZ:s},im:{z:o,minZ:l,maxZ:c}},f=["X","Y"];for(let d=0;d<f.length;d++){let g=t[d].count,h=t[d].increment.magnitude,p=t[d].originOffset.magnitude,b=t[d].coordinatesOffset.magnitude,m=f[d];for(let y of["re","im"])i==="frequency"?(u[y][`min${m}`]=0+b/p*1e6,u[y][`max${m}`]=g*(h/p)*1e6):(u[y][`min${m}`]=p,u[y][`max${m}`]=g*h)}return u}function es(e){let t=jn(e),n=t.info,i=t.headers,{paramArray:r,...o}=t.parameters,{dimension:s}=n,a={};for(let m of r){let{name:y,value:F}=m;a[y]=Wn(F,s)}let l=t.data,c={};c.title=`title: ${i.title} / comment: ${i.comment} / author:${i.author} / site: ${i.site}`,c.nucleus=n.nucleus.map(Ko),c.sampleName=n.sampleName,c.date=n.date,c.epoch=n.epoch,c.localeDate=new Date(n.epoch[0]).toLocaleString(),c.author=n.author,c.solvent=n.solvent,c.temperature=n.temperature.magnitude,c.probeName=n.probeName||"",c.fieldStrength=n.fieldStrength.magnitude;let u=c.nucleus.map(Ho);c.baseFrequency=u.map(m=>n.fieldStrength.magnitude*m/(2*Math.PI*1e6)),c.pulseSequence=n.experiment,c.temperature=n.temperature?.unit?.toLowerCase()==="celsius"?273.15+n.temperature.magnitude:n.temperature.magnitude,c.digitalFilter=n.digitalFilter,c.pulseStrength90=1/(4*n.pulseStrength90.magnitude),c.numberOfScans=n.numberOfScans,c.relaxationTime=n.relaxationTime.magnitude,c.isComplex=n.dataSections?n.dataSections.includes("im"):!1,c.isFid=n.dataUnits[0]==="Second",c.isFt=n.dataUnits[0]==="Ppm",c.dimension=n.dimension,c.originFrequency=n.originFrequency.map(m=>m.magnitude/1e6).slice(0,s),c.numberOfPoints=n.dataPoints.slice(0,1),c.frequencyOffset=n.frequencyOffset.map((m,y)=>m.magnitude*c.baseFrequency[y]).slice(0,s),c.acquisitionTime=n.acquisitionTime.map(m=>m.magnitude).slice(0,s),c.spectralWidth=n.spectralWidth.map((m,y)=>m.magnitude/n.originFrequency[y].magnitude*1e6).slice(0,s),c.spectralWidthClipped=n.spectralWidthClipped.map((m,y)=>m.magnitude/c.baseFrequency[y]*1e6).slice(0,s);let f=[],d={},g;for(let m=0;m<n.dimension;m++){if(g={magnitude:n.acquisitionTime[m].magnitude/(n.dataPoints[m]-1),unit:"s"},n.dataUnits[m]==="Second")d.quantityName="time",d.originOffset={magnitude:0,unit:"s"},m===0?d.coordinatesOffset={magnitude:n.digitalFilter*g.magnitude,unit:"s"}:d.coordinatesOffset={magnitude:0,unit:"s"},d.reciprocal={originOffset:{magnitude:n.originFrequency[m].magnitude,unit:"Hz"},quantityName:"frequency",coordinatesOffset:{magnitude:n.frequencyOffset[m].magnitude*n.originFrequency[m].magnitude/1e6,unit:"Hz"}};else if(n.dataUnits[m]==="Ppm"){d.quantityName="frequency";let y=n.originFrequency[m].magnitude;d.originOffset={magnitude:y,unit:"Hz"};let F=n.dataOffsetStart[m],N=n.dataOffsetStop[m]-F+1;g={magnitude:ts(n,m)/(N-1),unit:"Hz"};let A=n.dataAxisStop[m]*y/1e6;d.coordinatesOffset={magnitude:A,unit:"Hz"},N!==n.dataPoints[m]&&(n.dataPoints[m]=N)}m===0?d.description="direct dimension":d.description="indirect dimension",f.push({label:String(i.dataAxisTitles[m]),count:Number(n.dataPoints[m]),increment:g,type:"linear",description:String(d.description)||"",application:d.application||{},coordinatesOffset:d.coordinatesOffset||0,originOffset:d.originOffset||0,quantityName:String(d.quantityName)||"",reciprocal:d.reciprocal||{},period:d.period||0,complexFFT:d.complexFFT||!1})}let h=[];h.push($n(l,11,{unit:"none",quantityName:"relative intensity",from:n.dataOffsetStart,to:n.dataOffsetStop}));let p={...c};return delete p.paramList,p.metadata={...zn(i,s),...zn(o,s),...Yo({},a)},[{timeStamp:Date.now(),description:p,dimensions:f,dependentVariables:h}]}function ts(e,t){let{spectralWidth:n,spectralWidthClipped:i}=e;return i[t].magnitude!=="NA"?i[t].magnitude:n[t].magnitude}function zn(e,t){let n={};for(let i in e)n[i]=Wn(e[i],t);return n}function Wn(e,t){return Go(e)?t>1?e.slice(0,t):e[0]:e}var Se=class{id="@zakodium/nmrium-core-plugins#JEOLLoaderPlugin";version=1;migrations=[];onReadProcess;constructor(){this.onReadProcess={supportedExtensions:["jdf"],onFile:this.onReadProcessFile.bind(this)}}onReadProcessFile(t,n={}){let{logger:i,keepSource:r}=n;return i?.debug(`Reading JEOL file: ${t.name}`),Jn(t,{name:t.name,keepSource:r,logger:i})}};function lt(){return new Se}var Pe=class{id="@zakodium/nmrium-core-plugins#MolfileLoaderPlugin";version=1;migrations=[];onReadProcess;constructor(){this.onReadProcess={supportedExtensions:["mol"],onFile:this.onReadProcessFile.bind(this)}}onReadProcessFile(t,n={}){let{logger:i}=n;return i?.debug(`Reading molfile file: ${t.name}`),rn(t,{logger:i})}};function mt(){return new Pe}import{FileCollection as wu}from"file-collection";import{Molecule as sr}from"openchemlib";import{getShortestPaths as ns}from"openchemlib-utils";function Vn(e,t){let{molecule:n,map:i}=t;n.addImplicitHydrogens();let r=ns(n,{toLabel:"H",maxLength:1});for(let s in e){let a=e[s],l=a.atoms;if(l.length!==0){if(a.position=[],l[0].toLowerCase().includes("h")){let c=Number(l[0].toLowerCase().replace("h",""))-1;c=i.indexOf(c);let u=r[c].find(f=>f&&f.length>1);a.position=r[u[0]].filter(f=>f&&f.length>1).map(f=>f.at(-1))}else if(l[0].toLowerCase().match(/\w/s))for(let c of l){let u=i.indexOf(Number(c)-1);a.position.push(u)}}}let o=n.getDiastereotopicAtomIDs();for(let s in e){let a=[];if("position"in e[s])for(let l of e[s].position)a.includes(o[l])||a.push(o[l]);e[s].diaIDs=a}return e}async function Xn(e,t){let{fileCollection:n,root:i}=t,r=e.data.filter(s=>s.value.spectrum_location),o=[];for(let s of r){if(!s){new Error(`There is not spectrum for ${e}`);return}let a=s.value.spectrum_location;if(a.match(/file:/s)){let l=i+a.replace(/file:[./]*/s,""),c=l.match(/[ser|fid]/s)?/([.*/]*\w+\/[0-9]+\/).*/:/(.*\w+\/[0-9]+\/)pdata\/.*/,u=l.replace(c,"$1"),f=l.replace(/.*\/[0-9]+\/pdata\/([0-9]+)\/.*/,"$1"),d=n.filter(g=>{if(g.relativePath.match("pdata")&&f!==g.relativePath.replace(/.*\/[0-9]+\/pdata\/([0-9]+)\/.*/,"$1"))return!1;let h=g.relativePath.replace(/([.*/]*\w+\/[0-9]+\/).*/,"$1");return!(u!==h&&!["ser","fid"].some(p=>l===`${h}${p}`))});o.push({type:"brukerFiles",fileCollection:d})}else a.match("http")&&o.push({type:"url",value:a})}return o}async function Hn(e,t){let{fileCollection:n,root:i}=t,r=e.data.find(l=>l.value.jcamp_location);if(!r){new Error(`There is not spectrum for ${e}`);return}let o=r.value.jcamp_location,s=i+o.replace(/file:/s,""),a=n.filter(l=>l.relativePath===s);if(a.files.length===0){new Error(`There is not jcamp with path: ${s}`);return}return[{name:s,type:"jcamp",fileCollection:a}]}function Gn(e={}){let t={};for(let n of e.data||[]){let{label:i,atoms:r,shift:o}=n.value;t[i]={shift:o,atoms:r}}return t}function Yn(e){let t=e.match(/([0-9])\w_/s)?.[1];if(t==="1")return e.slice(3).replaceAll(/(?<nucleus>[0-9]+\w+)#\w+/g,"$<nucleus>");if(t==="2"){let n=[],i=e.slice(12).split("_");for(let r=0;r<i.length;r+=2)n.push(i[r].replaceAll(/(?<nucleus>[0-9]+\w+)#\w+/g,"$<nucleus>"))}return[]}var rs=["delta","nbAtoms","multiplicity","jCoupling"];function Kn(e,t){let n={};for(let s of rs){let a=e[s];a&&(n[s]=a)}let{nbAtoms:i,integration:r}=e;if(n.integration=r?Number(r):i?Number(i):null,e.assignment)for(let s of e.assignment){let a=t[s];n.diaIDs||(n.diaIDs=[]),a?.diaIDs&&n.diaIDs.push(...a.diaIDs)}let o=!1;if(n.jCoupling&&(o=n.jCoupling.some(s=>Object.keys(s).includes("label"))),o){for(let s of n.jCoupling)if(s.label){let a=t[s.label];a?.diaIDs&&(s.diaIDs=a.diaIDs)}}return n.delta&&(n.delta=Number.parseFloat(n.delta)),n}var is=["intensity","volume","activeCoupling"],os={x:["f1Width","f1Coupling"],y:["f2Width","f2Coupling"]};function Zn(e,t){let n={};for(let i of is)e[i]&&(n[i]=e[i]);for(let i in e.delta){n[i]||(n[i]={});let r=e.delta[i];for(let o of r)n[i].diaIDs||(n[i].diaIDs=[]),t[o]?(n[i].diaIDs.push(...t[o].diaIDs),n[i].delta=Number.parseFloat(t[o].shift)):n[i].delta=Number.parseFloat(o);for(let o of os[i])if(e[o]){let s=o.toLowerCase().replace(/f\w(\w+)/,"$1");n[i][s]=e[o]}}return n}async function Qn(e,t){let{moleculeAndMap:n}=t,i={molecules:[{molfile:n.molecule.toMolfile()}],spectra:[]},r=i.spectra,o=i.molecules;e.SMILES?.data.length>0&&(o[0].smiles=e.SMILES.data[0].value);let s=Gn(e.ASSIGNMENT);s=Vn(s,n);for(let a in e){let l=a.toLowerCase();if(!l.match(/[1|2]d_/s))continue;let c=e[a].data.find(m=>m.value.larmor),u=e[a].data.find(m=>m.value.pulseprogram),f=Yn(a),d=l.replace(/([1|2]d)_.*/,"$1"),g=d==="2d"?Zn:Kn,h={source:{jcampURL:null},nucleus:f,frequency:c?.value.larmor,experiment:u?u.value.pulseprogram.trim():d,headComment:e[a].headComment},p=e[a].data.filter(m=>m.value.delta);h.signals=p.map(m=>{let y=g(m.value,s);return y.comment=m.comment,y});let b=await ss(e[a],t);if(!b.jcamp&&!b.bruker)r.push(h);else for(let m in b)b[m]&&r.push({...h,source:{...h.source,file:b[m]}})}return i}async function ss(e,t){return{jcamp:await Hn(e,t),bruker:await Xn(e,t)}}function Ne(e,t={}){let{include:n,exclude:i,filter:r,modifiers:o={},forEach:s={},dynamicTyping:a=!0,mixedEOL:l=!1}=t;if(typeof e!="string")throw new TypeError('Parameter "sdf" must be a string');let c=`
9
- `;if(l)e=e.replaceAll(`\r
8
+ `,a=[ir,gr,Qt,sr],{creator:c=""}=i;c.includes("nanalysis")?a.push(cr):c.toLocaleLowerCase().includes("oxford instruments")&&a.push(yr),c!=="mnova"&&c!=="mestre"&&a.push(pr),a.push(fr,ar);for(let l of a)l(i,e,{prefix:r,logger:n,separator:s});return Do(i)}function Do(e){return e.dimension===1&&(e.nucleus=[e.nucleus]),Object.fromEntries(Object.entries(e).map(([t,r])=>[t,xo(r)&&r.length===1?r[0]:r]))}var Mo={keepRecordsRegExp:/.*/,keepFiles:!0};async function Se(e,t={}){let r={spectra:[],molecules:[]},{converter:n={},selector:i={},logger:o}=t,s=Ze(e,{logger:o,...Ao(i)}),a=[];for(let l of s)a.push(nt(l,{...Mo,...n}).then(m=>Po(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 p=Fe(m.value.info);r.spectra.push({...m.value,info:{...m.value.info,...p}})}else if(m.reason){let p=s[l].name;o?.warn(`Bruker data: ${p}, fails with: ${m.reason}`);continue}}return o&&o[r.spectra.length>0?"info":"debug"](`Loaded ${r.spectra.length} spectra from Bruker files`),So(r)}function Po(e,t={}){let{keepSource:r=!1,logger:n}=t,i={...e.info,...e.meta},o=De(i,{logger:n}),s={},{isFid:a}=o;if(No(e)){let g=e.minMax;for(let y in g){let u=g[y];u&&(u.z=U(u.z))}s.components=e.minMax}else o.dimension===1&&(s.components=e.spectra);let{source:c}=e,{expno:l,name:m,files:p}=c;i.vdlist&&(i.vdlistValues=he(i.vdlist));let f={dependentVariables:[s],meta:i,info:{...o,experimentNumber:l,name:m}};return p&&r&&(f.sourceSelector={files:p.map(g=>g.relativePath)}),Io(f,e),f}function Ao(e){let{general:t={},bruker:r={}}=e,{processingNumbers:n,experimentNumbers:i,...o}=r;return{...t,...o,processingNumbers:hr(n),experimentNumbers:hr(i)}}function hr(e){if(e)return e.split(/[^\d]+/).filter(Boolean).map(t=>Number.parseInt(t,10))}function No(e){let{info:t}=e;return t.twoD}function Io(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"}})}}var Me=class{id="@zakodium/nmrium-core-plugins#BrukerLoaderPlugin";version=1;migrations=[];onReadProcess;constructor(){this.onReadProcess={onFiles:this.onReadProcessFiles}}onReadProcessFiles=(t,r)=>{let{sourceSelector:n,converter:i,keepSource:o,logger:s}=r??{};return Se(t,{converter:i?.bruker,selector:n,keepSource:o,logger:s})}};function it(){return new Me}import{formatSpectra as as}from"@zakodium/nmrium-core";import{createTree as cs}from"jcampconverter";function br(e,t,r={}){let{selector:n={},keepSource:i=!1}=r;if(!i)return e;for(let o=0;o<e.spectra.length;o++){let s=e.spectra[o];s.sourceSelector={files:[t.relativePath],jcamp:{index:o,...n}}}return e}import{convert as Ro}from"jcampconverter";function ot(e,t,r){let{dataType:n,children:i}=e,o=n==="LINK"&&i?i:[e];for(let s of o){if(s.dataType==="LINK"){ot(s,t,r);continue}let a=Ro(s.jcamp,r);t.push(...a.flatten)}}function Dr(e,t={}){let r=[],n=Sr(e,t);for(let s of n?e:[])s.dataType==="LINK"?s.children=st(s.children,t):s=st([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 st(e=[],t={}){let{name:r,logger:n,tree:i=[],dataSelection:o="both"}=t,s=[];for(let m of e){let{dataType:p,dataClass:f}=m;if(p==="LINK")m.children=st(m.children,t);else if(i.some(g=>{let{dataClass:y=f,dataType:u=p}=g;return f===y&&p===u})){n?.warn(`Skipping ${f} and ${p} ${r?`in ${r}`:"in the JCAMP-DX"},
9
+ because it didn't match the import filters`);continue}s.push(m)}let a=[],c=s.some(xr),l=s.some(Fr);for(let m of s){if(o!=="both"&&m.dataType!=="LINK"){if(xr(m)&&(o==="ft"||o==="preferFT"&&l)){n?.warn(`Skipping raw data ${r?`in ${r}`:"in the JCAMP-DX"} because it didn't match the import filters`);continue}if(Fr(m)&&(o==="fid"||o==="preferFID"&&c)){n?.warn(`Skipping FFT data ${r?`in ${r}`:"in the JCAMP-DX"} because it didn't match the import filters`);continue}}a.push(m)}return a}function Fr(e){return e.dataType?.toUpperCase().includes("SPECTRUM")&&e.dataClass&&!e.dataClass.toUpperCase().includes("PEAK")}function xr(e){return e.dataType?.toUpperCase().includes("FID")}function Sr(e,t={}){let{logger:r,name:n=""}=t;for(let i of e){if(i.dataType==="LINK"&&Sr(i.children,t))return!0;let{dataType:o=""}=i,s=o.toLowerCase();if(s.length>0){if(s.includes("spectrum")&&!s.includes("nmr"))return r?.warn(`File ${n} was ignored because it is a ${o}`),!1;if(s.includes("nmr"))return!0}}return!1}import{generateID as Ar}from"@zakodium/nmrium-core";import{parseJcampCS as Lo}from"jcampconverter";import*as ko from"openchemlib";import{isMolfileNotEmpty as Oo}from"nmr-processing";import{Molecule as Eo}from"openchemlib";async function Mr(e,t={}){let r=await e.text(),n=K(r),i={molecules:n,spectra:[]};return n.length===0&&t.logger?.debug(`${e.name} is an empty molfile`),i}function K(e){let t=[];if(!Oo(e))return[];let n=Eo.fromMolfile(e).toMolfile();return t.push({molfile:n}),t}import{isMolfileNotEmpty as Co}from"nmr-processing";import*as wo from"openchemlib";import{getDiastereotopicAtomIDsFromMolfile as vo}from"openchemlib-utils";var To=new Set(["ndnmrspectrum","ndnmrfid","nmrspectrum","nmrfid"]);function Pe(e){let{dataType:t="",dataClass:r=""}=e,n=t.replaceAll(/\s/g,"").toLowerCase(),i=r.replaceAll(/\s/g,"").toLowerCase();return To.has(n)&&i!=="peaktable"}function Pr(e,t,r={}){let{spectra:n,info:i,meta:o}=e,s=n[0].data,a=[],c={x:"delta",y:"intensity",w:"width",m:"multiplicity",a:"atom"},{logger:l,name:m,spectraData:p}=r,{CROSSREFERENCE:f}=i,g=typeof f!="string"?f:f.split(/\r?\n/).map(x=>x.trim()).filter(Boolean),y=g.find(x=>x?.toLowerCase().includes("structure"));if(y===void 0)return l&&l.warn(`There is not a structure reference for ${m} file, assignment object could not be completed`),null;let u=Number.parseInt(y?.toLowerCase().replace(/_/,"").replace(/structure:\s*blockid\s*=\s*(?<blockId>.*)/,"$<blockId>"),10);if(Number.isNaN(u)||u<1)return l&&l.warn(`Structure block_id not found for ${m} file, assignment object could not be completed`),null;let d=p?.molecules?.find(x=>x.blockId===u)?.molfile??"";if(d===""){let x=t.find(A=>A.info.BLOCKID===u),{MOLFILE:M=""}=x?.meta||{};d=M}if(!Co(d))return l&&l.warn(`Empty molfile for ${m} file with structure block_id = ${u}, assignment object could not be completed`),null;let b=vo(wo,d),F=xe({...i,...o},{},"");for(let x=0;x<s.x.length;x++){let M={};for(let A in s){let O=s[A][x];typeof O=="string"&&O.startsWith("<")&&O.endsWith(">")&&(O=O.slice(1,-1)),M[c[A]]=O}if("atom"in M){let A=b.map[M.atom-1];F.includes("1H")?A.nbHydrogens>0?(M.diaIDs=A.hydrogenOCLIDs,M.nbHydrogens=A.nbHydrogens):(M.diaIDs=[A.oclID],M.nbHydrogens=A.nbHydrogens):(M.diaIDs=[A.oclID],M.nbHydrogens=1)}a.push(M)}let S={};for(let x of a){let{delta:M,diaIDs:A}=x,O=`${M}_${A.join("_")}`;if(S[O])S[O].atoms.push(x.atom);else{let{atom:j,...re}=x;S[O]={...re,atoms:[x.atom]}}}let P=[];for(let x of g)x.toLowerCase().includes("spectrum")&&P.push(Number(x.toLowerCase().replace(/_/,"").replace(/.*:\s*blockid=(?<blockId>.*)/,"$<blockId>")));if(P.length===0){for(let x of t)if(Pe(x)){let{BLOCKID:M}=x.info;P.push(Number(M))}P.length>1&&(P=[],l&&l.warn(`There is not a spectral cross-reference for the peak assignment in the ${m} file`))}return{moleculeBlockID:u,spectraBlockIDs:P,assignments:Object.values(S),molecule:b.molecule}}function Nr(e,t,r,n){for(let i of e){let{meta:o,dataClass:s="",dataType:a="",info:c}=i,l=Number.parseInt(String(c.BLOCKID),10);o.MOLFILE?Bo(String(o.MOLFILE),t,l):i.jcampCS&&jo(i,t,l),_o(s,a)&&qo(t,i,e,n),Pe(i)&&r.push(i)}}function _o(e,t){return e?.toLowerCase().includes("assignments")&&t?.toLowerCase().includes("assignments")}function qo(e,t,r,n){let i=Pr(t,r,{spectraData:e,logger:n.logger,name:n.name});if(e.assignmentsByBlocks||(e.assignmentsByBlocks={}),i){let{spectraBlockIDs:o}=i;for(let s of o)e.assignmentsByBlocks[s]=i}}function jo(e,t,r){t.molecules||(t.molecules=[]);let n=Lo(e,{OCL:ko}),i=K(n?.molfile||"");i.length>0&&t.molecules.push({id:Ar(),blockId:r,...i[0]})}function Bo(e,t,r){t.molecules||(t.molecules=[]);let n=K(e);t.molecules.push({id:Ar(),blockId:r,...n[0]})}import{generateID as jr}from"@zakodium/nmrium-core";import{matrixMinMaxZ as qr,reimPhaseCorrection as Ko}from"ml-spectra-processing";import{xyAutoRangesPicking as Zo}from"nmr-processing";function Z(e){return e.slice(0,Math.max(0,e.lastIndexOf(".")))}function Q(e){e.sort((t,r)=>t.from-r.from);for(let t=0;t<e.length-1;t++)e[t].to>e[t+1].from&&(e[t].to=Math.max(e[t+1].to,e[t].to),e[t].signals=e[t].signals.concat(e[t+1].signals),e[t].integration+=e[t+1].integration,e.splice(t+1,1),t--);return e}import{splitPatterns as Wo}from"nmr-processing";import{xMaxValue as Uo}from"ml-spectra-processing";function ie(e){return e.trim().slice(1,-1).split(/,\s*/).map(t=>t.trim())}var $o={I:"id",X:"from",Y:"to",Hs:"delta",An:"integration",H:"nbAtoms",C:"multiplicity",N:"assignment","(J)":"js"},Ir=["I","X","Y","Hs","An","H","C","N","(J)"];function Rr(e){let t={headersFromParenthesis:[],headersFromComments:[],comments:[],data:[],multiplets:[]},r=e.split(/\r?\n/).filter(n=>n.trim()!=="");if(r.length===0)return t;if(r[0].startsWith("(")&&!r[0].match(/\d/)){let n=r.shift();t.headersFromParenthesis=ie(n)}return t.comments=r.filter(n=>n.startsWith("$$")).map(n=>n.replace(/^\$\$\s*/,"")),t.headersFromComments=Jo(t.comments),t.data=r.filter(n=>!n.startsWith("$$")).map(ie),t.multiplets=zo(t),t}function zo(e,t={}){let{logger:r}=t,n=e.data[0].map((c,l)=>l).filter(c=>e.data.every(l=>Number.isNaN(l[c])||Number.isNaN(Number(l[c]))));if(r?.trace(`Parsing JCAMP-DX assignment: stringColumnIndexes: ${n.join(",")}`),n.length===0)return r?.warn("Parsing JCAMP-DX assignment: No string columns found. Skipping parsing of assignment."),[];let i=n[0],o;if(e.headersFromParenthesis.length>0&&e.headersFromParenthesis[i]==="C")o=e.headersFromParenthesis;else if(e.headersFromComments.length>0&&e.headersFromComments[i]==="C")o=e.headersFromComments;else if(Ir[i]==="C")o=Ir;else return r?.warn("No header found for multiplicity. Skipping parsing of assignment."),[];return Uo(e.data.map(c=>c.length))>o.length&&r?.warn("Some assignments are containing more values than headers"),e.data.map(c=>{let l={};for(let m=0;m<o.length;m++){let p=o[m];l[$o[p]||p]=c[m]}return l})}function Jo(e){return e.map(t=>t.split(":")[0].trim()).filter(t=>t.length>0)}function Or(e,t={}){let{logger:r}=t,n=Rr(e),i={multiplets:[],comments:n.comments};for(let o of n.multiplets){let{id:s,from:a,to:c,delta:l,integration:m,nbAtoms:p,multiplicity:f}=o,g={id:s,js:[],multiplicity:"",...Xo({from:a,to:c,delta:l,integration:m,nbAtoms:p})};if(typeof o.js=="string"){let y=o.js.split(/\s+/).map(Number.parseFloat),u=0,h=Wo(f).map(F=>{let S=(F?.multiplicity||1)-1;return u+=S,{value:F.value,multiplicity:F?.multiplicity,js:y.slice(u-S,u)}}),d=h.reduce((F,S)=>F+(S.multiplicity?S.multiplicity-1:0),0);y.length!==d&&r?.warn(`The number of j values (${y.length}) is not equal to the sum of the multiplicities - 1 (${d})`);let b=[];for(let F of h){if(F.js.every(S=>S===F.js[0])){b.push(F);continue}if(F.multiplicity!==F.js.length+1){b.push(F);continue}for(let S=0;S<F.multiplicity-1;S++)b.push({value:"d",multiplicity:2,js:[F.js[S]]})}b.sort((F,S)=>S.js[0]-F.js[0]),g.js=b.map(F=>({coupling:F.js[0],multiplicity:F.value}))}typeof o.assignment=="string"&&(g.assignment=Ho(o.assignment)),typeof o.multiplicity=="string"&&(g.multiplicity=o.multiplicity),i.multiplets.push(g)}return i}function Xo(e){let t={};for(let r in e){let n=e[r],i=typeof n=="number"?n:Number.parseFloat(n);Number.isNaN(i)||(t[r]=i)}return t}var Vo={quot:'"',apos:"'",comma:",",amp:"&",lpar:"(",rpar:")",lt:"<",gt:">",colon:":",semi:";"};function Ho(e){return e.replaceAll(/&(\w+);/gi,(t,r)=>Vo[r.toLowerCase()]||t)}function Er(e){let t=e.split(/\r?\n/).filter(n=>n.trim()!==""),r=[];for(let n of t)if(n.startsWith("(")){let[i,o,s]=ie(n).map(Number.parseFloat);r.push({id:i,x:o,y:s})}return r}function Tr(e,t={}){let r={};if(!e["OBSERVED MULTIPLETS"])return[];let n=Or(e["OBSERVED MULTIPLETS"],t);if(!n)return[];let{multiplets:i}=n;for(let o of i){let{id:s,from:a,to:c,integration:l=0,...m}=o;r[s]={from:a,to:c,integration:l,signals:[{id:s,...m}]}}if(e["OBSERVED MULTIPLETS PEAKS"]){let o=Er(e["OBSERVED MULTIPLETS PEAKS"]),s={};for(let a of o){let{id:c,x:l,y:m}=a;s[c]||(s[c]=[]),s[c].push({x:l,y:m,width:.05})}for(let a in r)s[a]&&(r[a].signals[0].peaks=s[a])}return Q(Object.values(r))}function Cr(e,t){let n=[...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})),i=[...t.nucleus[0].matchAll(/[0-9]*(?<element>[A-Z][a-z]?)/g,"$element")][0].groups.element;return n.find(o=>o.element===i)?.count||100}function wr(e){let t={};return".PHASE0"in e&&(t.ph0=Number.parseFloat(e[".PHASE0"]),t.ph1=Number.parseFloat(e[".PHASE1"])),t}function at(e){let{ph0:t,ph1:r}=e;return Number.isFinite(t)&&Number.isFinite(r)}import{generateID as vr}from"@zakodium/nmrium-core";function Lr(e,t,r){for(let n=0;n<e.length;n++){if(t.includes(n))continue;let{delta:i,multiplicity:o="",diaIDs:s}=e[n],a=i-.01,c=i+.01;r.push({from:a,to:c,integration:1,id:vr(),signals:[{id:vr(),delta:i,multiplicity:o,diaIDs:s}]})}}import{linearSumAssignment as Go}from"linear-sum-assignment";import{xCostMatrix as Yo}from"ml-spectra-processing";function kr(e,t){let r=e.map(s=>s.delta),n=t.map(s=>s.delta),i=Yo(n,r,{fct:(s,a)=>Math.abs(s-a)}),{rowAssignments:o}=Go(i,{maximaze:!1});return Array.from(o)}function _r(e,t){let{assignments:r,ranges:n}=t;r?.sort((s,a)=>a.delta-s.delta);let i=[],o=[];for(let s of n){let a=0,{from:c,to:l}=s,m=[];for(let p=a;p<r.length;p++){let{delta:f}=r[p];f<=l&&f>=c?(m.push(r[p]),o.push(p)):f>l&&(a=p)}if(m.length>0){let p=s.signals,f=[],g=m.length>1&&p.length>1?kr(p,m):[0];for(let y=0;y<m.length;y++){let u=g[y],{delta:h,multiplicity:d,diaIDs:b}=m[y];u>-1?f.push({...p[u],diaIDs:b}):f.push({delta:h,multiplicity:d,diaIDs:b})}s.signals=f,i.push(s)}}Lr(r,o,i),i.sort((s,a)=>s.from-a.from),e.ranges={values:Q(i).map(s=>{let{integration:a,...c}=s;return c}),options:{sum:t.integrationSum,isSumConstant:!0,sumAuto:!0}},e.ranges.options.moleculeId=String(t.moleculeId)}function Br(e,t,r,n,i){let{logger:o}=i,s={components:Ur(e)?ts(e,r.isFid):es(e)},{name:a=r.title||`jcamp_${jr()}`}=i,c={dependentVariables:[s],meta:t,info:{...r,name:Z(a)}};return Qo(e)&&rs(c,n,t,e,r,{logger:o}),c}function Ur(e){return"minMax"in e}function Qo(e){return!Ur(e)}function es(e){return e.spectra.map(t=>{let r=U(t.data);return{...t,data:r}})}function ts(e,t){let r={...e.minMax,z:U(e.minMax?.z)};return t?ns(r):{rr:r}}function rs(e,t,r,n,i,o){let{assignmentsByBlocks:s}=t,a=wr(r);at(a)&&is(e,a);let c=String(n.info.BLOCKID);if(s?.[c]){let{molecule:l,assignments:m,moleculeBlockID:p}=s[c],f=Cr(l,i),g=U(n.spectra[0].data);if(g.x[0]>g.x[1])for(let d of n.spectra)d.data.x.reverse(),d.data.y.reverse();if(at(a)&&n.spectra.length>1){let{re:d}=os(n,a);g.y=d}let{x:y,y:u}=g,h=Tr(r,o)??Zo({x:y,y:u},{peakPicking:{frequency:i.originFrequency},ranges:{frequency:i.originFrequency,integrationSum:f}});_r(e,{moleculeId:p,ranges:h,assignments:m,integrationSum:f})}}function ns(e){let{z:t,...r}=e,n=[],i=[];for(let a=0;a<t.length;a+=2)n.push(t[a].slice()),i.push(t[a+1].slice());let o=qr(n),s=qr(i);return{re:{...r,z:n,minZ:o.min,maxZ:o.max},im:{...r,z:i,minZ:s.min,maxZ:s.max}}}function is(e,t){let{ph0:r,ph1:n}=t;e.filters||(e.filters=[]),e.filters.push({id:jr(),name:"phaseCorrection",value:{ph0:r,ph1:n,absolute:!1},enabled:!0})}function os(e,t){let{ph0:r,ph1:n}=t,{re:i,im:o}=Ko({re:e.spectra[0].data.y,im:e.spectra[1].data.y},r*Math.PI/180,n*Math.PI/180);return{re:i,im:o}}function $r(e,t,r){let{logger:n}=r,i=[];for(let o of e)if(o.spectra&&o.spectra.length>0||o.minMax){ss(o);let s={...o.info,...o.meta},a=De(s,{logger:n});if(a.experiment==="wobble_curve")continue;i.push(Br(o,s,a,t,r))}return i}function ss(e){let t=e.meta["BRUKER FILE EXP"];if(!t)return;let n=(Array.isArray(t)?t:[t]).find(o=>o.slice(0,10).includes("vdlist"));if(!n)return;let i=n.split(`
10
+ `).slice(1);e.info.vdlistValues=he(i)}async function Ae(e,t={}){let r=await e.text(),n=zr(r,{name:e.name,...t});return br(n,e,t)}function zr(e,t={}){let r={spectra:[],molecules:[]},{name:n,converter:i={},selector:o={},logger:s}=t,{keepRecordsRegExp:a=/.*/}=i,c={keepSpectra:!0,noContour:!0,noTrimRegExp:/\$MOLFILE/,keepRecordsRegExp:a,logger:s},l=Dr(cs(e),{name:n,...o,logger:s});for(let m of l)ls(m,r,c,n);if(ms(r,o),r.spectra.length===0&&l.length>0){let m=r.molecules.length===0?" nor molecule":"";s?.warn(`No spectra${m} data was loaded from file ${n}`)}return as(r)}function ls(e,t,r,n){let i=[],o=[],s={molecules:[]},{logger:a}=r,c={name:n,logger:a};ot(e,o,r),Nr(o,s,i,c),t.spectra.push(...$r(i,s,c)),t.molecules.push(...s.molecules)}function ms(e,t){t.index!==void 0&&(e.spectra=e.spectra.slice(t.index,t.index+1))}var Ne=class{id="@zakodium/nmrium-core-plugins#JCAMPDXLoaderPlugin";version=1;migrations=[];onReadProcess;constructor(){this.onReadProcess={supportedExtensions:["jcamp","jdx","dx"],onFile:this.onReadProcessFile.bind(this)}}onReadProcessFile(t,r={}){let{sourceSelector:n={},converter:i,keepSource:o,logger:s}=r;return s?.debug(`Reading JCAMP-DX file: ${t.name}`),Ae(t,{selector:this.getJCAMPDXSelector(n),converter:i?.jcamp,keepSource:o,logger:s})}getJCAMPDXSelector(t={}){let{jcamp:r={},general:n={}}=t,{dataSelection:i="both"}=n;return{dataSelection:i,...r}}};function ct(){return new Ne}function Jr(e){if(e===void 0)return{epoch:null,date:""};let t=e*1e3;return{epoch:t,date:new Date(t).toUTCString()}}var Wr={0:"bigEndian",1:"littleEndian"},Xr={0:"NONE",1:"GSX",2:"ALPHA",3:"ECLIPSE",4:"MASS_SPEC",5:"COMPILER",6:"OTHER_NMR",7:"UNKNOWN",8:"GEMINI",9:"UNITY",10:"ASPECT",11:"UX",12:"FELIX",13:"LAMBDA",14:"GE_1280",15:"GE_OMEGA",16:"CHEMAGNETICS",17:"CDFF",18:"GALACTIC",19:"TRIAD",20:"GENERIC_NMR",21:"GAMMA",22:"JCAMP_DX",23:"AMX",24:"DMX",25:"ECA",26:"ALICE",27:"NMR_PIPE",28:"SIMPSON"},Vr={0:"64Bit Float",1:"32Bit Float",2:"Reserved",3:"Reserved"},Hr={1:"One_D",2:"Two_D",3:"Three_D",4:"Four_D",5:"Five_D",6:"Six_D",7:"Seven_D",8:"Eight_D",9:"not for NMR data formats",10:"not for NMR data formats",11:"not for NMR data formats",12:"Small_Two_D",13:"Small_Three_D",14:"Small_Four_D"},Gr={0:"None",1:"Real",2:"TPPI",3:"Complex",4:"Real_Complex",5:"Envelope"},Yr={"-8":"Yotta","-6":"Exa","-7":"Zetta","-5":"Pecta","-4":"Tera","-3":"Giga","-2":"Mega","-1":"Kilo",0:"None",1:"Milli",2:"Micro",3:"Nano",4:"Pico",5:"Femto",6:"Atto",7:"Zepto"},Kr={Yotta:24,Exa:21,Zetta:18,Pecta:15,Tera:12,Giga:9,Mega:6,Kilo:3,None:0,Milli:-3,Micro:-6,Nano:-9,Pico:-12,Femto:-15,Atto:-18,Zepto:-21},Zr={0:"None",1:"Abundance",2:"Ampere",3:"Candela",4:"Celsius",5:"Coulomb",6:"Degree",7:"Electronvolt",8:"Farad",9:"Sievert",10:"Gram",11:"Gray",12:"Henry",13:"Hertz",14:"Kelvin",15:"Joule",16:"Liter",17:"Lumen",18:"Lux",19:"Meter",20:"Mole",21:"Newton",22:"Ohm",23:"Pascal",24:"Percent",25:"Point",26:"Ppm",27:"Radian",28:"Second",29:"Siemens",30:"Steradian",31:"Tesla",32:"Volt",33:"Watt",34:"Weber",35:"Decibel",36:"Dalton",37:"Thompson",38:"Ugeneric",39:"LPercent ",40:"PPT",41:"PPB ",42:"Index"},lt={0:"Ranged",1:"Listed",2:"Sparse",3:"Listed"};function w(e,t){return e.paramArray.find(r=>r.name===t)}function Qr(e,t){let r=e.paramArray.find(u=>u.name==="orders"),n=e.paramArray.find(u=>u.name==="factors"),i=e.paramArray.find(u=>u.name==="x_sweep"),o=e.paramArray.find(u=>u.name==="x_acq_time"),s=e.paramArray.find(u=>u.name==="x_points");if(!r||!n||!i||!o||!s){t?.error("There is not all parameters to calculate the number of point of digital filter");return}let a=r.value,c=Number.parseInt(a.slice(0,1),10),l=a.slice(1).length/c,m=0,p=new Int8Array(c),f=1,g=0;for(let u=0;u<c;u++)p[u]=Number.parseInt(n.value.slice(g,g+1),10),g+=1;for(let u=0;u<c;u++){let h=1;for(let d=u;d<c;d++)h*=p[d];m+=(Number.parseInt(a.slice(f,f+l),10)-1)/h,f+=l}return m/=2,m/i.value/o.value*(s.value-1)}function R(e,t){let r=w(e,t);if(r===void 0)return{magnitude:"NA",unit:"NA"};let n=r.unit[0],i=n.base,o=Kr[n.prefix];return{magnitude:r.value*10**o,unit:i}}function mt(e){let t=e.readBytes(4),r=1990+(t[0]>>1),n=(t[0]<<3&8)+(t[1]>>5),i=t[2]&31;return{year:r,month:n,day:i}}function Ie(e,t){let r=[];for(let n=0;n<t;n++){let i=e.readByte(),o=i>>4,s=Yr[o],a=i&15,c=e.readInt8(),l=Zr[c];r.push({prefix:s,power:a,base:l})}return r}function z(e,t){let r=[];for(let n=0;n<t;n++){let i=e.readChar();i!=="\0"&&r.push(i)}return r.join("")}function ut(e,t){let r=[];for(let n=0;n<t;n++){let i=e.readChar();i!==" "&&r.push(i)}return r.join("")}function N(e,t,r){let n=[];for(let i=0;i<t;i++)switch(r){case"readUint32":n.push(e.readUint32());break;case"readFloat64":n.push(e.readFloat64());break;case"readFloat32":n.push(e.readFloat32());break;case"readUint8":n.push(e.readUint8());break;default:break}return n}function en(e,t){let r=[];for(let n=0;n<t;n++)r.push(e.readBoolean());return r}function tn(e,t,r){let n=1,i=0;for(let o of t.dataAxisType)o==="Real_Complex"&&i===0&&(n+=1,i+=1),o==="Complex"&&(n*=2);if(t.dataType!=="32Bit Float"&&t.dataType!=="64Bit Float"){r?.error("Only 32Bit Float and 64Bit Float data types are implemented yet");return}if(t.dataFormat==="One_D"){if(n!==1&&n!==2){r?.error("One_D data must have one or two data sections");return}return ps(e,t,n)}else if(t.dataFormat==="Two_D"){if(n===2)return fs(e,t);if(n===4)return ds(e,t);r?.error("Two_D data must have two or four data sections");return}else{r?.error("Only One_D and two_D data formats are implemented yet");return}}function ps(e,t,r){return r===1?{re:pt(e,t)}:{re:pt(e,t),im:pt(e,t)}}function pt(e,t){return t.dataType==="32Bit Float"?N(e,t.dataPoints[0],"readFloat32"):N(e,t.dataPoints[0],"readFloat64")}var L=32;function fs(e,t){let r=t.dataPoints[0],i=t.dataPoints[1]/L,o=r/L;return{re:ee(e,t,i,o),im:ee(e,t,i,o)}}function ds(e,t){let r=t.dataPoints[0],i=t.dataPoints[1]/L,o=r/L;return{re:{re:ee(e,t,i,o),im:ee(e,t,i,o)},im:{re:ee(e,t,i,o),im:ee(e,t,i,o)}}}function ee(e,t,r,n){let i=[];for(let o=0;o<r;o++){let s=[];for(let a=0;a<n;a++)for(let c=0;c<L;c++)a===0?t.dataType==="32Bit Float"?s[c]=N(e,L,"readFloat32"):t.dataType==="64Bit Float"&&(s[c]=N(e,L,"readFloat64")):t.dataType==="32Bit Float"?s[c]=s[c].concat(N(e,L,"readFloat32")):t.dataType==="64Bit Float"&&(s[c]=s[c].concat(N(e,L,"readFloat64")));i=i.concat(s)}return i}function rn(e){let t=e.readChars(8),r=e.readInt8(),n=Wr[r],i=e.readUint8(),o=e.readUint16(),s=e.readUint8(),a=e.readByte().toString(2).split("").map(E=>!!Number(E)),c=e.readByte(),l=c>>6,m=Vr[l],p=c&63,f=Hr[p],g=e.readInt8(),y=Xr[g],u=N(e,8,"readUint8"),h=N(e,8,"readUint8").map(E=>Gr[E]),d=Ie(e,8),b=z(e,124),F=[];for(let E of N(e,4,"readUint8")){let ae=E>>4,Xe=E&15;F.push(lt[ae],lt[Xe])}let S=N(e,8,"readUint32"),P=N(e,8,"readUint32"),x=N(e,8,"readUint32"),M=N(e,8,"readFloat64"),A=N(e,8,"readFloat64"),O=mt(e),j=mt(e),re=z(e,16),Je=z(e,128),oe=z(e,128),se=z(e,128),J=[];for(let E=0;E<8;E++)J.push(z(e,32));let We=N(e,8,"readFloat64"),k=N(e,8,"readFloat64"),Yn=en(e,8);e.skip(3);let Kn=!!(e.readByte()>>7),Zn=e.readUint32(),Qn=e.readUint32(),ei=e.readUint32(),ti=e.readUint32(),ri=N(e,8,"readUint32"),ni=N(e,8,"readUint32"),ii=e.readUint32(),oi=e.readUint32()<<32|e.readUint32(),si=e.readUint32()<<32|e.readUint32(),ai=e.readUint32(),ci=e.readUint32()<<32|e.readUint32(),li=e.readUint32(),mi=e.readUint32()<<32|e.readUint32(),ui=N(e,8,"readUint8"),It=[];for(let E=0;E<2;E++){let ae=[],Xe=e.readInt16();for(let Rt=0;Rt<5;Rt++)ae.push(e.readInt16());It.push({scaler:Xe,unit:ae})}return{fileIdentifier:t,endian:n,majorVersion:i,minorVersion:o,dataDimensionNumber:s,dataDimensionExist:a,dataType:m,dataFormat:f,dataInstrument:y,translate:u,dataAxisType:h,dataUnits:d,title:b,dataAxisRanged:F,dataPoints:S,dataOffsetStart:P,dataOffsetStop:x,dataAxisStart:M,dataAxisStop:A,creationTime:O,revisionTime:j,nodeName:re,site:Je,author:oe,comment:se,dataAxisTitles:J,baseFreq:We,zeroPoint:k,reversed:Yn,annotationOK:Kn,historyUsed:Zn,historyLength:Qn,paramStart:ei,paramLength:ti,ListStart:ri,ListLength:ni,dataStart:ii,dataLength:oi,contextStart:si,contextLength:ai,annoteStart:ci,annoteLength:li,totalSize:mi,unitLocation:ui,compoundUnit:It}}var gs={0:"String",1:"Integer",2:"Float",3:"Complex",4:"Infinity"};function nn(e){let t=e.readUint32(),r=e.readUint32(),n=e.readUint32(),i=e.readUint32(),o=[];for(let s=0;s<n+1;s++){e.skip(4);let a=e.readInt16(),c=Ie(e,5);e.skip(16);let l=e.readInt32(),m=gs[l];e.seek(e.offset-20);let p;switch(m){case"String":p=ut(e,16);break;case"Integer":p=e.readInt32(),e.skip(12);break;case"Float":p=e.readFloat64(),e.skip(8);break;case"Complex":p={Real:e.readFloat64(),Imag:e.readFloat64()};break;case"Infinity":p=e.readInt32(),e.skip(12);break;default:e.skip(16);break}e.skip(4);let f=ut(e,28);o.push({name:f.toLowerCase(),scaler:a,unit:c,value:p,valueType:m})}return{parameterSize:t,lowIndex:r,highIndex:n,totalSize:i,paramArray:o}}function on(e,t){let r=new C(e);r.setBigEndian();let n=rn(r);n.endian==="littleEndian"&&r.setLittleEndian(),r.seek(n.paramStart);let i=nn(r);r.seek(n.dataStart);let o=tn(r,n,t),s=[],a=[],c=[],l=[],m=[],p=[],f=[],g=[],y=[],u=[];if(n.dataFormat==="One_D"||n.dataFormat==="Two_D"){let d=Jr(w(i,"actual_start_time")?.value);d.date&&(a.push(d.date),c.push(d.epoch)),s.push(w(i,"x_domain")?.value),l.push(R(i,"x_acq_time")),m.push(R(i,"x_sweep")),p.push(R(i,"x_sweep_clipped")),f.push(R(i,"x_resolution")),g.push(R(i,"x_freq")),y.push(R(i,"x_offset")),u.push(n.dataUnits[0].base)}return n.dataFormat==="Two_D"&&(s.push(w(i,"y_domain")?.value),l.push(R(i,"y_acq_time")),m.push(R(i,"y_sweep")),f.push(R(i,"y_resolution")),g.push(R(i,"y_freq")),y.push(R(i,"y_offset")),u.push(n.dataUnits[1].base)),{info:{sampleName:w(i,"sample_id")?.value,creationTime:n.creationTime,revisionTime:n.revisionTime,author:n.author,comment:n.comment,solvent:w(i,"solvent")?.value,temperature:R(i,"temp_get"),probeName:w(i,"probe_id")?.value,fieldStrength:R(i,"field_strength"),experiment:w(i,"experiment")?.value,dimension:n.dataDimensionNumber,nucleus:s,date:a,epoch:c,pulseStrength90:R(i,"x90"),numberOfScans:w(i,"scans")?.value,relaxationTime:R(i,"relaxation_delay"),dataPoints:n.dataPoints.slice(0,n.dataDimensionNumber),dataOffsetStart:n.dataOffsetStart,dataOffsetStop:n.dataOffsetStop,dataUnits:u,dataSections:o?Object.keys(o):void 0,originFrequency:g,frequencyOffset:y,acquisitionTime:l,spectralWidth:m,spectralWidthClipped:p,dataAxisStart:n.dataAxisStart,dataAxisStop:n.dataAxisStop,resolution:f,decimationRate:w(i,"decimation_rate")?.value,paramList:JSON.stringify(i.paramArray.map(d=>d.name)),digitalFilter:Qr(i,t)},headers:n,parameters:i,data:o}}import{formatSpectra as Fs}from"@zakodium/nmrium-core";import{getGyromagneticRatio as xs}from"gyromagnetic-ratio";import{isAnyArray as Ds}from"is-any-array";import Ss from"lodash.merge";import{normalizeNucleus as Ms}from"nmr-processing";import{isAnyArray as te}from"is-any-array";var sn={0:"uint8",1:"uint16",2:"uint32",3:"uint64",4:"int8",5:"int16",6:"int32",7:"int64",8:"float32",9:"float64",10:"complex64",11:"complex128"},an={0:"scalar",1:"vector",2:"matrix",3:"symetricMatrix",4:"pixel"};function cn(e,t,r={}){let{quantityType:n=0,encoding:i="none",name:o="",unit:s="",quantityName:a="",sparseSampling:c={},from:l=[0],to:m=[-1]}=r;if(te(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 p=dt(e,l,m),{componentLabels:f=p.componentLabels}=r;return{type:"internal",quantityType:an[n],numericType:sn[t],encoding:i,name:o,unit:s,quantityName:a,componentLabels:f,sparseSampling:c,description:r.description||"",application:r.application||"",components:p.components,dataLength:p.dataLength}}function ys(e){return te(e.re)&&te(e.im)}function hs(e){return!te(e.re[0])}function dt(e,t,r){let n=[],i=[],o=[];if(ys(e))if(hs(e)){n[0]=ft(t[0],r[0],e.re.length);let s=new Float64Array(n[0]);for(let a=0;a<n[0];a+=2){let c=a+t[0]*2;s[a]=e.re[c/2],s[a+1]=e.im[c/2]}o.push(s),i.push("complex")}else if(te(e.re[0])){n[0]=bs(t[1],r[1],e.re.length),n[1]=ft(t[0],r[0],e.re[0].length);for(let s=0;s<n[0];s++){let a=new Float64Array(n[1]);for(let c=0;c<n[1];c+=2){let l=c+t[0]*2;a[c]=e.re[s][l/2],a[c+1]=e.im[s][l/2]}o.push(a)}}else throw new Error("check your object");else if(te(e.re.re)){n[0]=ft(t[1],r[1],e.re.re.length);let s=dt(e.re,t,r).components,a=dt(e.im,t,r).components;for(let c=0;c<n[0]/2;c++)o.push(s[c],a[c])}else throw new Error("check the dimension or the type of data in your array");return{dataLength:n,componentLabels:i,components:o}}function bs(e,t,r){return t-e+1<r?t-e+1:r}function ft(e,t,r){return t-e+1<r?(t-e+1)*2:r*2}async function mn(e,t={}){let r=await e.arrayBuffer(),{name:n=Z(e.name),keepSource:i=!1}=t,o={spectra:[],molecules:[]},a=Ns(r)[0],{metadata:c,...l}=a.description,m=0,p=l.dimension===1?"1d":"2d",f="NMR SPECTRUM",g=l.dimension===1?l.nucleus[0]:l.nucleus,y=l.spectralWidthClipped[0],u;a.dependentVariables&&(l.dimension===1?u=Ps(a):l.dimension===2&&(u=As(a)));for(let d in l)Array.isArray(l[d])&&l[d].length===1&&(l[d]=l[d][0]);let h={data:u,info:{...l,acquisitionMode:m,experiment:p,type:f,nucleus:g,spectralWidthClipped:y,name:n},meta:c};return i&&(h.sourceSelector={files:[e.relativePath]}),o.spectra=[h],Fs(o)}function Ps(e){let t=e.dimensions[0],r=e.dependentVariables,n=t.quantityName,i=t.count,o=t.increment.magnitude,s=t.originOffset.magnitude,a=t.coordinatesOffset.magnitude,c=r[0].components[0],l=new Float64Array(i),m=new Float64Array(i);for(let u=c.length-1,h=0;u>0;u-=2)l[h]=c[u-1],m[h++]=c[u];let p={},[f,g]=[0,0];switch(n){case"frequency":g=0+a/s*1e6,f=o/s*1e6,p.re=l,p.im=m;break;case"time":g=s,f=o,p.re=l.reverse(),p.im=m.reverse().map(u=>-u);break;default:break}let y=[];for(let u=0;u<i;u++)y.push(g+u*f);return p.x=y,p}function As(e){let t=e.dimensions,r=e.dependentVariables,n=t[0].quantityName,i=[],o=[],s=Number.MIN_SAFE_INTEGER,a=Number.MAX_SAFE_INTEGER,c=Number.MAX_SAFE_INTEGER,l=Number.MIN_SAFE_INTEGER;for(let f of r[0].components){let g=new Float64Array(f.length/2),y=new Float64Array(f.length/2);for(let u=f.length-1,h=0;u>0;u-=2){let d=f[u-1],b=f[u];d>s&&(s=d),d<a&&(a=d),b>l&&(l=b),b<c&&(c=b),g[h]=d,y[h++]=b}if(n==="frequency")i.push(g),o.push(y);else{let u=g.length,h=new Float64Array(y.length);for(let d=0,b=u-1;d<u;d++)h[d]=-y[b--];i.push(g.reverse()),o.push(h)}}let m={re:{z:i,minZ:a,maxZ:s},im:{z:o,minZ:c,maxZ:l}},p=["X","Y"];for(let f=0;f<p.length;f++){let g=t[f].count,y=t[f].increment.magnitude,u=t[f].originOffset.magnitude,h=t[f].coordinatesOffset.magnitude,d=p[f];for(let b of["re","im"])n==="frequency"?(m[b][`min${d}`]=0+h/u*1e6,m[b][`max${d}`]=g*(y/u)*1e6):(m[b][`min${d}`]=u,m[b][`max${d}`]=g*y)}return m}function Ns(e){let t=on(e),r=t.info,n=t.headers,{paramArray:i,...o}=t.parameters,{dimension:s}=r,a={};for(let d of i){let{name:b,value:F}=d;a[b]=un(F,s)}let c=t.data,l={};l.title=`title: ${n.title} / comment: ${n.comment} / author:${n.author} / site: ${n.site}`,l.nucleus=r.nucleus.map(Ms),l.sampleName=r.sampleName,l.date=r.date,l.epoch=r.epoch,l.localeDate=new Date(r.epoch[0]).toLocaleString(),l.author=r.author,l.solvent=r.solvent,l.temperature=r.temperature.magnitude,l.probeName=r.probeName||"",l.fieldStrength=r.fieldStrength.magnitude;let m=l.nucleus.map(xs);l.baseFrequency=m.map(d=>r.fieldStrength.magnitude*d/(2*Math.PI*1e6)),l.pulseSequence=r.experiment,l.temperature=r.temperature?.unit?.toLowerCase()==="celsius"?273.15+r.temperature.magnitude:r.temperature.magnitude,l.digitalFilter=r.digitalFilter,l.pulseStrength90=1/(4*r.pulseStrength90.magnitude),l.numberOfScans=r.numberOfScans,l.relaxationTime=r.relaxationTime.magnitude,l.isComplex=r.dataSections?r.dataSections.includes("im"):!1,l.isFid=r.dataUnits[0]==="Second",l.isFt=r.dataUnits[0]==="Ppm",l.dimension=r.dimension,l.originFrequency=r.originFrequency.map(d=>d.magnitude/1e6).slice(0,s),l.numberOfPoints=r.dataPoints.slice(0,1),l.frequencyOffset=r.frequencyOffset.map((d,b)=>d.magnitude*l.baseFrequency[b]).slice(0,s),l.acquisitionTime=r.acquisitionTime.map(d=>d.magnitude).slice(0,s),l.spectralWidth=r.spectralWidth.map((d,b)=>d.magnitude/r.originFrequency[b].magnitude*1e6).slice(0,s),l.spectralWidthClipped=r.spectralWidthClipped.map((d,b)=>d.magnitude/l.baseFrequency[b]*1e6).slice(0,s);let p=[],f={},g;for(let d=0;d<r.dimension;d++){if(g={magnitude:r.acquisitionTime[d].magnitude/(r.dataPoints[d]-1),unit:"s"},r.dataUnits[d]==="Second")f.quantityName="time",f.originOffset={magnitude:0,unit:"s"},d===0?f.coordinatesOffset={magnitude:r.digitalFilter*g.magnitude,unit:"s"}:f.coordinatesOffset={magnitude:0,unit:"s"},f.reciprocal={originOffset:{magnitude:r.originFrequency[d].magnitude,unit:"Hz"},quantityName:"frequency",coordinatesOffset:{magnitude:r.frequencyOffset[d].magnitude*r.originFrequency[d].magnitude/1e6,unit:"Hz"}};else if(r.dataUnits[d]==="Ppm"){f.quantityName="frequency";let b=r.originFrequency[d].magnitude;f.originOffset={magnitude:b,unit:"Hz"};let F=r.dataOffsetStart[d],P=r.dataOffsetStop[d]-F+1;g={magnitude:Is(r,d)/(P-1),unit:"Hz"};let A=r.dataAxisStop[d]*b/1e6;f.coordinatesOffset={magnitude:A,unit:"Hz"},P!==r.dataPoints[d]&&(r.dataPoints[d]=P)}d===0?f.description="direct dimension":f.description="indirect dimension",p.push({label:n.dataAxisTitles[d],count:r.dataPoints[d],increment:g,type:"linear",description:String(f.description)||"",application:f.application||{},coordinatesOffset:f.coordinatesOffset||0,originOffset:f.originOffset||0,quantityName:String(f.quantityName)||"",reciprocal:f.reciprocal||{},period:f.period||0,complexFFT:f.complexFFT||!1})}let y=[];y.push(cn(c,11,{unit:"none",quantityName:"relative intensity",from:r.dataOffsetStart,to:r.dataOffsetStop}));let u={...l};return delete u.paramList,u.metadata={...ln(n,s),...ln(o,s),...Ss({},a)},[{timeStamp:Date.now(),description:u,dimensions:p,dependentVariables:y}]}function Is(e,t){let{spectralWidth:r,spectralWidthClipped:n}=e;return n[t].magnitude!=="NA"?n[t].magnitude:r[t].magnitude}function ln(e,t){let r={};for(let n in e)r[n]=un(e[n],t);return r}function un(e,t){return Ds(e)?t>1?e.slice(0,t):e[0]:e}var Re=class{id="@zakodium/nmrium-core-plugins#JEOLLoaderPlugin";version=1;migrations=[];onReadProcess;constructor(){this.onReadProcess={supportedExtensions:["jdf"],onFile:this.onReadProcessFile.bind(this)}}onReadProcessFile(t,r={}){let{logger:n,keepSource:i}=r;return n?.debug(`Reading JEOL file: ${t.name}`),mn(t,{name:t.name,keepSource:i,logger:n})}};function gt(){return new Re}var Oe=class{id="@zakodium/nmrium-core-plugins#MolfileLoaderPlugin";version=1;migrations=[];onReadProcess;constructor(){this.onReadProcess={supportedExtensions:["mol"],onFile:this.onReadProcessFile.bind(this)}}onReadProcessFile(t,r={}){let{logger:n}=r;return n?.debug(`Reading molfile file: ${t.name}`),Mr(t,{logger:n})}};function yt(){return new Oe}import{FileCollection as cf}from"file-collection";import{Molecule as Nn}from"openchemlib";import{getShortestPaths as Rs}from"openchemlib-utils";function pn(e,t){let{molecule:r,map:n}=t;r.addImplicitHydrogens();let i=Rs(r,{toLabel:"H",maxLength:1});for(let s in e){let a=e[s],c=a.atoms;if(c.length!==0){if(a.position=[],c[0].toLowerCase().includes("h")){let l=Number(c[0].toLowerCase().replace("h",""))-1;l=n.indexOf(l);let m=i[l].find(p=>p&&p.length>1);a.position=i[m[0]].filter(p=>p&&p.length>1).map(p=>p.at(-1))}else if(c[0].toLowerCase().match(/\w/s))for(let l of c){let m=n.indexOf(Number(l)-1);a.position.push(m)}}}let o=r.getDiastereotopicAtomIDs();for(let s in e){let a=[];if("position"in e[s])for(let c of e[s].position)a.includes(o[c])||a.push(o[c]);e[s].diaIDs=a}return e}async function fn(e,t){let{fileCollection:r,root:n}=t,i=e.data.filter(s=>s.value.spectrum_location),o=[];for(let s of i){if(!s){new Error(`There is not spectrum for ${e}`);return}let a=s.value.spectrum_location;if(a.match(/file:/s)){let c=n+a.replace(/file:[./]*/s,""),l=c.match(/[ser|fid]/s)?/([.*/]*\w+\/[0-9]+\/).*/:/(.*\w+\/[0-9]+\/)pdata\/.*/,m=c.replace(l,"$1"),p=c.replace(/.*\/[0-9]+\/pdata\/([0-9]+)\/.*/,"$1"),f=r.filter(g=>{if(g.relativePath.match("pdata")&&p!==g.relativePath.replace(/.*\/[0-9]+\/pdata\/([0-9]+)\/.*/,"$1"))return!1;let y=g.relativePath.replace(/([.*/]*\w+\/[0-9]+\/).*/,"$1");return!(m!==y&&!["ser","fid"].some(u=>c===`${y}${u}`))});o.push({type:"brukerFiles",fileCollection:f})}else a.match("http")&&o.push({type:"url",value:a})}return o}async function dn(e,t){let{fileCollection:r,root:n}=t,i=e.data.find(c=>c.value.jcamp_location);if(!i){new Error(`There is not spectrum for ${e}`);return}let o=i.value.jcamp_location,s=n+o.replace(/file:/s,""),a=r.filter(c=>c.relativePath===s);if(a.files.length===0){new Error(`There is not jcamp with path: ${s}`);return}return[{name:s,type:"jcamp",fileCollection:a}]}function gn(e={}){let t={};for(let r of e.data||[]){let{label:n,atoms:i,shift:o}=r.value;t[n]={shift:o,atoms:i}}return t}function yn(e){let t=e.match(/([0-9])\w_/s)?.[1];if(t==="1")return e.slice(3).replaceAll(/(?<nucleus>[0-9]+\w+)#\w+/g,"$<nucleus>");if(t==="2"){let r=[],n=e.slice(12).split("_");for(let i=0;i<n.length;i+=2)r.push(n[i].replaceAll(/(?<nucleus>[0-9]+\w+)#\w+/g,"$<nucleus>"))}return[]}var Os=["delta","nbAtoms","multiplicity","jCoupling"];function hn(e,t){let r={};for(let s of Os){let a=e[s];a&&(r[s]=a)}let{nbAtoms:n,integration:i}=e;if(r.integration=i?Number(i):n?Number(n):null,e.assignment)for(let s of e.assignment){let a=t[s];r.diaIDs||(r.diaIDs=[]),a?.diaIDs&&r.diaIDs.push(...a.diaIDs)}let o=!1;if(r.jCoupling&&(o=r.jCoupling.some(s=>Object.keys(s).includes("label"))),o){for(let s of r.jCoupling)if(s.label){let a=t[s.label];a?.diaIDs&&(s.diaIDs=a.diaIDs)}}return r.delta&&(r.delta=Number.parseFloat(r.delta)),r}var Es=["intensity","volume","activeCoupling"],Ts={x:["f1Width","f1Coupling"],y:["f2Width","f2Coupling"]};function bn(e,t){let r={};for(let n of Es)e[n]&&(r[n]=e[n]);for(let n in e.delta){r[n]||(r[n]={});let i=e.delta[n];for(let o of i)r[n].diaIDs||(r[n].diaIDs=[]),t[o]?(r[n].diaIDs.push(...t[o].diaIDs),r[n].delta=Number.parseFloat(t[o].shift)):r[n].delta=Number.parseFloat(o);for(let o of Ts[n])if(e[o]){let s=o.toLowerCase().replace(/f\w(\w+)/,"$1");r[n][s]=e[o]}}return r}async function Fn(e,t){let{moleculeAndMap:r}=t,n={molecules:[{molfile:r.molecule.toMolfile()}],spectra:[]},i=n.spectra,o=n.molecules;e.SMILES?.data.length>0&&(o[0].smiles=e.SMILES.data[0].value);let s=gn(e.ASSIGNMENT);s=pn(s,r);for(let a in e){let c=a.toLowerCase();if(!c.match(/[1|2]d_/s))continue;let l=e[a].data.find(d=>d.value.larmor),m=e[a].data.find(d=>d.value.pulseprogram),p=yn(a),f=c.replace(/([1|2]d)_.*/,"$1"),g=f==="2d"?bn:hn,y={source:{jcampURL:null},nucleus:p,frequency:l?.value.larmor,experiment:m?m.value.pulseprogram.trim():f,headComment:e[a].headComment},u=e[a].data.filter(d=>d.value.delta);y.signals=u.map(d=>{let b=g(d.value,s);return b.comment=d.comment,b});let h=await Cs(e[a],t);if(!h.jcamp&&!h.bruker)i.push(y);else for(let d in h)h[d]&&i.push({...y,source:{...y.source,file:h[d]}})}return n}async function Cs(e,t){return{jcamp:await dn(e,t),bruker:await fn(e,t)}}function Ee(e,t={}){let{include:r,exclude:n,filter:i,modifiers:o={},forEach:s={},dynamicTyping:a=!0,mixedEOL:c=!1}=t;if(typeof e!="string")throw new TypeError('Parameter "sdf" must be a string');let l=`
11
+ `;if(c)e=e.replaceAll(`\r
10
12
  `,`
11
13
  `),e=e.replaceAll("\r",`
12
- `);else{let h=new Set(e.slice(0,1e3));h.has(`\r
13
- `)?c=`\r
14
- `:h.has("\r")&&(c="\r")}let u=e.split(new RegExp(`${c}\\$\\$\\$\\$.*${c}`)),f=[],d={},g=Date.now();for(let h of u){let p=h.split(`${c}>`);if(p.length>0&&p[0].length>5){let b={molfile:p[0]+c},m=[];for(let y=1;y<p.length;y++){let F=p[y].split(c),x=F[0].indexOf("<"),N=F[0].indexOf(">"),D=F[0].slice(x+1,N);if(m.push(D),d[D]||(d[D]={label:D,counter:0,nbLines:"",isNumeric:a,keep:!1},!i?.includes(D)&&(!n||n.includes(D))&&(d[D].keep=!0,o[D]&&(d[D].modifier=o[D]),s[D]&&(d[D].forEach=s[D]))),d[D].keep){for(let P=1;P<F.length-1;P++)b[D]?b[D]+=c+F[P]:b[D]=F[P];if(d[D].modifier){let P=d[D].modifier(b[D]);P==null?delete b[D]:b[D]=P}d[D].isNumeric&&(!Number.isFinite(+b[D])||b[D].match(/^0[0-9]/))&&(d[D].isNumeric=!1)}}if(!r||r(b)){f.push(b);for(let y of m)d[y].counter++}}}for(let h in d){let p=d[h];if(p.isNumeric){p.minValue=1/0,p.maxValue=-1/0;for(let b of f)if(b[h]){let m=Number.parseFloat(b[h]);b[h]=m,m>p.maxValue&&(p.maxValue=m),m<p.minValue&&(p.minValue=m)}}}for(let h in d)d[h].always=d[h].counter===f.length;return{time:Date.now()-g,molecules:f,labels:Object.keys(d),statistics:Object.values(d)}}function ut(e){let t={};for(let{key:n,value:i}of e)t[n]=i;return t}function Ae(e){let t=[];e=e.replaceAll(/,([0-9])/g,":$1");for(let n of e.split(":")){let i,r="",o=n.indexOf("(");o===-1?(i=Number(n),t.push({coupling:i})):(i=Number(n.slice(0,o)),r=n.slice(o+1,-1),t.push({coupling:i,label:r}))}return t}function er(e){let t={};e=e.replaceAll(" ",""),e=e.replaceAll(/[l=] /g,""),e=e.replaceAll(/,(\w=)/g,":$1");let n=e.split(":");for(let[i,r]of n.entries()){let o=r.toLowerCase(),s=o.replace(/^.*=/,""),a=o.replace(/[=].*/,"");Number.parseFloat(a)&&i===0?t.delta=s:t[as(a)]=cs(s,a)}return t}function as(e){switch(e){case"j":return"jCoupling";case"s":return"multiplicity";case"l":return"assignment";case"n":return"nbAtoms";case"e":case"i":return"integration";default:return""}}function cs(e,t){switch(t){case"l":return ls(e);case"j":return Ae(e);default:return e}}function ls(e){return e.replaceAll(/\s*/g,"").split(",")}var ms=["y","x"];function tr(e){e=e.replaceAll(" ",""),e=e.replaceAll(/[l=] /g,""),e=e.replaceAll(/,(\w+=)/g,":$1");let t=e.split(":"),n=us(t[0]);for(let i=1;i<t.length;i++){let{value:r,key:o}=nr(t[i]);n[fs(o)]=ps(r,o)}return n}function us(e){let{value:t}=nr(e),n={delta:{}},i=t.split("/");for(let r=0;r<i.length;r++){let o=i[r].replaceAll(/[(|)]/g,"").split(",");n.delta[ms[r]]=Array.isArray(o)?o:[o]}return n}function nr(e){let t=e.toLowerCase();return{value:t.replace(/^.*=/,""),key:t.replace(/[=].*/,"")}}function ps(e,t){switch(t){case"ja":case"j1":case"j2":return Ae(e);default:return e}}function fs(e){switch(e){case"ja":return"activeCoupling";case"j1":return"f1Coupling";case"j2":return"f2Coupling";case"i":return"intensity";case"s":return"volume";case"w1":return"f1Width";case"w2":return"f2Width";default:return e}}function ir(e,t){let n=ds(t),i=e.match(/[=]/g);return!i&&!e.match(",")?t.toLowerCase().match(/2d/)?n(e):e:t.toLowerCase().match(/[1|2]d/)&&i&&!e.match(",")?or(e):n(e)}function ds(e){let t=e.toLowerCase();switch(t.match(/1d/)&&(t="1d"),t.match(/2d/)&&(t="2d"),t){case"id":return or;case"1d":return er;case"2d":return tr;case"assignment":case"signals":return rr;case"j":return rr;case"smiles":case"inchi":case"version":case"solvent":case"temperature":case"level":default:return n=>n}}function or(e){let t=e.replace(/^.*=/,""),n=e.replace(/[=].*/,"").toLowerCase();return ut([{key:n,value:t}])}function rr(e){let t=e.replaceAll(" ","").split(",");return ut([{key:"label",value:t[0].toLowerCase()},{key:"shift",value:t.slice(1,2)},{key:"atoms",value:t.slice(2)}])}async function pt(e){let t=[];for(let n of e.files){let i=n.relativePath.split("/");if(/^[^.].+sdf|nmredata$/.exec(n.name)){let r=await n.text();if(!r.match("NMREDATA"))continue;let o=Ne(r,{mixedEOL:!0}),s=i.slice(0,-1).join("/");t.push({...o,filename:n.name,root:s!==""?`${s}/`:""})}}return t}function ar(e){let{sdf:t,fileCollection:n}=e,{molecule:i}=e,r=ft(t);i??=sr.fromMolfile(r.molecules[0].molfile),i.addImplicitHydrogens();let o=sr.fromMolfileWithAtomMap(i.toMolfile()),s=gs(r);return Qn(s,{moleculeAndMap:o,root:r.root,fileCollection:n})}function gs(e){let t=ft(e),n={name:t.filename},i=ys(t);for(let r of Object.keys(i)){n[r]||(n[r]={data:[]});let o=n[r],s=i[r].split(`
15
- `);for(let a of s){let l=a.replaceAll(/;.*/g,"").replaceAll("\r",""),c=a.match(";")?a.replaceAll(/.*;+(.*)/g,"$1"):"";if(l.length===0){o.headComment||(o.headComment=[]),o.headComment.push(c);continue}let u=ir(l,r);o.data.push({comment:c,value:u})}}return n}function ys(e){let t=ft(e),n=Number.parseFloat(t.molecules[0].NMREDATA_VERSION),i={};for(let r of t.labels)if(r.toLowerCase().match("nmredata")){if(!t.molecules[0]?.[r])continue;let o=r.replace(/NMREDATA_/,""),s=String(t.molecules[0][r]);s=n>1?s.replaceAll(/\n*/g,""):s,s=s.replaceAll(/\\\n*/g,`
16
- `),i[o]=s}return i}function ft(e,t={}){if(typeof e=="string"){let{filename:n="nmredata.sdf",root:i=""}=t;return{...Ne(e,{mixedEOL:!0}),root:i,filename:n}}return e}import{generateID as mr}from"@zakodium/nmrium-core";import{generateID as cr}from"@zakodium/nmrium-core";import{xyIntegration as hs}from"ml-spectra-processing";function lr(e,t){let{x:n,re:i}=t.data;return e.map(r=>{let o=hs({x:n,y:i},{from:r.from,to:r.to}),s=[];for(let a of r.signals||[]){let{kind:l=null,id:c,js:u=[],diaIDs:f=[],...d}=a;s.push({...d,kind:l||"signal",js:u,id:c||cr(),diaIDs:f})}return{...r,id:r.id||cr(),kind:s?.[0].kind||"signal",absolute:o,signals:s}})}function ur(e,t){let n=[],{baseFrequency:i=500}=t.info;for(let r of e){let{delta:o,diaIDs:s=[],multiplicity:a="",integration:l=0}=r,c=r.jCoupling||[],u=bs({delta:o,js:c,frequency:i});if(c&&a&&c.length===a.length){c.sort((f,d)=>d.coupling-f.coupling);for(let f=0;f<c.length;f++)c[f].multiplicity=a[f]}n.push({id:mr(),...u,integration:l,signals:[{id:mr(),js:c,delta:o,diaIDs:s,multiplicity:a}]})}t.ranges.values=lr(H(n),t)}function bs(e){let{delta:t,js:n=[],frequency:i}=e,r=.5;for(let o of n)r+=o.coupling;return r/=i,{from:t-r,to:t+r}}import{generateID as pr}from"@zakodium/nmrium-core";var Fs=["x","y"],Ds={x:0,y:0};function fr(e,t,n={}){let i=[],{shift:r=Ds}=n,{originFrequency:o=[400,400]}=t.info,s={x:o[0],y:o[1]};for(let a of e){let l={x:{},y:{},id:pr(),kind:"signal"},c={id:pr(),kind:"signal",peaks:[]},u={x:10,y:10};for(let f of Fs){let{coupling:d=[],delta:g,diaIDs:h=[]}=a[f];for(let p of d)u[f]+=p.coupling;if(a.activeCoupling){let{activeCoupling:p=[]}=a;for(let b of p)u[f]+=b.coupling}u[f]/=s[f],l[f]={from:g-u[f],to:g+u[f]},c[f]={delta:g,diaIDs:h,originalDelta:g-r[f]}}i.push({...l,signals:[c]})}t.zones.values=i}function dr(e){return xs(e.data)}function xs(e){return"rr"in e||!("x"in e)&&"re"in e}async function gr(e,t,n={}){let i={spectra:[],molecules:[]},r=await Ss(e,t,n);if(r.spectra.length>0){let{spectra:o,molecules:s,usedFiles:a}=r;i.spectra.push(...o),i.molecules.push(...s);let l=e.files.length;for(let c=l-1;c>=0;c--){let u=e.files[c].relativePath;!u.match(/acqu.*/s)&&a.includes(u)&&e.files.splice(c,1)}}return i}async function Ss(e,t,n){let i=[],r=await pt(e),o={spectra:[],molecules:[]};if(r.length===0)return{...o,usedFiles:i};let s=[];for(let l of r){let c=ar({sdf:l,fileCollection:e}).then(u=>{let{spectra:f,molecules:d=[]}=u;return i.push(l.root+l.filename),o.molecules.push(...d),Ps(f,t,n)});s.push(c)}let a=await Promise.allSettled(s);for(let l of a)l.status==="fulfilled"?(o.spectra.push(...l.value.spectra),i.push(...l.value.usedFiles)):l.reason&&n?.logger?.error(l.reason);return{...o,usedFiles:i}}async function Ps(e,t,n){let i=[],r=[],o={spectra:[],molecules:[]};for(let s of e){let a=Ns(s.source,t,n).then(l=>{let{spectra:c,files:u}=l;i.push(...u);for(let f of c)dr(f)?fr(s.signals,f):ur(s.signals,f);o.spectra.push(...c)});r.push(a)}return await Promise.allSettled(r),{...o,usedFiles:i}}async function Ns(e,t,n={}){let{file:i,jcampURL:r}=e,{converter:o}=n;if(r){let l=await As(r,t,o?.jcamp);if(l)return{...l,files:[]}}let s=[];for(let l of i||[])s.push(Ms(l,n).then(c=>({...c,files:l.fileCollection.files.map(u=>u.relativePath)})));let a=await Promise.allSettled(s);for(let l of a){if(l.status==="fulfilled")return l.value;l.reason&&n?.logger?.error(l.reason)}return{spectra:[],molecules:[],files:[]}}async function As(e,t,n={}){let i={entries:[{relativePath:e}]},r={name:X(e||""),xy:!0,noContours:!0,...n},{data:o}=await t.readFromWebSource(i,r);return o}async function Ms(e,t={}){let{converter:n,sourceSelector:i}=t;switch(e.type){case"jcamp":return Fe(e.fileCollection.files[0],{name:e?.fileCollection.files[0].name||"",converter:n?.jcamp,selector:i?.jcamp,logger:t.logger,keepSource:t.keepSource});case"brukerFiles":return ye(e.fileCollection,{converter:n?.bruker,selector:i});default:throw new Error("There is not a supported source")}}var Me=class{id="@zakodium/nmrium-core-plugins#NMReDATALoaderPlugin";version=1;migrations=[];onReadProcess;#e;constructor(t){this.#e=t,this.onReadProcess={onFiles:this.onReadProcessFiles}}onReadProcessFiles=(t,n)=>gr(t,this.#e,n)};function dt(e){return new Me(e)}import{parse as Is}from"sdf-parser";function yr(e,t={}){let{mixedEOL:n}=t,{molecules:i}=Is(e,{mixedEOL:n}),r=[];for(let{molfile:o}of i){let s=V(o);r.push(...s)}return r}async function hr(e,t={}){let{logger:n,mixedEOL:i}=t,r=await e.text(),o=yr(r,{mixedEOL:i}),s={molecules:o,spectra:[]};return n&&n[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(t,n={}){let{logger:i}=n;return i?.debug(`Reading sdf file: ${t.name}`),hr(t,{logger:i})}};function gt(){return new Ie}import{Molecule as Rs}from"openchemlib";function br(e){let t=[],n=e.split(/\r?\n/).filter(Boolean);for(let i of n){let o=Rs.fromSmiles(i).toMolfile();t.push({molfile:o})}return t}async function Fr(e,t={}){let n=await e.text(),i=br(n),r={molecules:i,spectra:[]};return t.logger?.info(`Found ${i.length} molecules from the ${e.name} file`),r}var Re=class{id="@zakodium/nmrium-core-plugins#SMILESLoaderPlugin";version=1;migrations=[];onReadProcess;constructor(){this.onReadProcess={supportedExtensions:["smi","smiles"],onFile:this.onReadProcessFile.bind(this)}}onReadProcessFile(t,n={}){let{logger:i}=n;return Fr(t,{logger:i})}};function yt(){return new Re}import{formatSpectra as ws}from"@zakodium/nmrium-core";import{createFromToArray as Ts}from"ml-spectra-processing/utils";function Dr(e){e.setLittleEndian();let t=e.offset,n=32*3;e.offset=n/8;let i=e.readInt32(),r=[2,4],o=[2**25,2**26];if(!r.includes(i))if(o.includes(i))e.setBigEndian();else throw new Error(`Unexpected value of eBytes (${i}). Expect one of
17
- ${r.concat(o).join(",")}`);return e.offset=t,e.isBigEndian()?"BE":"LE"}var Ee=class{storesData;isSpectrum;isInt32;isFloat32;isComplex;isHypercomplex;isBaselineCorrected;constructor(t){if(this.storesData=(t&1)!==0,!this.storesData)throw new Error("No data stored in file. Exiting...");if(this.isSpectrum=(t&2)!==0,this.isSpectrum)throw new Error("Script only analyzes FIDs. Found spectrum.");if(this.isInt32=(t&4)!==0,this.isFloat32=(t&8)!==0,this.isComplex=(t&16)!==0,this.isHypercomplex=(t&32)!==0,this.isHypercomplex)throw new Error("Script does not analyze hypercomplex data (yet).");this.isBaselineCorrected=(t&64)!==0}},Te=class extends Ee{moreBlocks;npComplex;nfComplex;niComplex;ni2Complex;constructor(t){super(t),this.moreBlocks=(t&128)!==0,this.npComplex=(t&256)!==0,this.nfComplex=(t&512)!==0,this.niComplex=(t&1024)!==0,this.ni2Complex=(t&2048)!==0}},Oe=class extends Ee{isAcqPar;isSecondFT;isTransformed;is3D;isNp;isNf;isNi;isNi2;constructor(t){super(t),this.isAcqPar=(t&128)!==0,this.isSecondFT=(t&256)!==0,this.isTransformed=(t&512)!==0,this.is3D=(t&1024)!==0,this.isNp=(t&2048)!==0,this.isNf=(t&4096)!==0,this.isNi=(t&8192)!==0,this.isNi2=(t&16384)!==0}},Ce=class{lines;length;index;eol;constructor(t,n={}){let{eol:i=`
18
- `,index:r=0}=n;this.eol=i,this.index=r,this.lines=t.split(this.eol),this.length=this.lines.length}readLine(){if(this.index>=this.length)throw new Error(`Last index is ${this.length-1}. Current index ${this.index}.`);return this.lines[this.index++]}readLines(t){let n=this.lines.slice(this.index,this.index+t);return this.index+=t,n}},we=class{softwareVersion;typeOfFile;vendorIdStatus;constructor(t){this.softwareVersion=t&2**6-1,this.typeOfFile={fidFile:(t&64)!==0,dataFile:(t&128)!==0,data3DFile:(t&256)!==0},this.vendorIdStatus={isVar:(t&0)!==0,isQOne:(t&2048)!==0,isMakeFid:(t&4096)!==0,isJeol:(t&8192)!==0,isBru:(t&16384)!==0,isMag:(t&6144)!==0,isOx:(t&10240)!==0,ipVers:(t&63)!==0,ipFileId:(t&1984)!==0,ipVendorId:(t&30720)!==0}}},ve=class{npPhMode;npAvMode;npPwrMode;nfPhMode;nfAvMode;nfPwrMode;niPhMode;niAvMode;niPwrMode;ni2PhMode;ni2AvMode;ni2PwrMode;niPaMode;ni2PaMode;constructor(t){this.npPhMode=(t&1)!==0,this.npAvMode=(t&2)!==0,this.npPwrMode=(t&4)!==0,this.nfPhMode=(t&16)!==0,this.nfAvMode=(t&32)!==0,this.nfPwrMode=(t&64)!==0,this.niPhMode=(t&256)!==0,this.niAvMode=(t&512)!==0,this.niPwrMode=(t&1024)!==0,this.ni2PhMode=(t&8)!==0,this.ni2AvMode=(t&256)!==0,this.ni2PwrMode=(t&8192)!==0,this.niPaMode=(t&16384)!==0,this.ni2PaMode=(t&32768)!==0}};var ke=class{scale;status;index;mode;ctCount;lpVal;rpVal;lvl;tlt;data;constructor(t,n,i){i&&(t.offset=i),this.scale=t.readInt16(),this.status=new Te(t.readInt16()),this.index=t.readInt16(),this.mode=new ve(t.readInt16()),this.ctCount=t.readInt32(),this.lpVal=t.readFloat32(),this.rpVal=t.readFloat32(),this.lvl=t.readFloat32(),this.tlt=t.readFloat32(),this.data=Es(t,n)}};function Es(e,t){let{np:n,nTraces:i,status:{isFloat32:r,isInt32:o}}=t;return r?ht(e,i,n,"readFloat32"):o?ht(e,i,n,"readInt32"):ht(e,i,n,"readInt16")}function ht(e,t,n,i){let r=[],o;i==="readFloat32"?o={re:new Float32Array(n/2),im:new Float32Array(n/2)}:i==="readInt32"?o={re:new Int32Array(n/2),im:new Int32Array(n/2)}:o={re:new Int16Array(n/2),im:new Int16Array(n/2)};for(let s=0;s<t;s++){for(let a=0;a<n;a+=2)o.re[a>>>1]=e[i](),o.im[a>>>1]=e[i]();r[s]=o}return r}var Le=class{nBlocks;nTraces;np;eBytes;tBytes;bBytes;version;status;nBlockHeaders;constructor(t){t.offset=0,this.nBlocks=t.readInt32(),this.nTraces=t.readInt32(),this.np=t.readInt32(),this.eBytes=t.readInt32(),this.tBytes=t.readInt32(),this.bBytes=t.readInt32(),this.version=new we(t.readInt16()),this.status=new Oe(t.readInt16()),this.nBlockHeaders=t.readInt32()}};var bt=class{name;subType;basicType;maxValue;minValue;stepSize;gGroup;dGroup;protection;active;intptr;constructor(t){let n=t.split(" ");this.name=n[0],this.subType=Number.parseInt(n[1],10),this.basicType=Number.parseInt(n[2],10),this.maxValue=Number.parseFloat(n[3]),this.minValue=Number.parseFloat(n[4]),this.stepSize=Number.parseFloat(n[5]),this.gGroup=Number.parseInt(n[6],10),this.dGroup=Number.parseInt(n[7],10),this.protection=Number.parseInt(n[8],10),this.active=Number.parseInt(n[9],10),this.intptr=Number.parseInt(n[10],10)}};function xr(e){let t=[],n=new Ce(e.readChars(e.length));for(;n.index<n.length-1;){let i=[],r=[],o=new bt(n.readLine()),s=n.readLine();if(o.basicType!==0){if(o.basicType===1)i=s.split(" ").slice(1).map(u=>Number.parseFloat(u));else if(o.basicType===2){i=s.split('"').slice(1,2);let c=Number.parseInt(s.split(" ")[0],10);for(;c>1;)i.push(n.readLine().split('"')[1]),c--}}let a=n.readLine(),l=Number.parseInt(a.split(" ")[0],10);l!==0&&(o.basicType===1?r=a.split(" ").slice(1):o.basicType===2&&(r=a.split('"').filter((c,u)=>u%2===1))),t.push({...o,values:i,enumerable:l,enumerables:r})}return t}async function Sr(e){let t={};function n(l,c){return l.then(u=>{t[c]=u})}let i=[];for(let l of e)switch(l.name.toLowerCase()){case"fid":{i.push(n(l.arrayBuffer(),"fidB"));break}case"procpar":{i.push(n(l.arrayBuffer(),"procparB"));break}default:break}if(await Promise.all(i),!t.fidB||!t.procparB)throw new RangeError("fid and procpar must exist.");let r=new O(t.fidB);Dr(r);let o=new Le(r);if(o.nBlocks!==1)throw new Error("We currently do not support 2D varian spectra ");let s=xr(new O(t.procparB)),a;for(let l of s)if(l.name==="at"){a=l.values[0];break}if(typeof a!="number")throw new Error("acquisition time parameter must exist and be a number.");{let l=Ts({from:0,to:a,length:o.np/2,distribution:"uniform"}),c=new ke(r,o);return{meta:o,fid:c,procpar:s,x:l}}}import{isAnyArray as vs}from"is-any-array";import{xMultiply as ks}from"ml-spectra-processing";import{normalizeNucleus as Os}from"nmr-processing";function Pr(e,t){let{meta:n,procpar:i}=e,r={};for(let y of i)r[y.name]=y.values;let o={},s={},{np:a,solvent:l,sfrq:c,reffrq:u,temp:f,rp:d,sw:g,rfl:h,rfp:p}=r;S(o,"numberOfPoints",a&&Number(L(a))/2),S(o,"solvent",L(l)),S(o,"originFrequency",L(c)),S(o,"baseFrequency",L(u)),(Number.isNaN(o.originFrequency)||o.originFrequency===0)&&(o.originFrequency=400,t?.warn("The frequency could not be determined and was set to 400MHz")),S(o,"temperature",L(f)),S(o,"phc0",d&&Number(d[0])),S(s,"rfl",h&&Number(L(h))),S(s,"rfp",p&&Number(L(p))),S(s,"sw",g&&Number(L(g)));for(let y in s){let F=s[y];Array.isArray(F)&&F.length===1&&(s[y]=F[0])}if(!("baseFrequency"in o)&&"originFrequency"in o){let y=Number.parseFloat(o.originFrequency);if(["sw","rfl","rfp"].every(F=>F in s)){let{sw:F=1,rfl:x=1,rfp:N=1}=Cs(s,["sw","rfl","rfp"]);S(o,"baseFrequency",y-(F/2-x+N)/1e6)}else S(o,"baseFrequency",y)}let{baseFrequency:b,originFrequency:m}=o;S(o,"frequencyOffset",(m-b)*1e6),S(o,"spectralWidth",g&&Number(g[0])/o.baseFrequency);for(let y in o)o[y].length===1&&(o[y]=o[y][0]);return r.tn&&(o.nucleus=r.tn.map(Os)),o.dimension=1,o.isFid=!n.status.isSpectrum,{info:o,meta:{...s,...Nr(n),...r}}}function L(e){return e&&(Array.isArray(e)?e[0]:e)}function Cs(e,t){let n={};for(let i of t){let r=e[i];r&&typeof r=="number"&&(n[i]=r)}return n}function Nr(e){let t={};for(let n of Object.keys(e)){let i=e[n];typeof i=="object"&&i!==null&&i.constructor&&i.constructor!==Object?t[n]=Nr(i):t[n]=i}return t}function Ar(e){let t={},n=new Set(e.files.map(i=>i.relativePath));for(let i of e){let r=i.name.toLowerCase();if(r.match(/^(?:fid|procpar|text|log)$/)){if(r.match(/^(?:fid|text|log)$/)){let a=i.relativePath.replace(/(?:fid|text|log)$/,"procpar");if(!n.has(a))continue}let o=i.relativePath.split("/"),s=o.slice(0,-1).join("/");t[s]||(t[s]={name:o.at(-2),files:[]}),t[s].files.push(i)}}return Object.values(t)}async function Mr(e,t={}){let{keepSource:n,logger:i}=t,r=Ar(e);i&&i.debug(`Found ${Object.keys(r).length} varian experiments`);let o=[],s={spectra:[],molecules:[]};for(let l of r){let{name:c,files:u}=l,f=Sr(u).then(d=>{let{info:g,meta:h}=Pr(d),p=d.fid.data[0],b=vs(p.im),m={data:{...p,x:d.x},meta:h,info:{isComplex:b,name:c,...g},display:{name:c}};if(g.isFid&&b){let{im:y}=m.data;ks(y,-1,{output:y})}u&&n&&(m.sourceSelector={files:u.map(y=>y.relativePath)}),s.spectra.push(m)});o.push(f)}let a=await Promise.allSettled(o);for(let l=0;l<a.length;l++){let c=a[l];if(c.status==="rejected"&&c.reason){let u=r[l].name;i?.warn(`Varian data: ${u}, fails with: ${c.reason}`)}}return s.spectra.length>0&&i?.info(`Loaded ${s.spectra.length} spectra from Varian files`),ws(s)}var qe=class{id="@zakodium/nmrium-core-plugins#VarianLoaderPlugin";version=1;migrations=[];onReadProcess;constructor(){this.onReadProcess={onFiles:this.onReadProcessFiles}}onReadProcessFiles=(t,n)=>{let{keepSource:i,logger:r}=n??{};return Mr(t,{keepSource:i,logger:r})}};function Ft(){return new qe}function qs(e,t=[]){return[dt(e),Ft(),Ze(),nt(),mt(),gt(),yt(),lt(),Je()].concat(t)}function _s(){let e=new Ls;return e.registerPlugins(qs(e)),e}import{getOneIfArray as Rr}from"@zakodium/nmrium-core";import{from1DNMRVariables as js}from"convert-to-jcamp";function Ir(e,t){return e.filters.find(n=>n.name===t)}function Bs(e,t={}){let{info:n,meta:i,data:r}=e,{onlyReal:o=!1}=t,{isFid:s,spectralWidth:a}=n,l=Rr(n.baseFrequency||n.originFrequency),{x:c,re:u,im:f}=r,d=new Float64Array(u),g=!o&&f?new Float64Array(f):void 0,h={};Q(h,"SW",a),Q(h,"BF1",l);let p=Ir(e,"fft")?.enabled,b={originFrequency:n.originFrequency,dataType:!n.isFid||p?"NMR SPECTRUM":"NMR FID",dataClass:!o&&f?"NTUPLES":"XYDATA"};if(s){let F=e.filters.find(x=>x.name==="digitalFilter");if(F&&!p){let{value:{digitalFilterValue:x},enabled:N}=F;if(N){let D=Math.floor(x);d.set(u.slice(u.length-D)),d.set(u.slice(0,u.length-D),D),f&&g&&(g.set(f.slice(f.length-D)),g.set(f.slice(0,f.length-D),D))}}Q(b,"decim",n.decim),Q(b,"dspfvs",n.dspfvs),Q(b,"digitalFilter",n.digitalFilter)}let m={xyEncoding:"DIFDUP",info:{...n,...b},meta:{...i,...h}},y={x:{data:c,label:n.isFid?"TIME":"FREQUENCY",units:n.isFid?"second":"HZ",symbol:"X"},r:{data:d,label:`${n.isFid?"FID":"SPECTRUM"}/REAL`,units:"ARBITRARY UNITS",symbol:"R"}};return g&&(y.i={data:g,label:`${n.isFid?"FID":"SPECTRUM"}/IMAG`,units:"ARBITRARY UNITS",symbol:"I"}),js(y,m)}function Q(e,t,n){n!==void 0&&(e[t]=Rr(n))}export{ne as AutoPostProcessingPlugin,he as BrukerLoaderPlugin,De as JCAMPDXLoaderPlugin,Se as JEOLLoaderPlugin,Pe as MolfileLoaderPlugin,Me as NMReDATALoaderPlugin,Ie as SDFLoaderPlugin,Re as SMILESLoaderPlugin,qe as VarianLoaderPlugin,Je as autoPostProcessing,Ze as brukerLoader,_s as default,_s as init,nt as jcampDXLoader,lt as jeolLoader,mt as molfileLoader,dt as nmreDATALoader,Nn as processJCAMPDX,yr as readSDF,br as readSMILES,qs as recommended,gt as sdfLoader,yt as smilesLoader,Bs as spectrum1DToJCAMPDX,Ft as varianLoader};
14
+ `);else{let y=new Set(e.slice(0,1e3));y.has(`\r
15
+ `)?l=`\r
16
+ `:y.has("\r")&&(l="\r")}let m=e.split(new RegExp(`${l}\\$\\$\\$\\$.*${l}`)),p=[],f={},g=Date.now();for(let y of m){let u=y.split(`${l}>`);if(u.length>0&&u[0].length>5){let h={molfile:u[0]+l},d=[];for(let b=1;b<u.length;b++){let F=u[b].split(l),S=F[0].indexOf("<"),P=F[0].indexOf(">"),x=F[0].slice(S+1,P);if(d.push(x),f[x]||(f[x]={label:x,counter:0,nbLines:"",isNumeric:a,keep:!1},!n?.includes(x)&&(!r||r.includes(x))&&(f[x].keep=!0,o[x]&&(f[x].modifier=o[x]),s[x]&&(f[x].forEach=s[x]))),f[x].keep){for(let M=1;M<F.length-1;M++)h[x]?h[x]+=l+F[M]:h[x]=F[M];if(f[x].modifier){let M=f[x].modifier(h[x]);M==null?delete h[x]:h[x]=M}f[x].isNumeric&&(!Number.isFinite(+h[x])||h[x].match(/^0[0-9]/))&&(f[x].isNumeric=!1)}}if(!i||i(h)){p.push(h);for(let b of d)f[b].counter++}}}for(let y in f){let u=f[y];if(u.isNumeric){u.minValue=1/0,u.maxValue=-1/0;for(let h of p)if(h[y]){let d=Number.parseFloat(h[y]);h[y]=d,d>u.maxValue&&(u.maxValue=d),d<u.minValue&&(u.minValue=d)}}}for(let y in f)f[y].always=f[y].counter===p.length;return{time:Date.now()-g,molecules:p,labels:Object.keys(f),statistics:Object.values(f)}}function ht(e){let t={};for(let{key:r,value:n}of e)t[r]=n;return t}function Te(e){let t=[];e=e.replaceAll(/,([0-9])/g,":$1");for(let r of e.split(":")){let n,i="",o=r.indexOf("(");o===-1?(n=Number(r),t.push({coupling:n})):(n=Number(r.slice(0,o)),i=r.slice(o+1,-1),t.push({coupling:n,label:i}))}return t}function xn(e){let t={};e=e.replaceAll(" ",""),e=e.replaceAll(/[l=] /g,""),e=e.replaceAll(/,(\w=)/g,":$1");let r=e.split(":");for(let[n,i]of r.entries()){let o=i.toLowerCase(),s=o.replace(/^.*=/,""),a=o.replace(/[=].*/,"");Number.parseFloat(a)&&n===0?t.delta=s:t[ws(a)]=vs(s,a)}return t}function ws(e){switch(e){case"j":return"jCoupling";case"s":return"multiplicity";case"l":return"assignment";case"n":return"nbAtoms";case"e":case"i":return"integration";default:return""}}function vs(e,t){switch(t){case"l":return Ls(e);case"j":return Te(e);default:return e}}function Ls(e){return e.replaceAll(/\s*/g,"").split(",")}var ks=["y","x"];function Dn(e){e=e.replaceAll(" ",""),e=e.replaceAll(/[l=] /g,""),e=e.replaceAll(/,(\w+=)/g,":$1");let t=e.split(":"),r=_s(t[0]);for(let n=1;n<t.length;n++){let{value:i,key:o}=Sn(t[n]);r[js(o)]=qs(i,o)}return r}function _s(e){let{value:t}=Sn(e),r={delta:{}},n=t.split("/");for(let i=0;i<n.length;i++){let o=n[i].replaceAll(/[(|)]/g,"").split(",");r.delta[ks[i]]=Array.isArray(o)?o:[o]}return r}function Sn(e){let t=e.toLowerCase();return{value:t.replace(/^.*=/,""),key:t.replace(/[=].*/,"")}}function qs(e,t){switch(t){case"ja":case"j1":case"j2":return Te(e);default:return e}}function js(e){switch(e){case"ja":return"activeCoupling";case"j1":return"f1Coupling";case"j2":return"f2Coupling";case"i":return"intensity";case"s":return"volume";case"w1":return"f1Width";case"w2":return"f2Width";default:return e}}function Pn(e,t){let r=Bs(t),n=e.match(/[=]/g);return!n&&!e.match(",")?t.toLowerCase().match(/2d/)?r(e):e:t.toLowerCase().match(/[1|2]d/)&&n&&!e.match(",")?An(e):r(e)}function Bs(e){let t=e.toLowerCase();switch(t.match(/1d/)&&(t="1d"),t.match(/2d/)&&(t="2d"),t){case"id":return An;case"1d":return xn;case"2d":return Dn;case"assignment":case"signals":return Mn;case"j":return Mn;case"smiles":case"inchi":case"version":case"solvent":case"temperature":case"level":default:return r=>r}}function An(e){let t=e.replace(/^.*=/,""),r=e.replace(/[=].*/,"").toLowerCase();return ht([{key:r,value:t}])}function Mn(e){let t=e.replaceAll(" ","").split(",");return ht([{key:"label",value:t[0].toLowerCase()},{key:"shift",value:t.slice(1,2)},{key:"atoms",value:t.slice(2)}])}async function bt(e){let t=[];for(let r of e.files){let n=r.relativePath.split("/");if(/^[^.].+sdf|nmredata$/.exec(r.name)){let i=await r.text();if(!i.match("NMREDATA"))continue;let o=Ee(i,{mixedEOL:!0}),s=n.slice(0,-1).join("/");t.push({...o,filename:r.name,root:s!==""?`${s}/`:""})}}return t}function In(e){let{sdf:t,fileCollection:r}=e,{molecule:n}=e,i=Ft(t);n??=Nn.fromMolfile(i.molecules[0].molfile),n.addImplicitHydrogens();let o=Nn.fromMolfileWithAtomMap(n.toMolfile()),s=Us(i);return Fn(s,{moleculeAndMap:o,root:i.root,fileCollection:r})}function Us(e){let t=Ft(e),r={name:t.filename},n=$s(t);for(let i of Object.keys(n)){r[i]||(r[i]={data:[]});let o=r[i],s=n[i].split(`
17
+ `);for(let a of s){let c=a.replaceAll(/;.*/g,"").replaceAll("\r",""),l=a.match(";")?a.replaceAll(/.*;+(.*)/g,"$1"):"";if(c.length===0){o.headComment||(o.headComment=[]),o.headComment.push(l);continue}let m=Pn(c,i);o.data.push({comment:l,value:m})}}return r}function $s(e){let t=Ft(e),r=Number.parseFloat(t.molecules[0].NMREDATA_VERSION),n={};for(let i of t.labels)if(i.toLowerCase().match("nmredata")){if(!t.molecules[0]?.[i])continue;let o=i.replace(/NMREDATA_/,""),s=String(t.molecules[0][i]);s=r>1?s.replaceAll(/\n*/g,""):s,s=s.replaceAll(/\\\n*/g,`
18
+ `),n[o]=s}return n}function Ft(e,t={}){if(typeof e=="string"){let{filename:r="nmredata.sdf",root:n=""}=t;return{...Ee(e,{mixedEOL:!0}),root:n,filename:r}}return e}import{generateID as En}from"@zakodium/nmrium-core";import{generateID as Rn}from"@zakodium/nmrium-core";import{xyIntegration as zs}from"ml-spectra-processing";function On(e,t){let{x:r,re:n}=t.data;return e.map(i=>{let o=zs({x:r,y:n},{from:i.from,to:i.to}),s=[];for(let a of i.signals||[]){let{kind:c=null,id:l,js:m=[],diaIDs:p=[],...f}=a;s.push({...f,kind:c||"signal",js:m,id:l||Rn(),diaIDs:p})}return{...i,id:i.id||Rn(),kind:s?.[0].kind||"signal",absolute:o,signals:s}})}function Tn(e,t){let r=[],{baseFrequency:n=500}=t.info;for(let i of e){let{delta:o,diaIDs:s=[],multiplicity:a="",integration:c=0}=i,l=i.jCoupling||[],m=Js({delta:o,js:l,frequency:n});if(l&&a&&l.length===a.length){l.sort((p,f)=>f.coupling-p.coupling);for(let p=0;p<l.length;p++)l[p].multiplicity=a[p]}r.push({id:En(),...m,integration:c,signals:[{id:En(),js:l,delta:o,diaIDs:s,multiplicity:a}]})}t.ranges.values=On(Q(r),t)}function Js(e){let{delta:t,js:r=[],frequency:n}=e,i=.5;for(let o of r)i+=o.coupling;return i/=n,{from:t-i,to:t+i}}import{generateID as Cn}from"@zakodium/nmrium-core";var Ws=["x","y"],Xs={x:0,y:0};function wn(e,t,r={}){let n=[],{shift:i=Xs}=r,{originFrequency:o=[400,400]}=t.info,s={x:o[0],y:o[1]};for(let a of e){let c={x:{},y:{},id:Cn(),kind:"signal"},l={id:Cn(),kind:"signal",peaks:[]},m={x:10,y:10};for(let p of Ws){let{coupling:f=[],delta:g,diaIDs:y=[]}=a[p];for(let u of f)m[p]+=u.coupling;if(a.activeCoupling){let{activeCoupling:u=[]}=a;for(let h of u)m[p]+=h.coupling}m[p]/=s[p],c[p]={from:g-m[p],to:g+m[p]},l[p]={delta:g,diaIDs:y,originalDelta:g-i[p]}}n.push({...c,signals:[l]})}t.zones.values=n}function vn(e){return Vs(e.data)}function Vs(e){return"rr"in e||!("x"in e)&&"re"in e}async function Ln(e,t,r={}){let n={spectra:[],molecules:[]},i=await Hs(e,t,r);if(i.spectra.length>0){let{spectra:o,molecules:s,usedFiles:a}=i;n.spectra.push(...o),n.molecules.push(...s);let c=e.files.length;for(let l=c-1;l>=0;l--){let m=e.files[l].relativePath;!m.match(/acqu.*/s)&&a.includes(m)&&e.files.splice(l,1)}}return n}async function Hs(e,t,r){let n=[],i=await bt(e),o={spectra:[],molecules:[]};if(i.length===0)return{...o,usedFiles:n};let s=[];for(let c of i){let l=In({sdf:c,fileCollection:e}).then(m=>{let{spectra:p,molecules:f=[]}=m;return n.push(c.root+c.filename),o.molecules.push(...f),Gs(p,t,r)});s.push(l)}let a=await Promise.allSettled(s);for(let c of a)c.status==="fulfilled"?(o.spectra.push(...c.value.spectra),n.push(...c.value.usedFiles)):c.reason&&r?.logger?.error(c.reason);return{...o,usedFiles:n}}async function Gs(e,t,r){let n=[],i=[],o={spectra:[],molecules:[]};for(let s of e){let a=Ys(s.source,t,r).then(c=>{let{spectra:l,files:m}=c;n.push(...m);for(let p of l)vn(p)?wn(s.signals,p):Tn(s.signals,p);o.spectra.push(...l)});i.push(a)}return await Promise.allSettled(i),{...o,usedFiles:n}}async function Ys(e,t,r={}){let{file:n,jcampURL:i}=e,{converter:o}=r;if(i){let c=await Ks(i,t,o?.jcamp);if(c)return{...c,files:[]}}let s=[];for(let c of n||[])s.push(Zs(c,r).then(l=>({...l,files:c.fileCollection.files.map(m=>m.relativePath)})));let a=await Promise.allSettled(s);for(let c of a){if(c.status==="fulfilled")return c.value;c.reason&&r?.logger?.error(c.reason)}return{spectra:[],molecules:[],files:[]}}async function Ks(e,t,r={}){let n={entries:[{relativePath:e}]},i={name:Z(e||""),xy:!0,noContours:!0,...r},{data:o}=await t.readFromWebSource(n,i);return o}async function Zs(e,t={}){let{converter:r,sourceSelector:n}=t;switch(e.type){case"jcamp":return Ae(e.fileCollection.files[0],{name:e?.fileCollection.files[0].name||"",converter:r?.jcamp,selector:n?.jcamp,logger:t.logger,keepSource:t.keepSource});case"brukerFiles":return Se(e.fileCollection,{converter:r?.bruker,selector:n});default:throw new Error("There is not a supported source")}}var Ce=class{id="@zakodium/nmrium-core-plugins#NMReDATALoaderPlugin";version=1;migrations=[];onReadProcess;#e;constructor(t){this.#e=t,this.onReadProcess={onFiles:this.onReadProcessFiles}}onReadProcessFiles=(t,r)=>Ln(t,this.#e,r)};function xt(e){return new Ce(e)}import{parse as Qs}from"sdf-parser";function kn(e,t={}){let{mixedEOL:r}=t,{molecules:n}=Qs(e,{mixedEOL:r}),i=[];for(let{molfile:o}of n){let s=K(o);i.push(...s)}return i}async function _n(e,t={}){let{logger:r,mixedEOL:n}=t,i=await e.text(),o=kn(i,{mixedEOL:n}),s={molecules:o,spectra:[]};return r&&r[o.length>0?"info":"debug"](`Loaded ${s.molecules.length} molecules from the ${e.name} file`),s}var we=class{id="@zakodium/nmrium-core-plugins#SDFLoaderPlugin";version=1;migrations=[];onReadProcess;constructor(){this.onReadProcess={supportedExtensions:["sdf"],onFile:this.onReadProcessFile.bind(this)}}onReadProcessFile(t,r={}){let{logger:n}=r;return n?.debug(`Reading sdf file: ${t.name}`),_n(t,{logger:n})}};function Dt(){return new we}import{Molecule as ea}from"openchemlib";function qn(e){let t=[],r=e.split(/\r?\n/).filter(Boolean);for(let n of r){let o=ea.fromSmiles(n).toMolfile();t.push({molfile:o})}return t}async function jn(e,t={}){let r=await e.text(),n=qn(r),i={molecules:n,spectra:[]};return t.logger?.info(`Found ${n.length} molecules from the ${e.name} file`),i}var ve=class{id="@zakodium/nmrium-core-plugins#SMILESLoaderPlugin";version=1;migrations=[];onReadProcess;constructor(){this.onReadProcess={supportedExtensions:["smi","smiles"],onFile:this.onReadProcessFile.bind(this)}}onReadProcessFile(t,r={}){let{logger:n}=r;return jn(t,{logger:n})}};function St(){return new ve}import{formatSpectra as oa}from"@zakodium/nmrium-core";import{createFromToArray as ra}from"ml-spectra-processing/utils";function Bn(e){e.setLittleEndian();let t=e.offset,r=96;e.offset=r/8;let n=e.readInt32(),i=[2,4],o=[2**25,2**26];if(!i.includes(n))if(o.includes(n))e.setBigEndian();else throw new Error(`Unexpected value of eBytes (${n}). Expect one of
19
+ ${i.concat(o).join(",")}`);return e.offset=t,e.isBigEndian()?"BE":"LE"}var Le=class{storesData;isSpectrum;isInt32;isFloat32;isComplex;isHypercomplex;isBaselineCorrected;constructor(t){if(this.storesData=(t&1)!==0,!this.storesData)throw new Error("No data stored in file. Exiting...");if(this.isSpectrum=(t&2)!==0,this.isSpectrum)throw new Error("Script only analyzes FIDs. Found spectrum.");if(this.isInt32=(t&4)!==0,this.isFloat32=(t&8)!==0,this.isComplex=(t&16)!==0,this.isHypercomplex=(t&32)!==0,this.isHypercomplex)throw new Error("Script does not analyze hypercomplex data (yet).");this.isBaselineCorrected=(t&64)!==0}},ke=class extends Le{moreBlocks;npComplex;nfComplex;niComplex;ni2Complex;constructor(t){super(t),this.moreBlocks=(t&128)!==0,this.npComplex=(t&256)!==0,this.nfComplex=(t&512)!==0,this.niComplex=(t&1024)!==0,this.ni2Complex=(t&2048)!==0}},_e=class extends Le{isAcqPar;isSecondFT;isTransformed;is3D;isNp;isNf;isNi;isNi2;constructor(t){super(t),this.isAcqPar=(t&128)!==0,this.isSecondFT=(t&256)!==0,this.isTransformed=(t&512)!==0,this.is3D=(t&1024)!==0,this.isNp=(t&2048)!==0,this.isNf=(t&4096)!==0,this.isNi=(t&8192)!==0,this.isNi2=(t&16384)!==0}},qe=class{lines;length;index;eol;constructor(t,r={}){let{eol:n=`
20
+ `,index:i=0}=r;this.eol=n,this.index=i,this.lines=t.split(this.eol),this.length=this.lines.length}readLine(){if(this.index>=this.length)throw new Error(`Last index is ${this.length-1}. Current index ${this.index}.`);return this.lines[this.index++]}readLines(t){let r=this.lines.slice(this.index,this.index+t);return this.index+=t,r}},je=class{softwareVersion;typeOfFile;vendorIdStatus;constructor(t){this.softwareVersion=t&2**6-1,this.typeOfFile={fidFile:(t&64)!==0,dataFile:(t&128)!==0,data3DFile:(t&256)!==0},this.vendorIdStatus={isVar:(t&0)!==0,isQOne:(t&2048)!==0,isMakeFid:(t&4096)!==0,isJeol:(t&8192)!==0,isBru:(t&16384)!==0,isMag:(t&6144)!==0,isOx:(t&10240)!==0,ipVers:(t&63)!==0,ipFileId:(t&1984)!==0,ipVendorId:(t&30720)!==0}}},Be=class{npPhMode;npAvMode;npPwrMode;nfPhMode;nfAvMode;nfPwrMode;niPhMode;niAvMode;niPwrMode;ni2PhMode;ni2AvMode;ni2PwrMode;niPaMode;ni2PaMode;constructor(t){this.npPhMode=(t&1)!==0,this.npAvMode=(t&2)!==0,this.npPwrMode=(t&4)!==0,this.nfPhMode=(t&16)!==0,this.nfAvMode=(t&32)!==0,this.nfPwrMode=(t&64)!==0,this.niPhMode=(t&256)!==0,this.niAvMode=(t&512)!==0,this.niPwrMode=(t&1024)!==0,this.ni2PhMode=(t&8)!==0,this.ni2AvMode=(t&256)!==0,this.ni2PwrMode=(t&8192)!==0,this.niPaMode=(t&16384)!==0,this.ni2PaMode=(t&32768)!==0}};var Ue=class{scale;status;index;mode;ctCount;lpVal;rpVal;lvl;tlt;data;constructor(t,r,n){n&&(t.offset=n),this.scale=t.readInt16(),this.status=new ke(t.readInt16()),this.index=t.readInt16(),this.mode=new Be(t.readInt16()),this.ctCount=t.readInt32(),this.lpVal=t.readFloat32(),this.rpVal=t.readFloat32(),this.lvl=t.readFloat32(),this.tlt=t.readFloat32(),this.data=ta(t,r)}};function ta(e,t){let{np:r,nTraces:n,status:{isFloat32:i,isInt32:o}}=t;return i?Mt(e,n,r,"readFloat32"):o?Mt(e,n,r,"readInt32"):Mt(e,n,r,"readInt16")}function Mt(e,t,r,n){let i=[],o;n==="readFloat32"?o={re:new Float32Array(r/2),im:new Float32Array(r/2)}:n==="readInt32"?o={re:new Int32Array(r/2),im:new Int32Array(r/2)}:o={re:new Int16Array(r/2),im:new Int16Array(r/2)};for(let s=0;s<t;s++){for(let a=0;a<r;a+=2)o.re[a>>>1]=e[n](),o.im[a>>>1]=e[n]();i[s]=o}return i}var $e=class{nBlocks;nTraces;np;eBytes;tBytes;bBytes;version;status;nBlockHeaders;constructor(t){t.offset=0,this.nBlocks=t.readInt32(),this.nTraces=t.readInt32(),this.np=t.readInt32(),this.eBytes=t.readInt32(),this.tBytes=t.readInt32(),this.bBytes=t.readInt32(),this.version=new je(t.readInt16()),this.status=new _e(t.readInt16()),this.nBlockHeaders=t.readInt32()}};var Pt=class{name;subType;basicType;maxValue;minValue;stepSize;gGroup;dGroup;protection;active;intptr;constructor(t){let r=t.split(" ");this.name=r[0],this.subType=Number.parseInt(r[1],10),this.basicType=Number.parseInt(r[2],10),this.maxValue=Number.parseFloat(r[3]),this.minValue=Number.parseFloat(r[4]),this.stepSize=Number.parseFloat(r[5]),this.gGroup=Number.parseInt(r[6],10),this.dGroup=Number.parseInt(r[7],10),this.protection=Number.parseInt(r[8],10),this.active=Number.parseInt(r[9],10),this.intptr=Number.parseInt(r[10],10)}};function Un(e){let t=[],r=new qe(e.readChars(e.length));for(;r.index<r.length-1;){let n=[],i=[],o=new Pt(r.readLine()),s=r.readLine();if(o.basicType!==0){if(o.basicType===1)n=s.split(" ").slice(1).map(m=>Number.parseFloat(m));else if(o.basicType===2){n=s.split('"').slice(1,2);let l=Number.parseInt(s.split(" ")[0],10);for(;l>1;)n.push(r.readLine().split('"')[1]),l--}}let a=r.readLine(),c=Number.parseInt(a.split(" ")[0],10);c!==0&&(o.basicType===1?i=a.split(" ").slice(1):o.basicType===2&&(i=a.split('"').filter((l,m)=>m%2===1))),t.push({...o,values:n,enumerable:c,enumerables:i})}return t}async function $n(e){let t={};function r(c,l){return c.then(m=>{t[l]=m})}let n=[];for(let c of e)switch(c.name.toLowerCase()){case"fid":{n.push(r(c.arrayBuffer(),"fidB"));break}case"procpar":{n.push(r(c.arrayBuffer(),"procparB"));break}default:break}if(await Promise.all(n),!t.fidB||!t.procparB)throw new RangeError("fid and procpar must exist.");let i=new C(t.fidB);Bn(i);let o=new $e(i);if(o.nBlocks!==1)throw new Error("We currently do not support 2D varian spectra ");let s=Un(new C(t.procparB)),a;for(let c of s)if(c.name==="at"){a=c.values[0];break}if(typeof a!="number")throw new Error("acquisition time parameter must exist and be a number.");{let c=ra({from:0,to:a,length:o.np/2,distribution:"uniform"}),l=new Ue(i,o);return{meta:o,fid:l,procpar:s,x:c}}}import{isAnyArray as sa}from"is-any-array";import{xMultiply as aa}from"ml-spectra-processing";import{normalizeNucleus as na}from"nmr-processing";function zn(e,t){let{meta:r,procpar:n}=e,i={};for(let b of n)i[b.name]=b.values;let o={},s={},{np:a,solvent:c,sfrq:l,reffrq:m,temp:p,rp:f,sw:g,rfl:y,rfp:u}=i;D(o,"numberOfPoints",a&&Number(q(a))/2),D(o,"solvent",q(c)),D(o,"originFrequency",q(l)),D(o,"baseFrequency",q(m)),(Number.isNaN(o.originFrequency)||o.originFrequency===0)&&(o.originFrequency=400,t?.warn("The frequency could not be determined and was set to 400MHz")),D(o,"temperature",q(p)),D(o,"phc0",f&&Number(f[0])),D(s,"rfl",y&&Number(q(y))),D(s,"rfp",u&&Number(q(u))),D(s,"sw",g&&Number(q(g)));for(let b in s){let F=s[b];Array.isArray(F)&&F.length===1&&(s[b]=F[0])}if(!("baseFrequency"in o)&&"originFrequency"in o){let b=Number.parseFloat(o.originFrequency);if(["sw","rfl","rfp"].every(F=>F in s)){let{sw:F=1,rfl:S=1,rfp:P=1}=ia(s,["sw","rfl","rfp"]);D(o,"baseFrequency",b-(F/2-S+P)/1e6)}else D(o,"baseFrequency",b)}let{baseFrequency:h,originFrequency:d}=o;D(o,"frequencyOffset",(d-h)*1e6),D(o,"spectralWidth",g&&Number(g[0])/o.baseFrequency);for(let b in o)o[b].length===1&&(o[b]=o[b][0]);return i.tn&&(o.nucleus=i.tn.map(na)),o.dimension=1,o.isFid=!r.status.isSpectrum,{info:o,meta:{...s,...Jn(r),...i}}}function q(e){return e&&(Array.isArray(e)?e[0]:e)}function ia(e,t){let r={};for(let n of t){let i=e[n];i&&typeof i=="number"&&(r[n]=i)}return r}function Jn(e){let t={};for(let r of Object.keys(e)){let n=e[r];typeof n=="object"&&n!==null&&n.constructor&&n.constructor!==Object?t[r]=Jn(n):t[r]=n}return t}function Wn(e){let t={},r=new Set(e.files.map(n=>n.relativePath));for(let n of e){let i=n.name.toLowerCase();if(i.match(/^(?:fid|procpar|text|log)$/)){if(i.match(/^(?:fid|text|log)$/)){let a=n.relativePath.replace(/(?:fid|text|log)$/,"procpar");if(!r.has(a))continue}let o=n.relativePath.split("/"),s=o.slice(0,-1).join("/");t[s]||(t[s]={name:o.at(-2),files:[]}),t[s].files.push(n)}}return Object.values(t)}async function Xn(e,t={}){let{keepSource:r,logger:n}=t,i=Wn(e);n&&n.debug(`Found ${Object.keys(i).length} varian experiments`);let o=[],s={spectra:[],molecules:[]};for(let c of i){let{name:l,files:m}=c,p=$n(m).then(f=>{let{info:g,meta:y}=zn(f),u=f.fid.data[0],h=sa(u.im),d={data:{...u,x:f.x},meta:y,info:{isComplex:h,name:l,...g},display:{name:l}};if(g.isFid&&h){let{im:b}=d.data;aa(b,-1,{output:b})}m&&r&&(d.sourceSelector={files:m.map(b=>b.relativePath)}),s.spectra.push(d)});o.push(p)}let a=await Promise.allSettled(o);for(let c=0;c<a.length;c++){let l=a[c];if(l.status==="rejected"&&l.reason){let m=i[c].name;n?.warn(`Varian data: ${m}, fails with: ${l.reason}`)}}return s.spectra.length>0&&n?.info(`Loaded ${s.spectra.length} spectra from Varian files`),oa(s)}var ze=class{id="@zakodium/nmrium-core-plugins#VarianLoaderPlugin";version=1;migrations=[];onReadProcess;constructor(){this.onReadProcess={onFiles:this.onReadProcessFiles}}onReadProcessFiles=(t,r)=>{let{keepSource:n,logger:i}=r??{};return Xn(t,{keepSource:n,logger:i})}};function At(){return new ze}function la(e,t=[]){return[xt(e),At(),it(),ct(),yt(),Dt(),St(),gt(),Ke()].concat(t)}function ma(e=[]){let t=new ca;return t.registerPlugins(la(t,e)),t}import{getOneIfArray as Hn}from"@zakodium/nmrium-core";import{from1DNMRVariables as ua}from"convert-to-jcamp";function Vn(e,t){return e.filters.find(r=>r.name===t)}function pa(e,t={}){let{onlyReal:r=!1}=t,{info:n,meta:i,data:o}=e,{owner:s,title:a,isFid:c,spectralWidth:l,baseFrequency:m,originFrequency:p,nucleus:f,solvent:g,scaleFactor:y,frequencyOffset:u,decim:h,dspfvs:d,digitalFilter:b}=n,F=Hn(m||p),{x:S,re:P,im:x}=o,M=new Float64Array(P),A=!r&&x?new Float64Array(x):void 0,O=Vn(e,"fft")?.enabled,j={owner:s,isFid:c,title:a,nucleus:f,solvent:g,scaleFactor:y,spectralWidth:l,frequencyOffset:u,originFrequency:p,baseFrequency:F,dataType:!c||O?"NMR SPECTRUM":"NMR FID",dataClass:!r&&x?"NTUPLES":"XYDATA"};if(c){let se=e.filters.find(J=>J.name==="digitalFilter");if(se&&!O){let{value:{digitalFilterValue:J},enabled:We}=se;if(We){let k=Math.floor(J);M.set(P.slice(P.length-k)),M.set(P.slice(0,P.length-k),k),x&&A&&(A.set(x.slice(x.length-k)),A.set(x.slice(0,x.length-k),k))}}Nt(j,"decim",h),Nt(j,"dspfvs",d),Nt(j,"digitalFilter",b)}let re=fa(i,Gn),Je={xyEncoding:"DIFDUP",nmrInfo:j,meta:re},oe={x:{data:S,label:n.isFid?"TIME":"FREQUENCY",units:n.isFid?"second":"HZ",symbol:"X"},r:{data:M,label:`${n.isFid?"FID":"SPECTRUM"}/REAL`,units:"ARBITRARY UNITS",symbol:"R"}};return A&&(oe.i={data:A,label:`${n.isFid?"FID":"SPECTRUM"}/IMAG`,units:"ARBITRARY UNITS",symbol:"I"}),ua(oe,Je)}function Nt(e,t,r){r!==void 0&&(e[t]=Hn(r))}var Gn=["title","decim","dspfvs","grpdly","bf1","sw","offset",".solvent","owner","firsty","page","vardim","symbol","symbols","varform","vartype","datatype","dataclass",".observefrequency",".observenucleus","ncproc"];function fa(e,t=Gn){let r=new Set(t);return Object.fromEntries(Object.entries(e).filter(([n])=>!r.has(n.toLocaleLowerCase().replaceAll(/[\s|_]*/g,""))))}export{le as AutoPostProcessingPlugin,Me as BrukerLoaderPlugin,Ne as JCAMPDXLoaderPlugin,Re as JEOLLoaderPlugin,Oe as MolfileLoaderPlugin,Ce as NMReDATALoaderPlugin,we as SDFLoaderPlugin,ve as SMILESLoaderPlugin,ze as VarianLoaderPlugin,Ke as autoPostProcessing,it as brukerLoader,ma as default,ma as init,ct as jcampDXLoader,gt as jeolLoader,yt as molfileLoader,xt as nmreDATALoader,zr as processJCAMPDX,kn as readSDF,qn as readSMILES,la as recommended,Dt as sdfLoader,St as smilesLoader,pa as spectrum1DToJCAMPDX,At as varianLoader};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@zakodium/nmrium-core-plugins",
3
- "version": "0.1.7",
3
+ "version": "0.1.9",
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",
@@ -27,37 +27,39 @@
27
27
  },
28
28
  "devDependencies": {
29
29
  "@types/lodash.merge": "^4.6.9",
30
- "@types/node": "^24.0.14",
30
+ "@types/node": "^24.2.0",
31
31
  "@zakodium/bruker-parser": "^0.0.0",
32
32
  "@zakodium/jeol-parser": "^0.0.0",
33
- "@zakodium/nmr-types": "^0.1.0",
33
+ "@zakodium/nmr-types": "^0.1.1",
34
34
  "@zakodium/nmredata": "^0.0.0",
35
35
  "@zakodium/varian-parser": "^0.0.0",
36
36
  "bruker-data-test": "^1.0.0",
37
- "esbuild": "^0.25.5",
37
+ "esbuild": "^0.25.8",
38
38
  "fifo-logger": "^2.0.0",
39
- "jcamp-data-test": "^2.0.0",
39
+ "jcamp-data-test": "^2.1.0",
40
40
  "jeol-data-test": "^1.0.0",
41
41
  "jest-matcher-deep-close-to": "^3.0.2",
42
- "msw": "^2.10.2",
42
+ "msw": "^2.10.4",
43
43
  "nmredata-data-test": "^1.0.0",
44
44
  "rimraf": "^6.0.1",
45
45
  "vitest": "^3.2.4"
46
46
  },
47
47
  "dependencies": {
48
- "@zakodium/nmrium-core": "^0.1.4",
48
+ "@date-fns/utc": "^2.1.1",
49
+ "@zakodium/nmrium-core": "^0.1.6",
49
50
  "cheminfo-types": "^1.8.1",
50
- "convert-to-jcamp": "^5.4.11",
51
- "file-collection": "^5.0.0",
51
+ "convert-to-jcamp": "^6.0.0",
52
+ "date-fns": "^4.1.0",
53
+ "file-collection": "^5.1.0",
52
54
  "gyromagnetic-ratio": "^2.0.0",
53
55
  "is-any-array": "^2.0.1",
54
- "jcampconverter": "^11.0.4",
56
+ "jcampconverter": "^11.0.5",
55
57
  "linear-sum-assignment": "^1.0.7",
56
58
  "lodash.merge": "^4.6.2",
57
- "ml-spectra-processing": "^14.12.0",
58
- "nmr-processing": "^19.0.3",
59
- "openchemlib": "^9.5.1",
60
- "openchemlib-utils": "^8.1.5",
59
+ "ml-spectra-processing": "^14.14.1",
60
+ "nmr-processing": "^19.1.0",
61
+ "openchemlib": "^9.6.0",
62
+ "openchemlib-utils": "^8.2.0",
61
63
  "sdf-parser": "^7.0.4"
62
64
  },
63
65
  "volta": {