handle missing orientation data

This commit is contained in:
Martin Diehl 2023-12-04 22:35:44 +01:00
parent 1245ec7d94
commit ecf68db814
1 changed files with 15 additions and 30 deletions

View File

@ -1938,9 +1938,6 @@ class Result:
One DREAM3D file per visible increment is created. One DREAM3D file per visible increment is created.
The DREAM3D file is based on HDF5 file format. The DREAM3D file is based on HDF5 file format.
Without any regridding.
Considers the original grid from DAMASK.
Needs orientation data, 'O', present in the file.
Parameters Parameters
---------- ----------
@ -1966,29 +1963,34 @@ class Result:
N_digits = int(np.floor(np.log10(max(1,self.incs[-1]))))+1 N_digits = int(np.floor(np.log10(max(1,self.incs[-1]))))+1
lattice_dict = {}
dx = self.size/self.cells at_cell_ph,in_data_ph,_,_ = self._mappings()
at_cell_ph,in_data_ph,at_cell_ho,in_data_ho = self._mappings()
out_dir = Path.cwd() if target_dir is None else Path(target_dir) out_dir = Path.cwd() if target_dir is None else Path(target_dir)
out_dir.mkdir(parents=True,exist_ok=True) out_dir.mkdir(parents=True,exist_ok=True)
with h5py.File(self.fname,'r') as f: with h5py.File(self.fname,'r') as f:
for inc in util.show_progress(self.visible['increments']): for inc in util.show_progress(self.visible['increments']):
crystal_structure = [999]
cell_orientation = np.zeros((np.prod(self.cells),3)) cell_orientation = np.zeros((np.prod(self.cells),3))
phase_ID_array = np.zeros((np.prod(self.cells)),dtype=np.int32) #need to reshape it later phase_ID_array = np.zeros((np.prod(self.cells)),dtype=np.int32) #need to reshape it later
for c in range(self.N_constituents): for c in range(self.N_constituents):
for count,label in enumerate(self.visible['phases']): for count,label in enumerate(self.visible['phases']):
try: try:
data = _read(f['/'.join([inc,'phase',label,'mechanical/O'])]) data = _read(f['/'.join([inc,'phase',label,'mechanical/O'])])
lattice_dict[label] = data.dtype.metadata['lattice'] lattice = data.dtype.metadata['lattice']
# Map to DREAM.3D IDs
if lattice == 'hP':
crystal_structure.append(0)
elif lattice in ['cI','cF']:
crystal_structure.append(1)
elif lattice == 'tI':
crystal_structure.append(8)
cell_orientation[at_cell_ph[c][label],:] = \ cell_orientation[at_cell_ph[c][label],:] = \
Rotation(data[in_data_ph[c][label],:]).as_Euler_angles().astype(np.float32) Rotation(data[in_data_ph[c][label],:]).as_Euler_angles().astype(np.float32)
except ValueError: except ValueError:
print("Orientation data is not present") crystal_structure.append(999)
exit()
phase_ID_array[at_cell_ph[c][label]] = count + 1 phase_ID_array[at_cell_ph[c][label]] = count + 1
@ -2017,16 +2019,6 @@ class Result:
cell_ensemble = create_and_open(data_container,'CellEnsembleData') cell_ensemble = create_and_open(data_container,'CellEnsembleData')
# Map to DREAM.3D IDs
crystal_structure = [999]
for label in self.visible['phases']:
if lattice_dict[label] in ['hP']:
crystal_structure.append(0)
elif lattice_dict[label] in ['cI','cF']:
crystal_structure.append(1)
elif lattice_dict[label] in ['tI']:
crystal_structure.append(8)
cell_ensemble['CrystalStructures'] = np.array(crystal_structure,np.uint32).reshape(-1,1) cell_ensemble['CrystalStructures'] = np.array(crystal_structure,np.uint32).reshape(-1,1)
cell_ensemble['PhaseTypes'] = np.array([999] + [0]*len(self.phases),np.uint32).reshape(-1,1) cell_ensemble['PhaseTypes'] = np.array([999] + [0]*len(self.phases),np.uint32).reshape(-1,1)
phase_name_list = ['Unknown Phase Type'] + [p for p in self.visible['phases']] phase_name_list = ['Unknown Phase Type'] + [p for p in self.visible['phases']]
@ -2035,28 +2027,21 @@ class Result:
tid.set_cset(h5py.h5t.CSET_ASCII) tid.set_cset(h5py.h5t.CSET_ASCII)
cell_ensemble.create_dataset(name='PhaseName',data = phase_name_list, dtype=h5py.Datatype(tid)) cell_ensemble.create_dataset(name='PhaseName',data = phase_name_list, dtype=h5py.Datatype(tid))
# Attributes Ensemble Matrix
cell_ensemble.attrs['AttributeMatrixType'] = np.array([11],np.uint32) cell_ensemble.attrs['AttributeMatrixType'] = np.array([11],np.uint32)
cell_ensemble.attrs['TupleDimensions'] = np.array([len(self.phases) + 1], np.uint64) cell_ensemble.attrs['TupleDimensions'] = np.array([len(self.phases) + 1], np.uint64)
# Attributes for data in Ensemble matrix
for group in ['CrystalStructures','PhaseTypes','PhaseName']: for group in ['CrystalStructures','PhaseTypes','PhaseName']:
add_attribute(cell_ensemble[group], 'ComponentDimensions', np.array([1],np.uint64)) add_attribute(cell_ensemble[group], 'ComponentDimensions', np.array([1],np.uint64))
add_attribute(cell_ensemble[group], 'Tuple Axis Dimensions', f'x={len(self.phases)+1}') add_attribute(cell_ensemble[group], 'Tuple Axis Dimensions', f'x={len(self.phases)+1}')
add_attribute(cell_ensemble[group], 'DataArrayVersion', np.array([2],np.int32)) add_attribute(cell_ensemble[group], 'DataArrayVersion', np.array([2],np.int32))
add_attribute(cell_ensemble[group], 'TupleDimensions', np.array([len(self.phases) + 1],np.uint64)) add_attribute(cell_ensemble[group], 'TupleDimensions', np.array([len(self.phases) + 1],np.uint64))
for group in ['CrystalStructures','PhaseTypes']: for group in ['CrystalStructures','PhaseTypes']:
add_attribute(cell_ensemble[group], 'ObjectType', 'DataArray<uint32_t>') add_attribute(cell_ensemble[group], 'ObjectType', 'DataArray<uint32_t>')
add_attribute(cell_ensemble['PhaseName'], 'ObjectType', 'StringDataArray') add_attribute(cell_ensemble['PhaseName'], 'ObjectType', 'StringDataArray')
# Create geometry info
geom = create_and_open(data_container,'_SIMPL_GEOMETRY') geom = create_and_open(data_container,'_SIMPL_GEOMETRY')
geom['DIMENSIONS'] = np.array(self.cells,np.int64)
geom['DIMENSIONS'] = np.int64(np.array(self.cells)) geom['ORIGIN'] = np.array(self.origin,np.float32)
geom['ORIGIN'] = np.float32(np.zeros(3)) geom['SPACING'] = np.float32(self.size/self.cells)
geom['SPACING'] = np.float32(dx)
names = ['GeometryName', 'GeometryTypeName','GeometryType','SpatialDimensionality','UnitDimensionality'] names = ['GeometryName', 'GeometryTypeName','GeometryType','SpatialDimensionality','UnitDimensionality']
values = ['ImageGeometry','ImageGeometry',np.array([0],np.uint32),np.array([3],np.uint32),np.array([3],np.uint32)] values = ['ImageGeometry','ImageGeometry',np.array([0],np.uint32),np.array([3],np.uint32),np.array([3],np.uint32)]
for name,value in zip(names,values): for name,value in zip(names,values):