Как я могу найти несколько мотивов (подстрока) в последовательности белка (строка)? - PullRequest
6 голосов
/ 07 мая 2009

Следующий скрипт предназначен для поиска одного мотива в последовательности белка.

use strict;
use warnings;

my @file_data=();
my $protein_seq='';
my $h= '[VLIM]';   
my $s= '[AG]';
my $x= '[ARNDCEQGHILKMFPSTWYV]';
my $regexp = "($h){4}D($x){4}D"; #motif to be searched is hhhhDxxxxD
my @locations=();

@file_data= get_file_data("seq.txt");

$protein_seq= extract_sequence(@file_data); 

#searching for a motif hhhhDxxxxD in each protein sequence in the give file

foreach my $line(@file_data){
    if ($motif=~ /$regexp/){
        print "found motif \n\n";
      } else {
        print "not found \n\n";
    }
}
#recording the location/position of motif to be outputed

@locations= match_position($regexp,$seq);
if (@locations){ 
    print "Searching for motifs $regexp \n";
    print "Catalytic site is at location:\n";
  } else {
    print "motif not found \n\n";
}
exit;

sub get_file_data{
    my ($filename)=@_;
    use strict;
    use warnings;
    my $sequence='';

    foreach my $line(@fasta_file_data){
        if ($line=~ /^\s*(#.*)?|^>/{
            next;
          } 
        else {
            $sequence.=$line;
        }
    }
    $sequence=~ s/\s//g;
    return $sequence;
}

sub(match_positions) {
    my ($regexp, $sequence)=@_;
    use strict;
    my @position=();
    while ($sequence=~ /$regexp/ig){
        push (@position, $-[0]);
    }
    return @position;
}

Я не уверен, как расширить это для нахождения нескольких мотивов (в фиксированном порядке, т.е. мотив1, мотив2, мотив3) в данном файле, содержащем последовательность белка.

Ответы [ 3 ]

2 голосов
/ 07 мая 2009

Вы можете просто использовать чередования (ограниченные |) последовательностей. Таким образом, каждая последовательность, которой может соответствовать движок регулярных выражений, будет соответствовать.

/($h{4}D$x{4}D|$x{1,4}A{1,2}$s{2})/

Тогда вы можете проверить этот матч, посмотрев на $1.

0 голосов
/ 07 мая 2009

вы просто ищете подстроки? если это так, пара регулярных выражений, вероятно, приведет вас туда, куда вам нужно. но такого рода проблемы, как правило, быстро обостряются, скорее всего, на следующей неделе. если последнее имеет место, и вам нужно будет делать сравнения, вам, вероятно, нужно начать изучать алгоритмы динамического выравнивания, минимальное расстояние редактирования, выравнивание по Витерби, ммс и т.п.

также, если вы имеете дело с большими входными файлами, вы могли бы предварительно скомпилировать свои регулярные выражения для хорошего увеличения скорости,

регулярные выражения для perl

0 голосов
/ 07 мая 2009

Если вы хотите найти эти мотивы в определенном порядке, но, возможно, несколько разделить их, вы можете использовать что-то вроде:

/$h{4}D$x{4}D .* $s{4}D$q{4}/x

(/ x допускает пробел в регулярном выражении, * соответствует нулю или более символов)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...