11 #include <gtest/gtest.h>
13 #include <tracking/trackFindingVXD/filterTools/DecorrelationMatrix.h>
14 #include <tracking/trackFindingVXD/filterTools/DecorrelationMatrixHelper.h>
16 #include <Eigen/Dense>
27 using TestMatrix = Eigen::Matrix<double, 3, 3, Eigen::RowMajor>;
30 const std::vector<double>
v1 = {
44 const std::vector<double>
v2 = {
58 const std::vector<double>
v3 = {
81 m_testData = {{
v1,
v2,
v3}};
85 tmpMatrix << 3.132492133948475, 0.974827954209597, -0.761264020048923,
86 0.974827954209597, 1.486186070946439, -0.840189849104485,
88 -0.761264020048923, -0.840189849104485, 0.739017883637750;
92 m_covMatrix = (double)(
v3.size() - 1) / (
double)
v3.size() * tmpMatrix;
108 EXPECT_EQ(3, m_testData.size());
109 for (
const auto& vec : m_testData) { EXPECT_EQ(10, vec.size()); }
116 const auto& internalMatrix = matrix.getMatrix();
118 for (
auto i = 0; i < internalMatrix.outerSize(); ++i) {
119 for (
auto j = 0; j < internalMatrix.innerSize(); ++j) {
120 EXPECT_DOUBLE_EQ(m_identity(i, j), internalMatrix(i, j));
132 std::vector<double> testVec = { m_testData[0][0], m_testData[1][0], m_testData[2][0] };
133 auto outputVec = matrix.decorrelate(testVec);
134 EXPECT_EQ(testVec.size(), outputVec.size());
137 auto outputData = matrix.decorrelate(m_testData);
139 for (
auto i = 0; i < covMat.outerSize(); ++i) {
140 for (
auto j = 0; j < covMat.innerSize(); ++j) {
142 EXPECT_FLOAT_EQ(m_identity(i, j), covMat(i, j));
144 EXPECT_NEAR(m_identity(i, j), covMat(i, j), 1e-15);
157 EXPECT_EQ(covMat.outerSize(), 3);
158 EXPECT_EQ(covMat.innerSize(), 3);
159 for (
auto i = 0; i < covMat.outerSize(); ++i) {
160 for (
auto j = 0; j < covMat.innerSize(); ++j) {
161 EXPECT_DOUBLE_EQ(m_covMatrix(i, j), covMat(i, j));
166 auto badTestData = m_testData;
167 badTestData[0].erase(badTestData[0].begin());
169 EXPECT_EQ(3, badMat.outerSize());
170 EXPECT_EQ(3, badMat.innerSize());
171 EXPECT_TRUE(badMat == m_identity);
179 const char* filename =
"tmp_matrix_testoutput.dat";
181 ofstream ofs(filename);
183 ofs << covMatrix.
print() << std::endl;
186 ifstream ifs(filename);
188 EXPECT_TRUE(inMatrix.readFromStream(ifs));
191 const TestMatrix& inMat = inMatrix.getMatrix();
192 for (
auto i = 0; i < m_covMatrix.outerSize(); ++i) {
193 for (
auto j = 0; j < m_covMatrix.innerSize(); ++j) {
194 EXPECT_DOUBLE_EQ(m_covMatrix(i, j), inMat(i, j));
198 ASSERT_EQ(0, remove(filename));