如何使用子例程在perl中编码

时间:2014-03-05 09:43:16

标签: perl

我需要按照一定的标准对字符串补丁进行评分:

第1列:B为埋藏或E为暴露 - 阈值:25%
第2栏:氨基酸
第3栏:序列名称
第4栏:氨基酸编号
第5栏:相对表面可达性 - RSA
第6列:绝对表面可访问性
第7列:RSA预测的Z拟合分数
第8列:Alpha-Helix的概率
第9栏:β链的概率
第10栏:线圈的可能性

E K  132L_A_PDBID_CHAIN_SEQUENCE     1    0.716 147.261   1.150   0.016   0.005   0.979  
E V  132L_A_PDBID_CHAIN_SEQUENCE     2    0.514  79.033   1.252   0.191   0.086   0.723  
B F  132L_A_PDBID_CHAIN_SEQUENCE     3    0.134  26.793  -0.325   0.191   0.086   0.723  
E G  132L_A_PDBID_CHAIN_SEQUENCE     4    0.570  44.835   1.012   0.354   0.048   0.598  

请记住,最后三列是Helix / Sheet / Coil的概率.......

首先,我们需要使用一些标准函数来分类某个残留是否属于Helix / Sheet / Coil ....基于最大值。最后3列中的概率...

然后我们得到结构偏好,我们需要将序列分成10个补丁......

我的评分标准是:

EXPOSED     = 1; # +1 for letters that exposed  
BURIED      = 0; #  0 for letters that are buried  
COIL        = 3; # +3 for any coil  
HELIX       = 2; # +2 for any helix  
SHEET       = 1; # +1 for any sheet  

下面的链接用于将字符串分成10~11的补丁

http://pastebin.com/GeW5AKF3

我面临的问题是,我已将字符串拆分为水平补丁,如上面的链接,但文件是垂直对齐的......

感谢您的帮助.......等待回复

1 个答案:

答案 0 :(得分:0)

这应该让你前进:

open my $fh, "<", "input.txt";

my @data;
while(my $line = <$fh>) # If we got line from file
{
    chomp $line; # remove carraigereturn/linefeed
    my @parts = split /\s+/, $line; # split based on values seperated by one or more spaces
    push @data, [@parts] # Add array of split parts to data array
}

多数派将所有内容都放入@data。你这样访问它:

# now access whatever you want...
# example: line 3 column 6 (perl arrays start from 0 not 1):
print $data[2][5] . "\n"; #prints 26.793

# line 4 column 2:
print $data[3][1] . "\n"; #prints G

然后你可以这样排序。 (按Col1排序,然后按Col5(RSA)排序:)

    @data = sort { if ( $a->[0] eq $b->[0] ) { $a->[4] <=> $b->[4] } else { $a->[0] cmp $b->[0] } } @data;

然后输出如下数据:

foreach my $line (@data)
{   
    foreach my $field (@$line)
    {
        print $field."\t";
    }
    print "\n";
}

输出是:

B   F   132L_A_PDBID_CHAIN_SEQUENCE 3   0.134   26.793  -0.325  0.191   0.086   0.723   
E   V   132L_A_PDBID_CHAIN_SEQUENCE 2   0.514   79.033  1.252   0.191   0.086   0.723   
E   G   132L_A_PDBID_CHAIN_SEQUENCE 4   0.570   44.835  1.012   0.354   0.048   0.598   
E   K   132L_A_PDBID_CHAIN_SEQUENCE 1   0.716   147.261 1.150   0.016   0.005   0.979