测量最小距离-pymol
脚本
- """
- Created on Fri Dec 24 14:33:08 2021
- @author: lywu
- """
- from pymol import cmd
- from math import sqrt
- #import numpy as np
- def mindist():
- atoms = {}
- atoms2 = {}
- list1=list(range(4,201,1)) #anti-residue-index
- list2=list(range(292,700,1)) #spike-no-NTD-residue-index
- for r in list1:
- command = "7ly2 and chain L 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 = "7ly2 and chain B and resi %s" % (i)
- coordinates = {'atoms': []}
- cmd.iterate_state(-1, command,
- 'atoms.append([x, y, z, name])', space=coordinates)
- atoms2[i] = coordinates['atoms']
- distances=[]
- for i in list2:
- min_dist= 10**3
- #min_dist_residue = 1000
- 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]]
- distances.append(min_dist)
- # cmd.distance('dist_%s_%s' % (min_c[0], min_i[0]),
- # 'chain S and resi %s and name %s' % (min_c[0], min_c[1]),
- # 'chain A and resi %s and name %s' % (min_i[0], min_i[1]))
- min_dist_final=min(distances)
- print(min_dist_final)
- #np.savetxt("mindist_7lab-1.txt",min_dist_final)
- cmd.extend("mindist", mindist)
- mindist()
使用方法
1)修改list1和list2中对应的残基编号范围
2)修改command语句中的object和链标识信息
3)在pymol中输入 run mindist.py 即可进行输出最小距离
4)想要输出文本文件,可使用np.savetxt() 函数
备注
后续需要改进的地方:
1)增加argparse模块,获取参数输入;
2)在计算最小距离的同时,在pymol中显示出对应的原子和距离