ДНК в РНК и получение белков с помощью Perl - PullRequest
3 голосов
/ 21 марта 2011

Я работаю над проектом (я должен реализовать его на Perl, но я не очень хорош в этом), который читает ДНК и находит ее РНК. Разделите эту РНК на триплеты, чтобы получить эквивалентное название белка. Я объясню шаги:

1) Переписать следующую ДНК в РНК, затем использовать генетический код для перевода ее в последовательность аминокислот

Пример:

TCATAATACGTTTTGTATTCGCCAGCGCTTCGGTGT

2) Чтобы транскрибировать ДНК, сначала замените каждую ДНК на ее аналог (т. Е. G для C, C для G, T для A и A для T):

TCATAATACGTTTTGTATTCGCCAGCGCTTCGGTGT
AGTATTATGCAAAACATAAGCGGTCGCGAAGCCACA

Далее, помните, что основания тимина (T) становятся урацилом (U). Следовательно, наша последовательность становится:

AGUAUUAUGCAAAACAUAAGCGGUCGCGAAGCCACA

Использование генетического кода похоже на это

AGU AUU AUG CAA AAC AUA AGC GGU CGC GAA GCC ACA

затем найдите каждый триплет (кодон) в таблице генетического кода. Таким образом, AGU становится Serine, который мы можем написать как Ser, или просто S. AUU становится изолейцином (Ile), который мы пишем как I. Продолжая таким образом, мы получаем:

SIMQNISGREAT

Я дам таблицу белков:

enter image description here

Так как я могу написать этот код на Perl? Я отредактирую свой вопрос и напишу код, что я сделал.

1 Ответ

8 голосов
/ 21 марта 2011

Попробуйте приведенный ниже скрипт, он принимает входные данные в STDIN (или в файле, заданном в качестве параметра) и читает его построчно. Я также предполагаю, что «STOP» на прикрепленном изображении является некоторым состоянием остановки. Надеюсь, я все хорошо прочитал с этой картинки.

#!/usr/bin/perl
use strict;
use warnings;

my %proteins = qw/
    UUU F UUC F UUA L UUG L UCU S UCC S UCA S UCG S UAU Y UAC Y UGU C UGC C UGG W
    CUU L CUC L CUA L CUG L CCU P CCC P CCA P CCG P CAU H CAC H CAA Q CAG Q CGU R CGC R CGA R CGG R
    AUU I AUC I AUA I AUG M ACU T ACC T ACA T ACG T AAU N AAC N AAA K AAG K AGU S AGC S AGA R AGG R
    GUU V GUC V GUA V GUG V GCU A GCC A GCA A GCG A GAU D GAC D GAA E GAG E GGU G GGC G GGA G GGG G
    /;

LINE: while (<>) {
    chomp;

    y/GCTA/CGAU/; # translate (point 1&2 mixed)

    foreach my $protein (/(...)/g) {
        if (defined $proteins{$protein}) {
            print $proteins{$protein};
        }
        else {
            print "Whoops, stop state?\n";
            next LINE;
        }
    }
    print "\n"
}
...