本記事では、Pythonからタンパク質設計ツールRosettaを操作できるPyRosettaの使い方を紹介します。この記事を読むことで、PyRosettaのセットアップ方法や、分子ドッキングに必要なエネルギー最小化を行う方法、さらにロゼッタスコアを使ってタンパク質の安定性を評価する方法を学べます。ぜひトライしてみてください!
macOS Ventura(13.2.1), python 3.9.7, Jupyter Notebook, PyMOL 2.5.4
自宅でできるin silico創薬の技術書を販売中
新薬探索を試したい方必読!
ITエンジニアである著者の視点から、wetな研究者からもdryの創薬研究をわかりやすく身近に感じられるように解説しています
宣伝
こちらの記事は合成生物学大会iGEMの強豪校であるiGEM-Wasedaさん協力のもと執筆されました。ご協力誠にありがとうございます!
【iGEM-Waseda】は合成生物学の研究を行う早稲田大学の学術サークルです。iGEMと呼ばれる合成生物学の世界大会の世界大会に出場するために日々研究に励んでいらっしゃいます。
本記事では、iGEM2024で日本Undergrad部門で史上初のTOP10に選ばれたプロジェクトの一環として、特にIn Silicoシミュレーションに関わる部分のツールの一部を紹介しています。プロジェクトの詳細については、iGEM-Wasedaの成果報告サイトをご覧いただければ幸いです。
PyRosettaとは
PyRosettaは、Rosettaという高度な分子モデリングソフトウェアをPythonで使えるようにするツールです。Rosettaの持つ分子構造の計算機能やエネルギー計算機能を活かして、分子モデリングの手法やアルゴリズムを簡単にカスタマイズできます。
エネルギー最小化(minimization)とは
minimizationはタンパク質のポテンシャルエネルギーを最低限に抑えるための計算プロセスです。またminimizationは不自然な原子間の接触や高エネルギー状態を修正し、構造を安定化するために行います。これにより、分子ドッキングの精度が向上します。 タンパク質ドッキングではまずminimizationを利用して、タンパク質をドッキングします。
ロゼッタスコア(Rosetta Score)とは
ロゼッタスコア(Rosetta Energy Unit, REU)は、ワシントン大学が開発したタンパク質や酵素のデザインツール「Rosetta」で、タンパク質分子の構造エネルギーを評価するための指標です。
このスコアは、ファンデルワールス力、静電相互作用、水素結合などのエネルギー項の重み付き合計として計算され、スコアが低いほどタンパク質の構造が安定していることを示します。
PyRosstaの環境構築
環境構築はpythonのパッケージマネージャであるpipを使います。
公式サイトに従って、以下のコマンドを実行していきます。
pip install pyrosetta-installer
python -c 'import pyrosetta_installer; pyrosetta_installer.install_pyrosetta()'
pip install pyrosetta-distributed
詳細な手順は以下の通りです。
まず、PyRosetta Installerをインストールします。以下のコマンドをターミナルで実行してください。
pip install pyrosetta-installer
PyRosettaはサイズが大きいため、まずはpyrosetta-installer
という特殊なパッケージをインストールします。このパッケージ内にPyRosettaのインストールを実行するpyrosetta_install()
関数が含まれます。
次に、PyRosettaをインストールします。以下のコマンドを実行すると、ライセンスの取得や必要なファイルのダウンロードが行われます。
python -c 'import pyrosetta_installer; pyrosetta_installer.install_pyrosetta()'
続いて、PyRosetta Distributedをインストールします。これにより、分散処理の機能が利用可能になります。
pip install pyrosetta-distributed
最後に、インストールが完了したら、以下のコマンドでPyRosettaの初期化を行い、正常に動作するか確認します。Python環境で行なってください。
実行環境はJupyter Labで良いでしょう。Jupyter Labの環境構築の仕方はこちらを参照してください。
import pyrosetta
pyrosetta.init()
エラーが出ず、以下のような出力が得られれば、PyRosettaのインストールが成功しています。
┌──────────────────────────────────────────────────────────────────────────────┐
│ PyRosetta-4 │
│ Created in JHU by Sergey Lyskov and PyRosetta Team │
│ (C) Copyright Rosetta Commons Member Institutions │
│ │
│ NOTE: USE OF PyRosetta FOR COMMERCIAL PURPOSES REQUIRE PURCHASE OF A LICENSE │
│ See LICENSE.PyRosetta.md or email license@uw.edu for details │
└──────────────────────────────────────────────────────────────────────────────┘
PyRosetta-4 2024 [Rosetta PyRosetta4.Release.python310.ubuntu 2024.19+release.a34b73c40fe9c61558d566d6a63f803cfb15a4fc 2024-05-02T16:22:03] retrieved from: <http://www.pyrosetta.org>
core.init: Checking for fconfig files in pwd and ./rosetta/flags
core.init: Rosetta version: PyRosetta4.Release.python310.ubuntu r381 2024.19+release.a34b73c40f a34b73c40fe9c61558d566d6a63f803cfb15a4fc <http://www.pyrosetta.org> 2024-05-02T16:22:03
core.init: Rosetta extras: []
core.init: command: PyRosetta -ex1 -ex2aro -database /usr/local/lib/python3.10/dist-packages/pyrosetta/database
basic.random.init_random_generator: 'RNG device' seed mode, using '/dev/urandom', seed=1542852134 seed_offset=0 real_seed=1542852134
basic.random.init_random_generator: RandomGenerator:init: Normal mode, seed=1542852134 RG_type=mt19937
Jupyter labではこのような感じ
コードの詳細な説明:
pip install pyrosetta-installer
このコマンドは、pip
というPythonのパッケージ管理ツールを使って、pyrosetta-installer
というモジュールをインストールしています。
pip
: Pythonの標準的なパッケージ管理システムです。これを使って、Pythonの外部ライブラリをインターネットからインストールできます。install
: これはpipに「指定したパッケージをインストールせよ」という命令を出すオプションです。pyrosetta-installer
: PyRosettaのインストーラー用のパッケージで、PyRosetta自体をインストールするための補助ツールです。
python -c 'import pyrosetta_installer; pyrosetta_installer.install_pyrosetta()'
次に、このコマンドはインストールしたpyrosetta_installer
を使って、PyRosettaを実際にインストールしています。詳しく見てみましょう。
python -c
: Pythonインタープリタを起動して、c
オプションで指定されたPythonコードを実行する、という意味です。c
オプションは、コマンドラインから直接Pythonコードを指定して実行したいときに使います。
'import pyrosetta_installer; pyrosetta_installer.install_pyrosetta()'
: これは実行されるPythonコードの内容です。import pyrosetta_installer
: Pythonコードの一部で、先ほどpip install
でインストールしたpyrosetta_installer
モジュールをPythonプログラム内で使うためにインポートしています。pyrosetta_installer.install_pyrosetta()
:pyrosetta_installer
モジュール内のinstall_pyrosetta()
という関数を呼び出して、PyRosettaの本体をインストールしています。この関数が、PyRosettaの実際のインストール手順を処理してくれます。
pip install pyrosetta-distributed
最後に、pip
を使ってpyrosetta-distributed
パッケージをインストールしています。
pyrosetta-distributed
: PyRosettaを複数のコンピュータやプロセッサで分散処理できるようにするための追加モジュールです。これにより、例えば大規模なタンパク質設計の計算を複数のコンピュータで効率的に実行できるようになります。
PyRosettaによるエネルギー最小化とロゼッタスコアの出力
早速 pyRosettaを利用したタンパク質のエネルギー最小化とロゼッタスコアの出力をやっていきましょう!
今回は例として除草剤耐性を付与するためのEPSP合成酵素(EPSPシンターゼ)というタンパク質を使用します。
まずは、タンパク質の情報が記述されたPDBファイルを次のサイトから取得します。
サイトにアクセスし、以下のようにPDBファイルをダウンロードしてください。
5buf.pdb
というファイルがダウンロードされました。このファイルを実行するプログラムと同じ階層に配置してください。
続いて、以下のコードを実行していきます。
実行環境はJupyter Labで良いでしょう。Jupyter Labの環境構築の仕方はこちらを参照してください。
import pyrosetta
pyrosetta.init()
from pyrosetta import get_fa_scorefxn
#最小化前のエネルギー計算
pose = pyrosetta.pose_from_pdb("5buf.pdb")
ap_st = pyrosetta.rosetta.core.scoring.ScoreType.atom_pair_constraint
scorefxn = get_fa_scorefxn()
scorefxn.get_weight(ap_st)
vanilla_score = scorefxn(pose)
#最小化後のエネルギー計算
relax = pyrosetta.rosetta.protocols.relax.FastRelax()
relax.min_type("lbfgs_armijo_nonmonotone")
relax.set_scorefxn(scorefxn)
relax.apply(pose)
relaxed_score = scorefxn(pose)
詳細な手順は以下の通りです。
- PyRosettaの初期化
import pyrosetta
pyrosetta.init()
pyRosetta
は、RosettaソフトウェアスイートのPythonバインディングで、タンパク質構造の予測やエネルギー計算を行うために使用されます。pyrosetta.init()
は、このライブラリを初期化し、Rosetta内で使用されるスコア関数やエネルギー関数を使用可能にします。
- PDBファイルから構造を読み込む
pose = pyrosetta.pose_from_pdb("5buf.pdb")
pose_from_pdb
は、指定されたPDBファイル(この例では5buf.pdb
)からタンパク質の3次元構造を読み込むために使用されます。pose
は、タンパク質構造とその状態を保持するオブジェクトです。
- PDBファイル: タンパク質データバンク(PDB)に登録されているタンパク質の構造ファイル形式です。アミノ酸残基の座標や結合情報が含まれています。
- スコア関数の定義
ap_st = pyrosetta.rosetta.core.scoring.ScoreType.atom_pair_constraint
scorefxn = get_fa_scorefxn()
ここでは、pyRosetta
を使ってタンパク質構造のエネルギーを計算するためのスコア関数を定義しています。
ap_st = pyrosetta.rosetta.core.scoring.ScoreType.atom_pair_constraint
この行で、原子間の距離制約を評価するためのスコアタイプatom_pair_constraint
を設定しています。このスコアタイプは、特定の2つの原子間の距離が所定の制約を満たしているかを評価するために使用されます。scorefxn = get_fa_scorefxn()
get_fa_scorefxn()
は完全原子スコア関数(full-atom score function)を取得する関数で、タンパク質のエネルギー計算に用いられます。このスコア関数は、タンパク質の構造の安定性を示すエネルギー値を計算する際に使用されます。
- スコア関数の設定と計算
scorefxn.get_weight(ap_st)
vanilla_score = scorefxn(pose)
次に、スコア関数の設定と、実際にエネルギーを計算する部分を示します。
scorefxn.get_weight(ap_st)
この行では、scorefxn
が持つスコア関数の中で、原子ペア制約(atom pair constraint)がどれだけの重み(ウェイト)を持っているかを取得します。これにより、距離制約がエネルギー計算にどの程度影響を与えているかがわかります。vanilla_score = scorefxn(pose)
scorefxn(pose)
は、現在のpose
(タンパク質構造)に対してエネルギーを計算し、その結果をvanilla_score
に格納します。このvanilla_score
は、エネルギー最小化を行う前の初期スコアで、通常は負の値として出力されます。この値が低いほど、タンパク質構造が安定していることを示します。
- エネルギー最小化の実行
relax = pyrosetta.rosetta.protocols.relax.FastRelax()
relax.min_type("lbfgs_armijo_nonmonotone")
relax.set_scorefxn(scorefxn)
relax.apply(pose)
次に、set_scorefxn(scorefxn)
で使用するスコア関数を設定し、apply(pose)
によって最適化を実行します。
relax = pyrosetta.rosetta.protocols.relax.FastRelax()
この行では、FastRelax
オブジェクトを生成しています。FastRelax
はRosettaが提供する高速なエネルギー最小化プロトコルで、タンパク質構造を安定化させるために繰り返し最適化を行います。min_type("lbfgs_armijo_nonmonotone")
は、最適化のアルゴリズムにLBFGS(Limited-memory Broyden-Fletcher-Goldfarb-Shanno)法を指定しています。また、Armijo条件に基づいて非単調なステップを許容する設定を行っています。これにより、構造が安定したエネルギー状態に達するよう、効率よく最適化が進みます。- LBFGS法: メモリ効率が高い最適化アルゴリズムで、勾配情報を利用して目的関数を効率よく最小化します。特に変数が多い大規模な問題での収束が速いことが特徴です。
- Armijo条件: ステップサイズが適切かどうかを判断するための基準で、エネルギーが十分に減少するか確認する役割を果たします。これにより、最適化が安定しやすくなります。
set_scorefxn(scorefxn)
は、最適化の際に使用するスコア関数を設定しています。ここで設定したスコア関数は、エネルギー計算の基準として使用され、構造の評価や最小化において重要な役割を果たします。apply(pose)
は、実際にエネルギー最小化をpose
に対して実行します。pose
はタンパク質の現在の構造を表しており、この構造に対してエネルギーを最小化することで、より安定なエネルギー状態に近づけることができます。
実行結果
PyRosettaの実行結果から、タンパク質構造のエネルギー最小化とリラクゼーションプロセスが正常に行われていることが確認できます。
core.chemical.GlobalResidueTypeSet: Finished initializing fa_standard residue type set. Created 985 residue types
core.chemical.GlobalResidueTypeSet: Total time to initialize 0.616708 seconds.
core.import_pose.import_pose: File '5buf.pdb' automatically determined to be of type PDB
core.chemical.GlobalResidueTypeSet: Loading (but possibly not actually using) 'CL' from the PDB components dictionary for residue type 'pdb_CL'
core.io.pose_from_sfr.PoseFromSFRBuilder: [ WARNING ] discarding 1 atoms at position 989 in file 5buf.pdb. Best match rsd_type: HIS
core.scoring.ScoreFunctionFactory: SCOREFUNCTION: ref2015
core.scoring.etable: Starting energy table calculation
core.scoring.etable: smooth_etable: changing atr/rep split to bottom of energy well
core.scoring.etable: smooth_etable: spline smoothing lj etables (maxdis = 6)
core.scoring.etable: smooth_etable: spline smoothing solvation etables (max_dis = 6)
core.scoring.etable: Finished calculating energy tables.
basic.io.database: Database file opened: scoring/score_functions/hbonds/ref2015_params/HBPoly1D.csv
basic.io.database: Database file opened: scoring/score_functions/hbonds/ref2015_params/HBFadeIntervals.csv
basic.io.database: Database file opened: scoring/score_functions/hbonds/ref2015_params/HBEval.csv
basic.io.database: Database file opened: scoring/score_functions/hbonds/ref2015_params/DonStrength.csv
basic.io.database: Database file opened: scoring/score_functions/hbonds/ref2015_params/AccStrength.csv
basic.io.database: Database file opened: scoring/score_functions/rama/fd/all.ramaProb
basic.io.database: Database file opened: scoring/score_functions/rama/fd/prepro.ramaProb
basic.io.database: Database file opened: scoring/score_functions/omega/omega_ppdep.all.txt
basic.io.database: Database file opened: scoring/score_functions/omega/omega_ppdep.gly.txt
basic.io.database: Database file opened: scoring/score_functions/omega/omega_ppdep.pro.txt
basic.io.database: Database file opened: scoring/score_functions/omega/omega_ppdep.valile.txt
basic.io.database: Database file opened: scoring/score_functions/P_AA_pp/P_AA
basic.io.database: Database file opened: scoring/score_functions/P_AA_pp/P_AA_n
core.scoring.P_AA: shapovalov_lib::shap_p_aa_pp_smooth_level of 1( aka low_smooth ) got activated.
basic.io.database: Database file opened: scoring/score_functions/P_AA_pp/shapovalov/10deg/kappa131/a20.prop
basic.io.database: Database file opened: scoring/score_functions/elec_cp_reps.dat
core.scoring.elec.util: Read 40 countpair representative atoms
core.pack.dunbrack.RotamerLibrary: shapovalov_lib_fixes_enable option is true.
core.pack.dunbrack.RotamerLibrary: shapovalov_lib::shap_dun10_smooth_level of 1( aka lowest_smooth ) got activated.
core.pack.dunbrack.RotamerLibrary: Binary rotamer library selected: /opt/anaconda3/lib/python3.12/site-packages/pyrosetta/database/rotamer/shapovalov/StpDwn_0-0-0/Dunbrack10.lib.bin
core.pack.dunbrack.RotamerLibrary: Using Dunbrack library binary file '/opt/anaconda3/lib/python3.12/site-packages/pyrosetta/database/rotamer/shapovalov/StpDwn_0-0-0/Dunbrack10.lib.bin'.
core.pack.dunbrack.RotamerLibrary: Dunbrack 2010 library took 0.119641 seconds to load from binary
protocols.relax.RelaxScriptManager: Reading relax scripts list from database.
core.scoring.ScoreFunctionFactory: SCOREFUNCTION: ref2015
protocols.relax.RelaxScriptManager: Looking for MonomerRelax2019.txt
protocols.relax.RelaxScriptManager: ================== Reading script file: /opt/anaconda3/lib/python3.12/site-packages/pyrosetta/database/sampling/relax_scripts/MonomerRelax2019.txt ==================
protocols.relax.RelaxScriptManager: repeat %%nrepeats%%
protocols.relax.RelaxScriptManager: coord_cst_weight 1.0
protocols.relax.RelaxScriptManager: scale:fa_rep 0.040
protocols.relax.RelaxScriptManager: repack
protocols.relax.RelaxScriptManager: scale:fa_rep 0.051
protocols.relax.RelaxScriptManager: min 0.01
protocols.relax.RelaxScriptManager: coord_cst_weight 0.5
protocols.relax.RelaxScriptManager: scale:fa_rep 0.265
protocols.relax.RelaxScriptManager: repack
protocols.relax.RelaxScriptManager: scale:fa_rep 0.280
protocols.relax.RelaxScriptManager: min 0.01
protocols.relax.RelaxScriptManager: coord_cst_weight 0.0
protocols.relax.RelaxScriptManager: scale:fa_rep 0.559
protocols.relax.RelaxScriptManager: repack
protocols.relax.RelaxScriptManager: scale:fa_rep 0.581
protocols.relax.RelaxScriptManager: min 0.01
protocols.relax.RelaxScriptManager: coord_cst_weight 0.0
protocols.relax.RelaxScriptManager: scale:fa_rep 1
protocols.relax.RelaxScriptManager: repack
protocols.relax.RelaxScriptManager: min 0.00001
protocols.relax.RelaxScriptManager: accept_to_best
protocols.relax.RelaxScriptManager: endrepeat
protocols.relax.FastRelax: CMD: repeat -1373.41 0 0 0.55
protocols.relax.FastRelax: CMD: coord_cst_weight -1373.41 0 0 0.55
protocols.relax.FastRelax: CMD: scale:fa_rep -1744.77 0 0 0.022
core.pack.task: Packer task: initialize from command line()
core.pack.rotamer_set.RotamerSet_: Using simple Rotamer generation logic for pdb_CL
core.pack.rotamer_set.RotamerSet_: Using simple Rotamer generation logic for pdb_CL
core.pack.rotamer_set.RotamerSet_: Using simple Rotamer generation logic for pdb_CL
core.pack.rotamer_set.RotamerSet_: Using simple Rotamer generation logic for pdb_CL
core.pack.pack_rotamers: built 29406 rotamers at 894 positions.
core.pack.interaction_graph.interaction_graph_factory: Instantiating DensePDInteractionGraph
protocols.relax.FastRelax: CMD: repack -2673.91 0 0 0.022
protocols.relax.FastRelax: CMD: scale:fa_rep -2650.41 0 0 0.02805
core.optimization.Minimizer: [ WARNING ] LBFGS MAX CYCLES 2000 EXCEEDED, BUT FUNC NOT CONVERGED!
protocols.relax.FastRelax: CMD: min -4064.35 1.9105 1.9105 0.02805
protocols.relax.FastRelax: CMD: coord_cst_weight -4064.35 1.9105 1.9105 0.02805
protocols.relax.FastRelax: CMD: scale:fa_rep -2210.58 1.9105 1.9105 0.14575
core.pack.task: Packer task: initialize from command line()
core.pack.rotamer_set.RotamerSet_: Using simple Rotamer generation logic for pdb_CL
core.pack.rotamer_set.RotamerSet_: Using simple Rotamer generation logic for pdb_CL
core.pack.rotamer_set.RotamerSet_: Using simple Rotamer generation logic for pdb_CL
core.pack.rotamer_set.RotamerSet_: Using simple Rotamer generation logic for pdb_CL
core.pack.pack_rotamers: built 28980 rotamers at 894 positions.
core.pack.interaction_graph.interaction_graph_factory: Instantiating DensePDInteractionGraph
protocols.relax.FastRelax: CMD: repack -2315.8 1.9105 1.9105 0.14575
protocols.relax.FastRelax: CMD: scale:fa_rep -2200.41 1.9105 1.9105 0.154
protocols.relax.FastRelax: CMD: min -3341.21 1.30449 1.30449 0.154
protocols.relax.FastRelax: CMD: coord_cst_weight -3341.21 1.30449 1.30449 0.154
protocols.relax.FastRelax: CMD: scale:fa_rep -2847.22 1.30449 1.30449 0.30745
core.pack.task: Packer task: initialize from command line()
core.pack.rotamer_set.RotamerSet_: Using simple Rotamer generation logic for pdb_CL
core.pack.rotamer_set.RotamerSet_: Using simple Rotamer generation logic for pdb_CL
core.pack.rotamer_set.RotamerSet_: Using simple Rotamer generation logic for pdb_CL
core.pack.rotamer_set.RotamerSet_: Using simple Rotamer generation logic for pdb_CL
core.pack.pack_rotamers: built 27014 rotamers at 894 positions.
core.pack.interaction_graph.interaction_graph_factory: Instantiating DensePDInteractionGraph
protocols.relax.FastRelax: CMD: repack -2852.08 1.30449 1.30449 0.30745
protocols.relax.FastRelax: CMD: scale:fa_rep -2813.42 1.30449 1.30449 0.31955
protocols.relax.FastRelax: CMD: min -2977.28 1.06042 1.06042 0.31955
protocols.relax.FastRelax: CMD: coord_cst_weight -2977.28 1.06042 1.06042 0.31955
protocols.relax.FastRelax: CMD: scale:fa_rep -2571.57 1.06042 1.06042 0.55
core.pack.task: Packer task: initialize from command line()
core.pack.rotamer_set.RotamerSet_: Using simple Rotamer generation logic for pdb_CL
core.pack.rotamer_set.RotamerSet_: Using simple Rotamer generation logic for pdb_CL
core.pack.rotamer_set.RotamerSet_: Using simple Rotamer generation logic for pdb_CL
core.pack.rotamer_set.RotamerSet_: Using simple Rotamer generation logic for pdb_CL
core.pack.pack_rotamers: built 25880 rotamers at 894 positions.
core.pack.interaction_graph.interaction_graph_factory: Instantiating DensePDInteractionGraph
protocols.relax.FastRelax: CMD: repack -2572.73 1.06042 1.06042 0.55
protocols.relax.FastRelax: CMD: min -2686.91 0.861852 0.861852 0.55
protocols.relax.FastRelax: MRP: 0 -2686.91 -2686.91 0.861852 0.861852
protocols.relax.FastRelax: CMD: accept_to_best -2686.91 0.861852 0.861852 0.55
protocols.relax.FastRelax: CMD: endrepeat -2686.91 0.861852 0.861852 0.55
protocols.relax.FastRelax: CMD: coord_cst_weight -2686.91 0.861852 0.861852 0.55
protocols.relax.FastRelax: CMD: scale:fa_rep -3283.45 0.861852 0.861852 0.022
core.pack.task: Packer task: initialize from command line()
core.pack.rotamer_set.RotamerSet_: Using simple Rotamer generation logic for pdb_CL
core.pack.rotamer_set.RotamerSet_: Using simple Rotamer generation logic for pdb_CL
core.pack.rotamer_set.RotamerSet_: Using simple Rotamer generation logic for pdb_CL
core.pack.rotamer_set.RotamerSet_: Using simple Rotamer generation logic for pdb_CL
core.pack.pack_rotamers: built 29666 rotamers at 894 positions.
core.pack.interaction_graph.interaction_graph_factory: Instantiating DensePDInteractionGraph
protocols.relax.FastRelax: CMD: repack -3364.26 0.861852 0.861852 0.022
protocols.relax.FastRelax: CMD: scale:fa_rep -3345.87 0.861852 0.861852 0.02805
core.optimization.Minimizer: [ WARNING ] LBFGS MAX CYCLES 2000 EXCEEDED, BUT FUNC NOT CONVERGED!
protocols.relax.FastRelax: CMD: min -4183.04 2.05486 2.05486 0.02805
protocols.relax.FastRelax: CMD: coord_cst_weight -4183.04 2.05486 2.05486 0.02805
protocols.relax.FastRelax: CMD: scale:fa_rep -2350.27 2.05486 2.05486 0.14575
core.pack.task: Packer task: initialize from command line()
core.pack.rotamer_set.RotamerSet_: Using simple Rotamer generation logic for pdb_CL
core.pack.rotamer_set.RotamerSet_: Using simple Rotamer generation logic for pdb_CL
core.pack.rotamer_set.RotamerSet_: Using simple Rotamer generation logic for pdb_CL
core.pack.rotamer_set.RotamerSet_: Using simple Rotamer generation logic for pdb_CL
core.pack.pack_rotamers: built 28895 rotamers at 894 positions.
core.pack.interaction_graph.interaction_graph_factory: Instantiating DensePDInteractionGraph
protocols.relax.FastRelax: CMD: repack -2426.47 2.05486 2.05486 0.14575
protocols.relax.FastRelax: CMD: scale:fa_rep -2307.45 2.05486 2.05486 0.154
protocols.relax.FastRelax: CMD: min -3405.13 1.29578 1.29578 0.154
protocols.relax.FastRelax: CMD: coord_cst_weight -3405.13 1.29578 1.29578 0.154
protocols.relax.FastRelax: CMD: scale:fa_rep -2896.52 1.29578 1.29578 0.30745
core.pack.task: Packer task: initialize from command line()
core.pack.rotamer_set.RotamerSet_: Using simple Rotamer generation logic for pdb_CL
core.pack.rotamer_set.RotamerSet_: Using simple Rotamer generation logic for pdb_CL
core.pack.rotamer_set.RotamerSet_: Using simple Rotamer generation logic for pdb_CL
core.pack.rotamer_set.RotamerSet_: Using simple Rotamer generation logic for pdb_CL
core.pack.pack_rotamers: built 26521 rotamers at 894 positions.
core.pack.interaction_graph.interaction_graph_factory: Instantiating DensePDInteractionGraph
protocols.relax.FastRelax: CMD: repack -2900.65 1.29578 1.29578 0.30745
protocols.relax.FastRelax: CMD: scale:fa_rep -2861.12 1.29578 1.29578 0.31955
protocols.relax.FastRelax: CMD: min -3032.89 1.06632 1.06632 0.31955
protocols.relax.FastRelax: CMD: coord_cst_weight -3032.89 1.06632 1.06632 0.31955
protocols.relax.FastRelax: CMD: scale:fa_rep -2618.28 1.06632 1.06632 0.55
core.pack.task: Packer task: initialize from command line()
core.pack.rotamer_set.RotamerSet_: Using simple Rotamer generation logic for pdb_CL
core.pack.rotamer_set.RotamerSet_: Using simple Rotamer generation logic for pdb_CL
core.pack.rotamer_set.RotamerSet_: Using simple Rotamer generation logic for pdb_CL
core.pack.rotamer_set.RotamerSet_: Using simple Rotamer generation logic for pdb_CL
core.pack.pack_rotamers: built 24933 rotamers at 894 positions.
core.pack.interaction_graph.interaction_graph_factory: Instantiating DensePDInteractionGraph
protocols.relax.FastRelax: CMD: repack -2617.12 1.06632 1.06632 0.55
protocols.relax.FastRelax: CMD: min -2713.98 0.944481 0.944481 0.55
protocols.relax.FastRelax: MRP: 1 -2713.98 -2713.98 0.944481 0.944481
protocols.relax.FastRelax: CMD: accept_to_best -2713.98 0.944481 0.944481 0.55
protocols.relax.FastRelax: CMD: endrepeat -2713.98 0.944481 0.944481 0.55
protocols.relax.FastRelax: CMD: coord_cst_weight -2713.98 0.944481 0.944481 0.55
protocols.relax.FastRelax: CMD: scale:fa_rep -3331.86 0.944481 0.944481 0.022
core.pack.task: Packer task: initialize from command line()
core.pack.rotamer_set.RotamerSet_: Using simple Rotamer generation logic for pdb_CL
core.pack.rotamer_set.RotamerSet_: Using simple Rotamer generation logic for pdb_CL
core.pack.rotamer_set.RotamerSet_: Using simple Rotamer generation logic for pdb_CL
core.pack.rotamer_set.RotamerSet_: Using simple Rotamer generation logic for pdb_CL
core.pack.pack_rotamers: built 28970 rotamers at 894 positions.
core.pack.interaction_graph.interaction_graph_factory: Instantiating DensePDInteractionGraph
protocols.relax.FastRelax: CMD: repack -3392.52 0.944481 0.944481 0.022
protocols.relax.FastRelax: CMD: scale:fa_rep -3374.49 0.944481 0.944481 0.02805
core.optimization.Minimizer: [ WARNING ] LBFGS MAX CYCLES 2000 EXCEEDED, BUT FUNC NOT CONVERGED!
protocols.relax.FastRelax: CMD: min -4210.81 2.08368 2.08368 0.02805
protocols.relax.FastRelax: CMD: coord_cst_weight -4210.81 2.08368 2.08368 0.02805
protocols.relax.FastRelax: CMD: scale:fa_rep -2347.39 2.08368 2.08368 0.14575
core.pack.task: Packer task: initialize from command line()
core.pack.rotamer_set.RotamerSet_: Using simple Rotamer generation logic for pdb_CL
core.pack.rotamer_set.RotamerSet_: Using simple Rotamer generation logic for pdb_CL
core.pack.rotamer_set.RotamerSet_: Using simple Rotamer generation logic for pdb_CL
core.pack.rotamer_set.RotamerSet_: Using simple Rotamer generation logic for pdb_CL
core.pack.pack_rotamers: built 28874 rotamers at 894 positions.
core.pack.interaction_graph.interaction_graph_factory: Instantiating DensePDInteractionGraph
protocols.relax.FastRelax: CMD: repack -2431.49 2.08368 2.08368 0.14575
protocols.relax.FastRelax: CMD: scale:fa_rep -2312.34 2.08368 2.08368 0.154
protocols.relax.FastRelax: CMD: min -3418.25 1.36885 1.36885 0.154
protocols.relax.FastRelax: CMD: coord_cst_weight -3418.25 1.36885 1.36885 0.154
protocols.relax.FastRelax: CMD: scale:fa_rep -2906.88 1.36885 1.36885 0.30745
core.pack.task: Packer task: initialize from command line()
core.pack.rotamer_set.RotamerSet_: Using simple Rotamer generation logic for pdb_CL
core.pack.rotamer_set.RotamerSet_: Using simple Rotamer generation logic for pdb_CL
core.pack.rotamer_set.RotamerSet_: Using simple Rotamer generation logic for pdb_CL
core.pack.rotamer_set.RotamerSet_: Using simple Rotamer generation logic for pdb_CL
core.pack.pack_rotamers: built 26669 rotamers at 894 positions.
core.pack.interaction_graph.interaction_graph_factory: Instantiating DensePDInteractionGraph
protocols.relax.FastRelax: CMD: repack -2908.42 1.36885 1.36885 0.30745
protocols.relax.FastRelax: CMD: scale:fa_rep -2868.3 1.36885 1.36885 0.31955
protocols.relax.FastRelax: CMD: min -3024.32 1.13374 1.13374 0.31955
protocols.relax.FastRelax: CMD: coord_cst_weight -3024.32 1.13374 1.13374 0.31955
protocols.relax.FastRelax: CMD: scale:fa_rep -2600.17 1.13374 1.13374 0.55
core.pack.task: Packer task: initialize from command line()
core.pack.rotamer_set.RotamerSet_: Using simple Rotamer generation logic for pdb_CL
core.pack.rotamer_set.RotamerSet_: Using simple Rotamer generation logic for pdb_CL
core.pack.rotamer_set.RotamerSet_: Using simple Rotamer generation logic for pdb_CL
core.pack.rotamer_set.RotamerSet_: Using simple Rotamer generation logic for pdb_CL
core.pack.pack_rotamers: built 24938 rotamers at 894 positions.
core.pack.interaction_graph.interaction_graph_factory: Instantiating DensePDInteractionGraph
protocols.relax.FastRelax: CMD: repack -2602.14 1.13374 1.13374 0.55
protocols.relax.FastRelax: CMD: min -2712.88 1.02087 1.02087 0.55
protocols.relax.FastRelax: MRP: 2 -2712.88 -2713.98 0.944481 0.944481
protocols.relax.FastRelax: CMD: accept_to_best -2712.88 1.02087 1.02087 0.55
protocols.relax.FastRelax: CMD: endrepeat -2712.88 1.02087 1.02087 0.55
protocols.relax.FastRelax: CMD: coord_cst_weight -2712.88 1.02087 1.02087 0.55
protocols.relax.FastRelax: CMD: scale:fa_rep -3333.99 1.02087 1.02087 0.022
core.pack.task: Packer task: initialize from command line()
core.pack.rotamer_set.RotamerSet_: Using simple Rotamer generation logic for pdb_CL
core.pack.rotamer_set.RotamerSet_: Using simple Rotamer generation logic for pdb_CL
core.pack.rotamer_set.RotamerSet_: Using simple Rotamer generation logic for pdb_CL
core.pack.rotamer_set.RotamerSet_: Using simple Rotamer generation logic for pdb_CL
core.pack.pack_rotamers: built 29122 rotamers at 894 positions.
core.pack.interaction_graph.interaction_graph_factory: Instantiating DensePDInteractionGraph
protocols.relax.FastRelax: CMD: repack -3391.42 1.02087 1.02087 0.022
protocols.relax.FastRelax: CMD: scale:fa_rep -3378.42 1.02087 1.02087 0.02805
core.optimization.Minimizer: [ WARNING ] LBFGS MAX CYCLES 2000 EXCEEDED, BUT FUNC NOT CONVERGED!
protocols.relax.FastRelax: CMD: min -4221.95 2.11363 2.11363 0.02805
protocols.relax.FastRelax: CMD: coord_cst_weight -4221.95 2.11363 2.11363 0.02805
protocols.relax.FastRelax: CMD: scale:fa_rep -2348.38 2.11363 2.11363 0.14575
core.pack.task: Packer task: initialize from command line()
core.pack.rotamer_set.RotamerSet_: Using simple Rotamer generation logic for pdb_CL
core.pack.rotamer_set.RotamerSet_: Using simple Rotamer generation logic for pdb_CL
core.pack.rotamer_set.RotamerSet_: Using simple Rotamer generation logic for pdb_CL
core.pack.rotamer_set.RotamerSet_: Using simple Rotamer generation logic for pdb_CL
core.pack.pack_rotamers: built 28878 rotamers at 894 positions.
core.pack.interaction_graph.interaction_graph_factory: Instantiating DensePDInteractionGraph
protocols.relax.FastRelax: CMD: repack -2412.09 2.11363 2.11363 0.14575
protocols.relax.FastRelax: CMD: scale:fa_rep -2289.04 2.11363 2.11363 0.154
protocols.relax.FastRelax: CMD: min -3421.15 1.414 1.414 0.154
protocols.relax.FastRelax: CMD: coord_cst_weight -3421.15 1.414 1.414 0.154
protocols.relax.FastRelax: CMD: scale:fa_rep -2906.6 1.414 1.414 0.30745
core.pack.task: Packer task: initialize from command line()
core.pack.rotamer_set.RotamerSet_: Using simple Rotamer generation logic for pdb_CL
core.pack.rotamer_set.RotamerSet_: Using simple Rotamer generation logic for pdb_CL
core.pack.rotamer_set.RotamerSet_: Using simple Rotamer generation logic for pdb_CL
core.pack.rotamer_set.RotamerSet_: Using simple Rotamer generation logic for pdb_CL
core.pack.pack_rotamers: built 26728 rotamers at 894 positions.
core.pack.interaction_graph.interaction_graph_factory: Instantiating DensePDInteractionGraph
protocols.relax.FastRelax: CMD: repack -2909.1 1.414 1.414 0.30745
protocols.relax.FastRelax: CMD: scale:fa_rep -2868.87 1.414 1.414 0.31955
protocols.relax.FastRelax: CMD: min -3024.92 1.20462 1.20462 0.31955
protocols.relax.FastRelax: CMD: coord_cst_weight -3024.92 1.20462 1.20462 0.31955
protocols.relax.FastRelax: CMD: scale:fa_rep -2598.03 1.20462 1.20462 0.55
core.pack.task: Packer task: initialize from command line()
core.pack.rotamer_set.RotamerSet_: Using simple Rotamer generation logic for pdb_CL
core.pack.rotamer_set.RotamerSet_: Using simple Rotamer generation logic for pdb_CL
core.pack.rotamer_set.RotamerSet_: Using simple Rotamer generation logic for pdb_CL
core.pack.rotamer_set.RotamerSet_: Using simple Rotamer generation logic for pdb_CL
core.pack.pack_rotamers: built 25113 rotamers at 894 positions.
core.pack.interaction_graph.interaction_graph_factory: Instantiating DensePDInteractionGraph
protocols.relax.FastRelax: CMD: repack -2599.24 1.20462 1.20462 0.55
protocols.relax.FastRelax: CMD: min -2710.52 1.13441 1.13441 0.55
protocols.relax.FastRelax: MRP: 3 -2710.52 -2713.98 0.944481 0.944481
protocols.relax.FastRelax: CMD: accept_to_best -2710.52 1.13441 1.13441 0.55
protocols.relax.FastRelax: CMD: endrepeat -2710.52 1.13441 1.13441 0.55
protocols.relax.FastRelax: CMD: coord_cst_weight -2710.52 1.13441 1.13441 0.55
protocols.relax.FastRelax: CMD: scale:fa_rep -3339.12 1.13441 1.13441 0.022
core.pack.task: Packer task: initialize from command line()
core.pack.rotamer_set.RotamerSet_: Using simple Rotamer generation logic for pdb_CL
core.pack.rotamer_set.RotamerSet_: Using simple Rotamer generation logic for pdb_CL
core.pack.rotamer_set.RotamerSet_: Using simple Rotamer generation logic for pdb_CL
core.pack.rotamer_set.RotamerSet_: Using simple Rotamer generation logic for pdb_CL
core.pack.pack_rotamers: built 29192 rotamers at 894 positions.
core.pack.interaction_graph.interaction_graph_factory: Instantiating DensePDInteractionGraph
protocols.relax.FastRelax: CMD: repack -3395.65 1.13441 1.13441 0.022
protocols.relax.FastRelax: CMD: scale:fa_rep -3382.09 1.13441 1.13441 0.02805
core.optimization.Minimizer: [ WARNING ] LBFGS MAX CYCLES 2000 EXCEEDED, BUT FUNC NOT CONVERGED!
protocols.relax.FastRelax: CMD: min -4223.93 2.0758 2.0758 0.02805
protocols.relax.FastRelax: CMD: coord_cst_weight -4223.93 2.0758 2.0758 0.02805
protocols.relax.FastRelax: CMD: scale:fa_rep -2379.8 2.0758 2.0758 0.14575
core.pack.task: Packer task: initialize from command line()
core.pack.rotamer_set.RotamerSet_: Using simple Rotamer generation logic for pdb_CL
core.pack.rotamer_set.RotamerSet_: Using simple Rotamer generation logic for pdb_CL
core.pack.rotamer_set.RotamerSet_: Using simple Rotamer generation logic for pdb_CL
core.pack.rotamer_set.RotamerSet_: Using simple Rotamer generation logic for pdb_CL
core.pack.pack_rotamers: built 29053 rotamers at 894 positions.
core.pack.interaction_graph.interaction_graph_factory: Instantiating DensePDInteractionGraph
protocols.relax.FastRelax: CMD: repack -2448.8 2.0758 2.0758 0.14575
protocols.relax.FastRelax: CMD: scale:fa_rep -2329.52 2.0758 2.0758 0.154
protocols.relax.FastRelax: CMD: min -3419.19 1.45798 1.45798 0.154
protocols.relax.FastRelax: CMD: coord_cst_weight -3419.19 1.45798 1.45798 0.154
protocols.relax.FastRelax: CMD: scale:fa_rep -2906.46 1.45798 1.45798 0.30745
core.pack.task: Packer task: initialize from command line()
core.pack.rotamer_set.RotamerSet_: Using simple Rotamer generation logic for pdb_CL
core.pack.rotamer_set.RotamerSet_: Using simple Rotamer generation logic for pdb_CL
core.pack.rotamer_set.RotamerSet_: Using simple Rotamer generation logic for pdb_CL
core.pack.rotamer_set.RotamerSet_: Using simple Rotamer generation logic for pdb_CL
core.pack.pack_rotamers: built 26732 rotamers at 894 positions.
core.pack.interaction_graph.interaction_graph_factory: Instantiating DensePDInteractionGraph
protocols.relax.FastRelax: CMD: repack -2909.22 1.45798 1.45798 0.30745
protocols.relax.FastRelax: CMD: scale:fa_rep -2869.16 1.45798 1.45798 0.31955
protocols.relax.FastRelax: CMD: min -3031.59 1.2355 1.2355 0.31955
protocols.relax.FastRelax: CMD: coord_cst_weight -3031.59 1.2355 1.2355 0.31955
protocols.relax.FastRelax: CMD: scale:fa_rep -2610.84 1.2355 1.2355 0.55
core.pack.task: Packer task: initialize from command line()
core.pack.rotamer_set.RotamerSet_: Using simple Rotamer generation logic for pdb_CL
core.pack.rotamer_set.RotamerSet_: Using simple Rotamer generation logic for pdb_CL
core.pack.rotamer_set.RotamerSet_: Using simple Rotamer generation logic for pdb_CL
core.pack.rotamer_set.RotamerSet_: Using simple Rotamer generation logic for pdb_CL
core.pack.pack_rotamers: built 25391 rotamers at 894 positions.
core.pack.interaction_graph.interaction_graph_factory: Instantiating DensePDInteractionGraph
protocols.relax.FastRelax: CMD: repack -2611.6 1.2355 1.2355 0.55
protocols.relax.FastRelax: CMD: min -2701.78 1.11857 1.11857 0.55
protocols.relax.FastRelax: MRP: 4 -2701.78 -2713.98 0.944481 0.944481
protocols.relax.FastRelax: CMD: accept_to_best -2701.78 1.11857 1.11857 0.55
protocols.relax.FastRelax: CMD: endrepeat -2701.78 1.11857 1.11857 0.55
protocols::checkpoint: Deleting checkpoints of FastRelax
-2713.9782592819893
実行結果の詳細な説明:
出力されたログは、PyRosetta の FastRelax
プロトコルが正常に実行され、最終的なスコア(エネルギー値)が -2713.9782592819893
であることを示しています。以下に、重要なポイントを簡単に解説します。
1. PyRosetta の初期化と PDB 読み込み
core.import_pose.import_pose: File '5buf.pdb' automatically determined to be of type PDB
5buf.pdb
ファイルが正常に読み込まれ、Pose オブジェクトとして処理されています。- HIS 残基の一部で原子情報が欠損していることが警告されていますが、これは通常問題ありません。
2. スコアリング関数の設定
core.scoring.ScoreFunctionFactory: SCOREFUNCTION: ref201
`ref2015` は、PyRosetta で一般的に使用される完全原子スコアリング関数で、タンパク質の物理的エネルギーを評価します。
3. Dunbrack 回転異性体ライブラリのロード
core.pack.dunbrack.RotamerLibrary: Dunbrack 2010 library took 0.119641 seconds to load from binary
Dunbrack 回転異性体ライブラリは、タンパク質の側鎖コンフォメーションを生成するために使用されるデータベースです。
4. FastRelax プロトコルの実行
protocols.relax.FastRelax: CMD: ...
FastRelax
プロトコルでは、エネルギー最小化(min
)やパッキング(repack
)を繰り返し実行します。- 最適化の過程でエネルギーが次第に低下し、構造がより安定化します。
警告で以下が出ています。
core.optimization.Minimizer: [ WARNING ] LBFGS MAX CYCLES 2000 EXCEEDED, BUT FUNC NOT CONVERGED!
L-BFGS 最適化アルゴリズムで、最大反復回数(2000回)に到達しても収束しなかったことを示しています。ただし、プロトコルの進行には致命的な問題ではありません。
5. 最終スコア
-2713.9782592819893
- FastRelax プロトコルの実行後に計算されたスコア(エネルギー値)です。
- スコアが低いほど、構造がエネルギー的に安定していることを意味します。
ログ内の繰り返し
FastRelax では、次の手順を繰り返します:
- スコアリング関数の設定(
coord_cst_weight
,scale:fa_rep
など) - リパッキング(
repack
): 側鎖のコンフォメーションを再構築します。 - エネルギー最小化(
min
): 構造全体を調整してエネルギーを削減します。 - ベスト構造の保存(
accept_to_best
)
最小化構造の保存
最後に以下を実行して、最小化された構造を保存してください。
エネルギー最小化されたの構造を保存:
pose.dump_pdb("relaxed_5buf.pdb")
これにより、エネルギー最小化された構造が relaxed_5buf.pdb
という名前で保存されます。
以下に元々の構造(黄緑)、エネルギー最小化した構造(水色)を比較しました。
最後に
この記事では、PyRosettaを用いた分子モデリングの基本プロセスを解説しました。セットアップ方法やエネルギー最小化、ロゼッタスコアの計算手順について、具体的なコード例と実行結果、タンパク質構造の出力を通して理解できる内容となっています。PyRosettaを活用することで、タンパク質の構造予測やエネルギー安定化を効率的に行う方法を学び、分子モデリングのスキルを実践的に向上させることができます。
参考文献
Tweaking AlphaFold2 models with PyRosetta
自宅でできるin silico創薬の技術書を販売中
新薬探索を試したい方必読!
ITエンジニアである著者の視点から、wetな研究者からもdryの創薬研究をわかりやすく身近に感じられるように解説しています