感谢读者的指正,我以前写的一个程序是错的,从算法设计上就错了!
http://www.bio-info-trainee.com/926.html
我从新设计了一个算法,经过再三检查,我可以确信它是对的,至于是否高效,就不敢保证了,也希望有更多热心的读者帮助我改正,或者跟我讨论,请直接联系我的邮箱jmzeng1314 at(防爬虫) 163.com
感谢读者的指正,我以前写的一个程序是错的,从算法设计上就错了!
http://www.bio-info-trainee.com/926.html
我从新设计了一个算法,经过再三检查,我可以确信它是对的,至于是否高效,就不敢保证了,也希望有更多热心的读者帮助我改正,或者跟我讨论,请直接联系我的邮箱jmzeng1314 at(防爬虫) 163.com
这篇博客的程序是错的,请看我最新博客:http://www.bio-info-trainee.com/1528.html
简并碱基对应表格如下;
R:ag Y:CT M:AC K:GT S:gc W:AT H:atc B:gtc V:gac D:GAT N:ATgc 把这个文本拷贝到txt文件里面保存好,或者直接写入hash里面也行!
[perl]
open FH,"ATCG.txt";
while(<FH>){
chomp;
@F=split/:/;
$hash{$F[0]}=uc $F[1];#右边就是简并表格
}
open FH1,"primer.txt";
while(<FH1>){
next if />/;
chomp;
primer2multiple($_); #对每个含有简并碱基的引物都进行以下函数处理
}
sub primer2multiple{
$primer=$_[0];
$prod=1;
$primer_len=length $primer ;
foreach $i (0..$primer_len-1){
$char=substr($primer,$i,1);
if ($char !~/[ATCG]/){$prod*=length $hash{$char}}
}
$new="";
foreach $i (0..$primer_len-1){
$char=substr($primer,$i,1);
if ($char =~/[ATCG]/){$new.=$char x $prod}
else {$tmp=length $hash{$char};$new.=$hash{$char} x ($prod/$tmp)}
}
die "error!" if $primer_len*$prod != length $new ;
foreach $i (0..$prod-1){
$tmp="";
for(my $j=$i;$j<(length($new));$j+=$prod){$tmp.=substr($new,$j,1)}
print "$tmp\n";
}
}
[/perl]
可以直接调用这个函数即可primer2multiple('ATGCVHGT');
就可以看到简并碱基被替换啦,就是那个V和H
ATGCGAGT
ATGCATGT
ATGCCCGT
ATGCGAGT
ATGCATGT
ATGCCCGT
ATGCGAGT
ATGCATGT
ATGCCCGT