{"version":3,"file":"spc-parser.js","sources":["../node_modules/iobuffer/lib-esm/utf8.browser.js","../node_modules/iobuffer/lib-esm/IOBuffer.js","../src/utility.js","../src/dataBlock.js","../src/logBlock.js","../src/types.js","../src/mainHeader.js","../src/index.js"],"sourcesContent":["// eslint-disable-next-line import/no-unassigned-import\r\nimport './text-encoding-polyfill';\r\nconst decoder = new TextDecoder('utf-8');\r\nexport function decode(bytes) {\r\n    return decoder.decode(bytes);\r\n}\r\nconst encoder = new TextEncoder();\r\nexport function encode(str) {\r\n    return encoder.encode(str);\r\n}\r\n//# sourceMappingURL=utf8.browser.js.map","import { decode, encode } from './utf8';\r\nconst defaultByteLength = 1024 * 8;\r\nexport class IOBuffer {\r\n    /**\r\n     * @param data - The data to construct the IOBuffer with.\r\n     * If data is a number, it will be the new buffer's length<br>\r\n     * If data is `undefined`, the buffer will be initialized with a default length of 8Kb<br>\r\n     * If data is an ArrayBuffer, SharedArrayBuffer, an ArrayBufferView (Typed Array), an IOBuffer instance,\r\n     * or a Node.js Buffer, a view will be created over the underlying ArrayBuffer.\r\n     * @param options\r\n     */\r\n    constructor(data = defaultByteLength, options = {}) {\r\n        let dataIsGiven = false;\r\n        if (typeof data === 'number') {\r\n            data = new ArrayBuffer(data);\r\n        }\r\n        else {\r\n            dataIsGiven = true;\r\n            this.lastWrittenByte = data.byteLength;\r\n        }\r\n        const offset = options.offset ? options.offset >>> 0 : 0;\r\n        const byteLength = data.byteLength - offset;\r\n        let dvOffset = offset;\r\n        if (ArrayBuffer.isView(data) || data instanceof IOBuffer) {\r\n            if (data.byteLength !== data.buffer.byteLength) {\r\n                dvOffset = data.byteOffset + offset;\r\n            }\r\n            data = data.buffer;\r\n        }\r\n        if (dataIsGiven) {\r\n            this.lastWrittenByte = byteLength;\r\n        }\r\n        else {\r\n            this.lastWrittenByte = 0;\r\n        }\r\n        this.buffer = data;\r\n        this.length = byteLength;\r\n        this.byteLength = byteLength;\r\n        this.byteOffset = dvOffset;\r\n        this.offset = 0;\r\n        this.littleEndian = true;\r\n        this._data = new DataView(this.buffer, dvOffset, byteLength);\r\n        this._mark = 0;\r\n        this._marks = [];\r\n    }\r\n    /**\r\n     * Checks if the memory allocated to the buffer is sufficient to store more\r\n     * bytes after the offset.\r\n     * @param byteLength - The needed memory in bytes.\r\n     * @returns `true` if there is sufficient space and `false` otherwise.\r\n     */\r\n    available(byteLength = 1) {\r\n        return this.offset + byteLength <= this.length;\r\n    }\r\n    /**\r\n     * Check if little-endian mode is used for reading and writing multi-byte\r\n     * values.\r\n     * @returns `true` if little-endian mode is used, `false` otherwise.\r\n     */\r\n    isLittleEndian() {\r\n        return this.littleEndian;\r\n    }\r\n    /**\r\n     * Set little-endian mode for reading and writing multi-byte values.\r\n     */\r\n    setLittleEndian() {\r\n        this.littleEndian = true;\r\n        return this;\r\n    }\r\n    /**\r\n     * Check if big-endian mode is used for reading and writing multi-byte values.\r\n     * @returns `true` if big-endian mode is used, `false` otherwise.\r\n     */\r\n    isBigEndian() {\r\n        return !this.littleEndian;\r\n    }\r\n    /**\r\n     * Switches to big-endian mode for reading and writing multi-byte values.\r\n     */\r\n    setBigEndian() {\r\n        this.littleEndian = false;\r\n        return this;\r\n    }\r\n    /**\r\n     * Move the pointer n bytes forward.\r\n     * @param n - Number of bytes to skip.\r\n     */\r\n    skip(n = 1) {\r\n        this.offset += n;\r\n        return this;\r\n    }\r\n    /**\r\n     * Move the pointer to the given offset.\r\n     * @param offset\r\n     */\r\n    seek(offset) {\r\n        this.offset = offset;\r\n        return this;\r\n    }\r\n    /**\r\n     * Store the current pointer offset.\r\n     * @see {@link IOBuffer#reset}\r\n     */\r\n    mark() {\r\n        this._mark = this.offset;\r\n        return this;\r\n    }\r\n    /**\r\n     * Move the pointer back to the last pointer offset set by mark.\r\n     * @see {@link IOBuffer#mark}\r\n     */\r\n    reset() {\r\n        this.offset = this._mark;\r\n        return this;\r\n    }\r\n    /**\r\n     * Push the current pointer offset to the mark stack.\r\n     * @see {@link IOBuffer#popMark}\r\n     */\r\n    pushMark() {\r\n        this._marks.push(this.offset);\r\n        return this;\r\n    }\r\n    /**\r\n     * Pop the last pointer offset from the mark stack, and set the current\r\n     * pointer offset to the popped value.\r\n     * @see {@link IOBuffer#pushMark}\r\n     */\r\n    popMark() {\r\n        const offset = this._marks.pop();\r\n        if (offset === undefined) {\r\n            throw new Error('Mark stack empty');\r\n        }\r\n        this.seek(offset);\r\n        return this;\r\n    }\r\n    /**\r\n     * Move the pointer offset back to 0.\r\n     */\r\n    rewind() {\r\n        this.offset = 0;\r\n        return this;\r\n    }\r\n    /**\r\n     * Make sure the buffer has sufficient memory to write a given byteLength at\r\n     * the current pointer offset.\r\n     * If the buffer's memory is insufficient, this method will create a new\r\n     * buffer (a copy) with a length that is twice (byteLength + current offset).\r\n     * @param byteLength\r\n     */\r\n    ensureAvailable(byteLength = 1) {\r\n        if (!this.available(byteLength)) {\r\n            const lengthNeeded = this.offset + byteLength;\r\n            const newLength = lengthNeeded * 2;\r\n            const newArray = new Uint8Array(newLength);\r\n            newArray.set(new Uint8Array(this.buffer));\r\n            this.buffer = newArray.buffer;\r\n            this.length = this.byteLength = newLength;\r\n            this._data = new DataView(this.buffer);\r\n        }\r\n        return this;\r\n    }\r\n    /**\r\n     * Read a byte and return false if the byte's value is 0, or true otherwise.\r\n     * Moves pointer forward by one byte.\r\n     */\r\n    readBoolean() {\r\n        return this.readUint8() !== 0;\r\n    }\r\n    /**\r\n     * Read a signed 8-bit integer and move pointer forward by 1 byte.\r\n     */\r\n    readInt8() {\r\n        return this._data.getInt8(this.offset++);\r\n    }\r\n    /**\r\n     * Read an unsigned 8-bit integer and move pointer forward by 1 byte.\r\n     */\r\n    readUint8() {\r\n        return this._data.getUint8(this.offset++);\r\n    }\r\n    /**\r\n     * Alias for {@link IOBuffer#readUint8}.\r\n     */\r\n    readByte() {\r\n        return this.readUint8();\r\n    }\r\n    /**\r\n     * Read `n` bytes and move pointer forward by `n` bytes.\r\n     */\r\n    readBytes(n = 1) {\r\n        const bytes = new Uint8Array(n);\r\n        for (let i = 0; i < n; i++) {\r\n            bytes[i] = this.readByte();\r\n        }\r\n        return bytes;\r\n    }\r\n    /**\r\n     * Read a 16-bit signed integer and move pointer forward by 2 bytes.\r\n     */\r\n    readInt16() {\r\n        const value = this._data.getInt16(this.offset, this.littleEndian);\r\n        this.offset += 2;\r\n        return value;\r\n    }\r\n    /**\r\n     * Read a 16-bit unsigned integer and move pointer forward by 2 bytes.\r\n     */\r\n    readUint16() {\r\n        const value = this._data.getUint16(this.offset, this.littleEndian);\r\n        this.offset += 2;\r\n        return value;\r\n    }\r\n    /**\r\n     * Read a 32-bit signed integer and move pointer forward by 4 bytes.\r\n     */\r\n    readInt32() {\r\n        const value = this._data.getInt32(this.offset, this.littleEndian);\r\n        this.offset += 4;\r\n        return value;\r\n    }\r\n    /**\r\n     * Read a 32-bit unsigned integer and move pointer forward by 4 bytes.\r\n     */\r\n    readUint32() {\r\n        const value = this._data.getUint32(this.offset, this.littleEndian);\r\n        this.offset += 4;\r\n        return value;\r\n    }\r\n    /**\r\n     * Read a 32-bit floating number and move pointer forward by 4 bytes.\r\n     */\r\n    readFloat32() {\r\n        const value = this._data.getFloat32(this.offset, this.littleEndian);\r\n        this.offset += 4;\r\n        return value;\r\n    }\r\n    /**\r\n     * Read a 64-bit floating number and move pointer forward by 8 bytes.\r\n     */\r\n    readFloat64() {\r\n        const value = this._data.getFloat64(this.offset, this.littleEndian);\r\n        this.offset += 8;\r\n        return value;\r\n    }\r\n    /**\r\n     * Read a 1-byte ASCII character and move pointer forward by 1 byte.\r\n     */\r\n    readChar() {\r\n        return String.fromCharCode(this.readInt8());\r\n    }\r\n    /**\r\n     * Read `n` 1-byte ASCII characters and move pointer forward by `n` bytes.\r\n     */\r\n    readChars(n = 1) {\r\n        let result = '';\r\n        for (let i = 0; i < n; i++) {\r\n            result += this.readChar();\r\n        }\r\n        return result;\r\n    }\r\n    /**\r\n     * Read the next `n` bytes, return a UTF-8 decoded string and move pointer\r\n     * forward by `n` bytes.\r\n     */\r\n    readUtf8(n = 1) {\r\n        return decode(this.readBytes(n));\r\n    }\r\n    /**\r\n     * Write 0xff if the passed value is truthy, 0x00 otherwise and move pointer\r\n     * forward by 1 byte.\r\n     */\r\n    writeBoolean(value) {\r\n        this.writeUint8(value ? 0xff : 0x00);\r\n        return this;\r\n    }\r\n    /**\r\n     * Write `value` as an 8-bit signed integer and move pointer forward by 1 byte.\r\n     */\r\n    writeInt8(value) {\r\n        this.ensureAvailable(1);\r\n        this._data.setInt8(this.offset++, value);\r\n        this._updateLastWrittenByte();\r\n        return this;\r\n    }\r\n    /**\r\n     * Write `value` as an 8-bit unsigned integer and move pointer forward by 1\r\n     * byte.\r\n     */\r\n    writeUint8(value) {\r\n        this.ensureAvailable(1);\r\n        this._data.setUint8(this.offset++, value);\r\n        this._updateLastWrittenByte();\r\n        return this;\r\n    }\r\n    /**\r\n     * An alias for {@link IOBuffer#writeUint8}.\r\n     */\r\n    writeByte(value) {\r\n        return this.writeUint8(value);\r\n    }\r\n    /**\r\n     * Write all elements of `bytes` as uint8 values and move pointer forward by\r\n     * `bytes.length` bytes.\r\n     */\r\n    writeBytes(bytes) {\r\n        this.ensureAvailable(bytes.length);\r\n        for (let i = 0; i < bytes.length; i++) {\r\n            this._data.setUint8(this.offset++, bytes[i]);\r\n        }\r\n        this._updateLastWrittenByte();\r\n        return this;\r\n    }\r\n    /**\r\n     * Write `value` as a 16-bit signed integer and move pointer forward by 2\r\n     * bytes.\r\n     */\r\n    writeInt16(value) {\r\n        this.ensureAvailable(2);\r\n        this._data.setInt16(this.offset, value, this.littleEndian);\r\n        this.offset += 2;\r\n        this._updateLastWrittenByte();\r\n        return this;\r\n    }\r\n    /**\r\n     * Write `value` as a 16-bit unsigned integer and move pointer forward by 2\r\n     * bytes.\r\n     */\r\n    writeUint16(value) {\r\n        this.ensureAvailable(2);\r\n        this._data.setUint16(this.offset, value, this.littleEndian);\r\n        this.offset += 2;\r\n        this._updateLastWrittenByte();\r\n        return this;\r\n    }\r\n    /**\r\n     * Write `value` as a 32-bit signed integer and move pointer forward by 4\r\n     * bytes.\r\n     */\r\n    writeInt32(value) {\r\n        this.ensureAvailable(4);\r\n        this._data.setInt32(this.offset, value, this.littleEndian);\r\n        this.offset += 4;\r\n        this._updateLastWrittenByte();\r\n        return this;\r\n    }\r\n    /**\r\n     * Write `value` as a 32-bit unsigned integer and move pointer forward by 4\r\n     * bytes.\r\n     */\r\n    writeUint32(value) {\r\n        this.ensureAvailable(4);\r\n        this._data.setUint32(this.offset, value, this.littleEndian);\r\n        this.offset += 4;\r\n        this._updateLastWrittenByte();\r\n        return this;\r\n    }\r\n    /**\r\n     * Write `value` as a 32-bit floating number and move pointer forward by 4\r\n     * bytes.\r\n     */\r\n    writeFloat32(value) {\r\n        this.ensureAvailable(4);\r\n        this._data.setFloat32(this.offset, value, this.littleEndian);\r\n        this.offset += 4;\r\n        this._updateLastWrittenByte();\r\n        return this;\r\n    }\r\n    /**\r\n     * Write `value` as a 64-bit floating number and move pointer forward by 8\r\n     * bytes.\r\n     */\r\n    writeFloat64(value) {\r\n        this.ensureAvailable(8);\r\n        this._data.setFloat64(this.offset, value, this.littleEndian);\r\n        this.offset += 8;\r\n        this._updateLastWrittenByte();\r\n        return this;\r\n    }\r\n    /**\r\n     * Write the charCode of `str`'s first character as an 8-bit unsigned integer\r\n     * and move pointer forward by 1 byte.\r\n     */\r\n    writeChar(str) {\r\n        return this.writeUint8(str.charCodeAt(0));\r\n    }\r\n    /**\r\n     * Write the charCodes of all `str`'s characters as 8-bit unsigned integers\r\n     * and move pointer forward by `str.length` bytes.\r\n     */\r\n    writeChars(str) {\r\n        for (let i = 0; i < str.length; i++) {\r\n            this.writeUint8(str.charCodeAt(i));\r\n        }\r\n        return this;\r\n    }\r\n    /**\r\n     * UTF-8 encode and write `str` to the current pointer offset and move pointer\r\n     * forward according to the encoded length.\r\n     */\r\n    writeUtf8(str) {\r\n        return this.writeBytes(encode(str));\r\n    }\r\n    /**\r\n     * Export a Uint8Array view of the internal buffer.\r\n     * The view starts at the byte offset and its length\r\n     * is calculated to stop at the last written byte or the original length.\r\n     */\r\n    toArray() {\r\n        return new Uint8Array(this.buffer, this.byteOffset, this.lastWrittenByte);\r\n    }\r\n    /**\r\n     * Update the last written byte offset\r\n     * @private\r\n     */\r\n    _updateLastWrittenByte() {\r\n        if (this.offset > this.lastWrittenByte) {\r\n            this.lastWrittenByte = this.offset;\r\n        }\r\n    }\r\n}\r\n//# sourceMappingURL=IOBuffer.js.map","/**\n * Gets the parameter in each bit of the flag\n * @param {number} flag First byte of the main header\n * @returns {object} The parameters\n */\nexport function getFlagParameters(flag) {\n  const parameters = {}; //Z is time\n  parameters.y16BitPrecision = (flag & 1) !== 0; //Y values are 16 bits instead of 32\n  parameters.useExperimentExtension = (flag & 2) !== 0; //Enable experiment mode\n  parameters.multiFile = (flag & 4) !== 0; //Multiple spectra\n  parameters.zValuesRandom = (flag & 8) !== 0; //Z values in random order if multiFile\n  parameters.zValuesUneven = (flag & 16) !== 0; //Z values ordered but unevenly spaced if multi\n  parameters.customAxisLabels = (flag & 32) !== 0; //Custom labels\n  parameters.xyxy = (flag & 64) !== 0; //One X array per subfile, for discontinuous curves\n  parameters.xy = (flag & 128) !== 0; // Non-evenly spaced X, X before Y\n  return parameters;\n}\n\n/**\n *\n * Gets the Subfile flags\n * @param {number} flag First byte of the subheader\n * @return {object} The parameters\n */\nexport function getSubFlagParameters(flag) {\n  const parameters = {};\n  parameters.changed = (flag & 1) !== 0;\n  parameters.noPeakTable = (flag & 8) !== 0;\n  parameters.modifiedArithmetic = (flag & 128) !== 0;\n  return parameters;\n}\n\n/**\n * Generates an array of evenly spaced numbers\n * @param {number} minimum Lower bound\n * @param {number} maximum Upper bound\n * @param {number} numberPoints Number of points\n * @return {array} Evenly spaced numbers\n */\nexport function equidistantArray(minimum, maximum, numberPoints) {\n  const equidistantArray = new Float64Array(numberPoints);\n  const step = (maximum - minimum) / (numberPoints - 1);\n  for (let i = 0; i < numberPoints; i++) {\n    equidistantArray[i] = minimum + i * step;\n  }\n  return equidistantArray;\n}\n\n/**\n * Gets the date encoded in binary in a long number\n * @param {number} long Binary date\n * @return {string} Date formatted to ISO 8601:2019 convention\n */\nexport function longToDate(long) {\n  if (long === 0) {\n    return '0000-00-00T00:00:00.00Z';\n  }\n  const date = new Date();\n  date.setUTCFullYear(long >> 20);\n  date.setUTCMonth(((long >> 16) & 0x0f) - 1);\n  date.setUTCDate((long >> 11) & 0x1f);\n  date.setUTCHours((long >> 6) & 0x1f);\n  date.setUTCMinutes(long & 0x3f);\n  date.setUTCSeconds(0);\n  date.setUTCMilliseconds(0);\n  return date.toISOString();\n}\n","/* eslint-disable no-control-regex */\nimport { equidistantArray, getSubFlagParameters } from './utility';\n\n/**\n * Parses the subheader of the current subfile\n *\n * @export\n * @param {object} buffer SPC buffer\n * @return {object} Current subfile's subheader\n */\nexport function subHeader(buffer) {\n  const subHeader = {};\n  subHeader.parameters = getSubFlagParameters(buffer.readUint8());\n  subHeader.exponentY = buffer.readInt8();\n  subHeader.indexNumber = buffer.readUint16();\n  subHeader.startingZ = buffer.readFloat32();\n  subHeader.endingZ = buffer.readFloat32();\n  subHeader.noiseValue = buffer.readFloat32();\n  subHeader.numberPoints = buffer.readUint32();\n  subHeader.numberCoAddedScans = buffer.readUint32();\n  subHeader.wAxisValue = buffer.readFloat32();\n  subHeader.reserved = buffer.readChars(4).trim().replace(/\\x00/g, '');\n  return subHeader;\n}\n\n/**\n * Reads the data block of the SPC file\n *\n * @export\n * @param {object} buffer spc buffer\n * @param {object} mainHeader main header\n * @return {array} Array containing the spectra\n */\nexport function readDataBlock(buffer, mainHeader) {\n  let x;\n  let y;\n  let spectra = [];\n\n  if (!mainHeader.parameters.xyxy && mainHeader.xy) {\n    x = new Float32Array(mainHeader.numberPoints);\n    for (let i = 0; i < mainHeader.numberPoints; i++) {\n      x[i] = buffer.readFloat32();\n    }\n  } else if (!mainHeader.parameters.xy) {\n    x = equidistantArray(\n      mainHeader.startingX,\n      mainHeader.endingX,\n      mainHeader.numberPoints,\n    );\n  }\n  let spectrum;\n  for (\n    let i = 0;\n    i < mainHeader.spectra ||\n    (mainHeader.fileVersion === 0x4d &&\n      buffer.offset + mainHeader.numberPoints < buffer.length);\n    i++\n  ) {\n    spectrum = {};\n    spectrum.meta = subHeader(buffer);\n    if (mainHeader.parameters.xyxy) {\n      x = new Float32Array(spectrum.meta.numberPoints);\n      for (let j = 0; j < spectrum.meta.numberPoints; j++) {\n        x[j] = buffer.readFloat32();\n      }\n    }\n    if (spectrum.meta.exponentY === 0) {\n      spectrum.meta.exponentY = mainHeader.exponentY;\n    }\n    const yFactor = Math.pow(\n      2,\n      spectrum.meta.exponentY -\n        (mainHeader.parameters.y16BitPrecision ? 16 : 32),\n    );\n\n    const nbPoints = spectrum.meta.numberPoints\n      ? spectrum.meta.numberPoints\n      : mainHeader.numberPoints;\n\n    if (mainHeader.parameters.y16BitPrecision) {\n      y = new Float32Array(nbPoints);\n      for (let j = 0; j < nbPoints; j++) {\n        y[j] = buffer.readInt16() * yFactor;\n      }\n    } else {\n      y = new Float32Array(nbPoints);\n      for (let j = 0; j < nbPoints; j++) {\n        if (mainHeader.fileVersion === 0x4d) {\n          y[j] =\n            ((buffer.readUint8() << 16) +\n              (buffer.readInt8() << 24) +\n              (buffer.readUint8() << 0) +\n              (buffer.readUint8() << 8)) *\n            yFactor;\n        } else {\n          if (spectrum.meta.exponentY !== -128) {\n            y[j] = buffer.readInt32() * yFactor;\n          } else {\n            y[j] = buffer.readFloat32();\n          }\n        }\n      }\n    }\n    const xAxis = mainHeader.xUnitsType.match(\n      /(?<label>.*?) ?[([](?<units>.*)[)\\]]/,\n    );\n    const yAxis = mainHeader.yUnitsType.match(\n      /(?<label>.*?) ?[([](?<units>.*)[)\\]]/,\n    );\n    const variables = {\n      x: {\n        symbol: 'x',\n        label: (xAxis && xAxis.groups.label) || mainHeader.xUnitsType,\n        units: (xAxis && xAxis.groups.units) || '',\n        data: x,\n        type: 'INDEPENDENT',\n      },\n      y: {\n        symbol: 'y',\n        label: (yAxis && yAxis.groups.label) || mainHeader.yUnitsType,\n        units: (yAxis && yAxis.groups.units) || '',\n        data: y,\n        type: 'DEPENDENT',\n      },\n    };\n    spectrum.variables = variables;\n    spectra.push(spectrum);\n  }\n  return spectra;\n}\n","/* eslint-disable no-control-regex */\n/**\n *\n * @param {object} buffer SPC buffer\n * @param {number} logOffset Offset of the log (from mainHeader)\n * @return {object} Object containing log meta, data and text\n */\nexport function readLogBlock(buffer, logOffset) {\n  const logHeader = {};\n  logHeader.size = buffer.readUint32(); //Size of the block in bytes\n  logHeader.memorySize = buffer.readUint32(); //Size of the memory rounded up to nearest multiple of 4096\n  logHeader.textOffset = buffer.readUint32(); //Offset to Text section\n  logHeader.binarySize = buffer.readUint32(); //Size of binary log block\n  logHeader.diskArea = buffer.readUint32(); //Size of the disk area\n  logHeader.reserved = buffer.readChars(44).trim().replace(/\\x00/g, ''); //Reserved space\n  const logData = buffer.readChars(logHeader.binarySize);\n  buffer.offset = logOffset + logHeader.textOffset;\n  const logASCII = buffer\n    .readChars(logHeader.size - logHeader.textOffset)\n    .trim()\n    .replace(/\\x00/g, '');\n  return { meta: logHeader, data: logData, text: logASCII };\n}\n","/**\n * Gives meaning to type codes\n * @param {number} xzwType x, z or w type code\n * @return {string} String corresponding to the code\n */\nexport function xzwTypes(xzwType) {\n  switch (xzwType) {\n    case 1:\n      return 'Wavenumber (cm-1)';\n    case 2:\n      return 'Micrometers (um)';\n    case 3:\n      return 'Nanometers (nm)';\n    case 4:\n      return 'Seconds';\n    case 5:\n      return 'Minutes';\n    case 6:\n      return 'Hertz (Hz)';\n    case 7:\n      return 'Kilohertz (KHz)';\n    case 8:\n      return 'Megahertz (MHz)';\n    case 9:\n      return 'Mass (M/z)';\n    case 10:\n      return 'Parts per million (PPM)';\n    case 11:\n      return 'Days';\n    case 12:\n      return 'Years';\n    case 13:\n      return 'Raman Shift (cm-1)';\n    case 14:\n      return 'eV';\n    case 15:\n      return 0;\n    case 16:\n      return 'Diode Number';\n    case 17:\n      return 'Channel ';\n    case 18:\n      return 'Degrees';\n    case 19:\n      return 'Temperature (F)';\n    case 20:\n      return 'Temperature (C)';\n    case 21:\n      return 'Temperature (K)';\n    case 22:\n      return 'Data Points';\n    case 23:\n      return 'Milliseconds (mSec)';\n    case 24:\n      return 'Microseconds (uSec)';\n    case 25:\n      return 'Nanoseconds (nSec)';\n    case 26:\n      return 'Gigahertz (GHz)';\n    case 27:\n      return 'Centimeters (cm)';\n    case 28:\n      return 'Meters (m)';\n    case 29:\n      return 'Millimeters (mm)';\n    case 30:\n      return 'Hours';\n    case 255:\n      return 'Double interferogram';\n    default:\n      return 'Arbitrary';\n  }\n}\n/**\n * Gives meaning to y type codes\n * @param {number} yType y type code\n * @return {string} String corresponding to the code\n */\nexport function yTypes(yType) {\n  switch (yType) {\n    case 0:\n      return 'Arbitrary Intensity';\n    case 1:\n      return 'Interferogram';\n    case 2:\n      return 'Absorbance';\n    case 3:\n      return 'Kubelka-Monk';\n    case 4:\n      return 'Counts';\n    case 5:\n      return 'Volts';\n    case 6:\n      return 'Degrees';\n    case 7:\n      return 'Milliamps';\n    case 8:\n      return 'Millimeters';\n    case 9:\n      return 'Millivolts';\n    case 10:\n      return 'Log(1/R)';\n    case 11:\n      return 'Percent';\n    case 12:\n      return 'Intensity';\n    case 13:\n      return 'Relative Intensity';\n    case 14:\n      return 'Energy';\n    case 16:\n      return 'Decibel';\n    case 19:\n      return 'Temperature (F)';\n    case 20:\n      return 'Temperature (C)';\n    case 21:\n      return 'Temperature (K)';\n    case 22:\n      return 'Index of Refraction [N]';\n    case 23:\n      return 'Extinction Coeff. [K]';\n    case 24:\n      return 'Real';\n    case 25:\n      return 'Imaginary';\n    case 26:\n      return 'Complex';\n    case 128:\n      return 'Transmission';\n    case 129:\n      return 'Reflectance';\n    case 130:\n      return 'Arbitrary or Single Beam with Valley Peaks';\n    case 131:\n      return 'Emission';\n    default:\n      return 'Reference Arbitrary Energy';\n  }\n}\n\n/**\n * Experiment settings code converter\n * @param {number} code\n * @return {string}\n */\nexport function experimentSettings(code) {\n  switch (code) {\n    case 1:\n      return 'Gas Chromatogram';\n    case 2:\n      return 'General Chromatogram (same as SPCGEN with TCGRAM)';\n    case 3:\n      return 'HPLC Chromatogram';\n    case 4:\n      return 'FT-IR, FT-NIR, FT-Raman Spectrum or Igram (Can also be used for scanning IR.)';\n    case 5:\n      return 'NIR Spectrum (Usually multi-spectral data sets for calibration.)';\n    case 7:\n      return 'UV-VIS Spectrum (Can be used for single scanning UV-VIS-NIR.)';\n    case 8:\n      return 'X-ray Diffraction Spectrum';\n    case 9:\n      return 'Mass Spectrum  (Can be single, GC-MS, Continuum, Centroid or TOF.)';\n    case 10:\n      return 'NMR Spectrum or FID';\n    case 11:\n      return 'Raman Spectrum (Usually Diode Array, CCD, etc. use SPCFTIR for FT-Raman.)';\n    case 12:\n      return 'Fluorescence Spectrum';\n    case 13:\n      return 'Atomic Spectrum';\n    case 14:\n      return 'Chromatography Diode Array Spectra';\n    default:\n      return 'General SPC (could be anything)';\n  }\n}\n","/* eslint-disable no-control-regex */\nimport { xzwTypes, yTypes, experimentSettings } from './types';\nimport { getFlagParameters, longToDate } from './utility';\n\n/**\n * Main header parsing - First 512/256 bytes (new/old format)\n * @param {object} buffer SPC buffer\n * @return {object} Main header\n */\nexport function mainHeader(buffer) {\n  const header = {};\n  header.parameters = getFlagParameters(buffer.readUint8()); //Each bit contains a parameter\n  header.fileVersion = buffer.readUint8(); //4B => New format; 4D => LabCalc format\n  switch (header.fileVersion) {\n    case 0x4b: // new format\n      break;\n    case 0x4c:\n      buffer.setBigEndian();\n      break;\n    case 0x4d: // old LabCalc format\n      return oldHeader(buffer, header);\n    default:\n      throw new Error(\n        'Unrecognized file format: byte 01 must be either 4B, 4C or 4D',\n      );\n  }\n\n  header.experimentType = experimentSettings(buffer.readUint8()); //Experiment type code (See SPC.h)\n  header.exponentY = buffer.readInt8(); //Exponent for Y values (80h = floating point): FloatY = (2^Exp)*IntY/(2^32) 32-bit; FloatY = (2^Exp)*IntY/(2^16) 32-bit\n  header.numberPoints = buffer.readUint32(); //Number of points (if not XYXY)\n  header.startingX = buffer.readFloat64(); //First X coordinate\n  header.endingX = buffer.readFloat64(); //Last X coordinate\n  header.spectra = buffer.readUint32(); //Number of spectrums\n  header.xUnitsType = xzwTypes(buffer.readUint8()); //X Units type code (See types.js)\n\n  header.yUnitsType = yTypes(buffer.readUint8()); //Y \"\"\n  header.zUnitsType = xzwTypes(buffer.readUint8()); //Z \"\"\n  header.postingDisposition = buffer.readUint8(); //Posting disposition (See GRAMSDDE.H)\n  header.date = longToDate(buffer.readUint32()); //Date: minutes = first 6 bits, hours = 5 next bits, days = 5 next, months = 4 next, years = 12 last\n  header.resolutionDescription = buffer\n    .readChars(9)\n    .trim()\n    .replace(/\\x00/g, ''); //Resolution description text\n  header.sourceInstrumentDescription = buffer\n    .readChars(9)\n    .trim()\n    .replace(/\\x00/g, ''); // Source Instrument description text\n  header.peakPointNumber = buffer.readUint16(); //Peak point number for interferograms\n  header.spare = [];\n  for (let i = 0; i < 8; i++) {\n    header.spare.push(buffer.readFloat32());\n  }\n  if (header.fileVersion === 0x4c) {\n    //Untested case because no test files\n    header.spare.reverse();\n  }\n  header.memo = buffer.readChars(130).trim().replace(/\\x00/g, '');\n  header.xyzLabels = buffer.readChars(30).trim().replace(/\\x00/g, '');\n  header.logOffset = buffer.readUint32(); //Byte offset to Log Block\n  header.modifiedFlag = buffer.readUint32(); //File modification flag (See values in SPC.H)\n  header.processingCode = buffer.readUint8(); //Processing code (See GRAMSDDE.H)\n  header.calibrationLevel = buffer.readUint8(); //Calibration level + 1\n  header.subMethodSampleInjectionNumber = buffer.readUint16(); //Sub-method sample injection number\n  header.concentrationFactor = buffer.readFloat32(); //Floating data multiplier concentration factor\n  header.methodFile = buffer.readChars(48).trim().replace(/\\x00/g, ''); //Method file\n  header.zSubIncrement = buffer.readFloat32(); //Z subfile increment for even Z Multifiles\n  header.wPlanes = buffer.readUint32();\n  header.wPlaneIncrement = buffer.readFloat32();\n  header.wAxisUnits = xzwTypes(buffer.readUint8()); //W axis units code\n  header.reserved = buffer.readChars(187).trim().replace(/\\x00/g, ''); //Reserved space (Must be zero)\n  if (header.xUnitsType === 0) {\n    header.xUnitsType = header.xyzLabels.substr(0, 10);\n  }\n  if (header.zUnitsType === 0) {\n    header.zUnitsType = header.xyzLabels.substr(20, 10);\n  }\n  return header;\n}\n\n/**\n *Old version files header parsing\n *\n * @export\n * @param {object} buffer SPC buffer\n * @param {object} header Header from the previous function\n * @return {object} Object containing the metadata of the old file\n */\nexport function oldHeader(buffer, header) {\n  header.exponentY = buffer.readInt16(); //Word (16 bits) instead of byte\n  header.numberPoints = buffer.readFloat32();\n  header.startingX = buffer.readFloat32();\n  header.endingX = buffer.readFloat32();\n  header.xUnitsType = xzwTypes(buffer.readUint8());\n  header.yUnitsType = yTypes(buffer.readUint8());\n  const date = new Date();\n  const zTypeYear = buffer.readUint16(); //Unrelated to Z axis\n  date.setUTCFullYear(zTypeYear % 4096); // todo might be wrong\n  date.setUTCMonth(Math.max(buffer.readUint8() - 1, 0));\n  date.setUTCDate(buffer.readUint8());\n  date.setUTCHours(buffer.readUint8());\n  date.setUTCMinutes(buffer.readUint8());\n  header.date = date.toISOString();\n  header.resolutionDescription = buffer\n    .readChars(8)\n    .trim()\n    .replace(/\\x00/g, '');\n  header.peakPointNumber = buffer.readUint16();\n  header.scans = buffer.readUint16();\n  header.spare = [];\n  for (let i = 0; i < 7; i++) {\n    header.spare.push(buffer.readFloat32());\n  }\n  header.memo = buffer.readChars(130).trim().replace(/\\x00/g, '');\n  header.xyzLabels = buffer.readChars(30).trim().replace(/\\x00/g, '');\n  return header;\n}\n","import { IOBuffer } from 'iobuffer';\n\nimport { readDataBlock } from './dataBlock';\nimport { readLogBlock } from './logBlock';\nimport { mainHeader } from './mainHeader';\n/**\n * Parses an SPC file\n *\n * @param {object} buffer SPC file buffer\n * @return {object} Object containing every information contained in the SPC file\n */\nexport function parse(buffer) {\n  const ioBuffer = new IOBuffer(buffer);\n  const meta = mainHeader(ioBuffer);\n  const spectra = readDataBlock(ioBuffer, meta);\n  if (meta.logOffset && meta.logOffset !== 0) {\n    return { meta, spectra, logs: readLogBlock(ioBuffer, meta.logOffset) };\n  }\n  return { meta, spectra };\n}\n"],"names":["getFlagParameters","flag","parameters","y16BitPrecision","useExperimentExtension","multiFile","zValuesRandom","zValuesUneven","customAxisLabels","xyxy","xy","getSubFlagParameters","changed","noPeakTable","modifiedArithmetic","equidistantArray","minimum","maximum","numberPoints","Float64Array","step","i","longToDate","long","date","Date","setUTCFullYear","setUTCMonth","setUTCDate","setUTCHours","setUTCMinutes","setUTCSeconds","setUTCMilliseconds","toISOString","subHeader","buffer","readUint8","exponentY","readInt8","indexNumber","readUint16","startingZ","readFloat32","endingZ","noiseValue","readUint32","numberCoAddedScans","wAxisValue","reserved","readChars","trim","replace","readDataBlock","mainHeader","x","y","spectra","Float32Array","startingX","endingX","spectrum","fileVersion","offset","length","meta","j","yFactor","Math","pow","nbPoints","readInt16","readInt32","xAxis","xUnitsType","match","yAxis","yUnitsType","variables","symbol","label","groups","units","data","type","push","readLogBlock","logOffset","logHeader","size","memorySize","textOffset","binarySize","diskArea","logData","logASCII","text","xzwTypes","xzwType","yTypes","yType","experimentSettings","code","header","setBigEndian","oldHeader","Error","experimentType","readFloat64","zUnitsType","postingDisposition","resolutionDescription","sourceInstrumentDescription","peakPointNumber","spare","reverse","memo","xyzLabels","modifiedFlag","processingCode","calibrationLevel","subMethodSampleInjectionNumber","concentrationFactor","methodFile","zSubIncrement","wPlanes","wPlaneIncrement","wAxisUnits","substr","zTypeYear","max","scans","parse","ioBuffer","IOBuffer","logs"],"mappings":"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"}