我有一個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