1

ゲノム配列のFASTA ファイルで、パターンwTTTAYRTTTW、ここでW=AまたはTY=CまたはTR=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;

このコードによって検出された結果は、FASTA ファイル内の指定されたシーケンス NC_004314.2 に対して正確に一致するものではありません。一致数の合計は 829 である必要があります。このコードを修正できる人はいますか?

4

1 に答える 1

3

私はゲノム検索について何も知らず、あなたのプログラムをすぐには理解できませんが、アドバイスとして:

あなたは本当にスキャンする必要があります:

たぶん役立つかもしれませんし、物事を行う方法についていくつかのアイデアを得ることができます。

Perlはバイオインフォマティクスの言語です。

于 2012-06-20T12:33:29.510 に答える