📅  最后修改于: 2023-12-03 14:47:06.137000             🧑  作者: Mango
RMSD(Root Mean Square Deviation)是计算两个基于不同结构的蛋白质或分子之间的结构差异的标准方法。在生物物理学和计算化学中很常见,对于比较分子构象、分析分子动力学模拟的结果以及预测复合物结构都有着非常重要的作用。
本文将介绍如何使用 awk 计算两个 pdb 文件之间的 RMSD,以及如何进行批量计算。
下面我们将使用 awk 计算两个 pdb 文件 file1.pdb
和 file2.pdb
之间的 RMSD。
首先,我们需要使用一些命令行工具将 pdb 文件中的信息解析出来,这里我们使用 grep
和 cut
命令。
grep '^ATOM' file1.pdb | cut -c 31-54,64-66
这个命令将会输出 file1.pdb
中的所有原子的坐标。其中 -c 31-54
表示从第 31 到第 54 列,是原子的坐标信息;-c 64-66
表示从第 64 列到第 66 列,是标识原子名的字符。
grep '^ATOM' file2.pdb | cut -c 31-54,64-66
同样,这个命令会输出 file2.pdb
中所有原子的坐标和标识原子名的字符。
接下来我们将把这两个命令的输出传给 awk 进行 RMSD 的计算。下面是计算 RMSD 的 awk 脚本:
#!/bin/awk -f
BEGIN{
natoms=0;
dsum=0;
printf("Calculate RMSD...\n");
}
{
file1x[natoms]=$1;
file1y[natoms]=$2;
file1z[natoms]=$3;
file1a[natoms]=$4;
}
getline < "file2_all.txt"
{
file2x[natoms]=$1;
file2y[natoms]=$2;
file2z[natoms]=$3;
file2a[natoms]=$4;
}
END {
for(i=0;i<natoms;i++){
d=(file2x[i]-file1x[i])*(file2x[i]-file1x[i]);
d+=(file2y[i]-file1y[i])*(file2y[i]-file1y[i]);
d+=(file2z[i]-file1z[i])*(file2z[i]-file1z[i]);
dsum+=d;
}
rmsd = sqrt(dsum/natoms);
printf("RMSD = %f\n",rmsd);
}
这个 awk 脚本的作用是将 file1.pdb
和 file2.pdb
的原子坐标存入数组中,然后计算 RMSD。最终结果会输出 RMSD 的数值。
注意这里我们将 file1.pdb
和 file2.pdb
的信息分别存储在 file1_all.txt
和 file2_all.txt
中,使用 getline 命令获取信息。在实际使用时,应将获取信息的命令中的文件名替换成适合自己的操作。
当我们需要批量计算多组 pdb 文件之间的 RMSD 时,可以使用简单的 shell 脚本和 awk 脚本实现。
下面是一个示例的 shell 脚本,它可以计算同一目录下所有 pdb 文件两两之间的 RMSD。
#!/bin/bash
for f1 in *.pdb
do
for f2 in *.pdb
do
if [ "$f1" == "$f2" ]
then
continue
fi
outfile="rmsd_${f1%.pdb}_${f2%.pdb}.txt"
cmd="grep '^ATOM' $f1 | cut -c 31-54,64-66 | awk '{print \$1,\$2,\$3,\$4}' > file1_all.txt;grep '^ATOM' $f2 | cut -c 31-54,64-66 | awk '{print \$1,\$2,\$3,\$4}' > file2_all.txt;awk -f rmsd.awk file1_all.txt file2_all.txt > $outfile"
echo $cmd
eval $cmd
done
done
这个 shell 脚本会在当前目录下遍历所有 pdb 文件,对于每一组文件,都会调用计算 RMSD 的 awk 脚本并将结果输出到文件中。
awk 作为一种强大的文本处理工具,可以方便地操纵大量的数据,并且具有出色的计算速度和效率。使用 awk 计算 pdb 文件之间的 RMSD,不仅可以快速地分析分子结构的相似性,也可以在生物物理学和计算化学等领域提高工作效率。