File size: 5,004 Bytes
9d6a2a3
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
#!/usr/bin/env bash
set -euo pipefail

SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"

ROOT_DIR="$(cd "${SCRIPT_DIR}/../../.." && pwd)"
cd "${ROOT_DIR}"

if [[ -n "${ROCM_PATH:-}" && -f "${ROCM_PATH}/cuda/env.sh" ]]; then
  source "${ROCM_PATH}/cuda/env.sh"
fi

source "${ROOT_DIR}/env.sh"
export PYTHONPATH="${ROOT_DIR}/src:${PYTHONPATH:-}"

if [[ -n "${CONDA_PREFIX:-}" ]]; then
  export LD_LIBRARY_PATH="${CONDA_PREFIX}/lib:${CONDA_PREFIX}/lib/python3.11/site-packages/torch/lib:${CONDA_PREFIX}/lib/python3.11/site-packages/fastpt/torch/lib:${LD_LIBRARY_PATH:-}"
fi
if [[ -n "${ROCM_PATH:-}" && -d "${ROCM_PATH}/opencl/lib" ]]; then
  export LD_LIBRARY_PATH="${ROCM_PATH}/opencl/lib:${LD_LIBRARY_PATH:-}"
fi

TASK="${1:-all}"

GENSCORE_DIR="$(cd "${SCRIPT_DIR}/.." && pwd)"
BENCHMARK_DIR="${GENSCORE_DIR}/benchmarks"
MODEL_PATH="${MODEL_PATH:-${ONESCIENCE_DATASETS_DIR}/GenScore/trained_models/GatedGCN_ft_1.0_1.pth}"
OUT_ROOT="${OUT_ROOT:-${GENSCORE_DIR}/benchmark_outputs}"

GENSCORE_DATA_ROOT="${GENSCORE_DATA_ROOT:-${ONESCIENCE_DATASETS_DIR}/GenScore/genscore_data}"
CASF_DIR="${CASF_DIR:-${GENSCORE_DATA_ROOT}/CASF-2016}"
PDBBIND_DIR="${PDBBIND_DIR:-${GENSCORE_DATA_ROOT}/PDBbind_v2020}"
PDBBIND_NATIVE_LIGAND_DIR="${PDBBIND_NATIVE_LIGAND_DIR:-${PDBBIND_DIR}/mol2}"
PDBBIND_REFINED_SUBDIR="${PDBBIND_REFINED_SUBDIR:-refined-set}"
PDBBIND_OTHER_PL_SUBDIR="${PDBBIND_OTHER_PL_SUBDIR:-v2020-other-PL}"
CASF_PREPROCESSED_DIR="${CASF_PREPROCESSED_DIR:-${GENSCORE_DATA_ROOT}/rtmscore_s}"
CASF_TEST_PREFIX="${CASF_TEST_PREFIX:-v2020_casf}"
CASF_CORESET_FILE="${CASF_CORESET_FILE:-${CASF_PREPROCESSED_DIR}/v2020_casf_coreset.csv}"

ENCODER="${ENCODER:-gatedgcn}"
CUTOFF="${CUTOFF:-10.0}"
BATCH_SIZE="${BATCH_SIZE:-128}"
NUM_WORKERS="${NUM_WORKERS:-0}"
OUTPREFIX="${OUTPREFIX:-gatedgcn1x5}"

require_dir() {
  local name="$1"
  local path="$2"
  if [[ ! -d "${path}" ]]; then
    echo "Missing required directory ${name}: ${path}" >&2
    exit 1
  fi
}

require_file() {
  local name="$1"
  local path="$2"
  if [[ ! -f "${path}" ]]; then
    echo "Missing required file ${name}: ${path}" >&2
    exit 1
  fi
}

run_scoring_ranking() {
  require_dir "CASF_PREPROCESSED_DIR" "${CASF_PREPROCESSED_DIR}"
  require_file "CASF_CORESET_FILE" "${CASF_CORESET_FILE}"
  require_file "MODEL_PATH" "${MODEL_PATH}"

  echo "[run] CASF-2016 scoring/ranking"
  python "${BENCHMARK_DIR}/casf2016_scoring_ranking.py" \
    --data-dir "${CASF_PREPROCESSED_DIR}" \
    --test-prefix "${CASF_TEST_PREFIX}" \
    --coreset-file "${CASF_CORESET_FILE}" \
    --model-path "${MODEL_PATH}" \
    --encoder "${ENCODER}" \
    --cutoff "${CUTOFF}" \
    --batch-size "${BATCH_SIZE}" \
    --num-workers "${NUM_WORKERS}" \
    --outprefix "${OUTPREFIX}" \
    --outdir "${OUT_ROOT}/power_ranking/examples"
  echo "[done] CASF-2016 scoring/ranking"
}

run_docking() {
  require_dir "CASF_DIR" "${CASF_DIR}"
  require_dir "PDBBIND_DIR" "${PDBBIND_DIR}"
  require_dir "PDBBIND_NATIVE_LIGAND_DIR" "${PDBBIND_NATIVE_LIGAND_DIR}"
  require_dir "PDBbind refined subset" "${PDBBIND_DIR}/${PDBBIND_REFINED_SUBDIR}"
  require_dir "PDBbind other-PL subset" "${PDBBIND_DIR}/${PDBBIND_OTHER_PL_SUBDIR}"
  require_file "MODEL_PATH" "${MODEL_PATH}"

  echo "[run] CASF-2016 docking"
  python "${BENCHMARK_DIR}/casf2016_docking.py" \
    --casf-dir "${CASF_DIR}" \
    --pdbbind-dir "${PDBBIND_DIR}" \
    --native-ligand-dir "${PDBBIND_NATIVE_LIGAND_DIR}" \
    --refined-subdir "${PDBBIND_REFINED_SUBDIR}" \
    --other-pl-subdir "${PDBBIND_OTHER_PL_SUBDIR}" \
    --model-path "${MODEL_PATH}" \
    --encoder "${ENCODER}" \
    --cutoff "${CUTOFF}" \
    --batch-size "${BATCH_SIZE}" \
    --num-workers "${NUM_WORKERS}" \
    --outprefix "${OUTPREFIX}" \
    --outdir "${OUT_ROOT}/power_docking/examples/${OUTPREFIX}"
  echo "[done] CASF-2016 docking"
}

run_screening() {
  require_dir "CASF_DIR" "${CASF_DIR}"
  require_dir "PDBBIND_DIR" "${PDBBIND_DIR}"
  require_dir "PDBbind refined subset" "${PDBBIND_DIR}/${PDBBIND_REFINED_SUBDIR}"
  require_dir "PDBbind other-PL subset" "${PDBBIND_DIR}/${PDBBIND_OTHER_PL_SUBDIR}"
  require_file "MODEL_PATH" "${MODEL_PATH}"

  echo "[run] CASF-2016 screening"
  python "${BENCHMARK_DIR}/casf2016_screening.py" \
    --casf-dir "${CASF_DIR}" \
    --pdbbind-dir "${PDBBIND_DIR}" \
    --refined-subdir "${PDBBIND_REFINED_SUBDIR}" \
    --other-pl-subdir "${PDBBIND_OTHER_PL_SUBDIR}" \
    --model-path "${MODEL_PATH}" \
    --encoder "${ENCODER}" \
    --cutoff "${CUTOFF}" \
    --batch-size "${BATCH_SIZE}" \
    --num-workers "${NUM_WORKERS}" \
    --outprefix "${OUTPREFIX}" \
    --outdir "${OUT_ROOT}/power_screening/examples/${OUTPREFIX}"
  echo "[done] CASF-2016 screening"
}

case "${TASK}" in
  scoring|scoring_ranking)
    run_scoring_ranking
    ;;
  docking)
    run_docking
    ;;
  screening)
    run_screening
    ;;
  all)
    run_scoring_ranking
    run_docking
    run_screening
    ;;
  *)
    echo "Usage: $0 [scoring|docking|screening|all]" >&2
    exit 1
    ;;
esac