Source code for modelcif.reference

"""Classes for linking back to a sequence or structure database."""

import warnings
import ihm.reference
from ihm.reference import Alignment, SeqDif  # noqa: F401


[docs] class TargetReference(ihm.reference.Sequence): """Point to the sequence of a target :class:`modelcif.Entity` in a sequence database. Typically a subclass such as :class:`UniProt` is used, although to use a custom database, make a new subclass and provide a docstring to describe the database, e.g.:: class CustomRef(TargetReference): "my custom database" Compare with :class:`modelcif.ReferenceDatabase`, which describes multiple sequences used in template searches or alignment construction; this class relates to just the modeled sequence itself. See also :attr:`alignments` to describe the correspondence between the database and entity sequences. :param str code: The name of the sequence in the database. :param str accession: The database accession. :param int align_begin: Beginning index of the sequence in the database. Deprecated; use :attr:`alignments` instead. :param int align_end: Ending index of the sequence in the database. Deprecated; use :attr:`alignments` instead. :param str isoform: Sequence isoform, if applicable. :param str ncbi_taxonomy_id: Taxonomy identifier provided by NCBI. :param str organism_scientific: Scientific name of the organism. :param sequence_version_date: Versioning date, e.g. for UniProtKB sequences this is usually the date of last modification from the DT line of an entry. :type sequence_version_date: :class:`datetime.date` or :class:`datetime.datetime` :param str sequence_crc64: The CRC64 sum of the original database sequence. :param str sequence: The complete database sequence, as a string of one-letter codes. If omitted, will default to the canonical sequence of the associated :class:`~modelcif.Entity`. :param str details: Longer text describing the sequence. """ name = 'Other' def __init__(self, code, accession, align_begin=None, align_end=None, isoform=None, ncbi_taxonomy_id=None, organism_scientific=None, sequence_version_date=None, sequence_crc64=None, sequence=None, details=None): super(TargetReference, self).__init__( db_name=self.name, db_code=code, accession=accession, sequence=sequence, details=details) self.align_begin, self.align_end = align_begin, align_end self.isoform = isoform self.ncbi_taxonomy_id = ncbi_taxonomy_id self.organism_scientific = organism_scientific self.sequence_version_date = sequence_version_date self.sequence_crc64 = sequence_crc64 if align_begin or align_end: warnings.warn( "align_begin and align_end are deprecated, and will be " "removed in a future python-modelcif release. Specify the " "database sequence and provide one or more " "modelcif.reference.Alignment objects intead.", stacklevel=2) if sequence is None: warnings.warn( "No sequence provided. The canonical sequence of the Entity " "will be used instead.", stacklevel=2) #: All alignments between the reference and entity sequences, as #: :class:`Alignment` objects. If none are provided, a simple 1:1 #: alignment is assumed. self.alignments = [] code = property(lambda self: self.db_code) def _get_other_details(self): if (type(self) is not TargetReference and self.name == TargetReference.name): return self.__doc__.split('\n')[0] other_details = property( _get_other_details, doc="More information about a custom reference type. " "By default it is the first line of the docstring.")
[docs] class UniProt(TargetReference): """Point to the sequence of an :class:`modelcif.Entity` in UniProt. These objects are typically passed to the :class:`modelcif.Entity` constructor for target sequences (for templates, see :class:`TemplateReference`). See :class:`TargetReference` for a description of the parameters. """ name = 'UNP' other_details = None
[docs] class TemplateReference(object): """Point to the structure of a :class:`modelcif.Template` in a structure database. These objects are typically passed to the :class:`modelcif.Template` constructor for template sequences (for target sequences, see :class:`TargetReference`). Typically a subclass such as :class:`PDB` is used, although to use a custom database, make a new subclass and provide a docstring to describe the database, e.g.:: class CustomRef(TemplateReference): "my custom database" :param str accession: The database accession. :param db_version_date: Versioning date, e.g. for PDB entries this is usually the value of ``_pdbx_audit_revision_history.revision_date``. :type db_version_date: :class:`datetime.date` or :class:`datetime.datetime` """ name = 'Other' def __init__(self, accession, db_version_date=None): self.accession = accession self.db_version_date = db_version_date def _get_other_details(self): if (type(self) is not TemplateReference and self.name == TemplateReference.name): return self.__doc__.split('\n')[0] other_details = property( _get_other_details, doc="More information about a custom reference type. " "By default it is the first line of the docstring.")
[docs] class PDB(TemplateReference): """Point to the structure of a :class:`modelcif.Template` in PDB. These objects are typically passed to the :class:`modelcif.Template` constructor. See :class:`TemplateReference` for a description of the parameters. """ name = 'PDB' other_details = None
[docs] class AlphaFoldDB(TemplateReference): """Point to the structure of a :class:`modelcif.Template` in AlphaFold DB. These objects are typically passed to the :class:`modelcif.Template` constructor. See :class:`TemplateReference` for a description of the parameters. """ name = 'AlphaFoldDB' other_details = None
[docs] class PubChem(TemplateReference): """Point to the structure of a :class:`modelcif.Template` in PubChem. These objects are typically passed to the :class:`modelcif.Template` constructor. See :class:`TemplateReference` for a description of the parameters. Use the PubChem CID as the accession code. """ name = 'PubChem' other_details = None