From 2e45d526222e916a414ac7e31ff14f081e53b320 Mon Sep 17 00:00:00 2001 From: Gabriel Studer <gabriel.studer@unibas.ch> Date: Mon, 2 Nov 2020 20:58:58 +0100 Subject: [PATCH] Better error handling in superposition dialog to avoid crashing the GUI --- modules/gui/pymod/dng/menu.py | 4 ++++ modules/gui/pymod/dng/superpositiondialog.py | 16 +++++++++++----- 2 files changed, 15 insertions(+), 5 deletions(-) diff --git a/modules/gui/pymod/dng/menu.py b/modules/gui/pymod/dng/menu.py index 487eec75c..cab4b648f 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 351cf4f97..790ce49ae 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 -- GitLab