0

我想通过 align 函数获取自动对接生成的每对姿势的 RMSD:

align pose1, pose2, cycles=0, transform=0

我不想使用姿势的名称作为输入,而是想访问一个包含所有姿势的列表。此列表通过以下方式成功获得:

allobjects = cmd.get_object_list('all')

print(allobjects[x]) 

成功打印此列表中位置 x 的姿势。

但是,以下方法不起作用:

align allobjects[1], allobjects[2], cycles=0, transform=0

产生错误:无效的选择名称“allobjects [1]”

用列表索引提供 align 函数的正确方法是什么?

先感谢您!

4

1 回答 1

0

据我所知,您不能将 python 变量中的值传递给 PyMOL 的内置函数。但是几乎总是有一个等效的 python 函数可以做同样的事情并且可以接收常规的 pythonic 参数。如果是这样的aligncmd.align()

的结果cmd.align()不像align函数那样打印出来,而是返回一个包含 7 个元素的列表,这是计算出的 RMSD 的第一个元素。其余值的含义可以在函数的源代码中找到。

我还假设您打算为每对可能的对接结构计算 RMSD。为此,您必须使用所有结构的所有独特组合并手动对它们执行 python 循环。请注意,计算时间将随着您拥有的结构数量呈指数增长。

allobjects = cmd.get_object_list('all')
from itertools import combinations
for pair in combinations(allobjects, 2): print(pair[0], pair[1], cmd.align(pair[0], pair[1], cycles=0, transform=0)[0])
于 2022-02-22T12:25:07.010 回答