Создание массивов из данных в файлах и вычитание их
Я пытаюсь найти расстояние между объектами в 3D из файла базы данных белка (PDB). Файл PDB выглядит следующим образом.
Пример:
ATOM 1 N GLU 1 -19.992 -2.816 36.359 0.00 0.00 PROT
ATOM 2 HT1 GLU 1 -19.781 -1.880 35.958 0.00 0.00 PROT
ATOM 3 HT2 GLU 1 -19.713 -2.740 37.358 0.00 0.00 PROT
ATOM 4 HT3 GLU 1 -21.027 -2.910 36.393 0.00 0.00 PROT
ATOM 5 CA GLU 1 -19.344 -3.944 35.652 0.00 0.00 PROT
ATOM 6 HA GLU 1 -19.817 -4.852 35.998 0.00 0.00 PROT
ATOM 7 CB GLU 1 -19.501 -3.795 34.119 0.00 0.00 PROT
Я пытаюсь взять первую строку из 5-значных чисел координаты х и превратить их в массив. Последний столбец, который говорит PROT
изменения в MEM1
позже в файле PDB. Я пытаюсь вычесть все MEM1
х координаты от Prot
координатых, поместив их в два массива.
В настоящее время у меня есть:
#!/usr/bin/perl
use warnings;
my $inputfile = '8ns_emb_alt_101.pdb';
open( INPUTFILE, "<", $inputfile ) or die $!;
my @array = <INPUTFILE>;
$protein = 'PROT';
for ( $line = 0; $line <= $#array; ++$line ) {
if ( $array[$line] =~ m/\s+$protein\s+/ ) {
chomp $array[$line];
@splitline = ( split /\s+/, $array[$line] );
@protx = $splitline[5];
} #if 1
} # for 1
print "@protx \n";
print "$splitline[5] \n";
Единственное что @protx
а также $splitline[5]
печать является последней координатой х PROT
раздел PDB. Мне нужно, чтобы все они были напечатаны. Моя общая цель - найти расстояние между каждым атомом белка PROT
против каждого атома мембраны MEM
используя d = sqrt((deltaX)^2+(deltay)^2+(deltaz)^2)
, Тогда, когда d < 5
он напечатает resID, который в данном случае равен 1 и соответствует GLU
,
1 ответ
Вместо присвоения значения массиву (который фактически присваивает его первому элементу, перезаписывая ранее назначенное значение)
@protx = $splitline[5];
вставьте значение в него:
push @protx, $splitline[5];