diff --git a/modules/gui/pymod/dng/menu.py b/modules/gui/pymod/dng/menu.py index 487eec75c1b28fb7e1b414f197a0ec1e44c7c7fe..cab4b648f5b990527b59ae4cc1941f52e6066a78 100644 --- a/modules/gui/pymod/dng/menu.py +++ b/modules/gui/pymod/dng/menu.py @@ -212,6 +212,10 @@ class SceneMenu(QMenu): gfx_ent_1.UpdatePositions() gfx.Scene().CenterOn(gfx_ent_2) LogScript('RMSD: %.3f'%sd.rmsd) + elif sd.superposition_error != None: + LogScript('Superposition Failed: ' + sd.superposition_error) + else: + LogScript('Superposition Failed!') class WindowMenu(QMenu): def __init__(self, parent=None): diff --git a/modules/gui/pymod/dng/superpositiondialog.py b/modules/gui/pymod/dng/superpositiondialog.py index 351cf4f97d5dc3537636d071e095857c95cfd27d..790ce49ae6b1a97779870e86285bee4eea55f73c 100644 --- a/modules/gui/pymod/dng/superpositiondialog.py +++ b/modules/gui/pymod/dng/superpositiondialog.py @@ -122,6 +122,7 @@ class SuperpositionDialog(QtWidgets.QDialog): self.rmsd_superposed_atoms = None self.rmsd = None self.fraction_superposed = None + self.superposition_error = None self._mmethod_dict = {'number': 'number', 'index': 'index', 'local alignment': 'local-aln', @@ -223,11 +224,16 @@ class SuperpositionDialog(QtWidgets.QDialog): view_one = self._chain_one.selected_chain view_two = self._chain_two.selected_chain atoms = self._GetAtomSelection() - sp = Superpose(view_two, view_one, - self._mmethod_dict[str(self._methods.currentText())], - atoms, iterative=self._iterative, - max_iterations=self._it_in.value(), - distance_threshold=self._dist_in.value()) + try: + sp = Superpose(view_two, view_one, + self._mmethod_dict[str(self._methods.currentText())], + atoms, iterative=self._iterative, + max_iterations=self._it_in.value(), + distance_threshold=self._dist_in.value()) + except Exception as e: + # mark as failed by setting superposition_error and let caller handle it + self.superposition_error = str(e) + return self.rmsd = sp.rmsd if self._iterative: self.rmsd_superposed_atoms = sp.rmsd_superposed_atoms