本教程通过翻译网站中的实际例子来完成
前提条件:
1>未知蛋白结构的氨基酸序列
2>蛋白的cryo-EM map
步骤一:
找到一个合适的模板,首先将未知序列保存成modeller能够识别的序列文件格式。
其次,利用modeller中已有的分簇好的蛋白序列文件pdb_95.pir来搜索和未知序列相似的蛋白晶体序列。
由于已知的蛋白的序列文件较大,所以需要先将其转换为二进制的形式,具体的代码如下:
from modeller import *
log.verbose()
env=environ()
sbd=sequence_db(env)
sdb.covert(seq_database_file='pb_95.pir',seq_database_format="PIR",chains_list="ALL",minmax_db_seq_len=(30,4000),clean_sequences=True, outfile='pdb_95.hdf5')
***注意*** 你需要把pdb_95.pir和这个文件放在相同的文件夹下。
再次,寻找和未知序列相关的结构,利用profile.build()方法,最终查询序列和它的同源序列将会存入文件build_profile.prf中。具体代码如下:
from modeller import *
log.verbose()
env=environ()
#读入二进制的库文件
sdb=sequence_db(env,seq_database_file='pdb_95.hdf5',seq_database_format="BINARY",chain_list='ALL')
#读入PIR格式的待建序列文件
aln=alignment(env)
aln.append(file='TvDLH.ali', alignment_format='PIR', align_codes='ALL')
#将输入文件中的序列转换为profile格式
prf=aln.to_profile()
#搜索蛋白库文件找到同源的序列
prf.build(sdb,matrix_offset=-450, rr_file='${LIB}/blosum62.sim.mat',gap_penalties_1d=(-500,-50), n_prof_iterations=1,check_profile=False, max_aln_evalue=0.01)
##rr_file指定了做相似性搜索的时候使用的矩阵,最终要的参数为叠加后的evalue值,目前只支持blosum62相似性矩##阵搜索
#将输出文件保存为txt格式
prf.write(file='build_profile.prf',profile_format='TEXT')
#将profile文件转回叠加的格式
aln=prf.to_alignment()
#保存叠加格式的文件
aln.write(file='build_profile.ali',alignment_format='PIR')
build_profile.prf中的第12列作为评价叠加效果好坏的一个重要的标准。
25 5mdhA X 1 333 2 332 1 331 328 44. 0.0
26 7mdhA X 1 351 6 334 14 339 325 34. 0.0
27 1mldA X 1 313 5 198 1 189 183 26. 0.13E-05
28 1o6zA X 1 303 7 320 3 287 278 26. 0.61E-05
第11列为晶体结构序列与待建序列的序列相似度。
如果序列相似度很低,例如在15%-25%之间时,可以将n_prof_iterations设置为一个大于1的参数。
如果还是不起作用可以添加更多的蛋白序列,或者使用pofile.scan方法。
步骤二:
通过在找到的序列中对已有晶体结构的序列和三级结构进行对比来查看这些已知的蛋白结构以及序列的相似性到底有
多大,如果序列相似性很大的话就可以将这些晶体结构进行合并,只找到一个具有代表性的结构即可。
比较结构的程序如下:
from modeller import *
env=environ()
env.io.atom_files_directory['.' , '../atom_files' ]
aln=alignment(env)
for(pdb,chain) in (('1b8p','A'),('1y7t','A'),('1civ','A')):
m=model(env,file=pdb,model_segment=('FIRST:'+chain,'LAST:'+chain))
aln.append_model(m,atom_files=pdb,align_codes=pdb+chain)
#序列比对
#aln.malign()
#三级结构的比对
#aln.malign3d()
#上面两个代码可以用aln.salign代替。
aln.salign()
#输出详细的对比过程
aln.compare_structures()
aln.id_table(matrix_file='family.mat')
env.dendrogram(matrix_file='family.mat',cluster_cut=-1.0)
对结果进行分析找到一个或几个最相似的结构来进行建模。
步骤三:
叠加序列和结构,找到两个序列中都有哪些一致性的氨基酸序列
from modeller import *
env=environ()
env.io.atom_files_directory[ '.', '../atom_files' ]
aln=alignment(env)
mdl=model(env, file='1y7t', model_segment=('FIRST:'+chain,'LAST:'+chain))
aln.append_model(mdl,align_codes='1y7tA', atom_files='1y7t')
aln.append(file='TvLDH.ali',align_codes='TvLDH')
aln.salign(max_gap_length=40)
aln.write(file='TvLDH-1y7tA.ali', alignment_format='PIR')
aln.write(file='TvLDH-1y7tA.pap', alignment_format='PAP')
步骤四:
建立模型
from modeller import *
from modeller.automodel import *
env=environ()
env.io.atom_files_directory=[ '.', '../atom_files']
a=automodel(env,alnfile='TvLDH-1y7tA.ali',knows='1y7tA', sequence='TvLDH', assess_methods=assess.DOPE)
a.starting_model=1
a.ending_model=5
a.make()
步骤五:
评价所建模型的质量
通过上面的脚本,在输出的日志文件中会存有相关的评价方法得出的评价分数,从中找到一个最好的模型。
步骤六:
将模型拟合到cryo-EM(冷冻电镜图)图中。
下面的脚本通过移动或转动蛋白结构来使其与冷冻电镜图吻合。
from modeller import *
log.verbose()
struct='TvLDH.B99990001.pdb'
map='TvLDH.10A.mrc'
resolution=10.0
box_size=48
apix=1.88
x=-26.742; y=-9.5205; z=-10.375
steps=20
#读入冷冻电镜图
den=density(env,file=map,em_density_format='MRC',voxel_size=apix, resolution=resolution,em_map_size=box_size,density_type='GAUSS', px=x,py=y,pz=z)
#通过模拟退火的方法将模拟的结构拟合到冷冻电镜图上。
den.grid_search(em_density_format='MRC', num_structures=1, em_pdb_name=struct, chains_num=[1], start_type='CENTER', number_of_steps=steps, angular_step_size=30, temperature=100., best_docked_models=1,
translate_type='RANDOM', em_fit_output_file='modem.log')