В сети доступен Perl-код для работы с файлами PDB (что, очевидно, вы делаете).Я не предлагаю просто использовать модуль, который вы скачали, и покончить с этим, так как ваш инструктор наверняка не одобрит это, и вы не узнаете так много;) Но вы могли бы взглянуть на часть предлагаемого кода ипопытайтесь выяснить, решают ли какие-то биты вашу проблему.
Я немного погуглил, обнаружил, что есть ParsePDB.pm (например).Вы можете найти веб-страницу здесь .Я не смотрел на код или функциональность, хотя, я просто надеюсь, что там будет что-то, что вы можете найти полезным.
РЕДАКТИРОВАТЬ 1
Хорошо, сейчас 14 часов, и у меня возникло желание заняться кодированием, так как вы еще не приняли ответ, я подумал, что могу просто проигнорировать мой собственный совет и составить что-нибудь (как вы заметите, я скопировал данные Заида).структура) ...
#!/usr/bin/perl
use warnings;
use strict;
sub makeRecord {
my ($ser_num, $aa, $x, $y, $z, $element) = @_;
# copying Zaid now as her/his structure looks very sensible!
my $record = {
serial => $ser_num,
aa => $aa,
element => $element,
xyz => [$x, $y, $z],
};
return $record;
}
my $file = shift @ARGV;
my @records; # will be an array of hash references
open FILE, "<$file" or die "$!";
while (<FILE>) {
if (/^ATOM|^HETATM/) { # only get the structure data lines
chomp; # not necessary here, but good practice I'd say
my @fields = split; # by default 'split' splits on whitespace
# now use an array slice to only pass the array elements
# you're interested in (using the positional indices from @fields):
push @records, makeRecord(@fields[1,3,6,7,8,11]);
}
}
close FILE;
РЕДАКТИРОВАТЬ 2
Относительно процедуры расстояния: цикл for внутри цикла for должен выполнять свою работу, но это грубая ошибкаПринудительный путь, который может занять довольно много времени (как вы должны будете сделать (number_of_atoms) ^ 2 вычисления), в зависимости от размера вашей входной молекулы.Для цели вашего задания подход грубой силы, вероятно, приемлем;в других случаях вам придется решить, следует ли отдавать предпочтение простоте кодирования или скорости вычислений.Если ваш инструктор также хочет, чтобы вы помнили о последнем, вы можете взглянуть на эту страницу (я знаю, что вы действительно хотите наибольшее расстояние, и вы находитесь в 3D, а не в 2D ...)
Хорошо, теперь я просто надеюсь, что вам удалось найти здесь несколько полезных фрагментов:)