From 8ffa95198a46f80fe62be38bbf795463eaf6139a Mon Sep 17 00:00:00 2001 From: kradchen Date: Mon, 29 May 2023 13:57:45 +0800 Subject: [PATCH] Fix transmissionDetection --- .../detection/detection.cpp | 17 +++++++++++------ test/Detection_Test.cpp | 17 +++++++++-------- 2 files changed, 20 insertions(+), 14 deletions(-) diff --git a/src/transmissionReconstruction/detection/detection.cpp b/src/transmissionReconstruction/detection/detection.cpp index e460901..7e68e8f 100644 --- a/src/transmissionReconstruction/detection/detection.cpp +++ b/src/transmissionReconstruction/detection/detection.cpp @@ -10,6 +10,7 @@ #include "Function3D.h" #include "Matrix.h" +#include "common/getMeasurementMetaData.h" #include "config/config.h" #include "calculateBankDetectAndHilbertTransformation.hpp" @@ -146,6 +147,7 @@ namespace Recon { auto endPos = zeros(Ascan.getDimSize(1), 1); auto startPosRef = zeros(Ascan.getDimSize(1), 1); auto endPosRef = zeros(Ascan.getDimSize(1), 1); + #pragma omp parallel for for (size_t i = 0; i < Ascan.getDimSize(1); i++) { startPos[i] = std::floor(std::max(tof[i]*sampleRate+offsetElectronicSamples,1.0)); @@ -314,11 +316,11 @@ namespace Recon { Matrix _AscanRefBlock_trim = _AscanRefBlock.getDimSize(0)!=M?_AscanRefBlock.block(0, 0, M-1):_AscanRefBlock; std::copy(_AscanBlock_trim.getData(), _AscanBlock_trim.getData() + totalSize, aScans_r); std::copy(_AscanRefBlock_trim.getData(), _AscanRefBlock_trim.getData() + totalSize, - aScans_r); + aScansRef_r); } calculateBankDetectAndHilbertTransformation( - aScans_r, aScansRef_r, M, N, resampleFactor, nthreads, + aScans_r, aScansRef_r, N, M, resampleFactor, nthreads, resDetect, resEnvelope, resEnvelopeRef); delete [] aScans_r; delete [] aScansRef_r; @@ -363,12 +365,13 @@ namespace Recon { auto endPos = zeros(_AscanBlock.getDimSize(1), 1); auto startPosRef = zeros(_AscanBlock.getDimSize(1), 1); auto endPosRef = zeros(_AscanBlock.getDimSize(1), 1); + #pragma omp parallel for for (size_t i = 0; i < _AscanBlock.getDimSize(1); i++) { startPos[i] = std::floor(std::max(tofAbs[i]*sampleRate+offsetElectronicSamples,1.0)); - endPos[i] = std::ceil(std::min(sizeAscan[1], tofAbs[i]*sampleRate+offsetElectronicSamples+detectionWindowATT)); + endPos[i] = std::ceil(std::min(sizeAscan[0], tofAbs[i]*sampleRate+offsetElectronicSamples+detectionWindowATT)); startPosRef[i] = std::floor(std::max( tof2[i],1.0)); - endPosRef[i] = std::ceil(std::min(sizeAscan[1], tof2[i]+detectionWindowATT)); + endPosRef[i] = std::ceil(std::min(sizeAscan[0], tof2[i]+detectionWindowATT)); } DetectResult result; result.att = calculateAttenuation(resEnvelope,startPos,endPos,resEnvelopeRef,startPosRef,endPosRef); @@ -384,11 +387,13 @@ namespace Recon { const Aurora::Matrix &sosWaterBlock, const Aurora::Matrix &sosWaterRefBlock, double expectedSOSWater) { + auto _sosWaterBlock = temperatureToSoundSpeed(sosWaterBlock, "marczak"); + auto _sosWaterRefBlock = temperatureToSoundSpeed(sosWaterRefBlock, "marczak"); switch (Recon::transParams::version) { case 1: { return detectTofAndAttMex( AscanBlock, AscanRefBlock, distBlock, distRefBlock, - sosWaterBlock, sosWaterRefBlock, Recon::transParams::resampleFactor, Recon::transParams::nThreads, + _sosWaterBlock, _sosWaterRefBlock, Recon::transParams::resampleFactor, Recon::transParams::nThreads, expectedSOSWater, Recon::transParams::useTimeWindowing, Recon::transParams::aScanReconstructionFrequency, Recon::transParams::detectionWindowATT, Recon::transParams::offsetElectronic, Recon::transParams::detectionWindowSOS, Recon::transParams::minSpeedOfSound, @@ -398,7 +403,7 @@ namespace Recon { default: return detectTofAndAtt( AscanBlock, AscanRefBlock, distBlock, distRefBlock, - sosWaterBlock, sosWaterRefBlock, Recon::transParams::resampleFactor, Recon::transParams::nThreads, + _sosWaterBlock, _sosWaterRefBlock, Recon::transParams::resampleFactor, Recon::transParams::nThreads, expectedSOSWater, Recon::transParams::useTimeWindowing, Recon::transParams::aScanReconstructionFrequency, Recon::transParams::detectionWindowATT, Recon::transParams::offsetElectronic, Recon::transParams::detectionWindowSOS, Recon::transParams::minSpeedOfSound, diff --git a/test/Detection_Test.cpp b/test/Detection_Test.cpp index 6c5d0e8..8bb0953 100644 --- a/test/Detection_Test.cpp +++ b/test/Detection_Test.cpp @@ -6,6 +6,7 @@ #include "MatlabReader.h" #include "Matrix.h" #include "config/config.h" +#include "common/getMeasurementMetaData.h" #include "transmissionReconstruction/detection/detection.h" @@ -45,8 +46,8 @@ TEST_F(Detection_Test, detectTofAndAttMex) { auto AscanRefBlock = m.read("AscanRefBlock"); auto distBlock = m.read("dists"); auto distBlockRef = m.read("distRefBlock"); - auto sosWaterBlock = m.read("waterTempBlock"); - auto sosWaterRefBlock = m.read("waterTempRefBlock"); + auto sosWaterBlock = Recon::temperatureToSoundSpeed(m.read("waterTempBlock"),"marczak"); + auto sosWaterRefBlock = Recon::temperatureToSoundSpeed(m.read("waterTempRefBlock"),"marczak"); double expectedSOSWater = 1.511948131508464e+03; auto result = Recon::detectTofAndAttMex( @@ -55,13 +56,13 @@ TEST_F(Detection_Test, detectTofAndAttMex) { Recon::transParams::nThreads, expectedSOSWater, Recon::transParams::useTimeWindowing, Recon::transParams::aScanReconstructionFrequency, - Recon::transParams::offsetElectronic,Recon::transParams::detectionWindowATT, + Recon::transParams::detectionWindowATT,Recon::transParams::offsetElectronic, Recon::transParams::detectionWindowSOS, Recon::transParams::minSpeedOfSound, Recon::transParams::maxSpeedOfSound, Recon::transParams::gaussWindow); - MatlabReader m2("/home/krad/TestData/sosResult.mat"); - auto sosvalue = m2.read("sosValue"); + MatlabReader m3("/home/krad/TestData/sosResult.mat"); + auto sosvalue = m3.read("sosValue"); ASSERT_EQ(sosvalue.getDataSize(), result.tof.getDataSize()); ASSERT_EQ(sosvalue.getDataSize(), result.sosValue.getDataSize()); ASSERT_EQ(sosvalue.getDataSize(), result.att.getDataSize()); @@ -70,7 +71,7 @@ TEST_F(Detection_Test, detectTofAndAttMex) { { EXPECT_DOUBLE_AE(0,result.tof[i])<<",index:"<