Een mutatie is niets anders dan een fout die optreedt tijdens het maken of kopiëren van een nucleïnezuur, in het bijzonder DNA. Omdat nucleïnezuren een vitale rol spelen bij cellulaire functies, hebben mutaties de neiging om een cel grondig dooreen te schudden. Maar hoewel mutaties technisch gezien als fouten kunnen aanzien worden, kunnen ze in zeer zeldzame gevallen een voordeel opleveren voor de cel. De macro-effecten van evolutie zijn dan ook toe te schrijven aan het cumulatieve resultaat van voordelige microscopische mutaties die optreden doorheen een groot aantal generaties.

code 39
Puntmutaties zijn de eenvoudigste een meest voorkomende vorm van nucleïnezuurmutaties, waarbij in één enkele nucleotide een base wordt vervangen door een andere base. In het geval van DNA verandert een puntmutatie ook de complementaire base, zoals in de figuur waarbij een C-G paar verandert in een A-T paar.

Stukjes DNA die afkomstig zijn uit het genoom van verschillende organismen of soorten worden homoloog genoemd als ze een recente voorouder hebben. Bij het vergelijken van meerdere homologe DNA-sequenties kan het handig zijn om hun consensussequentie te berekenen. Volgens het biologische principe van parsimony1 — de natuur neigt naar het kortst mogelijke evolutionaire pad — stelt deze sequentie immers de meest waarschijnlijke voorouder van de homologe DNA-sequenties voor.

Opgave

Een matrix is een rechthoekig rooster van waarden die gerangschikt zijn in rijen en kolommen. Een $$m \times n$$ matrix heeft $$m$$ rijen en $$n$$ kolommen. Gegeven een matrix $$A$$, dan schrijven we $$A_{i,j}$$ ($$0 \leq i < m; 0 \leq j < n$$) om de waarde aan te duiden die gevonden wordt op de intersectie van rij $$i$$ en kolom $$j$$.

Veronderstel dat we beschikken over een reeks DNA-sequenties die allemaal dezelfde lengte $$n$$ hebben. Hun profielmatrix is een $$4 \times n$$ matrix $$P$$ waarin $$P_{0, j}$$ uitdrukt hoeveel keer de base A voorkomt op de $$j$$-de positie van de gegeven sequenties, $$P_{1, j}$$ uitdrukt hoeveel keer de base C voorkomt op de $$j$$-de positie van de gegeven sequenties, enzoverder (zie onderstaande tabel).

De consensussequentie $$c$$ is een string van lengte $$n$$ die gevormd wordt door in de reeks DNA-sequenties op elke positie de meest voorkomende base te kiezen. Het $$j$$-de karakter van $$c$$ correspondeert dus met de base die de grootste waarde heeft in de $$j$$-de kolom van de profielmatrix van de DNA-sequenties. Indien er meerdere basen zijn die de grootste waarde hebben in de $$j$$-de kolom van de profielmatrix, dan wordt de letter N gebruikt als $$j$$-de karakter van $$c$$.

G C A A A A C G
G C G A A A C T
T A C C T T C A
sequenties T A T G T T C A
G C C T T A G G
G A C T T A T A
T C G G A T C C

A   0 3 1 2 3 4 0 3
profiel C   0 4 3 1 0 0 5 1
G   4 0 2 2 0 0 1 2
T   3 0 1 2 4 3 1 1

consensus G C C N T A C A

Gevraagd wordt:

Voorbeeld

>>> seqs = ['GCAAAACG', 'GCGAAACT', 'TACCTTCA', 'TATGTTCA', 'GCCTTAGG', 'GACTTATA', 'TCGGATCC']
>>> profiel(seqs)
{'A': [0, 3, 1, 2, 3, 4, 0, 3], 'C': [0, 4, 3, 1, 0, 0, 5, 1], 'T': [3, 0, 1, 2, 4, 3, 1, 1], 'G': [4, 0, 2, 2, 0, 0, 1, 2]}
>>> consensus(profiel(seqs))
'GCCNTACA'

>>> seqs = ['GGTATCTTTA', 'TTGTCGTCTTAGA', 'GGATCCAGAC', 'ATTCAATCGA', 'TGATCTGGAA', 'AGAGTCATGC']
>>> profiel(seqs)
Traceback (most recent call last):
AssertionError: sequenties moeten even lang zijn