diff --git a/aiidalab_widgets_base/structures.py b/aiidalab_widgets_base/structures.py index 3a3cbf925..87bc9f0ed 100644 --- a/aiidalab_widgets_base/structures.py +++ b/aiidalab_widgets_base/structures.py @@ -384,32 +384,6 @@ def __init__( children=[self.file_upload, supported_formats, self._status_message] ) - def _validate_and_fix_ase_cell(self, ase_structure, vacuum_ang=10.0): - """ - Checks if the ase Atoms object has a cell set, - otherwise sets it to bounding box plus specified "vacuum" space - """ - if not ase_structure: - return None - - cell = ase_structure.cell - - # TODO: Since AiiDA 2.0, zero cell is possible if PBC=false - # so we should honor that here and do not put artificial cell - # around gas phase molecules. - if ( - np.linalg.norm(cell[0]) < 0.1 - or np.linalg.norm(cell[1]) < 0.1 - or np.linalg.norm(cell[2]) < 0.1 - ): - # if any of the cell vectors is too short, consider it faulty - # set cell as bounding box + vacuum_ang - bbox = np.ptp(ase_structure.positions, axis=0) - new_structure = ase_structure.copy() - new_structure.cell = bbox + vacuum_ang - return new_structure - return ase_structure - def _on_file_upload(self, change=None): """When file upload button is pressed.""" for fname, item in change["new"].items(): @@ -451,10 +425,7 @@ def _read_structure(self, fname, content): if self.allow_trajectories: return TrajectoryData( structurelist=[ - StructureData( - ase=self._validate_and_fix_ase_cell(ase_struct) - ) - for ase_struct in structures + StructureData(ase=ase_struct) for ase_struct in structures ] ) else: @@ -463,7 +434,7 @@ def _read_structure(self, fname, content): """ return None - return self._validate_and_fix_ase_cell(structures[0]) + return structures[0] class StructureExamplesWidget(ipw.VBox): @@ -683,7 +654,7 @@ def _on_select_structure(self, _=None): class SmilesWidget(ipw.VBox): - """Convert SMILES into 3D structure.""" + """Convert SMILES into a 3D structure.""" structure = tl.Instance(ase.Atoms, allow_none=True) @@ -698,8 +669,9 @@ def __init__(self, title=""): super().__init__( [ ipw.HTML( - "The SmilesWidget requires the rdkit library, " + "The SMILES widget requires the rdkit library, " "but the library was not found." + "You can install it with pip install rdkit" ) ] ) @@ -726,12 +698,10 @@ def _make_ase(self, species, positions, smiles): if len(species) > 2: positions = PCA(n_components=3).fit_transform(positions) atoms = ase.Atoms(species, positions=positions, pbc=False) - atoms.cell = np.ptp(atoms.positions, axis=0) + 10 atoms.center() # We're attaching this info so that it # can be later stored as an extra on AiiDA Structure node. atoms.info["smiles"] = smiles - return atoms def _rdkit_opt(self, smiles, steps):