文中所提到的命令行指令,在WSL ubuntu2204環(huán)境下計算
前期計算機篩選
生物活性:PeptideRanker
抗氧化性:AnOxPePred 1.0 /AnOxPP
毒性:ToxinPred3.0 (已經(jīng)更新 到3.0了怎么好多教程還在推送1.0)
分子對接
windows下可視化、批量的BatchVinaGUI(BVG),非常的好用,可是還是有一些問題
https://www.sciencedirect.com/science/article/pii/S2590123023004620
把文件夾建成這樣

受體從pdb 網(wǎng)站下載保存到r,使用BVG處理,保存到rq文件夾

開始準備配體
我的小肽pdb文件是使用colabfold 本地版生成的,使用自帶的amber relax,命令類似于
colabfold_batch --num-recycle 1 --amber --num-relax 1 --use-gpu-relax <小肽.fasta> <輸出文件夾>
(colabfold坑太大了開不了,可以參考這個寫的挺好:https://qiita.com/Ag_smith/items/bfcf94e701f1e6a2aa90)
找到里面的relax的文件,丟到文件夾l里,重命名一下簡化名稱,不要帶-,使用下劃線代替
配體加氫
reduce和obabel等大部分加氫軟件生成的pdbqt分子順序會錯亂,表現(xiàn)為打開以后有一些莫名其妙的鍵亂飛。查了這么久終于根據(jù)http://bbs.keinsci.com/thread-21411-1-1.html最終找到了可用的自動加氫軟件:rdkit2pdbqt.py(是watvina)的一部分記得引用。
配置好obabel與rdkit2pdbqt.py后運行,其中</mnt/d/biof/script/rdkit2pdbqt.py>是rdkit2pdbqt.py保存的絕對地址
for file in *.pdb; do
if [ -f "$file" ]; then
# 生成臨時 SDF 文件名
temp_sdf=$(mktemp /tmp/XXXXXX.sdf)
# 使用 OpenBabel 將 PDB 文件轉換為 SDF 文件
obabel -ipdb "$file" -osdf -O "$temp_sdf"
if [ $? -ne 0 ]; then
echo "Error converting $file to SDF format."
continue
fi
# 使用 rdkit2pdbqt.py 處理 SDF 文件并生成 PDBQT 文件
python3 /mnt/d/biof/script/rdkit2pdbqt.py -l "$temp_sdf" > "${file%.pdb}.pdbqt"
if [ $? -ne 0 ]; then
echo "Error processing $file with rdkit2pdbqt.py."
fi
# 刪除臨時 SDF 文件
rm -f "$temp_sdf"
fi
done
將生成的文件丟到lq里,準備開始對接
對接設置
不建議使用盲對接,盲對接有論文建議ADCP,本次采用自定義對接
算法窮進度低于使用線程數(shù)時

保存到protocol中,注意如果是自定義的話,每次生成了之后要把文件名從custom改為受體的文件名。
開始對接
如果有獨顯的話GPU最快,兩個quick也會快點 ,如果單獨算的話可以使用Vina1.1.2,我算過和vina官方的教程結果幾乎是一樣的。
如果使用vina-gpu計算后,protocol下的txt文件末尾會出現(xiàn)thread=10000,一定記得刪除了之后才能運行其他的對接算法。并且vina-gpu不可用于盲對接

不知道為啥BVG不能生成合并文件,之后使用下面的mergePDB.py腳本生成合并受體與配體的3d文件
使用wsl,在lq、rq、mergePDB的父文件夾運行運行。
(這里還涉及到開源pymol的安裝,參考一下這個:https://www.cnblogs.com/dechinphy/p/pymol.html)
import pymol
from pymol import cmd
import os
import logging
# 配置日志記錄
log_file = os.path.join(os.getcwd(), 'mergePDB', 'err.log')
logging.basicConfig(filename=log_file, level=logging.ERROR, format='%(asctime)s - %(levelname)s - %(message)s')
# 獲取當前工作目錄
work_folder = os.getcwd()
# 讀取 mergelist.txt 文件
mergelist_file = os.path.join(work_folder, 'mergePDB', 'mergelist.txt')
# 定義輸出文件夾
output_folder = os.path.join(work_folder, 'mergePDB')
# 確保輸出文件夾存在
if not os.path.exists(output_folder):
os.makedirs(output_folder)
# 啟動 PyMOL
pymol.finish_launching()
# 讀取文件
with open(mergelist_file, 'r') as f:
lines = f.readlines()
# 處理每一行
for line in lines:
if line.strip(): # 忽略空行
# 提取 receptor_name 和 ligand_name
parts = line.strip().split('-')
receptor_name = parts[0]
ligand_name = parts[1]
# 構建文件路徑
receptor_path = os.path.join(work_folder, 'rq', f'{receptor_name}.pdbqt')
ligand_path = os.path.join(work_folder, 'results', f'{receptor_name}-{ligand_name}', f'{receptor_name}-{ligand_name}-1.pdbqt')
# 檢查文件是否存在
if not os.path.exists(receptor_path) or not os.path.exists(ligand_path):
error_message = f"Missing files for {receptor_name} and/or {ligand_name}"
logging.error(error_message)
print(error_message)
continue
# 加載PDBQT文件
cmd.load(receptor_path, 'receptor')
cmd.load(ligand_path, 'ligand')
# 修改配體的鏈標識符
cmd.alter('ligand', 'chain="Z"')
# 合并分子
cmd.create('combined', 'receptor or ligand')
# 移除不需要的鏈
# cmd.remove('combined and not (chain A or chain B or chain Z)') # 注意這里使用了新設置的鏈標識符 "Z"
# 保存為PDB文件
output_filename = f'{receptor_name}_{ligand_name}_combined_ABJ.pdb'
output_path = os.path.join(output_folder, output_filename)
cmd.save(output_path, 'combined')
# 清除對象以避免內(nèi)存溢出
cmd.delete('receptor')
cmd.delete('ligand')
cmd.delete('combined')
# 關閉 PyMOL
cmd.quit()
2D化界面
申請一個ligplus的學術使用權,注意要用校園/機構郵箱,然后就可以了。