【问题标题】:calculating molecular weight in perl以perl计算分子量
【发布时间】:2013-07-10 05:28:54
【问题描述】:

我有一个 perl 脚本,但它仅在给出序列时计算分子量。但是我想计算fasta文件中蛋白质序列的分子量。

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";             

【问题讨论】:

  • 您可能希望更好地格式化您的代码以帮助我们阅读它。在这里查看如何:stackoverflow.com/help/formatting
  • 这对stackoverflow.com/questions/9748858/…也有帮助吗?
  • 你的问题到底是什么?
  • 我希望我的 perl 脚本从 fasta 文件中读取蛋白质序列,该文件又包含许多蛋白质序列,然后计算每个蛋白质序列的分子量。
  • @PP.:这里,@a$a 是相同数据的数组和标量视图,因为@a = split ('', $a)。在这种情况下,我经常使用相同的名称。为什么它会让你感到沮丧和愤怒?

标签: perl


【解决方案1】:

首先你必须告诉我们.fasta 文件的格式。据我所知,它们看起来像

>seq_ID_1 descriptions etc 
ASDGDSAHSAHASDFRHGSDHSDGEWTSHSDHDSHFSDGSGASGADGHHAH
ASDSADGDASHDASHSAREWAWGDASHASGASGASGSDGASDGDSAHSHAS
SFASGDASGDSSDFDSFSDFSD

>seq_ID_2 descriptions etc
ASDGDSAHSAHASDFRHGSDHSDGEWTSHSDHDSHFSDGSGASGADGHHAH
ASDSADGDASHDASHSAREWAWGDASHASGASGASG

如果我们建议您的代码工作正常并计算分子量,我们只需要读取 fasta 文件,解析它们并通过您的代码计算重量。听起来更容易。

#!/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;
}

【讨论】:

  • 所以如果我将您的代码包含在我的 perl 脚本中,那么它将满足我的需要
  • 还有一件事......我的 perl 脚本正在通过 获取氨基酸序列,但我需要脚本从文件中读取
  • 此代码从文件中读取序列。用法:perl /path/to/script.pl /path/to/input.file /path/to/other.file
  • 我应该将您的代码与我的脚本合并还是单独使用您的代码
  • cmon, man:) 看看我的代码)您的代码已经集成到其中,可以使用了。只需将其复制到空脚本并运行它perl /path/to/script.pl /path/to/input.file /path/to/other.file
猜你喜欢
  • 1970-01-01
  • 2020-01-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-11-22
  • 2017-08-25
相关资源
最近更新 更多