0

我正在尝试从蛋白质数据库文件 (PDB) 中找到 3D 对象之间的距离。PDB 文件如下所示。

例子:

ATOM      1  N   GLU    1     -19.992  -2.816  36.359  0.00  0.00      PROT
ATOM      2  HT1 GLU    1     -19.781  -1.880  35.958  0.00  0.00      PROT
ATOM      3  HT2 GLU    1     -19.713  -2.740  37.358  0.00  0.00      PROT
ATOM      4  HT3 GLU    1     -21.027  -2.910  36.393  0.00  0.00      PROT
ATOM      5  CA  GLU    1     -19.344  -3.944  35.652  0.00  0.00      PROT
ATOM      6  HA  GLU    1     -19.817  -4.852  35.998  0.00  0.00      PROT
ATOM      7  CB  GLU    1     -19.501  -3.795  34.119  0.00  0.00      PROT

我正在尝试将第一行 5 位数字作为x坐标并将它们放入一个数组中。最后一列表示PDB 文件PROT中稍后的更改。MEM1我试图通过将它们放入两个数组中来从x坐标中减去所有MEM1 x坐标。Prot

我目前有:

#!/usr/bin/perl

use warnings;

my $inputfile = '8ns_emb_alt_101.pdb';

open( INPUTFILE, "<", $inputfile ) or die $!;

my @array = <INPUTFILE>;

$protein = 'PROT';

for ( $line = 0; $line <= $#array; ++$line ) {
    if ( $array[$line] =~ m/\s+$protein\s+/ ) {
        chomp $array[$line];
        @splitline = ( split /\s+/, $array[$line] );
        @protx = $splitline[5];
    }    #if 1
}    # for 1

print "@protx \n";
print "$splitline[5] \n";

唯一打印的是 PDB 部分的最后@protx一个x坐标。我需要全部打印出来。我的总体目标是通过使用找到蛋白质的每个原子与膜的每个原子之间的距离。然后何时打印 resID,在本例中为 1,对应于. $splitline[5]PROTPROTMEMd = sqrt((deltaX)^2+(deltay)^2+(deltaz)^2)d < 5GLU

4

1 回答 1

0

而不是为数组分配一个值(实际上将它分配给它的第一个元素,覆盖先前分配的值)

@protx = $splitline[5];

将值推入其中:

push @protx, $splitline[5];
于 2014-10-06T14:50:29.760 回答