Perl 如何获得FASTA精确匹配的正确计数?

Perl 如何获得FASTA精确匹配的正确计数?,perl,bioinformatics,fasta,Perl,Bioinformatics,Fasta,我必须搜索模式wtttayrttw,其中W=A或T,Y=C或T,R=A或R,在一个基因组序列中。应该允许一些不匹配,即精确匹配字符串及其位置。我的做法是: #!user/bin/perl -w use strict; my @name = qw( NC_004314.2_10 ); for (my $i = 0 ; $i< scalar(@name);$i++) { my $fname = $name[$i]; print "$fname\n"; my $read_pat= "WTTTAY

我必须搜索模式
wtttayrttw
,其中
W
=
A
T
Y
=
C
T
R
=
A
R
,在一个基因组序列中。应该允许一些不匹配,即精确匹配字符串及其位置。我的做法是:

#!user/bin/perl -w
use strict;
my @name = qw( NC_004314.2_10 );
for (my $i = 0 ; $i< scalar(@name);$i++)
{
my $fname = $name[$i];
print "$fname\n";
my $read_pat= "WTTTAYRTTTW";
#print"\nPlease enter how many mismatch is allowd : ";
my $m =<STDIN>;
chomp $m;
unless(open(fh1, "$fname")){
    print "Cannot open file \"$fname\"\n\n";
    exit;
                }
my @fh=<fh1>;
close fh1;
if ($fh[0] !~ /^>/)
    {
        print "not fasta file\n";
        exit;
    }
my $seq='';
foreach my $line(@fh)
    {
        if($line =~ /^>/)
        {
        next;
        }
        else
        {
        $seq=$seq.$line;
        }
    }
sub trans_pat
    {
     my $pat=shift;
     $pat=~s/R/\[CG\]/g;
        $pat=~s/W/\[AT\]/g;
        $pat=~s/Y/\[AG\]/g;
    return $pat;
    }
open(FH1,">$fname.csv");
sub find_pat
{
my ($pat,$seq) = (@_);
#print FH1 "Looking for pattern $pat\n";
}

find_pat (trans_pat($read_pat),$seq);

# Allowing for a single mismatch

my $pat=trans_pat($read_pat);
print FH1 "Looking for pattern $pat\n";
while ($seq=~m/(?=$pat)/g)
{
print FH1"match at\t$-[0]\t$&\n"
}
foreach my $i (1..(length $read_pat)-($m-1))
{
my $mis_pat = $read_pat;
substr($mis_pat,$i-1,$m)=".{$m}";
my $pat1=trans_pat($mis_pat);
print FH1 "Looking for pattern $pat1\n";
while ($seq=~m/(=?$pat1)/g)

{
print FH1 "match at\t$-[0]\t$&\n";
}
#print FH1"$& \n";
}
close FH1;
#!user/bin/perl-w
严格使用;
my@name=qw(NC_004314.2_10);
对于(my$i=0;$i<标量(@name);$i++)
{
我的$fname=$name[$i];
打印“$fname\n”;
我的$read\u pat=“wtttayrttw”;
#打印“\n请输入允许的不匹配数量:”;
我的$m=;
大吃一百万美元;
除非(开放式(fh1,$fname){
打印“无法打开文件\”$fname \“\n\n”;
出口
}
我的@fh=;
关闭fh1;
如果($fh[0]!~/^>/)
{
打印“非fasta文件\n”;
出口
}
我的$seq='';
foreach my$行(@fh)
{
如果($line=~/^>/)
{
下一个
}
其他的
{
$seq=$seq.$line;
}
}
次trans_pat
{
我的$pat=班次;
$pat=~s/R/\[CG\]/g;
$pat=~s/W/\[AT\]/g;
$pat=~s/Y/\[AG\]/g;
返回$pat;
}
开放式(FH1,“>$fname.csv”);
分包寻拍
{
我的($pat,$seq)=(@);
#打印FH1“寻找图案$pat\n”;
}
查找匹配(trans-pat($read-pat),$seq);
#允许单个不匹配
my$pat=trans\u pat($read\u pat);
打印FH1“寻找图案$pat\n”;
而($seq=~m/(?=$pat)/g)
{
打印FH1“匹配于\t$-[0]\t$&\n”
}
每个我的$i(1..(长度$read_pat)-(m-1))
{
my$mis_pat=$read_pat;
substr($mis_pat,$i-1,$m)=“{$m}”;
my$pat1=trans\u pat($mis\u pat);
打印FH1“查找模式$pat1\n”;
而($seq=~m/(=?$pat1)/g)
{
打印FH1“匹配于\t$-[0]\t$&\n”;
}
#打印FH1“$&\n”;
}
关闭FH1;

此代码发现的结果与FASTA文件中的给定序列NC_004314.2不符。为了精确匹配,总匹配计数应为829。有人能更正此代码吗?

我对基因组搜索一无所知,也不能快速理解您的程序,但作为一项建议:

你真的应该扫描:

  • 尤其是
也许会有帮助,你可以得到一些想法如何做的事情

Perl是生物信息学的语言