4.2.3 • Published 2 months ago

ml-spectra-fitting v4.2.3

Weekly downloads
263
License
MIT
Repository
github
Last release
2 months ago

ml-spectra-fitting

NPM version build status npm download

This is a spectra fitting package to optimize the position (x), max intensity (y), full width at half maximum (FWHM = width) and the ratio of gaussian contribution (mu) if it's required. It supports three kind of shapes:

NameEquation
Gaussian
Lorentzian
Pseudo Voigt

where

It is a wrapper of ml-levenberg-marquardt

API Documentation

Installation

$ npm install ml-spectra-fitting

Example

import { optimize } from 'ml-spectra-fitting';
import { SpectrumGenerator } from 'spectrum-generator';

const generator = new SpectrumGenerator({
  nbPoints: 101,
  from: -1,
  to: 1,
});

// by default the kind of shape is gaussian;
generator.addPeak({ x: 0.5, y: 0.2 }, { fwhm: 0.2 });
generator.addPeak(
  { x: -0.5, y: 0.2 },
  {
    shape: {
      kind: 'lorentzian',
      fwhm: 0.1,
    },
  },
);

//points to fit {x, y};
let data = generator.getSpectrum();
console.log(JSON.stringify({ x: Array.from(data.x), y: Array.from(data.y) }));
//the approximate values to be optimized, It could coming from a peak picking with ml-gsd
let peaks = [
  {
    x: -0.5,
    y: 0.22,
    shape: {
      kind: 'gaussian',
      fwhm: 0.25,
    },
  },
  {
    x: 0.52,
    y: 0.18,
    shape: {
      kind: 'gaussian',
      fwhm: 0.18,
    },
  },
];

// the function receive an array of peak with {x, y, fwhm} as a guess
// and return a list of objects
let fittedParams = optimize(data, peaks, { shape: { kind: 'pseudoVoigt' } });

console.log(fittedParams);
const result = {
  error: 0.12361588652854476,
  iterations: 100,
  peaks: [
    {
      x: -0.5000014532421942,
      y: 0.19995307937326137,
      shape: {
        kind: 'pseudoVoigt',
        fwhm: 0.10007670374735196,
        mu: 0.004731136777288483,
      },
    },
    {
      x: 0.5001051783652894,
      y: 0.19960010175400406,
      shape: {
        kind: 'pseudoVoigt',
        fwhm: 0.19935932346969124,
        mu: 1,
      },
    },
  ],
};

For data with and combination of signals with shapes between gaussian and lorentzians, we could use the kind pseudovoigt to fit the data.

import { optimize } from 'ml-spectra-fitting';
import { SpectrumGenerator } from 'spectrum-generator';

const generator = new SpectrumGenerator({
  nbPoints: 101,
  from: -1,
  to: 1,
});

// by default the kind of shape is gaussian;
generator.addPeak({ x: 0.5, y: 0.2 }, { fwhm: 0.2 });
generator.addPeak(
  { x: -0.5, y: 0.2 },
  {
    shape: {
      kind: 'lorentzian',
      fwhm: 0.1,
    },
  },
);

//points to fit {x, y};
let data = generator.getSpectrum();
console.log(JSON.stringify({ x: Array.from(data.x), y: Array.from(data.y) }));
//the approximate values to be optimized, It could coming from a peak picking with ml-gsd
let peaks = [
  {
    x: -0.5,
    y: 0.22,
    shape: {
      kind: 'gaussian',
      fwhm: 0.25,
    },
  },
  {
    x: 0.52,
    y: 0.18,
    shape: {
      kind: 'gaussian',
      fwhm: 0.18,
    },
  },
];

// the function receive an array of peak with {x, y, fwhm} as a guess
// and return a list of objects
let fittedParams = optimize(data, peaks, { shape: { kind: 'pseudoVoigt' } });

console.log(fittedParams);
const result = {
  error: 0.12361588652854476,
  iterations: 100,
  peaks: [
    {
      x: -0.5000014532421942,
      y: 0.19995307937326137,
      shape: {
        kind: 'pseudoVoigt',
        fwhm: 0.10007670374735196,
        mu: 0.004731136777288483,
      },
    },
    {
      x: 0.5001051783652894,
      y: 0.19960010175400406,
      shape: {
        kind: 'pseudoVoigt',
        fwhm: 0.19935932346969124,
        mu: 1,
      },
    },
  ],
};

License

MIT

4.2.3

2 months ago

4.2.2

2 months ago

4.2.1

1 year ago

4.2.0

2 years ago

4.1.1

2 years ago

4.1.0

2 years ago

4.0.1

2 years ago

4.0.0

2 years ago

4.0.2

2 years ago

3.1.0

2 years ago

3.0.4

2 years ago

3.0.3

2 years ago

3.0.2

2 years ago

3.0.1

2 years ago

3.0.0

2 years ago

2.0.0

3 years ago

1.0.0

3 years ago

0.13.0

3 years ago

0.12.0

3 years ago

0.11.0

3 years ago

0.10.0

3 years ago

0.9.0

3 years ago

0.8.0

3 years ago

0.7.1

3 years ago

0.7.0

3 years ago

0.6.0

3 years ago

0.5.0

3 years ago

0.3.2

3 years ago

0.3.1

3 years ago

0.3.0

3 years ago

0.2.1

4 years ago