Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions cwl_adapters/pose_cluster_filter.cwl
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,9 @@ inputs:
format:
- edam:format_3814

filtered_poses:
type: string?

outputs:

filtered_poses:
Expand Down
44 changes: 44 additions & 0 deletions cwl_adapters/rmsd.cwl
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
cwlVersion: v1.2

class: CommandLineTool

baseCommand: ["python3", "/rmsd.py"]

hints:
DockerRequirement:
dockerPull: mrbrandonwalker/rmsd

inputs:

predicted_poses:
type: File[]
inputBinding:
itemSeparator: ","
position: 1
prefix: "--predicted_poses"

reference_pose:
type: File
inputBinding:
position: 2
prefix: "--reference_pose"

output_json_name:
type: string
default: "output.json"
format:
- edam:format_3816
inputBinding:
position: 3
prefix: --output_json_name

rmsd_output:
type: string?

outputs:

rmsd_output:
type: File
outputBinding:
glob: $(inputs.output_json_name)

15 changes: 15 additions & 0 deletions examples/diffdock/Dockerfile_rmsd
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@

# docker build -f Dockerfile_rmsd -t mrbrandonwalker/rmsd .

FROM condaforge/mambaforge
# NOT mambaforge-pypy3 (rdkit is incompatible with pypy)

RUN conda install -c conda-forge rdkit --yes

RUN conda init bash

COPY rmsd.py /

RUN mamba clean --all --yes

ADD Dockerfile_rmsd .
29 changes: 29 additions & 0 deletions examples/diffdock/rmsd.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
import argparse
from pathlib import Path
import json
from typing import Dict

from rdkit import Chem
from rdkit.Chem import AllChem

parser = argparse.ArgumentParser()
parser.add_argument('--predicted_poses', help='predicted pose')
parser.add_argument('--reference_pose', type=str, help='reference pose')
parser.add_argument('--output_json_name', type=str, help='output json file')
args = parser.parse_args()

predicted_poses = args.predicted_poses.split(',')

ref_mol = Chem.MolFromMolFile(args.reference_pose)
pred_mols = [Chem.MolFromMolFile(pose) for pose in predicted_poses]
predicted_poses = [Path(pose).name for pose in predicted_poses]


output_dict: Dict[str, Dict[str, float]] = {}
for i, pred_name in enumerate(predicted_poses):
pred_mol = pred_mols[i]
RMSD = AllChem.GetBestRMS(pred_mol, ref_mol)
output_dict.update({pred_name: RMSD})

with open(args.output_json_name, 'w', encoding='utf-8') as f:
json.dump(output_dict, f)
13 changes: 13 additions & 0 deletions examples/diffdock/run_diffdock.yml
Original file line number Diff line number Diff line change
Expand Up @@ -68,6 +68,15 @@ steps:
in:
predicted_poses: "*output_poses"
centroid_cutoff: 5 # if centroid of all poses are within cutoff then only keep most confident pose, requires visual inspection
filtered_poses: "&filtered_poses"

- rmsd:
scatter: [reference_pose, predicted_poses]
scatterMethod: dotproduct
in:
predicted_poses: "*filtered_poses"
reference_pose: "*final_sanitized_sdfs"
rmsd_output: "&rmsd"

wic:
graphviz:
Expand Down Expand Up @@ -111,3 +120,7 @@ wic:
wic:
graphviz:
label: Cluster poses
(10, rmsd):
wic:
graphviz:
label: Calculate RMSD