Algorithmen auf Sequenzen - TU Dortmund, Informatik 2

Werbung
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
Herunterladen