在前天运行程序 ./program/vina时,fdaapp数据库中的部分配体出现错误。
Parse error on line 12 in file "./fdaapp/DB09137.pdbqt": ATOM syntax incorrect: "Tc"
is not a valid AutoDock type. Note that AutoDock atom types are case-sensitive.
类似的,其他金属离子B, Gd, nan, Pt, As, Bi, Al, Ag, Ga, La, Sr等也会出现类似的错误。AutoDock对部分带金属离子的配体不能正常对接。在dock.log文件里显示为(已省略部分信息):
#错误的输出
Calculate DB00188
Reading input ... Calculate DB00196#在读取配体文件时报错(见上),进而直接跳过该配体计算下一个配体
mode | affinity | dist from best mode
| (kcal/mol) | rmsd l.b.| rmsd u.b.
-----+------------+----------+----------
1 -6.5 0.000 0.000
Writing output ... done.
#####################################
#正常的输出,在读取配体文件时显示done
Calculate DB00209
Reading input ... done.
mode | affinity | dist from best mode
| (kcal/mol) | rmsd l.b.| rmsd u.b.
-----+------------+----------+----------
1 -6.1 0.000 0.000
Writing output ... done.
因此,在得到Score.txt时,会将下一配体DB00196的计算结果算到DB00188中。而DB00196无计算结果。
Calculate DB00188
1 -6.5 0.000 0.000
Calculate DB00209
1 -6.1 0.000 0.000
解决办法
在保存dock结果时,在Calculate DB00188
前添加一行***Start***
,如下图
#添加***Start***以保证Calculate在行首
Calculate DB00188
Reading input ... ***Start***
Calculate DB00196
在读取dock.log文件,整理以得到Score.txt文件时,代码如下:
while(<FILE>)
{
if($_=~/^Calculate/)
{
chomp $_;
$temp_ligand=$_;
}
if($_=~/^ 1 /)
{
@buff=();
system "echo $temp_ligand >> $outdir/Score.txt";
my @temp=split(/\s+/, $temp_ligand);
push @buff, $temp[1];
system "echo '$_' >> $outdir/Score.txt";
@temp=split(/\s+/, $_);
push @buff, $temp[2];
push @data, [@buff];
}
}