diff calc_vina_box_params.py @ 0:761762031eee draft

planemo upload for repository https://github.com/bgruening/galaxytools/tree/master/chemicaltoolbox/autodock_vina commit a657ca32e9a470d710e483e9c3c2706726bec9a3
author bgruening
date Wed, 17 Apr 2019 09:11:01 -0400
parents
children 4f7c5cad3377
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/calc_vina_box_params.py	Wed Apr 17 09:11:01 2019 -0400
@@ -0,0 +1,69 @@
+import numpy as np
+from rdkit import Chem
+from rdkit.Chem import rdShapeHelpers
+import argparse
+
+
+def get_params(options):
+    # make sure we have a mol file by initiating rdkit mol object from input
+    mol = Chem.MolFromMolFile(options.ligand_path)
+    if not mol:
+        raise IOError
+
+    # get rdkit conformer and compute x,y,z of top and bottom corner of confounding cuboid
+    conf = mol.GetConformer()
+    params = rdShapeHelpers.ComputeConfBox(conf)
+
+    # change tuples to arrays
+    coords1 = np.array(params[0])
+    coords2 = np.array(params[1])
+
+    # get the centre of the box
+    center = np.mean((coords1, coords2), axis=0)
+
+    # calculate box dimensions
+    dims = np.abs(coords1 - coords2)
+
+    # optionally add buffers in each direction - expansion
+    box_dims = [dims[0] + options.bufx, dims[1] + options.bufy, dims[2] + options.bufz]
+
+    with open(options.output, 'w') as f:
+        f.write(
+            """
+size_x =  {}
+size_y =  {}
+size_z =  {}
+center_x =  {}
+center_y =  {}
+center_z =  {}
+num_modes = 9999
+energy_range = 9999
+exhaustiveness = {}
+cpu = 4
+seed = 1
+            """.format(box_dims[0], box_dims[1], box_dims[2], center[0], center[1], center[2], options.exhaustiveness)
+        )
+
+
+if __name__ == "__main__":
+    parser = argparse.ArgumentParser(description="""
+    This tool calculates a confounding box around an input ligand (mol file), and uses it to
+    generate the input parameters for an autodock vina job. The output file can be fed into
+    the autodock vina tool as an alternative to creating the parameter file manually. 
+    
+    Optionally, you can include a 'buffer' in each of the x,y and z directions (in angstroms),
+    which will be added to the confounding box in the appropriate direction.
+    """)
+    parser.add_argument('--ligand', dest='ligand_path', help='The input ligand (mol file)')
+    parser.add_argument('--config', dest='output', help='The output file containing calculated params (txt)')
+    parser.add_argument('--exh', dest='exhaustiveness', default=10, type=int, help='The number of poses '
+                                                                                     'to return from docking job')
+    parser.add_argument('--bufx', dest='bufx', default=0, type=float, help='the buffer in the x direction '
+                                                                           '(float - in angs.)')
+    parser.add_argument('--bufy', dest='bufy', default=0, type=float, help='the buffer in the y direction '
+                                                                           '(float - in angs.)')
+    parser.add_argument('--bufz', dest='bufz', default=0, type=float, help='the buffer in the z direction '
+                                                                           '(float - in angs.)')
+
+    options = parser.parse_args()
+    get_params(options)