// ----------------------------------------------------------------------------- // // ----------------------------------------------------------------------------- void FlattenImage::dataCheck(bool preflight, size_t voxels, size_t fields, size_t ensembles) { setErrorCondition(0); std::stringstream ss; VoxelDataContainer* m = getVoxelDataContainer(); //int err = 0; int numImageComp = 1; IDataArray::Pointer iDataArray = m->getCellData(m_ImageDataArrayName); if(NULL != iDataArray.get()) { UInt8ArrayType* imageDataPtr = UInt8ArrayType::SafePointerDownCast(iDataArray.get()); if (NULL != imageDataPtr) { numImageComp = imageDataPtr->GetNumberOfComponents(); } } GET_PREREQ_DATA(m, DREAM3D, CellData, ImageData, ss, -301, unsigned char, UCharArrayType, voxels, numImageComp) // if(err == -301) // { // setErrorCondition(0); // err = 0; // GET_PREREQ_DATA(m, DREAM3D, CellData, ImageData, ss, -302, unsigned char, UCharArrayType, voxels, 3) // } CREATE_NON_PREREQ_DATA(m, DREAM3D, CellData, FlatImageData, ss, int32_t, Int32ArrayType, 0, voxels, 1) }
// ----------------------------------------------------------------------------- // // ----------------------------------------------------------------------------- void FlattenImage::execute() { VoxelDataContainer* m = getVoxelDataContainer(); if(NULL == m) { setErrorCondition(-999); notifyErrorMessage("The DataContainer Object was NULL", -999); return; } setErrorCondition(0); int64_t totalPoints = m->getTotalPoints(); size_t numgrains = m->getNumFieldTuples(); size_t numensembles = m->getNumEnsembleTuples(); dataCheck(false, totalPoints, numgrains, numensembles); if (getErrorCondition() < 0) { return; } float Rfactor = 1.0; float Gfactor = 1.0; float Bfactor = 1.0; if (m_FlattenMethod == DREAM3D::FlattenImageMethod::Average) { Rfactor = 1.0/3.0; Gfactor = 1.0/3.0; Bfactor = 1.0/3.0; } else if (m_FlattenMethod == DREAM3D::FlattenImageMethod::Luminosity) { Rfactor = 0.21; Gfactor = 0.72; Bfactor = 0.07; } #ifdef DREAM3D_USE_PARALLEL_ALGORITHMS tbb::task_scheduler_init init; bool doParallel = true; #endif size_t comp = m->getCellData(m_ImageDataArrayName)->GetNumberOfComponents(); // std::cout << "FlattenImage: " << m_ConversionFactor << std::endl; #ifdef DREAM3D_USE_PARALLEL_ALGORITHMS if (doParallel == true) { tbb::parallel_for(tbb::blocked_range<size_t>(0, totalPoints), FlattenImageImpl(m_ImageData, m_FlatImageData, Rfactor, Gfactor, Bfactor, comp), tbb::auto_partitioner()); } else #endif { FlattenImageImpl serial(m_ImageData, m_FlatImageData, Rfactor, Gfactor, Bfactor, comp); serial.convert(0, totalPoints); } notifyStatusMessage("Complete"); }
// ----------------------------------------------------------------------------- // // ----------------------------------------------------------------------------- void ClearData::execute() { int err = 0; setErrorCondition(err); 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; } size_t udims[3] = { 0, 0, 0 }; m->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]), }; int index; std::list<std::string> voxelArrayNames = m->getCellArrayNameList(); for (int k = m_ZMin; k < m_ZMax+1; k++) { for (int j = m_YMin; j < m_YMax+1; j++) { for (int i = m_XMin; i < m_XMax+1; i++) { index = (k * dims[0] * dims[1]) + (j * dims[0]) + i; for (std::list<std::string>::iterator iter = voxelArrayNames.begin(); iter != voxelArrayNames.end(); ++iter) { std::string name = *iter; IDataArray::Pointer p = m->getCellData(*iter); p->InitializeTuple(index,0); } } } } notifyStatusMessage("Completed"); }
// ----------------------------------------------------------------------------- // // ----------------------------------------------------------------------------- void UpdateCellQuats::execute() { setErrorCondition(0); VoxelDataContainer* m = getVoxelDataContainer(); if(NULL == m) { setErrorCondition(-999); notifyErrorMessage("The DataContainer Object was NULL", -999); return; } setErrorCondition(0); std::stringstream ss; int64_t totalPoints = m->getTotalPoints(); //getting the 5 component quaternions from the data container and down-casting them IDataArray::Pointer Quats5 = m->getCellData(DREAM3D::CellData::Quats); if(Quats5->GetNumberOfComponents() != 5) { notifyErrorMessage("The Quats array did not contain 5 components", -999); return; } DataArray<float>* quats5 = DataArray<float>::SafePointerDownCast(Quats5.get()); float* quats5ptr = quats5->GetPointer(0); //creating the 4 component quaternions in the data container CREATE_NON_PREREQ_DATA(m, DREAM3D, CellData, Quats, ss, float, FloatArrayType, 0, totalPoints, 4) if (getErrorCondition() < 0) { return; } //copying the 5 component quaternions into the new 4 component quaternions // This is a special case for dealing with this conversion. If you are dealing with // quaternions then DO NOT USE THIS CODE as an example. Use another filter instead. for (int i = 0; i < totalPoints; i++) { for(int j=0;j<4;j++) { m_Quats[4*i+j] = quats5ptr[5*i+(j+1)]; } } notifyStatusMessage("Complete"); }
// ----------------------------------------------------------------------------- // // ----------------------------------------------------------------------------- void LinkFieldMapToCellArray::dataCheck(bool preflight, size_t voxels, size_t fields, size_t ensembles) { setErrorCondition(0); std::stringstream ss; VoxelDataContainer* m = getVoxelDataContainer(); IDataArray::Pointer data = m->getCellData(m_SelectedCellDataArrayName); if (NULL == data.get()) { ss.str(""); ss << "Selected array '" << m_SelectedCellDataArrayName << "' does not exist in the Voxel Data Container. Was it spelled correctly?"; setErrorCondition(-11001); addErrorMessage(getHumanLabel(),ss.str(),getErrorCondition()); return; } std::string dType = data->getTypeAsString(); IDataArray::Pointer p = IDataArray::NullPointer(); if (dType.compare("int32_t") == 0) { DataArray<int32_t>* field = DataArray<int32_t>::SafePointerDownCast(data.get()); m_SelectedCellData = field->GetPointer(0); } else { ss.str(""); ss << "Selected array '" << m_SelectedCellDataArrayName << "' is not an Integer array. Is this the array you want to use?"; setErrorCondition(-11001); addErrorMessage(getHumanLabel(),ss.str(),getErrorCondition()); return; } m->clearFieldData(); BoolArrayType::Pointer active = BoolArrayType::CreateArray(fields, 1, DREAM3D::FieldData::Active); // bool* mActive = m_Active->GetPointer(0); m->addFieldData(DREAM3D::FieldData::Active, active); }
// ----------------------------------------------------------------------------- // // ----------------------------------------------------------------------------- void ConvertData::execute() { int err = 0; std::stringstream ss; setErrorCondition(err); VoxelDataContainer* m = getVoxelDataContainer(); if(NULL == m) { setErrorCondition(-999); notifyErrorMessage("The Voxel DataContainer Object was NULL", -999); return; } setErrorCondition(0); IDataArray::Pointer iArray = m->getCellData(m_SelectedCellArrayName); bool completed = false; // UInt8ArrayType* uint8Ptr = UInt8ArrayType::SafePointerDownCast(iArray.get()); // if (uint8Ptr != NULL) // { // Detail::ConvertData<UInt8ArrayType>(uint8Ptr, m, m_ScalarType); // } CHECK_AND_CONVERT(UInt8ArrayType, m, m_ScalarType, iArray, m_OutputArrayName) CHECK_AND_CONVERT(Int8ArrayType, m, m_ScalarType, iArray, m_OutputArrayName) CHECK_AND_CONVERT(UInt16ArrayType, m, m_ScalarType, iArray, m_OutputArrayName) CHECK_AND_CONVERT(Int16ArrayType, m, m_ScalarType, iArray, m_OutputArrayName) CHECK_AND_CONVERT(UInt32ArrayType, m, m_ScalarType, iArray, m_OutputArrayName) CHECK_AND_CONVERT(Int32ArrayType, m, m_ScalarType, iArray, m_OutputArrayName) CHECK_AND_CONVERT(UInt64ArrayType, m, m_ScalarType, iArray, m_OutputArrayName) CHECK_AND_CONVERT(Int64ArrayType, m, m_ScalarType, iArray, m_OutputArrayName) CHECK_AND_CONVERT(FloatArrayType, m, m_ScalarType, iArray, m_OutputArrayName) CHECK_AND_CONVERT(DoubleArrayType, m, m_ScalarType, iArray, m_OutputArrayName) /* Let the GUI know we are done with this filter */ notifyStatusMessage("Complete"); }
// ----------------------------------------------------------------------------- // // ----------------------------------------------------------------------------- void ChangeResolution::execute() { int err = 0; setErrorCondition(err); DREAM3D_RANDOMNG_NEW() VoxelDataContainer* m = getVoxelDataContainer(); if(NULL == m) { setErrorCondition(-999); notifyErrorMessage("The DataContainer Object was NULL", -999); return; } setErrorCondition(0); if (getErrorCondition() < 0) { return; } if(m->getXRes() == m_Resolution.x && m->getYRes() == m_Resolution.y && m->getZRes() == m_Resolution.z) { return; } size_t dims[3]; m->getDimensions(dims); float sizex = (dims[0])*m->getXRes(); float sizey = (dims[1])*m->getYRes(); float sizez = (dims[2])*m->getZRes(); int m_XP = int(sizex / m_Resolution.x); int m_YP = int(sizey / m_Resolution.y); int m_ZP = int(sizez / m_Resolution.z); int64_t totalPoints = m_XP*m_YP*m_ZP; float x, y, z; int col, row, plane; int index; int index_old; std::vector<size_t> newindicies; newindicies.resize(totalPoints); for (int i = 0; i < m_ZP; i++) { std::stringstream ss; ss << "Changing Resolution - " << ((float)i/m->getZPoints())*100 << " Percent Complete"; notifyStatusMessage(ss.str()); for (int j = 0; j < m_YP; j++) { for (int k = 0; k < m_XP; k++) { x = (k * m_Resolution.x); y = (j * m_Resolution.y); z = (i * m_Resolution.z); col = int(x / m->getXRes()); row = int(y / m->getYRes()); plane = int(z / m->getZRes()); index_old = (plane * m->getXPoints() * m->getYPoints()) + (row * m->getXPoints()) + col; index = (i * m_XP * m_YP) + (j * m_XP) + k; newindicies[index] = index_old; } } } std::list<std::string> voxelArrayNames = m->getCellArrayNameList(); for (std::list<std::string>::iterator iter = voxelArrayNames.begin(); iter != voxelArrayNames.end(); ++iter) { std::string name = *iter; IDataArray::Pointer p = m->getCellData(*iter); // Make a copy of the 'p' array that has the same name. When placed into // the data container this will over write the current array with // the same name. At least in theory IDataArray::Pointer data = p->createNewArray(p->GetNumberOfTuples(), p->GetNumberOfComponents(), p->GetName()); data->Resize(totalPoints); void* source = NULL; void* destination = NULL; size_t newIndicies_I = 0; int nComp = data->GetNumberOfComponents(); for (size_t i = 0; i < static_cast<size_t>(totalPoints); i++) { newIndicies_I = newindicies[i]; source = p->GetVoidPointer((nComp * newIndicies_I)); destination = data->GetVoidPointer((data->GetNumberOfComponents() * i)); ::memcpy(destination, source, p->GetTypeSize() * data->GetNumberOfComponents()); } m->addCellData(*iter, data); } m->setResolution(m_Resolution.x, m_Resolution.y, m_Resolution.z); m->setDimensions(m_XP, m_YP, m_ZP); notifyStatusMessage("Complete"); }
// ----------------------------------------------------------------------------- // // ----------------------------------------------------------------------------- void AlignSections::execute() { setErrorCondition(0); VoxelDataContainer* m = getVoxelDataContainer(); if (NULL == m) { setErrorCondition(-1); std::stringstream ss; ss << " DataContainer was NULL"; notifyErrorMessage(ss.str(), -1); return; } int64_t totalPoints = m->getTotalPoints(); size_t numgrains = m->getNumFieldTuples(); size_t numensembles = m->getNumEnsembleTuples(); dataCheck(false, totalPoints, numgrains, numensembles); if (getErrorCondition() < 0) { return; } size_t udims[3] = {0,0,0}; m->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]), }; int slice; int xspot, yspot; DimType newPosition; DimType currentPosition; // unsigned int phase2; std::vector<int> xshifts; std::vector<int> yshifts; xshifts.resize(dims[2],0); yshifts.resize(dims[2],0); find_shifts(xshifts, yshifts); std::list<std::string> voxelArrayNames = m->getCellArrayNameList(); DimType progIncrement = dims[2]/100; DimType prog = 1; int progressInt = 0; std::stringstream ss; for (DimType i = 1; i < dims[2]; i++) { if (i > prog) { ss.str(""); progressInt = ((float)i/dims[2])*100.0; ss << "Transferring Cell Data - " << progressInt << "% Complete"; notifyStatusMessage(ss.str()); prog = prog + progIncrement; } if (getCancel() == true) { return; } slice = static_cast<int>( (dims[2] - 1) - i ); for (DimType l = 0; l < dims[1]; l++) { for (DimType n = 0; n < dims[0]; n++) { if(yshifts[i] >= 0) yspot = static_cast<int>(l); else if(yshifts[i] < 0) yspot = static_cast<int>( dims[1] - 1 - l ); if(xshifts[i] >= 0) xspot = static_cast<int>(n); else if(xshifts[i] < 0) xspot = static_cast<int>( 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]) <= dims[1] - 1 && (xspot + xshifts[i]) >= 0 && (xspot + xshifts[i]) <= dims[0] - 1) { for(std::list<std::string>::iterator iter = voxelArrayNames.begin(); iter != voxelArrayNames.end(); ++iter) { std::string name = *iter; IDataArray::Pointer p = m->getCellData(*iter); p->CopyTuple(currentPosition, newPosition); } } if((yspot + yshifts[i]) < 0 || (yspot + yshifts[i]) > dims[1] - 1 || (xspot + xshifts[i]) < 0 || (xspot + xshifts[i]) > dims[0] - 1) { for(std::list<std::string>::iterator iter = voxelArrayNames.begin(); iter != voxelArrayNames.end(); ++iter) { std::string name = *iter; IDataArray::Pointer p = m->getCellData(*iter); p->InitializeTuple(newPosition, 0.0); } } } } } // If there is an error set this to something negative and also set a message notifyStatusMessage("Complete"); }
// ----------------------------------------------------------------------------- // // ----------------------------------------------------------------------------- void OpenCloseBadData::execute() { setErrorCondition(0); // int err = 0; VoxelDataContainer* m = getVoxelDataContainer(); if(NULL == m) { setErrorCondition(-999); notifyErrorMessage("The DataContainer Object was NULL", -999); return; } int64_t totalPoints = m->getTotalPoints(); dataCheck(false, totalPoints, m->getNumFieldTuples(), m->getNumEnsembleTuples()); if (getErrorCondition() < 0 && getErrorCondition() != -305) { return; } setErrorCondition(0); Int32ArrayType::Pointer neighborsPtr = Int32ArrayType::CreateArray(totalPoints, "Neighbors"); m_Neighbors = neighborsPtr->GetPointer(0); neighborsPtr->initializeWithValues(-1); size_t udims[3] = {0,0,0}; m->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]), }; // size_t count = 1; int good = 1; // int neighbor; // int index = 0; // float x, y, z; // DimType row, plane; int neighpoint; size_t numgrains = m->getNumFieldTuples(); int neighpoints[6]; neighpoints[0] = static_cast<int>(-dims[0] * dims[1]); neighpoints[1] = static_cast<int>(-dims[0]); neighpoints[2] = static_cast<int>(-1); neighpoints[3] = static_cast<int>(1); neighpoints[4] = static_cast<int>(dims[0]); neighpoints[5] = static_cast<int>(dims[0] * dims[1]); std::vector<int> currentvlist; size_t count = 0; int kstride, jstride; int grainname, grain; int current; int most; std::vector<int > n(numgrains + 1,0); for (int iteration = 0; iteration < m_NumIterations; iteration++) { for (int k = 0; k < dims[2]; k++) { kstride = static_cast<int>( dims[0]*dims[1]*k ); for (int j = 0; j < dims[1]; j++) { jstride = static_cast<int>( dims[0]*j ); for (int i = 0; i < dims[0]; i++) { count = kstride+jstride+i; std::stringstream ss; grainname = m_GrainIds[count]; if (grainname == 0) { current = 0; most = 0; for (int l = 0; l < 6; l++) { good = 1; neighpoint = static_cast<int>( count + neighpoints[l] ); if (l == 0 && k == 0) good = 0; if (l == 5 && k == (dims[2] - 1)) good = 0; if (l == 1 && j == 0) good = 0; if (l == 4 && j == (dims[1] - 1)) good = 0; if (l == 2 && i == 0) good = 0; if (l == 3 && i == (dims[0] - 1)) good = 0; if (good == 1) { grain = m_GrainIds[neighpoint]; if (m_Direction == 0 && grain > 0) { m_Neighbors[neighpoint] = count; } if ((grain > 0 && m_Direction == 1)) { n[grain]++; current = n[grain]; if (current > most) { most = current; m_Neighbors[count] = neighpoint; } } } } if (m_Direction == 1) { for (int l = 0; l < 6; l++) { good = 1; neighpoint = static_cast<int>( count + neighpoints[l] ); if (l == 0 && k == 0) good = 0; if (l == 5 && k == (dims[2] - 1)) good = 0; if (l == 1 && j == 0) good = 0; if (l == 4 && j == (dims[1] - 1)) good = 0; if (l == 2 && i == 0) good = 0; if (l == 3 && i == (dims[0] - 1)) good = 0; if (good == 1) { grain = m_GrainIds[neighpoint]; n[grain] = 0; } } } } } } } std::list<std::string> voxelArrayNames = m->getCellArrayNameList(); for (int j = 0; j < totalPoints; j++) { int grainname = m_GrainIds[j]; int neighbor = m_Neighbors[j]; if (neighbor >= 0) { if ( (grainname == 0 && m_GrainIds[neighbor] > 0 && m_Direction == 1) || (grainname > 0 && m_GrainIds[neighbor] == 0 && m_Direction == 0)) { for(std::list<std::string>::iterator iter = voxelArrayNames.begin(); iter != voxelArrayNames.end(); ++iter) { std::string name = *iter; IDataArray::Pointer p = m->getCellData(*iter); p->CopyTuple(neighbor, j); } } } } } // If there is an error set this to something negative and also set a message notifyStatusMessage("Complete"); }
// ----------------------------------------------------------------------------- // // ----------------------------------------------------------------------------- void MultiThresholdCells::execute() { int err = 0; std::stringstream ss; setErrorCondition(err); VoxelDataContainer* m = getVoxelDataContainer(); if(NULL == m) { setErrorCondition(-999); notifyErrorMessage("The Voxel DataContainer Object was NULL", -999); return; } setErrorCondition(0); int64_t nPoints = m->getTotalPoints(); dataCheck(false, m->getTotalPoints(), m->getNumFieldTuples(), m->getNumEnsembleTuples()); if (getErrorCondition() < 0) { return; } /* Place all your code to execute your filter here. */ IDataArray::Pointer outputArrayPtr = m->getCellData(m_OutputArrayName); BoolArrayType* outputArray = BoolArrayType::SafeObjectDownCast<IDataArray*, BoolArrayType*>(outputArrayPtr.get()); if (NULL == outputArray) { setErrorCondition(-11002); notifyErrorMessage("Could not properly cast the output array to a BoolArrayType", getErrorCondition()); return; } m_Output = outputArray->GetPointer(0); // Prime our output array with the result of the first comparison { ComparisonInput_t& comp_0 = m_ComparisonInputs[0]; ThresholdFilterHelper filter(static_cast<DREAM3D::Comparison::Enumeration>(comp_0.compOperator), comp_0.compValue, outputArray); err = filter.execute(m->getCellData(comp_0.arrayName).get(), outputArrayPtr.get()); if (err < 0) { setErrorCondition(-13001); notifyErrorMessage("Error Executing threshold filter on first array", getErrorCondition()); return; } } for(size_t i = 1; i < m_ComparisonInputs.size(); ++i) { BoolArrayType::Pointer currentArrayPtr = BoolArrayType::CreateArray(m->getTotalPoints(), "TEMP"); currentArrayPtr->initializeWithZeros(); bool* currentArray = currentArrayPtr->GetPointer(0); ComparisonInput_t& compRef = m_ComparisonInputs[i]; ThresholdFilterHelper filter(static_cast<DREAM3D::Comparison::Enumeration>(compRef.compOperator), compRef.compValue, currentArrayPtr.get()); err = filter.execute(m->getCellData(compRef.arrayName).get(), currentArrayPtr.get()); if (err < 0) { setErrorCondition(-13002); notifyErrorMessage("Error Executing threshold filter on array", getErrorCondition()); return; } for (int64_t p = 0; p < nPoints; ++p) { if(m_Output[p] == false || currentArray[p] == false) { m_Output[p] = false; } } } /* Let the GUI know we are done with this filter */ notifyStatusMessage("Complete"); }
// ----------------------------------------------------------------------------- // // ----------------------------------------------------------------------------- int VoxelDataContainerWriter::writeCellData(hid_t dcGid) { std::stringstream ss; int err = 0; VoxelDataContainer* m = getVoxelDataContainer(); int64_t volDims[3] = { m->getXPoints(), m->getYPoints(), m->getZPoints() }; float spacing[3] = { m->getXRes(), m->getYRes(), m->getZRes() }; float origin[3] = { 0.0f, 0.0f, 0.0f }; m->getOrigin(origin); writeCellXdmfGridHeader(origin, spacing, volDims); // Get the name of the .dream3d file that we are writing to: ssize_t nameSize = H5Fget_name(m_HdfFileId, NULL, 0) + 1; std::vector<char> nameBuffer(nameSize, 0); nameSize = H5Fget_name(m_HdfFileId, &(nameBuffer.front()), nameSize); std::string hdfFileName(&(nameBuffer.front()), nameSize); hdfFileName = MXAFileInfo::filename(hdfFileName); std::string xdmfGroupPath = std::string(":/") + VoxelDataContainer::ClassName() + std::string("/") + H5_CELL_DATA_GROUP_NAME; // Write the Voxel Data err = H5Utilities::createGroupsFromPath(H5_CELL_DATA_GROUP_NAME, dcGid); if(err < 0) { ss.str(""); ss << "Error creating HDF Group " << H5_CELL_DATA_GROUP_NAME << std::endl; setErrorCondition(-63); notifyErrorMessage(ss.str(), err); H5Gclose(dcGid); // Close the Data Container Group return err; } hid_t cellGroupId = H5Gopen(dcGid, H5_CELL_DATA_GROUP_NAME, H5P_DEFAULT); if(err < 0) { ss.str(""); ss << "Error writing string attribute to HDF Group " << H5_CELL_DATA_GROUP_NAME << std::endl; setErrorCondition(-64); notifyErrorMessage(ss.str(), err); H5Gclose(dcGid); // Close the Data Container Group return err; } NameListType names = m->getCellArrayNameList(); for (NameListType::iterator iter = names.begin(); iter != names.end(); ++iter) { ss.str(""); ss << "Writing Cell Data '" << *iter << "' to HDF5 File" << std::endl; notifyStatusMessage(ss.str()); IDataArray::Pointer array = m->getCellData(*iter); err = array->writeH5Data(cellGroupId); if(err < 0) { ss.str(""); ss << "Error writing array '" << *iter << "' to the HDF5 File"; notifyErrorMessage(ss.str(), err); setErrorCondition(err); H5Gclose(cellGroupId); // Close the Cell Group H5Gclose(dcGid); // Close the Data Container Group return err; } array->writeXdmfAttribute( *m_XdmfPtr, volDims, hdfFileName, xdmfGroupPath, " (Cell)"); } H5Gclose(cellGroupId); // Close the Cell Group writeXdmfGridFooter("Cell Data"); return err; }
// ----------------------------------------------------------------------------- // // ----------------------------------------------------------------------------- void ConvertData::dataCheck(bool preflight, size_t voxels, size_t fields, size_t ensembles) { setErrorCondition(0); std::stringstream ss; VoxelDataContainer* m = getVoxelDataContainer(); if(m_SelectedCellArrayName.empty() == true) { ss.str(""); ss << "The Input Voxel Cell Array Name is blank (empty) and a value must be filled in for the pipeline to complete."; setErrorCondition(-397); addErrorMessage(getHumanLabel(), ss.str(), getErrorCondition()); } if(m_OutputArrayName.empty() == true) { ss.str(""); ss << "The Output Array Name is blank (empty) and a value must be filled in for the pipeline to complete."; setErrorCondition(-398); addErrorMessage(getHumanLabel(), ss.str(), getErrorCondition()); } int numberOfComponents = 0; IDataArray::Pointer iArray = m->getCellData(m_SelectedCellArrayName); if (NULL != iArray) { numberOfComponents = iArray->GetNumberOfComponents(); } if (true == preflight) { IDataArray::Pointer p = IDataArray::NullPointer(); if (m_ScalarType == Detail::Int8) { p = Int8ArrayType::CreateArray(voxels, numberOfComponents, m_OutputArrayName); } else if (m_ScalarType == Detail::UInt8) { p = UInt8ArrayType::CreateArray(voxels, numberOfComponents, m_OutputArrayName); } else if (m_ScalarType == Detail::Int16) { p = Int16ArrayType::CreateArray(voxels, numberOfComponents, m_OutputArrayName); } else if (m_ScalarType == Detail::UInt16) { p = UInt16ArrayType::CreateArray(voxels, numberOfComponents, m_OutputArrayName); } else if (m_ScalarType == Detail::Int32) { p = Int32ArrayType::CreateArray(voxels, numberOfComponents, m_OutputArrayName); } else if (m_ScalarType == Detail::UInt32) { p = UInt32ArrayType::CreateArray(voxels, numberOfComponents, m_OutputArrayName); } else if (m_ScalarType == Detail::Int64) { p = Int64ArrayType::CreateArray(voxels, numberOfComponents, m_OutputArrayName); } else if (m_ScalarType == Detail::UInt64) { p = UInt64ArrayType::CreateArray(voxels, numberOfComponents, m_OutputArrayName); } else if (m_ScalarType == Detail::Float) { p = FloatArrayType::CreateArray(voxels, numberOfComponents, m_OutputArrayName); } else if (m_ScalarType == Detail::Double) { p = DoubleArrayType::CreateArray(voxels, numberOfComponents, m_OutputArrayName); } m->addCellData(p->GetName(), p); } }