我有一个PDB文件,里面包含了特定蛋白质的信息,其中一个信息是不同原子的位置(XYZ坐标)。
文件是下面的https://files.rcsb.org/view/6U9D.pdb。用这个文件我想计算原子的几何中心。理论上我知道我需要做什么,但我写的脚本似乎不起作用。
程序的第一部分,在for循环之前,是任务的另一部分,它要求我读取序列,并将其从3个字母的命名法转换为1个字母的命名法。我感兴趣的部分是for循环,直到最后。我尝试模式匹配,以隔离XYZ坐标。然后我使用了一个计数器,我在开始时设置的变量$k
,当我检查cygwin上的输出时,我得到的唯一输出是序列0 0 0
,而不是每个维度的和除以$k
。知道哪里出了问题吗?
$k=0;
open (IN, '6U9D.pdb.txt');
%amino_acid_conversion = (
ALA=>'A',TYR=>'Y',MET=>'M',LEU=>'L',CYS=>'C',
GLY=>'G',ARG=>'R',ASN=>'N',ASP=>'D',GLN=>'Q',
GLU=>'E',HIS=>'H',TRP=>'W',LYS=>'K',PHE=>'F',
PRO=>'P',SER=>'S',THR=>'T',ILE=>'I',VAL=>'V'
);
while (<IN>) {
if ($_=~m/HEADER\s+(.*)/){
print ">$1\n"; }
if ($_=~m/^SEQRES\s+\d+\s+\w+\s+\d+\s+(.*)/){
$seq.=$1;
$seq=~s/ //g;
}
}
for ($i=0;$i<=length $seq; $i+=3) {
print "$amino_acid_conversion{substr($seq,$i,3)}";
if ($_=~m/^ATOM\s+\d+\s+\w+\s+\w+\s+\w+\s+\d+\s+(\S+)\s+(\S+)\s+(\S+)/) {
$x+=$1; $y+=$2; $z+=$3; $k++;
}
}
print "\n";
#print $k;
$xgk=($x/$k); $ygk=($y/$k); $zgk=($z/$k);
print "$xgk $ygk $zgk \n";
1条答案
按热度按时间pqwbnv8z1#
我不懂生物信息学,但看起来你应该这样做:
这将给出以下输出: