@zakodium/nmrium-core-plugins 0.1.3 → 0.1.5

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.
package/README.md CHANGED
@@ -54,7 +54,7 @@ These features can change at any time to be sold in dedicated plugins.
54
54
  ## Usage
55
55
 
56
56
  ```js
57
- import { fileCollectionFromPath } from 'filelist-utils';
57
+ import { FileCollection } from 'file-collection';
58
58
  import init from '@zakodium/nmrium-core-plugins';
59
59
 
60
60
  /**
@@ -62,7 +62,7 @@ import init from '@zakodium/nmrium-core-plugins';
62
62
  */
63
63
  const core = init();
64
64
 
65
- const fileCollection = fileCollectionFromPath('path_to_data');
65
+ const fileCollection = FileCollection.fromPath('path_to_data');
66
66
  // we can read a zip, jdx, jdf, nmredata, json, nmrium file extensions
67
67
  const result = await core.read(fileCollection, options);
68
68
 
@@ -1,5 +1,5 @@
1
1
  import type { DataSelectionOption } from '@zakodium/nmrium-core';
2
- import type { FileCollection } from 'filelist-utils';
2
+ import type { FileCollection } from 'file-collection';
3
3
  import type { Logger } from 'cheminfo-types';
4
4
  import { NMRiumCore } from '@zakodium/nmrium-core';
5
5
  import type { NmriumData } from '@zakodium/nmrium-core';
@@ -108,7 +108,7 @@ export declare class MolfileLoaderPlugin implements NMRiumPlugin {
108
108
  export declare function nmreDATALoader(core: NMRiumCore): NMRiumPlugin;
109
109
 
110
110
  export declare class NMReDATALoaderPlugin implements NMRiumPlugin {
111
- private core;
111
+ #private;
112
112
  id: string;
113
113
  version: number;
114
114
  migrations: NMRiumPluginMigration[];
@@ -1,10 +1,10 @@
1
- import{NMRiumCore as As}from"@zakodium/nmrium-core";import{Filters1D as Lr,Filters2D as kr}from"nmr-processing";import{getOneIfArray as Ir}from"@zakodium/nmrium-core";function ne(e={},r={},t={}){e===null&&(e={}),typeof e=="string"&&(e={pulseSequence:e});let i=Array.isArray(e.pulseSequence)?e.pulseSequence[0]:e.pulseSequence||"";if(typeof i!="string")return e.dimension?`${e.dimension}d`:"";if(i=i.toLowerCase(),i.includes("zg")||i.includes("single_pulse_dec")||i.includes("udeft"))return"1d";if(i.includes("hsqct")||i.includes("invi")&&(i.includes("ml")||i.includes("di")))return"hsqctocsy";if(i.includes("hsqc")||i.includes("invi"))return"hsqc";if(i.includes("hmbc")||i.includes("inv4")&&i.includes("lp"))return"hmbc";if(i.includes("hmqc"))return"hmqc";if(i.includes("cosy"))return"cosy";if(i.includes("jres"))return"jres";if(i.includes("dosy"))return"dosy";if(i.includes("tocsy")||i.includes("mlev")||i.includes("dipsi"))return"tocsy";if(i.includes("noesy"))return"noesy";if(i.includes("roesy"))return"roesy";if(i.includes("dept"))return"dept";if(i.includes("jmod")||i.includes("apt"))return"aptjmod";if(i.includes("inad"))return"inadequate";if(i.includes("adeq"))return"adequate";let{prefix:n=""}=t,s=(Ir(r[`${n}SPECTYP`])||"").replace(/^<(.*)>$/,"$1").toLowerCase();return s.length>0&&s!=="undefined"?s:e.dimension?`${e.dimension}d`:""}import{getOneIfArray as Ke}from"@zakodium/nmrium-core";var Er=["no","exponential","modifiedGaussian","sine","qsine","trap","user","sinc","qsinc","traf","trafs"];function Tr(e){return e in Qe}function Ie(e,r){let{prefix:t="",index:i=0}=r,n=Ke(e[`${t}WDW`],i),s=Er[n?Number(n):0],o={};if(!Tr(s))return o;let l=Qe[s];if(l){let{kind:a,parameters:m}=l,f={};for(let c in m){let b=m[c],{source:u,processor:y}=b;if(u){let g=Ke(e[`${t}${u}`],i);if(!g)continue;let p=Number(g);f[c]=y?y(p):p}else b.value!==void 0&&(f[c]=b.value)}o[a]={apply:!0,options:f}}return o}var Qe={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 et={sineBell:rt({offset:0})},tt={cosy:{...et},hmbc:{...et},hsqc:{sineBell:rt({offset:.5})}},Cr={...tt};function Ee(e="",r=1){let t=Or(e),i={},n=r===1?tt[t||""]:Cr[t||""];return n&&(i=structuredClone(n)),i}function rt(e){return{apply:!0,options:e}}function Or(e){let t=e.toLowerCase().match(/cosy|hsqc|hmbc/);return t?t[0]:null}function nt(e,r={}){let{prefix:t="",experiment:i=ne(e)}=r;return e[`${t}WDW`]?{f2:Ie(e,{...r,index:0}),f1:Ie(e,{...r,index:1})}:{f2:Ee(i,1),f1:Ee(i,2)}}import{Filters1D as wr}from"nmr-processing";var Te=["digitalFilter","backwardLinearPrediction","forwardLinearPrediction","apodization","zeroFilling","fft",["shiftX","phaseCorrection","baselineCorrection"]],z={};for(let e=0;e<Te.length;e++){let r=Te[e];for(let t of Array.isArray(r)?r:[r])z[t]=e}for(let e of Object.values(wr))e.name in z||(z[e.name]=Te.length);import{Filters2D as vr}from"nmr-processing";var Ce=["digitalFilter2D","blpDimension1","flpDimension1","apodizationDimension1","zeroFillingDimension1","fftDimension1","blpDimension2","flpDimension2","nusDimension2","apodizationDimension2","zeroFillingDimension2","fftDimension2","phaseCorrectionTwoDimensions",["shift2DX","shift2DY","symmetrizeCosyLike"]],W={};for(let e=0;e<Ce.length;e++){let r=Ce[e];for(let t of Array.isArray(r)?r:[r])W[t]=e}for(let e of Object.values(vr))e.name in W||(W[e.name]=Ce.length);var qr=new Set(["backwardLinearPrediction","forwardLinearPrediction","digitalFilter2D","phaseCorrectionTwoDimensions","blpDimension1","flpDimension1","apodizationDimension1","apodizationDimension2","zeroFillingDimension1","fftDimension1","blpDimension2","flpDimension2","zeroFillingDimension2","fftDimension2","nusDimension2","symmetrizeCosyLike"]);function Br(e,r){let{filter:t,experimentalFeatures:i=!1}=r,{name:n}=t;({...Lr,...kr})[n]&&(e.some(o=>o.name===n)||(i||!qr.has(n))&&e.push({...t,enabled:!0}))}function it(e,r={}){let{data:t}=e;if(!t)return e;let{autoProcessing:i,experimentalFeatures:n}=r,s=(l,a)=>Br(l,{...a,experimentalFeatures:n}),{spectra:o}=t;for(let l of o){let{data:a,info:m,meta:f,filters:c}=l,{dimension:b,isFid:u}=m;if(u){if(b===1){let y=a.re.length,{tdOff:g,digitalFilter:p}=m;if(p&&p>0&&s(c,{filter:{name:"digitalFilter",value:{digitalFilterValue:p}}}),!i)continue;g&&Math.abs(g)>0&&s(c,{filter:{name:"backwardLinearPrediction",value:{nbInputs:y/2}}}),s(c,{filter:{name:"apodization",value:{exponential:{apply:!0,options:{lineBroadening:1}}}}}),s(c,{filter:{name:"zeroFilling",value:{nbPoints:2*y}}}),s(c,{filter:{name:"fft",value:{}}}),s(c,{filter:{name:"phaseCorrection",value:_r(m)}}),c.sort((d,h)=>z[d.name]-z[h.name])}else if(b===2){if(!i||!n)continue;let y=a.re.z.length,g=a.re.z[0].length,{tdOff:p,experiment:d=""}=m,h=m.spectrumSize;Array.isArray(h)&&h.length>1?(h[0]<=g&&(h[0]=g*2),h[0]<=y&&(h[0]=y*2)):h=[g*2,2*y];let F=d.toLowerCase().includes("cosy");p&&Math.abs(p[0])>0&&s(c,{filter:{name:"blpDimension1",value:{nbInputs:g/2}}});let N=nt(f,{experiment:d});s(c,{filter:{name:"apodizationDimension1",value:N.f2}}),s(c,{filter:{name:"zeroFillingDimension1",value:{nbPoints:h[0]}}}),s(c,{filter:{name:"fftDimension1",value:{}}}),f&&"nuslist"in f&&s(c,{filter:{name:"nusDimension2",value:{}}}),s(c,{filter:{name:"apodizationDimension2",value:N.f1}}),s(c,{filter:{name:"zeroFillingDimension2",value:{nbPoints:h[F?0:1]}}}),F?s(c,{filter:{name:"symmetrizeCosyLike",value:{}}}):s(c,{filter:{name:"phaseCorrectionTwoDimensions",value:{}}}),s(c,{filter:{name:"fftDimension2",value:{}}}),c.sort((M,S)=>W[M.name]-W[S.name])}}}}function _r(e){let{phc0:r=0,phc1:t=0}=e;return st([r,t])?{}:{ph0:r,ph1:t}}function st(e){return Array.isArray(e)?e.every(r=>!r&&r===0):st([e])}var ie=class{id="@zakodium/nmrium-core-plugins#AutoPostProcessingPlugin";version=1;migrations=[];onReadProcess;constructor(){this.onReadProcess={onProcessing:this.onPostProcessing.bind(this)}}onPostProcessing(r,t){it(r,t)}};function Oe(){return new ie}import{fileCollectionFromZip as to}from"filelist-utils";import{convert as Gr}from"jcampconverter";function we(e,r="utf8"){return new TextDecoder(r).decode(e)}var Ur=new TextEncoder;function ot(e){return Ur.encode(e)}var $r=1024*8,jr=(()=>{let e=new Uint8Array(4),r=new Uint32Array(e.buffer);return!((r[0]=1)&e[0])})(),ve={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},v=class e{buffer;byteLength;byteOffset;length;offset;lastWrittenByte;littleEndian;_data;_mark;_marks;constructor(r=$r,t={}){let i=!1;typeof r=="number"?r=new ArrayBuffer(r):(i=!0,this.lastWrittenByte=r.byteLength);let n=t.offset?t.offset>>>0:0,s=r.byteLength-n,o=n;(ArrayBuffer.isView(r)||r instanceof e)&&(r.byteLength!==r.buffer.byteLength&&(o=r.byteOffset+n),r=r.buffer),i?this.lastWrittenByte=s:this.lastWrittenByte=0,this.buffer=r,this.length=s,this.byteLength=s,this.byteOffset=o,this.offset=0,this.littleEndian=!0,this._data=new DataView(this.buffer,o,s),this._mark=0,this._marks=[]}available(r=1){return this.offset+r<=this.length}isLittleEndian(){return this.littleEndian}setLittleEndian(){return this.littleEndian=!0,this}isBigEndian(){return!this.littleEndian}setBigEndian(){return this.littleEndian=!1,this}skip(r=1){return this.offset+=r,this}back(r=1){return this.offset-=r,this}seek(r){return this.offset=r,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 r=this._marks.pop();if(r===void 0)throw new Error("Mark stack empty");return this.seek(r),this}rewind(){return this.offset=0,this}ensureAvailable(r=1){if(!this.available(r)){let i=(this.offset+r)*2,n=new Uint8Array(i);n.set(new Uint8Array(this.buffer)),this.buffer=n.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(r=1){return this.readArray(r,"uint8")}readArray(r,t){let i=ve[t].BYTES_PER_ELEMENT*r,n=this.byteOffset+this.offset,s=this.buffer.slice(n,n+i);if(this.littleEndian===jr&&t!=="uint8"&&t!=="int8"){let l=new Uint8Array(this.buffer.slice(n,n+i));l.reverse();let a=new ve[t](l.buffer);return this.offset+=i,a.reverse(),a}let o=new ve[t](s);return this.offset+=i,o}readInt16(){let r=this._data.getInt16(this.offset,this.littleEndian);return this.offset+=2,r}readUint16(){let r=this._data.getUint16(this.offset,this.littleEndian);return this.offset+=2,r}readInt32(){let r=this._data.getInt32(this.offset,this.littleEndian);return this.offset+=4,r}readUint32(){let r=this._data.getUint32(this.offset,this.littleEndian);return this.offset+=4,r}readFloat32(){let r=this._data.getFloat32(this.offset,this.littleEndian);return this.offset+=4,r}readFloat64(){let r=this._data.getFloat64(this.offset,this.littleEndian);return this.offset+=8,r}readBigInt64(){let r=this._data.getBigInt64(this.offset,this.littleEndian);return this.offset+=8,r}readBigUint64(){let r=this._data.getBigUint64(this.offset,this.littleEndian);return this.offset+=8,r}readChar(){return String.fromCharCode(this.readInt8())}readChars(r=1){let t="";for(let i=0;i<r;i++)t+=this.readChar();return t}readUtf8(r=1){return we(this.readBytes(r))}decodeText(r=1,t="utf8"){return we(this.readBytes(r),t)}writeBoolean(r){return this.writeUint8(r?255:0),this}writeInt8(r){return this.ensureAvailable(1),this._data.setInt8(this.offset++,r),this._updateLastWrittenByte(),this}writeUint8(r){return this.ensureAvailable(1),this._data.setUint8(this.offset++,r),this._updateLastWrittenByte(),this}writeByte(r){return this.writeUint8(r)}writeBytes(r){this.ensureAvailable(r.length);for(let t=0;t<r.length;t++)this._data.setUint8(this.offset++,r[t]);return this._updateLastWrittenByte(),this}writeInt16(r){return this.ensureAvailable(2),this._data.setInt16(this.offset,r,this.littleEndian),this.offset+=2,this._updateLastWrittenByte(),this}writeUint16(r){return this.ensureAvailable(2),this._data.setUint16(this.offset,r,this.littleEndian),this.offset+=2,this._updateLastWrittenByte(),this}writeInt32(r){return this.ensureAvailable(4),this._data.setInt32(this.offset,r,this.littleEndian),this.offset+=4,this._updateLastWrittenByte(),this}writeUint32(r){return this.ensureAvailable(4),this._data.setUint32(this.offset,r,this.littleEndian),this.offset+=4,this._updateLastWrittenByte(),this}writeFloat32(r){return this.ensureAvailable(4),this._data.setFloat32(this.offset,r,this.littleEndian),this.offset+=4,this._updateLastWrittenByte(),this}writeFloat64(r){return this.ensureAvailable(8),this._data.setFloat64(this.offset,r,this.littleEndian),this.offset+=8,this._updateLastWrittenByte(),this}writeBigInt64(r){return this.ensureAvailable(8),this._data.setBigInt64(this.offset,r,this.littleEndian),this.offset+=8,this._updateLastWrittenByte(),this}writeBigUint64(r){return this.ensureAvailable(8),this._data.setBigUint64(this.offset,r,this.littleEndian),this.offset+=8,this._updateLastWrittenByte(),this}writeChar(r){return this.writeUint8(r.charCodeAt(0))}writeChars(r){for(let t=0;t<r.length;t++)this.writeUint8(r.charCodeAt(t));return this}writeUtf8(r){return this.writeBytes(ot(r))}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{createStepArray as Kr,xMinMaxValues as Qr}from"ml-spectra-processing";import{isAnyArray as on}from"is-any-array";import{matrixCreateEmpty as an,xSequentialFillFromStep as ln}from"ml-spectra-processing";var zr=Object.defineProperty,ut=(e,r)=>{for(var t in r)zr(e,t,{get:r[t],enumerable:!0})},at=["acqus","acqu2s"],se=["procs","proc2s"];function Wr(e){return e.is1D?Xr(e):e.is2D?Vr(e):{checked:!1,message:"Multi-dimensional n > 2 is not supported"}}function Xr(e){let r=e.isFID?["acqus"]:["acqus","procs"],t=r.every(i=>e[i]);return{checked:t,message:t?"":`File: ${e[e.isFID?"fid":"1r"]?.relativePath} is ignored, files: ${r.join(",")} are required.`}}function Vr(e){let r=e.isFID?at:at.concat(se),t=r.every(i=>e[i]);return t&&e.isFID&&se.some(i=>e[i])&&!se.every(i=>e[i])&&(t=!1,r.push(...se)),{checked:t,message:t?"":`File: ${e.name} is ignored, files: ${r.join(",")} are required.`}}function pt(e,r={}){let{logger:t,processingNumbers:i,experimentNumbers:n,dataSelection:s="both",keep1D:o=!0,keep2D:l=!0,onlyFirstProcessedData:a=!0}=r,m={},f=e.files.map(u=>u.relativePath);for(let u of e){let y,g,p,d,h=u.relativePath.split("/"),F=h.indexOf("pdata");if(F!==-1)y=Number(h[F+1]),g=Number(h[F-1]),d=h.slice(0,-3).join("/");else if(Yr(u,f)){let N=h.indexOf(u.name);g=Number(h[N-1]),d=h.slice(0,-1).join("/")}else continue;if(Number.isNaN(g)&&(g=void 0),Number.isNaN(y)&&(y=void 0),!(n&&!n.includes(g))){if(m[d]||(m[d]={name:d,expno:g,processedData:{},fileCollectionItems:[]}),p=m[d],u.name==="vdlist"&&(p.vdlist=u),u.name==="difflist"&&(p.difflist=u),y){p.processedData[y]||(p.processedData[y]={fileCollectionItems:[],name:d,expno:g,procno:y});let N=p.processedData[y];N.fileCollectionItems.push(u),u.name.match(/^(1r|1i|2rr|2ir|2ii|2ri|procs|proc2s|title|integrals.txt)$/)&&(N[u.name]=u),u.name==="2rr"&&(N.is2D=!0,N.isFT=!0),u.name==="1r"&&(N.is1D=!0,N.isFT=!0)}else p.fileCollectionItems.push(u),u.name.match(/^(ser|fid|acqus|acqu2s|nuslist)$/)&&(p[u.name]=u),u.name==="ser"&&(p.is2D=!0,p.isFID=!0),u.name==="fid"&&(p.is1D=!0,p.isFID=!0);u.name==="QuantFactorSample.xml"&&(p.quantFactorSample=u)}}if(i)for(let u in m){let y=m[u].processedData,g={};for(let p in y)i.includes(Number.parseInt(p,10))&&(g[p]=y[p]);m[u].processedData=g}else if(a)for(let u in m){let y=m[u].processedData,g=Object.keys(y).sort((p,d)=>Number(p)-Number(d))[0];g!==void 0&&(m[u].processedData={firstProcessedNumber:y[g]})}let c=Hr(t),b=[];for(let u in m){let y=m[u],{processedData:g,...p}=y;if(c(y,s)){let h=Object.keys(g);if(h.length>0){let F=g[h[0]];F.procs&&(p.fileCollectionItems.push(F.procs),p.procs=F.procs),F.proc2s&&(p.fileCollectionItems.push(F.proc2s),p.proc2s=F.proc2s),F["integrals.txt"]&&(p.integrals=F["integrals.txt"])}b.push(p)}let d="ser"in p||"fid"in p;if(s==="fid"||s==="preferFID"&&d){t?.warn("Skipping FT data because it does not match the import filters");continue}for(let h in g){let F=g[h];(F["1r"]||F["2rr"])&&(p.acqus&&F.fileCollectionItems.push(p.acqus),p.acqu2s&&F.fileCollectionItems.push(p.acqu2s),p.vdlist&&(F.vdlist=p.vdlist),b.push({integrals:F["integrals.txt"],acqus:p.acqus,acqu2s:p.acqu2s,...F}))}}return o||(t?.warn("Skipping 1D data because it does not match the import filters"),b=b.filter(u=>!u.is1D)),l||(t?.warn("Skipping 2D data because it does not match the import filters"),b=b.filter(u=>!u.is2D)),Jr(b,r.logger)}function Jr(e,r){return e.filter(t=>{let{checked:i,message:n}=Wr(t);return i||r?.warn(n),i})}function Yr(e,r){return e.name.match(/^(ser|acqus|acqu2s|nuslist|vdlist|difflist|QuantFactorSample.xml)$/)||e.name.match(/^(fid)$/)&&r.includes(e.relativePath.replace(/fid$/,"acqus"))}function Hr(e){return(r,t)=>{let{processedData:i}=r,n=Object.keys(i),s=n.length>0&&["1r","1i","2rr"].some(a=>a in i[n[0]]),o="ser"in r||"fid"in r,l=o&&(t!=="ft"&&t!=="preferFT"||t==="preferFT"&&!s);return o&&!l&&e?.warn("Skipping RAW data because it does not match import filters"),l}}function ft(e){if(e===void 0||Array.isArray(e)&&e.length===0)return{epoch:null,date:""};let r=e[0]*1e3;return{epoch:r,date:new Date(r).toUTCString()}}function dt(e,r){for(let t in r.meta)e.meta[t]===void 0&&(e.meta[t]=r.meta[t]);for(let t in r.info)e.info[t]===void 0&&(e.info[t]=r.info[t]);for(let t in e.meta)Array.isArray(e.meta[t])||(e.meta[t]=[e.meta[t]])}async function X(e,r){if(!e)return{info:{},meta:{}};let t=await e.text(),{keepRecordsRegExp:i=/.*/}=r,n=Gr(t,{keepRecordsRegExp:i});return n.flatten.length===0?{}:n.flatten[0]}async function Zr(e){let r=(await e.integrals.text()).split(/\r?\n/).slice(3).filter(Boolean),t=[];for(let i=1;i<r.length;i++){let n=r[i].replace(/^\s*/,"").replaceAll(/[\s\t]+/g,";").match(/\d+;(?<from>[0-9.]+);(?<to>[0-9.]+);(?<integration>[0-9.]+)/);if(n){let{from:s,to:o,integration:l}=n.groups;t.push({from:Number.parseFloat(s),to:Number.parseFloat(o),integration:Number.parseFloat(l)})}}return t}var ae={};ut(ae,{DQD:()=>nn,QF:()=>en,QSEQ:()=>rn,QSIM:()=>tn});var en=0,tn=1,rn=2,nn=3;function gt(e,r){let{x:t,minMax:i,nbSubSpectra:n,template:s}=r;e.spectra||(e.spectra=[]);for(let o=0;o<n;o++){let l={};for(let a in i)l[a]=i[a].z[o];e.spectra.push({...s,data:{...l,x:t}})}}function ht(e,r,t){let i=Number.parseInt(r.meta.TD[0],10),n=new v(e),s=r.meta.nbSubSpectra||1,o=r.meta.AQ_mod,l=Number.parseInt(r.meta.DTYPA,10)===2,a=Number.parseFloat(r.meta.SW_h[0]),m=Number.parseFloat(r.meta.SFO1[0]);r.meta.DATATYPE="NMR FID";let f=1/(2*a),c=i*f,b=Number.parseInt(r.meta.BYTORDA,10);b=b?0:1,b?n.setLittleEndian():n.setBigEndian();let u=o===2?f:2*f,y=sn({nbSubSpectra:s,isFloat:l,aqMode:o,td:i}),g={dataType:"NMR FID",dataTable:"(X++(R..R))",nbPoints:y,firstX:0,lastX:c,nucleus:r.meta.NUC1,xUnit:"Sec",yUnit:"Arbitrary",isXYdata:!0,isFID:!0,observeFrequency:m,title:r.meta.TITLE,deltaX:u},p=Kr({length:y,step:u});if(s<2){let d=ct(n,{nbPoints:y,isFloat:l,aqMode:o});r.spectra=[{data:{x:p,...d},...g}]}else{let d={minX:p[0],maxX:p.at(-1),minY:0,maxY:s},h=o===2?{re:{z:[],...d},im:null}:{re:{z:[],...d},im:{z:[],...d}},F={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<s;N++){let M=ct(n,{nbPoints:y,isFloat:l,aqMode:o});F.re=lt(M.re,F.re),F.im=lt(M.im,F.im),h.re.z.push(M.re),h.im&&h.im.z.push(M.im)}h.re={...h.re,minZ:F.re.min,maxZ:F.re.max},h.im={...h.im,minZ:F.im.min,maxZ:F.im.max},t.keepSpectra&&gt(r,{minMax:h,x:p,nbSubSpectra:s,template:g}),r.minMax=h}}function lt(e,r){let{min:t,max:i}=Qr(e),{min:n,max:s}=r;return{min:Math.min(n,t),max:Math.max(s,i)}}function ct(e,r){let{nbPoints:t,isFloat:i,aqMode:n}=r,s={re:new Float64Array(t),im:null},o=i?"readFloat64":"readInt32";if(n===2)for(let l=0;l<t;l++)s.re[l]=e[o]();else{s.im=new Float64Array(t);for(let l=0;l<t;l++)s.re[l]=e[o](),s.im[l]=e[o]()}return s}function sn(e){let{nbSubSpectra:r,isFloat:t,aqMode:i,td:n}=e,s=n;if(r>1){let o=t?128:256;s=Math.trunc(Math.ceil(n/o)*o)}return i===2?s:s/2>>0}function cn(e){for(let r in e){let{z:t}=e[r],{minX:i,minY:n,maxX:s,maxY:o}=e[r];if(i>s){[i,s]=[s,i];for(let l of t)l.reverse()}n>o&&(t.reverse(),[n,o]=[o,n]),e[r]={...e[r],z:t,minX:i,minY:n,maxY:o,maxX:s}}}function yt(e,r,t={}){let i={};for(let y in e)e[y]&&(i[y]=new v(e[y]));let n=oe(r.meta.SI),s=oe(r.meta.SW_p),o=oe(r.meta.SF),l=o,a=oe(r.shiftOffsetVal||r.meta.OFFSET);r.meta.observeFrequency=o,r.meta.brukerReference=l,r.meta.DATATYPE="NMR Spectrum";let m=Number.parseInt(r.meta.BYTORDP,10);m=m?0:1;let f=r.meta.nbSubSpectra||1;if(m)for(let y in i)i[y].setLittleEndian();else for(let y in i)i[y].setBigEndian();let c={dataType:"NMR Spectrum",nbPoints:n,firstX:a,lastX:a-s/o,xUnit:"PPM",yUnit:"Arbitrary",isXYdata:!0,isFT:!0,nucleus:r.meta.NUC1,observeFrequency:o,title:r.meta.TITLE,deltaX:-(s/o)/(n-1)},b=c.deltaX,u=ln({from:a,step:b,size:n});if(f===1){let y={};for(let g in i){let p=i[g],d=new Float64Array(n);for(let h=0;h<n;++h)d[h]=p.readInt32();y[g]=d}r.spectra.push({...c,data:{...y,x:u}})}else{let{meta:y}=r,g=Number(y.SF[1]),p=Number(y.SW_p[1]||y.SW[1]),d=Number(y.OFFSET[1]),h=d-p/g,F={};for(let N in i)F[N]={minY:d,maxY:h,minX:u[0],maxX:u.at(-1),...mn(y,i[N])};cn(F),t.keepSpectra&&gt(r,{minMax:F,x:u,nbSubSpectra:f,template:c}),r.minMax=F}}function oe(e){return Number(on(e)?e[0]:e)}function mn(e,r){let t=e.SI.slice().reverse(),i=e.XDIM.slice().reverse(),n=t.map((u,y)=>Number.parseInt(u/i[y],10)),[s,o]=t,[l,a]=i,m=an({nbRows:s,nbColumns:o}),[f,c]=[Number.MAX_SAFE_INTEGER,Number.MIN_SAFE_INTEGER],b=[];for(let u=0;u<n[0];u++)for(let y=0;y<n[1];y++){let g=y*a,p=u*l;b.push([p,g])}for(let[u,y]of b)for(let g=0;g<l;g++)for(let p=0;p<a;p++){let d=r.readInt32();f>d&&(f=d),c<d&&(c=d),m[g+u][p+y]=d}return{z:m,minZ:f,maxZ:c}}async function un(e,r){let t={},i=[],n=e["1r"]||e["1i"]?["1r","1i"]:["fid"];function s(o,l){return o.then(a=>{t[l]=a})}for(let o of n)e[o]&&i.push(s(e[o].arrayBuffer(),o));return i.push(s(X(e.procs,r),"procs"),s(X(e.acqus,r),"acqus")),e.quantFactorSample&&i.push(s(fn(e),"ereticFactor")),e.integrals&&i.push(s(Zr(e),"integrals")),e.title&&i.push(s(e.title.text(),"titleFile")),await Promise.all(i),pn(t)}function pn(e){let{procs:r,acqus:t,integrals:i,ereticFactor:n,titleFile:s}=e;dt(r,t);let{epoch:o,date:l}=ft(r.meta.DATE);return l.length>0&&(r.info={...r.info,epoch:o,date:l}),i&&(r.integrals=i),n&&(r.info.ereticFactor=n),s&&(r.meta.TITLE_FILE=s),e["1r"]||e["1i"]?yt({re:e["1r"],im:e["1i"]},r):e.fid&&ht(e.fid,r),r}async function fn(e){let r=(await e.quantFactorSample.text()).match(/<Application[\w\W]+<Eretic_Factor>(?<ereticFactor>[\d.]+)/);return Number(r.groups.ereticFactor)}function mt(e,r){for(let t in r.meta)t in e.meta?(Array.isArray(e.meta[t])||(e.meta[t]=[e.meta[t]]),e.meta[t].push(r.meta[t])):e.meta[t]===void 0&&(e.meta[t]=[r.meta[t]]);return e}async function dn(e,r){let t={},i=[],n=["2rr","2ri","2ir","2ii","ser"];function s(o,l){return o.then(a=>{t[l]=a})}for(let o of n)e[o]&&i.push(s(e[o].arrayBuffer(),o));return i.push(s(X(e.procs,r),"procs"),s(X(e.proc2s,r),"proc2s"),s(X(e.acqus,r),"acqus"),s(X(e.acqu2s,r),"acqu2s")),e.nuslist&&i.push(s(e.nuslist.text(),"nuslist")),e.vdlist&&i.push(s(e.vdlist.text(),"vdlist")),e.difflist&&i.push(s(e.difflist.text(),"difflist")),await Promise.all(i),gn(t,r)}function gn(e,r){let t=mt(e.procs,e.proc2s),i=mt(e.acqus,e.acqu2s);dt(t,i);let{epoch:n,date:s}=ft(t.meta.DATE);if(s.length>0&&(t.info={...t.info,epoch:n,date:s}),e.nuslist&&(t.info.nuslist=e.nuslist.split(/\r?\n/).filter(Boolean).map(Number.parseFloat)),e.vdlist){let g=[];for(let p of e.vdlist.split(`
2
- `)){if(!p)continue;let[d,h]=p.trim().match(/\s*([\d.]+)\s*([a-zA-Z]+)/)?.slice(1)||[];h&&g.push(`${d}${h}`)}t.meta.vdlist=g}if(e.difflist){let g=[];for(let p of e.difflist.split(`
3
- `)){if(!p)continue;let[d]=p.trim().match(/\s*([\d.]+)\s*/)?.slice(1)||[];g.push(d)}t.meta.difflist=g}t.meta.SW_p||(t.meta.SW_p=t.meta.SW_h),t.meta.SF||(t.meta.SF=t.meta.SFO1);let o=["2rr","2ri","2ir","2ii"].some(g=>g in e);t.meta.nbSubSpectra=o?Number.parseInt(t.meta.SI[1],10):Number.parseInt(t.meta.TD[1],10);let l,a,m,f;if(o){let g=Number(t.meta.SF[1]),p=Number(t.meta.SW_p[1]||t.meta.SW[1]);f=Number(t.meta.OFFSET[1]),m=Number(t.meta.OFFSET[0]),l=f,a=f-p/g,t.meta.firstY=l,t.meta.lastY=a,yt({rr:e["2rr"],ri:e["2ri"],ir:e["2ir"],ii:e["2ii"]},t,r)}else if(e.ser){l=0,a=t.meta.nbSubSpectra;let g=Number(t.meta.SW[0]),p=Number(t.meta.SW[1]),d=Number(t.meta.SFO1[0]),h=Number(t.meta.SFO1[1]),F=Number(t.meta.O1[0]),N=Number(t.meta.O1[1]);m=F/d+g/2,f=N/h+p/2,ht(e.ser,t,r)}if(r.keepSpectra){let{nbSubSpectra:g}=t.meta,p=(a-l)/(g-1),d=l;for(let h=0;h<g;h++)d+=p,t.spectra[h].pageValue=d}let{NUC1:c,AXNUC:b,SF:u}=t.meta,y=b||c||[];return t.info["2D_Y_NUCLEUS"]=y[1],t.info["2D_X_NUCLEUS"]=y[0],t.info["2D_Y_FRECUENCY"]=u[1],t.info["2D_X_FRECUENCY"]=u[0],t.info["2D_Y_OFFSET"]=f,t.info["2D_X_OFFSET"]=m,t.info.twoD=!0,t.twoD=!0,t}async function bt(e,r={}){let t;if(["ser","2rr","2ri","2ir","2ii"].some(i=>i in e))t=await dn(e,r);else if(e["1r"]||e["1i"]||e.fid)t=await un(e,r);else throw new RangeError("The current files are invalid");t.source={};for(let i in e)(typeof e[i]).match(/number|string|boolean/)&&(t.source[i]=e[i]);r.keepFiles&&(t.source.files=e.fileCollectionItems),t.meta.DATE=Number(t.meta.DATE),t.meta.GRPDLY&&(Le(t.meta,"DSPFVS",t.meta.DSPFVS),Le(t.meta,"GRPDLY",t.meta.GRPDLY),Le(t.meta,"DECIM",t.meta.DECIM));for(let i in t.meta)Array.isArray(t.meta[i])&&(t.meta[i].length===1||typeof t.meta[i][0]=="string"&&t.meta[i][0].includes("(0.."))&&(t.meta[i]=t.meta[i][0]);return t}function Le(e,r,t){t!==void 0&&(Array.isArray(t)?e[r]=t.slice():e[r]=[t])}var V={};ut(V,{ECHO_ANTIECHO:()=>Nn,QF:()=>hn,QSEC:()=>yn,STATES:()=>Fn,STATES_TPPI:()=>Sn,TTPI:()=>bn});var hn=1,yn=2,bn=3,Fn=4,Sn=5,Nn=6;import{formatSpectra as wn}from"@zakodium/nmrium-core";function le(e){let r=[];for(let t of e){if(!t)continue;let{groups:{value:i,unit:n}={}}=t.trim().match(/[$$]*\s*(?<value>[\d.]+)\s*(?<unit>[a-zA-Z]+)/)||{};r.push(Pn(i,n))}return r}function Pn(e,r){switch(r.toLowerCase()){case"s":return Number.parseFloat(e);case"ms":return Number.parseFloat(e)/1e3;case"m":case"min":return Number.parseFloat(e)*60;default:return Number.NaN}}import{isAnyArray as St}from"is-any-array";function $(e){if(Dn(e))return An(e)?e.map(Ft):Ft(e);if(typeof e=="object"&&e!==null){let r={};for(let t in e)r[t]=$(e[t]);return r}return e}function Dn(e){return St(e)}function Ft(e){return Float64Array.from(e)}function An(e){return St(e[0])}import{getOneIfArray as ee}from"@zakodium/nmrium-core";import{getGyromagneticRatio as Rn}from"gyromagnetic-ratio";import{isAnyArray as qe}from"is-any-array";import{getFrequency as In}from"nmr-processing";import{isAnyArray as J}from"is-any-array";function ce(e){return typeof e=="number"}function me(e){let{phc0:r,phc1:t}=e;return!J(r)&&!ce(r)||!J(t)&&!ce(t)||J(r)&&!ce(r[0])||J(t)&&!ce(t[0])?{}:(J(t)?t[0]*=-1:t*=-1,J(r)?r[0]*=-1:r*=-1,{phc0:r,phc1:t})}function Pt(e,r,t){if(e>0)return Number(e);if(r>14||r===0)return 0;if(Nt[r]){let i=Nt[r];if(!i[t])throw new Error(`decim ${t} not in lookup table for dspfvs ${r}`);return i[t]}else throw new Error(`dspfvs ${r} not in lookup table`)}var Nt={10:{2:44.75,3:33.5,4:66.625,6:59.08333333333333,8:68.5625,12:60.375,16:69.53125,24:61.02083333333333,32:70.015625,48:61.34375,64:70.2578125,96:61.50520833333333,128:70.37890625,192:61.5859375,256:70.439453125,384:61.62630208333333,512:70.4697265625,768:61.646484375,1024:70.48486328125,1536:61.65657552083333,2048:70.492431640625},11:{2:46,3:36.5,4:48,6:50.16666666666667,8:53.25,12:69.5,16:72.25,24:70.16666666666667,32:72.75,48:70.5,64:73,96:70.66666666666667,128:72.5,192:71.33333333333333,256:72.25,384:71.66666666666667,512:72.125,768:71.83333333333333,1024:72.0625,1536:71.91666666666667,2048:72.03125},12:{2:46,3:36.5,4:48,6:50.16666666666667,8:53.25,12:69.5,16:71.625,24:70.16666666666667,32:72.125,48:70.5,64:72.375,96:70.66666666666666,128:72.5,192:71.333333333,256:72.25,384:71.66666666666667,512:72.125,768:71.83333333333333,1024:72.0625,1536:71.91666666666667,2048:72.03125},13:{2:2.75,3:2.833333333333333,4:2.875,6:2.916666666666667,8:2.9375,12:2.958333333333333,16:2.96875,24:2.979166666666667,32:2.984375,48:2.989583333333333,64:2.9921875,96:2.994791666666667}};import{normalizeNucleus as Mn}from"nmr-processing";function j(e,r=","){if(e&&typeof e=="string")return e.split(r)}function ue(e,r,t){let i=[];if(e[`${t}AXNUC`]&&(i=e[`${t}AXNUC`],Array.isArray(i)||(i=[i]),i=k(i)),i.length===0&&e[`${t}NUC1`]&&(i=e[`${t}NUC1`],Array.isArray(i)||(i=[i]),i=k(i)),i.length===0&&e[".NUCLEUS"]){let n=j(e[".NUCLEUS"]);if(e[`${t}SYMBOL`]){let s=e[`${t}SYMBOL`].split(","),o=s.findIndex(a=>a.includes("2")),l=s.findIndex(a=>a.includes("1"));o!==-1&&l!==-1&&n?i=k([n[o],n[l]]):i=k(n).reverse()}else i=k(n)}return i.length===0&&e[".OBSERVENUCLEUS"]&&(i=k([e[".OBSERVENUCLEUS"]])),i.length===0&&r.experiment&&(i=k(Dt(r.experiment[0]))),xn(e)&&(i=[e["2D_X_NUCLEUS"].replaceAll(/[^A-Za-z0-9]/g,""),e["2D_Y_NUCLEUS"].replaceAll(/[^A-Za-z0-9]/g,"")]),r.experiment&&(r.experiment[0].match("jres")||r.experiment[0].match("dosy"))&&(i=Dt(r.experiment[0])),i.map(Mn)}function xn(e){return e["2D_X_NUCLEUS"]&&!e["2D_X_NUCLEUS"].includes("off")&&e["2D_Y_NUCLEUS"]&&!e["2D_Y_NUCLEUS"].includes("off")}function Dt(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 k(e){if(!e)return[];let r=e.map(i=>String(i).replaceAll(/[^A-Za-z0-9]/g,"").replace("NA","").replace("off","")),t=0;for(let i of r)i||t++;return t===0?r:[]}function P(e,r,t,i=!1){t===void 0||r in e&&!i||(Array.isArray(t)?e[r]=t.map(At):e[r]=[At(t)])}function At(e){return typeof e=="string"&&(e.startsWith("<")&&e.endsWith(">")&&(e=e.slice(1,-1)),e=e.replace(/\$.*/,"").trim()),e}function fe(e,r={}){let{prefix:t="",logger:i}=r,n={dimension:0,nucleus:[],isFid:!1,isFt:!1},s=JSON.stringify(e),o=/\r\n/.exec(s)?`\r
1
+ var Er=Object.defineProperty;var Ft=(e,t)=>{for(var n in t)Er(e,n,{get:t[n],enumerable:!0})};import{NMRiumCore as ns}from"@zakodium/nmrium-core";import{Filters1D as qr,Filters2D as _r}from"nmr-processing";import{getOneIfArray as Tr}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=(Tr(t[`${r}SPECTYP`])||"").replace(/^<(.*)>$/,"$1").toLowerCase();return o.length>0&&o!=="undefined"?o:e.dimension?`${e.dimension}d`:""}import{getOneIfArray as xt}from"@zakodium/nmrium-core";var Or=["no","exponential","modifiedGaussian","sine","qsine","trap","user","sinc","qsinc","traf","trafs"];function Cr(e){return e in Dt}function _e(e,t){let{prefix:n="",index:i=0}=t,r=xt(e[`${n}WDW`],i),o=Or[r?Number(r):0],s={};if(!Cr(o))return s;let a=Dt[o];if(a){let{kind:l,parameters:c}=a,u={};for(let p in c){let g=c[p],{source:d,processor:h}=g;if(d){let f=xt(e[`${n}${d}`],i);if(!f)continue;let b=Number(f);u[p]=h?h(b):b}else g.value!==void 0&&(u[p]=g.value)}s[l]={apply:!0,options:u}}return s}var Dt={exponential:{kind:"exponential",parameters:{lineBroadening:{source:"LB"}}},modifiedGaussian:{kind:"gaussian",parameters:{lineBroadening:{source:"LB"},lineBroadeningCenter:{source:"GB"}}},sine:{kind:"sineBell",parameters:{offset:{source:"SSB",processor:e=>1/e},exponent:{value:1}}},qsine:{kind:"sineSquare",parameters:{offset:{source:"SSB",processor:e=>1/e}}},traf:{kind:"traf",parameters:{lineBroadening:{source:"LB"}}}};var St={sineBell:Nt({offset:0})},Pt={cosy:{...St},hmbc:{...St},hsqc:{sineBell:Nt({offset:.5})}},wr={...Pt};function Be(e="",t=1){let n=vr(e),i={},r=t===1?Pt[n||""]:wr[n||""];return r&&(i=structuredClone(r)),i}function Nt(e){return{apply:!0,options:e}}function vr(e){let n=e.toLowerCase().match(/cosy|hsqc|hmbc/);return n?n[0]:null}function At(e,t={}){let{prefix:n="",experiment:i=te(e)}=t;return e[`${n}WDW`]?{f2:_e(e,{...t,index:0}),f1:_e(e,{...t,index:1})}:{f2:Be(i,1),f1:Be(i,2)}}import{Filters1D as kr}from"nmr-processing";var Ue=["digitalFilter","backwardLinearPrediction","forwardLinearPrediction","apodization","zeroFilling","fft",["shiftX","phaseCorrection","baselineCorrection"]],$={};for(let e=0;e<Ue.length;e++){let t=Ue[e];for(let n of Array.isArray(t)?t:[t])$[n]=e}for(let e of Object.values(kr))e.name in $||($[e.name]=Ue.length);import{Filters2D as Lr}from"nmr-processing";var $e=["digitalFilter2D","blpDimension1","flpDimension1","apodizationDimension1","zeroFillingDimension1","fftDimension1","blpDimension2","flpDimension2","nusDimension2","apodizationDimension2","zeroFillingDimension2","fftDimension2","phaseCorrectionTwoDimensions",["shift2DX","shift2DY","symmetrizeCosyLike"]],j={};for(let e=0;e<$e.length;e++){let t=$e[e];for(let n of Array.isArray(t)?t:[t])j[n]=e}for(let e of Object.values(Lr))e.name in j||(j[e.name]=$e.length);var Br=new Set(["backwardLinearPrediction","forwardLinearPrediction","digitalFilter2D","phaseCorrectionTwoDimensions","blpDimension1","flpDimension1","apodizationDimension1","apodizationDimension2","zeroFillingDimension1","fftDimension1","blpDimension2","flpDimension2","zeroFillingDimension2","fftDimension2","nusDimension2","symmetrizeCosyLike"]);function Ur(e,t){let{filter:n,experimentalFeatures:i=!1}=t,{name:r}=n;({...qr,..._r})[r]&&(e.some(s=>s.name===r)||(i||!Br.has(r))&&e.push({...n,enabled:!0}))}function Mt(e,t={}){let{data:n}=e;if(!n)return;let{autoProcessing:i,experimentalFeatures:r}=t,o=(a,l)=>Ur(a,{...l,experimentalFeatures:r}),{spectra:s}=n;for(let a of s){let{data:l,info:c,meta:u,filters:p}=a,{dimension:g,isFid:d}=c;if(d){if(g===1){let h=l.re.length,{tdOff:f,digitalFilter:b}=c;if(b&&b>0&&o(p,{filter:{name:"digitalFilter",value:{digitalFilterValue:b}}}),!i)continue;f&&Math.abs(f)>0&&o(p,{filter:{name:"backwardLinearPrediction",value:{nbInputs:h/2}}}),o(p,{filter:{name:"apodization",value:{exponential:{apply:!0,options:{lineBroadening:1}}}}}),o(p,{filter:{name:"zeroFilling",value:{nbPoints:2*h}}}),o(p,{filter:{name:"fft",value:{}}}),o(p,{filter:{name:"phaseCorrection",value:$r(c)}}),p.sort((m,y)=>$[m.name]-$[y.name])}else if(g===2){if(!i||!r)continue;let h=l.re.z.length,f=l.re.z[0].length,{tdOff:b,experiment:m=""}=c,y=c.spectrumSize;Array.isArray(y)&&y.length>1?(y[0]<=f&&(y[0]=f*2),y[0]<=h&&(y[0]=h*2)):y=[f*2,2*h];let F=m.toLowerCase().includes("cosy");b&&Math.abs(b[0])>0&&o(p,{filter:{name:"blpDimension1",value:{nbInputs:f/2}}});let D=At(u,{experiment:m});o(p,{filter:{name:"apodizationDimension1",value:D.f2}}),o(p,{filter:{name:"zeroFillingDimension1",value:{nbPoints:y[0]}}}),o(p,{filter:{name:"fftDimension1",value:{}}}),u&&"nuslist"in u&&o(p,{filter:{name:"nusDimension2",value:{}}}),o(p,{filter:{name:"apodizationDimension2",value:D.f1}}),o(p,{filter:{name:"zeroFillingDimension2",value:{nbPoints:y[F?0:1]}}}),F?o(p,{filter:{name:"symmetrizeCosyLike",value:{}}}):o(p,{filter:{name:"phaseCorrectionTwoDimensions",value:{}}}),o(p,{filter:{name:"fftDimension2",value:{}}}),p.sort((N,x)=>j[N.name]-j[x.name])}}}}function $r(e){let{phc0:t=0,phc1:n=0}=e;return It([t,n])?{}:{ph0:t,ph1:n}}function It(e){return Array.isArray(e)?e.every(t=>!t&&t===0):It([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){Mt(t,n)}};function je(){return new ne}import{FileCollection as Sa}from"file-collection";var Rt=["acqus","acqu2s"],re=["procs","proc2s"];function Et(e){return e.is1D?jr(e):e.is2D?zr(e):{checked:!1,message:"Multi-dimensional n > 2 is not supported"}}function jr(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 zr(e){let t=e.isFID?Rt:Rt.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 ze(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(d=>d.relativePath);for(let d of e){let h,f,b,m=d.relativePath.split("/"),y=m.indexOf("pdata");if(y!==-1)h=Number(m[y+1]),f=Number(m[y-1]),b=m.slice(0,-3).join("/");else if(Jr(d,u)){let D=m.indexOf(d.name);f=Number(m[D-1]),b=m.slice(0,-1).join("/")}else continue;if(Number.isNaN(f)&&(f=void 0),Number.isNaN(h)&&(h=void 0),r&&!r.includes(f))continue;c[b]||(c[b]={name:b,expno:f,processedData:{},fileCollectionItems:[]});let F=c[b];if(d.name==="vdlist"&&(F.vdlist=d),d.name==="difflist"&&(F.difflist=d),h){F.processedData||(F.processedData={}),F.processedData[h]||(F.processedData[h]={fileCollectionItems:[],name:b,expno:f,procno:h});let D=F.processedData[h];D.fileCollectionItems.push(d),d.name.match(/^(?:1r|1i|2rr|2ir|2ii|2ri|procs|proc2s|title|integrals.txt)$/)&&(D[d.name]=d),d.name==="2rr"&&(D.is2D=!0,D.isFT=!0),d.name==="1r"&&(D.is1D=!0,D.isFT=!0)}else F.fileCollectionItems.push(d),d.name.match(/^(?:ser|fid|acqus|acqu2s|nuslist)$/)&&(F[d.name]=d),d.name==="ser"&&(F.is2D=!0,F.isFID=!0),d.name==="fid"&&(F.is1D=!0,F.isFID=!0);d.name==="QuantFactorSample.xml"&&(F.quantFactorSample=d)}if(i)for(let d in c){let h=c[d].processedData,f={};for(let b in h)i.includes(Number.parseInt(b,10))&&(f[b]=h[b]);c[d].processedData=f}else if(l)for(let d in c){let h=c[d].processedData,f=Object.keys(h??{}).sort((b,m)=>Number(b)-Number(m))[0];h&&f!==void 0&&(c[d].processedData={firstProcessedNumber:h[f]})}let p=Xr(n),g=[];for(let d in c){let h=c[d],{processedData:f,...b}=h;if(p(h,o)){let y=Object.keys(f??{});if(f&&y.length>0){let F=f[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"])}g.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 f){let F=f[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),g.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"),g=g.filter(d=>!d.is1D)),a||(n?.warn("Skipping 2D data because it does not match the import filters"),g=g.filter(d=>!d.is2D)),Wr(g,t.logger)}function Wr(e,t){return e.filter(n=>{let{checked:i,message:r}=Et(n);return i||t?.warn(r),i})}function Jr(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 Xr(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 Vr}from"jcampconverter";async function k(e,t){if(!e)return Tt();let n=await e.text(),{keepRecordsRegExp:i=/.*/}=t,r=Vr(n,{keepRecordsRegExp:i});return r.flatten.length===0?Tt():r.flatten[0]}function Tt(){return{info:{},meta:{},tmp:{},spectra:[],ntuples:{}}}async function Ot(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 We(e,t="utf8"){return new TextDecoder(t).decode(e)}var Hr=new TextEncoder;function Ct(e){return Hr.encode(e)}var Yr=1024*8,Gr=(()=>{let e=new Uint8Array(4),t=new Uint32Array(e.buffer);return!((t[0]=1)&e[0])})(),Je={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=Yr,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=Je[n].BYTES_PER_ELEMENT*t,r=this.byteOffset+this.offset,o=this.buffer.slice(r,r+i);if(this.littleEndian===Gr&&n!=="uint8"&&n!=="int8"){let a=new Uint8Array(this.buffer.slice(r,r+i));a.reverse();let l=new Je[n](a.buffer);return this.offset+=i,l.reverse(),l}let s=new Je[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 We(this.readBytes(t))}decodeText(t=1,n="utf8"){return We(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(Ct(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 Zr}from"is-any-array";import{matrixCreateEmpty as Kr,xSequentialFillFromStep as Qr}from"ml-spectra-processing";function wt(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 p={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)},g=p.deltaX,d=Qr({from:l,step:g,size:r});if(u===1){let h={};for(let f in i){let b=i[f],m=new Float64Array(r);for(let y=0;y<r;++y)m[y]=b.readInt32();h[f]=m}t.spectra.push({...p,data:{...h,x:d}})}else{let{meta:h}=t,f=Number(h.SF[1]),b=Number(h.SW_p[1]||h.SW[1]),m=Number(h.OFFSET[1]),y=m-b/f,F={};for(let D in i)F[D]={minY:m,maxY:y,minX:d[0],maxX:d.at(-1),...ei(h,i[D])};wt(F),n.keepSpectra&&se(t,{minMax:F,x:d,nbSubSpectra:u,template:p}),t.minMax=F}}function ae(e){return Number(Zr(e)?e[0]:e)}function ei(e,t){let n=e.SI.slice().reverse(),i=e.XDIM.slice().reverse(),r=n.map((d,h)=>Number.parseInt(String(d/i[h]),10)),[o,s]=n,[a,l]=i,c=Kr({nbRows:o,nbColumns:s}),[u,p]=[Number.MAX_SAFE_INTEGER,Number.MIN_SAFE_INTEGER],g=[];for(let d=0;d<r[0];d++)for(let h=0;h<r[1];h++){let f=h*l,b=d*a;g.push([b,f])}for(let[d,h]of g)for(let f=0;f<a;f++)for(let b=0;b<l;b++){let m=t.readInt32();u>m&&(u=m),p<m&&(p=m),c[f+d][b+h]=m}return{z:c,minZ:u,maxZ:p}}import{createStepArray as ii,xMinMaxValues as oi}from"ml-spectra-processing";var W={};Ft(W,{DQD:()=>ri,QF:()=>ti,QSEQ:()=>z,QSIM:()=>ni});var ti=0,ni=1,z=2,ri=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 p=1/(2*c),g=i*p,d=Number.parseInt(t.meta.BYTORDA,10);d=d?0:1,d?r.setLittleEndian():r.setBigEndian();let h=s===2?p:2*p,f=si({nbSubSpectra:o,isFloat:l,aqMode:s,td:i}),b={dataType:"NMR FID",dataTable:"(X++(R..R))",nbPoints:f,firstX:0,lastX:g,nucleus:t.meta.NUC1,xUnit:"Sec",yUnit:"Arbitrary",isXYdata:!0,isFID:!0,observeFrequency:u,title:t.meta.TITLE,deltaX:h},m=ii({length:f,step:h});if(o<2){let y=kt(r,{nbPoints:f,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}},D={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 x=kt(r,{nbPoints:f,isFloat:l,aqMode:s});D.re=vt(x.re,D.re),D.im=vt(x.im??new Float64Array,D.im),F.re.z.push(x.re),F.im&&x.im&&F.im.z.push(x.im)}F.re={...F.re,minZ:D.re.min,maxZ:D.re.max},F.im={...F.im,minZ:D.im.min,maxZ:D.im.max},n.keepSpectra&&se(t,{minMax:F,x:m,nbSubSpectra:o,template:b}),t.minMax=F}}function vt(e,t){let{min:n,max:i}=oi(e),{min:r,max:o}=t;return{min:Math.min(r,n),max:Math.max(o,i)}}function kt(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 si(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 Lt(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(li(e).then(a=>{n.ereticFactor=a})),e.integrals&&i.push(Ot(e).then(a=>{n.integrals=a}));let s=ai(e);return s&&i.push(s.text().then(a=>{n.titleFile=a})),await Promise.all(i),ci(n)}function ai(e){if("title"in e&&e.title)return e.title}function ci(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 li(e){let n=(await e.quantFactorSample?.text())?.match(/<Application[\w\W]+<Eretic_Factor>(?<ereticFactor>[\d.]+)/);return Number(n?.groups?.ereticFactor)}function Xe(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 qt(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),mi(n,t)}function mi(e,t){let n=Xe(e.procs,e.proc2s),i=Xe(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 f=[];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&&f.push(`${m}${y}`)}n.meta.vdlist=f}if(e.difflist){let f=[];for(let b of e.difflist.split(`
3
+ `)){if(!b)continue;let[m]=b.trim().match(/\s*([\d.]+)\s*/)?.slice(1)||[];f.push(m)}n.meta.difflist=f}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(f=>f 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 f=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/f,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 f=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]),D=Number(n.meta.O1[1]);c=F/m+f/2,u=D/y+b/2,le(e.ser,n,t)}if(t.keepSpectra){let{nbSubSpectra:f}=n.meta,b=(l-a)/(f-1),m=a;for(let y=0;y<f;y++)m+=b,n.spectra[y].pageValue=m}let{NUC1:p,AXNUC:g,SF:d}=n.meta,h=g||p||[];return n.info["2D_Y_NUCLEUS"]=h[1],n.info["2D_X_NUCLEUS"]=h[0],n.info["2D_Y_FRECUENCY"]=d[1],n.info["2D_X_FRECUENCY"]=d[0],n.info["2D_Y_OFFSET"]=u,n.info["2D_X_OFFSET"]=c,n.info.twoD=!0,n.twoD=!0,n}async function He(e,t={}){let n,i=!1,r=!1;if(["ser","2rr","2ri","2ir","2ii"].some(s=>s in e))i=!0,n=await qt(e,t);else if(e["1r"]||e["1i"]||e.fid)r=!0,n=await Lt(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&&(Ve(n.meta,"DSPFVS",n.meta.DSPFVS),Ve(n.meta,"GRPDLY",n.meta.GRPDLY),Ve(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 Ve(e,t,n){n!==void 0&&(Array.isArray(n)?e[t]=n.slice():e[t]=[n])}var q={};Ft(q,{ECHO_ANTIECHO:()=>yi,QF:()=>ui,QSEC:()=>pi,STATES:()=>di,STATES_TPPI:()=>gi,TTPI:()=>fi});var ui=1,pi=2,fi=3,di=4,gi=5,yi=6;import{formatSpectra as Ri}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(hi(i,r))}return t}function hi(e,t){switch(t.toLowerCase()){case"s":return Number.parseFloat(e);case"ms":return Number.parseFloat(e)/1e3;case"m":case"min":return Number.parseFloat(e)*60;default:return Number.NaN}}import{isAnyArray as Bt}from"is-any-array";function _(e){if(bi(e))return Fi(e)?e.map(_t):_t(e);if(typeof e=="object"&&e!==null){let t={};for(let n in e)t[n]=_(e[n]);return t}return e}function bi(e){return Bt(e)}function _t(e){return Float64Array.from(e)}function Fi(e){return Bt(e[0])}import{getOneIfArray as Z}from"@zakodium/nmrium-core";import{getGyromagneticRatio as Pi}from"gyromagnetic-ratio";import{isAnyArray as Jt}from"is-any-array";import{getFrequency as Ni}from"nmr-processing";import{isAnyArray as J}from"is-any-array";function ue(e){return typeof e=="number"}function pe(e){let{phc0:t,phc1:n}=e;return!J(t)&&!ue(t)||!J(n)&&!ue(n)||J(t)&&!ue(t[0])||J(n)&&!ue(n[0])?{}:(J(n)?n[0]*=-1:n*=-1,J(t)?t[0]*=-1:t*=-1,{phc0:t,phc1:n})}function $t(e,t,n){if(e>0)return Number(e);if(t>14||t===0)return 0;if(Ut[t]){let i=Ut[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 Ut={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 xi=new Map([[String(W.QSIM),"notPhaseSensitive"],["notphasesensitive","notPhaseSensitive"],[String(W.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 jt(e){let t=String(e).toLowerCase().replaceAll(" ","");return xi.get(t)}import{normalizeNucleus as Di}from"nmr-processing";function B(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=B(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(zt(t.experiment[0]))),Si(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=zt(t.experiment[0])),i.map(Di)}function Si(e){return e["2D_X_NUCLEUS"]&&!e["2D_X_NUCLEUS"].includes("off")&&e["2D_Y_NUCLEUS"]&&!e["2D_Y_NUCLEUS"].includes("off")}function zt(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(Wt):e[t]=[Wt(n)])}function Wt(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
4
4
  `:`
5
- `,{JCAMPDX:l="",ORIGIN:a=""}=e,m=String(l).toLowerCase()+String(a).toLowerCase();"SPECTROMETER/DATASYSTEM"in e&&(m=e["SPECTROMETER/DATASYSTEM"]);let f=(d=[])=>{for(let h of d)if(!(h in n))return!1;return!0};(m.includes("mestre")||m.includes("nova"))&&(m="mnova"),n.creator=m,e.LONGDATE&&ke(n,Date.parse(e.LONGDATE)),P(n,"pulseSequence",e[".PULSESEQUENCE"]||e[".PULPROG"]||e[`${t}PULPROG`]);let c=e[`${t}OWNER`];if(c&&P(n,"owner",c.replaceAll(/\$\$.*/gm,"")),P(n,"aqMod",e[`${t}AQ_mod`]),P(n,"experiment",ne(n,e,{prefix:t})),n.nucleus=ue(e,n,t),n.nucleus.length===0)if(i)i?.warn("There is not a nucleus detected, assuming 1H"),n.nucleus=["1H"];else throw new Error("There is not a nucleus detected");n.dimension=n.nucleus.length;let b=e[`${t}.ACQUISITIONSCHEME`]||e[`${t}FnMODE`];if(b&&P(n,"acquisitionScheme",Tn(ee(b,1))),P(n,"acquisitionMode",e[`${t}.ACQUISITIONMODE`]),T(n,"lpNumberOfCoefficients",e[`${t}NCOEF`]),T(n,"linearPredictionBin",e[`${t}LPBIN`]),T(n,"tdOff",e[`${t}TDoff`]),P(n,"windowMultiplicationMode",e[`${t}WDW`]),P(n,"title",e.TITLE),P(n,"solvent",e[".SOLVENTNAME"]),P(n,"temperature",e[`${t}TE`]||e[".TE"]),P(n,"type",e.DATATYPE),P(n,"dataClass",e[`${t}DATACLASS`]),P(n,"phc1",e[`${t}PHC1`]),P(n,"phc0",e[`${t}PHC0`]),n.type){let d=n.type[0].toUpperCase();d.includes("FID")?(n.isFid=!0,n.isComplex=!0):d.includes("SPECTRUM")&&(n.isFt=!0)}if(P(n,"firstX",e[`${t}FIRSTX`]),P(n,"lastX",e[`${t}LASTX`]),P(n,"numberOfPoints",e[`${t}NPOINTS`]),P(n,"originFrequency",e[`${t}SFO1`]),n.dimension===1&&T(n,"originFrequency",e[".OBSERVEFREQUENCY"]),"originFrequency"in n&&(n.originFrequency=pe(n.originFrequency)),!n.originFrequency&&n.dimension===2&&".OBSERVEFREQUENCY"in e){let{nucleus:d}=n,h=pe(e[".OBSERVEFREQUENCY"]);if(qe(h)&&h.length>1){let F=e[`${t}SYMBOL`].split(","),N=F.findIndex(S=>S.includes("2")),M=F.findIndex(S=>S.includes("1"));N!==-1&&M!==-1?n.originFrequency=[h[N],h[M]]:n.originFrequency=h.slice()}else if(typeof h=="number"){let F=In(d[1],{frequency:h,nucleus:d[0]});n.originFrequency=[h,F]}}if((!n.originFrequency||n.originFrequency.some(d=>Number.isNaN(d)||d===0))&&(n.originFrequency||(n.originFrequency=n.dimension>1?[400,400]:[400]),n.originFrequency=n.originFrequency.map(d=>Number.isNaN(d)||d===0?400:d),i?.warn("The frequency could not be determined and was set to 400 MHz")),m.toLocaleLowerCase().includes("oxford instruments")?Cn(n,e,{...r,separator:o}):m.includes("nanalysis")&&On(n,e),m!=="mnova"&&m!=="mestre"){let d=n.nucleus[0],h=Rn(d);if(P(n,"probeName",e[`${t}PROBHD`]),P(n,"baseFrequency",e[`${t}BF1`]),P(n,"baseFrequency",e[`${t}SF`]),T(n,"scaleFactor",e[`${t}NC_proc`]),"scaleFactor"in n)for(let S=0;S<n.scaleFactor.length;)n.scaleFactor[S]=2**n.scaleFactor[S++];if(!("baseFrequency"in n)&&"originFrequency"in n?P(n,"baseFrequency",n.originFrequency):n.baseFrequency=pe(n.baseFrequency),!["baseFrequency","originFrequency"].some(S=>!n[S])&&h){let{baseFrequency:S}=n,A=2*Math.PI*(S[0]/h)*1e6;P(n,"fieldStrength",A)}T(n,"spectralWidth",e[`${t}SW`]),T(n,"spectralWidth",e[`${t}QM_SPECTRAL_WIDTH`]),n.dimension===1&&e[`${t}SweepWidth`]&&n.originFrequency&&T(n,"spectralWidth",e[`${t}SweepWidth`]/n.originFrequency[0]),P(n,"numberOfPoints",e[`${t}TD`],!0);let F=n.numberOfPoints;if(P(n,"spectrumSize",e[`${t}SI`]??F),P(n,"sampleName",e[`${t}NAME`]),e[`${t}FNTYPE`]!==void 0&&P(n,"acquisitionMode",Number.parseInt(e[`${t}FNTYPE`],10)),(e[`${t}VARNAME`]?e[`${t}VARNAME`].split(",")[0]:"")==="TIME"){let S=typeof e.LAST=="string"?e.LAST.replace(" ","").split(",")[0]:e.LAST;T(n,"acquisitionTime",S)}if(!n.acquisitionTime&&f(["numberOfPoints","spectralWidth"])){let{spectralWidth:S,originFrequency:A}=n;P(n,"acquisitionTime",Number((F[0]-1)/(2*S[0]*A[0])))}if(e[`${t}P`]){let S=1e6/(ee(e[`${t}P`]).split(o)[1].split(" ")[1]*4);P(n,"pulseStrength90",S)}if(e[`${t}D`]){let S=ee(e[`${t}D`]).split(o)[1].split(" ")[1];T(n,"relaxationTime",S)}if(T(n,"numberOfScans",e[`${t}NS`]),T(n,"numberOfScans",e[`${t}QM_NSCANS`]),P(n,"groupDelay",e[`${t}GRPDLY`]),P(n,"dspfvs",e[`${t}DSPFVS`]),P(n,"decim",e[`${t}DECIM`]),n.isFid&&("groupDelay"in n||f(["dspfvs","decim"]))){let{groupDelay:S,dspfvs:A,decim:x}=n,I=Pt(S?.[0]??0,A?.[0],x?.[0]);P(n,"digitalFilter",I)}let M;if(f(["numberOfPoints","spectralWidth"])){let{spectralWidth:S,numberOfPoints:A}=n;n.isFid?M=A.map(x=>n.acquisitionTime[0]/(x-1)):M=A.map((x,I)=>S[I]/(x-1))}if(P(n,"increment",M),e[`${t}DATE`]){let S=ee(e[`${t}DATE`]),A=Number.parseInt(S,10)*1e3;Number.isNaN(A)?ke(n,Date.parse(S)):ke(n,A)}n.solvent||P(n,"solvent",ee(e[`${t}SOLVENT`]))}!("baseFrequency"in n)&&"originFrequency"in n&&P(n,"baseFrequency",n.originFrequency);let u=n.dimension<2,y="dataClass"in n&&n.dataClass[0].toUpperCase()==="NTUPLES",g=["LAST","FIRST","VARDIM","SYMBOL"].every(d=>`${t}${d}`in e);if(u&&(y||g)&&(P(n,"last",j(e[`${t}LAST`])),P(n,"first",j(e[`${t}FIRST`])),P(n,"varDim",j(e[`${t}VARDIM`])),P(n,"symbols",j(e[`${t}SYMBOL`])),n.symbols&&Array.isArray(n.symbols))){n.symbols.includes("R")&&n.symbols.includes("I")&&(n.isComplex=!0);let d=n.symbols.findIndex(h=>h.toLowerCase()==="x");if(T(n,"firstX",n.first[d]),T(n,"lastX",n.last[d]),T(n,"numberOfPoints",n.varDim[d]),!("spectralWidth"in n)){let{lastX:h,numberOfPoints:F,firstX:N}=n;P(n,"spectralWidth",n.isFid?F/(2*h):Math.abs(h-N)/n.originFrequency)}}if(`${t}REVERSE`in e){let d=e[`${t}REVERSE`];n.reverse=(Array.isArray(d)?d:[d]).map(h=>typeof h=="string"?h.includes("yes"):h)}let p=e[`${t}REFERENCE_POINT`];if(!("frequencyOffset"in n)&&p&&f(["spectralWidth","baseFrequency"])){let d=typeof p=="number"?p:e[`${t}REFERENCE_POINT`].match(/(?<reference>[+-]?\d+(?:\.\d+)?)\s*.*/),h;if(typeof p=="number"?h=p:(p.match(/(?<reference>[+-]?\d+(?:\.\d+)?)\s*.*/),h=Number(d?.groups?.reference)),!Number.isNaN(h)){let{spectralWidth:F,baseFrequency:N}=n;P(n,"frequencyOffset",.5*F*N-h)}}if(!("frequencyOffset"in n)&&f(["baseFrequency","originFrequency"])){let{baseFrequency:d,originFrequency:h}=n,F=d.map((N,M)=>(h[M]-N)*1e6);P(n,"frequencyOffset",F)}for(let d in n)n[d]&&n[d].length===1&&(n[d]=n[d][0]);return!n.frequencyOffset&&".SHIFTREFERENCE"in e&&En(e,n),Array.isArray(n.nucleus)||(n.nucleus=[n.nucleus]),n}function T(e,r,t){t!==void 0&&P(e,r,pe(t))}function ke(e,r){if(!Number.isNaN(r)){e.epoch=r;let t=new Date(r);e.date=t.toUTCString(),e.localeDate=t.toLocaleString()}}function En(e,r){let t=e[".SHIFTREFERENCE"],i=t.trim().startsWith("(")?/\((?<data>[^)]+)\)/:/(?<data>[^)]+)/,n=t.match(i);if(n.groups.data){let s=n.groups.data.split(",");if(s.length<4)return;let o=Number.parseInt(r.numberOfPoints,10),{spectralWidth:l,baseFrequency:a}=r,m=Number.parseInt(s[2],10),f=Number.parseFloat(s[3]),c;if(r.isFid){if(["baseFrequency","numberOfPoints","spectralWidth"].some(b=>!(b in r)))return;c=f+(o*.5-m)*l/o}else{let b=Number.parseFloat(r.firstX),u=Number.parseFloat(r.lastX),y=(u+b)/2,g=(u-b)/(o+1),p=g<0?b:u+(m-1)*g;c=(y-p)/a+f}c!==void 0&&!Number.isNaN(c)&&(r.frequencyOffset=c*a)}}function pe(e){if(qe(e)){let r=[];for(let t of e)r.push(typeof t=="string"?Number.parseFloat(t):t);return r}return typeof e=="string"?Number.parseFloat(e):e}function Tn(e){let r=qe(e)?e[1]:e;switch(typeof r=="string"&&/^\d+$/.test(r)?Number.parseInt(r,10):r){case ae.QSIM:case"notphasesensitive":return"notPhaseSensitive";case ae.QSEQ:case"qseq":return"QSEQ";case V.TTPI:case"tppi":return"TPPI";case V.STATES:case"states":return"States";case V.STATES_TPPI:case"tppi-states":return"States-TPPI";case V.ECHO_ANTIECHO:case"echo-antiecho":return"Echo-antiecho";default:return"undefined"}}function Cn(e,r,t={}){let{prefix:i="",separator:n=`
6
- `}=t;P(e,"spectralWidth",r[`${i}SweepWidth`]/e.originFrequency[0]);let s=r[`${i}.PULSESEQUENCE`].split(n),o=[];r[".OBSERVENUCLEUS"]&&o.push(r[".OBSERVENUCLEUS"]),r.INDIRECTNUCLEUS&&o.push(r.INDIRECTNUCLEUS),e.nucleus=k(o),e.pulseSequence=s[0];let l=s.slice(2,-1);if(o.length>1)if(o[0]===o[1])e.spectralWidth.push(e.spectralWidth[0]);else{let a=JSON.stringify(l).match(/\$\$SW1=\s*(?<sw>[+-]?(?:[0-9]*[.])?[0-9]+)/);if(a?.groups){let{originFrequency:m}=e,f=Number.parseFloat(a.groups.sw);e.spectralWidth.push(f/m[1])}}return e}function On(e,r){let{T1NUCLEUS:t,T2NUCLEUS:i,PAGE:n}=r;e.pulseSequence=r.EXPERIMENT||r[".PULSESEQUENCE"];let s=[],{dimension:o,isComplex:l}=e;if(o===2&&e.pulseSequence==="T1"){let f=l?2:1;for(let c=0;c<n.length;c+=f){let b=n[c].replace(/T1=/,"");s.push(Number(b))}r.vdlistValues=s}e.nucleus=o>1?[i,t]:i;let{phc0:a,phc1:m}=e;if(a&&m){let f=me({phc0:a,phc1:m});e={...e,...f}}}var vn={keepRecordsRegExp:/.*/,keepFiles:!0};async function de(e,r={}){let t={spectra:[],molecules:[]},{converter:i={},selector:n={},logger:s}=r,o=pt(e,{logger:s,...kn(n)}),l=[];for(let m of o)l.push(bt(m,{...vn,...i}).then(f=>Ln(f,r)));let a=await Promise.allSettled(l);for(let m=0;m<a.length;m++){let f=a[m];if(f.status==="fulfilled"){let c=me(f.value.info);t.spectra.push({...f.value,info:{...f.value.info,...c}})}else if(f.reason){let c=o[m].name;s?.warn(`Bruker data: ${c}, fails with: ${f.reason}`);continue}}return s&&s[t.spectra.length>0?"info":"debug"](`Loaded ${t.spectra.length} spectra from Bruker files`),wn(t)}function Ln(e,r={}){let{keepSource:t=!1,logger:i}=r,n={...e.info,...e.meta},s=fe(n,{logger:i}),o={},{isFid:l}=s;if(qn(e)){let u=e.minMax;for(let y in u){let g=u[y];g&&(g.z=$(g.z))}o.components=e.minMax}else s.dimension===1&&(o.components=e.spectra);let{source:a}=e,{expno:m,name:f,files:c}=a;n.vdlist&&(n.vdlistValues=le(n.vdlist));let b={dependentVariables:[o],meta:n,info:{...s,experimentNumber:m,name:f}};return c&&t&&(b.sourceSelector={files:c.map(u=>u.relativePath)}),Bn(b,e),b}function kn(e){let{general:r={},bruker:t={}}=e,{processingNumbers:i,experimentNumbers:n,...s}=t;return{...r,...s,processingNumbers:Mt(i),experimentNumbers:Mt(n)}}function Mt(e){if(e)return e.split(/[^\d]+/).filter(Boolean).map(r=>Number.parseInt(r,10))}function qn(e){let{info:r}=e;return r.twoD}function Bn(e,r){if(!("integrals"in r))return;let{integrals:t=[]}=r;e.integrals={values:t.map(i=>{let{from:n,to:s,integration:o}=i;return{from:n,to:s,integral:o,kind:"signal"}})}}var ge=class{id="@zakodium/nmrium-core-plugins#BrukerLoaderPlugin";version=1;migrations=[];onReadProcess;constructor(){this.onReadProcess={onFiles:this.onReadProcessFiles}}onReadProcessFiles=(r,t)=>{let{sourceSelector:i,converter:n,keepSource:s,logger:o}=t??{};return de(r,{converter:n?.bruker,selector:i,keepSource:s,logger:o})}};function Be(){return new ge}import{formatSpectra as bi}from"@zakodium/nmrium-core";import{createTree as Fi}from"jcampconverter";function xt(e,r,t={}){let{selector:i={},keepSource:n=!1}=t;if(!n)return e;for(let s=0;s<e.spectra.length;s++){let o=e.spectra[s];o.sourceSelector={files:[r.relativePath],jcamp:{index:s,...i}}}return e}import{convert as _n}from"jcampconverter";function _e(e,r,t){let{dataType:i,children:n}=e,s=i==="LINK"&&n?n:[e];for(let o of s){if(o.dataType==="LINK"){_e(o,r,t);continue}let l=_n(o.jcamp,t);r.push(...l.flatten)}}function Et(e,r={}){let t=[],i=Tt(e,r);for(let o of i?e:[])o.dataType==="LINK"?o.children=Ue(o.children,r):o=Ue([o],r)[0],t.push(o);let{name:n,logger:s}=r;return e.length===0&&s?.warn(`There is no data ${n?`in ${n}`:"in the JCAMP-DX"}`),t}function Ue(e=[],r={}){let{name:t,logger:i,tree:n=[],dataSelection:s="both"}=r,o=[];for(let f of e){let{dataType:c,dataClass:b}=f;if(c==="LINK")f.children=Ue(f.children,r);else if(n.some(u=>{let{dataClass:y=b,dataType:g=c}=u;return b===y&&c===g})){i?.warn(`Skipping ${b} and ${c} ${t?`in ${t}`:"in the JCAMP-DX"},
7
- because it didn't match the import filters`);continue}o.push(f)}let l=[],a=o.some(It),m=o.some(Rt);for(let f of o){if(s!=="both"&&f.dataType!=="LINK"){if(It(f)&&(s==="ft"||s==="preferFT"&&m)){i?.warn(`Skipping raw data ${t?`in ${t}`:"in the JCAMP-DX"} because it didn't match the import filters`);continue}if(Rt(f)&&(s==="fid"||s==="preferFID"&&a)){i?.warn(`Skipping FFT data ${t?`in ${t}`:"in the JCAMP-DX"} because it didn't match the import filters`);continue}}l.push(f)}return l}function Rt(e){return e.dataType?.toUpperCase().includes("SPECTRUM")&&e.dataClass&&!e.dataClass.toUpperCase().includes("PEAK")}function It(e){return e.dataType?.toUpperCase().includes("FID")}function Tt(e,r={}){let{logger:t,name:i=""}=r;for(let n of e){if(n.dataType==="LINK"&&Tt(n.children,r))return!0;let{dataType:s=""}=n,o=s.toLowerCase();if(o.length>0){if(o.includes("spectrum")&&!o.includes("nmr"))return t?.warn(`File ${i} was ignored because it is a ${s}`),!1;if(o.includes("nmr"))return!0}}return!1}import{generateID as wt}from"@zakodium/nmrium-core";import{parseJcampCS as Vn}from"jcampconverter";import*as Jn from"openchemlib";import{isMolfileNotEmpty as Un}from"nmr-processing";import{Molecule as $n}from"openchemlib";async function Ct(e,r={}){let t=await e.text(),i=Y(t),n={molecules:i,spectra:[]};return i.length===0&&r.logger?.debug(`${e.name} is an empty molfile`),n}function Y(e){let r=[];if(!Un(e))return[];let i=$n.fromMolfile(e).toMolfile();return r.push({molfile:i}),r}import{isMolfileNotEmpty as zn}from"nmr-processing";import*as Wn from"openchemlib";import{getDiastereotopicAtomIDsFromMolfile as Xn}from"openchemlib-utils";var jn=new Set(["ndnmrspectrum","ndnmrfid","nmrspectrum","nmrfid"]);function he(e){let{dataType:r="",dataClass:t=""}=e,i=r.replaceAll(/\s/g,"").toLowerCase(),n=t.replaceAll(/\s/g,"").toLowerCase();return jn.has(i)&&n!=="peaktable"}function Ot(e,r,t={}){let{spectra:i,info:n,meta:s}=e,o=i[0].data,l=[],a={x:"delta",y:"intensity",w:"width",m:"multiplicity",a:"atom"},{logger:m,name:f,spectraData:c}=t,{CROSSREFERENCE:b}=n,u=typeof b!="string"?b:b.split(/\r?\n/).map(S=>S.trim()).filter(Boolean),y=u.find(S=>S?.toLowerCase().includes("structure"));if(y===void 0)return m&&m.warn(`There is not a structure reference for ${f} file, assignment object could not be completed`),null;let g=Number.parseInt(y?.toLowerCase().replace(/_/,"").replace(/structure:\s*blockid\s*=\s*(?<blockId>.*)/,"$<blockId>"),10);if(Number.isNaN(g)||g<1)return m&&m.warn(`Structure block_id not found for ${f} file, assignment object could not be completed`),null;let d=c?.molecules?.find(S=>S.blockId===g)?.molfile??"";if(d===""){let S=r.find(x=>x.info.BLOCKID===g),{MOLFILE:A=""}=S?.meta||{};d=A}if(!zn(d))return m&&m.warn(`Empty molfile for ${f} file with structure block_id = ${g}, assignment object could not be completed`),null;let h=Xn(Wn,d),F=ue({...n,...s},{},"");for(let S=0;S<o.x.length;S++){let A={};for(let x in o){let I=o[x][S];typeof I=="string"&&I.startsWith("<")&&I.endsWith(">")&&(I=I.slice(1,-1)),A[a[x]]=I}if("atom"in A){let x=h.map[A.atom-1];F.includes("1H")?x.nbHydrogens>0?(A.diaIDs=x.hydrogenOCLIDs,A.nbHydrogens=x.nbHydrogens):(A.diaIDs=[x.oclID],A.nbHydrogens=x.nbHydrogens):(A.diaIDs=[x.oclID],A.nbHydrogens=1)}l.push(A)}let N={};for(let S of l){let{delta:A,diaIDs:x}=S,I=`${A}_${x.join("_")}`;if(N[I])N[I].atoms.push(S.atom);else{let{atom:Me,...D}=S;N[I]={...D,atoms:[S.atom]}}}let M=[];for(let S of u)S.toLowerCase().includes("spectrum")&&M.push(Number(S.toLowerCase().replace(/_/,"").replace(/.*:\s*blockid=(?<blockId>.*)/,"$<blockId>")));if(M.length===0){for(let S of r)if(he(S)){let{BLOCKID:A}=S.info;M.push(Number(A))}M.length>1&&(M=[],m&&m.warn(`There is not a spectral cross-reference for the peak assignment in the ${f} file`))}return{moleculeBlockID:g,spectraBlockIDs:M,assignments:Object.values(N),molecule:h.molecule}}function vt(e,r,t,i){for(let n of e){let{meta:s,dataClass:o="",dataType:l="",info:a}=n,m=Number.parseInt(String(a.BLOCKID),10);s.MOLFILE?Zn(String(s.MOLFILE),r,m):n.jcampCS&&Gn(n,r,m),Yn(o,l)&&Hn(r,n,e,i),he(n)&&t.push(n)}}function Yn(e,r){return e?.toLowerCase().includes("assignments")&&r?.toLowerCase().includes("assignments")}function Hn(e,r,t,i){let n=Ot(r,t,{spectraData:e,logger:i.logger,name:i.name});if(e.assignmentsByBlocks||(e.assignmentsByBlocks={}),n){let{spectraBlockIDs:s}=n;for(let o of s)e.assignmentsByBlocks[o]=n}}function Gn(e,r,t){r.molecules||(r.molecules=[]);let i=Vn(e,{OCL:Jn}),n=Y(i?.molfile||"");n.length>0&&r.molecules.push({id:wt(),blockId:t,...n[0]})}function Zn(e,r,t){r.molecules||(r.molecules=[]);let i=Y(String(e));r.molecules.push({id:wt(),blockId:t,...i[0]})}import{generateID as Jt}from"@zakodium/nmrium-core";import{matrixMinMaxZ as Vt,reimPhaseCorrection as li}from"ml-spectra-processing";import{xyAutoRangesPicking as ci}from"nmr-processing";function H(e){return e.slice(0,Math.max(0,e.lastIndexOf(".")))}function G(e){e.sort((r,t)=>r.from-t.from);for(let r=0;r<e.length-1;r++)e[r].to>e[r+1].from&&(e[r].to=Math.max(e[r+1].to,e[r].to),e[r].signals=e[r].signals.concat(e[r+1].signals),e[r].integration+=e[r+1].integration,e.splice(r+1,1),r--);return e}import{splitPatterns as ri}from"nmr-processing";import{xMaxValue as Kn}from"ml-spectra-processing";function te(e){return e.trim().slice(1,-1).split(/,\s*/).map(r=>r.trim())}var Qn={I:"id",X:"from",Y:"to",Hs:"delta",An:"integration",H:"nbAtoms",C:"multiplicity",N:"assignment","(J)":"js"},Lt=["I","X","Y","Hs","An","H","C","N","(J)"];function kt(e){let r={headersFromParenthesis:[],headersFromComments:[],comments:[],data:[],multiplets:[]},t=e.split(/\r?\n/).filter(i=>i.trim()!=="");if(t.length===0)return r;if(t[0].startsWith("(")&&!t[0].match(/\d/)){let i=t.shift();r.headersFromParenthesis=te(i)}return r.comments=t.filter(i=>i.startsWith("$$")).map(i=>i.replace(/^\$\$\s*/,"")),r.headersFromComments=ti(r.comments),r.data=t.filter(i=>!i.startsWith("$$")).map(te),r.multiplets=ei(r),r}function ei(e,r={}){let{logger:t}=r,i=e.data[0].map((a,m)=>m).filter(a=>e.data.every(m=>Number.isNaN(m[a])||Number.isNaN(Number(m[a]))));if(t?.trace(`Parsing JCAMP-DX assignment: stringColumnIndexes: ${i.join(",")}`),i.length===0)return t?.warn("Parsing JCAMP-DX assignment: No string columns found. Skipping parsing of assignment."),[];let n=i[0],s;if(e.headersFromParenthesis.length>0&&e.headersFromParenthesis[n]==="C")s=e.headersFromParenthesis;else if(e.headersFromComments.length>0&&e.headersFromComments[n]==="C")s=e.headersFromComments;else if(Lt[n]==="C")s=Lt;else return t?.warn("No header found for multiplicity. Skipping parsing of assignment."),[];return Kn(e.data.map(a=>a.length))>s.length&&t?.warn("Some assignments are containing more values than headers"),e.data.map(a=>{let m={};for(let f=0;f<s.length;f++){let c=s[f];m[Qn[c]||c]=a[f]}return m})}function ti(e){return e.map(r=>r.split(":")[0].trim()).filter(r=>r.length>0)}function qt(e,r={}){let{logger:t}=r,i=kt(e),n={multiplets:[],comments:i.comments};for(let s of i.multiplets){let{id:o,from:l,to:a,delta:m,integration:f,nbAtoms:c,multiplicity:b}=s,u={id:o,js:[],multiplicity:"",...ni({from:l,to:a,delta:m,integration:f,nbAtoms:c})};if(typeof s.js=="string"){let y=s.js.split(/\s+/).map(Number.parseFloat),g=0,p=ri(b).map(F=>{let N=(F?.multiplicity||1)-1;return g+=N,{value:F.value,multiplicity:F?.multiplicity,js:y.slice(g-N,g)}}),d=p.reduce((F,N)=>F+(N.multiplicity?N.multiplicity-1:0),0);y.length!==d&&t?.warn(`The number of j values (${y.length}) is not equal to the sum of the multiplicities - 1 (${d})`);let h=[];for(let F of p){if(F.js.every(N=>N===F.js[0])){h.push(F);continue}if(F.multiplicity!==F.js.length+1){h.push(F);continue}for(let N=0;N<F.multiplicity-1;N++)h.push({value:"d",multiplicity:2,js:[F.js[N]]})}h.sort((F,N)=>N.js[0]-F.js[0]),u.js=h.map(F=>({coupling:F.js[0],multiplicity:F.value}))}typeof s.assignment=="string"&&(u.assignment=si(s.assignment)),typeof s.multiplicity=="string"&&(u.multiplicity=s.multiplicity),n.multiplets.push(u)}return n}function ni(e){let r={};for(let t in e){let i=e[t],n=typeof i=="number"?i:Number.parseFloat(i);Number.isNaN(n)||(r[t]=n)}return r}var ii={quot:'"',apos:"'",comma:",",amp:"&",lpar:"(",rpar:")",lt:"<",gt:">",colon:":",semi:";"};function si(e){return e.replaceAll(/&(\w+);/gi,(r,t)=>ii[t.toLowerCase()]||r)}function Bt(e){let r=e.split(/\r?\n/).filter(i=>i.trim()!==""),t=[];for(let i of r)if(i.startsWith("(")){let[n,s,o]=te(i).map(Number.parseFloat);t.push({id:n,x:s,y:o})}return t}function _t(e,r={}){let t={};if(!e["OBSERVED MULTIPLETS"])return[];let i=qt(e["OBSERVED MULTIPLETS"],r);if(!i)return[];let{multiplets:n}=i;for(let s of n){let{id:o,from:l,to:a,integration:m=0,...f}=s;t[o]={from:l,to:a,integration:m,signals:[{id:o,...f}]}}if(e["OBSERVED MULTIPLETS PEAKS"]){let s=Bt(e["OBSERVED MULTIPLETS PEAKS"]),o={};for(let l of s){let{id:a,x:m,y:f}=l;o[a]||(o[a]=[]),o[a].push({x:m,y:f,width:.05})}for(let l in t)o[l]&&(t[l].signals[0].peaks=o[l])}return G(Object.values(t))}function Ut(e,r){let i=[...e.getMolecularFormula().formula.matchAll(/(?<element>[A-Z][a-z]?)(?<count>\d*)/g)].map(s=>({element:s?.groups?.element,count:s?.groups?.count?Number(s.groups.count):1})),n=[...r.nucleus[0].matchAll(/[0-9]*(?<element>[A-Z][a-z]?)/g,"$element")][0].groups.element;return i.find(s=>s.element===n)?.count||100}function $t(e){let r={};return".PHASE0"in e&&(r.ph0=Number.parseFloat(e[".PHASE0"]),r.ph1=Number.parseFloat(e[".PHASE1"])),r}function $e(e){let{ph0:r,ph1:t}=e;return Number.isFinite(r)&&Number.isFinite(t)}import{generateID as jt}from"@zakodium/nmrium-core";function zt(e,r,t){for(let i=0;i<e.length;i++){if(r.includes(i))continue;let{delta:n,multiplicity:s="",diaIDs:o}=e[i],l=Number(n)-.01,a=Number(n)+.01;t.push({from:l,to:a,integration:1,id:jt(),signals:[{id:jt(),delta:n,multiplicity:s,diaIDs:o}]})}}import{linearSumAssignment as oi}from"linear-sum-assignment";import{xCostMatrix as ai}from"ml-spectra-processing";function Wt(e,r){let t=e.map(o=>o.delta),i=r.map(o=>o.delta),n=ai(i,t,{fct:(o,l)=>Math.abs(o-l)}),{rowAssignments:s}=oi(n,{maximaze:!1});return Array.from(s)}function Xt(e,r){let{assignments:t,ranges:i}=r;t?.sort((o,l)=>l.delta-o.delta);let n=[],s=[];for(let o of i){let l=0,{from:a,to:m}=o,f=[];for(let c=l;c<t.length;c++){let{delta:b}=t[c];b<=m&&b>=a?(f.push(t[c]),s.push(c)):b>m&&(l=c)}if(f.length>0){let c=o.signals,b=[],u=f.length>1&&c.length>1?Wt(c,f):[0];for(let y=0;y<f.length;y++){let g=u[y],{delta:p,multiplicity:d,diaIDs:h}=f[y];g>-1?b.push({...c[g],diaIDs:h}):b.push({delta:p,multiplicity:d,diaIDs:h})}o.signals=b,n.push(o)}}zt(t,s,n),n.sort((o,l)=>o.from-l.from),e.ranges={values:G(n).map(o=>{let{integration:l,...a}=o;return a}),options:{sum:r.integrationSum,isSumConstant:!0,sumAuto:!0}},e.ranges.options.moleculeId=String(r.moleculeId)}function Yt(e,r,t,i,n){let{logger:s}=n,o={components:Ht(e)?pi(e,t.isFid):ui(e)},{name:l=t.title||`jcamp_${Jt()}`}=n,a={dependentVariables:[o],meta:r,info:{...t,name:H(l)}};return mi(e)&&fi(a,i,r,e,t,{logger:s}),a}function Ht(e){return"minMax"in e}function mi(e){return!Ht(e)}function ui(e){return e.spectra.map(r=>{let t=$(r.data);return{...r,data:t}})}function pi(e,r){let t={...e.minMax,z:$(e.minMax?.z)};return r?di(t):{rr:t}}function fi(e,r,t,i,n,s){let{assignmentsByBlocks:o}=r,l=$t(t);$e(l)&&gi(e,l);let a=String(i.info.BLOCKID);if(o?.[a]){let{molecule:m,assignments:f,moleculeBlockID:c}=o[a],b=Ut(m,n),u=$(i.spectra[0].data);if(u.x[0]>u.x[1])for(let d of i.spectra)d.data.x.reverse(),d.data.y.reverse();if($e(l)&&i.spectra.length>1){let{re:d}=hi(i,l);u.y=d}let{x:y,y:g}=u,p=_t(t,s)??ci({x:y,y:g},{peakPicking:{frequency:n.originFrequency},ranges:{frequency:n.originFrequency,integrationSum:b}});Xt(e,{moleculeId:c,ranges:p,assignments:f,integrationSum:b})}}function di(e){let{z:r,...t}=e,i=[],n=[];for(let l=0;l<r.length;l+=2)i.push(r[l].slice()),n.push(r[l+1].slice());let s=Vt(i),o=Vt(n);return{re:{...t,z:i,minZ:s.min,maxZ:s.max},im:{...t,z:n,minZ:o.min,maxZ:o.max}}}function gi(e,r){let{ph0:t,ph1:i}=r;e.filters||(e.filters=[]),e.filters.push({id:Jt(),name:"phaseCorrection",value:{ph0:t,ph1:i,absolute:!1},enabled:!0})}function hi(e,r){let{ph0:t,ph1:i}=r,{re:n,im:s}=li({re:e.spectra[0].data.y,im:e.spectra[1].data.y},t*Math.PI/180,i*Math.PI/180);return{re:n,im:s}}function Gt(e,r,t){let{logger:i}=t,n=[];for(let s of e)if(s.spectra&&s.spectra.length>0||s.minMax){yi(s);let o={...s.info,...s.meta},l=fe(o,{logger:i});if(l.experiment==="wobble_curve")continue;n.push(Yt(s,o,l,r,t))}return n}function yi(e){let r=e.meta["BRUKER FILE EXP"];if(!r)return;let i=(Array.isArray(r)?r:[r]).find(s=>s.slice(0,10).includes("vdlist"));if(!i)return;let n=i.split(`
8
- `).slice(1);e.info.vdlistValues=le(n)}async function ye(e,r={}){let t=await e.text(),i=Zt(t,{name:e.name,...r});return xt(i,e,r)}function Zt(e,r={}){let t={spectra:[],molecules:[]},{name:i,converter:n={},selector:s={},logger:o}=r,{keepRecordsRegExp:l=/.*/}=n,a={keepSpectra:!0,noContour:!0,noTrimRegExp:/\$MOLFILE/,keepRecordsRegExp:l,logger:o},m=Et(Fi(e),{name:i,...s,logger:o});for(let f of m)Si(f,t,a,i);if(Ni(t,s),t.spectra.length===0&&m.length>0){let f=t.molecules.length===0?" nor molecule":"";o?.warn(`No spectra${f} data was loaded from file ${i}`)}return bi(t)}function Si(e,r,t,i){let n=[],s=[],o={molecules:[]},{logger:l}=t,a={name:i,logger:l};_e(e,s,t),vt(s,o,n,a),r.spectra.push(...Gt(n,o,a)),r.molecules.push(...o.molecules)}function Ni(e,r){r.index!==void 0&&(e.spectra=e.spectra.slice(r.index,r.index+1))}var be=class{id="@zakodium/nmrium-core-plugins#JCAMPDXLoaderPlugin";version=1;migrations=[];onReadProcess;constructor(){this.onReadProcess={supportedExtensions:["jcamp","jdx","dx"],onFile:this.onReadProcessFile.bind(this)}}onReadProcessFile(r,t={}){let{sourceSelector:i={},converter:n,keepSource:s,logger:o}=t;return o?.debug(`Reading JCAMP-DX file: ${r.name}`),ye(r,{selector:this.getJCAMPDXSelector(i),converter:n?.jcamp,keepSource:s,logger:o})}getJCAMPDXSelector(r={}){let{jcamp:t={},general:i={}}=r,{dataSelection:n="both"}=i;return{...t,dataSelection:n}}};function je(){return new be}var Pi={0:"bigEndian",1:"littleEndian"},Di={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"},Ai={0:"64Bit Float",1:"32Bit Float",2:"Reserved",3:"Reserved"},Mi={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"},xi={0:"None",1:"Real",2:"TPPI",3:"Complex",4:"Real_Complex",5:"Envelope"},Ri={"-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"},Ii={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},Ei={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"},Kt={0:"Ranged",1:"Listed",2:"Sparse",3:"Listed"},Ti={0:"String",1:"Integer",2:"Float",3:"Complex",4:"Infinity"};function Ci(e){if(e===void 0)return{epoch:null,date:""};let r=e*1e3;return{epoch:r,date:new Date(r).toUTCString()}}function L(e,r){return e.paramArray.find(t=>t.name===r)||""}function Oi(e,r){let t=e.paramArray.find(u=>u.name==="orders"),i=e.paramArray.find(u=>u.name==="factors"),n=e.paramArray.find(u=>u.name==="x_sweep"),s=e.paramArray.find(u=>u.name==="x_acq_time"),o=e.paramArray.find(u=>u.name==="x_points");if([t,i,n,s,o].includes(void 0)){r?.error("There is not all parameters to calculate the number of point of digital filter");return}let l=Number.parseInt(t.value.slice(0,1),10),a=t.value.slice(1).length/l,m=0,f=new Int8Array(l),c=1,b=0;for(let u=0;u<l;u++)f[u]=Number.parseInt(i.value.slice(b,b+1),10),b+=1;for(let u=0;u<l;u++){let y=1;for(let g=u;g<l;g++)y*=f[g];m+=(Number.parseInt(t.value.slice(c,c+a),10)-1)/y,c+=a}return m/=2,m/n.value/s.value*(o.value-1)}function C(e,r){let t=L(e,r)||"NA";if(t==="NA")return{magnitude:"NA",unit:"NA"};let i=t.unit[0].base,n=Ii[t.unit[0].prefix];return{magnitude:t.value*10**n,unit:i}}function Qt(e,r){let t=[];for(let i=0;i<r;i++){let n=e.readByte(),s=Ri[n>>4],o=n&15,l=Ei[e.readInt8()];t.push({prefix:s,power:o,base:l})}return t}function Z(e,r){let t=[];for(let i=0;i<r;i++){let n=e.readChar();n!=="\0"&&t.push(n)}return t.join("")}function er(e,r){let t=[];for(let i=0;i<r;i++){let n=e.readChar();n!==" "&&t.push(n)}return t.join("")}function R(e,r,t){let i=[];for(let n=0;n<r;n++)switch(t){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;case"readBoolean":i.push(e.readBoolean());break;default:break}return i}function tr(e,r){let t=new v(e);t.setBigEndian();let i,n={},s=[];n.fileIdentifier=t.readChars(8),n.endian=Pi[t.readInt8()],n.majorVersion=t.readUint8(),n.minorVersion=t.readUint16(),n.dataDimensionNumber=t.readUint8(),n.dataDimensionExist=t.readByte().toString(2).split("").map(D=>!!Number(D)),i=t.readByte(),n.dataType=Ai[i>>6],n.dataFormat=Mi[i&63],n.dataInstrument=Di[t.readInt8()],n.translate=R(t,8,"readUint8"),n.dataAxisType=R(t,8,"readUint8").map(D=>xi[D]),n.dataUnits=Qt(t,8),n.title=Z(t,124);for(i in R(t,4,"readUint8"))s.push(Kt[i>>4],Kt[i&15]);n.dataAxisRanged=s,n.dataPoints=R(t,8,"readUint32"),n.dataOffsetStart=R(t,8,"readUint32"),n.dataOffsetStop=R(t,8,"readUint32"),n.dataAxisStart=R(t,8,"readFloat64"),n.dataAxisStop=R(t,8,"readFloat64"),s=new Uint8Array(4);for(let D=0;D<4;D++)s[D]=t.readByte();let o=1990+(s[0]>>1),l=(s[0]<<3&8)+(s[1]>>5),a=s[2]&31;n.creationTime={year:o,month:l,day:a};for(let D=0;D<4;D++)s[D]=t.readByte();o=1990+(s[0]>>1),l=(s[0]<<3&8)+(s[1]>>5),a=s[2]&31,n.revisionTime={year:o,month:l,day:a},n.nodeName=Z(t,16),n.site=Z(t,128),n.author=Z(t,128),n.comment=Z(t,128);let m=[];for(let D=0;D<8;D++)m.push(Z(t,32));n.dataAxisTitles=m,n.baseFreq=R(t,8,"readFloat64"),n.zeroPoint=R(t,8,"readFloat64"),n.reversed=R(t,8,"readBoolean"),t.skip(3),n.annotationOK=!!(t.readByte()>>7),n.historyUsed=t.readUint32(),n.historyLength=t.readUint32(),n.paramStart=t.readUint32(),n.paramLength=t.readUint32(),n.ListStart=R(t,8,"readUint32"),n.ListLength=R(t,8,"readUint32"),n.dataStart=t.readUint32(),n.dataLength=t.readUint32()<<32|t.readUint32(),n.contextStart=t.readUint32()<<32|t.readUint32(),n.contextLength=t.readUint32(),n.annoteStart=t.readUint32()<<32|t.readUint32(),n.annoteLength=t.readUint32(),n.totalSize=t.readUint32()<<32|t.readUint32(),n.unitLocation=R(t,8,"readUint8");let f=[];for(let D=0;D<2;D++){let O=[],Q=t.readInt16();for(let U=0;U<5;U++)i=t.readInt16(),O.push(i);f.push({scaler:Q,unit:O})}n.compoundUnit=f,n.endian==="littleEndian"&&t.setLittleEndian(),t.seek(n.paramStart);let c={parameterSize:t.readUint32(),lowIndex:t.readUint32(),highIndex:t.readUint32(),totalSize:t.readUint32()},b=[];for(let D=0;D<c.highIndex+1;D++){t.skip(4);let O=t.readInt16(),Q=Qt(t,5);t.skip(16);let U=Ti[t.readInt32()];t.seek(t.offset-20);let E;switch(U){case"String":E=er(t,16);break;case"Integer":E=t.readInt32(),t.skip(12);break;case"Float":E=t.readFloat64(),t.skip(8);break;case"Complex":E.Real=t.readFloat64(),E.Imag=t.readFloat64();break;case"Infinity":E=t.readInt32(),t.skip(12);break;default:t.skip(16);break}t.skip(4);let w=er(t,28);b.push({name:w.toLowerCase(),scaler:O,unit:Q,value:E,valueType:U})}c.paramArray=b,t.seek(n.dataStart),n.endian==="littleEndian"&&t.setLittleEndian();let u={},y=1,g=0;for(let D of n.dataAxisType)D==="Real_Complex"&&g===0&&(y+=1,g+=1),D==="Complex"&&(y*=2);if(n.dataFormat!=="One_D"&&n.dataFormat!=="Two_D"){r?.error("Only One_D and two_D data formats are implemented yet");return}if(n.dataFormat==="One_D")for(let D=0;D<y;D++){let O;n.dataType==="32Bit Float"?O=R(t,n.dataPoints[0],"readFloat32"):n.dataType==="64Bit Float"&&(O=R(t,n.dataPoints[0],"readFloat64")),D===0&&(u.re=O),D===1&&(u.im=O)}if(n.dataFormat==="Two_D"){let D=32,O=n.dataPoints[0],Q=n.dataPoints[1]/D,U=O/D;for(let E=0;E<y;E++){let w;for(let xe=0;xe<Q;xe++){let q=[];for(let Re=0;Re<U;Re++)for(let B=0;B<D;B++)Re===0?n.dataType==="32Bit Float"?q[B]=R(t,D,"readFloat32"):n.dataType==="64Bit Float"&&(q[B]=R(t,D,"readFloat64")):n.dataType==="32Bit Float"?q[B]=q[B].concat(R(t,D,"readFloat32")):n.dataType==="64Bit Float"&&(q[B]=q[B].concat(R(t,D,"readFloat64")));xe===0?w=q:w=w.concat(q)}y===2&&(E===0&&(u.re=w),E===1&&(u.im=w)),y===4&&(E===0&&(u.re={},u.re.re=w),E===1&&(u.re.im=w),E===2&&(u.im={},u.im.re=w),E===3&&(u.im.im=w))}}let p=[],d=[],h=[],F=[],N=[],M=[],S=[],A=[],x=[],I=[];if(n.dataFormat==="One_D"||n.dataFormat==="Two_D"){let D=Ci(L(c,"actual_start_time").value);D.date&&(d.push(D.date),h.push(D.epoch)),p.push(L(c,"x_domain").value),F.push(C(c,"x_acq_time")),N.push(C(c,"x_sweep")),M.push(C(c,"x_sweep_clipped")),S.push(C(c,"x_resolution")),A.push(C(c,"x_freq")),x.push(C(c,"x_offset")),I.push(n.dataUnits[0].base)}n.dataFormat==="Two_D"&&(p.push(L(c,"y_domain").value),F.push(C(c,"y_acq_time")),N.push(C(c,"y_sweep")),S.push(C(c,"y_resolution")),A.push(C(c,"y_freq")),x.push(C(c,"y_offset")),I.push(n.dataUnits[1].base));let Me={info:{sampleName:L(c,"sample_id").value,creationTime:n.creationTime,revisionTime:n.revisionTime,author:n.author,comment:n.comment,solvent:L(c,"solvent").value,temperature:C(c,"temp_get"),probeName:L(c,"probe_id").value,fieldStrength:C(c,"field_strength"),experiment:L(c,"experiment").value,dimension:n.dataDimensionNumber,nucleus:p,date:d,epoch:h,pulseStrength90:C(c,"x90"),numberOfScans:L(c,"scans").value,relaxationTime:C(c,"relaxation_delay"),dataPoints:n.dataPoints.slice(0,n.dataDimensionNumber),dataOffsetStart:n.dataOffsetStart,dataOffsetStop:n.dataOffsetStop,dataUnits:I,dataSections:Object.keys(u),originFrequency:A,frequencyOffset:x,acquisitionTime:F,spectralWidth:N,spectralWidthClipped:M,dataAxisStart:n.dataAxisStart,dataAxisStop:n.dataAxisStop,resolution:S,decimationRate:L(c,"decimation_rate").value,paramList:JSON.stringify(c.paramArray.map(D=>D.name))},headers:n,parameters:c,data:u};return Me.info.digitalFilter=Oi(c,r),Me}import{formatSpectra as ki,getOneIfArray as qi}from"@zakodium/nmrium-core";import{getGyromagneticRatio as Bi}from"gyromagnetic-ratio";import{isAnyArray as _i}from"is-any-array";import Ui from"lodash.merge";import{normalizeNucleus as $i}from"nmr-processing";import{isAnyArray as K}from"is-any-array";var rr={0:"uint8",1:"uint16",2:"uint32",3:"uint64",4:"int8",5:"int16",6:"int32",7:"int64",8:"float32",9:"float64",10:"complex64",11:"complex128"},nr={0:"scalar",1:"vector",2:"matrix",3:"symetricMatrix",4:"pixel"};function ir(e,r,t={}){let{quantityType:i=0,encoding:n="none",name:s="",unit:o="",quantityName:l="",sparseSampling:a={},from:m=[0],to:f=[-1]}=t;if(K(e))throw new Error("JEOL with an array of data is not yet supported");if(!("re"in e&&"im"in e))throw new Error("Only re/im data is supported");let c=We(e,m,f),{componentLabels:b=c.componentLabels}=t;return{type:"internal",quantityType:nr[i],numericType:rr[r],encoding:n,name:s,unit:o,quantityName:l,componentLabels:b,sparseSampling:a,description:t.description||"",application:t.application||"",components:c.components,dataLength:c.dataLength}}function wi(e){return K(e.re)&&K(e.im)}function vi(e){return!K(e.re[0])}function We(e,r,t){let i=[],n=[],s=[];if(wi(e))if(vi(e)){i[0]=ze(r[0],t[0],e.re.length);let o=new Float64Array(i[0]);for(let l=0;l<i[0];l+=2){let a=l+r[0]*2;o[l]=e.re[a/2],o[l+1]=e.im[a/2]}s.push(o),n.push("complex")}else if(K(e.re[0])){i[0]=Li(r[1],t[1],e.re.length),i[1]=ze(r[0],t[0],e.re[0].length);for(let o=0;o<i[0];o++){let l=new Float64Array(i[1]);for(let a=0;a<i[1];a+=2){let m=a+r[0]*2;l[a]=e.re[o][m/2],l[a+1]=e.im[o][m/2]}s.push(l)}}else throw new Error("check your object");else if(K(e.re.re)){i[0]=ze(r[1],t[1],e.re.re.length);let o=We(e.re,r,t).components,l=We(e.im,r,t).components;for(let a=0;a<i[0]/2;a++)s.push(o[a],l[a])}else throw new Error("check the dimension or the type of data in your array");return{dataLength:i,componentLabels:n,components:s}}function Li(e,r,t){return r-e+1<t?r-e+1:t}function ze(e,r,t){return r-e+1<t?(r-e+1)*2:t*2}async function or(e,r={}){let t=await e.arrayBuffer(),{name:i=H(e.name),keepSource:n=!1}=r,s={spectra:[],molecules:[]},l=Wi(t)[0],{metadata:a,...m}=l.description,f=0,c=m.dimension===1?"1d":"2d",b="NMR SPECTRUM",u=m.dimension===1?m.nucleus[0]:m.nucleus,y=m.spectralWidthClipped[0],g;l.dependentVariables&&(m.dimension===1?g=ji(l):m.dimension===2&&(g=zi(l)));for(let d in m)Array.isArray(m[d])&&m[d].length===1&&(m[d]=m[d][0]);let p={data:g,info:{...m,acquisitionMode:f,experiment:c,type:b,nucleus:u,spectralWidthClipped:y,name:i},meta:a};return n&&(p.sourceSelector={files:[e.relativePath]}),s.spectra=[p],ki(s)}function ji(e){let r=e.dimensions[0],t=e.dependentVariables,i=r.quantityName,n=r.count,s=r.increment.magnitude,o=r.originOffset.magnitude,l=r.coordinatesOffset.magnitude,a=t[0].components[0],m=new Float64Array(n),f=new Float64Array(n);for(let g=a.length-1,p=0;g>0;g-=2)m[p]=a[g-1],f[p++]=a[g];let c={},[b,u]=[0,0];switch(i){case"frequency":u=0+l/o*1e6,b=s/o*1e6,c.re=m,c.im=f;break;case"time":u=o,b=s,c.re=m.reverse(),c.im=f.reverse().map(g=>-g);break;default:break}let y=[];for(let g=0;g<n;g++)y.push(u+g*b);return c.x=y,c}function zi(e){let r=e.dimensions,t=e.dependentVariables,i=r[0].quantityName,n=[],s=[],o=Number.MIN_SAFE_INTEGER,l=Number.MAX_SAFE_INTEGER,a=Number.MAX_SAFE_INTEGER,m=Number.MIN_SAFE_INTEGER;for(let b of t[0].components){let u=new Float64Array(b.length/2),y=new Float64Array(b.length/2);for(let g=b.length-1,p=0;g>0;g-=2){let d=b[g-1],h=b[g];d>o&&(o=d),d<l&&(l=d),h>m&&(m=h),h<a&&(a=h),u[p]=d,y[p++]=h}if(i==="frequency")n.push(u),s.push(y);else{let g=u.length,p=new Float64Array(y.length);for(let d=0,h=g-1;d<g;d++)p[d]=-y[h--];n.push(u.reverse()),s.push(p)}}let f={re:{z:n,minZ:l,maxZ:o},im:{z:s,minZ:a,maxZ:m}},c=["X","Y"];for(let b=0;b<c.length;b++){let u=r[b].count,y=r[b].increment.magnitude,g=r[b].originOffset.magnitude,p=r[b].coordinatesOffset.magnitude,d=c[b];for(let h of["re","im"])i==="frequency"?(f[h][`min${d}`]=0+p/g*1e6,f[h][`max${d}`]=u*(y/g)*1e6):(f[h][`min${d}`]=g,f[h][`max${d}`]=u*y)}return f}function Wi(e){let r=tr(e),t=r.info,i=r.headers,n=r.parameters,{dimension:s}=t,o={};for(let p of n.paramArray){let{name:d,value:h}=p;o[d]=ar(h,s)}delete n.paramArray;let l=r.data,a={};a.title=`title: ${i.title} / comment: ${i.comment} / author:${i.author} / site: ${i.site}`,a.nucleus=t.nucleus.map($i),a.sampleName=t.sampleName,a.date=t.date,a.epoch=t.epoch,a.localeDate=new Date(qi(t.epoch)).toLocaleString(),a.author=t.author,a.solvent=t.solvent,a.temperature=t.temperature.magnitude,a.probeName=t.probeName||"",a.fieldStrength=t.fieldStrength.magnitude;let m=a.nucleus.map(Bi);a.baseFrequency=m.map(p=>t.fieldStrength.magnitude*p/(2*Math.PI*1e6)),a.pulseSequence=t.experiment,a.temperature=t.temperature?.unit?.toLowerCase()==="celsius"?273.15+t.temperature.magnitude:t.temperature.magnitude,a.digitalFilter=t.digitalFilter,a.pulseStrength90=1/(4*t.pulseStrength90.magnitude),a.numberOfScans=t.numberOfScans,a.relaxationTime=t.relaxationTime.magnitude,a.isComplex=t.dataSections.includes("im"),a.isFid=t.dataUnits[0]==="Second",a.isFt=t.dataUnits[0]==="Ppm",a.dimension=t.dimension,a.originFrequency=t.originFrequency.map(p=>p.magnitude/1e6).slice(0,s),a.numberOfPoints=t.dataPoints.slice(0,1),a.frequencyOffset=t.frequencyOffset.map((p,d)=>p.magnitude*a.baseFrequency[d]).slice(0,s),a.acquisitionTime=t.acquisitionTime.map(p=>p.magnitude).slice(0,s),a.spectralWidth=t.spectralWidth.map((p,d)=>p.magnitude/t.originFrequency[d].magnitude*1e6).slice(0,s),a.spectralWidthClipped=t.spectralWidthClipped.map((p,d)=>p.magnitude/a.baseFrequency[d]*1e6).slice(0,s);let f=[],c={},b;for(let p=0;p<t.dimension;p++){if(b={magnitude:t.acquisitionTime[p].magnitude/(t.dataPoints[p]-1),unit:"s"},t.dataUnits[p]==="Second")c.quantityName="time",c.originOffset={magnitude:0,unit:"s"},p===0?c.coordinatesOffset={magnitude:t.digitalFilter*b.magnitude,unit:"s"}:c.coordinatesOffset={magnitude:0,unit:"s"},c.reciprocal={originOffset:{magnitude:t.originFrequency[p].magnitude,unit:"Hz"},quantityName:"frequency",coordinatesOffset:{magnitude:t.frequencyOffset[p].magnitude*t.originFrequency[p].magnitude/1e6,unit:"Hz"}};else if(t.dataUnits[p]==="Ppm"){c.quantityName="frequency";let d=t.originFrequency[p].magnitude;c.originOffset={magnitude:d,unit:"Hz"};let h=t.dataOffsetStart[p],N=t.dataOffsetStop[p]-h+1;b={magnitude:Xi(t,p)/(N-1),unit:"Hz"};let A=t.dataAxisStop[p]*d/1e6;c.coordinatesOffset={magnitude:A,unit:"Hz"},N!==t.dataPoints[p]&&(t.dataPoints[p]=N)}p===0?c.description="direct dimension":c.description="indirect dimension",f.push({label:String(i.dataAxisTitles[p]),count:Number(t.dataPoints[p]),increment:b,type:"linear",description:String(c.description)||"",application:c.application||{},coordinatesOffset:c.coordinatesOffset||0,originOffset:c.originOffset||0,quantityName:String(c.quantityName)||"",reciprocal:c.reciprocal||{},period:c.period||0,complexFFT:c.complexFFT||!1})}let u=[];u.push(ir(l,11,{unit:"none",quantityName:"relative intensity",from:t.dataOffsetStart,to:t.dataOffsetStop}));let y={...a};return delete y.paramList,y.metadata={...sr(i,s),...sr(n,s),...Ui({},o)},[{timeStamp:Date.now(),description:y,dimensions:f,dependentVariables:u}]}function Xi(e,r){let{spectralWidth:t,spectralWidthClipped:i}=e;return i[r].magnitude!=="NA"?i[r].magnitude:t[r].magnitude}function sr(e,r){let t={};for(let i in e)t[i]=ar(e[i],r);return t}function ar(e,r){return _i(e)?r>1?e.slice(0,r):e[0]:e}var Fe=class{id="@zakodium/nmrium-core-plugins#JEOLLoaderPlugin";version=1;migrations=[];onReadProcess;constructor(){this.onReadProcess={supportedExtensions:["jdf"],onFile:this.onReadProcessFile.bind(this)}}onReadProcessFile(r,t={}){let{logger:i,keepSource:n}=t;return i?.debug(`Reading JEOL file: ${r.name}`),or(r,{name:r.name,keepSource:n,logger:i})}};function Xe(){return new Fe}var Se=class{id="@zakodium/nmrium-core-plugins#MolfileLoaderPlugin";version=1;migrations=[];onReadProcess;constructor(){this.onReadProcess={supportedExtensions:["mol"],onFile:this.onReadProcessFile.bind(this)}}onReadProcessFile(r,t={}){let{logger:i}=t;return i?.debug(`Reading molfile file: ${r.name}`),Ct(r,{logger:i})}};function Ve(){return new Se}import{getSDF as Zi,nmrRecordToJSON as Ki}from"nmredata";import{generateID as mr}from"@zakodium/nmrium-core";import{generateID as lr}from"@zakodium/nmrium-core";import{xyIntegration as Vi}from"ml-spectra-processing";function cr(e,r){let{x:t,re:i}=r.data;return e.map(n=>{let s=Vi({x:t,y:i},{from:n.from,to:n.to}),o=[];for(let l of n.signals||[]){let{kind:a=null,id:m,js:f=[],diaIDs:c=[],...b}=l;o.push({...b,kind:a||"signal",js:f,id:m||lr(),diaIDs:c})}return{...n,id:n.id||lr(),kind:o?.[0].kind||"signal",absolute:s,signals:o}})}function ur(e,r){let t=[],{baseFrequency:i=500}=r.info;for(let n of e){let{delta:s,diaIDs:o=[],multiplicity:l="",integration:a=0}=n,m=n.jCoupling||[],f=Ji({delta:s,js:m,frequency:i});if(m&&l&&m.length===l.length){m.sort((c,b)=>b.coupling-c.coupling);for(let c=0;c<m.length;c++)m[c].multiplicity=l[c]}t.push({id:mr(),...f,integration:a,signals:[{id:mr(),js:m,delta:s,diaIDs:o,multiplicity:l}]})}r.ranges.values=cr(G(t),r)}function Ji(e){let{delta:r,js:t=[],frequency:i}=e,n=.5;for(let s of t)n+=s.coupling;return n/=i,{from:r-n,to:r+n}}import{generateID as pr}from"@zakodium/nmrium-core";var Yi=["x","y"],Hi={x:0,y:0};function fr(e,r,t={}){let i=[],{shift:n=Hi}=t,{originFrequency:s=[400,400]}=r.info,o={x:s[0],y:s[1]};for(let l of e){let a={x:{},y:{},id:pr(),kind:"signal"},m={id:pr(),kind:"signal",peaks:[]},f={x:10,y:10};for(let c of Yi){let{coupling:b=[],delta:u,diaIDs:y=[]}=l[c];for(let g of b)f[c]+=g.coupling;if(l.activeCoupling){let{activeCoupling:g=[]}=l;for(let p of g)f[c]+=p.coupling}f[c]/=o[c],a[c]={from:u-f[c],to:u+f[c]},m[c]={delta:u,diaIDs:y,originalDelta:u-n[c]}}i.push({...a,signals:[m]})}r.zones.values=i}function dr(e){return Gi(e.data)}function Gi(e){return"rr"in e||!("x"in e)&&"re"in e}async function gr(e,r,t={}){let i={spectra:[],molecules:[]},n=await Qi(e,r,t);if(n.spectra.length>0){let{spectra:s,molecules:o,usedFiles:l}=n;i.spectra.push(...s),i.molecules.push(...o);let a=e.files.length;for(let m=a-1;m>=0;m--){let f=e.files[m].relativePath;!f.match(/acqu.*/s)&&l.includes(f)&&e.files.splice(m,1)}}return i}async function Qi(e,r,t){let i=[],n=await Zi(e),s={spectra:[],molecules:[]};if(n.length===0)return{...s,usedFiles:i};let o=[];for(let a of n){let m=Ki({sdf:a,fileCollection:e}).then(f=>{let{spectra:c,molecules:b=[]}=f;return i.push(a.root+a.filename),s.molecules.push(...b),es(c,r,t)});o.push(m)}let l=await Promise.allSettled(o);for(let a of l)a.status==="fulfilled"?(s.spectra.push(...a.value.spectra),i.push(...a.value.usedFiles)):a.reason&&t?.logger?.error(a.reason);return{...s,usedFiles:i}}async function es(e,r,t){let i=[],n=[],s={spectra:[],molecules:[]};for(let o of e){let l=ts(o.source,r,t).then(a=>{let{spectra:m,files:f}=a;i.push(...f);for(let c of m)dr(c)?fr(o.signals,c):ur(o.signals,c);s.spectra.push(...m)});n.push(l)}return await Promise.allSettled(n),{...s,usedFiles:i}}async function ts(e,r,t={}){let{file:i,jcampURL:n}=e,{converter:s}=t;if(n){let a=await rs(n,r,s?.jcamp);if(a)return{...a,files:[]}}let o=[];for(let a of i||[])o.push(ns(a,t).then(m=>({...m,files:a.fileCollection.files.map(f=>f.relativePath)})));let l=await Promise.allSettled(o);for(let a of l){if(a.status==="fulfilled")return a.value;a.reason&&t?.logger?.error(a.reason)}return{spectra:[],molecules:[],files:[]}}async function rs(e,r,t={}){let i={entries:[{relativePath:e}]},n={name:H(e||""),xy:!0,noContours:!0,...t},{data:s}=await r.readFromWebSource(i,n);return s}async function ns(e,r={}){let{converter:t,sourceSelector:i}=r;switch(e.type){case"jcamp":return ye(e.fileCollection.files[0],{name:e?.fileCollection.files[0].name||"",converter:t?.jcamp,selector:i?.jcamp,logger:r.logger,keepSource:r.keepSource});case"brukerFiles":return de(e.fileCollection,{converter:t?.bruker,selector:i});default:throw new Error("There is not a supported source")}}var Ne=class{constructor(r){this.core=r;this.onReadProcess={onFiles:this.onReadProcessFiles}}id="@zakodium/nmrium-core-plugins#NMReDATALoaderPlugin";version=1;migrations=[];onReadProcess;onReadProcessFiles=(r,t)=>gr(r,this.core,t)};function Je(e){return new Ne(e)}import{parse as is}from"sdf-parser";function hr(e,r={}){let{mixedEOL:t}=r,{molecules:i}=is(e,{mixedEOL:t}),n=[];for(let{molfile:s}of i){let o=Y(s);n.push(...o)}return n}async function yr(e,r={}){let{logger:t,mixedEOL:i}=r,n=await e.text(),s=hr(n,{mixedEOL:i}),o={molecules:s,spectra:[]};return t&&t[s.length>0?"info":"debug"](`Loaded ${o.molecules.length} molecules from the ${e.name} file`),o}var Pe=class{id="@zakodium/nmrium-core-plugins#SDFLoaderPlugin";version=1;migrations=[];onReadProcess;constructor(){this.onReadProcess={supportedExtensions:["sdf"],onFile:this.onReadProcessFile.bind(this)}}onReadProcessFile(r,t={}){let{logger:i}=t;return i?.debug(`Reading sdf file: ${r.name}`),yr(r,{logger:i})}};function Ye(){return new Pe}import{Molecule as ss}from"openchemlib";function br(e){let r=[],t=e.split(/\r?\n/).filter(Boolean);for(let i of t){let s=ss.fromSmiles(i).toMolfile();r.push({molfile:s})}return r}async function Fr(e,r={}){let t=await e.text(),i=br(t),n={molecules:i,spectra:[]};return r.logger?.info(`Found ${i.length} molecules from the ${e.name} file`),n}var De=class{id="@zakodium/nmrium-core-plugins#SMILESLoaderPlugin";version=1;migrations=[];onReadProcess;constructor(){this.onReadProcess={supportedExtensions:["smi","smiles"],onFile:this.onReadProcessFile.bind(this)}}onReadProcessFile(r,t={}){let{logger:i}=t;return Fr(r,{logger:i})}};function He(){return new De}import{formatSpectra as Ss}from"@zakodium/nmrium-core";import{createFromToArray as os}from"ml-spectra-processing/utils";function as(e){e.setLittleEndian();let r=e.offset,t=32*3;e.offset=t/8;let i=e.readInt32(),n=[2,4],s=[2**25,2**26];if(!n.includes(i))if(s.includes(i))e.setBigEndian();else throw new Error(`Unexpected value of eBytes (${i}). Expect one of
9
- ${n.concat(s).join(",")}`);return e.offset=r,e.isBigEndian()?"BE":"LE"}var Sr=class{storesData;isSpectrum;isInt32;isFloat32;isComplex;isHypercomplex;isBaselineCorrected;constructor(e){if(this.storesData=(e&1)!==0,!this.storesData)throw new Error("No data stored in file. Exiting...");if(this.isSpectrum=(e&2)!==0,this.isSpectrum)throw new Error("Script only analyzes FIDs. Found spectrum.");if(this.isInt32=(e&4)!==0,this.isFloat32=(e&8)!==0,this.isComplex=(e&16)!==0,this.isHypercomplex=(e&32)!==0,this.isHypercomplex)throw new Error("Script does not analyze hypercomplex data (yet).");this.isBaselineCorrected=(e&64)!==0}},ls=class extends Sr{moreBlocks;npComplex;nfComplex;niComplex;ni2Complex;constructor(e){super(e),this.moreBlocks=(e&128)!==0,this.npComplex=(e&256)!==0,this.nfComplex=(e&512)!==0,this.niComplex=(e&1024)!==0,this.ni2Complex=(e&2048)!==0}},cs=class extends Sr{isAcqPar;isSecondFT;isTransformed;is3D;isNp;isNf;isNi;isNi2;constructor(e){super(e),this.isAcqPar=(e&128)!==0,this.isSecondFT=(e&256)!==0,this.isTransformed=(e&512)!==0,this.is3D=(e&1024)!==0,this.isNp=(e&2048)!==0,this.isNf=(e&4096)!==0,this.isNi=(e&8192)!==0,this.isNi2=(e&16384)!==0}},ms=class{lines;length;index;eol;constructor(e,r={}){let{eol:t=`
10
- `,index:i=0}=r;this.eol=t,this.index=i,this.lines=e.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(e){let r=this.lines.slice(this.index,this.index+e);return this.index+=e,r}},us=class{softwareVersion;typeOfFile;vendorIdStatus;constructor(e){this.softwareVersion=e&2**6-1,this.typeOfFile={fidFile:(e&64)!==0,dataFile:(e&128)!==0,data3DFile:(e&256)!==0},this.vendorIdStatus={isVar:(e&0)!==0,isQOne:(e&2048)!==0,isMakeFid:(e&4096)!==0,isJeol:(e&8192)!==0,isBru:(e&16384)!==0,isMag:(e&6144)!==0,isOx:(e&10240)!==0,ipVers:(e&63)!==0,ipFileId:(e&1984)!==0,ipVendorId:(e&30720)!==0}}},ps=class{npPhMode;npAvMode;npPwrMode;nfPhMode;nfAvMode;nfPwrMode;niPhMode;niAvMode;niPwrMode;ni2PhMode;ni2AvMode;ni2PwrMode;niPaMode;ni2PaMode;constructor(e){this.npPhMode=(e&1)!==0,this.npAvMode=(e&2)!==0,this.npPwrMode=(e&4)!==0,this.nfPhMode=(e&16)!==0,this.nfAvMode=(e&32)!==0,this.nfPwrMode=(e&64)!==0,this.niPhMode=(e&256)!==0,this.niAvMode=(e&512)!==0,this.niPwrMode=(e&1024)!==0,this.ni2PhMode=(e&8)!==0,this.ni2AvMode=(e&256)!==0,this.ni2PwrMode=(e&8192)!==0,this.niPaMode=(e&16384)!==0,this.ni2PaMode=(e&32768)!==0}},fs=class{scale;status;index;mode;ctCount;lpVal;rpVal;lvl;tlt;data;constructor(e,r,t){t&&(e.offset=t),this.scale=e.readInt16(),this.status=new ls(e.readInt16()),this.index=e.readInt16(),this.mode=new ps(e.readInt16()),this.ctCount=e.readInt32(),this.lpVal=e.readFloat32(),this.rpVal=e.readFloat32(),this.lvl=e.readFloat32(),this.tlt=e.readFloat32(),this.data=ds(e,r)}};function ds(e,r){let{np:t,nTraces:i,status:{isFloat32:n,isInt32:s}}=r;return n?Ge(e,i,t,"readFloat32"):s?Ge(e,i,t,"readInt32"):Ge(e,i,t,"readInt16")}function Ge(e,r,t,i){let n=[],s;i==="readFloat32"?s={re:new Float32Array(t/2),im:new Float32Array(t/2)}:i==="readInt32"?s={re:new Int32Array(t/2),im:new Int32Array(t/2)}:s={re:new Int16Array(t/2),im:new Int16Array(t/2)};for(let o=0;o<r;o++){for(let l=0;l<t;l+=2)s.re[l>>>1]=e[i](),s.im[l>>>1]=e[i]();n[o]=s}return n}var gs=class{nBlocks;nTraces;np;eBytes;tBytes;bBytes;version;status;nBlockHeaders;constructor(e){e.offset=0,this.nBlocks=e.readInt32(),this.nTraces=e.readInt32(),this.np=e.readInt32(),this.eBytes=e.readInt32(),this.tBytes=e.readInt32(),this.bBytes=e.readInt32(),this.version=new us(e.readInt16()),this.status=new cs(e.readInt16()),this.nBlockHeaders=e.readInt32()}},hs=class{name;subType;basicType;maxValue;minValue;stepSize;gGroup;dGroup;protection;active;intptr;constructor(e){let r=e.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 ys(e){let r=[],t=new ms(e.readChars(e.length));for(;t.index<t.length-1;){let i=[],n=[],s=new hs(t.readLine()),o=t.readLine();if(s.basicType!==0){if(s.basicType===1)i=o.split(" ").slice(1).map(m=>Number.parseFloat(m));else if(s.basicType===2){i=o.split('"').slice(1,2);let m=Number.parseInt(o.split(" ")[0],10);for(;m>1;)i.push(t.readLine().split('"')[1]),m--}}let l=t.readLine(),a=Number.parseInt(l.split(" ")[0],10);a!==0&&(s.basicType===1?n=l.split(" ").slice(1):s.basicType===2&&(n=l.split('"').filter((m,f)=>f%2===1))),r.push({...s,values:i,enumerable:a,enumerables:n})}return r}async function Nr(e){let r={};function t(a,m){return a.then(f=>{r[m]=f})}let i=[];for(let a of e)switch(a.name.toLowerCase()){case"fid":{i.push(t(a.arrayBuffer(),"fidB"));break}case"procpar":{i.push(t(a.arrayBuffer(),"procparB"));break}default:break}if(await Promise.all(i),!r.fidB||!r.procparB)throw new RangeError("fid and procpar must exist.");let n=new v(r.fidB);as(n);let s=new gs(n);if(s.nBlocks!==1)throw new Error("We currently do not support 2D varian spectra ");let o=ys(new v(r.procparB)),l;for(let a of o)if(a.name==="at"){l=a.values[0];break}if(typeof l!="number")throw new Error("acquisition time parameter must exist and be a number.");{let a=os({from:0,to:l,length:s.np/2,distribution:"uniform"}),m=new fs(n,s);return{meta:s,fid:m,procpar:o,x:a}}}import{FileCollection as Ns}from"filelist-utils";import{isAnyArray as Ps}from"is-any-array";import{xMultiply as Ds}from"ml-spectra-processing";import{normalizeNucleus as bs}from"nmr-processing";function Pr(e,r){let{meta:t,procpar:i}=e,n={};for(let h of i)n[h.name]=h.values;let s={},o={},{np:l,solvent:a,sfrq:m,reffrq:f,temp:c,rp:b,sw:u,rfl:y,rfp:g}=n;P(s,"numberOfPoints",l&&Number(_(l))/2),P(s,"solvent",_(a)),P(s,"originFrequency",_(m)),P(s,"baseFrequency",_(f)),(Number.isNaN(s.originFrequency)||s.originFrequency===0)&&(s.originFrequency=400,r?.warn("The frequency could not be determined and was set to 400MHz")),P(s,"temperature",_(c)),P(s,"phc0",b&&Number(b[0])),P(o,"rfl",y&&Number(_(y))),P(o,"rfp",g&&Number(_(g))),P(o,"sw",u&&Number(_(u)));for(let h in o){let F=o[h];Array.isArray(F)&&F.length===1&&(o[h]=F[0])}if(!("baseFrequency"in s)&&"originFrequency"in s){let h=Number.parseFloat(s.originFrequency);if(["sw","rfl","rfp"].every(F=>F in o)){let{sw:F=1,rfl:N=1,rfp:M=1}=Fs(o,["sw","rfl","rfp"]);P(s,"baseFrequency",h-(F/2-N+M)/1e6)}else P(s,"baseFrequency",h)}let{baseFrequency:p,originFrequency:d}=s;P(s,"frequencyOffset",(d-p)*1e6),P(s,"spectralWidth",u&&Number(u[0])/s.baseFrequency);for(let h in s)s[h].length===1&&(s[h]=s[h][0]);return n.tn&&(s.nucleus=n.tn.map(bs)),s.dimension=1,s.isFid=!t.status.isSpectrum,{info:s,meta:{...o,...Dr(t),...n}}}function _(e){return e&&(Array.isArray(e)?e[0]:e)}function Fs(e,r){let t={};for(let i of r){let n=e[i];n&&typeof n=="number"&&(t[i]=n)}return t}function Dr(e){let r={};for(let t of Object.keys(e)){let i=e[t];typeof i=="object"&&i!==null&&i.constructor&&i.constructor!==Object?r[t]=Dr(i):r[t]=i}return r}function Ar(e){let r={},t=new Set(e.files.map(i=>i.relativePath));for(let i of e){let n=i.name.toLowerCase();if(n.match(/^(?:fid|procpar|text|log)$/)){if(n.match(/^(?:fid|text|log)$/)){let l=i.relativePath.replace(/(?:fid|text|log)$/,"procpar");if(!t.has(l))continue}let s=i.relativePath.split("/"),o=s.slice(0,-1).join("/");r[o]||(r[o]={name:s.at(-2),files:[]}),r[o].files.push(i)}}return Object.values(r)}async function Mr(e,r={}){let{keepSource:t,logger:i}=r,n=Ar(e);i&&i.debug(`Found ${Object.keys(n).length} varian experiments`);let s=[],o={spectra:[],molecules:[]};for(let a of n){let{name:m,files:f}=a,c=new Ns(f),b=Nr(c).then(u=>{let{info:y,meta:g}=Pr(u),p=u.fid.data[0],d=Ps(p.im),h={data:{...p,x:u.x},meta:g,info:{isComplex:d,name:m,...y},display:{name:m}};if(y.isFid&&d){let{im:F}=h.data;Ds(F,-1,{output:F})}f&&t&&(h.sourceSelector={files:f.map(F=>F.relativePath)}),o.spectra.push(h)});s.push(b)}let l=await Promise.allSettled(s);for(let a=0;a<l.length;a++){let m=l[a];if(m.status==="rejected"&&m.reason){let f=n[a].name;i?.warn(`Varian data: ${f}, fails with: ${m.reason}`)}}return o.spectra.length>0&&i?.info(`Loaded ${o.spectra.length} spectra from Varian files`),Ss(o)}var Ae=class{id="@zakodium/nmrium-core-plugins#VarianLoaderPlugin";version=1;migrations=[];onReadProcess;constructor(){this.onReadProcess={onFiles:this.onReadProcessFiles}}onReadProcessFiles=(r,t)=>{let{keepSource:i,logger:n}=t??{};return Mr(r,{keepSource:i,logger:n})}};function Ze(){return new Ae}function Ms(e,r=[]){return[Je(e),Ze(),Be(),je(),Ve(),Ye(),He(),Xe(),Oe()].concat(r)}function xs(){let e=new As;return e.registerPlugins(Ms(e)),e}import{getOneIfArray as Rr}from"@zakodium/nmrium-core";import{from1DNMRVariables as Rs}from"convert-to-jcamp";function xr(e,r){return e.filters.find(t=>t.name===r)}function Is(e,r={}){let{info:t,meta:i,data:n}=e,{onlyReal:s=!1}=r,{isFid:o,spectralWidth:l}=t,a=Rr(t.baseFrequency||t.originFrequency),{x:m,re:f,im:c}=n,b=new Float64Array(f),u=!s&&c?new Float64Array(c):void 0,y={};re(y,"SW",l),re(y,"BF1",a);let g=xr(e,"fft")?.enabled,p={originFrequency:t.originFrequency,dataType:!t.isFid||g?"NMR SPECTRUM":"NMR FID",dataClass:!s&&c?"NTUPLES":"XYDATA"};if(o){let F=e.filters.find(N=>N.name==="digitalFilter");if(F&&!g){let{value:{digitalFilterValue:N},enabled:M}=F;if(M){let S=Math.floor(N);b.set(f.slice(f.length-S)),b.set(f.slice(0,f.length-S),S),c&&u&&(u.set(c.slice(c.length-S)),u.set(c.slice(0,c.length-S),S))}}re(p,"decim",t.decim),re(p,"dspfvs",t.dspfvs),re(p,"digitalFilter",t.digitalFilter)}let d={xyEncoding:"DIFDUP",info:{...t,...p},meta:{...i,...y}},h={x:{data:m,label:t.isFid?"TIME":"FREQUENCY",units:t.isFid?"second":"HZ",symbol:"X"},r:{data:b,label:`${t.isFid?"FID":"SPECTRUM"}/REAL`,units:"ARBITRARY UNITS",symbol:"R"}};return u&&(h.i={data:u,label:`${t.isFid?"FID":"SPECTRUM"}/IMAG`,units:"ARBITRARY UNITS",symbol:"I"}),Rs(h,d)}function re(e,r,t){t!==void 0&&(e[r]=Rr(t))}export{ie as AutoPostProcessingPlugin,ge as BrukerLoaderPlugin,be as JCAMPDXLoaderPlugin,Fe as JEOLLoaderPlugin,Se as MolfileLoaderPlugin,Ne as NMReDATALoaderPlugin,Pe as SDFLoaderPlugin,De as SMILESLoaderPlugin,Ae as VarianLoaderPlugin,Oe as autoPostProcessing,Be as brukerLoader,xs as default,xs as init,je as jcampDXLoader,Xe as jeolLoader,Ve as molfileLoader,Je as nmreDATALoader,Zt as processJCAMPDX,hr as readSDF,br as readSMILES,Ms as recommended,Ye as sdfLoader,He as smilesLoader,Is as spectrum1DToJCAMPDX,Ze as varianLoader};
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&&Ye(r,Date.parse(e.LONGDATE)),S(r,"pulseSequence",e[".PULSESEQUENCE"]||e[".PULPROG"]||e[`${n}PULPROG`]);let p=e[`${n}OWNER`];if(p&&S(r,"owner",p.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 g=e[`${n}.ACQUISITIONSCHEME`]||e[`${n}FnMODE`];if(g&&S(r,"acquisitionScheme",jt(Z(g,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(Jt(y)&&y.length>1){let F=e[`${n}SYMBOL`].split(","),D=F.findIndex(x=>x.includes("2")),N=F.findIndex(x=>x.includes("1"));D!==-1&&N!==-1?r.originFrequency=[y[D],y[N]]:r.originFrequency=y.slice()}else if(typeof y=="number"){let F=Ni(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")?Mi(r,e,{...t,separator:s}):c.includes("nanalysis")&&Ii(r,e),c!=="mnova"&&c!=="mestre"){let m=r.nucleus[0],y=Pi(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 x=0;x<r.scaleFactor.length;)r.scaleFactor[x]=2**r.scaleFactor[x++];if(!("baseFrequency"in r)&&"originFrequency"in r?S(r,"baseFrequency",r.originFrequency):r.baseFrequency=de(r.baseFrequency),!["baseFrequency","originFrequency"].some(x=>!r[x])&&y){let{baseFrequency:x}=r,P=2*Math.PI*(x[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 x=typeof e.LAST=="string"?e.LAST.replace(" ","").split(",")[0]:e.LAST;E(r,"acquisitionTime",x)}if(!r.acquisitionTime&&u(["numberOfPoints","spectralWidth"])){let{spectralWidth:x,originFrequency:P}=r;S(r,"acquisitionTime",Number((F[0]-1)/(2*x[0]*P[0])))}if(e[`${n}P`]){let x=1e6/(Z(e[`${n}P`]).split(s)[1].split(" ")[1]*4);S(r,"pulseStrength90",x)}if(e[`${n}D`]){let x=Z(e[`${n}D`]).split(s)[1].split(" ")[1];E(r,"relaxationTime",x)}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:x,dspfvs:P,decim:A}=r,I=$t(x?.[0]??0,P?.[0],A?.[0]);S(r,"digitalFilter",I)}let N;if(u(["numberOfPoints","spectralWidth"])){let{spectralWidth:x,numberOfPoints:P}=r;r.isFid?N=P.map(A=>r.acquisitionTime[0]/(A-1)):N=P.map((A,I)=>x[I]/(A-1))}if(S(r,"increment",N),e[`${n}DATE`]){let x=Z(e[`${n}DATE`]),P=Number.parseInt(x,10)*1e3;Number.isNaN(P)?Ye(r,Date.parse(x)):Ye(r,P)}r.solvent||S(r,"solvent",Z(e[`${n}SOLVENT`]))}!("baseFrequency"in r)&&"originFrequency"in r&&S(r,"baseFrequency",r.originFrequency);let d=r.dimension<2,h="dataClass"in r&&r.dataClass[0].toUpperCase()==="NTUPLES",f=["LAST","FIRST","VARDIM","SYMBOL"].every(m=>`${n}${m}`in e);if(d&&(h||f)&&(S(r,"last",B(e[`${n}LAST`])),S(r,"first",B(e[`${n}FIRST`])),S(r,"varDim",B(e[`${n}VARDIM`])),S(r,"symbols",B(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:D}=r;S(r,"spectralWidth",r.isFid?F/(2*y):Math.abs(y-D)/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:D}=r;S(r,"frequencyOffset",.5*F*D-y)}}if(!("frequencyOffset"in r)&&u(["baseFrequency","originFrequency"])){let{baseFrequency:m,originFrequency:y}=r,F=m.map((D,N)=>(y[N]-D)*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&&Ai(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 Ye(e,t){if(!Number.isNaN(t)){e.epoch=t;let n=new Date(t);e.date=n.toUTCString(),e.localeDate=n.toLocaleString()}}function Ai(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]),p;if(t.isFid){if(["baseFrequency","numberOfPoints","spectralWidth"].some(g=>!(g in t)))return;p=u+(s*.5-c)*a/s}else{let g=Number.parseFloat(t.firstX),d=Number.parseFloat(t.lastX),h=(d+g)/2,f=(d-g)/(s+1),b=f<0?g:d+(c-1)*f;p=(h-b)/l+u}p!==void 0&&!Number.isNaN(p)&&(t.frequencyOffset=p*l)}}function de(e){if(Jt(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 Mi(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 Ii(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 p=0;p<r.length;p+=u){let g=r[p].replace(/T1=/,"");o.push(Number(g))}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 Ei={keepRecordsRegExp:/.*/,keepFiles:!0};async function ye(e,t={}){let n={spectra:[],molecules:[]},{converter:i={},selector:r={},logger:o}=t,s=ze(e,{logger:o,...Oi(r)}),a=[];for(let c of s)a.push(He(c,{...Ei,...i}).then(u=>Ti(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 p=pe(u.value.info);n.spectra.push({...u.value,info:{...u.value.info,...p}})}else if(u.reason){let p=s[c].name;o?.warn(`Bruker data: ${p}, fails with: ${u.reason}`);continue}}return o&&o[n.spectra.length>0?"info":"debug"](`Loaded ${n.spectra.length} spectra from Bruker files`),Ri(n)}function Ti(e,t={}){let{keepSource:n=!1,logger:i}=t,r={...e.info,...e.meta},o=ge(r,{logger:i}),s={},{isFid:a}=o;if(Ci(e)){let d=e.minMax;for(let h in d){let f=d[h];f&&(f.z=_(f.z))}s.components=e.minMax}else o.dimension===1&&(s.components=e.spectra);let{source:l}=e,{expno:c,name:u,files:p}=l;r.vdlist&&(r.vdlistValues=me(r.vdlist));let g={dependentVariables:[s],meta:r,info:{...o,experimentNumber:c,name:u}};return p&&n&&(g.sourceSelector={files:p.map(d=>d.relativePath)}),wi(g,e),g}function Oi(e){let{general:t={},bruker:n={}}=e,{processingNumbers:i,experimentNumbers:r,...o}=n;return{...t,...o,processingNumbers:Xt(i),experimentNumbers:Xt(r)}}function Xt(e){if(e)return e.split(/[^\d]+/).filter(Boolean).map(t=>Number.parseInt(t,10))}function Ci(e){let{info:t}=e;return t.twoD}function wi(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 Ge(){return new he}import{formatSpectra as fo}from"@zakodium/nmrium-core";import{createTree as go}from"jcampconverter";function Vt(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 vi}from"jcampconverter";function Ze(e,t,n){let{dataType:i,children:r}=e,o=i==="LINK"&&r?r:[e];for(let s of o){if(s.dataType==="LINK"){Ze(s,t,n);continue}let a=vi(s.jcamp,n);t.push(...a.flatten)}}function Gt(e,t={}){let n=[],i=Zt(e,t);for(let s of i?e:[])s.dataType==="LINK"?s.children=Ke(s.children,t):s=Ke([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 Ke(e=[],t={}){let{name:n,logger:i,tree:r=[],dataSelection:o="both"}=t,s=[];for(let u of e){let{dataType:p,dataClass:g}=u;if(p==="LINK")u.children=Ke(u.children,t);else if(r.some(d=>{let{dataClass:h=g,dataType:f=p}=d;return g===h&&p===f})){i?.warn(`Skipping ${g} and ${p} ${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(Yt),c=s.some(Ht);for(let u of s){if(o!=="both"&&u.dataType!=="LINK"){if(Yt(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(Ht(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 Ht(e){return e.dataType?.toUpperCase().includes("SPECTRUM")&&e.dataClass&&!e.dataClass.toUpperCase().includes("PEAK")}function Yt(e){return e.dataType?.toUpperCase().includes("FID")}function Zt(e,t={}){let{logger:n,name:i=""}=t;for(let r of e){if(r.dataType==="LINK"&&Zt(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 en}from"@zakodium/nmrium-core";import{parseJcampCS as $i}from"jcampconverter";import*as ji from"openchemlib";import{isMolfileNotEmpty as ki}from"nmr-processing";import{Molecule as Li}from"openchemlib";async function Kt(e,t={}){let n=await e.text(),i=X(n),r={molecules:i,spectra:[]};return i.length===0&&t.logger?.debug(`${e.name} is an empty molfile`),r}function X(e){let t=[];if(!ki(e))return[];let i=Li.fromMolfile(e).toMolfile();return t.push({molfile:i}),t}import{isMolfileNotEmpty as _i}from"nmr-processing";import*as Bi from"openchemlib";import{getDiastereotopicAtomIDsFromMolfile as Ui}from"openchemlib-utils";var qi=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 qi.has(i)&&r!=="peaktable"}function Qt(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:p}=n,{CROSSREFERENCE:g}=r,d=typeof g!="string"?g:g.split(/\r?\n/).map(x=>x.trim()).filter(Boolean),h=d.find(x=>x?.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 f=Number.parseInt(h?.toLowerCase().replace(/_/,"").replace(/structure:\s*blockid\s*=\s*(?<blockId>.*)/,"$<blockId>"),10);if(Number.isNaN(f)||f<1)return c&&c.warn(`Structure block_id not found for ${u} file, assignment object could not be completed`),null;let m=p?.molecules?.find(x=>x.blockId===f)?.molfile??"";if(m===""){let x=t.find(A=>A.info.BLOCKID===f),{MOLFILE:P=""}=x?.meta||{};m=P}if(!_i(m))return c&&c.warn(`Empty molfile for ${u} file with structure block_id = ${f}, assignment object could not be completed`),null;let y=Ui(Bi,m),F=fe({...r,...o},{},"");for(let x=0;x<s.x.length;x++){let P={};for(let A in s){let I=s[A][x];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 D={};for(let x of a){let{delta:P,diaIDs:A}=x,I=`${P}_${A.join("_")}`;if(D[I])D[I].atoms.push(x.atom);else{let{atom:gt,...Le}=x;D[I]={...Le,atoms:[x.atom]}}}let N=[];for(let x of d)x.toLowerCase().includes("spectrum")&&N.push(Number(x.toLowerCase().replace(/_/,"").replace(/.*:\s*blockid=(?<blockId>.*)/,"$<blockId>")));if(N.length===0){for(let x of t)if(be(x)){let{BLOCKID:P}=x.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:f,spectraBlockIDs:N,assignments:Object.values(D),molecule:y.molecule}}function tn(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?Xi(String(o.MOLFILE),t,c):r.jcampCS&&Ji(r,t,c),zi(s,a)&&Wi(t,r,e,i),be(r)&&n.push(r)}}function zi(e,t){return e?.toLowerCase().includes("assignments")&&t?.toLowerCase().includes("assignments")}function Wi(e,t,n,i){let r=Qt(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 Ji(e,t,n){t.molecules||(t.molecules=[]);let i=$i(e,{OCL:ji}),r=X(i?.molfile||"");r.length>0&&t.molecules.push({id:en(),blockId:n,...r[0]})}function Xi(e,t,n){t.molecules||(t.molecules=[]);let i=X(String(e));t.molecules.push({id:en(),blockId:n,...i[0]})}import{generateID as gn}from"@zakodium/nmrium-core";import{matrixMinMaxZ as dn,reimPhaseCorrection as ro}from"ml-spectra-processing";import{xyAutoRangesPicking as io}from"nmr-processing";function V(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 Zi}from"nmr-processing";import{xMaxValue as Vi}from"ml-spectra-processing";function K(e){return e.trim().slice(1,-1).split(/,\s*/).map(t=>t.trim())}var Hi={I:"id",X:"from",Y:"to",Hs:"delta",An:"integration",H:"nbAtoms",C:"multiplicity",N:"assignment","(J)":"js"},nn=["I","X","Y","Hs","An","H","C","N","(J)"];function rn(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=K(i)}return t.comments=n.filter(i=>i.startsWith("$$")).map(i=>i.replace(/^\$\$\s*/,"")),t.headersFromComments=Gi(t.comments),t.data=n.filter(i=>!i.startsWith("$$")).map(K),t.multiplets=Yi(t),t}function Yi(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(nn[r]==="C")o=nn;else return n?.warn("No header found for multiplicity. Skipping parsing of assignment."),[];return Vi(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 p=o[u];c[Hi[p]||p]=l[u]}return c})}function Gi(e){return e.map(t=>t.split(":")[0].trim()).filter(t=>t.length>0)}function on(e,t={}){let{logger:n}=t,i=rn(e),r={multiplets:[],comments:i.comments};for(let o of i.multiplets){let{id:s,from:a,to:l,delta:c,integration:u,nbAtoms:p,multiplicity:g}=o,d={id:s,js:[],multiplicity:"",...Ki({from:a,to:l,delta:c,integration:u,nbAtoms:p})};if(typeof o.js=="string"){let h=o.js.split(/\s+/).map(Number.parseFloat),f=0,b=Zi(g).map(F=>{let D=(F?.multiplicity||1)-1;return f+=D,{value:F.value,multiplicity:F?.multiplicity,js:h.slice(f-D,f)}}),m=b.reduce((F,D)=>F+(D.multiplicity?D.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(D=>D===F.js[0])){y.push(F);continue}if(F.multiplicity!==F.js.length+1){y.push(F);continue}for(let D=0;D<F.multiplicity-1;D++)y.push({value:"d",multiplicity:2,js:[F.js[D]]})}y.sort((F,D)=>D.js[0]-F.js[0]),d.js=y.map(F=>({coupling:F.js[0],multiplicity:F.value}))}typeof o.assignment=="string"&&(d.assignment=eo(o.assignment)),typeof o.multiplicity=="string"&&(d.multiplicity=o.multiplicity),r.multiplets.push(d)}return r}function Ki(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 Qi={quot:'"',apos:"'",comma:",",amp:"&",lpar:"(",rpar:")",lt:"<",gt:">",colon:":",semi:";"};function eo(e){return e.replaceAll(/&(\w+);/gi,(t,n)=>Qi[n.toLowerCase()]||t)}function sn(e){let t=e.split(/\r?\n/).filter(i=>i.trim()!==""),n=[];for(let i of t)if(i.startsWith("(")){let[r,o,s]=K(i).map(Number.parseFloat);n.push({id:r,x:o,y:s})}return n}function an(e,t={}){let n={};if(!e["OBSERVED MULTIPLETS"])return[];let i=on(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=sn(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 cn(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 ln(e){let t={};return".PHASE0"in e&&(t.ph0=Number.parseFloat(e[".PHASE0"]),t.ph1=Number.parseFloat(e[".PHASE1"])),t}function Qe(e){let{ph0:t,ph1:n}=e;return Number.isFinite(t)&&Number.isFinite(n)}import{generateID as mn}from"@zakodium/nmrium-core";function un(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:mn(),signals:[{id:mn(),delta:r,multiplicity:o,diaIDs:s}]})}}import{linearSumAssignment as to}from"linear-sum-assignment";import{xCostMatrix as no}from"ml-spectra-processing";function pn(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}=to(r,{maximaze:!1});return Array.from(o)}function fn(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 p=a;p<n.length;p++){let{delta:g}=n[p];g<=c&&g>=l?(u.push(n[p]),o.push(p)):g>c&&(a=p)}if(u.length>0){let p=s.signals,g=[],d=u.length>1&&p.length>1?pn(p,u):[0];for(let h=0;h<u.length;h++){let f=d[h],{delta:b,multiplicity:m,diaIDs:y}=u[h];f>-1?g.push({...p[f],diaIDs:y}):g.push({delta:b,multiplicity:m,diaIDs:y})}s.signals=g,r.push(s)}}un(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 yn(e,t,n,i,r){let{logger:o}=r,s={components:hn(e)?ao(e,n.isFid):so(e)},{name:a=n.title||`jcamp_${gn()}`}=r,l={dependentVariables:[s],meta:t,info:{...n,name:V(a)}};return oo(e)&&co(l,i,t,e,n,{logger:o}),l}function hn(e){return"minMax"in e}function oo(e){return!hn(e)}function so(e){return e.spectra.map(t=>{let n=_(t.data);return{...t,data:n}})}function ao(e,t){let n={...e.minMax,z:_(e.minMax?.z)};return t?lo(n):{rr:n}}function co(e,t,n,i,r,o){let{assignmentsByBlocks:s}=t,a=ln(n);Qe(a)&&mo(e,a);let l=String(i.info.BLOCKID);if(s?.[l]){let{molecule:c,assignments:u,moleculeBlockID:p}=s[l],g=cn(c,r),d=_(i.spectra[0].data);if(d.x[0]>d.x[1])for(let m of i.spectra)m.data.x.reverse(),m.data.y.reverse();if(Qe(a)&&i.spectra.length>1){let{re:m}=uo(i,a);d.y=m}let{x:h,y:f}=d,b=an(n,o)??io({x:h,y:f},{peakPicking:{frequency:r.originFrequency},ranges:{frequency:r.originFrequency,integrationSum:g}});fn(e,{moleculeId:p,ranges:b,assignments:u,integrationSum:g})}}function lo(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=dn(i),s=dn(r);return{re:{...n,z:i,minZ:o.min,maxZ:o.max},im:{...n,z:r,minZ:s.min,maxZ:s.max}}}function mo(e,t){let{ph0:n,ph1:i}=t;e.filters||(e.filters=[]),e.filters.push({id:gn(),name:"phaseCorrection",value:{ph0:n,ph1:i,absolute:!1},enabled:!0})}function uo(e,t){let{ph0:n,ph1:i}=t,{re:r,im:o}=ro({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 bn(e,t,n){let{logger:i}=n,r=[];for(let o of e)if(o.spectra&&o.spectra.length>0||o.minMax){po(o);let s={...o.info,...o.meta},a=ge(s,{logger:i});if(a.experiment==="wobble_curve")continue;r.push(yn(o,s,a,t,n))}return r}function po(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=Fn(n,{name:e.name,...t});return Vt(i,e,t)}function Fn(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=Gt(go(e),{name:i,...o,logger:s});for(let u of c)yo(u,n,l,i);if(ho(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 fo(n)}function yo(e,t,n,i){let r=[],o=[],s={molecules:[]},{logger:a}=n,l={name:i,logger:a};Ze(e,o,n),tn(o,s,r,l),t.spectra.push(...bn(r,s,l)),t.molecules.push(...s.molecules)}function ho(e,t){t.index!==void 0&&(e.spectra=e.spectra.slice(t.index,t.index+1))}var xe=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 et(){return new xe}function xn(e){if(e===void 0)return{epoch:null,date:""};let t=e*1e3;return{epoch:t,date:new Date(t).toUTCString()}}var Dn={0:"bigEndian",1:"littleEndian"},Sn={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"},Pn={0:"64Bit Float",1:"32Bit Float",2:"Reserved",3:"Reserved"},Nn={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"},An={0:"None",1:"Real",2:"TPPI",3:"Complex",4:"Real_Complex",5:"Envelope"},Mn={"-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"},In={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},Rn={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"},tt={0:"Ranged",1:"Listed",2:"Sparse",3:"Listed"};function C(e,t){return e.paramArray.find(n=>n.name===t)}function En(e,t){let n=e.paramArray.find(f=>f.name==="orders"),i=e.paramArray.find(f=>f.name==="factors"),r=e.paramArray.find(f=>f.name==="x_sweep"),o=e.paramArray.find(f=>f.name==="x_acq_time"),s=e.paramArray.find(f=>f.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,p=new Int8Array(l),g=1,d=0;for(let f=0;f<l;f++)p[f]=Number.parseInt(i.value.slice(d,d+1),10),d+=1;for(let f=0;f<l;f++){let b=1;for(let m=f;m<l;m++)b*=p[m];u+=(Number.parseInt(a.slice(g,g+c),10)-1)/b,g+=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=In[i.prefix];return{magnitude:n.value*10**o,unit:r}}function nt(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 De(e,t){let n=[];for(let i=0;i<t;i++){let r=e.readByte(),o=r>>4,s=Mn[o],a=r&15,l=e.readInt8(),c=Rn[l];n.push({prefix:s,power:a,base:c})}return n}function U(e,t){let n=[];for(let i=0;i<t;i++){let r=e.readChar();r!=="\0"&&n.push(r)}return n.join("")}function rt(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 Tn(e,t){let n=[];for(let i=0;i<t;i++)n.push(e.readBoolean());return n}function On(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 Fo(e,t,i)}else if(t.dataFormat==="Two_D"){if(i===2)return xo(e,t);if(i===4)return Do(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 Fo(e,t,n){return n===1?{re:it(e,t)}:{re:it(e,t),im:it(e,t)}}function it(e,t){return t.dataType==="32Bit Float"?M(e,t.dataPoints[0],"readFloat32"):M(e,t.dataPoints[0],"readFloat64")}var v=32;function xo(e,t){let n=t.dataPoints[0],r=t.dataPoints[1]/v,o=n/v;return{re:Y(e,t,r,o),im:Y(e,t,r,o)}}function Do(e,t){let n=t.dataPoints[0],r=t.dataPoints[1]/v,o=n/v;return{re:{re:Y(e,t,r,o),im:Y(e,t,r,o)},im:{re:Y(e,t,r,o),im:Y(e,t,r,o)}}}function Y(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 Cn(e){let t=e.readChars(8),n=e.readInt8(),i=Dn[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=Pn[c],p=l&63,g=Nn[p],d=e.readInt8(),h=Sn[d],f=M(e,8,"readUint8"),b=M(e,8,"readUint8").map(T=>An[T]),m=De(e,8),y=U(e,124),F=[];for(let T of M(e,4,"readUint8")){let ee=T>>4,qe=T&15;F.push(tt[ee],tt[qe])}let D=M(e,8,"readUint32"),N=M(e,8,"readUint32"),x=M(e,8,"readUint32"),P=M(e,8,"readFloat64"),A=M(e,8,"readFloat64"),I=nt(e),gt=nt(e),Le=U(e,16),cr=U(e,128),lr=U(e,128),mr=U(e,128),yt=[];for(let T=0;T<8;T++)yt.push(U(e,32));let ur=M(e,8,"readFloat64"),pr=M(e,8,"readFloat64"),fr=Tn(e,8);e.skip(3);let dr=!!(e.readByte()>>7),gr=e.readUint32(),yr=e.readUint32(),hr=e.readUint32(),br=e.readUint32(),Fr=M(e,8,"readUint32"),xr=M(e,8,"readUint32"),Dr=e.readUint32(),Sr=e.readUint32()<<32|e.readUint32(),Pr=e.readUint32()<<32|e.readUint32(),Nr=e.readUint32(),Ar=e.readUint32()<<32|e.readUint32(),Mr=e.readUint32(),Ir=e.readUint32()<<32|e.readUint32(),Rr=M(e,8,"readUint8"),ht=[];for(let T=0;T<2;T++){let ee=[],qe=e.readInt16();for(let bt=0;bt<5;bt++)ee.push(e.readInt16());ht.push({scaler:qe,unit:ee})}return{fileIdentifier:t,endian:i,majorVersion:r,minorVersion:o,dataDimensionNumber:s,dataDimensionExist:a,dataType:u,dataFormat:g,dataInstrument:h,translate:f,dataAxisType:b,dataUnits:m,title:y,dataAxisRanged:F,dataPoints:D,dataOffsetStart:N,dataOffsetStop:x,dataAxisStart:P,dataAxisStop:A,creationTime:I,revisionTime:gt,nodeName:Le,site:cr,author:lr,comment:mr,dataAxisTitles:yt,baseFreq:ur,zeroPoint:pr,reversed:fr,annotationOK:dr,historyUsed:gr,historyLength:yr,paramStart:hr,paramLength:br,ListStart:Fr,ListLength:xr,dataStart:Dr,dataLength:Sr,contextStart:Pr,contextLength:Nr,annoteStart:Ar,annoteLength:Mr,totalSize:Ir,unitLocation:Rr,compoundUnit:ht}}var So={0:"String",1:"Integer",2:"Float",3:"Complex",4:"Infinity"};function wn(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=De(e,5);e.skip(16);let c=e.readInt32(),u=So[c];e.seek(e.offset-20);let p;switch(u){case"String":p=rt(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 g=rt(e,28);o.push({name:g.toLowerCase(),scaler:a,unit:l,value:p,valueType:u})}return{parameterSize:t,lowIndex:n,highIndex:i,totalSize:r,paramArray:o}}function vn(e,t){let n=new O(e);n.setBigEndian();let i=Cn(n);i.endian==="littleEndian"&&n.setLittleEndian(),n.seek(i.paramStart);let r=wn(n);n.seek(i.dataStart);let o=On(n,i,t),s=[],a=[],l=[],c=[],u=[],p=[],g=[],d=[],h=[],f=[];if(i.dataFormat==="One_D"||i.dataFormat==="Two_D"){let m=xn(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")),p.push(R(r,"x_sweep_clipped")),g.push(R(r,"x_resolution")),d.push(R(r,"x_freq")),h.push(R(r,"x_offset")),f.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")),g.push(R(r,"y_resolution")),d.push(R(r,"y_freq")),h.push(R(r,"y_offset")),f.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:f,dataSections:o?Object.keys(o):void 0,originFrequency:d,frequencyOffset:h,acquisitionTime:c,spectralWidth:u,spectralWidthClipped:p,dataAxisStart:i.dataAxisStart,dataAxisStop:i.dataAxisStop,resolution:g,decimationRate:C(r,"decimation_rate")?.value,paramList:JSON.stringify(r.paramArray.map(m=>m.name)),digitalFilter:En(r,t)},headers:i,parameters:r,data:o}}import{formatSpectra as Mo}from"@zakodium/nmrium-core";import{getGyromagneticRatio as Io}from"gyromagnetic-ratio";import{isAnyArray as Ro}from"is-any-array";import Eo from"lodash.merge";import{normalizeNucleus as To}from"nmr-processing";import{isAnyArray as G}from"is-any-array";var kn={0:"uint8",1:"uint16",2:"uint32",3:"uint64",4:"int8",5:"int16",6:"int32",7:"int64",8:"float32",9:"float64",10:"complex64",11:"complex128"},Ln={0:"scalar",1:"vector",2:"matrix",3:"symetricMatrix",4:"pixel"};function qn(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(G(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=st(e,c,u),{componentLabels:g=p.componentLabels}=n;return{type:"internal",quantityType:Ln[i],numericType:kn[t],encoding:r,name:o,unit:s,quantityName:a,componentLabels:g,sparseSampling:l,description:n.description||"",application:n.application||"",components:p.components,dataLength:p.dataLength}}function Po(e){return G(e.re)&&G(e.im)}function No(e){return!G(e.re[0])}function st(e,t,n){let i=[],r=[],o=[];if(Po(e))if(No(e)){i[0]=ot(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(G(e.re[0])){i[0]=Ao(t[1],n[1],e.re.length),i[1]=ot(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(G(e.re.re)){i[0]=ot(t[1],n[1],e.re.re.length);let s=st(e.re,t,n).components,a=st(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 Ao(e,t,n){return t-e+1<n?t-e+1:n}function ot(e,t,n){return t-e+1<n?(t-e+1)*2:n*2}async function Bn(e,t={}){let n=await e.arrayBuffer(),{name:i=V(e.name),keepSource:r=!1}=t,o={spectra:[],molecules:[]},a=wo(n)[0],{metadata:l,...c}=a.description,u=0,p=c.dimension===1?"1d":"2d",g="NMR SPECTRUM",d=c.dimension===1?c.nucleus[0]:c.nucleus,h=c.spectralWidthClipped[0],f;a.dependentVariables&&(c.dimension===1?f=Oo(a):c.dimension===2&&(f=Co(a)));for(let m in c)Array.isArray(c[m])&&c[m].length===1&&(c[m]=c[m][0]);let b={data:f,info:{...c,acquisitionMode:u,experiment:p,type:g,nucleus:d,spectralWidthClipped:h,name:i},meta:l};return r&&(b.sourceSelector={files:[e.relativePath]}),o.spectra=[b],Mo(o)}function Oo(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 f=l.length-1,b=0;f>0;f-=2)c[b]=l[f-1],u[b++]=l[f];let p={},[g,d]=[0,0];switch(i){case"frequency":d=0+a/s*1e6,g=o/s*1e6,p.re=c,p.im=u;break;case"time":d=s,g=o,p.re=c.reverse(),p.im=u.reverse().map(f=>-f);break;default:break}let h=[];for(let f=0;f<r;f++)h.push(d+f*g);return p.x=h,p}function Co(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 g of n[0].components){let d=new Float64Array(g.length/2),h=new Float64Array(g.length/2);for(let f=g.length-1,b=0;f>0;f-=2){let m=g[f-1],y=g[f];m>s&&(s=m),m<a&&(a=m),y>c&&(c=y),y<l&&(l=y),d[b]=m,h[b++]=y}if(i==="frequency")r.push(d),o.push(h);else{let f=d.length,b=new Float64Array(h.length);for(let m=0,y=f-1;m<f;m++)b[m]=-h[y--];r.push(d.reverse()),o.push(b)}}let u={re:{z:r,minZ:a,maxZ:s},im:{z:o,minZ:l,maxZ:c}},p=["X","Y"];for(let g=0;g<p.length;g++){let d=t[g].count,h=t[g].increment.magnitude,f=t[g].originOffset.magnitude,b=t[g].coordinatesOffset.magnitude,m=p[g];for(let y of["re","im"])i==="frequency"?(u[y][`min${m}`]=0+b/f*1e6,u[y][`max${m}`]=d*(h/f)*1e6):(u[y][`min${m}`]=f,u[y][`max${m}`]=d*h)}return u}function wo(e){let t=vn(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]=Un(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(To),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(Io);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 p=[],g={},d;for(let m=0;m<n.dimension;m++){if(d={magnitude:n.acquisitionTime[m].magnitude/(n.dataPoints[m]-1),unit:"s"},n.dataUnits[m]==="Second")g.quantityName="time",g.originOffset={magnitude:0,unit:"s"},m===0?g.coordinatesOffset={magnitude:n.digitalFilter*d.magnitude,unit:"s"}:g.coordinatesOffset={magnitude:0,unit:"s"},g.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"){g.quantityName="frequency";let y=n.originFrequency[m].magnitude;g.originOffset={magnitude:y,unit:"Hz"};let F=n.dataOffsetStart[m],N=n.dataOffsetStop[m]-F+1;d={magnitude:vo(n,m)/(N-1),unit:"Hz"};let A=n.dataAxisStop[m]*y/1e6;g.coordinatesOffset={magnitude:A,unit:"Hz"},N!==n.dataPoints[m]&&(n.dataPoints[m]=N)}m===0?g.description="direct dimension":g.description="indirect dimension",p.push({label:String(i.dataAxisTitles[m]),count:Number(n.dataPoints[m]),increment:d,type:"linear",description:String(g.description)||"",application:g.application||{},coordinatesOffset:g.coordinatesOffset||0,originOffset:g.originOffset||0,quantityName:String(g.quantityName)||"",reciprocal:g.reciprocal||{},period:g.period||0,complexFFT:g.complexFFT||!1})}let h=[];h.push(qn(l,11,{unit:"none",quantityName:"relative intensity",from:n.dataOffsetStart,to:n.dataOffsetStop}));let f={...c};return delete f.paramList,f.metadata={..._n(i,s),..._n(o,s),...Eo({},a)},[{timeStamp:Date.now(),description:f,dimensions:p,dependentVariables:h}]}function vo(e,t){let{spectralWidth:n,spectralWidthClipped:i}=e;return i[t].magnitude!=="NA"?i[t].magnitude:n[t].magnitude}function _n(e,t){let n={};for(let i in e)n[i]=Un(e[i],t);return n}function Un(e,t){return Ro(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}`),Bn(t,{name:t.name,keepSource:r,logger:i})}};function at(){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}`),Kt(t,{logger:i})}};function ct(){return new Pe}import{getSDF as Uo,nmrRecordToJSON as $o}from"@zakodium/nmredata";import{generateID as zn}from"@zakodium/nmrium-core";import{generateID as $n}from"@zakodium/nmrium-core";import{xyIntegration as ko}from"ml-spectra-processing";function jn(e,t){let{x:n,re:i}=t.data;return e.map(r=>{let o=ko({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:p=[],...g}=a;s.push({...g,kind:l||"signal",js:u,id:c||$n(),diaIDs:p})}return{...r,id:r.id||$n(),kind:s?.[0].kind||"signal",absolute:o,signals:s}})}function Wn(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=Lo({delta:o,js:c,frequency:i});if(c&&a&&c.length===a.length){c.sort((p,g)=>g.coupling-p.coupling);for(let p=0;p<c.length;p++)c[p].multiplicity=a[p]}n.push({id:zn(),...u,integration:l,signals:[{id:zn(),js:c,delta:o,diaIDs:s,multiplicity:a}]})}t.ranges.values=jn(H(n),t)}function Lo(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 Jn}from"@zakodium/nmrium-core";var qo=["x","y"],_o={x:0,y:0};function Xn(e,t,n={}){let i=[],{shift:r=_o}=n,{originFrequency:o=[400,400]}=t.info,s={x:o[0],y:o[1]};for(let a of e){let l={x:{},y:{},id:Jn(),kind:"signal"},c={id:Jn(),kind:"signal",peaks:[]},u={x:10,y:10};for(let p of qo){let{coupling:g=[],delta:d,diaIDs:h=[]}=a[p];for(let f of g)u[p]+=f.coupling;if(a.activeCoupling){let{activeCoupling:f=[]}=a;for(let b of f)u[p]+=b.coupling}u[p]/=s[p],l[p]={from:d-u[p],to:d+u[p]},c[p]={delta:d,diaIDs:h,originalDelta:d-r[p]}}i.push({...l,signals:[c]})}t.zones.values=i}function Vn(e){return Bo(e.data)}function Bo(e){return"rr"in e||!("x"in e)&&"re"in e}async function Hn(e,t,n={}){let i={spectra:[],molecules:[]},r=await jo(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 jo(e,t,n){let i=[],r=await Uo(e),o={spectra:[],molecules:[]};if(r.length===0)return{...o,usedFiles:i};let s=[];for(let l of r){let c=$o({sdf:l,fileCollection:e}).then(u=>{let{spectra:p,molecules:g=[]}=u;return i.push(l.root+l.filename),o.molecules.push(...g),zo(p,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 zo(e,t,n){let i=[],r=[],o={spectra:[],molecules:[]};for(let s of e){let a=Wo(s.source,t,n).then(l=>{let{spectra:c,files:u}=l;i.push(...u);for(let p of c)Vn(p)?Xn(s.signals,p):Wn(s.signals,p);o.spectra.push(...c)});r.push(a)}return await Promise.allSettled(r),{...o,usedFiles:i}}async function Wo(e,t,n={}){let{file:i,jcampURL:r}=e,{converter:o}=n;if(r){let l=await Jo(r,t,o?.jcamp);if(l)return{...l,files:[]}}let s=[];for(let l of i||[])s.push(Xo(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 Jo(e,t,n={}){let i={entries:[{relativePath:e}]},r={name:V(e||""),xy:!0,noContours:!0,...n},{data:o}=await t.readFromWebSource(i,r);return o}async function Xo(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 Ne=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)=>Hn(t,this.#e,n)};function lt(e){return new Ne(e)}import{parse as Vo}from"sdf-parser";function Yn(e,t={}){let{mixedEOL:n}=t,{molecules:i}=Vo(e,{mixedEOL:n}),r=[];for(let{molfile:o}of i){let s=X(o);r.push(...s)}return r}async function Gn(e,t={}){let{logger:n,mixedEOL:i}=t,r=await e.text(),o=Yn(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 Ae=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}`),Gn(t,{logger:i})}};function mt(){return new Ae}import{Molecule as Ho}from"openchemlib";function Zn(e){let t=[],n=e.split(/\r?\n/).filter(Boolean);for(let i of n){let o=Ho.fromSmiles(i).toMolfile();t.push({molfile:o})}return t}async function Kn(e,t={}){let n=await e.text(),i=Zn(n),r={molecules:i,spectra:[]};return t.logger?.info(`Found ${i.length} molecules from the ${e.name} file`),r}var Me=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 Kn(t,{logger:i})}};function ut(){return new Me}import{formatSpectra as Qo}from"@zakodium/nmrium-core";import{createFromToArray as Go}from"ml-spectra-processing/utils";function Qn(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
9
+ ${r.concat(o).join(",")}`);return e.offset=t,e.isBigEndian()?"BE":"LE"}var Ie=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}},Re=class extends Ie{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}},Ee=class extends Ie{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}},Te=class{lines;length;index;eol;constructor(t,n={}){let{eol:i=`
10
+ `,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}},Oe=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}}},Ce=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 we=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 Re(t.readInt16()),this.index=t.readInt16(),this.mode=new Ce(t.readInt16()),this.ctCount=t.readInt32(),this.lpVal=t.readFloat32(),this.rpVal=t.readFloat32(),this.lvl=t.readFloat32(),this.tlt=t.readFloat32(),this.data=Yo(t,n)}};function Yo(e,t){let{np:n,nTraces:i,status:{isFloat32:r,isInt32:o}}=t;return r?pt(e,i,n,"readFloat32"):o?pt(e,i,n,"readInt32"):pt(e,i,n,"readInt16")}function pt(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 ve=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 Oe(t.readInt16()),this.status=new Ee(t.readInt16()),this.nBlockHeaders=t.readInt32()}};var ft=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 er(e){let t=[],n=new Te(e.readChars(e.length));for(;n.index<n.length-1;){let i=[],r=[],o=new ft(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 tr(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);Qn(r);let o=new ve(r);if(o.nBlocks!==1)throw new Error("We currently do not support 2D varian spectra ");let s=er(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=Go({from:0,to:a,length:o.np/2,distribution:"uniform"}),c=new we(r,o);return{meta:o,fid:c,procpar:s,x:l}}}import{isAnyArray as es}from"is-any-array";import{xMultiply as ts}from"ml-spectra-processing";import{normalizeNucleus as Zo}from"nmr-processing";function nr(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:p,rp:g,sw:d,rfl:h,rfp:f}=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(p)),S(o,"phc0",g&&Number(g[0])),S(s,"rfl",h&&Number(L(h))),S(s,"rfp",f&&Number(L(f))),S(s,"sw",d&&Number(L(d)));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:D=1,rfp:N=1}=Ko(s,["sw","rfl","rfp"]);S(o,"baseFrequency",y-(F/2-D+N)/1e6)}else S(o,"baseFrequency",y)}let{baseFrequency:b,originFrequency:m}=o;S(o,"frequencyOffset",(m-b)*1e6),S(o,"spectralWidth",d&&Number(d[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(Zo)),o.dimension=1,o.isFid=!n.status.isSpectrum,{info:o,meta:{...s,...rr(n),...r}}}function L(e){return e&&(Array.isArray(e)?e[0]:e)}function Ko(e,t){let n={};for(let i of t){let r=e[i];r&&typeof r=="number"&&(n[i]=r)}return n}function rr(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]=rr(i):t[n]=i}return t}function ir(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 or(e,t={}){let{keepSource:n,logger:i}=t,r=ir(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,p=tr(u).then(g=>{let{info:d,meta:h}=nr(g),f=g.fid.data[0],b=es(f.im),m={data:{...f,x:g.x},meta:h,info:{isComplex:b,name:c,...d},display:{name:c}};if(d.isFid&&b){let{im:y}=m.data;ts(y,-1,{output:y})}u&&n&&(m.sourceSelector={files:u.map(y=>y.relativePath)}),s.spectra.push(m)});o.push(p)}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`),Qo(s)}var ke=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 or(t,{keepSource:i,logger:r})}};function dt(){return new ke}function rs(e,t=[]){return[lt(e),dt(),Ge(),et(),ct(),mt(),ut(),at(),je()].concat(t)}function is(){let e=new ns;return e.registerPlugins(rs(e)),e}import{getOneIfArray as ar}from"@zakodium/nmrium-core";import{from1DNMRVariables as os}from"convert-to-jcamp";function sr(e,t){return e.filters.find(n=>n.name===t)}function ss(e,t={}){let{info:n,meta:i,data:r}=e,{onlyReal:o=!1}=t,{isFid:s,spectralWidth:a}=n,l=ar(n.baseFrequency||n.originFrequency),{x:c,re:u,im:p}=r,g=new Float64Array(u),d=!o&&p?new Float64Array(p):void 0,h={};Q(h,"SW",a),Q(h,"BF1",l);let f=sr(e,"fft")?.enabled,b={originFrequency:n.originFrequency,dataType:!n.isFid||f?"NMR SPECTRUM":"NMR FID",dataClass:!o&&p?"NTUPLES":"XYDATA"};if(s){let F=e.filters.find(D=>D.name==="digitalFilter");if(F&&!f){let{value:{digitalFilterValue:D},enabled:N}=F;if(N){let x=Math.floor(D);g.set(u.slice(u.length-x)),g.set(u.slice(0,u.length-x),x),p&&d&&(d.set(p.slice(p.length-x)),d.set(p.slice(0,p.length-x),x))}}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:g,label:`${n.isFid?"FID":"SPECTRUM"}/REAL`,units:"ARBITRARY UNITS",symbol:"R"}};return d&&(y.i={data:d,label:`${n.isFid?"FID":"SPECTRUM"}/IMAG`,units:"ARBITRARY UNITS",symbol:"I"}),os(y,m)}function Q(e,t,n){n!==void 0&&(e[t]=ar(n))}export{ne as AutoPostProcessingPlugin,he as BrukerLoaderPlugin,xe as JCAMPDXLoaderPlugin,Se as JEOLLoaderPlugin,Pe as MolfileLoaderPlugin,Ne as NMReDATALoaderPlugin,Ae as SDFLoaderPlugin,Me as SMILESLoaderPlugin,ke as VarianLoaderPlugin,je as autoPostProcessing,Ge as brukerLoader,is as default,is as init,et as jcampDXLoader,at as jeolLoader,ct as molfileLoader,lt as nmreDATALoader,Fn as processJCAMPDX,Yn as readSDF,Zn as readSMILES,rs as recommended,mt as sdfLoader,ut as smilesLoader,ss as spectrum1DToJCAMPDX,dt as varianLoader};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@zakodium/nmrium-core-plugins",
3
- "version": "0.1.3",
3
+ "version": "0.1.5",
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",
@@ -21,44 +21,43 @@
21
21
  "bundle": "node scripts/esbuild.js && npm run bundle-types",
22
22
  "bundle-types": "npm run tsc && yarn g:api-extractor",
23
23
  "clean": "rimraf types dist coverage",
24
- "dev:eslint-fix": "eslint --cache --fix $(git diff --name-only --relative) --quiet",
25
24
  "prepack": "npm run clean && npm run bundle",
26
- "dev:prettier-write": "prettier --write $(git diff --name-only --relative)",
27
25
  "test": "yarn g:test-only && yarn g:check-types && yarn g:eslint && yarn g:prettier",
28
26
  "tsc": "tsc --project tsconfig.types.json"
29
27
  },
30
28
  "devDependencies": {
31
29
  "@types/lodash.merge": "^4.6.9",
32
- "@types/node": "^22.15.29",
30
+ "@types/node": "^24.0.14",
33
31
  "@zakodium/bruker-parser": "^0.0.0",
34
32
  "@zakodium/jeol-parser": "^0.0.0",
33
+ "@zakodium/nmr-types": "^0.1.0",
35
34
  "@zakodium/varian-parser": "^0.0.0",
36
- "bruker-data-test": "^0.5.4",
35
+ "bruker-data-test": "^1.0.0",
37
36
  "esbuild": "^0.25.5",
38
- "fifo-logger": "^1.0.0",
39
- "jcamp-data-test": "^1.0.0",
40
- "jeol-data-test": "^0.5.2",
37
+ "fifo-logger": "^2.0.0",
38
+ "jcamp-data-test": "^2.0.0",
39
+ "jeol-data-test": "^1.0.0",
41
40
  "jest-matcher-deep-close-to": "^3.0.2",
42
- "msw": "^2.8.6",
43
- "nmredata-data-test": "^0.4.0",
41
+ "msw": "^2.10.2",
42
+ "nmredata-data-test": "^1.0.0",
44
43
  "rimraf": "^6.0.1",
45
- "vitest": "^3.1.4"
44
+ "vitest": "^3.2.4"
46
45
  },
47
46
  "dependencies": {
48
- "@zakodium/nmrium-core": "^0.1.2",
47
+ "@zakodium/nmredata": "^0.0.0",
48
+ "@zakodium/nmrium-core": "^0.1.4",
49
49
  "cheminfo-types": "^1.8.1",
50
50
  "convert-to-jcamp": "^5.4.11",
51
- "filelist-utils": "^1.11.3",
51
+ "file-collection": "^5.0.0",
52
52
  "gyromagnetic-ratio": "^2.0.0",
53
53
  "is-any-array": "^2.0.1",
54
- "jcampconverter": "^11.0.3",
54
+ "jcampconverter": "^11.0.4",
55
55
  "linear-sum-assignment": "^1.0.7",
56
56
  "lodash.merge": "^4.6.2",
57
57
  "ml-spectra-processing": "^14.12.0",
58
- "nmr-processing": "^18.1.0",
59
- "nmredata": "^1.0.1",
60
- "openchemlib": "^9.2.0",
61
- "openchemlib-utils": "^8.1.1",
58
+ "nmr-processing": "^19.0.3",
59
+ "openchemlib": "^9.5.1",
60
+ "openchemlib-utils": "^8.1.5",
62
61
  "sdf-parser": "^7.0.4"
63
62
  },
64
63
  "volta": {