From b663f2071df6937398cd3a8e21157ada43692128 Mon Sep 17 00:00:00 2001 From: sunwen Date: Wed, 31 May 2023 13:06:08 +0800 Subject: [PATCH] Fix checkTofDetections bug. --- .../dataFilter/dataFilter.cpp | 11 ++++-- .../dataFilter/dataFilter.h | 8 +++- test/DataFilter_Test.cpp | 39 ++++++++++++------- 3 files changed, 39 insertions(+), 19 deletions(-) diff --git a/src/transmissionReconstruction/dataFilter/dataFilter.cpp b/src/transmissionReconstruction/dataFilter/dataFilter.cpp index a05b982..34e5c01 100644 --- a/src/transmissionReconstruction/dataFilter/dataFilter.cpp +++ b/src/transmissionReconstruction/dataFilter/dataFilter.cpp @@ -66,21 +66,24 @@ namespace Recon { return transData; } - Aurora::Matrix checkTofDetections(Aurora::Matrix &aVTofValues, const Aurora::Matrix &aVDists, + checkTofDetectionsResult checkTofDetections(const Aurora::Matrix &aVTofValues, const Aurora::Matrix &aVDists, const Aurora::Matrix &aVSosRef, double minSpeedOfSound, double maxSpeedOfSound) { + checkTofDetectionsResult result; auto sosValues = aVDists / (aVTofValues + (aVDists / aVSosRef)); auto valid = (sosValues < maxSpeedOfSound) * (sosValues > minSpeedOfSound); + result.valid = valid; + auto minSpeedOfSoundM = minSpeedOfSound+ zeros(sosValues.getDimSize(0),sosValues.getDimSize(1),sosValues.getDimSize(2)); auto maxSpeedOfSoundM = maxSpeedOfSound+zeros(sosValues.getDimSize(0),sosValues.getDimSize(1),sosValues.getDimSize(2)); sosValues = max(minSpeedOfSoundM, sosValues); sosValues = min(maxSpeedOfSoundM, sosValues); - - aVTofValues = (aVDists / sosValues) - (aVDists / aVSosRef); - return sosValues; + Matrix tofValues = (aVDists / sosValues) - (aVDists / aVSosRef); + result.tofValues = tofValues; + return result; } Aurora::Matrix filterTransmissionData(const Aurora::Matrix &aVslBlock, diff --git a/src/transmissionReconstruction/dataFilter/dataFilter.h b/src/transmissionReconstruction/dataFilter/dataFilter.h index c4b7333..73c71d6 100644 --- a/src/transmissionReconstruction/dataFilter/dataFilter.h +++ b/src/transmissionReconstruction/dataFilter/dataFilter.h @@ -17,7 +17,13 @@ filterTransmissionAngle(double aAngleLowerLimit, double aAngleUpperLimit, const Aurora::Matrix &aMSenderNormalBlock, const Aurora::Matrix &aMReceiverNormalBlock); -Aurora::Matrix checkTofDetections(Aurora::Matrix &aVTofValues, +struct checkTofDetectionsResult +{ + Aurora::Matrix tofValues; + Aurora::Matrix valid; +}; + +checkTofDetectionsResult checkTofDetections(const Aurora::Matrix &aVTofValues, const Aurora::Matrix &aVDists, const Aurora::Matrix &aVSosRef, double minSpeedOfSound, diff --git a/test/DataFilter_Test.cpp b/test/DataFilter_Test.cpp index a257605..6459e51 100644 --- a/test/DataFilter_Test.cpp +++ b/test/DataFilter_Test.cpp @@ -7,6 +7,8 @@ #include "config/config.h" #include "reflectionReconstruction/dataFilter.h" #include "transmissionReconstruction/dataFilter/dataFilter.h" +#include "src/transmissionReconstruction/dataPreperation.h" +#include "src/common/getMeasurementMetaData.h" @@ -71,21 +73,30 @@ TEST_F(DataFilter_Test, filterTransmissionAngle) { EXPECT_DOUBLE_EQ(1.0,result.getData()[3]); } -TEST_F(DataFilter_Test, checkTofDetections) { - double *dataA = new double[3]{-3.0e-07, -2.6e-06, -2.6e-06}; - auto tofValues = Aurora::Matrix::fromRawData(dataA, 3, 1); - double *dataB = new double[3]{0.238, 0.249, 0.249}; - auto dists = Aurora::Matrix::fromRawData(dataB, 3, 1); - double *data3 = new double[3]{1476.35, 1476.28, 1476.28}; - auto sosRef = Aurora::Matrix::fromRawData(data3, 3, 1); - double minSpeedOfSound = 1400; - double maxSpeedOfSound = 1650; - auto result = Recon::checkTofDetections(tofValues, dists, sosRef, minSpeedOfSound,maxSpeedOfSound); - EXPECT_EQ(3,result.getDataSize()); - EXPECT_DOUBLE_AE(1479.1025,result.getData()[0]); - EXPECT_DOUBLE_AE(1499.3931,result.getData()[1]); - EXPECT_DOUBLE_AE(1499.3931,result.getData()[2]); +TEST_F(DataFilter_Test, checkTofDetections) { + MatlabReader m("/home/sun/testData/checkTofDetections.mat"); + auto receiverList = m.read("receiverList"); + auto senderList = m.read("senderList"); + auto tofDataTotal = m.read("tofDataTotal"); + auto waterTempList = m.read("waterTempList"); + auto tofValues = m.read("tofValues"); + auto valid = m.read("valid"); + Aurora::Matrix dists = Recon::distanceBetweenTwoPoints(senderList, receiverList); + Aurora::Matrix sosRef = Recon::temperatureToSoundSpeed(waterTempList, "marczak"); + auto result = Recon::checkTofDetections(tofDataTotal, dists, sosRef, Recon::transParams::minSpeedOfSound,Recon::transParams::maxSpeedOfSound); + + for (size_t i = 0; i < result.valid.getDataSize(); i++) + { + EXPECT_DOUBLE_AE(valid.getData()[i],result.valid.getData()[i]) << " :"<