1

我为 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 运行时它会起作用?

如果您能帮助我解决这两个问题,我将不胜感激。先感谢您,

此致,

路易斯

4

0 回答 0