无法构建可视化 Alphafold2 预测的函数
Trouble constructing function to visualize Alphafold2 predictions
我正在尝试使用以下脚本(主要基于此处精彩的 Colab:https://colab.research.google.com/github/sokrypton/ColabFold/blob/main/AlphaFold2.ipynb#scrollTo=UGUBLzB3C6WN)来可视化氨基酸序列的预测折叠。我在以 运行 的方式配置脚本时遇到问题,并且出于很大程度上的体制原因,我无法自由地 运行-and-debug 我的数据上的脚本,并且可以实际上只将它用于最后的 运行s。我现在收到的错误消息(参考 show_pdb()
倒数第三行)是:
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()
需要在 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}})
我正在尝试使用以下脚本(主要基于此处精彩的 Colab:https://colab.research.google.com/github/sokrypton/ColabFold/blob/main/AlphaFold2.ipynb#scrollTo=UGUBLzB3C6WN)来可视化氨基酸序列的预测折叠。我在以 运行 的方式配置脚本时遇到问题,并且出于很大程度上的体制原因,我无法自由地 运行-and-debug 我的数据上的脚本,并且可以实际上只将它用于最后的 运行s。我现在收到的错误消息(参考 show_pdb()
倒数第三行)是:
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()
需要在 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}})