{"version":3,"file":"spectrum-generator.js","sources":["../node_modules/ml-peak-shape-generator/lib-esm/util/constants.js","../node_modules/ml-peak-shape-generator/lib-esm/util/erfinv.js","../node_modules/ml-peak-shape-generator/lib-esm/shapes/1d/gaussian/Gaussian.js","../node_modules/ml-peak-shape-generator/lib-esm/shapes/1d/lorentzian/Lorentzian.js","../node_modules/ml-peak-shape-generator/lib-esm/shapes/1d/pseudoVoigt/PseudoVoigt.js","../node_modules/ml-peak-shape-generator/lib-esm/shapes/2d/gaussian2D/Gaussian2D.js","../node_modules/ml-peak-shape-generator/lib-esm/shapes/1d/getShape1D.js","../node_modules/ml-peak-shape-generator/lib-esm/shapes/2d/getShape2D.js","../lib-esm/util/addBaseline.js","../node_modules/is-any-array/lib-esm/index.js","../node_modules/ml-spectra-processing/lib-esm/x/xAdd.js","../node_modules/ml-spectra-processing/lib-esm/x/xCheck.js","../node_modules/ml-spectra-processing/lib-esm/x/xFindClosestIndex.js","../node_modules/ml-spectra-processing/lib-esm/x/xGetFromToIndex.js","../node_modules/ml-spectra-processing/lib-esm/x/xMaxValue.js","../node_modules/ml-spectra-processing/lib-esm/matrix/matrixCheck.js","../node_modules/ml-spectra-processing/lib-esm/matrix/matrixMinMaxZ.js","../node_modules/ml-xsadd/lib-es6/xsadd.js","../node_modules/ml-spectra-processing/lib-esm/utils/createRandomArray.js","../lib-esm/util/addNoise.js","../lib-esm/SpectrumGenerator.js","../lib-esm/Spectrum2DGenerator.js"],"sourcesContent":["export const GAUSSIAN_EXP_FACTOR = -4 * Math.LN2;\nexport const ROOT_PI_OVER_LN2 = Math.sqrt(Math.PI / Math.LN2);\nexport const ROOT_THREE = Math.sqrt(3);\nexport const ROOT_2LN2 = Math.sqrt(2 * Math.LN2);\nexport const ROOT_2LN2_MINUS_ONE = Math.sqrt(2 * Math.LN2) - 1;\n//# sourceMappingURL=constants.js.map","// https://en.wikipedia.org/wiki/Error_function#Inverse_functions\n// This code yields to a good approximation\n// If needed a better implementation using polynomial can be found on https://en.wikipedia.org/wiki/Error_function#Inverse_functions\nexport default function erfinv(x) {\n    let a = 0.147;\n    if (x === 0)\n        return 0;\n    let ln1MinusXSqrd = Math.log(1 - x * x);\n    let lnEtcBy2Plus2 = ln1MinusXSqrd / 2 + 2 / (Math.PI * a);\n    let firstSqrt = Math.sqrt(lnEtcBy2Plus2 ** 2 - ln1MinusXSqrd / a);\n    let secondSqrt = Math.sqrt(firstSqrt - lnEtcBy2Plus2);\n    return secondSqrt * (x > 0 ? 1 : -1);\n}\n//# sourceMappingURL=erfinv.js.map","import { ROOT_2LN2, GAUSSIAN_EXP_FACTOR, ROOT_PI_OVER_LN2, } from '../../../util/constants';\nimport erfinv from '../../../util/erfinv';\nexport class Gaussian {\n    constructor(options = {}) {\n        const { fwhm = 500, sd } = options;\n        this.fwhm = sd ? gaussianWidthToFWHM(2 * sd) : fwhm;\n    }\n    fwhmToWidth(fwhm = this.fwhm) {\n        return gaussianFwhmToWidth(fwhm);\n    }\n    widthToFWHM(width) {\n        return gaussianWidthToFWHM(width);\n    }\n    fct(x) {\n        return gaussianFct(x, this.fwhm);\n    }\n    getArea(height = calculateGaussianHeight({ fwhm: this.fwhm })) {\n        return getGaussianArea({ fwhm: this.fwhm, height });\n    }\n    getFactor(area) {\n        return getGaussianFactor(area);\n    }\n    getData(options = {}) {\n        return getGaussianData(this, options);\n    }\n    calculateHeight(area = 1) {\n        return calculateGaussianHeight({ fwhm: this.fwhm, area });\n    }\n    getParameters() {\n        return ['fwhm'];\n    }\n}\nexport function calculateGaussianHeight(options) {\n    let { fwhm = 500, area = 1, sd } = options;\n    if (sd)\n        fwhm = gaussianWidthToFWHM(2 * sd);\n    return (2 * area) / ROOT_PI_OVER_LN2 / fwhm;\n}\nexport function gaussianFct(x, fwhm) {\n    return Math.exp(GAUSSIAN_EXP_FACTOR * Math.pow(x / fwhm, 2));\n}\nexport function gaussianWidthToFWHM(width) {\n    return width * ROOT_2LN2;\n}\nexport function gaussianFwhmToWidth(fwhm) {\n    return fwhm / ROOT_2LN2;\n}\nexport function getGaussianArea(options) {\n    let { fwhm = 500, sd, height = 1 } = options;\n    if (sd)\n        fwhm = gaussianWidthToFWHM(2 * sd);\n    return (height * ROOT_PI_OVER_LN2 * fwhm) / 2;\n}\nexport function getGaussianFactor(area = 0.9999) {\n    return Math.sqrt(2) * erfinv(area);\n}\nexport function getGaussianData(shape = {}, options = {}) {\n    let { fwhm = 500, sd } = shape;\n    if (sd)\n        fwhm = gaussianWidthToFWHM(2 * sd);\n    let { length, factor = getGaussianFactor(), height = calculateGaussianHeight({ fwhm }), } = options;\n    if (!length) {\n        length = Math.min(Math.ceil(fwhm * factor), Math.pow(2, 25) - 1);\n        if (length % 2 === 0)\n            length++;\n    }\n    const center = (length - 1) / 2;\n    const data = new Float64Array(length);\n    for (let i = 0; i <= center; i++) {\n        data[i] = gaussianFct(i - center, fwhm) * height;\n        data[length - 1 - i] = data[i];\n    }\n    return data;\n}\n//# sourceMappingURL=Gaussian.js.map","import { ROOT_THREE } from '../../../util/constants';\nexport class Lorentzian {\n    constructor(options = {}) {\n        const { fwhm = 500 } = options;\n        this.fwhm = fwhm;\n    }\n    fwhmToWidth(fwhm = this.fwhm) {\n        return lorentzianFwhmToWidth(fwhm);\n    }\n    widthToFWHM(width) {\n        return lorentzianWidthToFWHM(width);\n    }\n    fct(x) {\n        return lorentzianFct(x, this.fwhm);\n    }\n    getArea(height = 1) {\n        return getLorentzianArea({ fwhm: this.fwhm, height });\n    }\n    getFactor(area) {\n        return getLorentzianFactor(area);\n    }\n    getData(options = {}) {\n        return getLorentzianData(this, options);\n    }\n    calculateHeight(area = 1) {\n        return calculateLorentzianHeight({ fwhm: this.fwhm, area });\n    }\n    getParameters() {\n        return ['fwhm'];\n    }\n}\nexport const calculateLorentzianHeight = ({ fwhm = 1, area = 1 }) => {\n    return (2 * area) / Math.PI / fwhm;\n};\nexport const lorentzianFct = (x, fwhm) => {\n    return Math.pow(fwhm, 2) / (4 * Math.pow(x, 2) + Math.pow(fwhm, 2));\n};\nexport const lorentzianWidthToFWHM = (width) => {\n    return width * ROOT_THREE;\n};\nexport const lorentzianFwhmToWidth = (fwhm) => {\n    return fwhm / ROOT_THREE;\n};\nexport const getLorentzianArea = (options) => {\n    const { fwhm = 500, height = 1 } = options;\n    return (height * Math.PI * fwhm) / 2;\n};\nexport const getLorentzianFactor = (area = 0.9999) => {\n    return 2 * Math.tan(Math.PI * (area - 0.5));\n};\nexport const getLorentzianData = (shape = {}, options = {}) => {\n    let { fwhm = 500 } = shape;\n    let { length, factor = getLorentzianFactor(), height = calculateLorentzianHeight({ fwhm, area: 1 }), } = options;\n    if (!length) {\n        length = Math.min(Math.ceil(fwhm * factor), Math.pow(2, 25) - 1);\n        if (length % 2 === 0)\n            length++;\n    }\n    const center = (length - 1) / 2;\n    const data = new Float64Array(length);\n    for (let i = 0; i <= center; i++) {\n        data[i] = lorentzianFct(i - center, fwhm) * height;\n        data[length - 1 - i] = data[i];\n    }\n    return data;\n};\n//# sourceMappingURL=Lorentzian.js.map","import { GAUSSIAN_EXP_FACTOR, ROOT_2LN2_MINUS_ONE, ROOT_PI_OVER_LN2, } from '../../../util/constants';\nimport { gaussianFct, getGaussianFactor } from '../gaussian/Gaussian';\nimport { lorentzianFct, getLorentzianFactor } from '../lorentzian/Lorentzian';\nexport class PseudoVoigt {\n    constructor(options = {}) {\n        const { fwhm = 500, mu = 0.5 } = options;\n        this.mu = mu;\n        this.fwhm = fwhm;\n    }\n    fwhmToWidth(fwhm = this.fwhm, mu = this.mu) {\n        return pseudoVoigtFwhmToWidth(fwhm, mu);\n    }\n    widthToFWHM(width, mu = this.mu) {\n        return pseudoVoigtWidthToFWHM(width, mu);\n    }\n    fct(x) {\n        return pseudoVoigtFct(x, this.fwhm, this.mu);\n    }\n    getArea(height = 1) {\n        return getPseudoVoigtArea({ fwhm: this.fwhm, height, mu: this.mu });\n    }\n    getFactor(area) {\n        return getPseudoVoigtFactor(area);\n    }\n    getData(options = {}) {\n        const { length, factor, height = calculatePseudoVoigtHeight({\n            fwhm: this.fwhm,\n            mu: this.mu,\n            area: 1,\n        }), } = options;\n        return getPseudoVoigtData(this, { factor, length, height });\n    }\n    calculateHeight(area = 1) {\n        return calculatePseudoVoigtHeight({ fwhm: this.fwhm, mu: this.mu, area });\n    }\n    getParameters() {\n        return ['fwhm', 'mu'];\n    }\n}\nexport const calculatePseudoVoigtHeight = (options = {}) => {\n    let { fwhm = 1, mu = 0.5, area = 1 } = options;\n    return (2 * area) / (fwhm * (mu * ROOT_PI_OVER_LN2 + (1 - mu) * Math.PI));\n};\nexport const pseudoVoigtFct = (x, fwhm, mu) => {\n    return (1 - mu) * lorentzianFct(x, fwhm) + mu * gaussianFct(x, fwhm);\n};\nexport const pseudoVoigtWidthToFWHM = (width, mu = 0.5) => {\n    return width * (mu * ROOT_2LN2_MINUS_ONE + 1);\n};\nexport const pseudoVoigtFwhmToWidth = (fwhm, mu = 0.5) => {\n    return fwhm / (mu * ROOT_2LN2_MINUS_ONE + 1);\n};\nexport const getPseudoVoigtArea = (options) => {\n    const { fwhm = 500, height = 1, mu = 0.5 } = options;\n    return (fwhm * height * (mu * ROOT_PI_OVER_LN2 + (1 - mu) * Math.PI)) / 2;\n};\nexport const getPseudoVoigtFactor = (area = 0.9999, mu = 0.5) => {\n    return mu < 1 ? getLorentzianFactor(area) : getGaussianFactor(area);\n};\nexport const getPseudoVoigtData = (shape = {}, options = {}) => {\n    let { fwhm = 500, mu = 0.5 } = shape;\n    let { length, factor = getPseudoVoigtFactor(0.999, mu), height = calculatePseudoVoigtHeight({ fwhm, mu, area: 1 }), } = options;\n    if (!height) {\n        height =\n            1 /\n                ((mu / Math.sqrt(-GAUSSIAN_EXP_FACTOR / Math.PI)) * fwhm +\n                    ((1 - mu) * fwhm * Math.PI) / 2);\n    }\n    if (!length) {\n        length = Math.min(Math.ceil(fwhm * factor), Math.pow(2, 25) - 1);\n        if (length % 2 === 0)\n            length++;\n    }\n    const center = (length - 1) / 2;\n    const data = new Float64Array(length);\n    for (let i = 0; i <= center; i++) {\n        data[i] = pseudoVoigtFct(i - center, fwhm, mu) * height;\n        data[length - 1 - i] = data[i];\n    }\n    return data;\n};\n//# sourceMappingURL=PseudoVoigt.js.map","import { GAUSSIAN_EXP_FACTOR } from '../../../util/constants';\nimport { getGaussianFactor, gaussianFwhmToWidth, gaussianWidthToFWHM, } from '../../1d/gaussian/Gaussian';\nexport class Gaussian2D {\n    constructor(options = {}) {\n        let { fwhm = 50, sd } = options;\n        fwhm = ensureFWHM2D(fwhm, sd);\n        this.fwhmX = fwhm.x;\n        this.fwhmY = fwhm.y;\n    }\n    fct(x, y) {\n        return gaussian2DFct(x, y, this.fwhmX, this.fwhmY);\n    }\n    getData(options = {}) {\n        return getGaussian2DData({\n            fwhm: { x: this.fwhmX, y: this.fwhmY },\n        }, options);\n    }\n    getFactor(volume = 1) {\n        return getGaussianFactor(volume);\n    }\n    getVolume(height = calculateGaussian2DHeight({\n        fwhm: { x: this.fwhmX, y: this.fwhmY },\n        volume: 1,\n    })) {\n        return getGaussian2DVolume({\n            fwhm: { x: this.fwhmX, y: this.fwhmY },\n            height,\n        });\n    }\n    widthToFWHM(width) {\n        return gaussianWidthToFWHM(width);\n    }\n    fwhmToWidth(fwhm) {\n        return gaussianFwhmToWidth(fwhm);\n    }\n    calculateHeight(volume = 1) {\n        return calculateGaussian2DHeight({\n            volume,\n            fwhm: { x: this.fwhmX, y: this.fwhmY },\n        });\n    }\n    set fwhm(fwhm) {\n        fwhm = ensureXYNumber(fwhm);\n        this.fwhmX = fwhm.x;\n        this.fwhmY = fwhm.y;\n    }\n}\nexport const gaussian2DFct = (x, y, xFWHM, yFWHM) => {\n    return Math.exp(GAUSSIAN_EXP_FACTOR * (Math.pow(x / xFWHM, 2) + Math.pow(y / yFWHM, 2)));\n};\nexport const getGaussian2DData = (shape, options = {}) => {\n    let { fwhm = 50, sd } = shape;\n    fwhm = ensureFWHM2D(fwhm, sd);\n    let { factor = getGaussianFactor(), length = { x: 0, y: 0 }, height = calculateGaussian2DHeight({ fwhm, volume: 1 }), } = options;\n    factor = ensureXYNumber(factor);\n    length = ensureXYNumber(length);\n    for (const axis of ['x', 'y']) {\n        if (!length[axis]) {\n            length[axis] = Math.min(Math.ceil(fwhm[axis] * factor[axis]), Math.pow(2, 25) - 1);\n            if (length[axis] % 2 === 0)\n                length[axis]++;\n        }\n    }\n    const xCenter = (length.x - 1) / 2;\n    const yCenter = (length.y - 1) / 2;\n    const data = new Array(length.x);\n    for (let i = 0; i < length.x; i++) {\n        data[i] = new Float64Array(length.y);\n    }\n    for (let i = 0; i < length.x; i++) {\n        for (let j = 0; j < length.y; j++) {\n            data[i][j] =\n                gaussian2DFct(i - xCenter, j - yCenter, fwhm.x, fwhm.y) * height;\n        }\n    }\n    return data;\n};\nexport const calculateGaussian2DHeight = (options = {}) => {\n    let { volume = 1, fwhm = 50, sd } = options;\n    fwhm = ensureFWHM2D(fwhm, sd);\n    return (volume * Math.LN2 * 4) / (Math.PI * fwhm.y * fwhm.x);\n};\nexport const getGaussian2DVolume = (options = {}) => {\n    let { fwhm = 50, height = 1, sd } = options;\n    fwhm = ensureFWHM2D(fwhm, sd);\n    return (height * Math.PI * fwhm.y * fwhm.x) / Math.LN2 / 4;\n};\nfunction ensureXYNumber(input) {\n    return typeof input !== 'object' ? { x: input, y: input } : { ...input };\n}\nfunction ensureFWHM2D(fwhm, sd) {\n    if (sd !== undefined) {\n        let sdObject = ensureXYNumber(sd);\n        return {\n            x: gaussianWidthToFWHM(2 * sdObject.x),\n            y: gaussianWidthToFWHM(2 * sdObject.y),\n        };\n    }\n    else if (fwhm !== undefined) {\n        return ensureXYNumber(fwhm);\n    }\n    else {\n        throw new Error('ensureFWHM2D must have either fwhm or sd defined');\n    }\n}\n//# sourceMappingURL=Gaussian2D.js.map","import { Gaussian } from './gaussian/Gaussian';\nimport { Lorentzian } from './lorentzian/Lorentzian';\nimport { PseudoVoigt } from './pseudoVoigt/PseudoVoigt';\n/**\n * Generate a instance of a specific kind of shape.\n */\nexport function getShape1D(shape) {\n    const { kind } = shape;\n    switch (kind) {\n        case 'gaussian':\n            return new Gaussian(shape);\n        case 'lorentzian':\n            return new Lorentzian(shape);\n        case 'pseudoVoigt':\n            return new PseudoVoigt(shape);\n        default: {\n            throw Error(`Unknown distribution ${kind}`);\n        }\n    }\n}\n//# sourceMappingURL=getShape1D.js.map","import { Gaussian2D } from './gaussian2D/Gaussian2D';\n/**\n * Generate a instance of a specific kind of shape.\n */\nexport function getShape2D(shape) {\n    const { kind } = shape;\n    switch (kind) {\n        case 'gaussian':\n            return new Gaussian2D(shape);\n        default: {\n            const unHandled = kind;\n            // eslint-disable-next-line @typescript-eslint/restrict-template-expressions\n            throw Error(`Unknown distribution ${unHandled}`);\n        }\n    }\n}\n//# sourceMappingURL=getShape2D.js.map","export default function addBaseline(data, baselineFct) {\n    if (!baselineFct)\n        return data;\n    let xs = data.x;\n    let ys = data.y;\n    for (let i = 0; i < xs.length; i++) {\n        ys[i] += baselineFct(xs[i]);\n    }\n    return data;\n}\n//# sourceMappingURL=addBaseline.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';\n/**\n * This function xAdd the first array by the second array or a constant value to each element of the first array\n *\n * @param array1 - the first array\n * @param array2 - the second array or number\n */\nexport function xAdd(array1, array2) {\n    let isConstant = false;\n    let constant = 0;\n    if (isAnyArray(array2)) {\n        if (array1.length !== array2.length) {\n            throw new Error('xAdd: size of array1 and array2 must be identical');\n        }\n    }\n    else {\n        isConstant = true;\n        constant = array2;\n    }\n    let array3 = new Float64Array(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=xAdd.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","/**\n * Returns the closest index of a `target`\n *\n * @param array - array of numbers\n * @param target - target\n * @returns - closest index\n */\nexport function xFindClosestIndex(array, target, options = {}) {\n    const { sorted = true } = options;\n    if (sorted) {\n        let low = 0;\n        let high = array.length - 1;\n        let middle = 0;\n        while (high - low > 1) {\n            middle = low + ((high - low) >> 1);\n            if (array[middle] < target) {\n                low = middle;\n            }\n            else if (array[middle] > target) {\n                high = middle;\n            }\n            else {\n                return middle;\n            }\n        }\n        if (low < array.length - 1) {\n            if (Math.abs(target - array[low]) < Math.abs(array[low + 1] - target)) {\n                return low;\n            }\n            else {\n                return low + 1;\n            }\n        }\n        else {\n            return low;\n        }\n    }\n    else {\n        let index = 0;\n        let diff = Number.POSITIVE_INFINITY;\n        for (let i = 0; i < array.length; i++) {\n            const currentDiff = Math.abs(array[i] - target);\n            if (currentDiff < diff) {\n                diff = currentDiff;\n                index = i;\n            }\n        }\n        return index;\n    }\n}\n//# sourceMappingURL=xFindClosestIndex.js.map","import { xFindClosestIndex } from './xFindClosestIndex';\n/**\n * Returns an object with {fromIndex, toIndex} for a specific from / to\n *\n * @param x - array of numbers\n * @param options - Options\n */\nexport function xGetFromToIndex(x, options = {}) {\n    let { fromIndex, toIndex, from, to } = options;\n    if (fromIndex === undefined) {\n        if (from !== undefined) {\n            fromIndex = xFindClosestIndex(x, from);\n        }\n        else {\n            fromIndex = 0;\n        }\n    }\n    if (toIndex === undefined) {\n        if (to !== undefined) {\n            toIndex = xFindClosestIndex(x, to);\n        }\n        else {\n            toIndex = x.length - 1;\n        }\n    }\n    if (fromIndex < 0)\n        fromIndex = 0;\n    if (toIndex < 0)\n        toIndex = 0;\n    if (fromIndex >= x.length)\n        fromIndex = x.length - 1;\n    if (toIndex >= x.length)\n        toIndex = x.length - 1;\n    if (fromIndex > toIndex)\n        [fromIndex, toIndex] = [toIndex, fromIndex];\n    return { fromIndex, toIndex };\n}\n//# sourceMappingURL=xGetFromToIndex.js.map","import { xCheck } from './xCheck';\nimport { xGetFromToIndex } from './xGetFromToIndex';\n/**\n * Computes the maximal value of an array of values\n *\n * @param array - array of numbers\n * @param options - options\n */\nexport function xMaxValue(array, options = {}) {\n    xCheck(array);\n    const { fromIndex, toIndex } = xGetFromToIndex(array, options);\n    let maxValue = array[fromIndex];\n    for (let i = fromIndex + 1; i <= toIndex; i++) {\n        if (array[i] > maxValue) {\n            maxValue = array[i];\n        }\n    }\n    return maxValue;\n}\n//# sourceMappingURL=xMaxValue.js.map","export function matrixCheck(data) {\n    if (data.length === 0 || data[0].length === 0) {\n        throw 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","const LOOP = 8;\nconst FLOAT_MUL = 1 / 16777216;\nconst sh1 = 15;\nconst sh2 = 18;\nconst sh3 = 11;\nfunction multiply_uint32(n, m) {\n    n >>>= 0;\n    m >>>= 0;\n    const nlo = n & 0xffff;\n    const nhi = n - nlo;\n    return (((nhi * m) >>> 0) + nlo * m) >>> 0;\n}\nexport default class XSadd {\n    constructor(seed = Date.now()) {\n        this.state = new Uint32Array(4);\n        this.init(seed);\n        this.random = this.getFloat.bind(this);\n    }\n    /**\n     * Returns a 32-bit integer r (0 <= r < 2^32)\n     */\n    getUint32() {\n        this.nextState();\n        return (this.state[3] + this.state[2]) >>> 0;\n    }\n    /**\n     * Returns a floating point number r (0.0 <= r < 1.0)\n     */\n    getFloat() {\n        return (this.getUint32() >>> 8) * FLOAT_MUL;\n    }\n    init(seed) {\n        if (!Number.isInteger(seed)) {\n            throw new TypeError('seed must be an integer');\n        }\n        this.state[0] = seed;\n        this.state[1] = 0;\n        this.state[2] = 0;\n        this.state[3] = 0;\n        for (let i = 1; i < LOOP; i++) {\n            this.state[i & 3] ^=\n                (i +\n                    multiply_uint32(1812433253, this.state[(i - 1) & 3] ^ ((this.state[(i - 1) & 3] >>> 30) >>> 0))) >>>\n                    0;\n        }\n        this.periodCertification();\n        for (let i = 0; i < LOOP; i++) {\n            this.nextState();\n        }\n    }\n    periodCertification() {\n        if (this.state[0] === 0 &&\n            this.state[1] === 0 &&\n            this.state[2] === 0 &&\n            this.state[3] === 0) {\n            this.state[0] = 88; // X\n            this.state[1] = 83; // S\n            this.state[2] = 65; // A\n            this.state[3] = 68; // D\n        }\n    }\n    nextState() {\n        let t = this.state[0];\n        t ^= t << sh1;\n        t ^= t >>> sh2;\n        t ^= this.state[3] << sh3;\n        this.state[0] = this.state[1];\n        this.state[1] = this.state[2];\n        this.state[2] = this.state[3];\n        this.state[3] = t;\n    }\n}\n","import XSAdd from 'ml-xsadd';\n/**\n * Create a random array of numbers of a specific length\n *\n * @return - array of random floats normally distributed\n */\nlet spare;\nlet hasSpare = false;\nexport function createRandomArray(options = {}) {\n    let { mean = 0, standardDeviation = 1, length = 1000, range = 1, seed, distribution = 'normal', } = options;\n    const generator = new XSAdd(seed);\n    let returnArray = new Float64Array(length);\n    switch (distribution) {\n        case 'normal':\n            for (let i = 0; i < length; i++) {\n                returnArray[i] = generateGaussian(mean, standardDeviation, generator);\n            }\n            break;\n        case 'uniform':\n            for (let i = 0; i < length; i++) {\n                returnArray[i] = (generator.random() - 0.5) * range + mean;\n            }\n            break;\n        default:\n            // eslint-disable-next-line @typescript-eslint/restrict-template-expressions\n            throw new Error(`unknown distribution: ${distribution}`);\n    }\n    return returnArray;\n}\nfunction generateGaussian(mean, standardDeviation, generator) {\n    let val, u, v, s;\n    if (hasSpare) {\n        hasSpare = false;\n        val = spare * standardDeviation + mean;\n    }\n    else {\n        do {\n            u = generator.random() * 2 - 1;\n            v = generator.random() * 2 - 1;\n            s = u * u + v * v;\n        } while (s >= 1 || s === 0);\n        s = Math.sqrt((-2.0 * Math.log(s)) / s);\n        spare = v * s;\n        hasSpare = true;\n        val = mean + standardDeviation * u * s;\n    }\n    return val;\n}\n//# sourceMappingURL=createRandomArray.js.map","import { xMaxValue, xAdd, createRandomArray } from 'ml-spectra-processing';\nexport default function addNoise(data, options = {}) {\n    const { seed = 0, distribution = 'normal', percent = 1 } = options;\n    const range = (xMaxValue(data.y) * percent) / 100;\n    const noise = createRandomArray({\n        distribution,\n        seed,\n        mean: 0,\n        standardDeviation: range,\n        range,\n        length: data.x.length,\n    });\n    data.y = xAdd(data.y, noise);\n    return data;\n}\n//# sourceMappingURL=addNoise.js.map","import { getShape1D } from 'ml-peak-shape-generator';\nimport addBaseline from './util/addBaseline';\nimport addNoise from './util/addNoise';\nexport class SpectrumGenerator {\n    constructor(options = {}) {\n        const { from = 0, to = 1000, nbPoints = 10001, peakWidthFct, shape = { kind: 'gaussian', fwhm: 5 }, } = options;\n        this.from = from;\n        this.to = to;\n        this.nbPoints = nbPoints;\n        this.interval = (this.to - this.from) / (this.nbPoints - 1);\n        this.peakWidthFct = peakWidthFct;\n        this.maxPeakHeight = Number.MIN_SAFE_INTEGER;\n        this.data = {\n            x: new Float64Array(this.nbPoints),\n            y: new Float64Array(this.nbPoints),\n        };\n        let shapeGenerator = getShape1D(shape);\n        this.shape = shapeGenerator;\n        assertNumber(this.from, 'from');\n        assertNumber(this.to, 'to');\n        assertInteger(this.nbPoints, 'nbPoints');\n        if (this.to <= this.from) {\n            throw new RangeError('to option must be larger than from');\n        }\n        if (this.peakWidthFct && typeof this.peakWidthFct !== 'function') {\n            throw new TypeError('peakWidthFct option must be a function');\n        }\n        this.reset();\n    }\n    /**\n     * Add a series of peaks to the spectrum.\n     * @param peaks - Peaks to add.\n     */\n    addPeaks(peaks, options) {\n        if (!Array.isArray(peaks) &&\n            (typeof peaks !== 'object' ||\n                peaks.x === undefined ||\n                peaks.y === undefined ||\n                !Array.isArray(peaks.x) ||\n                !Array.isArray(peaks.y) ||\n                peaks.x.length !== peaks.y.length)) {\n            throw new TypeError('peaks must be an array or an object containing x[] and y[]');\n        }\n        if (Array.isArray(peaks)) {\n            for (const peak of peaks) {\n                this.addPeak(peak, options);\n            }\n        }\n        else {\n            for (let i = 0; i < peaks.x.length; i++) {\n                this.addPeak([peaks.x[i], peaks.y[i]], options);\n            }\n        }\n    }\n    /**\n     * Add a single peak to the spectrum.\n     * A peak may be either defined as [x,y,fwhm,...] or as {x, y, shape}\n     * @param peak\n     * @param options\n     */\n    addPeak(peak, options = {}) {\n        if (Array.isArray(peak) && peak.length < 2) {\n            throw new Error('peak must be an array with two (or three) values or an object with {x,y,width?}');\n        }\n        if (!Array.isArray(peak) &&\n            (peak.x === undefined || peak.y === undefined)) {\n            throw new Error('peak must be an array with two (or three) values or an object with {x,y,width?}');\n        }\n        let xPosition;\n        let intensity;\n        let peakFWHM;\n        let peakWidth;\n        let peakShapeOptions;\n        if (Array.isArray(peak)) {\n            [xPosition, intensity, peakFWHM, peakShapeOptions] = peak;\n        }\n        else {\n            xPosition = peak.x;\n            intensity = peak.y;\n            peakWidth = peak.width;\n            peakShapeOptions = peak.shape;\n        }\n        if (intensity > this.maxPeakHeight)\n            this.maxPeakHeight = intensity;\n        let { shape: shapeOptions } = options;\n        if (peakShapeOptions) {\n            shapeOptions = shapeOptions\n                ? { ...shapeOptions, ...peakShapeOptions }\n                : peakShapeOptions;\n        }\n        if (shapeOptions) {\n            this.shape = getShape1D(shapeOptions);\n        }\n        let { width, widthLeft, widthRight } = options;\n        /*\n         if we don't force the fwhm we just take the one from the shape\n         however we have many way to force it:\n         - use [x,y,fwhm]\n         - define `width` that will be converted to fwhm\n         - define `widthLeft` and `widthRight` to define asymmetric peaks\n         - have a callback `peakWidthFct`\n         This should evolve in the future because we will not always have `fwhm`\n         */\n        const fwhm = peakFWHM !== undefined\n            ? peakFWHM\n            : peakWidth\n                ? this.shape.widthToFWHM(peakWidth)\n                : this.peakWidthFct\n                    ? this.peakWidthFct(xPosition)\n                    : width !== undefined\n                        ? width\n                        : this.shape.fwhm;\n        if (!widthLeft)\n            widthLeft = fwhm;\n        if (!widthRight)\n            widthRight = fwhm;\n        if (!widthLeft || !widthRight) {\n            throw new Error('Width left or right is undefined or zero');\n        }\n        let factor = options.factor === undefined ? this.shape.getFactor() : options.factor;\n        const firstValue = xPosition - (widthLeft / 2) * factor;\n        const lastValue = xPosition + (widthRight / 2) * factor;\n        const firstPoint = Math.max(0, Math.floor((firstValue - this.from) / this.interval));\n        const lastPoint = Math.min(this.nbPoints - 1, Math.ceil((lastValue - this.from) / this.interval));\n        const middlePoint = Math.round((xPosition - this.from) / this.interval);\n        // PEAK SHAPE MAY BE ASYMMETRC (widthLeft and widthRight) !\n        // we calculate the left part of the shape\n        this.shape.fwhm = widthLeft;\n        for (let index = firstPoint; index < Math.max(middlePoint, 0); index++) {\n            this.data.y[index] +=\n                intensity * this.shape.fct(this.data.x[index] - xPosition);\n        }\n        // we calculate the right part of the gaussian\n        this.shape.fwhm = widthRight;\n        for (let index = Math.min(middlePoint, lastPoint); index <= lastPoint; index++) {\n            this.data.y[index] +=\n                intensity * this.shape.fct(this.data.x[index] - xPosition);\n        }\n    }\n    /**\n     * Add a baseline to the spectrum.\n     * @param baselineFct - Mathematical function producing the baseline you want.\n     */\n    addBaseline(baselineFct) {\n        addBaseline(this.data, baselineFct);\n        return this;\n    }\n    /**\n     * Add noise to the spectrum.\n     *\n     * @param percent - Noise's amplitude in percents of the spectrum max value. Default: 1.\n     */\n    addNoise(options) {\n        addNoise(this.data, options);\n        return this;\n    }\n    /**\n     * Get the generated spectrum.\n     */\n    getSpectrum(options = {}) {\n        if (typeof options === 'boolean') {\n            options = { copy: options };\n        }\n        const { copy = true, threshold = 0 } = options;\n        if (threshold) {\n            let minPeakHeight = this.maxPeakHeight * threshold;\n            let x = [];\n            let y = [];\n            for (let i = 0; i < this.data.x.length; i++) {\n                if (this.data.y[i] >= minPeakHeight) {\n                    x.push(this.data.x[i]);\n                    y.push(this.data.y[i]);\n                }\n            }\n            return { x, y };\n        }\n        if (copy) {\n            return {\n                x: this.data.x.slice(),\n                y: this.data.y.slice(),\n            };\n        }\n        else {\n            return this.data;\n        }\n    }\n    /**\n     * Resets the generator with an empty spectrum.\n     */\n    reset() {\n        const spectrum = this.data;\n        for (let i = 0; i < this.nbPoints; i++) {\n            spectrum.x[i] = this.from + i * this.interval;\n        }\n        return this;\n    }\n}\nfunction assertInteger(value, name) {\n    if (!Number.isInteger(value)) {\n        throw new TypeError(`${name} option must be an integer`);\n    }\n}\nfunction assertNumber(value, name) {\n    if (!Number.isFinite(value)) {\n        throw new TypeError(`${name} option must be a number`);\n    }\n}\n/**\n * Generates a spectrum and returns it.\n * @param peaks - List of peaks to put in the spectrum.\n * @param options\n */\nexport function generateSpectrum(peaks, options = {}) {\n    const { generator: generatorOptions, noise, baseline, threshold, peakOptions, } = options;\n    const generator = new SpectrumGenerator(generatorOptions);\n    generator.addPeaks(peaks, peakOptions);\n    if (baseline)\n        generator.addBaseline(baseline);\n    if (noise) {\n        generator.addNoise(noise);\n    }\n    return generator.getSpectrum({\n        threshold,\n    });\n}\n//# sourceMappingURL=SpectrumGenerator.js.map","import { getShape2D } from 'ml-peak-shape-generator';\nimport { matrixMinMaxZ } from 'ml-spectra-processing';\nconst axis2D = ['x', 'y'];\nconst peakCoordinates = ['x', 'y', 'z'];\nconst convertWidthToFWHM = (shape, width) => {\n    const widthData = ensureXYNumber(width);\n    for (let key of axis2D) {\n        widthData[key] = shape.widthToFWHM(widthData[key]);\n    }\n    return widthData;\n};\nexport class Spectrum2DGenerator {\n    constructor(options = {}) {\n        let { from = 0, to = 100, nbPoints = 1001, peakWidthFct = () => 5, shape = {\n            kind: 'gaussian',\n        }, } = options;\n        from = ensureXYNumber(from);\n        to = ensureXYNumber(to);\n        nbPoints = ensureXYNumber(nbPoints);\n        for (const axis of axis2D) {\n            assertNumber(from[axis], `from-${axis}`);\n            assertNumber(to[axis], `to-${axis}`);\n            assertInteger(nbPoints[axis], `nbPoints-${axis}`);\n        }\n        this.from = from;\n        this.to = to;\n        this.nbPoints = nbPoints;\n        this.interval = calculeIntervals(from, to, nbPoints);\n        this.peakWidthFct = peakWidthFct;\n        this.maxPeakHeight = Number.MIN_SAFE_INTEGER;\n        let shapeGenerator = getShape2D(shape);\n        this.shape = shapeGenerator;\n        this.data = {\n            x: new Float64Array(nbPoints.x),\n            y: new Float64Array(nbPoints.y),\n            z: createMatrix(this.nbPoints),\n        };\n        for (const axis of axis2D) {\n            if (this.to[axis] <= this.from[axis]) {\n                throw new RangeError('to option must be larger than from');\n            }\n        }\n        if (typeof this.peakWidthFct !== 'function') {\n            throw new TypeError('peakWidthFct option must be a function');\n        }\n        this.reset();\n    }\n    addPeaks(peaks, options) {\n        if (!Array.isArray(peaks) &&\n            (typeof peaks !== 'object' ||\n                peaks.x === undefined ||\n                peaks.y === undefined ||\n                !Array.isArray(peaks.x) ||\n                !Array.isArray(peaks.y) ||\n                peaks.x.length !== peaks.y.length)) {\n            throw new TypeError('peaks must be an array or an object containing x[] and y[]');\n        }\n        if (Array.isArray(peaks)) {\n            for (const peak of peaks) {\n                this.addPeak(peak, options);\n            }\n        }\n        else {\n            let nbPeaks = peaks.x.length;\n            for (const c of peakCoordinates) {\n                if (peaks[c] && Array.isArray(peaks[c])) {\n                    if (nbPeaks !== peaks[c].length) {\n                        throw new Error('x, y, z should have the same length');\n                    }\n                }\n            }\n            for (let i = 0; i < peaks.x.length; i++) {\n                this.addPeak([peaks.x[i], peaks.y[i], peaks.z[i]], options);\n            }\n        }\n        return this;\n    }\n    addPeak(peak, options = {}) {\n        if (Array.isArray(peak) && peak.length < 3) {\n            throw new Error('peak must be an array with three (or four) values or an object with {x,y,z,width?}');\n        }\n        if (!Array.isArray(peak) &&\n            peakCoordinates.some((e) => peak[e] === undefined)) {\n            throw new Error('peak must be an array with three (or four) values or an object with {x,y,z,width?}');\n        }\n        let xPosition;\n        let yPosition;\n        let intensity;\n        let peakFWHM;\n        let peakWidth;\n        let peakShapeOptions;\n        if (Array.isArray(peak)) {\n            [xPosition, yPosition, intensity, peakFWHM, peakShapeOptions] = peak;\n        }\n        else {\n            xPosition = peak.x;\n            yPosition = peak.y;\n            intensity = peak.z;\n            peakFWHM = peak.fwhm;\n            peakWidth = peak.width;\n            peakShapeOptions = peak.shape;\n        }\n        const position = { x: xPosition, y: yPosition };\n        if (intensity > this.maxPeakHeight)\n            this.maxPeakHeight = intensity;\n        let { shape: shapeOptions, width } = options;\n        if (peakShapeOptions) {\n            shapeOptions = shapeOptions\n                ? { ...shapeOptions, ...peakShapeOptions }\n                : peakShapeOptions;\n        }\n        if (shapeOptions) {\n            this.shape = getShape2D(shapeOptions);\n        }\n        let { fwhm = peakFWHM !== undefined\n            ? peakFWHM\n            : peakWidth\n                ? convertWidthToFWHM(this.shape, peakWidth)\n                : width\n                    ? convertWidthToFWHM(this.shape, width)\n                    : this.peakWidthFct(xPosition, yPosition), } = options;\n        fwhm = ensureXYNumber(fwhm);\n        let factor = options.factor === undefined ? this.shape.getFactor() : options.factor;\n        factor = ensureXYNumber(factor);\n        const firstPoint = { x: 0, y: 0 };\n        const lastPoint = { x: 0, y: 0 };\n        for (const axis of axis2D) {\n            const first = position[axis] - (fwhm[axis] / 2) * factor[axis];\n            const last = position[axis] + (fwhm[axis] / 2) * factor[axis];\n            firstPoint[axis] = Math.max(0, Math.floor((first - this.from[axis]) / this.interval[axis]));\n            lastPoint[axis] = Math.min(this.nbPoints[axis], Math.ceil((last - this.from[axis]) / this.interval[axis]));\n        }\n        this.shape.fwhm = fwhm;\n        for (let xIndex = firstPoint.x; xIndex < lastPoint.x; xIndex++) {\n            for (let yIndex = firstPoint.y; yIndex < lastPoint.y; yIndex++) {\n                const value = intensity *\n                    this.shape.fct(this.data.x[xIndex] - position.x, this.data.y[yIndex] - position.y);\n                if (value > 1e-6) {\n                    this.data.z[yIndex][xIndex] += value;\n                }\n            }\n        }\n        return this;\n    }\n    getSpectrum(options = {}) {\n        if (typeof options === 'boolean') {\n            options = { copy: options };\n        }\n        const { copy = true } = options;\n        let minMaxZ = matrixMinMaxZ(this.data.z);\n        return {\n            minX: this.from.x,\n            maxX: this.to.x,\n            maxY: this.to.y,\n            minY: this.from.y,\n            minZ: minMaxZ.min,\n            maxZ: minMaxZ.max,\n            z: copy ? this.data.z.slice() : this.data.z,\n        };\n    }\n    reset() {\n        const spectrum = this.data;\n        for (const axis of axis2D) {\n            for (let i = 0; i < this.nbPoints[axis]; i++) {\n                spectrum[axis][i] = this.from[axis] + i * this.interval[axis];\n            }\n        }\n        for (let row of spectrum.z) {\n            for (let j = 0; j < row.length; j++) {\n                row[j] = 0;\n            }\n        }\n        return this;\n    }\n}\nexport function generateSpectrum2D(peaks, options = {}) {\n    const { generator: generatorOptions, peaks: addPeaksOptions } = options;\n    const generator = new Spectrum2DGenerator(generatorOptions);\n    generator.addPeaks(peaks, addPeaksOptions);\n    return generator.getSpectrum();\n}\nfunction ensureXYNumber(input) {\n    return typeof input !== 'object' ? { x: input, y: input } : { ...input };\n}\nfunction calculeIntervals(from, to, nbPoints) {\n    return {\n        x: (to.x - from.x) / (nbPoints.x - 1),\n        y: (to.y - from.y) / (nbPoints.y - 1),\n    };\n}\nfunction assertInteger(value, name) {\n    if (!Number.isInteger(value)) {\n        throw new TypeError(`${name} option must be an integer`);\n    }\n}\nfunction assertNumber(value, name) {\n    if (!Number.isFinite(value)) {\n        throw new TypeError(`${name} option must be a number`);\n    }\n}\nfunction createMatrix(nbPoints) {\n    const zMatrix = new Array(nbPoints.y);\n    for (let i = 0; i < nbPoints.y; i++) {\n        zMatrix[i] = new Float64Array(nbPoints.x);\n    }\n    return zMatrix;\n}\n//# sourceMappingURL=Spectrum2DGenerator.js.map"],"names":["GAUSSIAN_EXP_FACTOR","Math","LN2","ROOT_PI_OVER_LN2","sqrt","PI","ROOT_THREE","ROOT_2LN2","ROOT_2LN2_MINUS_ONE","erfinv","x","a","ln1MinusXSqrd","log","lnEtcBy2Plus2","firstSqrt","secondSqrt","Gaussian","constructor","options","fwhm","sd","gaussianWidthToFWHM","fwhmToWidth","gaussianFwhmToWidth","widthToFWHM","width","fct","gaussianFct","getArea","height","calculateGaussianHeight","getGaussianArea","getFactor","area","getGaussianFactor","getData","getGaussianData","calculateHeight","getParameters","exp","pow","shape","length","factor","min","ceil","center","data","Float64Array","i","Lorentzian","lorentzianFwhmToWidth","lorentzianWidthToFWHM","lorentzianFct","getLorentzianArea","getLorentzianFactor","getLorentzianData","calculateLorentzianHeight","tan","PseudoVoigt","mu","pseudoVoigtFwhmToWidth","pseudoVoigtWidthToFWHM","pseudoVoigtFct","getPseudoVoigtArea","getPseudoVoigtFactor","calculatePseudoVoigtHeight","getPseudoVoigtData","Gaussian2D","ensureFWHM2D","fwhmX","fwhmY","y","gaussian2DFct","getGaussian2DData","volume","getVolume","calculateGaussian2DHeight","getGaussian2DVolume","ensureXYNumber","xFWHM","yFWHM","axis","xCenter","yCenter","Array","j","input","undefined","sdObject","Error","getShape1D","kind","getShape2D","unHandled","addBaseline","baselineFct","xs","ys","toString","Object","prototype","isAnyArray","value","call","endsWith","xAdd","array1","array2","isConstant","constant","array3","xCheck","TypeError","xFindClosestIndex","array","target","sorted","low","high","middle","abs","index","diff","Number","POSITIVE_INFINITY","currentDiff","xGetFromToIndex","fromIndex","toIndex","from","to","xMaxValue","maxValue","matrixCheck","RangeError","firstLength","matrixMinMaxZ","matrix","nbRows","nbColumns","max","column","row","LOOP","FLOAT_MUL","sh1","sh2","sh3","multiply_uint32","n","m","nlo","nhi","XSadd","seed","Date","now","state","Uint32Array","init","random","getFloat","bind","getUint32","nextState","isInteger","periodCertification","t","spare","hasSpare","createRandomArray","mean","standardDeviation","range","distribution","generator","XSAdd","returnArray","generateGaussian","val","u","v","s","addNoise","percent","noise","SpectrumGenerator","nbPoints","peakWidthFct","interval","maxPeakHeight","MIN_SAFE_INTEGER","shapeGenerator","assertNumber","assertInteger","reset","addPeaks","peaks","isArray","peak","addPeak","xPosition","intensity","peakFWHM","peakWidth","peakShapeOptions","shapeOptions","widthLeft","widthRight","firstValue","lastValue","firstPoint","floor","lastPoint","middlePoint","round","getSpectrum","copy","threshold","minPeakHeight","push","slice","spectrum","name","isFinite","generateSpectrum","generatorOptions","baseline","peakOptions","axis2D","peakCoordinates","convertWidthToFWHM","widthData","key","Spectrum2DGenerator","calculeIntervals","z","createMatrix","nbPeaks","c","some","e","yPosition","position","first","last","xIndex","yIndex","minMaxZ","minX","maxX","maxY","minY","minZ","maxZ","generateSpectrum2D","addPeaksOptions","zMatrix"],"mappings":"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"}