10. ¨Ubung zur Bioinformatik I, WS 2011/12 - Universität des ...
10. ¨Ubung zur Bioinformatik I, WS 2011/12 - Universität des ... 10. ¨Ubung zur Bioinformatik I, WS 2011/12 - Universität des ...
Universität des Saarlandes FR 6.2 Informatik Prof. Dr. Hans-Peter Lenhof Anne Dehof, M. Sc. Daniel Stöckel, M. Sc. Dr. Oliver Müller Dr. Marc Hellmuth I 10. Übung zur Bioinformatik I, WS 2011/12 Aufgabe 1: Implementierung Viterbi-Algorithmus (25 Punkte) Implementieren Sie den Viterbi-Algorithmus in C++ und verwenden Sie folgendes Szenario zum Testen: Gegeben eine Reihe von Münzwurfergebnissen (1 repräsentiere Kopf, 0 repräsentiere Zahl). Der Tester wirft entweder eine ” gezinkte“ oder eine ” faire“ Münze. Die Wahrscheinlichkeit, dass er anfangs mit der ” fairen“ Münze wirft, sei 0.8. Die Wahrscheinlichkeit, mit der gezinkten Münze Kopf zu werfen, sei 0.75. Die Wahrscheinlichkeit, dass der Tester die Münze wechselt, sei 0.25. Ihr Programm soll als Eingabe • die Münzwurffolge x = x 0 x 1 ...x n , x i ∈ {0, 1} als Binärsequenz, • die Wahrscheinlichkeit, dass mit der “fairen” Münze begonnen wird, • die Wahrscheinlichkeit, dass der Tester die Münze wechselt und • die Wahrscheinlichkeit mit der gezinkten Münze Zahl zu werfen, bekommen. Als Ausgabe soll ihr Programm die DP-Matrix und die Münzfolge q = q 0 q 1 ...q n , q i ∈ {gezinkt, fair} ausgeben, die dem wahrscheinlichsten Pfad durch die DP-Matrix entspricht. Implementieren Sie zur Speicherung der Werte eine eigene Klasse Matrix. Verwenden Sie dazu folgendes Interface: template class Matrix { public: Matrix(int nx, int ny); ~Matrix(); inline T& operator () (int i, int j); inline const T& operator () (int i, int j) const; protected: vector data_; int nx_; int ny_; }; Vervollständigen Sie das Klasseninterface um Copy-Konstruktor, Zuweisungs-, Gleichheitsund Ausgabeoperator, sowie set- und get-Methoden.
- Seite 2 und 3: Verwenden Sie die logarithmische Sk
<strong>Universität</strong> <strong>des</strong> Saarlan<strong>des</strong><br />
FR 6.2 Informatik<br />
Prof. Dr. Hans-Peter Lenhof<br />
Anne Dehof, M. Sc.<br />
Daniel Stöckel, M. Sc.<br />
Dr. Oliver Müller<br />
Dr. Marc Hellmuth<br />
I<br />
<strong>10.</strong> Übung <strong>zur</strong> <strong>Bioinformatik</strong> I, <strong>WS</strong> <strong>2011</strong>/<strong>12</strong><br />
Aufgabe 1: Implementierung Viterbi-Algorithmus (25 Punkte)<br />
Implementieren Sie den Viterbi-Algorithmus in C++ und verwenden Sie folgen<strong>des</strong> Szenario<br />
zum Testen:<br />
Gegeben eine Reihe von Münzwurfergebnissen (1 repräsentiere Kopf, 0 repräsentiere Zahl).<br />
Der Tester wirft entweder eine ”<br />
gezinkte“ oder eine ”<br />
faire“ Münze. Die Wahrscheinlichkeit,<br />
dass er anfangs mit der ”<br />
fairen“ Münze wirft, sei 0.8. Die Wahrscheinlichkeit, mit der<br />
gezinkten Münze Kopf zu werfen, sei 0.75. Die Wahrscheinlichkeit, dass der Tester die<br />
Münze wechselt, sei 0.25.<br />
Ihr Programm soll als Eingabe<br />
• die Münzwurffolge x = x 0 x 1 ...x n , x i ∈ {0, 1} als Binärsequenz,<br />
• die Wahrscheinlichkeit, dass mit der “fairen” Münze begonnen wird,<br />
• die Wahrscheinlichkeit, dass der Tester die Münze wechselt und<br />
• die Wahrscheinlichkeit mit der gezinkten Münze Zahl zu werfen,<br />
bekommen.<br />
Als Ausgabe soll ihr Programm die DP-Matrix und die Münzfolge q = q 0 q 1 ...q n , q i ∈<br />
{gezinkt, fair} ausgeben, die dem wahrscheinlichsten Pfad durch die DP-Matrix entspricht.<br />
Implementieren Sie <strong>zur</strong> Speicherung der Werte eine eigene Klasse Matrix. Verwenden Sie<br />
dazu folgen<strong>des</strong> Interface:<br />
template <br />
class Matrix<br />
{<br />
public:<br />
Matrix(int nx, int ny);<br />
~Matrix();<br />
inline T& operator () (int i, int j);<br />
inline const T& operator () (int i, int j) const;<br />
protected:<br />
vector data_;<br />
int nx_;<br />
int ny_;<br />
};<br />
Vervollständigen Sie das Klasseninterface um Copy-Konstruktor, Zuweisungs-, Gleichheitsund<br />
Ausgabeoperator, sowie set- und get-Methoden.
Verwenden Sie die logarithmische Skala für die Berechnung. Testen Sie Ihr Programm mit<br />
x = 011100100011<strong>10.</strong><br />
Hinweis: Das Programm soll so allgemein implementiert werden, dass es auch für andere<br />
Problemstellungen, die mit Viterbi lösbar sind, angewendet werden kann.<br />
Aufgabe 2: VEIL (5 Punkte)<br />
In dieser Aufgabe sollen Sie ein einfaches, auf bestimmte Codons reduziertes VEIL-<br />
Intron-Modul erstellen. Die “Knoten” sind <strong>zur</strong> Vereinfachung nach folgender Nomenklatur<br />
benannt: XbY cZ sei die X. Base <strong>des</strong> Y . Codons mit dem Buchstaben Z, wobei<br />
X ∈ {1, 2, 3}, Y ∈ {1, 2}, Z ∈ {A,C,T,G}.<br />
Ihr Modul soll eine Sequenz beschreiben, die genau 2 Codons enthält. Die 1. Base <strong>des</strong><br />
1. Codons soll A sein, dann folgen 2 beliebige Basen. Die 1. Base <strong>des</strong> 2. Codons soll<br />
T sein, dann folgt eine beliebige Base und dann ein A oder C. Dabei sind folgende<br />
Übergangswahrscheinlichkeiten gegeben:<br />
• 1b1cA-2b1cC = 0.2 • 1b1cA-2b1cT = 0.4 • 2b1cC-3b1cC = 0.4<br />
• 2b1cT-3b1cT = 0.4 • 2b2cC-3b2cC = 0.7 • 2b2cC-3b2cA = 0.3<br />
Alle nicht explizit angegebenen Wahrscheinlichkeiten seien gleichverteilt. Beachten Sie,<br />
von welcher zu welcher Splice-Site ein Intron-Modul verläuft, und vergessen Sie nicht, alle<br />
Anpassungen an den Reading-Frame mit in Ihr Modul aufzunehmen. Zeichnen Sie das<br />
obige Modul. Achten Sie dabei auch auf Übersichtlichkeit.<br />
Aufgabe 3: Profile (10 Punkte)<br />
In dieser Aufgabe sollen Sie sich mit Profilen beschäftigen. Vereinfachend dürfen Sie für<br />
diese Aufgabe Gaps vernachlässigen! Gegeben sei das folgende Alignment:<br />
CACACGACTTCG<br />
TAGTGCACTGGG<br />
TTGTGCAGTTCC<br />
CTCTGGATGGCC<br />
CTCTGCACCTGC<br />
(a) Geben Sie das Profil P für obige Alignment-Matrix an.<br />
(b) Geben Sie außerdem die Konsensussequenz K für obiges Alignment an.<br />
(c) Begründen Sie an Hand <strong>des</strong> Beispiels aus dieser Aufgabe, dass zum Alignieren Profile<br />
besser geeignet sind als Konsensussequenzen.<br />
(d) Geben Sie den Score für S = ”<br />
TAGTCGACTGGG“ an, indem Sie zuerst S mit K<br />
alignieren (unter Verwendung der Edit Distanz), und dann S mit P (Formel auf<br />
Folie <strong>12</strong> der ”Profile und HMM - Teil3). Vergleichen Sie das Ergebnis (Hinweis:<br />
Beachten Sie dabei auch Aufgabenteil c!).
Aufgabe 4: Weihnachten (* Punkte)<br />
In dieser Aufgabe sollen Sie sich mit Weihnachten beschäftigen.<br />
(a) Essen Sie min<strong>des</strong>tens einen Weihnachtskeks.<br />
(b) Feiern Sie mit ihren Lieben.<br />
(c) Kommen Sie gut ins neue Jahr.<br />
Anmerkungen <strong>zur</strong> Abgabe von Quellcode:<br />
Je<strong>des</strong> abgegebene Quellcodepaket muss<br />
• kompilieren (auf den Rechnern im Cip-Pool),<br />
• gut dokumentiert sein,<br />
• getestet sein,<br />
• und sich an den BALL-Coding-Style halten (mit Ausnahme der Makro- und Test-<br />
Funktionalität von BALL).<br />
Schicken Sie Ihre Abgabe als .tar.gz Paket per Email an Ihren Betreuer Thorsten Klingen<br />
(tklingen@bioinf.uni-sb.de). Das Paket darf keine temporären oder binären Dateien<br />
enthalten. Beim Entpacken <strong>des</strong> Paketes soll ein übergeordnetes Verzeichnis erstellt werden,<br />
welches den Quellcode enthält. Der Quellcode muss durch ein mitgeliefertes Makefile<br />
kompilierbar sein.<br />
Anmerkungen <strong>zur</strong> Bearbeitung <strong>des</strong> Übungsblattes:<br />
Die Bearbeitung <strong>des</strong> Übungsblattes darf in Gruppen bestehend aus maximal zwei Personen<br />
durchgeführt werden.<br />
Abgabe: Donnerstag, <strong>12</strong>.01.20<strong>12</strong>, 23:59 Uhr