Een dot plot is één van de oudste grafische voorstellingsvormen om twee biologische sequenties met elkaar te vergelijken. Gebieden van de twee sequenties die sterk op elkaar gelijken worden bij een dot plot immers gevisualiseerd als diagonalen.
Dot plots worden opgebouwd als tweedimensionale matrices waarvan de rijen overeenstemmen met de opeenvolgende vensters (dit is de term die in deze context gebruikt wordt voor aaneengesloten gebieden binnen een sequentie) van de eerste sequentie, en de kolommen met de opeenvolgende vensters van de tweede sequentie. In de meest eenvoudige vorm worden de vensters gevormd door de individuele residu's (letters) van een sequentie, maar bij uitbreiding kan een venster ook bestaat uit $$n$$ opeenvolgende residu's. Een cel van de matrix wordt zwart gemaakt (voorgesteld door de Booleaanse waarde True) indien het corresponderende venster van de eerste sequentie voldoende gelijkenis vertoont met het corresponderende venster van de tweede sequentie. Anders blijft de cel van de matrix wit (voorgesteld door de Booleaanse waarde False).
Definieer een klasse Dotplot waarmee dot plots voor twee gegeven biologische sequenties kunnen aangemaakt worden. Biologische sequenties worden hierbij voorgesteld als strings die enkel bestaan uit letters van het alfabet (die de individuele residu's voorstellen). Posities binnen deze sequenties worden geïndexeerd vanaf nul. Objecten van de klasse Dotplot moeten volgende methoden hebben:
Een initialisatiemethode waaraan twee biologische sequenties als argument moeten doorgegeven worden. Deze sequenties moeten als attributen van het nieuw aangemaakte object van de klasse Dotplot bijgehouden worden.
Een methode vensters met drie parameters: i) een parameter start1 $$\in \mathbb{N}$$ die een startpositie binnen de eerste sequentie aangeeft, ii) een parameter start2 $$\in \mathbb{N}$$ die een startpositie binnen de tweede sequentie aangeeft, en iii) een optionele parameter lengte $$\in \mathbb{N}_0$$ die de lengte van een venster aangeeft (standaardwaarde 1). De methode moet een tuple van twee deelsequenties teruggeven die beginnen op de respectievelijke startposities van de twee sequentie-attributen van het object, en de opgegeven lengte hebben zoals aangegeven door de parameter lengte. Leid uit onderstaande voorbeeldsessie af hoe de methode moet reageren indien een ongeldige venstergrootte wordt opgegeven (een strikt positief geheel getal), of indien vanaf de opgegeven startposities geen vensters van de opgegeven lengte kunnen uitgeknipt worden.
Een methode gelijk met vier parameters: dezelfde drie parameters die gebruikt worden door de methode vensters, en een optionele parameter aantal $$\in \mathbb{N}_0$$ (standaardwaarde 1). De methode moet een Booleaanse waarde als resultaat teruggeven, die aangeeft of het aantal gelijke overeenkomstige residu's (letters) van de vensters die corresponderen met de eerste drie parameters groter of gelijk is aan de waarde die werd doorgegeven aan de parameter aantal. Bij het vergelijken van residu's mag geen onderscheid gemaakt worden tussen hoofdletters en kleine letters.
Een methode plot die een tweedimensionale matrix van Booleaanse waarden teruggeeft. Deze matrix wordt voorgesteld als een lijst van lijsten, waarbij de binnenste lijsten de rijen van de matrix voorstellen. De rijen corresponderen met de opeenvolgende vensters van het eerste sequentie-attribuut, en de kolommen met de opeenvolgende vensters van het tweede sequentie-attribuut. Vensters hebben een vaste lengte (optionele parameter lengte $$\in \mathbb{N}_0$$; standaardwaarde 1) en opeenvolgende vensters liggen een vast aantal posities van elkaar verwijderd (optionele parameter stap $$\in \mathbb{N}_0$$; als standaardwaarde wordt de lengte van de vensters genomen). Met deze parameters kunnen dus zowel overlappende als niet-overlappende vensters gedefinieerd worden. Een cel van de matrix krijgt de Booleaanse waarde True indien het corresponderende venster van de eerste sequentie voldoende gelijkenis (zoals gedefinieerd door de methode gelijk, in combinatie met de optionele parameter aantal $$\in \mathbb{N}_0$$; standaardwaarde 1) vertoont met het corresponderende venster van de tweede sequentie. Anders krijgt ze de Booleaanse waarde False.
Klik op de links in onderstaande voorbeeldsessie om een grafische voorstelling van de dot plots te bekijken.
>>> dotplot = Dotplot('ATCCTC', 'ATTCTCG')
>>> dotplot.vensters(start1=1, start2=4, lengte=3)
('TCC', 'TCG')
>>> dotplot.vensters(start1=1, start2=4, lengte=-3)
Traceback (most recent call last):
AssertionError: ongeldige venstergrootte
>>> dotplot.vensters(start1=1, start2=5, lengte=3)
Traceback (most recent call last):
AssertionError: ongeldige startpositie
>>> dotplot.gelijk(start1=1, start2=4, lengte=3)
True
>>> dotplot.gelijk(start1=1, start2=4, lengte=3, aantal=2)
True
>>> dotplot.gelijk(start1=1, start2=4, lengte=3, aantal=3)
False
>>> dotplot.plot(lengte=1, stap=1, aantal=1) 1
[[True, False, False, False, False, False, False], [False, True, True, False, True, False, False], [False, False, False, True, False, True, False], [False, False, False, True, False, True, False], [False, True, True, False, True, False, False], [False, False, False, True, False, True, False]]
>>> dotplot.plot(lengte=3, stap=1, aantal=1) 2
[[True, True, False, True, False], [False, True, True, True, True], [True, False, True, True, True], [True, True, False, True, False]]
>>> dotplot.plot(lengte=3, stap=1, aantal=2) 3
[[True, True, False, True, False], [False, True, True, False, True], [False, False, True, False, False], [False, True, False, True, False]]
>>> dotplot.plot(lengte=3, stap=1, aantal=3) 4
[[False, False, False, False, False], [False, False, False, False, False], [False, False, False, False, False], [False, False, False, True, False]]
>>> dotplot.plot(lengte=2) 5
[[True, False, False], [False, True, True], [False, True, True]]
>>> dotplot.plot(lengte=2, aantal=2) 6
[[True, False, False], [False, False, False], [False, True, True]]
>>> dotplot.plot(lengte=3, aantal=2) 7
[[True, True], [False, True]]