From 32d735f966a935df09b3865eb15bde266ef86727 Mon Sep 17 00:00:00 2001 From: Michael Jackson Date: Tue, 3 Oct 2023 17:52:22 -0400 Subject: [PATCH] ENH: Remove dependency on EbsdLib for the Parameter. (#702) Checks should be done down in the specific filter using this parameter Signed-off-by: Michael Jackson --- .../ComplexCore/Filters/ImportHDF5Dataset.cpp | 4 - .../docs/Images/Hexagonal_Axis_Alignment.png | Bin 0 -> 44724 bytes .../Filters/ImportH5EspritDataFilter.cpp | 2 +- .../Filters/ImportH5OimDataFilter.cpp | 3 +- .../OEMEbsdScanSelectionParameter.cpp | 106 +----------------- .../OEMEbsdScanSelectionParameter.h | 31 ++--- .../utilities/ImportH5Data.hpp | 4 + .../wrapping/python/orientationanalysis.cpp | 18 +-- 8 files changed, 30 insertions(+), 138 deletions(-) create mode 100644 src/Plugins/OrientationAnalysis/docs/Images/Hexagonal_Axis_Alignment.png diff --git a/src/Plugins/ComplexCore/src/ComplexCore/Filters/ImportHDF5Dataset.cpp b/src/Plugins/ComplexCore/src/ComplexCore/Filters/ImportHDF5Dataset.cpp index 2364372892..cdb970acd3 100644 --- a/src/Plugins/ComplexCore/src/ComplexCore/Filters/ImportHDF5Dataset.cpp +++ b/src/Plugins/ComplexCore/src/ComplexCore/Filters/ImportHDF5Dataset.cpp @@ -126,10 +126,6 @@ IFilter::PreflightResult ImportHDF5Dataset::preflightImpl(const DataStructure& d fs::path inputFilePath(inputFile); std::string ext = inputFilePath.extension().string(); - if(ext != ".h5" && ext != ".hdf5" && ext != ".dream3d") - { - return {nonstd::make_unexpected(std::vector{Error{-20002, fmt::format("The selected file '{}' is not an HDF5 file.", inputFilePath.filename().string())}})}; - } if(!fs::exists(inputFilePath)) { diff --git a/src/Plugins/OrientationAnalysis/docs/Images/Hexagonal_Axis_Alignment.png b/src/Plugins/OrientationAnalysis/docs/Images/Hexagonal_Axis_Alignment.png new file mode 100644 index 0000000000000000000000000000000000000000..3c6a773d9196bc49fbc37d996671f78ddc985bf4 GIT binary patch literal 44724 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%0DJ4)s9+5ILoS*Ua_e|i>W)?3DQx%= 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

|4q=zq#bi9rEQ_3* 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 W`eG&c^E6+*TnaL((shz%!T$qtdbm^o literal 0 HcmV?d00001 diff --git a/src/Plugins/OrientationAnalysis/src/OrientationAnalysis/Filters/ImportH5EspritDataFilter.cpp b/src/Plugins/OrientationAnalysis/src/OrientationAnalysis/Filters/ImportH5EspritDataFilter.cpp index 3b27a3e27d..a18260ed57 100644 --- a/src/Plugins/OrientationAnalysis/src/OrientationAnalysis/Filters/ImportH5EspritDataFilter.cpp +++ b/src/Plugins/OrientationAnalysis/src/OrientationAnalysis/Filters/ImportH5EspritDataFilter.cpp @@ -67,7 +67,7 @@ Parameters ImportH5EspritDataFilter::parameters() const params.insertSeparator(Parameters::Separator{"Input Parameters"}); params.insert(std::make_unique(k_SelectedScanNames_Key, "Scan Names", "The name of the scan in the .h5 file. EDAX can store multiple scans in a single file", OEMEbsdScanSelectionParameter::ValueType{}, - OEMEbsdScanSelectionParameter::AllowedManufacturers{EbsdLib::OEM::Bruker, EbsdLib::OEM::DREAM3D}, + /* OEMEbsdScanSelectionParameter::AllowedManufacturers{EbsdLib::OEM::Bruker, EbsdLib::OEM::DREAM3D},*/ OEMEbsdScanSelectionParameter::EbsdReaderType::Esprit, OEMEbsdScanSelectionParameter::ExtensionsType{".h5"})); params.insert(std::make_unique(k_ZSpacing_Key, "Z Spacing (Microns)", "The spacing in microns between each layer.", 1.0f)); params.insert(std::make_unique(k_Origin_Key, "Origin", "The origin of the volume", std::vector{0.0F, 0.0F, 0.0F}, std::vector{"x", "y", "z"})); diff --git a/src/Plugins/OrientationAnalysis/src/OrientationAnalysis/Filters/ImportH5OimDataFilter.cpp b/src/Plugins/OrientationAnalysis/src/OrientationAnalysis/Filters/ImportH5OimDataFilter.cpp index 7fa8089441..a0a8b93b40 100644 --- a/src/Plugins/OrientationAnalysis/src/OrientationAnalysis/Filters/ImportH5OimDataFilter.cpp +++ b/src/Plugins/OrientationAnalysis/src/OrientationAnalysis/Filters/ImportH5OimDataFilter.cpp @@ -64,7 +64,8 @@ Parameters ImportH5OimDataFilter::parameters() const // Create the parameter descriptors that are needed for this filter params.insertSeparator(Parameters::Separator{"Input Parameters"}); params.insert(std::make_unique(k_SelectedScanNames_Key, "Scan Names", "The name of the scan in the .h5 file. EDAX can store multiple scans in a single file", - OEMEbsdScanSelectionParameter::ValueType{}, OEMEbsdScanSelectionParameter::AllowedManufacturers{EbsdLib::OEM::EDAX}, + OEMEbsdScanSelectionParameter::ValueType{}, + /* OEMEbsdScanSelectionParameter::AllowedManufacturers{EbsdLib::OEM::EDAX},*/ OEMEbsdScanSelectionParameter::EbsdReaderType::Oim, OEMEbsdScanSelectionParameter::ExtensionsType{".h5"})); params.insert(std::make_unique(k_ZSpacing_Key, "Z Spacing (Microns)", "The spacing in microns between each layer.", 1.0f)); params.insert(std::make_unique(k_Origin_Key, "Origin", "The origin of the volume", std::vector{0.0F, 0.0F, 0.0F}, std::vector{"x", "y", "z"})); diff --git a/src/Plugins/OrientationAnalysis/src/OrientationAnalysis/Parameters/OEMEbsdScanSelectionParameter.cpp b/src/Plugins/OrientationAnalysis/src/OrientationAnalysis/Parameters/OEMEbsdScanSelectionParameter.cpp index e1b617e82d..0d5d04b2b6 100644 --- a/src/Plugins/OrientationAnalysis/src/OrientationAnalysis/Parameters/OEMEbsdScanSelectionParameter.cpp +++ b/src/Plugins/OrientationAnalysis/src/OrientationAnalysis/Parameters/OEMEbsdScanSelectionParameter.cpp @@ -4,14 +4,6 @@ #include "complex/Common/StringLiteral.hpp" #include "complex/Utilities/StringUtilities.hpp" -#include "H5Support/H5ScopedSentinel.h" -#include "H5Support/H5Utilities.h" - -#include "EbsdLib/IO/BrukerNano/EspritConstants.h" -#include "EbsdLib/IO/BrukerNano/H5EspritReader.h" -#include "EbsdLib/IO/HKL/CtfFields.h" -#include "EbsdLib/IO/TSL/H5OIMReader.h" - #include #include @@ -28,10 +20,9 @@ constexpr StringLiteral k_ScanNames = "scan_names"; //----------------------------------------------------------------------------- OEMEbsdScanSelectionParameter::OEMEbsdScanSelectionParameter(const std::string& name, const std::string& humanName, const std::string& helpText, const ValueType& defaultValue, - const AllowedManufacturers& allowedManufacturers, const EbsdReaderType& readerType, const ExtensionsType& extensionsType) + const EbsdReaderType& readerType, const ExtensionsType& extensionsType) : ValueParameter(name, humanName, helpText) , m_DefaultValue(defaultValue) -, m_AllowedManufacturers(allowedManufacturers) , m_AvailableExtensions(extensionsType) , m_ReaderType(readerType) { @@ -112,10 +103,10 @@ Result OEMEbsdScanSelectionParameter::fromJson(const nlohmann::json& j } const auto orderCheck = json[k_StackingOrder].get(); - if(orderCheck != EbsdLib::RefFrameZDir::LowtoHigh && orderCheck != EbsdLib::RefFrameZDir::HightoLow) + if(orderCheck != RefFrameZDir::k_LowtoHigh && orderCheck != RefFrameZDir::k_HightoLow) { return MakeErrorResult(FilterParameter::Constants::k_Json_Value_Not_Enumeration, fmt::format("{}JSON value for key '{}' was not a valid ordering Value. [{}|{}] allowed.", prefix.view(), - k_StackingOrder.view(), EbsdLib::RefFrameZDir::LowtoHigh, EbsdLib::RefFrameZDir::HightoLow)); + k_StackingOrder.view(), RefFrameZDir::k_LowtoHigh, RefFrameZDir::k_HightoLow)); } ValueType value; @@ -161,7 +152,7 @@ Result OEMEbsdScanSelectionParameter::fromJson(const nlohmann::json& j //----------------------------------------------------------------------------- IParameter::UniquePointer OEMEbsdScanSelectionParameter::clone() const { - return std::make_unique(name(), humanName(), helpText(), m_DefaultValue, m_AllowedManufacturers, m_ReaderType, m_AvailableExtensions); + return std::make_unique(name(), humanName(), helpText(), m_DefaultValue, m_ReaderType, m_AvailableExtensions); } //----------------------------------------------------------------------------- @@ -193,98 +184,9 @@ Result<> OEMEbsdScanSelectionParameter::validate(const std::any& valueRef) const { return {nonstd::make_unexpected(std::vector{{-20032, fmt::format("File extension '{}' is not a valid file extension.", value.inputFilePath.extension().string())}})}; } - - if(value.stackingOrder != EbsdLib::RefFrameZDir::LowtoHigh && value.stackingOrder != EbsdLib::RefFrameZDir::HightoLow) - { - errors.push_back({-20033, fmt::format("{} is not a valid value for the stacking order. Please choose either {} or {}", value.stackingOrder, EbsdLib::RefFrameZDir::LowtoHigh, - EbsdLib::RefFrameZDir::HightoLow)}); - return {nonstd::make_unexpected(std::move(errors))}; - } - - std::list scanNames; - int32 err = 0; - if(m_ReaderType == EbsdReaderType::Oim) - { - const H5OIMReader::Pointer reader = H5OIMReader::New(); - reader->setFileName(value.inputFilePath.string()); - err = reader->readScanNames(scanNames); - } - else - { - const H5EspritReader::Pointer reader = H5EspritReader::New(); - reader->setFileName(value.inputFilePath.string()); - err = reader->readScanNames(scanNames); - } - - if(err < 0) - { - errors.push_back({-20034, fmt::format("H5 file '{}' could not be opened. Reported error code from the H5OIMReader class is '{}'", value.inputFilePath.string(), err)}); - return {nonstd::make_unexpected(std::move(errors))}; - } - - const ManufacturerType manufacturer = ReadManufacturer(value.inputFilePath.string()); - if(m_AllowedManufacturers.find(manufacturer) == m_AllowedManufacturers.end()) - { - errors.push_back({-20035, fmt::format("Original data source type {} is not a valid manufacturer", fmt::underlying(manufacturer))}); - return {nonstd::make_unexpected(std::move(errors))}; - } - - if(value.scanNames.empty()) - { - errors.push_back({-20036, fmt::format("At least one scan must be chosen. Please select a scan from the list.")}); - return {nonstd::make_unexpected(std::move(errors))}; - } - return {}; } -//----------------------------------------------------------------------------- -OEMEbsdScanSelectionParameter::ManufacturerType OEMEbsdScanSelectionParameter::ReadManufacturer(const std::string& inputFile) -{ - EbsdLib::OEM manuf = EbsdLib::OEM::Unknown; - - const hid_t fid = H5Utilities::openFile(inputFile, true); - if(fid < 0) - { - return manuf; - } - H5ScopedFileSentinel sentinel(fid, false); - std::string dsetName; - std::list names; - herr_t err = H5Utilities::getGroupObjects(fid, H5Utilities::CustomHDFDataTypes::Any, names); - auto findIter = std::find(names.begin(), names.end(), EbsdLib::H5OIM::Manufacturer); - if(findIter != names.end()) - { - dsetName = EbsdLib::H5OIM::Manufacturer; - } - - findIter = std::find(names.begin(), names.end(), EbsdLib::H5Esprit::Manufacturer); - if(findIter != names.end()) - { - dsetName = EbsdLib::H5Esprit::Manufacturer; - } - - std::string manufacturer("Unknown"); - err = H5Lite::readStringDataset(fid, dsetName, manufacturer); - if(err < 0) - { - return manuf; - } - if(manufacturer == EbsdLib::H5OIM::EDAX) - { - manuf = EbsdLib::OEM::EDAX; - } - if(manufacturer == EbsdLib::H5Esprit::BrukerNano) - { - manuf = EbsdLib::OEM::Bruker; - } - if(manufacturer == "DREAM.3D") - { - manuf = EbsdLib::OEM::DREAM3D; - } - return manuf; -} - //----------------------------------------------------------------------------- OEMEbsdScanSelectionParameter::ExtensionsType OEMEbsdScanSelectionParameter::getAvailableExtensions() const { diff --git a/src/Plugins/OrientationAnalysis/src/OrientationAnalysis/Parameters/OEMEbsdScanSelectionParameter.h b/src/Plugins/OrientationAnalysis/src/OrientationAnalysis/Parameters/OEMEbsdScanSelectionParameter.h index 767f1886a3..22dc1a9225 100644 --- a/src/Plugins/OrientationAnalysis/src/OrientationAnalysis/Parameters/OEMEbsdScanSelectionParameter.h +++ b/src/Plugins/OrientationAnalysis/src/OrientationAnalysis/Parameters/OEMEbsdScanSelectionParameter.h @@ -5,8 +5,6 @@ #include "complex/Utilities/FilePathGenerator.hpp" #include "complex/complex_export.hpp" -#include "EbsdLib/Core/EbsdLibConstants.h" - #include #include #include @@ -16,6 +14,16 @@ namespace fs = std::filesystem; namespace complex { +/** @brief RefFrameZDir defined for the Stacking order of images into a 3D Volume. This is taken from + * EbsdLib. If EbsdLib changes, this should follow suit. + */ +namespace RefFrameZDir +{ +inline constexpr uint32_t k_LowtoHigh = 0; +inline constexpr uint32_t k_HightoLow = 1; +inline constexpr uint32_t UnknownRefFrameZDirection = 2; +} // namespace RefFrameZDir + class COMPLEX_EXPORT OEMEbsdScanSelectionParameter : public ValueParameter { @@ -26,16 +34,16 @@ class COMPLEX_EXPORT OEMEbsdScanSelectionParameter : public ValueParameter struct ValueType { fs::path inputFilePath; - int32 stackingOrder = EbsdLib::RefFrameZDir::LowtoHigh; + uint32_t stackingOrder = RefFrameZDir::k_LowtoHigh; std::list scanNames = {}; }; - using ManufacturerType = EbsdLib::OEM; - using AllowedManufacturers = std::unordered_set; + using ExtensionsType = std::unordered_set; enum EbsdReaderType : uint8 { Oim = 0, - Esprit = 1 + Esprit = 1, + H5Oina = 2 }; OEMEbsdScanSelectionParameter() = delete; @@ -47,7 +55,8 @@ class COMPLEX_EXPORT OEMEbsdScanSelectionParameter : public ValueParameter * @param helpText The help text that should be displayed to a user * @param defaultValue The default value for the parameter */ - OEMEbsdScanSelectionParameter(const std::string& name, const std::string& humanName, const std::string& helpText, const ValueType& defaultValue, const AllowedManufacturers& allowedManufacturers, + OEMEbsdScanSelectionParameter(const std::string& name, const std::string& humanName, const std::string& helpText, const ValueType& defaultValue, + /* const AllowedManufacturers& allowedManufacturers, */ const EbsdReaderType& readerType, const ExtensionsType& extensionsType); ~OEMEbsdScanSelectionParameter() override = default; @@ -112,16 +121,8 @@ class COMPLEX_EXPORT OEMEbsdScanSelectionParameter : public ValueParameter */ EbsdReaderType getReaderType() const; - /** - * @brief - * @param inputFile - * @return - */ - static ManufacturerType ReadManufacturer(const std::string& inputFile); - private: ValueType m_DefaultValue = {}; - AllowedManufacturers m_AllowedManufacturers = {}; ExtensionsType m_AvailableExtensions = {}; EbsdReaderType m_ReaderType = {}; }; diff --git a/src/Plugins/OrientationAnalysis/src/OrientationAnalysis/utilities/ImportH5Data.hpp b/src/Plugins/OrientationAnalysis/src/OrientationAnalysis/utilities/ImportH5Data.hpp index 2735fcf774..2f2d86b655 100644 --- a/src/Plugins/OrientationAnalysis/src/OrientationAnalysis/utilities/ImportH5Data.hpp +++ b/src/Plugins/OrientationAnalysis/src/OrientationAnalysis/utilities/ImportH5Data.hpp @@ -20,6 +20,8 @@ struct ORIENTATIONANALYSIS_EXPORT ImportH5DataInputValues DataPath ImageGeometryPath; DataPath CellAttributeMatrixPath; DataPath CellEnsembleAttributeMatrixPath; + bool EdaxHexagonalAlignment; + bool ConvertPhaseToInt32; }; /** @@ -55,6 +57,8 @@ class ORIENTATIONANALYSIS_EXPORT ImportH5Data int index = 0; for(const auto& currentScanName : m_InputValues->SelectedScanNames.scanNames) { + m_MessageHandler({IFilter::Message::Type::Info, fmt::format("Importing Index {}", currentScanName)}); + Result<> readResults = readData(currentScanName); if(readResults.invalid()) { diff --git a/src/Plugins/OrientationAnalysis/wrapping/python/orientationanalysis.cpp b/src/Plugins/OrientationAnalysis/wrapping/python/orientationanalysis.cpp index 58d0dfb048..0fee49b690 100644 --- a/src/Plugins/OrientationAnalysis/wrapping/python/orientationanalysis.cpp +++ b/src/Plugins/OrientationAnalysis/wrapping/python/orientationanalysis.cpp @@ -43,23 +43,11 @@ PYBIND11_MODULE(orientationanalysis, mod) oemEbsdScanSelectionEbsdReaderType.value("Oim", OEMEbsdScanSelectionParameter::EbsdReaderType::Oim); oemEbsdScanSelectionEbsdReaderType.value("Esprit", OEMEbsdScanSelectionParameter::EbsdReaderType::Esprit); - py::enum_ oemEbsdScanSelectionManufacturerType(oemEbsdScanSelectionParameter, "ManufacturerType"); - oemEbsdScanSelectionManufacturerType.value("EDAX", OEMEbsdScanSelectionParameter::ManufacturerType::EDAX); - oemEbsdScanSelectionManufacturerType.value("Oxford", OEMEbsdScanSelectionParameter::ManufacturerType::Oxford); - oemEbsdScanSelectionManufacturerType.value("Bruker", OEMEbsdScanSelectionParameter::ManufacturerType::Bruker); - oemEbsdScanSelectionManufacturerType.value("HEDM", OEMEbsdScanSelectionParameter::ManufacturerType::HEDM); - oemEbsdScanSelectionManufacturerType.value("Zeiss", OEMEbsdScanSelectionParameter::ManufacturerType::Zeiss); - oemEbsdScanSelectionManufacturerType.value("Phillips", OEMEbsdScanSelectionParameter::ManufacturerType::Phillips); - oemEbsdScanSelectionManufacturerType.value("ThermoFisher", OEMEbsdScanSelectionParameter::ManufacturerType::ThermoFisher); - oemEbsdScanSelectionManufacturerType.value("DREAM3D", OEMEbsdScanSelectionParameter::ManufacturerType::DREAM3D); - oemEbsdScanSelectionManufacturerType.value("Unknown", OEMEbsdScanSelectionParameter::ManufacturerType::Unknown); - BindParameterConstructor(h5EbsdReaderParameter); - oemEbsdScanSelectionParameter.def( - py::init(), - "name"_a, "human_name"_a, "help_text"_a, "default_value"_a, "allowed_manufacturers"_a, "reader_type"_a, "extensions_type"_a); + oemEbsdScanSelectionParameter.def(py::init(), + "name"_a, "human_name"_a, "help_text"_a, "default_value"_a, "reader_type"_a, "extensions_type"_a); internals.addConversion(); internals.addConversion();