1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153
|
#!/usr/bin/env pythonsh
#
#
#
# $Header: /mnt/raid/services/cvs/python/packages/share1.5/AutoDockTools/Utilities24/prepare_gpf4.py,v 1.18 2011/06/14 17:25:51 rhuey Exp $
#
import string
import os.path
import glob
from MolKit import Read
from AutoDockTools.GridParameters import GridParameters, grid_parameter_list4
from AutoDockTools.GridParameters import GridParameter4FileMaker
from AutoDockTools.atomTypeTools import AutoDock4_AtomTyper
def usage():
print "Usage: prepare_gpf4.py -l pdbqt_file -r pdbqt_file "
print " -l ligand_filename"
print " -r receptor_filename"
print
print "Optional parameters:"
print " [-i reference_gpf_filename]"
print " [-o output_gpf_filename]"
print " [-x flexres_filename]"
print " [-p parameter=newvalue. For example: -p ligand_types='HD,Br,A,C,OA' or p npts='60,60,66' or gridcenter='2.5,6.5,-7.5']"
print " [-d directory of ligands to use to set types]"
print " [-y boolean to center grids on center of ligand]"
print " [-n boolean to NOT size_box_to_include_ligand]"
print " [-I increment npts in all 3 dimensions by this integer]"
print " [-v]"
print
print "Prepare a grid parameter file (GPF) for AutoDock4."
print
print " The GPF will by default be <receptor>.gpf. This"
print "may be overridden using the -o flag."
if __name__ == '__main__':
import getopt
import sys
try:
opt_list, args = getopt.getopt(sys.argv[1:], 'vl:r:i:x:o:p:d:ynI:')
except getopt.GetoptError, msg:
print 'prepare_gpf4.py: %s' % msg
usage()
sys.exit(2)
receptor_filename = ligand_filename = None
list_filename = gpf_filename = gpf_filename = None
output_gpf_filename = None
flexres_filename = None
directory = None
parameters = []
verbose = None
center_on_ligand = False
size_box_to_include_ligand = True
npts_increment = 0
ligand_types_defined = False
for o, a in opt_list:
if o in ('-v', '--v'):
verbose = 1
if o in ('-l', '--l'):
ligand_filename = a
if verbose: print 'ligand_filename=', ligand_filename
if o in ('-r', '--r'):
receptor_filename = a
if verbose: print 'receptor_filename=', receptor_filename
if o in ('-i', '--i'):
gpf_filename = a
if verbose: print 'reference_gpf_filename=', gpf_filename
if o in ('-x', '--x'):
flexres_filename = a
if verbose: print 'flexres_filename=', flexres_filename
if o in ('-o', '--o'):
output_gpf_filename = a
if verbose: print 'output_gpf_filename=', output_gpf_filename
if o in ('-p', '--p'):
parameters.append(a)
if a.split('=')[0]=="ligand_types": ligand_types_defined = True
if verbose: print 'parameters=', parameters
if o in ('-d', '--d'):
directory = a
if verbose: print 'directory=', directory
if o in ('-y', '--y'):
center_on_ligand = True
if verbose: print 'set center_on_ligand to ', center_on_ligand
if o in ('-n', '--n'):
size_box_to_include_ligand = False
if verbose: print 'set size_box_to_include_ligand to ', size_box_to_include_ligand
if o in ('-I', '--I'):
npts_increment = int(a)
if verbose: print 'set npts_increment to ', npts_increment
if o in ('-h', '--'):
usage()
sys.exit()
if (not receptor_filename) or (ligand_filename is None and directory is None and ligand_types_defined is False):
print "prepare_gpf4.py: ligand and receptor filenames"
print " must be specified."
usage()
sys.exit()
gpfm = GridParameter4FileMaker(size_box_to_include_ligand=size_box_to_include_ligand,verbose=verbose)
if gpf_filename is not None:
gpfm.read_reference(gpf_filename)
if ligand_filename is not None:
gpfm.set_ligand(ligand_filename)
gpfm.set_receptor(receptor_filename)
if directory is not None:
gpfm.set_types_from_directory(directory)
if flexres_filename is not None:
flexmol = Read(flexres_filename)[0]
flexres_types = flexmol.allAtoms.autodock_element
lig_types = gpfm.gpo['ligand_types']['value'].split()
all_types = lig_types
for t in flexres_types:
if t not in all_types:
all_types.append(t)
all_types_string = all_types[0]
if len(all_types)>1:
for t in all_types[1:]:
all_types_string = all_types_string + " " + t
gpfm.gpo['ligand_types']['value'] = all_types_string
for param_str in parameters:
if param_str.find("parameter_file")>-1:
parameters.append("custom_parameter_file=1")
break
for p in parameters:
key,newvalue = string.split(p, '=')
if key=='gridcenter' and newvalue.find(',')>-1:
newvalue = newvalue.split(',')
newvalue = string.join(newvalue)
kw = {key:newvalue}
apply(gpfm.set_grid_parameters, (), kw)
#gpfm.set_grid_parameters(spacing=1.0)
if center_on_ligand is True:
gpfm.gpo['gridcenterAuto']['value'] = 0
cenx,ceny,cenz = gpfm.ligand.getCenter()
gpfm.gpo['gridcenter']['value'] = "%.3f %.3f %.3f" %(cenx,ceny,cenz)
if npts_increment:
orig_npts = gpfm.gpo['npts']['value'] #[40,40,40]
if verbose: print "before increment npts=", orig_npts
for ind in range(3):
gpfm.gpo['npts']['value'][ind] += npts_increment
if verbose: print "after increment npts =", gpfm.gpo['npts']['value']
gpfm.write_gpf(output_gpf_filename)
#prepare_gpf4.py -l 1ebg_lig.pdbqt -r 1ebg_rec.pdbqt -p spacing=0.4 -p ligand_types="HD,Br,A,C,OA" -p npts="60,60,60" -i ref.gpf -o testing.gpf
|