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
if __name__ == '__main__':
os.chdir("/home/jmht/Documents/work/CC/phenix_get_cc_mtz_pdb/foo")
mtz = "3T97-cad.mtz"
native = "3T97_std.pdb"
mrPdb = "phaser_loc0_ALL_poly_ala_trunc_2.733913_rad_1_UNMOD.1.pdb"
mtzMap = generateMap( mtz, native )
print ccmtzOrigin( mtzMap, mrPdb )