Сравнивая 2 строки разных размеров
Я немного новичок в Perl и сравниваю две строки разного размера, содержащие нуклеотиды ДНК. Я хочу, чтобы скрипт взял меньшую строку и поместил ее в намного большую строку, учитывая несоответствия и предоставив мне последовательность, найденную в большей строке, плюс смежные 5 нуклеотидов с каждой стороны.
Так, например, если у меня есть 2 строки:
#1 ATGATCCTG
#2 TCGAGTGGCCATGAACGTGCCAATTG
Я хочу, чтобы скрипт взял #1 и нашел ту же самую последовательность в #2, которая присутствует, но с 2 несоответствиями и 5 нуклеотидами с каждой стороны.
1 ответ
Я думаю, что использование уже существующего и хорошо протестированного модуля - это путь для решения таких задач. Известно, что perl имеет много биомодулей и использования, поэтому быстрый поиск в cpan, который я нашел, - Bio::Grep, это может быть хорошая помощь
РЕДАКТИРОВАТЬ
Является ли это возможным? да, кто-то делал это раньше, так что это возможно, но я не думаю, что это простая задача, которую можно выполнить с помощью простого регулярного выражения
Я попытался сделать простой пример настолько, насколько я могу понять, так как я не био эксперт
use strict;
use warnings;
use Data::Dumper;
my $str1 = 'ATGATCCTG';
my $str2 = 'TCGAGTGGCCATGAACGTGCCAATTG';
my @s1 = split '', $str1;
my $miss = 0;
my $pattern = '';
for (@s1){
my $r = $_;
if ($str2 =~ /$pattern$r/){
$pattern .= $r;
} else {
$miss++;
$pattern .= '[ATCG]'
}
}
##this is the pattern we used
print Dumper $pattern;
##withoud 5 nucleotides on both sides
#$str2 =~ m/($pattern)/g;
#5 nucleotides on both sides match pattern
$str2 =~ m/(\w{0,5}$pattern\w{0,5})/g;
##this is the match
print Dumper $1;
##number of missmatches
print Dumper $miss;
Опять же, я не уверен, что это способ сделать это точно, и абсолютно не способ следовать особенно с большими последовательностями ДНК, но для вашей задачи выше, я думаю, что это нормально.