{"version":3,"file":"nmr-parser.js","sources":["../node_modules/is-any-array/lib-esm/index.js","../src/constantTables.js","../src/formatDependentVariable.js","../src/formatLinearDimension.js","../node_modules/iobuffer/lib-esm/text.browser.js","../node_modules/iobuffer/lib-esm/IOBuffer.js","../node_modules/jeolconverter/src/conversionTables.js","../node_modules/jeolconverter/src/utils.js","../node_modules/jeolconverter/src/parseJEOL.js","../node_modules/gyromagnetic-ratio/lib-esm/index.js","../node_modules/median-quickselect/lib/median-quickselect.min.js","../node_modules/ml-spectra-processing/lib-esm/matrix/matrixCheck.js","../node_modules/ml-spectra-processing/lib-esm/matrix/matrixMinMaxZ.js","../node_modules/ml-spectra-processing/lib-esm/utils/createStepArray.js","../node_modules/isutf8/dist/index.esm.js","../node_modules/ensure-string/lib-esm/index.js","../src/utils/toKeyValue.js","../src/fromJEOL.js","../node_modules/brukerconverter/src/groupByExperiments.js","../node_modules/brukerconverter/src/util/joinMetaInfo.js","../node_modules/dynamic-typing/src/parseString.js","../node_modules/jcampconverter/lib-esm/complexChromatogram.js","../node_modules/jcampconverter/lib-esm/convertToFloatArray.js","../node_modules/jcampconverter/lib-esm/parse/fastParseXYData.js","../node_modules/jcampconverter/lib-esm/parse/parsePeakTable.js","../node_modules/jcampconverter/lib-esm/parse/parseXYA.js","../node_modules/ml-array-median/lib-es6/index.js","../node_modules/jcampconverter/lib-esm/2d/convertTo3DZ.js","../node_modules/jcampconverter/lib-esm/2d/generateContourLines.js","../node_modules/jcampconverter/lib-esm/2d/add2D.js","../node_modules/jcampconverter/lib-esm/postProcessingNMR.js","../node_modules/jcampconverter/lib-esm/profiling.js","../node_modules/jcampconverter/lib-esm/simpleChromatogram.js","../node_modules/jcampconverter/lib-esm/postProcessing.js","../node_modules/jcampconverter/lib-esm/prepareNtuplesDatatable.js","../node_modules/jcampconverter/lib-esm/prepareSpectrum.js","../node_modules/jcampconverter/lib-esm/convert.js","../node_modules/brukerconverter/src/util/parseData.js","../node_modules/brukerconverter/src/util/setFIDSpectrumData.js","../node_modules/brukerconverter/src/util/setXYSpectrumData.js","../node_modules/brukerconverter/src/util/convert1D.js","../node_modules/brukerconverter/src/util/mergeMetadata.js","../node_modules/brukerconverter/src/util/convert2D.js","../node_modules/brukerconverter/src/util/convertTo3DZ.js","../node_modules/brukerconverter/src/util/convertOneExperiment.js","../node_modules/brukerconverter/src/convertFileCollection.js","../src/utils/convertToFloatArray.js","../src/utils/getDigitalFilterParameters.js","../src/utils/getNucleusFromMetadata.js","../src/utils/getSpectrumType.js","../src/utils/getInfoFromJCAMP.js","../src/fromBruker.js","../src/fromJCAMP.js","../src/read.js"],"sourcesContent":["const toString = Object.prototype.toString;\n/**\n * Checks if an object is an instance of an Array (array or typed array).\n *\n * @param {any} value - Object to check.\n * @returns {boolean} True if the object is an array.\n */\nexport function isAnyArray(value) {\n    return toString.call(value).endsWith('Array]');\n}\n//# sourceMappingURL=index.js.map","/**\n * a number that correspond to a type of numeric\n * @typedef {number} numericType\n * @const\n */\nexport const numericTypeTable = {\n  0: 'uint8',\n  1: 'uint16',\n  2: 'uint32',\n  3: 'uint64',\n  4: 'int8',\n  5: 'int16',\n  6: 'int32',\n  7: 'int64',\n  8: 'float32',\n  9: 'float64',\n  10: 'complex64',\n  11: 'complex128',\n};\n\n/**\n * a number that corresponds to a type of quantity\n * @typedef {number} quantityType\n * @const\n */\nexport const quantityTypeTable = {\n  0: 'scalar',\n  1: 'vector',\n  2: 'matrix',\n  3: 'symetricMatrix',\n  4: 'pixel',\n};\n","import { isAnyArray } from 'is-any-array';\n\nimport { numericTypeTable, quantityTypeTable } from './constantTables';\n/**\n * a class for dependent variable\n * @param {object || array} data - the dependent variable\n * @param {numericType} numericType - a number that correspond to a type of numeric used to store the components\n * @param {object} [options] - an object with options (name, unit, quantityName, componentLabels, sparseSampling, application, description)\n * @param {string} [options.name] - a name of the dependent variable\n * @param {string} [options.unit] - the unit of the dependent variable\n * @param {string} [options.quantityName] - a name of the quantity\n * @param {array} [options.componentLabels] - an array of labels for each component of the dependent variable\n * @return {object} - an dependent variable\n */\nexport function formatDependentVariable(data, numericType, options = {}) {\n  let {\n    quantityType = 0,\n    encoding = 'none',\n    name = '',\n    unit = '',\n    quantityName = '',\n    componentLabels = [],\n    sparseSampling = {},\n    from = 0,\n    to = -1,\n  } = options;\n\n  let components;\n  if (isAnyArray(data)) {\n    throw new Error('not yet implemented');\n  } else if (Object.keys(data).length === 2) {\n    components = fromReIm(data, from, to);\n  }\n\n  if (componentLabels.length === 0) {\n    componentLabels = components.componentLabels;\n  }\n\n  return {\n    type: 'internal',\n    quantityType: quantityTypeTable[quantityType],\n    numericType: numericTypeTable[numericType],\n    encoding,\n    name,\n    unit,\n    quantityName,\n    componentLabels,\n    sparseSampling,\n    description: options.description || '',\n    application: options.application || '',\n    components: components.components,\n    dataLength: components.dataLength,\n  };\n}\n\n/**\n * import object {re:[], im:[]} to component\n * @param {object} reIm - a reIm object to import\n * @param {number} from - lower limit\n * @param {number} to - upper limit\n * @return {array} - components\n */\nfunction fromReIm(reIm, from, to) {\n  let dataLength = [];\n  let componentLabels = [];\n  let components = [];\n  if (isAnyArray(reIm.re) & isAnyArray(reIm.im)) {\n    if (typeof reIm.re[0] === 'number') {\n      // if 1D\n      dataLength[0] = setLengthComplex(from[0], to[0], reIm.re.length);\n      let component = new Float64Array(dataLength[0]);\n      for (let i = 0; i < dataLength[0]; i += 2) {\n        let idx = i + from[0] * 2;\n        component[i] = reIm.re[idx / 2];\n        component[i + 1] = reIm.im[idx / 2];\n      }\n      components.push(component);\n      componentLabels.push('complex');\n    } else if (isAnyArray(reIm.re[0])) {\n      // if 2D\n      dataLength[0] = setLength(from[1], to[1], reIm.re.length);\n      dataLength[1] = setLengthComplex(from[0], to[0], reIm.re[0].length);\n\n      for (let j = 0; j < dataLength[0]; j++) {\n        let component = new Float64Array(dataLength[1]);\n        for (let i = 0; i < dataLength[1]; i += 2) {\n          let idx = i + from[0] * 2;\n          component[i] = reIm.re[j][idx / 2];\n          component[i + 1] = reIm.im[j][idx / 2];\n        }\n        components.push(component);\n      }\n    } else {\n      throw new Error('check your object');\n    }\n  } else if (isAnyArray(reIm.re.re)) {\n    dataLength[0] = setLengthComplex(from[1], to[1], reIm.re.re.length);\n    let re = fromReIm(reIm.re, from, to).components;\n    let im = fromReIm(reIm.im, from, to).components;\n    for (let j = 0; j < dataLength[0] / 2; j++) {\n      components.push(re[j]);\n      components.push(im[j]);\n    }\n  } else {\n    throw new Error('check the dimension or the type of data in your array');\n  }\n  return {\n    dataLength,\n    componentLabels,\n    components,\n  };\n}\n\nfunction setLength(from, to, length) {\n  if (to - from + 1 < length) {\n    return to - from + 1;\n  } else {\n    return length;\n  }\n}\n\nfunction setLengthComplex(from, to, length) {\n  if (to - from + 1 < length) {\n    return (to - from + 1) * 2;\n  } else {\n    return length * 2;\n  }\n}\n\n// /**\n//  * add component to components from 1D array.\n//  * @param {array} array - a 1D or 2D array to import\n//  * @return {Float64Array} - component\n//  */\n// function add1DArray(array) {\n//   let component;\n//   component = new Float64Array(array.length);\n//   for (let i = 0; i < array.length; i++) {\n//     component[i] = array[i];\n//   }\n//   return component;\n// }\n\n// /**\n//  * import component to InternalDEPENDENTVAR class object from 1D or 2D array.\n//  * @param {array} array - a 1D or 2D array to import\n//  */\n// function fromArray(array) {\n//   this.dataLength[0] = array.length;\n//   if (typeof array[0] === 'number') {\n//     this.components = [this.add1DArray(array)];\n//   } else if (Array.isArray(array[0])) {\n//     this.dataLength[1] = array[0].length;\n//     for (let j = 0; j < this.dataLength[1]; j++) {\n//       this.components.push(this.add1DArray(array[j]));\n//     }\n//   } else {\n//     throw new Error('check the dimension or the type of data in your array');\n//   }\n//   return this;\n// }\n","/**\n *\n * @param {*} label\n * @param {*} count\n * @param {*} increment\n * @param {*} options\n */\nexport function formatLinearDimension(label, count, increment, options = {}) {\n  return {\n    label: String(label),\n    count: Number(count),\n    increment,\n    type: 'linear',\n    description: String(options.description) || '',\n    application: options.application || {},\n    coordinatesOffset: options.coordinatesOffset || 0,\n    originOffset: options.originOffset || 0,\n    quantityName: String(options.quantityName) || '',\n    reciprocal: options.reciprocal || {},\n    period: options.period || 0,\n    complexFFT: options.complexFFT || false,\n  };\n}\n","// eslint-disable-next-line import/no-unassigned-import\nimport './text-encoding-polyfill';\nexport function decode(bytes, encoding = 'utf8') {\n    const decoder = new TextDecoder(encoding);\n    return decoder.decode(bytes);\n}\nconst encoder = new TextEncoder();\nexport function encode(str) {\n    return encoder.encode(str);\n}\n//# sourceMappingURL=text.browser.js.map","import { decode, encode } from './text';\nconst defaultByteLength = 1024 * 8;\nexport class IOBuffer {\n    /**\n     * @param data - The data to construct the IOBuffer with.\n     * If data is a number, it will be the new buffer's length<br>\n     * If data is `undefined`, the buffer will be initialized with a default length of 8Kb<br>\n     * If data is an ArrayBuffer, SharedArrayBuffer, an ArrayBufferView (Typed Array), an IOBuffer instance,\n     * or a Node.js Buffer, a view will be created over the underlying ArrayBuffer.\n     * @param options\n     */\n    constructor(data = defaultByteLength, options = {}) {\n        let dataIsGiven = false;\n        if (typeof data === 'number') {\n            data = new ArrayBuffer(data);\n        }\n        else {\n            dataIsGiven = true;\n            this.lastWrittenByte = data.byteLength;\n        }\n        const offset = options.offset ? options.offset >>> 0 : 0;\n        const byteLength = data.byteLength - offset;\n        let dvOffset = offset;\n        if (ArrayBuffer.isView(data) || data instanceof IOBuffer) {\n            if (data.byteLength !== data.buffer.byteLength) {\n                dvOffset = data.byteOffset + offset;\n            }\n            data = data.buffer;\n        }\n        if (dataIsGiven) {\n            this.lastWrittenByte = byteLength;\n        }\n        else {\n            this.lastWrittenByte = 0;\n        }\n        this.buffer = data;\n        this.length = byteLength;\n        this.byteLength = byteLength;\n        this.byteOffset = dvOffset;\n        this.offset = 0;\n        this.littleEndian = true;\n        this._data = new DataView(this.buffer, dvOffset, byteLength);\n        this._mark = 0;\n        this._marks = [];\n    }\n    /**\n     * Checks if the memory allocated to the buffer is sufficient to store more\n     * bytes after the offset.\n     * @param byteLength - The needed memory in bytes.\n     * @returns `true` if there is sufficient space and `false` otherwise.\n     */\n    available(byteLength = 1) {\n        return this.offset + byteLength <= this.length;\n    }\n    /**\n     * Check if little-endian mode is used for reading and writing multi-byte\n     * values.\n     * @returns `true` if little-endian mode is used, `false` otherwise.\n     */\n    isLittleEndian() {\n        return this.littleEndian;\n    }\n    /**\n     * Set little-endian mode for reading and writing multi-byte values.\n     */\n    setLittleEndian() {\n        this.littleEndian = true;\n        return this;\n    }\n    /**\n     * Check if big-endian mode is used for reading and writing multi-byte values.\n     * @returns `true` if big-endian mode is used, `false` otherwise.\n     */\n    isBigEndian() {\n        return !this.littleEndian;\n    }\n    /**\n     * Switches to big-endian mode for reading and writing multi-byte values.\n     */\n    setBigEndian() {\n        this.littleEndian = false;\n        return this;\n    }\n    /**\n     * Move the pointer n bytes forward.\n     * @param n - Number of bytes to skip.\n     */\n    skip(n = 1) {\n        this.offset += n;\n        return this;\n    }\n    /**\n     * Move the pointer n bytes backward.\n     * @param n - Number of bytes to move back.\n     */\n    back(n = 1) {\n        this.offset -= n;\n        return this;\n    }\n    /**\n     * Move the pointer to the given offset.\n     * @param offset\n     */\n    seek(offset) {\n        this.offset = offset;\n        return this;\n    }\n    /**\n     * Store the current pointer offset.\n     * @see {@link IOBuffer#reset}\n     */\n    mark() {\n        this._mark = this.offset;\n        return this;\n    }\n    /**\n     * Move the pointer back to the last pointer offset set by mark.\n     * @see {@link IOBuffer#mark}\n     */\n    reset() {\n        this.offset = this._mark;\n        return this;\n    }\n    /**\n     * Push the current pointer offset to the mark stack.\n     * @see {@link IOBuffer#popMark}\n     */\n    pushMark() {\n        this._marks.push(this.offset);\n        return this;\n    }\n    /**\n     * Pop the last pointer offset from the mark stack, and set the current\n     * pointer offset to the popped value.\n     * @see {@link IOBuffer#pushMark}\n     */\n    popMark() {\n        const offset = this._marks.pop();\n        if (offset === undefined) {\n            throw new Error('Mark stack empty');\n        }\n        this.seek(offset);\n        return this;\n    }\n    /**\n     * Move the pointer offset back to 0.\n     */\n    rewind() {\n        this.offset = 0;\n        return this;\n    }\n    /**\n     * Make sure the buffer has sufficient memory to write a given byteLength at\n     * the current pointer offset.\n     * If the buffer's memory is insufficient, this method will create a new\n     * buffer (a copy) with a length that is twice (byteLength + current offset).\n     * @param byteLength\n     */\n    ensureAvailable(byteLength = 1) {\n        if (!this.available(byteLength)) {\n            const lengthNeeded = this.offset + byteLength;\n            const newLength = lengthNeeded * 2;\n            const newArray = new Uint8Array(newLength);\n            newArray.set(new Uint8Array(this.buffer));\n            this.buffer = newArray.buffer;\n            this.length = this.byteLength = newLength;\n            this._data = new DataView(this.buffer);\n        }\n        return this;\n    }\n    /**\n     * Read a byte and return false if the byte's value is 0, or true otherwise.\n     * Moves pointer forward by one byte.\n     */\n    readBoolean() {\n        return this.readUint8() !== 0;\n    }\n    /**\n     * Read a signed 8-bit integer and move pointer forward by 1 byte.\n     */\n    readInt8() {\n        return this._data.getInt8(this.offset++);\n    }\n    /**\n     * Read an unsigned 8-bit integer and move pointer forward by 1 byte.\n     */\n    readUint8() {\n        return this._data.getUint8(this.offset++);\n    }\n    /**\n     * Alias for {@link IOBuffer#readUint8}.\n     */\n    readByte() {\n        return this.readUint8();\n    }\n    /**\n     * Read `n` bytes and move pointer forward by `n` bytes.\n     */\n    readBytes(n = 1) {\n        const bytes = new Uint8Array(n);\n        for (let i = 0; i < n; i++) {\n            bytes[i] = this.readByte();\n        }\n        return bytes;\n    }\n    /**\n     * Read a 16-bit signed integer and move pointer forward by 2 bytes.\n     */\n    readInt16() {\n        const value = this._data.getInt16(this.offset, this.littleEndian);\n        this.offset += 2;\n        return value;\n    }\n    /**\n     * Read a 16-bit unsigned integer and move pointer forward by 2 bytes.\n     */\n    readUint16() {\n        const value = this._data.getUint16(this.offset, this.littleEndian);\n        this.offset += 2;\n        return value;\n    }\n    /**\n     * Read a 32-bit signed integer and move pointer forward by 4 bytes.\n     */\n    readInt32() {\n        const value = this._data.getInt32(this.offset, this.littleEndian);\n        this.offset += 4;\n        return value;\n    }\n    /**\n     * Read a 32-bit unsigned integer and move pointer forward by 4 bytes.\n     */\n    readUint32() {\n        const value = this._data.getUint32(this.offset, this.littleEndian);\n        this.offset += 4;\n        return value;\n    }\n    /**\n     * Read a 32-bit floating number and move pointer forward by 4 bytes.\n     */\n    readFloat32() {\n        const value = this._data.getFloat32(this.offset, this.littleEndian);\n        this.offset += 4;\n        return value;\n    }\n    /**\n     * Read a 64-bit floating number and move pointer forward by 8 bytes.\n     */\n    readFloat64() {\n        const value = this._data.getFloat64(this.offset, this.littleEndian);\n        this.offset += 8;\n        return value;\n    }\n    /**\n     * Read a 64-bit signed integer number and move pointer forward by 8 bytes.\n     */\n    readBigInt64() {\n        const value = this._data.getBigInt64(this.offset, this.littleEndian);\n        this.offset += 8;\n        return value;\n    }\n    /**\n     * Read a 64-bit unsigned integer number and move pointer forward by 8 bytes.\n     */\n    readBigUint64() {\n        const value = this._data.getBigUint64(this.offset, this.littleEndian);\n        this.offset += 8;\n        return value;\n    }\n    /**\n     * Read a 1-byte ASCII character and move pointer forward by 1 byte.\n     */\n    readChar() {\n        return String.fromCharCode(this.readInt8());\n    }\n    /**\n     * Read `n` 1-byte ASCII characters and move pointer forward by `n` bytes.\n     */\n    readChars(n = 1) {\n        let result = '';\n        for (let i = 0; i < n; i++) {\n            result += this.readChar();\n        }\n        return result;\n    }\n    /**\n     * Read the next `n` bytes, return a UTF-8 decoded string and move pointer\n     * forward by `n` bytes.\n     */\n    readUtf8(n = 1) {\n        return decode(this.readBytes(n));\n    }\n    /**\n     * Read the next `n` bytes, return a string decoded with `encoding` and move pointer\n     * forward by `n` bytes.\n     * If no encoding is passed, the function is equivalent to @see {@link IOBuffer#readUtf8}\n     */\n    decodeText(n = 1, encoding = 'utf-8') {\n        return decode(this.readBytes(n), encoding);\n    }\n    /**\n     * Write 0xff if the passed value is truthy, 0x00 otherwise and move pointer\n     * forward by 1 byte.\n     */\n    writeBoolean(value) {\n        this.writeUint8(value ? 0xff : 0x00);\n        return this;\n    }\n    /**\n     * Write `value` as an 8-bit signed integer and move pointer forward by 1 byte.\n     */\n    writeInt8(value) {\n        this.ensureAvailable(1);\n        this._data.setInt8(this.offset++, value);\n        this._updateLastWrittenByte();\n        return this;\n    }\n    /**\n     * Write `value` as an 8-bit unsigned integer and move pointer forward by 1\n     * byte.\n     */\n    writeUint8(value) {\n        this.ensureAvailable(1);\n        this._data.setUint8(this.offset++, value);\n        this._updateLastWrittenByte();\n        return this;\n    }\n    /**\n     * An alias for {@link IOBuffer#writeUint8}.\n     */\n    writeByte(value) {\n        return this.writeUint8(value);\n    }\n    /**\n     * Write all elements of `bytes` as uint8 values and move pointer forward by\n     * `bytes.length` bytes.\n     */\n    writeBytes(bytes) {\n        this.ensureAvailable(bytes.length);\n        for (let i = 0; i < bytes.length; i++) {\n            this._data.setUint8(this.offset++, bytes[i]);\n        }\n        this._updateLastWrittenByte();\n        return this;\n    }\n    /**\n     * Write `value` as a 16-bit signed integer and move pointer forward by 2\n     * bytes.\n     */\n    writeInt16(value) {\n        this.ensureAvailable(2);\n        this._data.setInt16(this.offset, value, this.littleEndian);\n        this.offset += 2;\n        this._updateLastWrittenByte();\n        return this;\n    }\n    /**\n     * Write `value` as a 16-bit unsigned integer and move pointer forward by 2\n     * bytes.\n     */\n    writeUint16(value) {\n        this.ensureAvailable(2);\n        this._data.setUint16(this.offset, value, this.littleEndian);\n        this.offset += 2;\n        this._updateLastWrittenByte();\n        return this;\n    }\n    /**\n     * Write `value` as a 32-bit signed integer and move pointer forward by 4\n     * bytes.\n     */\n    writeInt32(value) {\n        this.ensureAvailable(4);\n        this._data.setInt32(this.offset, value, this.littleEndian);\n        this.offset += 4;\n        this._updateLastWrittenByte();\n        return this;\n    }\n    /**\n     * Write `value` as a 32-bit unsigned integer and move pointer forward by 4\n     * bytes.\n     */\n    writeUint32(value) {\n        this.ensureAvailable(4);\n        this._data.setUint32(this.offset, value, this.littleEndian);\n        this.offset += 4;\n        this._updateLastWrittenByte();\n        return this;\n    }\n    /**\n     * Write `value` as a 32-bit floating number and move pointer forward by 4\n     * bytes.\n     */\n    writeFloat32(value) {\n        this.ensureAvailable(4);\n        this._data.setFloat32(this.offset, value, this.littleEndian);\n        this.offset += 4;\n        this._updateLastWrittenByte();\n        return this;\n    }\n    /**\n     * Write `value` as a 64-bit floating number and move pointer forward by 8\n     * bytes.\n     */\n    writeFloat64(value) {\n        this.ensureAvailable(8);\n        this._data.setFloat64(this.offset, value, this.littleEndian);\n        this.offset += 8;\n        this._updateLastWrittenByte();\n        return this;\n    }\n    /**\n     * Write `value` as a 64-bit signed bigint and move pointer forward by 8\n     * bytes.\n     */\n    writeBigInt64(value) {\n        this.ensureAvailable(8);\n        this._data.setBigInt64(this.offset, value, this.littleEndian);\n        this.offset += 8;\n        this._updateLastWrittenByte();\n        return this;\n    }\n    /**\n     * Write `value` as a 64-bit unsigned bigint and move pointer forward by 8\n     * bytes.\n     */\n    writeBigUint64(value) {\n        this.ensureAvailable(8);\n        this._data.setBigUint64(this.offset, value, this.littleEndian);\n        this.offset += 8;\n        this._updateLastWrittenByte();\n        return this;\n    }\n    /**\n     * Write the charCode of `str`'s first character as an 8-bit unsigned integer\n     * and move pointer forward by 1 byte.\n     */\n    writeChar(str) {\n        return this.writeUint8(str.charCodeAt(0));\n    }\n    /**\n     * Write the charCodes of all `str`'s characters as 8-bit unsigned integers\n     * and move pointer forward by `str.length` bytes.\n     */\n    writeChars(str) {\n        for (let i = 0; i < str.length; i++) {\n            this.writeUint8(str.charCodeAt(i));\n        }\n        return this;\n    }\n    /**\n     * UTF-8 encode and write `str` to the current pointer offset and move pointer\n     * forward according to the encoded length.\n     */\n    writeUtf8(str) {\n        return this.writeBytes(encode(str));\n    }\n    /**\n     * Export a Uint8Array view of the internal buffer.\n     * The view starts at the byte offset and its length\n     * is calculated to stop at the last written byte or the original length.\n     */\n    toArray() {\n        return new Uint8Array(this.buffer, this.byteOffset, this.lastWrittenByte);\n    }\n    /**\n     * Update the last written byte offset\n     * @private\n     */\n    _updateLastWrittenByte() {\n        if (this.offset > this.lastWrittenByte) {\n            this.lastWrittenByte = this.offset;\n        }\n    }\n}\n//# sourceMappingURL=IOBuffer.js.map","export const endianness = {\n  0: 'bigEndian',\n  1: 'littleEndian',\n};\n\nexport const instrumentTable = {\n  0: 'NONE',\n  1: 'GSX',\n  2: 'ALPHA',\n  3: 'ECLIPSE',\n  4: 'MASS_SPEC',\n  5: 'COMPILER',\n  6: 'OTHER_NMR',\n  7: 'UNKNOWN',\n  8: 'GEMINI',\n  9: 'UNITY',\n  10: 'ASPECT',\n  11: 'UX',\n  12: 'FELIX',\n  13: 'LAMBDA',\n  14: 'GE_1280',\n  15: 'GE_OMEGA',\n  16: 'CHEMAGNETICS',\n  17: 'CDFF',\n  18: 'GALACTIC',\n  19: 'TRIAD',\n  20: 'GENERIC_NMR',\n  21: 'GAMMA',\n  22: 'JCAMP_DX',\n  23: 'AMX',\n  24: 'DMX',\n  25: 'ECA',\n  26: 'ALICE',\n  27: 'NMR_PIPE',\n  28: 'SIMPSON',\n};\n\nexport const dataTypeTable = {\n  0: '64Bit Float',\n  1: '32Bit Float',\n  2: 'Reserved',\n  3: 'Reserved',\n};\n\nexport const dataFormatTable = {\n  1: 'One_D',\n  2: 'Two_D',\n  3: 'Three_D',\n  4: 'Four_D',\n  5: 'Five_D',\n  6: 'Six_D',\n  7: 'Seven_D',\n  8: 'Eight_D',\n  9: 'not for NMR data formats',\n  10: 'not for NMR data formats',\n  11: 'not for NMR data formats',\n  12: 'Small_Two_D',\n  13: 'Small_Three_D',\n  14: 'Small_Four_D',\n};\n\nexport const dataAxisTypeTable = {\n  0: 'None', //Axis is not used.\n  1: 'Real', //Axis has real data only, no imaginary.\n  2: 'TPPI',\n  3: 'Complex',\n  4: 'Real_Complex',\n  /* Axis should be accessed as complex when it is the major axis,\n            accessed as real otherwise.  This is only valid when all axes in\n            use have this setting.*/\n  5: 'Envelope',\n  /* Behaves the same way as a Real_Complex dimension but the data\n        has different meaning.  Instead of being treated as real and\n        imaginary parts of a complex number, the data should be treated as minimum and maximum parts of a projection.  This is used\n        for the data that results from an envelope projection.*/\n};\n\nexport const prefixTable = {\n  '-8': 'Yotta',\n  '-6': 'Exa',\n  '-7': 'Zetta',\n  '-5': 'Pecta',\n  '-4': 'Tera',\n  '-3': 'Giga',\n  '-2': 'Mega',\n  '-1': 'Kilo',\n  0: 'None',\n  1: 'Milli',\n  2: 'Micro',\n  3: 'Nano',\n  4: 'Pico',\n  5: 'Femto',\n  6: 'Atto',\n  7: 'Zepto',\n};\n\nexport const unitPrefixTable = {\n  Yotta: 24,\n  Exa: 21,\n  Zetta: 18,\n  Pecta: 15,\n  Tera: 12,\n  Giga: 9,\n  Mega: 6,\n  Kilo: 3,\n  None: 0,\n  Milli: -3,\n  Micro: -6,\n  Nano: -9,\n  Pico: -12,\n  Femto: -15,\n  Atto: -18,\n  Zepto: -21,\n};\n\nexport const baseTable = {\n  0: 'None',\n  1: 'Abundance',\n  2: 'Ampere',\n  3: 'Candela',\n  4: 'Celsius',\n  5: 'Coulomb',\n  6: 'Degree',\n  7: 'Electronvolt',\n  8: 'Farad',\n  9: 'Sievert',\n  10: 'Gram',\n  11: 'Gray',\n  12: 'Henry',\n  13: 'Hertz',\n  14: 'Kelvin',\n  15: 'Joule',\n  16: 'Liter',\n  17: 'Lumen',\n  18: 'Lux',\n  19: 'Meter',\n  20: 'Mole',\n  21: 'Newton',\n  22: 'Ohm',\n  23: 'Pascal',\n  24: 'Percent',\n  25: 'Point',\n  26: 'Ppm',\n  27: 'Radian',\n  28: 'Second',\n  29: 'Siemens',\n  30: 'Steradian',\n  31: 'Tesla',\n  32: 'Volt',\n  33: 'Watt',\n  34: 'Weber',\n  35: 'Decibel',\n  36: 'Dalton',\n  37: 'Thompson',\n  38: 'Ugeneric', // Treated as None, but never displayed',\n  39: 'LPercent ', // Treated as percent for display, but different for comparison',\n  40: 'PPT', // Parts per trillion (Private, do not use)',\n  41: 'PPB ', // Parts per billion (Private, do not use)',\n  42: 'Index',\n};\n\nexport const dataAxisRangedTable = {\n  0: 'Ranged',\n  /* The ruler for the axis ranges from Data_Axis_Start[n] to\n        Data_Axis_Stop[n] with a step function of\n            (Data_Axis_Stop[n] - Data_Axis_Start[n]) /\n            (Data_Offset_Stop[n] - Data_Offset_Start[n]) */\n  1: 'Listed', // (deprecated)\n  /* The ruler for the axis is a list of doubles stored in the\n        List Section.  Values in the ruler may be anything.*/\n  2: 'Sparse',\n  /*The ruler for the axis is a list of doubles stored in the\n        List Section.  Values in the rulers must be strictly monotonically\n        increasing or decreasing.*/\n  3: 'Listed',\n  /* The ruler for the axis is a list of doubles stored in the\n        List Section.  Values in the rulers do not fit definition of Sparse.*/\n};\n\nexport const valueTypeTable = {\n  0: 'String',\n  1: 'Integer',\n  2: 'Float',\n  3: 'Complex',\n  4: 'Infinity',\n};\n","import * as table from './conversionTables';\n\nexport function getPar(param, searchStr) {\n  return param.paramArray.find((o) => o.name === searchStr) || '';\n}\n\nexport function getDigitalFilter(param) {\n  const orders = param.paramArray.find((e) => e.name === 'orders');\n  const factors = param.paramArray.find((e) => e.name === 'factors');\n  const sweep = param.paramArray.find((e) => e.name === 'x_sweep');\n  const acqTime = param.paramArray.find((e) => e.name === 'x_acq_time');\n  const nbPoints = param.paramArray.find((e) => e.name === 'x_points');\n\n  const shouldStop = [orders, factors, sweep, acqTime, nbPoints].some((e) => e === undefined);\n\n  if (shouldStop) {\n    new Error('There is not all parameters to calculate the number of point of digital filter')\n    return;\n  }\n\n  const s = parseInt(orders.value.slice(0, 1), 10);\n  const jump = orders.value.slice(1).length / s;\n\n  let arg = 0;\n  let factorNumber = new Int8Array(s);\n  let offsetO = 1;\n  let offsetF = 0;\n  for (let i = 0; i < s; i++) {\n    factorNumber[i] = parseInt(factors.value.slice(offsetF, offsetF + 1), 10);\n    offsetF += 1;\n  }\n\n  for (let i = 0; i < s; i++) {\n    let productorial = 1;\n    for (let j = i; j < s; j++) {\n      productorial *= factorNumber[j];\n    }\n    arg +=\n      (parseInt(orders.value.slice(offsetO, offsetO + jump), 10) - 1) /\n      productorial;\n    offsetO += jump;\n  }\n  arg /= 2;\n\n  const delaySec = arg / sweep.value;\n  return (delaySec / acqTime.value) * (nbPoints.value - 1);\n}\n\nexport function getMagnitude(param, searchStr) {\n  let par = getPar(param, searchStr) || 'NA';\n  if (par === 'NA') {\n    return { magnitude: 'NA', unit: 'NA' };\n  }\n  let unit = par.unit[0].base;\n  let unitMult = table.unitPrefixTable[par.unit[0].prefix];\n  let magnitude = par.value * 10 ** unitMult;\n  return { magnitude, unit };\n}\n\nexport function getUnit(buffer, size) {\n  let unit = [];\n  for (let i = 0; i < size; i++) {\n    let byte = buffer.readByte();\n    let prefix = table.prefixTable[byte >> 4];\n    let power = byte & 0b00001111;\n    let base = table.baseTable[buffer.readInt8()];\n    unit.push({ prefix, power, base });\n  }\n  return unit;\n}\n\nexport function getString(buffer, size) {\n  let string = [];\n  for (let i = 0; i < size; i++) {\n    let char = buffer.readChar();\n    if (char !== '\\u0000') {\n      string.push(char);\n    }\n  }\n  return string.join('');\n}\n\nexport function getParamName(buffer, size) {\n  let string = [];\n  for (let i = 0; i < size; i++) {\n    let char = buffer.readChar();\n    if (char !== ' ') {\n      string.push(char);\n    }\n  }\n  return string.join('');\n}\n\nexport function getArray(buffer, size, format) {\n  let double = [];\n  for (let i = 0; i < size; i++) {\n    switch (format) {\n      case 'readUint32':\n        double.push(buffer.readUint32());\n        break;\n      case 'readFloat64':\n        double.push(buffer.readFloat64());\n        break;\n      case 'readFloat32':\n        double.push(buffer.readFloat32());\n        break;\n      case 'readUint8':\n        double.push(buffer.readUint8());\n        break;\n      case 'readBoolean':\n        double.push(buffer.readBoolean());\n        break;\n      default:\n        break;\n    }\n  }\n  return double;\n}\n","import { IOBuffer } from 'iobuffer';\n\nimport * as table from './conversionTables';\nimport {\n  getPar,\n  getMagnitude,\n  getParamName,\n  getArray,\n  getUnit,\n  getString,\n  getDigitalFilter,\n} from './utils';\n\n/**\n * A parser for 1D and 2D JDL NMR Files\n * @param {ArrayBuffer} buffer - a buffer object containing the JDL file\n * @return {Object} - an Object with converted data\n */\nexport function parseJEOL(buffer) {\n  let ioBuffer = new IOBuffer(buffer);\n  ioBuffer.setBigEndian();\n\n  // read header section\n  let byte;\n  let header = {};\n  let byteArray = [];\n\n  header.fileIdentifier = ioBuffer.readChars(8);\n  header.endian = table.endianness[ioBuffer.readInt8()];\n  header.majorVersion = ioBuffer.readUint8();\n  header.minorVersion = ioBuffer.readUint16();\n  header.dataDimensionNumber = ioBuffer.readUint8();\n\n  header.dataDimensionExist = ioBuffer\n    .readByte()\n    .toString(2)\n    .split('')\n    .map((x) => Boolean(Number(x)));\n\n  byte = ioBuffer.readByte();\n  header.dataType = table.dataTypeTable[byte >> 6];\n  header.dataFormat = table.dataFormatTable[byte & 0b00111111];\n  header.dataInstrument = table.instrumentTable[ioBuffer.readInt8()];\n  header.translate = getArray(ioBuffer, 8, 'readUint8');\n  header.dataAxisType = getArray(ioBuffer, 8, 'readUint8').map(\n    (x) => table.dataAxisTypeTable[x],\n  );\n\n  header.dataUnits = getUnit(ioBuffer, 8);\n  header.title = getString(ioBuffer, 124);\n\n  for (byte in getArray(ioBuffer, 4, 'readUint8')) {\n    byteArray.push(table.dataAxisRangedTable[byte >> 4]);\n    byteArray.push(table.dataAxisRangedTable[byte & 0b00001111]);\n  }\n\n  header.dataAxisRanged = byteArray;\n  header.dataPoints = getArray(ioBuffer, 8, 'readUint32');\n  header.dataOffsetStart = getArray(ioBuffer, 8, 'readUint32');\n  header.dataOffsetStop = getArray(ioBuffer, 8, 'readUint32');\n  header.dataAxisStart = getArray(ioBuffer, 8, 'readFloat64');\n  header.dataAxisStop = getArray(ioBuffer, 8, 'readFloat64');\n\n  byteArray = new Uint8Array(4);\n  for (let i = 0; i < 4; i++) {\n    byteArray[i] = ioBuffer.readByte();\n  }\n  let year = 1990 + (byteArray[0] >> 1);\n  let month = ((byteArray[0] << 3) & 0b00001000) + (byteArray[1] >> 5);\n  let day = byteArray[2] & 0b00011111;\n  header.creationTime = { year, month, day };\n\n  for (let i = 0; i < 4; i++) {\n    byteArray[i] = ioBuffer.readByte();\n  }\n  year = 1990 + (byteArray[0] >> 1);\n  month = ((byteArray[0] << 3) & 0b00001000) + (byteArray[1] >> 5);\n  day = byteArray[2] & 0b00011111;\n  header.revisionTime = { year, month, day };\n\n  header.nodeName = getString(ioBuffer, 16);\n  header.site = getString(ioBuffer, 128);\n  header.author = getString(ioBuffer, 128);\n  header.comment = getString(ioBuffer, 128);\n\n  let dataAxisTitles = [];\n  for (let i = 0; i < 8; i++) {\n    dataAxisTitles.push(getString(ioBuffer, 32));\n  }\n  header.dataAxisTitles = dataAxisTitles;\n\n  header.baseFreq = getArray(ioBuffer, 8, 'readFloat64');\n  header.zeroPoint = getArray(ioBuffer, 8, 'readFloat64');\n  header.reversed = getArray(ioBuffer, 8, 'readBoolean');\n  ioBuffer.skip(3);\n  header.annotationOK = Boolean(ioBuffer.readByte() >> 7);\n  header.historyUsed = ioBuffer.readUint32();\n  header.historyLength = ioBuffer.readUint32();\n  header.paramStart = ioBuffer.readUint32();\n  header.paramLength = ioBuffer.readUint32();\n  header.ListStart = getArray(ioBuffer, 8, 'readUint32');\n  header.ListLength = getArray(ioBuffer, 8, 'readUint32');\n  header.dataStart = ioBuffer.readUint32();\n  header.dataLength = (ioBuffer.readUint32() << 32) | ioBuffer.readUint32();\n  header.contextStart = (ioBuffer.readUint32() << 32) | ioBuffer.readUint32();\n  header.contextLength = ioBuffer.readUint32();\n  header.annoteStart = (ioBuffer.readUint32() << 32) | ioBuffer.readUint32();\n  header.annoteLength = ioBuffer.readUint32();\n  header.totalSize = (ioBuffer.readUint32() << 32) | ioBuffer.readUint32();\n  header.unitLocation = getArray(ioBuffer, 8, 'readUint8');\n\n  let compoundUnit = [];\n  for (let i = 0; i < 2; i++) {\n    let unit = [];\n    let scaler = ioBuffer.readInt16();\n    for (let j = 0; j < 5; j++) {\n      byte = ioBuffer.readInt16();\n      unit.push(byte);\n    }\n    compoundUnit.push({ scaler, unit });\n  }\n  header.compoundUnit = compoundUnit;\n\n  // section parameters (param header and array)\n  if (header.endian === 'littleEndian') {\n    ioBuffer.setLittleEndian();\n  }\n  ioBuffer.seek(header.paramStart);\n\n  let parameters = {\n    parameterSize: ioBuffer.readUint32(),\n    lowIndex: ioBuffer.readUint32(),\n    highIndex: ioBuffer.readUint32(),\n    totalSize: ioBuffer.readUint32(),\n  };\n  let paramArray = [];\n  for (let p = 0; p < parameters.highIndex + 1; p++) {\n    ioBuffer.skip(4);\n    let scaler = ioBuffer.readInt16();\n    let unit = getUnit(ioBuffer, 5);\n    ioBuffer.skip(16);\n    let valueType = table.valueTypeTable[ioBuffer.readInt32()];\n    ioBuffer.seek(ioBuffer.offset - 20);\n    let value;\n    switch (valueType) {\n      case 'String':\n        value = getParamName(ioBuffer, 16);\n        break;\n      case 'Integer':\n        value = ioBuffer.readInt32();\n        ioBuffer.skip(12);\n        break;\n      case 'Float':\n        value = ioBuffer.readFloat64();\n        ioBuffer.skip(8);\n        break;\n      case 'Complex':\n        value.Real = ioBuffer.readFloat64();\n        value.Imag = ioBuffer.readFloat64();\n        break;\n      case 'Infinity':\n        value = ioBuffer.readInt32();\n        ioBuffer.skip(12);\n        break;\n      default:\n        ioBuffer.skip(16);\n        break;\n    }\n    ioBuffer.skip(4);\n    let name = getParamName(ioBuffer, 28);\n    paramArray.push({ name: name.toLowerCase(), scaler, unit, value, valueType });\n  }\n  parameters.paramArray = paramArray;\n\n  // data section\n  ioBuffer.seek(header.dataStart);\n  if (header.endian === 'littleEndian') {\n    ioBuffer.setLittleEndian();\n  }\n\n  let data = {};\n  let dataSectionCount = 1;\n  let realComplex = 0;\n  for (let type of header.dataAxisType) {\n    if (type === 'Real_Complex' && realComplex === 0) {\n      dataSectionCount += 1;\n      realComplex += 1;\n    }\n    if (type === 'Complex') {\n      dataSectionCount *= 2;\n    }\n  }\n\n  if (header.dataFormat !== 'One_D' && header.dataFormat !== 'Two_D') {\n    throw new Error('Only One_D and two_D data formats are implemented yet');\n  }\n\n  if (header.dataFormat === 'One_D') {\n    for (let s = 0; s < dataSectionCount; s++) {\n      let section;\n      if (header.dataType === '32Bit Float') {\n        section = getArray(ioBuffer, header.dataPoints[0], 'readFloat32');\n      } else if (header.dataType === '64Bit Float') {\n        section = getArray(ioBuffer, header.dataPoints[0], 'readFloat64');\n      }\n      if (s === 0) data.re = section;\n      if (s === 1) data.im = section;\n    }\n  }\n\n  if (header.dataFormat === 'Two_D') {\n    let me = 32;\n    let dim1 = header.dataPoints[0];\n    let dim2 = header.dataPoints[1];\n    // console.log(\n    // `dim1: ${dim1},\n    // dim2: ${dim2},\n    // total: ${dim1 * dim2},\n    // total(byte): ${dim1 * dim2 * 8},\n    // total(length): ${dim1 * dim2 * 8 * dataSectionCount}\n    // m size: ${dim1 / me} / ${dim2 / me}`,\n    // );\n    let I = dim2 / me;\n    let J = dim1 / me;\n\n    for (let s = 0; s < dataSectionCount; s++) {\n      let section;\n      for (let i = 0; i < I; i++) {\n        let row = [];\n        for (let j = 0; j < J; j++) {\n          for (let k = 0; k < me; k++) {\n            if (j === 0) {\n              if (header.dataType === '32Bit Float') {\n                row[k] = getArray(ioBuffer, me, 'readFloat32');\n              } else if (header.dataType === '64Bit Float') {\n                row[k] = getArray(ioBuffer, me, 'readFloat64');\n              }\n            } else {\n              if (header.dataType === '32Bit Float') {\n                row[k] = row[k].concat(getArray(ioBuffer, me, 'readFloat32'));\n              } else if (header.dataType === '64Bit Float') {\n                row[k] = row[k].concat(getArray(ioBuffer, me, 'readFloat64'));\n              }\n            }\n          }\n        }\n        if (i === 0) {\n          section = row;\n        } else {\n          section = section.concat(row);\n        }\n      }\n      if (dataSectionCount === 2) {\n        if (s === 0) data.re = section;\n        if (s === 1) data.im = section;\n      }\n      if (dataSectionCount === 4) {\n        if (s === 0) {\n          data.re = {};\n          data.re.re = section;\n        }\n        if (s === 1) data.re.im = section;\n        if (s === 2) {\n          data.im = {};\n          data.im.re = section;\n        }\n        if (s === 3) data.im.im = section;\n      }\n    }\n  }\n  // format output\n  let nucleus = [];\n  let acquisitionTime = [];\n  let spectralWidth = [];\n  let spectralWidthClipped = [];\n  let resolution = [];\n  let originFrequency = [];\n  let frequencyOffset = [];\n  let dataUnits = [];\n  if (header.dataFormat === 'One_D' || header.dataFormat === 'Two_D') {\n    nucleus.push(getPar(parameters, 'x_domain').value);\n    acquisitionTime.push(getMagnitude(parameters, 'x_acq_time'));\n    spectralWidth.push(getMagnitude(parameters, 'x_sweep'));\n    spectralWidthClipped.push(getMagnitude(parameters, 'x_sweep_clipped'));\n    resolution.push(getMagnitude(parameters, 'x_resolution'));\n    originFrequency.push(getMagnitude(parameters, 'x_freq'));\n    frequencyOffset.push(getMagnitude(parameters, 'x_offset'));\n    dataUnits.push(header.dataUnits[0].base);\n  }\n  if (header.dataFormat === 'Two_D') {\n    nucleus.push(getPar(parameters, 'y_domain').value);\n    acquisitionTime.push(getMagnitude(parameters, 'y_acq_time'));\n    spectralWidth.push(getMagnitude(parameters, 'y_sweep'));\n    resolution.push(getMagnitude(parameters, 'y_resolution'));\n    originFrequency.push(getMagnitude(parameters, 'y_freq'));\n    frequencyOffset.push(getMagnitude(parameters, 'y_offset'));\n    dataUnits.push(header.dataUnits[1].base);\n  }\n\n  let digest = {\n    info: {\n      sampleName: getPar(parameters, 'sample_id').value,\n      creationTime: header.creationTime,\n      revisionTime: header.revisionTime,\n      author: header.author,\n      comment: header.comment,\n      solvent: getPar(parameters, 'solvent').value,\n      temperature: getMagnitude(parameters, 'temp_get'),\n      probeName: getPar(parameters, 'probe_id').value,\n      fieldStrength: getMagnitude(parameters, 'field_strength'),\n      experiment: getPar(parameters, 'experiment').value,\n      dimension: header.dataDimensionNumber,\n      nucleus,\n      pulseStrength90: getMagnitude(parameters, 'x90'),\n      numberOfScans: getPar(parameters, 'scans').value,\n      relaxationTime: getMagnitude(parameters, 'relaxation_delay'),\n      dataPoints: header.dataPoints.slice(0, header.dataDimensionNumber),\n      dataOffsetStart: header.dataOffsetStart,\n      dataOffsetStop: header.dataOffsetStop,\n      dataUnits: dataUnits,\n      dataSections: Object.keys(data),\n      originFrequency,\n      frequencyOffset,\n      acquisitionTime,\n      spectralWidth,\n      spectralWidthClipped,\n      dataAxisStart: header.dataAxisStart,\n      dataAxisStop: header.dataAxisStop,\n      resolution: resolution,\n      decimationRate: getPar(parameters, 'decimation_rate').value,\n      paramList: JSON.stringify(parameters.paramArray.map((par) => par.name)),\n    },\n\n    headers: header,\n    parameters: parameters,\n    data: data,\n  };\n\n  digest.info.digitalFilter = getDigitalFilter(parameters);\n\n  return digest;\n}\n","export const gyromagneticRatio = {\n    '1H': 267.52218744e6,\n    '2H': 41.065e6,\n    '3H': 285.3508e6,\n    '3He': -203.789e6,\n    '7Li': 103.962e6,\n    '13C': 67.28284e6,\n    '14N': 19.331e6,\n    '15N': -27.116e6,\n    '17O': -36.264e6,\n    '19F': 251.662e6,\n    '23Na': 70.761e6,\n    '27Al': 69.763e6,\n    '29Si': -53.19e6,\n    '31P': 108.291e6,\n    '57Fe': 8.681e6,\n    '63Cu': 71.118e6,\n    '67Zn': 16.767e6,\n    '129Xe': -73.997e6,\n};\n//# sourceMappingURL=index.js.map","(function(){function a(d){for(var e=0,f=d.length-1,g=void 0,h=void 0,i=void 0,j=c(e,f);!0;){if(f<=e)return d[j];if(f==e+1)return d[e]>d[f]&&b(d,e,f),d[j];for(g=c(e,f),d[g]>d[f]&&b(d,g,f),d[e]>d[f]&&b(d,e,f),d[g]>d[e]&&b(d,g,e),b(d,g,e+1),h=e+1,i=f;!0;){do h++;while(d[e]>d[h]);do i--;while(d[i]>d[e]);if(i<h)break;b(d,h,i)}b(d,e,i),i<=j&&(e=h),i>=j&&(f=i-1)}}var b=function b(d,e,f){var _ref;return _ref=[d[f],d[e]],d[e]=_ref[0],d[f]=_ref[1],_ref},c=function c(d,e){return~~((d+e)/2)};'undefined'!=typeof module&&module.exports?module.exports=a:window.median=a})();\n","export function matrixCheck(data) {\n    if (data.length === 0 || data[0].length === 0) {\n        throw new RangeError('matrix should contain data');\n    }\n    const firstLength = data[0].length;\n    for (let i = 1; i < data.length; i++) {\n        if (data[i].length !== firstLength) {\n            throw new RangeError('All rows should has the same length');\n        }\n    }\n}\n//# sourceMappingURL=matrixCheck.js.map","import { matrixCheck } from './matrixCheck';\n/**\n * Get min and max Z\n *\n * @param matrix - matrix [rows][cols].\n */\nexport function matrixMinMaxZ(matrix) {\n    matrixCheck(matrix);\n    const nbRows = matrix.length;\n    const nbColumns = matrix[0].length;\n    let min = matrix[0][0];\n    let max = matrix[0][0];\n    for (let column = 0; column < nbColumns; column++) {\n        for (let row = 0; row < nbRows; row++) {\n            if (matrix[row][column] < min)\n                min = matrix[row][column];\n            if (matrix[row][column] > max)\n                max = matrix[row][column];\n        }\n    }\n    return { min, max };\n}\n//# sourceMappingURL=matrixMinMaxZ.js.map","/**\n * Create an array with numbers starting from \"from\" with step \"step\" of length \"length\"\n *\n * @param options - options\n * @return - array of distributed numbers with step \"step\" from \"from\"\n */\nexport function createStepArray(options = {}) {\n    let { from = 0, step = 1, length = 1000 } = options;\n    const array = new Float64Array(length);\n    let index = 0;\n    while (index < length) {\n        array[index] = from + step * index;\n        index++;\n    }\n    return array;\n}\n//# sourceMappingURL=createStepArray.js.map","/*\n    https://tools.ietf.org/html/rfc3629\n\n    UTF8-char = UTF8-1 / UTF8-2 / UTF8-3 / UTF8-4\n\n    UTF8-1    = %x00-7F\n\n    UTF8-2    = %xC2-DF UTF8-tail\n\n    UTF8-3    = %xE0 %xA0-BF UTF8-tail\n                %xE1-EC 2( UTF8-tail )\n                %xED %x80-9F UTF8-tail\n                %xEE-EF 2( UTF8-tail )\n\n    UTF8-4    = %xF0 %x90-BF 2( UTF8-tail )\n                %xF1-F3 3( UTF8-tail )\n                %xF4 %x80-8F 2( UTF8-tail )\n\n    UTF8-tail = %x80-BF\n*/\n/**\n * Check if a Node.js Buffer or Uint8Array is UTF-8.\n */\nfunction isUtf8(buf) {\n    if (!buf) {\n        return false;\n    }\n    var i = 0;\n    var len = buf.length;\n    while (i < len) {\n        // UTF8-1 = %x00-7F\n        if (buf[i] <= 0x7F) {\n            i++;\n            continue;\n        }\n        // UTF8-2 = %xC2-DF UTF8-tail\n        if (buf[i] >= 0xC2 && buf[i] <= 0xDF) {\n            // if(buf[i + 1] >= 0x80 && buf[i + 1] <= 0xBF) {\n            if (buf[i + 1] >> 6 === 2) {\n                i += 2;\n                continue;\n            }\n            else {\n                return false;\n            }\n        }\n        // UTF8-3 = %xE0 %xA0-BF UTF8-tail\n        // UTF8-3 = %xED %x80-9F UTF8-tail\n        if (((buf[i] === 0xE0 && buf[i + 1] >= 0xA0 && buf[i + 1] <= 0xBF) ||\n            (buf[i] === 0xED && buf[i + 1] >= 0x80 && buf[i + 1] <= 0x9F)) && buf[i + 2] >> 6 === 2) {\n            i += 3;\n            continue;\n        }\n        // UTF8-3 = %xE1-EC 2( UTF8-tail )\n        // UTF8-3 = %xEE-EF 2( UTF8-tail )\n        if (((buf[i] >= 0xE1 && buf[i] <= 0xEC) ||\n            (buf[i] >= 0xEE && buf[i] <= 0xEF)) &&\n            buf[i + 1] >> 6 === 2 &&\n            buf[i + 2] >> 6 === 2) {\n            i += 3;\n            continue;\n        }\n        // UTF8-4 = %xF0 %x90-BF 2( UTF8-tail )\n        //          %xF1-F3 3( UTF8-tail )\n        //          %xF4 %x80-8F 2( UTF8-tail )\n        if (((buf[i] === 0xF0 && buf[i + 1] >= 0x90 && buf[i + 1] <= 0xBF) ||\n            (buf[i] >= 0xF1 && buf[i] <= 0xF3 && buf[i + 1] >> 6 === 2) ||\n            (buf[i] === 0xF4 && buf[i + 1] >= 0x80 && buf[i + 1] <= 0x8F)) &&\n            buf[i + 2] >> 6 === 2 &&\n            buf[i + 3] >> 6 === 2) {\n            i += 4;\n            continue;\n        }\n        return false;\n    }\n    return true;\n}\n\nexport { isUtf8 as default };\n","import isutf8 from 'isutf8';\n/**\n * Ensure that the data is string. If it is an ArrayBuffer it will be converted to string using TextDecoder.\n * @param blob\n * @param options\n * @returns\n */\nexport function ensureString(blob, options = {}) {\n    if (typeof blob === 'string') {\n        return blob;\n    }\n    if (ArrayBuffer.isView(blob) || blob instanceof ArrayBuffer) {\n        const { encoding = guessEncoding(blob) } = options;\n        const decoder = new TextDecoder(encoding);\n        return decoder.decode(blob);\n    }\n    throw new TypeError(`blob must be a string, ArrayBuffer or ArrayBufferView`);\n}\nfunction guessEncoding(blob) {\n    const uint8 = ArrayBuffer.isView(blob)\n        ? new Uint8Array(blob.buffer, blob.byteOffset, blob.byteLength)\n        : new Uint8Array(blob);\n    if (uint8.length >= 2) {\n        if (uint8[0] === 0xfe && uint8[1] === 0xff) {\n            return 'utf-16be';\n        }\n        if (uint8[0] === 0xff && uint8[1] === 0xfe) {\n            return 'utf-16le';\n        }\n    }\n    //@ts-expect-error an ArrayBuffer is also ok\n    if (!isutf8(blob))\n        return 'latin1';\n    return 'utf-8';\n}\n//# sourceMappingURL=index.js.map","export function toKeyValue(object) {\n  let newObject = {};\n  for (let key in object) {\n    if (typeof object[key] !== 'string') {\n      newObject[key] = JSON.stringify(object[key]);\n    } else {\n      newObject[key] = object[key];\n    }\n  }\n  return newObject;\n}\n","import { parseJEOL } from 'jeolconverter';\nimport { gyromagneticRatio } from 'nmr-processing';\n\nimport packageJson from '../package.json';\n\nimport { formatDependentVariable } from './formatDependentVariable';\nimport { formatLinearDimension } from './formatLinearDimension';\nimport { toKeyValue } from './utils/toKeyValue';\n\nexport function fromJEOL(buffer) {\n  let parsedData = parseJEOL(buffer);\n  let info = parsedData.info;\n  let headers = parsedData.headers;\n  let parameters = parsedData.parameters;\n  let paramArray = { ...parameters.paramArray };\n  delete parameters.paramArray;\n  let data = parsedData.data;\n\n  // curation of parameters\n  let newInfo = {};\n  newInfo.title = `title: ${headers.title} / comment: ${headers.comment} / author:${headers.author} / site: ${headers.site}`;\n  newInfo.nucleus = info.nucleus.map((x) => {\n    if (x === 'Proton') {\n      x = '1H';\n    }\n    if (x === 'Carbon13') {\n      x = '13C';\n    }\n    if (x === 'Nitrogen15') {\n      x = '15N';\n    }\n    return x;\n  });\n  newInfo.sampleName = info.sampleName;\n  newInfo.date = JSON.stringify(info.creationTime);\n  newInfo.author = info.author;\n  //newInfo.comment = info.comment;\n  newInfo.solvent = info.solvent;\n  newInfo.temperature = info.temperature.magnitude;\n  newInfo.probeName = info.probeName || '';\n  newInfo.fieldStrength = info.fieldStrength.magnitude;\n\n  let gyromagneticRatioConstants = newInfo.nucleus.map(\n    (nucleus) => gyromagneticRatio[nucleus],\n  );\n  newInfo.baseFrequency = gyromagneticRatioConstants.map(\n    (gmr) => (info.fieldStrength.magnitude * gmr) / (2 * Math.PI * 1e6),\n  );\n  newInfo.pulseSequence = info.experiment;\n  newInfo.temperature =\n    info.temperature.unit.toLowerCase() === 'celsius'\n      ? 273.15 + info.temperature.magnitude\n      : info.temperature.magnitude;\n  newInfo.digitalFilter = info.digitalFilter;\n  newInfo.pulseStrength90 = 1 / (4 * info.pulseStrength90.magnitude);\n  newInfo.numberOfScans = info.numberOfScans;\n  newInfo.relaxationTime = info.relaxationTime.magnitude;\n\n  newInfo.isComplex = info.dataSections.includes('im');\n  newInfo.isFid = info.dataUnits[0] === 'Second';\n  newInfo.isFt = info.dataUnits[0] === 'Ppm';\n\n  newInfo.dimension = info.dimension;\n\n  const dimension = newInfo.dimension;\n  newInfo.originFrequency = info.originFrequency\n    .map((d) => d.magnitude / 1e6)\n    .slice(0, dimension);\n  newInfo.numberOfPoints = info.dataPoints.slice(0, 1);\n  newInfo.frequencyOffset = info.frequencyOffset\n    .map((f, i) => f.magnitude * newInfo.baseFrequency[i])\n    .slice(0, dimension);\n  newInfo.acquisitionTime = info.acquisitionTime\n    .map((a) => a.magnitude)\n    .slice(0, dimension);\n  newInfo.spectralWidth = info.spectralWidth\n    .map((sw, i) => (sw.magnitude / info.originFrequency[i].magnitude) * 1e6)\n    .slice(0, dimension);\n\n  // set options for dimensions\n  let dimensions = [];\n  let options = {};\n  let increment;\n  for (let d = 0; d < info.dimension; d++) {\n    increment = {\n      magnitude: info.acquisitionTime[d].magnitude / (info.dataPoints[d] - 1),\n      unit: 's',\n    };\n    if (info.dataUnits[d] === 'Second') {\n      options.quantityName = 'time';\n      options.originOffset = { magnitude: 0, unit: 's' };\n\n      if (d === 0) {\n        options.coordinatesOffset = {\n          magnitude: info.digitalFilter * increment.magnitude,\n          unit: 's',\n        };\n      } else {\n        options.coordinatesOffset = { magnitude: 0, unit: 's' };\n      }\n      options.reciprocal = {\n        originOffset: {\n          magnitude: info.originFrequency[d].magnitude,\n          unit: 'Hz',\n        },\n        quantityName: 'frequency',\n        coordinatesOffset: {\n          magnitude:\n            (info.frequencyOffset[d].magnitude *\n              info.originFrequency[d].magnitude) /\n            1000000,\n          unit: 'Hz',\n        },\n      };\n    } else if (info.dataUnits[d] === 'Ppm') {\n      options.quantityName = 'frequency';\n\n      let origin = info.originFrequency[d].magnitude;\n      options.originOffset = { magnitude: origin, unit: 'Hz' };\n\n      let firstPoint = info.dataOffsetStart[0];\n      let lastPoint = info.dataOffsetStop[0];\n      let dataLength = lastPoint - firstPoint + 1;\n\n      let spectralWidth = info.spectralWidthClipped[d].magnitude;\n      let incr = spectralWidth / info.dataPoints[d];\n      increment = { magnitude: incr, unit: 'Hz' };\n\n      let offset = (info.dataAxisStop[0] * origin) / 1000000;\n      options.coordinatesOffset = {\n        magnitude: offset,\n        unit: 'Hz',\n      };\n\n      // after increment is computed with whole frequency\n      // and original number of points, we recast the\n      // number of point for export\n      if (dataLength < info.dataPoints[d]) {\n        info.dataPoints[d] = dataLength;\n      }\n    }\n\n    if (d === 0) {\n      options.description = 'direct dimension';\n    } else {\n      options.description = 'indirect dimension';\n    }\n    dimensions.push(\n      formatLinearDimension(\n        headers.dataAxisTitles[d],\n        info.dataPoints[d],\n        increment,\n        options,\n      ),\n    );\n  }\n\n  // set options for dependentVariable\n  options = {\n    unit: 'none',\n    quantityName: 'relative intensity',\n    from: info.dataOffsetStart,\n    to: info.dataOffsetStop,\n  };\n\n  let dependentVariables = [];\n  dependentVariables.push(formatDependentVariable(data, 11, options));\n\n  let description = { ...newInfo };\n\n  delete description.paramList;\n  description.metadata = {\n    ...toKeyValue(headers),\n    ...toKeyValue(parameters),\n    ...toKeyValue(paramArray),\n  };\n\n  let dataStructure = {\n    timeStamp: Date.now(),\n    version: packageJson.version,\n    description,\n    tags: ['magnetic resonance'].concat(newInfo.nucleus),\n    application: {\n      spectralWidthClipped:\n        info.spectralWidthClipped[0].magnitude / newInfo.baseFrequency[0],\n    },\n    dimensions,\n    dependentVariables,\n  };\n  return [dataStructure];\n}\n","/**\n * Retrieve the list of files for further process\n * @param {FileCollection[]} fileList\n * @param {object} [options={}]\n * @param {number|number[]} [options.processingNumber] - processing number to select, default the smallest number\n * @param {number|number[]} [options.experimentNumber] - experiment number to select, default all\n * @param {boolean} [options.ignoreFID=false] - should we ignore fid\n * @param {boolean} [options.ignoreFT=false] - should we ignore the ft transformed fid\n * @param {boolean} [options.ignore1D=false] - should we ignore 1D spectra\n * @param {boolean} [options.ignore2D=false] - should we ignore 2D spectra\n * @param {boolean} [options.onlyFirstProcessedData=true] - should we take only the first processed data (procno).\n */\nexport function groupByExperiments(fileList, options = {}) {\n  let {\n    processingNumber,\n    experimentNumber,\n    ignoreFID = false,\n    ignoreFT = false,\n    ignore1D = false,\n    ignore2D = false,\n    onlyFirstProcessedData = true,\n  } = options;\n  if (typeof processingNumber === 'number') {\n    processingNumber = [processingNumber];\n  }\n  if (typeof experimentNumber === 'number') {\n    experimentNumber = [experimentNumber];\n  }\n\n  const experiments = {};\n  for (let file of fileList) {\n    let currentProcessingNo;\n    let currentExperimentNo;\n    let experiment;\n    let name;\n    let id;\n    const parts = file.relativePath.split('/');\n    if (file.relativePath.match(/\\/pdata\\/[0-9]+\\/.*$/)) {\n      currentProcessingNo = Number(parts[parts.length - 2]);\n      currentExperimentNo = Number(parts[parts.length - 4]);\n      name = parts[parts.length - 5];\n      id = parts.slice(0, -3).join('/');\n    } else if (file.relativePath.match(/[0-9]+\\/.*$/)) {\n      currentExperimentNo = Number(parts[parts.length - 2]);\n      name = parts[parts.length - 3] || parts[parts.length - 2];\n      id = parts.slice(0, -1).join('/');\n    } else {\n      continue;\n    }\n\n    if (experimentNumber && !experimentNumber.includes(currentExperimentNo)) {\n      continue;\n    }\n\n    if (!experiments[id]) {\n      experiments[id] = {\n        name,\n        expno: currentExperimentNo,\n        processedData: {},\n        fileList: [],\n      };\n    }\n    experiment = experiments[id];\n    if (currentProcessingNo) {\n      if (!experiment.processedData[currentProcessingNo]) {\n        experiment.processedData[currentProcessingNo] = {\n          fileList: [],\n          name,\n          expno: currentExperimentNo,\n        };\n      }\n      const processedData = experiment.processedData[currentProcessingNo];\n      processedData.fileList.push(file);\n      if (file.name.match(/^(1r|1i|2rr|procs|proc2s)$/)) {\n        processedData[file.name] = file;\n      }\n      if (file.name === '2rr') {\n        processedData.is2D = true;\n        processedData.isFT = true;\n      }\n      if (file.name === '1r') {\n        processedData.is1D = true;\n        processedData.isFT = true;\n      }\n    } else {\n      experiment.fileList.push(file);\n      if (file.name.match(/^(ser|fid|acqus|acqu2s)$/)) {\n        experiment[file.name] = file;\n      }\n      if (file.name === 'ser') {\n        experiment.is2D = true;\n        experiment.isFID = true;\n      }\n      if (file.name === 'fid') {\n        experiment.is1D = true;\n        experiment.isFID = true;\n      }\n    }\n  }\n  if (processingNumber) {\n    // we need to deal with the list of processingNumber that is specified\n    for (const key in experiments) {\n      const processedData = experiments[key].processedData;\n      const newProcessedData = {};\n      for (let key in processedData) {\n        if (!processingNumber.includes(parseInt(key, 10))) continue;\n        newProcessedData[key] = processedData[key];\n      }\n      experiments[key].processedData = newProcessedData;\n    }\n  } else if (onlyFirstProcessedData) {\n    // take the smallest processing and remove all the other\n    for (const key in experiments) {\n      const processedData = experiments[key].processedData;\n      const firstProcessedNumber = Object.keys(processedData).sort(\n        (a, b) => Number(a) - Number(b),\n      )[0];\n      if (firstProcessedNumber !== undefined) {\n        experiments[key].processedData = {\n          firstProcessedNumber: processedData[firstProcessedNumber],\n        };\n      }\n    }\n  }\n  // We convert the object to an array\n  // and before filtering we will move all the processedData\n  let experimentsArray = [];\n\n  for (let key in experiments) {\n    const experiment = { ...experiments[key] };\n    const processed = experiment.processedData;\n    delete experiment.processedData;\n    if (experiment.ser || experiment.fid) {\n      if (Object.keys(processed).length > 0) {\n        const firstProcessed = processed[Object.keys(processed)[0]];\n        if (firstProcessed.procs) {\n          experiment.fileList.push(firstProcessed.procs);\n          experiment.procs = firstProcessed.procs;\n        }\n        if (firstProcessed.proc2s) {\n          experiment.fileList.push(firstProcessed.proc2s);\n          experiment.proc2s = firstProcessed.proc2s;\n        }\n      }\n      experimentsArray.push(experiment);\n    }\n    for (let processedKey in processed) {\n      const oneProcessed = processed[processedKey];\n      if (oneProcessed['1r'] || oneProcessed['2rr']) {\n        if (experiment.acqus) {\n          oneProcessed.fileList.push(experiment.acqus);\n        }\n        if (experiment.acqu2s) {\n          oneProcessed.fileList.push(experiment.acqu2s);\n        }\n        experimentsArray.push({\n          acqus: experiment.acqus,\n          acqu2s: experiment.acqu2s,\n          ...oneProcessed,\n        });\n      }\n    }\n  }\n  // we can not easily filter\n  if (ignoreFID) {\n    experimentsArray = experimentsArray.filter((item) => !item.isFID);\n  }\n  if (ignoreFT) {\n    experimentsArray = experimentsArray.filter((item) => !item.isFT);\n  }\n  if (ignore1D) {\n    experimentsArray = experimentsArray.filter((item) => !item.is1D);\n  }\n  if (ignore2D) {\n    experimentsArray = experimentsArray.filter((item) => !item.is2D);\n  }\n\n  return experimentsArray;\n}\n","export function joinInfoMeta(target, toAppend) {\n  for (let key in toAppend.meta) {\n    if (target.meta[key] === undefined) {\n      target.meta[key] = toAppend.meta[key];\n    }\n  }\n\n  for (let key in toAppend.info) {\n    if (target.info[key] === undefined) {\n      target.info[key] = toAppend.info[key];\n    }\n  }\n\n  for (let key in target.meta) {\n    if (!Array.isArray(target.meta[key])) {\n      target.meta[key] = [target.meta[key]];\n    }\n  }\n}\n","/**\n * Dynamically type a string\n * @param {string} value String to dynamically type\n * @returns {boolean|string|number}\n */\nexport function parseString(value) {\n  if (value.length === 4 || value.length === 5) {\n    let lowercase = value.toLowerCase();\n\n    if (lowercase === 'true') return true;\n    if (lowercase === 'false') return false;\n  }\n  let number = Number(value);\n  if (number === 0 && !value.includes('0')) {\n    return value;\n  }\n  if (!Number.isNaN(number)) return number;\n  return value;\n}\n","const GC_MS_FIELDS = ['TIC', '.RIC', 'SCANNUMBER'];\nexport function complexChromatogram(result) {\n    let spectra = result.spectra;\n    let length = spectra.length;\n    let chromatogram = {\n        times: new Array(length),\n        series: {\n            ms: {\n                dimension: 2,\n                data: new Array(length),\n            },\n        },\n    };\n    let existingGCMSFields = [];\n    for (let i = 0; i < GC_MS_FIELDS.length; i++) {\n        let label = convertMSFieldToLabel(GC_MS_FIELDS[i]);\n        if (spectra[0][label]) {\n            existingGCMSFields.push(label);\n            chromatogram.series[label] = {\n                dimension: 1,\n                data: new Array(length),\n            };\n        }\n    }\n    for (let i = 0; i < length; i++) {\n        let spectrum = spectra[i];\n        chromatogram.times[i] = spectrum.pageValue;\n        for (let j = 0; j < existingGCMSFields.length; j++) {\n            chromatogram.series[existingGCMSFields[j]].data[i] = Number(spectrum[existingGCMSFields[j]]);\n        }\n        if (spectrum.data) {\n            chromatogram.series.ms.data[i] = [spectrum.data.x, spectrum.data.y];\n        }\n    }\n    result.chromatogram = chromatogram;\n}\nexport function isMSField(canonicDataLabel) {\n    return GC_MS_FIELDS.indexOf(canonicDataLabel) !== -1;\n}\nexport function convertMSFieldToLabel(value) {\n    return value.toLowerCase().replace(/[^a-z0-9]/g, '');\n}\n//# sourceMappingURL=complexChromatogram.js.map","export default function convertToFloatArray(stringArray) {\n    let floatArray = [];\n    for (let i = 0; i < stringArray.length; i++) {\n        floatArray.push(Number(stringArray[i]));\n    }\n    return floatArray;\n}\n//# sourceMappingURL=convertToFloatArray.js.map","export default function fastParseXYData(spectrum, value) {\n    // TODO need to deal with result\n    //  console.log(value);\n    // we check if deltaX is defined otherwise we calculate it\n    let yFactor = spectrum.yFactor;\n    let deltaX = spectrum.deltaX;\n    spectrum.isXYdata = true;\n    let currentData = { x: [], y: [] };\n    spectrum.data = currentData;\n    let currentX = spectrum.firstX;\n    let currentY = spectrum.firstY;\n    // we skip the first line\n    //\n    let endLine = false;\n    let ascii;\n    let i = 0;\n    for (; i < value.length; i++) {\n        ascii = value.charCodeAt(i);\n        if (ascii === 13 || ascii === 10) {\n            endLine = true;\n        }\n        else if (endLine) {\n            break;\n        }\n    }\n    // we proceed taking the i after the first line\n    let newLine = true;\n    let isDifference = false;\n    let isLastDifference = false;\n    let lastDifference = 0;\n    let isDuplicate = false;\n    let inComment = false;\n    let currentValue = 0; // can be a difference or a duplicate\n    let lastValue = 0; // must be the real last value\n    let isNegative = false;\n    let inValue = false;\n    let skipFirstValue = false;\n    let decimalPosition = 0;\n    for (; i <= value.length; i++) {\n        if (i === value.length)\n            ascii = 13;\n        else\n            ascii = value.charCodeAt(i);\n        if (inComment) {\n            // we should ignore the text if we are after $$\n            if (ascii === 13 || ascii === 10) {\n                newLine = true;\n                inComment = false;\n            }\n        }\n        else {\n            // when is it a new value ?\n            // when it is not a digit, . or comma\n            // it is a number that is either new or we continue\n            // eslint-disable-next-line no-lonely-if\n            if (ascii <= 57 && ascii >= 48) {\n                // a number\n                inValue = true;\n                if (decimalPosition > 0) {\n                    currentValue += (ascii - 48) / Math.pow(10, decimalPosition++);\n                }\n                else {\n                    currentValue *= 10;\n                    currentValue += ascii - 48;\n                }\n            }\n            else if (ascii === 44 || ascii === 46) {\n                // a \",\" or \".\"\n                inValue = true;\n                decimalPosition++;\n            }\n            else {\n                if (inValue) {\n                    // need to process the previous value\n                    if (newLine) {\n                        newLine = false; // we don't check the X value\n                        // console.log(\"NEW LINE\",isDifference, lastDifference);\n                        // if new line and lastDifference, the first value is just a check !\n                        // that we don't check ...\n                        if (isLastDifference)\n                            skipFirstValue = true;\n                    }\n                    else {\n                        // need to deal with duplicate and differences\n                        // eslint-disable-next-line no-lonely-if\n                        if (skipFirstValue) {\n                            skipFirstValue = false;\n                        }\n                        else {\n                            if (isDifference) {\n                                lastDifference = isNegative ? 0 - currentValue : currentValue;\n                                isLastDifference = true;\n                                isDifference = false;\n                            }\n                            else if (!isDuplicate) {\n                                lastValue = isNegative ? 0 - currentValue : currentValue;\n                            }\n                            let duplicate = isDuplicate ? currentValue - 1 : 1;\n                            for (let j = 0; j < duplicate; j++) {\n                                if (isLastDifference) {\n                                    currentY += lastDifference;\n                                }\n                                else {\n                                    currentY = lastValue;\n                                }\n                                currentData.x.push(currentX);\n                                currentData.y.push(currentY * yFactor);\n                                currentX += deltaX;\n                            }\n                        }\n                    }\n                    isNegative = false;\n                    currentValue = 0;\n                    decimalPosition = 0;\n                    inValue = false;\n                    isDuplicate = false;\n                }\n                // positive SQZ digits @ A B C D E F G H I (ascii 64-73)\n                if (ascii < 74 && ascii > 63) {\n                    inValue = true;\n                    isLastDifference = false;\n                    currentValue = ascii - 64;\n                }\n                else if (ascii > 96 && ascii < 106) {\n                    // negative SQZ digits a b c d e f g h i (ascii 97-105)\n                    inValue = true;\n                    isLastDifference = false;\n                    currentValue = ascii - 96;\n                    isNegative = true;\n                }\n                else if (ascii === 115) {\n                    // DUP digits S T U V W X Y Z s (ascii 83-90, 115)\n                    inValue = true;\n                    isDuplicate = true;\n                    currentValue = 9;\n                }\n                else if (ascii > 82 && ascii < 91) {\n                    inValue = true;\n                    isDuplicate = true;\n                    currentValue = ascii - 82;\n                }\n                else if (ascii > 73 && ascii < 83) {\n                    // positive DIF digits % J K L M N O P Q R (ascii 37, 74-82)\n                    inValue = true;\n                    isDifference = true;\n                    currentValue = ascii - 73;\n                }\n                else if (ascii > 105 && ascii < 115) {\n                    // negative DIF digits j k l m n o p q r (ascii 106-114)\n                    inValue = true;\n                    isDifference = true;\n                    currentValue = ascii - 105;\n                    isNegative = true;\n                }\n                else if (ascii === 36 && value.charCodeAt(i + 1) === 36) {\n                    // $ sign, we need to check the next one\n                    inValue = true;\n                    inComment = true;\n                }\n                else if (ascii === 37) {\n                    // positive DIF digits % J K L M N O P Q R (ascii 37, 74-82)\n                    inValue = true;\n                    isDifference = true;\n                    currentValue = 0;\n                    isNegative = false;\n                }\n                else if (ascii === 45) {\n                    // a \"-\"\n                    // check if after there is a number, decimal or comma\n                    let ascii2 = value.charCodeAt(i + 1);\n                    if ((ascii2 >= 48 && ascii2 <= 57) ||\n                        ascii2 === 44 ||\n                        ascii2 === 46) {\n                        inValue = true;\n                        if (!newLine)\n                            isLastDifference = false;\n                        isNegative = true;\n                    }\n                }\n                else if (ascii === 13 || ascii === 10) {\n                    newLine = true;\n                    inComment = false;\n                }\n                // and now analyse the details ... space or tabulation\n                // if \"+\" we just don't care\n            }\n        }\n    }\n}\n//# sourceMappingURL=fastParseXYData.js.map","const removeCommentRegExp = /\\$\\$.*/;\nconst peakTableSplitRegExp = /[,\\t ]+/;\nexport default function parsePeakTable(spectrum, value, result) {\n    spectrum.isPeaktable = true;\n    if (!spectrum.variables || Object.keys(spectrum.variables) === 2) {\n        parseXY(spectrum, value, result);\n    }\n    else {\n        parseXYZ(spectrum, value, result);\n    }\n    // we will add the data in the variables\n    if (spectrum.variables) {\n        for (let key in spectrum.variables) {\n            spectrum.variables[key].data = spectrum.data[key];\n        }\n    }\n}\nfunction parseXY(spectrum, value, result) {\n    let currentData = { x: [], y: [] };\n    spectrum.data = currentData;\n    // counts for around 20% of the time\n    let lines = value.split(/,? *,?[;\\r\\n]+ */);\n    for (let i = 1; i < lines.length; i++) {\n        let values = lines[i]\n            .trim()\n            .replace(removeCommentRegExp, '')\n            .split(peakTableSplitRegExp);\n        if (values.length % 2 === 0) {\n            for (let j = 0; j < values.length; j = j + 2) {\n                // takes around 40% of the time to add and parse the 2 values nearly exclusively because of Number\n                currentData.x.push(Number(values[j]) * spectrum.xFactor);\n                currentData.y.push(Number(values[j + 1]) * spectrum.yFactor);\n            }\n        }\n        else {\n            result.logs.push(`Format error: ${values}`);\n        }\n    }\n}\nfunction parseXYZ(spectrum, value, result) {\n    let currentData = {};\n    let variables = Object.keys(spectrum.variables);\n    let numberOfVariables = variables.length;\n    variables.forEach((variable) => (currentData[variable] = []));\n    spectrum.data = currentData;\n    // counts for around 20% of the time\n    let lines = value.split(/,? *,?[;\\r\\n]+ */);\n    for (let i = 1; i < lines.length; i++) {\n        let values = lines[i]\n            .trim()\n            .replace(removeCommentRegExp, '')\n            .split(peakTableSplitRegExp);\n        if (values.length % numberOfVariables === 0) {\n            for (let j = 0; j < values.length; j++) {\n                // todo should try to find a xFactor (y, ...)\n                currentData[variables[j % numberOfVariables]].push(Number(values[j]));\n            }\n        }\n        else {\n            result.logs.push(`Format error: ${values}`);\n        }\n    }\n}\n//# sourceMappingURL=parsePeakTable.js.map","export default function parseXYA(spectrum, value) {\n    let removeSymbolRegExp = /(\\(+|\\)+|<+|>+|\\s+)/g;\n    spectrum.isXYAdata = true;\n    let values;\n    let currentData = { x: [], y: [] };\n    spectrum.data = currentData;\n    let lines = value.split(/,? *,?[;\\r\\n]+ */);\n    for (let i = 1; i < lines.length; i++) {\n        values = lines[i].trim().replace(removeSymbolRegExp, '').split(',');\n        currentData.x.push(Number(values[0]));\n        currentData.y.push(Number(values[1]));\n    }\n}\n//# sourceMappingURL=parseXYA.js.map","import { isAnyArray } from 'is-any-array';\nimport quickSelectMedian from 'median-quickselect';\n\nfunction median(input) {\n  if (!isAnyArray(input)) {\n    throw new TypeError('input must be an array');\n  }\n\n  if (input.length === 0) {\n    throw new TypeError('input must not be empty');\n  }\n\n  return quickSelectMedian(input.slice());\n}\n\nexport { median as default };\n","import getMedian from 'ml-array-median';\nexport default function convertTo3DZ(spectra) {\n    let minZ = spectra[0].data.y[0];\n    let maxZ = minZ;\n    let ySize = spectra.length;\n    let xSize = spectra[0].data.x.length;\n    let z = new Array(ySize);\n    for (let i = 0; i < ySize; i++) {\n        z[i] = spectra[i].data.y;\n        for (let j = 0; j < xSize; j++) {\n            let value = z[i][j];\n            if (value < minZ)\n                minZ = value;\n            if (value > maxZ)\n                maxZ = value;\n        }\n    }\n    const firstX = spectra[0].data.x[0];\n    const lastX = spectra[0].data.x[spectra[0].data.x.length - 1]; // has to be -2 because it is a 1D array [x,y,x,y,...]\n    const firstY = spectra[0].pageValue;\n    const lastY = spectra[ySize - 1].pageValue;\n    // Because the min / max value are the only information about the matrix if we invert\n    // min and max we need to invert the array\n    if (firstX > lastX) {\n        for (let spectrum of z) {\n            spectrum.reverse();\n        }\n    }\n    if (firstY > lastY) {\n        z.reverse();\n    }\n    const medians = [];\n    for (let i = 0; i < z.length; i++) {\n        const row = Float64Array.from(z[i]);\n        for (let i = 0; i < row.length; i++) {\n            if (row[i] < 0)\n                row[i] = -row[i];\n        }\n        medians.push(getMedian(row));\n    }\n    const median = getMedian(medians);\n    return {\n        z,\n        minX: Math.min(firstX, lastX),\n        maxX: Math.max(firstX, lastX),\n        minY: Math.min(firstY, lastY),\n        maxY: Math.max(firstY, lastY),\n        minZ,\n        maxZ,\n        noise: median,\n    };\n}\n//# sourceMappingURL=convertTo3DZ.js.map","export default function generateContourLines(zData, options) {\n    let noise = zData.noise;\n    let z = zData.z;\n    let povarHeight0, povarHeight1, povarHeight2, povarHeight3;\n    let isOver0, isOver1, isOver2, isOver3;\n    let nbSubSpectra = z.length;\n    let nbPovars = z[0].length;\n    let pAx, pAy, pBx, pBy;\n    let x0 = zData.minX;\n    let xN = zData.maxX;\n    let dx = (xN - x0) / (nbPovars - 1);\n    let y0 = zData.minY;\n    let yN = zData.maxY;\n    let dy = (yN - y0) / (nbSubSpectra - 1);\n    let minZ = zData.minZ;\n    let maxZ = zData.maxZ;\n    // System.out.prvarln('y0 '+y0+' yN '+yN);\n    // -------------------------\n    // Povars attribution\n    //\n    // 0----1\n    // |  / |\n    // | /  |\n    // 2----3\n    //\n    // ---------------------d------\n    let iter = options.nbContourLevels * 2;\n    let contourLevels = new Array(iter);\n    let lineZValue;\n    for (let level = 0; level < iter; level++) {\n        // multiply by 2 for positif and negatif\n        let contourLevel = {};\n        contourLevels[level] = contourLevel;\n        let side = level % 2;\n        let factor = (maxZ - options.noiseMultiplier * noise) *\n            Math.exp((level >> 1) - options.nbContourLevels);\n        if (side === 0) {\n            lineZValue = factor + options.noiseMultiplier * noise;\n        }\n        else {\n            lineZValue = 0 - factor - options.noiseMultiplier * noise;\n        }\n        let lines = [];\n        contourLevel.zValue = lineZValue;\n        contourLevel.lines = lines;\n        if (lineZValue <= minZ || lineZValue >= maxZ)\n            continue;\n        for (let iSubSpectra = 0; iSubSpectra < nbSubSpectra - 1; iSubSpectra++) {\n            let subSpectra = z[iSubSpectra];\n            let subSpectraAfter = z[iSubSpectra + 1];\n            for (let povar = 0; povar < nbPovars - 1; povar++) {\n                povarHeight0 = subSpectra[povar];\n                povarHeight1 = subSpectra[povar + 1];\n                povarHeight2 = subSpectraAfter[povar];\n                povarHeight3 = subSpectraAfter[povar + 1];\n                isOver0 = povarHeight0 > lineZValue;\n                isOver1 = povarHeight1 > lineZValue;\n                isOver2 = povarHeight2 > lineZValue;\n                isOver3 = povarHeight3 > lineZValue;\n                // Example povar0 is over the plane and povar1 and\n                // povar2 are below, we find the varersections and add\n                // the segment\n                if (isOver0 !== isOver1 && isOver0 !== isOver2) {\n                    pAx =\n                        povar + (lineZValue - povarHeight0) / (povarHeight1 - povarHeight0);\n                    pAy = iSubSpectra;\n                    pBx = povar;\n                    pBy =\n                        iSubSpectra +\n                            (lineZValue - povarHeight0) / (povarHeight2 - povarHeight0);\n                    lines.push(pAx * dx + x0);\n                    lines.push(pAy * dy + y0);\n                    lines.push(pBx * dx + x0);\n                    lines.push(pBy * dy + y0);\n                }\n                // remove push does not help !!!!\n                if (isOver3 !== isOver1 && isOver3 !== isOver2) {\n                    pAx = povar + 1;\n                    pAy =\n                        iSubSpectra +\n                            1 -\n                            (lineZValue - povarHeight3) / (povarHeight1 - povarHeight3);\n                    pBx =\n                        povar +\n                            1 -\n                            (lineZValue - povarHeight3) / (povarHeight2 - povarHeight3);\n                    pBy = iSubSpectra + 1;\n                    lines.push(pAx * dx + x0);\n                    lines.push(pAy * dy + y0);\n                    lines.push(pBx * dx + x0);\n                    lines.push(pBy * dy + y0);\n                }\n                // test around the diagonal\n                if (isOver1 !== isOver2) {\n                    pAx =\n                        (povar +\n                            1 -\n                            (lineZValue - povarHeight1) / (povarHeight2 - povarHeight1)) *\n                            dx +\n                            x0;\n                    pAy =\n                        (iSubSpectra +\n                            (lineZValue - povarHeight1) / (povarHeight2 - povarHeight1)) *\n                            dy +\n                            y0;\n                    if (isOver1 !== isOver0) {\n                        pBx =\n                            povar +\n                                1 -\n                                (lineZValue - povarHeight1) / (povarHeight0 - povarHeight1);\n                        pBy = iSubSpectra;\n                        lines.push(pAx);\n                        lines.push(pAy);\n                        lines.push(pBx * dx + x0);\n                        lines.push(pBy * dy + y0);\n                    }\n                    if (isOver2 !== isOver0) {\n                        pBx = povar;\n                        pBy =\n                            iSubSpectra +\n                                1 -\n                                (lineZValue - povarHeight2) / (povarHeight0 - povarHeight2);\n                        lines.push(pAx);\n                        lines.push(pAy);\n                        lines.push(pBx * dx + x0);\n                        lines.push(pBy * dy + y0);\n                    }\n                    if (isOver1 !== isOver3) {\n                        pBx = povar + 1;\n                        pBy =\n                            iSubSpectra +\n                                (lineZValue - povarHeight1) / (povarHeight3 - povarHeight1);\n                        lines.push(pAx);\n                        lines.push(pAy);\n                        lines.push(pBx * dx + x0);\n                        lines.push(pBy * dy + y0);\n                    }\n                    if (isOver2 !== isOver3) {\n                        pBx =\n                            povar +\n                                (lineZValue - povarHeight2) / (povarHeight3 - povarHeight2);\n                        pBy = iSubSpectra + 1;\n                        lines.push(pAx);\n                        lines.push(pAy);\n                        lines.push(pBx * dx + x0);\n                        lines.push(pBy * dy + y0);\n                    }\n                }\n            }\n        }\n    }\n    return {\n        minX: zData.minX,\n        maxX: zData.maxX,\n        minY: zData.minY,\n        maxY: zData.maxY,\n        segments: contourLevels,\n    };\n}\n//# sourceMappingURL=generateContourLines.js.map","import convertTo3DZ from './convertTo3DZ';\nimport generateContourLines from './generateContourLines';\nexport default function add2D(result, options) {\n    let zData = convertTo3DZ(result.spectra);\n    if (!options.noContour) {\n        result.contourLines = generateContourLines(zData, options);\n        delete zData.z;\n    }\n    result.minMax = zData;\n}\n//# sourceMappingURL=add2D.js.map","import { gyromagneticRatio } from 'gyromagnetic-ratio';\nexport default function postProcessingNMR(entriesFlat) {\n    // specific NMR functions\n    for (let entry of entriesFlat) {\n        let observeFrequency = 0;\n        let shiftOffsetVal = 0;\n        for (let spectrum of entry.spectra) {\n            if (entry.ntuples && entry.ntuples.symbol) {\n                if (!observeFrequency && spectrum.observeFrequency) {\n                    observeFrequency = spectrum.observeFrequency;\n                }\n                if (!shiftOffsetVal && spectrum.shiftOffsetVal) {\n                    shiftOffsetVal = spectrum.shiftOffsetVal;\n                }\n            }\n            else {\n                observeFrequency = spectrum.observeFrequency;\n                shiftOffsetVal = spectrum.shiftOffsetVal;\n            }\n            if (observeFrequency) {\n                if (spectrum.xUnits && spectrum.xUnits.toUpperCase().includes('HZ')) {\n                    spectrum.xUnits = 'PPM';\n                    spectrum.xFactor = spectrum.xFactor / observeFrequency;\n                    spectrum.firstX = spectrum.firstX / observeFrequency;\n                    spectrum.lastX = spectrum.lastX / observeFrequency;\n                    spectrum.deltaX = spectrum.deltaX / observeFrequency;\n                    for (let i = 0; i < spectrum.data.x.length; i++) {\n                        spectrum.data.x[i] /= observeFrequency;\n                    }\n                }\n            }\n            if (shiftOffsetVal) {\n                let shift = spectrum.firstX - shiftOffsetVal;\n                spectrum.firstX = spectrum.firstX - shift;\n                spectrum.lastX = spectrum.lastX - shift;\n                for (let i = 0; i < spectrum.data.x.length; i++) {\n                    spectrum.data.x[i] -= shift;\n                }\n            }\n            // we will check if some nucleus are missing ...\n            if (entry.ntuples && entry.ntuples.nucleus && entry.ntuples.symbol) {\n                for (let i = 0; i < entry.ntuples.nucleus.length; i++) {\n                    let symbol = entry.ntuples.symbol[i];\n                    let nucleus = entry.ntuples.nucleus[i];\n                    if (symbol.startsWith('F') && !nucleus) {\n                        if (symbol === 'F1') {\n                            // if F1 is defined we will use F2\n                            if (entry.tmp.$NUC2) {\n                                entry.ntuples.nucleus[i] = entry.tmp.$NUC2;\n                            }\n                            else {\n                                let f2index = entry.ntuples.symbol.indexOf('F2');\n                                if (f2index && entry.ntuples.nucleus[f2index]) {\n                                    entry.ntuples.nucleus[i] = entry.ntuples.nucleus[f2index];\n                                }\n                            }\n                        }\n                        if (symbol === 'F2')\n                            entry.ntuples.nucleus[i] = entry.tmp.$NUC1;\n                    }\n                    if (symbol === 'F2') {\n                        entry.yType = entry.ntuples.nucleus[0];\n                    }\n                }\n            }\n            if (observeFrequency &&\n                entry.ntuples &&\n                entry.ntuples.symbol &&\n                entry.ntuples.nucleus) {\n                let unit = '';\n                let pageSymbolIndex = entry.ntuples.symbol.indexOf(spectrum.pageSymbol);\n                if (entry.ntuples.units && entry.ntuples.units[pageSymbolIndex]) {\n                    unit = entry.ntuples.units[pageSymbolIndex];\n                }\n                if (unit !== 'PPM') {\n                    if (pageSymbolIndex !== 0) {\n                        throw Error('Not sure about this ntuples format');\n                    }\n                    let ratio0 = gyromagneticRatio[entry.ntuples.nucleus[0]];\n                    let ratio1 = gyromagneticRatio[entry.ntuples.nucleus[1]];\n                    if (!ratio0 || !ratio1) {\n                        throw Error('Problem with determination of gyromagnetic ratio');\n                    }\n                    let ratio = (ratio0 / ratio1) * observeFrequency;\n                    spectrum.pageValue /= ratio;\n                }\n            }\n        }\n    }\n}\n//# sourceMappingURL=postProcessingNMR.js.map","export default function profiling(result, action, options) {\n    if (result.profiling) {\n        result.profiling.push({\n            action,\n            time: Date.now() - options.start,\n        });\n    }\n}\n//# sourceMappingURL=profiling.js.map","export default function simpleChromatogram(result) {\n    let data = result.spectra[0].data;\n    result.chromatogram = {\n        times: data.x.slice(),\n        series: {\n            intensity: {\n                dimension: 1,\n                data: data.y.slice(),\n            },\n        },\n    };\n}\n//# sourceMappingURL=simpleChromatogram.js.map","import add2D from './2d/add2D';\nimport { complexChromatogram } from './complexChromatogram';\nimport postProcessingNMR from './postProcessingNMR';\nimport profiling from './profiling';\nimport simpleChromatogram from './simpleChromatogram';\nexport default function postProcessing(entriesFlat, result, options) {\n    // converting Hz to ppm\n    postProcessingNMR(entriesFlat);\n    for (let entry of entriesFlat) {\n        if (Object.keys(entry.ntuples).length > 0) {\n            let newNtuples = [];\n            let keys = Object.keys(entry.ntuples);\n            for (let i = 0; i < keys.length; i++) {\n                let key = keys[i];\n                let values = entry.ntuples[key];\n                for (let j = 0; j < values.length; j++) {\n                    if (!newNtuples[j])\n                        newNtuples[j] = {};\n                    newNtuples[j][key] = values[j];\n                }\n            }\n            entry.ntuples = newNtuples;\n        }\n        if (entry.twoD && options.wantXY) {\n            add2D(entry, options);\n            profiling(result, 'Finished countour plot calculation', options);\n            if (!options.keepSpectra) {\n                delete entry.spectra;\n            }\n        }\n        // maybe it is a GC (HPLC) / MS. In this case we add a new format\n        if (options.chromatogram) {\n            if (entry.spectra.length > 1) {\n                complexChromatogram(entry);\n            }\n            else {\n                simpleChromatogram(entry);\n            }\n            profiling(result, 'Finished chromatogram calculation', options);\n        }\n        delete entry.tmp;\n    }\n}\n//# sourceMappingURL=postProcessing.js.map","export default function prepareNtuplesDatatable(currentEntry, spectrum, kind) {\n    let xIndex = -1;\n    let yIndex = -1;\n    let firstVariable = '';\n    let secondVariable = '';\n    if (kind.indexOf('++') > 0) {\n        firstVariable = kind.replace(/.*\\(([a-zA-Z0-9]+)\\+\\+.*/, '$1');\n        secondVariable = kind.replace(/.*\\.\\.([a-zA-Z0-9]+).*/, '$1');\n    }\n    else {\n        kind = kind.replace(/[^a-zA-Z]/g, '');\n        firstVariable = kind.charAt(0);\n        secondVariable = kind.charAt(1);\n        spectrum.variables = {};\n        for (let symbol of kind) {\n            let lowerCaseSymbol = symbol.toLowerCase();\n            let index = currentEntry.ntuples.symbol.indexOf(symbol);\n            if (index === -1)\n                throw Error(`Symbol undefined: ${symbol}`);\n            spectrum.variables[lowerCaseSymbol] = {};\n            for (let key in currentEntry.ntuples) {\n                if (currentEntry.ntuples[key][index]) {\n                    spectrum.variables[lowerCaseSymbol][key.replace(/^var/, '')] =\n                        currentEntry.ntuples[key][index];\n                }\n            }\n        }\n    }\n    xIndex = currentEntry.ntuples.symbol.indexOf(firstVariable);\n    yIndex = currentEntry.ntuples.symbol.indexOf(secondVariable);\n    if (xIndex === -1)\n        xIndex = 0;\n    if (yIndex === -1)\n        yIndex = 0;\n    if (currentEntry.ntuples.first) {\n        if (currentEntry.ntuples.first.length > xIndex) {\n            spectrum.firstX = currentEntry.ntuples.first[xIndex];\n        }\n        if (currentEntry.ntuples.first.length > yIndex) {\n            spectrum.firstY = currentEntry.ntuples.first[yIndex];\n        }\n    }\n    if (currentEntry.ntuples.last) {\n        if (currentEntry.ntuples.last.length > xIndex) {\n            spectrum.lastX = currentEntry.ntuples.last[xIndex];\n        }\n        if (currentEntry.ntuples.last.length > yIndex) {\n            spectrum.lastY = currentEntry.ntuples.last[yIndex];\n        }\n    }\n    if (currentEntry.ntuples.vardim &&\n        currentEntry.ntuples.vardim.length > xIndex) {\n        spectrum.nbPoints = currentEntry.ntuples.vardim[xIndex];\n    }\n    if (currentEntry.ntuples.factor) {\n        if (currentEntry.ntuples.factor.length > xIndex) {\n            spectrum.xFactor = currentEntry.ntuples.factor[xIndex];\n        }\n        if (currentEntry.ntuples.factor.length > yIndex) {\n            spectrum.yFactor = currentEntry.ntuples.factor[yIndex];\n        }\n    }\n    if (currentEntry.ntuples.units) {\n        if (currentEntry.ntuples.units.length > xIndex) {\n            if (currentEntry.ntuples.varname &&\n                currentEntry.ntuples.varname[xIndex]) {\n                spectrum.xUnits = `${currentEntry.ntuples.varname[xIndex]} [${currentEntry.ntuples.units[xIndex]}]`;\n            }\n            else {\n                spectrum.xUnits = currentEntry.ntuples.units[xIndex];\n            }\n        }\n        if (currentEntry.ntuples.units.length > yIndex) {\n            if (currentEntry.ntuples.varname &&\n                currentEntry.ntuples.varname[yIndex]) {\n                spectrum.yUnits = `${currentEntry.ntuples.varname[yIndex]} [${currentEntry.ntuples.units[yIndex]}]`;\n            }\n            else {\n                spectrum.yUnits = currentEntry.ntuples.units[yIndex];\n            }\n        }\n    }\n}\n//# sourceMappingURL=prepareNtuplesDatatable.js.map","export default function prepareSpectrum(spectrum) {\n    if (!spectrum.xFactor)\n        spectrum.xFactor = 1;\n    if (!spectrum.yFactor)\n        spectrum.yFactor = 1;\n}\n//# sourceMappingURL=prepareSpectrum.js.map","import { parseString } from 'dynamic-typing';\nimport { ensureString } from 'ensure-string';\nimport { isMSField, convertMSFieldToLabel } from './complexChromatogram';\nimport convertToFloatArray from './convertToFloatArray';\nimport fastParseXYData from './parse/fastParseXYData';\nimport parsePeakTable from './parse/parsePeakTable';\nimport parseXYA from './parse/parseXYA';\nimport postProcessing from './postProcessing';\nimport prepareNtuplesDatatable from './prepareNtuplesDatatable';\nimport prepareSpectrum from './prepareSpectrum';\nimport profiling from './profiling';\n// the following RegExp can only be used for XYdata, some peakTables have values with a \"E-5\" ...\nconst ntuplesSeparatorRegExp = /[ \\t]*,[ \\t]*/;\nconst defaultOptions = {\n    keepRecordsRegExp: /^$/,\n    canonicDataLabels: true,\n    canonicMetadataLabels: false,\n    dynamicTyping: true,\n    withoutXY: false,\n    chromatogram: false,\n    keepSpectra: false,\n    noContour: false,\n    nbContourLevels: 7,\n    noiseMultiplier: 5,\n    profiling: false,\n};\n/**\n *\n * @typedef {object} ConvertOptions\n * @property {RegExp} [options.keepRecordsRegExp=/^$/] - By default we don't keep meta information.\n * @property {boolean} [options.canonicDataLabels=true] - Canonize the Labels (uppercase without symbol).\n * @property {boolean} [options.canonicMetadataLabels=false] - Canonize the metadata Labels (uppercase without symbol).\n * @property {boolean} [options.dynamicTyping=false] - Convert numbers to Number.\n * @property {boolean} [options.withoutXY=false] - Remove the XY data.\n * @property {boolean} [options.chromatogram=false] - Special post-processing for GC / HPLC / MS.\n * @property {boolean} [options.keepSpectra=false] - Force to keep the spectra in case of 2D.\n * @property {boolean} [options.noContour=false] - Don't calculate countour in case of 2D.\n * @property {number} [options.nbContourLevels=7] - Number of positive / negative contour levels to calculate.\n * @property {number} [options.noiseMultiplier=5] - Define for 2D the level as 5 times the median as default.\n * @property {boolean} [options.profiling=false] - Add profiling information.\n */\n/**\n *\n * @typedef {object} Ntuples\n * @property {string[]} [varname]\n * @property {string[]} [symbol]\n * @property {string[]} [vartype]\n * @property {string[]} [varform]\n * @property {number[]} [vardim]\n * @property {string[]} [units]\n * @property {number[]} [factor]\n * @property {number[]} [first]\n * @property {number[]} [last]\n * @property {number[]} [min]\n * @property {number[]} [max]\n * @property {string[]} [nucleus]\n */\n/**\n * @typedef { Record<string, any> } Spectrum\n * @property {Record<string, number[]>} [data]\n * @property {number} [firstX]\n * @property {number} [lastX]\n * @property {number} [deltaX]\n * @property {number} [yFactor]\n * @property {number} [xFactor]\n * @property {number} [nbPoints]\n */\n/**\n *\n * @typedef {object} Entry\n * @property {Spectrum[]} spectra\n * @property {Ntuples} ntuples\n * @property {object} meta\n * @property {object} info\n * @property {object} tmp\n * @property {string} [title]\n * @property {string} [dataType]\n * @property {string} [dataClass]\n * @property {boolean} [twoD]\n */\n/**\n *\n * @typedef { object } ConvertResult\n * @property { object[] | boolean } profiling\n * @property { string[] } logs\n * @property { object[] } entries\n * @property { Entry[] } flatten\n */\n/**\n * Parse a jcamp.\n *\n * @param {string|ArrayBuffer|Uint8Array} jcamp\n * @param {ConvertOptions} [options]\n * @returns {ConvertResult}\n */\nexport function convert(jcamp, options = {}) {\n    jcamp = ensureString(jcamp);\n    options = { ...defaultOptions, ...options };\n    options.wantXY = !options.withoutXY;\n    options.start = Date.now();\n    let entriesFlat = [];\n    let result = {\n        profiling: options.profiling ? [] : false,\n        logs: [],\n        entries: [],\n    };\n    let tmpResult = { children: [] };\n    let currentEntry = tmpResult;\n    let parentsStack = [];\n    let spectrum = {};\n    if (typeof jcamp !== 'string') {\n        throw new TypeError('the JCAMP should be a string');\n    }\n    profiling(result, 'Before split to LDRS', options);\n    let ldrs = jcamp.replace(/[\\r\\n]+##/g, '\\n##').split('\\n##');\n    profiling(result, 'Split to LDRS', options);\n    if (ldrs[0])\n        ldrs[0] = ldrs[0].replace(/^[\\r\\n ]*##/, '');\n    for (let ldr of ldrs) {\n        // This is a new LDR\n        let position = ldr.indexOf('=');\n        let dataLabel = position > 0 ? ldr.substring(0, position) : ldr;\n        let dataValue = position > 0 ? ldr.substring(position + 1).trim() : '';\n        let canonicDataLabel = dataLabel.replace(/[_ -]/g, '').toUpperCase();\n        if (canonicDataLabel === 'DATATABLE') {\n            let endLine = dataValue.indexOf('\\n');\n            if (endLine === -1)\n                endLine = dataValue.indexOf('\\r');\n            if (endLine > 0) {\n                // ##DATA TABLE= (X++(I..I)), XYDATA\n                // We need to find the variables\n                let infos = dataValue.substring(0, endLine).split(/[ ,;\\t]+/);\n                prepareNtuplesDatatable(currentEntry, spectrum, infos[0]);\n                spectrum.datatable = infos[0];\n                if (infos[1] && infos[1].indexOf('PEAKS') > -1) {\n                    canonicDataLabel = 'PEAKTABLE';\n                }\n                else if (infos[1] &&\n                    (infos[1].indexOf('XYDATA') || infos[0].indexOf('++') > 0)) {\n                    canonicDataLabel = 'XYDATA';\n                    if (spectrum.nbPoints) {\n                        spectrum.deltaX =\n                            (spectrum.lastX - spectrum.firstX) / (spectrum.nbPoints - 1);\n                    }\n                }\n            }\n        }\n        if (canonicDataLabel === 'XYDATA') {\n            if (options.wantXY) {\n                prepareSpectrum(spectrum);\n                // well apparently we should still consider it is a PEAK TABLE if there are no '++' after\n                if (dataValue.match(/.*\\+\\+.*/)) {\n                    // ex: (X++(Y..Y))\n                    if (spectrum.nbPoints) {\n                        spectrum.deltaX =\n                            (spectrum.lastX - spectrum.firstX) / (spectrum.nbPoints - 1);\n                    }\n                    fastParseXYData(spectrum, dataValue, result);\n                }\n                else {\n                    parsePeakTable(spectrum, dataValue, result);\n                }\n                currentEntry.spectra.push(spectrum);\n                spectrum = {};\n            }\n            continue;\n        }\n        else if (canonicDataLabel === 'PEAKTABLE') {\n            if (options.wantXY) {\n                prepareSpectrum(spectrum);\n                parsePeakTable(spectrum, dataValue, result);\n                currentEntry.spectra.push(spectrum);\n                spectrum = {};\n            }\n            continue;\n        }\n        if (canonicDataLabel === 'PEAKASSIGNMENTS') {\n            if (options.wantXY) {\n                if (dataValue.match(/.*(XYA).*/)) {\n                    // ex: (XYA)\n                    parseXYA(spectrum, dataValue);\n                }\n                currentEntry.spectra.push(spectrum);\n                spectrum = {};\n            }\n            continue;\n        }\n        if (canonicDataLabel === 'TITLE') {\n            let parentEntry = currentEntry;\n            if (!parentEntry.children) {\n                parentEntry.children = [];\n            }\n            currentEntry = {\n                spectra: [],\n                ntuples: {},\n                info: {},\n                meta: {},\n                tmp: {}, // tmp information we need to keep for postprocessing\n            };\n            parentEntry.children.push(currentEntry);\n            parentsStack.push(parentEntry);\n            entriesFlat.push(currentEntry);\n            currentEntry.title = dataValue;\n        }\n        else if (canonicDataLabel === 'DATATYPE') {\n            currentEntry.dataType = dataValue;\n            if (dataValue.match(/(^nd|\\snd\\s)/i)) {\n                currentEntry.twoD = true;\n            }\n        }\n        else if (canonicDataLabel === 'NTUPLES') {\n            if (dataValue.match(/(^nd|\\snd\\s)/i)) {\n                currentEntry.twoD = true;\n            }\n        }\n        else if (canonicDataLabel === 'DATACLASS') {\n            currentEntry.dataClass = dataValue;\n        }\n        else if (canonicDataLabel === 'XUNITS') {\n            spectrum.xUnits = dataValue;\n        }\n        else if (canonicDataLabel === 'YUNITS') {\n            spectrum.yUnits = dataValue;\n        }\n        else if (canonicDataLabel === 'FIRSTX') {\n            spectrum.firstX = Number(dataValue);\n        }\n        else if (canonicDataLabel === 'LASTX') {\n            spectrum.lastX = Number(dataValue);\n        }\n        else if (canonicDataLabel === 'FIRSTY') {\n            spectrum.firstY = Number(dataValue);\n        }\n        else if (canonicDataLabel === 'LASTY') {\n            spectrum.lastY = Number(dataValue);\n        }\n        else if (canonicDataLabel === 'NPOINTS') {\n            spectrum.nbPoints = Number(dataValue);\n        }\n        else if (canonicDataLabel === 'XFACTOR') {\n            spectrum.xFactor = Number(dataValue);\n        }\n        else if (canonicDataLabel === 'YFACTOR') {\n            spectrum.yFactor = Number(dataValue);\n        }\n        else if (canonicDataLabel === 'MAXX') {\n            spectrum.maxX = Number(dataValue);\n        }\n        else if (canonicDataLabel === 'MINX') {\n            spectrum.minX = Number(dataValue);\n        }\n        else if (canonicDataLabel === 'MAXY') {\n            spectrum.maxY = Number(dataValue);\n        }\n        else if (canonicDataLabel === 'MINY') {\n            spectrum.minY = Number(dataValue);\n        }\n        else if (canonicDataLabel === 'DELTAX') {\n            spectrum.deltaX = Number(dataValue);\n        }\n        else if (canonicDataLabel === '.OBSERVEFREQUENCY' ||\n            canonicDataLabel === '$SFO1') {\n            if (!spectrum.observeFrequency) {\n                spectrum.observeFrequency = Number(dataValue);\n            }\n        }\n        else if (canonicDataLabel === '.OBSERVENUCLEUS') {\n            if (!spectrum.xType) {\n                currentEntry.xType = dataValue.replace(/[^a-zA-Z0-9]/g, '');\n            }\n        }\n        else if (canonicDataLabel === '$OFFSET') {\n            // OFFSET for Bruker spectra\n            currentEntry.shiftOffsetNum = 0;\n            if (!spectrum.shiftOffsetVal) {\n                spectrum.shiftOffsetVal = Number(dataValue);\n            }\n        }\n        else if (canonicDataLabel === '$REFERENCEPOINT') {\n            // OFFSET for Varian spectra\n            // if we activate this part it does not work for ACD specmanager\n            //         } else if (canonicDataLabel=='.SHIFTREFERENCE') {   // OFFSET FOR Bruker Spectra\n            //                 var parts = dataValue.split(/ *, */);\n            //                 currentEntry.shiftOffsetNum = parseInt(parts[2].trim());\n            //                 spectrum.shiftOffsetVal = Number(parts[3].trim());\n        }\n        else if (canonicDataLabel === 'VARNAME') {\n            currentEntry.ntuples.varname = dataValue.split(ntuplesSeparatorRegExp);\n        }\n        else if (canonicDataLabel === 'SYMBOL') {\n            currentEntry.ntuples.symbol = dataValue.split(ntuplesSeparatorRegExp);\n        }\n        else if (canonicDataLabel === 'VARTYPE') {\n            currentEntry.ntuples.vartype = dataValue.split(ntuplesSeparatorRegExp);\n        }\n        else if (canonicDataLabel === 'VARFORM') {\n            currentEntry.ntuples.varform = dataValue.split(ntuplesSeparatorRegExp);\n        }\n        else if (canonicDataLabel === 'VARDIM') {\n            currentEntry.ntuples.vardim = convertToFloatArray(dataValue.split(ntuplesSeparatorRegExp));\n        }\n        else if (canonicDataLabel === 'UNITS') {\n            currentEntry.ntuples.units = dataValue.split(ntuplesSeparatorRegExp);\n        }\n        else if (canonicDataLabel === 'FACTOR') {\n            currentEntry.ntuples.factor = convertToFloatArray(dataValue.split(ntuplesSeparatorRegExp));\n        }\n        else if (canonicDataLabel === 'FIRST') {\n            currentEntry.ntuples.first = convertToFloatArray(dataValue.split(ntuplesSeparatorRegExp));\n        }\n        else if (canonicDataLabel === 'LAST') {\n            currentEntry.ntuples.last = convertToFloatArray(dataValue.split(ntuplesSeparatorRegExp));\n        }\n        else if (canonicDataLabel === 'MIN') {\n            currentEntry.ntuples.min = convertToFloatArray(dataValue.split(ntuplesSeparatorRegExp));\n        }\n        else if (canonicDataLabel === 'MAX') {\n            currentEntry.ntuples.max = convertToFloatArray(dataValue.split(ntuplesSeparatorRegExp));\n        }\n        else if (canonicDataLabel === '.NUCLEUS') {\n            if (currentEntry.ntuples) {\n                currentEntry.ntuples.nucleus = dataValue.split(ntuplesSeparatorRegExp);\n            }\n        }\n        else if (canonicDataLabel === 'PAGE') {\n            spectrum.page = dataValue.trim();\n            spectrum.pageValue = Number(dataValue.replace(/^.*=/, ''));\n            spectrum.pageSymbol = spectrum.page.replace(/[=].*/, '');\n        }\n        else if (canonicDataLabel === 'RETENTIONTIME') {\n            spectrum.pageValue = Number(dataValue);\n        }\n        else if (isMSField(canonicDataLabel)) {\n            spectrum[convertMSFieldToLabel(canonicDataLabel)] = dataValue;\n        }\n        else if (canonicDataLabel === 'SAMPLEDESCRIPTION') {\n            spectrum.sampleDescription = dataValue;\n        }\n        else if (canonicDataLabel.startsWith('$NUC')) {\n            if (!currentEntry.tmp[canonicDataLabel] && !dataValue.includes('off')) {\n                currentEntry.tmp[canonicDataLabel] = dataValue.replace(/[<>]/g, '');\n            }\n        }\n        else if (canonicDataLabel === 'END') {\n            currentEntry = parentsStack.pop();\n        }\n        if (currentEntry &&\n            currentEntry.info &&\n            currentEntry.meta &&\n            canonicDataLabel.match(options.keepRecordsRegExp)) {\n            let value = dataValue.trim();\n            let target, label;\n            if (dataLabel.startsWith('$')) {\n                label = options.canonicMetadataLabels\n                    ? canonicDataLabel.substring(1)\n                    : dataLabel.substring(1);\n                target = currentEntry.meta;\n            }\n            else {\n                label = options.canonicDataLabels ? canonicDataLabel : dataLabel;\n                target = currentEntry.info;\n            }\n            if (options.dynamicTyping) {\n                value = parseString(value);\n            }\n            if (target[label]) {\n                if (!Array.isArray(target[label])) {\n                    target[label] = [target[label]];\n                }\n                target[label].push(value);\n            }\n            else {\n                target[label] = value;\n            }\n        }\n    }\n    profiling(result, 'Finished parsing', options);\n    postProcessing(entriesFlat, result, options);\n    profiling(result, 'Total time', options);\n    /*\n    if (result.children && result.children.length>0) {\n      result = { ...result, ...result.children[0] };\n    }\n    */\n    result.entries = tmpResult.children;\n    result.flatten = entriesFlat;\n    return result;\n}\n//# sourceMappingURL=convert.js.map","import { convert as convertJcamp } from 'jcampconverter';\n\n/**\n *\n * @param {File} file\n * @param {object} [options={}]\n * @param {RegExp} [options.keepRecordsRegExp={}]\n * @returns\n */\nexport async function parseData(file, options) {\n  if (!file) return { info: {}, meta: {} };\n  const data = await file.text();\n  let { keepRecordsRegExp = /.*/ } = options;\n  let result = convertJcamp(data, {\n    keepRecordsRegExp,\n  });\n  const firstSpectrum = result.flatten.length === 0 ? {} : result.flatten[0];\n  return firstSpectrum;\n}\n","import { IOBuffer } from 'iobuffer';\nimport { createStepArray } from 'ml-spectra-processing';\n\nexport async function setFIDSpectrumData(file, spectra) {\n  let td = parseInt(spectra.meta.TD[0], 10);\n  let ioBuffer = new IOBuffer(await file.arrayBuffer());\n\n  if (td * spectra.meta.nbSubSpectra * 4 > ioBuffer.length) {\n    throw new RangeError(\n      `td: ${td} and nbSubSpectra: ${nbSubSpectra} exceed the buffer size`,\n    );\n  }\n\n  let SW_H = Number(spectra.meta.SW_h[0]);\n\n  let SF = Number(spectra.meta.SFO1[0]);\n\n  spectra.meta.DATATYPE = 'NMR FID';\n\n  let DW = 1 / (2 * SW_H);\n  let AQ = td * DW;\n\n  let endian = parseInt(spectra.meta.BYTORDA, 10);\n  endian = endian ? 0 : 1;\n\n  if (endian) {\n    ioBuffer.setLittleEndian();\n  } else {\n    ioBuffer.setBigEndian();\n  }\n\n  let nbSubSpectra = spectra.meta.nbSubSpectra\n    ? spectra.meta.nbSubSpectra / 2\n    : 1;\n\n  spectra.spectra = new Array(nbSubSpectra);\n\n  const stopReading = td / 2;\n  for (let j = 0; j < nbSubSpectra; j++) {\n    let toSave = {\n      dataType: 'NMR FID',\n      dataTable: '(X++(R..R))',\n      nbPoints: td,\n      firstX: 0,\n      lastX: AQ,\n      nucleus: spectra.meta.NUC1,\n      xUnit: 'Sec',\n      yUnit: 'Arbitrary',\n      data: {\n        x: createStepArray({ length: td, step: DW }),\n        re: new Float64Array(td),\n        im: new Float64Array(td),\n      },\n      isXYdata: true,\n      observeFrequency: SF,\n      title: spectra.meta.TITLE,\n      deltaX: DW,\n    };\n    spectra.spectra[j] = toSave;\n\n    for (let i = 0; i < stopReading; i++) {\n      spectra.spectra[j].data.re[i] = ioBuffer.readInt32();\n      spectra.spectra[j].data.im[i] = ioBuffer.readInt32();\n    }\n  }\n}\n","import { IOBuffer } from 'iobuffer';\nimport { isAnyArray } from 'is-any-array';\n\nexport async function setXYSpectrumData(file, spectra) {\n  let ioBufferReal = file.re ? new IOBuffer(await file.re.arrayBuffer()) : null;\n  let ioBufferImaginary = file.im\n    ? new IOBuffer(await file.im.arrayBuffer())\n    : null;\n  let td = getDirectParameter(spectra.meta.SI);\n  let swP = getDirectParameter(spectra.meta.SW_p);\n  let sf = getDirectParameter(spectra.meta.SF);\n  let bf = sf;\n  let offset = getDirectParameter(\n    spectra.shiftOffsetVal || spectra.meta.OFFSET,\n  );\n  spectra.meta.observeFrequency = sf;\n  spectra.meta.brukerReference = bf;\n  spectra.meta.DATATYPE = 'NMR Spectrum';\n\n  let endian = parseInt(spectra.meta.BYTORDP, 10);\n  endian = endian ? 0 : 1;\n\n  let nbSubSpectra = spectra.meta.nbSubSpectra ? spectra.meta.nbSubSpectra : 1;\n  if (endian) {\n    if (file.re) ioBufferReal.setLittleEndian();\n    if (file.im) ioBufferImaginary.setLittleEndian();\n  } else {\n    if (file.re) ioBufferReal.setBigEndian();\n    if (file.im) ioBufferImaginary.setBigEndian();\n  }\n\n  for (let i = 0; i < nbSubSpectra; i++) {\n    let toSave = {\n      dataType: 'NMR Spectrum',\n      nbPoints: td,\n      firstX: offset,\n      lastX: offset - swP / sf,\n      xUnit: 'PPM',\n      yUnit: 'Arbitrary',\n      isXYdata: true,\n      nucleus: spectra.meta.NUC1,\n      observeFrequency: sf,\n      title: spectra.meta.TITLE,\n      deltaX: -(swP / sf) / (td - 1),\n    };\n\n    let deltaX = toSave.deltaX;\n    let x = new Float64Array(td);\n    let re = new Float64Array(td);\n    let im = file.im ? new Float64Array(td) : null;\n\n    if (im) {\n      for (let k = 0; k < td; ++k) {\n        x[k] = offset + k * deltaX;\n        re[k] = ioBufferReal.readInt32();\n        im[k] = ioBufferImaginary.readInt32();\n      }\n    } else {\n      for (let k = 0; k < td; ++k) {\n        x[k] = offset + k * deltaX;\n        re[k] = ioBufferReal.readInt32();\n      }\n    }\n\n    toSave.data = im ? { x, re, im } : { x, re };\n\n    spectra.spectra.push(toSave);\n  }\n}\n\nfunction getDirectParameter(meta) {\n  return Number(isAnyArray(meta) ? meta[0] : meta);\n}\n","import { joinInfoMeta } from './joinMetaInfo.js';\nimport { parseData } from './parseData';\nimport { setFIDSpectrumData } from './setFIDSpectrumData';\nimport { setXYSpectrumData } from './setXYSpectrumData';\n\nexport async function convert1D(files, options) {\n  const result = await parseData(files.procs, options);\n  const acqus = await parseData(files.acqus, options);\n  joinInfoMeta(result, acqus);\n\n  if (files['1r'] || files['1i']) {\n    await setXYSpectrumData(\n      {\n        re: files['1r'],\n        im: files['1i'],\n      },\n      result,\n    );\n  } else if (files.fid) {\n    await setFIDSpectrumData(files.fid, result);\n  }\n\n  return result;\n}\n","export function mergeMetadata(main, complement) {\n  for (let key in complement.meta) {\n    if (main.meta[key]) {\n      if (!Array.isArray(main.meta[key])) {\n        main.meta[key] = [main.meta[key]];\n      }\n      main.meta[key].push(complement.meta[key]);\n    } else if (main.meta[key] === undefined) {\n      main.meta[key] = [complement.meta[key]];\n    }\n  }\n  return main;\n}\n","import { joinInfoMeta } from './joinMetaInfo.js';\nimport { mergeMetadata } from './mergeMetadata';\nimport { parseData } from './parseData';\nimport { setFIDSpectrumData } from './setFIDSpectrumData';\nimport { setXYSpectrumData } from './setXYSpectrumData';\n\nexport async function convert2D(files, options) {\n  const result = mergeMetadata(\n    await parseData(files.procs, options),\n    await parseData(files.proc2s, options),\n  );\n\n  const acqus = mergeMetadata(\n    await parseData(files.acqus, options),\n    await parseData(files.acqu2s, options),\n  );\n\n  joinInfoMeta(result, acqus);\n\n  result.meta.nbSubSpectra = files['2rr']\n    ? parseInt(result.meta.SI[1], 10)\n    : parseInt(result.meta.TD[1], 10);\n\n  if (!result.meta.SW_p) {\n    // eslint-disable-next-line camelcase\n    result.meta.SW_p = result.meta.SW_h;\n  }\n  if (!result.meta.SF) {\n    result.meta.SF = result.meta.SFO1;\n  }\n\n  let firstY, lastY, xOffset, yOffset;\n  if (files['2rr']) {\n    let sf = Number(result.meta.SF[1]);\n    let swP = Number(result.meta.SW_p[1] || result.meta.SW[1]);\n    yOffset = Number(result.meta.OFFSET[1]);\n    xOffset = Number(result.meta.OFFSET[0]);\n    firstY = yOffset;\n    lastY = yOffset - swP / sf;\n    result.meta.firstY = firstY;\n    result.meta.lastY = lastY;\n    await setXYSpectrumData({ re: files['2rr'] }, result, true);\n  } else if (files.ser) {\n    firstY = 0;\n    lastY = result.meta.nbSubSpectra;\n    let xWindowSize = Number(result.meta.SW[0]);\n    let yWindowSize = Number(result.meta.SW[1]);\n    let xTransmitterFrequency = Number(result.meta.SFO1[0]);\n    let yTransmitterFrequency = Number(result.meta.SFO1[1]);\n    let xTransmitterFrequencyOffset = Number(result.meta.O1[0]);\n    let yTransmitterFrequencyOffset = Number(result.meta.O1[1]);\n    xOffset =\n      xTransmitterFrequencyOffset / xTransmitterFrequency + xWindowSize / 2;\n    yOffset =\n      yTransmitterFrequencyOffset / yTransmitterFrequency + yWindowSize / 2;\n    await setFIDSpectrumData(files.ser, result);\n  }\n\n  let pageValue = firstY;\n  let nbSubSpectra = result.meta.nbSubSpectra / (files['2rr'] ? 1 : 2);\n  let deltaY = (lastY - firstY) / (nbSubSpectra - 1);\n  for (let i = 0; i < nbSubSpectra; i++) {\n    pageValue += deltaY;\n    result.spectra[i].pageValue = pageValue;\n  }\n  let { NUC1: nuc1, AXNUC: axnuc, SF: sf } = result.meta;\n  const nucleus = axnuc ? axnuc : nuc1 ? nuc1 : [];\n  result.info['2D_Y_NUCLEUS'] = nucleus[1];\n  result.info['2D_X_NUCLEUS'] = nucleus[0];\n  result.info['2D_Y_FRECUENCY'] = sf[1];\n  result.info['2D_X_FRECUENCY'] = sf[0];\n  result.info['2D_Y_OFFSET'] = yOffset;\n  result.info['2D_X_OFFSET'] = xOffset;\n  result.info.twoD = true;\n  result.twoD = true;\n\n  return result;\n}\n","import { matrixMinMaxZ } from 'ml-spectra-processing';\n/**\n * Those functions should disappear if add2D becomes accessible in jcampconvert\n * @param spectra\n * @returns {{z: Array, minX: *, maxX: *, minY: *, maxY: *, minZ: *, maxZ: *, noise: number}}\n */\n\nexport default function convertTo3DZ(spectra) {\n  let ySize = spectra.length;\n  let xSize = spectra[0].data.re.length;\n  let z = new Array(ySize);\n\n  for (let i = 0; i < ySize; i++) {\n    z[i] = new Float64Array(spectra[i].data.re);\n  }\n  const firstX = spectra[0].data.x[0];\n  const lastX = spectra[0].data.x[xSize - 1];\n  const firstY = spectra[0].pageValue;\n  const lastY = spectra[ySize - 1].pageValue;\n\n  // Because the min / max value are the only information about the matrix if we invert\n  // min and max we need to invert the array\n  if (firstX > lastX) {\n    for (let spectrum of z) {\n      spectrum.reverse();\n    }\n  }\n  if (firstY > lastY) {\n    z.reverse();\n  }\n\n  let minMaxX =\n    firstX < lastX\n      ? { minX: firstX, maxX: lastX }\n      : { minX: lastX, maxX: firstX };\n  let minMaxY =\n    firstY < lastY\n      ? { minY: firstY, maxY: lastY }\n      : { minY: lastY, maxY: firstY };\n\n  const { min: minZ, max: maxZ } = matrixMinMaxZ(z);\n\n  return {\n    z,\n    minZ,\n    maxZ,\n    ...minMaxX,\n    ...minMaxY,\n  };\n}\n","import { convert1D } from './convert1D';\nimport { convert2D } from './convert2D';\nimport convertTo3DZ from './convertTo3DZ.js';\n\n/**\n * Extract information and data from bruker files.\n * @param {File[]} brukerFiles - Needed bruker files to parse raw data.\n * @param {object} [options = {}] - options.\n * @param {boolean} [options.xy] - if true, spectra data is a object with x and y\n * @param {boolean} [options.keepSpectra=false] - for 2D should we keep the spectra or just the matrix ?\n * @param {RegExp} [options.keepRecordsRegExp='\\/.*\\/'] - regular expresion to parse the metadata of the spectrum.\n * @returns\n */\n\nexport async function convertOneExperiment(brukerFiles, options = {}) {\n  let result;\n  if (brukerFiles.ser || brukerFiles['2rr']) {\n    result = await convert2D(brukerFiles, options);\n  } else if (brukerFiles['1r'] || brukerFiles['1i'] || brukerFiles.fid) {\n    result = await convert1D(brukerFiles, options);\n  } else {\n    throw new RangeError('The current files are invalid');\n  }\n\n  result.source = {};\n  for (let key in brukerFiles) {\n    if ((typeof brukerFiles[key]).match(/number|string|boolean/)) {\n      result.source[key] = brukerFiles[key];\n    }\n    // todo we could as well keep the FileList at this level if\n    // we want to keep the original data\n  }\n\n  //normalizing info\n  result.meta.DATE = Number(result.meta.DATE);\n  if (result.meta.GRPDLY) {\n    result.meta.GRPDLY = Number(result.meta.GRPDLY);\n    result.meta.DSPFVS = Number(result.meta.DSPFVS);\n    result.meta.DECIM = Number(result.meta.DECIM);\n  }\n\n  for (let key in result.meta) {\n    if (!Array.isArray(result.meta[key])) {\n      continue;\n    }\n    if (result.meta[key].length === 1) {\n      result.meta[key] = result.meta[key][0];\n    } else if (\n      typeof result.meta[key][0] === 'string' &&\n      result.meta[key][0].indexOf('(0..') > -1\n    ) {\n      result.meta[key] = result.meta[key][0];\n    }\n  }\n\n  if (result.twoD) {\n    result.minMax = convertTo3DZ(result.spectra);\n\n    if (!options.keepSpectra) {\n      delete result.spectra;\n    }\n  }\n\n  return result;\n}\n","import { groupByExperiments } from './groupByExperiments';\nimport { convertOneExperiment } from './util/convertOneExperiment.js';\n\n/**\n *\n * @param {*} fileCollection\n * @param {object} [options={}]\n * @param {object} [options.filter]\n * @param {object} [options.converter]\n * @returns\n */\nexport async function convertFileCollection(fileCollection, options = {}) {\n  const { filter, converter } = options;\n  const results = [];\n  const experiments = groupByExperiments(fileCollection, filter);\n  for (let experiment of experiments) {\n    const result = await convertOneExperiment(experiment, converter);\n    if (result) {\n      results.push(result);\n    }\n  }\n  return results;\n}\n","import { isAnyArray } from 'is-any-array';\n\nexport function convertToFloatArray(data) {\n  if (isAnyArray(data[0])) {\n    return data.map((e) => Float64Array.from(e));\n  } else if (isAnyArray(data)) {\n    return Float64Array.from(data);\n  } else if (typeof data === 'object') {\n    let keys = Object.keys(data);\n    for (let key of keys) {\n      data[key] = convertToFloatArray(data[key]);\n    }\n    return data;\n  }\n  return data;\n}\n","/* eslint-disable no-loss-of-precision */\n/**\n * Returns the group delay for old Bruker NMR spectra\n * @param {number} gspfvs\n * @param {number} decim\n * @return {number}\n */\nexport function getDigitalFilterParameters(grpdly, dspfvs, decim) {\n  let value;\n  if (grpdly > 0) {\n    value = Number(grpdly);\n  } else if (dspfvs > 14) {\n    value = 0;\n  } else if (!brukerDspTable[dspfvs]) {\n    throw new Error('dspfvs not in lookup table');\n  } else {\n    const dspfvsList = brukerDspTable[dspfvs];\n    if (!dspfvsList[decim]) throw new Error('decim not in lookup table');\n    value = dspfvsList[decim];\n  }\n\n  return value;\n}\n\nconst brukerDspTable = {\n  10: {\n    2: 44.75,\n    3: 33.5,\n    4: 66.625,\n    6: 59.083333333333333,\n    8: 68.5625,\n    12: 60.375,\n    16: 69.53125,\n    24: 61.020833333333333,\n    32: 70.015625,\n    48: 61.34375,\n    64: 70.2578125,\n    96: 61.505208333333333,\n    128: 70.37890625,\n    192: 61.5859375,\n    256: 70.439453125,\n    384: 61.626302083333333,\n    512: 70.4697265625,\n    768: 61.646484375,\n    1024: 70.48486328125,\n    1536: 61.656575520833333,\n    2048: 70.492431640625,\n  },\n  11: {\n    2: 46,\n    3: 36.5,\n    4: 48,\n    6: 50.166666666666667,\n    8: 53.25,\n    12: 69.5,\n    16: 72.25,\n    24: 70.166666666666667,\n    32: 72.75,\n    48: 70.5,\n    64: 73,\n    96: 70.666666666666667,\n    128: 72.5,\n    192: 71.333333333333333,\n    256: 72.25,\n    384: 71.666666666666667,\n    512: 72.125,\n    768: 71.833333333333333,\n    1024: 72.0625,\n    1536: 71.916666666666667,\n    2048: 72.03125,\n  },\n  12: {\n    2: 46,\n    3: 36.5,\n    4: 48,\n    6: 50.166666666666667,\n    8: 53.25,\n    12: 69.5,\n    16: 71.625,\n    24: 70.166666666666667,\n    32: 72.125,\n    48: 70.5,\n    64: 72.375,\n    96: 70.666666666666667,\n    128: 72.5,\n    192: 71.333333333333333,\n    256: 72.25,\n    384: 71.666666666666667,\n    512: 72.125,\n    768: 71.833333333333333,\n    1024: 72.0625,\n    1536: 71.916666666666667,\n    2048: 72.03125,\n  },\n  13: {\n    2: 2.75,\n    3: 2.8333333333333333,\n    4: 2.875,\n    6: 2.9166666666666667,\n    8: 2.9375,\n    12: 2.9583333333333333,\n    16: 2.96875,\n    24: 2.9791666666666667,\n    32: 2.984375,\n    48: 2.9895833333333333,\n    64: 2.9921875,\n    96: 2.9947916666666667,\n  },\n};\n","export function getNucleusFromMetadata(metaData, info, subfix) {\n  let nucleus = [];\n  if (metaData[`${subfix}AXNUC`]) {\n    nucleus = metaData[`${subfix}AXNUC`];\n    if (!Array.isArray(nucleus)) nucleus = [nucleus];\n    nucleus = checkForNucleus(nucleus);\n  }\n\n  if (nucleus.length < 1 && metaData[`${subfix}NUC1`]) {\n    nucleus = metaData[`${subfix}NUC1`];\n    if (!Array.isArray(nucleus)) nucleus = [nucleus];\n    nucleus = checkForNucleus(nucleus);\n  }\n\n  if (nucleus.length === 0) {\n    if (metaData['.NUCLEUS']) {\n      nucleus = metaData['.NUCLEUS'].split(',').map((nuc) => nuc.trim());\n    } else if (metaData['.OBSERVENUCLEUS']) {\n      nucleus = [metaData['.OBSERVENUCLEUS'].replace(/[^A-Za-z0-9]/g, '')];\n    } else {\n      nucleus = getNucleusFrom2DExperiment(info.experiment);\n    }\n    nucleus = checkForNucleus(nucleus);\n  }\n\n  if (metaData['2D_X_NUCLEUS'] && metaData['2D_Y_NUCLEUS']) {\n    if (nucleus.length < 2) {\n      nucleus = [\n        metaData['2D_X_NUCLEUS'].replace(/[^A-Za-z0-9]/g, ''),\n        metaData['2D_Y_NUCLEUS'].replace(/[^A-Za-z0-9]/g, ''),\n      ];\n    }\n  }\n  return nucleus;\n}\n\n/**\n * Returns a list of likely nuclei based on an experiment string\n * This is really an hypothesis and should not be used\n * @param {string} experiment\n * @return {string[]}\n */\n\nfunction getNucleusFrom2DExperiment(experiment) {\n  if (typeof experiment !== 'string') {\n    return [];\n  }\n  experiment = experiment.toLowerCase();\n  if (experiment.includes('jres')) {\n    return ['1H', 'Hz'];\n  }\n  if (experiment.includes('hmbc') || experiment.includes('hsqc')) {\n    return ['1H', '13C'];\n  }\n  if (experiment.includes('cosy') || experiment.includes('tocsy')) {\n    return ['1H', '1H'];\n  }\n  return [];\n}\n\nfunction checkForNucleus(nucleus) {\n  nucleus = nucleus.map((value) =>\n    value\n      .replace(/[^A-Za-z0-9]/g, '')\n      .replace('NA', '')\n      .replace('off', ''),\n  );\n  let beforeLength = nucleus.length;\n  nucleus = nucleus.filter((value) => value);\n  return nucleus.length !== beforeLength ? [] : nucleus;\n}\n","/**\n * Returns an experiment string based on a pulse sequence\n * @param {string} pulse\n * @return {string}\n */\nexport function getSpectrumType(meta = {}, info = {}, options = {}) {\n  const { subfix = '' } = options;\n\n  if (meta === null) meta = {};\n  if (typeof meta === 'string') meta = { pulseSequence: meta };\n\n  let spectyp = info[`${subfix}SPECTYP`];\n  spectyp = (Array.isArray(spectyp) ? spectyp[0] : spectyp || '')\n    .replace(/^<(.*)>$/, '$1') // eslint-disable-line prefer-named-capture-group\n    .toLowerCase();\n\n  if (spectyp.length > 0 && spectyp !== 'undefined') return spectyp;\n\n  let pulse = Array.isArray(meta.pulseSequence)\n    ? meta.pulseSequence[0]\n    : meta.pulseSequence || '';\n\n  if (typeof pulse !== 'string') {\n    return meta.dimension ? `${meta.dimension}d` : '';\n  }\n\n  pulse = pulse.toLowerCase();\n  if (\n    pulse.includes('zg') ||\n    pulse.includes('single_pulse_dec') ||\n    pulse.includes('udeft')\n  ) {\n    return '1d';\n  }\n\n  if (\n    pulse.includes('hsqct') ||\n    (pulse.includes('invi') && (pulse.includes('ml') || pulse.includes('di')))\n  ) {\n    return 'hsqctocsy';\n  }\n\n  if (pulse.includes('hsqc') || pulse.includes('invi')) {\n    return 'hsqc';\n  }\n\n  if (\n    pulse.includes('hmbc') ||\n    (pulse.includes('inv4') && pulse.includes('lp'))\n  ) {\n    return 'hmbc';\n  }\n\n  if (pulse.includes('hmqc')) {\n    return 'hmqc';\n  }\n\n  if (pulse.includes('cosy')) {\n    return 'cosy';\n  }\n\n  if (pulse.includes('jres')) {\n    return 'jres';\n  }\n\n  if (\n    pulse.includes('tocsy') ||\n    pulse.includes('mlev') ||\n    pulse.includes('dipsi')\n  ) {\n    return 'tocsy';\n  }\n\n  if (pulse.includes('noesy')) {\n    return 'noesy';\n  }\n\n  if (pulse.includes('roesy')) {\n    return 'roesy';\n  }\n\n  if (pulse.includes('dept')) {\n    return 'dept';\n  }\n\n  if (pulse.includes('jmod') || pulse.includes('apt')) {\n    return 'aptjmod';\n  }\n\n  if (pulse.includes('inad')) {\n    return 'inadequate';\n  }\n\n  if (pulse.includes('adeq')) {\n    return 'adequate';\n  }\n\n  return meta.dimension ? `${meta.dimension}d` : '';\n}\n","import { gyromagneticRatio } from 'nmr-processing';\n\nimport { getDigitalFilterParameters } from './getDigitalFilterParameters';\nimport { getNucleusFromMetadata } from './getNucleusFromMetadata';\nimport { getSpectrumType } from './getSpectrumType';\n\nexport function getInfoFromJCAMP(metaData, options = {}) {\n  const { subfix = '' } = options;\n  const info = {\n    dimension: 0,\n    nucleus: [],\n    isFid: false,\n    isFt: false,\n    isComplex: false,\n  };\n  let metadataString = JSON.stringify(metaData);\n  const separator = metadataString.match('\\r\\n') ? '\\r\\n' : '\\n';\n\n  let { JCAMPDX: jcampdx = '', ORIGIN: origin = '' } = metaData;\n  let creator = String(jcampdx).toLowerCase() + origin.toLowerCase();\n\n  if (creator.includes('mestre') || creator.includes('nova')) {\n    creator = 'mnova';\n  }\n\n  if (creator === 'mnova') {\n    if (metaData.LONGDATE) {\n      info.date = metaData.LONGDATE;\n    }\n  }\n\n  info.nucleus = getNucleusFromMetadata(metaData, info, subfix);\n  info.dimension = info.nucleus.length;\n\n  maybeAdd(info, 'title', metaData.TITLE);\n  maybeAdd(info, 'solvent', metaData['.SOLVENTNAME']);\n  maybeAdd(info, 'temperature', metaData[`${subfix}TE`] || metaData['.TE']);\n  maybeAdd(info, 'type', metaData.DATATYPE);\n\n  if (info.type) {\n    let typeLowerCase = info.type[0].toUpperCase();\n    if (typeLowerCase.indexOf('FID') >= 0) {\n      info.isFid = true;\n      info.isComplex = true;\n    } else if (typeLowerCase.indexOf('SPECTRUM') >= 0) {\n      info.isFt = true;\n      info.isComplex = true;\n    }\n  }\n\n  maybeAdd(\n    info,\n    'pulseSequence',\n    metaData['.PULSESEQUENCE'] ||\n      metaData['.PULPROG'] ||\n      metaData[`${subfix}PULPROG`],\n  );\n  maybeAdd(info, 'experiment', getSpectrumType(info, metaData, { subfix }));\n\n  maybeAddNumber(info, 'originFrequency', metaData['.OBSERVEFREQUENCY']);\n  if (creator !== 'mnova' && creator !== 'mestre') {\n    const gyromagneticRatioConst = gyromagneticRatio[info.nucleus[0]];\n    maybeAdd(info, 'probeName', metaData[`${subfix}PROBHD`]);\n    maybeAdd(info, 'originFrequency', metaData[`${subfix}SFO1`]);\n    maybeAdd(info, 'baseFrequency', metaData[`${subfix}BF1`]);\n    if (!('baseFrequency' in info) && 'originFrequency' in info) {\n      maybeAdd(info, 'baseFrequency', info.originFrequency);\n    }\n\n    if (!['baseFrequency', 'originFrequency'].some((e) => !info[e])) {\n      const { baseFrequency, originFrequency } = info;\n      let fieldStrength =\n        2 * Math.PI * (baseFrequency[0] / gyromagneticRatioConst) * 1e6;\n\n      let frequencyOffset = baseFrequency.map(\n        (bf, i) => (originFrequency[i] - bf) * 1e6,\n      );\n\n      maybeAdd(info, 'fieldStrength', fieldStrength);\n      maybeAdd(info, 'frequencyOffset', frequencyOffset);\n    }\n    maybeAddNumber(info, 'spectralWidth', metaData[`${subfix}SW`]);\n    maybeAddNumber(\n      info,\n      'spectralWidth',\n      metaData[`${subfix}QM_SPECTRAL_WIDTH`],\n    );\n\n    maybeAdd(info, 'numberOfPoints', metaData[`${subfix}TD`]);\n\n    const numberOfPoints = info.numberOfPoints;\n\n    maybeAdd(info, 'sampleName', metaData[`${subfix}NAME`]);\n\n    if (metaData[`${subfix}FNTYPE`] !== undefined) {\n      maybeAdd(\n        info,\n        'acquisitionMode',\n        parseInt(metaData[`${subfix}FNTYPE`], 10),\n      );\n    }\n    let varName = metaData[`${subfix}VARNAME`]\n      ? metaData[`${subfix}VARNAME`].split(',')[0]\n      : '';\n    if (varName === 'TIME') {\n      let value =\n        typeof metaData.LAST === 'string' || metaData.LAST instanceof String\n          ? metaData.LAST.replace(' ', '').split(',')[0]\n          : metaData.LAST;\n      maybeAddNumber(info, 'acquisitionTime', value);\n    }\n\n    if (!info.acquisitionTime) {\n      if (!['numberOfPoints', 'spectralWidth'].some((e) => !info[e])) {\n        const { spectralWidth, originFrequency } = info;\n        maybeAdd(\n          info,\n          'acquisitionTime',\n          Number(\n            (numberOfPoints[0] - 1) /\n              (2 * spectralWidth[0] * originFrequency[0]),\n          ),\n        );\n      }\n    }\n\n    if (metaData[`${subfix}P`]) {\n      let pulseStrength =\n        1e6 / (metaData[`${subfix}P`].split(separator)[1].split(' ')[1] * 4);\n      maybeAdd(info, 'pulseStrength90', pulseStrength);\n    }\n    if (metaData[`${subfix}D`]) {\n      let relaxationTime = metaData[`${subfix}D`]\n        .split(separator)[1]\n        .split(' ')[1];\n      maybeAddNumber(info, 'relaxationTime', relaxationTime);\n    }\n\n    maybeAddNumber(info, 'numberOfScans', metaData[`${subfix}NS`]);\n    maybeAddNumber(info, 'numberOfScans', metaData[`${subfix}QM_NSCANS`]);\n\n    let increment;\n    if (!['numberOfPoints', 'spectralWidth'].some((e) => !info[e])) {\n      const { spectralWidth, numberOfPoints } = info;\n      if (info.isFid) {\n        maybeAdd(info, 'groupDelay', metaData[`${subfix}GRPDLY`] || 0);\n        maybeAdd(info, 'DSPFVS', metaData[`${subfix}DSPFVS`]);\n        maybeAdd(info, 'DECIM', metaData[`${subfix}DECIM`]);\n\n        if (!['groupDelay', 'DSPFVS', 'DECIM'].some((e) => !info[e])) {\n          let { groupDelay, DSPFVS, DECIM } = info;\n          let digitalFilterParameters = getDigitalFilterParameters(\n            groupDelay[0],\n            DSPFVS[0],\n            DECIM[0],\n          );\n          maybeAdd(info, 'digitalFilter', digitalFilterParameters);\n        }\n\n        increment = numberOfPoints.map((nb) => {\n          return info.acquisitionTime[0] / (nb - 1);\n        });\n      } else {\n        increment = numberOfPoints.map((nb, i) => {\n          return spectralWidth[i] / (nb - 1);\n        });\n      }\n    }\n\n    maybeAdd(info, 'increment', increment);\n    if (metaData[`${subfix}DATE`]) {\n      info.date = new Date(\n        parseInt(metaData[`${subfix}DATE`], 10) * 1000,\n      ).toISOString();\n    }\n\n    if (!info.solvent) {\n      maybeAdd(\n        info,\n        'solvent',\n        Array.isArray(metaData[`${subfix}SOLVENT`])\n          ? metaData[`${subfix}SOLVENT`][0]\n          : metaData[`${subfix}SOLVENT`],\n      );\n    }\n  }\n\n  if (metaData.SYMBOL) {\n    let symbols = metaData.SYMBOL.split(/[, ]+/);\n    if (symbols.includes('R') && symbols.includes('I')) {\n      info.isComplex = true;\n    }\n  }\n\n  for (let key in info) {\n    if (info[key].length === 1) info[key] = info[key][0];\n  }\n\n  if (!Array.isArray(info.nucleus)) info.nucleus = [info.nucleus];\n\n  return info;\n}\n\nfunction maybeAddNumber(obj, name, value) {\n  if (value === undefined) return;\n  if (typeof value === 'string') {\n    value = Number(value.replace(/\\$.*/, ''));\n  }\n  maybeAdd(obj, name, value);\n}\n\nfunction maybeAdd(obj, name, value) {\n  if (value === undefined) return;\n  if (Array.isArray(value)) {\n    obj[name] = value.map(cleanValue);\n  } else {\n    obj[name] = [cleanValue(value)];\n  }\n}\n\nfunction cleanValue(value) {\n  if (typeof value === 'string') {\n    if (value.startsWith('<') && value.endsWith('>')) {\n      value = value.substring(1, value.length - 1);\n    }\n    value = value.trim();\n  }\n  return value;\n}\n","import { convertFileCollection } from 'brukerconverter';\n\nimport packageJson from '../package.json';\n\nimport { convertToFloatArray } from './utils/convertToFloatArray';\nimport { getInfoFromJCAMP } from './utils/getInfoFromJCAMP';\n\n/**\n * convert/export all the file with a Bruker structure like. It is a wrapper of brukerconverter\n * the same options you can pass.\n */\n\nconst defaultOptions = {\n  converter: {\n    xy: true,\n    noContour: true,\n    keepRecordsRegExp: /.*/,\n    profiling: true,\n  },\n};\n\nexport async function fromBruker(fileCollection, options = {}) {\n  let parseData = await convertFileCollection(fileCollection, {\n    ...defaultOptions,\n    ...options,\n  });\n  let dataStructure = [];\n  for (let entry of parseData) {\n    let metadata = { ...entry.info, ...entry.meta };\n    let info = getInfoFromJCAMP(metadata);\n\n    let dimensions = [];\n    let dependentVariables = [];\n\n    let dependentVariable = {};\n\n    if (info.dimension === 1) {\n      dependentVariable.components = entry.spectra;\n    } else if (info.dimension === 2) {\n      entry.minMax.z = convertToFloatArray(entry.minMax.z);\n      dependentVariable.components = entry.minMax;\n    }\n\n    let dimension = {\n      increment: info.increment,\n      numberOfPoints: info.numberOfPoints,\n    };\n\n    if (info.fid) {\n      dimension.coordinatesOffset = {\n        magnitude: -info.digitalFilter * info.increment,\n        units: 'second',\n      };\n    } else {\n      dimension.coordinatesOffset = {\n        magnitude:\n          info.frequencyOffset / info.baseFrequency - 0.5 * info.spectraWidth,\n        units: 'ppm',\n      };\n    }\n\n    dimensions.push(dimension);\n    dependentVariables.push(dependentVariable);\n\n    const { source } = entry;\n\n    dataStructure.push({\n      dimensions,\n      dependentVariables,\n      source,\n      info,\n      meta: metadata,\n      timeStamp: new Date().valueOf(),\n      version: packageJson.version,\n    });\n  }\n  return dataStructure;\n}\n","import { convert } from 'jcampconverter';\n\nimport packageJson from '../package.json';\n\nimport { convertToFloatArray } from './utils/convertToFloatArray';\nimport { getInfoFromJCAMP } from './utils/getInfoFromJCAMP';\n\nconst expectedTypes = ['ndnmrspectrum', 'ndnmrfid', 'nmrspectrum', 'nmrfid'];\n\nexport function fromJCAMP(buffer, options = {}) {\n  const {\n    noContour = true,\n    xy = true,\n    keepRecordsRegExp = /.*/,\n    profiling = true,\n  } = options;\n\n  let parsedData = convert(buffer, {\n    noContour,\n    xy,\n    keepRecordsRegExp,\n    profiling,\n  });\n\n  let dataStructure = [];\n  let entries = parsedData.flatten;\n  for (let entry of entries) {\n    if (!isSpectraData(entry)) continue;\n    if ((entry.spectra && entry.spectra.length > 0) || entry.minMax) {\n      let metadata = { ...entry.info, ...entry.meta };\n      let info = getInfoFromJCAMP(metadata);\n\n      if (info.experiment === 'wobble_curve') continue;\n\n      let dimensions = [];\n      let dependentVariables = [];\n\n      let dependentVariable = {};\n      if (info.dimension === 1) {\n        for (let i = 0; i < entry.spectra.length; i++) {\n          let data = entry.spectra[i].data;\n          data = convertToFloatArray(data);\n        }\n        dependentVariable.components = entry.spectra;\n      } else if (info.dimension === 2) {\n        entry.minMax.z = convertToFloatArray(entry.minMax.z);\n        dependentVariable.components = entry.minMax;\n      }\n      let dimension = {\n        increment: info.increment,\n        numberOfPoints: info.numberOfPoints,\n      };\n\n      if (info.fid) {\n        dimension.coordinatesOffset = {\n          magnitude: -info.digitalFilter * info.increment,\n          units: 'second',\n        };\n      } else {\n        dimension.coordinatesOffset = {\n          magnitude:\n            info.frequencyOffset / info.baseFrequency - 0.5 * info.spectraWidth,\n          units: 'ppm',\n        };\n      }\n      dimensions.push(dimension);\n      dependentVariables.push(dependentVariable);\n\n      const data = {\n        dimensions,\n        dependentVariables,\n        info,\n        meta: metadata,\n        timeStamp: new Date().valueOf(),\n        version: packageJson.version,\n      };\n\n      dataStructure.push(data);\n    }\n  }\n\n  return dataStructure;\n}\n\nfunction isSpectraData(entry) {\n  const { dataType = '', dataClass = '' } = entry;\n\n  const inputDataType = dataType.replace(/\\s/g, '').toLowerCase();\n  const inputDataClass = dataClass.replace(/\\s/g, '').toLowerCase();\n  return (\n    expectedTypes.some((type) => type === inputDataType) &&\n    inputDataClass !== 'peak table'\n  );\n}\n","import { fromBruker } from './fromBruker';\nimport { fromJCAMP } from './fromJCAMP';\nimport { fromJEOL } from './fromJEOL';\n\nexport async function read(fileCollection, options = {}) {\n  const {\n    bruker: BrukerOptions = {},\n    jcamp: jcampOptions = {},\n    jeol: jeolOptions = {},\n  } = options;\n\n  const result = await fromBruker(fileCollection, BrukerOptions);\n  for (const file of fileCollection) {\n    const extension = getFileExtension(file.name);\n    let processed = [];\n    if (extension === 'jdf') {\n      processed = fromJEOL(await file.arrayBuffer(), jeolOptions);\n    } else if (extension.match(/dx/) || extension === 'jcamp') {\n      processed = fromJCAMP(await file.arrayBuffer(), jcampOptions);\n    }\n\n    if (processed.length > 0) result.push(...processed);\n  }\n  return result;\n}\n\nfunction getFileExtension(name) {\n  return name.replace(/^.*\\./, '').toLowerCase();\n}\n"],"names":["toString","Object","prototype","isAnyArray","value","call","endsWith","numericTypeTable","quantityTypeTable","formatDependentVariable","data","numericType","options","quantityType","encoding","name","unit","quantityName","componentLabels","sparseSampling","from","to","components","Error","keys","length","fromReIm","type","description","application","dataLength","reIm","re","im","setLengthComplex","component","Float64Array","i","idx","push","setLength","j","formatLinearDimension","label","count","increment","String","Number","coordinatesOffset","originOffset","reciprocal","period","complexFFT","decode","bytes","decoder","TextDecoder","encoder","TextEncoder","encode","str","defaultByteLength","IOBuffer","constructor","dataIsGiven","ArrayBuffer","lastWrittenByte","byteLength","offset","dvOffset","isView","buffer","byteOffset","littleEndian","_data","DataView","_mark","_marks","available","isLittleEndian","setLittleEndian","isBigEndian","setBigEndian","skip","n","back","seek","mark","reset","pushMark","popMark","pop","undefined","rewind","ensureAvailable","lengthNeeded","newLength","newArray","Uint8Array","set","readBoolean","readUint8","readInt8","getInt8","getUint8","readByte","readBytes","readInt16","getInt16","readUint16","getUint16","readInt32","getInt32","readUint32","getUint32","readFloat32","getFloat32","readFloat64","getFloat64","readBigInt64","getBigInt64","readBigUint64","getBigUint64","readChar","fromCharCode","readChars","result","readUtf8","decodeText","writeBoolean","writeUint8","writeInt8","setInt8","_updateLastWrittenByte","setUint8","writeByte","writeBytes","writeInt16","setInt16","writeUint16","setUint16","writeInt32","setInt32","writeUint32","setUint32","writeFloat32","setFloat32","writeFloat64","setFloat64","writeBigInt64","setBigInt64","writeBigUint64","setBigUint64","writeChar","charCodeAt","writeChars","writeUtf8","toArray","endianness","instrumentTable","dataTypeTable","dataFormatTable","dataAxisTypeTable","prefixTable","unitPrefixTable","Yotta","Exa","Zetta","Pecta","Tera","Giga","Mega","Kilo","None","Milli","Micro","Nano","Pico","Femto","Atto","Zepto","baseTable","dataAxisRangedTable","valueTypeTable","getPar","param","searchStr","paramArray","find","o","getDigitalFilter","orders","e","factors","sweep","acqTime","nbPoints","shouldStop","some","s","parseInt","slice","jump","arg","factorNumber","Int8Array","offsetO","offsetF","productorial","delaySec","getMagnitude","par","magnitude","base","unitMult","table","prefix","getUnit","size","byte","power","getString","string","char","join","getParamName","getArray","format","double","parseJEOL","ioBuffer","header","byteArray","fileIdentifier","endian","majorVersion","minorVersion","dataDimensionNumber","dataDimensionExist","split","map","x","Boolean","dataType","dataFormat","dataInstrument","translate","dataAxisType","dataUnits","title","dataAxisRanged","dataPoints","dataOffsetStart","dataOffsetStop","dataAxisStart","dataAxisStop","year","month","day","creationTime","revisionTime","nodeName","site","author","comment","dataAxisTitles","baseFreq","zeroPoint","reversed","annotationOK","historyUsed","historyLength","paramStart","paramLength","ListStart","ListLength","dataStart","contextStart","contextLength","annoteStart","annoteLength","totalSize","unitLocation","compoundUnit","scaler","parameters","parameterSize","lowIndex","highIndex","p","valueType","Real","Imag","toLowerCase","dataSectionCount","realComplex","section","me","dim1","dim2","I","J","row","k","concat","nucleus","acquisitionTime","spectralWidth","spectralWidthClipped","resolution","originFrequency","frequencyOffset","digest","info","sampleName","solvent","temperature","probeName","fieldStrength","experiment","dimension","pulseStrength90","numberOfScans","relaxationTime","dataSections","decimationRate","paramList","JSON","stringify","headers","digitalFilter","gyromagneticRatio","a","d","f","g","h","c","b","_ref","module","exports","window","median","matrixCheck","RangeError","firstLength","matrixMinMaxZ","matrix","nbRows","nbColumns","min","max","column","createStepArray","step","array","index","isUtf8","buf","len","ensureString","blob","guessEncoding","TypeError","uint8","isutf8","toKeyValue","object","newObject","key","fromJEOL","parsedData","newInfo","date","gyromagneticRatioConstants","baseFrequency","gmr","Math","PI","pulseSequence","isComplex","includes","isFid","isFt","numberOfPoints","sw","dimensions","origin","firstPoint","lastPoint","incr","dependentVariables","metadata","dataStructure","timeStamp","Date","now","version","packageJson","tags","groupByExperiments","fileList","processingNumber","experimentNumber","ignoreFID","ignoreFT","ignore1D","ignore2D","onlyFirstProcessedData","experiments","file","currentProcessingNo","currentExperimentNo","id","parts","relativePath","match","expno","processedData","is2D","isFT","is1D","isFID","newProcessedData","firstProcessedNumber","sort","experimentsArray","processed","ser","fid","firstProcessed","procs","proc2s","processedKey","oneProcessed","acqus","acqu2s","filter","item","joinInfoMeta","target","toAppend","meta","Array","isArray","parseString","lowercase","number","isNaN","GC_MS_FIELDS","complexChromatogram","spectra","chromatogram","times","series","ms","existingGCMSFields","convertMSFieldToLabel","spectrum","pageValue","y","isMSField","canonicDataLabel","indexOf","replace","convertToFloatArray","stringArray","floatArray","fastParseXYData","yFactor","deltaX","isXYdata","currentData","currentX","firstX","currentY","firstY","endLine","ascii","newLine","isDifference","isLastDifference","lastDifference","isDuplicate","inComment","currentValue","lastValue","isNegative","inValue","skipFirstValue","decimalPosition","pow","duplicate","ascii2","removeCommentRegExp","peakTableSplitRegExp","parsePeakTable","isPeaktable","variables","parseXY","parseXYZ","lines","values","trim","xFactor","logs","numberOfVariables","forEach","variable","parseXYA","removeSymbolRegExp","isXYAdata","input","quickSelectMedian","convertTo3DZ","minZ","maxZ","ySize","xSize","z","lastX","lastY","reverse","medians","getMedian","minX","maxX","minY","maxY","noise","generateContourLines","zData","povarHeight0","povarHeight1","povarHeight2","povarHeight3","isOver0","isOver1","isOver2","isOver3","nbSubSpectra","nbPovars","pAx","pAy","pBx","pBy","x0","xN","dx","y0","yN","dy","iter","nbContourLevels","contourLevels","lineZValue","level","contourLevel","side","factor","noiseMultiplier","exp","zValue","iSubSpectra","subSpectra","subSpectraAfter","povar","segments","add2D","noContour","contourLines","minMax","postProcessingNMR","entriesFlat","entry","observeFrequency","shiftOffsetVal","ntuples","symbol","xUnits","toUpperCase","shift","startsWith","tmp","$NUC2","f2index","$NUC1","yType","pageSymbolIndex","pageSymbol","units","ratio0","ratio1","ratio","profiling","action","time","start","simpleChromatogram","intensity","postProcessing","newNtuples","twoD","wantXY","keepSpectra","prepareNtuplesDatatable","currentEntry","kind","xIndex","yIndex","firstVariable","secondVariable","charAt","lowerCaseSymbol","first","last","vardim","varname","yUnits","prepareSpectrum","ntuplesSeparatorRegExp","defaultOptions","keepRecordsRegExp","canonicDataLabels","canonicMetadataLabels","dynamicTyping","withoutXY","convert","jcamp","entries","tmpResult","children","parentsStack","ldrs","ldr","position","dataLabel","substring","dataValue","infos","datatable","parentEntry","dataClass","xType","shiftOffsetNum","vartype","varform","page","sampleDescription","flatten","parseData","text","convertJcamp","firstSpectrum","setFIDSpectrumData","td","TD","arrayBuffer","SW_H","SW_h","SF","SFO1","DATATYPE","DW","AQ","BYTORDA","stopReading","toSave","dataTable","NUC1","xUnit","yUnit","TITLE","setXYSpectrumData","ioBufferReal","ioBufferImaginary","getDirectParameter","SI","swP","SW_p","sf","bf","OFFSET","brukerReference","BYTORDP","convert1D","files","mergeMetadata","main","complement","convert2D","xOffset","yOffset","SW","xWindowSize","yWindowSize","xTransmitterFrequency","yTransmitterFrequency","xTransmitterFrequencyOffset","O1","yTransmitterFrequencyOffset","deltaY","nuc1","AXNUC","axnuc","minMaxX","minMaxY","convertOneExperiment","brukerFiles","source","DATE","GRPDLY","DSPFVS","DECIM","convertFileCollection","fileCollection","converter","results","getDigitalFilterParameters","grpdly","dspfvs","decim","brukerDspTable","dspfvsList","getNucleusFromMetadata","metaData","subfix","checkForNucleus","nuc","getNucleusFrom2DExperiment","beforeLength","getSpectrumType","spectyp","pulse","getInfoFromJCAMP","metadataString","separator","JCAMPDX","jcampdx","ORIGIN","creator","LONGDATE","maybeAdd","typeLowerCase","maybeAddNumber","gyromagneticRatioConst","varName","LAST","pulseStrength","groupDelay","digitalFilterParameters","nb","toISOString","SYMBOL","symbols","obj","cleanValue","xy","fromBruker","dependentVariable","spectraWidth","valueOf","expectedTypes","fromJCAMP","isSpectraData","inputDataType","inputDataClass","read","bruker","BrukerOptions","jcampOptions","jeol","jeolOptions","extension","getFileExtension"],"mappings":"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"}