Source code for schrodinger.structutils.structalign

"""
A module for performing protein structure alignment. This requires Prime to
be installed and licensed appropriately as the SKA program distributed
with Prime is what is actually used to do the alignment.

The structural alignment is performed and the results are added as properties
to the input CTs.  For each template the alignment is returned along with
the raw output from ska.

Copyright Schrodinger, LLC. All rights reserved.

"""
# Contributors: Quentin McDonald, Matvey Adzhigirey, John Gunn

from schrodinger.utils import log

logger = log.get_logger()
# Check whether SCHRODINGER_PYTHON_DEBUG is set for debugging:
DEBUG = (log.get_environ_log_level() <= log.DEBUG)


[docs]class StructAlign(object): """ This is the class used to perform the structural alignment. This class will check at initialization time if Prime is installed by trying to import schrodinger.applications.ska and will fail if it's not installed as nothing more can be done. There are a number of properties that can be set for instances of this class which are used to control how the alignment is done: gap_penalty - default = 2.0 deletion_penalty = default = 1.0 use_scanning_alignment - default = False window_length - default = 5 minimum_similarity - default = 1.0 minimum_length - default = 2 use_automatic_settings - default = False use_standard_residues - default = False reorder_by_connectivity - default = False """
[docs] def __init__(self): """ Construct an instance of a StructAlign object. This method will check that schrodinger.application.ska is available and fail with a RuntimeError if it's not """ try: from schrodinger.application import ska except: raise RuntimeError("Prime is not installed, it is " +\ "required to instantiate this class") self.pairwise_align_ct = ska.pairwise_align_ct # Initialize the variables: self._ref_st = None self._gap_penalty = 2.0 self._deletion_penalty = 1.0 self._use_scanning_alignment = False self._window_length = 5 self._minimum_similarity = 1.0 self._minimum_length = 2.0 self.use_automatic_settings = False self.use_standard_residues = False self.reorder_by_connectivity = False return
# gap_penalty: property for controlling the gap penalty: def _setGapPenalty(self, penalty): self._gap_pentalty = penalty return def _getGapPenalty(self): return self._gap_penalty gap_penalty = property(_getGapPenalty, _setGapPenalty, doc="Access to the gap penalty for the alignment") # deletion_penalty: property for controlling the deletion penalty def _setDeletionPenalty(self, penalty): self._deletion_penalty = penalty return def _getDeletionPenalty(self): return self._deletion_penalty deletion_penalty = property( _getDeletionPenalty, _setDeletionPenalty, doc="Access to the deletion penalty for the alignment") # Use scanning aligment flag def _setUseScanningAlignment(self, scanning_alignment): self._use_scanning_alignment = scanning_alignment return def _getUseScanningAlignment(self): return self._use_scanning_alignment use_scanning_alignment = property( _getUseScanningAlignment, _setUseScanningAlignment, doc="Access to the use scanning alignment flag") # Window length property: def _setWindowLength(self, length): self._window_length = length return def _getWindowLength(self): return self._window_length window_length = property(_getWindowLength, _setWindowLength, doc="Access to the window length for the aligment") # Minimum similarity property: def _setMinimumSimilarity(self, min_sim): self._minimum_similarity = min_sim return def _getMinimumSimilarity(self): return self._minimum_similarity minimum_similarity = property( _getMinimumSimilarity, _setMinimumSimilarity, doc="Access to the minimum similarity used in the alignment") # Minimum Length property def _setMinimumLength(self, min_length): self._minimum_length = min_length return def _getMinimumLength(self): return self._minimum_length minimum_length = property( _getMinimumLength, _setMinimumLength, doc="Access to the minimum length used in the alignment")
[docs] def align(self, ref_st, sts): """ Perform a structural alignment on the Structure objects in the list 'sts' relative to the reference structure 'ref_st' Each structure in the list is aligned relative to the reference structure. The coordinates of the input structures are modified to give the best structural alignment. """ cmdopts = { 'MODE': 'align', 'ORDER': 'seed', 'GAP_OPEN': self._gap_penalty, 'GAP_DEL': self._deletion_penalty, 'SSE_MINSIM': self._minimum_similarity, 'SSE_MINLEN': self._minimum_length } if self._use_scanning_alignment: cmdopts['SSE_WINLEN'] = self._window_length if self.use_automatic_settings: cmdopts['USE_AUTOMATIC_SETTINGS'] = 'yes' std_res = self.use_standard_residues reorder = self.reorder_by_connectivity output = self.pairwise_align_ct(query=('ref', ref_st), templist=[('sup', st) for st in sts], keywords=cmdopts, log=logger, debug=DEBUG, save_props=True, std_res=std_res, reorder=reorder) return [(out.align, out.stdout) for out in output]
[docs] def alignStructure(self, ref_st, mob_st): """ Perform a structural alignment on the mob_st structure relative to the ref_st structure. The coordinates of the input mob_st structure are modified to give the best structural alignment. """ return self.align(ref_st, [mob_st])[0]
#EOF