我需要按照一定的标准对字符串补丁进行评分:
第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的补丁
我面临的问题是,我已将字符串拆分为水平补丁,如上面的链接,但文件是垂直对齐的......
感谢您的帮助.......等待回复
答案 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