Source code for ample.util.scwrl_util
"""
@author: jmht
"""
import glob
import os
import logging
from ample.util import ample_util, pdb_edit
logger = logging.getLogger(__name__)
[docs]class Scwrl(object):
def __init__(self, scwrl_exe=None, workdir=None):
self.workdir = workdir
if self.workdir is None:
self.workdir = os.getcwd()
if not ample_util.is_exe(scwrl_exe):
raise RuntimeError("scwrl_exe {0} cannot be found.".format(scwrl_exe))
self.scwrl_exe = scwrl_exe
[docs] def add_sidechains(self, pdbin=None, pdbout=None, sequence=None, hydrogens=False, strip_oxt=False):
"""Add the specified sidechains to the pdb"""
_pdbout = pdbout
if strip_oxt:
_pdbout = pdbout + "_OXT"
cmd = [self.scwrl_exe, "-i", pdbin, "-o", _pdbout]
# Not needed by default
if sequence is not None:
sequenceFile = os.path.join(self.workdir, "sequence.file")
with open(sequenceFile, 'w') as w:
w.write(sequence + os.linesep)
cmd += ["-s", sequenceFile]
# Don't output hydrogens
if not hydrogens:
cmd += ['-h']
logfile = os.path.abspath("scwrl.log")
retcode = ample_util.run_command(cmd, logfile=logfile)
if retcode != 0:
raise RuntimeError("Error running Scwrl - please check the logfile: {0}".format(logfile))
else:
os.unlink(logfile)
if strip_oxt:
# Remove all OXT atoms
pdb_edit.strip(_pdbout, pdbout, atom_types=['OXT'])
os.unlink(_pdbout)
return os.path.abspath(pdbout)
[docs] def process_directory(self, in_dir, out_dir, strip_oxt=False, prefix="scwrl"):
logger.info('Adding sidechains with SCWRL to models in directory: {0}'.format(in_dir))
self.process_models(glob.glob(os.path.join(in_dir, '*.pdb')), out_dir, strip_oxt=strip_oxt, prefix=prefix)
return
[docs] def process_models(self, models, out_dir, strip_oxt=False, prefix="scwrl"):
logger.info('Adding sidechains with SCWRL to models')
out_pdbs = []
for i, pdb in enumerate(models):
out_pdbs.append(
self.add_sidechains(
pdbin=pdb, pdbout=ample_util.filename_append(pdb, prefix, directory=out_dir), strip_oxt=strip_oxt
)
)
logger.info('Processed {0} models with SCWRL into directory: {1}'.format(i + 1, out_dir))
return out_pdbs