15 std::vector<double> & y,
const double lambda,
const double p,
const unsigned int s,
16 const unsigned int loop,
const double eps
20 throw std::invalid_argument(
"BaselineAsLS(): the length of y is zero.");
24 throw std::invalid_argument(
"BaselineAsLS(): non-positive lambda value is given.");
28 throw std::invalid_argument(
"BaselineAsLS(): non-positive p value is given.");
32 throw std::invalid_argument(
"BaselineAsLS(): s must be 1, 2 or 3.");
36 throw std::invalid_argument(
"BaselineAsLS(): loop is zero.");
40 throw std::invalid_argument(
"BaselineAsLS(): non-positive eps value is given.");
44 Eigen::VectorXd yy, w, w_old, z, pv(m), npv;
45 Eigen::SparseMatrix<double> I, D, lambdaDTD;
47 yy = Eigen::VectorXd::Map(y.data(), m);
52 npv = (1 - pv.array()).matrix();
57 lambdaDTD = lambda * (D.transpose() * D);
59 for(
unsigned int i = 0; i < loop; i++) {
61 w = (yy.array() > z.array()).select(pv, npv);
63 if(((w.array() - w_old.array()).abs() < eps).all())
71 std::vector<double> result(z.size());
73 Eigen::VectorXd::Map(result.data(), result.size()) = z;
const std::vector< double > BaselineAsLS(std::vector< double > &y, const double lambda, const double p, const unsigned int s, const unsigned int loop, const double eps)
Performs baseline estimation using Asymmetric Least Squares Smoothing (AsLS).
const Derived::PlainObject Diff(const Eigen::MatrixBase< Derived > &m0, const int n=1, const Dir dir=Dir::RowWise)
Calculates the n-th discrete difference along the given axis.
const std::vector< double > Whittaker(const std::vector< double > &y, const std::vector< double > &w, const double lambda, const unsigned int s)
Performs Whittaker smoothing (std::vector<double> version, with weights).