IDataArray::Pointer readH5Dataset(hid_t locId,
                                    const std::string &datasetPath,
                                    const std::vector<hsize_t> &dims)
  {
    herr_t err = -1;
    IDataArray::Pointer ptr;
    size_t numElements = 1;
    for (size_t i = 0; i < dims.size(); ++i)
    {
      numElements *= dims[i];
    }
    ptr = DataArray<T>::CreateArray(numElements, datasetPath);
    if(dims.size() > 1)
    {
      ptr->SetNumberOfComponents(static_cast<int>(dims[1]));
    }

    T* data = (T*)(ptr->GetVoidPointer(0));
    err = H5Lite::readPointerDataset(locId, datasetPath, data);
    if(err < 0)
    {
      std::cout << "readH5Data read error: " << __FILE__ << "(" << __LINE__ << ")" << std::endl;
      ptr = IDataArray::NullPointer();
    }
    return ptr;
  }