如何显示 Pymol 中残基之间的距离
How to show distance between residues in Pymol
使用this PDB file and the following PyMOL代码:
cd /Users/foo/Desktop/
reinitialize
load pdp_4gg6CD1_I.pdb
as cartoon
select chainI, chain I
select chainC, chain C
select chainD, chain D
show sticks, chainI
spectrum count, cyan_red, chainI
color yellow, chain C
我可以制作这张图片:
我要做的是显示chainC中选中的残基之间的距离(黄色)
用 chainI(棍子)。
我要的chainC选出的残基是这样的:
[9, 23, 25, 44, 53, 54, 55, 59, 62, 63, 66]
Y Y H W R R F F T N V
我该怎么做?
- 让我们使用
cmd.iterate
来获取选择中的所有原子(链C和链I)并将坐标和原子名称写入字典以备后用。
- 然后我们可以计算所有原子之间的所有距离,并将最接近的残基和原子名称写入两个列表(
min_c
和min_i
)
- 在最后一步中,我们只需要绘制最近的原子之间的距离对象就可以了:)
from math import sqrt
def closestAtoms(list1=[9, 23, 25, 44, 53, 54, 55, 59, 62, 63, 66], list2=[5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17]):
atoms = {}
atoms2 = {}
for r in list1:
command = "chain C and resi %s" % (r)
coordinates = {'atoms': []}
cmd.iterate_state(-1, command, 'atoms.append([x, y, z, name])', space=coordinates)
atoms[r] = coordinates['atoms']
for i in list2:
command = "chain I and resi %s" % (i)
coordinates = {'atoms': []}
cmd.iterate_state(-1, command, 'atoms.append([x, y, z, name])', space=coordinates)
atoms2[i] = coordinates['atoms']
for i in list2:
min_dist = 10**3
for c in list1:
for cc in atoms[c]:
for ii in atoms2[i]:
dist = sqrt((cc[0] - ii[0])**2 + (cc[1] - ii[1])**2 + (cc[2] - ii[2])**2)
if dist < min_dist:
min_dist = dist
min_c = [c, cc[3]]
min_i = [i, ii[3]]
cmd.distance('dist_%s_%s' % (min_c[0], min_i[0]), 'chain C and resi %s and name %s' % (min_c[0], min_c[1]), 'chain I and resi %s and name %s' % (min_i[0], min_i[1]))
cmd.extend("closestAtoms", closestAtoms)
使用this PDB file and the following PyMOL代码:
cd /Users/foo/Desktop/
reinitialize
load pdp_4gg6CD1_I.pdb
as cartoon
select chainI, chain I
select chainC, chain C
select chainD, chain D
show sticks, chainI
spectrum count, cyan_red, chainI
color yellow, chain C
我可以制作这张图片:
我要做的是显示chainC中选中的残基之间的距离(黄色) 用 chainI(棍子)。
我要的chainC选出的残基是这样的:
[9, 23, 25, 44, 53, 54, 55, 59, 62, 63, 66]
Y Y H W R R F F T N V
我该怎么做?
- 让我们使用
cmd.iterate
来获取选择中的所有原子(链C和链I)并将坐标和原子名称写入字典以备后用。 - 然后我们可以计算所有原子之间的所有距离,并将最接近的残基和原子名称写入两个列表(
min_c
和min_i
) - 在最后一步中,我们只需要绘制最近的原子之间的距离对象就可以了:)
from math import sqrt
def closestAtoms(list1=[9, 23, 25, 44, 53, 54, 55, 59, 62, 63, 66], list2=[5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17]):
atoms = {}
atoms2 = {}
for r in list1:
command = "chain C and resi %s" % (r)
coordinates = {'atoms': []}
cmd.iterate_state(-1, command, 'atoms.append([x, y, z, name])', space=coordinates)
atoms[r] = coordinates['atoms']
for i in list2:
command = "chain I and resi %s" % (i)
coordinates = {'atoms': []}
cmd.iterate_state(-1, command, 'atoms.append([x, y, z, name])', space=coordinates)
atoms2[i] = coordinates['atoms']
for i in list2:
min_dist = 10**3
for c in list1:
for cc in atoms[c]:
for ii in atoms2[i]:
dist = sqrt((cc[0] - ii[0])**2 + (cc[1] - ii[1])**2 + (cc[2] - ii[2])**2)
if dist < min_dist:
min_dist = dist
min_c = [c, cc[3]]
min_i = [i, ii[3]]
cmd.distance('dist_%s_%s' % (min_c[0], min_i[0]), 'chain C and resi %s and name %s' % (min_c[0], min_c[1]), 'chain I and resi %s and name %s' % (min_i[0], min_i[1]))
cmd.extend("closestAtoms", closestAtoms)