Создание массивов из данных в файлах и вычитание их

Я пытаюсь найти расстояние между объектами в 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];
Другие вопросы по тегам