我为 Pymol 准备了一个脚本,它可以很好地评估感兴趣的蛋白质残基列表的 RMSD 值(目标残基由脚本嵌入命令生成)。但是,我希望实现脚本以允许用户选择分析的残留物。我曾尝试使用输入功能,但它无法正常工作。由于代码有点长,我逐步简化了脚本。这样,我最终得到了以下两个脚本:
“测试.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)
它从“My_function.py”脚本中调用简单的“user_entered”函数:
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”在由 Windows 命令行中的 Python(3.7.5,随 Pymol 2.3.4 安装,在 Windows 7 Prof 下)执行时运行良好。结果示例:[第一个输入表示将处理 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 运行时它会起作用?
如果您能帮助我解决这两个问题,我将不胜感激。先感谢您,
此致,
路易斯