Как создать петлю переименования pymol

Я хотел бы создать цикл для изменения имени взаимодействия в 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 (взаимодействие между остатками).

1 ответ

Решение

Ваш код полностью в порядке, за исключением одного: если 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 является одной цифрой, в противном случае имя объекта расстояния dist20 или же dist123
  • cmd.set_name(str(x), str(y)) можно упростить до cmd.set_name(x, y) поскольку x а также y уже strings,
Другие вопросы по тегам