{"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}\n/**\n * Calculate the height of the gaussian function of a specific width (fwhm) at a speicifc\n * x position (the gaussian is centered on x=0)\n * @param x\n * @param fwhm\n * @returns y\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 getLorentzianArea = (options) => {\n    const { fwhm = 500, height = 1 } = options;\n    return (height * Math.PI * fwhm) / 2;\n};\nexport const lorentzianFct = (x, fwhm) => {\n    return fwhm ** 2 / (4 * x ** 2 + 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 getLorentzianFactor = (area = 0.9999) => {\n    if (area >= 1) {\n        throw new Error('area should be (0 - 1)');\n    }\n    const halfResidual = (1 - area) * 0.5;\n    const quantileFunction = (p) => Math.tan(Math.PI * (p - 0.5));\n    return ((quantileFunction(1 - halfResidual) - quantileFunction(halfResidual)) / 2);\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 = 20, 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 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","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 * 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        const shape = shapeOptions\n            ? getShape1D(shapeOptions)\n            : Object.assign(Object.create(Object.getPrototypeOf(this.shape)), this.shape);\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                ? shape.widthToFWHM(peakWidth)\n                : this.peakWidthFct\n                    ? this.peakWidthFct(xPosition)\n                    : width !== undefined\n                        ? width\n                        : 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 ? 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        shape.fwhm = widthLeft;\n        for (let index = firstPoint; index < Math.max(middlePoint, 0); index++) {\n            this.data.y[index] +=\n                intensity * shape.fct(this.data.x[index] - xPosition);\n        }\n        // we calculate the right part of the gaussian\n        shape.fwhm = widthRight;\n        for (let index = Math.min(middlePoint, lastPoint); index <= lastPoint; index++) {\n            this.data.y[index] +=\n                intensity * 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        const shape = shapeOptions\n            ? getShape2D(shapeOptions)\n            : Object.assign(Object.create(Object.getPrototypeOf(this.shape)), JSON.parse(JSON.stringify(this.shape)));\n        let { fwhm = peakFWHM !== undefined\n            ? peakFWHM\n            : peakWidth\n                ? convertWidthToFWHM(shape, peakWidth)\n                : width\n                    ? convertWidthToFWHM(shape, width)\n                    : this.peakWidthFct(xPosition, yPosition), } = options;\n        fwhm = ensureXYNumber(fwhm);\n        let factor = options.factor === undefined ? 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        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                    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","Error","halfResidual","quantileFunction","p","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","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","assign","create","getPrototypeOf","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","JSON","parse","stringify","first","last","xIndex","yIndex","minMaxZ","minX","maxX","maxY","minY","minZ","maxZ","generateSpectrum2D","addPeaksOptions","zMatrix"],"mappings":"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"}