11#include < catch2/catch.hpp>
22
3- #include " simplnx/UnitTest/UnitTestCommon.hpp"
4-
53#include " OrientationAnalysis/Filters/CAxisSegmentFeaturesFilter.hpp"
64#include " OrientationAnalysis/OrientationAnalysis_test_dirs.hpp"
5+ #include " OrientationAnalysisTestUtils.hpp"
6+
7+ #include " simplnx/Core/Application.hpp"
8+ #include " simplnx/Parameters/ArrayCreationParameter.hpp"
9+ #include " simplnx/Parameters/Dream3dImportParameter.hpp"
10+ #include " simplnx/Parameters/GeometrySelectionParameter.hpp"
11+ #include " simplnx/UnitTest/UnitTestCommon.hpp"
712
813#include < filesystem>
914
@@ -13,98 +18,120 @@ using namespace nx::core::Constants;
1318
1419namespace
1520{
16- const std::string k_ComputedFeatureIds = " NX_FeatureIds" ;
17- const std::string k_ComputedCellFeatureData = " NX_CellFeatureData" ;
18- } // namespace
21+ }
1922
20- TEST_CASE (" OrientationAnalysis::CAxisSegmentFeaturesFilter: Valid Filter Execution " , " [OrientationAnalysis][CAxisSegmentFeaturesFilter ]" )
23+ TEST_CASE (" OrientationAnalysis::CAxisSegmentFeatures:No_Mask " , " [OrientationAnalysis][CAxisSegmentFeatures ]" )
2124{
2225 UnitTest::LoadPlugins ();
23- const nx::core::UnitTest::TestFileSentinel testDataSentinel (nx::core::unit_test::k_CMakeExecutable, nx::core::unit_test::k_TestFilesDir, " caxis_data.tar.gz" , " caxis_data" );
2426
27+ const nx::core::UnitTest::TestFileSentinel testDataSentinel (nx::core::unit_test::k_CMakeExecutable, nx::core::unit_test::k_TestFilesDir, " segment_features_test_data.tar.gz" ,
28+ " segment_features_test_data" );
2529 // Read Exemplar DREAM3D File Filter
26- auto exemplarFilePath = fs::path (fmt::format (" {}/caxis_data/6_6_caxis_segment_features .dream3d" , unit_test::k_TestFilesDir));
30+ auto exemplarFilePath = fs::path (fmt::format (" {}/segment_features_test_data/segment_features_test_data .dream3d" , unit_test::k_TestFilesDir));
2731 DataStructure dataStructure = UnitTest::LoadDataStructure (exemplarFilePath);
2832
29- // CAxis Segment Features Filter
33+ // EBSD Segment Features/Semgent Features (Misorientation) Filter
3034 {
31- // Instantiate the filter, a DataStructure object and an Arguments Object
3235 CAxisSegmentFeaturesFilter filter;
3336 Arguments args;
3437
3538 // Create default Parameters for the filter.
39+ args.insertOrAssign (CAxisSegmentFeaturesFilter::k_MisorientationTolerance_Key, std::make_any<float32>(5 .0F ));
40+
41+ args.insertOrAssign (CAxisSegmentFeaturesFilter::k_UseMask_Key, std::make_any<bool >(false ));
42+ args.insertOrAssign (CAxisSegmentFeaturesFilter::k_MaskArrayPath_Key, std::make_any<DataPath>(k_MaskArrayPath));
43+
3644 args.insertOrAssign (CAxisSegmentFeaturesFilter::k_SelectedImageGeometryPath_Key, std::make_any<DataPath>(k_DataContainerPath));
37- args.insertOrAssign (CAxisSegmentFeaturesFilter::k_MisorientationTolerance_Key, std::make_any<float32>(5 .0f ));
38- args.insertOrAssign (CAxisSegmentFeaturesFilter::k_UseMask_Key, std::make_any<bool >(true ));
39- args.insertOrAssign (CAxisSegmentFeaturesFilter::k_RandomizeFeatureIds_Key, std::make_any<bool >(false ));
4045 args.insertOrAssign (CAxisSegmentFeaturesFilter::k_QuatsArrayPath_Key, std::make_any<DataPath>(k_QuatsArrayPath));
4146 args.insertOrAssign (CAxisSegmentFeaturesFilter::k_CellPhasesArrayPath_Key, std::make_any<DataPath>(k_PhasesArrayPath));
42- args.insertOrAssign (CAxisSegmentFeaturesFilter::k_MaskArrayPath_Key, std::make_any<DataPath>(k_MaskArrayPath));
4347 args.insertOrAssign (CAxisSegmentFeaturesFilter::k_CrystalStructuresArrayPath_Key, std::make_any<DataPath>(k_CrystalStructuresArrayPath));
44- args.insertOrAssign (CAxisSegmentFeaturesFilter::k_FeatureIdsArrayName_Key, std::make_any<std::string>(k_ComputedFeatureIds));
45- args.insertOrAssign (CAxisSegmentFeaturesFilter::k_CellFeatureAttributeMatrixName_Key, std::make_any<std::string>(k_ComputedCellFeatureData));
48+
49+ args.insertOrAssign (CAxisSegmentFeaturesFilter::k_FeatureIdsArrayName_Key, std::make_any<std::string>(k_FeatureIds));
50+ args.insertOrAssign (CAxisSegmentFeaturesFilter::k_CellFeatureAttributeMatrixName_Key, std::make_any<std::string>(k_Grain_Data));
4651 args.insertOrAssign (CAxisSegmentFeaturesFilter::k_ActiveArrayName_Key, std::make_any<std::string>(k_ActiveName));
52+ args.insertOrAssign (CAxisSegmentFeaturesFilter::k_RandomizeFeatureIds_Key, std::make_any<bool >(false ));
4753
4854 // Preflight the filter and check result
4955 auto preflightResult = filter.preflight (dataStructure, args);
50- SIMPLNX_RESULT_REQUIRE_VALID (preflightResult.outputActions )
56+ SIMPLNX_RESULT_REQUIRE_VALID (preflightResult.outputActions );
5157
5258 // Execute the filter and check the result
5359 auto executeResult = filter.execute (dataStructure, args);
54- SIMPLNX_RESULT_REQUIRE_VALID (executeResult.result )
60+ SIMPLNX_RESULT_REQUIRE_VALID (executeResult.result );
5561 }
62+
5663 {
57- DataPath activeArrayDataPath = k_DataContainerPath.createChildPath (k_ComputedCellFeatureData ).createChildPath (k_ActiveName);
64+ DataPath activeArrayDataPath = k_DataContainerPath.createChildPath (k_Grain_Data ).createChildPath (k_ActiveName);
5865 UInt8Array& actives = dataStructure.getDataRefAs <UInt8Array>(activeArrayDataPath);
5966 size_t numFeatures = actives.getNumberOfTuples ();
60- REQUIRE (numFeatures == 31229 );
67+ REQUIRE (numFeatures == 51 );
6168 }
62-
6369 // Loop and compare each array from the 'Exemplar Data / CellData' to the 'Data Container / CellData' group
6470 {
65- const auto & generatedFeatureIds = dataStructure.getDataRefAs <Int32Array>(k_CellAttributeMatrix.createChildPath (k_ComputedFeatureIds));
66- const auto & exemplarFeatureIds = dataStructure.getDataRefAs <Int32Array>(k_FeatureIdsArrayPath);
67- UnitTest::CompareDataArrays<int32>(generatedFeatureIds, exemplarFeatureIds);
71+ const auto & generatedDataArray = dataStructure.getDataRefAs <Int32Array>(k_FeatureIdsArrayPath);
72+ const auto & exemplarDataArray = dataStructure.getDataRefAs <Int32Array>(k_CellAttributeMatrix.createChildPath (" CAxis_FeatureIds" ));
73+
74+ UnitTest::CompareDataArrays<int32>(generatedDataArray, exemplarDataArray);
6875 }
6976
70- UnitTest::CheckArraysInheritTupleDims (dataStructure);
77+ UnitTest::CheckArraysInheritTupleDims (dataStructure, SmallIn100::k_TupleCheckIgnoredPaths );
7178}
7279
73- TEST_CASE (" OrientationAnalysis::CAxisSegmentFeaturesFilter: Invalid Filter Execution " , " [OrientationAnalysis][CAxisSegmentFeaturesFilter ]" )
80+ TEST_CASE (" OrientationAnalysis::CAxisSegmentFeatures:Mask " , " [OrientationAnalysis][CAxisSegmentFeatures ]" )
7481{
82+ const DataPath k_EbsdMaskArrayPath = k_CellAttributeMatrix.createChildPath (" Mask (Y Pos)" );
83+
7584 UnitTest::LoadPlugins ();
76- const nx::core::UnitTest::TestFileSentinel testDataSentinel (nx::core::unit_test::k_CMakeExecutable, nx::core::unit_test::k_TestFilesDir, " caxis_data.tar.gz" , " caxis_data" );
7785
86+ const nx::core::UnitTest::TestFileSentinel testDataSentinel (nx::core::unit_test::k_CMakeExecutable, nx::core::unit_test::k_TestFilesDir, " segment_features_test_data.tar.gz" ,
87+ " segment_features_test_data" );
7888 // Read Exemplar DREAM3D File Filter
79- auto exemplarFilePath = fs::path (fmt::format (" {}/caxis_data/7_0_find_caxis_data .dream3d" , unit_test::k_TestFilesDir));
89+ auto exemplarFilePath = fs::path (fmt::format (" {}/segment_features_test_data/segment_features_test_data .dream3d" , unit_test::k_TestFilesDir));
8090 DataStructure dataStructure = UnitTest::LoadDataStructure (exemplarFilePath);
8191
82- auto & crystalStructs = dataStructure.getDataRefAs <UInt32Array>(k_CrystalStructuresArrayPath);
83- crystalStructs[1 ] = 1 ;
84-
85- // Instantiate the filter, a DataStructure object and an Arguments Object
86- CAxisSegmentFeaturesFilter filter;
87- Arguments args;
88-
89- // Invalid crystal structure type : should fail in execute
90- args.insertOrAssign (CAxisSegmentFeaturesFilter::k_SelectedImageGeometryPath_Key, std::make_any<DataPath>(k_DataContainerPath));
91- args.insertOrAssign (CAxisSegmentFeaturesFilter::k_MisorientationTolerance_Key, std::make_any<float32>(5 .0f ));
92- args.insertOrAssign (CAxisSegmentFeaturesFilter::k_UseMask_Key, std::make_any<bool >(false ));
93- args.insertOrAssign (CAxisSegmentFeaturesFilter::k_RandomizeFeatureIds_Key, std::make_any<bool >(false ));
94- args.insertOrAssign (CAxisSegmentFeaturesFilter::k_QuatsArrayPath_Key, std::make_any<DataPath>(k_QuatsArrayPath));
95- args.insertOrAssign (CAxisSegmentFeaturesFilter::k_CellPhasesArrayPath_Key, std::make_any<DataPath>(k_PhasesArrayPath));
96- args.insertOrAssign (CAxisSegmentFeaturesFilter::k_CrystalStructuresArrayPath_Key, std::make_any<DataPath>(k_CrystalStructuresArrayPath));
97- args.insertOrAssign (CAxisSegmentFeaturesFilter::k_FeatureIdsArrayName_Key, std::make_any<std::string>(k_ComputedFeatureIds));
98- args.insertOrAssign (CAxisSegmentFeaturesFilter::k_CellFeatureAttributeMatrixName_Key, std::make_any<std::string>(k_ComputedCellFeatureData));
99- args.insertOrAssign (CAxisSegmentFeaturesFilter::k_ActiveArrayName_Key, std::make_any<std::string>(k_ActiveName));
100-
101- // Preflight the filter and check result
102- auto preflightResult = filter.preflight (dataStructure, args);
103- SIMPLNX_RESULT_REQUIRE_VALID (preflightResult.outputActions )
104-
105- // Execute the filter and check the result
106- auto executeResult = filter.execute (dataStructure, args);
107- SIMPLNX_RESULT_REQUIRE_INVALID (executeResult.result )
108-
109- UnitTest::CheckArraysInheritTupleDims (dataStructure);
92+ // EBSD Segment Features/Semgent Features (Misorientation) Filter
93+ {
94+ CAxisSegmentFeaturesFilter filter;
95+ Arguments args;
96+
97+ // Create default Parameters for the filter.
98+ args.insertOrAssign (CAxisSegmentFeaturesFilter::k_MisorientationTolerance_Key, std::make_any<float32>(5 .0F ));
99+
100+ args.insertOrAssign (CAxisSegmentFeaturesFilter::k_UseMask_Key, std::make_any<bool >(true ));
101+ args.insertOrAssign (CAxisSegmentFeaturesFilter::k_MaskArrayPath_Key, std::make_any<DataPath>(k_EbsdMaskArrayPath));
102+
103+ args.insertOrAssign (CAxisSegmentFeaturesFilter::k_SelectedImageGeometryPath_Key, std::make_any<DataPath>(k_DataContainerPath));
104+ args.insertOrAssign (CAxisSegmentFeaturesFilter::k_QuatsArrayPath_Key, std::make_any<DataPath>(k_QuatsArrayPath));
105+ args.insertOrAssign (CAxisSegmentFeaturesFilter::k_CellPhasesArrayPath_Key, std::make_any<DataPath>(k_PhasesArrayPath));
106+ args.insertOrAssign (CAxisSegmentFeaturesFilter::k_CrystalStructuresArrayPath_Key, std::make_any<DataPath>(k_CrystalStructuresArrayPath));
107+
108+ args.insertOrAssign (CAxisSegmentFeaturesFilter::k_FeatureIdsArrayName_Key, std::make_any<std::string>(k_FeatureIds));
109+ args.insertOrAssign (CAxisSegmentFeaturesFilter::k_CellFeatureAttributeMatrixName_Key, std::make_any<std::string>(k_Grain_Data));
110+ args.insertOrAssign (CAxisSegmentFeaturesFilter::k_ActiveArrayName_Key, std::make_any<std::string>(k_ActiveName));
111+ args.insertOrAssign (CAxisSegmentFeaturesFilter::k_RandomizeFeatureIds_Key, std::make_any<bool >(false ));
112+
113+ // Preflight the filter and check result
114+ auto preflightResult = filter.preflight (dataStructure, args);
115+ SIMPLNX_RESULT_REQUIRE_VALID (preflightResult.outputActions );
116+
117+ // Execute the filter and check the result
118+ auto executeResult = filter.execute (dataStructure, args);
119+ SIMPLNX_RESULT_REQUIRE_VALID (executeResult.result );
120+ }
121+
122+ {
123+ DataPath activeArrayDataPath = k_DataContainerPath.createChildPath (k_Grain_Data).createChildPath (k_ActiveName);
124+ UInt8Array& actives = dataStructure.getDataRefAs <UInt8Array>(activeArrayDataPath);
125+ size_t numFeatures = actives.getNumberOfTuples ();
126+ REQUIRE (numFeatures == 36 );
127+ }
128+ // Loop and compare each array from the 'Exemplar Data / CellData' to the 'Data Container / CellData' group
129+ {
130+ const auto & generatedDataArray = dataStructure.getDataRefAs <Int32Array>(k_FeatureIdsArrayPath);
131+ const auto & exemplarDataArray = dataStructure.getDataRefAs <Int32Array>(k_CellAttributeMatrix.createChildPath (" CAxis_FeatureIds_Mask" ));
132+
133+ UnitTest::CompareDataArrays<int32>(generatedDataArray, exemplarDataArray);
134+ }
135+
136+ UnitTest::CheckArraysInheritTupleDims (dataStructure, SmallIn100::k_TupleCheckIgnoredPaths);
110137}
0 commit comments