File indexing completed on 2024-05-12 03:47:50

0001 /*
0002     File                 : nsl_baseline.h
0003     Project              : LabPlot
0004     Description          : NSL baseline detection and subtraction methods
0005     --------------------------------------------------------------------
0006     SPDX-FileCopyrightText: 2023 Stefan Gerlach <stefan.gerlach@uni.kn>
0007     SPDX-License-Identifier: GPL-2.0-or-later
0008 */
0009 
0010 #ifndef NSL_BASELINE_H
0011 #define NSL_BASELINE_H
0012 
0013 #include <cstdlib>
0014 
0015 /* remove mimimum base line from data */
0016 void nsl_baseline_remove_minimum(double* data, size_t n);
0017 /* remove maximum base line from data */
0018 void nsl_baseline_remove_maximum(double* data, size_t n);
0019 /* remove mean base line from data */
0020 void nsl_baseline_remove_mean(double* data, size_t n);
0021 /* remove median base line from data */
0022 void nsl_baseline_remove_median(double* data, size_t n);
0023 
0024 /* remove base line through end points (first and last point). xdata and ydata must be of same size n */
0025 int nsl_baseline_remove_endpoints(double* xdata, double* ydata, size_t n);
0026 
0027 /* remove linear regression. xdata and ydata must be of same size n */
0028 int nsl_baseline_remove_linreg(double* xdata, double* ydata, size_t n);
0029 
0030 /* ALS algorithm, see https://irfpy.irf.se/projects/ica/_modules/irfpy/ica/baseline.html */
0031 /*  baseline correction by asymmetrically reweighted penalized least square (arPLS) */
0032 /*  returns reached tolerance */
0033 double nsl_baseline_remove_arpls(double* data, size_t n, double p, double lambda, int niter);
0034 double nsl_baseline_remove_arpls_Eigen3(double* data, size_t n, double p, double lambda, int niter);
0035 double nsl_baseline_remove_arpls_GSL(double* data, size_t n, double p, double lambda, int niter);
0036 /* TODO: ALS - asymmetric least square, airPLS - adaptive iteratively reweighted Penalized Least Squares */
0037 
0038 #endif