我有一个PDB文件。现在它有两个由TER分隔的部分。在TER之前,我把它称为第一部分。我想要把第一部分的ATOM 1(即TER之前)的x,y,z和TER之后的所有x,y,z坐标的距离,然后找到第一部分的第二个ATOM到所有ATOMS第二部分。对于第一部分的所有ATOMS =必须对第二部分的所有ATOMS重复。我必须将它自动化为20个文件。我的文件名称开始像1_0.pdb,2_0.pdb .... 20_0.pdb。 这是一个距离计算。我在PERL中尝试了一些东西,但非常粗糙。有人可以帮助一下。 文件看起来像:PDB文件中一点到其他所有点之间的距离
----长文件(我截断它)----
ATOM 1279 C ALA 81 -1.925 -11.270 1.404
ATOM 1280 O ALA 81 -0.279 9.355 15.557
ATOM 1281 OXT ALA 81 -2.188 10.341 15.346
TER
ATOM 1282 N THR 82 29.632 5.205 5.525
ATOM 1283 H1 THR 82 30.175 4.389 5.768
ATOM 1284 H2 THR 82 28.816 4.910 5.008
的代码是:到底它发现的最大距离及其共同坐标
my @points =();
open(IN, @ARGV[0]) or die "$!";
while (my $line = <IN>) {
chomp($line);
my @array = (split (/\s+/, $line))[5, 6, 7];
print "@array\n";
push @points, [ @array ];
}
close(IN);
$max=0;
for my $i1 (0 .. $#points )
{
my ($x1, $y1, $z1) = @{ $points[$i1] };
my $dist = sqrt(($x1+1.925)**2 + ($y1+11.270)**2 + ($z1-1.404)**2);
print "distance from (-1.925 -11.270 1.404) to ($x1, $y1, $z1) is $dist\n";
if ($dist > $max)
{ $max = $dist;
$x=$x1;
$y=$y1;
$z=$z1;
}}
print "maximum value is : $max\n";
print "co ordinates are : $x $y $z\n";
将您的for-loop部分+生成的打印转换为您可以将一个数组ref参数传递给part1值的子例程,并且整个数组参考part2值。然后,您可以简单地遍历part1值并进行比较。在初始while循环中使用正则表达式来分隔part1和part2,例如'最后如果/^TER $ /'。 – TLP 2012-03-06 09:15:38
什么是pdb文件? – DVK 2012-03-06 12:01:18
它的3vc8 ..但我使用它的最小化文件 – kanika 2012-03-06 12:32:36