Diff of /bin/oddt_debug [000000] .. [3b722e]

Switch to side-by-side view

--- a
+++ b/bin/oddt_debug
@@ -0,0 +1,102 @@
+#!/usr/bin/env python
+# -*- coding: utf-8 -*-
+from __future__ import print_function
+import sys
+import argparse
+import csv
+import gzip
+
+import six
+
+import oddt
+
+# arguments
+parser = argparse.ArgumentParser(description='Open Drug Discovery (ODDT) command line tools')
+parser.add_argument('--toolkit', dest='toolkit', choices=['ob', 'rdk'], default='ob', help='Choose which toolkit should be used for calculations, either "ob" (OpenBabel) or "rdkit" (RDKit) (default: ob)')
+parser.add_argument('--version', action='version', version='%(prog)s ' + oddt.__version__)
+
+# in/out files and formats
+parser.add_argument('in_file', nargs='+', help='Input files of formats supported by toolkit.')
+parser.add_argument('-i', dest='in_format', help='Input file(s) format')
+parser.add_argument('-O', '--output', dest='out_file', help='Output file')
+
+# descriptors
+group = parser.add_argument_group('Generate CSV from descriptors, scoring functions and docking software')
+group.add_argument('--descriptors',
+                   choices=['autodock_vina',
+                            'oddt_vina',
+                            'nnscore',
+                            'binana',
+                            'rfscore_v1',
+                            'rfscore_v2',
+                            'rfscore_v3',
+                            ],
+                   help='Choose docking software to be used',
+                   )
+group.add_argument('--receptor', help='Protein file')
+
+args = parser.parse_args()
+
+
+# Switch toolkits
+if 'toolkit' in args:
+    if args.toolkit == 'ob':
+        from oddt.toolkits import ob
+        oddt.toolkit = ob
+    elif args.toolkit == 'rdk':
+        from oddt.toolkits import rdk
+        oddt.toolkit = rdk
+
+# load protein once
+if args.receptor:
+    extension = args.receptor.split('.')[-1]
+    receptor = six.next(oddt.toolkit.readfile(extension, args.receptor))
+    receptor.protein = True
+
+# Load descriptor genearator
+if args.descriptors.startswith('rfscore'):
+    from oddt.scoring.functions import rfscore
+    descriptor_generator = rfscore(protein=receptor, version=int(args.descriptors.split('_')[1][1:])).descriptor_generator
+elif args.descriptors == 'nnscore':
+    from oddt.scoring.functions import nnscore
+    descriptor_generator = nnscore(protein=receptor).descriptor_generator
+elif args.descriptors == 'binana':
+    from oddt.scoring.descriptors.binana import binana_descriptor
+    descriptor_generator = binana_descriptor(protein=receptor)
+elif args.descriptors == 'autodock_vina':
+    from oddt.scoring.descriptors import autodock_vina_descriptor
+    descriptor_generator = autodock_vina_descriptor(protein=receptor)
+elif args.descriptors == 'oddt_vina':
+    from oddt.scoring.descriptors import oddt_vina_descriptor
+    descriptor_generator = oddt_vina_descriptor(protein=receptor)
+
+assert descriptor_generator is not None, 'No descriptor generator has been chosen.'
+
+if args.out_file:
+    if args.out_file.split('.')[-1] == 'gz':
+        out_file = gzip.open(args.out_file, 'wb+')
+    else:
+        out_file = open(args.out_file, 'wb+')
+else:
+    out_file = sys.stdout
+
+# Print header if possible
+if hasattr(descriptor_generator, 'titles'):
+    print(','.join(descriptor_generator.titles), file=out_file)
+
+# Read files
+for in_file in args.in_file:
+    if args.in_format:
+        fmt = args.out_format
+    else:  # autodiscover
+        tmp = in_file.split('.')
+        if tmp[-1] == 'gz':
+            fmt = tmp[-2]
+        else:
+            fmt = tmp[-1]
+    for mol in oddt.toolkit.readfile(fmt, in_file):
+        if mol:
+            print(','.join(map(str, descriptor_generator.build([mol]).tolist()[0])), file=out_file)
+
+if args.out_file:
+    out_file.close()