Overview
在这个章节,将利用RosettaScripts 使用参数对蛋白进行设计。这里来自Rosetta 的代码的作者是Vikram Mulligan。BundleGridSampler 和 MakeBundle在pyrosetta中是可以使用的,因为有太多的参数要选择,所以使用XML会更简单一点。
RosettaScripts
MakeBundleMover
BundleGridSamplerMover
参数采样意味着更改bundles的特定角度,以便采样不同的构象。用于参数采样的方程最初由Crick描述,称为Crick方程。
Parameter tips (From Vikram himself)
- Most bundles would have r0 from 3 to 10 A (depending on the helix count).
- Omega0 should range from about -2.5 degrees to 2.5 degrees.
- Delta_omega1 can be anywhere from 0 to 360. (It's just the roll of the helix about its own axis).
- Delta_z0, delta_z1 or delta_t can be anything (you're just sliding the helix up and down). Typically, you'd just sample around a few Angstroms, though.
- r1, omega1, etc. are all minor helix parameters that are tied to the secondary structure. We don't normally vary them.
Creating multiple Helices
Helix lines告诉采样器如何去创建一个螺旋结构。我们将他们设置为90度的转角,同样可以添加上述的参数。
**delta_omega0: ** 在Z轴上螺旋的Rotation。
Changing r0:
r0: 主要的螺旋半径
在这里,我们将在r0轴上进行采样。为了使其更容易,我们将将dump_pdbs设置为1。将设置r0而不是r0_max和min。
pose = pyrosetta.rosetta.core.pose.Pose()
pyrosetta.rosetta.protocols.rosetta_scripts.XmlObjects.create_from_string("""
<SCOREFXNS>
<ScoreFunction name="sfxn1" weights="ref2015"/>
</SCOREFXNS>
<MOVERS>
<BundleGridSampler name="bgs1"
helix_length="20"
scorefxn="sfxn1"
r0_min="1.0"
r0_max="10.0"
r0_samples="10"
omega0="0.05"
delta_omega0="0"
delta_omega1="0"
delta_t="0"
dump_pdbs="1">
<Helix/>
<Helix delta_omega0="3.14" r0_copies_helix="1"/>
</BundleGridSampler>
</MOVERS>
""").get_mover("bgs1").apply(pose)
好的,所以现在让我们看看这个 - 它很快,因为我们只是在操纵骨干并进行任何序列设计。
Changing omega0
现在将通过代码来修改参数,使用MakeBundle mover.
我们将使用Python3中速度很快的f-strings,因为我们需要解析XML对象并创建一个新的mover,pose等,这都比采样器慢得多 。但这确实使我们有更多的灵活性,可以按照它的方式使用Python。
omega0:每个氨基酸残基的主要螺旋扭转,储存在弧度中。
import math
for i in range(0, 32, 2):
i_rad = math.radians(i)
pose = pyrosetta.rosetta.core.pose.Pose()
sampler_string = f'''
<SCOREFXNS>
<ScoreFunction name="sfxn1" weights="ref2015"/>
</SCOREFXNS>
<MOVERS>
<MakeBundle name="bgs1"
helix_length="20"
r0="5"
omega0="{i_rad}"
delta_omega0="0"
delta_omega1="0"
delta_t="0">
<Helix/>
<Helix delta_omega0="3.14" r0_copies_helix="1"/>
</MakeBundle>
</MOVERS>'''
print(sampler_string)
pyrosetta.rosetta.protocols.rosetta_scripts.XmlObjects.create_from_string(sampler_string).get_mover("bgs1").apply(pose)
pose.dump_pdb('outputs/omega0_'+str(i)+'.pdb')
MakeBundle Mover in PyRosetta
好的,我们对如何使用代码创建一些螺旋骨干有一个想法。让我们通过代码而不是通过rosettascript尝试一下。
BPC_xx 为我们上面看到的选项。如果我们设置mb.set_use_degrees(True)之后,就不用设置 math.radians()了
from pyrosetta.rosetta.protocols.helical_bundle import *
import math
pose = pyrosetta.rosetta.core.pose.Pose()
mb = MakeBundle()
mb.add_helix()
mb.add_helix()
mb.helix(2).calculator_op().real_parameter(BPC_delta_omega0).set_value(3.14)
for i in range(1, 3):
mb.helix(i).set_helix_length(20)
mb.helix(i).calculator_op().real_parameter(BPC_r0).set_value(5)
mb.helix(i).calculator_op().real_parameter(BPC_omega0).set_value(math.radians(12))
mb.apply(pose)
pose.dump_pdb("outputs/manual_make_bundle.pdb")