一、PointSite背景简单介绍
现在有很多AI开发的各种方法和工具,可以替代传统的CADD工具。这里介绍的PointSite这个工具可以从原子级别识小分子的结合位点,参考文章来源于Zhen Li的工作,原文链接:
PointSite将原始的3D蛋白质结构转译成点云(point clouds), 然后使用基于U-Net的Submanifold Sparse Convolution (SSC)进行分割。PointSite在位点的原子层级识别上较其他方法获得显著的提升,当与其他口袋层面的识别方法相结合,可以获得最优的性能。
文章还是很有意思的,感兴趣的同学可以看看。
二、PointSite的安装及使用
PointSite提供了源代码:PointSite/PointSite: PointSite: a point cloud segmentation tool for identification of protein ligand binding atoms (github.com)
## 安装方法
#复制源代码
git clone --recursive https://github.com/PointSite/PointSite_Inference.git
cd PointSite_Inference/
#建立conda虚拟环境,安装使用到的包
./install.sh
在执行 /install.sh可能会出现pytroch装不上的情况。单独使用conda安装一下即可,安装1.4.0或者1.5.0都可以:
conda install pytorch torchvision torchaudio cudatoolkit=11.3 -c pytorch
运行案例:
conda activate pointsite_inference
chmod +x ./util/PDB_Tool
chmod +x ./util/PDB_To_XYZ
python inference.py --output blind_out --data example/blind --select_list example/blind_list
conda deactivate
程序根据example/blind_list中的PDB名单,从example/blind目录中提取PDB文件,将结果保存在blind_out文件夹内。example/blind_list中包含了81个蛋白,单V100 GPU的机子,运行时间大概为10分钟左右。
blind_out文件夹内每一个输入的PDB会产生一个结果文件夹,其中有*_output.xyz文件和可视化文件夹,即为预测的结果。
三、实际检测
这里,以5T1A为例子,其中包含了两个小分子,一个为底物小分子,一个为变构调剂小分子。如下图:
PointSite的预测结果如下图,大致相关位置:
可以到看预测的位置还是很准的,位置很接近。主要的是,连变构小分子的位置都可以被标记到!
但是存在一个问题,PointSite仅给出了可视化的文件,预测为结合口袋的残基标为红色。但是并没有直接给出每一个氨基酸的标签(True/False)。
四、pymol标记Pointsite的结果
我们查看了代码发现,PointSite先使用了PDB-Tool工具将pdb文件进行了预处理,删除了不必要的水分子等,然后从生成的pdb文件中提取原子,用于点云分割,最后给出每一个原子的颜色标记。
源代码中的预处理方式:
下面给出了,使用PointSite进行位点预测,并将预测出来的位点使用dpb文件中的Bfactor标记出来的代码 PointSite_Predict_Visual.py:
#encoding=utf-8
SOURCE_DATA_FOLDER = './PDB-Pool'
OUT_PATH = './Result'
HANDLE_PDB = SOURCE_DATA_FOLDER+'-out'
SOURCE_DATA_LIST = 'test' #用于保存源数据中的PDB名
import os
#根据PDB-Pool文件夹,生成PDB文件列表
files = os.listdir(SOURCE_DATA_FOLDER)
files = [i[:-4] for i in files]
with open(SOURCE_DATA_LIST, 'w') as f:
for pdb in files:
f.write(pdb+'\n')
#使用PointSite寻找小分子的结合位点,结果在Test文件夹中
cmd_ = './pointsite_run.sh {} {} {} ./'.format(SOURCE_DATA_LIST,
SOURCE_DATA_FOLDER, OUT_PATH)
os.system(cmd_)
# 获取PointSite处理以后的蛋白文件
out_dir = HANDLE_PDB
os.system('mkdir {}'.format(out_dir))
files = os.listdir(SOURCE_DATA_FOLDER)
for file in files:
file = file[:-4]
cmd_ = './util/PDB_Tool -i ./PDB-Pool/{}.pdb -r _ -R 1 -o ./PDB-Pool-out/{}-out.pdb'.format(file, file)
os.system(cmd_)
# 将PointSite和PDB_Tool处理的结果整合起来,得到每一个残基是否被预测为结合口袋
pdb_out_list = os.listdir(HANDLE_PDB)
point_out_list = os.listdir(OUT_PATH)
point_out_list = [file for file in point_out_list if len(file)==4 ]
#整合起来结果保存在pdb文件中
for pdb in point_out_list:
print(pdb)
#打开pointsit结果文件
with open (OUT_PATH+"/{}/visual/{}_atom_pred.obj".format(pdb, pdb), 'r') as f:
lines = f.readlines()
qs = [line.split()[4] for line in lines]
qs = [" 200.0" if i=='255' else " 10.0" for i in qs]
with open (HANDLE_PDB+"/{}-out.pdb".format(pdb), 'r') as f:
lines = f.readlines()
for i in range(len(lines)):
lines[i]=lines[i][:61]+qs[i]+lines[i][67:] #pdb的第
#写入PDB文件
with open(OUT_PATH+"/{}/visual/{}_pointsite_pred.pdb".format(pdb, pdb),'w') as f:
f.writelines(lines)
使用方法:将该文件拷贝到Pointsite的目录下
python PointSite_Predict_Visual.py
运行完毕以后,就可以在Result文件夹内,找到相应的*_pointsite_pred.pdb文件,例如1A3W蛋白的结果文件在:./Result/1A3W/visual/1A3W_pointsite_pred.pdb。示意图如下,红色为Pointsite识别的结合位点。
(注:这个蛋白有两个成药位点,一个是变构调节功能位点,一个是底物功能为点,说明Pointsite也可以识别变构位点)