如何创建pymol重命名循环

how to create pymol rename loop

我想创建一个循环来更改 PyMol 中的交互名称。但是在一个选择循环之后它崩溃并且不起作用。

def get_dists(interactions): # interactions=([1,2], [3,4])

    for i in interactions:
        a = "////" + str(i[0]) + "/C2'"
        b = "////" + str(i[1]) + "/C2'"
        cmd.distance("(" + a + ")", "(" + b + ")")

        for j in range(1, 599):
            x = "dist" + "0" + str(j)
            y = str(i[0]) + " " + str(i[1])
            cmd.set_name(str(x), str(y))

在 Pymol 中,交互的默认名称是 dist01, 02, 03。

我想把这些改成1_3,5_59,4_8,(残基之间的相互作用)。

除了一件事,您的代码完全没问题:如果 PyMol 没有成功 set_name,整个脚本将中止。当您将其更改为时,它应该可以工作:

try:
    cmd.set_name(str(x), str(y))
except:
    print('failed to rename')

一些补充意见:

  • y = str(i[0]) + " " + str(i[1]) 应该是 y = str(i[0]) + "_" + str(i[1])
  • 此行可能用于填充零 x = "dist" + "0" + str(j)。只有当 j 是单个数字时才需要,否则距离对象的名称是 dist20dist123
  • cmd.set_name(str(x), str(y)) 可以简化为 cmd.set_name(x, y) 因为 xy 已经是 strings.