De genetische code beschrijft hoe de informatie in het genetisch materiaal (DNA of RNA) van leven de cellen wordt gelezen om een eiwit te vormen. De genetische code werd ontrafeld in de jaren 1960, enkele jaren na de ontdekking van de DNA-helix. Het verklaart hoe de vierletterige code van het DNA (voorgesteld door de letters A, C, G en T) kan vertaald worden naar de twintig verschillende aminozuren (voorgesteld door 20 verschillende letters), de bouwstenen van eiwitten. Op enkele uitzonderingen na is de genetische code universeel geldig bij alle vormen van leven.

Stukken DNA die coderen voor eiwitten (genen), worden in levende cellen overgeschreven naar een enkelstrengs RNA-molecuul. Dit molecuul — het messenger-RNA — is in wezen een kopie van het DNA en draagt instructies voor de aanmaak van een eiwit. In het ribosoom worden aminozuren aan elkaar gekoppeld in een volgorde die bepaald wordt door de nucleotidevolgorde in het mRNA. Het ribosoom leest daarbij steeds drie nucleotiden af van het mRNA, elk overeenkomend met een specifiek aminozuur. Dit proces wordt translatie genoemd.

De drie opeenvolgende nucleotiden, noemt men een codon. Codons specificeren welke aminozuren er aan de eiwitketen toegevoegd worden, en daarnaast bepalen ze de start- en stopsignalen van het translatieproces. Meestal doelt men met de term codon op de nucleotiden zoals die voorkomen in messenger-RNA: adenine (A), cytosine (C), guanine (G) en uracil (U). Het codon ACU correspondeert bijvoorbeeld met het aminozuur threonine, en CGG met arginine. De genetische code kan samengevat worden in een simpele codontabel van 64 codes.

RNA codons standaard genetische code

Lange tijd werd aangenomen dat de genetische code universeel is — een gegeven codon zou in elk organisme voor hetzelfde aminozuur coderen. Deze aanname is grotendeels waar: de genetische code is van toepassing bij alle drie de domeinen van het leven. Dit feit levert een belangrijk argument voor de gemeenschappelijke afstamming van alle levensvormen. Er zijn echter een paar uitzonderingen — variaties — op de genetische code ontdekt. De eencellige schimmel Candida albicans vertaalt het codon CUG bijvoorbeeld naar serine, terwijl bijna alle andere organismen dit codon naar leucine vertalen. Bij sommige ciliaten (eencellige eukaryoten) werken de drie conventionele stopcodons anders — deze coderen namelijk gewoon voor aminozuren, en het eind van de translatie wordt gesignaleerd door het 3'-eind van het mRNA.

In mitochondriën van uiteenlopende soorten geldt ook een sterk variërende genetische code. In de mitochondriën van zoogdieren wordt het codon AUA bijvoorbeeld vertaald naar methionine, in plaats van AUG. Mitochondriën hebben hun eigen genetisch materiaal en coderen hun eigen translatiemachinerie. Dergelijke variaties laten zien dat de genetische code niet zonder meer onwrikbaar vastgelegd is, maar evolutionaire veranderingen kan ondergaan.

Opgave

Het DNA-alfabet bestaat uit vier verschillende nucleotiden die voorgesteld worden door de letters A, C, G en T. Een DNA-sequentie (str) bestaat uit een reeks letters uit het DNA-alfabet. Het RNA-alfabet bestaat uit vier verschillende nucleotiden die voorgesteld worden door de letters A, C, G en U. Een RNA-sequentie (str) bestaat uit een reeks letters uit het RNA-alfabet. Bij de omzetting van DNA naar RNA, wordt thymine (T) omgezet naar uracil (U), waardoor de letter T in het DNA-alfabet een synoniem is voor de letter U in het RNA-alfabet. Een codon (str) is een sequentie (DNA of RNA) van lengte 3.

Het eiwit-alfabet bestaat uit 20 verschillende aminozuren (voorgesteld door 20 verschillende letters) en een stopcodon (voorgesteld door een sterretje: *). Een eiwitsequentie (str) bestaat uit een reeks karakters uit het eiwit-alfabet.

Een DNA- of RNA-sequentie wordt vertaald naar een eiwitsequentie door elk codon van drie opeenvolgende letters om te zetten naar het corresponderende aminozuur of stopcodon. Als de lengte van de DNA- of RNA-sequentie geen veelvoud is van drie, dan wordt de laatste letter of worden de laatste twee letters van de sequentie genegeerd bij de vertaling. De genetische code die gebruikt wordt voor die omzetting wordt vastgelegd in een vertaaltabel: een tekstbestand dat bestaat uit 64 regels. Elke regel bevat een uniek codon en het corresponderende aminozuur, van elkaar gescheiden door een spatie. Voor de codons gebruikt de vertaaltabel ofwel het DNA-alfabet (met T voor thymine) of het RNA-alfabet (met U voor uracil).

Definieer een klasse GenetischeCode waarmee genetische codes kunnen voorgesteld worden. Bij het aanmaken van een genetische code (GenetischeCode) moet de locatie (str) van de vertaaltabel van de genetische code doorgegeven worden. Op een genetische code $$\mathcal{C}$$ (GenetischeCode) moet je minstens de volgende methoden kunnen aanroepen:

Voorbeeld

Bij onderstaand voorbeeld gaan we ervan uit dat het tekstbestand standard_code.txt zich in de huidige directory bevindt. Dit bestand bevat de vertaaltabel van de standaard genetische code, waarbij de specificatie van de codons het DNA-alfabet gebruikt.

>>> code = GenetischeCode('standard_code.txt')

>>> code.aminozuur('AGT')
'S'
>>> code.aminozuur('cga')
'R'
>>> code.aminozuur('UCU')
'S'
>>> code.aminozuur('ABC')
Traceback (most recent call last):
AssertionError: ongeldig codon
>>> code.aminozuur('aagc')
Traceback (most recent call last):
AssertionError: ongeldig codon

>>> code.eiwit('ATGCTGATGATGGGCTATTATCGAT')
'MLMMGYYR'
>>> code.eiwit('uauccuaguguc')
'YPSV'
>>> code.eiwit('AAGTCGTAGCTACGXXXXGAGAAGGAT')
Traceback (most recent call last):
AssertionError: ongeldige sequentie