DNA all'RNA e ottenere proteine con perl
-
28-10-2019 - |
Domanda
Sto lavorando a un progetto (devo implementarlo in Perl ma non sono bravo a farlo) che legge il DNA e trova il suo RNA. Dividi che l'RNA è in terzine per ottenere il nome di proteina equivalente di esso. Spiegherò i passaggi:
1) Trascrivi il seguente DNA all'RNA, quindi usa il codice genetico per tradurlo in una sequenza di aminoacidi
Esempio:
TCATAATACGTTTTGTATTCGCCAGCGCTTCGGTGT
2) Per trascrivere il DNA, sostituire prima ogni DNA per la sua controparte (cioè, g per c, c per g, t per a e a per t):
TCATAATACGTTTTGTATTCGCCAGCGCTTCGGTGT
AGTATTATGCAAAACATAAGCGGTCGCGAAGCCACA
Successivamente, ricorda che le basi di timina (t) diventano un uracile (u). Quindi la nostra sequenza diventa:
AGUAUUAUGCAAAACAUAAGCGGUCGCGAAGCCACA
L'uso del codice genetico è così
AGU AUU AUG CAA AAC AUA AGC GGU CGC GAA GCC ACA
Quindi guarda ogni tripletta (codone) nella tabella del codice genetico. Quindi Agu diventa serina, che possiamo scrivere come ser, o semplicemente S. auu diventa isoleucina (Ile), che scriviamo come I. Continua in questo modo, otteniamo:
SIMQNISGREAT
Darò la tabella delle proteine:
Allora come posso scrivere quel codice in Perl? Modificherò la mia domanda e scriverò il codice che ho fatto.
Soluzione
Prova lo script di seguito, accetta l'input su stdin (o nel file indicato come parametro) e leggilo per riga. Presumo anche che "Stop" nell'immagine allegata sia uno stato di stop. Spero di aver letto tutto bene da quella foto.
#!/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"
}