Rowan: クラウドネイティブな分子モデリングと薬物設計ワークフロー
概要
Rowanは、分子シミュレーション、医薬化学、構造ベース設計のためのクラウドネイティブなワークフロープラットフォームです。そのPython APIは、低分子モデリング、物性予測、ドッキング、分子動力学、AI構造ワークフローのための統一インターフェースを公開しています。
ローカルのHPCインフラストラクチャ、GPUプロビジョニング、または個別のモデリングツール群を維持することなく、医薬化学または分子設計のワークフローをプログラムで実行したい場合にRowanを使用します。Rowanは、すべてのインフラストラクチャ、結果管理、計算スケーリングを処理します。
Rowanを使用するタイミング
Rowanが適しているケース:
- 量子化学、半経験的手法、またはニューラルネットワークポテンシャル
- バッチ物性予測(pKa、記述子、透過性、溶解度)
- コンフォマーおよび互変異性体アンサンブル生成
- ドッキングワークフロー(単一リガンド、アナログシリーズ、ポーズリファインメント)
- タンパク質-リガンド共折り畳みとMSA生成
- 多段階化学パイプライン(例:互変異性体探索 → ドッキング → ポーズ解析)
- 一貫したスケーラブルなインフラストラクチャを必要とするバッチ医薬化学キャンペーン
Rowanが適さないケース:
- シンプルな分子I/O(RDKitを直接使用)
- post-HF ab initio量子化学または相対論計算
クイックスタート
uv pip install rowan-python
import rowan
rowan.api_key = "your_api_key_here" # またはROWAN_API_KEY環境変数を設定
# 記述子には3D Moleculeが必要です。裸のSMILES文字列ではありません。
mol = rowan.Molecule.from_smiles("CC(=O)Oc1ccccc1C(=O)O")
wf = rowan.submit_descriptors_workflow(mol, name="aspirin")
result = wf.result()
print(result.descriptors["MW"]) # 180.042 — 精密質量
print(result.descriptors["SLogP"]) # 1.31
print(result.descriptors["TopoPSA"]) # 63.6 — トポロジカルPSA
エラーなく出力されれば、正しく設定されています。これらの値と例は、rowan-python 3.1.13で検証されています。
インストール
uv pip install rowan-python
# または: uv pip install rowan-python
ユーザー管理とWebhook管理
認証
環境変数を介してAPIキーを設定することをお勧めします:
export ROWAN_API_KEY="your_api_key_here"
または、Pythonで直接設定:
import rowan
rowan.api_key = "your_api_key_here"
認証の確認:
import rowan
user = rowan.whoami() # 認証されていればユーザー情報を返す
print(f"User: {user.email}")
print(f"Credits available: {user.credits_available_string()}")
分子入力形式
Rowanは以下の形式の分子を受け付けます:
- SMILES (推奨):
"CCO","c1ccccc1O" - SMARTSパターン (一部のワークフロー用): 部分構造マッチング用のSMARTSのサブセット
- InChI (APIバージョンでサポートされている場合):
"InChI=1S/C2H6O/c1-2-3/h3H,2H2,1H3"
APIは分子入力を検証し、解析不能なSMILESまたはワークフロー互換性のない入力タイプに対してValueErrorを発生させます。再現性のために、常に正規化されたSMILESを使用してください。
SMILES文字列と分子オブジェクト
rowan-python 3.1.13では、受け入れられる入力タイプはワークフローによって異なります。裸の文字列を受け付ける一般的なワークフローは、pKa、コンフォマー探索、膜透過性、ADMET、LogP、macropKa、溶解度、およびポーズ解析MDのみです。その他(記述子、互変異性体探索、ドッキング、アナログドッキング、BDE、NMR、Fukuiを含む)は、rowan.Molecule.from_smiles(smiles)またはRDKitのMol/RWMolを必要とします。タイプが間違っていると、送信前にValueErrorが発生します。
ヒント: 送信前にRDKitを使用してSMILESを検証してください:
from rdkit import Chem
smiles = "CCO"
mol = Chem.MolFromSmiles(smiles)
if mol is None:
raise ValueError(f"Invalid SMILES: {smiles}")
コア使用パターン
ほとんどのRowanタスクは、同じ3ステップのパターンに従います:
- ワークフローを送信
- 完了を待機(オプションのストリーミングあり)
- 型付けされた結果を便利なプロパティで取得
import rowan
# 1. 送信 — 汎用のsubmit_workflowではなく、特定のワークフロー関数を使用
workflow = rowan.submit_descriptors_workflow(
rowan.Molecule.from_smiles("CC(=O)Oc1ccccc1C(=O)O"),
name="aspirin descriptors",
)
# 2. & 3. 待機と取得
result = workflow.result() # 完了するまでブロック(デフォルト: wait=True, poll_interval=5)
print(result.data) # 生の辞書
print(result.descriptors["MW"]) # 180.042 精密質量; result.molecular_weightプロパティはなし
長時間実行ワークフローには、ストリーミングを使用:
for partial in workflow.stream_result(poll_interval=5):
print(f"Complete: {partial.complete}") # bool、パーセンテージではない
print(partial.data)
result() vs stream_result()
| パターン | 使用タイミング | 所要時間 |
|---|---|---|
result() | 完全な結果を待機できる場合 | <5分が一般的 |
stream_result() | 進捗フィードバックが必要、または早期の部分結果が必要な場合 | >5分、または対話型使用時 |
ガイドライン: 記述子、pKaにはresult()を使用。コンフォマー探索、ドッキング、共折り畳みにはstream_result()を使用。
結果の操作
RowanのAPIには、便利なプロパティを持つ型付けされたワークフロー結果オブジェクトが含まれています。
型付けされたプロパティと.dataの使用
結果には2つのアクセスパターンがあります:
- 便利なプロパティ (推奨):
result.descriptors、result.best_pose、result.scores。結果クラスは異なります: コンフォマー探索はget_energies()とget_conformers()メソッドを使用します。 - 生のフォールバック:
result.data— APIからの生の辞書
例:
result = rowan.submit_descriptors_workflow(
rowan.Molecule.from_smiles("CCO"),
name="ethanol",
).result()
# 便利なプロパティ (すべての記述子を返す):
print(result.descriptors["MW"]) # 精密/モノアイソトピック質量
print(result.descriptors["SLogP"])
print(result.descriptors["TopoPSA"]) # 通常のトポロジカルPSA
# 生データフォールバック:
print(result.data["descriptors"])
注意: DescriptorsResultにはmolecular_weightプロパティはありません。MWは精密/モノアイソトピック質量であり、平均分子量ではありません。TPSAは3D帯電表面記述子です。薬物らしさのルールで使用される通常のトポロジカル極性表面積にはTopoPSAを使用してください。
キャッシュの無効化
一部の結果プロパティは遅延ロードされます(例:コンフォマー幾何、タンパク質構造)。リフレッシュするには:
result.clear_cache()
new_structures = result.get_conformers() # ConformerSearchResultに対して再取得
プロジェクト、フォルダ、整理
重要なキャンペーンには、プロジェクトとフォルダを使用して作業を整理します。
プロジェクト
import rowan
# プロジェクトを作成
project = rowan.create_project(name="CDK2 lead optimization")
rowan.set_project("CDK2 lead optimization")
# 以降のすべてのワークフローはこのプロジェクトに保存される
wf = rowan.submit_descriptors_workflow(
rowan.Molecule.from_smiles("CCO"), name="test compound"
)
# retrieve_projectはUUIDを受け取る; list_workflowsはparent_uuidでスコープする。
project = rowan.retrieve_project(project.uuid)
workflows = rowan.list_workflows(parent_uuid=project.uuid, size=50)
フォルダ
# 階層的なフォルダ構造を作成
folder = rowan.create_folder(name="docking/batch_1/screening")
wf = rowan.submit_docking_workflow(
# ... ドッキングパラメータ ...
folder=folder,
name="compound_001",
)
# フォルダ内のワークフローを一覧表示
results = rowan.list_workflows(parent_uuid=folder.uuid)
ワークフロー決定木
pKa vs MacropKa
以下の場合にミクロpKaを使用:
- 単一のイオン化可能な基のpKaが必要な場合
- 酸塩基転移とプロトン化熱力学に関心がある場合
- 分子に1つまたは2つのイオン化可能な部位がある場合
- 速度が重要な場合(より高速、クレジット消費が少ない)
以下の場合にMacropKaを使用:
- 生理学的に関連する範囲(例:0–14)でのpH依存挙動が必要な場合
- pH全体での総電荷とプロトン化状態の集団が必要な場合
- 分子に複数のイオン化可能な基があり、プロトン化が結合している場合
- 異なるpHでの水溶性などの下流プロパティが必要な場合
決定例:
フェノール (pKa ~10): ミクロpKaを使用
アミン (pKa ~9–10): ミクロpKaを使用
複数イオン化可能な薬物 (N, O, 酸性基): MacropKaを使用
消化管pH全体でのADME評価: MacropKaを使用
コンフォマー探索 vs 互変異性体探索
以下の場合にコンフォマー探索を使用:
- 単一の互変異性体形態が既知である場合
- ドッキング、MD、またはSAR解析のために多様な3Dアンサンブルが必要な場合
- 回転可能結合が化学空間を支配している場合
以下の場合に互変異性体探索を使用:
- 互変異性平衡が不確かな場合(例:複素環、ケト-エノール系)
- すべての関連するプロトン化異性体をモデル化する必要がある場合
- 下流計算(ドッキング、pKa)が互変異性体形態に依存する場合
組み合わせワークフロー:
# ステップ1: 最適な互変異性体を見つける
taut_wf = rowan.submit_tautomer_search_workflow(
initial_molecule=rowan.Molecule.from_smiles("O=c1[nH]ccnc1"),
name="imidazole tautomers",
)
best_taut = taut_wf.result().best_tautomer
# ステップ2: 最適な互変異性体からコンフォマーを生成
conf_wf = rowan.submit_conformer_search_workflow(
initial_molecule=best_taut,
name="imidazole conformers",
)
ドッキング vs アナログドッキング vs 共折り畳み
| ワークフロー | 使用タイミング | 入力 | 出力 |
|---|---|---|---|
| ドッキング | 単一リガンド、既知のポケット | タンパク質 + SMILES + ポケット座標 | ポーズ、スコア、dG |
| アナログドッキング | 5–100以上の関連化合物 | タンパク質 + SMILESリスト + 参照リガンド | すべてのポーズ、参照に整列 |
| タンパク質-リガンド共折り畳み | 配列 + リガンド、結晶構造なし | タンパク質配列 + SMILES | ML予測された結合複合体 |
タンパク質ユーティリティ
タンパク質のアップロード
# ローカルPDBファイルから
protein = rowan.upload_protein(
name="egfr_kinase_domain",
file_path="egfr_kinase.pdb",
)
# PDBデータベースから
protein_from_pdb = rowan.create_protein_from_pdb_id(
name="CDK2 (1M17)",
code="1M17",
)
# 以前にアップロードしたタンパク質を取得
protein = rowan.retrieve_protein("protein-uuid")
# すべてのタンパク質を一覧表示
my_proteins = rowan.list_proteins()
タンパク質準備ガイダンス
- ファイル形式: PDB、mmCIF(Rowanが自動検出)
- 水分子: Rowanは通常、関連する水を保持します。必要に応じて、事前にバルク水を除去してください。
- 異種原子: 補因子、イオン、結合リガンドは通常保持されます。アップロード前に不要な異種原子を除去してください。
- マルチチェーンタンパク質: 完全にサポートされています。
- 解像度: NMR構造、ホモロジーモデル、cryo-EMで動作します。下流予測の品質には、構造の品質が重要です。
- 検証: RowanはPDB構文を検証します。深刻な形式異常のあるファイルは拒否される可能性があります。
ワークフローカタログ
9つの一般的なワークフローカテゴリ(記述子、ミクロpKa、MacropKa、コンフォマー探索、互変異性体探索、ドッキング、アナログドッキング、MSA生成、タンパク質-リガンド共折り畳み)のそれぞれの送信コードと結果の形状、およびすべてのサポートされているワークフロータイプ(コアモデリング、構造ベース設計、高度計算化学、反応化学、高度プロパティ、結合自由エネルギー、配列および構造生物学)の完全なリストは、references/workflow_catalog.mdにあります。
バッチ送信、Webhook、非同期処理
バッチ送信/ポーリング/取得、非ブロッキングのfire-and-checkパターン、Webhook設定、シークレットの作成とローテーション、ペイロードと署名の検証(FastAPIハンドラ付き)、およびWebhookのベストプラクティスは、references/batch_and_webhooks.mdにあります。
アクセス、料金、クレジット
無料枠の制限、ワークフローあたりのクレジット消費、および一般的なコスト見積もりは、references/access_and_pricing.mdにあります。
実践例とトラブルシューティング
完全なリード最適化キャンペーン(プロジェクト設定、互変異性体、アナログシリーズ全体のpKa、結果収集、およびドッキングフォローアップ)は、references/end_to_end_example.mdにあります。
一般的なエラーとその修正、およびデバッグのヒントは、references/troubleshooting.mdにあります。
推奨される使用パターン
- Rowanネイティブのワークフローが存在する場合は、低レベルアセンブリよりも優先する
- プロジェクトとフォルダは、重要なキャンペーン(>5ワークフロー)には必ず使用する
- **
result()**を使用して完了までブロックする(デフォルト:wait=True, poll_interval=5) - 型付けされた結果プロパティを最初に使用し、マッピングされていないフィールドには
.dataにフォールバックする - バッチ送信を化合物ライブラリやアナログシリーズに使用する
- ワークフローを連鎖させて多段階化学キャンペーンを実現する:
pKa → macropKa → 透過性(ADME評価)互変異性体探索 → ドッキング → ポーズ解析MD(ポーズリファインメント)MSA生成 → タンパク質-リガンド共折り畳み(AI構造予測)
- Webhookは、長時間実行キャンペーン(>50ワークフロー)または非同期パイプラインに使用する
- ストリーミングは、大規模なコンフォマー/ドッキング探索での対話型フィードバックに使用する
まとめ
分子設計タスクにクラウド実行が必要な場合、特に低分子モデリング、タンパク質、ドッキング、ADME予測、ML構造生成にわたる統一APIと一貫した結果処理を望む場合は、Rowanを使用してください。
Rowanは分子設計ワークフロープラットフォームであり、単なるリモート計算エンジンではありません。インフラストラクチャのスケーリング、結果の永続化、および多段階パイプラインオーケストレーションを処理するため、ユーザーは科学に集中できます。