Add DacDelay and FilterByPass in MatlabCreator.

Fix createCEMeasuredMat and CEMeasuredEmitter without CEMeasured.
This commit is contained in:
sunwen
2023-07-03 17:45:55 +08:00
parent 884fffc2c2
commit cd1fc1f311

View File

@@ -174,17 +174,20 @@ void MatlabCreatorPrivate::createKITMatInThread(std::shared_ptr<Parser> aParser,
}
}
//CEMeasure
std::string cemeasureFolder = tasFloder + SLASH_CHAR + getCEMeasureFolderName();
if(!dir.exists(cemeasureFolder))
if(shotList->hasCEMeasured())
{
dir.mkdir(cemeasureFolder);
std::string cemeasureFolder = tasFloder + SLASH_CHAR + getCEMeasureFolderName();
if(!dir.exists(cemeasureFolder))
{
dir.mkdir(cemeasureFolder);
}
oneTasAscan = aParser->getOneTasAscanDataOfCEMeasured(shotList->getTasValue(t));
std::shared_ptr<short> ascanData = std::shared_ptr<short>(new short[aParser->getDataLength()*RECEIVE_ELEMENT_COUNT],std::default_delete<short[]>());
std::shared_ptr<double> amplificationData = std::shared_ptr<double>(new double[aParser->getDataLength()*RECEIVE_ELEMENT_COUNT],std::default_delete<double[]>());
getAScanOfCEAndAmplification(aParser,shotList,oneTasAscan,ascanData,amplificationData);
std::string fileName = cemeasureFolder + SLASH_CHAR + getMatFileName(0);
createEmitterMat(aParser,fileName,ascanData,amplificationData);
}
oneTasAscan = aParser->getOneTasAscanDataOfCEMeasured(shotList->getTasValue(t));
std::shared_ptr<short> ascanData = std::shared_ptr<short>(new short[aParser->getDataLength()*RECEIVE_ELEMENT_COUNT],std::default_delete<short[]>());
std::shared_ptr<double> amplificationData = std::shared_ptr<double>(new double[aParser->getDataLength()*RECEIVE_ELEMENT_COUNT],std::default_delete<double[]>());
getAScanOfCEAndAmplification(aParser,shotList,oneTasAscan,ascanData,amplificationData);
std::string fileName = cemeasureFolder + SLASH_CHAR + getMatFileName(0);
createEmitterMat(aParser,fileName,ascanData,amplificationData);
++progress;
std::cout<<"\r\033[K"<<std::flush;
std::cout<< "progress: \033[41m\033[1m " + std::to_string(progress/1.28) + "%\033[0m" <<std::flush;
@@ -326,8 +329,8 @@ void MatlabCreatorPrivate::createInfoMat(std::shared_ptr<Parser> aParser, const
return;
}
size_t structDims[1] ={1};
const char* field[5] = {"shotlist","samplenumber","SampleRate","Datatype","MeasurementID"};
matvar_t* structVar = Mat_VarCreateStruct("MetaData",1,structDims,field,5);
const char* field[7] = {"shotlist","samplenumber","SampleRate","Datatype","MeasurementID","DACDelay","FilterBypass"};
matvar_t* structVar = Mat_VarCreateStruct("MetaData",1,structDims,field,7);
//shotList
std::shared_ptr<ShotList> shotList = aParser->getShotList();
ShotListArray shotListArray = shotList->getShotListArray();
@@ -355,6 +358,16 @@ void MatlabCreatorPrivate::createInfoMat(std::shared_ptr<Parser> aParser, const
size_t measurementIDDims[2] ={1,measurementID.size()};
matvar_t* measurementIDVar = Mat_VarCreate("MeasurementID",MAT_C_CHAR,MAT_T_INT8,2,measurementIDDims,const_cast<char*>(measurementID.c_str()),0);
Mat_VarSetStructFieldByName(structVar, "MeasurementID", 0, measurementIDVar);
//DACDelay
double dacDelay = metaData.getDacDelay();
size_t dacDelayDims[2] ={1,1};
matvar_t* dacDelayVar = Mat_VarCreate("DACDelay",MAT_C_DOUBLE,MAT_T_DOUBLE,2,dacDelayDims,&dacDelay,0);
Mat_VarSetStructFieldByName(structVar, "DACDelay", 0, dacDelayVar);
//FilterBypass
double filterByPass = metaData.getFilterByPass();
size_t filterByPassDims[2] ={1,1};
matvar_t* filterByPassVar = Mat_VarCreate("FilterBypass",MAT_C_DOUBLE,MAT_T_DOUBLE,2,filterByPassDims,&filterByPass,0);
Mat_VarSetStructFieldByName(structVar, "FilterBypass", 0, filterByPassVar);
Mat_VarWrite(matfp,structVar,MAT_COMPRESSION_NONE);
Mat_VarFree(structVar);
@@ -436,8 +449,27 @@ void MatlabCreatorPrivate::createCEMeasuredMat(std::shared_ptr<Parser> aParser,
//CEMeasured
CEMeasuredData cEMeasured = aParser->getAllCEMeasuredData();
size_t cEMeasuredDims[2] ={cEMeasured.getAscanDataLength(),cEMeasured.getSize()};
matvar_t* cEMeasuredVar = Mat_VarCreate("CEMeasured",MAT_C_INT16,MAT_T_INT16,2,cEMeasuredDims,cEMeasured.get(),0);
short* ceMeasuredData;
size_t cEMeasuredDims[2];
if(cEMeasured.isNull())
{
CEPointer ce = aParser->getCEData().getCE();
ceMeasuredData = new short[ce.getLength() * RECEIVE_ELEMENT_COUNT];
for(size_t i=0; i<RECEIVE_ELEMENT_COUNT; ++i)
{
std::copy(ce.get(), ce.get()+ce.getLength(), ceMeasuredData);
ceMeasuredData += RECEIVE_ELEMENT_COUNT;
}
cEMeasuredDims[0] = ce.getLength();
cEMeasuredDims[1] = RECEIVE_ELEMENT_COUNT;
}
else
{
ceMeasuredData = cEMeasured.get();
cEMeasuredDims[0] = cEMeasured.getAscanDataLength();
cEMeasuredDims[1] = cEMeasured.getSize();
}
matvar_t* cEMeasuredVar = Mat_VarCreate("CEMeasured",MAT_C_INT16,MAT_T_INT16,2,cEMeasuredDims,ceMeasuredData,0);
//CEOffset
CEData ceData = aParser->getCEData();