2013-07-10 4 views
-3

У меня есть скрипт perl, но он вычисляет молекулярную массу только при задании последовательности. Однако я хочу рассчитать молекулярную массу белковых последовательностей, которая находится в файле fasta.расчет молекулярной массы в perl

print "Enter the amino acid sequence:\n"; 
$a = <STDIN> ; 
chomp($a); 
my @a =(); 
my $a = ''; 
$x = length($a); 
print "Length of sequence is : $x"; 
@a = split('', $a); 
$b = 0; 
my %data = ( 
    A=>71.09, R=>16.19, D=>114.11, N=>115.09, 
    C=>103.15, E=>129.12, Q=>128.14, G=>57.05, 
    H=>137.14, I=>113.16, L=>113.16, K=>128.17, 
    M=>131.19, F=>147.18, P=>97.12, S=>87.08, 
    T=>101.11, W=>186.12, Y=>163.18, V=>99.14 
); 
foreach $i(@a) { 
    $b += $data{$i}; 
} 
$c = $b - (18 * ($x - 1)); 
print "\nThe molecular weight of the sequence is $c";    
+1

Возможно, вы захотите отформатировать код немного лучше, чтобы помочь нам его прочитать. Посмотрите, как здесь: http://stackoverflow.com/help/formatting –

+0

Помогает ли это также http://stackoverflow.com/questions/9748858/reading-fasta-sequences-to-extract-nucleotide-data-and- затем-писать-на-табд? –

+1

В чем ваш вопрос? – ruakh

ответ

1

Прежде всего, вы должны сообщить нам, какой формат имеет .fasta-файлы. Как я знаю, что они выглядят

>seq_ID_1 descriptions etc 
ASDGDSAHSAHASDFRHGSDHSDGEWTSHSDHDSHFSDGSGASGADGHHAH 
ASDSADGDASHDASHSAREWAWGDASHASGASGASGSDGASDGDSAHSHAS 
SFASGDASGDSSDFDSFSDFSD 

>seq_ID_2 descriptions etc 
ASDGDSAHSAHASDFRHGSDHSDGEWTSHSDHDSHFSDGSGASGADGHHAH 
ASDSADGDASHDASHSAREWAWGDASHASGASGASG 

если мы сделаем предположение, что ваш код работает отлично, и рассчитывает молекулярный вес все, что нам нужно читать Fasta файлы, анализировать их и сосчитать вес Yours кода. Легче это звучит.

#!/usr/bin/perl 

use strict; 
use warnings; 
use Encode; 


for my $file (@ARGV) { 
    open my $fh, '<:encoding(UTF-8)', $file; 
    my $input = join q{}, <$fh>; 
    close $fh; 
    while ($input =~ /^(>.*?)$([^>]*)/smxg) { 
     my $name = $1; 
     my $seq = $2; 
     $seq =~ s/\n//smxg; 
     my $mass = calc_mass($seq); 
     print "$name has mass $mass\n"; 
    } 
} 

sub calc_mass { 
    my $a = shift; 
    my @a =(); 
    my $x = length $a; 
    @a = split q{}, $a; 
    my $b = 0; 
    my %data = (
     A=>71.09, R=>16.19, D=>114.11, N=>115.09, 
     C=>103.15, E=>129.12, Q=>128.14, G=>57.05, 
     H=>137.14, I=>113.16, L=>113.16, K=>128.17, 
     M=>131.19, F=>147.18, P=>97.12, S=>87.08, 
     T=>101.11, W=>186.12, Y=>163.18, V=>99.14 
    ); 
    for my $i(@a) { 
     $b += $data{$i}; 
    } 
    my $c = $b - (18 * ($x - 1)); 
    return $c; 
} 
+0

поэтому, если я включу ваш код в свой скрипт perl, тогда он сделает то, что мне нужно – user2503701

+0

еще одна вещь ... мой скрипт perl принимает последовательность аминокислот через , но мне нужен скрипт для чтения из файла – user2503701

+0

этот код читает последовательности из файла , использование: 'perl /path/to/script.pl /path/to/input.file/path/to/other.file' – Suic

Смежные вопросы