fixed typos and other python warnings

This commit is contained in:
Vitesh Shah 2023-05-04 11:07:26 +02:00
parent 8de19f0c3b
commit b5b6c2d695
2 changed files with 36 additions and 42 deletions

View File

@ -1944,32 +1944,31 @@ class Result:
v.save(vtk_dir/f'{self.fname.stem}_inc{inc.split(prefix_inc)[-1].zfill(N_digits)}', v.save(vtk_dir/f'{self.fname.stem}_inc{inc.split(prefix_inc)[-1].zfill(N_digits)}',
parallel=parallel) parallel=parallel)
def export_DREAM3D(self, def export_DREAM3D(self,
target_dir: Union[None, str, Path] = None): target_dir: Union[None, str, Path] = None):
""" """
Export the visible components to DREAM3D compatible files. Export the visible components to DREAM3D compatible files.
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. Without any regridding.
Considers the original grid from DAMASK. Considers the original grid from DAMASK.
Needs orientation data, O, present in the file. Needs orientation data, O, present in the file.
Parameters Parameters
---------- ----------
target_dir : str or pathlib.Path, optional target_dir : str or pathlib.Path, optional
Directory to save DREAM3D files. Will be created if non-existent. Directory to save DREAM3D files. Will be created if non-existent.
""" """
Crystal_structures = {'fcc': 1, Phase_types = {'Primary': 0}
'bcc': 1, #further additions to these can be done by looking at 'Create Ensemble Info' filter
'hcp': 0, # other options could be 'Precipitate' and so on.
'bct': 7, # also crystal structures be added in a similar way
'ort': 6} #TODO: is bct Tetragonal low/Tetragonal high?
Phase_types = {'Primary': 0} #further additions to these can be done by looking at 'Create Ensemble Info' filter, other options could be 'Precipitate' and so on.
dx = self.size/self.cells dx = self.size/self.cells
at_cell_ph,in_data_ph,at_cell_ho,in_data_ho = self._mappings() at_cell_ph,in_data_ph,at_cell_ho,in_data_ho = self._mappings()
dream_dir = Path.cwd() if target_dir is None else Path(target_dir) dream_dir = Path.cwd() if target_dir is None else Path(target_dir)
@ -1984,29 +1983,29 @@ class Result:
try: try:
data = ma.array(_read(f['/'.join([inc,'phase',label,'mechanical/O'])])) data = ma.array(_read(f['/'.join([inc,'phase',label,'mechanical/O'])]))
cell_orientation_array[at_cell_ph[c][label],:] = \ cell_orientation_array[at_cell_ph[c][label],:] = \
Rotation(data[in_data_ph[c][label],:]).as_Euler_angles() Rotation(data[in_data_ph[c][label],:]).as_Euler_angles()
# Dream3D handles euler angles better # Dream3D handles euler angles better
except ValueError: #check if the exception is correct except ValueError:
print("Orientation data is not present") print("Orientation data is not present")
exit() # need to check if such a statement would really work. exit() # need to check if such a statement would really work.
phase_ID_array[at_cell_ph[c][label]] = count + 1 phase_ID_array[at_cell_ph[c][label]] = count + 1
job_file_no_ext = self.fname.stem job_file_no_ext = self.fname.stem
o = h5py.File(f'{dream_dir}/{job_file_no_ext}_{inc}.dream3d','w') o = h5py.File(f'{dream_dir}/{job_file_no_ext}_{inc}.dream3d','w')
o.attrs['DADF5toDREAM3D'] = '1.0' o.attrs['DADF5toDREAM3D'] = '1.0'
o.attrs['FileVersion'] = '7.0' o.attrs['FileVersion'] = '7.0'
for g in ['DataContainerBundles','Pipeline']: # empty groups (needed) for g in ['DataContainerBundles','Pipeline']: # empty groups (needed)
o.create_group(g) o.create_group(g)
data_container_label = 'DataContainers/SyntheticVolumeDataContainer' data_container_label = 'DataContainers/SyntheticVolumeDataContainer'
cell_data_label = data_container_label + '/CellData' cell_data_label = data_container_label + '/CellData'
# Data phases # Data phases
o[cell_data_label + '/Phases'] = np.reshape(phase_ID_array, \ o[cell_data_label + '/Phases'] = np.reshape(phase_ID_array, \
tuple(np.flip(self.cells))+(1,)) tuple(np.flip(self.cells))+(1,))
# Data eulers # Data eulers
orientation_data = cell_orientation_array.astype(np.float32) orientation_data = cell_orientation_array.astype(np.float32)
o[cell_data_label + '/EulerAngles'] = orientation_data.reshape(tuple(np.flip(self.cells))+(3,)) o[cell_data_label + '/EulerAngles'] = orientation_data.reshape(tuple(np.flip(self.cells))+(3,))
@ -2024,20 +2023,22 @@ class Result:
o[cell_data_label + '/Phases'].attrs['ComponentDimensions'] = np.array([1],np.uint64) o[cell_data_label + '/Phases'].attrs['ComponentDimensions'] = np.array([1],np.uint64)
o[cell_data_label + '/Phases'].attrs['ObjectType'] = 'DataArray<int32_t>' o[cell_data_label + '/Phases'].attrs['ObjectType'] = 'DataArray<int32_t>'
o[cell_data_label + '/Phases'].attrs['TupleDimensions'] = np.array(self.cells,np.uint64) o[cell_data_label + '/Phases'].attrs['TupleDimensions'] = np.array(self.cells,np.uint64)
# Eulers attributes # Eulers attributes
o[cell_data_label + '/EulerAngles'].attrs['ComponentDimensions'] = np.array([3],np.uint64) o[cell_data_label + '/EulerAngles'].attrs['ComponentDimensions'] = np.array([3],np.uint64)
o[cell_data_label + '/EulerAngles'].attrs['ObjectType'] = 'DataArray<float>' o[cell_data_label + '/EulerAngles'].attrs['ObjectType'] = 'DataArray<float>'
o[cell_data_label + '/EulerAngles'].attrs['TupleDimensions'] = np.array(self.cells,np.uint64) o[cell_data_label + '/EulerAngles'].attrs['TupleDimensions'] = np.array(self.cells,np.uint64)
# Create EnsembleAttributeMatrix # Create EnsembleAttributeMatrix
ensemble_label = data_container_label + '/CellEnsembleData' ensemble_label = data_container_label + '/CellEnsembleData'
# Data CrystalStructures # Data CrystalStructures
o[ensemble_label + '/CrystalStructures'] = np.uint32(np.array([999] + [1]*len(self.phases))) o[ensemble_label + '/CrystalStructures'] = np.uint32(np.array([999] + [1]*len(self.phases)))
# assuming only cubic crystal structures # assuming only cubic crystal structures
# Damask can give the crystal structure info but need to look into dream3d which crystal structure corresponds to which number # Damask can give the crystal structure info
o[ensemble_label + '/PhaseTypes'] = np.uint32(np.array([999] + [Phase_types['Primary']]*len(self.phases))).reshape((len(self.phases)+1,1)) # but need to look into dream3d which crystal structure corresponds to which number
o[ensemble_label + '/PhaseTypes'] = np.uint32(np.array([999] + [Phase_types['Primary']]*len(self.phases)))\
.reshape((len(self.phases)+1,1))
# also assuming Primary phases # also assuming Primary phases
# there can be precipitates etc as well # there can be precipitates etc as well
# Attributes Ensemble Matrix # Attributes Ensemble Matrix
@ -2054,23 +2055,16 @@ class Result:
# Create geometry info # Create geometry info
geom_label = data_container_label + '/_SIMPL_GEOMETRY' geom_label = data_container_label + '/_SIMPL_GEOMETRY'
o[geom_label + '/DIMENSIONS'] = np.int64(np.array(self.cells)) o[geom_label + '/DIMENSIONS'] = np.int64(np.array(self.cells))
o[geom_label + '/ORIGIN'] = np.float32(np.zeros(3)) o[geom_label + '/ORIGIN'] = np.float32(np.zeros(3))
o[geom_label + '/SPACING'] = np.float32(dx) o[geom_label + '/SPACING'] = np.float32(dx)
o[geom_label].attrs['GeometryName'] = 'ImageGeometry' o[geom_label].attrs['GeometryName'] = 'ImageGeometry'
o[geom_label].attrs['GeometryTypeName'] = 'ImageGeometry' o[geom_label].attrs['GeometryTypeName'] = 'ImageGeometry'
o[geom_label].attrs['GeometryType'] = np.array([0],np.uint32) o[geom_label].attrs['GeometryType'] = np.array([0],np.uint32)
o[geom_label].attrs['SpatialDimensionality'] = np.array([3],np.uint32) o[geom_label].attrs['SpatialDimensionality'] = np.array([3],np.uint32)
o[geom_label].attrs['UnitDimensionality'] = np.array([3],np.uint32) o[geom_label].attrs['UnitDimensionality'] = np.array([3],np.uint32)
def export_DADF5(self, def export_DADF5(self,
fname, fname,

View File

@ -499,13 +499,13 @@ class TestResult:
for dataset in ['DIMENSIONS','ORIGIN','SPACING']: for dataset in ['DIMENSIONS','ORIGIN','SPACING']:
results_val = np.array(results_file[geom_label + '/' + dataset]) results_val = np.array(results_file[geom_label + '/' + dataset])
ref_val = np.array(ref_file[geom_label + '/' + dataset]) ref_val = np.array(ref_file[geom_label + '/' + dataset])
if not np.array_equal(ref_val,actual_val): if not np.array_equal(ref_val,results_val):
error_messages.append(f'The {dataset} values are incorrect') error_messages.append(f'The {dataset} values are incorrect')
for attrs in ['GeometryName','GeometryTypeName','GeometryType','SpatialDimensionality','UnitDimensionality']: for attrs in ['GeometryName','GeometryTypeName','GeometryType','SpatialDimensionality','UnitDimensionality']:
ref_value = ref_file[geom_label].attrs[attrs] ref_value = ref_file[geom_label].attrs[attrs]
actual_val = results_file[geom_label].attrs[attrs] actual_val = results_file[geom_label].attrs[attrs]
if not np.array_equal(ref_val,actual_val): if not np.array_equal(ref_value,actual_val):
error_messages.append("Geometry attributes do not match") error_messages.append("Geometry attributes do not match")
assert not error_messages assert not error_messages