поиск по конкретному шаблону из заданного файла fasta последовательности генома - PullRequest
2 голосов
/ 05 октября 2011

Я пытаюсь найти шаблон поиска с конкретными ограничениями:

входной шаблон для поиска будет введен из стандартного ввода.входные данные

R, W и Y будут в любом месте шаблона, которые должны быть заменены значениями ниже перед поиском, поэтому каждый возможный поиск комбинации должен выполняться в последовательности.

R= C или G

W = A или T

Y = A или G

[например, шаблон может быть AWTYCR, а последовательность может быть ATCGATGAT ....]

мы должны найти начальные позиции

Также допускается одно несоответствие.

т.е. один символ шаблона может совпадать или не совпадать при сопоставлении с последовательностью.

вывод:

должен быть записан в файл в табличном формате:

, например,

с нахождением ATCR (R = C или G, как указано выше) в последовательностиATCGAT приведет к

S.no позиция the_matched_pattern

1 1 ATCG

2 1 ATCC

совпадение и несоответствие могут происходить в любой позиции (т.е.в том же положении или в другом положении)

1 Ответ

1 голос
/ 05 октября 2011

Следующий простой код является отправной точкой.Его можно легко обобщить, чтобы прочитать шаблоны из файла, прочитать последовательность из файла Fasta;уникальные результаты и т. д.

sub trans_pat {
   my $pat=shift;
   $pat=~s/R/\[CG\]/g;
   $pat=~s/W/\[AT\]/g;
   $pat=~s/Y/\[AG\]/g;
   return $pat;
}
sub find_pat {
   my ($pat,$seq) = (@_);
   print "Looking for pattern $pat\n";
   while ($seq=~m/$pat/g) {
      print "... match at $-[0]: $&\n";
   };
}

my $read_pat="ATCR";
my $seq="ATCGATATCGAT";

# Looking for a perfect match
find_pat (trans_pat($read_pat),$seq);

# Allowing for a single mismatch
foreach $i (1..length $read_pat) {
   my $mis_pat = $read_pat;
   substr($mis_pat,$i-1,1) = ".";
   find_pat (trans_pat($mis_pat),$seq);
}

Пример реализации:

perl -e 'sub trans {$pat=shift;$pat=~s/R/\[CG\]/g;return $pat};$read_pat="ATCR";$seq="ATCGATATCGAT";$pat=trans($read_pat);print "Looking for pattern $pat\n";while ($seq=~m/$pat/g) {print "... match at $-[0]: $&\n"};foreach $i (1..length $read_pat) {$mis_pat = $read_pat;substr($mis_pat,$i-1,1)=".";$pat=trans($mis_pat);print "Looking for pattern $pat\n"; while ($seq=~m/$pat/g) {print "... match at $-[0]: $&\n"}}'

Выход

Looking for pattern ATC[CG]
... match at 0: ATCG
... match at 6: ATCG
Looking for pattern .TC[CG]
... match at 0: ATCG
... match at 6: ATCG
Looking for pattern A.C[CG]
... match at 0: ATCG
... match at 6: ATCG
Looking for pattern AT.[CG]
... match at 0: ATCG
... match at 6: ATCG
Looking for pattern ATC.
... match at 0: ATCG
... match at 6: ATCG
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...