我试图从蛋白质数据库文件(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
我正在尝试将 x 坐标的第一行5位数字转换为数组。最后一列显示PROT
稍后会在PDB文件中更改为MEM1
。我试图通过将MEM1
x 坐标放入两个数组中来减去所有Prot
x 坐标。
我目前有:
#!/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";
@protx
和$splitline[5]
打印的唯一内容是PDB的PROT
部分的最后一个 x 坐标。我需要所有这些都打印出来。我的总体目标是通过使用PROT
找到蛋白质MEM
的每个原子与膜d = sqrt((deltaX)^2+(deltay)^2+(deltaz)^2)
的每个原子之间的距离。然后当d < 5
时,它将打印resID,在这种情况下为1,与GLU
对应。
答案 0 :(得分:0)
而不是为数组赋值(实际上将其赋值给第一个元素,覆盖先前赋值的值)
@protx = $splitline[5];
将值推入其中:
push @protx, $splitline[5];