构建函数以可视化Alphafold2预测时遇到问题

2024-06-01 06:58:59 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图使用以下脚本(主要基于这个奇妙的Colab:https://colab.research.google.com/github/sokrypton/ColabFold/blob/main/AlphaFold2.ipynb#scrollTo=UGUBLzB3C6WN)来可视化氨基酸序列的预测折叠。我无法以运行的方式配置脚本,而且主要是由于体制原因,我无法在数据上自由运行和调试脚本,只能在最后运行时使用它。我现在收到的错误消息(参考倒数第三行)是:

AttributeError: 'NoneType' object has no attribute 'show'

有人能帮我解决这个问题吗?也许还有其他我还不清楚的问题?我已经包括了上下文的散列部分,如果有必要或需要的话,但是我想帮助的主要部分是show_pdb()函数的构造

import os
import re
import glob

#@title Display 3D structure {run: "auto"}
model_num = 1 #@param ["1", "2", "3", "4", "5"] {type:"raw"}
color = "lDDT" #@param ["chain", "lDDT", "rainbow"]
show_sidechains = False #@param {type:"boolean"}
show_mainchains = False #@param {type:"boolean"}

def get_filepaths(root_path: str, file_regex: str):
    return glob.glob(os.path.join(root_path, file_regex))

rootdir = '/projects/p31492/long_alphafold/alphafold__long_sequence_file'
regex = '.pdb'
pdb_files = get_filepaths(rootdir, regex)

def show_pdb(model_num=1, show_sidechains=False, show_mainchains=False, color="lDDT"):
    for file in pdb_files:      
        view = py3Dmol.view(js='https://3dmol.org/build/3Dmol.js',)
        view.addModel(open(file,'r').read(),'pdb')

        if color == "lDDT":
            view.setStyle({'cartoon': {'colorscheme': {'prop':'b','gradient': 'roygb','min':50,'max':90}}})
        elif color == "rainbow":
            view.setStyle({'cartoon': {'color':'spectrum'}})
        elif color == "chain":
            for n,chain,color in zip(range(homooligomer),list("ABCDEFGH"),
                             ["lime","cyan","magenta","yellow","salmon","white","blue","orange"]):
                view.setStyle({'chain':chain},{'cartoon': {'color':color}})
        if show_sidechains:
            BB = ['C','O','N']
            view.addStyle({'and':[{'resn':["GLY","PRO"],'invert':True},{'atom':BB,'invert':True}]},
                                {'stick':{'colorscheme':f"WhiteCarbon",'radius':0.3}})
            view.addStyle({'and':[{'resn':"GLY"},{'atom':'CA'}]},
                                {'sphere':{'colorscheme':f"WhiteCarbon",'radius':0.3}})
            view.addStyle({'and':[{'resn':"PRO"},{'atom':['C','O'],'invert':True}]},
                                {'stick':{'colorscheme':f"WhiteCarbon",'radius':0.3}})  
        if show_mainchains:
            BB = ['C','O','N','CA']
            view.addStyle({'atom':BB},{'stick':{'colorscheme':f"WhiteCarbon",'radius':0.3}})

        view.zoomTo()
    return view

show_pdb(model_num,show_sidechains, show_mainchains, color="1DDT").show()
if color == "lDDT": plot_plddt_legend().show()  
plot_confidence(model_num).show()

Tags: viewfalsechainmodelparamshownumpdb
1条回答
网友
1楼 · 发布于 2024-06-01 06:58:59

视图对象需要在for循环之前创建,以便它在每个周期更新,而不是覆盖以前的版本。 所以下面的代码

 for file in pdb_files:      
        view = py3Dmol.view(js='https://3dmol.org/build/3Dmol.js',)
        view.addModel(open(file,'r').read(),'pdb')
        ...

将看起来像下面这样

 
 view = py3Dmol.view(js='https://3dmol.org/build/3Dmol.js')
 for file in pdb_files:
        view.addModel(open(file,'r').read(),'pdb')
        ...

在代码后面使用变量homooligomer之前,需要为其赋值

 elif color == "chain":
            for n,chain,color in zip(range(homooligomer),list("ABCDEFGH"),
                             ["lime","cyan","magenta","yellow","salmon","white","blue","orange"]):
                view.setStyle({'chain':chain},{'cartoon': {'color':color}})

相关问题 更多 >