// ----------------------------------------------------------------------------- // // ----------------------------------------------------------------------------- void EBSDSegmentFeatures::dataCheck() { setErrorCondition(0); DataArrayPath tempPath; SegmentFeatures::dataCheck(); if(getErrorCondition() < 0) { return; } // Set the DataContainerName for the Parent Class (SegmentFeatures) to Use setDataContainerName(m_QuatsArrayPath.getDataContainerName()); DataContainer::Pointer m = getDataContainerArray()->getPrereqDataContainer<AbstractFilter>(this, getDataContainerName(), false); if(getErrorCondition() < 0 || NULL == m.get()) { return; } QVector<size_t> tDims(1, 0); m->createNonPrereqAttributeMatrix<AbstractFilter>(this, getCellFeatureAttributeMatrixName(), tDims, DREAM3D::AttributeMatrixType::CellFeature); QVector<DataArrayPath> dataArrayPaths; QVector<size_t> cDims(1, 1); if(m_UseGoodVoxels == true) { m_GoodVoxelsPtr = getDataContainerArray()->getPrereqArrayFromPath<DataArray<bool>, AbstractFilter>(this, getGoodVoxelsArrayPath(), cDims); /* Assigns the shared_ptr<> to an instance variable that is a weak_ptr<> */ if( NULL != m_GoodVoxelsPtr.lock().get() ) /* Validate the Weak Pointer wraps a non-NULL pointer to a DataArray<T> object */ { m_GoodVoxels = m_GoodVoxelsPtr.lock()->getPointer(0); } /* Now assign the raw pointer to data from the DataArray<T> object */ if(getErrorCondition() >= 0) { dataArrayPaths.push_back(getGoodVoxelsArrayPath()); } } m_CellPhasesPtr = getDataContainerArray()->getPrereqArrayFromPath<DataArray<int32_t>, AbstractFilter>(this, getCellPhasesArrayPath(), cDims); /* Assigns the shared_ptr<> to an instance variable that is a weak_ptr<> */ if( NULL != m_CellPhasesPtr.lock().get() ) /* Validate the Weak Pointer wraps a non-NULL pointer to a DataArray<T> object */ { m_CellPhases = m_CellPhasesPtr.lock()->getPointer(0); } /* Now assign the raw pointer to data from the DataArray<T> object */ if(getErrorCondition() >= 0) { dataArrayPaths.push_back(getCellPhasesArrayPath()); } tempPath.update(getDataContainerName(), m_QuatsArrayPath.getAttributeMatrixName(), getFeatureIdsArrayName() ); m_FeatureIdsPtr = getDataContainerArray()->createNonPrereqArrayFromPath<DataArray<int32_t>, AbstractFilter, int32_t>(this, tempPath, 0, cDims); /* Assigns the shared_ptr<> to an instance variable that is a weak_ptr<> */ if( NULL != m_FeatureIdsPtr.lock().get() ) /* Validate the Weak Pointer wraps a non-NULL pointer to a DataArray<T> object */ { m_FeatureIds = m_FeatureIdsPtr.lock()->getPointer(0); } /* Now assign the raw pointer to data from the DataArray<T> object */ tempPath.update(getDataContainerName(), getCellFeatureAttributeMatrixName(), getActiveArrayName() ); m_ActivePtr = getDataContainerArray()->createNonPrereqArrayFromPath<DataArray<bool>, AbstractFilter, bool>(this, tempPath, true, cDims); /* Assigns the shared_ptr<> to an instance variable that is a weak_ptr<> */ if( NULL != m_ActivePtr.lock().get() ) /* Validate the Weak Pointer wraps a non-NULL pointer to a DataArray<T> object */ { m_Active = m_ActivePtr.lock()->getPointer(0); } /* Now assign the raw pointer to data from the DataArray<T> object */ m_CrystalStructuresPtr = getDataContainerArray()->getPrereqArrayFromPath<DataArray<uint32_t>, AbstractFilter>(this, getCrystalStructuresArrayPath(), cDims); /* Assigns the shared_ptr<> to an instance variable that is a weak_ptr<> */ if( NULL != m_CrystalStructuresPtr.lock().get() ) /* Validate the Weak Pointer wraps a non-NULL pointer to a DataArray<T> object */ { m_CrystalStructures = m_CrystalStructuresPtr.lock()->getPointer(0); } /* Now assign the raw pointer to data from the DataArray<T> object */ cDims[0] = 4; m_QuatsPtr = getDataContainerArray()->getPrereqArrayFromPath<DataArray<float>, AbstractFilter>(this, getQuatsArrayPath(), cDims); /* Assigns the shared_ptr<> to an instance variable that is a weak_ptr<> */ if( NULL != m_QuatsPtr.lock().get() ) /* Validate the Weak Pointer wraps a non-NULL pointer to a DataArray<T> object */ { m_Quats = m_QuatsPtr.lock()->getPointer(0); } /* Now assign the raw pointer to data from the DataArray<T> object */ if(getErrorCondition() >= 0) { dataArrayPaths.push_back(getQuatsArrayPath()); } getDataContainerArray()->validateNumberOfTuples<AbstractFilter>(this, dataArrayPaths); }
// ----------------------------------------------------------------------------- // // ----------------------------------------------------------------------------- void ScaleVolume::execute() { setErrorCondition(0); dataCheck(); if(getErrorCondition() < 0) { return; } if (m_ApplyToVoxelVolume == true) { DataContainer::Pointer m = getDataContainerArray()->getDataContainer(getDataContainerName()); ImageGeom::Pointer image = m->getGeometryAs<ImageGeom>(); float resolution[3] = { 0.0f, 0.0f, 0.0f }; image->getResolution(resolution); resolution[0] *= m_ScaleFactor.x; resolution[1] *= m_ScaleFactor.y; resolution[2] *= m_ScaleFactor.z; image->setResolution(resolution); } if (m_ApplyToSurfaceMesh == true) { updateSurfaceMesh(); } notifyStatusMessage(getHumanLabel(), "Complete"); }
// ----------------------------------------------------------------------------- // // ----------------------------------------------------------------------------- void RegularGridSampleSurfaceMesh::dataCheck() { setErrorCondition(0); DataArrayPath tempPath; DataContainer::Pointer m = getDataContainerArray()->createNonPrereqDataContainer<AbstractFilter>(this, getDataContainerName()); if (getErrorCondition() < 0) { return; } ImageGeom::Pointer image = ImageGeom::CreateGeometry(DREAM3D::Geometry::ImageGeometry); m->setGeometry(image); // Set the Dimensions, Resolution and Origin of the output data container m->getGeometryAs<ImageGeom>()->setDimensions(m_XPoints, m_YPoints, m_ZPoints); m->getGeometryAs<ImageGeom>()->setResolution(m_Resolution.x, m_Resolution.y, m_Resolution.z); m->getGeometryAs<ImageGeom>()->setOrigin(m_Origin.x, m_Origin.y, m_Origin.z); QVector<size_t> tDims(3, 0); tDims[0] = m_XPoints; tDims[1] = m_YPoints; tDims[2] = m_ZPoints; AttributeMatrix::Pointer cellAttrMat = m->createNonPrereqAttributeMatrix<AbstractFilter>(this, getCellAttributeMatrixName(), tDims, DREAM3D::AttributeMatrixType::Cell); if (getErrorCondition() < 0 || NULL == cellAttrMat.get()) { return; } QVector<size_t> cDims(1, 1); tempPath.update(getDataContainerName(), getCellAttributeMatrixName(), getFeatureIdsArrayName() ); m_FeatureIdsPtr = getDataContainerArray()->createNonPrereqArrayFromPath<DataArray<int32_t>, AbstractFilter, int32_t>(this, tempPath, 0, cDims); /* Assigns the shared_ptr<> to an instance variable that is a weak_ptr<> */ if( NULL != m_FeatureIdsPtr.lock().get() ) /* Validate the Weak Pointer wraps a non-NULL pointer to a DataArray<T> object */ { m_FeatureIds = m_FeatureIdsPtr.lock()->getPointer(0); } /* Now assign the raw pointer to data from the DataArray<T> object */ }
// ----------------------------------------------------------------------------- // // ----------------------------------------------------------------------------- int64_t EBSDSegmentFeatures::getSeed(int32_t gnum) { setErrorCondition(0); DataContainer::Pointer m = getDataContainerArray()->getDataContainer(getDataContainerName()); size_t totalPoints = m_FeatureIdsPtr.lock()->getNumberOfTuples(); int64_t seed = -1; Generator& numberGenerator = *m_NumberGenerator; while (seed == -1 && m_TotalRandomNumbersGenerated < totalPoints) { // Get the next voxel index in the precomputed list of voxel seeds int64_t randpoint = numberGenerator(); m_TotalRandomNumbersGenerated++; // Increment this counter if (m_FeatureIds[randpoint] == 0) // If the GrainId of the voxel is ZERO then we can use this as a seed point { if ((m_UseGoodVoxels == false || m_GoodVoxels[randpoint] == true) && m_CellPhases[randpoint] > 0) { seed = randpoint; } } } if (seed >= 0) { m_FeatureIds[seed] = gnum; QVector<size_t> tDims(1, gnum + 1); m->getAttributeMatrix(getCellFeatureAttributeMatrixName())->resizeAttributeArrays(tDims); updateFeatureInstancePointers(); } return seed; }
// ----------------------------------------------------------------------------- // // ----------------------------------------------------------------------------- void AlignSectionsList::find_shifts(std::vector<int64_t>& xshifts, std::vector<int64_t>& yshifts) { DataContainer::Pointer m = getDataContainerArray()->getDataContainer(getDataContainerName()); std::ifstream inFile; inFile.open(m_InputFile.toLatin1().data()); size_t udims[3] = { 0, 0, 0 }; m->getGeometryAs<ImageGeom>()->getDimensions(udims); #if (CMP_SIZEOF_SIZE_T == 4) typedef int32_t DimType; #else typedef int64_t DimType; #endif DimType dims[3] = { static_cast<DimType>(udims[0]), static_cast<DimType>(udims[1]), static_cast<DimType>(udims[2]), }; int64_t slice = 0; int64_t newxshift = 0, newyshift = 0; for (DimType iter = 1; iter < dims[2]; iter++) { inFile >> slice >> newxshift >> newyshift; xshifts[iter] = xshifts[iter - 1] + newxshift; yshifts[iter] = yshifts[iter - 1] + newyshift; } inFile.close(); }
// ----------------------------------------------------------------------------- // // ----------------------------------------------------------------------------- int64_t EBSDSegmentFeatures::getSeed(int32_t gnum, int64_t nextSeed) { setErrorCondition(0); DataContainer::Pointer m = getDataContainerArray()->getDataContainer(getDataContainerName()); size_t totalPoints = m_FeatureIdsPtr.lock()->getNumberOfTuples(); int64_t seed = -1; // start with the next voxel after the last seed size_t randpoint = static_cast<size_t>(nextSeed); while (seed == -1 && randpoint < totalPoints) { if (m_FeatureIds[randpoint] == 0) // If the GrainId of the voxel is ZERO then we can use this as a seed point { if ((m_UseGoodVoxels == false || m_GoodVoxels[randpoint] == true) && m_CellPhases[randpoint] > 0) { seed = randpoint; } else { randpoint += 1; } } else { randpoint += 1; } } if (seed >= 0) { m_FeatureIds[seed] = gnum; QVector<size_t> tDims(1, gnum + 1); m->getAttributeMatrix(getCellFeatureAttributeMatrixName())->resizeAttributeArrays(tDims); updateFeatureInstancePointers(); } return seed; }
// ----------------------------------------------------------------------------- // // ----------------------------------------------------------------------------- void AlignSections::dataCheck() { setErrorCondition(0); DataArrayPath tempPath; ImageGeom::Pointer image = getDataContainerArray()->getPrereqGeometryFromDataContainer<ImageGeom, AbstractFilter>(this, getDataContainerName()); if(getErrorCondition() < 0) { return; } if (image->getXPoints() <= 1 || image->getYPoints() <= 1 || image->getZPoints() <= 1) { QString ss = QObject::tr("The Image Geometry is not 3D and cannot be run through this filter. The dimensions are (%1,%2,%3)").arg(image->getXPoints()).arg(image->getYPoints()).arg(image->getZPoints()); setErrorCondition(-3010); notifyErrorMessage(getHumanLabel(), ss, getErrorCondition()); } tempPath.update(getDataContainerName(), getCellAttributeMatrixName(), ""); getDataContainerArray()->getPrereqAttributeMatrixFromPath<AbstractFilter>(this, tempPath, -301); if (true == m_WriteAlignmentShifts && m_AlignmentShiftFileName.isEmpty() == true) { QString ss = QObject::tr("The alignment shift file name is empty"); setErrorCondition(-1); notifyErrorMessage(getHumanLabel(), ss, getErrorCondition()); } }
// ----------------------------------------------------------------------------- // // ----------------------------------------------------------------------------- void ReadImage::readFilterParameters(AbstractFilterParametersReader* reader, int index) { reader->openFilterGroup(this, index); setInputFileName( reader->readString( "InputFileName", getInputFileName() ) ); setDataContainerName( reader->readString( "DataContainerName", getDataContainerName() ) ); setCellAttributeMatrixName( reader->readString( "CellAttributeMatrixName", getCellAttributeMatrixName() ) ); setImageDataArrayName( reader->readString( "ImageDataArrayName", getImageDataArrayName() ) ); reader->closeFilterGroup(); }
// ----------------------------------------------------------------------------- // // ----------------------------------------------------------------------------- void SetOriginResolutionImageGeom::readFilterParameters(AbstractFilterParametersReader* reader, int index) { reader->openFilterGroup(this, index); setChangeOrigin( reader->readValue("ChangeOrigin", getChangeOrigin()) ); setChangeResolution( reader->readValue("ChangeResolution", getChangeResolution()) ); setOrigin( reader->readFloatVec3("Origin", getOrigin() ) ); setResolution(reader->readFloatVec3("Resolution", getResolution() ) ); setDataContainerName(reader->readString("DataContainerName", getDataContainerName())); reader->closeFilterGroup(); }
// ----------------------------------------------------------------------------- // // ----------------------------------------------------------------------------- void EnsembleInfoReader::readFilterParameters(AbstractFilterParametersReader* reader, int index) { reader->openFilterGroup(this, index); setDataContainerName(reader->readString("DataContainerName", getDataContainerName() ) ); setCellEnsembleAttributeMatrixName(reader->readString("CellEnsembleAttributeMatrixName", getCellEnsembleAttributeMatrixName() ) ); setPhaseTypesArrayName(reader->readString("PhaseTypesArrayName", getPhaseTypesArrayName() ) ); setCrystalStructuresArrayName(reader->readString("CrystalStructuresArrayName", getCrystalStructuresArrayName() ) ); setInputFile( reader->readString( "InputFile", getInputFile() ) ); reader->closeFilterGroup(); }
// ----------------------------------------------------------------------------- // // ----------------------------------------------------------------------------- void ScaleVolume::readFilterParameters(AbstractFilterParametersReader* reader, int index) { reader->openFilterGroup(this, index); setApplyToVoxelVolume( reader->readValue("ApplyToVoxelVolume", getApplyToVoxelVolume()) ); setApplyToSurfaceMesh( reader->readValue("ApplyToSurfaceMesh", getApplyToSurfaceMesh()) ); setScaleFactor( reader->readFloatVec3("ScaleFactor", getScaleFactor() ) ); setDataContainerName(reader->readString("DataContainerName", getDataContainerName())); setSurfaceDataContainerName(reader->readString("SurfaceDataContainerName", getSurfaceDataContainerName())); reader->closeFilterGroup(); }
// ----------------------------------------------------------------------------- // // ----------------------------------------------------------------------------- void SineParamsSegmentFeatures::dataCheck() { DataArrayPath tempPath; setErrorCondition(0); //Set the DataContainerName for the Parent Class (SegmentFeatures) to Use setDataContainerName(m_SineParamsArrayPath.getDataContainerName()); SegmentFeatures::dataCheck(); if(getErrorCondition() < 0) { return; } DataContainer::Pointer m = getDataContainerArray()->getPrereqDataContainer<AbstractFilter>(this, getDataContainerName(), false); if(getErrorCondition() < 0 || NULL == m) { return; } QVector<size_t> tDims(1, 0); AttributeMatrix::Pointer cellFeatureAttrMat = m->createNonPrereqAttributeMatrix<AbstractFilter>(this, getCellFeatureAttributeMatrixName(), tDims, DREAM3D::AttributeMatrixType::CellFeature); if(getErrorCondition() < 0 || NULL == cellFeatureAttrMat.get()) { return; } ImageGeom::Pointer image = m->getPrereqGeometry<ImageGeom, AbstractFilter>(this); if(getErrorCondition() < 0 || NULL == image.get()) { return; } QVector<size_t> dims(1, 3); m_SineParamsPtr = getDataContainerArray()->getPrereqArrayFromPath<DataArray<float>, AbstractFilter>(this, getSineParamsArrayPath(), dims); if( NULL != m_SineParamsPtr.lock().get() ) /* Validate the Weak Pointer wraps a non-NULL pointer to a DataArray<T> object */ { m_SineParams = m_SineParamsPtr.lock()->getPointer(0); } /* Now assign the raw pointer to data from the DataArray<T> object */ dims[0] = 1; tempPath.update(getDataContainerName(), m_SineParamsArrayPath.getAttributeMatrixName(), getFeatureIdsArrayName() ); m_FeatureIdsPtr = getDataContainerArray()->createNonPrereqArrayFromPath<DataArray<int32_t>, AbstractFilter, int32_t>(this, tempPath, 0, dims); /* Assigns the shared_ptr<> to an instance variable that is a weak_ptr<> */ if( NULL != m_FeatureIdsPtr.lock().get() ) /* Validate the Weak Pointer wraps a non-NULL pointer to a DataArray<T> object */ { m_FeatureIds = m_FeatureIdsPtr.lock()->getPointer(0); } /* Now assign the raw pointer to data from the DataArray<T> object */ if(m_UseGoodVoxels == true) { m_GoodVoxelsPtr = getDataContainerArray()->getPrereqArrayFromPath<DataArray<bool>, AbstractFilter>(this, getGoodVoxelsArrayPath(), dims); /* Assigns the shared_ptr<> to an instance variable that is a weak_ptr<> */ if( NULL != m_GoodVoxelsPtr.lock().get() ) /* Validate the Weak Pointer wraps a non-NULL pointer to a DataArray<T> object */ { m_GoodVoxels = m_GoodVoxelsPtr.lock()->getPointer(0); } /* Now assign the raw pointer to data from the DataArray<T> object */ } tempPath.update(getDataContainerName(), getCellFeatureAttributeMatrixName(), getActiveArrayName() ); m_ActivePtr = getDataContainerArray()->createNonPrereqArrayFromPath<DataArray<bool>, AbstractFilter, bool>(this, tempPath, true, dims); /* Assigns the shared_ptr<> to an instance variable that is a weak_ptr<> */ if( NULL != m_ActivePtr.lock().get() ) /* Validate the Weak Pointer wraps a non-NULL pointer to a DataArray<T> object */ { m_Active = m_ActivePtr.lock()->getPointer(0); } /* Now assign the raw pointer to data from the DataArray<T> object */ }
// ----------------------------------------------------------------------------- // // ----------------------------------------------------------------------------- void RegularGridSampleSurfaceMesh::readFilterParameters(AbstractFilterParametersReader* reader, int index) { SampleSurfaceMesh::readFilterParameters(reader, index); reader->openFilterGroup(this, index); setXPoints(reader->readValue("XPoints", getXPoints())); setYPoints(reader->readValue("YPoints", getYPoints())); setZPoints(reader->readValue("ZPoints", getZPoints())); setResolution(reader->readFloatVec3("Resolution", getResolution())); setOrigin(reader->readFloatVec3("Origin", getOrigin())); setDataContainerName(reader->readString("DataContainerName", getDataContainerName())); setCellAttributeMatrixName(reader->readString("CellAttributeMatrixName", getCellAttributeMatrixName() ) ); setFeatureIdsArrayName(reader->readString("FeatureIdsArrayName", getFeatureIdsArrayName() ) ); reader->closeFilterGroup(); }
// ----------------------------------------------------------------------------- // // ----------------------------------------------------------------------------- void InitializeSyntheticVolume::readFilterParameters(AbstractFilterParametersReader* reader, int index) { reader->openFilterGroup(this, index); setDataContainerName(reader->readString("DataContainerName", getDataContainerName() ) ); setCellAttributeMatrixName(reader->readString("CellAttributeMatrixName", getCellAttributeMatrixName() ) ); setDimensions( reader->readIntVec3("Dimensions", getDimensions() ) ); setResolution( reader->readFloatVec3("Resolution", getResolution() ) ); setOrigin( reader->readFloatVec3("Origin", getOrigin() ) ); setInputStatsArrayPath(reader->readDataArrayPath("InputStatsArrayPath", getInputStatsArrayPath() ) ); setInputPhaseTypesArrayPath(reader->readDataArrayPath("InputPhaseTypesArrayPath", getInputPhaseTypesArrayPath() ) ); setInputStatsFile(reader->readString("InputStatsFile", getInputStatsFile() ) ); setEstimateNumberOfFeatures(reader->readValue("EstimateNumberOfFeatures", getEstimateNumberOfFeatures() ) ); reader->closeFilterGroup(); }
// ----------------------------------------------------------------------------- // // ----------------------------------------------------------------------------- void SineParamsSegmentFeatures::execute() { setErrorCondition(0); dataCheck(); if(getErrorCondition() < 0) { return; } DataContainer::Pointer m = getDataContainerArray()->getDataContainer(getDataContainerName()); QVector<size_t> tDims(1, 1); m->getAttributeMatrix(getCellFeatureAttributeMatrixName())->resizeAttributeArrays(tDims); // This runs a subfilter int64_t totalPoints = m_FeatureIdsPtr.lock()->getNumberOfTuples(); // Tell the user we are starting the filter notifyStatusMessage(getMessagePrefix(), getHumanLabel(), "Starting"); //Convert user defined tolerance to radians. //angleTolerance = m_AngleTolerance * SIMPLib::Constants::k_Pi / 180.0f; for(int64_t i = 0; i < totalPoints; i++) { m_FeatureIds[i] = 0; } // Generate the random voxel indices that will be used for the seed points to start a new grain growth/agglomeration const size_t rangeMin = 0; const size_t rangeMax = totalPoints - 1; initializeVoxelSeedGenerator(rangeMin, rangeMax); SegmentFeatures::execute(); size_t totalFeatures = m->getAttributeMatrix(getCellFeatureAttributeMatrixName())->getNumTuples(); if (totalFeatures < 2) { setErrorCondition(-87000); notifyErrorMessage(getHumanLabel(), "The number of Features was 0 or 1 which means no features were detected. Is a threshold value set to high?", getErrorCondition()); return; } // By default we randomize grains if (true == m_RandomizeFeatureIds) { randomizeFeatureIds(totalPoints, totalFeatures); } // If there is an error set this to something negative and also set a message notifyStatusMessage(getHumanLabel(), "Completed"); }
// ----------------------------------------------------------------------------- // // ----------------------------------------------------------------------------- void VectorSegmentFeatures::execute() { setErrorCondition(0); dataCheck(); if(getErrorCondition() < 0) { return; } DataContainer::Pointer m = getDataContainerArray()->getDataContainer(getDataContainerName()); QVector<size_t> tDims(1, 1); m->getAttributeMatrix(getCellFeatureAttributeMatrixName())->resizeAttributeArrays(tDims); updateFeatureInstancePointers(); int64_t totalPoints = static_cast<int64_t>(m_FeatureIdsPtr.lock()->getNumberOfTuples()); m_BeenPickedPtr = BoolArrayType::CreateArray(totalPoints, "BeenPicked INTERNAL ARRAY ONLY"); m_BeenPickedPtr->initializeWithValue(0); m_BeenPicked = m_BeenPickedPtr->getPointer(0); // Convert user defined tolerance to radians. angleTolerance = m_AngleTolerance * SIMPLib::Constants::k_Pi / 180.0f; // Generate the random voxel indices that will be used for the seed points to start a new grain growth/agglomeration const int64_t rangeMin = 0; const int64_t rangeMax = totalPoints - 1; initializeVoxelSeedGenerator(rangeMin, rangeMax); SegmentFeatures::execute(); int32_t totalFeatures = static_cast<int32_t>(m->getAttributeMatrix(getCellFeatureAttributeMatrixName())->getNumTuples()); if (totalFeatures < 2) { setErrorCondition(-87000); notifyErrorMessage(getHumanLabel(), "The number of Features was 0 or 1 which means no Features were detected. A threshold value may be set too high", getErrorCondition()); return; } // By default we randomize grains if (true == m_RandomizeFeatureIds) { randomizeFeatureIds(totalPoints, totalFeatures); } // If there is an error set this to something negative and also set a message notifyStatusMessage(getHumanLabel(), "Completed"); }
// ----------------------------------------------------------------------------- // // ----------------------------------------------------------------------------- void RegularGridSampleSurfaceMesh::execute() { setErrorCondition(0); dataCheck(); if(getErrorCondition() < 0) { return; } SIMPL_RANDOMNG_NEW() DataContainer::Pointer m = getDataContainerArray()->getDataContainer(getDataContainerName()); m->getGeometryAs<ImageGeom>()->setDimensions(m_XPoints, m_YPoints, m_ZPoints); m->getGeometryAs<ImageGeom>()->setOrigin(m_Origin.x, m_Origin.y, m_Origin.z); m->getGeometryAs<ImageGeom>()->setResolution(m_Resolution.x, m_Resolution.y, m_Resolution.z); SampleSurfaceMesh::execute(); notifyStatusMessage(getHumanLabel(), "Complete"); }
// ----------------------------------------------------------------------------- // // ----------------------------------------------------------------------------- void YSChoiAbaqusReader::readFilterParameters(AbstractFilterParametersReader* reader, int index) { reader->openFilterGroup(this, index); setDataContainerName(reader->readString("DataContainerName", getDataContainerName() ) ); setCellAttributeMatrixName(reader->readString("CellAttributeMatrixName", getCellAttributeMatrixName() ) ); setCellFeatureAttributeMatrixName(reader->readString("CellFeatureAttributeMatrixName", getCellFeatureAttributeMatrixName() ) ); setCellEnsembleAttributeMatrixName(reader->readString("CellEnsembleAttributeMatrixName", getCellEnsembleAttributeMatrixName() ) ); setCrystalStructuresArrayName(reader->readString("CrystalStructuresArrayName", getCrystalStructuresArrayName() ) ); setFeatureIdsArrayName(reader->readString("FeatureIdsArrayName", getFeatureIdsArrayName() ) ); setSurfaceFeaturesArrayName(reader->readString("SurfaceFeaturesArrayName", getSurfaceFeaturesArrayName() ) ); setCellPhasesArrayName(reader->readString("CellPhasesArrayName", getCellPhasesArrayName() ) ); setAvgQuatsArrayName(reader->readString("AvgQuatsArrayName", getAvgQuatsArrayName() ) ); setQuatsArrayName(reader->readString("QuatsArrayName", getQuatsArrayName() ) ); setCellEulerAnglesArrayName(reader->readString("CellEulerAnglesArrayName", getCellEulerAnglesArrayName() ) ); setInputFile( reader->readString( "InputFile", getInputFile() ) ); setInputFeatureInfoFile( reader->readString( "InputFeatureInfoFile", getInputFeatureInfoFile() ) ); reader->closeFilterGroup(); }
// ----------------------------------------------------------------------------- // // ----------------------------------------------------------------------------- void InitializeSyntheticVolume::execute() { setErrorCondition(0); dataCheck(); if(getErrorCondition() < 0) { return; } DataContainer::Pointer m = getDataContainerArray()->getDataContainer(getDataContainerName()); AttributeMatrix::Pointer cellAttrMat = m->getAttributeMatrix(getCellAttributeMatrixName()); // Resize the Cell AttributeMatrix to have the correct Tuple Dimensions. QVector<size_t> tDims(3, 0); tDims[0] = m->getGeometryAs<ImageGeom>()->getXPoints(); tDims[1] = m->getGeometryAs<ImageGeom>()->getYPoints(); tDims[2] = m->getGeometryAs<ImageGeom>()->getZPoints(); cellAttrMat->resizeAttributeArrays(tDims); // If there is an error set this to something negative and also set a message notifyStatusMessage(getHumanLabel(), "Complete"); }
// ----------------------------------------------------------------------------- // // ----------------------------------------------------------------------------- void MakeDataContainer::execute() { int err = 0; setErrorCondition(err); // Run the data check to get references to all of our data arrays initialized to the values stored in memory dataCheck(); if (getErrorCondition() < 0) { return; } //ImageGeom::Pointer image = getDataContainerArray()->getDataContainer(getDataContainerName())->getGeometryAs<ImageGeom>(); //size_t index; //size_t iDims[3] = {0, 0, 0}; //image->getDimensions(iDims); //for (size_t z=0;z<image->getZPoints();z++) //{ // for (size_t y=0;y<image->getYPoints();y++) // { // for (size_t x=0;x<image->getXPoints();x++) // { // index = (z * iDims[0] * iDims[1]) + (y * iDims[0]) + x; // m_FeatureIds[index] = z + x + y; // } // } //} VertexGeom::Pointer verts = getDataContainerArray()->getDataContainer(getDataContainerName())->getGeometryAs<VertexGeom>(); for (int64_t i = 0; i < verts->getNumberOfVertices(); i++) { m_FeatureIds[i] = i; } /* Let the GUI know we are done with this filter */ notifyStatusMessage(getHumanLabel(), "Complete"); }
// ----------------------------------------------------------------------------- // // ----------------------------------------------------------------------------- void EBSDSegmentFeatures::execute() { setErrorCondition(0); dataCheck(); if(getErrorCondition() < 0) { return; } DataContainer::Pointer m = getDataContainerArray()->getDataContainer(getDataContainerName()); int64_t totalPoints = static_cast<int64_t>(m_FeatureIdsPtr.lock()->getNumberOfTuples()); QVector<size_t> tDims(1, 1); m->getAttributeMatrix(getCellFeatureAttributeMatrixName())->resizeAttributeArrays(tDims); updateFeatureInstancePointers(); // Convert user defined tolerance to radians. misoTolerance = m_MisorientationTolerance * DREAM3D::Constants::k_Pi / 180.0f; // Generate the random voxel indices that will be used for the seed points to start a new grain growth/agglomeration const int64_t rangeMin = 0; const int64_t rangeMax = totalPoints - 1; initializeVoxelSeedGenerator(rangeMin, rangeMax); SegmentFeatures::execute(); int64_t totalFeatures = static_cast<int64_t>(m_ActivePtr.lock()->getNumberOfTuples()); if (totalFeatures < 2) { setErrorCondition(-87000); notifyErrorMessage(getHumanLabel(), "The number of Features was 0 or 1 which means no Features were detected. A threshold value may be set too high", getErrorCondition()); return; } // By default we randomize grains if (true == getRandomizeFeatureIds()) { totalPoints = static_cast<int64_t>(m->getGeometryAs<ImageGeom>()->getNumberOfElements()); randomizeFeatureIds(totalPoints, totalFeatures); } // If there is an error set this to something negative and also set a message notifyStatusMessage(getHumanLabel(), "Complete"); }
// ----------------------------------------------------------------------------- // // ----------------------------------------------------------------------------- void EnsembleInfoReader::setupFilterParameters() { FilterParameterVector parameters; parameters.push_back(InputFileFilterParameter::New("Input Ensemble Info File", "InputFile", getInputFile(), FilterParameter::Parameter, "*.ini *.txt")); { DataContainerSelectionFilterParameter::RequirementType req; parameters.push_back(DataContainerSelectionFilterParameter::New("Data Container", "DataContainerName", getDataContainerName(), FilterParameter::RequiredArray, req)); } parameters.push_back(SeparatorFilterParameter::New("Ensemble Data", FilterParameter::CreatedArray)); parameters.push_back(StringFilterParameter::New("Ensemble Attribute Matrix", "CellEnsembleAttributeMatrixName", getCellEnsembleAttributeMatrixName(), FilterParameter::CreatedArray)); parameters.push_back(StringFilterParameter::New("Crystal Structures", "CrystalStructuresArrayName", getCrystalStructuresArrayName(), FilterParameter::CreatedArray)); parameters.push_back(StringFilterParameter::New("Phase Types", "PhaseTypesArrayName", getPhaseTypesArrayName(), FilterParameter::CreatedArray)); setFilterParameters(parameters); }
// ----------------------------------------------------------------------------- // // ----------------------------------------------------------------------------- int32_t EnsembleInfoReader::readFile() { setErrorCondition(0); dataCheck(); if(getErrorCondition() < 0) { return getErrorCondition(); } DataContainer::Pointer m = getDataContainerArray()->getDataContainer(getDataContainerName()); AttributeMatrix::Pointer cellensembleAttrMat = m->getAttributeMatrix(getCellEnsembleAttributeMatrixName()); int32_t numphases = 0; QSettings settings(getInputFile(), QSettings::IniFormat); // The .ini or .txt input file settings.beginGroup("EnsembleInfo"); numphases = settings.value("Number_Phases").toInt(); // read number of phases from input file settings.endGroup(); if (0 == numphases) // Either the group name "EnsembleInfo" is incorrect or 0 was entered as the Number_Phases { QString ss = QObject::tr("Check the group name EnsembleInfo and that Number_Phases > 0"); setErrorCondition(-10003); notifyErrorMessage(getHumanLabel(), ss, getErrorCondition()); return -1; } // Figure out if we are reading contiguous groups std::vector<bool> visited(numphases + 1, false); visited[0] = true; //this is DREAM3D's internal, which is always visited. QVector<size_t> tDims(1, numphases + 1); cellensembleAttrMat->resizeAttributeArrays(tDims); updateEnsembleInstancePointers(); for (int32_t index = 1; index < numphases + 1; index++) { QString group = QString::number(index); settings.beginGroup(group); QString xtalString = settings.value(DREAM3D::StringConstants::CrystalStructure, "MissingCrystalStructure").toString(); QString phaseTypeString = settings.value(DREAM3D::StringConstants::PhaseType, "MissingPhaseType").toString(); // Check to make sure the user has something for each of the Crystal Structure and Phase Type if (xtalString.compare("MissingCrystalStructure") == 0) { QString ss = QObject::tr("Missing crystal structure for phase '%1'").arg(group); setErrorCondition(-10008); notifyErrorMessage(getHumanLabel(), ss, getErrorCondition()); return -1; } if (phaseTypeString.compare("MissingPhaseType") == 0) { QString ss = QObject::tr("Missing phase type for phase '%1'").arg(group); setErrorCondition(-10009); notifyErrorMessage(getHumanLabel(), ss, getErrorCondition()); return -1; } // Past that sanity check, so we have values, lets parse them QStringList values; values << xtalString << phaseTypeString; ensembleLookup(values); // Lookup number for the crystal number string and the phase type string read from the file // Check to see if the Crystal Structure string was valid if (m_crystruct == Ebsd::CrystalStructure::UnknownCrystalStructure) // The crystal structure name read from the file was not found in the lookup table { QString ss = QObject::tr("Incorrect crystal structure name '%1'").arg(xtalString); setErrorCondition(-10006); notifyErrorMessage(getHumanLabel(), ss, getErrorCondition()); return -1; } else { m_CrystalStructures[index] = m_crystruct; } // now check to see if the Phase type string was valid. if (m_ptype == DREAM3D::PhaseType::UnknownPhaseType) { QString ss = QObject::tr("Incorrect phase type name '%1'").arg(phaseTypeString); // The phase type name read from the file was not found in the lookup table setErrorCondition(-10007); notifyErrorMessage(getHumanLabel(), ss, getErrorCondition()); return -1; } else { m_PhaseTypes[index] = m_ptype; } visited[index] = true; // Close up this group settings.endGroup(); } //Make sure we visited all the groups. for(std::vector<bool>::size_type i = 0; i < visited.size(); i++) { if(visited[i] == false) { QString ss = QObject::tr("Phase '%1' did not have entries in the file. Phase numbering must start at 1 and no phases may be skipped").arg(i); // The phase type name read from the file was not found in the lookup table setErrorCondition(-10005); notifyErrorMessage(getHumanLabel(), ss, getErrorCondition()); return -1; } } notifyStatusMessage(getHumanLabel(), "Complete"); return 0; }
// ----------------------------------------------------------------------------- // // ----------------------------------------------------------------------------- void EnsembleInfoReader::dataCheck() { setErrorCondition(0); DataArrayPath tempPath; QFileInfo fi(getInputFile()); if (getInputFile().isEmpty() == true) { QString ss = QObject::tr("The input file must be set"); setErrorCondition(-387); notifyErrorMessage(getHumanLabel(), ss, getErrorCondition()); } else if (fi.exists() == false) { QString ss = QObject::tr("The input file does not exist"); setErrorCondition(-388); notifyErrorMessage(getHumanLabel(), ss, getErrorCondition()); } QString ext = fi.suffix(); if (ext != "ini" && ext != "txt") { QString ss = QObject::tr("Incorrect file extension in '%1'. The file extension must be .ini or .txt").arg(getInputFile()); setErrorCondition(-10018); notifyErrorMessage(getHumanLabel(), ss, getErrorCondition()); } if (m_CellEnsembleAttributeMatrixName.isEmpty() == true) { QString ss = QObject::tr("Ensemble Attribute Matrix name must be set"); setErrorCondition(-1); notifyErrorMessage(getHumanLabel(), ss, getErrorCondition()); } DataContainer::Pointer m = getDataContainerArray()->getPrereqDataContainer<AbstractFilter>(this, getDataContainerName()); if(getErrorCondition() < 0) { return; } int32_t numphases = 0; QSettings settings(getInputFile(), QSettings::IniFormat); // The .ini or .txt input file settings.beginGroup("EnsembleInfo"); numphases = settings.value("Number_Phases").toInt(); // read number of phases from input file settings.endGroup(); if (0 == numphases) // Either the group name "EnsembleInfo" is incorrect or 0 was entered as the Number_Phases { QString ss = QObject::tr("Check the group name EnsembleInfo and that Number_Phases > 0"); setErrorCondition(-10003); notifyErrorMessage(getHumanLabel(), ss, getErrorCondition()); } QVector<size_t> tDims(1, numphases + 1); m->createNonPrereqAttributeMatrix<AbstractFilter>(this, getCellEnsembleAttributeMatrixName(), tDims, DREAM3D::AttributeMatrixType::CellEnsemble); if(getErrorCondition() < 0) { return; } QVector<size_t> cDims(1, 1); tempPath.update(getDataContainerName(), getCellEnsembleAttributeMatrixName(), getCrystalStructuresArrayName() ); m_CrystalStructuresPtr = getDataContainerArray()->createNonPrereqArrayFromPath<DataArray<uint32_t>, AbstractFilter, uint32_t>(this, tempPath, Ebsd::CrystalStructure::UnknownCrystalStructure, cDims); /* Assigns the shared_ptr<> to an instance variable that is a weak_ptr<> */ if( NULL != m_CrystalStructuresPtr.lock().get() ) /* Validate the Weak Pointer wraps a non-NULL pointer to a DataArray<T> object */ { m_CrystalStructures = m_CrystalStructuresPtr.lock()->getPointer(0); } /* Now assign the raw pointer to data from the DataArray<T> object */ tempPath.update(getDataContainerName(), getCellEnsembleAttributeMatrixName(), getPhaseTypesArrayName() ); m_PhaseTypesPtr = getDataContainerArray()->createNonPrereqArrayFromPath<DataArray<uint32_t>, AbstractFilter, uint32_t>(this, tempPath, DREAM3D::PhaseType::UnknownPhaseType, cDims); /* Assigns the shared_ptr<> to an instance variable that is a weak_ptr<> */ if( NULL != m_PhaseTypesPtr.lock().get() ) /* Validate the Weak Pointer wraps a non-NULL pointer to a DataArray<T> object */ { m_PhaseTypes = m_PhaseTypesPtr.lock()->getPointer(0); } /* Now assign the raw pointer to data from the DataArray<T> object */ }
// ----------------------------------------------------------------------------- // // ----------------------------------------------------------------------------- void YSChoiAbaqusReader::dataCheck() { DataArrayPath tempPath; setErrorCondition(0); DataContainer::Pointer m = getDataContainerArray()->createNonPrereqDataContainer<AbstractFilter>(this, getDataContainerName()); if(getErrorCondition() < 0) { return; } ImageGeom::Pointer image = ImageGeom::CreateGeometry(DREAM3D::Geometry::ImageGeometry); m->setGeometry(image); QVector<size_t> tDims(3, 0); AttributeMatrix::Pointer cellAttrMat = m->createNonPrereqAttributeMatrix<AbstractFilter>(this, getCellAttributeMatrixName(), tDims, DREAM3D::AttributeMatrixType::Cell); if(getErrorCondition() < 0 || NULL == cellAttrMat.get()) { return; } tDims.resize(1); tDims[0] = 0; AttributeMatrix::Pointer cellFeatureAttrMat = m->createNonPrereqAttributeMatrix<AbstractFilter>(this, getCellFeatureAttributeMatrixName(), tDims, DREAM3D::AttributeMatrixType::CellFeature); if(getErrorCondition() < 0 || NULL == cellFeatureAttrMat.get()) { return; } AttributeMatrix::Pointer cellEnsembleAttrMat = m->createNonPrereqAttributeMatrix<AbstractFilter>(this, getCellEnsembleAttributeMatrixName(), tDims, DREAM3D::AttributeMatrixType::CellEnsemble); if(getErrorCondition() < 0 || NULL == cellEnsembleAttrMat.get()) { return; } QFileInfo fi(getInputFile()); if (getInputFile().isEmpty() == true) { QString ss = QObject::tr("%1 needs the Input File Set and it was not.").arg(ClassName()); setErrorCondition(-387); notifyErrorMessage(getHumanLabel(), ss, getErrorCondition()); } else if (fi.exists() == false) { QString ss = QObject::tr("The input file does not exist"); setErrorCondition(-388); notifyErrorMessage(getHumanLabel(), ss, getErrorCondition()); } else { bool ok = false; //const unsigned int size(1024); // Read header from data file to figure out how many points there are QFile in(getInputFile()); if (!in.open(QIODevice::ReadOnly | QIODevice::Text)) { QString msg = QObject::tr("Abaqus file could not be opened: %1").arg(getInputFile()); setErrorCondition(-100); notifyErrorMessage(getHumanLabel(), "", getErrorCondition()); return; } QString word; bool headerdone = false; int xpoints, ypoints, zpoints; float resx, resy, resz; while (headerdone == false) { QByteArray buf = in.readLine(); if (buf.startsWith(DIMS)) { QList<QByteArray> tokens = buf.split(' '); xpoints = tokens[1].toInt(&ok, 10); ypoints = tokens[2].toInt(&ok, 10); zpoints = tokens[3].toInt(&ok, 10); size_t dims[3] = { static_cast<size_t>(xpoints), static_cast<size_t>(ypoints), static_cast<size_t>(zpoints) }; m->getGeometryAs<ImageGeom>()->setDimensions(dims); m->getGeometryAs<ImageGeom>()->setOrigin(0, 0, 0); } if (RES == word) { QList<QByteArray> tokens = buf.split(' '); resx = tokens[1].toInt(&ok, 10); resy = tokens[2].toInt(&ok, 10); resz = tokens[3].toInt(&ok, 10); float res[3] = {resx, resy, resz}; m->getGeometryAs<ImageGeom>()->setResolution(res); } } } QVector<size_t> dims(1, 3); tempPath.update(getDataContainerName(), getCellAttributeMatrixName(), getCellEulerAnglesArrayName() ); m_CellEulerAnglesPtr = getDataContainerArray()->createNonPrereqArrayFromPath<DataArray<float>, AbstractFilter, float>(this, tempPath, 0, dims); /* Assigns the shared_ptr<> to an instance variable that is a weak_ptr<> */ if( NULL != m_CellEulerAnglesPtr.lock().get() ) /* Validate the Weak Pointer wraps a non-NULL pointer to a DataArray<T> object */ { m_CellEulerAngles = m_CellEulerAnglesPtr.lock()->getPointer(0); } /* Now assign the raw pointer to data from the DataArray<T> object */ dims[0] = 4; tempPath.update(getDataContainerName(), getCellAttributeMatrixName(), getQuatsArrayName() ); m_QuatsPtr = getDataContainerArray()->createNonPrereqArrayFromPath<DataArray<float>, AbstractFilter, float>(this, tempPath, 0, dims); /* Assigns the shared_ptr<> to an instance variable that is a weak_ptr<> */ if( NULL != m_QuatsPtr.lock().get() ) /* Validate the Weak Pointer wraps a non-NULL pointer to a DataArray<T> object */ { m_Quats = m_QuatsPtr.lock()->getPointer(0); } /* Now assign the raw pointer to data from the DataArray<T> object */ tempPath.update(getDataContainerName(), getCellFeatureAttributeMatrixName(), getAvgQuatsArrayName() ); m_AvgQuatsPtr = getDataContainerArray()->createNonPrereqArrayFromPath<DataArray<float>, AbstractFilter, float>(this, tempPath, 0, dims); /* Assigns the shared_ptr<> to an instance variable that is a weak_ptr<> */ if( NULL != m_AvgQuatsPtr.lock().get() ) /* Validate the Weak Pointer wraps a non-NULL pointer to a DataArray<T> object */ { m_AvgQuats = m_AvgQuatsPtr.lock()->getPointer(0); } /* Now assign the raw pointer to data from the DataArray<T> object */ dims[0] = 1; tempPath.update(getDataContainerName(), getCellAttributeMatrixName(), getCellPhasesArrayName() ); m_CellPhasesPtr = getDataContainerArray()->createNonPrereqArrayFromPath<DataArray<int32_t>, AbstractFilter, int32_t>(this, tempPath, 1, dims); /* Assigns the shared_ptr<> to an instance variable that is a weak_ptr<> */ if( NULL != m_CellPhasesPtr.lock().get() ) /* Validate the Weak Pointer wraps a non-NULL pointer to a DataArray<T> object */ { m_CellPhases = m_CellPhasesPtr.lock()->getPointer(0); } /* Now assign the raw pointer to data from the DataArray<T> object */ tempPath.update(getDataContainerName(), getCellFeatureAttributeMatrixName(), getSurfaceFeaturesArrayName() ); m_SurfaceFeaturesPtr = getDataContainerArray()->createNonPrereqArrayFromPath<DataArray<bool>, AbstractFilter, bool>(this, tempPath, false, dims); /* Assigns the shared_ptr<> to an instance variable that is a weak_ptr<> */ if( NULL != m_SurfaceFeaturesPtr.lock().get() ) /* Validate the Weak Pointer wraps a non-NULL pointer to a DataArray<T> object */ { m_SurfaceFeatures = m_SurfaceFeaturesPtr.lock()->getPointer(0); } /* Now assign the raw pointer to data from the DataArray<T> object */ tempPath.update(getDataContainerName(), getCellAttributeMatrixName(), getFeatureIdsArrayName() ); m_FeatureIdsPtr = getDataContainerArray()->createNonPrereqArrayFromPath<DataArray<int32_t>, AbstractFilter, int32_t>(this, tempPath, 0, dims); /* Assigns the shared_ptr<> to an instance variable that is a weak_ptr<> */ if( NULL != m_FeatureIdsPtr.lock().get() ) /* Validate the Weak Pointer wraps a non-NULL pointer to a DataArray<T> object */ { m_FeatureIds = m_FeatureIdsPtr.lock()->getPointer(0); } /* Now assign the raw pointer to data from the DataArray<T> object */ //typedef DataArray<unsigned int> XTalStructArrayType; tempPath.update(getDataContainerName(), getCellEnsembleAttributeMatrixName(), getCrystalStructuresArrayName() ); m_CrystalStructuresPtr = getDataContainerArray()->createNonPrereqArrayFromPath<DataArray<uint32_t>, AbstractFilter, uint32_t>(this, tempPath, Ebsd::CrystalStructure::Cubic_High, dims); /* Assigns the shared_ptr<> to an instance variable that is a weak_ptr<> */ if( NULL != m_CrystalStructuresPtr.lock().get() ) /* Validate the Weak Pointer wraps a non-NULL pointer to a DataArray<T> object */ { m_CrystalStructures = m_CrystalStructuresPtr.lock()->getPointer(0); } /* Now assign the raw pointer to data from the DataArray<T> object */ }
// ----------------------------------------------------------------------------- // // ----------------------------------------------------------------------------- void AlignSections::execute() { setErrorCondition(0); dataCheck(); if(getErrorCondition() < 0) { return; } DataContainer::Pointer m = getDataContainerArray()->getDataContainer(getDataContainerName()); size_t dims[3] = { 0, 0, 0 }; m->getGeometryAs<ImageGeom>()->getDimensions(dims); int64_t xspot = 0, yspot = 0; int64_t newPosition = 0; int64_t currentPosition = 0; std::vector<int64_t> xshifts(dims[2], 0); std::vector<int64_t> yshifts(dims[2], 0); find_shifts(xshifts, yshifts); QList<QString> voxelArrayNames = m->getAttributeMatrix(getCellAttributeMatrixName())->getAttributeArrayNames(); size_t progIncrement = dims[2] / 100; size_t prog = 1; size_t progressInt = 0; size_t slice = 0; for (size_t i = 1; i < dims[2]; i++) { if (i > prog) { progressInt = ((float)i / dims[2]) * 100.0f; QString ss = QObject::tr("Transferring Cell Data || %1% Complete").arg(progressInt); notifyStatusMessage(getMessagePrefix(), getHumanLabel(), ss); prog = prog + progIncrement; } if (getCancel() == true) { return; } slice = (dims[2] - 1) - i; for (size_t l = 0; l < dims[1]; l++) { for (size_t n = 0; n < dims[0]; n++) { if (yshifts[i] >= 0) { yspot = l; } else if (yshifts[i] < 0) { yspot = dims[1] - 1 - l; } if (xshifts[i] >= 0) { xspot = n; } else if (xshifts[i] < 0) { xspot = dims[0] - 1 - n; } newPosition = (slice * dims[0] * dims[1]) + (yspot * dims[0]) + xspot; currentPosition = (slice * dims[0] * dims[1]) + ((yspot + yshifts[i]) * dims[0]) + (xspot + xshifts[i]); if ((yspot + yshifts[i]) >= 0 && (yspot + yshifts[i]) <= static_cast<int64_t>(dims[1]) - 1 && (xspot + xshifts[i]) >= 0 && (xspot + xshifts[i]) <= static_cast<int64_t>(dims[0]) - 1) { for (QList<QString>::iterator iter = voxelArrayNames.begin(); iter != voxelArrayNames.end(); ++iter) { IDataArray::Pointer p = m->getAttributeMatrix(getCellAttributeMatrixName())->getAttributeArray(*iter); p->copyTuple( static_cast<size_t>(currentPosition), static_cast<size_t>(newPosition)); } } if ((yspot + yshifts[i]) < 0 || (yspot + yshifts[i]) > static_cast<int64_t>(dims[1] - 1) || (xspot + xshifts[i]) < 0 || (xspot + xshifts[i]) > static_cast<int64_t>(dims[0]) - 1) { for (QList<QString>::iterator iter = voxelArrayNames.begin(); iter != voxelArrayNames.end(); ++iter) { IDataArray::Pointer p = m->getAttributeMatrix(getCellAttributeMatrixName())->getAttributeArray(*iter); EXECUTE_FUNCTION_TEMPLATE(this, initializeArrayValues, p, p, newPosition) } } } } } // If there is an error set this to something negative and also set a message notifyStatusMessage(getHumanLabel(), "Complete"); }
// ----------------------------------------------------------------------------- // // ----------------------------------------------------------------------------- void InitializeSyntheticVolume::setupFilterParameters() { FilterParameterVector parameters; QStringList linkedProps("EstimatedPrimaryFeatures"); linkedProps << "InputStatsFile"; parameters.push_back(LinkedBooleanFilterParameter::New("Estimate Number of Features", "EstimateNumberOfFeatures", getEstimateNumberOfFeatures(), linkedProps, FilterParameter::Parameter)); parameters.push_back(InputFileFilterParameter::New("Input Statistics File", "InputStatsFile", getInputStatsFile(), FilterParameter::Parameter, "*.dream3d")); PreflightUpdatedValueFilterParameter::Pointer param = PreflightUpdatedValueFilterParameter::New("Estimated Primary Features", "EstimatedPrimaryFeatures", getEstimatedPrimaryFeatures(), FilterParameter::Parameter); param->setReadOnly(true); parameters.push_back(param); parameters.push_back(SeparatorFilterParameter::New("Cell Ensemble Data", FilterParameter::RequiredArray)); { DataArraySelectionFilterParameter::RequirementType req = DataArraySelectionFilterParameter::CreateRequirement(DREAM3D::TypeNames::StatsDataArray, 1, DREAM3D::AttributeMatrixType::CellEnsemble, DREAM3D::Defaults::AnyGeometry); QVector<uint32_t> geomTypes; geomTypes.push_back(DREAM3D::GeometryType::ImageGeometry); geomTypes.push_back(DREAM3D::GeometryType::UnknownGeometry); req.dcGeometryTypes = geomTypes; parameters.push_back(DataArraySelectionFilterParameter::New("Statistics", "InputStatsArrayPath", getInputStatsArrayPath(), FilterParameter::RequiredArray, req)); } { DataArraySelectionFilterParameter::RequirementType req = DataArraySelectionFilterParameter::CreateRequirement(DREAM3D::TypeNames::UInt32, 1, DREAM3D::AttributeMatrixType::CellEnsemble, DREAM3D::Defaults::AnyGeometry); QVector<uint32_t> geomTypes; geomTypes.push_back(DREAM3D::GeometryType::ImageGeometry); geomTypes.push_back(DREAM3D::GeometryType::UnknownGeometry); req.dcGeometryTypes = geomTypes; parameters.push_back(DataArraySelectionFilterParameter::New("Phase Types", "InputPhaseTypesArrayPath", getInputPhaseTypesArrayPath(), FilterParameter::RequiredArray, req)); } parameters.push_back(StringFilterParameter::New("Synthetic Volume Data Container", "DataContainerName", getDataContainerName(), FilterParameter::CreatedArray)); parameters.push_back(SeparatorFilterParameter::New("Cell Data", FilterParameter::CreatedArray)); parameters.push_back(StringFilterParameter::New("Cell Attribute Matrix", "CellAttributeMatrixName", getCellAttributeMatrixName(), FilterParameter::CreatedArray)); parameters.push_back(IntVec3FilterParameter::New("Dimensions", "Dimensions", getDimensions(), FilterParameter::Parameter)); parameters.push_back(FloatVec3FilterParameter::New("Resolution", "Resolution", getResolution(), FilterParameter::Parameter)); parameters.push_back(FloatVec3FilterParameter::New("Origin", "Origin", getOrigin(), FilterParameter::Parameter)); setFilterParameters(parameters); }
// ----------------------------------------------------------------------------- // // ----------------------------------------------------------------------------- void InitializeSyntheticVolume::dataCheck() { setErrorCondition(0); // Create the output Data Container DataContainer::Pointer m = getDataContainerArray()->createNonPrereqDataContainer<AbstractFilter>(this, getDataContainerName()); if(getErrorCondition() < 0) { return; } ImageGeom::Pointer image = ImageGeom::CreateGeometry(DREAM3D::Geometry::ImageGeometry); m->setGeometry(image); // Sanity Check the Dimensions and Resolution INIT_SYNTH_VOLUME_CHECK(Dimensions.x, -5000); INIT_SYNTH_VOLUME_CHECK(Dimensions.y, -5001); INIT_SYNTH_VOLUME_CHECK(Dimensions.z, -5002); INIT_SYNTH_VOLUME_CHECK(Resolution.x, -5003); INIT_SYNTH_VOLUME_CHECK(Resolution.y, -5004); INIT_SYNTH_VOLUME_CHECK(Resolution.z, -5005); // Set the Dimensions, Resolution and Origin of the output data container m->getGeometryAs<ImageGeom>()->setDimensions(m_Dimensions.x, m_Dimensions.y, m_Dimensions.z); m->getGeometryAs<ImageGeom>()->setResolution(m_Resolution.x, m_Resolution.y, m_Resolution.z); m->getGeometryAs<ImageGeom>()->setOrigin(m_Origin.x, m_Origin.y, m_Origin.z); // Create our output Cell and Ensemble Attribute Matrix objects QVector<size_t> tDims(3, 0); tDims[0] = m_Dimensions.x; tDims[1] = m_Dimensions.y; tDims[2] = m_Dimensions.z; AttributeMatrix::Pointer cellAttrMat = m->createNonPrereqAttributeMatrix<AbstractFilter>(this, getCellAttributeMatrixName(), tDims, DREAM3D::AttributeMatrixType::Cell); if(getErrorCondition() < 0 && cellAttrMat.get() == NULL) { return; } QVector<size_t> cDims(1, 1); // This states that we are looking for an array with a single component UInt32ArrayType::Pointer phaseType = getDataContainerArray()->getPrereqArrayFromPath<UInt32ArrayType, AbstractFilter>(this, getInputPhaseTypesArrayPath(), cDims); if(getErrorCondition() < 0 && phaseType.get() == NULL) { return; } QVector<size_t> statsDims(1, 1); StatsDataArray::Pointer statsPtr = getDataContainerArray()->getPrereqArrayFromPath<StatsDataArray, AbstractFilter>(this, getInputStatsArrayPath(), statsDims); if(getErrorCondition() < 0 && statsPtr.get() == NULL) { return; } if(m_EstimateNumberOfFeatures) { m_EstimatedPrimaryFeatures = estimateNumFeatures(m_Dimensions, m_Resolution); } }
void YSChoiAbaqusReader::execute() { dataCheck(); DataContainer::Pointer m = getDataContainerArray()->getDataContainer(getDataContainerName()); int xpoints, ypoints, zpoints, totalpoints = 0; float resx, resy, resz; float** *mat = NULL; //const unsigned int size(1024); // Read header from data file to figure out how many points there are QFile in(getInputFile()); if (!in.open(QIODevice::ReadOnly | QIODevice::Text)) { QString msg = QObject::tr("Abaqus file could not be opened: %1").arg(getInputFile()); setErrorCondition(-100); notifyErrorMessage(getHumanLabel(), "", getErrorCondition()); return; } QString word; bool ok = false; bool headerdone = false; while (headerdone == false) { QByteArray buf = in.readLine(); if (buf.startsWith(DIMS)) { QList<QByteArray> tokens = buf.split(' '); xpoints = tokens[1].toInt(&ok, 10); ypoints = tokens[2].toInt(&ok, 10); zpoints = tokens[3].toInt(&ok, 10); totalpoints = xpoints * ypoints * zpoints; size_t dims[3] = { static_cast<size_t>(xpoints), static_cast<size_t>(ypoints), static_cast<size_t>(zpoints) }; m->getGeometryAs<ImageGeom>()->setDimensions(dims); m->getGeometryAs<ImageGeom>()->setOrigin(0, 0, 0); } if (buf.startsWith(RES)) { QList<QByteArray> tokens = buf.split(' '); resx = tokens[1].toInt(&ok, 10); resy = tokens[2].toInt(&ok, 10); resz = tokens[3].toInt(&ok, 10); float res[3] = {resx, resy, resz}; m->getGeometryAs<ImageGeom>()->setResolution(res); } if (buf.startsWith(LOOKUP)) { headerdone = true; word = QString(buf); } } // Read header from grain info file to figure out how many features there are QFile in2(getInputFeatureInfoFile()); if (!in2.open(QIODevice::ReadOnly | QIODevice::Text)) { QString msg = QObject::tr("Abaqus Feature Info file could not be opened: %1").arg(getInputFeatureInfoFile()); setErrorCondition(-100); notifyErrorMessage(getHumanLabel(), "", getErrorCondition()); return; } int numfeatures; QByteArray buf = in2.readLine(); numfeatures = buf.toInt(&ok, 10); buf = in2.readLine(); QList<QByteArray> tokens = buf.split(' '); // in2 >> word >> word >> word >> word >> word >> word; QVector<size_t> tDims(3, 0); tDims[0] = xpoints; tDims[1] = ypoints; tDims[2] = zpoints; m->getAttributeMatrix(getCellAttributeMatrixName())->resizeAttributeArrays(tDims); tDims.resize(1); tDims[0] = numfeatures + 1; m->getAttributeMatrix(getCellFeatureAttributeMatrixName())->resizeAttributeArrays(tDims); tDims[0] = 2; m->getAttributeMatrix(getCellEnsembleAttributeMatrixName())->resizeAttributeArrays(tDims); updateCellInstancePointers(); updateFeatureInstancePointers(); updateEnsembleInstancePointers(); //Read data file int gnum = 0; bool onedge = false; int col, row, plane; float value; for (int i = 0; i < totalpoints; i++) { mat[i] = new float *[3]; for(int j = 0; j < 3; j++) { mat[i][j] = new float [3]; } onedge = false; gnum = tokens[6].toInt(&ok, 10); col = i % xpoints; row = (i / xpoints) % ypoints; plane = i / (xpoints * ypoints); if (col == 0 || col == (xpoints - 1) || row == 0 || row == (ypoints - 1) || plane == 0 || plane == (zpoints - 1)) { onedge = true; } m_FeatureIds[i] = gnum; m_SurfaceFeatures[gnum] = onedge; } for (int iter1 = 0; iter1 < 3; iter1++) { for (int iter2 = 0; iter2 < 3; iter2++) { headerdone = false; while (headerdone == false) { buf = in2.readLine(); if (buf.startsWith(LOOKUP)) { headerdone = true; //in >> word; } } for (int i = 0; i < totalpoints; i++) { onedge = 0; value = buf.toInt(&ok, 10); mat[i][iter1][iter2] = value; } } } //Read feature info QuatF* avgQuats = reinterpret_cast<QuatF*>(m_AvgQuats); avgQuats[0].x = 0.0; avgQuats[0].y = 0.0; avgQuats[0].z = 0.0; avgQuats[0].w = 0.0; for (int i = 1; i < numfeatures + 1; i++) { buf = in2.readLine(); tokens = buf.split(' '); gnum = tokens[0].toInt(&ok, 10); avgQuats[i].x = tokens[2].toFloat(&ok); avgQuats[i].y = tokens[3].toFloat(&ok); avgQuats[i].z = tokens[4].toFloat(&ok); avgQuats[i].w = tokens[5].toFloat(&ok); } QuatF q; QuatF* quats = reinterpret_cast<QuatF*>(m_Quats); float g[3][3]; for(int i = 0; i < (xpoints * ypoints * zpoints); i++) { for(int j = 0; j < 3; j++) { for(int k = 0; k < 3; k++) { g[j][k] = mat[i][j][k]; } } MatrixMath::Normalize3x3(g); q.w = static_cast<float>( sqrt((1.0 + g[0][0] + g[1][1] + g[2][2])) / 2.0 ); q.x = static_cast<float>( (g[1][2] - g[2][1]) / (4.0 * q.w) ); q.y = static_cast<float>( (g[2][0] - g[0][2]) / (4.0 * q.w) ); q.z = static_cast<float>( (g[0][1] - g[1][0]) / (4.0 * q.w) ); QuaternionMathF::Copy(q, quats[i]); FOrientArrayType eu(m_CellEulerAngles + (3 * i), 3); FOrientTransformsType::qu2eu(FOrientArrayType(q), eu); delete[] mat[i]; } delete[] mat; }
// ----------------------------------------------------------------------------- // // ----------------------------------------------------------------------------- void AlignSectionsMutualInformation::form_features_sections() { DREAM3D_RANDOMNG_NEW() DataContainer::Pointer m = getDataContainerArray()->getDataContainer(getDataContainerName()); size_t udims[3] = { 0, 0, 0 }; m->getGeometryAs<ImageGeom>()->getDimensions(udims); #if (CMP_SIZEOF_SIZE_T == 4) typedef int32_t DimType; #else typedef int64_t DimType; #endif DimType dims[3] = { static_cast<DimType>(udims[0]), static_cast<DimType>(udims[1]), static_cast<DimType>(udims[2]), }; DimType point = 0; DimType seed = 0; bool noseeds = false; int32_t featurecount = 1; DimType neighbor = 0; QuatF q1 = QuaternionMathF::New(); QuatF q2 = QuaternionMathF::New(); QuatF* quats = reinterpret_cast<QuatF*>(m_Quats); float w = 0.0f; float n1 = 0.0f; float n2 = 0.0f; float n3 = 0.0f; DimType randx = 0; DimType randy = 0; bool good = false; DimType x = 0, y = 0, z = 0; DimType col = 0, row = 0; size_t size = 0; size_t initialVoxelsListSize = 1000; m_FeatureCounts->resize(dims[2]); featurecounts = m_FeatureCounts->getPointer(0); std::vector<DimType> voxelslist(initialVoxelsListSize, -1); DimType neighpoints[4] = { 0, 0, 0, 0 }; neighpoints[0] = -dims[0]; neighpoints[1] = -1; neighpoints[2] = 1; neighpoints[3] = dims[0]; uint32_t phase1 = 0, phase2 = 0; for (DimType slice = 0; slice < dims[2]; slice++) { QString ss = QObject::tr("Aligning Sections || Identifying Features on Sections || %1% Complete").arg(((float)slice / dims[2]) * 100); notifyStatusMessage(getMessagePrefix(), getHumanLabel(), ss); featurecount = 1; noseeds = false; while (noseeds == false) { seed = -1; randx = DimType(float(rg.genrand_res53()) * float(dims[0])); randy = DimType(float(rg.genrand_res53()) * float(dims[1])); for (DimType j = 0; j < dims[1]; ++j) { for (DimType i = 0; i < dims[0]; ++i) { x = randx + i; y = randy + j; z = slice; if (x > dims[0] - 1) { x = x - dims[0]; } if (y > dims[1] - 1) { y = y - dims[1]; } point = (z * dims[0] * dims[1]) + (y * dims[0]) + x; if ((m_UseGoodVoxels == false || m_GoodVoxels[point] == true) && m_FeatureIds[point] == 0 && m_CellPhases[point] > 0) { seed = point; } if (seed > -1) { break; } } if( seed > -1) { break; } } if (seed == -1) { noseeds = true; } if (seed >= 0) { size = 0; m_FeatureIds[seed] = featurecount; voxelslist[size] = seed; size++; for (size_t j = 0; j < size; ++j) { DimType currentpoint = voxelslist[j]; col = currentpoint % dims[0]; row = (currentpoint / dims[0]) % dims[1]; QuaternionMathF::Copy(quats[currentpoint], q1); phase1 = m_CrystalStructures[m_CellPhases[currentpoint]]; for (int32_t i = 0; i < 4; i++) { good = true; neighbor = currentpoint + neighpoints[i]; if ((i == 0) && row == 0) { good = false; } if ((i == 3) && row == (dims[1] - 1)) { good = false; } if ((i == 1) && col == 0) { good = false; } if ((i == 2) && col == (dims[0] - 1)) { good = false; } if (good == true && m_FeatureIds[neighbor] <= 0 && m_CellPhases[neighbor] > 0) { w = std::numeric_limits<float>::max(); QuaternionMathF::Copy(quats[neighbor], q2); phase2 = m_CrystalStructures[m_CellPhases[neighbor]]; if (phase1 == phase2) { w = m_OrientationOps[phase1]->getMisoQuat(q1, q2, n1, n2, n3); } if (w < m_MisorientationTolerance) { m_FeatureIds[neighbor] = featurecount; voxelslist[size] = neighbor; size++; if (std::vector<DimType>::size_type(size) >= voxelslist.size()) { size = voxelslist.size(); voxelslist.resize(size + initialVoxelsListSize); for (std::vector<DimType>::size_type v = size; v < voxelslist.size(); ++v) { voxelslist[v] = -1; } } } } } } voxelslist.erase(std::remove(voxelslist.begin(), voxelslist.end(), -1), voxelslist.end()); featurecount++; voxelslist.assign(initialVoxelsListSize, -1); } } featurecounts[slice] = featurecount; } }