From 22d633523fe5893a76fa36714d07174c912fa9f5 Mon Sep 17 00:00:00 2001 From: Joey Kleingers Date: Mon, 3 Jul 2017 10:24:39 -0400 Subject: [PATCH 01/11] Adding Save To New, Append To Existing, and Do Not Save options to the Insert Precipitate Phases and Pack Primary Phases filters. --- .../InsertPrecipitatePhases.cpp | 208 ++++++--- .../InsertPrecipitatePhases.h | 19 +- .../SyntheticBuildingFilters/PackPrimaryPhases.cpp | 464 ++++++++++++--------- .../SyntheticBuildingFilters/PackPrimaryPhases.h | 19 +- 4 files changed, 441 insertions(+), 269 deletions(-) diff --git a/Source/Plugins/SyntheticBuilding/SyntheticBuildingFilters/InsertPrecipitatePhases.cpp b/Source/Plugins/SyntheticBuilding/SyntheticBuildingFilters/InsertPrecipitatePhases.cpp index b1f252c8cc..e0a7eeae8c 100644 --- a/Source/Plugins/SyntheticBuilding/SyntheticBuildingFilters/InsertPrecipitatePhases.cpp +++ b/Source/Plugins/SyntheticBuilding/SyntheticBuildingFilters/InsertPrecipitatePhases.cpp @@ -41,10 +41,13 @@ #include "SIMPLib/Common/Constants.h" #include "SIMPLib/FilterParameters/AbstractFilterParametersReader.h" +#include "SIMPLib/FilterParameters/AttributeMatrixCreationFilterParameter.h" +#include "SIMPLib/FilterParameters/AttributeMatrixSelectionFilterParameter.h" #include "SIMPLib/FilterParameters/BooleanFilterParameter.h" #include "SIMPLib/FilterParameters/DataArraySelectionFilterParameter.h" #include "SIMPLib/FilterParameters/InputFileFilterParameter.h" #include "SIMPLib/FilterParameters/LinkedBooleanFilterParameter.h" +#include "SIMPLib/FilterParameters/LinkedChoicesFilterParameter.h" #include "SIMPLib/FilterParameters/OutputFileFilterParameter.h" #include "SIMPLib/FilterParameters/SeparatorFilterParameter.h" #include "SIMPLib/Geometry/ImageGeom.h" @@ -63,49 +66,50 @@ // // ----------------------------------------------------------------------------- InsertPrecipitatePhases::InsertPrecipitatePhases() -: AbstractFilter() -, m_ClusteringListArrayName(SIMPL::FeatureData::ClusteringList) -, m_ErrorOutputFile("") -, m_CsvOutputFile("") -, m_MaskArrayPath(SIMPL::Defaults::ImageDataContainerName, SIMPL::Defaults::CellAttributeMatrixName, SIMPL::CellData::Mask) -, m_UseMask(false) -, m_HavePrecips(false) -, m_PrecipInputFile("") -, m_PeriodicBoundaries(false) -, m_MatchRDF(false) -, m_WriteGoalAttributes(false) -, m_InputStatsArrayPath(SIMPL::Defaults::StatsGenerator, SIMPL::Defaults::CellEnsembleAttributeMatrixName, SIMPL::EnsembleData::Statistics) -, m_InputPhaseTypesArrayPath(SIMPL::Defaults::StatsGenerator, SIMPL::Defaults::CellEnsembleAttributeMatrixName, SIMPL::EnsembleData::PhaseTypes) -, m_InputShapeTypesArrayPath(SIMPL::Defaults::StatsGenerator, SIMPL::Defaults::CellEnsembleAttributeMatrixName, SIMPL::EnsembleData::ShapeTypes) -, m_FeatureIdsArrayPath(SIMPL::Defaults::SyntheticVolumeDataContainerName, SIMPL::Defaults::CellAttributeMatrixName, SIMPL::CellData::FeatureIds) -, m_CellPhasesArrayPath(SIMPL::Defaults::SyntheticVolumeDataContainerName, SIMPL::Defaults::CellAttributeMatrixName, SIMPL::CellData::Phases) -, m_BoundaryCellsArrayPath(SIMPL::Defaults::SyntheticVolumeDataContainerName, SIMPL::Defaults::CellAttributeMatrixName, SIMPL::CellData::BoundaryCells) -, m_FeaturePhasesArrayPath(SIMPL::Defaults::SyntheticVolumeDataContainerName, SIMPL::Defaults::CellFeatureAttributeMatrixName, SIMPL::FeatureData::Phases) -, m_NumCellsArrayName(SIMPL::FeatureData::NumCells) -, m_EquivalentDiametersArrayName(SIMPL::FeatureData::EquivalentDiameters) -, m_VolumesArrayName(SIMPL::FeatureData::Volumes) -, m_Omega3sArrayName(SIMPL::FeatureData::Omega3s) -, m_CentroidsArrayName(SIMPL::FeatureData::Centroids) -, m_AxisEulerAnglesArrayName(SIMPL::FeatureData::AxisEulerAngles) -, m_AxisLengthsArrayName(SIMPL::FeatureData::AxisLengths) -, m_NumFeaturesArrayPath(SIMPL::Defaults::SyntheticVolumeDataContainerName, SIMPL::Defaults::CellEnsembleAttributeMatrixName, SIMPL::EnsembleData::NumFeatures) -, m_SaveGeometricDescriptions(false) -, m_FeatureIds(nullptr) -, m_CellPhases(nullptr) -, m_Mask(nullptr) -, m_BoundaryCells(nullptr) -, m_AxisEulerAngles(nullptr) -, m_Centroids(nullptr) -, m_AxisLengths(nullptr) -, m_Volumes(nullptr) -, m_Omega3s(nullptr) -, m_EquivalentDiameters(nullptr) -, m_FeaturePhases(nullptr) -, m_NumCells(nullptr) -, m_PhaseTypes(nullptr) -, m_ShapeTypes(nullptr) -, m_NumFeatures(nullptr) -, m_Neighbors(nullptr) + : AbstractFilter() + , m_ClusteringListArrayName(SIMPL::FeatureData::ClusteringList) + , m_ErrorOutputFile("") + , m_CsvOutputFile("") + , m_MaskArrayPath(SIMPL::Defaults::ImageDataContainerName, SIMPL::Defaults::CellAttributeMatrixName, SIMPL::CellData::Mask) + , m_UseMask(false) + , m_HavePrecips(false) + , m_PrecipInputFile("") + , m_PeriodicBoundaries(false) + , m_MatchRDF(false) + , m_WriteGoalAttributes(false) + , m_InputStatsArrayPath(SIMPL::Defaults::StatsGenerator, SIMPL::Defaults::CellEnsembleAttributeMatrixName, SIMPL::EnsembleData::Statistics) + , m_InputPhaseTypesArrayPath(SIMPL::Defaults::StatsGenerator, SIMPL::Defaults::CellEnsembleAttributeMatrixName, SIMPL::EnsembleData::PhaseTypes) + , m_InputShapeTypesArrayPath(SIMPL::Defaults::StatsGenerator, SIMPL::Defaults::CellEnsembleAttributeMatrixName, SIMPL::EnsembleData::ShapeTypes) + , m_FeatureIdsArrayPath(SIMPL::Defaults::SyntheticVolumeDataContainerName, SIMPL::Defaults::CellAttributeMatrixName, SIMPL::CellData::FeatureIds) + , m_CellPhasesArrayPath(SIMPL::Defaults::SyntheticVolumeDataContainerName, SIMPL::Defaults::CellAttributeMatrixName, SIMPL::CellData::Phases) + , m_BoundaryCellsArrayPath(SIMPL::Defaults::SyntheticVolumeDataContainerName, SIMPL::Defaults::CellAttributeMatrixName, SIMPL::CellData::BoundaryCells) + , m_FeaturePhasesArrayPath(SIMPL::Defaults::SyntheticVolumeDataContainerName, SIMPL::Defaults::CellFeatureAttributeMatrixName, SIMPL::FeatureData::Phases) + , m_NumCellsArrayName(SIMPL::FeatureData::NumCells) + , m_EquivalentDiametersArrayName(SIMPL::FeatureData::EquivalentDiameters) + , m_VolumesArrayName(SIMPL::FeatureData::Volumes) + , m_Omega3sArrayName(SIMPL::FeatureData::Omega3s) + , m_CentroidsArrayName(SIMPL::FeatureData::Centroids) + , m_AxisEulerAnglesArrayName(SIMPL::FeatureData::AxisEulerAngles) + , m_AxisLengthsArrayName(SIMPL::FeatureData::AxisLengths) + , m_NumFeaturesArrayPath(SIMPL::Defaults::SyntheticVolumeDataContainerName, SIMPL::Defaults::CellEnsembleAttributeMatrixName, SIMPL::EnsembleData::NumFeatures) + , m_SaveGeometricDescriptions(false) + , m_NewAttributeMatrixPath(SIMPL::Defaults::SyntheticVolumeDataContainerName, SIMPL::Defaults::PrecipitateSyntheticShapeParametersName, "") + , m_FeatureIds(nullptr) + , m_CellPhases(nullptr) + , m_Mask(nullptr) + , m_BoundaryCells(nullptr) + , m_AxisEulerAngles(nullptr) + , m_Centroids(nullptr) + , m_AxisLengths(nullptr) + , m_Volumes(nullptr) + , m_Omega3s(nullptr) + , m_EquivalentDiameters(nullptr) + , m_FeaturePhases(nullptr) + , m_NumCells(nullptr) + , m_PhaseTypes(nullptr) + , m_ShapeTypes(nullptr) + , m_NumFeatures(nullptr) + , m_Neighbors(nullptr) { initialize(); @@ -197,8 +201,36 @@ void InsertPrecipitatePhases::setupFilterParameters() parameters.push_back(SIMPL_NEW_LINKED_BOOL_FP("Write Goal Attributes", WriteGoalAttributes, FilterParameter::Parameter, InsertPrecipitatePhases, linkedProps)); parameters.push_back(SIMPL_NEW_OUTPUT_FILE_FP("Goal Attribute CSV File", CsvOutputFile, FilterParameter::Parameter, InsertPrecipitatePhases, "*.csv", "Comma Separated Data")); - parameters.push_back(SIMPL_NEW_BOOL_FP("Save Shape Description Arrays", SaveGeometricDescriptions, FilterParameter::Parameter, InsertPrecipitatePhases)); + { + LinkedChoicesFilterParameter::Pointer parameter = LinkedChoicesFilterParameter::New(); + parameter->setHumanLabel("Save Shape Description Arrays"); + parameter->setPropertyName("SaveGeometricDescriptions"); + parameter->setSetterCallback(SIMPL_BIND_SETTER(InsertPrecipitatePhases, this, SaveGeometricDescriptions)); + parameter->setGetterCallback(SIMPL_BIND_GETTER(InsertPrecipitatePhases, this, SaveGeometricDescriptions)); + + QVector choices; + choices.push_back("Save To New Attribute Matrix"); + choices.push_back("Append To Existing Attribute Matrix"); + choices.push_back("Do Not Save"); + parameter->setChoices(choices); + QStringList linkedProps; + linkedProps << "NewAttributeMatrixPath" + << "SelectedAttributeMatrixPath"; + parameter->setLinkedProperties(linkedProps); + parameter->setEditable(false); + parameter->setCategory(FilterParameter::Parameter); + parameters.push_back(parameter); + } + { + AttributeMatrixCreationFilterParameter::RequirementType req; + parameters.push_back(SIMPL_NEW_AM_CREATION_FP("New Attribute Matrix", NewAttributeMatrixPath, FilterParameter::Parameter, InsertPrecipitatePhases, req, 0)); + } + + { + AttributeMatrixSelectionFilterParameter::RequirementType req = AttributeMatrixSelectionFilterParameter::CreateRequirement(AttributeMatrix::Category::Feature); + parameters.push_back(SIMPL_NEW_AM_SELECTION_FP("Selected Attribute Matrix", SelectedAttributeMatrixPath, FilterParameter::Parameter, InsertPrecipitatePhases, req, 1)); + } setFilterParameters(parameters); } @@ -414,6 +446,20 @@ void InsertPrecipitatePhases::dataCheck() } } + QVector tDims(1, 0); + DataContainer::Pointer m = getDataContainerArray()->getDataContainer(getFeaturePhasesArrayPath()); + + InsertPrecipitatePhases::SaveMethod saveMethod = static_cast(getSaveGeometricDescriptions()); + if (saveMethod == InsertPrecipitatePhases::SaveMethod::SaveToNew) + { + m->createNonPrereqAttributeMatrix(this, getNewAttributeMatrixPath().getAttributeMatrixName(), tDims, AttributeMatrix::Type::CellFeature); + } + else if (saveMethod == InsertPrecipitatePhases::SaveMethod::AppendToExisting) + { + int err = 0; + m->getPrereqAttributeMatrix(this, getSelectedAttributeMatrixPath().getAttributeMatrixName(), err); + } + // Feature Data m_FeaturePhasesPtr = getDataContainerArray()->getPrereqArrayFromPath, AbstractFilter>(this, getFeaturePhasesArrayPath(), cDims); /* Assigns the shared_ptr<> to an instance variable that is a weak_ptr<> */ @@ -424,7 +470,7 @@ void InsertPrecipitatePhases::dataCheck() tempPath.update(getFeaturePhasesArrayPath().getDataContainerName(), getFeaturePhasesArrayPath().getAttributeMatrixName(), getNumCellsArrayName()); m_NumCellsPtr = getDataContainerArray()->createNonPrereqArrayFromPath, AbstractFilter, int32_t>( - this, tempPath, 0, cDims, getNumCellsArrayName()); /* Assigns the shared_ptr<> to an instance variable that is a weak_ptr<> */ + this, tempPath, 0, cDims, getNumCellsArrayName()); /* Assigns the shared_ptr<> to an instance variable that is a weak_ptr<> */ if(nullptr != m_NumCellsPtr.lock().get()) /* Validate the Weak Pointer wraps a non-nullptr pointer to a DataArray object */ { m_NumCells = m_NumCellsPtr.lock()->getPointer(0); @@ -432,7 +478,7 @@ void InsertPrecipitatePhases::dataCheck() tempPath.update(getFeaturePhasesArrayPath().getDataContainerName(), getFeaturePhasesArrayPath().getAttributeMatrixName(), getEquivalentDiametersArrayName()); m_EquivalentDiametersPtr = getDataContainerArray()->createNonPrereqArrayFromPath, AbstractFilter, float>( - this, tempPath, 0, cDims, getEquivalentDiametersArrayName()); /* Assigns the shared_ptr<> to an instance variable that is a weak_ptr<> */ + this, tempPath, 0, cDims, getEquivalentDiametersArrayName()); /* Assigns the shared_ptr<> to an instance variable that is a weak_ptr<> */ if(nullptr != m_EquivalentDiametersPtr.lock().get()) /* Validate the Weak Pointer wraps a non-nullptr pointer to a DataArray object */ { m_EquivalentDiameters = m_EquivalentDiametersPtr.lock()->getPointer(0); @@ -440,7 +486,7 @@ void InsertPrecipitatePhases::dataCheck() tempPath.update(getFeaturePhasesArrayPath().getDataContainerName(), getFeaturePhasesArrayPath().getAttributeMatrixName(), getVolumesArrayName()); m_VolumesPtr = getDataContainerArray()->createNonPrereqArrayFromPath, AbstractFilter, float>( - this, tempPath, 0, cDims, getVolumesArrayName()); /* Assigns the shared_ptr<> to an instance variable that is a weak_ptr<> */ + this, tempPath, 0, cDims, getVolumesArrayName()); /* Assigns the shared_ptr<> to an instance variable that is a weak_ptr<> */ if(nullptr != m_VolumesPtr.lock().get()) /* Validate the Weak Pointer wraps a non-nullptr pointer to a DataArray object */ { m_Volumes = m_VolumesPtr.lock()->getPointer(0); @@ -448,7 +494,7 @@ void InsertPrecipitatePhases::dataCheck() tempPath.update(getFeaturePhasesArrayPath().getDataContainerName(), getFeaturePhasesArrayPath().getAttributeMatrixName(), getOmega3sArrayName()); m_Omega3sPtr = getDataContainerArray()->createNonPrereqArrayFromPath, AbstractFilter, float>( - this, tempPath, 0, cDims, getOmega3sArrayName()); /* Assigns the shared_ptr<> to an instance variable that is a weak_ptr<> */ + this, tempPath, 0, cDims, getOmega3sArrayName()); /* Assigns the shared_ptr<> to an instance variable that is a weak_ptr<> */ if(nullptr != m_Omega3sPtr.lock().get()) /* Validate the Weak Pointer wraps a non-nullptr pointer to a DataArray object */ { m_Omega3s = m_Omega3sPtr.lock()->getPointer(0); @@ -457,7 +503,7 @@ void InsertPrecipitatePhases::dataCheck() cDims[0] = 3; tempPath.update(getFeaturePhasesArrayPath().getDataContainerName(), getFeaturePhasesArrayPath().getAttributeMatrixName(), getCentroidsArrayName()); m_CentroidsPtr = getDataContainerArray()->createNonPrereqArrayFromPath, AbstractFilter, float>( - this, tempPath, 0, cDims, getCentroidsArrayName()); /* Assigns the shared_ptr<> to an instance variable that is a weak_ptr<> */ + this, tempPath, 0, cDims, getCentroidsArrayName()); /* Assigns the shared_ptr<> to an instance variable that is a weak_ptr<> */ if(nullptr != m_CentroidsPtr.lock().get()) /* Validate the Weak Pointer wraps a non-nullptr pointer to a DataArray object */ { m_Centroids = m_CentroidsPtr.lock()->getPointer(0); @@ -465,7 +511,7 @@ void InsertPrecipitatePhases::dataCheck() tempPath.update(getFeaturePhasesArrayPath().getDataContainerName(), getFeaturePhasesArrayPath().getAttributeMatrixName(), getAxisEulerAnglesArrayName()); m_AxisEulerAnglesPtr = getDataContainerArray()->createNonPrereqArrayFromPath, AbstractFilter, float>( - this, tempPath, 0, cDims, getAxisEulerAnglesArrayName()); /* Assigns the shared_ptr<> to an instance variable that is a weak_ptr<> */ + this, tempPath, 0, cDims, getAxisEulerAnglesArrayName()); /* Assigns the shared_ptr<> to an instance variable that is a weak_ptr<> */ if(nullptr != m_AxisEulerAnglesPtr.lock().get()) /* Validate the Weak Pointer wraps a non-nullptr pointer to a DataArray object */ { m_AxisEulerAngles = m_AxisEulerAnglesPtr.lock()->getPointer(0); @@ -473,7 +519,7 @@ void InsertPrecipitatePhases::dataCheck() tempPath.update(getFeaturePhasesArrayPath().getDataContainerName(), getFeaturePhasesArrayPath().getAttributeMatrixName(), getAxisLengthsArrayName()); m_AxisLengthsPtr = getDataContainerArray()->createNonPrereqArrayFromPath, AbstractFilter, float>( - this, tempPath, 0, cDims, getAxisLengthsArrayName()); /* Assigns the shared_ptr<> to an instance variable that is a weak_ptr<> */ + this, tempPath, 0, cDims, getAxisLengthsArrayName()); /* Assigns the shared_ptr<> to an instance variable that is a weak_ptr<> */ if(nullptr != m_AxisLengthsPtr.lock().get()) /* Validate the Weak Pointer wraps a non-nullptr pointer to a DataArray object */ { m_AxisLengths = m_AxisLengthsPtr.lock()->getPointer(0); @@ -549,7 +595,7 @@ void InsertPrecipitatePhases::execute() m->getGeometryAs()->getDimensions(udims); int64_t dims[3] = { - static_cast(udims[0]), static_cast(udims[1]), static_cast(udims[2]), + static_cast(udims[0]), static_cast(udims[1]), static_cast(udims[2]), }; m_TotalPoints = static_cast(dims[0] * dims[1] * dims[2]); @@ -701,7 +747,7 @@ void InsertPrecipitatePhases::place_precipitates(Int32ArrayType::Pointer exclusi m->getGeometryAs()->getDimensions(udims); int64_t dims[3] = { - static_cast(udims[0]), static_cast(udims[1]), static_cast(udims[2]), + static_cast(udims[0]), static_cast(udims[1]), static_cast(udims[2]), }; m_XPoints = static_cast(dims[0]); @@ -762,9 +808,9 @@ void InsertPrecipitatePhases::place_precipitates(Int32ArrayType::Pointer exclusi QString ss = QObject::tr("Tried to cast a statsDataArray[%1].get() to a PrecipitateStatsData* " "pointer but this resulted in a nullptr pointer. The value at m_PhaseTypes[%2] = %3 does not match up " "with the type of pointer stored in the StatsDataArray (PrecipitateStatsData)\n") - .arg(i) - .arg(i) - .arg(m_PhaseTypes[i]); + .arg(i) + .arg(i) + .arg(m_PhaseTypes[i]); setErrorCondition(-666); notifyErrorMessage(getHumanLabel(), ss, getErrorCondition()); return; @@ -1409,7 +1455,7 @@ void InsertPrecipitatePhases::generate_precipitate(int32_t phase, Precip_t* prec { SIMPL_RANDOMNG_NEW_SEEDED(m_Seed) - StatsDataArray& statsDataArray = *(m_StatsDataArray.lock()); + StatsDataArray& statsDataArray = *(m_StatsDataArray.lock()); float r1 = 1.0f; float a2 = 0.0f, a3 = 0.0f; @@ -2136,7 +2182,7 @@ void InsertPrecipitatePhases::insert_precipitate(size_t gnum) { SIMPL_RANDOMNG_NEW() - float inside = -1.0f; + float inside = -1.0f; int64_t column = 0, row = 0, plane = 0; int64_t centercolumn = 0, centerrow = 0, centerplane = 0; int64_t xmin = 0, xmax = 0, ymin = 0, ymax = 0, zmin = 0, zmax = 0; @@ -2263,7 +2309,7 @@ void InsertPrecipitatePhases::assign_voxels() m->getGeometryAs()->getDimensions(udims); int64_t dims[3] = { - static_cast(udims[0]), static_cast(udims[1]), static_cast(udims[2]), + static_cast(udims[0]), static_cast(udims[1]), static_cast(udims[2]), }; int64_t index; @@ -2800,19 +2846,45 @@ void InsertPrecipitatePhases::moveShapeDescriptions() AttributeMatrix::Pointer cellFeatureAttrMat = getDataContainerArray()->getAttributeMatrix(getFeaturePhasesArrayPath()); QVector tDims(1, 0); - AttributeMatrix::Pointer shapeDescriptions = AttributeMatrix::New(tDims, "Synthetic Shape Parameters (Precipitate)", AttributeMatrix::Type::Generic); + + QList attrArrays; foreach(const QString name, names) { - IDataArray::Pointer p = cellFeatureAttrMat->removeAttributeArray(name); - size_t numTuples = p->getNumberOfTuples(); - tDims[0] = numTuples; - shapeDescriptions->resizeAttributeArrays(tDims); - shapeDescriptions->addAttributeArray(p->getName(), p); + attrArrays.push_back(cellFeatureAttrMat->removeAttributeArray(name)); } - if(getSaveGeometricDescriptions()) + + InsertPrecipitatePhases::SaveMethod saveMethod = static_cast(getSaveGeometricDescriptions()); + foreach (IDataArray::Pointer p, attrArrays) { - DataContainer::Pointer m = getDataContainerArray()->getDataContainer(getFeaturePhasesArrayPath()); - m->addAttributeMatrix(shapeDescriptions->getName(), shapeDescriptions); + if (saveMethod == InsertPrecipitatePhases::SaveMethod::SaveToNew) + { + AttributeMatrix::Pointer shapeDescriptions = getDataContainerArray()->getAttributeMatrix(getNewAttributeMatrixPath()); + if (shapeDescriptions != AttributeMatrix::NullPointer()) + { + size_t numTuples = p->getNumberOfTuples(); + tDims[0] = numTuples; + shapeDescriptions->resizeAttributeArrays(tDims); + shapeDescriptions->addAttributeArray(p->getName(), p); + } + } + else if (saveMethod == InsertPrecipitatePhases::SaveMethod::AppendToExisting) + { + AttributeMatrix::Pointer shapeDescriptions = getDataContainerArray()->getAttributeMatrix(getSelectedAttributeMatrixPath()); + if (shapeDescriptions != AttributeMatrix::NullPointer()) + { + size_t attrArrayTuples = p->getNumberOfTuples(); + size_t selectedTuples = shapeDescriptions->getTupleDimensions()[0]; + tDims[0] = attrArrayTuples + selectedTuples; + shapeDescriptions->resizeAttributeArrays(tDims); + + int err = 0; + IDataArray::Pointer destArray = shapeDescriptions->getPrereqIDataArray(this, p->getName(), err); + if (destArray != IDataArray::NullPointer()) + { + destArray->copyData(selectedTuples, p); + } + } + } } } diff --git a/Source/Plugins/SyntheticBuilding/SyntheticBuildingFilters/InsertPrecipitatePhases.h b/Source/Plugins/SyntheticBuilding/SyntheticBuildingFilters/InsertPrecipitatePhases.h index 991aab855c..b9850545fb 100644 --- a/Source/Plugins/SyntheticBuilding/SyntheticBuildingFilters/InsertPrecipitatePhases.h +++ b/Source/Plugins/SyntheticBuilding/SyntheticBuildingFilters/InsertPrecipitatePhases.h @@ -73,6 +73,15 @@ class InsertPrecipitatePhases : public AbstractFilter virtual ~InsertPrecipitatePhases(); + using EnumType = unsigned int; + + enum class SaveMethod : EnumType + { + SaveToNew = 0, + AppendToExisting = 1, + DoNotSave = 2 + }; + SIMPL_INSTANCE_STRING_PROPERTY(ClusteringListArrayName) SIMPL_INSTANCE_STRING_PROPERTY(ErrorOutputFile) @@ -146,8 +155,14 @@ class InsertPrecipitatePhases : public AbstractFilter SIMPL_FILTER_PARAMETER(DataArrayPath, NumFeaturesArrayPath) Q_PROPERTY(DataArrayPath NumFeaturesArrayPath READ getNumFeaturesArrayPath WRITE setNumFeaturesArrayPath) - SIMPL_FILTER_PARAMETER(bool, SaveGeometricDescriptions) - Q_PROPERTY(bool SaveGeometricDescriptions READ getSaveGeometricDescriptions WRITE setSaveGeometricDescriptions) + SIMPL_FILTER_PARAMETER(int, SaveGeometricDescriptions) + Q_PROPERTY(int SaveGeometricDescriptions READ getSaveGeometricDescriptions WRITE setSaveGeometricDescriptions) + + SIMPL_FILTER_PARAMETER(DataArrayPath, NewAttributeMatrixPath) + Q_PROPERTY(DataArrayPath NewAttributeMatrixPath READ getNewAttributeMatrixPath WRITE setNewAttributeMatrixPath) + + SIMPL_FILTER_PARAMETER(DataArrayPath, SelectedAttributeMatrixPath) + Q_PROPERTY(DataArrayPath SelectedAttributeMatrixPath READ getSelectedAttributeMatrixPath WRITE setSelectedAttributeMatrixPath) /** * @brief getCompiledLibraryName Reimplemented from @see AbstractFilter class diff --git a/Source/Plugins/SyntheticBuilding/SyntheticBuildingFilters/PackPrimaryPhases.cpp b/Source/Plugins/SyntheticBuilding/SyntheticBuildingFilters/PackPrimaryPhases.cpp index 934aa3062f..e5b0b6e14e 100644 --- a/Source/Plugins/SyntheticBuilding/SyntheticBuildingFilters/PackPrimaryPhases.cpp +++ b/Source/Plugins/SyntheticBuilding/SyntheticBuildingFilters/PackPrimaryPhases.cpp @@ -53,10 +53,12 @@ #include "SIMPLib/DataArrays/NeighborList.hpp" #include "SIMPLib/FilterParameters/AbstractFilterParametersReader.h" #include "SIMPLib/FilterParameters/AttributeMatrixSelectionFilterParameter.h" +#include "SIMPLib/FilterParameters/AttributeMatrixCreationFilterParameter.h" #include "SIMPLib/FilterParameters/BooleanFilterParameter.h" #include "SIMPLib/FilterParameters/DataArraySelectionFilterParameter.h" #include "SIMPLib/FilterParameters/InputFileFilterParameter.h" #include "SIMPLib/FilterParameters/LinkedBooleanFilterParameter.h" +#include "SIMPLib/FilterParameters/LinkedChoicesFilterParameter.h" #include "SIMPLib/FilterParameters/OutputFileFilterParameter.h" #include "SIMPLib/FilterParameters/SeparatorFilterParameter.h" #include "SIMPLib/FilterParameters/StringFilterParameter.h" @@ -79,155 +81,155 @@ */ class AssignVoxelsGapsImpl { - int64_t dims[3]; - float Invradcur[3]; - float res[3]; - int32_t* m_FeatureIds; - float xc; - float yc; - float zc; - ShapeOps* m_ShapeOps; - float ga[3][3]; - int32_t curFeature; - Int32ArrayType::Pointer newownersPtr; - FloatArrayType::Pointer ellipfuncsPtr; - -public: - AssignVoxelsGapsImpl(int64_t* dimensions, float* resolution, int32_t* featureIds, float* radCur, - float* xx, ShapeOps* shapeOps, float gA[3][3], float* size, int32_t cur_feature, - Int32ArrayType::Pointer newowners, FloatArrayType::Pointer ellipfuncs) - : m_FeatureIds(featureIds) - , m_ShapeOps(shapeOps) - , curFeature(cur_feature) - { - size = 0; - dims[0] = dimensions[0]; - dims[1] = dimensions[1]; - dims[2] = dimensions[2]; - Invradcur[0] = 1.0f / radCur[0]; - Invradcur[1] = 1.0f / radCur[1]; - Invradcur[2] = 1.0f / radCur[2]; - - res[0] = resolution[0]; - res[1] = resolution[1]; - res[2] = resolution[2]; - - xc = xx[0]; - yc = xx[1]; - zc = xx[2]; - - ga[0][0] = gA[0][0]; - ga[0][1] = gA[0][1]; - ga[0][2] = gA[0][2]; - ga[1][0] = gA[1][0]; - ga[1][1] = gA[1][1]; - ga[1][2] = gA[1][2]; - ga[2][0] = gA[2][0]; - ga[2][1] = gA[2][1]; - ga[2][2] = gA[2][2]; - - newownersPtr = newowners; - ellipfuncsPtr = ellipfuncs; - } - - virtual ~AssignVoxelsGapsImpl() - { - } - - // ----------------------------------------------------------------------------- - // - // ----------------------------------------------------------------------------- - void convert(int64_t zStart, int64_t zEnd, int64_t yStart, int64_t yEnd, int64_t xStart, int64_t xEnd) const - { - int64_t column = 0; - int64_t row = 0; - int64_t plane = 0; - int64_t index = 0; - float coords[3] = {0.0f, 0.0f, 0.0f}; - float inside = 0.0f; - float coordsRotated[3] = {0.0f, 0.0f, 0.0f}; - int32_t* newowners = newownersPtr->getPointer(0); - float* ellipfuncs = ellipfuncsPtr->getPointer(0); - - int64_t dim0_dim_1 = dims[0] * dims[1]; - for(int64_t iter1 = xStart; iter1 < xEnd; iter1++) - { - column = iter1; - if(iter1 < 0) - { - column = iter1 + dims[0]; - } - else if(iter1 > dims[0] - 1) - { - column = iter1 - dims[0]; - } - - for(int64_t iter2 = yStart; iter2 < yEnd; iter2++) + int64_t dims[3]; + float Invradcur[3]; + float res[3]; + int32_t* m_FeatureIds; + float xc; + float yc; + float zc; + ShapeOps* m_ShapeOps; + float ga[3][3]; + int32_t curFeature; + Int32ArrayType::Pointer newownersPtr; + FloatArrayType::Pointer ellipfuncsPtr; + + public: + AssignVoxelsGapsImpl(int64_t* dimensions, float* resolution, int32_t* featureIds, float* radCur, + float* xx, ShapeOps* shapeOps, float gA[3][3], float* size, int32_t cur_feature, + Int32ArrayType::Pointer newowners, FloatArrayType::Pointer ellipfuncs) + : m_FeatureIds(featureIds) + , m_ShapeOps(shapeOps) + , curFeature(cur_feature) + { + size = 0; + dims[0] = dimensions[0]; + dims[1] = dimensions[1]; + dims[2] = dimensions[2]; + Invradcur[0] = 1.0f / radCur[0]; + Invradcur[1] = 1.0f / radCur[1]; + Invradcur[2] = 1.0f / radCur[2]; + + res[0] = resolution[0]; + res[1] = resolution[1]; + res[2] = resolution[2]; + + xc = xx[0]; + yc = xx[1]; + zc = xx[2]; + + ga[0][0] = gA[0][0]; + ga[0][1] = gA[0][1]; + ga[0][2] = gA[0][2]; + ga[1][0] = gA[1][0]; + ga[1][1] = gA[1][1]; + ga[1][2] = gA[1][2]; + ga[2][0] = gA[2][0]; + ga[2][1] = gA[2][1]; + ga[2][2] = gA[2][2]; + + newownersPtr = newowners; + ellipfuncsPtr = ellipfuncs; + } + + virtual ~AssignVoxelsGapsImpl() + { + } + + // ----------------------------------------------------------------------------- + // + // ----------------------------------------------------------------------------- + void convert(int64_t zStart, int64_t zEnd, int64_t yStart, int64_t yEnd, int64_t xStart, int64_t xEnd) const + { + int64_t column = 0; + int64_t row = 0; + int64_t plane = 0; + int64_t index = 0; + float coords[3] = {0.0f, 0.0f, 0.0f}; + float inside = 0.0f; + float coordsRotated[3] = {0.0f, 0.0f, 0.0f}; + int32_t* newowners = newownersPtr->getPointer(0); + float* ellipfuncs = ellipfuncsPtr->getPointer(0); + + int64_t dim0_dim_1 = dims[0] * dims[1]; + for(int64_t iter1 = xStart; iter1 < xEnd; iter1++) { - row = iter2; - if(iter2 < 0) + column = iter1; + if(iter1 < 0) { - row = iter2 + dims[1]; + column = iter1 + dims[0]; } - else if(iter2 > dims[1] - 1) + else if(iter1 > dims[0] - 1) { - row = iter2 - dims[1]; + column = iter1 - dims[0]; } - size_t row_dim = row * dims[0]; - for(int64_t iter3 = zStart; iter3 < zEnd; iter3++) + for(int64_t iter2 = yStart; iter2 < yEnd; iter2++) { - plane = iter3; - if(iter3 < 0) + row = iter2; + if(iter2 < 0) { - plane = iter3 + dims[2]; + row = iter2 + dims[1]; } - else if(iter3 > dims[2] - 1) + else if(iter2 > dims[1] - 1) { - plane = iter3 - dims[2]; + row = iter2 - dims[1]; } + size_t row_dim = row * dims[0]; - index = static_cast((plane * dim0_dim_1) + (row_dim) + column); - - inside = -1.0f; - coords[0] = float(iter1) * res[0]; - coords[1] = float(iter2) * res[1]; - coords[2] = float(iter3) * res[2]; - - coords[0] = coords[0] - xc; - coords[1] = coords[1] - yc; - coords[2] = coords[2] - zc; - MatrixMath::Multiply3x3with3x1(ga, coords, coordsRotated); - float axis1comp = coordsRotated[0] * Invradcur[0]; - float axis2comp = coordsRotated[1] * Invradcur[1]; - float axis3comp = coordsRotated[2] * Invradcur[2]; - inside = m_ShapeOps->inside(axis1comp, axis2comp, axis3comp); - // if (inside >= 0 && newowners[index] > 0) - if(inside >= 0 && newowners[index] > 0 && inside > ellipfuncs[index]) - { - newowners[index] = curFeature; - ellipfuncs[index] = inside; - // newowners[index] = -2; - // ellipfuncs[index] = inside; - } - else if(inside >= 0 && newowners[index] == -1) + for(int64_t iter3 = zStart; iter3 < zEnd; iter3++) { - newowners[index] = curFeature; - ellipfuncs[index] = inside; + plane = iter3; + if(iter3 < 0) + { + plane = iter3 + dims[2]; + } + else if(iter3 > dims[2] - 1) + { + plane = iter3 - dims[2]; + } + + index = static_cast((plane * dim0_dim_1) + (row_dim) + column); + + inside = -1.0f; + coords[0] = float(iter1) * res[0]; + coords[1] = float(iter2) * res[1]; + coords[2] = float(iter3) * res[2]; + + coords[0] = coords[0] - xc; + coords[1] = coords[1] - yc; + coords[2] = coords[2] - zc; + MatrixMath::Multiply3x3with3x1(ga, coords, coordsRotated); + float axis1comp = coordsRotated[0] * Invradcur[0]; + float axis2comp = coordsRotated[1] * Invradcur[1]; + float axis3comp = coordsRotated[2] * Invradcur[2]; + inside = m_ShapeOps->inside(axis1comp, axis2comp, axis3comp); + // if (inside >= 0 && newowners[index] > 0) + if(inside >= 0 && newowners[index] > 0 && inside > ellipfuncs[index]) + { + newowners[index] = curFeature; + ellipfuncs[index] = inside; + // newowners[index] = -2; + // ellipfuncs[index] = inside; + } + else if(inside >= 0 && newowners[index] == -1) + { + newowners[index] = curFeature; + ellipfuncs[index] = inside; + } } } } } - } #ifdef SIMPLib_USE_PARALLEL_ALGORITHMS - void operator()(const tbb::blocked_range3d& r) const - { - convert(r.pages().begin(), r.pages().end(), r.rows().begin(), r.rows().end(), r.cols().begin(), r.cols().end()); - } + void operator()(const tbb::blocked_range3d& r) const + { + convert(r.pages().begin(), r.pages().end(), r.rows().begin(), r.rows().end(), r.cols().begin(), r.cols().end()); + } #endif -private: + private: }; // Include the MOC generated file for this class @@ -237,51 +239,52 @@ class AssignVoxelsGapsImpl // // ----------------------------------------------------------------------------- PackPrimaryPhases::PackPrimaryPhases() -: AbstractFilter() -, m_OutputCellAttributeMatrixPath(SIMPL::Defaults::SyntheticVolumeDataContainerName, SIMPL::Defaults::CellAttributeMatrixName, "") -, m_OutputCellFeatureAttributeMatrixName(SIMPL::Defaults::CellFeatureAttributeMatrixName) -, m_OutputCellEnsembleAttributeMatrixName(SIMPL::Defaults::CellEnsembleAttributeMatrixName) -, m_FeatureIdsArrayName(SIMPL::CellData::FeatureIds) -, m_CellPhasesArrayName(SIMPL::CellData::Phases) -, m_FeaturePhasesArrayName(SIMPL::FeatureData::Phases) -, m_NumFeaturesArrayName(SIMPL::EnsembleData::NumFeatures) -, m_InputStatsArrayPath(SIMPL::Defaults::StatsGenerator, SIMPL::Defaults::CellEnsembleAttributeMatrixName, SIMPL::EnsembleData::Statistics) -, m_InputPhaseTypesArrayPath(SIMPL::Defaults::StatsGenerator, SIMPL::Defaults::CellEnsembleAttributeMatrixName, SIMPL::EnsembleData::PhaseTypes) -, m_InputPhaseNamesArrayPath(SIMPL::Defaults::StatsGenerator, SIMPL::Defaults::CellEnsembleAttributeMatrixName, SIMPL::EnsembleData::PhaseName) -, m_InputShapeTypesArrayPath(SIMPL::Defaults::StatsGenerator, SIMPL::Defaults::CellEnsembleAttributeMatrixName, SIMPL::EnsembleData::ShapeTypes) -, m_MaskArrayPath(SIMPL::Defaults::ImageDataContainerName, SIMPL::Defaults::CellAttributeMatrixName, SIMPL::CellData::Mask) -, m_UseMask(false) -, m_HaveFeatures(false) -, m_FeatureInputFile("") -, m_CsvOutputFile("") -, m_PeriodicBoundaries(false) -, m_WriteGoalAttributes(false) -, m_SaveGeometricDescriptions(false) -, m_NeighborhoodsArrayName(SIMPL::FeatureData::Neighborhoods) -, m_CentroidsArrayName(SIMPL::FeatureData::Centroids) -, m_VolumesArrayName(SIMPL::FeatureData::Volumes) -, m_AxisLengthsArrayName(SIMPL::FeatureData::AxisLengths) -, m_AxisEulerAnglesArrayName(SIMPL::FeatureData::AxisEulerAngles) -, m_Omega3sArrayName(SIMPL::FeatureData::Omega3s) -, m_EquivalentDiametersArrayName(SIMPL::FeatureData::EquivalentDiameters) -, m_Neighbors(nullptr) -, m_FeatureIds(nullptr) -, m_CellPhases(nullptr) -, m_Mask(nullptr) -, m_BoundaryCells(nullptr) -, m_FeaturePhases(nullptr) -, m_Neighborhoods(nullptr) -, m_Centroids(nullptr) -, m_Volumes(nullptr) -, m_AxisLengths(nullptr) -, m_AxisEulerAngles(nullptr) -, m_Omega3s(nullptr) -, m_EquivalentDiameters(nullptr) -, m_PhaseTypes(nullptr) -, m_ShapeTypes(nullptr) -, m_NumFeatures(nullptr) -, m_ErrorOutputFile("") -, m_VtkOutputFile("") + : AbstractFilter() + , m_OutputCellAttributeMatrixPath(SIMPL::Defaults::SyntheticVolumeDataContainerName, SIMPL::Defaults::CellAttributeMatrixName, "") + , m_OutputCellFeatureAttributeMatrixName(SIMPL::Defaults::CellFeatureAttributeMatrixName) + , m_OutputCellEnsembleAttributeMatrixName(SIMPL::Defaults::CellEnsembleAttributeMatrixName) + , m_FeatureIdsArrayName(SIMPL::CellData::FeatureIds) + , m_CellPhasesArrayName(SIMPL::CellData::Phases) + , m_FeaturePhasesArrayName(SIMPL::FeatureData::Phases) + , m_NumFeaturesArrayName(SIMPL::EnsembleData::NumFeatures) + , m_InputStatsArrayPath(SIMPL::Defaults::StatsGenerator, SIMPL::Defaults::CellEnsembleAttributeMatrixName, SIMPL::EnsembleData::Statistics) + , m_InputPhaseTypesArrayPath(SIMPL::Defaults::StatsGenerator, SIMPL::Defaults::CellEnsembleAttributeMatrixName, SIMPL::EnsembleData::PhaseTypes) + , m_InputPhaseNamesArrayPath(SIMPL::Defaults::StatsGenerator, SIMPL::Defaults::CellEnsembleAttributeMatrixName, SIMPL::EnsembleData::PhaseName) + , m_InputShapeTypesArrayPath(SIMPL::Defaults::StatsGenerator, SIMPL::Defaults::CellEnsembleAttributeMatrixName, SIMPL::EnsembleData::ShapeTypes) + , m_MaskArrayPath(SIMPL::Defaults::ImageDataContainerName, SIMPL::Defaults::CellAttributeMatrixName, SIMPL::CellData::Mask) + , m_UseMask(false) + , m_HaveFeatures(false) + , m_FeatureInputFile("") + , m_CsvOutputFile("") + , m_PeriodicBoundaries(false) + , m_WriteGoalAttributes(false) + , m_SaveGeometricDescriptions(false) + , m_NewAttributeMatrixPath(SIMPL::Defaults::SyntheticVolumeDataContainerName, SIMPL::Defaults::PrimaryPhaseSyntheticShapeParametersName, "") + , m_NeighborhoodsArrayName(SIMPL::FeatureData::Neighborhoods) + , m_CentroidsArrayName(SIMPL::FeatureData::Centroids) + , m_VolumesArrayName(SIMPL::FeatureData::Volumes) + , m_AxisLengthsArrayName(SIMPL::FeatureData::AxisLengths) + , m_AxisEulerAnglesArrayName(SIMPL::FeatureData::AxisEulerAngles) + , m_Omega3sArrayName(SIMPL::FeatureData::Omega3s) + , m_EquivalentDiametersArrayName(SIMPL::FeatureData::EquivalentDiameters) + , m_Neighbors(nullptr) + , m_FeatureIds(nullptr) + , m_CellPhases(nullptr) + , m_Mask(nullptr) + , m_BoundaryCells(nullptr) + , m_FeaturePhases(nullptr) + , m_Neighborhoods(nullptr) + , m_Centroids(nullptr) + , m_Volumes(nullptr) + , m_AxisLengths(nullptr) + , m_AxisEulerAngles(nullptr) + , m_Omega3s(nullptr) + , m_EquivalentDiameters(nullptr) + , m_PhaseTypes(nullptr) + , m_ShapeTypes(nullptr) + , m_NumFeatures(nullptr) + , m_ErrorOutputFile("") + , m_VtkOutputFile("") { initialize(); @@ -430,7 +433,36 @@ void PackPrimaryPhases::setupFilterParameters() parameters.push_back(SIMPL_NEW_LINKED_BOOL_FP("Write Goal Attributes", WriteGoalAttributes, FilterParameter::Parameter, PackPrimaryPhases, linkedProps)); parameters.push_back(SIMPL_NEW_OUTPUT_FILE_FP("Goal Attribute CSV File", CsvOutputFile, FilterParameter::Parameter, PackPrimaryPhases, "*.csv", "Comma Separated Data")); - parameters.push_back(SIMPL_NEW_BOOL_FP("Save Shape Description Arrays", SaveGeometricDescriptions, FilterParameter::Parameter, PackPrimaryPhases)); + { + LinkedChoicesFilterParameter::Pointer parameter = LinkedChoicesFilterParameter::New(); + parameter->setHumanLabel("Save Shape Description Arrays"); + parameter->setPropertyName("SaveGeometricDescriptions"); + parameter->setSetterCallback(SIMPL_BIND_SETTER(PackPrimaryPhases, this, SaveGeometricDescriptions)); + parameter->setGetterCallback(SIMPL_BIND_GETTER(PackPrimaryPhases, this, SaveGeometricDescriptions)); + + QVector choices; + choices.push_back("Save To New Attribute Matrix"); + choices.push_back("Append To Existing Attribute Matrix"); + choices.push_back("Do Not Save"); + parameter->setChoices(choices); + QStringList linkedProps; + linkedProps << "NewAttributeMatrixPath" + << "SelectedAttributeMatrixPath"; + parameter->setLinkedProperties(linkedProps); + parameter->setEditable(false); + parameter->setCategory(FilterParameter::Parameter); + parameters.push_back(parameter); + } + + { + AttributeMatrixCreationFilterParameter::RequirementType req; + parameters.push_back(SIMPL_NEW_AM_CREATION_FP("New Attribute Matrix", NewAttributeMatrixPath, FilterParameter::Parameter, PackPrimaryPhases, req, 0)); + } + + { + AttributeMatrixSelectionFilterParameter::RequirementType req = AttributeMatrixSelectionFilterParameter::CreateRequirement(AttributeMatrix::Category::Feature); + parameters.push_back(SIMPL_NEW_AM_SELECTION_FP("Selected Attribute Matrix", SelectedAttributeMatrixPath, FilterParameter::Parameter, PackPrimaryPhases, req, 1)); + } #if PPP_SHOW_DEBUG_OUTPUTS parameters.push_back(InputFileFilterParameter::New("Debug VTK File", "VtkOutputFile", getVtkOutputFile(), FilterParameter::Parameter, "*.vtk", "VTK File")); @@ -601,7 +633,7 @@ void PackPrimaryPhases::dataCheck() // Cell Data tempPath.update(getOutputCellAttributeMatrixPath().getDataContainerName(), getOutputCellAttributeMatrixPath().getAttributeMatrixName(), getFeatureIdsArrayName()); m_FeatureIdsPtr = getDataContainerArray()->createNonPrereqArrayFromPath, AbstractFilter, int32_t>( - this, tempPath, -1, cDims); /* Assigns the shared_ptr<>(this, tempPath, -1, dims); Assigns the shared_ptr<> to an instance variable that is a weak_ptr<> */ + this, tempPath, -1, cDims); /* Assigns the shared_ptr<>(this, tempPath, -1, dims); Assigns the shared_ptr<> to an instance variable that is a weak_ptr<> */ if(nullptr != m_FeatureIdsPtr.lock().get()) { m_FeatureIds = m_FeatureIdsPtr.lock()->getPointer(0); @@ -609,7 +641,7 @@ void PackPrimaryPhases::dataCheck() tempPath.update(getOutputCellAttributeMatrixPath().getDataContainerName(), getOutputCellAttributeMatrixPath().getAttributeMatrixName(), getCellPhasesArrayName()); m_CellPhasesPtr = getDataContainerArray()->createNonPrereqArrayFromPath, AbstractFilter, int32_t>( - this, tempPath, 0, cDims); /* Assigns the shared_ptr<>(this, tempPath, 0, dims); Assigns the shared_ptr<> to an instance variable that is a weak_ptr<> */ + this, tempPath, 0, cDims); /* Assigns the shared_ptr<>(this, tempPath, 0, dims); Assigns the shared_ptr<> to an instance variable that is a weak_ptr<> */ if(nullptr != m_CellPhasesPtr.lock().get()) { m_CellPhases = m_CellPhasesPtr.lock()->getPointer(0); @@ -625,6 +657,17 @@ void PackPrimaryPhases::dataCheck() QVector tDims(1, 0); m->createNonPrereqAttributeMatrix(this, getOutputCellFeatureAttributeMatrixName(), tDims, AttributeMatrix::Type::CellFeature); + PackPrimaryPhases::SaveMethod saveMethod = static_cast(getSaveGeometricDescriptions()); + if (saveMethod == PackPrimaryPhases::SaveMethod::SaveToNew) + { + m->createNonPrereqAttributeMatrix(this, getNewAttributeMatrixPath().getAttributeMatrixName(), tDims, AttributeMatrix::Type::CellFeature); + } + else if (saveMethod == PackPrimaryPhases::SaveMethod::AppendToExisting) + { + int err = 0; + m->getPrereqAttributeMatrix(this, getSelectedAttributeMatrixPath().getAttributeMatrixName(), err); + } + AttributeMatrix::Pointer outEnsembleAttrMat = AttributeMatrix::NullPointer(); if(m->doesAttributeMatrixExist(getOutputCellEnsembleAttributeMatrixName())) { @@ -645,7 +688,7 @@ void PackPrimaryPhases::dataCheck() // Feature Data tempPath.update(getOutputCellAttributeMatrixPath().getDataContainerName(), getOutputCellFeatureAttributeMatrixName(), getFeaturePhasesArrayName()); m_FeaturePhasesPtr = getDataContainerArray()->createNonPrereqArrayFromPath, AbstractFilter, int32_t>( - this, tempPath, 0, cDims); /* Assigns the shared_ptr<> to an instance variable that is a weak_ptr<> */ + this, tempPath, 0, cDims); /* Assigns the shared_ptr<> to an instance variable that is a weak_ptr<> */ if(nullptr != m_FeaturePhasesPtr.lock().get()) { m_FeaturePhases = m_FeaturePhasesPtr.lock()->getPointer(0); @@ -660,7 +703,7 @@ void PackPrimaryPhases::dataCheck() tempPath.update(getOutputCellAttributeMatrixPath().getDataContainerName(), getOutputCellFeatureAttributeMatrixName(), m_EquivalentDiametersArrayName); m_EquivalentDiametersPtr = getDataContainerArray()->createNonPrereqArrayFromPath, AbstractFilter, float>( - this, tempPath, 0, cDims); /* Assigns the shared_ptr<> to an instance variable that is a weak_ptr<> */ + this, tempPath, 0, cDims); /* Assigns the shared_ptr<> to an instance variable that is a weak_ptr<> */ if(nullptr != m_EquivalentDiametersPtr.lock().get()) { m_EquivalentDiameters = m_EquivalentDiametersPtr.lock()->getPointer(0); @@ -693,7 +736,7 @@ void PackPrimaryPhases::dataCheck() tempPath.update(getOutputCellAttributeMatrixPath().getDataContainerName(), getOutputCellFeatureAttributeMatrixName(), m_AxisEulerAnglesArrayName); m_AxisEulerAnglesPtr = getDataContainerArray()->createNonPrereqArrayFromPath, AbstractFilter, float>( - this, tempPath, 0, cDims); /* Assigns the shared_ptr<> to an instance variable that is a weak_ptr<> */ + this, tempPath, 0, cDims); /* Assigns the shared_ptr<> to an instance variable that is a weak_ptr<> */ if(nullptr != m_AxisEulerAnglesPtr.lock().get()) { m_AxisEulerAngles = m_AxisEulerAnglesPtr.lock()->getPointer(0); @@ -711,7 +754,7 @@ void PackPrimaryPhases::dataCheck() cDims[0] = 1; tempPath.update(getOutputCellAttributeMatrixPath().getDataContainerName(), getOutputCellEnsembleAttributeMatrixName(), getNumFeaturesArrayName()); m_NumFeaturesPtr = getDataContainerArray()->createNonPrereqArrayFromPath, AbstractFilter, int32_t>( - this, tempPath, 0, cDims); /* Assigns the shared_ptr<> to an instance variable that is a weak_ptr<> */ + this, tempPath, 0, cDims); /* Assigns the shared_ptr<> to an instance variable that is a weak_ptr<> */ if(nullptr != m_NumFeaturesPtr.lock().get()) { m_NumFeatures = m_NumFeaturesPtr.lock()->getPointer(0); @@ -1049,7 +1092,7 @@ void PackPrimaryPhases::placeFeatures(Int32ArrayType::Pointer featureOwnersPtr) m->getGeometryAs()->getDimensions(udims); int64_t dims[3] = { - static_cast(udims[0]), static_cast(udims[1]), static_cast(udims[2]), + static_cast(udims[0]), static_cast(udims[1]), static_cast(udims[2]), }; float xRes = m->getGeometryAs()->getXRes(); @@ -1095,9 +1138,9 @@ void PackPrimaryPhases::placeFeatures(Int32ArrayType::Pointer featureOwnersPtr) QString ss = QObject::tr("Tried to cast a statsDataArray[%1].get() to a PrimaryStatsData* " "pointer but this resulted in a nullptr pointer. The value at m_PhaseTypes[%2] = %3 does not match up " "with the type of pointer stored in the StatsDataArray (PrimaryStatsData)\n") - .arg(i) - .arg(i) - .arg(m_PhaseTypes[i]); + .arg(i) + .arg(i) + .arg(m_PhaseTypes[i]); setErrorCondition(-78007); notifyErrorMessage(getHumanLabel(), ss, getErrorCondition()); return; @@ -1720,7 +1763,7 @@ void PackPrimaryPhases::generateFeature(int32_t phase, Feature_t* feature, uint3 { SIMPL_RANDOMNG_NEW_SEEDED(m_Seed) - StatsDataArray& statsDataArray = *(m_StatsDataArray.lock().get()); + StatsDataArray& statsDataArray = *(m_StatsDataArray.lock().get()); float r1 = 1.0f; float a2 = 0.0f, a3 = 0.0f; @@ -2569,7 +2612,7 @@ void PackPrimaryPhases::assignVoxels() m->getGeometryAs()->getDimensions(udims); int64_t dims[3] = { - static_cast(udims[0]), static_cast(udims[1]), static_cast(udims[2]), + static_cast(udims[0]), static_cast(udims[1]), static_cast(udims[2]), }; #ifdef SIMPLib_USE_PARALLEL_ALGORITHMS @@ -2725,7 +2768,7 @@ void PackPrimaryPhases::assignVoxels() float radCur[3] = {radcur1, radcur2, radcur3}; float xx[3] = {xc, yc, zc}; ShapeOps* shapeOps = m_ShapeOps[shapeclass].get(); -//#if 0 + //#if 0 #ifdef SIMPLib_USE_PARALLEL_ALGORITHMS if(doParallel == true) { @@ -2984,7 +3027,7 @@ void PackPrimaryPhases::cleanupFeatures() m->getGeometryAs()->getDimensions(udims); int64_t dims[3] = { - static_cast(udims[0]), static_cast(udims[1]), static_cast(udims[2]), + static_cast(udims[0]), static_cast(udims[1]), static_cast(udims[2]), }; int64_t neighpoints[6] = {0, 0, 0, 0, 0, 0}; @@ -3230,7 +3273,7 @@ int32_t PackPrimaryPhases::estimateNumFeatures(size_t xpoints, size_t ypoints, s SIMPL_RANDOMNG_NEW() - std::vector primaryPhasesLocal; + std::vector primaryPhasesLocal; std::vector primaryPhaseFractionsLocal; double totalprimaryfractions = 0.0; // find which phases are primary phases @@ -3412,18 +3455,45 @@ void PackPrimaryPhases::moveShapeDescriptions() AttributeMatrix::Pointer cellFeatureAttrMat = m->getAttributeMatrix(m_OutputCellFeatureAttributeMatrixName); QVector tDims(1, 0); - AttributeMatrix::Pointer shapeDescriptions = AttributeMatrix::New(tDims, "Synthetic Shape Parameters (Primary Phase)", AttributeMatrix::Type::Generic); + + QList attrArrays; foreach(const QString name, names) { - IDataArray::Pointer p = cellFeatureAttrMat->removeAttributeArray(name); - size_t numTuples = p->getNumberOfTuples(); - tDims[0] = numTuples; - shapeDescriptions->resizeAttributeArrays(tDims); - shapeDescriptions->addAttributeArray(p->getName(), p); + attrArrays.push_back(cellFeatureAttrMat->removeAttributeArray(name)); } - if(getSaveGeometricDescriptions()) + + PackPrimaryPhases::SaveMethod saveMethod = static_cast(getSaveGeometricDescriptions()); + foreach (IDataArray::Pointer p, attrArrays) { - m->addAttributeMatrix(shapeDescriptions->getName(), shapeDescriptions); + if (saveMethod == PackPrimaryPhases::SaveMethod::SaveToNew) + { + AttributeMatrix::Pointer shapeDescriptions = getDataContainerArray()->getAttributeMatrix(getNewAttributeMatrixPath()); + if (shapeDescriptions != AttributeMatrix::NullPointer()) + { + size_t numTuples = p->getNumberOfTuples(); + tDims[0] = numTuples; + shapeDescriptions->resizeAttributeArrays(tDims); + shapeDescriptions->addAttributeArray(p->getName(), p); + } + } + else if (saveMethod == PackPrimaryPhases::SaveMethod::AppendToExisting) + { + AttributeMatrix::Pointer shapeDescriptions = getDataContainerArray()->getAttributeMatrix(getSelectedAttributeMatrixPath()); + if (shapeDescriptions != AttributeMatrix::NullPointer()) + { + size_t attrArrayTuples = p->getNumberOfTuples(); + size_t selectedTuples = shapeDescriptions->getTupleDimensions()[0]; + tDims[0] = attrArrayTuples + selectedTuples; + shapeDescriptions->resizeAttributeArrays(tDims); + + int err = 0; + IDataArray::Pointer destArray = shapeDescriptions->getPrereqIDataArray(this, p->getName(), err); + if (destArray != IDataArray::NullPointer()) + { + destArray->copyData(selectedTuples, p); + } + } + } } } diff --git a/Source/Plugins/SyntheticBuilding/SyntheticBuildingFilters/PackPrimaryPhases.h b/Source/Plugins/SyntheticBuilding/SyntheticBuildingFilters/PackPrimaryPhases.h index 9883b750e1..80a8e1d411 100644 --- a/Source/Plugins/SyntheticBuilding/SyntheticBuildingFilters/PackPrimaryPhases.h +++ b/Source/Plugins/SyntheticBuilding/SyntheticBuildingFilters/PackPrimaryPhases.h @@ -68,6 +68,15 @@ class PackPrimaryPhases : public AbstractFilter virtual ~PackPrimaryPhases(); + using EnumType = unsigned int; + + enum class SaveMethod : EnumType + { + SaveToNew = 0, + AppendToExisting = 1, + DoNotSave = 2 + }; + SIMPL_FILTER_PARAMETER(DataArrayPath, OutputCellAttributeMatrixPath) Q_PROPERTY(DataArrayPath OutputCellAttributeMatrixPath READ getOutputCellAttributeMatrixPath WRITE setOutputCellAttributeMatrixPath) @@ -122,8 +131,14 @@ class PackPrimaryPhases : public AbstractFilter SIMPL_FILTER_PARAMETER(bool, WriteGoalAttributes) Q_PROPERTY(bool WriteGoalAttributes READ getWriteGoalAttributes WRITE setWriteGoalAttributes) - SIMPL_FILTER_PARAMETER(bool, SaveGeometricDescriptions) - Q_PROPERTY(bool SaveGeometricDescriptions READ getSaveGeometricDescriptions WRITE setSaveGeometricDescriptions) + SIMPL_FILTER_PARAMETER(int, SaveGeometricDescriptions) + Q_PROPERTY(int SaveGeometricDescriptions READ getSaveGeometricDescriptions WRITE setSaveGeometricDescriptions) + + SIMPL_FILTER_PARAMETER(DataArrayPath, NewAttributeMatrixPath) + Q_PROPERTY(DataArrayPath NewAttributeMatrixPath READ getNewAttributeMatrixPath WRITE setNewAttributeMatrixPath) + + SIMPL_FILTER_PARAMETER(DataArrayPath, SelectedAttributeMatrixPath) + Q_PROPERTY(DataArrayPath SelectedAttributeMatrixPath READ getSelectedAttributeMatrixPath WRITE setSelectedAttributeMatrixPath) /** * @brief getCompiledLibraryName Reimplemented from @see AbstractFilter class From 004b180f58d84d32cd367ade806b9363873e5304 Mon Sep 17 00:00:00 2001 From: Joey Kleingers Date: Mon, 3 Jul 2017 10:39:20 -0400 Subject: [PATCH 02/11] Adding constants needed by the filters. --- .../SyntheticBuildingFilters/InsertPrecipitatePhases.cpp | 4 +++- .../SyntheticBuilding/SyntheticBuildingFilters/PackPrimaryPhases.cpp | 4 +++- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/Source/Plugins/SyntheticBuilding/SyntheticBuildingFilters/InsertPrecipitatePhases.cpp b/Source/Plugins/SyntheticBuilding/SyntheticBuildingFilters/InsertPrecipitatePhases.cpp index e0a7eeae8c..a952517301 100644 --- a/Source/Plugins/SyntheticBuilding/SyntheticBuildingFilters/InsertPrecipitatePhases.cpp +++ b/Source/Plugins/SyntheticBuilding/SyntheticBuildingFilters/InsertPrecipitatePhases.cpp @@ -62,6 +62,8 @@ // Include the MOC generated file for this class #include "moc_InsertPrecipitatePhases.cpp" +const QString PrecipitateSyntheticShapeParametersName("Synthetic Shape Parameters (Precipitate)"); + // ----------------------------------------------------------------------------- // // ----------------------------------------------------------------------------- @@ -93,7 +95,7 @@ InsertPrecipitatePhases::InsertPrecipitatePhases() , m_AxisLengthsArrayName(SIMPL::FeatureData::AxisLengths) , m_NumFeaturesArrayPath(SIMPL::Defaults::SyntheticVolumeDataContainerName, SIMPL::Defaults::CellEnsembleAttributeMatrixName, SIMPL::EnsembleData::NumFeatures) , m_SaveGeometricDescriptions(false) - , m_NewAttributeMatrixPath(SIMPL::Defaults::SyntheticVolumeDataContainerName, SIMPL::Defaults::PrecipitateSyntheticShapeParametersName, "") + , m_NewAttributeMatrixPath(SIMPL::Defaults::SyntheticVolumeDataContainerName, PrecipitateSyntheticShapeParametersName, "") , m_FeatureIds(nullptr) , m_CellPhases(nullptr) , m_Mask(nullptr) diff --git a/Source/Plugins/SyntheticBuilding/SyntheticBuildingFilters/PackPrimaryPhases.cpp b/Source/Plugins/SyntheticBuilding/SyntheticBuildingFilters/PackPrimaryPhases.cpp index e5b0b6e14e..12868d62d8 100644 --- a/Source/Plugins/SyntheticBuilding/SyntheticBuildingFilters/PackPrimaryPhases.cpp +++ b/Source/Plugins/SyntheticBuilding/SyntheticBuildingFilters/PackPrimaryPhases.cpp @@ -235,6 +235,8 @@ class AssignVoxelsGapsImpl // Include the MOC generated file for this class #include "moc_PackPrimaryPhases.cpp" +const QString PrimaryPhaseSyntheticShapeParametersName("Synthetic Shape Parameters (Primary Phase)"); + // ----------------------------------------------------------------------------- // // ----------------------------------------------------------------------------- @@ -259,7 +261,7 @@ PackPrimaryPhases::PackPrimaryPhases() , m_PeriodicBoundaries(false) , m_WriteGoalAttributes(false) , m_SaveGeometricDescriptions(false) - , m_NewAttributeMatrixPath(SIMPL::Defaults::SyntheticVolumeDataContainerName, SIMPL::Defaults::PrimaryPhaseSyntheticShapeParametersName, "") + , m_NewAttributeMatrixPath(SIMPL::Defaults::SyntheticVolumeDataContainerName, PrimaryPhaseSyntheticShapeParametersName, "") , m_NeighborhoodsArrayName(SIMPL::FeatureData::Neighborhoods) , m_CentroidsArrayName(SIMPL::FeatureData::Centroids) , m_VolumesArrayName(SIMPL::FeatureData::Volumes) From 716127051f46869a186601c264d23784f7bd3e3e Mon Sep 17 00:00:00 2001 From: Joey Kleingers Date: Mon, 3 Jul 2017 17:05:28 -0400 Subject: [PATCH 03/11] Working on fixing a bug that was causing an incorrect tuple count for appended arrays. --- .../InsertPrecipitatePhases.cpp | 35 ++++++++++++++-------- 1 file changed, 23 insertions(+), 12 deletions(-) diff --git a/Source/Plugins/SyntheticBuilding/SyntheticBuildingFilters/InsertPrecipitatePhases.cpp b/Source/Plugins/SyntheticBuilding/SyntheticBuildingFilters/InsertPrecipitatePhases.cpp index a952517301..63a9b434f6 100644 --- a/Source/Plugins/SyntheticBuilding/SyntheticBuildingFilters/InsertPrecipitatePhases.cpp +++ b/Source/Plugins/SyntheticBuilding/SyntheticBuildingFilters/InsertPrecipitatePhases.cpp @@ -2856,34 +2856,45 @@ void InsertPrecipitatePhases::moveShapeDescriptions() } InsertPrecipitatePhases::SaveMethod saveMethod = static_cast(getSaveGeometricDescriptions()); - foreach (IDataArray::Pointer p, attrArrays) + if (saveMethod == InsertPrecipitatePhases::SaveMethod::SaveToNew) { - if (saveMethod == InsertPrecipitatePhases::SaveMethod::SaveToNew) + AttributeMatrix::Pointer shapeDescriptions = getDataContainerArray()->getAttributeMatrix(getNewAttributeMatrixPath()); + if (shapeDescriptions != AttributeMatrix::NullPointer()) { - AttributeMatrix::Pointer shapeDescriptions = getDataContainerArray()->getAttributeMatrix(getNewAttributeMatrixPath()); - if (shapeDescriptions != AttributeMatrix::NullPointer()) + if (attrArrays.size() > 0) { - size_t numTuples = p->getNumberOfTuples(); - tDims[0] = numTuples; + size_t numTuples = attrArrays[0]->getNumberOfTuples(); + size_t selectedTuples = shapeDescriptions->getTupleDimensions()[0]; + tDims[0] = numTuples + selectedTuples; shapeDescriptions->resizeAttributeArrays(tDims); + } + + foreach (IDataArray::Pointer p, attrArrays) + { shapeDescriptions->addAttributeArray(p->getName(), p); } } - else if (saveMethod == InsertPrecipitatePhases::SaveMethod::AppendToExisting) + } + else if (saveMethod == InsertPrecipitatePhases::SaveMethod::AppendToExisting) + { + AttributeMatrix::Pointer shapeDescriptions = getDataContainerArray()->getAttributeMatrix(getSelectedAttributeMatrixPath()); + if (shapeDescriptions != AttributeMatrix::NullPointer()) { - AttributeMatrix::Pointer shapeDescriptions = getDataContainerArray()->getAttributeMatrix(getSelectedAttributeMatrixPath()); - if (shapeDescriptions != AttributeMatrix::NullPointer()) + if (attrArrays.size() > 0) { - size_t attrArrayTuples = p->getNumberOfTuples(); + size_t numTuples = attrArrays[0]->getNumberOfTuples(); size_t selectedTuples = shapeDescriptions->getTupleDimensions()[0]; - tDims[0] = attrArrayTuples + selectedTuples; + tDims[0] = numTuples + selectedTuples; shapeDescriptions->resizeAttributeArrays(tDims); + } + foreach (IDataArray::Pointer p, attrArrays) + { int err = 0; IDataArray::Pointer destArray = shapeDescriptions->getPrereqIDataArray(this, p->getName(), err); if (destArray != IDataArray::NullPointer()) { - destArray->copyData(selectedTuples, p); + destArray->copyData(tDims[0], p); } } } From bf6804d444dd29e5303c60bc6c5d492b7d522ca8 Mon Sep 17 00:00:00 2001 From: Joey Kleingers Date: Wed, 5 Jul 2017 13:01:44 -0400 Subject: [PATCH 04/11] Fixing bug that was causing values to be incorrectly appended to existing arrays. --- .../InsertPrecipitatePhases.cpp | 39 +++++++++--------- .../SyntheticBuildingFilters/PackPrimaryPhases.cpp | 47 +++++++++++++--------- 2 files changed, 49 insertions(+), 37 deletions(-) diff --git a/Source/Plugins/SyntheticBuilding/SyntheticBuildingFilters/InsertPrecipitatePhases.cpp b/Source/Plugins/SyntheticBuilding/SyntheticBuildingFilters/InsertPrecipitatePhases.cpp index 63a9b434f6..a0bafabfa9 100644 --- a/Source/Plugins/SyntheticBuilding/SyntheticBuildingFilters/InsertPrecipitatePhases.cpp +++ b/Source/Plugins/SyntheticBuilding/SyntheticBuildingFilters/InsertPrecipitatePhases.cpp @@ -449,7 +449,8 @@ void InsertPrecipitatePhases::dataCheck() } QVector tDims(1, 0); - DataContainer::Pointer m = getDataContainerArray()->getDataContainer(getFeaturePhasesArrayPath()); + DataContainer::Pointer m = getDataContainerArray()->getPrereqDataContainer(this, getFeaturePhasesArrayPath().getDataContainerName()); + if (getErrorCondition() < 0) { return; } InsertPrecipitatePhases::SaveMethod saveMethod = static_cast(getSaveGeometricDescriptions()); if (saveMethod == InsertPrecipitatePhases::SaveMethod::SaveToNew) @@ -2858,43 +2859,43 @@ void InsertPrecipitatePhases::moveShapeDescriptions() InsertPrecipitatePhases::SaveMethod saveMethod = static_cast(getSaveGeometricDescriptions()); if (saveMethod == InsertPrecipitatePhases::SaveMethod::SaveToNew) { - AttributeMatrix::Pointer shapeDescriptions = getDataContainerArray()->getAttributeMatrix(getNewAttributeMatrixPath()); - if (shapeDescriptions != AttributeMatrix::NullPointer()) + AttributeMatrix::Pointer newAM = getDataContainerArray()->getAttributeMatrix(getNewAttributeMatrixPath()); + if (newAM != AttributeMatrix::NullPointer()) { if (attrArrays.size() > 0) { - size_t numTuples = attrArrays[0]->getNumberOfTuples(); - size_t selectedTuples = shapeDescriptions->getTupleDimensions()[0]; - tDims[0] = numTuples + selectedTuples; - shapeDescriptions->resizeAttributeArrays(tDims); + size_t incomingArrayTupleCount = attrArrays[0]->getNumberOfTuples(); + size_t newAMTupleCount = newAM->getTupleDimensions()[0]; + tDims[0] = incomingArrayTupleCount + newAMTupleCount; + newAM->resizeAttributeArrays(tDims); } - foreach (IDataArray::Pointer p, attrArrays) + foreach (IDataArray::Pointer incomingArray, attrArrays) { - shapeDescriptions->addAttributeArray(p->getName(), p); + newAM->addAttributeArray(incomingArray->getName(), incomingArray); } } } else if (saveMethod == InsertPrecipitatePhases::SaveMethod::AppendToExisting) { - AttributeMatrix::Pointer shapeDescriptions = getDataContainerArray()->getAttributeMatrix(getSelectedAttributeMatrixPath()); - if (shapeDescriptions != AttributeMatrix::NullPointer()) + AttributeMatrix::Pointer existingAM = getDataContainerArray()->getAttributeMatrix(getSelectedAttributeMatrixPath()); + if (existingAM != AttributeMatrix::NullPointer()) { + size_t existingAMTupleCount = existingAM->getTupleDimensions()[0]; if (attrArrays.size() > 0) { - size_t numTuples = attrArrays[0]->getNumberOfTuples(); - size_t selectedTuples = shapeDescriptions->getTupleDimensions()[0]; - tDims[0] = numTuples + selectedTuples; - shapeDescriptions->resizeAttributeArrays(tDims); + size_t incomingArrayTupleCount = attrArrays[0]->getNumberOfTuples(); + tDims[0] = incomingArrayTupleCount + existingAMTupleCount; + existingAM->resizeAttributeArrays(tDims); } - foreach (IDataArray::Pointer p, attrArrays) + foreach (IDataArray::Pointer incomingArray, attrArrays) { int err = 0; - IDataArray::Pointer destArray = shapeDescriptions->getPrereqIDataArray(this, p->getName(), err); - if (destArray != IDataArray::NullPointer()) + IDataArray::Pointer existingArray = existingAM->getPrereqIDataArray(this, incomingArray->getName(), err); + if (existingArray != IDataArray::NullPointer()) { - destArray->copyData(tDims[0], p); + existingArray->copyData(existingAMTupleCount, incomingArray); } } } diff --git a/Source/Plugins/SyntheticBuilding/SyntheticBuildingFilters/PackPrimaryPhases.cpp b/Source/Plugins/SyntheticBuilding/SyntheticBuildingFilters/PackPrimaryPhases.cpp index 12868d62d8..ac5b24f226 100644 --- a/Source/Plugins/SyntheticBuilding/SyntheticBuildingFilters/PackPrimaryPhases.cpp +++ b/Source/Plugins/SyntheticBuilding/SyntheticBuildingFilters/PackPrimaryPhases.cpp @@ -3465,34 +3465,45 @@ void PackPrimaryPhases::moveShapeDescriptions() } PackPrimaryPhases::SaveMethod saveMethod = static_cast(getSaveGeometricDescriptions()); - foreach (IDataArray::Pointer p, attrArrays) + if (saveMethod == PackPrimaryPhases::SaveMethod::SaveToNew) { - if (saveMethod == PackPrimaryPhases::SaveMethod::SaveToNew) + AttributeMatrix::Pointer newAM = getDataContainerArray()->getAttributeMatrix(getNewAttributeMatrixPath()); + if (newAM != AttributeMatrix::NullPointer()) { - AttributeMatrix::Pointer shapeDescriptions = getDataContainerArray()->getAttributeMatrix(getNewAttributeMatrixPath()); - if (shapeDescriptions != AttributeMatrix::NullPointer()) + if (attrArrays.size() > 0) { - size_t numTuples = p->getNumberOfTuples(); - tDims[0] = numTuples; - shapeDescriptions->resizeAttributeArrays(tDims); - shapeDescriptions->addAttributeArray(p->getName(), p); + size_t incomingArrayTupleCount = attrArrays[0]->getNumberOfTuples(); + size_t newAMTupleCount = newAM->getTupleDimensions()[0]; + tDims[0] = incomingArrayTupleCount + newAMTupleCount; + newAM->resizeAttributeArrays(tDims); + } + + foreach (IDataArray::Pointer incomingArray, attrArrays) + { + newAM->addAttributeArray(incomingArray->getName(), incomingArray); } } - else if (saveMethod == PackPrimaryPhases::SaveMethod::AppendToExisting) + } + else if (saveMethod == PackPrimaryPhases::SaveMethod::AppendToExisting) + { + AttributeMatrix::Pointer existingAM = getDataContainerArray()->getAttributeMatrix(getSelectedAttributeMatrixPath()); + if (existingAM != AttributeMatrix::NullPointer()) { - AttributeMatrix::Pointer shapeDescriptions = getDataContainerArray()->getAttributeMatrix(getSelectedAttributeMatrixPath()); - if (shapeDescriptions != AttributeMatrix::NullPointer()) + if (attrArrays.size() > 0) { - size_t attrArrayTuples = p->getNumberOfTuples(); - size_t selectedTuples = shapeDescriptions->getTupleDimensions()[0]; - tDims[0] = attrArrayTuples + selectedTuples; - shapeDescriptions->resizeAttributeArrays(tDims); + size_t incomingArrayTupleCount = attrArrays[0]->getNumberOfTuples(); + size_t existingAMTupleCount = existingAM->getTupleDimensions()[0]; + tDims[0] = incomingArrayTupleCount + existingAMTupleCount; + existingAM->resizeAttributeArrays(tDims); + } + foreach (IDataArray::Pointer incomingArray, attrArrays) + { int err = 0; - IDataArray::Pointer destArray = shapeDescriptions->getPrereqIDataArray(this, p->getName(), err); - if (destArray != IDataArray::NullPointer()) + IDataArray::Pointer existingArray = existingAM->getPrereqIDataArray(this, incomingArray->getName(), err); + if (existingArray != IDataArray::NullPointer()) { - destArray->copyData(selectedTuples, p); + existingArray->copyData(tDims[0], incomingArray); } } } From 37d1e4f960bc78de4d0f6e746fae48b24c3bd011 Mon Sep 17 00:00:00 2001 From: Joey Kleingers Date: Wed, 5 Jul 2017 13:32:08 -0400 Subject: [PATCH 05/11] Clang formatting two files. --- .../InsertPrecipitatePhases.cpp | 506 +++++++++++++-------- .../SyntheticBuildingFilters/PackPrimaryPhases.cpp | 414 +++++++++-------- 2 files changed, 526 insertions(+), 394 deletions(-) diff --git a/Source/Plugins/SyntheticBuilding/SyntheticBuildingFilters/InsertPrecipitatePhases.cpp b/Source/Plugins/SyntheticBuilding/SyntheticBuildingFilters/InsertPrecipitatePhases.cpp index a0bafabfa9..1489092ad4 100644 --- a/Source/Plugins/SyntheticBuilding/SyntheticBuildingFilters/InsertPrecipitatePhases.cpp +++ b/Source/Plugins/SyntheticBuilding/SyntheticBuildingFilters/InsertPrecipitatePhases.cpp @@ -1,7 +1,8 @@ /* ============================================================================ * Copyright (c) 2009-2016 BlueQuartz Software, LLC * -* Redistribution and use in source and binary forms, with or without modification, +* Redistribution and use in source and binary forms, with or without +* modification, * are permitted provided that the following conditions are met: * * Redistributions of source code must retain the above copyright notice, this @@ -11,8 +12,10 @@ * list of conditions and the following disclaimer in the documentation and/or * other materials provided with the distribution. * -* Neither the name of BlueQuartz Software, the US Air Force, nor the names of its -* contributors may be used to endorse or promote products derived from this software +* Neither the name of BlueQuartz Software, the US Air Force, nor the names of +* its +* contributors may be used to endorse or promote products derived from this +* software * without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" @@ -68,50 +71,50 @@ const QString PrecipitateSyntheticShapeParametersName("Synthetic Shape Parameter // // ----------------------------------------------------------------------------- InsertPrecipitatePhases::InsertPrecipitatePhases() - : AbstractFilter() - , m_ClusteringListArrayName(SIMPL::FeatureData::ClusteringList) - , m_ErrorOutputFile("") - , m_CsvOutputFile("") - , m_MaskArrayPath(SIMPL::Defaults::ImageDataContainerName, SIMPL::Defaults::CellAttributeMatrixName, SIMPL::CellData::Mask) - , m_UseMask(false) - , m_HavePrecips(false) - , m_PrecipInputFile("") - , m_PeriodicBoundaries(false) - , m_MatchRDF(false) - , m_WriteGoalAttributes(false) - , m_InputStatsArrayPath(SIMPL::Defaults::StatsGenerator, SIMPL::Defaults::CellEnsembleAttributeMatrixName, SIMPL::EnsembleData::Statistics) - , m_InputPhaseTypesArrayPath(SIMPL::Defaults::StatsGenerator, SIMPL::Defaults::CellEnsembleAttributeMatrixName, SIMPL::EnsembleData::PhaseTypes) - , m_InputShapeTypesArrayPath(SIMPL::Defaults::StatsGenerator, SIMPL::Defaults::CellEnsembleAttributeMatrixName, SIMPL::EnsembleData::ShapeTypes) - , m_FeatureIdsArrayPath(SIMPL::Defaults::SyntheticVolumeDataContainerName, SIMPL::Defaults::CellAttributeMatrixName, SIMPL::CellData::FeatureIds) - , m_CellPhasesArrayPath(SIMPL::Defaults::SyntheticVolumeDataContainerName, SIMPL::Defaults::CellAttributeMatrixName, SIMPL::CellData::Phases) - , m_BoundaryCellsArrayPath(SIMPL::Defaults::SyntheticVolumeDataContainerName, SIMPL::Defaults::CellAttributeMatrixName, SIMPL::CellData::BoundaryCells) - , m_FeaturePhasesArrayPath(SIMPL::Defaults::SyntheticVolumeDataContainerName, SIMPL::Defaults::CellFeatureAttributeMatrixName, SIMPL::FeatureData::Phases) - , m_NumCellsArrayName(SIMPL::FeatureData::NumCells) - , m_EquivalentDiametersArrayName(SIMPL::FeatureData::EquivalentDiameters) - , m_VolumesArrayName(SIMPL::FeatureData::Volumes) - , m_Omega3sArrayName(SIMPL::FeatureData::Omega3s) - , m_CentroidsArrayName(SIMPL::FeatureData::Centroids) - , m_AxisEulerAnglesArrayName(SIMPL::FeatureData::AxisEulerAngles) - , m_AxisLengthsArrayName(SIMPL::FeatureData::AxisLengths) - , m_NumFeaturesArrayPath(SIMPL::Defaults::SyntheticVolumeDataContainerName, SIMPL::Defaults::CellEnsembleAttributeMatrixName, SIMPL::EnsembleData::NumFeatures) - , m_SaveGeometricDescriptions(false) - , m_NewAttributeMatrixPath(SIMPL::Defaults::SyntheticVolumeDataContainerName, PrecipitateSyntheticShapeParametersName, "") - , m_FeatureIds(nullptr) - , m_CellPhases(nullptr) - , m_Mask(nullptr) - , m_BoundaryCells(nullptr) - , m_AxisEulerAngles(nullptr) - , m_Centroids(nullptr) - , m_AxisLengths(nullptr) - , m_Volumes(nullptr) - , m_Omega3s(nullptr) - , m_EquivalentDiameters(nullptr) - , m_FeaturePhases(nullptr) - , m_NumCells(nullptr) - , m_PhaseTypes(nullptr) - , m_ShapeTypes(nullptr) - , m_NumFeatures(nullptr) - , m_Neighbors(nullptr) +: AbstractFilter() +, m_ClusteringListArrayName(SIMPL::FeatureData::ClusteringList) +, m_ErrorOutputFile("") +, m_CsvOutputFile("") +, m_MaskArrayPath(SIMPL::Defaults::ImageDataContainerName, SIMPL::Defaults::CellAttributeMatrixName, SIMPL::CellData::Mask) +, m_UseMask(false) +, m_HavePrecips(false) +, m_PrecipInputFile("") +, m_PeriodicBoundaries(false) +, m_MatchRDF(false) +, m_WriteGoalAttributes(false) +, m_InputStatsArrayPath(SIMPL::Defaults::StatsGenerator, SIMPL::Defaults::CellEnsembleAttributeMatrixName, SIMPL::EnsembleData::Statistics) +, m_InputPhaseTypesArrayPath(SIMPL::Defaults::StatsGenerator, SIMPL::Defaults::CellEnsembleAttributeMatrixName, SIMPL::EnsembleData::PhaseTypes) +, m_InputShapeTypesArrayPath(SIMPL::Defaults::StatsGenerator, SIMPL::Defaults::CellEnsembleAttributeMatrixName, SIMPL::EnsembleData::ShapeTypes) +, m_FeatureIdsArrayPath(SIMPL::Defaults::SyntheticVolumeDataContainerName, SIMPL::Defaults::CellAttributeMatrixName, SIMPL::CellData::FeatureIds) +, m_CellPhasesArrayPath(SIMPL::Defaults::SyntheticVolumeDataContainerName, SIMPL::Defaults::CellAttributeMatrixName, SIMPL::CellData::Phases) +, m_BoundaryCellsArrayPath(SIMPL::Defaults::SyntheticVolumeDataContainerName, SIMPL::Defaults::CellAttributeMatrixName, SIMPL::CellData::BoundaryCells) +, m_FeaturePhasesArrayPath(SIMPL::Defaults::SyntheticVolumeDataContainerName, SIMPL::Defaults::CellFeatureAttributeMatrixName, SIMPL::FeatureData::Phases) +, m_NumCellsArrayName(SIMPL::FeatureData::NumCells) +, m_EquivalentDiametersArrayName(SIMPL::FeatureData::EquivalentDiameters) +, m_VolumesArrayName(SIMPL::FeatureData::Volumes) +, m_Omega3sArrayName(SIMPL::FeatureData::Omega3s) +, m_CentroidsArrayName(SIMPL::FeatureData::Centroids) +, m_AxisEulerAnglesArrayName(SIMPL::FeatureData::AxisEulerAngles) +, m_AxisLengthsArrayName(SIMPL::FeatureData::AxisLengths) +, m_NumFeaturesArrayPath(SIMPL::Defaults::SyntheticVolumeDataContainerName, SIMPL::Defaults::CellEnsembleAttributeMatrixName, SIMPL::EnsembleData::NumFeatures) +, m_SaveGeometricDescriptions(false) +, m_NewAttributeMatrixPath(SIMPL::Defaults::SyntheticVolumeDataContainerName, PrecipitateSyntheticShapeParametersName, "") +, m_FeatureIds(nullptr) +, m_CellPhases(nullptr) +, m_Mask(nullptr) +, m_BoundaryCells(nullptr) +, m_AxisEulerAngles(nullptr) +, m_Centroids(nullptr) +, m_AxisLengths(nullptr) +, m_Volumes(nullptr) +, m_Omega3s(nullptr) +, m_EquivalentDiameters(nullptr) +, m_FeaturePhases(nullptr) +, m_NumCells(nullptr) +, m_PhaseTypes(nullptr) +, m_ShapeTypes(nullptr) +, m_NumFeatures(nullptr) +, m_Neighbors(nullptr) { initialize(); @@ -137,18 +140,15 @@ void InsertPrecipitatePhases::setupFilterParameters() parameters.push_back(SIMPL_NEW_LINKED_BOOL_FP("Use Mask", UseMask, FilterParameter::Parameter, InsertPrecipitatePhases, linkedProps)); parameters.push_back(SeparatorFilterParameter::New("Cell Data", FilterParameter::RequiredArray)); { - DataArraySelectionFilterParameter::RequirementType req = - DataArraySelectionFilterParameter::CreateRequirement(SIMPL::TypeNames::Int32, 1, AttributeMatrix::Type::Cell, IGeometry::Type::Image); + DataArraySelectionFilterParameter::RequirementType req = DataArraySelectionFilterParameter::CreateRequirement(SIMPL::TypeNames::Int32, 1, AttributeMatrix::Type::Cell, IGeometry::Type::Image); parameters.push_back(SIMPL_NEW_DA_SELECTION_FP("Feature Ids", FeatureIdsArrayPath, FilterParameter::RequiredArray, InsertPrecipitatePhases, req)); } { - DataArraySelectionFilterParameter::RequirementType req = - DataArraySelectionFilterParameter::CreateRequirement(SIMPL::TypeNames::Int32, 1, AttributeMatrix::Type::Cell, IGeometry::Type::Image); + DataArraySelectionFilterParameter::RequirementType req = DataArraySelectionFilterParameter::CreateRequirement(SIMPL::TypeNames::Int32, 1, AttributeMatrix::Type::Cell, IGeometry::Type::Image); parameters.push_back(SIMPL_NEW_DA_SELECTION_FP("Phases", CellPhasesArrayPath, FilterParameter::RequiredArray, InsertPrecipitatePhases, req)); } { - DataArraySelectionFilterParameter::RequirementType req = - DataArraySelectionFilterParameter::CreateRequirement(SIMPL::TypeNames::Int8, 1, AttributeMatrix::Type::Cell, IGeometry::Type::Image); + DataArraySelectionFilterParameter::RequirementType req = DataArraySelectionFilterParameter::CreateRequirement(SIMPL::TypeNames::Int8, 1, AttributeMatrix::Type::Cell, IGeometry::Type::Image); parameters.push_back(SIMPL_NEW_DA_SELECTION_FP("Boundary Cells", BoundaryCellsArrayPath, FilterParameter::RequiredArray, InsertPrecipitatePhases, req)); } { @@ -267,35 +267,51 @@ void InsertPrecipitatePhases::readFilterParameters(AbstractFilterParametersReade void InsertPrecipitatePhases::updateFeatureInstancePointers() { setErrorCondition(0); - if(nullptr != m_FeaturePhasesPtr.lock().get()) /* Validate the Weak Pointer wraps a non-nullptr pointer to a DataArray object */ + if(nullptr != m_FeaturePhasesPtr.lock().get()) /* Validate the Weak Pointer wraps a + non-nullptr pointer to a DataArray + object */ { m_FeaturePhases = m_FeaturePhasesPtr.lock()->getPointer(0); } /* Now assign the raw pointer to data from the DataArray object */ - if(nullptr != m_NumCellsPtr.lock().get()) /* Validate the Weak Pointer wraps a non-nullptr pointer to a DataArray object */ + if(nullptr != m_NumCellsPtr.lock().get()) /* Validate the Weak Pointer wraps a + non-nullptr pointer to a DataArray + object */ { m_NumCells = m_NumCellsPtr.lock()->getPointer(0); } /* Now assign the raw pointer to data from the DataArray object */ - if(nullptr != m_EquivalentDiametersPtr.lock().get()) /* Validate the Weak Pointer wraps a non-nullptr pointer to a DataArray object */ + if(nullptr != m_EquivalentDiametersPtr.lock().get()) /* Validate the Weak + Pointer wraps a + non-nullptr pointer + to a DataArray + object */ { m_EquivalentDiameters = m_EquivalentDiametersPtr.lock()->getPointer(0); } /* Now assign the raw pointer to data from the DataArray object */ - if(nullptr != m_VolumesPtr.lock().get()) /* Validate the Weak Pointer wraps a non-nullptr pointer to a DataArray object */ + if(nullptr != m_VolumesPtr.lock().get()) /* Validate the Weak Pointer wraps a non-nullptr pointer to a + DataArray object */ { m_Volumes = m_VolumesPtr.lock()->getPointer(0); } /* Now assign the raw pointer to data from the DataArray object */ - if(nullptr != m_Omega3sPtr.lock().get()) /* Validate the Weak Pointer wraps a non-nullptr pointer to a DataArray object */ + if(nullptr != m_Omega3sPtr.lock().get()) /* Validate the Weak Pointer wraps a non-nullptr pointer to a + DataArray object */ { m_Omega3s = m_Omega3sPtr.lock()->getPointer(0); } /* Now assign the raw pointer to data from the DataArray object */ - if(nullptr != m_CentroidsPtr.lock().get()) /* Validate the Weak Pointer wraps a non-nullptr pointer to a DataArray object */ + if(nullptr != m_CentroidsPtr.lock().get()) /* Validate the Weak Pointer wraps a + non-nullptr pointer to a DataArray + object */ { m_Centroids = m_CentroidsPtr.lock()->getPointer(0); } /* Now assign the raw pointer to data from the DataArray object */ - if(nullptr != m_AxisEulerAnglesPtr.lock().get()) /* Validate the Weak Pointer wraps a non-nullptr pointer to a DataArray object */ + if(nullptr != m_AxisEulerAnglesPtr.lock().get()) /* Validate the Weak Pointer wraps a + non-nullptr pointer to a + DataArray object */ { m_AxisEulerAngles = m_AxisEulerAnglesPtr.lock()->getPointer(0); } /* Now assign the raw pointer to data from the DataArray object */ - if(nullptr != m_AxisLengthsPtr.lock().get()) /* Validate the Weak Pointer wraps a non-nullptr pointer to a DataArray object */ + if(nullptr != m_AxisLengthsPtr.lock().get()) /* Validate the Weak Pointer + wraps a non-nullptr pointer + to a DataArray object */ { m_AxisLengths = m_AxisLengthsPtr.lock()->getPointer(0); } /* Now assign the raw pointer to data from the DataArray object */ @@ -370,7 +386,9 @@ void InsertPrecipitatePhases::dataCheck() QVector cDims(1, 1); m_PhaseTypesPtr = getDataContainerArray()->getPrereqArrayFromPath, AbstractFilter>(this, getInputPhaseTypesArrayPath(), cDims); - if(nullptr != m_PhaseTypesPtr.lock().get()) /* Validate the Weak Pointer wraps a non-nullptr pointer to a DataArray object */ + if(nullptr != m_PhaseTypesPtr.lock().get()) /* Validate the Weak Pointer wraps a + non-nullptr pointer to a DataArray + object */ { m_PhaseTypes = m_PhaseTypesPtr.lock()->getPointer(0); } /* Now assign the raw pointer to data from the DataArray object */ @@ -380,7 +398,9 @@ void InsertPrecipitatePhases::dataCheck() } m_ShapeTypesPtr = getDataContainerArray()->getPrereqArrayFromPath, AbstractFilter>(this, getInputShapeTypesArrayPath(), cDims); - if(nullptr != m_ShapeTypesPtr.lock().get()) /* Validate the Weak Pointer wraps a non-nullptr pointer to a DataArray object */ + if(nullptr != m_ShapeTypesPtr.lock().get()) /* Validate the Weak Pointer wraps a + non-nullptr pointer to a DataArray + object */ { m_ShapeTypes = m_ShapeTypesPtr.lock()->getPointer(0); } /* Now assign the raw pointer to data from the DataArray object */ @@ -402,9 +422,11 @@ void InsertPrecipitatePhases::dataCheck() } // Cell Data - m_FeatureIdsPtr = getDataContainerArray()->getPrereqArrayFromPath, AbstractFilter>(this, getFeatureIdsArrayPath(), - cDims); /* Assigns the shared_ptr<> to an instance variable that is a weak_ptr<> */ - if(nullptr != m_FeatureIdsPtr.lock().get()) /* Validate the Weak Pointer wraps a non-nullptr pointer to a DataArray object */ + m_FeatureIdsPtr = getDataContainerArray()->getPrereqArrayFromPath, AbstractFilter>(this, getFeatureIdsArrayPath(), cDims); /* Assigns the shared_ptr<> to an instance variable that + is a weak_ptr<> */ + if(nullptr != m_FeatureIdsPtr.lock().get()) /* Validate the Weak Pointer wraps a + non-nullptr pointer to a DataArray + object */ { m_FeatureIds = m_FeatureIdsPtr.lock()->getPointer(0); } /* Now assign the raw pointer to data from the DataArray object */ @@ -413,9 +435,11 @@ void InsertPrecipitatePhases::dataCheck() cellDataArrayPaths.push_back(getFeatureIdsArrayPath()); } - m_CellPhasesPtr = getDataContainerArray()->getPrereqArrayFromPath, AbstractFilter>(this, getCellPhasesArrayPath(), - cDims); /* Assigns the shared_ptr<> to an instance variable that is a weak_ptr<> */ - if(nullptr != m_CellPhasesPtr.lock().get()) /* Validate the Weak Pointer wraps a non-nullptr pointer to a DataArray object */ + m_CellPhasesPtr = getDataContainerArray()->getPrereqArrayFromPath, AbstractFilter>(this, getCellPhasesArrayPath(), cDims); /* Assigns the shared_ptr<> to an instance variable that + is a weak_ptr<> */ + if(nullptr != m_CellPhasesPtr.lock().get()) /* Validate the Weak Pointer wraps a + non-nullptr pointer to a DataArray + object */ { m_CellPhases = m_CellPhasesPtr.lock()->getPointer(0); } /* Now assign the raw pointer to data from the DataArray object */ @@ -424,9 +448,12 @@ void InsertPrecipitatePhases::dataCheck() cellDataArrayPaths.push_back(getCellPhasesArrayPath()); } - m_BoundaryCellsPtr = getDataContainerArray()->getPrereqArrayFromPath, AbstractFilter>(this, getBoundaryCellsArrayPath(), - cDims); /* Assigns the shared_ptr<> to an instance variable that is a weak_ptr<> */ - if(nullptr != m_BoundaryCellsPtr.lock().get()) /* Validate the Weak Pointer wraps a non-nullptr pointer to a DataArray object */ + m_BoundaryCellsPtr = + getDataContainerArray()->getPrereqArrayFromPath, AbstractFilter>(this, getBoundaryCellsArrayPath(), cDims); /* Assigns the shared_ptr<> to an instance variable that + is a weak_ptr<> */ + if(nullptr != m_BoundaryCellsPtr.lock().get()) /* Validate the Weak Pointer wraps a + non-nullptr pointer to a DataArray + object */ { m_BoundaryCells = m_BoundaryCellsPtr.lock()->getPointer(0); } /* Now assign the raw pointer to data from the DataArray object */ @@ -438,7 +465,9 @@ void InsertPrecipitatePhases::dataCheck() if(m_UseMask == true) { m_MaskPtr = getDataContainerArray()->getPrereqArrayFromPath, AbstractFilter>(this, getMaskArrayPath(), cDims); - if(nullptr != m_MaskPtr.lock().get()) /* Validate the Weak Pointer wraps a non-nullptr pointer to a DataArray object */ + if(nullptr != m_MaskPtr.lock().get()) /* Validate the Weak Pointer wraps a + non-nullptr pointer to a + DataArray object */ { m_Mask = m_MaskPtr.lock()->getPointer(0); } /* Now assign the raw pointer to data from the DataArray object */ @@ -450,89 +479,124 @@ void InsertPrecipitatePhases::dataCheck() QVector tDims(1, 0); DataContainer::Pointer m = getDataContainerArray()->getPrereqDataContainer(this, getFeaturePhasesArrayPath().getDataContainerName()); - if (getErrorCondition() < 0) { return; } + if(getErrorCondition() < 0) + { + return; + } InsertPrecipitatePhases::SaveMethod saveMethod = static_cast(getSaveGeometricDescriptions()); - if (saveMethod == InsertPrecipitatePhases::SaveMethod::SaveToNew) + if(saveMethod == InsertPrecipitatePhases::SaveMethod::SaveToNew) { m->createNonPrereqAttributeMatrix(this, getNewAttributeMatrixPath().getAttributeMatrixName(), tDims, AttributeMatrix::Type::CellFeature); } - else if (saveMethod == InsertPrecipitatePhases::SaveMethod::AppendToExisting) + else if(saveMethod == InsertPrecipitatePhases::SaveMethod::AppendToExisting) { int err = 0; m->getPrereqAttributeMatrix(this, getSelectedAttributeMatrixPath().getAttributeMatrixName(), err); } // Feature Data - m_FeaturePhasesPtr = getDataContainerArray()->getPrereqArrayFromPath, AbstractFilter>(this, getFeaturePhasesArrayPath(), - cDims); /* Assigns the shared_ptr<> to an instance variable that is a weak_ptr<> */ - if(nullptr != m_FeaturePhasesPtr.lock().get()) /* Validate the Weak Pointer wraps a non-nullptr pointer to a DataArray object */ + m_FeaturePhasesPtr = + getDataContainerArray()->getPrereqArrayFromPath, AbstractFilter>(this, getFeaturePhasesArrayPath(), cDims); /* Assigns the shared_ptr<> to an instance variable that + is a weak_ptr<> */ + if(nullptr != m_FeaturePhasesPtr.lock().get()) /* Validate the Weak Pointer wraps a + non-nullptr pointer to a DataArray + object */ { m_FeaturePhases = m_FeaturePhasesPtr.lock()->getPointer(0); } /* Now assign the raw pointer to data from the DataArray object */ tempPath.update(getFeaturePhasesArrayPath().getDataContainerName(), getFeaturePhasesArrayPath().getAttributeMatrixName(), getNumCellsArrayName()); - m_NumCellsPtr = getDataContainerArray()->createNonPrereqArrayFromPath, AbstractFilter, int32_t>( - this, tempPath, 0, cDims, getNumCellsArrayName()); /* Assigns the shared_ptr<> to an instance variable that is a weak_ptr<> */ - if(nullptr != m_NumCellsPtr.lock().get()) /* Validate the Weak Pointer wraps a non-nullptr pointer to a DataArray object */ + m_NumCellsPtr = getDataContainerArray()->createNonPrereqArrayFromPath, AbstractFilter, int32_t>(this, tempPath, 0, cDims, getNumCellsArrayName()); /* Assigns the shared_ptr<> + to an instance variable + that is a weak_ptr<> */ + if(nullptr != m_NumCellsPtr.lock().get()) /* Validate the Weak Pointer wraps a + non-nullptr pointer to a DataArray + object */ { m_NumCells = m_NumCellsPtr.lock()->getPointer(0); } /* Now assign the raw pointer to data from the DataArray object */ tempPath.update(getFeaturePhasesArrayPath().getDataContainerName(), getFeaturePhasesArrayPath().getAttributeMatrixName(), getEquivalentDiametersArrayName()); - m_EquivalentDiametersPtr = getDataContainerArray()->createNonPrereqArrayFromPath, AbstractFilter, float>( - this, tempPath, 0, cDims, getEquivalentDiametersArrayName()); /* Assigns the shared_ptr<> to an instance variable that is a weak_ptr<> */ - if(nullptr != m_EquivalentDiametersPtr.lock().get()) /* Validate the Weak Pointer wraps a non-nullptr pointer to a DataArray object */ + m_EquivalentDiametersPtr = + getDataContainerArray()->createNonPrereqArrayFromPath, AbstractFilter, float>(this, tempPath, 0, cDims, getEquivalentDiametersArrayName()); /* Assigns the + shared_ptr<> to + an instance + variable that is + a weak_ptr<> */ + if(nullptr != m_EquivalentDiametersPtr.lock().get()) /* Validate the Weak + Pointer wraps a + non-nullptr pointer + to a DataArray + object */ { m_EquivalentDiameters = m_EquivalentDiametersPtr.lock()->getPointer(0); } /* Now assign the raw pointer to data from the DataArray object */ tempPath.update(getFeaturePhasesArrayPath().getDataContainerName(), getFeaturePhasesArrayPath().getAttributeMatrixName(), getVolumesArrayName()); - m_VolumesPtr = getDataContainerArray()->createNonPrereqArrayFromPath, AbstractFilter, float>( - this, tempPath, 0, cDims, getVolumesArrayName()); /* Assigns the shared_ptr<> to an instance variable that is a weak_ptr<> */ - if(nullptr != m_VolumesPtr.lock().get()) /* Validate the Weak Pointer wraps a non-nullptr pointer to a DataArray object */ + m_VolumesPtr = getDataContainerArray()->createNonPrereqArrayFromPath, AbstractFilter, float>(this, tempPath, 0, cDims, getVolumesArrayName()); /* Assigns the shared_ptr<> to an + instance variable that is a + weak_ptr<> */ + if(nullptr != m_VolumesPtr.lock().get()) /* Validate the Weak Pointer wraps a non-nullptr pointer to a + DataArray object */ { m_Volumes = m_VolumesPtr.lock()->getPointer(0); } /* Now assign the raw pointer to data from the DataArray object */ tempPath.update(getFeaturePhasesArrayPath().getDataContainerName(), getFeaturePhasesArrayPath().getAttributeMatrixName(), getOmega3sArrayName()); - m_Omega3sPtr = getDataContainerArray()->createNonPrereqArrayFromPath, AbstractFilter, float>( - this, tempPath, 0, cDims, getOmega3sArrayName()); /* Assigns the shared_ptr<> to an instance variable that is a weak_ptr<> */ - if(nullptr != m_Omega3sPtr.lock().get()) /* Validate the Weak Pointer wraps a non-nullptr pointer to a DataArray object */ + m_Omega3sPtr = getDataContainerArray()->createNonPrereqArrayFromPath, AbstractFilter, float>(this, tempPath, 0, cDims, getOmega3sArrayName()); /* Assigns the shared_ptr<> to an + instance variable that is a + weak_ptr<> */ + if(nullptr != m_Omega3sPtr.lock().get()) /* Validate the Weak Pointer wraps a non-nullptr pointer to a + DataArray object */ { m_Omega3s = m_Omega3sPtr.lock()->getPointer(0); } /* Now assign the raw pointer to data from the DataArray object */ cDims[0] = 3; tempPath.update(getFeaturePhasesArrayPath().getDataContainerName(), getFeaturePhasesArrayPath().getAttributeMatrixName(), getCentroidsArrayName()); - m_CentroidsPtr = getDataContainerArray()->createNonPrereqArrayFromPath, AbstractFilter, float>( - this, tempPath, 0, cDims, getCentroidsArrayName()); /* Assigns the shared_ptr<> to an instance variable that is a weak_ptr<> */ - if(nullptr != m_CentroidsPtr.lock().get()) /* Validate the Weak Pointer wraps a non-nullptr pointer to a DataArray object */ + m_CentroidsPtr = getDataContainerArray()->createNonPrereqArrayFromPath, AbstractFilter, float>(this, tempPath, 0, cDims, getCentroidsArrayName()); /* Assigns the shared_ptr<> to an + instance variable that is a + weak_ptr<> */ + if(nullptr != m_CentroidsPtr.lock().get()) /* Validate the Weak Pointer wraps a + non-nullptr pointer to a DataArray + object */ { m_Centroids = m_CentroidsPtr.lock()->getPointer(0); } /* Now assign the raw pointer to data from the DataArray object */ tempPath.update(getFeaturePhasesArrayPath().getDataContainerName(), getFeaturePhasesArrayPath().getAttributeMatrixName(), getAxisEulerAnglesArrayName()); - m_AxisEulerAnglesPtr = getDataContainerArray()->createNonPrereqArrayFromPath, AbstractFilter, float>( - this, tempPath, 0, cDims, getAxisEulerAnglesArrayName()); /* Assigns the shared_ptr<> to an instance variable that is a weak_ptr<> */ - if(nullptr != m_AxisEulerAnglesPtr.lock().get()) /* Validate the Weak Pointer wraps a non-nullptr pointer to a DataArray object */ + m_AxisEulerAnglesPtr = + getDataContainerArray()->createNonPrereqArrayFromPath, AbstractFilter, float>(this, tempPath, 0, cDims, getAxisEulerAnglesArrayName()); /* Assigns the shared_ptr<> to an + instance variable that is a + weak_ptr<> */ + if(nullptr != m_AxisEulerAnglesPtr.lock().get()) /* Validate the Weak Pointer wraps a + non-nullptr pointer to a + DataArray object */ { m_AxisEulerAngles = m_AxisEulerAnglesPtr.lock()->getPointer(0); } /* Now assign the raw pointer to data from the DataArray object */ tempPath.update(getFeaturePhasesArrayPath().getDataContainerName(), getFeaturePhasesArrayPath().getAttributeMatrixName(), getAxisLengthsArrayName()); - m_AxisLengthsPtr = getDataContainerArray()->createNonPrereqArrayFromPath, AbstractFilter, float>( - this, tempPath, 0, cDims, getAxisLengthsArrayName()); /* Assigns the shared_ptr<> to an instance variable that is a weak_ptr<> */ - if(nullptr != m_AxisLengthsPtr.lock().get()) /* Validate the Weak Pointer wraps a non-nullptr pointer to a DataArray object */ + m_AxisLengthsPtr = + getDataContainerArray()->createNonPrereqArrayFromPath, AbstractFilter, float>(this, tempPath, 0, cDims, getAxisLengthsArrayName()); /* Assigns the shared_ptr<> to an + instance variable that is a + weak_ptr<> */ + if(nullptr != m_AxisLengthsPtr.lock().get()) /* Validate the Weak Pointer + wraps a non-nullptr pointer + to a DataArray object */ { m_AxisLengths = m_AxisLengthsPtr.lock()->getPointer(0); } /* Now assign the raw pointer to data from the DataArray object */ // Ensemble Data cDims[0] = 1; - m_NumFeaturesPtr = getDataContainerArray()->getPrereqArrayFromPath, AbstractFilter>(this, getNumFeaturesArrayPath(), - cDims); /* Assigns the shared_ptr<> to an instance variable that is a weak_ptr<> */ - if(nullptr != m_NumFeaturesPtr.lock().get()) /* Validate the Weak Pointer wraps a non-nullptr pointer to a DataArray object */ + m_NumFeaturesPtr = + getDataContainerArray()->getPrereqArrayFromPath, AbstractFilter>(this, getNumFeaturesArrayPath(), cDims); /* Assigns the shared_ptr<> to an instance variable that + is a weak_ptr<> */ + if(nullptr != m_NumFeaturesPtr.lock().get()) /* Validate the Weak Pointer + wraps a non-nullptr pointer + to a DataArray object */ { m_NumFeatures = m_NumFeaturesPtr.lock()->getPointer(0); } /* Now assign the raw pointer to data from the DataArray object */ @@ -598,7 +662,7 @@ void InsertPrecipitatePhases::execute() m->getGeometryAs()->getDimensions(udims); int64_t dims[3] = { - static_cast(udims[0]), static_cast(udims[1]), static_cast(udims[2]), + static_cast(udims[0]), static_cast(udims[1]), static_cast(udims[2]), }; m_TotalPoints = static_cast(dims[0] * dims[1] * dims[2]); @@ -606,7 +670,8 @@ void InsertPrecipitatePhases::execute() if(m_HavePrecips == false) { notifyStatusMessage(getMessagePrefix(), getHumanLabel(), "Packing Precipitates || Generating and Placing Precipitates"); - // this initializes the arrays to hold the details of the locations of all of the features during packing + // this initializes the arrays to hold the details of the locations of all + // of the features during packing Int32ArrayType::Pointer exclusionZonesPtr = Int32ArrayType::CreateArray(m_TotalPoints, "_INTERNAL_USE_ONLY_PackPrimaryFeatures::exclusion_zones"); exclusionZonesPtr->initializeWithZeros(); place_precipitates(exclusionZonesPtr); @@ -643,9 +708,12 @@ void InsertPrecipitatePhases::execute() return; } - // At this point we are done reassigning values to all arrays, so we are safe to copy - // down the Feature phases to the cells ; the Feature phases are correct from the - // generate_precipitate() function, but the cell phases are best done after all + // At this point we are done reassigning values to all arrays, so we are safe + // to copy + // down the Feature phases to the cells ; the Feature phases are correct from + // the + // generate_precipitate() function, but the cell phases are best done after + // all // assignment since cell values may be cleaned up after Feature generation size_t numTuples = m_FeatureIdsPtr.lock()->getNumberOfTuples(); for(size_t i = 0; i < numTuples; i++) @@ -750,7 +818,7 @@ void InsertPrecipitatePhases::place_precipitates(Int32ArrayType::Pointer exclusi m->getGeometryAs()->getDimensions(udims); int64_t dims[3] = { - static_cast(udims[0]), static_cast(udims[1]), static_cast(udims[2]), + static_cast(udims[0]), static_cast(udims[1]), static_cast(udims[2]), }; m_XPoints = static_cast(dims[0]); @@ -780,7 +848,8 @@ void InsertPrecipitatePhases::place_precipitates(Int32ArrayType::Pointer exclusi } } - // figure out how many grains we already have so we can start the counter at +1 this + // figure out how many grains we already have so we can start the counter at + // +1 this int32_t currentnumfeatures = static_cast(m_FeaturePhasesPtr.lock()->getNumberOfTuples()); size_t numensembles = m_PhaseTypesPtr.lock()->getNumberOfTuples(); @@ -808,12 +877,15 @@ void InsertPrecipitatePhases::place_precipitates(Int32ArrayType::Pointer exclusi PrecipitateStatsData* pp = PrecipitateStatsData::SafePointerDownCast(statsDataArray[i].get()); if(nullptr == pp) { - QString ss = QObject::tr("Tried to cast a statsDataArray[%1].get() to a PrecipitateStatsData* " - "pointer but this resulted in a nullptr pointer. The value at m_PhaseTypes[%2] = %3 does not match up " - "with the type of pointer stored in the StatsDataArray (PrecipitateStatsData)\n") - .arg(i) - .arg(i) - .arg(m_PhaseTypes[i]); + QString ss = QObject::tr("Tried to cast a statsDataArray[%1].get() to a " + "PrecipitateStatsData* " + "pointer but this resulted in a nullptr pointer. The " + "value at m_PhaseTypes[%2] = %3 does not match up " + "with the type of pointer stored in the StatsDataArray " + "(PrecipitateStatsData)\n") + .arg(i) + .arg(i) + .arg(m_PhaseTypes[i]); setErrorCondition(-666); notifyErrorMessage(getHumanLabel(), ss, getErrorCondition()); return; @@ -835,11 +907,13 @@ void InsertPrecipitatePhases::place_precipitates(Int32ArrayType::Pointer exclusi return; } - // This is the set that we are going to keep updated with the points that are not in an exclusion zone + // This is the set that we are going to keep updated with the points that are + // not in an exclusion zone std::map availablePoints; std::map availablePointsInv; - // Get a pointer to the Feature Owners that was just initialized in the initialize_packinggrid() method + // Get a pointer to the Feature Owners that was just initialized in the + // initialize_packinggrid() method int32_t* exclusionZones = exclusionZonesPtr->getPointer(0); size_t featureOwnersIdx = 0; @@ -859,7 +933,9 @@ void InsertPrecipitatePhases::place_precipitates(Int32ArrayType::Pointer exclusi VectorOfFloatArray GSdist = pp->getFeatureSizeDistribution(); float avg = GSdist[0]->getValue(0); float stdev = GSdist[1]->getValue(0); - float denominatorConst = sqrtf(2.0f * stdev * stdev); // Calculate it here rather than calculating the same thing multiple times below + float denominatorConst = sqrtf(2.0f * stdev * stdev); // Calculate it here rather than + // calculating the same thing multiple + // times below for(size_t j = 0; j < m_FeatureSizeDist[i].size(); j++) { input = (float(j + 1) * m_FeatureSizeDistStep[i]) + (pp->getMinFeatureDiameter() / 2.0f); @@ -881,7 +957,9 @@ void InsertPrecipitatePhases::place_precipitates(Int32ArrayType::Pointer exclusi return; } - // adding precipitates until the volume fraction of precipitates matches the target (while making sure to keep the size distribution error within tolerance) + // adding precipitates until the volume fraction of precipitates matches the + // target (while making sure to keep the size distribution error within + // tolerance) Precip_t precip; std::vector curphasevol; curphasevol.resize(m_PrecipitatePhases.size()); @@ -925,7 +1003,8 @@ void InsertPrecipitatePhases::place_precipitates(Int32ArrayType::Pointer exclusi QString ss = QObject::tr("Packing Precipitates || Starting Feature Placement..."); notifyStatusMessage(getMessagePrefix(), getHumanLabel(), ss); - // initializing the target RDF vector - this is the radial distribution function we are trying to match to + // initializing the target RDF vector - this is the radial distribution + // function we are trying to match to if(m_MatchRDF == true) { for(size_t i = 1; i < numensembles; ++i) @@ -972,7 +1051,8 @@ void InsertPrecipitatePhases::place_precipitates(Int32ArrayType::Pointer exclusi m_AvailablePointsCount++; } } - // and clear the pointsToRemove and pointsToAdd vectors from the initial packing + // and clear the pointsToRemove and pointsToAdd vectors from the initial + // packing m_PointsToRemove.clear(); m_PointsToAdd.clear(); @@ -998,7 +1078,8 @@ void InsertPrecipitatePhases::place_precipitates(Int32ArrayType::Pointer exclusi float boundaryFraction = (float)boundaryVoxels / (float)m_TotalPoints; - // boolean used to determine if current placement is acceptable if the precipitates are being treated as "hard" + // boolean used to determine if current placement is acceptable if the + // precipitates are being treated as "hard" // bool good = false; // int32_t progFeature = 0; @@ -1007,7 +1088,8 @@ void InsertPrecipitatePhases::place_precipitates(Int32ArrayType::Pointer exclusi // { // if (int32_t(i) > progFeature + progPrecipInc) // { - // QString ss = QObject::tr("Packing Precipitates || Placing Precipitate #%1").arg(i); + // QString ss = QObject::tr("Packing Precipitates || Placing Precipitate + // #%1").arg(i); // notifyStatusMessage(getMessagePrefix(), getHumanLabel(), ss); // progFeature = i; // } @@ -1021,7 +1103,8 @@ void InsertPrecipitatePhases::place_precipitates(Int32ArrayType::Pointer exclusi // int32_t iterCount = 0; // while (good == false && iterCount < 100000 ) // { - // PrecipitateStatsData* pp = PrecipitateStatsData::SafePointerDownCast(statsDataArray[m_FeaturePhases[i]].get()); + // PrecipitateStatsData* pp = + // PrecipitateStatsData::SafePointerDownCast(statsDataArray[m_FeaturePhases[i]].get()); // precipboundaryfraction = pp->getPrecipBoundaryFraction(); // random = static_cast(rg.genrand_res53()); @@ -1029,23 +1112,28 @@ void InsertPrecipitatePhases::place_precipitates(Int32ArrayType::Pointer exclusi // { // if (random <= precipboundaryfraction) // { - // // figure out if we want this to be a boundary centroid voxel or not for the proposed precipitate + // // figure out if we want this to be a boundary centroid voxel or + // not for the proposed precipitate // if (availablePointsCount > 0) // { - // key = static_cast(rg.genrand_res53() * (availablePointsCount - 1)); + // key = static_cast(rg.genrand_res53() * + // (availablePointsCount - 1)); // featureOwnersIdx = availablePointsInv[key]; // while (m_BoundaryCells[featureOwnersIdx] == 0) // { - // key = static_cast(rg.genrand_res53() * (availablePointsCount - 1)); + // key = static_cast(rg.genrand_res53() * + // (availablePointsCount - 1)); // featureOwnersIdx = availablePointsInv[key]; // } // } // else // { - // featureOwnersIdx = static_cast(rg.genrand_res53() * m_TotalPoints); + // featureOwnersIdx = static_cast(rg.genrand_res53() * + // m_TotalPoints); // while (m_BoundaryCells[featureOwnersIdx] == 0) // { - // featureOwnersIdx = static_cast(rg.genrand_res53() * m_TotalPoints); + // featureOwnersIdx = static_cast(rg.genrand_res53() * + // m_TotalPoints); // } // } @@ -1054,20 +1142,24 @@ void InsertPrecipitatePhases::place_precipitates(Int32ArrayType::Pointer exclusi // { // if (availablePointsCount > 0) // { - // key = static_cast(rg.genrand_res53() * (availablePointsCount - 1)); + // key = static_cast(rg.genrand_res53() * + // (availablePointsCount - 1)); // featureOwnersIdx = availablePointsInv[key]; // while (m_BoundaryCells[featureOwnersIdx] != 0) // { - // key = static_cast(rg.genrand_res53() * (availablePointsCount - 1)); + // key = static_cast(rg.genrand_res53() * + // (availablePointsCount - 1)); // featureOwnersIdx = availablePointsInv[key]; // } // } // else // { - // featureOwnersIdx = static_cast(rg.genrand_res53() * m_TotalPoints); + // featureOwnersIdx = static_cast(rg.genrand_res53() * + // m_TotalPoints); // while (m_BoundaryCells[featureOwnersIdx] != 0) // { - // featureOwnersIdx = static_cast(rg.genrand_res53() * m_TotalPoints); + // featureOwnersIdx = static_cast(rg.genrand_res53() * + // m_TotalPoints); // } // } // } @@ -1076,25 +1168,30 @@ void InsertPrecipitatePhases::place_precipitates(Int32ArrayType::Pointer exclusi // { // if (precipboundaryfraction > 0) // { - // QString msg("There are no Feature boundaries on which to place precipitates and the target statistics precipitate fraction is greater than 0. This Filter will run without trying to match + // QString msg("There are no Feature boundaries on which to place + // precipitates and the target statistics precipitate fraction is + // greater than 0. This Filter will run without trying to match // the precipitate fraction"); // notifyWarningMessage(getHumanLabel(), msg, -5010); // } // if (availablePointsCount > 0) // { - // key = static_cast(rg.genrand_res53() * (availablePointsCount - 1)); + // key = static_cast(rg.genrand_res53() * + // (availablePointsCount - 1)); // featureOwnersIdx = availablePointsInv[key]; // } // else // { - // featureOwnersIdx = static_cast(rg.genrand_res53() * m_TotalPoints); + // featureOwnersIdx = static_cast(rg.genrand_res53() * + // m_TotalPoints); // } // } // column = static_cast(featureOwnersIdx % m_XPoints); // row = static_cast(featureOwnersIdx / m_XPoints) % m_YPoints; - // plane = static_cast(featureOwnersIdx / (m_XPoints * m_YPoints)); + // plane = static_cast(featureOwnersIdx / (m_XPoints * + // m_YPoints)); // xc = static_cast((column * m_XRes) + (m_XRes * 0.5)); // yc = static_cast((row * m_YRes) + (m_YRes * 0.5)); // zc = static_cast((plane * m_ZRes) + (m_ZRes * 0.5)); @@ -1115,7 +1212,8 @@ void InsertPrecipitatePhases::place_precipitates(Int32ArrayType::Pointer exclusi // tDims[0] = i + 1; // m->getAttributeMatrix(getFeaturePhasesArrayPath().getAttributeMatrixName())->resizeAttributeArrays(tDims); // updateFeatureInstancePointers(); - // numfeatures = m->getAttributeMatrix(getFeaturePhasesArrayPath().getAttributeMatrixName())->getNumberOfTuples(); + // numfeatures = + // m->getAttributeMatrix(getFeaturePhasesArrayPath().getAttributeMatrixName())->getNumberOfTuples(); // } // } @@ -1136,7 +1234,8 @@ void InsertPrecipitatePhases::place_precipitates(Int32ArrayType::Pointer exclusi { if(random <= precipboundaryfraction) { - // figure out if we want this to be a boundary centroid voxel or not for the proposed precipitate + // figure out if we want this to be a boundary centroid voxel or not for + // the proposed precipitate if(m_AvailablePointsCount > 0) { key = static_cast(rg.genrand_res53() * (m_AvailablePointsCount - 1)); @@ -1183,7 +1282,10 @@ void InsertPrecipitatePhases::place_precipitates(Int32ArrayType::Pointer exclusi if(precipboundaryfraction > 0) { - QString msg("There are no Feature boundaries on which to place precipitates and the target statistics precipitate fraction is greater than 0. This Filter will run without trying to match the " + QString msg("There are no Feature boundaries on which to place " + "precipitates and the target statistics precipitate " + "fraction is greater than 0. This Filter will run without " + "trying to match the " "precipitate fraction"); notifyWarningMessage(getHumanLabel(), msg, -5010); } @@ -1219,9 +1321,12 @@ void InsertPrecipitatePhases::place_precipitates(Int32ArrayType::Pointer exclusi { /*RANDOM: Figure out the RDF for randomly distributed particles. We always keep the same stepsize as the target RDF, - but change (increase if the current box is bigger than what the target dist was built on and vice versa) - the number of bins to account for smaller and larger (up to the max distance i.e. the box diagonal) - distances that can occur when particles are just randomly placed in a box. This is true for both m_rdfRandom and m_rdfCurrentDist.*/ + but change (increase if the current box is bigger than what the target dist + was built on and vice versa) + the number of bins to account for smaller and larger (up to the max distance + i.e. the box diagonal) + distances that can occur when particles are just randomly placed in a box. + This is true for both m_rdfRandom and m_rdfCurrentDist.*/ // initialize boxdims and boxres vectors std::vector boxdims(3); @@ -1238,15 +1343,19 @@ void InsertPrecipitatePhases::place_precipitates(Int32ArrayType::Pointer exclusi int32_t current_num_bins = static_cast(ceil((max_box_distance - m_rdfMin) / (m_StepSize))); - // resize box to include all the possible distances but using the same stepsize as the target RDF. The zero bin includes all distances smaller than the smallest from the targetRDF + // resize box to include all the possible distances but using the same + // stepsize as the target RDF. The zero bin includes all distances smaller + // than the smallest from the targetRDF m_RdfRandom.resize(current_num_bins + 1); - // Call this function to generate the random distribution, which is normalized by the total number of distances + // Call this function to generate the random distribution, which is + // normalized by the total number of distances m_RdfRandom = RadialDistributionFunction::GenerateRandomDistribution(m_rdfMin, m_rdfMax, m_numRDFbins, boxdims, boxres); size_t numPPTfeatures = static_cast(numfeatures - m_FirstPrecipitateFeature); - // Scale the randomRDF to have the same number of particles (and therfore distances) as the current distribution. + // Scale the randomRDF to have the same number of particles (and therfore + // distances) as the current distribution. for(size_t i = 0; i < m_RdfRandom.size(); i++) { m_RdfRandom[i] = m_RdfRandom[i] * numPPTfeatures * (numPPTfeatures - 1); @@ -1267,7 +1376,8 @@ void InsertPrecipitatePhases::place_precipitates(Int32ArrayType::Pointer exclusi if(m_MatchRDF == true) { - // calculate the initial current RDF - this will change as we move particles around + // calculate the initial current RDF - this will change as we move particles + // around for(size_t i = size_t(m_FirstPrecipitateFeature); i < numfeatures; i++) { m_oldRDFerror = check_RDFerror(int32_t(i), -1000, false); @@ -1282,13 +1392,18 @@ void InsertPrecipitatePhases::place_precipitates(Int32ArrayType::Pointer exclusi } // begin swaping/moving/adding/removing features to try to improve packing - // The totalAdjustments are roughly equal to the prefactor (1000, right now) times the number of precipitates. - // This is not based on convergence or any physics - it's just a factor and there's probably room for improvement here + // The totalAdjustments are roughly equal to the prefactor (1000, right + // now) times the number of precipitates. + // This is not based on convergence or any physics - it's just a factor + // and there's probably room for improvement here int32_t totalAdjustments = static_cast(1000 * ((numfeatures - m_FirstPrecipitateFeature) - 1)); for(int32_t iteration = 0; iteration < totalAdjustments; ++iteration) { QString ss; - ss = QObject::tr("Packing Features - Swapping/Moving/Adding/Removing Features Iteration %1/%2").arg(iteration).arg(totalAdjustments); + ss = QObject::tr("Packing Features - Swapping/Moving/Adding/Removing " + "Features Iteration %1/%2") + .arg(iteration) + .arg(totalAdjustments); if(iteration % 100 == 0) { notifyStatusMessage(getMessagePrefix(), getHumanLabel(), ss); @@ -1323,7 +1438,8 @@ void InsertPrecipitatePhases::place_precipitates(Int32ArrayType::Pointer exclusi { if(random <= precipboundaryfraction) { - // figure out if we want this to be a boundary centroid voxel or not for the proposed precipitate + // figure out if we want this to be a boundary centroid voxel or not + // for the proposed precipitate if(m_AvailablePointsCount > 0) { key = static_cast(rg.genrand_res53() * (m_AvailablePointsCount - 1)); @@ -1370,7 +1486,10 @@ void InsertPrecipitatePhases::place_precipitates(Int32ArrayType::Pointer exclusi if(precipboundaryfraction > 0) { - QString msg("There are no Feature boundaries to place precipitates on and the target statistics precipitate fraction is greater than 0. This Filter will run without trying to match the " + QString msg("There are no Feature boundaries to place precipitates " + "on and the target statistics precipitate fraction is " + "greater than 0. This Filter will run without trying " + "to match the " "precipitate fraction"); notifyWarningMessage(getHumanLabel(), msg, -5010); } @@ -1458,7 +1577,7 @@ void InsertPrecipitatePhases::generate_precipitate(int32_t phase, Precip_t* prec { SIMPL_RANDOMNG_NEW_SEEDED(m_Seed) - StatsDataArray& statsDataArray = *(m_StatsDataArray.lock()); + StatsDataArray& statsDataArray = *(m_StatsDataArray.lock()); float r1 = 1.0f; float a2 = 0.0f, a3 = 0.0f; @@ -1548,7 +1667,7 @@ void InsertPrecipitatePhases::generate_precipitate(int32_t phase, Precip_t* prec float mf = omega3[0]->getValue(diameter); float s = omega3[1]->getValue(diameter); float omega3f = static_cast(rg.genrand_beta(mf, s)); - if (shapeclass == ShapeType::Type::Ellipsoid) + if(shapeclass == ShapeType::Type::Ellipsoid) { omega3f = 1; } @@ -1757,10 +1876,13 @@ void InsertPrecipitatePhases::update_exclusionZones(int32_t gadd, int32_t gremov } } -//// ----------------------------------------------------------------------------- //// -//// ----------------------------------------------------------------------------- -// bool InsertPrecipitatePhases::check_for_overlap(size_t gNum, Int32ArrayType::Pointer exclusionZonesPtr) +///----------------------------------------------------------------------------- +//// +//// +///----------------------------------------------------------------------------- +// bool InsertPrecipitatePhases::check_for_overlap(size_t gNum, +// Int32ArrayType::Pointer exclusionZonesPtr) //{ // size_t featureOwnersIdx = 0; // int32_t* exclusionZones = exclusionZonesPtr->getPointer(0); @@ -1784,19 +1906,23 @@ void InsertPrecipitatePhases::update_exclusionZones(int32_t gadd, int32_t gremov // if (row > m_YPoints - 1) { row = row - m_YPoints; } // if (plane < 0) { plane = plane + m_ZPoints; } // if (plane > m_ZPoints - 1) { plane = plane - m_ZPoints; } -// featureOwnersIdx = (m_XPoints * m_YPoints * plane) + (m_XPoints * row) + col; +// featureOwnersIdx = (m_XPoints * m_YPoints * plane) + (m_XPoints * row) + +// col; // if (exclusionZones[featureOwnersIdx] > 0) { overlapCount++; } // } // else // { -// if (col >= 0 && col < m_XPoints && row >= 0 && row < m_YPoints && plane >= 0 && plane < m_ZPoints) +// if (col >= 0 && col < m_XPoints && row >= 0 && row < m_YPoints && plane +// >= 0 && plane < m_ZPoints) // { -// featureOwnersIdx = (m_XPoints * m_YPoints * plane) + (m_XPoints * row) + col; +// featureOwnersIdx = (m_XPoints * m_YPoints * plane) + (m_XPoints * row) +// + col; // if (exclusionZones[featureOwnersIdx] > 0) { overlapCount++; } // } // } // } -// if ((static_cast(overlapCount) / static_cast(size)) > 0.1) { return false; } +// if ((static_cast(overlapCount) / static_cast(size)) > 0.1) { +// return false; } // return true; //} @@ -1944,7 +2070,8 @@ void InsertPrecipitatePhases::determine_randomRDF(size_t gnum, int32_t add, bool // ----------------------------------------------------------------------------- std::vector InsertPrecipitatePhases::normalizeRDF(std::vector rdf, int32_t num_bins, float m_StepSize, float rdfmin, int32_t numPPTfeatures) { - // //Normalizing the RDF by number density of particles (4/3*pi*(r2^3-r1^3)*numPPTfeatures/volume) + // //Normalizing the RDF by number density of particles + // (4/3*pi*(r2^3-r1^3)*numPPTfeatures/volume) // float normfactor; // float r1; // float r2; @@ -1953,7 +2080,8 @@ std::vector InsertPrecipitatePhases::normalizeRDF(std::vector rdf, // r1 = 0*finiteAdjFactor; // r2 = rdfmin*finiteAdjFactor; - // normfactor = 4.0f/3.0f*SIMPLib::Constants::k_Pi*((r2*r2*r2) - (r1*r1*r1))*numPPTfeatures*oneovervolume; + // normfactor = 4.0f/3.0f*SIMPLib::Constants::k_Pi*((r2*r2*r2) - + // (r1*r1*r1))*numPPTfeatures*oneovervolume; // rdf[0] = rdf[0]; // for (size_t i = 1; i < num_bins+2; i++) @@ -1962,7 +2090,8 @@ std::vector InsertPrecipitatePhases::normalizeRDF(std::vector rdf, // r2 = (r1 + m_StepSize); // r1 = r1*finiteAdjFactor; // r2 = r2*finiteAdjFactor; - // normfactor = 4.0f/3.0f*SIMPLib::Constants::k_Pi*((r2*r2*r2) - (r1*r1*r1))*numPPTfeatures*oneovervolume; + // normfactor = 4.0f/3.0f*SIMPLib::Constants::k_Pi*((r2*r2*r2) - + // (r1*r1*r1))*numPPTfeatures*oneovervolume; // rdf[i] = rdf[i]/normfactor; // } @@ -2093,7 +2222,8 @@ void InsertPrecipitatePhases::compare_3Ddistributions(std::vectorgetDataContainer(m_FeatureIdsArrayPath.getDataContainerName()); + // DataContainer::Pointer m = + // getDataContainerArray()->getDataContainer(m_FeatureIdsArrayPath.getDataContainerName()); StatsDataArray& statsDataArray = *(m_StatsDataArray.lock()); @@ -2185,7 +2315,7 @@ void InsertPrecipitatePhases::insert_precipitate(size_t gnum) { SIMPL_RANDOMNG_NEW() - float inside = -1.0f; + float inside = -1.0f; int64_t column = 0, row = 0, plane = 0; int64_t centercolumn = 0, centerrow = 0, centerplane = 0; int64_t xmin = 0, xmax = 0, ymin = 0, ymax = 0, zmin = 0, zmax = 0; @@ -2200,7 +2330,7 @@ void InsertPrecipitatePhases::insert_precipitate(size_t gnum) ShapeType::Type shapeclass = static_cast(m_ShapeTypes[m_FeaturePhases[gnum]]); // Bail if the shapeclass is not one of our enumerated types - if (shapeclass >= ShapeType::Type::ShapeTypeEnd) + if(shapeclass >= ShapeType::Type::ShapeTypeEnd) { QString ss = QObject::tr("Undefined shape class in shape types array with path %1").arg(m_InputShapeTypesArrayPath.serialize()); setErrorCondition(-667); @@ -2312,7 +2442,7 @@ void InsertPrecipitatePhases::assign_voxels() m->getGeometryAs()->getDimensions(udims); int64_t dims[3] = { - static_cast(udims[0]), static_cast(udims[1]), static_cast(udims[2]), + static_cast(udims[0]), static_cast(udims[1]), static_cast(udims[2]), }; int64_t index; @@ -2345,7 +2475,8 @@ void InsertPrecipitatePhases::assign_voxels() yc = m_Centroids[3 * i + 1]; zc = m_Centroids[3 * i + 2]; float radcur1 = 0.0f; - // Unbounded Check for the size of shapeTypes. We assume a 1:1 with phase ; this has been checked in insert_precipitate + // Unbounded Check for the size of shapeTypes. We assume a 1:1 with phase ; + // this has been checked in insert_precipitate ShapeType::Type shapeclass = static_cast(m_ShapeTypes[m_FeaturePhases[i]]); // init any values for each of the Shape Ops @@ -2537,7 +2668,8 @@ void InsertPrecipitatePhases::assign_voxels() AttributeMatrix::Pointer cellFeatureAttrMat = m->getAttributeMatrix(getFeaturePhasesArrayPath().getAttributeMatrixName()); cellFeatureAttrMat->removeInactiveObjects(activeObjects, m_FeatureIdsPtr.lock()); - // need to update pointers after resize, but do not need to run full data check because pointers are still valid + // need to update pointers after resize, but do not need to run full data + // check because pointers are still valid updateFeatureInstancePointers(); } @@ -2692,7 +2824,10 @@ void InsertPrecipitatePhases::assign_gaps() } if(iterationCounter >= 1) { - QString ss = QObject::tr("Assign Gaps || Cycle#: %1 || Remaining Unassigned Voxel Count: %2").arg(iterationCounter).arg(gapVoxelCount); + QString ss = QObject::tr("Assign Gaps || Cycle#: %1 || Remaining " + "Unassigned Voxel Count: %2") + .arg(iterationCounter) + .arg(gapVoxelCount); notifyStatusMessage(getMessagePrefix(), getHumanLabel(), ss); } if(getCancel() == true) @@ -2744,7 +2879,8 @@ void InsertPrecipitatePhases::write_goal_attributes() setErrorCondition(err); DataContainer::Pointer m = getDataContainerArray()->getDataContainer(m_FeatureIdsArrayPath.getDataContainerName()); - // Make sure any directory path is also available as the user may have just typed + // Make sure any directory path is also available as the user may have just + // typed // in a path without actually creating the full path QFileInfo fi(m_CsvOutputFile); @@ -2784,7 +2920,8 @@ void InsertPrecipitatePhases::write_goal_attributes() // Print the FeatureIds Header before the rest of the headers dStream << SIMPL::FeatureData::FeatureID; - // Loop throught the list and print the rest of the headers, ignoring those we don't want + // Loop throught the list and print the rest of the headers, ignoring those we + // don't want for(QList::iterator iter = headers.begin(); iter != headers.end(); ++iter) { // Only get the array if the name does NOT match those listed @@ -2795,7 +2932,8 @@ void InsertPrecipitatePhases::write_goal_attributes() { dStream << space << (*iter); } - else // There are more than a single component so we need to add multiple header values + else // There are more than a single component so we need to add + // multiple header values { for(int k = 0; k < p->getNumberOfComponents(); ++k) { @@ -2857,12 +2995,12 @@ void InsertPrecipitatePhases::moveShapeDescriptions() } InsertPrecipitatePhases::SaveMethod saveMethod = static_cast(getSaveGeometricDescriptions()); - if (saveMethod == InsertPrecipitatePhases::SaveMethod::SaveToNew) + if(saveMethod == InsertPrecipitatePhases::SaveMethod::SaveToNew) { AttributeMatrix::Pointer newAM = getDataContainerArray()->getAttributeMatrix(getNewAttributeMatrixPath()); - if (newAM != AttributeMatrix::NullPointer()) + if(newAM != AttributeMatrix::NullPointer()) { - if (attrArrays.size() > 0) + if(attrArrays.size() > 0) { size_t incomingArrayTupleCount = attrArrays[0]->getNumberOfTuples(); size_t newAMTupleCount = newAM->getTupleDimensions()[0]; @@ -2870,30 +3008,30 @@ void InsertPrecipitatePhases::moveShapeDescriptions() newAM->resizeAttributeArrays(tDims); } - foreach (IDataArray::Pointer incomingArray, attrArrays) + foreach(IDataArray::Pointer incomingArray, attrArrays) { newAM->addAttributeArray(incomingArray->getName(), incomingArray); } } } - else if (saveMethod == InsertPrecipitatePhases::SaveMethod::AppendToExisting) + else if(saveMethod == InsertPrecipitatePhases::SaveMethod::AppendToExisting) { AttributeMatrix::Pointer existingAM = getDataContainerArray()->getAttributeMatrix(getSelectedAttributeMatrixPath()); - if (existingAM != AttributeMatrix::NullPointer()) + if(existingAM != AttributeMatrix::NullPointer()) { size_t existingAMTupleCount = existingAM->getTupleDimensions()[0]; - if (attrArrays.size() > 0) + if(attrArrays.size() > 0) { size_t incomingArrayTupleCount = attrArrays[0]->getNumberOfTuples(); tDims[0] = incomingArrayTupleCount + existingAMTupleCount; existingAM->resizeAttributeArrays(tDims); } - foreach (IDataArray::Pointer incomingArray, attrArrays) + foreach(IDataArray::Pointer incomingArray, attrArrays) { int err = 0; IDataArray::Pointer existingArray = existingAM->getPrereqIDataArray(this, incomingArray->getName(), err); - if (existingArray != IDataArray::NullPointer()) + if(existingArray != IDataArray::NullPointer()) { existingArray->copyData(existingAMTupleCount, incomingArray); } diff --git a/Source/Plugins/SyntheticBuilding/SyntheticBuildingFilters/PackPrimaryPhases.cpp b/Source/Plugins/SyntheticBuilding/SyntheticBuildingFilters/PackPrimaryPhases.cpp index ac5b24f226..54fce5c548 100644 --- a/Source/Plugins/SyntheticBuilding/SyntheticBuildingFilters/PackPrimaryPhases.cpp +++ b/Source/Plugins/SyntheticBuilding/SyntheticBuildingFilters/PackPrimaryPhases.cpp @@ -52,8 +52,8 @@ #include "SIMPLib/Common/ShapeType.h" #include "SIMPLib/DataArrays/NeighborList.hpp" #include "SIMPLib/FilterParameters/AbstractFilterParametersReader.h" -#include "SIMPLib/FilterParameters/AttributeMatrixSelectionFilterParameter.h" #include "SIMPLib/FilterParameters/AttributeMatrixCreationFilterParameter.h" +#include "SIMPLib/FilterParameters/AttributeMatrixSelectionFilterParameter.h" #include "SIMPLib/FilterParameters/BooleanFilterParameter.h" #include "SIMPLib/FilterParameters/DataArraySelectionFilterParameter.h" #include "SIMPLib/FilterParameters/InputFileFilterParameter.h" @@ -81,155 +81,154 @@ */ class AssignVoxelsGapsImpl { - int64_t dims[3]; - float Invradcur[3]; - float res[3]; - int32_t* m_FeatureIds; - float xc; - float yc; - float zc; - ShapeOps* m_ShapeOps; - float ga[3][3]; - int32_t curFeature; - Int32ArrayType::Pointer newownersPtr; - FloatArrayType::Pointer ellipfuncsPtr; - - public: - AssignVoxelsGapsImpl(int64_t* dimensions, float* resolution, int32_t* featureIds, float* radCur, - float* xx, ShapeOps* shapeOps, float gA[3][3], float* size, int32_t cur_feature, - Int32ArrayType::Pointer newowners, FloatArrayType::Pointer ellipfuncs) - : m_FeatureIds(featureIds) - , m_ShapeOps(shapeOps) - , curFeature(cur_feature) - { - size = 0; - dims[0] = dimensions[0]; - dims[1] = dimensions[1]; - dims[2] = dimensions[2]; - Invradcur[0] = 1.0f / radCur[0]; - Invradcur[1] = 1.0f / radCur[1]; - Invradcur[2] = 1.0f / radCur[2]; - - res[0] = resolution[0]; - res[1] = resolution[1]; - res[2] = resolution[2]; - - xc = xx[0]; - yc = xx[1]; - zc = xx[2]; - - ga[0][0] = gA[0][0]; - ga[0][1] = gA[0][1]; - ga[0][2] = gA[0][2]; - ga[1][0] = gA[1][0]; - ga[1][1] = gA[1][1]; - ga[1][2] = gA[1][2]; - ga[2][0] = gA[2][0]; - ga[2][1] = gA[2][1]; - ga[2][2] = gA[2][2]; - - newownersPtr = newowners; - ellipfuncsPtr = ellipfuncs; - } - - virtual ~AssignVoxelsGapsImpl() - { - } - - // ----------------------------------------------------------------------------- - // - // ----------------------------------------------------------------------------- - void convert(int64_t zStart, int64_t zEnd, int64_t yStart, int64_t yEnd, int64_t xStart, int64_t xEnd) const - { - int64_t column = 0; - int64_t row = 0; - int64_t plane = 0; - int64_t index = 0; - float coords[3] = {0.0f, 0.0f, 0.0f}; - float inside = 0.0f; - float coordsRotated[3] = {0.0f, 0.0f, 0.0f}; - int32_t* newowners = newownersPtr->getPointer(0); - float* ellipfuncs = ellipfuncsPtr->getPointer(0); - - int64_t dim0_dim_1 = dims[0] * dims[1]; - for(int64_t iter1 = xStart; iter1 < xEnd; iter1++) + int64_t dims[3]; + float Invradcur[3]; + float res[3]; + int32_t* m_FeatureIds; + float xc; + float yc; + float zc; + ShapeOps* m_ShapeOps; + float ga[3][3]; + int32_t curFeature; + Int32ArrayType::Pointer newownersPtr; + FloatArrayType::Pointer ellipfuncsPtr; + +public: + AssignVoxelsGapsImpl(int64_t* dimensions, float* resolution, int32_t* featureIds, float* radCur, float* xx, ShapeOps* shapeOps, float gA[3][3], float* size, int32_t cur_feature, + Int32ArrayType::Pointer newowners, FloatArrayType::Pointer ellipfuncs) + : m_FeatureIds(featureIds) + , m_ShapeOps(shapeOps) + , curFeature(cur_feature) + { + size = 0; + dims[0] = dimensions[0]; + dims[1] = dimensions[1]; + dims[2] = dimensions[2]; + Invradcur[0] = 1.0f / radCur[0]; + Invradcur[1] = 1.0f / radCur[1]; + Invradcur[2] = 1.0f / radCur[2]; + + res[0] = resolution[0]; + res[1] = resolution[1]; + res[2] = resolution[2]; + + xc = xx[0]; + yc = xx[1]; + zc = xx[2]; + + ga[0][0] = gA[0][0]; + ga[0][1] = gA[0][1]; + ga[0][2] = gA[0][2]; + ga[1][0] = gA[1][0]; + ga[1][1] = gA[1][1]; + ga[1][2] = gA[1][2]; + ga[2][0] = gA[2][0]; + ga[2][1] = gA[2][1]; + ga[2][2] = gA[2][2]; + + newownersPtr = newowners; + ellipfuncsPtr = ellipfuncs; + } + + virtual ~AssignVoxelsGapsImpl() + { + } + + // ----------------------------------------------------------------------------- + // + // ----------------------------------------------------------------------------- + void convert(int64_t zStart, int64_t zEnd, int64_t yStart, int64_t yEnd, int64_t xStart, int64_t xEnd) const + { + int64_t column = 0; + int64_t row = 0; + int64_t plane = 0; + int64_t index = 0; + float coords[3] = {0.0f, 0.0f, 0.0f}; + float inside = 0.0f; + float coordsRotated[3] = {0.0f, 0.0f, 0.0f}; + int32_t* newowners = newownersPtr->getPointer(0); + float* ellipfuncs = ellipfuncsPtr->getPointer(0); + + int64_t dim0_dim_1 = dims[0] * dims[1]; + for(int64_t iter1 = xStart; iter1 < xEnd; iter1++) + { + column = iter1; + if(iter1 < 0) + { + column = iter1 + dims[0]; + } + else if(iter1 > dims[0] - 1) + { + column = iter1 - dims[0]; + } + + for(int64_t iter2 = yStart; iter2 < yEnd; iter2++) { - column = iter1; - if(iter1 < 0) + row = iter2; + if(iter2 < 0) { - column = iter1 + dims[0]; + row = iter2 + dims[1]; } - else if(iter1 > dims[0] - 1) + else if(iter2 > dims[1] - 1) { - column = iter1 - dims[0]; + row = iter2 - dims[1]; } + size_t row_dim = row * dims[0]; - for(int64_t iter2 = yStart; iter2 < yEnd; iter2++) + for(int64_t iter3 = zStart; iter3 < zEnd; iter3++) { - row = iter2; - if(iter2 < 0) + plane = iter3; + if(iter3 < 0) { - row = iter2 + dims[1]; + plane = iter3 + dims[2]; } - else if(iter2 > dims[1] - 1) + else if(iter3 > dims[2] - 1) { - row = iter2 - dims[1]; + plane = iter3 - dims[2]; } - size_t row_dim = row * dims[0]; - for(int64_t iter3 = zStart; iter3 < zEnd; iter3++) + index = static_cast((plane * dim0_dim_1) + (row_dim) + column); + + inside = -1.0f; + coords[0] = float(iter1) * res[0]; + coords[1] = float(iter2) * res[1]; + coords[2] = float(iter3) * res[2]; + + coords[0] = coords[0] - xc; + coords[1] = coords[1] - yc; + coords[2] = coords[2] - zc; + MatrixMath::Multiply3x3with3x1(ga, coords, coordsRotated); + float axis1comp = coordsRotated[0] * Invradcur[0]; + float axis2comp = coordsRotated[1] * Invradcur[1]; + float axis3comp = coordsRotated[2] * Invradcur[2]; + inside = m_ShapeOps->inside(axis1comp, axis2comp, axis3comp); + // if (inside >= 0 && newowners[index] > 0) + if(inside >= 0 && newowners[index] > 0 && inside > ellipfuncs[index]) { - plane = iter3; - if(iter3 < 0) - { - plane = iter3 + dims[2]; - } - else if(iter3 > dims[2] - 1) - { - plane = iter3 - dims[2]; - } - - index = static_cast((plane * dim0_dim_1) + (row_dim) + column); - - inside = -1.0f; - coords[0] = float(iter1) * res[0]; - coords[1] = float(iter2) * res[1]; - coords[2] = float(iter3) * res[2]; - - coords[0] = coords[0] - xc; - coords[1] = coords[1] - yc; - coords[2] = coords[2] - zc; - MatrixMath::Multiply3x3with3x1(ga, coords, coordsRotated); - float axis1comp = coordsRotated[0] * Invradcur[0]; - float axis2comp = coordsRotated[1] * Invradcur[1]; - float axis3comp = coordsRotated[2] * Invradcur[2]; - inside = m_ShapeOps->inside(axis1comp, axis2comp, axis3comp); - // if (inside >= 0 && newowners[index] > 0) - if(inside >= 0 && newowners[index] > 0 && inside > ellipfuncs[index]) - { - newowners[index] = curFeature; - ellipfuncs[index] = inside; - // newowners[index] = -2; - // ellipfuncs[index] = inside; - } - else if(inside >= 0 && newowners[index] == -1) - { - newowners[index] = curFeature; - ellipfuncs[index] = inside; - } + newowners[index] = curFeature; + ellipfuncs[index] = inside; + // newowners[index] = -2; + // ellipfuncs[index] = inside; + } + else if(inside >= 0 && newowners[index] == -1) + { + newowners[index] = curFeature; + ellipfuncs[index] = inside; } } } } + } #ifdef SIMPLib_USE_PARALLEL_ALGORITHMS - void operator()(const tbb::blocked_range3d& r) const - { - convert(r.pages().begin(), r.pages().end(), r.rows().begin(), r.rows().end(), r.cols().begin(), r.cols().end()); - } + void operator()(const tbb::blocked_range3d& r) const + { + convert(r.pages().begin(), r.pages().end(), r.rows().begin(), r.rows().end(), r.cols().begin(), r.cols().end()); + } #endif - private: +private: }; // Include the MOC generated file for this class @@ -241,52 +240,52 @@ const QString PrimaryPhaseSyntheticShapeParametersName("Synthetic Shape Paramete // // ----------------------------------------------------------------------------- PackPrimaryPhases::PackPrimaryPhases() - : AbstractFilter() - , m_OutputCellAttributeMatrixPath(SIMPL::Defaults::SyntheticVolumeDataContainerName, SIMPL::Defaults::CellAttributeMatrixName, "") - , m_OutputCellFeatureAttributeMatrixName(SIMPL::Defaults::CellFeatureAttributeMatrixName) - , m_OutputCellEnsembleAttributeMatrixName(SIMPL::Defaults::CellEnsembleAttributeMatrixName) - , m_FeatureIdsArrayName(SIMPL::CellData::FeatureIds) - , m_CellPhasesArrayName(SIMPL::CellData::Phases) - , m_FeaturePhasesArrayName(SIMPL::FeatureData::Phases) - , m_NumFeaturesArrayName(SIMPL::EnsembleData::NumFeatures) - , m_InputStatsArrayPath(SIMPL::Defaults::StatsGenerator, SIMPL::Defaults::CellEnsembleAttributeMatrixName, SIMPL::EnsembleData::Statistics) - , m_InputPhaseTypesArrayPath(SIMPL::Defaults::StatsGenerator, SIMPL::Defaults::CellEnsembleAttributeMatrixName, SIMPL::EnsembleData::PhaseTypes) - , m_InputPhaseNamesArrayPath(SIMPL::Defaults::StatsGenerator, SIMPL::Defaults::CellEnsembleAttributeMatrixName, SIMPL::EnsembleData::PhaseName) - , m_InputShapeTypesArrayPath(SIMPL::Defaults::StatsGenerator, SIMPL::Defaults::CellEnsembleAttributeMatrixName, SIMPL::EnsembleData::ShapeTypes) - , m_MaskArrayPath(SIMPL::Defaults::ImageDataContainerName, SIMPL::Defaults::CellAttributeMatrixName, SIMPL::CellData::Mask) - , m_UseMask(false) - , m_HaveFeatures(false) - , m_FeatureInputFile("") - , m_CsvOutputFile("") - , m_PeriodicBoundaries(false) - , m_WriteGoalAttributes(false) - , m_SaveGeometricDescriptions(false) - , m_NewAttributeMatrixPath(SIMPL::Defaults::SyntheticVolumeDataContainerName, PrimaryPhaseSyntheticShapeParametersName, "") - , m_NeighborhoodsArrayName(SIMPL::FeatureData::Neighborhoods) - , m_CentroidsArrayName(SIMPL::FeatureData::Centroids) - , m_VolumesArrayName(SIMPL::FeatureData::Volumes) - , m_AxisLengthsArrayName(SIMPL::FeatureData::AxisLengths) - , m_AxisEulerAnglesArrayName(SIMPL::FeatureData::AxisEulerAngles) - , m_Omega3sArrayName(SIMPL::FeatureData::Omega3s) - , m_EquivalentDiametersArrayName(SIMPL::FeatureData::EquivalentDiameters) - , m_Neighbors(nullptr) - , m_FeatureIds(nullptr) - , m_CellPhases(nullptr) - , m_Mask(nullptr) - , m_BoundaryCells(nullptr) - , m_FeaturePhases(nullptr) - , m_Neighborhoods(nullptr) - , m_Centroids(nullptr) - , m_Volumes(nullptr) - , m_AxisLengths(nullptr) - , m_AxisEulerAngles(nullptr) - , m_Omega3s(nullptr) - , m_EquivalentDiameters(nullptr) - , m_PhaseTypes(nullptr) - , m_ShapeTypes(nullptr) - , m_NumFeatures(nullptr) - , m_ErrorOutputFile("") - , m_VtkOutputFile("") +: AbstractFilter() +, m_OutputCellAttributeMatrixPath(SIMPL::Defaults::SyntheticVolumeDataContainerName, SIMPL::Defaults::CellAttributeMatrixName, "") +, m_OutputCellFeatureAttributeMatrixName(SIMPL::Defaults::CellFeatureAttributeMatrixName) +, m_OutputCellEnsembleAttributeMatrixName(SIMPL::Defaults::CellEnsembleAttributeMatrixName) +, m_FeatureIdsArrayName(SIMPL::CellData::FeatureIds) +, m_CellPhasesArrayName(SIMPL::CellData::Phases) +, m_FeaturePhasesArrayName(SIMPL::FeatureData::Phases) +, m_NumFeaturesArrayName(SIMPL::EnsembleData::NumFeatures) +, m_InputStatsArrayPath(SIMPL::Defaults::StatsGenerator, SIMPL::Defaults::CellEnsembleAttributeMatrixName, SIMPL::EnsembleData::Statistics) +, m_InputPhaseTypesArrayPath(SIMPL::Defaults::StatsGenerator, SIMPL::Defaults::CellEnsembleAttributeMatrixName, SIMPL::EnsembleData::PhaseTypes) +, m_InputPhaseNamesArrayPath(SIMPL::Defaults::StatsGenerator, SIMPL::Defaults::CellEnsembleAttributeMatrixName, SIMPL::EnsembleData::PhaseName) +, m_InputShapeTypesArrayPath(SIMPL::Defaults::StatsGenerator, SIMPL::Defaults::CellEnsembleAttributeMatrixName, SIMPL::EnsembleData::ShapeTypes) +, m_MaskArrayPath(SIMPL::Defaults::ImageDataContainerName, SIMPL::Defaults::CellAttributeMatrixName, SIMPL::CellData::Mask) +, m_UseMask(false) +, m_HaveFeatures(false) +, m_FeatureInputFile("") +, m_CsvOutputFile("") +, m_PeriodicBoundaries(false) +, m_WriteGoalAttributes(false) +, m_SaveGeometricDescriptions(false) +, m_NewAttributeMatrixPath(SIMPL::Defaults::SyntheticVolumeDataContainerName, PrimaryPhaseSyntheticShapeParametersName, "") +, m_NeighborhoodsArrayName(SIMPL::FeatureData::Neighborhoods) +, m_CentroidsArrayName(SIMPL::FeatureData::Centroids) +, m_VolumesArrayName(SIMPL::FeatureData::Volumes) +, m_AxisLengthsArrayName(SIMPL::FeatureData::AxisLengths) +, m_AxisEulerAnglesArrayName(SIMPL::FeatureData::AxisEulerAngles) +, m_Omega3sArrayName(SIMPL::FeatureData::Omega3s) +, m_EquivalentDiametersArrayName(SIMPL::FeatureData::EquivalentDiameters) +, m_Neighbors(nullptr) +, m_FeatureIds(nullptr) +, m_CellPhases(nullptr) +, m_Mask(nullptr) +, m_BoundaryCells(nullptr) +, m_FeaturePhases(nullptr) +, m_Neighborhoods(nullptr) +, m_Centroids(nullptr) +, m_Volumes(nullptr) +, m_AxisLengths(nullptr) +, m_AxisEulerAngles(nullptr) +, m_Omega3s(nullptr) +, m_EquivalentDiameters(nullptr) +, m_PhaseTypes(nullptr) +, m_ShapeTypes(nullptr) +, m_NumFeatures(nullptr) +, m_ErrorOutputFile("") +, m_VtkOutputFile("") { initialize(); @@ -372,8 +371,7 @@ void PackPrimaryPhases::setupFilterParameters() parameters.push_back(SIMPL_NEW_AM_SELECTION_FP("Cell Attribute Matrix", OutputCellAttributeMatrixPath, FilterParameter::RequiredArray, PackPrimaryPhases, req)); } { - DataArraySelectionFilterParameter::RequirementType req = - DataArraySelectionFilterParameter::CreateRequirement(SIMPL::TypeNames::Bool, 1, AttributeMatrix::Type::Cell, IGeometry::Type::Image); + DataArraySelectionFilterParameter::RequirementType req = DataArraySelectionFilterParameter::CreateRequirement(SIMPL::TypeNames::Bool, 1, AttributeMatrix::Type::Cell, IGeometry::Type::Image); parameters.push_back(SIMPL_NEW_DA_SELECTION_FP("Mask", MaskArrayPath, FilterParameter::RequiredArray, PackPrimaryPhases, req)); } parameters.push_back(SeparatorFilterParameter::New("Cell Ensemble Data", FilterParameter::RequiredArray)); @@ -635,7 +633,7 @@ void PackPrimaryPhases::dataCheck() // Cell Data tempPath.update(getOutputCellAttributeMatrixPath().getDataContainerName(), getOutputCellAttributeMatrixPath().getAttributeMatrixName(), getFeatureIdsArrayName()); m_FeatureIdsPtr = getDataContainerArray()->createNonPrereqArrayFromPath, AbstractFilter, int32_t>( - this, tempPath, -1, cDims); /* Assigns the shared_ptr<>(this, tempPath, -1, dims); Assigns the shared_ptr<> to an instance variable that is a weak_ptr<> */ + this, tempPath, -1, cDims); /* Assigns the shared_ptr<>(this, tempPath, -1, dims); Assigns the shared_ptr<> to an instance variable that is a weak_ptr<> */ if(nullptr != m_FeatureIdsPtr.lock().get()) { m_FeatureIds = m_FeatureIdsPtr.lock()->getPointer(0); @@ -643,7 +641,7 @@ void PackPrimaryPhases::dataCheck() tempPath.update(getOutputCellAttributeMatrixPath().getDataContainerName(), getOutputCellAttributeMatrixPath().getAttributeMatrixName(), getCellPhasesArrayName()); m_CellPhasesPtr = getDataContainerArray()->createNonPrereqArrayFromPath, AbstractFilter, int32_t>( - this, tempPath, 0, cDims); /* Assigns the shared_ptr<>(this, tempPath, 0, dims); Assigns the shared_ptr<> to an instance variable that is a weak_ptr<> */ + this, tempPath, 0, cDims); /* Assigns the shared_ptr<>(this, tempPath, 0, dims); Assigns the shared_ptr<> to an instance variable that is a weak_ptr<> */ if(nullptr != m_CellPhasesPtr.lock().get()) { m_CellPhases = m_CellPhasesPtr.lock()->getPointer(0); @@ -660,11 +658,11 @@ void PackPrimaryPhases::dataCheck() m->createNonPrereqAttributeMatrix(this, getOutputCellFeatureAttributeMatrixName(), tDims, AttributeMatrix::Type::CellFeature); PackPrimaryPhases::SaveMethod saveMethod = static_cast(getSaveGeometricDescriptions()); - if (saveMethod == PackPrimaryPhases::SaveMethod::SaveToNew) + if(saveMethod == PackPrimaryPhases::SaveMethod::SaveToNew) { m->createNonPrereqAttributeMatrix(this, getNewAttributeMatrixPath().getAttributeMatrixName(), tDims, AttributeMatrix::Type::CellFeature); } - else if (saveMethod == PackPrimaryPhases::SaveMethod::AppendToExisting) + else if(saveMethod == PackPrimaryPhases::SaveMethod::AppendToExisting) { int err = 0; m->getPrereqAttributeMatrix(this, getSelectedAttributeMatrixPath().getAttributeMatrixName(), err); @@ -690,7 +688,7 @@ void PackPrimaryPhases::dataCheck() // Feature Data tempPath.update(getOutputCellAttributeMatrixPath().getDataContainerName(), getOutputCellFeatureAttributeMatrixName(), getFeaturePhasesArrayName()); m_FeaturePhasesPtr = getDataContainerArray()->createNonPrereqArrayFromPath, AbstractFilter, int32_t>( - this, tempPath, 0, cDims); /* Assigns the shared_ptr<> to an instance variable that is a weak_ptr<> */ + this, tempPath, 0, cDims); /* Assigns the shared_ptr<> to an instance variable that is a weak_ptr<> */ if(nullptr != m_FeaturePhasesPtr.lock().get()) { m_FeaturePhases = m_FeaturePhasesPtr.lock()->getPointer(0); @@ -705,7 +703,7 @@ void PackPrimaryPhases::dataCheck() tempPath.update(getOutputCellAttributeMatrixPath().getDataContainerName(), getOutputCellFeatureAttributeMatrixName(), m_EquivalentDiametersArrayName); m_EquivalentDiametersPtr = getDataContainerArray()->createNonPrereqArrayFromPath, AbstractFilter, float>( - this, tempPath, 0, cDims); /* Assigns the shared_ptr<> to an instance variable that is a weak_ptr<> */ + this, tempPath, 0, cDims); /* Assigns the shared_ptr<> to an instance variable that is a weak_ptr<> */ if(nullptr != m_EquivalentDiametersPtr.lock().get()) { m_EquivalentDiameters = m_EquivalentDiametersPtr.lock()->getPointer(0); @@ -738,7 +736,7 @@ void PackPrimaryPhases::dataCheck() tempPath.update(getOutputCellAttributeMatrixPath().getDataContainerName(), getOutputCellFeatureAttributeMatrixName(), m_AxisEulerAnglesArrayName); m_AxisEulerAnglesPtr = getDataContainerArray()->createNonPrereqArrayFromPath, AbstractFilter, float>( - this, tempPath, 0, cDims); /* Assigns the shared_ptr<> to an instance variable that is a weak_ptr<> */ + this, tempPath, 0, cDims); /* Assigns the shared_ptr<> to an instance variable that is a weak_ptr<> */ if(nullptr != m_AxisEulerAnglesPtr.lock().get()) { m_AxisEulerAngles = m_AxisEulerAnglesPtr.lock()->getPointer(0); @@ -756,7 +754,7 @@ void PackPrimaryPhases::dataCheck() cDims[0] = 1; tempPath.update(getOutputCellAttributeMatrixPath().getDataContainerName(), getOutputCellEnsembleAttributeMatrixName(), getNumFeaturesArrayName()); m_NumFeaturesPtr = getDataContainerArray()->createNonPrereqArrayFromPath, AbstractFilter, int32_t>( - this, tempPath, 0, cDims); /* Assigns the shared_ptr<> to an instance variable that is a weak_ptr<> */ + this, tempPath, 0, cDims); /* Assigns the shared_ptr<> to an instance variable that is a weak_ptr<> */ if(nullptr != m_NumFeaturesPtr.lock().get()) { m_NumFeatures = m_NumFeaturesPtr.lock()->getPointer(0); @@ -905,7 +903,6 @@ void PackPrimaryPhases::execute() return; } - moveShapeDescriptions(); DataContainer::Pointer m = getDataContainerArray()->getDataContainer(getOutputCellAttributeMatrixPath().getDataContainerName()); @@ -1094,7 +1091,7 @@ void PackPrimaryPhases::placeFeatures(Int32ArrayType::Pointer featureOwnersPtr) m->getGeometryAs()->getDimensions(udims); int64_t dims[3] = { - static_cast(udims[0]), static_cast(udims[1]), static_cast(udims[2]), + static_cast(udims[0]), static_cast(udims[1]), static_cast(udims[2]), }; float xRes = m->getGeometryAs()->getXRes(); @@ -1140,9 +1137,9 @@ void PackPrimaryPhases::placeFeatures(Int32ArrayType::Pointer featureOwnersPtr) QString ss = QObject::tr("Tried to cast a statsDataArray[%1].get() to a PrimaryStatsData* " "pointer but this resulted in a nullptr pointer. The value at m_PhaseTypes[%2] = %3 does not match up " "with the type of pointer stored in the StatsDataArray (PrimaryStatsData)\n") - .arg(i) - .arg(i) - .arg(m_PhaseTypes[i]); + .arg(i) + .arg(i) + .arg(m_PhaseTypes[i]); setErrorCondition(-78007); notifyErrorMessage(getHumanLabel(), ss, getErrorCondition()); return; @@ -1765,7 +1762,7 @@ void PackPrimaryPhases::generateFeature(int32_t phase, Feature_t* feature, uint3 { SIMPL_RANDOMNG_NEW_SEEDED(m_Seed) - StatsDataArray& statsDataArray = *(m_StatsDataArray.lock().get()); + StatsDataArray& statsDataArray = *(m_StatsDataArray.lock().get()); float r1 = 1.0f; float a2 = 0.0f, a3 = 0.0f; @@ -1855,7 +1852,7 @@ void PackPrimaryPhases::generateFeature(int32_t phase, Feature_t* feature, uint3 float mf = omega3[0]->getValue(diameter); float s = omega3[1]->getValue(diameter); float omega3f = static_cast(rg.genrand_beta(mf, s)); - if (shapeclass == static_cast(ShapeType::Type::Ellipsoid)) + if(shapeclass == static_cast(ShapeType::Type::Ellipsoid)) { omega3f = 1; } @@ -2495,7 +2492,7 @@ void PackPrimaryPhases::insertFeature(size_t gnum) uint32_t shapeclass = m_ShapeTypes[m_FeaturePhases[gnum]]; // Bail if the shapeclass is not one of our enumerated types - if (shapeclass >= static_cast(ShapeType::Type::ShapeTypeEnd)) + if(shapeclass >= static_cast(ShapeType::Type::ShapeTypeEnd)) { QString ss = QObject::tr("Undefined shape class in shape types array with path %1").arg(m_InputShapeTypesArrayPath.serialize()); setErrorCondition(-78009); @@ -2614,7 +2611,7 @@ void PackPrimaryPhases::assignVoxels() m->getGeometryAs()->getDimensions(udims); int64_t dims[3] = { - static_cast(udims[0]), static_cast(udims[1]), static_cast(udims[2]), + static_cast(udims[0]), static_cast(udims[1]), static_cast(udims[2]), }; #ifdef SIMPLib_USE_PARALLEL_ALGORITHMS @@ -2770,7 +2767,7 @@ void PackPrimaryPhases::assignVoxels() float radCur[3] = {radcur1, radcur2, radcur3}; float xx[3] = {xc, yc, zc}; ShapeOps* shapeOps = m_ShapeOps[shapeclass].get(); - //#if 0 +//#if 0 #ifdef SIMPLib_USE_PARALLEL_ALGORITHMS if(doParallel == true) { @@ -3029,7 +3026,7 @@ void PackPrimaryPhases::cleanupFeatures() m->getGeometryAs()->getDimensions(udims); int64_t dims[3] = { - static_cast(udims[0]), static_cast(udims[1]), static_cast(udims[2]), + static_cast(udims[0]), static_cast(udims[1]), static_cast(udims[2]), }; int64_t neighpoints[6] = {0, 0, 0, 0, 0, 0}; @@ -3275,7 +3272,7 @@ int32_t PackPrimaryPhases::estimateNumFeatures(size_t xpoints, size_t ypoints, s SIMPL_RANDOMNG_NEW() - std::vector primaryPhasesLocal; + std::vector primaryPhasesLocal; std::vector primaryPhaseFractionsLocal; double totalprimaryfractions = 0.0; // find which phases are primary phases @@ -3450,10 +3447,7 @@ void PackPrimaryPhases::moveShapeDescriptions() DataContainer::Pointer m = getDataContainerArray()->getDataContainer(getOutputCellAttributeMatrixPath().getDataContainerName()); QStringList names; - names << m_EquivalentDiametersArrayName << m_Omega3sArrayName << m_AxisEulerAnglesArrayName - << m_AxisLengthsArrayName << m_VolumesArrayName - << m_CentroidsArrayName << m_NeighborhoodsArrayName; - + names << m_EquivalentDiametersArrayName << m_Omega3sArrayName << m_AxisEulerAnglesArrayName << m_AxisLengthsArrayName << m_VolumesArrayName << m_CentroidsArrayName << m_NeighborhoodsArrayName; AttributeMatrix::Pointer cellFeatureAttrMat = m->getAttributeMatrix(m_OutputCellFeatureAttributeMatrixName); QVector tDims(1, 0); @@ -3465,12 +3459,12 @@ void PackPrimaryPhases::moveShapeDescriptions() } PackPrimaryPhases::SaveMethod saveMethod = static_cast(getSaveGeometricDescriptions()); - if (saveMethod == PackPrimaryPhases::SaveMethod::SaveToNew) + if(saveMethod == PackPrimaryPhases::SaveMethod::SaveToNew) { AttributeMatrix::Pointer newAM = getDataContainerArray()->getAttributeMatrix(getNewAttributeMatrixPath()); - if (newAM != AttributeMatrix::NullPointer()) + if(newAM != AttributeMatrix::NullPointer()) { - if (attrArrays.size() > 0) + if(attrArrays.size() > 0) { size_t incomingArrayTupleCount = attrArrays[0]->getNumberOfTuples(); size_t newAMTupleCount = newAM->getTupleDimensions()[0]; @@ -3478,18 +3472,18 @@ void PackPrimaryPhases::moveShapeDescriptions() newAM->resizeAttributeArrays(tDims); } - foreach (IDataArray::Pointer incomingArray, attrArrays) + foreach(IDataArray::Pointer incomingArray, attrArrays) { newAM->addAttributeArray(incomingArray->getName(), incomingArray); } } } - else if (saveMethod == PackPrimaryPhases::SaveMethod::AppendToExisting) + else if(saveMethod == PackPrimaryPhases::SaveMethod::AppendToExisting) { AttributeMatrix::Pointer existingAM = getDataContainerArray()->getAttributeMatrix(getSelectedAttributeMatrixPath()); - if (existingAM != AttributeMatrix::NullPointer()) + if(existingAM != AttributeMatrix::NullPointer()) { - if (attrArrays.size() > 0) + if(attrArrays.size() > 0) { size_t incomingArrayTupleCount = attrArrays[0]->getNumberOfTuples(); size_t existingAMTupleCount = existingAM->getTupleDimensions()[0]; @@ -3497,11 +3491,11 @@ void PackPrimaryPhases::moveShapeDescriptions() existingAM->resizeAttributeArrays(tDims); } - foreach (IDataArray::Pointer incomingArray, attrArrays) + foreach(IDataArray::Pointer incomingArray, attrArrays) { int err = 0; IDataArray::Pointer existingArray = existingAM->getPrereqIDataArray(this, incomingArray->getName(), err); - if (existingArray != IDataArray::NullPointer()) + if(existingArray != IDataArray::NullPointer()) { existingArray->copyData(tDims[0], incomingArray); } From eebc7122910825d99ee80e59c6a4a30788272100 Mon Sep 17 00:00:00 2001 From: Joey Kleingers Date: Wed, 5 Jul 2017 14:34:15 -0400 Subject: [PATCH 06/11] Fixing bug that was causing the InsertPrecipitatePhases and PackPrimaryPhases filters to crash the program due to trying to access null arrays. --- .../SyntheticBuildingFilters/InsertPrecipitatePhases.cpp | 6 +++++- .../SyntheticBuildingFilters/PackPrimaryPhases.cpp | 6 +++++- 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/Source/Plugins/SyntheticBuilding/SyntheticBuildingFilters/InsertPrecipitatePhases.cpp b/Source/Plugins/SyntheticBuilding/SyntheticBuildingFilters/InsertPrecipitatePhases.cpp index 1489092ad4..0d2a405133 100644 --- a/Source/Plugins/SyntheticBuilding/SyntheticBuildingFilters/InsertPrecipitatePhases.cpp +++ b/Source/Plugins/SyntheticBuilding/SyntheticBuildingFilters/InsertPrecipitatePhases.cpp @@ -2991,7 +2991,11 @@ void InsertPrecipitatePhases::moveShapeDescriptions() QList attrArrays; foreach(const QString name, names) { - attrArrays.push_back(cellFeatureAttrMat->removeAttributeArray(name)); + IDataArray::Pointer arrayPtr = cellFeatureAttrMat->removeAttributeArray(name); + if (arrayPtr != IDataArray::NullPointer()) + { + attrArrays.push_back(arrayPtr); + } } InsertPrecipitatePhases::SaveMethod saveMethod = static_cast(getSaveGeometricDescriptions()); diff --git a/Source/Plugins/SyntheticBuilding/SyntheticBuildingFilters/PackPrimaryPhases.cpp b/Source/Plugins/SyntheticBuilding/SyntheticBuildingFilters/PackPrimaryPhases.cpp index 54fce5c548..45988189d0 100644 --- a/Source/Plugins/SyntheticBuilding/SyntheticBuildingFilters/PackPrimaryPhases.cpp +++ b/Source/Plugins/SyntheticBuilding/SyntheticBuildingFilters/PackPrimaryPhases.cpp @@ -3455,7 +3455,11 @@ void PackPrimaryPhases::moveShapeDescriptions() QList attrArrays; foreach(const QString name, names) { - attrArrays.push_back(cellFeatureAttrMat->removeAttributeArray(name)); + IDataArray::Pointer arrayPtr = cellFeatureAttrMat->removeAttributeArray(name); + if (arrayPtr != IDataArray::NullPointer()) + { + attrArrays.push_back(arrayPtr); + } } PackPrimaryPhases::SaveMethod saveMethod = static_cast(getSaveGeometricDescriptions()); From f64b60989ba2b2532cd3055de66eeb08cb4332a0 Mon Sep 17 00:00:00 2001 From: Joey Kleingers Date: Wed, 5 Jul 2017 15:03:54 -0400 Subject: [PATCH 07/11] Clang formatting a line in InsertPrecipitatePhases filter. --- .../SyntheticBuildingFilters/InsertPrecipitatePhases.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Source/Plugins/SyntheticBuilding/SyntheticBuildingFilters/InsertPrecipitatePhases.cpp b/Source/Plugins/SyntheticBuilding/SyntheticBuildingFilters/InsertPrecipitatePhases.cpp index 0d2a405133..a6622297b6 100644 --- a/Source/Plugins/SyntheticBuilding/SyntheticBuildingFilters/InsertPrecipitatePhases.cpp +++ b/Source/Plugins/SyntheticBuilding/SyntheticBuildingFilters/InsertPrecipitatePhases.cpp @@ -2992,7 +2992,7 @@ void InsertPrecipitatePhases::moveShapeDescriptions() foreach(const QString name, names) { IDataArray::Pointer arrayPtr = cellFeatureAttrMat->removeAttributeArray(name); - if (arrayPtr != IDataArray::NullPointer()) + if(arrayPtr != IDataArray::NullPointer()) { attrArrays.push_back(arrayPtr); } From 648db8ffa6c65e698d39ea57f4b7689e57ee63da Mon Sep 17 00:00:00 2001 From: Joey Kleingers Date: Wed, 5 Jul 2017 15:03:54 -0400 Subject: [PATCH 08/11] Clang formatting a line in InsertPrecipitatePhases and PackPrimaryPhases filters. --- .../SyntheticBuilding/SyntheticBuildingFilters/PackPrimaryPhases.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Source/Plugins/SyntheticBuilding/SyntheticBuildingFilters/PackPrimaryPhases.cpp b/Source/Plugins/SyntheticBuilding/SyntheticBuildingFilters/PackPrimaryPhases.cpp index 45988189d0..bcc65d5208 100644 --- a/Source/Plugins/SyntheticBuilding/SyntheticBuildingFilters/PackPrimaryPhases.cpp +++ b/Source/Plugins/SyntheticBuilding/SyntheticBuildingFilters/PackPrimaryPhases.cpp @@ -3456,7 +3456,7 @@ void PackPrimaryPhases::moveShapeDescriptions() foreach(const QString name, names) { IDataArray::Pointer arrayPtr = cellFeatureAttrMat->removeAttributeArray(name); - if (arrayPtr != IDataArray::NullPointer()) + if(arrayPtr != IDataArray::NullPointer()) { attrArrays.push_back(arrayPtr); } From 01c33951a564c2592b30c46a1b828fb79530dd94 Mon Sep 17 00:00:00 2001 From: Joey Kleingers Date: Thu, 6 Jul 2017 16:58:20 -0400 Subject: [PATCH 09/11] Adding new copyData function that allows copying data from an arbitrary area of a source array to an offset in a destination array. --- .../Utilities/ModifiedLambertProjectionArray.cpp | 14 +++++++++---- .../Utilities/ModifiedLambertProjectionArray.h | 24 ++++++++++++++-------- 2 files changed, 25 insertions(+), 13 deletions(-) diff --git a/Source/OrientationLib/Utilities/ModifiedLambertProjectionArray.cpp b/Source/OrientationLib/Utilities/ModifiedLambertProjectionArray.cpp index dcaa5956bc..15e13abd17 100644 --- a/Source/OrientationLib/Utilities/ModifiedLambertProjectionArray.cpp +++ b/Source/OrientationLib/Utilities/ModifiedLambertProjectionArray.cpp @@ -353,7 +353,7 @@ int ModifiedLambertProjectionArray::copyTuple(size_t currentPos, size_t newPos) // ----------------------------------------------------------------------------- // // ----------------------------------------------------------------------------- -bool ModifiedLambertProjectionArray::copyData(size_t destTupleOffset, IDataArray::Pointer sourceArray) +bool ModifiedLambertProjectionArray::copyData(size_t destTupleOffset, IDataArray::Pointer sourceArray, size_t srcTupleOffset, size_t totalSrcTuples) { if(!m_IsAllocated) { return false; } if(0 == m_ModifiedLambertProjectionArray.size()) { return false; } @@ -363,11 +363,17 @@ bool ModifiedLambertProjectionArray::copyData(size_t destTupleOffset, IDataArray if(sourceArray->getNumberOfComponents() != getNumberOfComponents()) { return false; } - if( sourceArray->getNumberOfTuples()*sourceArray->getNumberOfComponents() + destTupleOffset*getNumberOfComponents() > m_ModifiedLambertProjectionArray.size() ) { return false; } + if(srcTupleOffset + totalSrcTuples > sourceArray->getNumberOfTuples()) + { + return false; + } - size_t sourceNTuples = source->getNumberOfTuples(); + if(totalSrcTuples * sourceArray->getNumberOfComponents() + destTupleOffset * getNumberOfComponents() > m_ModifiedLambertProjectionArray.size()) + { + return false; + } - for(size_t i = 0; i < sourceNTuples; i++) + for(size_t i = srcTupleOffset; i < srcTupleOffset + totalSrcTuples; i++) { m_ModifiedLambertProjectionArray[destTupleOffset + i] = (*source)[i]; } diff --git a/Source/OrientationLib/Utilities/ModifiedLambertProjectionArray.h b/Source/OrientationLib/Utilities/ModifiedLambertProjectionArray.h index ea0657d97d..e60f0930b3 100644 --- a/Source/OrientationLib/Utilities/ModifiedLambertProjectionArray.h +++ b/Source/OrientationLib/Utilities/ModifiedLambertProjectionArray.h @@ -252,24 +252,30 @@ class OrientationLib_EXPORT ModifiedLambertProjectionArray : public IDataArray */ virtual int copyTuple(size_t currentPos, size_t newPos); + // This line must be here, because we are overloading the copyData pure virtual function in IDataArray. + // This is required so that other classes can call this version of copyData from the subclasses. + using IDataArray::copyData; + /** - * @brief copyData This method copies all data from the sourceArray into - * the current array starting at the target destination tuple offset value. + * @brief copyData This method copies the number of tuples specified by the + * totalSrcTuples value starting from the source tuple offset value in sourceArray + * into the current array starting at the target destination tuple offset value. * - * For example if the DataArray has 10 tuples and the destTupleOffset = 5 then - * then source data will be copied into the destination array starting at - * destination tuple 5. In psuedo code it would be the following: + * For example if the DataArray has 10 tuples, the source DataArray has 10 tuples, + * the destTupleOffset = 5, the srcTupleOffset = 5, and the totalSrcTuples = 3, + * then tuples 5, 6, and 7 will be copied from the source into tuples 5, 6, and 7 + * of the destination array. In psuedo code it would be the following: * @code - * destArray[5] = sourceArray[0]; - * destArray[6] = sourceArray[1]; + * destArray[5] = sourceArray[5]; + * destArray[6] = sourceArray[6]; + * destArray[7] = sourceArray[7]; * ..... * @endcode * @param destTupleOffset * @param sourceArray * @return */ - virtual bool copyData(size_t destTupleOffset, IDataArray::Pointer sourceArray); - + virtual bool copyData(size_t destTupleOffset, IDataArray::Pointer sourceArray, size_t srcTupleOffset, size_t totalSrcTuples); /** * @brief Splats the same value c across all values in the Tuple From c8bae1241400d6cff463381ffb1a3ce28051af3f Mon Sep 17 00:00:00 2001 From: Joey Kleingers Date: Thu, 6 Jul 2017 17:33:39 -0400 Subject: [PATCH 10/11] Changing the name of copyData functions to copyFromArray. --- Source/OrientationLib/Utilities/ModifiedLambertProjectionArray.cpp | 2 +- Source/OrientationLib/Utilities/ModifiedLambertProjectionArray.h | 4 ++-- Source/Plugins/Sampling/SamplingFilters/AppendImageGeometryZSlice.cpp | 2 +- .../SyntheticBuildingFilters/InsertPrecipitatePhases.cpp | 2 +- .../SyntheticBuilding/SyntheticBuildingFilters/PackPrimaryPhases.cpp | 2 +- 5 files changed, 6 insertions(+), 6 deletions(-) diff --git a/Source/OrientationLib/Utilities/ModifiedLambertProjectionArray.cpp b/Source/OrientationLib/Utilities/ModifiedLambertProjectionArray.cpp index 15e13abd17..c18d66a351 100644 --- a/Source/OrientationLib/Utilities/ModifiedLambertProjectionArray.cpp +++ b/Source/OrientationLib/Utilities/ModifiedLambertProjectionArray.cpp @@ -353,7 +353,7 @@ int ModifiedLambertProjectionArray::copyTuple(size_t currentPos, size_t newPos) // ----------------------------------------------------------------------------- // // ----------------------------------------------------------------------------- -bool ModifiedLambertProjectionArray::copyData(size_t destTupleOffset, IDataArray::Pointer sourceArray, size_t srcTupleOffset, size_t totalSrcTuples) +bool ModifiedLambertProjectionArray::copyFromArray(size_t destTupleOffset, IDataArray::Pointer sourceArray, size_t srcTupleOffset, size_t totalSrcTuples) { if(!m_IsAllocated) { return false; } if(0 == m_ModifiedLambertProjectionArray.size()) { return false; } diff --git a/Source/OrientationLib/Utilities/ModifiedLambertProjectionArray.h b/Source/OrientationLib/Utilities/ModifiedLambertProjectionArray.h index e60f0930b3..c7f38c0658 100644 --- a/Source/OrientationLib/Utilities/ModifiedLambertProjectionArray.h +++ b/Source/OrientationLib/Utilities/ModifiedLambertProjectionArray.h @@ -254,7 +254,7 @@ class OrientationLib_EXPORT ModifiedLambertProjectionArray : public IDataArray // This line must be here, because we are overloading the copyData pure virtual function in IDataArray. // This is required so that other classes can call this version of copyData from the subclasses. - using IDataArray::copyData; + using IDataArray::copyFromArray; /** * @brief copyData This method copies the number of tuples specified by the @@ -275,7 +275,7 @@ class OrientationLib_EXPORT ModifiedLambertProjectionArray : public IDataArray * @param sourceArray * @return */ - virtual bool copyData(size_t destTupleOffset, IDataArray::Pointer sourceArray, size_t srcTupleOffset, size_t totalSrcTuples); + virtual bool copyFromArray(size_t destTupleOffset, IDataArray::Pointer sourceArray, size_t srcTupleOffset, size_t totalSrcTuples); /** * @brief Splats the same value c across all values in the Tuple diff --git a/Source/Plugins/Sampling/SamplingFilters/AppendImageGeometryZSlice.cpp b/Source/Plugins/Sampling/SamplingFilters/AppendImageGeometryZSlice.cpp index 471de06c4e..32b5d12bc4 100644 --- a/Source/Plugins/Sampling/SamplingFilters/AppendImageGeometryZSlice.cpp +++ b/Source/Plugins/Sampling/SamplingFilters/AppendImageGeometryZSlice.cpp @@ -289,7 +289,7 @@ void AppendImageGeometryZSlice::execute() IDataArray::Pointer inputArray = inputCellAttrMat->getAttributeArray(*iter); if(nullptr != inputArray.get()) { - p->copyData(tupleOffset, inputArray); + p->copyFromArray(tupleOffset, inputArray); } else { diff --git a/Source/Plugins/SyntheticBuilding/SyntheticBuildingFilters/InsertPrecipitatePhases.cpp b/Source/Plugins/SyntheticBuilding/SyntheticBuildingFilters/InsertPrecipitatePhases.cpp index a6622297b6..ee584620f3 100644 --- a/Source/Plugins/SyntheticBuilding/SyntheticBuildingFilters/InsertPrecipitatePhases.cpp +++ b/Source/Plugins/SyntheticBuilding/SyntheticBuildingFilters/InsertPrecipitatePhases.cpp @@ -3037,7 +3037,7 @@ void InsertPrecipitatePhases::moveShapeDescriptions() IDataArray::Pointer existingArray = existingAM->getPrereqIDataArray(this, incomingArray->getName(), err); if(existingArray != IDataArray::NullPointer()) { - existingArray->copyData(existingAMTupleCount, incomingArray); + existingArray->copyFromArray(existingAMTupleCount, incomingArray); } } } diff --git a/Source/Plugins/SyntheticBuilding/SyntheticBuildingFilters/PackPrimaryPhases.cpp b/Source/Plugins/SyntheticBuilding/SyntheticBuildingFilters/PackPrimaryPhases.cpp index bcc65d5208..e0c9edfc40 100644 --- a/Source/Plugins/SyntheticBuilding/SyntheticBuildingFilters/PackPrimaryPhases.cpp +++ b/Source/Plugins/SyntheticBuilding/SyntheticBuildingFilters/PackPrimaryPhases.cpp @@ -3501,7 +3501,7 @@ void PackPrimaryPhases::moveShapeDescriptions() IDataArray::Pointer existingArray = existingAM->getPrereqIDataArray(this, incomingArray->getName(), err); if(existingArray != IDataArray::NullPointer()) { - existingArray->copyData(tDims[0], incomingArray); + existingArray->copyFromArray(tDims[0], incomingArray); } } } From bed46e82a0b5286d1f816803ae3bdfe455360a05 Mon Sep 17 00:00:00 2001 From: Joey Kleingers Date: Fri, 7 Jul 2017 16:47:23 -0400 Subject: [PATCH 11/11] Writing code to append the valid part (instead of the entire thing) of the precipitate phases arrays to the selected array. --- .../InsertPrecipitatePhases.cpp | 83 ++++++++++++++-------- .../InsertPrecipitatePhases.h | 10 +++ 2 files changed, 62 insertions(+), 31 deletions(-) diff --git a/Source/Plugins/SyntheticBuilding/SyntheticBuildingFilters/InsertPrecipitatePhases.cpp b/Source/Plugins/SyntheticBuilding/SyntheticBuildingFilters/InsertPrecipitatePhases.cpp index ee584620f3..6dc73abbf4 100644 --- a/Source/Plugins/SyntheticBuilding/SyntheticBuildingFilters/InsertPrecipitatePhases.cpp +++ b/Source/Plugins/SyntheticBuilding/SyntheticBuildingFilters/InsertPrecipitatePhases.cpp @@ -2986,7 +2986,6 @@ void InsertPrecipitatePhases::moveShapeDescriptions() names << m_EquivalentDiametersArrayName << m_Omega3sArrayName << m_AxisEulerAnglesArrayName << m_AxisLengthsArrayName << m_VolumesArrayName << m_CentroidsArrayName; AttributeMatrix::Pointer cellFeatureAttrMat = getDataContainerArray()->getAttributeMatrix(getFeaturePhasesArrayPath()); - QVector tDims(1, 0); QList attrArrays; foreach(const QString name, names) @@ -3001,44 +3000,66 @@ void InsertPrecipitatePhases::moveShapeDescriptions() InsertPrecipitatePhases::SaveMethod saveMethod = static_cast(getSaveGeometricDescriptions()); if(saveMethod == InsertPrecipitatePhases::SaveMethod::SaveToNew) { - AttributeMatrix::Pointer newAM = getDataContainerArray()->getAttributeMatrix(getNewAttributeMatrixPath()); - if(newAM != AttributeMatrix::NullPointer()) + saveToNewAttributeMatrix(attrArrays); + } + else if(saveMethod == InsertPrecipitatePhases::SaveMethod::AppendToExisting) + { + appendToExistingAttributeMatrix(attrArrays); + } +} + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +void InsertPrecipitatePhases::saveToNewAttributeMatrix(QList incomingArrays) +{ + QVector tDims(1, 0); + + AttributeMatrix::Pointer newAM = getDataContainerArray()->getAttributeMatrix(getNewAttributeMatrixPath()); + if(newAM != AttributeMatrix::NullPointer()) + { + if(incomingArrays.size() > 0) { - if(attrArrays.size() > 0) - { - size_t incomingArrayTupleCount = attrArrays[0]->getNumberOfTuples(); - size_t newAMTupleCount = newAM->getTupleDimensions()[0]; - tDims[0] = incomingArrayTupleCount + newAMTupleCount; - newAM->resizeAttributeArrays(tDims); - } + size_t incomingArrayTupleCount = incomingArrays[0]->getNumberOfTuples(); + size_t newAMTupleCount = newAM->getTupleDimensions()[0]; + tDims[0] = incomingArrayTupleCount + newAMTupleCount; + newAM->resizeAttributeArrays(tDims); + } - foreach(IDataArray::Pointer incomingArray, attrArrays) - { - newAM->addAttributeArray(incomingArray->getName(), incomingArray); - } + foreach(IDataArray::Pointer incomingArray, incomingArrays) + { + newAM->addAttributeArray(incomingArray->getName(), incomingArray); } } - else if(saveMethod == InsertPrecipitatePhases::SaveMethod::AppendToExisting) +} + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +void InsertPrecipitatePhases::appendToExistingAttributeMatrix(QList incomingArrays) +{ + QVector tDims(1, 0); + + AttributeMatrix::Pointer existingAM = getDataContainerArray()->getAttributeMatrix(getSelectedAttributeMatrixPath()); + if(existingAM != AttributeMatrix::NullPointer()) { - AttributeMatrix::Pointer existingAM = getDataContainerArray()->getAttributeMatrix(getSelectedAttributeMatrixPath()); - if(existingAM != AttributeMatrix::NullPointer()) + size_t existingAMTupleCount = existingAM->getTupleDimensions()[0]; + if(incomingArrays.size() > 0) { - size_t existingAMTupleCount = existingAM->getTupleDimensions()[0]; - if(attrArrays.size() > 0) - { - size_t incomingArrayTupleCount = attrArrays[0]->getNumberOfTuples(); - tDims[0] = incomingArrayTupleCount + existingAMTupleCount; - existingAM->resizeAttributeArrays(tDims); - } + size_t incomingArrayTupleCount = incomingArrays[0]->getNumberOfTuples(); + tDims[0] = incomingArrayTupleCount; + existingAM->resizeAttributeArrays(tDims); + } - foreach(IDataArray::Pointer incomingArray, attrArrays) + foreach(IDataArray::Pointer incomingArray, incomingArrays) + { + int err = 0; + IDataArray::Pointer existingArray = existingAM->getPrereqIDataArray(this, incomingArray->getName(), err); + if(existingArray != IDataArray::NullPointer()) { - int err = 0; - IDataArray::Pointer existingArray = existingAM->getPrereqIDataArray(this, incomingArray->getName(), err); - if(existingArray != IDataArray::NullPointer()) - { - existingArray->copyFromArray(existingAMTupleCount, incomingArray); - } + // ATTENTION: This "append" code is making the assumption that there will be 0's preceding the precipitate phase data. The number of preceding + // 0's is equal to the number of elements in the existing array that will be appended to. If this changes, then this "append" code needs to be updated! + existingArray->copyFromArray(existingAMTupleCount, incomingArray, existingAMTupleCount, existingArray->getNumberOfTuples() - existingAMTupleCount); } } } diff --git a/Source/Plugins/SyntheticBuilding/SyntheticBuildingFilters/InsertPrecipitatePhases.h b/Source/Plugins/SyntheticBuilding/SyntheticBuildingFilters/InsertPrecipitatePhases.h index b9850545fb..88c9458c95 100644 --- a/Source/Plugins/SyntheticBuilding/SyntheticBuildingFilters/InsertPrecipitatePhases.h +++ b/Source/Plugins/SyntheticBuilding/SyntheticBuildingFilters/InsertPrecipitatePhases.h @@ -520,6 +520,16 @@ class InsertPrecipitatePhases : public AbstractFilter */ void updateFeatureInstancePointers(); + /** + * @brief saveToNewAttributeMatrix + */ + void saveToNewAttributeMatrix(QList incomingArrays); + + /** + * @brief appendToExistingAttributeMatrix + */ + void appendToExistingAttributeMatrix(QList incomingArrays); + InsertPrecipitatePhases(const InsertPrecipitatePhases&); // Copy Constructor Not Implemented void operator=(const InsertPrecipitatePhases&); // Operator '=' Not Implemented };