Source code for ihm.representation

"""Classes for handling representation of the system during modeling.
"""


def _starting_model_report(seg):
    if seg.starting_model:
        if hasattr(seg.starting_model, '_id'):
            return " (from starting model %s)" % seg.starting_model._id
        else:
            return " (from starting model)"
    else:
        return ""


[docs] class Segment(object): """Base class for part of a :class:`Representation`. See :class:`AtomicSegment`, :class:`ResidueSegment`, :class:`MultiResidueSegment`, and :class:`FeatureSegment`. """ def _get_report(self): """Return a textual description of the object, used by :meth:`ihm.System.report`""" return str(self)
[docs] class AtomicSegment(Segment): """Part of the system modeled atomistically, stored in a :class:`Representation`. :param asym_unit: The asymmetric unit (or part of one) that this segment represents. :type asym_unit: :class:`~ihm.AsymUnit` or :class:`~ihm.AsymUnitRange` :param bool rigid: Whether internal coordinates of the segment were fixed during modeling. :param starting_model: initial coordinates used for the segment (or None). :type starting_model: :class:`~ihm.startmodel.StartingModel` :param str description: Additional text describing this segment. """ primitive = 'atomistic' count = None granularity = 'by-atom' def _get_report(self): asym = self.asym_unit return ("%s %d-%d as %s atoms%s" % (asym.details, asym.seq_id_range[0], asym.seq_id_range[1], "rigid" if self.rigid else "flexible", _starting_model_report(self))) def __init__(self, asym_unit, rigid, starting_model=None, description=None): self.asym_unit = asym_unit self.starting_model, self.rigid = starting_model, rigid self.description = description
[docs] class ResidueSegment(Segment): """Part of the system modeled as a set of residues, stored in a :class:`Representation`. :param asym_unit: The asymmetric unit (or part of one) that this segment represents. :type asym_unit: :class:`~ihm.AsymUnit` or :class:`~ihm.AsymUnitRange` :param bool rigid: Whether internal coordinates of the segment were fixed during modeling. :param str primitive: The type of object used to represent this segment (sphere/gaussian/other). :param starting_model: initial coordinates used for the segment (or None). :type starting_model: :class:`~ihm.startmodel.StartingModel` :param str description: Additional text describing this segment. """ count = None granularity = 'by-residue' def _get_report(self): asym = self.asym_unit return ("%s %d-%d as %s residues%s" % (asym.details, asym.seq_id_range[0], asym.seq_id_range[1], "rigid" if self.rigid else "flexible", _starting_model_report(self))) def __init__(self, asym_unit, rigid, primitive, starting_model=None, description=None): self.asym_unit = asym_unit self.primitive = primitive self.starting_model, self.rigid = starting_model, rigid self.description = description
[docs] class MultiResidueSegment(Segment): """Part of the system modeled as a single object representing a range of residues, stored in a :class:`Representation`. :param asym_unit: The asymmetric unit (or part of one) that this segment represents. :type asym_unit: :class:`~ihm.AsymUnit` or :class:`~ihm.AsymUnitRange` :param bool rigid: Whether internal coordinates of the segment were fixed during modeling. :param str primitive: The type of object used to represent this segment (sphere/gaussian/other). :param starting_model: initial coordinates used for the segment (or None). :type starting_model: :class:`~ihm.startmodel.StartingModel` :param str description: Additional text describing this segment. """ count = None granularity = 'multi-residue' def __init__(self, asym_unit, rigid, primitive, starting_model=None, description=None): self.asym_unit = asym_unit self.primitive = primitive self.starting_model, self.rigid = starting_model, rigid self.description = description
[docs] class FeatureSegment(Segment): """Part of the system modeled as a number of geometric features, stored in a :class:`Representation`. :param asym_unit: The asymmetric unit (or part of one) that this segment represents. :type asym_unit: :class:`~ihm.AsymUnit` or :class:`~ihm.AsymUnitRange` :param bool rigid: Whether internal coordinates of the segment were fixed during modeling. :param str primitive: The type of object used to represent this segment (sphere/gaussian/other). :param int count: The number of objects used to represent this segment. :param starting_model: initial coordinates used for the segment (or None). :type starting_model: :class:`~ihm.startmodel.StartingModel` :param str description: Additional text describing this segment. """ granularity = 'by-feature' def _get_report(self): asym = self.asym_unit return ("%s %d-%d as %d %s feature%s (%s)%s" % (asym.details, asym.seq_id_range[0], asym.seq_id_range[1], self.count, "rigid" if self.rigid else "flexible", "" if self.count == 1 else "s", self.primitive, _starting_model_report(self))) def __init__(self, asym_unit, rigid, primitive, count, starting_model=None, description=None): self.asym_unit = asym_unit self.primitive, self.count = primitive, count self.starting_model, self.rigid = starting_model, rigid self.description = description
[docs] class Representation(list): """Part of the system modeled as a set of geometric objects, such as spheres or atoms. This is implemented as a simple list of :class:`Segment` objects. :param sequence elements: Initial set of segments. :param str name: A short descriptive name. :param str details: A longer description of the representation. Typically a Representation is assigned to a :class:`~ihm.model.Model`. See also :attr:`ihm.System.orphan_representations`. Multiple representations of the same system are possible (multi-scale). """ # For backwards compatibility with earlier versions of this class which # didn't specify name/details name = details = None # todo: use set rather than list? def __init__(self, elements=(), name=None, details=None): super(Representation, self).__init__(elements) self.name, self.details = name, details