Skip to content

Commit 3c6d46e

Browse files
nyoungbqimikejackson
authored andcommitted
[Compiling|Functional][UNIT TESTS NEEDED]
- Correct human name for combing scans parameter - put oweness on subclass to define the update origin (case by case problem) - add nullptr checks and Error messaging
1 parent f8b0b32 commit 3c6d46e

File tree

8 files changed

+60
-32
lines changed

8 files changed

+60
-32
lines changed

src/Plugins/OrientationAnalysis/src/OrientationAnalysis/Filters/Algorithms/ReadH5EspritData.cpp

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,19 @@ Result<> ReadH5EspritData::operator()()
2323
return execute();
2424
}
2525

26+
// -----------------------------------------------------------------------------
27+
Result<> ReadH5EspritData::updateOrigin(const std::string& scanName)
28+
{
29+
/*
30+
* Unfortunately, the file does not have the correct data to find an origin.
31+
* This means that the origin will remain {0,0,0}.
32+
*
33+
* Down the line, if a solution crops up, look to ReadH5Oina.cpp for an example
34+
* implementation.
35+
*/
36+
return {};
37+
}
38+
2639
// -----------------------------------------------------------------------------
2740
Result<> ReadH5EspritData::copyRawEbsdData(int index)
2841
{

src/Plugins/OrientationAnalysis/src/OrientationAnalysis/Filters/Algorithms/ReadH5EspritData.hpp

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,8 @@ class ORIENTATIONANALYSIS_EXPORT ReadH5EspritData : public IEbsdOemReader<H5Espr
3333

3434
Result<> operator()();
3535

36+
Result<> updateOrigin(const std::string& scanName) override;
37+
3638
Result<> copyRawEbsdData(int index) override;
3739
Result<> copyRawEbsdData(const std::string& scanName) override;
3840

src/Plugins/OrientationAnalysis/src/OrientationAnalysis/Filters/Algorithms/ReadH5OinaData.cpp

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,33 @@ Result<> ReadH5OinaData::operator()()
6060
return execute();
6161
}
6262

63+
// -----------------------------------------------------------------------------
64+
Result<> ReadH5OinaData::updateOrigin(const std::string& scanName)
65+
{
66+
const DataPath imagePath({scanName});
67+
68+
auto& imageGeom = m_DataStructure.getDataRefAs<ImageGeom>(imagePath);
69+
const usize totalCells = imageGeom.getNumberOfCells();
70+
71+
const auto* xPos = reinterpret_cast<float32*>(m_Reader->getPointerByName(EbsdLib::Ctf::X));
72+
if(xPos == nullptr)
73+
{
74+
return MakeErrorResult(-9970, fmt::format("{}({}): Function {}: Error. Cannot find {} in supplied scan file ({})", "IEbsdOemReader", __FILE__, __LINE__, EbsdLib::Ctf::X, m_Reader->getFileName()));
75+
}
76+
const auto* yPos = reinterpret_cast<float32*>(m_Reader->getPointerByName(EbsdLib::Ctf::Y));
77+
if(yPos == nullptr)
78+
{
79+
return MakeErrorResult(-9971, fmt::format("{}({}): Function {}: Error. Cannot find {} in supplied scan file ({})", "IEbsdOemReader", __FILE__, __LINE__, EbsdLib::Ctf::Y, m_Reader->getFileName()));
80+
}
81+
82+
float32 minX = *std::min_element(xPos, xPos + totalCells);
83+
float32 minY = *std::min_element(yPos, yPos + totalCells);
84+
85+
imageGeom.setOrigin(minX, minY, 0.0f);
86+
87+
return {};
88+
}
89+
6390
// -----------------------------------------------------------------------------
6491
Result<> ReadH5OinaData::copyRawEbsdData(int index)
6592
{

src/Plugins/OrientationAnalysis/src/OrientationAnalysis/Filters/Algorithms/ReadH5OinaData.hpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ class ORIENTATIONANALYSIS_EXPORT ReadH5OinaData : public IEbsdOemReader<H5OINARe
2525

2626
Result<> operator()();
2727

28+
Result<> updateOrigin(const std::string& scanName) override;
2829
Result<> copyRawEbsdData(int index) override;
2930
Result<> copyRawEbsdData(const std::string& scanName) override;
3031
};

src/Plugins/OrientationAnalysis/src/OrientationAnalysis/Filters/ReadH5EspritDataFilter.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -71,7 +71,7 @@ Parameters ReadH5EspritDataFilter::parameters() const
7171
/* OEMEbsdScanSelectionParameter::AllowedManufacturers{EbsdLib::OEM::Bruker, EbsdLib::OEM::DREAM3D},*/
7272
OEMEbsdScanSelectionParameter::EbsdReaderType::Esprit, OEMEbsdScanSelectionParameter::ExtensionsType{".h5", ".hdf5"}));
7373
params.insertLinkableParameter(std::make_unique<BoolParameter>(
74-
k_CombineScans_Key, "Combine Scans", "If true combines each of the multiple scans into a single image geometry along the z axis, else each will result in an individual geometry", true));
74+
k_CombineScans_Key, "Stack Scans Along Z Axis", "If true combines each of the multiple scans into a single image geometry along the z axis, else each will result in an individual geometry", true));
7575
params.insert(std::make_unique<Float32Parameter>(k_ZSpacing_Key, "Z Spacing (Microns)", "The spacing in microns between each layer.", 1.0f));
7676
params.insert(std::make_unique<VectorFloat32Parameter>(k_Origin_Key, "Origin", "The origin of the volume", std::vector<float32>{0.0F, 0.0F, 0.0F}, std::vector<std::string>{"x", "y", "z"}));
7777
params.insert(std::make_unique<Float32Parameter>(k_ZSpacing_Key, "Z Spacing (Microns)", "The spacing in microns between each layer.", 1.0f));

src/Plugins/OrientationAnalysis/src/OrientationAnalysis/Filters/ReadH5OimDataFilter.cpp

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -80,8 +80,9 @@ Parameters ReadH5OimDataFilter::parameters() const
8080
params.insert(std::make_unique<OEMEbsdScanSelectionParameter>(k_SelectedScanNames_Key, "Scan Names", "The name of the scan in the .h5 file. EDAX can store multiple scans in a single file",
8181
OEMEbsdScanSelectionParameter::ValueType{}, OEMEbsdScanSelectionParameter::EbsdReaderType::Oim,
8282
OEMEbsdScanSelectionParameter::ExtensionsType{".h5"}));
83-
params.insertLinkableParameter(std::make_unique<BoolParameter>(
84-
k_CombineScans_Key, "Combine Scans", "If true combines each of the multiple scans into a single image geometry along the z axis, else each will result in an individual geometry", true));
83+
params.insertLinkableParameter(
84+
std::make_unique<BoolParameter>(k_CombineScans_Key, "Stack Scans Along Z Axis",
85+
"If true combines each of the multiple scans into a single image geometry along the z axis, else each will result in an individual geometry", true));
8586
params.insert(std::make_unique<Float32Parameter>(k_ZSpacing_Key, "Z Spacing (Microns)", "The spacing in microns between each layer.", 1.0f));
8687
params.insert(std::make_unique<VectorFloat32Parameter>(k_Origin_Key, "Origin", "The origin of the volume", std::vector<float32>{0.0F, 0.0F, 0.0F}, std::vector<std::string>{"x", "y", "z"}));
8788
params.insert(std::make_unique<Float32Parameter>(k_ZSpacing_Key, "Z Spacing (Microns)", "The spacing in microns between each layer.", 1.0f));

src/Plugins/OrientationAnalysis/src/OrientationAnalysis/Filters/ReadH5OinaDataFilter.cpp

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -66,8 +66,9 @@ Parameters ReadH5OinaDataFilter::parameters() const
6666
params.insert(std::make_unique<OEMEbsdScanSelectionParameter>(k_SelectedScanNames_Key, "Scan Names", "The name of the scan in the .h5oina file. Oxford can store multiple scans in a single file",
6767
OEMEbsdScanSelectionParameter::ValueType{}, OEMEbsdScanSelectionParameter::EbsdReaderType::H5Oina,
6868
OEMEbsdScanSelectionParameter::ExtensionsType{".h5oina"}));
69-
params.insertLinkableParameter(std::make_unique<BoolParameter>(
70-
k_CombineScans_Key, "Combine Scans", "If true combines each of the multiple scans into a single image geometry along the z axis, else each will result in an individual geometry", true));
69+
params.insertLinkableParameter(
70+
std::make_unique<BoolParameter>(k_CombineScans_Key, "Stack Scans Along Z Axis",
71+
"If true combines each of the multiple scans into a single image geometry along the z axis, else each will result in an individual geometry", true));
7172
params.insert(std::make_unique<BoolParameter>(k_EdaxHexagonalAlignment_Key, "Convert Hexagonal X-Axis to EDAX Standard",
7273
"Whether or not to convert a Hexagonal phase to the EDAX standard for x-axis alignment", true));
7374
params.insert(std::make_unique<BoolParameter>(k_ConvertPhaseToInt32_Key, "Convert Phase Data to Int32", "Native Phases data value is uint8. Convert to Int32 for better filter compatibility", true));

src/Plugins/OrientationAnalysis/src/OrientationAnalysis/utilities/IEbsdOemReader.hpp

Lines changed: 10 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -81,13 +81,6 @@ class ORIENTATIONANALYSIS_EXPORT IEbsdOemReader
8181
auto& imageGeom = m_DataStructure.getDataRefAs<ImageGeom>(DataPath({currentScanName}));
8282
imageGeom.setUnits(IGeometry::LengthUnit::Micrometer);
8383
copyDataResults = copyRawEbsdData(currentScanName);
84-
85-
if(copyDataResults.invalid())
86-
{
87-
return copyDataResults;
88-
}
89-
90-
copyDataResults = updateOrigin(currentScanName);
9184
}
9285

9386
if(copyDataResults.invalid())
@@ -133,8 +126,7 @@ class ORIENTATIONANALYSIS_EXPORT IEbsdOemReader
133126
const DataPath cellEnsembleAM = imagePath.createChildPath(m_InputValues->CellEnsembleAttributeMatrixName);
134127
auto& crystalStructures = m_DataStructure.getDataRefAs<UInt32Array>(cellEnsembleAM.createChildPath(EbsdLib::AngFile::CrystalStructures));
135128
auto& materialNames = m_DataStructure.getDataRefAs<StringArray>(cellEnsembleAM.createChildPath(EbsdLib::AngFile::MaterialName));
136-
auto& latticeConstantsArray =
137-
m_DataStructure.getDataRefAs<Float32Array>(cellEnsembleAM.createChildPath(EbsdLib::AngFile::LatticeConstants));
129+
auto& latticeConstantsArray = m_DataStructure.getDataRefAs<Float32Array>(cellEnsembleAM.createChildPath(EbsdLib::AngFile::LatticeConstants));
138130
Float32Array::store_type* latticeConstants = latticeConstantsArray.getDataStore();
139131

140132
crystalStructures[0] = EbsdLib::CrystalStructure::UnknownCrystalStructure;
@@ -160,28 +152,19 @@ class ORIENTATIONANALYSIS_EXPORT IEbsdOemReader
160152
latticeConstants->setComponent(phaseId, 5, lc[5]);
161153
}
162154

163-
return {};
155+
if(m_InputValues->CombineScans)
156+
{
157+
// No need to update origin
158+
return {};
159+
}
160+
161+
return updateOrigin(scanName);
164162
}
165163

164+
virtual Result<> updateOrigin(const std::string& scanName) = 0;
165+
166166
virtual Result<> copyRawEbsdData(int index) = 0;
167167
virtual Result<> copyRawEbsdData(const std::string& scanName) = 0;
168-
virtual Result<> updateOrigin(const std::string& scanName)
169-
{
170-
const DataPath imagePath({scanName});
171-
172-
auto& imageGeom = m_DataStructure.getDataRefAs<ImageGeom>(imagePath);
173-
const usize totalCells = imageGeom.getNumberOfCells();
174-
175-
const auto* xPos = reinterpret_cast<float32*>(m_Reader->getPointerByName(EbsdLib::Ang::XPosition));
176-
const auto* yPos = reinterpret_cast<float32*>(m_Reader->getPointerByName(EbsdLib::Ang::YPosition));
177-
178-
float32 minX = *std::min_element(xPos, xPos + totalCells);
179-
float32 minY = *std::min_element(yPos, yPos + totalCells);
180-
181-
imageGeom.setOrigin(minX, minY, 0.0f);
182-
183-
return {};
184-
}
185168

186169
protected:
187170
std::shared_ptr<T> m_Reader;

0 commit comments

Comments
 (0)