Source code for swamp.wrappers.wrefmac

import os
from pyjob import cexec
from swamp.parsers import RefmacParser
from swamp.wrappers.wrapper import Wrapper


[docs]class wRefmac(Wrapper): """Refmac5 wrapper :param str workdir: working directory where refmac will be executed :param str pdbin: pdb filename with the placed search model :param str mtzin: target's mtz filename :param str make_hydr: mset MAKE_HYDR (default: 'N') :param str weight_matrix: set WEIGHT MATRIX stdin value for jelly body refinement (default: '0.01') :param str ridg_dist_sigm: set RIDG DIST SIGM stdin value for jelly body refinement (default: '0.02') :param str ncyc: number of refinement cycles (default: '100') :param str phased_mtz: target's mtz filename containing phases (default: None) :param bool silent_start: if True, the logger will not display the start banner (default False) :param `~swamp.logger.swamplogger.SwampLogger` logger: logging interface for the wrapper (default None) :ivar str rfree: calculated Rfree after refinement :ivar str rfactor: calculated Rfactor after refinement :ivar tuple rfactor_delta: a tuple with the intial and final Rfactor :ivar tuple rfree_delta: a tuple with the intial and final Rfree :ivar tuple bondlenght_delta: a tuple with the intial and final Bond length :ivar tuple bondangle_delta: a tuple with the intial and final Bond angle :ivar tuple chirvol_delta: a tuple with the intial and final Chirvol :ivar str ovarall_CC: overall correlation coefficient between phases at \ :py:attr:`~swamp.wrappers.wrefmac.wRefmac.phased_mtz` and the refined search model :ivar str local_CC: local correlation coefficient between phases at \ :py:attr:`~swamp.wrappers.wrefmac.wRefmac.phased_mtz` and the refined search model :example: >>> from swamp.wrappers import wRefmac >>> my_refmac = wRefmac('<workdir>', '<pdbin>', '<mtzin>') >>> my_refmac.run() >>> my_refmac.make_logfile() """ def __init__(self, workdir, pdbin, mtzin, make_hydr='N', weight_matrix="0.01", ncyc="100", ridg_dist_sigm="0.02", logger=None, phased_mtz=None, silent_start=False): super(wRefmac, self).__init__(logger=logger, workdir=workdir, silent_start=silent_start) self.rfactor = "NA" self.rfree = "NA" self.rfactor_delta = ("NA", "NA") self.rfree_delta = ("NA", "NA") self.bondlenght_delta = ("NA", "NA") self.bondangle_delta = ("NA", "NA") self.chirvol_delta = ("NA", "NA") self.local_CC = "NA" self.overall_CC = "NA" self.make_hydr = make_hydr self.ridg_dist_sigm = ridg_dist_sigm self.weight_matrix = weight_matrix self.ncyc = ncyc self.pdbin = pdbin self.mtzin = mtzin self.phased_mtz = phased_mtz @property def wrapper_name(self): """The name of this `~swamp.wrapper.wrapper.Wrapper` child class (refmac)""" return "refmac5" @property def cmd(self): """Command to be executed on the shell""" return [self.source, 'hklin', self.mtzin, 'hklout', self.mtzout, 'xyzin', self.pdbin, 'xyzout', self.pdbout] @property def summary_results(self): """String representation of a summary of the obtained figures of merit""" return "Refmac results: Rfactor - %s Rfree - %s Local CC - %s Overall CC - %s" \ "" % (self.rfactor, self.rfree, self.local_CC, self.overall_CC) @property def keywords(self): """Keywords tos be passed to refmac5 through the stdin""" return "RIDG DIST SIGM %s" % self.ridg_dist_sigm + os.linesep + "MAKE HYDR %s" % \ self.make_hydr + os.linesep + "WEIGHT MATRIX %s" % self.weight_matrix \ + os.linesep + "NCYC %s" % self.ncyc + os.linesep + "END"
[docs] def get_scores(self, logfile=None): """Parse the logfile and extract scores after refinement using a \ :py:obj:`~swamp.parsers.refmacparser.RefmacParser` instance :param None logfile: Not in use (default None) """ parser = RefmacParser(self.logcontents, logger=self.logger) parser.parse() # If there was an error if parser.error: self.error = True self.logger.warning('Previous detected while parsing refmac output!') return self.rfactor, self.rfree, self.rfactor_delta, self.rfree_delta, self.bondlenght_delta, \ self.bondangle_delta, self.chirvol_delta = parser.summary # If everything is ok so far, get the CC if self.phased_mtz is not None: self.local_CC, self.overall_CC = self.get_cc(os.path.join(self.workdir, "phenix"), self.phased_mtz, self.pdbout)
def _run(self): """Run :py:attr:`~swamp.wrappers.wrefmac.wRefmac.cmd` in the shell""" if not self.silent_start: self.logger.info(self.wrapper_header) self.logger.info('Running %s cycles of refinement' % self.ncyc) self.make_workdir() tmp_dir = os.getcwd() os.chdir(self.workdir) self.logger.debug(" ".join(self.cmd)) self.logcontents = cexec(self.cmd, stdin=self.keywords, permit_nonzero=True) self.get_scores() if not self.error and (not os.path.isfile(self.pdbout) or not os.path.isfile(self.mtzout)): self.logger.error("refmac output pdb/mtz missing!") self.error = True self.logger.info(self.summary_results) os.chdir(tmp_dir)