# HG changeset patch
# User bgruening
# Date 1585315133 14400
# Node ID de29b4f35536e46c4f98c4f6b9c4e515ae5e7527
"planemo upload for repository https://github.com/bgruening/galaxytools/tree/master/chemicaltoolbox/transfs commit d9a9e2f0e12fe9d2c37f632d99f2164df577b4af"
diff -r 000000000000 -r de29b4f35536 README.txt
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/README.txt Fri Mar 27 09:18:53 2020 -0400
@@ -0,0 +1,27 @@
+THIS TOOL WILL NOT RUN AT PRESENT.
+
+The tool is 'work in progress' and needs at least the following sorting out:
+
+1. Execution environment
+
+Current the xchem_deep_score.py code can be run in the informaticsmatters/deep-app-ubuntu-1604:latest
+container (see instructions at the top of the python file for doing so). The Galaxy execution environment needs
+to define to run as this docker container.
+Alternatively a conda environment could potentially be created but the dependencies are very complex and
+some components need to be built from source.
+Details for the dependencies are mostly described in the GitHub repo for the docker image:
+https://github.com/InformaticsMatters/dls-deep/tree/ubuntu
+
+2. GPU availability
+
+The code must run in an environment with a GPU and with the CUDA drivers.
+The docker image mentioned above has everything that is needed and will run on a GPU enabled environment
+(a special version of Docker on the host machine is needed that supports GPUs).
+
+Only the predictions need a GPU. The prior and latter steps run on CPU. Without a GPU you can specify the --mock
+option which uses random numbers for the predicted scores.
+
+3. Associated Python scripts.
+
+The docker image contains additional python scripts (primarily /train/fragalysis_test_files/predict.py)
+that are needed. If not running in a container these will need to be made available.
\ No newline at end of file
diff -r 000000000000 -r de29b4f35536 server/transfs.py
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/server/transfs.py Fri Mar 27 09:18:53 2020 -0400
@@ -0,0 +1,322 @@
+# Create dir containing ligands.sdf and protein.pdb
+# Enter docker container like this:
+# docker run -it --rm --gpus all -v $PWD:/root/train/fragalysis_test_files/work:Z informaticsmatters/deep-app-ubuntu-1604:latest bash
+#
+# Now inside the container run like this:
+# mkdir /tmp/work
+# rm -rf /tmp/work/* && python3 work/transfs.py -i work/test-data/ligands.sdf -r work/test-data/receptor.pdb -d 2 -w /tmp/work
+#
+# If testing with no GPU you can use the --mock option to generate random scores
+#
+# Start container for testing like this:
+# docker run -it --rm -v $PWD:$PWD:Z -w $PWD informaticsmatters/deep-app-ubuntu-1604:latest bash
+# Inside container test like this:
+# mkdir /tmp/work
+# cd chemicaltoolbox/xchem-deep
+# rm -rf /tmp/work/* && python3 transfs.py -i test-data/ligands.sdf -r test-data/receptor.pdb -d 2 -w /tmp/work --mock
+#
+
+import argparse, os, sys, math
+import subprocess
+import random
+from openbabel import pybel
+
+types_file_name = 'inputs.types'
+types_file_name = 'inputs.types'
+predict_file_name = 'predictions.txt'
+work_dir = '.'
+paths = None
+inputs_protein = []
+inputs_ligands = []
+
+
+def log(*args, **kwargs):
+ """Log output to STDERR
+ """
+ print(*args, file=sys.stderr, ** kwargs)
+
+def write_raw_inputs(receptor_pdb, ligands_sdf, distance):
+ """
+ Analyses the PDB file for waters that clash with each ligand in the SDF and writes out:
+ 1. a PDB file named like receptor-123-543.pdb where the numeric parts are the waters that have been omitted
+ 2. a corresponding directory named like receptor-123-543
+ 3. an SDF named like receptor-123-543/ligands.sdf containing those ligands that correspond to that receptor.
+ :param receptor_pdb: A PDB file without the ligand but with the crystallographic waters
+ :param ligands_sdf: A SDF with the docked poses
+ :param distance: The distance to consider when removing waters. Only heavy atoms in the ligand are considered.
+ :return:
+ """
+
+ global work_dir
+ global inputs_protein
+ global inputs_ligands
+ global paths
+
+
+ log("Writing data to", work_dir)
+ if not os.path.isdir(work_dir):
+ os.mkdir(work_dir)
+
+ receptor_file = os.path.basename(receptor_pdb)
+
+ sdf_writers = {}
+ paths = []
+
+ # read the receptor once as we'll need to process it many times
+ with open(receptor_pdb, 'r') as f:
+ lines = f.readlines()
+
+ count = 0
+ for mol in pybel.readfile("sdf", ligands_sdf):
+ count += 1
+ if count % 50000 == 0:
+ log('Processed', count)
+
+ try:
+ # print("Processing mol", mol.title)
+
+ clone = pybel.Molecule(mol)
+ clone.removeh()
+
+ coords = []
+ for atom in clone.atoms:
+ coords.append(atom.coords)
+
+ watnumcode = ''
+
+ # getting receptor without waters that will clash with ligand
+ new_receptor_pdb = []
+ for line in lines:
+ if line[17:20] == 'HOH':
+ x, y, z = float(line[30:39]), float(line[39:46]), float(line[46:55])
+ distances = []
+ for i in coords:
+ distances.append(math.sqrt((x-i[0])**2 + (y-i[1])**2 + (z-i[2])**2)) # calculates distance based on cartesian coordinates
+ if min(distances) > distance: # if all distances are larger than 2.0A, then molecule makes it to new file
+ new_receptor_pdb.append(line)
+ else:
+ watnum = line[23:28].strip()
+ # print("Skipped water " + watnum)
+ watnumcode += '-' + watnum
+ if line[17:20] != 'LIG' and line[17:20] != 'HOH': # ligand lines are also removed
+ new_receptor_pdb.append(line)
+
+
+ name = receptor_file[0:-4] + watnumcode
+ # print('CODE:', name)
+ mol.data['TransFSReceptor'] = name
+
+
+ if watnumcode not in sdf_writers:
+ # we've not yet encountered this combination of waters so need to write the PDB file
+
+ dir = os.path.sep.join([work_dir, name])
+ log('WRITING to :', dir)
+
+ os.mkdir(dir)
+ paths.append(dir)
+
+ sdf_writers[watnumcode] = pybel.Outputfile("sdf", os.path.sep.join([dir, 'ligands.sdf']))
+
+ # writing into new pdb file
+ receptor_writer = open(os.path.sep.join([work_dir, name + '.pdb']), "w+")
+ for line in new_receptor_pdb:
+ receptor_writer.write(str(line))
+ receptor_writer.close()
+
+ # write the molecule to the corresponding SDF file
+ sdf_out = sdf_writers[watnumcode]
+ sdf_out.write(mol)
+
+ except Exception as e:
+ log('Failed to handle molecule: '+ str(e))
+ continue
+
+ for writer in sdf_writers.values():
+ writer.close()
+
+ log('Wrote', count, 'molecules and', len(sdf_writers), 'proteins')
+
+def write_inputs(protein_file, ligands_file, distance):
+ """
+ Runs gninatyper on the proteins and ligands and generates the input.types file that will tell the predictor
+ what ligands correspond to what proteins.
+
+ :param protein_file:
+ :param ligands_file:
+ :param distance:
+ :return:
+ """
+
+ global types_file_name
+ global work_dir
+ global inputs_protein
+ global inputs_ligands
+ global prepared_ligands
+
+ write_raw_inputs(protein_file, ligands_file, distance)
+
+ types_path = os.path.sep.join([work_dir, types_file_name])
+ log("Writing types to", types_path)
+ with open(types_path, 'w') as types_file:
+
+ for path in paths:
+
+ log("Gninatyping ligands in", path)
+
+ ligands_dir = os.path.sep.join([path, 'ligands'])
+ os.mkdir(ligands_dir)
+
+ cmd1 = ['gninatyper', os.path.sep.join([path, 'ligands.sdf']), os.path.sep.join([ligands_dir, 'ligand'])]
+ log('CMD:', cmd1)
+ exit_code = subprocess.call(cmd1)
+ log("Status:", exit_code)
+ if exit_code:
+ raise Exception("Failed to write ligands")
+ ligand_gninatypes = os.listdir(os.path.sep.join([path, 'ligands']))
+
+ log("Gninatyping proteins in", path)
+
+ proteins_dir = os.path.sep.join([path, 'proteins'])
+ os.mkdir(proteins_dir)
+
+ cmd2 = ['gninatyper', path + '.pdb', os.path.sep.join([proteins_dir, 'protein'])]
+ log('CMD:', cmd2)
+ exit_code = subprocess.call(cmd2)
+ log("Status:", exit_code)
+ if exit_code:
+ raise Exception("Failed to write proteins")
+ protein_gninatypes = os.listdir(os.path.sep.join([path, 'proteins']))
+
+ num_proteins = 0
+ num_ligands = 0
+
+ for protein in protein_gninatypes:
+ num_proteins += 1
+ num_ligands = 0
+ inputs_protein.append(protein)
+ inputs_protein.append(os.path.sep.join([path, 'proteins', protein]))
+ for ligand in ligand_gninatypes:
+ num_ligands += 1
+ log("Handling", protein, ligand)
+ inputs_ligands.append(os.path.sep.join([path, 'ligands', ligand]))
+ line = "0 {0}{3}proteins{3}{1} {0}{3}ligands{3}{2}\n".format(path, protein, ligand, os.path.sep)
+ types_file.write(line)
+
+ return num_proteins, num_ligands
+
+
+def generate_predictions_filename(work_dir, predict_file_name):
+ return "{0}{1}{2}".format(work_dir, os.path.sep, predict_file_name)
+
+
+def run_predictions():
+ global types_file_name
+ global predict_file_name
+ global work_dir
+ # python3 scripts/predict.py -m resources/dense.prototxt -w resources/weights.caffemodel -i work_0/test_set.types >> work_0/caffe_output/predictions.txt
+ cmd1 = ['python3', '/train/fragalysis_test_files/scripts/predict.py',
+ '-m', '/train/fragalysis_test_files/resources/dense.prototxt',
+ '-w', '/train/fragalysis_test_files/resources/weights.caffemodel',
+ '-i', os.path.sep.join([work_dir, types_file_name]),
+ '-o', os.path.sep.join([work_dir, predict_file_name])]
+ log("CMD:", cmd1)
+ subprocess.call(cmd1)
+
+
+def mock_predictions():
+ global work_dir
+ global predict_file_name
+
+ log("WARNING: generating mock results instead of running on GPU")
+ outfile = generate_predictions_filename(work_dir, predict_file_name)
+ count = 0
+ with open(outfile, 'w') as predictions:
+ for path in paths:
+ log("Reading", path)
+ protein_gninatypes = os.listdir(os.path.sep.join([path, 'proteins']))
+ ligand_gninatypes = os.listdir(os.path.sep.join([path, 'ligands']))
+ for protein in protein_gninatypes:
+ for ligand in ligand_gninatypes:
+ count += 1
+ score = random.random()
+ line = "{0} | 0 {1}{4}proteins{4}{2} {1}{4}ligands{4}{3}\n".format(score, path, protein, ligand,
+ os.path.sep)
+ # log("Writing", line)
+ predictions.write(line)
+
+ log('Wrote', count, 'mock predictions')
+
+
+def read_predictions():
+ global predict_file_name
+ global work_dir
+ scores = {}
+ with open("{0}{1}{2}".format(work_dir, os.path.sep, predict_file_name), 'r') as input:
+ for line in input:
+ # log(line)
+ tokens = line.split()
+ if len(tokens) == 5 and tokens[1] == '|':
+ # log(len(tokens), tokens[0], tokens[3], tokens[4])
+ record_no = inputs_ligands.index(tokens[4])
+ if record_no is not None:
+ # log(record_no, tokens[0])
+ scores[record_no] = tokens[0]
+ log("Found", len(scores), "scores")
+ return scores
+
+
+def patch_scores_sdf(outfile, scores):
+
+ counter = 0
+ sdf_path = "{0}{1}{2}".format(work_dir, os.path.sep, outfile)
+ log("Writing results to {0}".format(sdf_path))
+ sdf_file = pybel.Outputfile("sdf", sdf_path)
+
+ for path in paths:
+ for mol in pybel.readfile("sdf", os.path.sep.join([path, 'ligands.sdf'])):
+ if counter in scores:
+ score = scores[counter]
+ # og("Score for record {0} is {1}".format(counter, score))
+ mol.data['TransFSScore'] = score
+ sdf_file.write(mol)
+ else:
+ log("No score found for record", counter)
+ counter += 1
+ sdf_file.close()
+
+
+def execute(ligands_sdf, protein, outfile, distance, mock=False):
+
+ write_inputs(protein, ligands_sdf, distance)
+ if mock:
+ mock_predictions()
+ else:
+ run_predictions()
+ scores = read_predictions()
+ patch_scores_sdf(outfile, scores)
+
+
+def main():
+ global work_dir
+
+ parser = argparse.ArgumentParser(description='XChem deep - pose scoring')
+
+ parser.add_argument('-i', '--input', help="SDF containing the poses to score)")
+ parser.add_argument('-r', '--receptor', help="Receptor file for scoring (PDB format)")
+ parser.add_argument('-d', '--distance', type=float, default=2.0, help="Cuttoff for removing waters")
+ parser.add_argument('-o', '--outfile', default='output.sdf', help="File name for results")
+ parser.add_argument('-w', '--work-dir', default=".", help="Working directory")
+ parser.add_argument('--mock', action='store_true', help='Generate mock scores rather than run on GPU')
+
+ args = parser.parse_args()
+ log("XChem deep args: ", args)
+
+ work_dir = args.work_dir
+
+ execute(args.input, args.receptor, args.outfile, args.distance, mock=args.mock)
+
+
+if __name__ == "__main__":
+ main()
+
diff -r 000000000000 -r de29b4f35536 server/transfs.xml
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/server/transfs.xml Fri Mar 27 09:18:53 2020 -0400
@@ -0,0 +1,108 @@
+
+ using deep learning
+
+
+
+
+
+ informaticsmatters/deep-app-ubuntu-1604:latest
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff -r 000000000000 -r de29b4f35536 test-data/ligands.sdf
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/test-data/ligands.sdf Fri Mar 27 09:18:53 2020 -0400
@@ -0,0 +1,1510 @@
+MolPort-002-851-943
+ rDOCK(R) 3D
+libRbt.so/2013.1/901 2013/11/27
+ 19 20 0 0 0 0 0 0 0 0999 V2000
+ 28.6216 -44.1866 73.3638 C 0 0 0 0 0 0
+ 30.1353 -44.0328 73.4362 C 0 0 0 0 0 0
+ 30.7597 -45.2722 73.8147 O 0 0 0 0 0 0
+ 32.1148 -45.2860 73.9853 C 0 0 0 0 0 0
+ 32.8758 -44.2937 74.5886 C 0 0 0 0 0 0
+ 34.2640 -44.4447 74.6917 C 0 0 0 0 0 0
+ 34.9396 -43.4382 75.2691 F 0 0 0 0 0 0
+ 34.9421 -45.5768 74.2048 C 0 0 0 0 0 0
+ 34.1425 -46.5638 73.5990 C 0 0 0 0 0 0
+ 32.7560 -46.4133 73.4768 C 0 0 0 0 0 0
+ 36.4169 -45.7333 74.2945 C 0 0 0 0 0 0
+ 37.3030 -44.7299 73.8615 C 0 0 0 0 0 0
+ 38.6916 -44.8971 73.9261 C 0 0 0 0 0 0
+ 39.2314 -46.0682 74.4460 C 0 0 0 0 0 0
+ 38.3836 -47.0720 74.8981 C 0 0 0 0 0 0
+ 36.9964 -46.9076 74.8159 C 0 0 0 0 0 0
+ 30.6590 -43.6789 72.0407 C 0 0 0 0 0 0
+ 31.1658 -44.4817 71.2685 O 0 0 0 0 0 0
+ 30.5050 -42.3687 71.7235 O 0 0 0 0 0 0
+ 1 2 1 0 0 0
+ 2 3 1 0 0 0
+ 2 17 1 0 0 0
+ 3 4 1 0 0 0
+ 4 5 2 0 0 0
+ 4 10 1 0 0 0
+ 5 6 1 0 0 0
+ 6 7 1 0 0 0
+ 6 8 2 0 0 0
+ 8 9 1 0 0 0
+ 8 11 1 0 0 0
+ 9 10 2 0 0 0
+ 11 12 2 0 0 0
+ 11 16 1 0 0 0
+ 12 13 1 0 0 0
+ 13 14 2 0 0 0
+ 14 15 1 0 0 0
+ 15 16 2 0 0 0
+ 17 18 2 0 0 0
+ 17 19 1 0 0 0
+M END
+>
+-177.01127901,-99.92003744,40.28785274,-50.56487888,33.82101420,-44.94803558
+73.75196667,2.86183962,-0.16145766,-0.25378100
+
+>
+MolPort-002-851-943
+
+>
+0
+
+>
+/home/timbo/github/im/docking-validation/targets/nudt7/expts/vscreening/NUDT7A-x0129/work/94/3883032ea0e243c22b1a7b7b149ac4
+
+>
+rbdock ($Id: //depot/dev/client3/rdock/2013.1/src/exe/rbdock.cxx#4 $)
+
+>
+libRbt.so (2013.1, Build901 2013/11/27)
+
+>
+/rDock_2013.1/data/scripts/dock.prm
+
+>
+docking.prm
+
+>
+-6.92904
+
+>
+-6.0525
+
+>
+1
+
+>
+0
+
+>
+0
+
+>
+4
+
+>
+-15.4525
+
+>
+-0.318553
+
+>
+-0.876534
+
+>
+2.31595
+
+>
+4.86231
+
+>
+0
+
+>
+0
+
+>
+0
+
+>
+0
+
+>
+-2.03451
+
+>
+0.564556
+
+>
+-0.0461334
+
+>
+0
+
+>
+0
+
+>
+0
+
+>
+0
+
+>
+0
+
+>
+0
+
+>
+0
+
+>
+19
+
+>
+-0.364686
+
+$$$$
+MolPort-002-851-943
+ rDOCK(R) 3D
+libRbt.so/2013.1/901 2013/11/27
+ 19 20 0 0 0 0 0 0 0 0999 V2000
+ 28.7887 -43.9849 73.4350 C 0 0 0 0 0 0
+ 30.3065 -43.8574 73.4561 C 0 0 0 0 0 0
+ 30.9156 -45.0596 73.9590 O 0 0 0 0 0 0
+ 32.2669 -45.0638 74.1571 C 0 0 0 0 0 0
+ 32.9869 -44.1547 74.9208 C 0 0 0 0 0 0
+ 34.3766 -44.2833 75.0323 C 0 0 0 0 0 0
+ 35.0112 -43.3585 75.7706 F 0 0 0 0 0 0
+ 35.0968 -45.3106 74.3963 C 0 0 0 0 0 0
+ 34.3382 -46.2150 73.6302 C 0 0 0 0 0 0
+ 32.9505 -46.0840 73.4996 C 0 0 0 0 0 0
+ 36.5736 -45.4404 74.4959 C 0 0 0 0 0 0
+ 37.4235 -44.3192 74.5083 C 0 0 0 0 0 0
+ 38.8156 -44.4525 74.5763 C 0 0 0 0 0 0
+ 39.3943 -45.7144 74.6543 C 0 0 0 0 0 0
+ 38.5819 -46.8416 74.6613 C 0 0 0 0 0 0
+ 37.1920 -46.7044 74.5761 C 0 0 0 0 0 0
+ 30.8027 -43.6753 72.0182 C 0 0 0 0 0 0
+ 31.0161 -42.5908 71.4928 O 0 0 0 0 0 0
+ 30.9952 -44.8471 71.3619 O 0 0 0 0 0 0
+ 1 2 1 0 0 0
+ 2 3 1 0 0 0
+ 2 17 1 0 0 0
+ 3 4 1 0 0 0
+ 4 5 2 0 0 0
+ 4 10 1 0 0 0
+ 5 6 1 0 0 0
+ 6 7 1 0 0 0
+ 6 8 2 0 0 0
+ 8 9 1 0 0 0
+ 8 11 1 0 0 0
+ 9 10 2 0 0 0
+ 11 12 2 0 0 0
+ 11 16 1 0 0 0
+ 12 13 1 0 0 0
+ 13 14 2 0 0 0
+ 14 15 1 0 0 0
+ 15 16 2 0 0 0
+ 17 18 2 0 0 0
+ 17 19 1 0 0 0
+M END
+>
+-174.10824009,94.50209663,54.36816891,-37.46765750,33.97394463,-44.77747639
+73.90621717,-3.11899718,0.31099324,-2.57631071
+
+>
+MolPort-002-851-943
+
+>
+0
+
+>
+/home/timbo/github/im/docking-validation/targets/nudt7/expts/vscreening/NUDT7A-x0129/work/94/3883032ea0e243c22b1a7b7b149ac4
+
+>
+rbdock ($Id: //depot/dev/client3/rdock/2013.1/src/exe/rbdock.cxx#4 $)
+
+>
+libRbt.so (2013.1, Build901 2013/11/27)
+
+>
+/rDock_2013.1/data/scripts/dock.prm
+
+>
+docking.prm
+
+>
+-6.58301
+
+>
+-5.95581
+
+>
+1
+
+>
+0
+
+>
+0
+
+>
+4
+
+>
+-15.3558
+
+>
+-0.313463
+
+>
+-0.627208
+
+>
+2.50393
+
+>
+4.86231
+
+>
+0
+
+>
+0
+
+>
+0
+
+>
+0
+
+>
+-1.87917
+
+>
+0.564556
+
+>
+-0.033011
+
+>
+0
+
+>
+0
+
+>
+0
+
+>
+0
+
+>
+0
+
+>
+0
+
+>
+0
+
+>
+19
+
+>
+-0.346474
+
+$$$$
+MolPort-002-851-943
+ rDOCK(R) 3D
+libRbt.so/2013.1/901 2013/11/27
+ 19 20 0 0 0 0 0 0 0 0999 V2000
+ 28.0405 -44.9575 72.4733 C 0 0 0 0 0 0
+ 29.3571 -44.5785 73.1391 C 0 0 0 0 0 0
+ 30.3925 -45.5180 72.8010 O 0 0 0 0 0 0
+ 31.6159 -45.3691 73.3897 C 0 0 0 0 0 0
+ 31.9384 -44.4667 74.3944 C 0 0 0 0 0 0
+ 33.2422 -44.4255 74.9032 C 0 0 0 0 0 0
+ 33.4887 -43.5158 75.8596 F 0 0 0 0 0 0
+ 34.2650 -45.2718 74.4382 C 0 0 0 0 0 0
+ 33.9058 -46.1744 73.4200 C 0 0 0 0 0 0
+ 32.6090 -46.2108 72.8939 C 0 0 0 0 0 0
+ 35.6546 -45.2192 74.9613 C 0 0 0 0 0 0
+ 36.1111 -44.1589 75.7657 C 0 0 0 0 0 0
+ 37.4300 -44.1050 76.2325 C 0 0 0 0 0 0
+ 38.3238 -45.1240 75.9223 C 0 0 0 0 0 0
+ 37.8997 -46.1941 75.1439 C 0 0 0 0 0 0
+ 36.5854 -46.2354 74.6654 C 0 0 0 0 0 0
+ 29.8020 -43.2141 72.6031 C 0 0 0 0 0 0
+ 30.5354 -43.0571 71.6360 O 0 0 0 0 0 0
+ 29.2977 -42.1685 73.3054 O 0 0 0 0 0 0
+ 1 2 1 0 0 0
+ 2 3 1 0 0 0
+ 2 17 1 0 0 0
+ 3 4 1 0 0 0
+ 4 5 2 0 0 0
+ 4 10 1 0 0 0
+ 5 6 1 0 0 0
+ 6 7 1 0 0 0
+ 6 8 2 0 0 0
+ 8 9 1 0 0 0
+ 8 11 1 0 0 0
+ 9 10 2 0 0 0
+ 11 12 2 0 0 0
+ 11 16 1 0 0 0
+ 12 13 1 0 0 0
+ 13 14 2 0 0 0
+ 14 15 1 0 0 0
+ 15 16 2 0 0 0
+ 17 18 2 0 0 0
+ 17 19 1 0 0 0
+M END
+>
+-175.77249050,-91.74829576,6.64128786,-12.52815848,33.04894497,-44.66945860
+74.07872956,-3.10967748,-0.38404953,0.48082194
+
+>
+MolPort-002-851-943
+
+>
+0
+
+>
+/home/timbo/github/im/docking-validation/targets/nudt7/expts/vscreening/NUDT7A-x0129/work/94/3883032ea0e243c22b1a7b7b149ac4
+
+>
+rbdock ($Id: //depot/dev/client3/rdock/2013.1/src/exe/rbdock.cxx#4 $)
+
+>
+libRbt.so (2013.1, Build901 2013/11/27)
+
+>
+/rDock_2013.1/data/scripts/dock.prm
+
+>
+docking.prm
+
+>
+-6.42381
+
+>
+-4.71674
+
+>
+1
+
+>
+0
+
+>
+0
+
+>
+4
+
+>
+-14.1167
+
+>
+-0.248249
+
+>
+-1.70708
+
+>
+-2.25962
+
+>
+4.86231
+
+>
+0
+
+>
+0
+
+>
+0
+
+>
+0
+
+>
+-0.577266
+
+>
+0.564556
+
+>
+-0.0898461
+
+>
+0
+
+>
+0
+
+>
+0
+
+>
+0
+
+>
+0
+
+>
+0
+
+>
+0
+
+>
+19
+
+>
+-0.338095
+
+$$$$
+MolPort-002-851-943
+ rDOCK(R) 3D
+libRbt.so/2013.1/901 2013/11/27
+ 19 20 0 0 0 0 0 0 0 0999 V2000
+ 29.0981 -44.6564 72.9248 C 0 0 0 0 0 0
+ 30.5636 -44.3269 73.1780 C 0 0 0 0 0 0
+ 31.2431 -45.4412 73.7829 O 0 0 0 0 0 0
+ 32.5689 -45.3036 74.0808 C 0 0 0 0 0 0
+ 33.1357 -44.3011 74.8563 C 0 0 0 0 0 0
+ 34.5184 -44.2864 75.0761 C 0 0 0 0 0 0
+ 35.0010 -43.2776 75.8193 F 0 0 0 0 0 0
+ 35.3820 -45.2585 74.5398 C 0 0 0 0 0 0
+ 34.7766 -46.2605 73.7587 C 0 0 0 0 0 0
+ 33.3972 -46.2731 73.5200 C 0 0 0 0 0 0
+ 36.8521 -45.2368 74.7542 C 0 0 0 0 0 0
+ 37.6777 -46.3143 74.3841 C 0 0 0 0 0 0
+ 39.0587 -46.2954 74.6138 C 0 0 0 0 0 0
+ 39.6543 -45.1859 75.2035 C 0 0 0 0 0 0
+ 38.8693 -44.0980 75.5655 C 0 0 0 0 0 0
+ 37.4871 -44.1282 75.3494 C 0 0 0 0 0 0
+ 31.2469 -44.0668 71.8318 C 0 0 0 0 0 0
+ 31.8207 -44.9223 71.1711 O 0 0 0 0 0 0
+ 31.1554 -42.7768 71.4213 O 0 0 0 0 0 0
+ 1 2 1 0 0 0
+ 2 3 1 0 0 0
+ 2 17 1 0 0 0
+ 3 4 1 0 0 0
+ 4 5 2 0 0 0
+ 4 10 1 0 0 0
+ 5 6 1 0 0 0
+ 6 7 1 0 0 0
+ 6 8 2 0 0 0
+ 8 9 1 0 0 0
+ 8 11 1 0 0 0
+ 9 10 2 0 0 0
+ 11 12 2 0 0 0
+ 11 16 1 0 0 0
+ 12 13 1 0 0 0
+ 13 14 2 0 0 0
+ 14 15 1 0 0 0
+ 15 16 2 0 0 0
+ 17 18 2 0 0 0
+ 17 19 1 0 0 0
+M END
+>
+-179.69416828,-92.16496631,54.72913493,170.35118135,34.27026756,-44.80945713
+73.95936662,3.00226334,0.31621452,-2.44914822
+
+>
+MolPort-002-851-943
+
+>
+0
+
+>
+/home/timbo/github/im/docking-validation/targets/nudt7/expts/vscreening/NUDT7A-x0129/work/94/3883032ea0e243c22b1a7b7b149ac4
+
+>
+rbdock ($Id: //depot/dev/client3/rdock/2013.1/src/exe/rbdock.cxx#4 $)
+
+>
+libRbt.so (2013.1, Build901 2013/11/27)
+
+>
+/rDock_2013.1/data/scripts/dock.prm
+
+>
+docking.prm
+
+>
+-6.40816
+
+>
+-5.57956
+
+>
+1
+
+>
+0
+
+>
+0
+
+>
+4
+
+>
+-14.9796
+
+>
+-0.293661
+
+>
+-0.828596
+
+>
+0.718818
+
+>
+4.86231
+
+>
+0
+
+>
+0
+
+>
+0
+
+>
+0
+
+>
+-1.188
+
+>
+0.564556
+
+>
+-0.0436103
+
+>
+0
+
+>
+0
+
+>
+0
+
+>
+0
+
+>
+0
+
+>
+0
+
+>
+0
+
+>
+19
+
+>
+-0.337272
+
+$$$$
+MolPort-002-851-943
+ rDOCK(R) 3D
+libRbt.so/2013.1/901 2013/11/27
+ 19 20 0 0 0 0 0 0 0 0999 V2000
+ 29.0873 -45.1287 72.5368 C 0 0 0 0 0 0
+ 30.5827 -44.8732 72.6733 C 0 0 0 0 0 0
+ 31.1287 -45.6031 73.7861 O 0 0 0 0 0 0
+ 32.4530 -45.4396 74.0773 C 0 0 0 0 0 0
+ 33.0026 -44.4340 74.8613 C 0 0 0 0 0 0
+ 34.3860 -44.3912 75.0725 C 0 0 0 0 0 0
+ 34.8510 -43.3809 75.8248 F 0 0 0 0 0 0
+ 35.2675 -45.3374 74.5189 C 0 0 0 0 0 0
+ 34.6793 -46.3431 73.7297 C 0 0 0 0 0 0
+ 33.2990 -46.3836 73.4995 C 0 0 0 0 0 0
+ 36.7381 -45.2855 74.7243 C 0 0 0 0 0 0
+ 37.3863 -44.1312 75.2008 C 0 0 0 0 0 0
+ 38.7757 -44.0835 75.3665 C 0 0 0 0 0 0
+ 39.5531 -45.1995 75.0779 C 0 0 0 0 0 0
+ 38.9420 -46.3610 74.6215 C 0 0 0 0 0 0
+ 37.5548 -46.3988 74.4412 C 0 0 0 0 0 0
+ 31.2850 -45.3910 71.4141 C 0 0 0 0 0 0
+ 31.2999 -46.5634 71.0636 O 0 0 0 0 0 0
+ 31.9000 -44.4149 70.7000 O 0 0 0 0 0 0
+ 1 2 1 0 0 0
+ 2 3 1 0 0 0
+ 2 17 1 0 0 0
+ 3 4 1 0 0 0
+ 4 5 2 0 0 0
+ 4 10 1 0 0 0
+ 5 6 1 0 0 0
+ 6 7 1 0 0 0
+ 6 8 2 0 0 0
+ 8 9 1 0 0 0
+ 8 11 1 0 0 0
+ 9 10 2 0 0 0
+ 11 12 2 0 0 0
+ 11 16 1 0 0 0
+ 12 13 1 0 0 0
+ 13 14 2 0 0 0
+ 14 15 1 0 0 0
+ 15 16 2 0 0 0
+ 17 18 2 0 0 0
+ 17 19 1 0 0 0
+M END
+>
+-177.44411378,-62.99978458,85.20369975,-15.83836033,34.20264051,-45.18663180
+73.81619119,2.82020601,0.20039949,-2.20979512
+
+>
+MolPort-002-851-943
+
+>
+0
+
+>
+/home/timbo/github/im/docking-validation/targets/nudt7/expts/vscreening/NUDT7A-x0129/work/94/3883032ea0e243c22b1a7b7b149ac4
+
+>
+rbdock ($Id: //depot/dev/client3/rdock/2013.1/src/exe/rbdock.cxx#4 $)
+
+>
+libRbt.so (2013.1, Build901 2013/11/27)
+
+>
+/rDock_2013.1/data/scripts/dock.prm
+
+>
+docking.prm
+
+>
+-6.36755
+
+>
+-6.20565
+
+>
+1
+
+>
+0
+
+>
+0
+
+>
+4
+
+>
+-15.6056
+
+>
+-0.326613
+
+>
+-0.1619
+
+>
+2.51271
+
+>
+4.86231
+
+>
+0
+
+>
+0
+
+>
+0
+
+>
+0
+
+>
+-1.41826
+
+>
+0.564556
+
+>
+-0.00852107
+
+>
+0
+
+>
+0
+
+>
+0
+
+>
+0
+
+>
+0
+
+>
+0
+
+>
+0
+
+>
+19
+
+>
+-0.335134
+
+$$$$
+MolPort-002-851-943
+ rDOCK(R) 3D
+libRbt.so/2013.1/901 2013/11/27
+ 19 20 0 0 0 0 0 0 0 0999 V2000
+ 29.1137 -45.1415 72.4988 C 0 0 0 0 0 0
+ 30.6070 -44.8812 72.6496 C 0 0 0 0 0 0
+ 31.1496 -45.6287 73.7523 O 0 0 0 0 0 0
+ 32.4657 -45.4472 74.0691 C 0 0 0 0 0 0
+ 32.9852 -44.4390 74.8700 C 0 0 0 0 0 0
+ 34.3637 -44.3768 75.1071 C 0 0 0 0 0 0
+ 34.7993 -43.3649 75.8748 F 0 0 0 0 0 0
+ 35.2696 -45.3055 74.5635 C 0 0 0 0 0 0
+ 34.7115 -46.3144 73.7566 C 0 0 0 0 0 0
+ 33.3365 -46.3742 73.5006 C 0 0 0 0 0 0
+ 36.7352 -45.2328 74.7964 C 0 0 0 0 0 0
+ 37.3319 -44.1544 75.4751 C 0 0 0 0 0 0
+ 38.7169 -44.0821 75.6671 C 0 0 0 0 0 0
+ 39.5416 -45.0999 75.2011 C 0 0 0 0 0 0
+ 38.9820 -46.1874 74.5415 C 0 0 0 0 0 0
+ 37.5990 -46.2474 74.3369 C 0 0 0 0 0 0
+ 31.3198 -45.3724 71.3856 C 0 0 0 0 0 0
+ 31.3645 -46.5418 71.0275 O 0 0 0 0 0 0
+ 31.9076 -44.3760 70.6766 O 0 0 0 0 0 0
+ 1 2 1 0 0 0
+ 2 3 1 0 0 0
+ 2 17 1 0 0 0
+ 3 4 1 0 0 0
+ 4 5 2 0 0 0
+ 4 10 1 0 0 0
+ 5 6 1 0 0 0
+ 6 7 1 0 0 0
+ 6 8 2 0 0 0
+ 8 9 1 0 0 0
+ 8 11 1 0 0 0
+ 9 10 2 0 0 0
+ 11 12 2 0 0 0
+ 11 16 1 0 0 0
+ 12 13 1 0 0 0
+ 13 14 2 0 0 0
+ 14 15 1 0 0 0
+ 15 16 2 0 0 0
+ 17 18 2 0 0 0
+ 17 19 1 0 0 0
+M END
+>
+-176.36359603,-64.47013780,84.11144681,-6.13868426,34.20908624,-45.15746767
+73.84365290,2.79182088,0.19071369,-2.16983491
+
+>
+MolPort-002-851-943
+
+>
+0
+
+>
+/home/timbo/github/im/docking-validation/targets/nudt7/expts/vscreening/NUDT7A-x0129/work/94/3883032ea0e243c22b1a7b7b149ac4
+
+>
+rbdock ($Id: //depot/dev/client3/rdock/2013.1/src/exe/rbdock.cxx#4 $)
+
+>
+libRbt.so (2013.1, Build901 2013/11/27)
+
+>
+/rDock_2013.1/data/scripts/dock.prm
+
+>
+docking.prm
+
+>
+-6.33499
+
+>
+-6.16623
+
+>
+1
+
+>
+0
+
+>
+0
+
+>
+4
+
+>
+-15.5662
+
+>
+-0.324539
+
+>
+-0.168756
+
+>
+2.21932
+
+>
+4.86231
+
+>
+0
+
+>
+0
+
+>
+0
+
+>
+0
+
+>
+-1.27842
+
+>
+0.564556
+
+>
+-0.0088819
+
+>
+0
+
+>
+0
+
+>
+0
+
+>
+0
+
+>
+0
+
+>
+0
+
+>
+0
+
+>
+19
+
+>
+-0.333421
+
+$$$$
+MolPort-002-851-943
+ rDOCK(R) 3D
+libRbt.so/2013.1/901 2013/11/27
+ 19 20 0 0 0 0 0 0 0 0999 V2000
+ 29.9260 -43.7931 75.8282 C 0 0 0 0 0 0
+ 30.0106 -43.7788 74.3073 C 0 0 0 0 0 0
+ 30.6798 -44.9550 73.8195 O 0 0 0 0 0 0
+ 32.0315 -45.0465 73.9923 C 0 0 0 0 0 0
+ 32.8337 -44.1444 74.6782 C 0 0 0 0 0 0
+ 34.2126 -44.3683 74.7725 C 0 0 0 0 0 0
+ 34.9304 -43.4459 75.4336 F 0 0 0 0 0 0
+ 34.8407 -45.4868 74.1953 C 0 0 0 0 0 0
+ 34.0002 -46.3816 73.5073 C 0 0 0 0 0 0
+ 32.6231 -46.1566 73.3938 C 0 0 0 0 0 0
+ 36.3059 -45.7192 74.2761 C 0 0 0 0 0 0
+ 36.8473 -46.8920 74.8337 C 0 0 0 0 0 0
+ 38.2300 -47.0907 74.9290 C 0 0 0 0 0 0
+ 39.1097 -46.1267 74.4492 C 0 0 0 0 0 0
+ 38.6071 -44.9643 73.8773 C 0 0 0 0 0 0
+ 37.2246 -44.7624 73.7993 C 0 0 0 0 0 0
+ 28.5890 -43.8071 73.7373 C 0 0 0 0 0 0
+ 27.9045 -44.8167 73.6368 O 0 0 0 0 0 0
+ 28.1398 -42.5873 73.3484 O 0 0 0 0 0 0
+ 1 2 1 0 0 0
+ 2 3 1 0 0 0
+ 2 17 1 0 0 0
+ 3 4 1 0 0 0
+ 4 5 2 0 0 0
+ 4 10 1 0 0 0
+ 5 6 1 0 0 0
+ 6 7 1 0 0 0
+ 6 8 2 0 0 0
+ 8 9 1 0 0 0
+ 8 11 1 0 0 0
+ 9 10 2 0 0 0
+ 11 12 2 0 0 0
+ 11 16 1 0 0 0
+ 12 13 1 0 0 0
+ 13 14 2 0 0 0
+ 14 15 1 0 0 0
+ 15 16 2 0 0 0
+ 17 18 2 0 0 0
+ 17 19 1 0 0 0
+M END
+>
+-73.02220307,-79.87983236,4.44837660,122.63179185,33.38014537,-44.89265281
+74.27155283,-2.95779392,0.12629607,-2.77211043
+
+>
+MolPort-002-851-943
+
+>
+0
+
+>
+/home/timbo/github/im/docking-validation/targets/nudt7/expts/vscreening/NUDT7A-x0129/work/94/3883032ea0e243c22b1a7b7b149ac4
+
+>
+rbdock ($Id: //depot/dev/client3/rdock/2013.1/src/exe/rbdock.cxx#4 $)
+
+>
+libRbt.so (2013.1, Build901 2013/11/27)
+
+>
+/rDock_2013.1/data/scripts/dock.prm
+
+>
+docking.prm
+
+>
+-6.31703
+
+>
+-6.35249
+
+>
+1
+
+>
+0
+
+>
+0
+
+>
+4
+
+>
+-15.7525
+
+>
+-0.334341
+
+>
+0.0354522
+
+>
+1.60751
+
+>
+4.86231
+
+>
+0
+
+>
+0
+
+>
+0
+
+>
+0
+
+>
+-0.768302
+
+>
+0.564556
+
+>
+0.0018659
+
+>
+0
+
+>
+0
+
+>
+0
+
+>
+0
+
+>
+0
+
+>
+0
+
+>
+0
+
+>
+19
+
+>
+-0.332475
+
+$$$$
+MolPort-002-851-943
+ rDOCK(R) 3D
+libRbt.so/2013.1/901 2013/11/27
+ 19 20 0 0 0 0 0 0 0 0999 V2000
+ 28.0827 -45.0397 72.3707 C 0 0 0 0 0 0
+ 29.4175 -44.6228 72.9747 C 0 0 0 0 0 0
+ 30.4074 -45.6501 72.7907 O 0 0 0 0 0 0
+ 31.6315 -45.4776 73.3715 C 0 0 0 0 0 0
+ 31.9526 -44.5425 74.3463 C 0 0 0 0 0 0
+ 33.2573 -44.4800 74.8504 C 0 0 0 0 0 0
+ 33.5023 -43.5394 75.7768 F 0 0 0 0 0 0
+ 34.2825 -45.3366 74.4101 C 0 0 0 0 0 0
+ 33.9248 -46.2725 73.4219 C 0 0 0 0 0 0
+ 32.6269 -46.3307 72.9003 C 0 0 0 0 0 0
+ 35.6731 -45.2618 74.9279 C 0 0 0 0 0 0
+ 36.6363 -46.2427 74.6285 C 0 0 0 0 0 0
+ 37.9370 -46.1772 75.1424 C 0 0 0 0 0 0
+ 38.3150 -45.1145 75.9555 C 0 0 0 0 0 0
+ 37.3923 -44.1200 76.2565 C 0 0 0 0 0 0
+ 36.0885 -44.1984 75.7546 C 0 0 0 0 0 0
+ 29.9231 -43.3803 72.2348 C 0 0 0 0 0 0
+ 30.6621 -43.4093 71.2598 O 0 0 0 0 0 0
+ 29.4669 -42.2162 72.7620 O 0 0 0 0 0 0
+ 1 2 1 0 0 0
+ 2 3 1 0 0 0
+ 2 17 1 0 0 0
+ 3 4 1 0 0 0
+ 4 5 2 0 0 0
+ 4 10 1 0 0 0
+ 5 6 1 0 0 0
+ 6 7 1 0 0 0
+ 6 8 2 0 0 0
+ 8 9 1 0 0 0
+ 8 11 1 0 0 0
+ 9 10 2 0 0 0
+ 11 12 2 0 0 0
+ 11 16 1 0 0 0
+ 12 13 1 0 0 0
+ 13 14 2 0 0 0
+ 14 15 1 0 0 0
+ 15 16 2 0 0 0
+ 17 18 2 0 0 0
+ 17 19 1 0 0 0
+M END
+>
+-174.76410836,-91.91446554,13.80147058,170.47342108,33.08681397,-44.74777983
+73.97625075,-3.09476716,-0.40905355,0.44566910
+
+>
+MolPort-002-851-943
+
+>
+0
+
+>
+/home/timbo/github/im/docking-validation/targets/nudt7/expts/vscreening/NUDT7A-x0129/work/94/3883032ea0e243c22b1a7b7b149ac4
+
+>
+rbdock ($Id: //depot/dev/client3/rdock/2013.1/src/exe/rbdock.cxx#4 $)
+
+>
+libRbt.so (2013.1, Build901 2013/11/27)
+
+>
+/rDock_2013.1/data/scripts/dock.prm
+
+>
+docking.prm
+
+>
+-6.3015
+
+>