BWInf-Workshop März 2011
Prof. Dr. Sven Rahmann, Informatik XI
Die Suche nach Genen
in Bakteriengenomen
BWInf-Workshop
22.-23. März 2011
Prof. Dr. Sven Rahmann
AG Bioinformatik
Informatik XI, TU Dortmund
1
BWInf-Workshop März 2011
Prof. Dr. Sven Rahmann, Informatik XI
Bioinformatik – was ist das?
Aufgabe:
Analyse (molekular)biologischer Daten
mit Methoden der Informatik
Teilgebiet: Sequenzanalyse
Analyse von DNA-, RNA-, Proteinsequenzen
Speziell an der Universität:
Erforschung und Entwicklung neuer solcher Methoden
2
BWInf-Workshop März 2011
Prof. Dr. Sven Rahmann, Informatik XI
Das zentrale Dogma der Molekularbiologie:
Informationsverarbeitung in der Zelle
DNA enthält Erbinformation (bei Viren oft RNA)
Diese wird „abgelesen“ (Transkription) in mRNA
Anhand der mRNA-Sequenz wird ein Proteinmolekül erstellt (Translation)
Proteine führen Funktionen in der Zelle aus.
Der Informationsfluss ist also DNA -> RNA -> Protein.
(Diese Sichtweise ist nicht immer korrekt.)
3
BWInf-Workshop März 2011
Prof. Dr. Sven Rahmann, Informatik XI
DNA-Struktur:
Biopolymer aus 4 Basen
4
BWInf-Workshop März 2011
Prof. Dr. Sven Rahmann, Informatik XI
DNA-Struktur: Biopolymer aus 4 Basen
Darstellung von DNA-Sequenzen als Zeichenketten (Strings)
Alphabet: 4 Buchstaben {A,C,G,T}
Länge: Millionen bis Milliarden Zeichen (Einheit: nt, bp)
Algorithmen auf Zeichenketten erlauben Analyse von Genomen.
5
BWInf-Workshop März 2011
Prof. Dr. Sven Rahmann, Informatik XI
Transkription von DNA in messenger RNA (mRNA)
6
BWInf-Workshop März 2011
Prof. Dr. Sven Rahmann, Informatik XI
Proteine sind Ketten von Aminosäuren
7
BWInf-Workshop März 2011
Prof. Dr. Sven Rahmann, Informatik XI
21 Aminosäuren
Illustration:
Dan Cojocari, Toronto
8
BWInf-Workshop März 2011
Prof. Dr. Sven Rahmann, Informatik XI
Translation von mRNA in Protein am Ribosom
9
BWInf-Workshop März 2011
Prof. Dr. Sven Rahmann, Informatik XI
Genetischer Code:
3 nt => 1 aa
Formaler
Übersetzungsprozess
• Lies jeweils 3 nt
• Suche dazu die passende
Aminosäure
• Hänge diese aneinander,
bis die DNA-Sequenz
erschöpft ist.
• Beachte auch: Start, Stopp
Base1
Base2
Base3
AA
=
=
=
=
TTTTTTTTTTTTTTTT
TTTTCCCCAAAAGGGG
TCAGTCAGTCAGTCAG
FFLLSSSSYY**CC*W
CCCCCCCCCCCCCCCC
TTTTCCCCAAAAGGGG
TCAGTCAGTCAGTCAG
LLLLPPPPHHQQRRRR
AAAAAAAAAAAAAAAA
TTTTCCCCAAAAGGGG
TCAGTCAGTCAGTCAG
IIIMTTTTNNKKSSRR
GGGGGGGGGGGGGGGG
TTTTCCCCAAAAGGGG
TCAGTCAGTCAGTCAG
10
VVVVAAAADDEEGGGG
BWInf-Workshop März 2011
Prof. Dr. Sven Rahmann, Informatik XI
Offene Leserahmen (open reading frames, ORFs)
Eine DNA-Sequenz kann auf 6 Arten interpretiert werden (Leseraster).
3 Startpositionen
2 Richtungen
Protein-kodierende Bereiche
(inkorrekterweise "Gene" genannt)
beginnen mit Startcodon
enthalten darauf folgend viele "normale" Codons
enden mit Stopp-Codon
Name für eine solche Struktur: ORF
Jedes Gen ist ein ORF, aber nicht umgekehrt
ORFs finden ist leicht, Gene finden schwierig.
Aufgabe: Finde alle ORFs in allen Leserastern in einem Bakteriengenom.
11
BWInf-Workshop März 2011
Prof. Dr. Sven Rahmann, Informatik XI
Beispiel: Übersetzung DNA -> Protein
(Nichtstrukturprotein NS1 des H1N1-Grippevirus,
Patient aus Puerto Rico im Jahr 1934)
ATGGATCCAAACACTGTGTCAAGCTTTCAGGTAGATTGCTTTCTTTGGCATGTCCGCAAACGAGTTGCAG
ACCAAGAACTAGGTGATGCCCCATTCCTTGATCGGCTTCGCCGAGATCAGAAATCCCTAAGAGGAAGGGG
CAGCACTCTTGGTCTGGACATCGAGACAGCCACACGTGCTGGAAAGCAGATAGTGGAGCGGATTCTGAAA
GAAGAATCCGATGAGGCACTTAAAATGACCATGGCCTCTGTACCTGCGTCGCGTTACCTAACCGACATGA
CTCTTGAGGAAATGTCAAGGGAATGGTCCATGCTCATACCCAAGCAGAAAGTGGCAGGCCCTCTTTGTAT
CAGAATGGACCAGGCGATCATGGATAAAAACATCATACTGAAAGCGAACTTCAGTGTGATTTTTGACCGG
CTGGAGACTCTAATATTGCTAAGGGCTTTCACCGAAGAGGGAGCAATTGTTGGCGAAATTTCACCATTGC
CTTCTCTTCCAGGACATACTGCTGAGGATGTCAAAAATGCAGTTGGAGTCCTCATCGGAGGACTTGAATG
GAATGATAACACAGTTCGAGTCTCTGAAACTCTACAGAGATTCGCTTGGAGAAGCAGTAATGAGAATGGG
AGACCTCCACTCACTCCAAAACAGAAACGAGAAATGGCGGGAACAATTAGGTCAGAAGTTTGA
MDPNTVSSFQVDCFLWHVRKRVADQELGDAPFLDRLRRDQKSLRGRGSTLGLDIETATRAGKQIVERILKE
ESDEALKMTMASVPASRYLTDMTLEEMSREWSMLIPKQKVAGPLCIRMDQAIMDKNIILKANFSVIFDRLE
TLILLRAFTEEGAIVGEISPLPSLPGHTAEDVKNAVGVLIGGLEWNDNTVRVSETLQRFAWRSSNENGRPP
LTPKQKREMAGTIRSEV.
12
BWInf-Workshop März 2011
Prof. Dr. Sven Rahmann, Informatik XI
Aufgabe
Gegeben:
Bakteriengenom (mehrere Millionen bp)
Dateiformat wird noch erläutert
Gesucht:
Liste aller ORFs (Start- und Endposition, Strang),
evtl. deren Eigenschaften (Länge, Bewertung)
Vorgehen:
Diskussion verschiedener algorithmischer Strategien
Bewertung der Effizienz
Aufteilung in Unterprobleme
Implementierung in Python
Test, Anwendung auf Genome
Projektpräsentation
13
BWInf-Workshop März 2011
Prof. Dr. Sven Rahmann, Informatik XI
Übungen
Wie lautet die Aminosäuresequenz zu
ATGCTTGGG ?
GAGATTAC ?
Wie lauten die Aminosäuresequenzen in allen 6 Leserastern ?
Wie viele Möglichkeiten gibt es, diese Aminosäuresequenz zu erzeugen?
ILSW
Base1
Base2
Base3
AA
=
=
=
=
TTTTTTTTTTTTTTTT
TTTTCCCCAAAAGGGG
TCAGTCAGTCAGTCAG
FFLLSSSSYY**CC*W
CCCCCCCCCCCCCCCC
TTTTCCCCAAAAGGGG
TCAGTCAGTCAGTCAG
LLLLPPPPHHQQRRRR
AAAAAAAAAAAAAAAA
TTTTCCCCAAAAGGGG
TCAGTCAGTCAGTCAG
IIIMTTTTNNKKSSRR
GGGGGGGGGGGGGGGG
TTTTCCCCAAAAGGGG
TCAGTCAGTCAGTCAG
14
VVVVAAAADDEEGGGG
BWInf-Workshop März 2011
Prof. Dr. Sven Rahmann, Informatik XI
Wie bringe ich den genetischen Code dem Computer bei?
Hängt von der Programmiersprache ab.
Hier am Beispiel von Python (www.python.org):
Erstelle ein "Wörterbuch" (engl. dictionary), in Python: dict.
Dessen Name sei 'aa' (für amino acids).
Mit aa["ATG"] erhält man die Aminosäure zum Codon ATG.
Das ist langweilige Tipparbeit...
aa = dict(
ATA="I",
ATC="I",
ATT="I",
ATG="M",
...)
15
BWInf-Workshop März 2011
Prof. Dr. Sven Rahmann, Informatik XI
Wie bringe ich den genetischen Code dem Computer bei?
Jetzt benötigen wir:
Funktion, die eine Sequenz in Tripel zerlegt.
Funktion, die zu einer DNA-Sequenz eine Folge von Aminosäuren erstellt
Funktion, die die Folge von Aminosäuren zu einem Protein verbindet
Erzeugung aller Tripel einer Sequenz:
def triples(seq):
"""gibt zu einer Sequenz 'seq' alle Tripel zurueck."""
it = iter(seq) # Iterator der Sequenz
while it:
yield (next(it),next(it),next(it))
16
BWInf-Workshop März 2011
Prof. Dr. Sven Rahmann, Informatik XI
Erklärungen zu triples()
def definiert eine neue Funktion.
Ihr Name ist triples
Sie hat ein Argument; das heißt seq.
Die Zeile mit den """ ... """ ist ein Kommentar (Hilfe) zur Funktion.
iter() liefert einen Iterator.
Ein Iterator ist ein Objekt, das über ein anderes Objekt iteriert, d.h.
alle Elemente dieses Objektes nacheinander besucht.
Dies geschieht solange wie der Iterator noch nicht erschöpft ist (while it)
Auf das jeweils nächste Element wird mit next() zugegriffen.
Dies geschieht immer 3x, so dass ein Tripel erzeugt wird
Die yield-Anweisung unterbricht die Funktion und liefert ein Tripel zurück.
def triples(seq):
"""gibt zu einer Sequenz 'seq' alle Tripel zurueck."""
it = iter(seq) # Iterator der Sequenz
while it:
17
yield (next(it),next(it),next(it))
BWInf-Workshop März 2011
Prof. Dr. Sven Rahmann, Informatik XI
Übung
Was passiert (irgendwann), wenn die Länge der Sequenz seq kein
Vielfaches von 3 ist?
def triples(seq):
"""gibt zu einer Sequenz 'seq' alle Tripel zurueck."""
it = iter(seq) # Iterator der Sequenz
while it:
yield (next(it),next(it),next(it))
18
BWInf-Workshop März 2011
Prof. Dr. Sven Rahmann, Informatik XI
Wie bringe ich den genetischen Code dem Computer bei?
Wir benötigen:
Funktion, die eine Sequenz in Tripel zerlegt.
Funktion, die zu einer DNA-Sequenz eine Folge von Aminosäuren erstellt
Funktion, die die Folge von Aminosäuren zu einem Protein verbindet
Erzeugung der Folge der Aminosäuren:
def aminoacids(dna):
"""gibt Aminosaeuren zur DNA-Sequenz 'dna' zurueck."""
for t in triples(dna):
codon = "".join(t)
yield aa[codon]
19
BWInf-Workshop März 2011
Prof. Dr. Sven Rahmann, Informatik XI
Erklärungen zu aminoacids()
Die Funktion aminoacids() bekommt eine DNA-Sequenz übergeben.
Wir iterieren über alle Tripel mit Hilfe der definierten Funktion triples() .
Da triples() eine yield-Anweisung enthält, ist sie eine Generator-Funktion.
Deswegen kann man sie als "Container" in einer for-Schleife verwenden.
Wann immer triples() ein neues Tripel erzeugt hat, wird der Rumpf der forSchleife ausgeführt; das Tripel heißt hier t.
Um im genetischen Code die zugehörige Aminosäure zu finden, muss aus
dem Tripel (z.B. ("A","G","T")) erst das Codon (z.B. "AGT") erstellt werden.
Dies geschieht mit Hilfe der join-Methode.
Die Aminosäure wird im genetischen Code (aa) nachgeschlagen.
Auch aminoacids() ist eine Generator-Funktion.
Sie liefert nacheinander die Aminosäuren an die aufrufende Routine.
def aminoacids(dna):
"""gibt Aminosaeuren zur DNA-Sequenz 'dna' zurueck."""
for t in triples(dna):
codon = "".join(t)
20
yield aa[codon]
BWInf-Workshop März 2011
Prof. Dr. Sven Rahmann, Informatik XI
Wie bringe ich den genetischen Code dem Computer bei?
Wir benötigen:
Funktion, die eine Sequenz in Tripel zerlegt.
Funktion, die zu einer DNA-Sequenz eine Folge von Aminosäuren erstellt
Funktion, die die Folge von Aminosäuren zu einem Protein verbindet
def protein(dna):
return "".join(aminoacids(dna))
Wir müssen die Folge der Aminosäuren zu einer Zeichenkette verbinden.
Dies geschieht wieder mit der join-Methode und dem leeren String als
Verbinder.
Die return-Anweisung liefert den Ausdruck dahinter zurück und beendet
die Funktion.
21