diff --git a/src/mattersim/datasets/utils/convertor.py b/src/mattersim/datasets/utils/convertor.py index d01776f..dc36687 100644 --- a/src/mattersim/datasets/utils/convertor.py +++ b/src/mattersim/datasets/utils/convertor.py @@ -114,36 +114,13 @@ def get_fixed_radius_bonding( Returns: center_indices, neighbor_indices, images, distances """ - if isinstance(structure, Atoms): - pbc_ = np.array(structure.pbc, dtype=int) - if np.all(pbc_ < 0.01) or not pbc: - min_x = np.min(structure.positions[:, 0]) - min_y = np.min(structure.positions[:, 1]) - min_z = np.min(structure.positions[:, 2]) - max_x = np.max(structure.positions[:, 0]) - max_y = np.max(structure.positions[:, 1]) - max_z = np.max(structure.positions[:, 2]) - x_len = max((max_x - min_x) * 10, 1000) - y_len = max((max_y - min_y) * 10, 1000) - z_len = max((max_z - min_z) * 10, 1000) - lattice_matrix = np.array( - [[x_len, 0.0, 0.0], [0.0, y_len, 0.0], [0.0, 0.0, z_len]], - dtype=float, - ) - pbc_ = np.array([1, 1, 1], dtype=int) - warnings.warn("No PBC detected, using a large supercell", UserWarning) - else: - if np.all(structure.cell < 1e-5): - raise ValueError("Cell vectors are too small") - lattice_matrix = np.ascontiguousarray( - structure.cell[:], dtype=float - ) # noqa: E501 + pbc_ = np.array(structure.pbc, dtype=int) - cart_coords = np.ascontiguousarray( - np.array(structure.positions), dtype=float - ) # noqa: E501 - else: - raise ValueError("structure type not supported") + lattice_matrix = np.ascontiguousarray(structure.cell[:], dtype=float) # noqa: E501 + + cart_coords = np.ascontiguousarray( + np.array(structure.positions), dtype=float + ) # noqa: E501 r = float(cutoff) ( @@ -208,6 +185,32 @@ def convert( pbc: bool, whether to use periodic boundary condition, default True """ # normalize the structure + if isinstance(atoms, Atoms): + pbc_ = np.array(atoms.pbc, dtype=int) + if np.all(pbc_ < 0.01) or not pbc: + min_x = np.min(atoms.positions[:, 0]) + min_y = np.min(atoms.positions[:, 1]) + min_z = np.min(atoms.positions[:, 2]) + max_x = np.max(atoms.positions[:, 0]) + max_y = np.max(atoms.positions[:, 1]) + max_z = np.max(atoms.positions[:, 2]) + x_len = max((max_x - min_x) * 10, 1000) + y_len = max((max_y - min_y) * 10, 1000) + z_len = max((max_z - min_z) * 10, 1000) + lattice_matrix = np.array( + [[x_len, 0.0, 0.0], [0.0, y_len, 0.0], [0.0, 0.0, z_len]], + dtype=float, + ) + pbc_ = np.array([1, 1, 1], dtype=int) + warnings.warn("No PBC detected, using a large supercell", UserWarning) + atoms.set_cell(lattice_matrix) + atoms.set_pbc(pbc_) + else: + if np.all(atoms.cell < 1e-5): + raise ValueError("Cell vectors are too small") + else: + raise ValueError("structure type not supported") + scaled_pos = atoms.get_scaled_positions() scaled_pos = np.mod(scaled_pos, 1) atoms.set_scaled_positions(scaled_pos)