// -----------------------------------------------------------------------------
//
// -----------------------------------------------------------------------------
int H5PrimaryStatsDataDelegate::writePrimaryStatsData(PrimaryStatsData* data, hid_t groupId)
{
  if (NULL == data)
  {
    return -1;
  }
  int err = 0;

  // Write the NumFields
  err = writeBoundaryArea(data, groupId);
  if (err < 0)
  {
    return err;
  }

  // Write the PhaseFraction
  err = writePhaseFraction(data, groupId);
  if (err < 0)
  {
    return err;
  }

  // Write the Grain Diameter Info
  err = writeGrainDiameterInfo(data, groupId);

  // Write the Grain Size Distribution
  err = writeDistributionData(groupId,
                 data->getGrainSize_DistType(),
                 DREAM3D::HDF5::Grain_Size_Distribution,
                 data->getGrainSizeDistribution());

  // Write the Bin Numbers
  err = writeBinNumbers(data, groupId);

  // Write the B Over A
  err = writeDistributionData(groupId,
                               data->getBOverA_DistType(),
                               DREAM3D::HDF5::Grain_SizeVBoverA_Distributions,
                               data->getGrainSize_BOverA());

  // Write the C Over A
  err = writeDistributionData(groupId,
                               data->getCOverA_DistType(),
                               DREAM3D::HDF5::Grain_SizeVCoverA_Distributions,
                               data->getGrainSize_COverA());

  // Write the Neighbors
  err = writeDistributionData(groupId,
                               data->getNeighbors_DistType(),
                               DREAM3D::HDF5::Grain_SizeVNeighbors_Distributions,
                               data->getGrainSize_Neighbors());

  // Write the Omegas
  err = writeDistributionData(groupId,
                               data->getOmegas_DistType(),
                               DREAM3D::HDF5::Grain_SizeVOmega3_Distributions,
                               data->getGrainSize_Omegas());

  // Write the Misorientation Bins
  if (NULL != data->getMisorientationBins().get())
  {
    err = data->getMisorientationBins()->writeH5Data(groupId);
  }

  err = writeWeightsData(groupId, DREAM3D::HDF5::MDFWeights, data->getMDF_Weights());


  // Write the ODF
  if (NULL != data->getODF().get())
  {
    err = data->getODF()->writeH5Data(groupId);
  }
  err = writeWeightsData(groupId, DREAM3D::HDF5::ODFWeights, data->getODF_Weights());


  // Write the Axis ODF
  if (NULL != data->getAxisOrientation().get())
  {
    err = data->getAxisOrientation()->writeH5Data(groupId);
  }
  err = writeWeightsData(groupId, DREAM3D::HDF5::AxisODFWeights, data->getAxisODF_Weights());

  return err;
}
// -----------------------------------------------------------------------------
//
// -----------------------------------------------------------------------------
int H5PrimaryStatsDataDelegate::writePrimaryStatsData(PrimaryStatsData* data, hid_t groupId)
{
  if (NULL == data)
  {
    return -1;
  }
  int err = 0;

  // Write the NumFeatures
  err = writeBoundaryArea(data, groupId);
  if (err < 0)
  {
    return err;
  }

  // Write the PhaseFraction
  err = writePhaseFraction(data, groupId);
  if (err < 0)
  {
    return err;
  }

  // Write the Feature Diameter Info
  err = writeFeatureDiameterInfo(data, groupId);

  // Write the Feature Size Distribution
  err = writeDistributionData(groupId,
                              data->getFeatureSize_DistType(),
                              DREAM3D::StringConstants::Feature_Size_Distribution,
                              data->getFeatureSizeDistribution());

  // Write the Bin Numbers
  err = writeBinNumbers(data, groupId);

  // Write the B Over A
  err = writeDistributionData(groupId,
                              data->getBOverA_DistType(),
                              DREAM3D::StringConstants::Feature_SizeVBoverA_Distributions,
                              data->getFeatureSize_BOverA());

  // Write the C Over A
  err = writeDistributionData(groupId,
                              data->getCOverA_DistType(),
                              DREAM3D::StringConstants::Feature_SizeVCoverA_Distributions,
                              data->getFeatureSize_COverA());

  // Write the Neighbors
  err = writeDistributionData(groupId,
                              data->getNeighbors_DistType(),
                              DREAM3D::StringConstants::Feature_SizeVNeighbors_Distributions,
                              data->getFeatureSize_Neighbors());

  // Write the Omegas
  err = writeDistributionData(groupId,
                              data->getOmegas_DistType(),
                              DREAM3D::StringConstants::Feature_SizeVOmega3_Distributions,
                              data->getFeatureSize_Omegas());

  // Write the Misorientation Bins
  if (NULL != data->getMisorientationBins().get())
  {
    QVector<size_t> tDims(1, data->getMisorientationBins()->getNumberOfTuples());
    err = data->getMisorientationBins()->writeH5Data(groupId, tDims);
  }

  err = writeWeightsData(groupId, DREAM3D::StringConstants::MDFWeights, data->getMDF_Weights());


  // Write the ODF
  if (NULL != data->getODF().get())
  {
    QVector<size_t> tDims(1, data->getODF()->getNumberOfTuples());
    err = data->getODF()->writeH5Data(groupId, tDims);
  }
  err = writeWeightsData(groupId, DREAM3D::StringConstants::ODFWeights, data->getODF_Weights());


  // Write the Axis ODF
  if (NULL != data->getAxisOrientation().get())
  {
    QVector<size_t> tDims(1, data->getAxisOrientation()->getNumberOfTuples());
    err = data->getAxisOrientation()->writeH5Data(groupId, tDims);
  }
  err = writeWeightsData(groupId, DREAM3D::StringConstants::AxisODFWeights, data->getAxisODF_Weights());

  return err;
}