diff --git a/modules/gui/pymod/init_context_menu.py b/modules/gui/pymod/init_context_menu.py index 93ea20741ad64e5f3f2a72bc927818d96c8a2981..0041ef8173a69f385ffc41a0cd0510e400503973 100644 --- a/modules/gui/pymod/init_context_menu.py +++ b/modules/gui/pymod/init_context_menu.py @@ -7,7 +7,7 @@ import sip from ost import geom, gfx, gui, seq from ost import settings from ost import LogError, mol -from ost.bindings import tmtools +from ost.bindings import WrappedTMAlign from ost.bindings import msms from ost.seq import alg import ost @@ -236,26 +236,12 @@ class SurfaceContextMenu(QtCore.QObject): class AlignmentContextMenu(QtCore.QObject): def __init__(self, context_menu): - try: - try: # workaround for interrupted system call bug on OSX - if platform.system() == "Windows": - settings_name="tmalign.exe" - else: - settings_name="tmalign" - except IOError: - # if platform.system() fails with an IOError we are most likely on a buggy mac an therefore - # use "tmalign" - settings_name="tmalign" - - settings.Locate(settings_name) - QtCore.QObject.__init__(self, context_menu.qobject) - - self.action = QtWidgets.QAction("Align", self) - self.action.triggered.connect(self.Align) - context_menu.AddAction(self.action, gui.ContextActionType.ENTITY | gui.ContextActionType.MULTI) - self.seq_viewer = None - except settings.FileNotFound: - return + + QtCore.QObject.__init__(self, context_menu.qobject) + self.action = QtWidgets.QAction("Align", self) + self.action.triggered.connect(self.Align) + context_menu.AddAction(self.action, gui.ContextActionType.ENTITY | gui.ContextActionType.MULTI) + self.seq_viewer = None def Align(self): scene_selection = gui.SceneSelection.Instance() @@ -270,11 +256,11 @@ class AlignmentContextMenu(QtCore.QObject): node = ent_list[0] res_list = list() if isinstance(node, gfx.Entity): - ref = node.view.handle + ref = node.view.chains[0] for i in range(1,len(ent_list)): node = ent_list[i] if isinstance(node, gfx.Entity): - res_list.append(tmtools.TMAlign(node.view.handle, ref)) + res_list.append(WrappedTMAlign(node.view.chains[0], ref)) node.UpdatePositions() if show_scores: self.__ShowScore(ent_list, res_list) @@ -291,12 +277,18 @@ class AlignmentContextMenu(QtCore.QObject): def __DisplayAlignment(self, ent_list, res_list): if(len(res_list)>0): - ref_seq = seq.CreateSequence("%s (ref)"%ent_list[0].GetName(),res_list[0].ref_sequence.GetGaplessString()) + ref_seq = seq.CreateSequence("%s (ref)"%ent_list[0].GetName(), + res_list[0].alignment.GetSequence(1).GetGaplessString()) aln_list = seq.AlignmentList() if(ref_seq.IsValid()): for i in range(0, len(res_list)): - res_list[i].alignment.SetSequenceName(1,ent_list[i+1].GetName()) - aln_list.append(res_list[i].alignment) + # WrappedTMAlign returns an alignment with second sequence + # being reference... let's swap... + new_aln = seq.CreateAlignment() + new_aln.AddSequence(res_list[i].alignment.GetSequence(1)) + new_aln.AddSequence(res_list[i].alignment.GetSequence(0)) + new_aln.SetSequenceName(1, ent_list[i+1].GetName()) + aln_list.append(new_aln) alignment = alg.MergePairwiseAlignments(aln_list, ref_seq) gosty = gui.GostyApp.Instance() main_area = gosty.perspective.GetMainArea()