#分子模擬#同源建模從入門到精通(四)

??上一期剛剛講了一種處理部分模板結(jié)構(gòu)質(zhì)量差的解決方法,不知道各位看官有沒有看過癮。今天我們要將兩個相對比較簡單的方法進行模型質(zhì)量的優(yōu)化提升。

loop環(huán)精煉

loop環(huán)優(yōu)化依賴于評分功能,并且優(yōu)化算法僅適用于loop環(huán),可以發(fā)現(xiàn)上期處理完以后蛋白273-283附近結(jié)果相對不理想,檢查是否能夠再次進行優(yōu)化。(chimera顯示的二級結(jié)構(gòu)有一些不準確,我們在這里不做探討,實際上273-283是完整的loop環(huán))

在這里我們使用loopmodel,而不是automodel,具體如下:
<font color="red" >相信這么多天的推文,大家對同源建模已經(jīng)有了一定的基礎(chǔ),所以后面我們就僅進行例子查看,并講解主要要注意的地方,不再寫一個偽代碼,一個示例代碼</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

這個例子我們創(chuàng)建了一個Myloop的子類,用來繼承l(wèi)oopmodel類,并返回要精煉的loop環(huán)范圍,上面的示例為273至283的區(qū)域. refine.very_fast使得建模更快,但是相對質(zhì)量不佳,建議使用注釋后面的refine.slow。最后再進行DOPE打分。

基于配體建模

個人理解基于配體建模最佳的方式是目標蛋白與模板蛋白有相似或者相同的小分子配體,這樣建出來的模型效果相對較好。如果我的理解不對,歡迎指出問題:
首先我們按照同源建模入門到精通(二)的方法對loop環(huán)優(yōu)化后的配體進行模板比對,將帶有配體的1emd比對上去,或者手動比對上去也可以。結(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

比對好后我們在目標序列與帶有配體的序列后加"/",表示序列結(jié)束,然后加"."表示匹配配體,該示例后面加了兩個"."表示匹配兩個配體。

最后進行建模:

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`表示非標準”殘基"也可以被讀取,這樣才能讀取到配體。

分享到這里其實同源建模用的最普遍的內(nèi)容已經(jīng)講完,接下來準備和大家一起學習迭代建模和建模更深的一些常用函數(shù)。這一系列就將先告一段落,等到時候研究rosetta的時候或者看到關(guān)于建模的一些好文章再繼續(xù)撰寫該類型。
在這里我們使用loopmodel,而不是automodel,具體如下:
<font color="red" >相信這么多天的推文,大家對同源建模已經(jīng)有了一定的基礎(chǔ),所以后面我們就僅進行例子查看,并講解主要要注意的地方,不再寫一個偽代碼,一個示例代碼</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

這個例子我們創(chuàng)建了一個Myloop的子類,用來繼承l(wèi)oopmodel類,并返回要精煉的loop環(huán)范圍,上面的示例為273至283的區(qū)域. refine.very_fast使得建模更快,但是相對質(zhì)量不佳,建議使用注釋后面的refine.slow。最后再進行DOPE打分。

基于配體建模

個人理解基于配體建模最佳的方式是目標蛋白與模板蛋白有相似或者相同的小分子配體,這樣建出來的模型效果相對較好。如果我的理解不對,歡迎指出問題:
首先我們按照同源建模入門到精通(二)的方法對loop環(huán)優(yōu)化后的配體進行模板比對,將帶有配體的1emd比對上去,或者手動比對上去也可以。結(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

比對好后我們在目標序列與帶有配體的序列后加"/",表示序列結(jié)束,然后加"."表示匹配配體,該示例后面加了兩個"."表示匹配兩個配體。

最后進行建模:

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`表示非標準”殘基"也可以被讀取,這樣才能讀取到配體。
分享到這里其實同源建模用的最普遍的內(nèi)容已經(jīng)講完,接下來準備和大家一起學習迭代建模和建模更深的一些常用函數(shù)。這一系列就將先告一段落,等到時候研究rosetta的時候或者看到關(guān)于建模的一些好文章再繼續(xù)撰寫該類型。
往期教程:
#分子模擬#同源建模從入門到精通(一)
#分子模擬#同源建模從入門到精通(二)
#分子模擬#同源建模從入門到精通(三)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容