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

View File

@@ -1,15 +1,9 @@
#ifndef __RECONSTRUCTIONSAFT_H__
#define __RECONSTRUCTIONSAFT_H__
#include "Matrix.h"
#include "src/reflectionReconstruction/preprocessData/preprocessTransmissionReconstructionForReflection.h"
namespace Recon {
struct TransRecosParams{
Aurora::Matrix SpeedMap3D;
Aurora::Matrix AttenuationMap3D;
Aurora::Matrix BeginTransMap;
Aurora::Matrix DeltaTransMap;
};
struct PolyModel{
Aurora::Matrix ModelTerms;
Aurora::Matrix Coefficients;
@@ -18,7 +12,7 @@ struct PolyModel{
Aurora::Matrix
recontructSAFT(const Aurora::Matrix &AScans, const Aurora::Matrix &senderPos,
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);
}