作者,Evil Genius
今天我們來實現(xiàn)虛擬篩選。
第一步,處理蛋白質(zhì)PDB文件,注意這時候的PDB分子已經(jīng)進行了去水處理(pymol),其中去除水分子的注意事項。
當(dāng)PDB文件中含有水分子時,必須將其刪除,否則會嚴重影響對接結(jié)果的準(zhǔn)確性。
水分子的存在會帶來兩個核心問題:
物理位阻:水分子會占據(jù)結(jié)合口袋的空間,導(dǎo)致配體分子無法正確進入。
能量計算錯誤:對接軟件會將水分子視為蛋白的一部分,產(chǎn)生虛假的氫鍵和排斥力。
正確處理流程
正確做法是:在生成PDBQT文件前,刪除所有水分子(通常以 HOH 或 WAT 標(biāo)識),但需保留可能對催化或結(jié)合至關(guān)重要的結(jié)構(gòu)性水分子(數(shù)量極少,通常≤3個)。
推薦流程:
使用PyMOL或Chimera等可視化軟件查看結(jié)構(gòu),定位結(jié)合口袋。
刪除所有非關(guān)鍵水分子。
保留關(guān)鍵水分子:判斷依據(jù)可查看同源蛋白結(jié)構(gòu)文獻,或通過PyMOL觀察該水分子是否與蛋白/配體形成穩(wěn)定氫鍵網(wǎng)絡(luò)。
保存為新的PDB文件,再用于生成PDBQT。
去除水分子的前后對比

去水前

去水后
第一步:生成的蛋白質(zhì)PDB文件,加氫,加電荷,生成PDBQT
prepare_receptor.py -r protein_no_water.pdb -o protein.pdbqt -A hydrogens
但是我們最好聯(lián)合reduce使用,因為
所以完整的代碼是
reduce -FLIP protein_no_water.pdb > protein_h.pdb
# 轉(zhuǎn)換為 PDBQT 格式(必須使用 pythonsh)
prepare_receptor -r protein_h.pdb -o protein.pdbqt -A hydrogens
這個過程實現(xiàn)了
對蛋白質(zhì)分子的合并非極性氫(AutoDock/Vina 力場要求)
為所有原子分配正確的 AutoDock 原子類型(如 A、NA、OA 等)
計算并寫入 Gasteiger 部分電荷
第二步:對配體分子的處理
prepare_ligand.py -l ligand.pdb -o ligand.pdbqt -A hydrogens
這個輸入的格式包括pdb、mol2、sdf 等格式。
批量處理也很簡單
for ligand in *.pdb; do
name=$(basename "$ligand" .pdb)
prepare_ligand.py -l "$ligand" -o "${name}.pdbqt" -A hydrogens
done
第三步:定義柔性殘基(還是以41位的組氨酸和145的半胱氨酸為例)
用法
prepare_flexreceptor.py -r receptor_filename -s list_of_names_of_residues_to_move
例子
prepare_flexreceptor.py -r protein.pdbqt -s HIS41_CYS145
完成柔性殘基的定義后,將分別生成rigid區(qū)域和flex區(qū)域的pdbqt文件:
proH_rigid.pdbqt 剛性部分
proH_flex.pdbqt 柔性側(cè)鏈部分
第四步:設(shè)置對接盒子
示例如下,contig.txt
receptor = receptor.pdbqt
center_x = 15.0
center_y = 20.0
center_z = 10.0
size_x = 20.0
size_y = 20.0
size_z = 20.0
exhaustiveness = 32
num_modes = 9
energy_range = 3.0
其中參數(shù)的意義
exhaustiveness = 32 (搜索 exhaustive-ness,即搜索徹底性)
直譯:窮舉性、徹底性。
作用:這是最重要的參數(shù),控制著對接搜索的強度或努力程度。
具體含義:值越大,程序在配體-受體結(jié)合口袋中進行的全局搜索次數(shù)就越多。這能增加找到真正全局最優(yōu)結(jié)合構(gòu)象的概率,但同時會顯著增加計算時間(幾乎與設(shè)定值成正比)。
取值范圍與建議:
默認值:8。
快速篩選/測試:1 - 4(速度極快,用于排除明顯不結(jié)合的分子,但可能漏掉最優(yōu)解)。
常規(guī)對接:8 - 32(在精度和速度之間取得良好平衡。8是官方默認值,32已經(jīng)是相當(dāng)高的精度)。
高精度/最終確認:32 - 64或更高(用于已篩選出的幾個關(guān)鍵分子,追求最可靠的結(jié)果)。
核心原則:exhaustiveness 增加一倍,運行時間也大約增加一倍。建議先用小值(如4或8)快速測試流程,正式運行時再提高。
energy_range = 3.0 (Energy Range,即能量范圍)
直譯:能量范圍。
作用:與 num_modes 配合使用,用于控制輸出構(gòu)象之間的能量差異。
具體含義:程序只會輸出那些結(jié)合能(Affinity)與最優(yōu)構(gòu)象(排名第一)的差值 ≤ energy_range 的構(gòu)象。超過這個能量差的構(gòu)象,即使排名再靠前,也不會被輸出。
取值范圍與建議:
默認值:3.0 (單位:kcal/mol)。
原理:這是一個過濾機制。例如,如果最優(yōu)結(jié)合能為 -9.0 kcal/mol,設(shè)置 energy_range = 3.0,那么 Vina 只會輸出結(jié)合能優(yōu)于 -6.0 kcal/mol 的構(gòu)象。即使你設(shè)置了 num_modes = 9,但排名第9的結(jié)合能是 -5.8 kcal/mol(差值3.2 > 3.0),它也不會被輸出,實際輸出可能少于9個。
建議:
默認 3.0 即可,足以覆蓋大多數(shù)有意義的構(gòu)象變化。
如果只想看能量最低的幾個極近似構(gòu)象,可以減小到 1.0 或 1.5。
如果想看到更多樣化(但能量可能更高)的結(jié)合模式,可以增大到 4.0 或 5.0。
第五步:執(zhí)行分子對接
vina --config config.txt --receptor proH_rigid.pdbqt --flex proH_flex.pdbqt --ligand ligand.pdbqt --out out.pdbqt
批量對接呢?
#!/bin/bash
# 剛性受體和柔性殘基文件
RECEPTOR_RIGID="proH_rigid.pdbqt"
RECEPTOR_FLEX="proH_flex.pdbqt"
CONFIG_FILE="config.txt"
# 配體文件夾和輸出目錄
LIGAND_DIR="./ligands"
OUTPUT_BASE_DIR="./results"
# 創(chuàng)建輸出目錄
mkdir -p $OUTPUT_BASE_DIR
# 批量對接
for ligand_file in $LIGAND_DIR/*.pdbqt; do
ligand_name=$(basename "$ligand_file" .pdbqt)
output_dir="$OUTPUT_BASE_DIR/$ligand_name"
mkdir -p $output_dir
echo "正在對接: $ligand_name"
vina --config $CONFIG_FILE \
--receptor $RECEPTOR_RIGID \
--flex $RECEPTOR_FLEX \
--ligand $ligand_file \
--out "$output_dir/out.pdbqt" \
--log "$output_dir/log.txt"
done
echo "批量對接完成!"
其中使用autodock和vina力場的區(qū)別。
深入解讀:兩種力場的差異
雖然它們都能用來預(yù)測分子間結(jié)合模式,但背后的“方法論”完全不同:
AutoDock 4 系列:追求“還原”的物理模型
AutoDock 4 的力場更像是一個精簡版的分子力學(xué)力場,試圖直接計算物理相互作用。它包含了靜電能和去溶劑化能,使得對結(jié)合自由能的預(yù)測在理論上更“完整”。這種方法的優(yōu)點是準(zhǔn)確性高,但代價是計算復(fù)雜,速度較慢。為了應(yīng)對特殊場景,它還發(fā)展出了專門針對含鋅金屬蛋白的 AutoDock4Zn 力場,以及針對多環(huán)化合物的處理方案。AutoDock Vina:追求“效率”的經(jīng)驗?zāi)P?/strong>
Vina的設(shè)計哲學(xué)從一開始就偏向虛擬篩選——即在短時間內(nèi)處理成千上萬個分子。為此,它巧妙地“舍棄”了計算最耗時的靜電和溶劑化項,轉(zhuǎn)而用幾個經(jīng)驗性的、擬合出來的高斯函數(shù)來近似描述范德華力和氫鍵作用。它獨特的疏水項也能很好地捕捉疏水效應(yīng)。這套組合拳讓Vina在保持高精度的同時,速度極快,成為目前應(yīng)用最廣泛的對接軟件之一
調(diào)用ad4力場
prepare_gpf.py -l ligand.pdbqt -r proH_rigid.pdbqt -y
autogrid4 -p proH_rigid.gpf -l proH_rigid.glg
vina --flex proH_flex.pdbqt \
--ligand ligand.pdbqt \
--maps proH_rigid \
--scoring ad4 \
--exhaustiveness 32 \
--out out_ad4.pdbqt