spectrum-generator

spectrum-generator

NPM version build status npm download DOI

Generates a spectrum from discrete peaks. The shape of the peaks can be customized.

The shape is generated using ml-peak-shape-generator and you may use all the corresponding options of getShape.

Installation

$ npm i spectrum-generator

Usage

generateSpectrum

import { generateSpectrum } from 'spectrum-generator';

const peaks = [
[4, 10],
[20, 30],
[236, 1],
[569, 76],
];
const spectrum = generateSpectrum(peaks, {
generator: {
from: 0,
to: 1000,
nbPoints: 10001,
},
shape: {
kind: 'gaussian', // default value is gaussian
},
});

Example to generate a high resolution spectrum using lorentzian peaks shape

import { generateSpectrum } from 'spectrum-generator';

const peaks = [
[1, 10],
[2, 30],
[3, 1],
[4, 76],
];

/*
Peaks can also be introduced as:
- const peaks = [{x:1,y:10},{x:2,y:30},{x:3,y:1},{x:4,y:76}]
- const peaks = {x:[1,2,3,4], y:[10,30,1,76]}
- const peaks = [ [1,10,5], [2,30,10] ] // third argument is the peak fwhm
*/

const spectrum = generateSpectrum(peaks, {
generator: {
from: 0,
to: 10,
nbPoints: 1001,
},
shape: {
kind: 'lorentzian',
},
});

genrateSpectrum with baseline

const spectrum = generateSpectrum([{ x: 5, y: 100 }], {
generator: {
from: 0,
to: 10,
nbPoints: 51,
peakWidthFct: () => 2,
},
baseline: (x) => x / 10,
});

genereateSpectrum with noise

Generate with some noise

const spectrum = generateSpectrum([{ x: 5, y: 100 }], {
generator: {
from: 0,
to: 10,
nbPoints: 51,
peakWidthFct: () => 2,
},
noise: {
percent: 10,
distribution: 'uniform',
},
});

class SpectrumGenerator

import { SpectrumGenerator } from 'spectrum-generator';

const generator = new SpectrumGenerator();
generator.addPeak([5, 20]);
generator.addPeak({ x: 5, y: 20 }); // we may either add an array of 2 elements or an object with x,y values
generator.addPeak([30, 56]);
generator.addPeaks([
{x: 40, y: 12}, // it can also be an array of 2 elements
{x: 10, y:1},
]);
const spectrum = generator.getSpectrum();

generator.reset();

generator.addPeak({x: 10, y: 50}], { // customize peaks shape
width: 0.1, // width of peak is FWHM
factor: 10, // 10 times fwhm. Lorentzian are rather flat
shape: {
kind: 'lorentzian',
}
});

generator.addPeak({x: 10, y: 50, width: 2}) // specifiy the peak width. This is the peak width half height (FWHM)

generator.addPeak({x: 10, y: 50}], { // customize peaks shape
width: 0.1,
shape: {
kind: 'gaussian',
}
});
const otherSpectrum = generator.getSpectrum();

API Documentation

License

MIT