Я подготовил скрипт для Pymol, который хорошо работает при оценке значений RMSD для списка остатков представляющих интерес белков (целевые остатки генерируются встроенными командами скрипта). Однако я хотел реализовать скрипт, позволяющий пользователю выбирать анализируемые остатки. Я попытался использовать функцию ввода, но она не работает. Поскольку код немного длинный, я постепенно упростил сценарии. Таким образом, я получил следующие два скрипта:
"test.py":
import Bio.PDB
import numpy as np
from pymol import cmd
import os,glob
from LFGA_functions import user_entered
List_tot = user_entered()
print (List_tot)
, который вызывает простую функцию user_entered изнутри My_function.py script:
def user_entered():
List_res = []
List_tot = []
a = input("Please indicate the number of residues to analyze/per monomer:")
numberRes =int(a)
for i in range(numberRes):
Res = input("Please provide each residue NUMBER and hit ENTER:")
Res1 = int(Res)
Res2 = Res1+2000
Res3 = Res1+3000
Res4 = Res1+4000
Res5 = Res1+5000
Res6 = Res1+6000
List_res = (str(Res1),str(Res2),str(Res3),str(Res4),str(Res5),str(Res6))
List_tot.append(List_res)
return List_tot
Скрипт "test.py" хорошо работает, когда выполняется Python (3.7.5, который устанавливается с Pymol 2.3.4, в Windows 7 Prof) из windows командная строка. Пример результата: [первый ввод, указывающий, что будут обрабатываться 2 случая, а затем идентификационный номер для каждого случая] [1]
Однако, когда скрипт запускается из Pymol GUI, я получаю следующее сообщение об ошибке: input (): lost sys.stdin
Кто-нибудь знает, в чем проблема. Очевидно, я очень примитивный Python пользователь ...
Я также хотел бы спросить кое-что, связанное с этой проблемой ... в оригинальном сценарии, который хорошо работает в Pymol, прежде чем пытаться реализовать "ввод" "вариант, я временно храню некоторые данные (имя остатка, тип и цепочку) в виде" набора ". Мне нужен набор, а не список, потому что он автоматически удаляет повторы данных. Однако, когда я пытаюсь запустить его с PYthon (думая о преодолении вышеупомянутой проблемы ввода), он останавливается с сообщением: имя 'close_to_A' не определено. Однако, как показано в части кода, показанной здесь ниже, и действительно работает в Pymol.
...
# Step 3:
# listing of residues sufficiently close to chainA
# that will be considered in calculation of RMSD during trajectory
cmd.load("%s/%s" %(path3,"Average.pdb"), "Average", quiet=0)
cmd.select("around_A", "Average and chain B+C near_to 5 of chain A")
cmd.select("in_A", "Average and chain A near_to 5 of chain B+C")
close_to_A = set()
cmd.iterate("(around_A)","close_to_A.add((chain,resi,resn))")
cmd.iterate("(in_A)","close_to_A.add((chain,resi,resn))")
cmd.delete("around_A")
cmd.delete("in_A")
...
Как мне определить набор в Python 3? Почему это работает при запуске из Pymol?
Буду очень признателен, если вы поможете мне решить эти две проблемы. Заранее спасибо,
С наилучшими пожеланиями,
Луис