测量最小距离-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中显示出对应的原子和距离