Source code for luna.MyBio.extractor

from luna.MyBio.util import save_to_file
from luna.MyBio.selector import ChainSelector, ResidueSelector
from luna.MyBio.PDB.Model import Model
from luna.MyBio.PDB.Chain import Chain

import logging

logger = logging.getLogger()


[docs]class Extractor(): """Extract chains or residues from ``entity``. Parameters ---------- entity : :class:`~luna.MyBio.PDB.Entity.Model` or :class:`~luna.MyBio.PDB.Entity.Chain` A model or chain object from where chains and residues will be extracted, respectively. """ def __init__(self, entity): self.entity = entity @property def entity(self): return self._entity @entity.setter def entity(self, entity): if not isinstance(entity, (Model, Chain)): raise TypeError("Only objects of type %s or %s are accepted." % (Model.__module__, Chain.__module__)) self._entity = entity
[docs] def extract_chains(self, chains, output_file): """Extract chains from ``entity`` and save it to ``output_file``. Parameters ---------- chains : iterable of str A sequence of chains to extract from model ``entity``. output_file : str Save extracted chains to this file. """ if self.entity.level != "M": logger.warning("Entity must be a Model object.") else: chain_sel = set() for chain in chains: if chain in self.entity.child_dict: chain_sel.add(self.entity[chain]) else: logger.warning("Chain %s does not exist." % chain) if len(chain_sel) > 0: save_to_file(self.entity, output_file, ChainSelector(chain_sel)) else: logger.warning("No valid chain to extract.")
[docs] def extract_residues(self, residues, output_file): """Extract residues from ``entity`` and save it to ``output_file``. Parameters ---------- residues : iterable A sequence of residues to extract from chain ``entity``. output_file : str Save extracted residues to to this file. """ if self.entity.level != "C": logger.warning("Entity must be a Chain object.") else: res_sel = set() for res in residues: if res in self.entity.child_dict: res_sel.add(self.entity[res]) else: logger.warning("Residue %s does not exist." % str(res)) if len(res_sel) > 0: save_to_file(self.entity, output_file, ResidueSelector(res_sel)) else: logger.warning("No valid residue to extract.")