目前,我正在创建一个选择,其中每个突出显示的残基处的丙氨酸点突变的残基距离配体 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 埃的残基创建选择后,我可以对每个突出显示的残基进行一一突变,并将它们保存到我的文件中。我希望这个过程发生在所有单独选择的残基上,这就是为什么我为诱变函数创建了一个简单的循环。
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 :