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..62e6a92 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,28 @@ 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]) << " :"< #include #include #include "Function1D.h" #include "MatlabReader.h" #include "Matrix.h" +#include "config/config.h" #include "transmissionReconstruction/reconstruction/buildMatrix/DGradient.h" #include "transmissionReconstruction/reconstruction/buildMatrix/FMM.h" #include "transmissionReconstruction/reconstruction/buildMatrix/buildMatrix.h" @@ -66,12 +68,45 @@ TEST_F(Reconstruction_Test, getDimensions) { } TEST_F(Reconstruction_Test, discretizePositions) { - auto senderList = Aurora::Matrix::fromRawData(new double[6]{1, 2, 3, 1, 2, 4}, 3, 2); - auto receiverList = Aurora::Matrix::fromRawData(new double[6]{1, 8, 3, 1, 2, 1}, 3, 2); - double numPixelXY = 128; - auto result = Recon::discretizePositions(senderList,receiverList,numPixelXY); - EXPECT_DOUBLE_AE(128,result.receiverCoordList[1]); - EXPECT_DOUBLE_AE(1,result.senderCoordList[1]); + MatlabReader m("/home/sun/testData/discretizePositions.mat"); + auto senderList = m.read("senderList"); + auto receiverList = m.read("receiverList"); + auto result = Recon::discretizePositions(senderList,receiverList,Recon::transParams::numPixelXY); + auto senderListResult = m.read("senderListResult"); + auto receiverListResult = m.read("receiverListResult"); + auto dims = m.read("dims"); + auto ddims = m.read("ddims"); + auto res = m.read("res"); + + EXPECT_DOUBLE_AE(senderListResult.getDataSize(), result.senderCoordList.getDataSize()); + for(size_t i=0; i