#include #include #include "Function1D.h" #include "MatlabReader.h" #include "Matrix.h" #include "transmissionReconstruction/detection/detection.h" inline double fourDecimalRound(double src){ return round(src*10000.0)/10000.0; } #define EXPECT_DOUBLE_AE(valueA,valueB)\ EXPECT_DOUBLE_EQ(fourDecimalRound(valueA),fourDecimalRound(valueB)) class Detection_Test : public ::testing::Test { protected: static void SetUpDetectionTester() { } static void TearDownTestCase() { } void SetUp() { } void TearDown() { } }; TEST_F(Detection_Test, calculateStarEndSearchPosition) { auto distBlock = Aurora::Matrix::fromRawData(new double[3]{0.22, 0.21, 0.11}, 3, 1); auto sosOffsetBlock = Aurora::Matrix::fromRawData(new double[3]{-0.8, 0, 0.9}, 3, 1); auto result = Recon::calculateStarEndSearchPosition(distBlock, 1400.0, 1650.0, 10000000, 9999, sosOffsetBlock,97.3,250); EXPECT_EQ(3,result.endSearch.getDataSize()); EXPECT_EQ(3,result.startSearch.getDataSize()); EXPECT_DOUBLE_AE(1429,result.startSearch[0]); EXPECT_DOUBLE_AE(1370,result.startSearch[1]); EXPECT_DOUBLE_AE(764,result.startSearch[2]); EXPECT_DOUBLE_AE(1918,result.endSearch[0]); EXPECT_DOUBLE_AE(1848,result.endSearch[1]); EXPECT_DOUBLE_AE(1134,result.endSearch[2]); } TEST_F(Detection_Test, calculateAttenuation) { MatlabReader m("/home/krad/TestData/calcAtt.mat"); auto ascans = m.read("ascans"); auto ascansRef = m.read("ascansRef"); auto endPos = m.read("endPos"); auto endPosRef = m.read("endPosRef"); auto startPos = m.read("startPos"); auto startPosRef = m.read("startPosRef"); auto att = m.read("att"); auto result = Recon::calculateAttenuation(ascans, startPos, endPos, ascansRef, startPosRef, endPosRef); for (size_t i = 0; i < att.getDataSize(); i++) { EXPECT_DOUBLE_AE(att[i],result[i]); } } TEST_F(Detection_Test, applyTimeWindowing) { MatlabReader m("/home/krad/TestData/timeWindow.mat"); auto AscanBlock = m.read("AscanBlock"); auto distBlock = m.read("distBlock"); auto sosBlock = m.read("sosBlock"); auto AscanBlockProcessed = m.read("AscanBlockProcessed"); auto startSearch = m.read("startSearch"); auto result = Recon::applyTimeWindowing(AscanBlock, 10000000, distBlock, sosBlock, 1482, 0, 0, 1400, 1650, false); for (size_t i = 0; i < AscanBlockProcessed.getDataSize(); i++) { EXPECT_DOUBLE_AE(AscanBlockProcessed[i],result.AscanBlockProcessed[i])<<",index:"<