2023-05-12 14:13:56 +08:00
|
|
|
#include <gtest/gtest.h>
|
|
|
|
|
|
|
|
|
|
#include "Matrix.h"
|
2023-05-23 09:16:33 +08:00
|
|
|
#include "common/getGeometryInfo.h"
|
2023-05-12 14:13:56 +08:00
|
|
|
#include "transmissionReconstruction/dataFilter/sensitivityCalculations.h"
|
|
|
|
|
#include "MatlabReader.h"
|
|
|
|
|
|
2024-09-19 15:37:02 +08:00
|
|
|
inline float fourDecimalRound(float src){
|
2023-05-12 14:13:56 +08:00
|
|
|
return round(src*10000.0)/10000.0;
|
|
|
|
|
}
|
|
|
|
|
|
2024-09-19 15:37:02 +08:00
|
|
|
#define EXPECT_FLOAT_AE(valueA,valueB)\
|
|
|
|
|
EXPECT_FLOAT_EQ(fourDecimalRound(valueA),fourDecimalRound(valueB))
|
2023-05-12 14:13:56 +08:00
|
|
|
|
2024-09-19 15:37:02 +08:00
|
|
|
#define ASSERT_FLOAT_AE(valueA,valueB)\
|
|
|
|
|
ASSERT_FLOAT_EQ(fourDecimalRound(valueA),fourDecimalRound(valueB))
|
2023-05-12 14:13:56 +08:00
|
|
|
|
|
|
|
|
class Sensitivity_Test : public ::testing::Test {
|
|
|
|
|
protected:
|
|
|
|
|
static void SetUpSensitivityTester() {
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
static void TearDownTestCase() {
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void SetUp() {
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void TearDown() {
|
|
|
|
|
}
|
|
|
|
|
};
|
|
|
|
|
|
2023-05-16 13:18:59 +08:00
|
|
|
#include "Function3D.h"
|
|
|
|
|
|
2023-05-12 14:13:56 +08:00
|
|
|
TEST_F(Sensitivity_Test, getSensitivity) {
|
|
|
|
|
MatlabReader m("/home/krad/TestData/sensitivity.mat");
|
|
|
|
|
|
|
|
|
|
auto sensmap = m.read("sensmap");
|
|
|
|
|
auto senderNormal = m.read("senderNormal");
|
|
|
|
|
auto dirToReceiver = m.read("dirVector");
|
2023-05-16 13:18:59 +08:00
|
|
|
{ auto xyn = Aurora::zeros(1, 3);
|
|
|
|
|
xyn.getData()[2] = 1;
|
|
|
|
|
xyn = Aurora::repmat(xyn,2304, 1);
|
|
|
|
|
}
|
2023-05-12 14:13:56 +08:00
|
|
|
|
|
|
|
|
auto output = Recon::getSensitivity(sensmap, senderNormal, dirToReceiver);
|
|
|
|
|
|
|
|
|
|
auto sens = m.read("sens");
|
|
|
|
|
EXPECT_EQ(output.getDataSize(), sens.getDataSize());
|
|
|
|
|
for (size_t i = 0; i < output.getDataSize(); i++)
|
|
|
|
|
{
|
2024-09-19 15:37:02 +08:00
|
|
|
EXPECT_FLOAT_AE(output.getData()[i],sens.getData()[i])<<", index:"<<i;
|
2023-05-12 14:13:56 +08:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
TEST_F(Sensitivity_Test, precalcSensitivityForTAS){
|
|
|
|
|
MatlabReader m("/home/krad/TestData/sensTAS.mat");
|
|
|
|
|
|
|
|
|
|
auto sensmap = m.read("sensChar");
|
|
|
|
|
auto senderNormals = m.read("senderNormals");
|
|
|
|
|
auto senderPositions = m.read("senderPositions");
|
|
|
|
|
auto receiverPositions = m.read("receiverPositions");
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
auto output = Recon::precalcSensitivityForTAS(sensmap, senderPositions,senderNormals, receiverPositions);
|
|
|
|
|
|
|
|
|
|
auto sens = m.read("TASResult");
|
|
|
|
|
EXPECT_EQ(output.getDataSize(), sens.getDataSize());
|
|
|
|
|
for (size_t i = 0; i < output.getDataSize(); i++)
|
|
|
|
|
{
|
2024-09-19 15:37:02 +08:00
|
|
|
EXPECT_FLOAT_AE(output.getData()[i],sens.getData()[i])<<", index:"<<i;
|
2023-05-12 14:13:56 +08:00
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
TEST_F(Sensitivity_Test, combineSensitivity){
|
|
|
|
|
MatlabReader m("/home/krad/TestData/combine.mat");
|
|
|
|
|
|
|
|
|
|
auto senderTASRange = m.read("senderTASRange");
|
|
|
|
|
auto senderElementRange = m.read("senderElementRange");
|
|
|
|
|
auto receiverTASRange = m.read("receiverTASRange");
|
|
|
|
|
auto receiverElementRange = m.read("receiverElementRange");
|
|
|
|
|
auto senderSens = m.read("TASResult");
|
|
|
|
|
auto receiverSens = m.read("TASResult2");
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
auto output = Recon::combineSensitivity(senderTASRange, senderElementRange, receiverTASRange, receiverElementRange, senderSens, receiverSens);
|
|
|
|
|
|
|
|
|
|
auto sens = m.read4d("combineResult");
|
|
|
|
|
EXPECT_EQ(output.size(), sens.size());
|
|
|
|
|
EXPECT_EQ(output[0].getDataSize(), sens[0].getDataSize());
|
|
|
|
|
|
2023-05-22 14:06:29 +08:00
|
|
|
#pragma omp parallel for
|
2023-05-12 14:13:56 +08:00
|
|
|
for (size_t i = 0; i < output.size(); i++)
|
|
|
|
|
{
|
|
|
|
|
for (size_t j = 0; j < output[i].getDataSize(); j++)
|
|
|
|
|
{
|
2024-09-19 15:37:02 +08:00
|
|
|
EXPECT_FLOAT_AE(output[i].getData()[j],sens[i].getData()[j])<<"Matrix index:"<<i<<", value index:"<<j;
|
2023-05-12 14:13:56 +08:00
|
|
|
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
TEST_F(Sensitivity_Test,precalcSensitivity){
|
|
|
|
|
MatlabReader m("/home/krad/TestData/precalcSensitivity.mat");
|
|
|
|
|
|
|
|
|
|
auto senderTASRange = m.read("senderTASRange");
|
|
|
|
|
auto senderElementRange = m.read("senderElementRange");
|
|
|
|
|
auto receiverTASRange = m.read("receiverTASRange");
|
|
|
|
|
auto receiverElementRange = m.read("receiverElementRange");
|
|
|
|
|
MatlabReader m3("/home/krad/TestData/precalcSensitivity2.mat");
|
2023-05-23 09:16:33 +08:00
|
|
|
Recon::GeometryInfo TASElements;
|
2023-05-12 14:13:56 +08:00
|
|
|
TASElements.senderPositions = m3.read4d("senderPositions");
|
|
|
|
|
TASElements.senderNormals = m3.read4d("senderNormals");
|
|
|
|
|
TASElements.receiverPositions = m3.read4d("receiverPositions");
|
|
|
|
|
TASElements.receiverNormals = m3.read4d("receiverNormals");
|
|
|
|
|
TASElements.sensChar = m.read("sensChar");
|
2024-09-19 15:37:02 +08:00
|
|
|
auto motorPos = Aurora::Matrix::fromRawData(new float[2]{1,2}, 2);
|
2023-05-12 14:13:56 +08:00
|
|
|
auto output = precalcSensitivity(senderTASRange, senderElementRange, receiverTASRange, receiverElementRange, motorPos, TASElements);
|
|
|
|
|
MatlabReader m2("/home/krad/TestData/precalcResult.mat");
|
|
|
|
|
auto sens = m2.read4d("result");
|
|
|
|
|
EXPECT_EQ(output.size(), sens.size());
|
|
|
|
|
EXPECT_EQ(output[0].getDataSize(), sens[0].getDataSize());
|
2023-05-22 14:06:29 +08:00
|
|
|
#pragma omp parallel for
|
2023-05-12 14:13:56 +08:00
|
|
|
for (size_t i = 0; i < output.size(); i++)
|
|
|
|
|
{
|
|
|
|
|
for (size_t j = 0; j < output[i].getDataSize(); j++)
|
|
|
|
|
{
|
2024-09-19 15:37:02 +08:00
|
|
|
EXPECT_FLOAT_AE(output[i].getData()[j],sens[i].getData()[j])<<"Matrix index:"<<i<<", value index:"<<j;
|
2023-05-12 14:13:56 +08:00
|
|
|
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|