Получить кодирующую аминокислоту, когда в последовательности ДНК есть определенный образец

Я хотел бы получить кодирующую аминокислоту, когда в последовательности ДНК есть определенный образец. Например, шаблон может быть таким: АТАГТА. Итак, при наличии:

Входной файл:

>sequence1
ATGGCGCATAGTAATGC
>sequence2
ATGATAGTAATGCGCGC

Идеальным выходом была бы таблица, содержащая для каждой аминокислоты количество раз, закодированных шаблоном. Здесь в последовательности 1 паттерн кодирует только одну аминокислоту, а в последовательности 2 — две. Я хотел бы, чтобы этот инструмент работал для масштабирования до тысяч последовательностей. Я думал о том, как это сделать, но я думал только о том, чтобы заменить все нуклеотиды, отличные от шаблона, перевести то, что осталось, и получить сводку закодированных аминокислот.

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

Спасибо за вашу помощь. Всего наилучшего, Бернардо


Изменить (из-за путаницы, вызванной моим сообщением):

Пожалуйста, забудьте исходный пост, а также последовательность1 и последовательность2.

Привет всем, и извините за путаницу. Входной файл fasta представляет собой файл *.ffn, полученный из файла GenBank с помощью инструмента FeatureExtract (http://www.cbs.dtu.dk/services/FeatureExtract/download.php), поэтому можно представить, что они уже в кадре (+1) и нет необходимости получать аминокислоты кодируется в кадре, отличном от +1.

Я хотел бы знать, какую аминокислоту кодируют следующие последовательности:

AGAGAG
GAGAGA
CTCTCT
TCTCTC

Уникальные строки, которые я хочу получить, кодирующие аминокислоты, являются повторами трех AG, GA, CT или TC, то есть (AG)3, (GA)3, (CT)3 и (TC)3 соответственно. Я не хочу, чтобы программа извлекала кодирующие аминокислоты для повторов из четырех или более.

Еще раз спасибо, Бернардо


person biotech    schedule 11.11.2013    source источник
comment
Шаблон ATAGTA не отображается ни в одной последовательности?   -  person Jotne    schedule 11.11.2013
comment
@Jotne: Да: ATGGCGC<ATAGTA>ATGC, ATG<ATAGTA>ATGCGCGC. Я не понимаю, что означают коды для двух.   -  person choroba    schedule 11.11.2013
comment
Извините, виноват, нужен кофе :)   -  person Jotne    schedule 11.11.2013
comment
Вы хотите, чтобы это было только в одной рамке считывания, или вы должны разрешить все три?   -  person Nick    schedule 11.11.2013
comment
BioPerl, вероятно, будет вам полезен: bioperl.org/wiki/Main_Page   -  person fugu    schedule 11.11.2013
comment
Что значит «коды на двоих»? Я вижу только один экземпляр ATAGTA в последовательности 2.   -  person acarlon    schedule 11.11.2013
comment
Как вы хотите, чтобы результат выглядел?   -  person glenn jackman    schedule 11.11.2013
comment
Кто-нибудь еще заметил, что почти каждый вопрос, размещенный на этом сайте о ДНК, содержит массу информации о ДНК и почти не содержит информации, которая помогла бы нам понять, что автор хочет сделать со своим текстовым файлом? @popnard - просто опубликуйте образец ввода, ожидаемый вывод и сообщите нам, что вам нужно сделать с точки зрения шаблонов строк в ваших файлах, отбросьте всю терминологию ДНК, поскольку она просто запутывает ваш вопрос.   -  person Ed Morton    schedule 11.11.2013
comment
Пост отредактировал, может теперь понятнее. Еще раз спасибо всем!   -  person biotech    schedule 12.11.2013
comment
Можете ли вы подтвердить, что входной файл похож на определение Википедии для формата FASTA, и опубликовать несколько записей данные в вопросе? Наряду с этими данными укажите, что вы подразумеваете под кадрами. Исключаются ли повторы: по строке или по нескольким строкам и т. д.? А еще лучше последуйте совету Эдмортона и опишите формат входного файла, тестовые данные и то, что вы хотите получить на выходе. Пожалуйста, прочтите sscce.org - ваш вопрос не является самодостаточным.   -  person n0741337    schedule 12.11.2013
comment
@EdMorton Это для вас биоинформатики - они, как правило, очень горячие в части биологии и, как правило, не так много в области программирования. Это проявляется в разной, но в целом глубокой неспособности сформулировать алгоритм; они почти всегда знают, что они хотят получить из того, что у них есть, но редко имеют хоть малейшее представление о том, как. Вот почему те, у кого есть опыт работы с CS, так сильно выделяются на фоне других, а также почему эту область стоит рассматривать даже для программистов, не имеющих существенного опыта в биологии; они очень нуждаются в нас, и в значительной степени знают это.   -  person Aaron Miller    schedule 14.11.2013
comment
Сверху: sorry for the confusion, за которым сразу следует The input fasta file is a *.ffn file derived from a GenBank file using 'FeatureExtract' tool (http://www.cbs.dtu.dk/services/FeatureExtract/download.php), so a can imagine they are already in frame (+1) and there is no need to get amino-acids coded in a frame different than +1.. Абсолютно веселый - я все еще улыбаюсь (и даже близко не понимаю, в чем вопрос, но мне уже все равно, это было здорово)!   -  person Ed Morton    schedule 14.11.2013


Ответы (2)


Вот некоторый код, который должен хотя бы помочь вам начать. Например, вы можете запустить так:

./retrieve_coding_aa.pl file.fa ATAGTA

Содержание retrieve_coding_aa.pl:

#!/usr/bin/perl 

use strict;
use warnings;

use File::Basename;
use Bio::SeqIO;
use Bio::Tools::CodonTable;
use Data::Dumper;

my $pattern = $ARGV[1];

my $fasta = Bio::SeqIO->new ( -file => $ARGV[0], -format => 'fasta');

while (my $seq = $fasta->next_seq ) {

    my $pos = 0;

    my %counts;

    for (split /($pattern)/ => $seq->seq) {

        if ($_ eq $pattern) {

            my $dist = $pos % 3;

            unless ($dist == 0) {

                my $num = 3 - $dist;

                s/.{$num}//;

                chop until length () % 3 == 0;
            }

            my $table = Bio::Tools::CodonTable->new();

            $counts{$_}++ for split (//, $table->translate($_));
        }

        $pos += length;
    }

    print $seq->display_id() . ":\n";

    map {

        print "$_ => $counts{$_}\n"
    }
    sort {

        $counts{$a} <=> $counts{$b}
    }
    keys %counts;

    print "\n";
}

Вот результаты с использованием примера ввода:

sequence1:
S => 1

sequence2:
V => 1
I => 1

Класс Bio::Tools::CodonTable также поддерживает нестандартные таблицы использования кодонов. Вы можете изменить таблицу, используя указатель id. Например:

$table = Bio::Tools::CodonTable->new( -id => 5 );

or:

$table->id(5);

Для получения дополнительной информации, в том числе о том, как исследовать эти таблицы, см. документацию здесь: http://metacpan.org/pod/Bio%3a%3aTools%3a%3aCodonTable

person Steve    schedule 13.11.2013

Я буду придерживаться первой версии того, что вы хотели, потому что дополнение только еще больше запутало меня. (кадр?) Я нашел ATAGTA только один раз в sequence2, но я предполагаю, что вам также нужны зеркальные изображения / обратная последовательность, которая в этом случае будет ATGATA. Ну, мой скрипт этого не делает, так что вам придется прописать это дважды в файле input_sequences, но я думаю, это не должно быть проблемой.

Я работаю с файлом, подобным вашему, который я называю «dna.txt», и с файлом входных последовательностей, называемым «input_seq.txt». Файл результатов представляет собой список шаблонов и их вхождений в файле dna.txt (включая результаты перекрытия, но его можно настроить на отсутствие перекрытия, как описано в awk).

input_seq.txt:

GC
ATA
ATAGTA
ATGATA

ДНК.txt:

>sequence1
ATGGCGCATAGTAATGC
>sequence2
ATGATAGTAATGCGCGC

результаты.txt:

GC,6
ATA,2
ATAGTA,2
ATGATA,1

Код awk вызывает другой awk (но один из них простой). Вы должны запустить "./match_patterns.awk input_seq.txt", чтобы получить сгенерированный файл результатов.:

*match_patterns.awk:*

#! /bin/awk -f
{return_value= system("awk -vsubval="$1" -f test.awk dna.txt")}

test.awk:

#! /bin/awk -f
{string=$0
do
{
where = match(string, subval)
# code is for overlapping matches (i.e ATA matches twice in ATATAC)
# for non-overlapping replace +1 by +RLENGTH in following line
if (RSTART!=0){count++; string=substr(string,RSTART+1)}
}
while (RSTART != 0)
}
END{print subval","count >> "results.txt"}

Файлы должны быть все в одном каталоге.

Удачи!

person Robbert Koppenol    schedule 13.11.2013
comment
Ответить на этот вопрос было бы сложно, не зная молекулярной биологии. Аминокислоты кодируются триплетами нуклеотидов, называемыми кодонами. Таким образом, имеется шесть возможных рамок считывания; три в прямом направлении и три в обратном направлении. ОП, вероятно, интересует только первый кадр (т.е. +1), вероятно, потому, что его выборочные последовательности являются началом некоторых генов или ORF, представляющих интерес. В этих последовательностях первый кодон, «ATG», является обычным стартовым кодоном эукариот, который после транскрипции будет сигнализировать об инициации трансляции белка. - person Steve; 14.11.2013
comment
Использование awk для этой работы не подходит; если, конечно, вы не хотите заново изобретать велосипед. Годы работы над модулями BioPerl и BioPython не должны быть потрачены впустую. Они здесь, чтобы помочь. - person Steve; 14.11.2013
comment
Возможно, вы правы, если Бернардо хочет написать новый класс для Bioperl. Но это перл, не так ли? Просто написание специальных решений, которые есть. Таким образом, можно просто использовать awk и искать любое количество последовательностей за один раз. Я понятия не имею о молекулярной биологии, но, насколько я понимаю, она просто ищет закономерности в файле. - person Robbert Koppenol; 14.11.2013
comment
Да, на самом деле требуется лишь небольшое количество Perl, чтобы получить ответ, который ищет OP. Я бы избегал awk, потому что в конечном итоге ОП захочет преобразовать кодоны в аминокислоты; для этого потребуется справочная таблица, и я бы никогда не хотел писать одну из них. ОП ищет шаблоны, но его интересуют только те части этих шаблонов, которые находятся в кадре. Я полагаю, что ОП затем хочет, чтобы они были переведены in silico с их подсчетами. В Perl (и Python) есть модули, которые могут это сделать. - person Steve; 14.11.2013