2012-06-20 2 views
1

난 패턴 wTTTAYRTTTW을 검색해야 여기서 게놈 서열의 FASTA fileW = A 또는 T, Y = C 또는 T, R = A 또는 R. 정확히 일치하는 문자열 및 위치가 일치해야합니다. 내 방법은 다음과 같습니다이 코드에 의해 발견FASTA 정확한 일치에 대한 정확한 수를 얻으려면 어떻게해야합니까?

#!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해야 하는가?

답변

관련 문제