新冠肆虐无药可医,
医护冒险奋战在前线。
实验室里抗体设计,
试管里混合液波光粼粼,
分子结构、细胞实验频频。
日以继夜,孜孜不倦,
只为破解疫情的难题。
我们紧密团结,努力前行,
心中不灭的信念是希望。
愿抗体如箭,射破病毒无疆,
愿健康如花,盛开在世间。
1. 准备一个抗原
比如新冠病毒表面某个蛋白。我这里准备了一个蛋白肽段,大概长这个样子:
2. 搭建Rosetta和PyRosetta环境
如果你不懂编程,不懂shell语言或者python,最好还是不要自己弄。
我这人喜欢折腾,光搭建这运行环境就花了两天,国内外有些相关资料但不多,Google都没有,都是直接查相关的英文手册。好在这些程序都是开源的,你可以直接阅读和编辑代码,那个痛苦又酸爽。。。。
这里假设环境搭好了,你知道你的app在哪。
3. 准备好背景知识和文件
参考的教程主要是Meilerlab 的workshop:Rosetta Antibody Workshop 2019 – Meiler Lab
视频网址:RosettaAntibodyDesign (RAbD): Walkthrough - Rosetta Virtual Workshop 2021 - YouTube
如果上不了油管,请看Bilibili:RosettaAntibodyDesign (RAbD) 操作步骤 - Rosetta Virtual Workshop 2021-The Meiler Lab
都看完了哇?下面我们来试试。
3.1 准备一个抗体
准备一个晶体结构已知的,只保留了Fab段的抗体。比如我把教程里的曲妥珠单抗(Trastuzumab)提出来了,它大概长这个样子:
可能大家像我一样都忘了抗体长啥样,也不知道一般的抗体的三维结构,这里稍微复习一下,抗体一般是Y型,由重链和轻链组成,H+L,Fc段是Y的手柄,Fab段是它识别抗原的两个抓手,Fab段的可变区才是最可怕的,三对可变区(CDR,上图中的绿色外的多颜色区域)基本可以识别生物界的抗原,抗体数量可以达到10的10-13次方的数量级。示意图如下:
3.2 将抗原及抗体放到同一个pdb文件
首先要用PyMol,将抗原肽和抗体放到同一个pdb文件里面
按住鼠标滚轮(mac鼠标没有)水平拖动,左键调整角度,将氨基酸肽段调整到与抗体可变区可能相结合的位置,距离小于10A。然后保存并导出同时有抗体和抗原肽段的pdb。
原本想着用程序先将两者docking好,所以我先创建了100个dock好的文件,结果发现没用。因为:
If we relax the structure too much, we will fall into an energy well that is hard to escape without significant sampling.
这句话最开始没太在意,就略过了,回过头才领会到,如果一开始选dock太完美的无法进行后续的抗体设计!会掉入能量陷阱。
这样文件工作就准备好了。开始进行Rosetta,设计抗体。
4. 开始设计抗体RAbD
4.1 一般设计
# 代码就这么几行,塞进去就可以跑了。这里先小剂量跑一下,生成20个抗体。
$ROSETTA_BIN/antibody_designer.static.macosclangrelease \
-s my_docked_pep.pdb -seq_design_cdrs L1 L3 -light_chain kappa -nstruct 20 -out:prefix tutA1_# 跑完了看看抗体的的得分,total_score, 或者能量值 dG_separated
$ROSETTA/main/source/tools/scorefile.py --scores dG_separated --output tab tutA1_score.sc | sort -k2 -k1# 然后在pymol里看看长啥样
pymol tutA1_*
大概长这样:
还行,
各个可变区的序列开始发生变化了。设置对可变区进行Random start调整。
$ROSETTA_BIN/antibody_designer.static.macosclangrelease \
-s my_docked_pep.pdb -graft_design_cdrs L1 L3 -seq_design_cdrs L1 L3 -light_chain kappa -random_start -nstruct 5 -out:prefix tutA3_pymol tutA3_*
可以看到,可变区的三维结构更分散了。调整幅度更大,但抗体的位置变化不大,说明程序并未对两者的空间位置进行调整。
4.2 DeNovo,边Docking边设计抗体
切换另一种模式,尝试DeNovo的设计。
In this example, we use integrated RosettaDock (with sequence design during the high-res step) to sample the antibody-antigen orientation, but we don’t care where the antibody binds to the antigen. Just that it binds.
在这个例子中,我们使用集成的 RosettaDock(在高分辨率步骤中使用序列设计)来采样设计抗体-抗原,但我们不关心抗体与抗原结合的位置。 只是它具有约束力。
代码长这个样子:
$ROSETTA_BIN/antibody_designer.static.macosclangrelease \-s my_docked_pep.pdb -graft_design_cdrs L1 L2 L3 H1 H2 \-seq_design_cdrs L1 L2 L3 H1 H2 H3 -light_chain kappa \-mc_optimize_dG -do_dock -nstruct 5 -random_start -out:prefix tutC1_
跑出来长这个样子:
看到了没?抗体移来移去的去识别这个抗原,寻求两者最舒服最稳定的结合方式,爱情这就来了。从女方角度看,这个过程如下,同时伴随着抗体CDR区的重建。
4.3 Auto Epitope Constraints 限制抗体识别的表位
假设你的抗原很大,docking的时候,抗体就会到处跑去寻找它的爱情。如果我们买办,只想它娶隔壁村的姑娘,那么就得限制抗体识别的表位,使用这个 -use_epitope_constraints
参数,它就不会乱跑了。我这里的抗原是一个肽段,不需要。
4.4 特定残基表位限制
这个就更狠了,直接包办,去取隔壁村的小芳姑娘。
通过 -epitope 8A
参数,我们可以指定抗体围绕在A链的第八位氨基酸进行建模。
代码如下:
$ROSETTA_BIN/antibody_designer.static.macosclangrelease \
-s my_docked_pep.pdb \
-graft_design_cdrs L1 L3 \
-seq_design_cdrs L1 L2 L3 H1 H2 H3 -light_chain kappa -do_dock -use_epitope_constraints \
-paratope L1 L3 \
-epitope 8A \
-nstruct 10 \
-out:prefix tutC3_
# 这里的8A,是指A链(抗原链),8是第八位氨基酸
得分也还不错。
5. 其他
这个教程还有一些剩余部分,我都跑了,比如:
- 自定义CDR区
- 限制CDR区的氨基酸组分
- 建模时候用Mintype —— 这个据说更有效
This mintype enables Flexible-Backbone design. Our default is to use min/pack cycles, but relax typically works better. However, it also takes considerably more time! This tutorial takes about 339 seconds for one struct!
- 抗体框架设计,针对CDR去意外的框架,这一般是不变的,不用动。
- H3 Stem, kT, and Sequence variablility
总结
-
试过无数次之后发现,手动调整的松散结合更利于后面的建模,docking完了之后能量值太低不利于优化,会掉入能量陷阱。当然,抗原抗体离得太远也不行。
-
跑通模型之后,应该进行 nstruct = 1000, 2000-5000扩增,放大模型,大概要跑个几天。
-
如果你的抗原肽来自某天然蛋白,还需要分全序列和肽段分别跑跑看!!!
-
这期间遇到了无数的坑,花了我差不多一个星期的业余时间。特别感谢ChatGPT,文章最开始的那首打油诗就是它写的,我只开了个头。另外感谢它辅助我学习知识,阅读代码,还帮我挖了很多坑。