如何在 PyMOL 中选择用于蛋白质诱变的残基?

问题描述 投票:0回答:1

目前,我正在创建一个选择,其中每个突出显示的残基处的丙氨酸点突变的残基距离配体 5 埃。目前,代码正在创建我想要的特定选择,但是一旦选择要使用诱变的模型,就会出现以下错误。我专门使用 File -> Run Script 通过 PyMOL 运行了这段代码

“Atom” has no attribute “get_id”
File "C:\Users\will\AppData\Local\Schrodinger\PyMOL2\lib\site-packages\pmg_qt\pymol_qt_gui.py", line 1192, in file_run
   self.cmd.run(fname)
 File "C:\Users\will\AppData\Local\Schrodinger\PyMOL2\lib\site-packages\pymol\parsing.py", line 470, in run
   run_(path, ns_pymol, ns_pymol)
 File "C:\Users\will\AppData\Local\Schrodinger\PyMOL2\lib\site-packages\pymol\parsing.py", line 519, in run_file
   execfile(file,global_ns,local_ns)
 File "C:\Users\will\AppData\Local\Schrodinger\PyMOL2\lib\site-packages\pymol\parsing.py", line 514, in execfile
   exec(co, global_ns, local_ns)
 File "C:/Users/will/PycharmProjects/Binding Residues/bindingresidue.py", line 10, in <module>
   res_id = residue.get_id()[1]

这是我使用的代码:

from pymol import cmd


cmd.load(r"C:\Users\will\.pymol\Acb1test.pdb", "Acb1")
cmd.remove("not chain A and not residue ECI")
cmd.select("eci_residue", "chain A and resn ECI")
cmd.select("binding_residues", "(byres (eci_residue around 5))")
protein = "Acb1"


for residue in cmd.get_model("binding_residues").atom:
   res_id = residue.get_id()[1]
   res_name = residue.get_parent().get_resname()


   if res_name == "ALA":
       cmd.wizard("mutagenesis")
       cmd.wizard().set_mode("ser")
       cmd.get_wizard().do_select(f"chain A and residue{res_id}")
       cmd.get_wizard().apply()
   else:
       cmd.wizard("mutagenesis")
       cmd.get_wizard().set_mode("ala")
       cmd.get_wizard().do_select(f"chain A and residue{res_id}")
       cmd.get_wizard().apply()


   cmd.save(r"C:\Users\will\Acb1test\{protein}_{res_id}.pdb")
   cmd.reinitialize()
   cmd.load(r"C:\Users\will\.pymol\Acb1test.pdb", "Acb1")
   cmd.remove("not chain A and not residue ECI")
   cmd.select("binding_residues", "br. (byres (residue ECI around 5))")


cmd.delete("binding_residues")

我通过 PyCharm 创建了这段代码。我期望在距离配体 5 埃的残基创建选择后,我可以对每个突出显示的残基进行一一突变,并将它们保存到我的文件中。我希望这个过程发生在所有单独选择的残基上,这就是为什么我为诱变函数创建了一个简单的循环。

pycharm pymol
1个回答
0
投票

我的尝试,输入是来自

7t27.pdb
的蛋白质 Acb1 ;

代码:

from pymol import cmd, stored
import pymol
import time

pymol.finish_launching()

time.sleep(3)


print('\n\n------------------------------------------------')
print('\n  PyMOL Version : ',  cmd.get_version()[0])
print('\n\n------------------------------------------------')

# protein = "Acb1"

cmd.load('7t27.pdb' , 'Acb1')

cmd.remove("not chain A and not residue ECI")

cmd.remove('solvent')

cmd.select("eci_residues", "chain A and resn ECI")

eci_residues ="eci_residues"

cmd.select("binding_residues", "byres {} around {}".format(eci_residues, "3")) ### changed from # cmd.select("binding_residues", "byres (eci_residue around 5))")


   
def muta(resi, res_name):
    
    print('\n resi : ', resi, '  resn : ', res_name)
    
    if res_name == "ALA":
        cmd.wizard("mutagenesis")
        
        cmd.do("refresh_wizard")
        
        cmd.get_wizard().set_mode("TRP")
        
        # cmd.get_wizard().do_select('A/'+resi+"/")
        
        cmd.get_wizard().do_select(resi+"/")
        
        # cmd.frame(1) ### rotamer selection ?? check if rotamer exist
        
        print('before apply !!!!!!!!!!!!!')
        
        cmd.get_wizard().apply()
        
        cmd.wizard() # ends wizard
        
        print('mutated !!!!!!!!!!!!!')
    else:
        pass
   

stored.residues = dict()

cmd.iterate('binding_residues', 'stored.residues[resi] = resn')

print('\n\n residues : \n', stored.residues , 'lenght : ', len(stored.residues))
   
for resi ,resn in stored.residues.items():
    
    # print('resi : ', resi ,'  resn : ', resn)
    muta(resi,resn)

stored.residues = dict()

cmd.iterate('binding_residues', 'stored.residues[resi] = resn')

print('\n\n residues : \n', stored.residues , 'lenght : ', len(stored.residues))

cmd.delete("binding_residues")

输出结果:

------------------------------------------------

  PyMOL Version :  2.3.0


------------------------------------------------


 residues : 
 {'4': 'TYR', '36': 'HIS', '38': 'THR', '41': 'TYR', '66': 'PHE', '68': 'THR', '69': 'GLN', '74': 'ALA', '100': 'TYR', '104': 'ARG', '106': 'HIS', '108': 'THR', '111': 'TYR', '134': 'GLU', '135': 'GLU', '136': 'LEU', '137': 'ASP', '140': 'TRP', '202': 'SO4'} lenght :  19

 resi :  4   resn :  TYR

 resi :  36   resn :  HIS

 resi :  38   resn :  THR

 resi :  41   resn :  TYR

 resi :  66   resn :  PHE

 resi :  68   resn :  THR

 resi :  69   resn :  GLN

 resi :  74   resn :  ALA
PyMOL>refresh_wizard
Selected!
 ExecutiveRMS: RMSD =    0.022 (4 to 4 atoms)
 Mutagenesis: 7 rotamers loaded.
before apply !!!!!!!!!!!!!
mutated !!!!!!!!!!!!!

 resi :  100   resn :  TYR

 resi :  104   resn :  ARG

 resi :  106   resn :  HIS

 resi :  108   resn :  THR

 resi :  111   resn :  TYR

 resi :  134   resn :  GLU

 resi :  135   resn :  GLU

 resi :  136   resn :  LEU

 resi :  137   resn :  ASP

 resi :  140   resn :  TRP

 resi :  202   resn :  SO4


 residues : 
 {'4': 'TYR', '36': 'HIS', '38': 'THR', '41': 'TYR', '66': 'PHE', '68': 'THR', '69': 'GLN', '74': 'TRP', '100': 'TYR', '104': 'ARG', '106': 'HIS', '108': 'THR', '111': 'TYR', '134': 'GLU', '135': 'GLU', '136': 'LEU', '137': 'ASP', '140': 'TRP', '202': 'SO4'} lenght :  19

它有 74 ALA ---> 74 TRP :

enter image description here

© www.soinside.com 2019 - 2024. All rights reserved.