Fix reconstructionSAFT with TransRecos struct.

This commit is contained in:
sunwen
2023-06-13 16:53:16 +08:00
parent 15c90f9cef
commit 20a4973fff
2 changed files with 37 additions and 43 deletions

View File

@@ -12,6 +12,7 @@
#include <cstddef> #include <cstddef>
#include <cstdlib> #include <cstdlib>
#include <iostream> #include <iostream>
#include <iterator>
#include <sys/types.h> #include <sys/types.h>
#include <vector> #include <vector>
@@ -40,7 +41,7 @@ namespace Recon {
const Aurora::Matrix &receiverPosGeom, const Aurora::Matrix &receiverPosGeom,
const Aurora::Matrix &senderPosGeom, const Aurora::Matrix &senderPosGeom,
int SAFT_mode, double TimeInterval, int SAFT_mode, double TimeInterval,
TransRecosParams transRecos, const TransRecos& transRecos,
const Aurora::Matrix &Env) const Aurora::Matrix &Env)
{ {
if (reflectParams::useAscanIndex == 0) { if (reflectParams::useAscanIndex == 0) {
@@ -122,50 +123,49 @@ namespace Recon {
params.push_back(saftVariant); params.push_back(saftVariant);
Matrix_t SpeedMap3D{nullptr, Matrix_t SpeedMap3D{nullptr,
(size_t)transRecos.SpeedMap3D.getDims(), (size_t)transRecos.speedMap3D.getDims(),
{(size_t)transRecos.SpeedMap3D.getDimSize(0), {(size_t)transRecos.speedMap3D.getDimSize(0),
(size_t)transRecos.SpeedMap3D.getDimSize(1), (size_t)transRecos.speedMap3D.getDimSize(1),
(size_t)transRecos.SpeedMap3D.getDimSize(2)}, (size_t)transRecos.speedMap3D.getDimSize(2)},
transRecos.SpeedMap3D.getDataSize()}; transRecos.speedMap3D.getDataSize()};
fdata = new float[transRecos.SpeedMap3D.getDataSize()]{0}; fdata = new float[transRecos.speedMap3D.getDataSize()]{0};
std::copy(transRecos.SpeedMap3D.getData(), std::copy(transRecos.speedMap3D.getData(),
transRecos.SpeedMap3D.getData() + transRecos.SpeedMap3D.getDataSize(), fdata); transRecos.speedMap3D.getData() + transRecos.speedMap3D.getDataSize(), fdata);
SpeedMap3D.Data = fdata; SpeedMap3D.Data = fdata;
params.push_back(SpeedMap3D); params.push_back(SpeedMap3D);
Matrix_t BeginTransMap{nullptr, Matrix_t BeginTransMap{nullptr,
(size_t)transRecos.BeginTransMap.getDims(), (size_t)transRecos.beginTransMap.getDims(),
{(size_t)transRecos.BeginTransMap.getDimSize(0), {(size_t)transRecos.beginTransMap.getDimSize(0),
(size_t)transRecos.BeginTransMap.getDimSize(1), (size_t)transRecos.beginTransMap.getDimSize(1),
(size_t)transRecos.BeginTransMap.getDimSize(2)}, (size_t)transRecos.beginTransMap.getDimSize(2)},
transRecos.BeginTransMap.getDataSize()}; transRecos.beginTransMap.getDataSize()};
fdata = new float[transRecos.BeginTransMap.getDataSize()]{0}; fdata = new float[transRecos.beginTransMap.getDataSize()]{0};
std::copy(transRecos.BeginTransMap.getData(), std::copy(transRecos.beginTransMap.getData(),
transRecos.BeginTransMap.getData() + transRecos.BeginTransMap.getDataSize(), fdata); transRecos.beginTransMap.getData() + transRecos.beginTransMap.getDataSize(), fdata);
BeginTransMap.Data = fdata; BeginTransMap.Data = fdata;
params.push_back(BeginTransMap); params.push_back(BeginTransMap);
Matrix_t DeltaTransMap{nullptr, Matrix_t DeltaTransMap{nullptr,
(size_t)transRecos.DeltaTransMap.getDims(), 1,
{(size_t)transRecos.DeltaTransMap.getDimSize(0), 1,
(size_t)transRecos.DeltaTransMap.getDimSize(1), 1,
(size_t)transRecos.DeltaTransMap.getDimSize(2)}, 1,
transRecos.DeltaTransMap.getDataSize()}; 1};
fdata = new float[transRecos.DeltaTransMap.getDataSize()]{0}; fdata = new float[1]{0};
std::copy(transRecos.DeltaTransMap.getData(), fdata[0] = transRecos.deltaTransMap;
transRecos.DeltaTransMap.getData() + transRecos.DeltaTransMap.getDataSize(), fdata);
DeltaTransMap.Data = fdata; DeltaTransMap.Data = fdata;
params.push_back(DeltaTransMap); params.push_back(DeltaTransMap);
Matrix_t AttenuationMap3D{nullptr, Matrix_t AttenuationMap3D{nullptr,
(size_t)transRecos.AttenuationMap3D.getDims(), (size_t)transRecos.attenuationMap3D.getDims(),
{(size_t)transRecos.AttenuationMap3D.getDimSize(0), {(size_t)transRecos.attenuationMap3D.getDimSize(0),
(size_t)transRecos.AttenuationMap3D.getDimSize(1), (size_t)transRecos.attenuationMap3D.getDimSize(1),
(size_t)transRecos.AttenuationMap3D.getDimSize(2)}, (size_t)transRecos.attenuationMap3D.getDimSize(2)},
transRecos.AttenuationMap3D.getDataSize()}; transRecos.attenuationMap3D.getDataSize()};
fdata = new float[transRecos.AttenuationMap3D.getDataSize()]{0}; fdata = new float[transRecos.attenuationMap3D.getDataSize()]{0};
std::copy(transRecos.AttenuationMap3D.getData(), std::copy(transRecos.attenuationMap3D.getData(),
transRecos.AttenuationMap3D.getData() + transRecos.AttenuationMap3D.getDataSize(), fdata); transRecos.attenuationMap3D.getData() + transRecos.attenuationMap3D.getDataSize(), fdata);
AttenuationMap3D.Data = fdata; AttenuationMap3D.Data = fdata;
params.push_back(AttenuationMap3D); params.push_back(AttenuationMap3D);
@@ -228,11 +228,11 @@ namespace Recon {
Aurora::Matrix Aurora::Matrix
recontructSAFT(const Aurora::Matrix &AScans, const Aurora::Matrix &senderPos, recontructSAFT(const Aurora::Matrix &AScans, const Aurora::Matrix &senderPos,
const Aurora::Matrix &receiverPos, const Aurora::Matrix &mpIndex, const Aurora::Matrix &receiverPos, const Aurora::Matrix &mpIndex,
int SAFT_mode, TransRecosParams &transRecos, Aurora::Matrix &Env) { int SAFT_mode, TransRecos &transRecos, Aurora::Matrix &Env) {
auto TimeInterval = 1 / (reflectParams::aScanReconstructionFrequency); auto TimeInterval = 1 / (reflectParams::aScanReconstructionFrequency);
std::vector<int> motorPosAvailable; std::vector<int> motorPosAvailable;
std::unique_copy(mpIndex.getData(), mpIndex.getData() + mpIndex.getDataSize(), std::unique_copy(mpIndex.getData(), mpIndex.getData() + mpIndex.getDataSize(),
motorPosAvailable.begin()); std::back_inserter(motorPosAvailable));
for (auto mp : motorPosAvailable) { for (auto mp : motorPosAvailable) {
std::vector<int> mpIdxs; std::vector<int> mpIdxs;
for (size_t i = 0; i < mpIndex.getDataSize(); i++) { for (size_t i = 0; i < mpIndex.getDataSize(); i++) {

View File

@@ -1,15 +1,9 @@
#ifndef __RECONSTRUCTIONSAFT_H__ #ifndef __RECONSTRUCTIONSAFT_H__
#define __RECONSTRUCTIONSAFT_H__ #define __RECONSTRUCTIONSAFT_H__
#include "Matrix.h" #include "Matrix.h"
#include "src/reflectionReconstruction/preprocessData/preprocessTransmissionReconstructionForReflection.h"
namespace Recon { namespace Recon {
struct TransRecosParams{
Aurora::Matrix SpeedMap3D;
Aurora::Matrix AttenuationMap3D;
Aurora::Matrix BeginTransMap;
Aurora::Matrix DeltaTransMap;
};
struct PolyModel{ struct PolyModel{
Aurora::Matrix ModelTerms; Aurora::Matrix ModelTerms;
Aurora::Matrix Coefficients; Aurora::Matrix Coefficients;
@@ -18,7 +12,7 @@ struct PolyModel{
Aurora::Matrix Aurora::Matrix
recontructSAFT(const Aurora::Matrix &AScans, const Aurora::Matrix &senderPos, recontructSAFT(const Aurora::Matrix &AScans, const Aurora::Matrix &senderPos,
const Aurora::Matrix &receiverPos, const Aurora::Matrix &mpIndex, const Aurora::Matrix &receiverPos, const Aurora::Matrix &mpIndex,
int SAFT_mode, TransRecosParams &transRecos, Aurora::Matrix &Env); int SAFT_mode, TransRecos &transRecos, Aurora::Matrix &Env);
Aurora::Matrix polyvaln(PolyModel polymodel, const Aurora::Matrix &indepvar); Aurora::Matrix polyvaln(PolyModel polymodel, const Aurora::Matrix &indepvar);
} }