{"version":3,"file":"convert-to-jcamp.js","sources":["../lib-esm/utils/addInfoData.js","../node_modules/is-any-array/lib-esm/index.js","../node_modules/ml-spectra-processing/lib-esm/x/utils/getOutputArray.js","../node_modules/ml-spectra-processing/lib-esm/x/xCheck.js","../node_modules/ml-spectra-processing/lib-esm/x/xDivide.js","../node_modules/ml-spectra-processing/lib-esm/x/xMinMaxValues.js","../node_modules/ml-spectra-processing/lib-esm/matrix/matrixCheck.js","../node_modules/ml-spectra-processing/lib-esm/matrix/matrixMinMaxZ.js","../lib-esm/utils/checkMatrix.js","../lib-esm/utils/checkNumberOrArray.js","../lib-esm/utils/getExtremeValues.js","../lib-esm/creatorNtuples.js","../lib-esm/utils/getFactorNumber.js","../lib-esm/utils/getBestFactor.js","../lib-esm/utils/getNumber.js","../lib-esm/utils/peakTableCreator.js","../lib-esm/utils/rescaleAndEnsureInteger.js","../lib-esm/utils/vectorEncoder.js","../lib-esm/utils/xyDataCreator.js","../lib-esm/fromJSON.js","../lib-esm/fromVariables.js","../lib-esm/from1DNMRVariables.js","../lib-esm/utils/getBestFactorMatrix.js","../lib-esm/from2DNMRVariables.js"],"sourcesContent":["export const addInfoData = (data, options = {}) => {\n    const { keys = Object.keys(data), prefix = '##$' } = options;\n    let header = '';\n    for (const key of keys) {\n        header +=\n            typeof data[key] === 'object'\n                ? `${prefix}${key}=${JSON.stringify(data[key])}\\n`\n                : `${prefix}${key}=${data[key]}\\n`;\n    }\n    return header;\n};\n//# sourceMappingURL=addInfoData.js.map","// eslint-disable-next-line @typescript-eslint/unbound-method\nconst toString = Object.prototype.toString;\n/**\n * Checks if an object is an instance of an Array (array or typed array, except those that contain bigint values).\n *\n * @param value - Object to check.\n * @returns True if the object is an array or a typed array.\n */\nexport function isAnyArray(value) {\n    const tag = toString.call(value);\n    return tag.endsWith('Array]') && !tag.includes('Big');\n}\n//# sourceMappingURL=index.js.map","import { isAnyArray } from 'is-any-array';\n/**\n * This function\n * @param output - undefined or a new array\n * @param length - length of the output array\n * @returns\n */\nexport function getOutputArray(output, length) {\n    if (output !== undefined) {\n        if (!isAnyArray(output)) {\n            throw new TypeError('output option must be an array if specified');\n        }\n        if (output.length !== length) {\n            throw new TypeError('the output array does not have the correct length');\n        }\n        return output;\n    }\n    else {\n        return new Float64Array(length);\n    }\n}\n//# sourceMappingURL=getOutputArray.js.map","import { isAnyArray } from 'is-any-array';\n/**\n * Checks if input is of type array\n *\n * @param input - input\n */\nexport function xCheck(input, options = {}) {\n    const { minLength } = options;\n    if (!isAnyArray(input)) {\n        throw new TypeError('input must be an array');\n    }\n    if (input.length === 0) {\n        throw new TypeError('input must not be empty');\n    }\n    //@ts-expect-error we already checked that input is an array\n    if (minLength && input.length < minLength) {\n        throw new Error(`input must have a length of at least ${minLength}`);\n    }\n}\n//# sourceMappingURL=xCheck.js.map","import { isAnyArray } from 'is-any-array';\nimport { getOutputArray } from '..';\n/**\n * This function divide the first array by the second array or a constant value to each element of the first array\n *\n * @param array1 - first array\n * @param array2 - second array or number\n * @param options - options\n */\nexport function xDivide(array1, array2, options = {}) {\n    let isConstant = false;\n    let constant = 0;\n    if (isAnyArray(array2)) {\n        if (array1.length !== array2.length) {\n            throw new Error('xDivide: size of array1 and array2 must be identical');\n        }\n    }\n    else {\n        isConstant = true;\n        constant = Number(array2);\n    }\n    let array3 = getOutputArray(options.output, array1.length);\n    if (isConstant) {\n        for (let i = 0; i < array1.length; i++) {\n            array3[i] = array1[i] / constant;\n        }\n    }\n    else {\n        for (let i = 0; i < array1.length; i++) {\n            array3[i] = array1[i] / array2[i];\n        }\n    }\n    return array3;\n}\n//# sourceMappingURL=xDivide.js.map","import { xCheck } from './xCheck';\n/**\n * Return min and max values of an array\n *\n * @param array - array of number\n * @returns - Object with 2 properties, min and max\n */\nexport function xMinMaxValues(array) {\n    xCheck(array);\n    let min = array[0];\n    let max = array[0];\n    for (let value of array) {\n        if (value < min)\n            min = value;\n        if (value > max)\n            max = value;\n    }\n    return { min, max };\n}\n//# sourceMappingURL=xMinMaxValues.js.map","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","import { isAnyArray } from 'is-any-array';\nexport function checkMatrix(data) {\n    if (!isAnyArray(data) || !isAnyArray(data[0])) {\n        throw new Error(`2D data should be a matrix`);\n    }\n}\n//# sourceMappingURL=checkMatrix.js.map","import { isAnyArray } from 'is-any-array';\nexport function checkNumberOrArray(data) {\n    if (!isAnyArray(data) || isAnyArray(data[0])) {\n        throw new Error(`x and y data should be an array of numbers`);\n    }\n}\n//# sourceMappingURL=checkNumberOrArray.js.map","import { isAnyArray } from 'is-any-array';\nimport { matrixMinMaxZ, xMinMaxValues, } from 'ml-spectra-processing';\nimport { checkMatrix } from './checkMatrix';\nimport { checkNumberOrArray } from './checkNumberOrArray';\nexport function getExtremeValues(data) {\n    if (isAnyArray(data[0])) {\n        checkMatrix(data);\n        const firstRow = data[0];\n        return {\n            firstLast: {\n                first: firstRow[0],\n                last: data[data.length - 1][data[0].length - 1],\n            },\n            minMax: matrixMinMaxZ(data),\n        };\n    }\n    checkNumberOrArray(data);\n    return {\n        firstLast: {\n            first: data[0],\n            last: data[data.length - 1],\n        },\n        minMax: xMinMaxValues(data),\n    };\n}\n//# sourceMappingURL=getExtremeValues.js.map","import { addInfoData } from './utils/addInfoData';\nimport { getExtremeValues } from './utils/getExtremeValues';\n/**\n * Parse from a xyxy data array\n * @param variables - Variables to convert to jcamp\n * @param [options={}] - options that allows to add meta data in the jcamp\n * @return JCAMP-DX text file corresponding to the variables\n */\nexport default function creatorNtuples(variables, options) {\n    const { meta = {}, info = {} } = options;\n    const { title = '', owner = '', origin = '', dataType = '', ...resInfo } = info;\n    const symbol = [];\n    const varName = [];\n    const varType = [];\n    const varDim = [];\n    const units = [];\n    const first = [];\n    const last = [];\n    const min = [];\n    const max = [];\n    const keys = Object.keys(variables);\n    for (let i = 0; i < keys.length; i++) {\n        const key = keys[i];\n        let variable = variables[key];\n        if (!variable)\n            continue;\n        let name = variable?.label.replace(/ *\\[.*/, '');\n        let unit = variable?.label.replace(/.*\\[(?<units>.*)\\].*/, '$<units>');\n        const { firstLast, minMax } = getExtremeValues(variable.data);\n        symbol.push(variable.symbol || key);\n        varName.push(name || key);\n        varDim.push(variable.data.length);\n        first.push(firstLast.first);\n        last.push(firstLast.last);\n        max.push(minMax.max);\n        min.push(minMax.min);\n        if (variable.isDependent !== undefined) {\n            varType.push(variable.isDependent ? 'DEPENDENT' : 'INDEPENDENT');\n        }\n        else {\n            varType.push(variable.isDependent !== undefined\n                ? !variable.isDependent\n                : i === 0\n                    ? 'INDEPENDENT'\n                    : 'DEPENDENT');\n        }\n        units.push(variable.units || unit || '');\n    }\n    let header = `##TITLE=${title}\n##JCAMP-DX=6.00\n##DATA TYPE=${dataType}\n##DATA CLASS= NTUPLES\n##ORIGIN=${origin}\n##OWNER=${owner}\\n`;\n    header += addInfoData(resInfo, { prefix: '##' });\n    header += addInfoData(meta);\n    header += `##NTUPLES= ${dataType}\n##VAR_NAME=  ${varName.join()}\n##SYMBOL=    ${symbol.join()}\n##VAR_TYPE=  ${varType.join()}\n##VAR_DIM=   ${varDim.join()}\n##UNITS=     ${units.join()}\n##FIRST=     ${first.join()}\n##LAST=      ${last.join()}\n##MIN=       ${min.join()}\n##MAX=       ${max.join()}\n##PAGE= N=1\\n`;\n    header += `##DATA TABLE= (${symbol.join('')}..${symbol.join('')}), PEAKS\\n`;\n    for (let i = 0; i < variables.x.data.length; i++) {\n        let point = [];\n        for (let key of keys) {\n            let variable = variables[key];\n            if (!variable)\n                continue;\n            point.push(variable.data[i]);\n        }\n        header += `${point.join('\\t')}\\n`;\n    }\n    header += `##END NTUPLES= ${dataType}\\n`;\n    header += '##END=\\n##END=';\n    return header;\n}\n//# sourceMappingURL=creatorNtuples.js.map","export function getFactorNumber(minMax, maxValue = 2 ** 31 - 1) {\n    let factor;\n    if (minMax.min < 0) {\n        if (minMax.max > 0) {\n            factor = Math.max(-minMax.min, minMax.max) / maxValue;\n        }\n        else {\n            factor = -minMax.min / maxValue;\n        }\n    }\n    else {\n        factor = minMax.max / maxValue;\n    }\n    return factor;\n}\n//# sourceMappingURL=getFactorNumber.js.map","import { xMinMaxValues } from 'ml-spectra-processing';\nimport { getFactorNumber } from './getFactorNumber';\nexport function getBestFactor(array, options = {}) {\n    const { maxValue, factor, minMax } = options;\n    if (factor !== undefined) {\n        return factor;\n    }\n    // is there non integer number ?\n    let onlyInteger = true;\n    for (let y of array) {\n        if (Math.round(y) !== y) {\n            onlyInteger = false;\n            break;\n        }\n    }\n    if (onlyInteger) {\n        return 1;\n    }\n    // we need to rescale the values\n    // need to find the max and min values\n    const extremeValues = minMax || xMinMaxValues(array);\n    return getFactorNumber(extremeValues, maxValue);\n}\n//# sourceMappingURL=getBestFactor.js.map","/**\n * Reconvert number to original value\n * @param number Number used for computation\n * @param factor Multiplying factor\n * @returns Original value\n */\nexport function getNumber(number, factor) {\n    if (factor !== 1)\n        number /= factor;\n    const rounded = Math.round(number);\n    if (rounded !== number && Math.abs(rounded - number) <= Number.EPSILON) {\n        return rounded;\n    }\n    return number;\n}\n//# sourceMappingURL=getNumber.js.map","import { getNumber } from './getNumber';\nexport function peakTableCreator(data, options = {}) {\n    const { xFactor = 1, yFactor = 1 } = options.info || {};\n    let firstX = Number.POSITIVE_INFINITY;\n    let lastX = Number.NEGATIVE_INFINITY;\n    let firstY = Number.POSITIVE_INFINITY;\n    let lastY = Number.NEGATIVE_INFINITY;\n    let lines = [];\n    for (let i = 0; i < data.x.length; i++) {\n        let x = data.x[i];\n        let y = data.y[i];\n        if (firstX > x) {\n            firstX = x;\n        }\n        if (lastX < x) {\n            lastX = x;\n        }\n        if (firstY > y) {\n            firstY = y;\n        }\n        if (lastY < y) {\n            lastY = y;\n        }\n    }\n    lines.push(`##FIRSTX=${firstX}`);\n    lines.push(`##LASTX=${lastX}`);\n    lines.push(`##FIRSTY=${firstY}`);\n    lines.push(`##LASTY=${lastY}`);\n    lines.push(`##XFACTOR=${xFactor}`);\n    lines.push(`##YFACTOR=${yFactor}`);\n    lines.push('##PEAK TABLE=(XY..XY)');\n    for (let i = 0; i < data.x.length; i++) {\n        lines.push(`${getNumber(data.x[i], xFactor)} ${getNumber(data.y[i], yFactor)}`);\n    }\n    return lines;\n}\n//# sourceMappingURL=peakTableCreator.js.map","import { xDivide } from 'ml-spectra-processing';\nexport function rescaleAndEnsureInteger(data, factor = 1) {\n    if (factor === 1)\n        return data.map((value) => Math.round(value));\n    return xDivide(data, factor);\n}\n//# sourceMappingURL=rescaleAndEnsureInteger.js.map","/**\n * class encodes a integer vector as a String in order to store it in a text file.\n * The algorithms used to encode the data are describe in:\n *            http://www.iupac.org/publications/pac/pdf/2001/pdf/7311x1765.pdf\n */\nconst newLine = '\\n';\nconst pseudoDigits = [\n    ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9'],\n    ['@', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I'],\n    ['@', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i'],\n    ['%', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R'],\n    ['%', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r'],\n    [' ', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', 's'],\n];\nconst SQZ_P = 1;\nconst SQZ_N = 2;\nconst DIF_P = 3;\nconst DIF_N = 4;\nconst DUP = 5;\nconst maxLinelength = 100;\n/**\n * This function encodes the given vector. The xyEncoding format is specified by the\n * xyEncoding option\n * @param xyEncoding: ('FIX','SQZ','DIF','DIFDUP','CVS','PAC') Default 'DIFDUP'\n * @return {string}\n */\nexport function vectorEncoder(data, firstX, intervalX, xyEncoding) {\n    switch (xyEncoding) {\n        case 'FIX':\n            return fixEncoding(data, firstX, intervalX);\n        case 'SQZ':\n            return squeezedEncoding(data, firstX, intervalX);\n        case 'DIF':\n            return differenceEncoding(data, firstX, intervalX);\n        case 'DIFDUP':\n            return differenceDuplicateEncoding(data, firstX, intervalX);\n        case 'CSV':\n            return commaSeparatedValuesEncoding(data, firstX, intervalX);\n        case 'PAC':\n            return packedEncoding(data, firstX, intervalX);\n        default:\n            return differenceEncoding(data, firstX, intervalX);\n    }\n}\n/**\n * @private\n * No data compression used. The data is separated by a comma(',').\n */\nexport function commaSeparatedValuesEncoding(data, firstX, intervalX) {\n    return fixEncoding(data, firstX, intervalX, ',');\n}\n/**\n * @private\n * No data compression used. The data is separated by the specified separator.\n */\nexport function fixEncoding(data, firstX, intervalX, separator = ' ') {\n    let outputData = '';\n    let j = 0;\n    let dataLength = data.length;\n    while (j < dataLength - 7) {\n        outputData += Math.ceil(firstX + j * intervalX);\n        for (let i = 0; i < 8; i++) {\n            outputData += `${separator}${data[j++]}`;\n        }\n        outputData += newLine;\n    }\n    if (j < dataLength) {\n        // We add last numbers\n        outputData += Math.ceil(firstX + j * intervalX);\n        for (let i = j; i < dataLength; i++) {\n            outputData += `${separator}${data[i]}`;\n        }\n    }\n    return outputData;\n}\n/**\n * @private\n * No data compression used. The data is separated by the sign of the number.\n */\nexport function packedEncoding(data, firstX, intervalX) {\n    let outputData = '';\n    let j = 0;\n    let dataLength = data.length;\n    while (j < dataLength - 7) {\n        outputData += Math.ceil(firstX + j * intervalX);\n        for (let i = 0; i < 8; i++) {\n            outputData += data[j] < 0 ? data[j++] : `+${data[j++]}`;\n        }\n        outputData += newLine;\n    }\n    if (j < dataLength) {\n        // We add last numbers\n        outputData += Math.ceil(firstX + j * intervalX);\n        for (let i = j; i < dataLength; i++) {\n            outputData += data[i] < 0 ? data[i] : `+${data[i]}`;\n        }\n    }\n    return outputData;\n}\n/**\n * @private\n * Data compression is possible using the squeezed form (SQZ) in which the delimiter, the leading digit,\n * and sign are replaced by a pseudo-digit from Table 1. For example, the Y-values 30, 32 would be\n * represented as C0C2.\n */\nexport function squeezedEncoding(data, firstX, intervalX) {\n    let outputData = '';\n    // String outputData = new String();\n    let j = 0;\n    let dataLength = data.length;\n    while (j < dataLength - 10) {\n        outputData += Math.ceil(firstX + j * intervalX);\n        for (let i = 0; i < 10; i++) {\n            outputData += squeezedDigit(data[j++].toString());\n        }\n        outputData += newLine;\n    }\n    if (j < dataLength) {\n        // We add last numbers\n        outputData += Math.ceil(firstX + j * intervalX);\n        for (let i = j; i < dataLength; i++) {\n            outputData += squeezedDigit(data[i].toString());\n        }\n    }\n    return outputData;\n}\n/**\n * @private\n * Duplicate suppression xyEncoding\n */\nexport function differenceDuplicateEncoding(data, firstX, intervalX) {\n    let mult = 0;\n    let index = 0;\n    let charCount = 0;\n    // We built a string where we store the encoded data.\n    let encodedData = '';\n    let encodedNumber = '';\n    let temp = '';\n    // We calculate the differences vector\n    let diffData = new Array(data.length - 1);\n    for (let i = 0; i < diffData.length; i++) {\n        diffData[i] = data[i + 1] - data[i];\n    }\n    // We simulate a line carry\n    let numDiff = diffData.length;\n    while (index < numDiff) {\n        if (charCount === 0) {\n            // Start line\n            encodedNumber = `${Math.ceil(firstX + index * intervalX)}${squeezedDigit(data[index].toString())}${differenceDigit(diffData[index].toString())}`;\n            encodedData += encodedNumber;\n            charCount += encodedNumber.length;\n        }\n        else if (diffData[index - 1] === diffData[index]) {\n            // Try to insert next difference\n            mult++;\n        }\n        else if (mult > 0) {\n            // Now we know that it can be in line\n            mult++;\n            encodedNumber = duplicateDigit(mult.toString());\n            encodedData += encodedNumber;\n            charCount += encodedNumber.length;\n            mult = 0;\n            index--;\n        }\n        else {\n            // Check if it fits, otherwise start a new line\n            encodedNumber = differenceDigit(diffData[index].toString());\n            if (encodedNumber.length + charCount < maxLinelength) {\n                encodedData += encodedNumber;\n                charCount += encodedNumber.length;\n            }\n            else {\n                // start a new line\n                encodedData += newLine;\n                temp = `${Math.ceil(firstX + index * intervalX)}${squeezedDigit(data[index].toString())}${encodedNumber}`;\n                encodedData += temp; // Each line start with first index number.\n                charCount = temp.length;\n            }\n        }\n        index++;\n    }\n    if (mult > 0) {\n        encodedData += duplicateDigit((mult + 1).toString());\n    }\n    // We insert the last data from fid. It is done to control of data\n    // The last line start with the number of datas in the fid.\n    encodedData += `${newLine}${Math.ceil(firstX + index * intervalX)}${squeezedDigit(data[index].toString())}`;\n    return encodedData;\n}\n/**\n * @private\n * Differential xyEncoding\n */\nexport function differenceEncoding(data, firstX, intervalX) {\n    let index = 0;\n    let charCount = 0;\n    let i;\n    let encodedData = '';\n    let encodedNumber = '';\n    let temp = '';\n    // We calculate the differences vector\n    let diffData = new Array(data.length - 1);\n    for (i = 0; i < diffData.length; i++) {\n        diffData[i] = data[i + 1] - data[i];\n    }\n    let numDiff = diffData.length;\n    while (index < numDiff) {\n        if (charCount === 0) {\n            // We convert the first number.\n            encodedNumber = `${Math.ceil(firstX + index * intervalX)}${squeezedDigit(data[index].toString())}${differenceDigit(diffData[index].toString())}`;\n            encodedData += encodedNumber;\n            charCount += encodedNumber.length;\n        }\n        else {\n            encodedNumber = differenceDigit(diffData[index].toString());\n            if (encodedNumber.length + charCount < maxLinelength) {\n                encodedData += encodedNumber;\n                charCount += encodedNumber.length;\n            }\n            else {\n                encodedData += newLine;\n                temp = `${Math.ceil(firstX + index * intervalX)}${squeezedDigit(data[index].toString())}${encodedNumber}`;\n                encodedData += temp; // Each line start with first index number.\n                charCount = temp.length;\n            }\n        }\n        index++;\n    }\n    // We insert the last number from data. It is done to control of data\n    encodedData += `${newLine}${Math.ceil(firstX + index * intervalX)}${squeezedDigit(data[index].toString())}`;\n    return encodedData;\n}\n/**\n * @private\n * Convert number to the ZQZ format, using pseudo digits.\n */\nfunction squeezedDigit(num) {\n    let sqzDigits = '';\n    if (num.startsWith('-')) {\n        sqzDigits += pseudoDigits[SQZ_N][num.charCodeAt(1) - 48];\n        if (num.length > 2) {\n            sqzDigits += num.substring(2);\n        }\n    }\n    else {\n        sqzDigits += pseudoDigits[SQZ_P][num.charCodeAt(0) - 48];\n        if (num.length > 1) {\n            sqzDigits += num.substring(1);\n        }\n    }\n    return sqzDigits;\n}\n/**\n * Convert number to the DIF format, using pseudo digits.\n */\nfunction differenceDigit(num) {\n    let diffDigits = '';\n    if (num.startsWith('-')) {\n        diffDigits += pseudoDigits[DIF_N][num.charCodeAt(1) - 48];\n        if (num.length > 2) {\n            diffDigits += num.substring(2);\n        }\n    }\n    else {\n        diffDigits += pseudoDigits[DIF_P][num.charCodeAt(0) - 48];\n        if (num.length > 1) {\n            diffDigits += num.substring(1);\n        }\n    }\n    return diffDigits;\n}\n/**\n * Convert number to the DUP format, using pseudo digits.\n */\nfunction duplicateDigit(num) {\n    let dupDigits = '';\n    dupDigits += pseudoDigits[DUP][num.charCodeAt(0) - 48];\n    if (num.length > 1) {\n        dupDigits += num.substring(1);\n    }\n    return dupDigits;\n}\n//# sourceMappingURL=vectorEncoder.js.map","import { rescaleAndEnsureInteger } from './rescaleAndEnsureInteger';\nimport { vectorEncoder } from './vectorEncoder';\nexport function xyDataCreator(data, options = {}) {\n    const { xyEncoding = 'DIF' } = options;\n    const { xFactor = 1, yFactor = 1 } = options.info || {};\n    let firstX = data.x[0];\n    let lastX = data.x[data.x.length - 1];\n    let firstY = data.y[0];\n    let lastY = data.y[data.y.length - 1];\n    let nbPoints = data.x.length;\n    let deltaX = (lastX - firstX) / (nbPoints - 1);\n    let lines = [];\n    lines.push(`##FIRSTX=${firstX}`);\n    lines.push(`##LASTX=${lastX}`);\n    lines.push(`##FIRSTY=${firstY}`);\n    lines.push(`##LASTY=${lastY}`);\n    lines.push(`##DELTAX=${deltaX}`);\n    lines.push(`##XFACTOR=${xFactor}`);\n    lines.push(`##YFACTOR=${yFactor}`);\n    lines.push('##XYDATA=(X++(Y..Y))');\n    let line = vectorEncoder(rescaleAndEnsureInteger(data.y, yFactor), firstX / xFactor, deltaX / xFactor, xyEncoding);\n    if (line)\n        lines.push(line);\n    return lines;\n}\n//# sourceMappingURL=xyDataCreator.js.map","import { addInfoData } from './utils/addInfoData';\nimport { getBestFactor } from './utils/getBestFactor';\nimport { peakTableCreator } from './utils/peakTableCreator';\nimport { xyDataCreator } from './utils/xyDataCreator';\n/**\n * Create a jcamp\n * @param data object of array\n * @param [options={meta:{},info:{}} - metadata object\n * @returns JCAMP of the input\n */\nexport function fromJSON(data, options = {}) {\n    const { meta = {}, info = {}, xyEncoding } = options;\n    let { title = '', owner = '', origin = '', dataType = '', xUnits = '', yUnits = '', xFactor, yFactor, ...resInfo } = info;\n    data = { x: data.x, y: data.y };\n    let header = `##TITLE=${title}\n##JCAMP-DX=4.24\n##DATA TYPE=${dataType}\n##ORIGIN=${origin}\n##OWNER=${owner}\n##XUNITS=${xUnits}\n##YUNITS=${yUnits}\\n`;\n    header += addInfoData(resInfo, { prefix: '##' });\n    header += addInfoData(meta);\n    // we leave the header and utf8 fonts ${header.replace(/[^\\t\\n\\x20-\\x7F]/g, '')\n    if (xyEncoding) {\n        xFactor = getBestFactor(data.x, { factor: xFactor });\n        yFactor = getBestFactor(data.y, { factor: yFactor });\n        return `${header}##NPOINTS=${data.x.length}\n${xyDataCreator(data, { info: { xFactor, yFactor }, xyEncoding }).join('\\n')}\n##END=`;\n    }\n    else {\n        if (xFactor === undefined)\n            xFactor = 1;\n        if (yFactor === undefined)\n            yFactor = 1;\n        if (xFactor !== 1) {\n            //@ts-expect-error xFactor is always defined\n            data.x = data.x.map((value) => value / xFactor);\n        }\n        if (yFactor !== 1) {\n            //@ts-expect-error yFactor is always defined\n            data.y = data.y.map((value) => value / yFactor);\n        }\n        return `${header}##NPOINTS=${data.x.length}\n${peakTableCreator(data, { info: { xFactor, yFactor } }).join('\\n')}\n##END=`;\n    }\n}\n//# sourceMappingURL=fromJSON.js.map","import creatorNtuples from './creatorNtuples';\nimport { fromJSON } from './fromJSON';\nimport { checkNumberOrArray } from './utils/checkNumberOrArray';\n/**\n * Create a jcamp from variables\n */\nexport function fromVariables(\n/** object of variables */\nvariables, options = {}) {\n    const { info = {}, meta = {}, forceNtuples = false } = options;\n    let jcampOptions = {\n        info,\n        meta,\n    };\n    let keys = Object.keys(variables).map((key) => key.toLowerCase());\n    if (!forceNtuples && keys.length === 2) {\n        let x = variables.x;\n        let xLabel = x.label || 'x';\n        if (variables.x.units) {\n            if (xLabel.includes(variables.x.units)) {\n                jcampOptions.info.xUnits = xLabel;\n            }\n            else {\n                jcampOptions.info.xUnits = `${xLabel} (${variables.x.units})`;\n            }\n        }\n        else {\n            jcampOptions.info.xUnits = xLabel;\n        }\n        let y = variables.y;\n        let yLabel = y.label || 'y';\n        if (variables.y.units) {\n            if (yLabel.includes(variables.y.units)) {\n                jcampOptions.info.xUnits = yLabel;\n            }\n            else {\n                jcampOptions.info.yUnits = `${yLabel} (${variables.y.units})`;\n            }\n        }\n        else {\n            jcampOptions.info.yUnits = yLabel;\n        }\n        const xData = variables.x.data;\n        const yData = variables.y.data;\n        checkNumberOrArray(xData);\n        checkNumberOrArray(yData);\n        return fromJSON({ x: xData, y: yData }, jcampOptions);\n    }\n    else {\n        return creatorNtuples(variables, options);\n    }\n}\n//# sourceMappingURL=fromVariables.js.map","import { addInfoData } from './utils/addInfoData';\nimport { checkNumberOrArray } from './utils/checkNumberOrArray';\nimport { getBestFactor } from './utils/getBestFactor';\nimport { getExtremeValues } from './utils/getExtremeValues';\nimport { rescaleAndEnsureInteger } from './utils/rescaleAndEnsureInteger';\nimport { vectorEncoder } from './utils/vectorEncoder';\nconst ntuplesKeys = ['r', 'i'];\nfunction isNTuplesData(variables) {\n    return 'r' in variables && 'i' in variables;\n}\nfunction isRealData(variables) {\n    return 'r' in variables && !('i' in variables);\n}\n/**\n * Create a jcamp of 1D NMR data by variables x and y or x, r, i\n * @param variables - Variables to convert to jcamp\n * @param [options={}] - options that allows to add meta data in the jcamp\n * @return JCAMP-DX text file corresponding to the variables\n */\nexport function from1DNMRVariables(variables, options) {\n    const { meta = {}, info = {}, xyEncoding = '' } = options;\n    const factor = 'factor' in options\n        ? { ...options.factor }\n        : {};\n    const { title = '', owner = '', origin = '', dataType = '', dataClass = '', ...resInfo } = info;\n    if (!('.OBSERVE FREQUENCY' in info)) {\n        throw new Error('.OBSERVE FREQUENCY is mandatory into the info object for nmr data');\n    }\n    const xVariable = variables.x;\n    const xData = xVariable.data.slice();\n    let header = `##TITLE=${title}\n##JCAMP-DX=6.00\n##DATA TYPE= ${dataType}\n##DATA CLASS= ${dataClass}\n##ORIGIN=${origin}\n##OWNER=${owner}\\n`;\n    header += addInfoData(resInfo, { prefix: '##' });\n    header += addInfoData(meta);\n    const nbPoints = xData.length;\n    const spectralWidth = Math.abs(xData[nbPoints - 1] - xData[0]);\n    const firstPoint = xData[0] > xData[1] ? spectralWidth : 0;\n    const lastPoint = xData[0] > xData[1] ? 0 : spectralWidth;\n    const symbol = ['X'];\n    const varDim = [nbPoints];\n    const units = [xVariable.units];\n    const varType = ['INDEPENDENT'];\n    const factorArray = [spectralWidth / (nbPoints - 1)];\n    const varName = [xVariable.label.replace(/ *\\[.*/, '') || 'X'];\n    const first = [firstPoint];\n    const last = [lastPoint];\n    const max = [Math.max(lastPoint, firstPoint)];\n    const min = [Math.min(lastPoint, firstPoint)];\n    for (const key of ntuplesKeys) {\n        let variable = variables[key];\n        if (!variable) {\n            if (key !== 'i') {\n                throw new Error(`variable ${key} is mandatory in real/imaginary data`);\n            }\n            continue;\n        }\n        let name = variable?.label.replace(/ *\\[.*/, '');\n        let unit = variable?.label.replace(/.*\\[(?<units>.*)\\].*/, '$<units>');\n        const { firstLast, minMax } = getExtremeValues(variable.data);\n        factor[key] = getBestFactor(variable.data, {\n            factor: factor[key],\n            minMax,\n        });\n        const currentFactor = factor[key];\n        factorArray.push(currentFactor || 1);\n        symbol.push(variable.symbol || key);\n        varName.push(name || key);\n        varDim.push(variable.data.length);\n        first.push(firstLast.first);\n        last.push(firstLast.last);\n        max.push(minMax.max);\n        min.push(minMax.min);\n        varType.push('DEPENDENT');\n        units.push(variable.units || unit || '');\n    }\n    return isNTuplesData(variables)\n        ? addNtuplesHeader(header, variables, {\n            symbol,\n            varName,\n            varDim,\n            first,\n            last,\n            min,\n            max,\n            units,\n            factor,\n            varType,\n            factorArray,\n        }, resInfo)\n        : isRealData(variables)\n            ? addRealData(header, {\n                xData,\n                yData: variables.r.data,\n                xyEncoding,\n                info: {\n                    XUNITS: 'HZ',\n                    YUNITS: units[1],\n                    XFACTOR: factorArray[0],\n                    YFACTOR: factorArray[1],\n                    DELTAX: (xData[0] - xData[nbPoints - 1]) / (nbPoints + 1),\n                    FIRSTX: first[0],\n                    FIRSTY: first[1],\n                    LASTX: last[0],\n                    MAXY: max[1],\n                    MINY: min[1],\n                    NPOINTS: xData.length,\n                    XYDATA: '(X++(Y..Y))',\n                },\n            })\n            : header;\n}\nfunction addNtuplesHeader(header, variables, inputs, info) {\n    const { dataType = '' } = info;\n    const { symbol, varName, varDim, first, last, min, max, units, varType, factorArray, xyEncoding, factor, } = inputs;\n    header += `##NTUPLES= ${dataType}\n##VAR_NAME=  ${varName.join()}\n##SYMBOL=    ${symbol.join()}\n##VAR_TYPE=  ${varType.join()}\n##VAR_DIM=   ${varDim.join()}\n##UNITS=     ${units.join()}\n##FIRST=     ${first.join()}\n##LAST=      ${last.join()}\n##MAX=       ${max.join()}\n##MIN=       ${min.join()}\n##FACTOR=    ${factorArray.join()}\\n`;\n    for (const key of ['r', 'i']) {\n        const variable = variables[key];\n        if (!variable)\n            continue;\n        checkNumberOrArray(variable.data);\n        header += `##PAGE= N=${key === 'r' ? 1 : 2}\\n`;\n        header += `##DATA TABLE= (X++(${key === 'r' ? 'R..R' : 'I..I'})), XYDATA\\n`;\n        header += vectorEncoder(rescaleAndEnsureInteger(variable.data, factor[key]), first[0] > last[0] ? varDim[0] : 0, first[0] > last[0] ? -1 : 1, xyEncoding);\n        header += '\\n';\n    }\n    header += `##END NTUPLES= ${dataType}\\n`;\n    header += '##END=';\n    return header;\n}\nfunction addRealData(header, options) {\n    const { xData, yData, info, xyEncoding } = options;\n    header += addInfoData(info, { prefix: '##' });\n    return `${header}${vectorEncoder(rescaleAndEnsureInteger(yData, info.YFACTOR), xData.length - 1, -1, xyEncoding)}\n##END=`;\n}\n//# sourceMappingURL=from1DNMRVariables.js.map","import { matrixMinMaxZ } from 'ml-spectra-processing';\nimport { getFactorNumber } from './getFactorNumber';\nexport function getBestFactorMatrix(matrix, options = {}) {\n    const { maxValue, factor, minMax } = options;\n    if (factor !== undefined) {\n        return factor;\n    }\n    // is there non integer number ?\n    let onlyInteger = true;\n    for (let row of matrix) {\n        for (let y of row) {\n            if (Math.round(y) !== y) {\n                onlyInteger = false;\n                break;\n            }\n        }\n    }\n    if (onlyInteger) {\n        return 1;\n    }\n    // we need to rescale the values\n    // need to find the max and min values\n    const extremeValues = minMax || matrixMinMaxZ(matrix);\n    return getFactorNumber(extremeValues, maxValue);\n}\n//# sourceMappingURL=getBestFactorMatrix.js.map","import { isAnyArray } from 'is-any-array';\nimport { addInfoData } from './utils/addInfoData';\nimport { checkMatrix } from './utils/checkMatrix';\nimport { checkNumberOrArray } from './utils/checkNumberOrArray';\nimport { getBestFactor } from './utils/getBestFactor';\nimport { getBestFactorMatrix } from './utils/getBestFactorMatrix';\nimport { getExtremeValues } from './utils/getExtremeValues';\nimport { rescaleAndEnsureInteger } from './utils/rescaleAndEnsureInteger';\nimport { vectorEncoder } from './utils/vectorEncoder';\n/**\n * Create a jcamp of 2D NMR data by variables. Currently only the convertion of processed data\n * is supported. The variables x and y are the direct (F2 in Bruker) and indirect (F1 in bruker),\n * data should be in ppm scale, the z variable is the intensity (dependent)\n */\nexport function from2DNMRVariables(variables, options = {}) {\n    const { info = {}, meta = {}, xyEncoding = 'DIFDUP' } = options;\n    const factor = 'factor' in options\n        ? { ...options.factor }\n        : {};\n    const { title = '', owner = '', origin = '', dataType = 'NMR SPECTRUM', ...resInfo } = info;\n    const symbol = [];\n    const varName = [];\n    const varType = [];\n    const varDim = [];\n    const units = [];\n    const first = [];\n    const last = [];\n    const min = [];\n    const max = [];\n    const factors = [];\n    const keys = ['y', 'x', 'z'];\n    for (let i = 0; i < keys.length; i++) {\n        const key = keys[i];\n        let variable = variables[key];\n        if (!variable)\n            throw new Error('variables x, y and z are mandatory');\n        let name = variable?.label.replace(/ *\\[.*/, '');\n        let unit = variable?.label.replace(/.*\\[(?<units>.*)\\].*/, '$<units>');\n        const { firstLast, minMax } = getExtremeValues(variable.data);\n        if (!(key in factor))\n            factor[key] = calculateFactor(variable.data, minMax);\n        symbol.push(variable.symbol || key);\n        varName.push(name || key);\n        varDim.push(variable.data.length);\n        first.push(firstLast.first);\n        last.push(firstLast.last);\n        max.push(minMax.max);\n        min.push(minMax.min);\n        factors.push(factor[key]);\n        if (variable.isDependent !== undefined) {\n            varType.push(variable.isDependent ? 'DEPENDENT' : 'INDEPENDENT');\n        }\n        else {\n            varType.push(variable.isDependent !== undefined\n                ? !variable.isDependent\n                : i === 0\n                    ? 'INDEPENDENT'\n                    : 'DEPENDENT');\n        }\n        units.push(variable.units || unit || '');\n    }\n    let header = `##TITLE=${title}\n##JCAMP-DX=6.00\n##DATA TYPE=${dataType}\n##DATA CLASS= NTUPLES\n##ORIGIN=${origin}\n##OWNER=${owner}\\n`;\n    header += addInfoData(resInfo, { prefix: '##' });\n    header += addInfoData(meta);\n    let xData = variables.x.data;\n    let yData = variables.y.data;\n    checkNumberOrArray(xData);\n    checkNumberOrArray(yData);\n    checkMandatoryParameters(meta);\n    const zData = variables.z?.data || [];\n    checkMatrix(zData);\n    const { direct, indirect, dependent } = getDimensionIndices(symbol);\n    const nuc1 = String(meta.NUC1);\n    const nuc2 = String(meta.NUC2);\n    const nucleus = new Array(3);\n    nucleus[direct] = nuc1;\n    nucleus[indirect] = nuc2;\n    const sfo1 = Number(meta.SFO1);\n    const sfo2 = Number(meta.SFO2);\n    const optionsScaleAndJoin = {\n        indices: { direct, indirect },\n        sfo1,\n        sfo2,\n    };\n    header += `##NTUPLES= ${dataType}\n##VAR_NAME=  ${varName.join()}\n##SYMBOL=    ${symbol.join()}\n##VAR_TYPE=  ${varType.join()}\n##VAR_DIM=   ${varDim.join()}\n##.NUCLEUS=  ${nucleus.join()}\n##UNITS=     ${units.join()}\n##FACTOR=    ${factors.join()}\n##FIRST=     ${scaleAndJoin(first, optionsScaleAndJoin)}\n##LAST=      ${scaleAndJoin(last, optionsScaleAndJoin)}\n##MIN=       ${scaleAndJoin(min, optionsScaleAndJoin)}\n##MAX=       ${scaleAndJoin(max, optionsScaleAndJoin)}\\n`;\n    header += `##VAR_FORM= AFFN, AFFN, ASDF\\n`;\n    header += '##NUM DIM= 2\\n';\n    if (keys[direct] !== 'x') {\n        [yData, xData] = [xData, yData];\n    }\n    const directSymbol = symbol[direct].toUpperCase();\n    const indirectSymbol = symbol[indirect].toUpperCase();\n    const firstY = yData[0] * sfo2;\n    const lastY = yData[yData.length - 1] * sfo2;\n    const firstX = xData[0];\n    const lastX = xData[xData.length - 1];\n    const deltaX = (lastX - firstX) / (xData.length - 1);\n    const deltaY = (lastY - firstY) / (yData.length - 1);\n    let firstData = new Float64Array(3);\n    firstData[direct] = firstX * sfo1;\n    firstData[indirect] = firstY;\n    const yFactor = factor.y || 1;\n    const xFactor = factor.x || 1;\n    const zFactor = factor.z || 1;\n    for (let index = 0; index < zData.length; index++) {\n        firstData[dependent] = zData[index][0];\n        header += `##PAGE= ${indirectSymbol}=${(firstY + deltaY * index) / yFactor}\\n`;\n        header += `##FIRST=  ${firstData.join()}\\n`;\n        header += `##DATA TABLE= (${directSymbol}++(Y..Y)), PROFILE\\n`;\n        header += vectorEncoder(rescaleAndEnsureInteger(zData[index], zFactor), firstX / xFactor, deltaX / xFactor, xyEncoding);\n        header += '\\n';\n    }\n    return header;\n}\nfunction scaleAndJoin(variable, options) {\n    const { sfo1, sfo2 } = options;\n    const { direct, indirect } = options.indices;\n    const copy = variable.slice();\n    copy[direct] *= sfo1;\n    copy[indirect] *= sfo2;\n    return copy.join();\n}\nfunction getDimensionIndices(entry) {\n    const symbol = entry.map((e) => e.toUpperCase());\n    const direct = symbol.includes('F2')\n        ? symbol.indexOf('F2')\n        : symbol.indexOf('T2');\n    const indirect = symbol.includes('F1')\n        ? symbol.indexOf('F1')\n        : symbol.indexOf('T1');\n    if (direct === -1 || indirect === -1) {\n        throw new Error('F2/T2 and F1/T1 symbol should be defined for nD NMR SPECTRUM');\n    }\n    return { direct, indirect, dependent: 3 - direct - indirect };\n}\nfunction checkMandatoryParameters(meta) {\n    const list = ['SFO1', 'SFO2', 'NUC1', 'NUC2'];\n    for (const key of list) {\n        if (!meta[key]) {\n            throw new Error(`${key} in options.meta should be defined`);\n        }\n    }\n}\nfunction calculateFactor(data, minMax) {\n    return isAnyArray(data[0])\n        ? getBestFactorMatrix(data, { minMax })\n        : getBestFactor(data, { minMax });\n}\n//# sourceMappingURL=from2DNMRVariables.js.map"],"names":["addInfoData","data","options","arguments","length","undefined","keys","Object","prefix","header","key","JSON","stringify","toString","prototype","isAnyArray","value","tag","call","endsWith","includes","getOutputArray","output","TypeError","Float64Array","xCheck","input","minLength","Error","xDivide","array1","array2","isConstant","constant","Number","array3","i","xMinMaxValues","array","min","max","matrixCheck","RangeError","firstLength","matrixMinMaxZ","matrix","nbRows","nbColumns","column","row","checkMatrix","checkNumberOrArray","getExtremeValues","firstRow","firstLast","first","last","minMax","creatorNtuples","variables","meta","info","title","owner","origin","dataType","resInfo","symbol","varName","varType","varDim","units","variable","name","label","replace","unit","push","isDependent","join","x","point","getFactorNumber","maxValue","factor","Math","getBestFactor","onlyInteger","y","round","extremeValues","getNumber","number","rounded","abs","EPSILON","peakTableCreator","xFactor","yFactor","firstX","POSITIVE_INFINITY","lastX","NEGATIVE_INFINITY","firstY","lastY","lines","rescaleAndEnsureInteger","map","newLine","pseudoDigits","SQZ_P","SQZ_N","DIF_P","DIF_N","DUP","maxLinelength","vectorEncoder","intervalX","xyEncoding","fixEncoding","squeezedEncoding","differenceEncoding","differenceDuplicateEncoding","commaSeparatedValuesEncoding","packedEncoding","separator","outputData","j","dataLength","ceil","squeezedDigit","mult","index","charCount","encodedData","encodedNumber","temp","diffData","Array","numDiff","differenceDigit","duplicateDigit","num","sqzDigits","startsWith","charCodeAt","substring","diffDigits","dupDigits","xyDataCreator","nbPoints","deltaX","line","fromJSON","xUnits","yUnits","fromVariables","forceNtuples","jcampOptions","toLowerCase","xLabel","yLabel","xData","yData","ntuplesKeys","isNTuplesData","isRealData","from1DNMRVariables","dataClass","xVariable","slice","spectralWidth","firstPoint","lastPoint","factorArray","currentFactor","addNtuplesHeader","addRealData","r","XUNITS","YUNITS","XFACTOR","YFACTOR","DELTAX","FIRSTX","FIRSTY","LASTX","MAXY","MINY","NPOINTS","XYDATA","inputs","getBestFactorMatrix","from2DNMRVariables","factors","calculateFactor","checkMandatoryParameters","zData","z","direct","indirect","dependent","getDimensionIndices","nuc1","String","NUC1","nuc2","NUC2","nucleus","sfo1","SFO1","sfo2","SFO2","optionsScaleAndJoin","indices","scaleAndJoin","directSymbol","toUpperCase","indirectSymbol","deltaY","firstData","zFactor","copy","entry","e","indexOf","list"],"mappings":"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"}