mcpField
A
alterlab-rowan

alterlab-rowan

github.com/alterlab-ieuその他7866 回インストール5 週間前に更新
リポジトリ

alterlab-rowan について

alterlab-rowanは、Python APIで量子化学ワークフローを実行するスキルです。分子計算やタンパク質・リガンド解析を行う研究者向けに、物性予測、配座探索、構造最適化、ドッキング、タンパク質共フォールディングをクラウドで実行します。

主な機能

  1. 01pKaや酸化還元電位などの予測
  2. 02配座探索と構造最適化
  3. 03タンパク質への低分子ドッキング
  4. 04AIモデルによるタンパク質共フォールディング
  5. 05Pythonによるワークフロー管理と一括登録

活用シーン

  1. 01候補分子の物性の一括予測
  2. 02標的タンパク質に対するリガンド結合の探索
  3. 03配座生成と分子構造の最適化
  4. 04創薬プロジェクトの計算タスク整理

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/alterlab-ieu/alterlab-academic-skills --skill alterlab-rowan

インストール後、Claude Code で/alterlab-rowanを入力して読み込まれたか確認します。

同梱ファイル

SKILL.md と一緒にインストールされる参考資料やスクリプト。

evals/
evals.json
references/
api_reference.md
molecule_handling.md
proteins_and_organization.md
results_interpretation.md
workflow_types.md

詳細

Rowan:クラウドベースの量子化学プラットフォーム

概要

Rowan は、Python API を通じて量子化学ワークフローにプログラムからアクセスできる、クラウドベースの計算化学プラットフォームです。ローカルの計算リソースや、複数の量子化学パッケージに関する専門知識がなくても、複雑な分子シミュレーションを自動化できます。

主な機能:

  • 分子特性の予測(pKa、酸化還元電位、溶解度、ADMET-Tox)
  • 構造最適化と配座探索
  • AutoDock Vina によるタンパク質-リガンドドッキング
  • Chai-1 および Boltz モデルによる AI を活用したタンパク質共フォールディング
  • DFT、半経験的手法、ニューラルネットワークポテンシャル手法へのアクセス
  • リソースを自動割り当てするクラウド計算

Rowan を使う理由:

  • ローカルの計算クラスターが不要です
  • 多数の計算手法を統一 API で利用できます
  • 結果は labs.rowansci.com のウェブインターフェースで確認できます
  • リソースが自動的にスケーリングされます

このスキルを使う場面

次のような場合にこのスキルを使用します。

  • ローカルの QM ソフトウェアを使わずに、pKa/マクロ pKa、酸化還元電位、溶解度、その他の特性を予測する
  • NNP(AIMNet2、Egret)、xTB、または DFT を使って、クラウド上で構造最適化、配座探索、またはシングルポイント計算を実行する
  • 管理されたクラウドジョブとして、リガンドのドッキング(Vina/GNINA)や、タンパク質-リガンド複合体の共フォールディング(Boltz、Chai-1、OpenFold3)を行う
  • Python(rowan-python)からこれらのジョブをスクリプト化してバッチ実行し、クレジット上限付きのフォルダーに整理する
対象外
シナリオ代わりに使用
ローカルの OpenMM MD 軌跡(RMSD/RMSF、接触)を実行して解析するalterlab-molecular-dynamics
オープンソースの DiffDock を使ってローカルで拡散ドッキングを行う(クラウドアカウント不要)alterlab-diffdock
Boltz-2 または Chai-1 を自分の GPU でローカル実行するalterlab-boltz または alterlab-chai
ローカルで配座や記述子を生成する、または RDKit の力場で最小化するalterlab-rdkit

インストールと認証

インストール

Python >= 3.12 が必要です。このスキルは rowan-python 3.x(2026-09 時点の現行バージョンは 3.2.0)を対象としています(v2 では結果 API が異なります)。

uv pip install "rowan-python>=3.2"

rowan-python をインストールすると、stjames(分子/結果モデル)と rdkit もインストールされます。

認証

API キーを生成してください。

オプション 1:直接割り当て

import rowan
rowan.api_key = "your_api_key_here"

オプション 2:環境変数(推奨)

export ROWAN_API_KEY="your_api_key_here"

API キーは、モジュールのインポート時に ROWAN_API_KEY から自動的に読み込まれます。

セットアップの確認
import rowan

# Check authentication
user = rowan.whoami()
print(f"Logged in as: {user.username}")
print(f"Credits available: {user.credits}")

結果のパターン(最初にお読みください)

すべての submit_*_workflow は Workflow を返します。workflow.data[...] を自分で読み取ったり、非推奨の wait_for_result() を呼び出したりしないでください。v3 での標準的な方法は、次のように一度呼び出すだけです。

mol = rowan.Molecule.from_smiles("c1ccccc1O")   # 3D structure for the default 3D method
workflow = rowan.submit_pka_workflow(mol, name="phenol pKa")
result = workflow.result()        # blocks until done, returns a typed WorkflowResult
print(result.strongest_acid)      # typed attribute access, not a dict key

重要な点:

  • workflow.result(wait=True, poll_interval=5) は処理をブロックして結果を取得し、ワークフローが失敗または停止した場合は rowan.WorkflowError を送出します。ブロックせずに準備できた結果を取得するには wait=False を使用します。
  • workflow.status は文字列ではなく、stjames.Status の整数列挙値です(QUEUED=0, RUNNING=1, COMPLETED_OK=2, FAILED=3, STOPPED=4, AWAITING_QUEUE=5, DRAFT=6, PREEMPTED=7)。"completed" と比較するのではなく、workflow.done()/workflow.is_finished() を使用してください。
  • 構造ベースのワークフローは、SMILES 文字列のみの入力を受け付けなくなりました。 rowan-python 3.x では、submit_basic_calculation_workflow、submit_docking_workflow、および 3D pKa/配座関連メソッドの呼び出しは require_coordinates を実行し、座標のない SMILES に対して ValueError を送出します。まず 3D 分子を作成してください。例:mol = rowan.Molecule.from_smiles("CCO")(座標を自動生成する stjames.Molecule.from_smiles(...) も使用できます)。次に mol を渡します。SMILES ベースのメソッド(submit_macropka_workflow、および method="starling"/"chemprop_nevolianis2025" を指定した pKa)では、引き続き SMILES 文字列を使用できます。Molecule.from_smiles(smiles) が受け取るのは SMILES のみです(charge=/multiplicity= キーワード引数は指定できません)。

コアワークフロー

1. pKa 予測

micro-pKa/酸解離定数を予測します:

import rowan

# The default pKa method is now a 3D method, so build a molecule (bare SMILES is rejected).
workflow = rowan.submit_pka_workflow(
    rowan.Molecule.from_smiles("c1ccccc1O"),   # Phenol
    name="phenol pKa calculation",
    pka_range=(2, 12),                  # default
    method="gxtb_wagen2026",            # default (g-xTB); "aimnet2_wagen2024" also 3D.
                                        # "starling" / "chemprop_nevolianis2025" take a SMILES string.
)

result = workflow.result()
print(f"Strongest acid pKa: {result.strongest_acid}")
print(f"Strongest base pKa: {result.strongest_base}")

マクロな pKa、pH に対するマイクロステートの存在比、等電点、logD/溶解度の pH 依存性を求めるには、rowan.submit_macropka_workflow(...) を使用し、result.pka_values、result.microstates、result.isoelectric_point を読み取ります。

2. コンフォマー探索

コンフォマーのアンサンブルを生成し、ランク付けします:

import rowan

workflow = rowan.submit_conformer_search_workflow(
    "CCCC",  # Butane
    name="butane conformer search",
    final_method="aimnet2_wb97md3",     # NNP; default
)

result = workflow.result()
print(f"Found {result.num_conformers} conformers")
for energy in result.get_energies():   # relative energies, kcal/mol
    print(f"  ΔE = {energy:.2f} kcal/mol")
lowest = result.get_conformer(0)       # stjames.Molecule of the lowest-energy conformer
3. 幾何最適化

submit_basic_calculation_workflow はタスク駆動型です。workflow_type 文字列ではなく、tasks(例:["optimize"]、["energy"]、["optimize", "frequencies"])を渡してください。

import rowan

workflow = rowan.submit_basic_calculation_workflow(
    rowan.Molecule.from_smiles("CC(=O)O"),  # Acetic acid (needs 3D coords; SMILES is rejected)
    tasks=["optimize"],
    preset="organic_nnp",     # quick NNP preset; or set method=/basis_set= explicitly
    name="acetic acid optimization",
)

result = workflow.result()
print(f"Final energy: {result.energy} Hartree")
optimized_mol = result.molecule   # stjames.Molecule with optimized coordinates
4. タンパク質-リガンドドッキング

小分子をタンパク質標的にドッキングします。ポケットはオングストローム単位の [[center_x, center_y, center_z], [size_x, size_y, size_z]] です。2 つの 3 次元ベクトルからなるリストであり、辞書ではありません。

import rowan

# Create protein from a PDB ID (fetched from RCSB)
protein = rowan.create_protein_from_pdb_id(name="EGFR kinase", code="1M17")
protein.sanitize()   # strip waters/ions, fix residues

pocket = [[10.0, 20.0, 30.0],    # center (Å)
          [20.0, 20.0, 20.0]]    # box size (Å)

workflow = rowan.submit_docking_workflow(
    protein=protein,             # Protein object or its .uuid
    pocket=pocket,
    # 3D input required — a bare SMILES string raises ValueError
    initial_molecule=rowan.Molecule.from_smiles("Cc1ccc(NC(=O)c2ccc(CN3CCN(C)CC3)cc2)cc1"),
    # engine options go in docking_settings; the loose scoring_function=/exhaustiveness=
    # kwargs are deprecated (rowan.GninaSettings selects GNINA instead of Vina)
    docking_settings=rowan.VinaSettings(scoring_function="vinardo"),  # or "vina"
    name="EGFR docking",
)

result = workflow.result()
best = result.scores[0]          # DockingScore, sorted best-first
print(f"Best docking score: {best.score} kcal/mol")
best_pose = result.best_pose     # stjames.Molecule of the top pose
5. タンパク質コフォールディング(AI 構造予測)

AI モデルを使用して、タンパク質-リガンド複合体構造を予測します:

import rowan

protein_seq = "MENFQKVEKIGEGTYGVVYKARNKLTGEVVALKKIRLDTETEGVPSTAIREISLLKELNHPNIVKLLDVIHTENKLYLVFEFLHQDLKKFMDASALTGIPLPLIKSYLFQLLQGLAFCHSHRVLHRDLKPQNLLINTEGAIKLADFGLARAFGVPVRTYTHEVVTLWYRAPEILLGCKYYSTAVDIWSLGCIFAEMVTRRALFPGDSEIDQLFRIFRTLGTPDEVVWPGVTSMPDYKPSFPKWARQDFSKVVPPLDEDGRSLLSQMLHYDPNKRISAKAALAHPFFQDVTKPVPHLRL"
ligand = "CCC(C)CN=C1NCC2(CCCOC2)CN1"

workflow = rowan.submit_protein_cofolding_workflow(
    initial_protein_sequences=[protein_seq],
    initial_smiles_list=[ligand],
    name="kinase-ligand cofolding",
    model="chai_1r",   # default is "boltz_2"; see note below for the full list
)

result = workflow.result()
top = result.predictions[0]            # first CofoldingResult sample
print(f"pTM: {top.scores.ptm}")        # predicted TM score (0-1)
print(f"interface pTM: {top.scores.iptm}")

注:rowan-python 3.2 では、コフォールディングモデルの文字列は chai_1r、boltz_1、boltz_2(デフォルト)、boltz_2_1、openfold_3、decaf_boltz です(boltz_1x はありません)。信頼度は result.scores/各予測の .scores にある .ptm と .iptm に格納されています。

ワークフロー管理

ワークフローの一覧表示と照会
# List recent workflows (page is 0-indexed; default size=10)
workflows = rowan.list_workflows(size=10)
for wf in workflows:
    print(f"{wf.name}: {wf.status.name}")   # status is an int enum

# Filter by type / name substring / folder
pka_runs = rowan.list_workflows(workflow_type="pka", name_contains="phenol")
folder_runs = rowan.list_workflows(parent_uuid=folder.uuid)

# Retrieve specific workflow
workflow = rowan.retrieve_workflow("workflow-uuid")
バッチ操作
# Submit many workflows of one type at once. This is a thin loop over the generic
# submit_workflow: it skips the per-type input checks the submit_*_workflow helpers do,
# so pass workflow_data= for non-default settings.
workflows = rowan.batch_submit_workflow(
    workflow_type="pka",
    initial_smileses=["CCO", "CC(=O)O", "c1ccccc1O"],
)

# Non-blocking status poll: returns {uuid: status_int} (stjames.Status values)
statuses = rowan.batch_poll_status([wf.uuid for wf in workflows])
フォルダーの整理
# Create folder for project
folder = rowan.create_folder(name="Drug Discovery Project")

# Submit workflow to folder
workflow = rowan.submit_pka_workflow(
    rowan.Molecule.from_smiles("CCO"),
    name="compound pKa",
    folder=folder,          # or folder_uuid=folder.uuid (not both)
)

# List workflows in folder
folder_workflows = rowan.list_workflows(parent_uuid=folder.uuid)

計算手法

Rowan は複数の理論レベルに対応しています:

ニューラルネットワークポテンシャル:

  • AIMNet2 (ωB97M-D3) - 高速かつ高精度
  • Egret - Rowan 独自のモデル

半経験的手法:

  • GFN1-xTB、GFN2-xTB - 大きな分子に対して高速

DFT:

  • B3LYP、PBE、ωB97X の各種
  • 複数の基底関数系を利用可能

手法はワークフローの種類に基づいて自動的に選択されます。また、ワークフローパラメーターで明示的に指定することもできます。

リファレンスドキュメント

API の詳細については、以下のリファレンスファイルを参照してください:

  • references/api_reference.md:ワークフロークラス、送信関数、取得メソッド、結果のパターン
  • references/workflow_types.md:pKa、ドッキング、コフォールディングなど、すべてのワークフロータイプとパラメーター
  • references/molecule_handling.md:stjames.Molecule クラス - SMILES、XYZ、RDKit からの分子の作成
  • references/proteins_and_organization.md:タンパク質のアップロード、フォルダー管理、プロジェクトの整理
  • references/results_interpretation.md:ワークフロー出力、信頼度スコア、検証の理解

よくあるパターン

パターン 1:物性予測パイプライン

まずすべてを送信し、その後で結果を収集します。送信はノンブロッキングで、result() はブロッキングです。

import rowan

smiles_list = ["CCO", "c1ccccc1O", "CC(=O)O"]

# Submit all pKa calculations (default 3D method -> build molecules from the SMILES)
workflows = [
    rowan.submit_pka_workflow(rowan.Molecule.from_smiles(smi), name=f"pKa: {smi}")
    for smi in smiles_list
]

# Collect results
for wf in workflows:
    result = wf.result()
    print(f"{wf.name}: pKa = {result.strongest_acid}")
パターン 2:バーチャルスクリーニング

1 つの標的に対してライブラリをスクリーニングする場合は、Python ループよりも専用のバッチドッキングワークフローを優先してください。

import rowan

protein = rowan.upload_protein(name="Drug Target", file_path="target.pdb")
protein.sanitize()

pocket = [[x, y, z], [20.0, 20.0, 20.0]]   # center, size (Å)

workflow = rowan.submit_batch_docking_workflow(
    smiles_list=compound_library,
    protein=protein,
    pocket=pocket,
    name="library screen",
)
result = workflow.result()
パターン 3:コンフォマーに基づく解析
import rowan

conf_wf = rowan.submit_conformer_search_workflow(
    "C1CCCCC1",  # any SMILES
    name="conformer search",
)
result = conf_wf.result()

energies = result.get_energies()   # relative energies, kcal/mol, ascending
print(f"Found {result.num_conformers} conformers")
print(f"Energy range: {energies[0]:.2f} to {energies[-1]:.2f} kcal/mol")

ベストプラクティス

  1. セキュリティと利便性のため、環境変数で API キーを設定します
  2. 関連するワークフローを整理するにはフォルダーを使用します
  3. workflow.result() を使用します — 待機、取得、失敗時の例外送出を 1 回の呼び出しで行います
  4. 多数の類似ジョブにはバッチ関数(batch_submit_workflow、submit_batch_docking_workflow)を使用します
  5. 送信時に max_credits= で支出を制限し、rowan.whoami().credits を確認します

エラー処理

ワークフローが失敗または停止した場合、workflow.result() は rowan.WorkflowError を送出するため、次のようにラップしてください:

import rowan

workflow = rowan.submit_pka_workflow(
    rowan.Molecule.from_smiles("c1ccccc1O"), name="calculation", max_credits=10
)   # input problems (e.g. a bare SMILES for a 3D method) raise ValueError at submit time

try:
    result = workflow.result()       # blocks until done; raises on failure
    print(result.strongest_acid)
except rowan.WorkflowError as e:
    # workflow failed/stopped — inspect workflow.logfile for details
    print(f"Workflow failed: {e}")
    print(workflow.logfile)

workflow.status は int 列挙型の stjames.Status です。ブロッキングせずに完了を確認するには、workflow.done() をチェックしてください。

追加リソース

AlterLab Academic Skills スイートの一部です。

コメント