??上一期剛剛講了一種處理部分模板結(jié)構(gòu)質(zhì)量差的解決方法,不知道各位看官有沒有看過癮。今天我們要將兩個(gè)相對比較簡單的方法進(jìn)行模型質(zhì)量的優(yōu)化提升。
loop環(huán)精煉
loop環(huán)優(yōu)化依賴于評(píng)分功能,并且優(yōu)化算法僅適用于loop環(huán),可以發(fā)現(xiàn)上期處理完以后蛋白273-283附近結(jié)果相對不理想,檢查是否能夠再次進(jìn)行優(yōu)化。(chimera顯示的二級(jí)結(jié)構(gòu)有一些不準(zhǔn)確,我們在這里不做探討,實(shí)際上273-283是完整的loop環(huán))


在這里我們使用loopmodel,而不是automodel,具體如下:
<font color="red" >相信這么多天的推文,大家對同源建模已經(jīng)有了一定的基礎(chǔ),所以后面我們就僅進(jìn)行例子查看,并講解主要要注意的地方,不再寫一個(gè)偽代碼,一個(gè)示例代碼</font>
# Loop refinement of an existing model
from modeller import *
from modeller.automodel import *
log.verbose()
env = environ()
# directories for input atom files
env.io.atom_files_directory = './:../atom_files'
# Create a new class based on 'loopmodel' so that we can redefine
# select_loop_atoms (necessary)
class MyLoop(loopmodel):
# This routine picks the residues to be refined by loop modeling
def select_loop_atoms(self):
# 10 residue insertion
return selection(self.residue_range('273', '283'))
m = MyLoop(env,
inimodel='TvLDH-mult.pdb', # initial model of the target
sequence='TvLDH') # code of the target
m.loop.starting_model= 1 # index of the first loop model
m.loop.ending_model = 10 # index of the last loop model
m.loop.md_level = refine.very_fast # loop refinement method; this yields
# models quickly but of low quality;
# use refine.slow for better models
m.make()
File: loop_modeling/loop_refine.py
這個(gè)例子我們創(chuàng)建了一個(gè)Myloop的子類,用來繼承l(wèi)oopmodel類,并返回要精煉的loop環(huán)范圍,上面的示例為273至283的區(qū)域. refine.very_fast使得建模更快,但是相對質(zhì)量不佳,建議使用注釋后面的refine.slow。最后再進(jìn)行DOPE打分。
基于配體建模
個(gè)人理解基于配體建模最佳的方式是目標(biāo)蛋白與模板蛋白有相似或者相同的小分子配體,這樣建出來的模型效果相對較好。如果我的理解不對,歡迎指出問題:
首先我們按照同源建模入門到精通(二)的方法對loop環(huán)優(yōu)化后的配體進(jìn)行模板比對,將帶有配體的1emd比對上去,或者手動(dòng)比對上去也可以。結(jié)果如下:
_aln.pos 10 20 30 40 50 60
TvLDH MSEAAHVLITGAAGQIGYILSHWIASGELYGDRQVYLHLLDIPPAMNRLTALTMELEDCAFPHLA
TvLDH_model MSEAAHVLITGAAGQIGYILSHWIASGELYGDRQVYLHLLDIPPAMNRLTALTMELEDCAFPHLA
1emd -----------------------------------------------------------------
_consrvd
_aln.pos 70 80 90 100 110 120 130
TvLDH GFVATTDPKAAFKDIDCAFLVASMPLKPGQVRADLISSNSVIFKNTGEYLSKWAKPSVKVLVIGN
TvLDH_model GFVATTDPKAAFKDIDCAFLVASMPLKPGQVRADLISSNSVIFKNTGEYLSKWAKPSVKVLVIGN
1emd ----------------------GVRRKPGMDRSDLFNVN--------------------------
_consrvd *** * ** *
_aln.pos 140 150 160 170 180 190
TvLDH PDNTNCEIAMLHAKNLKPENFSSLSMLDQNRAYYEVASKLGVDVKDVHDIIVWGNHGESMVADLT
TvLDH_model PDNTNCEIAMLHAKNLKPENFSSLSMLDQNRAYYEVASKLGVDVKDVHDIIVWGNHGESMVADLT
1emd -----------------------------------------------------------------
_consrvd
_aln.pos 200 210 220 230 240 250 260
TvLDH QATFTKEGKTQKVVDVLDHDYVFDTFFKKIGHRAWDILEHRGFTSAASPTKAAIQHMKAWLFGTA
TvLDH_model QATFTKEGKTQKVVDVLDHDYVFDTFFKKIGHRAWDILEHRGFTSAASPTKAAIQHMKAWLFGTA
1emd -----------------------------------------------------------------
_consrvd
_aln.pos 270 280 290 300 310 320
TvLDH PGEVLSMGIPVPEGNPYGIKPGVVFSFPCNVDKEGKIHVVEGFKVNDWLREKLDFTEKDLFHEKE
TvLDH_model PGEVLSMGIPVPEGNPYGIKPGVVFSFPCNVDKEGKIHVVEGFKVNDWLREKLDFTEKDLFHEKE
1emd -----------------------------------------------------------------
_consrvd
_aln.pos 330
TvLDH IALNHLAQGG/..
TvLDH_model IALNHLAQGG/--
1emd ----------/..
_consrvd
比對好后我們在目標(biāo)序列與帶有配體的序列后加"/",表示序列結(jié)束,然后加"."表示匹配配體,該示例后面加了兩個(gè)"."表示匹配兩個(gè)配體。
最后進(jìn)行建模:
from modeller import *
from modeller.automodel import *
class MyModel(automodel):
def special_restraints(self, aln):
rsr = self.restraints
for ids in (('NH1:161:A', 'O1A:336:B'),
('NH2:161:A', 'O1B:336:B'),
('NE2:186:A', 'O2:336:B')):
atoms = [self.atoms[i] for i in ids]
rsr.add(forms.upper_bound(group=physical.upper_distance,
feature=features.distance(*atoms),
mean=3.5, stdev=0.1))
env = environ()
env.io.hetatm = True
a = MyModel(env, alnfile='TvLDH-1emd_bs.ali',
knowns=('TvLDH_model','1emd'), sequence='TvLDH')
a.starting_model = 1
a.ending_model = 5
a.make()
File: ligand/model-multiple-hetero.py
建模腳本需要注意的是``env.io.hetatm = True`表示非標(biāo)準(zhǔn)”殘基"也可以被讀取,這樣才能讀取到配體。

分享到這里其實(shí)同源建模用的最普遍的內(nèi)容已經(jīng)講完,接下來準(zhǔn)備和大家一起學(xué)習(xí)迭代建模和建模更深的一些常用函數(shù)。這一系列就將先告一段落,等到時(shí)候研究rosetta的時(shí)候或者看到關(guān)于建模的一些好文章再繼續(xù)撰寫該類型。
在這里我們使用loopmodel,而不是automodel,具體如下:
<font color="red" >相信這么多天的推文,大家對同源建模已經(jīng)有了一定的基礎(chǔ),所以后面我們就僅進(jìn)行例子查看,并講解主要要注意的地方,不再寫一個(gè)偽代碼,一個(gè)示例代碼</font>
# Loop refinement of an existing model
from modeller import *
from modeller.automodel import *
log.verbose()
env = environ()
# directories for input atom files
env.io.atom_files_directory = './:../atom_files'
# Create a new class based on 'loopmodel' so that we can redefine
# select_loop_atoms (necessary)
class MyLoop(loopmodel):
# This routine picks the residues to be refined by loop modeling
def select_loop_atoms(self):
# 10 residue insertion
return selection(self.residue_range('273', '283'))
m = MyLoop(env,
inimodel='TvLDH-mult.pdb', # initial model of the target
sequence='TvLDH') # code of the target
m.loop.starting_model= 1 # index of the first loop model
m.loop.ending_model = 10 # index of the last loop model
m.loop.md_level = refine.very_fast # loop refinement method; this yields
# models quickly but of low quality;
# use refine.slow for better models
m.make()
File: loop_modeling/loop_refine.py
這個(gè)例子我們創(chuàng)建了一個(gè)Myloop的子類,用來繼承l(wèi)oopmodel類,并返回要精煉的loop環(huán)范圍,上面的示例為273至283的區(qū)域. refine.very_fast使得建模更快,但是相對質(zhì)量不佳,建議使用注釋后面的refine.slow。最后再進(jìn)行DOPE打分。
基于配體建模
個(gè)人理解基于配體建模最佳的方式是目標(biāo)蛋白與模板蛋白有相似或者相同的小分子配體,這樣建出來的模型效果相對較好。如果我的理解不對,歡迎指出問題:
首先我們按照同源建模入門到精通(二)的方法對loop環(huán)優(yōu)化后的配體進(jìn)行模板比對,將帶有配體的1emd比對上去,或者手動(dòng)比對上去也可以。結(jié)果如下:
_aln.pos 10 20 30 40 50 60
TvLDH MSEAAHVLITGAAGQIGYILSHWIASGELYGDRQVYLHLLDIPPAMNRLTALTMELEDCAFPHLA
TvLDH_model MSEAAHVLITGAAGQIGYILSHWIASGELYGDRQVYLHLLDIPPAMNRLTALTMELEDCAFPHLA
1emd -----------------------------------------------------------------
_consrvd
_aln.pos 70 80 90 100 110 120 130
TvLDH GFVATTDPKAAFKDIDCAFLVASMPLKPGQVRADLISSNSVIFKNTGEYLSKWAKPSVKVLVIGN
TvLDH_model GFVATTDPKAAFKDIDCAFLVASMPLKPGQVRADLISSNSVIFKNTGEYLSKWAKPSVKVLVIGN
1emd ----------------------GVRRKPGMDRSDLFNVN--------------------------
_consrvd *** * ** *
_aln.pos 140 150 160 170 180 190
TvLDH PDNTNCEIAMLHAKNLKPENFSSLSMLDQNRAYYEVASKLGVDVKDVHDIIVWGNHGESMVADLT
TvLDH_model PDNTNCEIAMLHAKNLKPENFSSLSMLDQNRAYYEVASKLGVDVKDVHDIIVWGNHGESMVADLT
1emd -----------------------------------------------------------------
_consrvd
_aln.pos 200 210 220 230 240 250 260
TvLDH QATFTKEGKTQKVVDVLDHDYVFDTFFKKIGHRAWDILEHRGFTSAASPTKAAIQHMKAWLFGTA
TvLDH_model QATFTKEGKTQKVVDVLDHDYVFDTFFKKIGHRAWDILEHRGFTSAASPTKAAIQHMKAWLFGTA
1emd -----------------------------------------------------------------
_consrvd
_aln.pos 270 280 290 300 310 320
TvLDH PGEVLSMGIPVPEGNPYGIKPGVVFSFPCNVDKEGKIHVVEGFKVNDWLREKLDFTEKDLFHEKE
TvLDH_model PGEVLSMGIPVPEGNPYGIKPGVVFSFPCNVDKEGKIHVVEGFKVNDWLREKLDFTEKDLFHEKE
1emd -----------------------------------------------------------------
_consrvd
_aln.pos 330
TvLDH IALNHLAQGG/..
TvLDH_model IALNHLAQGG/--
1emd ----------/..
_consrvd
比對好后我們在目標(biāo)序列與帶有配體的序列后加"/",表示序列結(jié)束,然后加"."表示匹配配體,該示例后面加了兩個(gè)"."表示匹配兩個(gè)配體。
最后進(jìn)行建模:
from modeller import *
from modeller.automodel import *
class MyModel(automodel):
def special_restraints(self, aln):
rsr = self.restraints
for ids in (('NH1:161:A', 'O1A:336:B'),
('NH2:161:A', 'O1B:336:B'),
('NE2:186:A', 'O2:336:B')):
atoms = [self.atoms[i] for i in ids]
rsr.add(forms.upper_bound(group=physical.upper_distance,
feature=features.distance(*atoms),
mean=3.5, stdev=0.1))
env = environ()
env.io.hetatm = True
a = MyModel(env, alnfile='TvLDH-1emd_bs.ali',
knowns=('TvLDH_model','1emd'), sequence='TvLDH')
a.starting_model = 1
a.ending_model = 5
a.make()
File: ligand/model-multiple-hetero.py
建模腳本需要注意的是``env.io.hetatm = True`表示非標(biāo)準(zhǔn)”殘基"也可以被讀取,這樣才能讀取到配體。
分享到這里其實(shí)同源建模用的最普遍的內(nèi)容已經(jīng)講完,接下來準(zhǔn)備和大家一起學(xué)習(xí)迭代建模和建模更深的一些常用函數(shù)。這一系列就將先告一段落,等到時(shí)候研究rosetta的時(shí)候或者看到關(guān)于建模的一些好文章再繼續(xù)撰寫該類型。
往期教程:
#分子模擬#同源建模從入門到精通(一)
#分子模擬#同源建模從入門到精通(二)
#分子模擬#同源建模從入門到精通(三)