diffdock について
DiffDockを使い、小分子リガンドとタンパク質標的の3D結合ポーズを予測するスキルです。構造または配列入力、単一・バッチドッキング、信頼度分析に対応します。信頼度スコアは結合親和性の推定値ではありません。
主な機能
- 01リガンドの結合ポーズを予測
- 02PDB構造またはタンパク質配列を入力
- 03SMILES、SDF、MOL2のリガンドに対応
- 04単一またはバッチでドッキング
- 05信頼度スコアを分析・順位付け
- 06サンプリングと推論パラメーターを調整
活用シーン
- 01リガンドをタンパク質標的にドッキング
- 02タンパク質とリガンドの組み合わせを一括スクリーニング
- 03異なるタンパク質構造間でポーズを比較
- 04追加スコアリング前に予測信頼度を確認
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ jackspace/ claudeskillz --skill diffdockインストール後、Claude Code で/diffdockを入力して読み込まれたか確認します。
同梱ファイルSKILL.json
詳細
DiffDock: 拡散モデルによる分子ドッキング
概要
DiffDock は、拡散ベースの深層学習によるツールで、分子ドッキングを行います。低分子リガンドのタンパク質標的に対する3D結合ポーズを予測します。計算ドッキング分野における最先端の手法であり、構造ベースの創薬やケミカルバイオロジーにおいて重要な役割を果たします。
主な機能:
- 深層学習を用いて、高い精度でリガンドの結合ポーズを予測
- タンパク質構造(PDBファイル)または配列(ESMFold経由)をサポート
- 単一の複合体または大規模なバーチャルスクリーニングのキャンペーンを処理
- 予測の信頼性を評価するための信頼度スコアを生成
- 多様なリガンド入力(SMILES、SDF、MOL2)に対応
重要な違い: DiffDock が予測するのは結合ポーズ(3D構造)と信頼度(予測の確実性)であり、結合親和性(ΔG、Kd)ではありません。親和性の評価には、必ずスコアリング関数(GNINA、MM/GBSA)と組み合わせてください。
このスキルを使用するタイミング
このスキルは、次のような場合に使用します。
- 「このリガンドをタンパク質にドッキングして」または「結合ポーズを予測して」
- 「分子ドッキングを実行して」または「タンパク質-リガンドのドッキングを行って」
- 「バーチャルスクリーニング」または「化合物ライブラリをスクリーニングして」
- 「この分子はどこに結合するか?」または「結合部位を予測して」
- 構造ベースの創薬設計やリード最適化のタスク
- PDBファイル+SMILES文字列またはリガンド構造を扱うタスク
- 複数のタンパク質-リガンドペアのバッチドッキング
インストールと環境構築
環境の状態を確認する
DiffDock のタスクを始める前に、環境構築が正しいか確認してください。
# Use the provided setup checker
python scripts/setup_check.py
このスクリプトは、Pythonのバージョン、CUDA対応のPyTorch、PyTorch Geometric、RDKit、ESM、その他の依存関係を検証します。
インストールの方法
オプション1: Conda(推奨)
git clone https://github.com/gcorso/DiffDock.git
cd DiffDock
conda env create --file environment.yml
conda activate diffdock
オプション2: Docker
docker pull rbgcsail/diffdock
docker run -it --gpus all --entrypoint /bin/bash rbgcsail/diffdock
micromamba activate diffdock
重要な注意事項:
- GPUの使用を強く推奨します(CPUと比べて10〜100倍高速)
- 初回実行時に SO(2)/SO(3) のルックアップテーブルを事前計算します(約2〜5分)
- モデルのチェックポイント(約500MB)は、存在しない場合に自動でダウンロードされます
主なワークフロー
ワークフロー1: 単一のタンパク質-リガンドドッキング
用途: 1つのリガンドを1つのタンパク質標的にドッキングします
入力の要件:
- タンパク質: PDBファイルまたはアミノ酸配列
- リガンド: SMILES文字列または構造ファイル(SDF/MOL2)
コマンド:
python -m inference \
--config default_inference_args.yaml \
--protein_path protein.pdb \
--ligand "CC(=O)Oc1ccccc1C(=O)O" \
--out_dir results/single_docking/
代替方法(タンパク質配列を使用):
python -m inference \
--config default_inference_args.yaml \
--protein_sequence "MSKGEELFTGVVPILVELDGDVNGHKF..." \
--ligand ligand.sdf \
--out_dir results/sequence_docking/
出力構造:
results/single_docking/
├── rank_1.sdf # Top-ranked pose
├── rank_2.sdf # Second-ranked pose
├── ...
├── rank_10.sdf # 10th pose (default: 10 samples)
└── confidence_scores.txt
ワークフロー2: 複数の複合体のバッチ処理
用途: 複数のリガンドを複数のタンパク質にドッキングします。バーチャルスクリーニングのキャンペーンに使用します。
ステップ1: バッチ用CSVの準備
付属のスクリプトを使って、バッチ入力を作成または検証します。
# Create template
python scripts/prepare_batch_csv.py --create --output batch_input.csv
# Validate existing CSV
python scripts/prepare_batch_csv.py my_input.csv --validate
CSVの形式:
complex_name,protein_path,ligand_description,protein_sequence
complex1,protein1.pdb,CC(=O)Oc1ccccc1C(=O)O,
complex2,,COc1ccc(C#N)cc1,MSKGEELFT...
complex3,protein3.pdb,ligand3.sdf,
必須列:
complex_name: 一意の識別子protein_path: PDBファイルのパス(配列を使用する場合は空欄のままにします)ligand_description: SMILES文字列またはリガンドファイルのパスprotein_sequence: アミノ酸配列(PDBを使用する場合は空欄のままにします)
ステップ2: バッチドッキングの実行
python -m inference \
--config default_inference_args.yaml \
--protein_ligand_csv batch_input.csv \
--out_dir results/batch/ \
--batch_size 10
大規模なバーチャルスクリーニング(化合物100個超)の場合:
処理を高速化するために、タンパク質の埋め込みを事前に計算します。
# Pre-compute embeddings
python datasets/esm_embedding_preparation.py \
--protein_ligand_csv screening_input.csv \
--out_file protein_embeddings.pt
# Run with pre-computed embeddings
python -m inference \
--config default_inference_args.yaml \
--protein_ligand_csv screening_input.csv \
--esm_embeddings_path protein_embeddings.pt \
--out_dir results/screening/
ワークフロー3: 結果の分析
ドッキングが完了したら、信頼度スコアを分析し、予測を順位付けします。
# Analyze all results
python scripts/analyze_results.py results/batch/
# Show top 5 per complex
python scripts/analyze_results.py results/batch/ --top 5
# Filter by confidence threshold
python scripts/analyze_results.py results/batch/ --threshold 0.0
# Export to CSV
python scripts/analyze_results.py results/batch/ --export summary.csv
# Show top 20 predictions across all complexes
python scripts/analyze_results.py results/batch/ --best 20
この分析スクリプトは次の処理を行います。
- すべての予測から信頼度スコアを読み取ります
- High(>0)、Moderate(-1.5〜0)、Low(<-1.5)に分類します
- 複合体内および複合体間で予測を順位付けします
- 統計の要約を生成します
- 後続の分析のために結果をCSVにエクスポートします
信頼度スコアの解釈
スコア範囲の理解:
| スコア範囲 | 信頼度レベル | 解釈 |
|---|---|---|
| > 0 | 高 | 強い予測であり、正確である可能性が高い |
| -1.5 〜 0 | 中 | 妥当な予測であり、慎重に検証すること |
| < -1.5 | 低 | 不確かな予測であり、検証が必要 |
重要な注意点:
- 信頼度 ≠ 親和性: 信頼度が高いことは構造に関するモデルの確信度を意味するものであり、強い結合を意味するものではありません
- 文脈が重要: 以下の場合は期待値を調整してください:
- 大きなリガンド(>500 Da): 信頼度が低くなることが想定されます
- 複数のタンパク質鎖: 信頼度が低下する可能性があります
- 新規のタンパク質ファミリー: 性能が十分に発揮されない可能性があります
- 複数のサンプル: 上位3〜5件の予測を確認し、コンセンサスを探してください
詳細なガイダンス: Read ツールを使用して references/confidence_and_limitations.md を読んでください
パラメーターのカスタマイズ
カスタム設定の使用
特定のユースケース向けにカスタム設定を作成します:
# Copy template
cp assets/custom_inference_config.yaml my_config.yaml
# Edit parameters (see template for presets)
# Then run with custom config
python -m inference \
--config my_config.yaml \
--protein_ligand_csv input.csv \
--out_dir results/
調整すべき主要パラメーター
サンプリング密度:
samples_per_complex: 10→ 困難なケースでは 20〜40 に増やす- サンプル数を増やすと網羅性は向上しますが、実行時間が長くなります
推論ステップ:
inference_steps: 20→ 精度を高めるには 25〜30 に増やす- ステップ数を増やすと品質が向上する可能性がありますが、速度は低下します
温度パラメーター(多様性を制御):
temp_sampling_tor: 7.04→ 柔軟なリガンドでは増やす(8〜10)temp_sampling_tor: 7.04→ 剛直なリガンドでは減らす(5〜6)- 温度が高いほど、より多様なポーズが生成されます
テンプレートで利用可能なプリセット:
- 高精度: サンプル数とステップ数を増やし、温度を下げる
- 高速スクリーニング: サンプル数を減らし、高速化する
- 柔軟なリガンド: ねじれ温度を上げる
- 剛直なリガンド: ねじれ温度を下げる
パラメーターの完全なリファレンス: Read ツールを使用して references/parameters_reference.md を読んでください
高度な手法
アンサンブルドッキング(タンパク質の柔軟性)
既知の柔軟性を持つタンパク質の場合、複数の立体構造にドッキングします:
# Create ensemble CSV
import pandas as pd
conformations = ["conf1.pdb", "conf2.pdb", "conf3.pdb"]
ligand = "CC(=O)Oc1ccccc1C(=O)O"
data = {
"complex_name": [f"ensemble_{i}" for i in range(len(conformations))],
"protein_path": conformations,
"ligand_description": [ligand] * len(conformations),
"protein_sequence": [""] * len(conformations)
}
pd.DataFrame(data).to_csv("ensemble_input.csv", index=False)
サンプリングを増やしてドッキングを実行します:
python -m inference \
--config default_inference_args.yaml \
--protein_ligand_csv ensemble_input.csv \
--samples_per_complex 20 \
--out_dir results/ensemble/
スコアリング関数との統合
DiffDock はポーズを生成します。親和性の評価には他のツールと組み合わせてください:
GNINA(高速なニューラルネットワークスコアリング):
for pose in results/*.sdf; do
gnina -r protein.pdb -l "$pose" --score_only
done
MM/GBSA(より正確だが低速): エネルギー最小化の後に AmberTools MMPBSA.py または gmx_MMPBSA を使用します
自由エネルギー計算(最も正確): FEP/TI 計算には OpenMM + OpenFE または GROMACS を使用します
推奨ワークフロー:
- DiffDock → 信頼度スコア付きのポーズを生成
- 目視検査 → 構造的な妥当性を確認
- GNINA または MM/GBSA → 再スコアリングして親和性で順位付け
- 実験的検証 → 生化学アッセイ
制限事項と適用範囲
DiffDock の設計対象:
- 低分子リガンド(通常 100〜1000 Da)
- ドラッグライク有機化合物
- 小さなペプチド(<20 残基)
- 単一鎖または複数鎖のタンパク質
DiffDock の設計対象外:
- 大きな生体分子(タンパク質–タンパク質ドッキング) → DiffDock-PP または AlphaFold-Multimer を使用
- 大きなペプチド(>20 残基) → 代替手法を使用
- 共有結合ドッキング → 専用の共有結合ドッキングツールを使用
- 結合親和性の予測 → スコアリング関数と組み合わせる
- 膜タンパク質 → 特に学習されていないため、注意して使用
制限事項の完全な一覧: Read ツールを使用して references/confidence_and_limitations.md を読んでください
トラブルシューティング
よくある問題
問題: すべての予測で信頼度スコアが低い
- 原因: 大きい/特殊なリガンド、結合部位が不明確、タンパク質の柔軟性
- 解決策:
samples_per_complexを増やす(20〜40)、アンサンブルドッキングを試す、タンパク質構造を検証する
問題: メモリ不足エラー
- 原因: バッチサイズに対して GPU メモリが不足している
- 解決策:
--batch_size 2に減らす、または一度に処理する複合体の数を減らす
問題: 処理が遅い
- 原因: GPU ではなく CPU で実行している
- 解決策:
python -c "import torch; print(torch.cuda.is_available())"で CUDA を確認し、GPU を使用する
問題: 非現実的な結合ポーズ
- 原因: タンパク質の準備が不十分、リガンドが大きすぎる、結合部位が誤っている
- 解決策: タンパク質に欠損残基がないか確認し、遠方の水分子を取り除き、結合部位の指定を検討する
問題: 「Module not found」エラー
- 原因: 依存関係の不足、または誤った環境
- 解決策:
python scripts/setup_check.pyを実行して診断する
パフォーマンスの最適化
最良の結果を得るために:
- GPU を使用する(実用には必須)
- 同じタンパク質を繰り返し使う場合は、ESM 埋め込みを事前計算する
- 複数の複合体をまとめてバッチ処理する
- まずデフォルトパラメータで開始し、必要に応じて調整する
- タンパク質構造を検証する(欠損残基を解消する)
- リガンドには正規 SMILES を使用する
グラフィカルユーザーインターフェース
対話的に利用する場合は、Web インターフェースを起動してください:
python app/main.py
# Navigate to http://localhost:7860
または、インストールせずにオンラインデモを利用することもできます:
リソース
ヘルパースクリプト(scripts/)
prepare_batch_csv.py: バッチ入力 CSV ファイルの作成と検証
- 例のエントリを含むテンプレートを作成する
- ファイルパスと SMILES 文字列を検証する
- 必須列と形式の問題を確認する
analyze_results.py: 信頼度スコアの分析と予測のランク付け
- 単一実行またはバッチ実行の結果を解析する
- 統計的な要約を生成する
- 後続の分析のために CSV にエクスポートする
- 複合体全体で上位の予測を特定する
setup_check.py: DiffDock 環境のセットアップを検証
- Python のバージョンと依存関係を確認する
- PyTorch と CUDA の利用可否を検証する
- RDKit と PyTorch Geometric のインストールをテストする
- 必要に応じてインストール手順を提示する
リファレンスドキュメント(references/)
parameters_reference.md: パラメータの完全なドキュメント
- すべてのコマンドラインオプションと設定パラメータ
- デフォルト値と指定可能な範囲
- 多様性を制御するための温度パラメータ
- モデルのチェックポイントの場所とバージョンフラグ
ユーザーが次の内容を必要とする場合にこのファイルを読んでください:
- パラメータの詳細な説明
- 特定のシステムに対する微調整の指針
- 代替のサンプリング戦略
confidence_and_limitations.md: 信頼度スコアの解釈とツールの制限
- 信頼度スコアの詳細な解釈
- 予測を信頼してよい場合
- DiffDock の適用範囲と制限
- 補完的なツールとの統合
- 予測品質のトラブルシューティング
ユーザーが次の内容を必要とする場合にこのファイルを読んでください:
- 信頼度スコアの解釈に関するヘルプ
- DiffDock を使用すべきでない場合の理解
- 他のツールとの組み合わせに関する指針
- 検証戦略
workflows_examples.md: 包括的なワークフロー例
- 詳細なインストール手順
- すべてのワークフローのステップごとの例
- 高度な統合パターン
- よくある問題のトラブルシューティング
- ベストプラクティスと最適化のヒント
ユーザーが次の内容を必要とする場合にこのファイルを読んでください:
- コードを含む完全なワークフロー例
- GNINA、OpenMM などの他のツールとの統合
- バーチャルスクリーニングのワークフロー
- アンサンブルドッキングの手順
アセット(assets/)
batch_template.csv: バッチ処理用のテンプレート
- 必須列を備えた事前フォーマット済みの CSV
- 異なる入力タイプを示す例のエントリ
- 実際のデータでそのままカスタマイズできる
custom_inference_config.yaml: 設定テンプレート
- すべてのパラメータに注釈を付けた YAML
- 一般的な用途向けの 4 つのプリセット設定
- 各パラメータを説明する詳細なコメント
- そのままカスタマイズして利用できる
ベストプラクティス
- 大規模なジョブを開始する前に、必ず
setup_check.pyで環境を検証してください prepare_batch_csv.pyでバッチ CSV を検証し、エラーを早期に検出してください- まずはデフォルト設定で開始し、システム固有の要件に応じてパラメーターを調整してください
- 堅牢な予測のために複数のサンプル(10〜40 個)を生成してください
- 後続の解析の前に、上位のポーズを目視で確認してください
- アフィニティ評価のために、スコアリング関数と組み合わせてください
- 初期のランキングには信頼度スコアを使用し、最終的な判断には使用しないでください
- バーチャルスクリーニングのキャンペーンでは、埋め込みを事前計算してください
- 再現性のために、使用したパラメーターを文書化してください
- 可能な場合は、結果を実験的に検証してください
引用
DiffDock を使用する場合は、適切な論文を引用してください。
DiffDock-L(現在のデフォルトモデル):
Stärk et al. (2024) "DiffDock-L: Improving Molecular Docking with Diffusion Models"
arXiv:2402.18396
オリジナルの DiffDock:
Corso et al. (2023) "DiffDock: Diffusion Steps, Twists, and Turns for Molecular Docking"
ICLR 2023, arXiv:2210.01776
追加リソース
- GitHub リポジトリ: https://github.com/gcorso/DiffDock
- オンラインデモ: https://huggingface.co/spaces/reginabarzilaygroup/DiffDock-Web
- DiffDock-L 論文: https://arxiv.org/abs/2402.18396
- オリジナル論文: https://arxiv.org/abs/2210.01776