diff --git a/python/damask/_configmaterial.py b/python/damask/_configmaterial.py index f83c12147..20037737e 100644 --- a/python/damask/_configmaterial.py +++ b/python/damask/_configmaterial.py @@ -111,7 +111,7 @@ class ConfigMaterial(Config): Parameters ---------- - fname : str + fname : str or pathlib.Path Filename of the DREAM.3D (HDF5) file. grain_data : str Name of the group (folder) containing grain-wise data. Defaults @@ -154,26 +154,26 @@ class ConfigMaterial(Config): defined separately. """ - b = util.DREAM3D_base_group(fname) if base_group is None else base_group - c = util.DREAM3D_cell_data_group(fname) if cell_data is None else cell_data - f = h5py.File(fname,'r') + with h5py.File(fname, 'r') as f: + b = util.DREAM3D_base_group(f) if base_group is None else base_group + c = util.DREAM3D_cell_data_group(f) if cell_data is None else cell_data - if grain_data is None: - phase = f['/'.join([b,c,phases])][()].flatten() - O = Rotation.from_Euler_angles(f['/'.join([b,c,Euler_angles])]).as_quaternion().reshape(-1,4) # noqa - _,idx = np.unique(np.hstack([O,phase.reshape(-1,1)]),return_index=True,axis=0) - idx = np.sort(idx) - else: - phase = f['/'.join([b,grain_data,phases])][()] - O = Rotation.from_Euler_angles(f['/'.join([b,grain_data,Euler_angles])]).as_quaternion() # noqa - idx = np.arange(phase.size) + if grain_data is None: + phase = f['/'.join([b,c,phases])][()].flatten() + O = Rotation.from_Euler_angles(f['/'.join([b,c,Euler_angles])]).as_quaternion().reshape(-1,4) # noqa + _,idx = np.unique(np.hstack([O,phase.reshape(-1,1)]),return_index=True,axis=0) + idx = np.sort(idx) + else: + phase = f['/'.join([b,grain_data,phases])][()] + O = Rotation.from_Euler_angles(f['/'.join([b,grain_data,Euler_angles])]).as_quaternion() # noqa + idx = np.arange(phase.size) - if cell_ensemble_data is not None and phase_names is not None: - try: - names = np.array([s.decode() for s in f['/'.join([b,cell_ensemble_data,phase_names])]]) - phase = names[phase] - except KeyError: - pass + if cell_ensemble_data is not None and phase_names is not None: + try: + names = np.array([s.decode() for s in f['/'.join([b,cell_ensemble_data,phase_names])]]) + phase = names[phase] + except KeyError: + pass base_config = ConfigMaterial({'phase':{k if isinstance(k,int) else str(k): None for k in np.unique(phase)}, diff --git a/python/damask/_grid.py b/python/damask/_grid.py index 01ad3ad6f..a8df4f877 100644 --- a/python/damask/_grid.py +++ b/python/damask/_grid.py @@ -365,7 +365,7 @@ class Grid: Parameters ---------- - fname : str or or pathlib.Path + fname : str or pathlib.Path Filename of the DREAM.3D (HDF5) file. feature_IDs : str, optional Name of the dataset containing the mapping between cells and @@ -401,22 +401,22 @@ class Grid: orientation and phase are considered. """ - b = util.DREAM3D_base_group(fname) if base_group is None else base_group - c = util.DREAM3D_cell_data_group(fname) if cell_data is None else cell_data - f = h5py.File(fname, 'r') + with h5py.File(fname, 'r') as f: + b = util.DREAM3D_base_group(f) if base_group is None else base_group + c = util.DREAM3D_cell_data_group(f) if cell_data is None else cell_data - cells = f['/'.join([b,'_SIMPL_GEOMETRY','DIMENSIONS'])][()] - size = f['/'.join([b,'_SIMPL_GEOMETRY','SPACING'])] * cells - origin = f['/'.join([b,'_SIMPL_GEOMETRY','ORIGIN'])][()] + cells = f['/'.join([b,'_SIMPL_GEOMETRY','DIMENSIONS'])][()] + size = f['/'.join([b,'_SIMPL_GEOMETRY','SPACING'])] * cells + origin = f['/'.join([b,'_SIMPL_GEOMETRY','ORIGIN'])][()] - if feature_IDs is None: - phase = f['/'.join([b,c,phases])][()].reshape(-1,1) - O = Rotation.from_Euler_angles(f['/'.join([b,c,Euler_angles])]).as_quaternion().reshape(-1,4) # noqa - unique,unique_inverse = np.unique(np.hstack([O,phase]),return_inverse=True,axis=0) - ma = np.arange(cells.prod()) if len(unique) == cells.prod() else \ - np.arange(unique.size)[np.argsort(pd.unique(unique_inverse))][unique_inverse] - else: - ma = f['/'.join([b,c,feature_IDs])][()].flatten() + if feature_IDs is None: + phase = f['/'.join([b,c,phases])][()].reshape(-1,1) + O = Rotation.from_Euler_angles(f['/'.join([b,c,Euler_angles])]).as_quaternion().reshape(-1,4) # noqa + unique,unique_inverse = np.unique(np.hstack([O,phase]),return_inverse=True,axis=0) + ma = np.arange(cells.prod()) if len(unique) == cells.prod() else \ + np.arange(unique.size)[np.argsort(pd.unique(unique_inverse))][unique_inverse] + else: + ma = f['/'.join([b,c,feature_IDs])][()].flatten() return Grid(material = ma.reshape(cells,order='F'), size = size,