// ----------------------------------------------------------------------------- // // ----------------------------------------------------------------------------- void StatsGenMDFWidget::extractStatsData(int index, StatsData* statsData, unsigned int phaseType) { Q_UNUSED(index) VectorOfFloatArray arrays; if(phaseType == SIMPL::PhaseType::PrimaryPhase) { PrimaryStatsData* pp = PrimaryStatsData::SafePointerDownCast(statsData); arrays = pp->getMDF_Weights(); } if(phaseType == SIMPL::PhaseType::PrecipitatePhase) { PrecipitateStatsData* pp = PrecipitateStatsData::SafePointerDownCast(statsData); arrays = pp->getMDF_Weights(); } if(phaseType == SIMPL::PhaseType::TransformationPhase) { TransformationStatsData* tp = TransformationStatsData::SafePointerDownCast(statsData); arrays = tp->getMDF_Weights(); } QVector<float> axis; QVector<float> angle; QVector<float> weights; for (int i = 0; i < arrays.size(); i++) { if(arrays[i]->getName().compare(SIMPL::StringConstants::Axis) == 0) { axis = QVector<float>(static_cast<int>(arrays[i]->getSize())); // This one is 3xn in size ::memcpy( &(axis.front()), arrays[i]->getVoidPointer(0), sizeof(float)*axis.size() ); } if(arrays[i]->getName().compare(SIMPL::StringConstants::Angle) == 0) { angle = QVector<float>(static_cast<int>(arrays[i]->getNumberOfTuples())); ::memcpy( &(angle.front()), arrays[i]->getVoidPointer(0), sizeof(float)*angle.size() ); } if(arrays[i]->getName().compare(SIMPL::StringConstants::Weight) == 0) { weights = QVector<float>(static_cast<int>(arrays[i]->getNumberOfTuples())); ::memcpy( &(weights.front()), arrays[i]->getVoidPointer(0), sizeof(float)*weights.size() ); } } if (arrays.size() > 0) { // Load the data into the table model m_MDFTableModel->setTableData(angle, axis, weights); } on_m_MDFUpdateBtn_clicked(); }
// ----------------------------------------------------------------------------- // // ----------------------------------------------------------------------------- int StatsGenPlotWidget::extractStatsData(int index, QVector<float>& binNumbers, VectorOfFloatArray arrays) { int err = 0; if (m_StatsType == DREAM3D::StatisticsType::UnknownStatisticsGroup) { QMessageBox::critical(this, tr("StatsGenerator"), tr("This Plot has not been assigned a Statistics Group. This should be happening from within the program. Contact the developer."), QMessageBox::Ok, QMessageBox::Ok); return -1; } if (m_DistributionType == DREAM3D::DistributionType::UnknownDistributionType) { QMessageBox::critical(this, tr("StatsGenerator"), tr("The 'Distribution Type' was of an unknown type."), QMessageBox::Ok, QMessageBox::Ok); return -1; } // Remove all the current rows in the table model m_TableModel->removeRows(0, m_TableModel->rowCount()); // This will force a reset of the table model creating a new table model setDistributionType(m_DistributionType); // This makes sure the combo box is set correctly QVector<QString> colors; qint32 count = binNumbers.count(); QStringList colorNames = QColor::colorNames(); qint32 colorOffset = 21; for (qint32 i = 0; i < count; ++i) { colors.push_back(colorNames[colorOffset++]); } QVector<QVector<float> > data; for(VectorOfFloatArray::size_type i = 0; i < arrays.size(); ++i) { QVector<float> col(static_cast<int>(arrays[i]->getNumberOfTuples())); if (arrays[i]->getNumberOfTuples() > 0) { ::memcpy( &(col.front()), arrays[i]->getVoidPointer(0), sizeof(float)*col.size() ); } data.push_back(col); } m_TableModel->setTableData(binNumbers, data, colors); m_TableView->resizeColumnsToContents(); m_TableView->scrollToBottom(); m_TableView->setFocus(); updatePlotCurves(); m_UserUpdatedData = true; return err; }
// ----------------------------------------------------------------------------- // // ----------------------------------------------------------------------------- int H5PrimaryStatsDataDelegate::writeVectorOfArrays(hid_t pid, VectorOfFloatArray colData) { herr_t err = 0; herr_t retErr = 0; // Loop through all the column data and write each one to the HDF5 file size_t numColumns = colData.size(); for (size_t c = 0; c < numColumns; ++c) { //std::cout << "Writing Dataset:" << hdf5GroupName << "/" << columnHeaders[c] << std::endl; err = -1; if(NULL != colData[c].get() && colData[c]->GetSize() > 0) { err = colData[c]->writeH5Data(pid); if(err < 0) { retErr = err; break; } } else { std::cout << ":Null Data Column had no data. Did you create the data?" << std::endl; std::cout << " File: " << __FILE__ << std::endl; std::cout << " Line: " << __LINE__ << std::endl; break; } } return retErr; }
// ----------------------------------------------------------------------------- // // ----------------------------------------------------------------------------- int H5PrimaryStatsDataDelegate::writeVectorOfArrays(hid_t pid, VectorOfFloatArray colData) { herr_t err = 0; herr_t retErr = 0; // Loop through all the column data and write each one to the HDF5 file size_t numColumns = colData.size(); for (size_t c = 0; c < numColumns; ++c) { //qDebug() << "Writing Dataset:" << hdf5GroupName << "/" << columnHeaders[c] ; err = -1; if(NULL != colData[c].get() && colData[c]->getSize() > 0) { QVector<size_t> tDims(1, colData[c]->getNumberOfTuples()); err = colData[c]->writeH5Data(pid, tDims); if(err < 0) { retErr = err; break; } } else { qDebug() << ":Null Data Column had no data. Did you create the data?" ; qDebug() << " File: " << __FILE__ ; qDebug() << " Line: " << __LINE__ ; break; } } return retErr; }
// ----------------------------------------------------------------------------- // // ----------------------------------------------------------------------------- void StatsGenODFWidget::extractStatsData(int index, StatsData* statsData, unsigned int phaseType) { VectorOfFloatArray arrays; if(phaseType == DREAM3D::PhaseType::PrimaryPhase) { PrimaryStatsData* pp = PrimaryStatsData::SafePointerDownCast(statsData); arrays = pp->getODF_Weights(); } if(phaseType == DREAM3D::PhaseType::PrecipitatePhase) { PrecipitateStatsData* pp = PrecipitateStatsData::SafePointerDownCast(statsData); arrays = pp->getODF_Weights(); } if(phaseType == DREAM3D::PhaseType::TransformationPhase) { TransformationStatsData* tp = TransformationStatsData::SafePointerDownCast(statsData); arrays = tp->getODF_Weights(); } if (arrays.size() > 0) { QVector<float> e1(static_cast<int>(arrays[0]->getNumberOfTuples())); ::memcpy( e1.data(), arrays[0]->getVoidPointer(0), sizeof(float)*e1.size() ); QVector<float> e2(static_cast<int>(arrays[1]->getNumberOfTuples())); ::memcpy( e2.data(), arrays[1]->getVoidPointer(0), sizeof(float)*e2.size() ); QVector<float> e3(static_cast<int>(arrays[2]->getNumberOfTuples())); ::memcpy( e3.data(), arrays[2]->getVoidPointer(0), sizeof(float)*e3.size() ); QVector<float> weights(static_cast<int>(arrays[3]->getNumberOfTuples())); ::memcpy( weights.data(), arrays[3]->getVoidPointer(0), sizeof(float)*weights.size() ); QVector<float> sigmas(static_cast<int>(arrays[4]->getNumberOfTuples())); ::memcpy( sigmas.data(), arrays[4]->getVoidPointer(0), sizeof(float)*sigmas.size() ); // Convert from Radians to Degrees for the Euler Angles for(int i = 0; i < e1.size(); ++i) { e1[i] = e1[i] * 180.0f / M_PI; e2[i] = e2[i] * 180.0f / M_PI; e3[i] = e3[i] * 180.0f / M_PI; } if(e1.size() > 0) { // Load the data into the table model m_ODFTableModel->setTableData(e1, e2, e3, weights, sigmas); } } // Write the MDF Data if we have that functionality enabled if (m_MDFWidget != NULL) { m_MDFWidget->extractStatsData(index, statsData, phaseType); } updatePlots(); }
// ----------------------------------------------------------------------------- // // ----------------------------------------------------------------------------- int H5PrimaryStatsDataDelegate::writeWeightsData(hid_t pid, const std::string &hdf5GroupName, VectorOfFloatArray colData) { herr_t err = 0; if (colData.size() == 0) { return err; } // Create the Group Folder hid_t disId = H5Utilities::createGroup(pid, hdf5GroupName); if (disId > 0) { err = writeVectorOfArrays(disId, colData); } // Close the HDF5 Group err |= H5Gclose(disId); return err; }