VTK  9.5.20251127
vtkHDFReaderImplementation.h
Go to the documentation of this file.
1// SPDX-FileCopyrightText: Copyright (c) Ken Martin, Will Schroeder, Bill Lorensen
2// SPDX-License-Identifier: BSD-3-Clause
8
9#ifndef vtkHDFReaderImplementation_h
10#define vtkHDFReaderImplementation_h
11
12#include "vtkHDFReader.h"
13#include "vtk_hdf5.h"
14#include <array>
15#include <map>
16#include <string>
17#include <vector>
18
19VTK_ABI_NAMESPACE_BEGIN
21class vtkBitArray;
22class vtkDataArray;
23class vtkDataAssembly;
26class vtkStringArray;
27
33{
34public:
36 virtual ~Implementation();
37
41 bool Open(VTK_FILEPATH const char* fileName);
42
46 bool Open(vtkResourceStream* stream);
47
51 void Close();
56 int GetDataSetType() { return this->DataSetType; }
60 const std::array<int, 2>& GetVersion() { return this->Version; }
64 template <typename T>
65 bool GetAttribute(const char* attributeName, size_t numberOfElements, T* value);
69 bool HasAttribute(const char* groupName, const char* attributeName);
79 bool GetPartitionExtent(hsize_t partitionIndex, int* extent);
83 std::vector<std::string> GetArrayNames(int attributeType);
87 std::vector<std::string> GetOrderedChildrenOfGroup(const std::string& path);
89
98 int attributeType, const char* name, const std::vector<hsize_t>& fileExtent);
99 vtkDataArray* NewArray(int attributeType, const char* name, hsize_t offset, hsize_t size);
101 const char* name, vtkIdType offset = -1, vtkIdType size = -1, vtkIdType dimMaxSize = -1);
103
105
111 vtkDataArray* NewMetadataArray(const char* name, hsize_t offset, hsize_t size);
112 std::vector<vtkIdType> GetMetadata(const char* name, hsize_t size, hsize_t offset = 0);
114
117 std::vector<hsize_t> GetDimensions(const char* dataset);
118
122 bool IsPathSoftLink(const std::string& path);
123
125
130 bool FillAssembly(vtkDataAssembly* data, hid_t assemblyHandle, int assemblyID, std::string path);
132
136 std::size_t GetNumberOfSteps();
137
139
145
149 vtkIdType GetArrayOffset(vtkIdType step, int attributeType, std::string name);
150
156 std::array<vtkIdType, 2> GetFieldArraySize(vtkIdType step, std::string name);
157
161 bool OpenGroupAsVTKGroup(const std::string& groupPath);
162
166 bool RetrieveHDFInformation(const std::string& rootName);
167
172 bool GetImageAttributes(int WholeExtent[6], double Origin[3], double Spacing[3]);
173
175
181 bool ComputeAMRBlocksPerLevels(unsigned int maxLevel);
182
187 vtkDataArraySelection* dataArraySelection[3], vtkIdType step, unsigned int maxLevel);
188
192 bool ReadAMRTopology(vtkOverlappingAMR* data, unsigned int level, unsigned int maxLevel,
193 double origin[3], bool isTemporalData);
194
198 bool ReadAMRData(vtkOverlappingAMR* data, unsigned int level, unsigned int maxLevel,
199 vtkDataArraySelection* dataArraySelection[3], bool isTemporalData);
201
206 vtkSmartPointer<vtkDataObject> GetNewDataSet(int dataSetType, int numPieces);
207
214 vtkIdType cellOffset, vtkIdType treeIdsOffset, vtkIdType depthOffset,
215 vtkIdType descriptorOffset, vtkIdType maskOffset, vtkIdType partOffset,
216 vtkIdType verticesPerDepthOffset, vtkIdType depthLimit, vtkIdType step);
217
222
227
232 std::vector<vtkSmartPointer<vtkAbstractArray>>& cellArrays,
233 const vtkDataArraySelection* arraySelection, vtkIdType cellCount);
234
239 vtkIdType cellOffset, vtkIdType inputCellOffset, vtkIdType step, vtkIdType readableTreeSize);
240
245 vtkIdType maskOffset, vtkIdType readableTreeSize);
246
247private:
248 std::string FileName;
249 vtkResourceStream* Stream = nullptr;
250 vtkNew<vtkMemoryResourceStream> LocalMemStream;
251 hid_t File;
252 hid_t VTKGroup;
253 // in the same order as vtkDataObject::AttributeTypes: POINT, CELL, FIELD
254 std::array<hid_t, 3> AttributeDataGroup;
255 int DataSetType;
256 int NumberOfPieces;
257 std::array<int, 2> Version;
258 vtkHDFReader* Reader;
259
261
264 struct AMRBlocksInformation
265 {
266 std::vector<int> BlocksPerLevel;
267 std::vector<vtkIdType> BlockOffsetsPerLevel;
268 std::map<std::string, std::vector<vtkIdType>> CellOffsetsPerLevel;
269 std::map<std::string, std::vector<vtkIdType>> PointOffsetsPerLevel;
270 std::map<std::string, std::vector<vtkIdType>> FieldOffsetsPerLevel;
271 std::map<std::string, std::vector<vtkIdType>> FieldSizesPerLevel;
272
273 void Clear()
274 {
275 this->BlocksPerLevel.clear();
276 this->BlockOffsetsPerLevel.clear();
277 this->PointOffsetsPerLevel.clear();
278 this->CellOffsetsPerLevel.clear();
279 this->FieldOffsetsPerLevel.clear();
280 this->FieldSizesPerLevel.clear();
281 }
282 };
283
284 AMRBlocksInformation AMRInformation;
285
286 bool ReadLevelSpacing(hid_t levelGroupID, double* spacing);
287 bool ReadAMRBoxRawValues(
288 hid_t levelGroupID, std::vector<int>& amrBoxRawData, int level, bool isTemporalData);
289 bool ReadLevelTopology(unsigned int level, const std::string& levelGroupName,
290 vtkOverlappingAMR* data, double origin[3], bool isTemporalData);
291 bool ReadLevelData(unsigned int level, const std::string& levelGroupName, vtkOverlappingAMR* data,
292 vtkDataArraySelection* dataArraySelection[3], bool isTemporalData);
294};
295
296VTK_ABI_NAMESPACE_END
297#endif
298// VTK-HeaderTest-Exclude: vtkHDFReaderImplementation.h
Abstract superclass for all arrays.
dynamic, self-adjusting array of bits
Definition vtkBitArray.h:31
Store on/off settings for data arrays, etc.
hierarchical representation to use with vtkPartitionedDataSetCollection
Implementation for the vtkHDFReader.
vtkDataArray * NewMetadataArray(const char *name, hsize_t offset, hsize_t size)
Reads a 1D metadata array in a DataArray or a vector of vtkIdType.
bool GetPartitionExtent(hsize_t partitionIndex, int *extent)
For an ImageData, sets the extent for 'partitionIndex'.
bool OpenGroupAsVTKGroup(const std::string &groupPath)
Open a sub group of the current file and consider it as the new root file.
bool IsPathSoftLink(const std::string &path)
Return true if current root path is a soft link.
const std::array< int, 2 > & GetVersion()
Returns the version of the VTK HDF implementation.
Implementation(vtkHDFReader *reader)
vtkDataArray * NewArray(int attributeType, const char *name, const std::vector< hsize_t > &fileExtent)
Reads and returns a new vtkDataArray.
vtkIdType GetArrayOffset(vtkIdType step, int attributeType, std::string name)
Methods to query for array offsets when steps are present.
std::vector< hsize_t > GetDimensions(const char *dataset)
Returns the dimensions of a HDF dataset.
bool Open(vtkResourceStream *stream)
Opens this VTK HDF stream and checks if it is valid.
vtkSmartPointer< vtkDataObject > GetNewDataSet(int dataSetType, int numPieces)
Create a new dataset given its type and the number of pieces.
bool HasAttribute(const char *groupName, const char *attributeName)
Return true if the attribute exists in the specified group.
vtkAbstractArray * NewFieldArray(const char *name, vtkIdType offset=-1, vtkIdType size=-1, vtkIdType dimMaxSize=-1)
Reads and returns a new vtkDataArray.
bool ComputeAMROffsetsPerLevels(vtkDataArraySelection *dataArraySelection[3], vtkIdType step, unsigned int maxLevel)
Retrieve offset for AMRBox, point/cell/field arrays for each level.
bool ReadHyperTreeGridMetaInfo(vtkHyperTreeGrid *htg)
Read HTG meta-information stored in attributes.
bool RetrieveHDFInformation(const std::string &rootName)
Initialize meta information of the implementation based on root name specified.
std::vector< std::string > GetArrayNames(int attributeType)
Returns the names of arrays for 'attributeType' (point or cell).
vtkDataArray * GetStepValues()
Read the values of the steps from the open file.
std::array< vtkIdType, 2 > GetFieldArraySize(vtkIdType step, std::string name)
Return the field array size (components, tuples) for the current step.
bool CreateHyperTreeGridCellArrays(vtkHyperTreeGrid *htg, std::vector< vtkSmartPointer< vtkAbstractArray > > &cellArrays, const vtkDataArraySelection *arraySelection, vtkIdType cellCount)
Initialize selected Cell arrays for HyperTreeGrid.
int GetDataSetType()
Type of vtkDataSet stored by the HDF file, such as VTK_IMAGE_DATA or VTK_UNSTRUCTURED_GRID,...
int GetNumberOfPieces(vtkIdType step=-1)
Returns the number of partitions for this dataset at the time step step if applicable.
bool ReadHyperTreeGridData(vtkHyperTreeGrid *htg, const vtkDataArraySelection *arraySelection, vtkIdType cellOffset, vtkIdType treeIdsOffset, vtkIdType depthOffset, vtkIdType descriptorOffset, vtkIdType maskOffset, vtkIdType partOffset, vtkIdType verticesPerDepthOffset, vtkIdType depthLimit, vtkIdType step)
Read data and build the HyperTreeGrid from descriptors, mask information and cell data array in the f...
bool FillAssembly(vtkDataAssembly *data)
Fills the given Assembly with the content of the opened HDF file.
vtkDataArray * GetStepValues(hid_t group)
Read the values of the steps from the open file.
bool ReadAMRData(vtkOverlappingAMR *data, unsigned int level, unsigned int maxLevel, vtkDataArraySelection *dataArraySelection[3], bool isTemporalData)
Read the AMR data based on offset on point/cell/field datas.
bool AppendCellDataForHyperTree(std::vector< vtkSmartPointer< vtkAbstractArray > > &cellArrays, vtkIdType cellOffset, vtkIdType inputCellOffset, vtkIdType step, vtkIdType readableTreeSize)
Read & add cell data for the tree currently processed.
void Close()
Closes the VTK HDF file and releases any allocated resources.
bool GetAttribute(const char *attributeName, size_t numberOfElements, T *value)
Reads an attribute from the /VTKHDF group.
bool ComputeAMRBlocksPerLevels(unsigned int maxLevel)
Specific public API for AMR support.
bool GetImageAttributes(int WholeExtent[6], double Origin[3], double Spacing[3])
Retrieve ImageData attributes and store them.
std::size_t GetNumberOfSteps()
Read the number of steps from the opened file.
bool ReadAMRTopology(vtkOverlappingAMR *data, unsigned int level, unsigned int maxLevel, double origin[3], bool isTemporalData)
Read the AMR topology based on offset data on AMRBlocks.
bool ReadHyperTreeGridDimensions(vtkHyperTreeGrid *htg)
Read HTG dimensions and coordinates.
bool FillAssembly(vtkDataAssembly *data, hid_t assemblyHandle, int assemblyID, std::string path)
Fills the given Assembly with the content of the opened HDF file.
bool AppendMaskForHyperTree(vtkHyperTreeGrid *htg, vtkIdType inputCellOffset, vtkIdType maskOffset, vtkIdType readableTreeSize)
Read & add mask data for the current tree.
std::vector< std::string > GetOrderedChildrenOfGroup(const std::string &path)
Return the name of all children of an HDF group given its path.
std::vector< vtkIdType > GetMetadata(const char *name, hsize_t size, hsize_t offset=0)
Reads a 1D metadata array in a DataArray or a vector of vtkIdType.
vtkDataArray * NewArray(int attributeType, const char *name, hsize_t offset, hsize_t size)
Reads and returns a new vtkDataArray.
bool Open(const char *fileName)
Opens this VTK HDF file and checks if it is valid.
A dataset containing a grid of vtkHyperTree instances arranged as a rectilinear grid.
vtkResourceStream implementation for memory input.
Allocate and hold a VTK object.
Definition vtkNew.h:167
a multi-resolution dataset based on vtkCartesianGrid allowing overlaps
Abstract class used for custom streams.
Hold a reference to a vtkObjectBase instance.
a vtkAbstractArray subclass for strings
#define vtkDataArray
int64_t hid_t
int vtkIdType
Definition vtkType.h:367
#define VTK_FILEPATH