#include "getAScanBlockPreprocessed.h" #include "Matrix.h" #include "blockingGeometryInfo.h" #include "removeDataFromArrays.h" #include "getAscanBlock.h" #include "src/config/config.h" #include "src/common/getGeometryInfo.h" #include "src/common/preprocessAscanBlock.h" #include "src/transmissionReconstruction/dataFilter/dataFilter.h" #include "src/reflectionReconstruction/dataFilter.h" using namespace Aurora; using namespace Recon; AscanBlockPreprocessed Recon::getAscanBlockPreprocessed(Parser* aParser, const Aurora::Matrix& aMp, const Aurora::Matrix& aSl, const Aurora::Matrix& aSn, const Aurora::Matrix& aRl, const Aurora::Matrix& aRn, GeometryInfo& aGeom, const MeasurementInfo& aMeasInfo, bool aApplyFilter, bool aTransReco) { AscanBlockPreprocessed result; AscanBlock ascanBlock = getAscanBlock(aParser, aMp, aSl, aSn, aRl, aRn); result.gainBlock = ascanBlock.gainBlock; result.mpBlock = ascanBlock.mpBlock; result.rlBlock = ascanBlock.rlBlock; result.rnBlock = ascanBlock.rnBlock; result.slBlock = ascanBlock.slBlock; result.snBlock = ascanBlock.snBlock; GeometryBlock geometryBlock = blockingGeometryInfos(aGeom, ascanBlock.rnBlock, ascanBlock.rlBlock, ascanBlock.snBlock, ascanBlock.slBlock, ascanBlock.mpBlock); result.receiverPositionBlock = geometryBlock.receiverPositionBlock; result.senderPositionBlock = geometryBlock.senderPositionBlock; if(aApplyFilter) { Matrix usedData; if(aTransReco) { usedData = filterTransmissionData(ascanBlock.slBlock, ascanBlock.snBlock, ascanBlock.rlBlock, ascanBlock.rnBlock, aGeom.sensData, geometryBlock.senderNormalBlock, geometryBlock.receiverNormalBlock); } else { usedData = filterReflectionData(geometryBlock.receiverPositionBlock, geometryBlock.senderPositionBlock, geometryBlock.senderNormalBlock, reflectParams::constrictReflectionAngles); } ascanBlock.ascanBlock = removeDataFromArrays(ascanBlock.ascanBlock, usedData); result.mpBlock = removeDataFromArrays(ascanBlock.mpBlock, usedData); result.slBlock = removeDataFromArrays(ascanBlock.slBlock, usedData); result.snBlock = removeDataFromArrays(ascanBlock.snBlock, usedData); result.rlBlock = removeDataFromArrays(ascanBlock.rlBlock, usedData); result.rnBlock = removeDataFromArrays(ascanBlock.rnBlock, usedData); result.senderPositionBlock = removeDataFromArrays(geometryBlock.senderPositionBlock, usedData); result.receiverPositionBlock = removeDataFromArrays(geometryBlock.receiverPositionBlock, usedData); result.gainBlock = removeDataFromArrays(ascanBlock.gainBlock, usedData); } if (ascanBlock.ascanBlock.getDataSize() > 0) { result.ascanBlockPreprocessed = preprocessAscanBlock(ascanBlock.ascanBlock, aMeasInfo); } else { result.ascanBlockPreprocessed = ascanBlock.ascanBlock; } return result; }