10template <
class DataPo
int,
class _NFilter,
typename T>
17template <
class DataPo
int,
class _NFilter,
typename T>
25template <
class DataPo
int,
class _NFilter,
typename T>
29 if (Base::finalize() !=
STABLE)
30 return Base::m_eCurrentState;
32 if (Base::getNumNeighbors() < DataPoint::Dim)
36 auto centroid = Base::barycenterLocal();
40 m_solver.computeDirect(m_cov);
44 Base::m_eCurrentState = (m_solver.info() == Eigen::Success ?
STABLE :
UNDEFINED);
46 return Base::m_eCurrentState;
49template <
class DataPo
int,
class _NFilter,
typename T>
53 return m_solver.eigenvalues()(0) / m_solver.eigenvalues().mean();
56template <
class DataPo
int,
class _WFunctor,
typename T>
60 return (m_solver.eigenvalues()(1) - m_solver.eigenvalues()(0)) / m_solver.eigenvalues()(2);
63template <
class DataPo
int,
class _WFunctor,
typename T>
67 return (m_solver.eigenvalues()(2) - m_solver.eigenvalues()(1)) / m_solver.eigenvalues()(2);
70template <
class DataPo
int,
class _WFunctor,
typename T>
74 return (m_solver.eigenvalues()(0)) / m_solver.eigenvalues()(2);
77template <
class DataPo
int,
class _WFunctor,
typename T>
81 return (m_solver.eigenvalues()(2) - m_solver.eigenvalues()(0)) / m_solver.eigenvalues()(2);
84template <
class DataPo
int,
class _WFunctor,
typename T>
88 return -(m_solver.eigenvalues()(0) *
log(m_solver.eigenvalues()(0)) +
89 m_solver.eigenvalues()(1) *
log(m_solver.eigenvalues()(1)) +
90 m_solver.eigenvalues()(2) *
log(m_solver.eigenvalues()(2)));
93template <
class DataPo
int,
class _WFunctor,
typename T>
96 return m_solver.eigenvalues()(0);
99template <
class DataPo
int,
class _WFunctor,
typename T>
102 return m_solver.eigenvalues()(1);
105template <
class DataPo
int,
class _WFunctor,
typename T>
108 return m_solver.eigenvalues()(2);
111template <
class DataPo
int,
class _NFilter,
int DiffType,
typename T>
116 for (
int k = 0; k < Base::NbDerivatives; ++k)
120template <
class DataPo
int,
class _NFilter,
int DiffType,
typename T>
125 for (
int k = 0; k < Base::NbDerivatives; ++k)
129template <
class DataPo
int,
class _NFilter,
int DiffType,
typename T>
132 PONCA_MULTIARCH_STD_MATH(
sqrt);
141 for (
int k = 0; k < Base::NbDerivatives; ++k)
144 m_dCov[k] = m_dCov[k] -
cog * Base::m_dSumP.col(k).transpose() - Base::m_dSumP.col(k) *
cog.transpose() +
145 Base::m_dSumW[k] *
cogSq;
149 return Base::m_eCurrentState;
Aggregator class used to declare specialized structures using CRTP.
Procedure that compute and decompose the covariance matrix of the neighbors positions in .
typename DataPoint::Scalar Scalar
Alias to scalar type.
typename Base::VectorType VectorType
Alias to vector type.
Internal generic class computing the derivatives of covariance matrix computed by CovarianceFitBase.
typename DataPoint::Scalar Scalar
Alias to scalar type.
typename DataPoint::MatrixType MatrixType
Alias to matrix type.
typename Base::ScalarArray ScalarArray
Alias to scalar derivatives array.
typename Base::VectorType VectorType
Alias to vector type.
FIT_RESULT
Enum corresponding to the state of a fitting method (and what the finalize function returns)
@ UNDEFINED
The fitting is undefined, you can't use it for valid results.
@ STABLE
The fitting is stable and ready to use.
FIT_RESULT compute(const IteratorBegin &begin, const IteratorEnd &end)
Convenience function for STL-like iterators Add neighbors stored in a container using STL-like iterat...