Rosetta中文教程(二)


Rosetta中重要概念的介绍

1. Rosetta philosophy

关于Rosetta的工作原理,一个简单的摘要是,要建模的分子系统具有一定数量的自由度(DOFs),如蛋白质折叠中的phi/psi/chi,对接中的刚体平移/旋转以及设计中的氨基酸序列。通过“fold”和“pack_rotamers”这样的过程,这些自由度连同其他默认的固定参数一起被转换成笛卡尔空间中原子的实际xyz位置。然后,利用基于物理的能量函数,根据这些原子位置来评估当前系统的能量状态。“DOF-XYZ-Energy”机制与蒙特卡罗极小化等算法相结合,对由这些DOFs定义的构象空间进行采样,以定位具有最低能量的构象,该构象应该接近系统的天然状态。

2. Pose

Rosetta3中的“Pose”表示待建模或模拟的分子系统的某一状态,如蛋白质、核酸、小化学配体以及与它们任意组合的配合物。它存储了系统的化学成分和自由度信息。它可以接收关于在自由度上要做什么更改的指令,并知道如何在给定这些更改的情况下更新原子XYZ位置。它保留了能量缓存数据的信息,并根据更新的原子位置和所使用的能量评估方法,知道如何高效地评估自身的能量。在标准的建模协议中,Pose要么从输入结构初始化,要么从零开始,然后经过一序列/组合操作,这些操作将改变其自由度,以采样构像空间并评估其能量,以便定位能量最低的状态。在一个Pose对象中有两个基本组件,“构像”和“能量”,前者负责将“DOF”s上的变化转换为XYZ原子位置,后者负责根据更新的原子坐标更新单个“能量”组件。

3.Conformation

如上所述,“构象”层维护了待建模系统的分子表示,并负责将系统自由度的任何变化转换为原子笛卡尔坐标的实际变化。这个对象有三类数据:

  • 用一组“残基”对象来表示系统的化学表示,每个残基对象包含关于原子的化学组成/类型、它们的连通性(在残基类型对象中)和空间位置的信息。
  • 用“Fold-tree”和“Atom-tree”表示系统的运动学。这种生物大分子系统的“树状”拓扑结构的优点是扭转自由度和刚体自由度可以统一在一个通用的表示下,它们可以被灵活地激活或冻结。在运动学树设置中编码的规则下,对自由度的任何更改都可以转换为XYZ原子笛卡尔坐标。相反,如果提供XYZ坐标和树拓扑,还可以派生出一组新的自由度。
  • 缓存自上次移动以来自由度/坐标发生变化的数据。这是为了有效的能量计算,因为如果一对原子自上次能量评估以来彼此之间没有发生变化,那么energy对象可以重用一些缓存的能量数据,而无需计算它们的成对能量。

4. Residue

5. ResidueType

6. AtomType

Kinematic Layer

我们已经涵盖了大部分的“化学”层(从姿势到构象到残留到残留类型到原子类型),并让我们移动到“运动学”层,看看自由度在系统中实际上是如何转化为实际的原子位置得分。运动学层的基本数据是FoldTree和AtomTree,这完全是Phil Bradley的想法。

7. FoldTree

FoldTree是一种基于残基的大分子系统描述。想了解更多信息,可以参考两篇参考论文:Bradley et al, Proteins, 2006;Wang et al, JMB, 2007或参见FoldTree概述和概念。基本上,每个残基通过肽连接或刚体连接(“jump”)在树中连接另一个残基。系统的自由度为主链和侧链的扭转角和刚体变换。对这些自由度的更改可以在FoldTree中正确传播,以生成所需的结构更改。

The fold tree

fold tree是atom tree的粗粒度表示,它是在FoldTree类中实现的。 fold tree在大多数(所有?)情况下指定了残基之间的连接,这足以在幕后生成原子树。

Jump edges vs “peptide” edges

fold tree将残基之间的连接存储为core::kinematics::Edge对象。顺序很重要; “start”是父级,“stop”是子级。(这意味着start的序列号可能比stop的序列号高)。jump边与atom tree中的jump直接对应,并将一个残基上的一个原子与另一个残基上的另一个原子连接起来。(实际上,为了方便起见,每个原子的第一个原子似乎经常被使用。)另一方面,所谓的“肽”边以简写的形式指定了聚合物的连通性——它们只给出了聚合物链的起始残基和结束残基。没有指定原子。

例如,一个有100个残基的多肽链从N折叠到C,就会有一个从1到100的fold tree边。如果从中间向外折叠,它会有两条边,从50到1,从50到100。如果在33号残基上也有一个小分子,那将是33号到101号的额外边(假设配体残基在100个蛋白残基之后)。

fold tree足够智能,可以将两条肽边合并为一条,例如(1-50)+(50-100)=(1-100),但它可能需要手动调用 to delete_extra_vertices().

Cutpoints

“切割点”是折叠树中的不连续点(与聚合物的连通性相比)。所有的残基都被认为是切点,除了那些在肽段边缘内部或在肽段边缘的低端。缩氨酸边缘的高编号端(无论是父端还是子端)被认为是一个切点。因此,树形中编号最高的残差总是一个切点;但是,当计算树中切割点的数量时,它不被认为是切割点。假设是连通树,那么切点的数量总是与跳跃边的数量相同。

FoldTree output

一个典型的fold-tree的输出如下所示:

FOLD_TREE  EDGE 1 14 -1  JEDGE 14 52 1 C N  INTRA_RES_STUB  EDGE 14 42 -1  EDGE 52 47 -1  EDGE 52 58 -1  JEDGE 58 136 2 C N  INTRA_RES_STUB  JEDGE 47 118 4 N N  INTRA_RES_STUB  EDGE 47 43 -1  EDGE 118 124 -1  EDGE 136 125 -1  EDGE 58 67 -1  EDGE 118 117 -1  EDGE 136 143 -1  JEDGE 117 73 3 N N  INTRA_RES_STUB  EDGE 73 68 -1  EDGE 73 98 -1  EDGE 117 99 -1

EDGE是正常边
JEDGE是jump边

EDGE start end jump_nr/peptide(=-1) start-jump_atom stop-jump_atom

“INTRA_RES_STUB” – >one“INTRA RES STUB”——>构建atom tree,这样残基的扭转运动不会扰乱你的jump。

8. AtomTree

AtomTree提供了一个更通用的框架来建模生物或分子系统。正如它的名字所代表的,与FoldTree中基于残基的表示相比,它以树状拓扑的形式表示系统中的所有原子。原子之间通过键距、键角和扭转/反常角以及刚体变换相互连接,这些都是系统的潜在自由度。(FoldTree可以被认为是一个特殊的AtomTree,其中键长/键角是固定的,只允许扭转/刚体自由度)。AtomTree不仅允许用户处理更多的自由度,它的基于原子的表示在处理具有任意原子连接的非聚合物型分子(如小型化学配体)方面也有很大优势。以下是一些基本要点:

  • 每个原子都有自己的父原子、子原子列表和自己的XYZ位置。在一个以父原子为中心的坐标系中,XYZ坐标可以定义为它的三个内部坐标,d,theta和phi,即键距离,键角和扭转/反常角。函数“update_xyz_coord(root_atom)”完成这个任务,函数“update_internal_coordds
    (root_atom)”执行相反的操作。
  • 树只有一个没有父原子的根原子。从根原子和默认坐标框架,根原子的所有子原子都可以从它们的内部坐标生成。一旦它们被生成,它们中的每一个就会成为亚原子树的根。由于整个分子系统由原子树表示,所以通过递归调用“update_xyz_coord(root_atom)”来巧妙地遍历整个树。类似地,内部坐标可以通过调用函数“update_internal_coord(root_atom)”以同样的递归方式更新。
  • 原子树中的“原子”在内部根据它们与父级的连接方式分为两种类型,即“BondAtom”和“JumpAtom”。与BondAtom的“d/theta/phi”相比,JumpAtom的内部坐标包含刚体变换。
    任何原子的任何内部坐标都可以被认为是一个自由度,任何对这个自由度的改变都可以传播到树的其他部分来更新原子的xyz位置。

Rosetta3在内部只使用AtomTree来处理运动学。FoldTree仍然支持定义建模系统的运动学表示,因为它便于构建基于蛋白质的建模任务。当FoldTree被传递给Pose/Conformation时,它将被转换成相应的AtomTree表示。为了方便起见,支持设置最常见的自由度类型的接口,例如,当pose时。调用set_psi(18, 70.0),它将查找一个内部映射函数,找到一个特定原子的相应的AtomTree内部坐标,并相应地设置它。每当对任何AtomTree内部坐标进行更改时,都会打开一个标记,指示原子XYZ坐标过时。因此,下一次当任何依赖于XYZ坐标的操作(比如得分或访问某个原子的位置)被请求时,“refold”-update_xyz_coords()将被触发,以确保XYZ坐标数据被正确更新。同样,AtomTree还为用户提供了一个接口直接更改任何原子XYZ坐标,在这种情况下,一个类似的标记将会被设置,这个标记指示内部坐标需要被更新,并且函数“update_internal_coords()“将触发是否使用内部坐标数据。

如果你还记得,残基对象也有它所有的原子位置和骨干/侧链扭转的数据。这些数据的来源将在必要时从AtomTree运动学层更新。AtomTree在内部维护Atom指针的映射,以便给定残基号和原子号,可以查找特定的Atom。然后,可以访问其位置,并将任意主链/侧链扭转映射到特定原子的特定内坐标。

有许多成员函数可以操作AtomTree,例如,通过键或刚体删除/附加/替换子树,或重新根一个AtomTree。例如,在为一个蛋白质构造AtomTree的过程中,首先创建一个残基子树,然后连接到主AtomTree。另一种方法是将残基从质心表示法改为全原子表示法。由于它们现在在Rosetta中被视为不同的残基,全原子残基的子树将被创建并替换主AtomTree中质心残基的子树。

关于AtomTree,这里列出的最后一件事是,对任何自由度的更改将被记录在Conformation的缓存数据中,即,这个扭转已经移动或这个刚体已经移动,以便它将被传递到评分例程,以进行高效和准确的能量评估。

9. Energies

energy对象包含用于pose/构象的缓存能量组件。它包含经典的单体和二体能量组件,但它们的存储方式是不同的。残基对(二体)能量存储在EnergyGraph中,其中每个节点都是残基,两个节点之间的边是这两个残差之间的相互作用能。这种类型的图也被应用在许多与得分相关的实现中,例如用于建立邻居列表的残基对距离。当结构移动并请求一个评分时,energy对象将检查是否有任何旧缓存数据是可重用的,并且只更新那些需要重新计算的数据。

10. ScoreFunction

ScoreFunction有一组权重,每个权重对应一个单独的能量组件。每个能量组件将由特定类型的EnergyMethod进行评估,例如,LJ-attractive将由Context-independent-2-body method (ci_2B_method)进行评估,Dunbrack将由Context-independent-1-body方法进行评估。所有支持的EnergyMethods列表也由一个ScoreFunction对象维护。当一个ScoreFunction被应用到一个Pose来评估它的能量时,所有非零加权的能量成分将使用它们相应的评分方法来计算。你可以在src/core/scoring/methods/中找到关于当前支持的能量方法及其类别的更多信息。

11. ScoreFunctionFactory

这个对象用于根据pose的能量和“温度”(实际上大致相当于温度乘以玻尔兹曼常数,单位为千卡/摩尔)的变化来决定pose的改变是被接受还是被拒绝。它在内部存储了两个pose,记录了最后一个接受状态和到目前为止访问的最低能量状态,一个ScoreFunction用于评分,一个温度因子用于调整玻尔兹曼概率的接受/拒绝。

12. AtomTreeMinimizer

由于Pose的运动学设置现在仅仅是通过AtomTree,优化功能是由这个AtomTreeMinimizer对象执行的。这个对象有一个叫做“run”的成员函数,它采用一个Pose,一个MoveMap,一个ScoreFunction和一个MinimizerOption包装对象来执行能量最小化的任务。要最小化的目标能量函数显然来自ScoreFunction,变量是Pose/构像/原子树中的自由度。MoveMap对象指定了要最小化的自由度子集,MinimizerOption对象定义了要最小化的类型(它也有最小化公差值和其他最小化相关参数)。有关最小化的更多信息,请参阅Minimization overview and concepts.

13. MoveMap

MoveMap的目的是在系统中启用/禁用某些类型的自由度。例如,omega是固定的,但是phi/psi/chi是灵活的。MoveMap与Rosetta3中的Pose分离,并单独传递给AtomTreeMinimzer。MoveMap支持启用/禁用特定类型的自由度,如键长和角度;或单个残基的某些自由度,如残基i的主干扭转;或者原子树中的单个自由度,比如残基i中的j原子的扭转角度。这为用户提供了更多的自由来控制要优化的自由度。

14. Mover

这个对象的设计已经被许多Rosetta开发人员头脑风暴,其目的是创建一个原型类,用于表示将改变其结构的任何类型的操作。这个类的设置允许很容易地扩展它,从单一类型的动作创建新的复合类型的动作。每个Mover将采取一个pose,并有一个“apply”方法,将对pose做一些特定的变化。单一类型移动的例子有SmallMover/ShearMove将执行经典的Rosetta small/shear 主链移动,RigidBodyMover将改变一个刚体(jump)自由度。MonteCarlo, Minimization和Packer也可以被认为是一种特殊类型的移动。因此,将它们组合起来可以创建执行SmallMinTrial或RigidBodyPackerTrial等任务的Movers。单个或一系列的Movers也可以在多个周期中重复应用。此外,协议本身可以看作是一个复合的Mover,它本质上是通过组合任何单一类型的Mover对象而构造的。

  • 0
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Rosetta是苹果公司开发的一种进制翻译技术,可以在ARM架构的Mac上运行x86架构的应用程序。在Ubuntu20.04虚拟机上安装Rosetta可以让你在虚拟机中运行一些只能在Mac上运行的软件。 以下是在Ubuntu20.04虚拟机上安装Rosetta的详细教程: 步骤1:安装Homebrew 首先需要安装Homebrew,这是Mac上常用的软件包管理器。在终端中执行以下命令: ```sh /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)" ``` 步骤2:安装Rosetta 在终端中执行以下命令安装Rosetta: ```sh softwareupdate --install-rosetta ``` 在安装过程中可能需要输入管理员密码。 步骤3:测试Rosetta 安装完成后,可以测试一下Rosetta是否正常工作。在终端中执行以下命令: ```sh arch -x86_64 /bin/zsh ``` 这会启动一个新的终端,其中的zsh将在Rosetta环境中运行。在这个终端中执行以下命令: ```sh uname -m ``` 如果输出是x86_64,说明Rosetta正常工作。 步骤4:使用Rosetta运行软件 现在可以使用Rosetta在Ubuntu20.04虚拟机中运行一些只能在Mac上运行的软件了。在终端中执行以下命令: ```sh arch -x86_64 /path/to/application ``` 其中,/path/to/application是要运行的软件的路径。这将启动一个新的终端,其中的软件将在Rosetta环境中运行。 总结 以上就是在Ubuntu20.04虚拟机上安装Rosetta的详细教程。安装完成后,你就可以在虚拟机中运行一些只能在Mac上运行的软件了。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值