// ----------------------------------------------------------------------------- // // ----------------------------------------------------------------------------- void StatsGeneratorUtilities::GenerateAxisODFBinData(StatsData* statsData, unsigned int phaseType, QVector<float> &e1s, QVector<float> &e2s, QVector<float> &e3s, QVector<float> &weights, QVector<float> &sigmas, bool computeAxisODF) { QVector<float> aodf; size_t numEntries = e1s.size(); aodf.resize(OrthoRhombicOps::k_OdfSize); if (computeAxisODF) { Texture::CalculateOrthoRhombicODFData(e1s.data(), e2s.data(), e3s.data(), weights.data(), sigmas.data(), true, aodf.data(), numEntries); } if (aodf.size() > 0) { FloatArrayType::Pointer aodfData = FloatArrayType::FromQVector(aodf, SIMPL::StringConstants::AxisOrientation); if (phaseType == SIMPL::PhaseType::PrimaryPhase) { PrimaryStatsData* pp = PrimaryStatsData::SafePointerDownCast(statsData); pp->setAxisOrientation(aodfData); } if (phaseType == SIMPL::PhaseType::PrecipitatePhase) { PrecipitateStatsData* pp = PrecipitateStatsData::SafePointerDownCast(statsData); pp->setAxisOrientation(aodfData); } if (phaseType == SIMPL::PhaseType::TransformationPhase) { TransformationStatsData* tp = TransformationStatsData::SafePointerDownCast(statsData); tp->setAxisOrientation(aodfData); } if (e1s.size() > 0) { FloatArrayType::Pointer euler1 = FloatArrayType::FromQVector(e1s, SIMPL::StringConstants::Euler1); FloatArrayType::Pointer euler2 = FloatArrayType::FromQVector(e2s, SIMPL::StringConstants::Euler2); FloatArrayType::Pointer euler3 = FloatArrayType::FromQVector(e3s, SIMPL::StringConstants::Euler3); FloatArrayType::Pointer sigma = FloatArrayType::FromQVector(sigmas, SIMPL::StringConstants::Sigma); FloatArrayType::Pointer weight = FloatArrayType::FromQVector(weights, SIMPL::StringConstants::Weight); VectorOfFloatArray aodfWeights; aodfWeights.push_back(euler1); aodfWeights.push_back(euler2); aodfWeights.push_back(euler3); aodfWeights.push_back(sigma); aodfWeights.push_back(weight); if (phaseType == SIMPL::PhaseType::PrimaryPhase) { PrimaryStatsData* pp = PrimaryStatsData::SafePointerDownCast(statsData); pp->setAxisODF_Weights(aodfWeights); } if (phaseType == SIMPL::PhaseType::PrecipitatePhase) { PrecipitateStatsData* pp = PrecipitateStatsData::SafePointerDownCast(statsData); pp->setAxisODF_Weights(aodfWeights); } if (phaseType == SIMPL::PhaseType::TransformationPhase) { TransformationStatsData* tp = TransformationStatsData::SafePointerDownCast(statsData); tp->setAxisODF_Weights(aodfWeights); } } } }
// ----------------------------------------------------------------------------- // // ----------------------------------------------------------------------------- void FindAxisODF::execute() { VoxelDataContainer* m = getVoxelDataContainer(); if(NULL == m) { setErrorCondition(-999); notifyErrorMessage("The DataContainer Object was NULL", -999); return; } setErrorCondition(0); dataCheck(false, m->getTotalPoints(), m->getNumFieldTuples(), m->getNumEnsembleTuples()); if(getErrorCondition() < 0) { return; } StatsDataArray& statsDataArray = *m_StatsDataArray; typedef DataArray<unsigned int> XTalType; XTalType* crystruct = XTalType::SafeObjectDownCast<IDataArray*, XTalType*>(m->getEnsembleData(DREAM3D::EnsembleData::CrystalStructures).get()); float r1, r2, r3; int bin; std::vector<FloatArrayType::Pointer> axisodf; std::vector<float> totalaxes; size_t numXTals = crystruct->GetNumberOfTuples(); axisodf.resize(numXTals); totalaxes.resize(numXTals); for (size_t i = 1; i < numXTals; i++) { totalaxes[i] = 0.0; axisodf[i] = FloatArrayType::CreateArray((36 * 36 * 36), DREAM3D::HDF5::AxisOrientation); for (int j = 0; j < (36 * 36 * 36); j++) { axisodf[i]->SetValue(j, 0.0); } } size_t numgrains = m->getNumFieldTuples(); for (size_t i = 0; i < numgrains; i++) { if(m_SurfaceFields[i] == false) { totalaxes[m_FieldPhases[i]]++; } } for (size_t i = 1; i < numgrains; i++) { float ea1 = m_AxisEulerAngles[3 * i]; float ea2 = m_AxisEulerAngles[3 * i + 1]; float ea3 = m_AxisEulerAngles[3 * i + 2]; if(m_SurfaceFields[i] == 0) { OrientationMath::EulerToRod( ea1, ea2, ea3, r1, r2, r3); m_OrientationOps[Ebsd::CrystalStructure::OrthoRhombic]->getODFFZRod(r1, r2, r3); bin = m_OrientationOps[Ebsd::CrystalStructure::OrthoRhombic]->getOdfBin(r1, r2, r3); axisodf[m_FieldPhases[i]]->SetValue(bin, (axisodf[m_FieldPhases[i]]->GetValue(bin) + static_cast<float>((1.0 / totalaxes[m_FieldPhases[i]])))); } } // int err; for (size_t i = 1; i < numXTals; i++) { if(m_PhaseTypes[i] == DREAM3D::PhaseType::PrimaryPhase) { PrimaryStatsData* pp = PrimaryStatsData::SafePointerDownCast(statsDataArray[i].get()); pp->setAxisOrientation(axisodf[i]); } if(m_PhaseTypes[i] == DREAM3D::PhaseType::PrecipitatePhase) { PrecipitateStatsData* pp = PrecipitateStatsData::SafePointerDownCast(statsDataArray[i].get()); pp->setAxisOrientation(axisodf[i]); } if(m_PhaseTypes[i] == DREAM3D::PhaseType::TransformationPhase) { TransformationStatsData* tp = TransformationStatsData::SafePointerDownCast(statsDataArray[i].get()); tp->setAxisOrientation(axisodf[i]); } } notifyStatusMessage("Completed"); }