!!!
发现个问题,运行align多次后RMSD数值会变,得重启服务后以第一次为准!!!
利用python实现pymol批量比对蛋白,固定其中一个蛋白比对其他蛋白
安装
我用的jupyter在Windows环境编辑,从anaconda安装,但是如果用pip install ipymol
在jupyter里安装pymol,是无法用import pymol
正常导入的。解决方法是Ctrl + R,输入“cmd”,进入命令提示符,用conda install -c schrodinger pymol
安装。
运行
import pymol
from pymol import cmd // 导入pymol中cmd功能
import os // 导入os模块,实现读写本地文件
// .pdb文件输入路径
input_dir = "C:/Users/Hypo/Desktop/123"
// 读取pdb文件
pdb_files = [f for f in os.listdir(input_dir) if f.endswith(".pdb")]
// 将pdb载入至pymol
for pdb in pdb_files:
pymol.cmd.load(os.path.join(input_dir, pdb))
//已载入的列表
//pymol.cmd.get_object_list()
results = [] // 创建一个空列表来存储align的结果
pdb_list = pymol.cmd.get_object_list()
// 将pdb_list中文件依次与aa.pdb比对,并将结果写入results
for ref in pdb_list:
result = pymol.cmd.align(ref, "aa")
results.append((ref, "aa", result))
// 本地创建,并写入文件
f = open('C:/Users/Hypo/Desktop/456/results.txt', 'w')
for result in results:
f.write(str(result) + '\n')
// 关闭文件
f.close()
align输出含义为:
1、RMSD after refinement
2、Number of aligned atoms after refinement
3、Number of refinement cycles
4、RMSD before refinement
5、Number of aligned atoms before refinement
6、Raw alignment score
7、Number of residues aligned
进一步优化输出结果
上述代码输出结果只有align标准7个数,缺少比对文件的消息,进一步优化:
# 添加对比文件名,仅保留RMSD
for result in results:
f.write('{} vs {}: {}\n'.format(result[0], result[1], result[2][0]))
# 添加对比文件名,仅保留RMSD并输出RMSD < 0.9的
for result in results:
if result[2][0] < 0.9:
f.write('{} vs {}: {}\n'.format(result[0], result[1], result[2][0]))
参考
- https://zhuanlan.zhihu.com/p/358639664
- New Bing