以Local Docking为例,Rosetta将初始结构中配体与受体两者拉开一定距离后,将配体随机旋转与平移特定角度/距离后再逐步靠近受体形成复合物,并评价结合的稳定性。Rosetta实现Local Docking具有较高的精度,但很大程度上依赖于提供的初始结构,一般要求受配体的结合位点方向相对。并保持距离在10
考虑到结合过程中受配体会发生一定的柔性变化,在对接之前,分别对受配体进行relax以生成多种构象(ensemble),并以此进行对接,从而反映对接过程中的构象可变性。一般情况下,我们仅对侧链进行relax而保持骨架结构基本不变。
因此,Rosetta中进行蛋白-蛋白柔性对接的基本流程为:
R.PDB
)、配体PDB文件(L.PDB
)、初猜复合体结构(complex.PDB
)Rosetta子程序使用命令行调用时,为了方便,可以将输入的参数汇总在一个flag文件中输入
本文的例程中包括:
121├── flag
2│ ├── docking_flag
3│ ├── docking_prepack_flag
4│ ├── relax_flag_ChainL
5│ └── relax_flag_ChainR
6├── input
7│ ├── R.pdb
8│ ├── L.pdb
9│ └── complex.pdb
10└── sh
11├── dock.sh
12└── relax.sh
其中:
flag
目录下包括输入参数(Flag)文件input
目录下包括三个输入PDB结构文件sh
目录包括运行脚本文件
所调用的Rosetta子程序一般位于Rosetta安装目录下的:source/bin/
。为了方便,这里在~/.bashrc
中加入环境变量:
11export RosettaHOME=xxx/xxx/source/bin #xxx/xxx为Rosetta的安装目录
需要准备三个初始结构文件:
R.PDB
)L.PDB
)complex.PDB
),即将受体与配体的结合位点相对放置,并保持距离在10 同时需要注意:
complex.PDB
中各条链的名称与R.PDB
, L.PDB
中的一致complex.PDB
中受体和配体的多条链应连续出现在一起(如配体为BC,受体为DA,则允许出现的顺序为BCDA或DABC)complex.PDB
与R.PDB
+L.PDB
的总原子数、残基数保持绝对一致本例中使用的参数文件为flag/relax_flag_ChainL
和flag/relax_flag_ChainR
,分别用于配体、受体的relax运行
以flag/relax_flag_ChainL
为例,文件内容如下:
171-nstruct 35
2
3-in:file:s ../input/L.pdb
4
5-relax:constrain_relax_to_start_coords
6-relax:ramp_constraints false
7
8-ex1
9-ex2
10
11-use_input_sc
12-flip_HNQ
13-no_optH false
14
15-relax:default_repeats 5
16-out:path:pdb ./PDB_output/ChainL
17-out:path:score ./score_output/ChainL
其中关键参数:
-nstruct
:生成多少个relax结构,一般大于25-in:file:s
:输入的PDB文件路径-relax:constrain_relax_to_start_coords
:保持骨架链不变-flip_HNQ
:考虑H、N、Q三种残基环的翻转-no_optH
:是否优化H(false为优化)-relax:default_repeats
:每个输出结构重复relax的次数-out:path:pdb
:输出PDB的路径-out:path:score
:输出评分的路径进行relax的子程序名称为relax.xxx.xxx
,如本例中为$RosettaHOME/relax.static.linuxgccrelease
。调用时,使用@
标签传入flag文件
这里使用自动化脚本运行两者的relax,存放于sh/relax.sh
891# ! bin/bash
2# Using "nohup sh sh/relax.sh &"
3
4touch ./nohup.out
5cat /dev/null > ./nohup.out
6echo
7
8rm -rf relax
9mkdir relax
10
11#Generate Log Files
12touch relax/LOG.log
13
14echo -e "\n ###################\n\n" >> ./nohup.out
15echo -e "\n\nStart From:" >> ./nohup.out
16date >> ./nohup.out
17echo -e "\n\n" >> ./nohup.out
18
19#####################
20# Entering 'relax'
21#####################
22cd ./relax
23
24rm -rf PDB_output
25rm -rf score_output
26
27
28mkdir PDB_output
29mkdir PDB_output/ChainL
30mkdir PDB_output/ChainR
31
32mkdir score_output
33mkdir score_output/ChainL
34mkdir score_output/ChainR
35
36#Run relax of L.PDB
37$RosettaHOME/relax.static.linuxgccrelease @../flag/relax_flag_ChainL
38
39echo -e "\n\n#############\n\nChainL Done: " >> ../nohup.out
40date >> ../nohup.out
41echo -e "\n\n#############\n\n" >> ../nohup.out
42
43#Run relax of R.PDB
44$RosettaHOME/relax.static.linuxgccrelease @../flag/relax_flag_ChainR
45
46
47cd ../
48#####################
49# Exit 'relax'
50#####################
51echo -e "\n\nChainR Done:" >> ./nohup.out
52date >> ./nohup.out
53
54echo -e "\n\nALL THE RELAX DONE\n\n" >> ./nohup.out
55echo -e "\n\n######################\n\n" >> ./nohup.out
56
57###########
58Generate list of ensemble files
59###########
60
61
62cd relax/PDB_output/ChainL
63rm -f ensemble.list
64filelist1=""
65for file in `ls`
66 do
67 filename=`realpath $file`
68 filelist1=$filelist1"\n"$filename
69 done
70echo "$filelist1" > ensemble.list
71cd ../../../
72
73cd relax/PDB_output/ChainR
74rm -f ensemble.list
75filelist2=""
76for file in `ls`
77 do
78 filename=`realpath $file`
79 filelist2=$filelist2"\n"$filename
80 done
81echo "$filelist2" > ensemble.list
82cd ../../../
83
84
85cat ./nohup.out > relax/LOG.log
86cat /dev/null > ./nohup.out
87
88rm -rf relax/PDB_output_backup
89cp -r relax/PDB_output relax/PDB_output_backup
运行后生成了不同结构的评分(位于./relax/score_output
),不同relax后的PDB结构(./relax/PDB_output
),以及ensemble.list
文件,包含了每条链下每个relax输出结果的绝对路径。
用于Local Docking的参数文件为flag/docking_prepack_flag
和flag/docking_prepack_flag
,分别为用于预处理(打包ensemble文件)和运行Docking
其中flag/docking_flag
如下:
151-in:file:s ../input/complex.pdb
2
3-nstruct 1250
4
5-partners D_M
6-dock_pert 1 4
7
8-ensemble1 ../relax/PDB_output/ChainR/ensemble.list
9-ensemble2 ../relax/PDB_output/ChainL/ensemble.list
10
11-ex1
12-ex2aro
13
14-out:path:all ./output
15-out:suffix _ensemble_docking
其中关键参数:
-nstruct
:生成多少个Docking结构,一般大于500-in:file:s
:输入的PDB文件路径-partner
:指定参与对接的受体、配体的链编号;下划线_
分割受体和配体-ensemble1
和-ensemble2
:指定输入受体、配体构象集的ensemble.list
的路径-out:path:all
:输出结果的路径需要注意,
-partner
指定的链的顺序必须和complex.PDB
文件中链出现的顺序一致,且与ensemble参数的声明顺序一致,如:若
complex.PDB
中链出现顺序为B,C,D,A,其中B,C属于配体,则在L.PDB
中出现的顺序也应为B,C;D,A属于受体,则在R.PDB
中出现的顺序也应为D,A;由于BC先于DA出现,则应声明-partner BC_DA
;且-ensemble1
应对应于先出现的BC的L.PDB
,-ensemble2
对应于后出现的DA的R.PDB
Prepacking和Local Docking所使用的子程序分别为docking_prepack_protocol.xxx.xxx
和docking_protocol.xxx.xxx
,如本例中分别为$RosettaHOME/docking_prepack_protocol.static.linuxgccrelease
和$RosettaHOME/docking_protocol.static.linuxgccrelease
批量运行的脚本sh/dock.sh
如下
441# ! bin/bash
2# Using "nohup sh sh/dock.sh &"
3
4touch ./nohup.out
5cat /dev/null > ./nohup.out
6echo
7
8rm -rf docking
9mkdir docking
10
11#Generate Log Files
12touch docking/LOG.log
13
14echo -e "\n ###################\n\n" >> ./nohup.out
15echo -e "\n\nStart From:" >> ./nohup.out
16date >> ./nohup.out
17echo -e "\n\n" >> ./nohup.out
18
19#####################
20# Entering 'docking'
21#####################
22cd ./docking
23
24rm -rf output
25mkdir output
26
27#input中链出现的顺序应与ensemble1到ensemble2的顺序一致,并与-partners 声明顺序一致
28
29$RosettaHOME/docking_prepack_protocol.static.linuxgccrelease @../flag/docking_prepack_flag
30
31$RosettaHOME/docking_protocol.static.linuxgccrelease @../flag/docking_flag
32
33cd ../
34#####################
35# Exit 'docking'
36#####################
37echo -e "To:" >> ./nohup.out
38date >> ./nohup.out
39
40echo -e "\n\nALL THE RELAX DONE\n\n" >> ./nohup.out
41echo -e "\n\n######################\n\n" >> ./nohup.out
42
43cat ./nohup.out > docking/LOG.log
44cat /dev/null > ./nohup.out
prepacking后,原始的ensemble目录下会生成.ppk
文件;运行Docking后,其结果可在工作目录下的./docking/output
中找到,包括生成的对接后PDB结构文件和评分文件score_ensemble_docking.sc
一般而言,总评分越小(一般为负值),对接效果越好。选取评分最小的多个PDB文件,查看其结构合理性。对于对接后的结构,可以进一步采用能量最小化等方法进行局部优化,排除不合理的原子接触。
示例脚本sh/rank.sh
提供了一个用于按照SCORE排序,并将前10个结果单独复制至docking/output/top
251
2
3cd docking/output
4
5rm -rf top
6mkdir top
7
8#使用排名前几的结构
9TopRank=10
10
11# 创建一个临时文件来存储排名前10的信息
12touch top/rank.sc
13touch top/toprank.sc
14
15# 提取排名和分数信息,排序并输出前10个到临时文件
16awk 'NR > 2 {print $2, $40}' score_ensemble_docking.sc | sort -k1,1n -r -t " " > top/rank.sc
17head -n $TopRank top/rank.sc> top/toprank.sc
18
19# 读取临时文件中的文件名并复制对应的文件到top目录,并进行重命名
20rank=1
21while read -r score origin_filename; do
22 new_filename="${rank}_${score}.pdb"
23 cp "${origin_filename}.pdb" "top/${new_filename}"
24 rank=$(($rank+1))
25done < top/toprank.sc