首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >分子对接PyRosetta--Introduction to Folding

分子对接PyRosetta--Introduction to Folding

原创
作者头像
追风少年i
发布2025-09-24 10:12:07
发布2025-09-24 10:12:07
11800
代码可运行
举报
运行总次数:0
代码可运行

作者,Evil Genius

今天我们继续分子对接,这一部分是折叠,折叠部分的内容也是相当的深,我们后续慢慢扩展。

蛋白质折叠入门

其一为搜索策略,即一种能够生成大量候选结构(或称“诱饵”结构)的算法;

其二为评分函数,用以从所有结构中筛选出接近天然结构的构象。

Basic Folding Algorithm

Keywords: pose_from_sequence(), random move, scoring move, Metropolis, assign(), Pose()

代码语言:javascript
代码运行次数:0
运行
复制
!pip install pyrosettacolabsetup
import pyrosettacolabsetup; pyrosettacolabsetup.install_pyrosetta()
import pyrosetta; pyrosetta.init()
from pyrosetta import *
from pyrosetta.teaching import *
init()

构象构建

通过构建一个简单的从头折叠算法来折叠一个含10个残基的蛋白质。按常规方式初始化PyRosetta。

创建一个包含10个残基的简单聚丙氨酸构象,用于测试折叠算法。将该构象存储在名为"polyA"的变量中。

代码语言:javascript
代码运行次数:0
运行
复制
### BEGIN SOLUTION
polyA = pyrosetta.pose_from_sequence('A' * 10)
### END SOLUTION

polyA.pdb_info().name("polyA")

### BEGIN SOLUTION
print("phi: %i" %polyA.phi(9))
print("psi: %i" %polyA.psi(9))
### END SOLUTION

phi: 180
psi: 180

可选任务:可能希望实时可视化折叠过程。在开始折叠流程之前,实例化一个PyMOL移动器,并使用10,000到65,536之间的唯一端口号。通过调用.keep_history()方法保留历史记录,以便查看完整的折叠过程。请确保PyMOL命令行显示"PyMOL <---> PyRosetta链接已启动!"。

代码语言:javascript
代码运行次数:0
运行
复制
pmm = PyMOLMover()
pmm.keep_history(True)

使用PyMOL移动器查看polyA构象。将在PyMOL中看到一个线状的延伸结构。

代码语言:javascript
代码运行次数:0
运行
复制
pmm.apply(polyA)

构建基础从头折叠算法

写一个程序来实现蒙特卡洛算法,以优化蛋白质构象。

主程序将包含 100 次迭代,每次迭代包括:进行一次随机尝试性移动、对蛋白质进行评分、以及决定接受或拒绝该移动。因此,可以将此算法分解为三个较小的子程序:随机移动、评分和决策。

步骤 1:随机移动

对于随机尝试性移动,请编写一个子程序,使用 random.randint() 随机选择一个残基,然后使用来自 random 库的 Python 内置函数 random.gauss()(以当前角度为均值,25° 为标准差)生成一个随机数,来随机扰动该残基的 φ 角或 ψ 角。更改扭转角后,使用 pmm.apply(polyA) 更新 PyMOL 中的结构。

代码语言:javascript
代码运行次数:0
运行
复制
import math
import random

def randTrial(your_pose):
### BEGIN SOLUTION
    randNum = random.randint(2, your_pose.total_residue())
    currPhi = your_pose.phi(randNum)
    currPsi = your_pose.psi(randNum)
    newPhi = random.gauss(currPhi, 25)
    newPsi = random.gauss(currPsi, 25)
    your_pose.set_phi(randNum,newPhi) 
    your_pose.set_psi(randNum,newPsi)
    pmm.apply(your_pose)
### END SOLUTION
    return your_pose

步骤 2:对移动进行评分

创建一个评分函数,并编写一个子程序,该子程序只需返回构象的数值化能量得分。

代码语言:javascript
代码运行次数:0
运行
复制
sfxn = get_fa_scorefxn()

def score(your_pose):
    ### BEGIN SOLUTION
    return sfxn(your_pose)
    ### END SOLUTION

步骤 3:接受/拒绝移动

在决策步骤中,编写一个子程序,根据 Metropolis 准则来决定是接受还是拒绝新构象。Metropolis 准则接受移动的概率为 P = exp(-ΔE / kT):

  • 当 ΔE ≥ 0(新构象能量更高或相等)时,接受该移动的概率为 P = exp(-ΔE / kT)。
  • 当 ΔE < 0(新构象能量更低)时,接受该移动的概率为 P = 1(即总是接受)。

请使用 kT = 1 Rosetta Energy Unit (REU).。

代码语言:javascript
代码运行次数:0
运行
复制
def decision(before_pose, after_pose):
    ### BEGIN SOLUTION
    E = score(after_pose) - score(before_pose)
    if E < 0:
        return after_pose
    elif random.uniform(0, 1) >= math.exp(-E/1):
        return before_pose
    else:
        return after_pose
    ### END SOLUTION

步骤 4:执行

将这三个子程序整合到主程序中!在主程序中编写一个循环,使其执行 100 次迭代,每次迭代包括:进行一次随机尝试性移动、对蛋白质进行评分、以及接受或拒绝该移动。

在每次搜索迭代之后,输出当前构象的能量和迄今为止观察到的最低能量。此程序的最终输出应是在模拟过程中任意时刻达到的最低能量构象。请务必使用 low_pose.assign(pose) 来保存该最低能量构象,而不是使用 low_pose = pose,因为后者只会复制指向原始构象的指针。

代码语言:javascript
代码运行次数:0
运行
复制
def basic_folding(your_pose):
    """Your basic folding algorithm that completes 100 Monte-Carlo iterations on a given pose"""
    
    lowest_pose = Pose() # Create an empty pose for tracking the lowest energy pose.
    
    ### BEGIN SOLUTION
    for i in range(100):
        if i == 0:
            lowest_pose.assign(your_pose)
            
        before_pose = Pose()
        before_pose.assign(your_pose) # keep track of pose before random move

        after_pose = Pose()
        after_pose.assign(randTrial(your_pose)) # do random move and store the pose
        
        your_pose.assign(decision(before_pose, after_pose)) # keep the new pose or old pose
        
        if score(your_pose) < score(lowest_pose): # updating lowest pose
            lowest_pose.assign(your_pose)
        
        print("Iteration # %i" %i) # output   
        print("Current pose score: %1.3f" %score(your_pose)) # output
        print("Lowest pose score: %1.3f" %score(lowest_pose)) # output
        
    ### END SOLUTION
    return lowest_pose

最后,输出最终构象和观测到的最低评分构象,并在PyMOL中查看它们。绘制能量和观测到的最低能量随循环次数的变化图。

代码语言:javascript
代码运行次数:0
运行
复制
from IPython.display import Image
Image('./Media/folding.gif',width='300')

练习1:与α螺旋结构对比

编写程序,将A10序列强制折叠成一个理想的α螺旋结构。

代码语言:javascript
代码运行次数:0
运行
复制
import pyrosetta
from pyrosetta import pose_from_sequence

# 初始化
pyrosetta.init()

# 创建10个丙氨酸的序列
sequence = "AAAAAAAAAA"

# 创建pose
pose = pose_from_sequence(sequence, 'fa_standard')

# 设置α螺旋的理想二面角
for i in range(1, 11):  # 10个残基
    if i > 1:  # 第一个残基没有φ角
        pose.set_phi(i, -57.0)  # α螺旋的典型φ角
    if i < 10:  # 最后一个残基没有ψ角  
        pose.set_psi(i, -47.0)  # α螺旋的典型ψ角

# 评分
scorefxn = pyrosetta.create_score_function('ref2015')
score = scorefxn(pose)

print(f"理想α螺旋的得分: {score:.2f}")

# 发送到PyMOL查看
pmm = pyrosetta.PyMOLMover()
pmm.apply(pose)

好了,欲速则不达,今天我们就到这里,生活很好,有你更好。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 作者,Evil Genius
  • 今天我们继续分子对接,这一部分是折叠,折叠部分的内容也是相当的深,我们后续慢慢扩展。
  • 蛋白质折叠入门
  • 其一为搜索策略,即一种能够生成大量候选结构(或称“诱饵”结构)的算法;
  • 其二为评分函数,用以从所有结构中筛选出接近天然结构的构象。
  • Basic Folding Algorithm
  • Keywords: pose_from_sequence(), random move, scoring move, Metropolis, assign(), Pose()
  • 构象构建
  • 通过构建一个简单的从头折叠算法来折叠一个含10个残基的蛋白质。按常规方式初始化PyRosetta。
  • 创建一个包含10个残基的简单聚丙氨酸构象,用于测试折叠算法。将该构象存储在名为"polyA"的变量中。
  • 可选任务:可能希望实时可视化折叠过程。在开始折叠流程之前,实例化一个PyMOL移动器,并使用10,000到65,536之间的唯一端口号。通过调用.keep_history()方法保留历史记录,以便查看完整的折叠过程。请确保PyMOL命令行显示"PyMOL <---> PyRosetta链接已启动!"。
  • 使用PyMOL移动器查看polyA构象。将在PyMOL中看到一个线状的延伸结构。
  • 构建基础从头折叠算法
  • 写一个程序来实现蒙特卡洛算法,以优化蛋白质构象。
  • 主程序将包含 100 次迭代,每次迭代包括:进行一次随机尝试性移动、对蛋白质进行评分、以及决定接受或拒绝该移动。因此,可以将此算法分解为三个较小的子程序:随机移动、评分和决策。
  • 步骤 1:随机移动
  • 对于随机尝试性移动,请编写一个子程序,使用 random.randint() 随机选择一个残基,然后使用来自 random 库的 Python 内置函数 random.gauss()(以当前角度为均值,25° 为标准差)生成一个随机数,来随机扰动该残基的 φ 角或 ψ 角。更改扭转角后,使用 pmm.apply(polyA) 更新 PyMOL 中的结构。
  • 步骤 2:对移动进行评分
  • 创建一个评分函数,并编写一个子程序,该子程序只需返回构象的数值化能量得分。
  • 步骤 3:接受/拒绝移动
  • 在决策步骤中,编写一个子程序,根据 Metropolis 准则来决定是接受还是拒绝新构象。Metropolis 准则接受移动的概率为 P = exp(-ΔE / kT):
  • 请使用 kT = 1 Rosetta Energy Unit (REU).。
  • 步骤 4:执行
  • 将这三个子程序整合到主程序中!在主程序中编写一个循环,使其执行 100 次迭代,每次迭代包括:进行一次随机尝试性移动、对蛋白质进行评分、以及接受或拒绝该移动。
  • 在每次搜索迭代之后,输出当前构象的能量和迄今为止观察到的最低能量。此程序的最终输出应是在模拟过程中任意时刻达到的最低能量构象。请务必使用 low_pose.assign(pose) 来保存该最低能量构象,而不是使用 low_pose = pose,因为后者只会复制指向原始构象的指针。
  • 最后,输出最终构象和观测到的最低评分构象,并在PyMOL中查看它们。绘制能量和观测到的最低能量随循环次数的变化图。
  • 练习1:与α螺旋结构对比
  • 编写程序,将A10序列强制折叠成一个理想的α螺旋结构。
  • 好了,欲速则不达,今天我们就到这里,生活很好,有你更好。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档