У меня есть файл PDB. Теперь он состоит из двух частей, разделенных TER. Перед TER я называю это частью 1. Я хочу взять x, y, z из ATOM 1 первой части, т.е. до TER, и найти расстояние до всех x, y, z координат после TER, а затем второго 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";
Сделайте свою часть обратной связи + итоговой печатью в подпрограмму, к которой вы можете передать один массив ref с значениями part1, и весь массив ref для значений part2. Затем вы можете просто перебрать значения part1 и сравнить их. Используйте регулярное выражение внутри начального цикла while для разделения part1 и part2, например. 'last, если/^ TER $ /'. – TLP
Что такое файл pdb? – DVK
его 3vc8..but я использую сведенные к минимуму его файлы – kanika