{"version":3,"file":"convert-to-jcamp.js","sources":["../lib-esm/utils/addInfoData.js","../lib-esm/utils/assert.js","../node_modules/is-any-array/lib-esm/index.js","../lib-esm/utils/checkNumberOrArray.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/getFactorNumber.js","../lib-esm/utils/getBestFactor.js","../lib-esm/utils/checkMatrix.js","../lib-esm/utils/getExtremeValues.js","../lib-esm/utils/rescaleAndEnsureInteger.js","../lib-esm/utils/vectorEncoder.js","../lib-esm/creatorNtuples.js","../lib-esm/utils/getNumber.js","../lib-esm/utils/peakTableCreator.js","../lib-esm/utils/xyDataCreator.js","../lib-esm/fromJSON.js","../lib-esm/fromVariables.js","../lib-esm/utils/getBestFactorMatrix.js","../lib-esm/from2DNMRVariables.js"],"sourcesContent":["export const addInfoData = (data, keys = Object.keys(data), prefix = '##$') => {\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","export function assertMeasurementXYVariables(variables) {\n    assertVariablesHasX(variables);\n    assertVariablesHasY(variables);\n}\nexport function assertVariablesHasX(variables) {\n    if (!variables.x) {\n        throw new Error('variables has not x');\n    }\n}\nexport function assertVariablesHasY(variables) {\n    if (!variables.y) {\n        throw new Error('variables has not y');\n    }\n}\nexport function variablesHasXY(variables) {\n    return variables.x && variables.y ? true : false;\n}\n//# sourceMappingURL=assert.js.map","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","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';\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) {\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}\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","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","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';\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 { xDivide } from 'ml-spectra-processing';\nexport function rescaleAndEnsureInteger(data, factor) {\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 =\n                Math.ceil(firstX + index * intervalX) +\n                    squeezedDigit(data[index].toString()) +\n                    differenceDigit(diffData[index].toString());\n            encodedData += encodedNumber;\n            charCount += encodedNumber.length;\n        }\n        else {\n            // Try to insert next difference\n            if (diffData[index - 1] === diffData[index]) {\n                mult++;\n            }\n            else {\n                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 =\n                            Math.ceil(firstX + index * intervalX) +\n                                squeezedDigit(data[index].toString()) +\n                                encodedNumber;\n                        encodedData += temp; // Each line start with first index number.\n                        charCount = temp.length;\n                    }\n                }\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 +=\n        newLine +\n            Math.ceil(firstX + index * intervalX) +\n            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 =\n                Math.ceil(firstX + index * intervalX) +\n                    squeezedDigit(data[index].toString()) +\n                    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 =\n                    Math.ceil(firstX + index * intervalX) +\n                        squeezedDigit(data[index].toString()) +\n                        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 +=\n        newLine +\n            Math.ceil(firstX + index * intervalX) +\n            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 { addInfoData } from './utils/addInfoData';\nimport { assertVariablesHasX, assertVariablesHasY, } from './utils/assert';\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';\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    assertVariablesHasX(variables);\n    const { meta = {}, info = {}, xyEncoding = '', factors = {} } = options;\n    const { title = '', owner = '', origin = '', dataType = '' } = 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 factorArray = [];\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        factors[key] = getBestFactor(variable.data, {\n            factor: factors[key],\n            minMax,\n        });\n        const currentFactor = factors[key];\n        factorArray.push(currentFactor);\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    const infoKeys = Object.keys(info).filter((e) => !['title', 'owner', 'origin', 'datatype'].includes(e.toLocaleLowerCase()));\n    header += addInfoData(info, infoKeys, '##');\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##FACTOR=    ${factorArray.join()}\n##FIRST=     ${first.join()}\n##LAST=      ${last.join()}\n##MIN=       ${min.join()}\n##MAX=       ${max.join()}\\n`;\n    if (options.isNMR) {\n        let xData = variables.x.data;\n        checkNumberOrArray(xData);\n        if (options.isPeakData) {\n            assertVariablesHasY(variables);\n            let yData = variables.y.data;\n            checkNumberOrArray(yData);\n            header += `##DATA TABLE= (XY..XY), PEAKS\\n`;\n            for (let point = 0; point < varDim[0]; point++) {\n                header += `${xData[point]}, ${yData[point]}\\n`;\n            }\n        }\n        else if (options.isXYData) {\n            for (const key of ['r', 'i']) {\n                const variable = variables[key];\n                if (variable) {\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, factors[key]), 0, 1, xyEncoding);\n                    header += '\\n';\n                }\n            }\n        }\n    }\n    else {\n        header += `##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    }\n    header += `##END NTUPLES= ${dataType}\\n`;\n    header += '##END=\\n##END=';\n    return header;\n}\n//# sourceMappingURL=creatorNtuples.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 { 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';\nconst infoDefaultKeys = [\n    'title',\n    'owner',\n    'origin',\n    'dataType',\n    'xUnits',\n    'yUnits',\n    'xFactor',\n    'yFactor',\n];\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, } = 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    const infoKeys = Object.keys(info).filter((keys) => !infoDefaultKeys.includes(keys));\n    header += addInfoData(info, infoKeys, '##');\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 { variablesHasXY } from './utils/assert';\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 && variablesHasXY(variables)) {\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 { 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 from variables\n */\nexport function from2DNMRVariables(\n/** object of variables */\nvariables, options = {}) {\n    const { info = {}, meta = {}, xyEncoding = 'DIFDUP' } = options;\n    const { title = '', owner = '', origin = '', dataType = '' } = 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 factor = [];\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        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        //@ts-expect-error it will be included\n        factor.push(variable.factor || calculateFactor(variable.data, minMax));\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    const infoKeys = Object.keys(info).filter((e) => !['title', 'owner', 'origin', 'dataType'].includes(e));\n    header += addInfoData(info, infoKeys, '##');\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=    ${factor.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[indirect];\n    const xFactor = factor[direct];\n    const zFactor = factor[dependent];\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","keys","Object","prefix","header","key","JSON","stringify","assertVariablesHasX","variables","x","Error","assertVariablesHasY","y","variablesHasXY","toString","prototype","isAnyArray","value","call","endsWith","checkNumberOrArray","getOutputArray","output","length","undefined","TypeError","Float64Array","xCheck","input","xDivide","array1","array2","options","isConstant","constant","Number","array3","i","xMinMaxValues","array","min","max","matrixCheck","RangeError","firstLength","matrixMinMaxZ","matrix","nbRows","nbColumns","column","row","getFactorNumber","minMax","maxValue","factor","Math","getBestFactor","onlyInteger","round","extremeValues","checkMatrix","getExtremeValues","firstRow","firstLast","first","last","rescaleAndEnsureInteger","map","newLine","pseudoDigits","SQZ_P","SQZ_N","DIF_P","DIF_N","DUP","maxLinelength","vectorEncoder","firstX","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","creatorNtuples","meta","info","factors","title","owner","origin","dataType","symbol","varName","varType","varDim","units","factorArray","variable","name","label","replace","unit","currentFactor","push","isDependent","infoKeys","filter","e","includes","toLocaleLowerCase","join","isNMR","xData","isPeakData","yData","point","isXYData","getNumber","number","rounded","abs","EPSILON","peakTableCreator","xFactor","yFactor","POSITIVE_INFINITY","lastX","NEGATIVE_INFINITY","firstY","lastY","lines","xyDataCreator","nbPoints","deltaX","line","infoDefaultKeys","fromJSON","xUnits","yUnits","fromVariables","forceNtuples","jcampOptions","toLowerCase","xLabel","yLabel","getBestFactorMatrix","from2DNMRVariables","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","slice","entry","indexOf","list"],"mappings":"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"}