Как создать петлю переименования 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
,