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