@@ -603,8 +603,7 @@ Result<> WritePoleFigure::operator()()
603603 continue ;
604604 } // Skip because we have no Pole Figure data
605605
606- std::vector<ebsdlib::UInt8ArrayType::Pointer> figures;
607- std::vector<ebsdlib::DoubleArrayType::Pointer> intensityImages;
606+ // std::vector<ebsdlib::UInt8ArrayType::Pointer> figures;
608607
609608 ebsdlib::PoleFigureConfiguration_t config;
610609 config.eulers = subEulerAnglesPtr.get ();
@@ -616,108 +615,97 @@ Result<> WritePoleFigure::operator()()
616615 config.hexConvention = m_InputValues->HexConvention ;
617616
618617 m_MessageHandler ({IFilter::Message::Type::Info, fmt::format (" Generating Pole Figures for Phase {}" , phase)});
619-
620- switch (crystalStructures[phase])
618+ if (m_InputValues->SaveIntensityData )
621619 {
622- case ebsdlib::CrystalStructure::Cubic_High:
623- figures = makePoleFigures<ebsdlib::CubicOps>(config);
624- intensityImages = createIntensityPoleFigures<ebsdlib::CubicOps>(config, m_InputValues->NormalizeToMRD );
625- break ;
626- case ebsdlib::CrystalStructure::Cubic_Low:
627- figures = makePoleFigures<ebsdlib::CubicLowOps>(config);
628- intensityImages = createIntensityPoleFigures<ebsdlib::CubicLowOps>(config, m_InputValues->NormalizeToMRD );
629- break ;
630- case ebsdlib::CrystalStructure::Hexagonal_High:
631- figures = makePoleFigures<ebsdlib::HexagonalOps>(config);
632- intensityImages = createIntensityPoleFigures<ebsdlib::HexagonalOps>(config, m_InputValues->NormalizeToMRD );
633- break ;
634- case ebsdlib::CrystalStructure::Hexagonal_Low:
635- figures = makePoleFigures<ebsdlib::HexagonalLowOps>(config);
636- intensityImages = createIntensityPoleFigures<ebsdlib::HexagonalLowOps>(config, m_InputValues->NormalizeToMRD );
637- break ;
638- case ebsdlib::CrystalStructure::Trigonal_High:
639- figures = makePoleFigures<ebsdlib::TrigonalOps>(config);
640- intensityImages = createIntensityPoleFigures<ebsdlib::TrigonalOps>(config, m_InputValues->NormalizeToMRD );
641- // setWarningCondition(-1010, "Trigonal High Symmetry is not supported for Pole figures. This phase will be omitted from results");
642- break ;
643- case ebsdlib::CrystalStructure::Trigonal_Low:
644- figures = makePoleFigures<ebsdlib::TrigonalLowOps>(config);
645- intensityImages = createIntensityPoleFigures<ebsdlib::TrigonalLowOps>(config, m_InputValues->NormalizeToMRD );
646- // setWarningCondition(-1010, "Trigonal Low Symmetry is not supported for Pole figures. This phase will be omitted from results");
647- break ;
648- case ebsdlib::CrystalStructure::Tetragonal_High:
649- figures = makePoleFigures<ebsdlib::TetragonalOps>(config);
650- intensityImages = createIntensityPoleFigures<ebsdlib::TetragonalOps>(config, m_InputValues->NormalizeToMRD );
651- // setWarningCondition(-1010, "Tetragonal High Symmetry is not supported for Pole figures. This phase will be omitted from results");
652- break ;
653- case ebsdlib::CrystalStructure::Tetragonal_Low:
654- figures = makePoleFigures<ebsdlib::TetragonalLowOps>(config);
655- intensityImages = createIntensityPoleFigures<ebsdlib::TetragonalLowOps>(config, m_InputValues->NormalizeToMRD );
656- // setWarningCondition(-1010, "Tetragonal Low Symmetry is not supported for Pole figures. This phase will be omitted from results");
657- break ;
658- case ebsdlib::CrystalStructure::OrthoRhombic:
659- figures = makePoleFigures<ebsdlib::OrthoRhombicOps>(config);
660- intensityImages = createIntensityPoleFigures<ebsdlib::OrthoRhombicOps>(config, m_InputValues->NormalizeToMRD );
661- break ;
662- case ebsdlib::CrystalStructure::Monoclinic:
663- figures = makePoleFigures<ebsdlib::MonoclinicOps>(config);
664- intensityImages = createIntensityPoleFigures<ebsdlib::MonoclinicOps>(config, m_InputValues->NormalizeToMRD );
665- break ;
666- case ebsdlib::CrystalStructure::Triclinic:
667- figures = makePoleFigures<ebsdlib::TriclinicOps>(config);
668- intensityImages = createIntensityPoleFigures<ebsdlib::TriclinicOps>(config, m_InputValues->NormalizeToMRD );
669- break ;
670- default :
671- break ;
672- }
620+ std::vector<ebsdlib::DoubleArrayType::Pointer> intensityImages;
673621
674- if (m_InputValues->SaveIntensityData && intensityImages.size () == 3 )
675- {
676- DataPath amPath = m_InputValues->IntensityGeometryDataPath .createChildPath (write_pole_figure::k_ImageAttrMatName);
677- // If there is more than a single phase we will need to add more arrays to the DataStructure
678- if (phase > 1 )
622+ switch (crystalStructures[phase])
679623 {
680- const std::vector<size_t > intensityImageDims = {static_cast <usize>(config.imageDim ), static_cast <usize>(config.imageDim ), 1ULL };
681- DataPath arrayDataPath = amPath.createChildPath (fmt::format (" Phase_{}_{}" , phase, m_InputValues->IntensityPlot1Name ));
682- Result<> result = ArrayCreationUtilities::CreateArray<float64>(m_DataStructure, intensityImageDims, {1ULL }, arrayDataPath, IDataAction::Mode::Execute);
624+ case ebsdlib::CrystalStructure::Cubic_High:
625+ intensityImages = createIntensityPoleFigures<ebsdlib::CubicOps>(config, m_InputValues->NormalizeToMRD );
626+ break ;
627+ case ebsdlib::CrystalStructure::Cubic_Low:
628+ intensityImages = createIntensityPoleFigures<ebsdlib::CubicLowOps>(config, m_InputValues->NormalizeToMRD );
629+ break ;
630+ case ebsdlib::CrystalStructure::Hexagonal_High:
631+ intensityImages = createIntensityPoleFigures<ebsdlib::HexagonalOps>(config, m_InputValues->NormalizeToMRD );
632+ break ;
633+ case ebsdlib::CrystalStructure::Hexagonal_Low:
634+ intensityImages = createIntensityPoleFigures<ebsdlib::HexagonalLowOps>(config, m_InputValues->NormalizeToMRD );
635+ break ;
636+ case ebsdlib::CrystalStructure::Trigonal_High:
637+ intensityImages = createIntensityPoleFigures<ebsdlib::TrigonalOps>(config, m_InputValues->NormalizeToMRD );
638+ break ;
639+ case ebsdlib::CrystalStructure::Trigonal_Low:
640+ intensityImages = createIntensityPoleFigures<ebsdlib::TrigonalLowOps>(config, m_InputValues->NormalizeToMRD );
641+ break ;
642+ case ebsdlib::CrystalStructure::Tetragonal_High:
643+ intensityImages = createIntensityPoleFigures<ebsdlib::TetragonalOps>(config, m_InputValues->NormalizeToMRD );
644+ break ;
645+ case ebsdlib::CrystalStructure::Tetragonal_Low:
646+ intensityImages = createIntensityPoleFigures<ebsdlib::TetragonalLowOps>(config, m_InputValues->NormalizeToMRD );
647+ break ;
648+ case ebsdlib::CrystalStructure::OrthoRhombic:
649+ intensityImages = createIntensityPoleFigures<ebsdlib::OrthoRhombicOps>(config, m_InputValues->NormalizeToMRD );
650+ break ;
651+ case ebsdlib::CrystalStructure::Monoclinic:
652+ intensityImages = createIntensityPoleFigures<ebsdlib::MonoclinicOps>(config, m_InputValues->NormalizeToMRD );
653+ break ;
654+ case ebsdlib::CrystalStructure::Triclinic:
655+ intensityImages = createIntensityPoleFigures<ebsdlib::TriclinicOps>(config, m_InputValues->NormalizeToMRD );
656+ break ;
657+ default :
658+ break ;
659+ }
683660
684- arrayDataPath = amPath.createChildPath (fmt::format (" Phase_{}_{}" , phase, m_InputValues->IntensityPlot2Name ));
685- result = ArrayCreationUtilities::CreateArray<float64>(m_DataStructure, intensityImageDims, {1ULL }, arrayDataPath, IDataAction::Mode::Execute);
661+ if (intensityImages.size () == 3 )
662+ {
663+ DataPath amPath = m_InputValues->IntensityGeometryDataPath .createChildPath (write_pole_figure::k_ImageAttrMatName);
664+ // If there is more than a single phase we will need to add more arrays to the DataStructure
665+ if (phase > 1 )
666+ {
667+ const std::vector<size_t > intensityImageDims = {static_cast <usize>(config.imageDim ), static_cast <usize>(config.imageDim ), 1ULL };
668+ DataPath arrayDataPath = amPath.createChildPath (fmt::format (" Phase_{}_{}" , phase, m_InputValues->IntensityPlot1Name ));
669+ Result<> result = ArrayCreationUtilities::CreateArray<float64>(m_DataStructure, intensityImageDims, {1ULL }, arrayDataPath, IDataAction::Mode::Execute);
686670
687- arrayDataPath = amPath.createChildPath (fmt::format (" Phase_{}_{}" , phase, m_InputValues->IntensityPlot3Name ));
688- result = ArrayCreationUtilities::CreateArray<float64>(m_DataStructure, intensityImageDims, {1ULL }, arrayDataPath, IDataAction::Mode::Execute);
689- }
671+ arrayDataPath = amPath.createChildPath (fmt::format (" Phase_{}_{}" , phase, m_InputValues->IntensityPlot2Name ));
672+ result = ArrayCreationUtilities::CreateArray<float64>(m_DataStructure, intensityImageDims, {1ULL }, arrayDataPath, IDataAction::Mode::Execute);
690673
691- auto intensityPlot1Array = m_DataStructure. getDataRefAs <Float64Array>( amPath.createChildPath (fmt::format (" Phase_{}_{}" , phase, m_InputValues->IntensityPlot1Name ) ));
692- auto intensityPlot2Array = m_DataStructure. getDataRefAs <Float64Array>(amPath. createChildPath ( fmt::format ( " Phase_{}_{} " , phase, m_InputValues-> IntensityPlot2Name )) );
693- auto intensityPlot3Array = m_DataStructure. getDataRefAs <Float64Array>(amPath. createChildPath ( fmt::format ( " Phase_{}_{} " , phase, m_InputValues-> IntensityPlot3Name )));
674+ arrayDataPath = amPath.createChildPath (fmt::format (" Phase_{}_{}" , phase, m_InputValues->IntensityPlot3Name ));
675+ result = ArrayCreationUtilities::CreateArray<float64>(m_DataStructure, intensityImageDims, { 1ULL }, arrayDataPath, IDataAction::Mode::Execute );
676+ }
694677
695- std::vector<size_t > compDims = {1ULL };
696- for (int imageIndex = 0 ; imageIndex < figures.size (); imageIndex++)
697- {
698- intensityImages[imageIndex] = flipAndMirrorPoleFigure<double >(intensityImages[imageIndex].get (), config);
699- }
678+ auto intensityPlot1Array = m_DataStructure.getDataRefAs <Float64Array>(amPath.createChildPath (fmt::format (" Phase_{}_{}" , phase, m_InputValues->IntensityPlot1Name )));
679+ auto intensityPlot2Array = m_DataStructure.getDataRefAs <Float64Array>(amPath.createChildPath (fmt::format (" Phase_{}_{}" , phase, m_InputValues->IntensityPlot2Name )));
680+ auto intensityPlot3Array = m_DataStructure.getDataRefAs <Float64Array>(amPath.createChildPath (fmt::format (" Phase_{}_{}" , phase, m_InputValues->IntensityPlot3Name )));
700681
701- std::copy (intensityImages[0 ]->begin (), intensityImages[0 ]->end (), intensityPlot1Array.begin ());
702- std::copy (intensityImages[1 ]->begin (), intensityImages[1 ]->end (), intensityPlot2Array.begin ());
703- std::copy (intensityImages[2 ]->begin (), intensityImages[2 ]->end (), intensityPlot3Array.begin ());
682+ std::vector<size_t > compDims = {1ULL };
683+ for (int imageIndex = 0 ; imageIndex < intensityImages.size (); imageIndex++)
684+ {
685+ intensityImages[imageIndex] = flipAndMirrorPoleFigure<double >(intensityImages[imageIndex].get (), config);
686+ }
704687
705- DataPath metaDataPath = m_InputValues->IntensityGeometryDataPath .createChildPath (write_pole_figure::k_MetaDataName);
706- auto metaDataArrayRef = m_DataStructure.getDataRefAs <StringArray>(metaDataPath);
707- if (metaDataArrayRef.getNumberOfTuples () != numPhases)
708- {
709- metaDataArrayRef.resizeTuples (std::vector<usize>{numPhases});
710- }
688+ std::copy (intensityImages[0 ]->begin (), intensityImages[0 ]->end (), intensityPlot1Array.begin ());
689+ std::copy (intensityImages[1 ]->begin (), intensityImages[1 ]->end (), intensityPlot2Array.begin ());
690+ std::copy (intensityImages[2 ]->begin (), intensityImages[2 ]->end (), intensityPlot3Array.begin ());
711691
712- std::vector<std::string> laueNames = ebsdlib::LaueOps::GetLaueNames ();
713- const uint32_t laueIndex = crystalStructures[phase];
714- const std::string materialName = materialNames[phase];
692+ DataPath metaDataPath = m_InputValues->IntensityGeometryDataPath .createChildPath (write_pole_figure::k_MetaDataName);
693+ auto metaDataArrayRef = m_DataStructure.getDataRefAs <StringArray>(metaDataPath);
694+ if (metaDataArrayRef.getNumberOfTuples () != numPhases)
695+ {
696+ metaDataArrayRef.resizeTuples (std::vector<usize>{numPhases});
697+ }
715698
716- metaDataArrayRef[phase] = fmt::format (" Phase Num: {}\n Material Name: {}\n Laue Group: {}\n Hemisphere: Northern\n Samples: {}\n Lambert Square Dim: {}" , phase, materialName, laueNames[laueIndex],
717- config.eulers ->getNumberOfTuples (), config.lambertDim );
699+ std::vector<std::string> laueNames = ebsdlib::LaueOps::GetLaueNames ();
700+ const uint32_t laueIndex = crystalStructures[phase];
701+ const std::string materialName = materialNames[phase];
702+
703+ metaDataArrayRef[phase] = fmt::format (" Phase Num: {}\n Material Name: {}\n Laue Group: {}\n Hemisphere: Northern\n Samples: {}\n Lambert Square Dim: {}" , phase, materialName, laueNames[laueIndex],
704+ config.eulers ->getNumberOfTuples (), config.lambertDim );
705+ }
718706 }
719707
720- if (figures. size () == 3 )
708+ if (m_InputValues-> SaveAsImageGeometry || m_InputValues-> WriteImageToDisk )
721709 {
722710 // Build the composite configuration
723711 ebsdlib::CompositePoleFigureConfiguration_t compositeConfig;
@@ -740,6 +728,7 @@ Result<> WritePoleFigure::operator()()
740728 compositeConfig.phaseName = materialNames[phase];
741729 compositeConfig.phaseNumber = static_cast <int32_t >(phase);
742730 compositeConfig.title = m_InputValues->Title ;
731+ compositeConfig.hexConvention = m_InputValues->HexConvention ;
743732
744733 // Generate the composite pole figure image
745734 ebsdlib::PoleFigureCompositor compositor;
0 commit comments