Source code for luna.MyBio.selector

from luna.MyBio.PDB.PDBIO import Select


DEFAULT_ALTLOC = ("A", "1")


[docs]class Selector(Select): """Select atoms for PDB output. Parameters ---------- keep_hydrog : bool If True (default), keeps all hydrogens. Otherwise, filter them out. Hydrogens are atoms whose element is either "H" or "D" (deuterium). keep_altloc : bool If True (default), keeps all atoms. Otherwise, keeps only atoms whose alternate location is in the list ``altloc``. altloc : iterable List of valid alternate location identifiers. The default valid values are "A" and "1". """ def __init__(self, keep_hydrog=True, keep_altloc=True, altloc=DEFAULT_ALTLOC): self.keep_hydrog = keep_hydrog self.keep_altloc = keep_altloc self.altloc = altloc
[docs] def accept_atom(self, atom): """Decide if the atom is valid or not.""" # Hydrogen and Deuterium if not self.keep_hydrog and atom.element in ["H", "D"]: return False if self.keep_altloc: return True else: return not atom.is_disordered() or atom.get_altloc() in self.altloc
[docs]class ChainSelector(Selector): """Select atoms from chains defined at ``entries``. Parameters ---------- entries : iterable of :class:`~luna.MyBio.PDB.Entity.Chain` instances Sequence of chain objects. """ def __init__(self, entries, **kwargs): self.entries = entries super().__init__(**kwargs)
[docs] def accept_chain(self, chain): """Decide if the chain is valid or not.""" return True if (chain in self.entries) else False
[docs] def accept_residue(self, res): """Decide if the residue is valid or not.""" return self.accept_chain(res.get_parent())
[docs] def accept_atom(self, atom): return super().accept_atom(atom) and self.accept_residue(atom.get_parent())
[docs]class ResidueSelector(Selector): """Select atoms from residues and other molecules defined at ``entries``. Parameters ---------- entries : iterable of :class:`~luna.MyBio.PDB.Residue.Residue` Sequence of residue objects. """ def __init__(self, entries, **kwargs): self.entries = entries super().__init__(**kwargs)
[docs] def accept_residue(self, res): """Decide if the residue is valid or not.""" return res in self.entries
[docs] def accept_atom(self, atom): return super().accept_atom(atom) and self.accept_residue(atom.get_parent())
[docs]class ResidueSelectorBySeqNum(Selector): """Select atoms from compounds defined at ``entries``. Parameters ---------- entries : iterable of int Sequence of residue sequence numbers. """ def __init__(self, entries, **kwargs): self.entries = entries super().__init__(**kwargs)
[docs] def accept_residue(self, res): """Decide if the residue is valid or not.""" return True if (res.get_id()[1] in self.entries) else False
[docs] def accept_atom(self, atom): return super().accept_atom(atom) and self.accept_residue(atom.get_parent())
[docs]class AtomSelector(Selector): """Select atoms defined at ``entries``. Parameters ---------- entries : iterable of :class:`~luna.MyBio.PDB.Atom.Atom` Sequence of atom objects. """ def __init__(self, entries, **kwargs): self.entries = entries super().__init__(**kwargs)
[docs] def accept_atom(self, atom): return super().accept_atom(atom) and atom in self.entries