Source code for ample.util.phenixer
"""
Created on 5 Mar 2014
@author: jmht
"""
import os
import shutil
from ample.util import ample_util
[docs]def generateMap(mtz, pdb, FP='FP', SIGFP='SIGFP', FREE='FREE', directory=None):
"""Generate a map from an mtz file and a pdb using reforigin"""
assert os.path.isfile(mtz) and os.path.isfile(pdb), "Cannot find files: {0} {1}".format(mtz, pdb)
if not directory:
directory = os.getcwd()
mapFile = ample_util.filename_append(filename=mtz, astr="map", directory=directory)
mapFile = os.path.abspath(mapFile)
mapPdb = ample_util.filename_append(filename=pdb, astr="map", directory=directory)
cmd = ["refmac5", "HKLIN", mtz, "HKLOUT", mapFile, "XYZIN", pdb, "XYZOUT", mapPdb]
# FIX FOR DIFFERENT FP etc.
stdin = """RIDG DIST SIGM 0.02
LABIN FP={0} SIGFP={1} FREE={2}
MAKE HYDR N
WEIGHT MATRIX 0.01
NCYC 0
END
""".format(
FP, SIGFP, FREE
)
logfile = os.path.join(directory, "generateMap.log")
ret = ample_util.run_command(cmd=cmd, logfile=logfile, dolog=True, stdin=stdin)
assert ret == 0, "generateMap refmac failed-check log: {0}".format(logfile)
return mapFile
[docs]def ccmtzOrigin(nativeMap, mrPdb):
"""Use the phenix get_cc_mtz_pdb script to determine the origin of a MR pdb using the supplied map"""
# resolve can only handle file names < 75 characters so we need to truncate
# We copy the file rather than symlink so that this works on windows and then delete afterwards
tempnam = None
if len(os.path.basename(mrPdb)) >= 75:
tempnam = os.tempnam()
# Need to add .pdb extension or it doesn't work
tempnam += ".pdb"
assert len(tempnam) < 75
shutil.copy(mrPdb, tempnam)
mrPdb = tempnam
# make sure we can find the program
get_cc_mtz_pdb = ample_util.find_exe('phenix.get_cc_mtz_pdb')
cmd = [get_cc_mtz_pdb, nativeMap, mrPdb]
ret = ample_util.run_command(cmd=cmd, logfile="get_cc_mtz_pdb.log", dolog=False)
assert ret == 0, "phenix.get_cc_mtz_pdb refmac failed!"
ofile = "temp_dir/resolve.offset"
with open(ofile) as o:
line = o.readline().strip()
t = line.split()
assert t[0] == "OFFSET"
origin = [float(t[1]) * -1, float(t[2]) * -1, float(t[3]) * -1]
# remove temp file if we created it
if tempnam:
os.unlink(tempnam)
return origin