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