Source code for simbad.util.matthews_prob

"""Module for running matthews probabilities to calculate solvent content"""

__author__ = "Adam Simpkin"
__date__ = "10 Oct 2017"
__version__ = "0.2"

import contextlib
import io
import sys

from cctbx.crystal import symmetry
from mmtbx.scaling.matthews import density_calculator
from mmtbx.scaling.matthews import matthews_rupp
from simbad.util.pdb_util import PdbStructure


[docs]@contextlib.contextmanager def no_stdout(): save_stdout = sys.stdout sys.stdout = io.BytesIO() yield sys.stdout = save_stdout
[docs]class SolventContent(object): def __init__(self, cell, sg): self.crystal_symmetry = symmetry(unit_cell=cell, space_group_symbol=sg) self.dens_calc = density_calculator(self.crystal_symmetry)
[docs] def calculate_from_file(self, pdb): struct = PdbStructure() struct.from_file(pdb) return self.calculate_from_struct(struct)
[docs] def calculate_from_struct(self, struct): return self._calculate(struct.molecular_weight)
def _calculate(self, mw): return self.dens_calc.solvent_fraction(mw, 0.74) * 100
[docs]class MatthewsProbability(object): def __init__(self, cell, sg): self.crystal_symmetry = symmetry(unit_cell=cell, space_group_symbol=sg)
[docs] def calculate_content_ncopies_from_file(self, pdb): struct = PdbStructure() struct.from_file(pdb) return self.calculate_content_ncopies_from_struct(struct)
[docs] def calculate_content_ncopies_from_struct(self, struct): return self._calculate(struct.nres)
def _calculate(self, nres): with no_stdout(): result = matthews_rupp(self.crystal_symmetry, n_residues=nres) return result.solvent_content, result.n_copies