Mit Bezug auf die Frage Datei Calculating the distance between atomic coordinates, wo der EingangBerechnung Entfernungen in 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
ist es an answer als
berichtet istuse 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 }
Die Ausgabe des obigen Codes ist der Abstand zwischen dem ersten CA zum zweiten und zweiten bis dritten und so weiter ...
So ändern Sie diesen Code, um den Abstand zwischen der ersten CA zum Rest der CAs (2, 3, ..) und von der zweiten CA zum Rest der CAs (3, 4, ..) usw. zu finden und nur zu drucken diejenigen, die weniger als 5 Angström sind? Ich fand, dass push @line, $_;
Anweisung geändert werden sollte, um die Array-Größe zu erhöhen, aber nicht klar, wie das zu tun ist.
Was ist Ihre erwartete Ausgabe? – ssr1012
GLN-HIS "Abstandswert" -GLN ASN "Abstandswert" GLN-glu "Abstandswert" ... HIS-ASN "Abstandswert" HIS-GLU "Abstandswert" HIS-VAL „distance Wert " ... ASN-GLU" Distanzwert " ASN-VAL" Distanzwert " ... so weiter ... @ ssr1012 –