#!/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