со ссылкой на вопрос Calculating the distance between atomic coordinates, где входРасчет расстояния в PDB файл
ATOM 920 CA GLN A 203 39.292 -13.354 17.416 1.00 55.76 C
ATOM 929 CA HIS A 204 38.546 -15.963 14.792 1.00 29.53 C
ATOM 939 CA ASN A 205 39.443 -17.018 11.206 1.00 54.49 C
ATOM 947 CA GLU A 206 41.454 -13.901 10.155 1.00 26.32 C
ATOM 956 CA VAL A 207 43.664 -14.041 13.279 1.00 40.65 C
.
.
.
ATOM 963 CA GLU A 208 45.403 -17.443 13.188 1.00 40.25 C
там an answer сообщается как
use strict; use warnings; my @line; while (<>) { push @line, $_; # add line to buffer next if @line < 2; # skip unless buffer is full print proc(@line), "\n"; # process and print shift @line; # remove used line } sub proc { my @a = split ' ', shift; # line 1 my @b = split ' ', shift; # line 2 my $x = ($a[6]-$b[6]); # calculate the diffs my $y = ($a[7]-$b[7]); my $z = ($a[8]-$b[8]); my $dist = sprintf "%.1f", # format the number sqrt($x**2+$y**2+$z**2); # do the calculation return "$a[3]-$b[3]\t$dist"; # return the string for printing }
Выход выше код является расстоянием между первым СА вторым, вторым и третьим и так далее ...
Как изменить этот код, чтобы найти расстояние между первым СА до остальной части СА (2, 3, ..) и от второго ЦС до остальной части СА (3, 4, ...) и так далее и только для печати те, которые меньше 5 ангстрем? Я обнаружил, что оператор push @line, $_;
должен быть изменен, чтобы увеличить размер массива, но не ясно, как это сделать.
Каков ваш ожидаемый выход? – ssr1012
Gln-HIS "расстояние Значение" Gln-АСН "расстояние Значение" Глны-Гл "расстояние значение" ... HIS-АСН "расстояние Значение" HIS-Glu "расстояние Значение" His-VAL «расстояние значение « ... ... ... ASN-GLU« значение расстояния » ASN-VAL« значение расстояния » ... так далее ... @ ssr1012 –