python实现pymol批量比对蛋白(align)

python实现pymol批量比对蛋白(align)

!!!发现个问题,运行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.9for result in results:
    if result[2][0] < 0.9:
        f.write('{} vs {}: {}\n'.format(result[0], result[1], result[2][0]))

参考

  1. https://zhuanlan.zhihu.com/p/358639664
  2. New Bing
  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值