diff --git a/CMakeLists.txt b/CMakeLists.txt index 70ee0dc..428c499 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -60,7 +60,8 @@ INCLUDE_DIRECTORIES(${GTEST_INCLUDE_DIRS}) enable_testing() file(GLOB_RECURSE test_cpp test/*.cpp) -add_executable(UR_Test ${cpp_files} ${header_files} ${Aurora_Source} ${test_cpp} ) +add_executable(UR_Test ${cpp_files} ${header_files} ${Aurora_Source} ${test_cpp} ${cu_files} ${Aurora_Source} ${Aurora_Source_Cu} ./src/Aurora.cu ${Aurora_DIR}/src/CudaMatrixPrivate.cu) + target_include_directories(UR_Test PUBLIC ./test/ ./src/) # target_compile_options(UR_Test PUBLIC ${Aurora_Complie_Options} "-march=native") target_include_directories(UR_Test PUBLIC ${DCMTK_INCLUDE_DIRS}) @@ -79,5 +80,12 @@ target_link_libraries(UR_Test PUBLIC URDepends::eikonal) target_link_libraries(UR_Test PUBLIC URDepends::TVALGPU) target_link_libraries(UR_Test PUBLIC URDepends::SaftTofi) # target_link_libraries(UR_Test PUBLIC URDepends::SaftATT) +target_include_directories(UR_Test PRIVATE ./src /usr/local/cuda/include) +set_target_properties(UR_Test PROPERTIES CUDA_SEPARABLE_COMPILATION ON) +target_compile_options(UR_Test PRIVATE $<$: + -arch=sm_75 --expt-extended-lambda +>) + +target_link_libraries(UR_Test PRIVATE ${CUDA_RUNTIME_LIBRARY} CUDA::cufft CUDA::cudart) gtest_discover_tests(UR_Test) \ No newline at end of file diff --git a/src/reflectionReconstruction/startReflectionReconstruction.cpp.orig b/src/reflectionReconstruction/startReflectionReconstruction.cpp.orig deleted file mode 100644 index 15b20ec..0000000 --- a/src/reflectionReconstruction/startReflectionReconstruction.cpp.orig +++ /dev/null @@ -1,137 +0,0 @@ -#include "startReflectionReconstruction.h" -#include "Function.h" -#include "Function2D.h" -#include "Function3D.h" -#include "Matrix.h" -#include "MatlabWriter.h" - -#include "common/getGeometryInfo.h" -#include "common/precalculateChannelList.h" -#include "common/dataBlockCreation/getAScanBlockPreprocessed.h" -#include "common/dataBlockCreation/removeDataFromArrays.h" -#include "log/notify.h" -#include "reflectionReconstruction/preprocessData/determineOptimalPulse.h" -#include "reflectionReconstruction/reconstructionSAFT/reconstructionSAFT.h" -#include "src/reflectionReconstruction/preprocessData/preprocessAScanBlockForReflection.h" -#include "config/config.h" -#include "log/log.h" - -#include "CudaEnvInit.h" - -#include -#include -#include -#include -#include - -using namespace Aurora; -using namespace Recon; - -namespace -{ - std::queue PRODUCER_PROCESSDATAS; - std::queue PRODUCER_BLOCKDATAS; - std::mutex PRODUCER_MUTEX; - std::condition_variable PRODUCER_CONDITION; - std::mutex CUSTOMER_MUTEX; - std::condition_variable CUSTOMER_CONDITION; -} - -void producerThread( Parser* aParser, const Aurora::Matrix& aMotorPos, - const Aurora::Matrix& aSlList, const Aurora::Matrix& aSnList, - const Aurora::Matrix& aRlList, const Aurora::Matrix& aRnList, - GeometryInfo& aGeom, MeasurementInfo& aExpInfo, PreComputes& aPreComputes) -{ - if(reflectParams::useOptPulse==1 && reflectParams::runReflectionReco) - { - aPreComputes.sincPeak_ft = determineOptimalPulse(aPreComputes.timeInterval, aExpInfo.expectedAScanLength); - } - printf(" - channel list"); - auto channelList = precalculateChannelList(aRlList, aRnList, aExpInfo, aPreComputes); - size_t numScans = aMotorPos.getDataSize() * aSlList.getDataSize() * - aSnList.getDataSize() * aRlList.getDataSize() * - aRnList.getDataSize(); - int numTakenScans = 0,numProcessedScans = 0,numPossibleScans = 0; - for(int i=0; i +#include + +#include "Matrix.h" +#include "Function3D.h" + +#include "Parser.h" +#include "common/DICOMExporter.h" +#include "config/config.h" + +class DICOM_Test : public ::testing::Test { +protected: + static void SetUpCommonTester() { + + } + + static void TearDownTestCase() { + } + + void SetUp() { + } + + void TearDown() { + } +}; + + +TEST_F(DICOM_Test, export) { + + Recon::reflectParams::imageStartpoint = Aurora::Matrix::fromRawData(new float[3]{0, 0, 0}, 3, 1); + Recon::reflectParams::imageEndpoint = Aurora::Matrix::fromRawData(new float[3]{1, 1, 1}, 3, 1); + + Parser dataParser("/home/krad/Storage/Raw/0020ceff713b_20240814T113556/"); + GTEST_LOG_(INFO)<<"IS empty data:"<<(dataParser.getPatientData().getIsEmptyData()?"T":"F")<<", AccNo:"< a66; - double *data6 = new double[6]{3, 2, 1, 9, 8, 6}; + float *data6 = new float[6]{3, 2, 1, 9, 8, 6}; auto sensData0 = Aurora::Matrix::fromRawData(data6, 3, 2, 1); a66.push_back(sensData0); auto result = Recon::filterTransmissionSensitivityMap(0.3, slBlock, snBlock, rlBlock, rnBlock, a66); EXPECT_EQ(4,result.getDataSize()); for (size_t i = 0; i < 4; i++) { - EXPECT_DOUBLE_EQ(1.0,result.getData()[i]); + EXPECT_FLOAT_EQ(1.0,result.getData()[i]); } } TEST_F(DataFilter_Test, filterTransmissionAngle) { - double *dataA = new double[12]{0.99,0.99,0.99,0.99,0.10,0.10,0.10,0.10,0,0,0,0}; + float *dataA = new float[12]{0.99,0.99,0.99,0.99,0.10,0.10,0.10,0.10,0,0,0,0}; auto senderNormalBlock = Aurora::transpose(Aurora::Matrix::fromRawData(dataA, 4, 3)); - double *dataB = new double[12]{0.99,0.99,0.99,0.98,0.10,0.10,0.10,-0.15,0,0,0,0}; + float *dataB = new float[12]{0.99,0.99,0.99,0.98,0.10,0.10,0.10,-0.15,0,0,0,0}; auto receiverNormalBlock = Aurora::transpose(Aurora::Matrix::fromRawData(dataB, 4, 3)); - double angleLowerLimit = 10; - double angleUpperLimit = 180; + float angleLowerLimit = 10; + float angleUpperLimit = 180; auto result = Recon::filterTransmissionAngle(angleLowerLimit, angleUpperLimit, senderNormalBlock, receiverNormalBlock); EXPECT_EQ(4,result.getDataSize()); - EXPECT_DOUBLE_EQ(0.0,result.getData()[0]); - EXPECT_DOUBLE_EQ(0.0,result.getData()[1]); - EXPECT_DOUBLE_EQ(0.0,result.getData()[2]); - EXPECT_DOUBLE_EQ(1.0,result.getData()[3]); + EXPECT_FLOAT_EQ(0.0,result.getData()[0]); + EXPECT_FLOAT_EQ(0.0,result.getData()[1]); + EXPECT_FLOAT_EQ(0.0,result.getData()[2]); + EXPECT_FLOAT_EQ(1.0,result.getData()[3]); } @@ -88,12 +88,12 @@ TEST_F(DataFilter_Test, checkTofDetections) { for (size_t i = 0; i < result.valid.getDataSize(); i++) { - EXPECT_DOUBLE_AE(valid.getData()[i],result.valid.getData()[i]) << " :"<::infinity(), -std::numeric_limits::infinity()}; + float *dataA = new float[3]{1, std::numeric_limits::infinity(), -std::numeric_limits::infinity()}; auto SNRList = m.read("vsnrlist"); auto SNRList2 = m.read("snrdifference"); auto validOut = m.read("validOut"); @@ -122,19 +122,19 @@ TEST_F(DataFilter_Test, findDefectTransmissionData) { auto valid = valid1*valid2; for (size_t i = 0; i < valid.getDataSize(); i++) { - EXPECT_DOUBLE_AE(validOut[i],valid[i]); + EXPECT_FLOAT_AE(validOut[i],valid[i]); } } TEST_F(DataFilter_Test, filterReflectionData) { - auto receiverPositionBlock = Aurora::transpose(Aurora::Matrix::fromRawData(new double[9]{-0.12,-0.12,-0.12,-0.01,-0.01,-0.01,0.03,0.03,0.04}, 3, 3)); - auto senderPositionBlock = Aurora::transpose(Aurora::Matrix::fromRawData(new double[9]{-0.12,-0.12,-0.12,-0.01,-0.01,-0.01,0.03,0.03,0.03}, 3, 3)); - auto senderNormalBlock = Aurora::transpose(Aurora::Matrix::fromRawData(new double[9]{0.99,0.99,0.99,0.10,0.10,0.10,0,0,0}, 3, 3)); + auto receiverPositionBlock = Aurora::transpose(Aurora::Matrix::fromRawData(new float[9]{-0.12,-0.12,-0.12,-0.01,-0.01,-0.01,0.03,0.03,0.04}, 3, 3)); + auto senderPositionBlock = Aurora::transpose(Aurora::Matrix::fromRawData(new float[9]{-0.12,-0.12,-0.12,-0.01,-0.01,-0.01,0.03,0.03,0.03}, 3, 3)); + auto senderNormalBlock = Aurora::transpose(Aurora::Matrix::fromRawData(new float[9]{0.99,0.99,0.99,0.10,0.10,0.10,0,0,0}, 3, 3)); int constrictReflectionAngles = 1; auto result = Recon::filterReflectionData(receiverPositionBlock, senderPositionBlock, senderNormalBlock, constrictReflectionAngles); EXPECT_EQ(3, result.getDataSize()); - EXPECT_DOUBLE_AE(result[0],1); - EXPECT_DOUBLE_AE(result[1],1); - EXPECT_DOUBLE_AE(result[2],0); + EXPECT_FLOAT_AE(result[0],1); + EXPECT_FLOAT_AE(result[1],1); + EXPECT_FLOAT_AE(result[2],0); } diff --git a/test/Detection_Test.cpp b/test/Detection_Test.cpp index b14718f..2218a2f 100644 --- a/test/Detection_Test.cpp +++ b/test/Detection_Test.cpp @@ -12,7 +12,7 @@ -inline double fourDecimalRound(double src){ +inline float fourDecimalRound(float src){ return round(src*10000.0)/10000.0; } @@ -48,7 +48,7 @@ TEST_F(Detection_Test, detectTofAndAttMex) { auto distBlockRef = m.read("distRefBlock"); auto sosWaterBlock = Recon::temperatureToSoundSpeed(m.read("waterTempBlock"),"marczak"); auto sosWaterRefBlock = Recon::temperatureToSoundSpeed(m.read("waterTempRefBlock"),"marczak"); - double expectedSOSWater = 1.512677498767504e+03; + float expectedSOSWater = 1.512677498767504e+03; auto result = Recon::detectTofAndAttMex( AscanBlock, AscanRefBlock, distBlock, distBlockRef, sosWaterBlock, @@ -87,7 +87,7 @@ TEST_F(Detection_Test, detectTofAndAtt) { auto distBlockRef = m.read("distRefBlock"); auto sosWaterBlock = Recon::temperatureToSoundSpeed(m.read("waterTempBlock"), "marczak"); auto sosWaterRefBlock = Recon::temperatureToSoundSpeed(m.read("waterTempRefBlock"), "marczak"); - double expectedSOSWater = 1.512677498767504e+03; + float expectedSOSWater = 1.512677498767504e+03; auto result = Recon::detectTofAndAtt( @@ -141,7 +141,7 @@ TEST_F(Detection_Test, detectAttVectorized) { MatlabReader m2("/home/krad/TestData/tofResult.mat"); auto tof = m2.read("tof"); - double expectedSOSWater = 1.511948131508464e+03; + float expectedSOSWater = 1.511948131508464e+03; auto result = Recon::detectAttVectorized( AscanBlock, AscanRefBlock, distBlockRef,sosWaterRefBlock, @@ -157,8 +157,8 @@ TEST_F(Detection_Test, detectAttVectorized) { 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 distBlock = Aurora::Matrix::fromRawData(new float[3]{0.22, 0.21, 0.11}, 3, 1); + auto sosOffsetBlock = Aurora::Matrix::fromRawData(new float[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()); @@ -218,7 +218,7 @@ TEST_F(Detection_Test, detectTofVectorized) { auto distBlockRef = m.read("distRefBlock"); auto sosWaterBlock = m.read("waterTempBlock"); auto sosWaterRefBlock = m.read("waterTempRefBlock"); - double expectedSOSWater = 1.511948131508464e+03; + float expectedSOSWater = 1.511948131508464e+03; auto result = Recon::detectTofVectorized( AscanBlock, AscanRefBlock, distBlock, distBlockRef, sosWaterBlock, diff --git a/test/GetTransmissionData_Test.cpp b/test/GetTransmissionData_Test.cpp index 4e005d1..f2c720b 100644 --- a/test/GetTransmissionData_Test.cpp +++ b/test/GetTransmissionData_Test.cpp @@ -21,7 +21,7 @@ using namespace Aurora; using namespace Recon; -inline double fourDecimalRound(double src) { +inline float fourDecimalRound(float src) { return round(src*10000.0)/10000.0; } @@ -63,7 +63,7 @@ TEST_F(GetTransmissionData_Test, getTransmissionData) { // //getMeasurementMetaData - // double maxNumTAS = Aurora::max(auroraUnion(slList, rlList)).getData()[0]; + // float maxNumTAS = Aurora::max(auroraUnion(slList, rlList)).getData()[0]; // MeasurementInfo expInfo = loadMeasurementInfos(&dataParser); // TempInfo temp = getTemperatureInfo(&dataParser, maxNumTAS); // CEInfo ce = getCEInfo(&dataParser, expInfo); @@ -84,7 +84,7 @@ TEST_F(GetTransmissionData_Test, getTransmissionData) { // motorPosAvailableRef = transformationInfo.motorPos; // if(transformationMatricesRef.isNull()) // { - // Matrix motorPos1 = Matrix::fromRawData(new double[1] {1}, 1); + // Matrix motorPos1 = Matrix::fromRawData(new float[1] {1}, 1); // transformationMatricesRef = getTransformationMatrix(&refParser, motorPos1).rotationMatrix; // } // else @@ -112,12 +112,12 @@ TEST_F(GetTransmissionData_Test, getTransmissionData) { // if(expInfo.sampleRate != reflectParams::aScanReconstructionFrequency) // { - // reflectParams::expectedAScanDataLength = ceil(expInfo.numberSamples * ((double)reflectParams::aScanReconstructionFrequency / expInfo.sampleRate)); + // reflectParams::expectedAScanDataLength = ceil(expInfo.numberSamples * ((float)reflectParams::aScanReconstructionFrequency / expInfo.sampleRate)); // } // preComputes.matchedFilterRef = createMatchedFilter(ceRef.ce, ceRef.measuredCEUsed, reflectParams::findDefects, reconParams::removeOutliersFromCEMeasured, expInfo.Hardware); - // preComputes.timeInterval = (double)1 / reflectParams::aScanReconstructionFrequency; + // preComputes.timeInterval = (float)1 / reflectParams::aScanReconstructionFrequency; // preComputes.measuredCEUsed = ce.measuredCEUsed; // preComputes.measuredCE_TASIndices = ce.tasIndices; // preComputes.measuredCE_receiverIndices = ce.receiverIndices; @@ -141,7 +141,7 @@ TEST_F(GetTransmissionData_Test, getTransmissionData) { // Matrix iMp; // Matrix mp_inter = intersect(motorPosAvailable, transParams::motorPos, iMp); - // double* mpRef_interData = Aurora::malloc(iMp.getDataSize()); + // float* mpRef_interData = Aurora::malloc(iMp.getDataSize()); // for(int i=0; i(xD, std::default_delete()), + std::shared_ptr(xD, std::default_delete()), std::vector{6}); - xD = new double[6]{1, 1, 1, 1, 1, 1}; + xD = new float[6]{1, 1, 1, 1, 1, 1}; Aurora::Matrix rl( - std::shared_ptr(xD, std::default_delete()), + std::shared_ptr(xD, std::default_delete()), std::vector{6}); - xD = new double[6]{1, 1, 1, 2, 2, 2}; + xD = new float[6]{1, 1, 1, 2, 2, 2}; Aurora::Matrix mp( - std::shared_ptr(xD, std::default_delete()), + std::shared_ptr(xD, std::default_delete()), std::vector{6}); auto output = Recon::calculateWaterTemperature(waterTempS, waterTempR, sl, rl, mp); EXPECT_EQ(6, output.getDataSize()); - EXPECT_DOUBLE_AE(23.5, output.getData()[0]); - EXPECT_DOUBLE_AE(23.5, output.getData()[1]); + EXPECT_FLOAT_AE(23.5, output.getData()[0]); + EXPECT_FLOAT_AE(23.5, output.getData()[1]); } TEST_F(TransRecon_DataPreperation_Test, prepareAScansForTransmissionDetection){ @@ -68,6 +68,6 @@ TEST_F(TransRecon_DataPreperation_Test, prepareAScansForTransmissionDetection){ auto result = Recon::prepareAScansForTransmissionDetection(aScanBlock,gainBlock); EXPECT_EQ(300, result.getDimSize(0)); EXPECT_EQ(10, result.getDimSize(1)); - EXPECT_DOUBLE_AE(0, result.getData()[0]); + EXPECT_FLOAT_AE(0, result.getData()[0]); }