Ein Dynamic Programming Algorithmus zur Vorhersage von RNA- Faltungen mit Auftreten von Pseudoknoten

Ähnliche Dokumente
37 Gauß-Algorithmus und lineare Gleichungssysteme

RNA Strukturvorhersage

Fortgeschrittene Netzwerk- und Graph-Algorithmen

Beginn der Vorlesung zur Numerik I (Wintersemester 2010/2011)

Einführung in die linearen Funktionen. Autor: Benedikt Menne

RNA- und DNA-Strukturen Strukturelle Bioinformatik WS15/16

Masterarbeit Lehrstuhl für Bioinformatik Technische Fakultät Albert-Ludwigs-Universität Freiburg

2 Die Dimension eines Vektorraums

16. All Pairs Shortest Path (ASPS)

Datenstrukturen & Algorithmen

Threading - Algorithmen

Dynamische Programmierung. Problemlösungsstrategie der Informatik

2. Repräsentationen von Graphen in Computern

Mathematik 1, Teil B. Inhalt:

4. Kreis- und Wegeprobleme Abstände in Graphen

Probeklausur zur Vorlesung Berechenbarkeit und Komplexität

3. Das Reinforcement Lernproblem

9.2 Invertierbare Matrizen

Definition 7.1. Der Coxeter Graph zu W ist der ungerichtete gewichtete Graph Γ W = (V, E), mit Eckenmenge V und Kantenmenge E, gegeben durch V = und

In diesem Abschnitt betrachten wir nur quadratische Matrizen mit Komponenten aus einem Körper K, also A K n n für ein n N. Wenn (mit einem n > 1)

Lineare Gleichungssysteme

Wichtige Anmerkungen zur Feldsicherheit

19 Folgen. Grenzwerte. Stetigkeit

(Allgemeine) Vektorräume (Teschl/Teschl 9)

Probabilistische Primzahltests

Allgemeine diskrete Wahrscheinlichkeitsräume II. Beispiel II. Beispiel I. Definition 6.3 (Diskreter Wahrscheinlichkeitsraum)

3.6 Eigenwerte und Eigenvektoren

Lineare Abhängigkeit

A2.3 Lineare Gleichungssysteme

Kevin Caldwell. 18.April 2012

Frage 8.3. Wozu dienen Beweise im Rahmen einer mathematischen (Lehramts-)Ausbildung?

9. Heuristische Suche

Spezialfall: Die Gleichung ax = b mit einer Unbekannten x kann mit Hilfe des Kehrwerts 1 a = a 1 gelöst werden:

Rekursive Algorithmen

3.4 Der Gaußsche Algorithmus

Mathematik für Naturwissenschaftler I WS 2009/2010

Übungspaket 23 Mehrdimensionale Arrays

Mathematik II für Studierende der Informatik. Wirtschaftsinformatik (Analysis und lineare Algebra) im Sommersemester 2016

Drehung um einen Punkt um Winkel α.

Lineare Gleichungssysteme (Teschl/Teschl 11.1)

Kapitel XII - Gleichmäßig beste unverfälschte Tests und Tests zur Normalverteilung

Statistische Verfahren:

Algorithmen & Programmierung. Rekursive Funktionen (1)

Hackenbusch und Spieltheorie

Reelle Zahlen, Gleichungen und Ungleichungen

Transaktionen. Michael Löwe 04/15/16. FHDW Hannover, Freundallee 15, Hannover address:

Übungen zu Einführung in die Numerische Mathematik (V2E2) Sommersemester 2016

JOHANNES BONNEKOH. Analysis. Allgemeine Hochschulreife und Fachabitur

Nichtdeterministische Platzklassen

Lineare Algebra für D-ITET, D-MATL, RW. Beispiellösung für Serie 10. Aufgabe ETH Zürich D-MATH. Herbstsemester Dr. V. Gradinaru D.

3 Elementare Umformung von linearen Gleichungssystemen und Matrizen

Ersetzbarkeitstheorem

Eigentlich löst man n Gleichungen mit n Unbekannten (die. normalerweise eindeutig lösbar sind) am besten mit Hilfe der

Entladung eines Kondensators

8 Tangenten an Quadriken

Übung zur Vorlesung Berechenbarkeit und Komplexität

6. Übung zur Linearen Optimierung SS08

Informatik. Teil 1 Wintersemester 2011/2012. Prof. Dr.-Ing. habil. Peter Sobe Fachkultät Informatik / Mathematik

MafI I: Logik & Diskrete Mathematik (F. Hoffmann)

Euklidische Distanzmatrizen. Andrei Grecu

Kostenmodell. Daniel Graf, Tobias Pröger. 22. September 2016 (aktualisierte Fassung 5 vom 9. Oktober 2016)

3. rekursive Definition einer Folge

1. Einleitung wichtige Begriffe

Kapitel 5: Abstrakte Algorithmen und Sprachkonzepte. Elementare Schritte

Übungen zu Programmierung I - Blatt 8

Thüringer CAS-Projekt

Universität des Saarlandes Theoretische Informatik (WS 2015) Lösungsvorschlag 4

8 Komplexitätstheorie und Kryptologie

Buch Medien / Zuordnung zu den Kompetenzbereichen Seite Methoden inhaltsbezogen prozessbezogen

Grundlagen der Theoretischen Informatik Musterlösungen zu ausgewählten Übungsaufgaben

7 KONVERGENTE FOLGEN 35. inf M = Infimum von M. bezeichnet haben. Definition. Sei (a n ) n N eine beschränkte Folge in R. Dann heißt.

Grundlagen der Elektrotechnik 1

Studiengang Informatik der FH Gießen-Friedberg. Sequenz-Alignment. Jan Schäfer. WS 2006/07 Betreuer: Prof. Dr. Klaus Quibeldey-Cirkel

Übungsaufgaben zu Partielle Differentialgleichungen Blatt III vom

Aufgabe 1. Bakterien als Untersuchungsgegenstand!

Konvergenz, Filter und der Satz von Tychonoff

Lösung zur Klausur zu Krypographie Sommersemester 2005

2. Vorlesung. 1.3 Beste-Antwort Funktion. Vorlesung: Einführung in die Spieltheorie WS 2006/ Oktober 2006 Guido Schäfer

2 Elektrischer Stromkreis

Thema 4 Limiten und Stetigkeit von Funktionen

Altes Gymnasium Oldenburg ab Schuljahr 2009/ 10. Jahrgang: 10 Lehrwerk: Elemente der Mathematik Hilfsmittel: ClassPad300, Das große Tafelwerk

Dierentialgleichungen 2. Ordnung

Vorlesung. Funktionen/Abbildungen

Approximationsalgorithmen

Benutzerhandbuch für eine Software-Anwendung gestalten

Einführung in die Informatik I (autip)

4.1. Grundlegende Definitionen. Elemente der Analysis I Kapitel 4: Funktionen einer Variablen. 4.2 Graphen von Funktionen

Einführung in die Informatik 1

Lösungen ausgewählter Übungsaufgaben zum Buch. Elementare Stochastik (Springer Spektrum, 2012) Teil 3: Aufgaben zu den Kapiteln 5 und 6

5 Eigenwerte und die Jordansche Normalform

Lineare Gleichungssysteme

Kapitel 2 MENGENLEHRE

Klausur zur Vorlesung,,Algorithmische Mathematik II

Funktionale Programmierung. Funktionale Programmierung: Vorlesungsüberblick. Eigenschaften rein funktionaler Programmierung

DNA- Replikation. PowerPoint-Learning. Andrea Brügger. von

Anabole Prozesse in der Zelle

Mathematischer Vorkurs Lösungen zum Übungsblatt 5

13. Der diskrete Logarithmus

Unimodularität. Kapitel 1. Peter Becker (H-BRS) Operations Research II Wintersemester 2015/16 11 / 206

3 Vom Zählen zur Induktion

Transkript:

Ein Dynamic Programming Algorithmus zur Vorhersage von RNA- Faltungen mit Auftreten von Pseudoknoten 1. Motivation Viele RNAs falten sich in Strukturen, die essentiell wichtige Funktionen für regulatorische, katalytische oder strukturelle Aufgaben in der Zelle übernehmen. Dominiert wird eine RNA Struktur von den Basenpaaren die sich zwischen komplementären Basen bilden. Die meisten dieser Basenpaarungen sind sogenannte Watson-Crick Basenpaare. Aufgrund der Tatsache daß Watson-Crick-Paarungen stereotypische und relativ simple Interaktionen sind, schien es relativ einfach, einen Algorithmus zur Vorhersage von RNA-Faltungen zu entwickeln. Der Zuker Algorithmus zur Vorhersage von RNA-Faltungen schafft genau dieses in polynomischer Komplexität. Er benutzt als Grundlage für die Vorhersage der RNA- Faltung Thermodynamische Modelle, die wiederum mit Hilfe der von Turner entwickelten Thermodynamischen Gesetze modelliert wurden. Eine bekannte Beschränkung des Zuker Algorithmus ist, daß er keine sogenannten Pseudoknoten (Pseudoknots) vorhersagen kann. Auch die Weiterentwicklungen auf der Basis des Zuker Algorithmus haben sich diesem Problem nicht weiter gewidmet. In dem Thermodynamische Modell für RNA-Faltungen exklusive Pseudoknoten gibt es ein paar stereotypische RNA-Unterstrukturen wie stems, hairpins, bulges, internal loops und multiloops. Formal gesehen folgen RNA-Strukturen ohne Pseudoknoten einer sogen. nesting convention, die besagt, daß für beliebige 2 basenpaare i, j und k, l (mit i<j, k<l und i<k), entweder i<k<l<i oder i<j<k<l ist. Diese "nesting convention" ist die Grundlage für den Zuker Algorithmus, um rekursiv auf längeren Sequenzen die oben genannten Substrukturen vorherzusagen. Ein RNA Pseudoknoten ist allerdings eine Struktur, die Basenpaare beeinhaltet die genau gegen diese "nesting convention" verstossen und somit Faltungen anderer Natur ermöglichen (auch tertiär Struktur genannt). Beispielsweise kann sich ein hairpinloop auf den RNA Strang zurückfalten (siehe Abb. 1). Abbildung 1: Ein simpler Pseudoknoten

Vorhergehende Versuche und Lösungsansätze zur Vorhersage von RNA-Faltungen inklusive Pseudoknoten benutzten heuristische Methoden was im Endeffekt zu nicht optimalen Ergebnissen führte oder die Einsatzmöglichkeiten der Algorithmen beschränkte. Ein großteil der Fachwelt war sich lange Zeit der Meinung, daß die Pseudoknoten Vorhersage ein NP-Problem wäre. Mit dem Algorithmus von Rivas/Eddy liegt nun ein Algorithmus zur Vorhersage von Pseudoknoten vor, der dieses Problem in Polynomischer Zeit löst, Rechenzeit O(n 6 ) und Speicherbedarf O(n 4 ). 2. Erläuterung des Dynamic Programming Algorithmus zur Vorhersage von RNA- Faltungen inklusive Pseudoknoten 2.1. Klärung von Begrifflichkeiten Im weiteren Verlauf wird der Algorithmus in diagrammatischer Form repräsentiert. Dazu werden sogenannte Feynman Diagramme benutzt, die normalerweise Anwendung in der Quantum Feld Theorie findet. Dieser Weg der diagrammatischen Repräsentation des Algorithmus ist notwendig, um der hohen, von den Pseudoknoten eingeführte Komplexität Herr zu werden. Der Zuker Algorithmus ist nicht so komplex als daß man ihn diagrammatisch erklären müsste. Da allerdings der Pseudoknoten Algorithmus direkt auf den Algorithmus von Zuker aufsetzt, wurde auch der Zuker Algorithmus auf diese Weise repräsentiert. Bemerkungen zu den Feynman Diagrammen: die Gerade steht für das Rückrad einer RNA Sequenz. das 5'-Ende (i = 5', j = 3' per Konvention) liegt links Sekundäre Interaktionen, also Wasserstoffbrückenbindungen zwischen den Basen werden mit der gebogenen, welligen Linie angezeigt. Ist die gebogenen Linie gestrichelt, so ist der Zustand zwischen den interagierenden Basen unbekannt. Die wellige Linie bedeutet, das die beiden Basen miteinander paaren einzelsträngige Regionen werden durch Punkte makiert. Die Punkte werden allerdings nur gesetzt, wenn sie für die Faltung von Bedeutung sind. Unbedeutende einzelsträngige Regionen entbehren den Punkt mit Hilfe dieser Form der Darstellung lassen sich die bekannten Strukturen (stem, bulge, hairpin, internal loop, multiloop) als einfache, nested (eingenistete) Strukturen repräsentieren wie in Abbildung 2 zu sehen Abbildung 2: diagrammatische Repräsentation der gängigsten, sekundären RNA-Strukturen

Definition irreducible surface (IS): Wie der Name schon vermuten lässt, handelt es sich dabei um eine Oberfläche, die sich nich weiter auf andere (kleinere) Oberflächen reduzieren lässt. An Feynman Diagrammen lässt sich somit leicht ablesen, daß hairpins eine IS von O(1) haben, stems, bulges und internal loops haben eine IS von O(2) und multiloops haben eine IS mit O > 2. (Anmerkung: die IS sind äquivalent zu den von Sankoff definierten "k-loops".) 2.2. Der Zuker Algorithmus Um einen nested Algorithmus zu beschreiben, benötigt man 2 N x N Matrizen die mit vx und wx bezeichnet werden. vx(i,j) gibt einen Wert für die beste Faltung zwischen Basen i und j an, unter der Vorraussetzung, daß i und j gepaart sind. wx(i,j) gibt einen Wert für die beste Faltung zwischen Basen i und j an, unabhängig davon, ob i und j miteinander paaren oder nicht. Eine graphische Darstellung dieser Matrizen ist in Abb. 3 zu sehen. Abbildung 3: diagrammatische Repräsentation der wx und vx Matrizen Die Rekursion für vx(i,j) sieht dann in unserem falle wie folgt aus:

Zur Veranschaulichung die diagrammatische Darstellung mit Hilfe der Feynman Diagramme: Abbildung 4: Rekursion für vx abgebrochen bei IS mit O(2). Man beachte, daß die Rekursion bei IS mit O(2) abgebrochen wird, da ansonsten deutlich mehr Rechenzeit nötig wäre. Der Algorithmus zur Berechnung der IS trägt eine Komplexität von O(n 2(γ-1) ) zur Gesamtkomplexität bei weswegen eine Beschränkung (im sinne der Rechenzeit) sinnvoll ist. In der Rekursion werden hairpins, stems, bulges und internal loops von den Funktionen EIS 1 und EIS 2 präzise behandelt. Diese Strukturen tauchen am häufigsten in RNAs auf. Multiloops werden durch die letzte Rekursion behandelt. Dabei steht PI für das schließende Basenpaar des multiloops und M ist die Bewertung für den generierten multiloop der anhand der Turner'schen Thermodynamischen Gesetze berechnet wird. Die Rekursion für wx(i,j) sieht analog dazu wie folgt aus:

Zur Veranschaulichung die diagrammatische Darstellung mit Hilfe der Feynman Diagramme: Abbildung 5: Rekursion für wx im nested Algorithmus Bemerkung: Es existieren 2 unabhängige Matrizen wx und wx', welche strukturell identisch sind aber komplett unterschiedlich zu interpretieren sind: wx' aus der vx-rekursion dient als Abbruchbedingung für die Berechnung und wird exklusiv in Diagrammen benutzt, welche zu multiloops verbunden werden. wx wiederum wird nur verwendet bei fehlenden externen Basenpaaren vom multiloop. Aus diesem Grund werden die Parameter sehr unterschiedliche Werte annehmen, ganz einfach da auch die Aussagen der beiden Matrizen wx und wx' komplett unterschiedlich interpretiert werden. Q' ist der Strafwert für ein ungepaartes Nucleotid in einem multiloop und P' ist der Strafwert für das schließende Basenpaar. Auf der anderen Seite repräsentiert Q den Wert für ein einsträngiges Nucleotid und P den Wert für ein externes Basenpaar. Anmerkung: in den Turner'schen Thermodynamischen Gesetzen gehen die Werte für P und Q gegen Null. 2.3.Der Pseudoknoten Algorithmus Pseudoknoten sind sogenannte "non-nested configurations" und können somit nicht mit den matrizen vx und wx beschrieben werden. Dazu sind spezielle Matrizen notwendig, sogenannte "gap" (lücke) matrizen oder one-hole Matrizen. an untenstehender Abbildung (Abb. 6) lässt sich gut erkennen wie man einen einfachen Pseudoknoten mit hilfe 2er gap Matrizen mit komplementären "Lücken" darstellen kann.

Abbildung 6: Konstruktion eines simplen Pseudoknotens mit Hilfe zweier gap Matrizen Für den dynamic programming Pseudoknoten Algorithmus werden 4 dieser gap Matrizen eingeführt. Wir definieren whx(i,j:k,l) (mit i<=j<=k<=l) als den Graphen der die optimale Faltung zwischen den Segmenten [i,k] und [l,j] angibt, wobei unbekannt ist ob i, j und k, l gepaart sind oder nicht. Selbiges gilt für vhx(i,j:k,l) (mit i<=j<=k<=l), allerdings mit der Vorraussetzung, daß i, j und k, l gepaart sind. Der Vollständigkeit halber definieren wir noch 2 weitere Matrizen. yhx(i,j:k,l) (mit i<=j<=k<=l), wobei i, j gepaart sind und unbekannt ist ob k, l paaren oder nicht, und zhx(i,j:k,l) (mit i<=j<=k<=l), wobei unbekannt ist ob i, j paaren oder nicht und k, l gepaart sind. Zur Veranschaulichung die diagrammatische Darstellung der definierten gap Matrizen (Abb. 7).

Abbildung 7: Repräsentationen der gap Matrizen die für den Pseudoknoten Algorithmus benötigt werden. Die "normalen" (also non-gap) Matrizen wx, vx werden als spezielle Fälle der gap Matrizen betrachtet. Wenn also kein "Loch" vorhanden ist, also k = l - 1, dann ist per Konstruktion: Kommen wir zu den Rekursionen, die die gap Matrizen benötigen. Dazu werden die schon bekannten Rekursionen aus dem oben beschriebenen Zuker/Sankoff Algorithmus wie folgt erweitert. Die zusätzlichen Parameter für Pseudoknoten sind: P1 = der Wert für ein Basenpaar in einem non-nested multiloop; M = ein generische Wert für die Berechnung eines non-nested multiloops; GwI = Wert für die Generierung eines internen Pseudoknotens.

Analog dazu wird wx(i,j) wie folgt erweitert. Gw ist der hier der Wert für einen Pseudoknoten. Zur Veranschaulichung die diagrammatische Darstellung von vx(i,j) und wx(i,j) mit Hilfe der Feynman Diagramme: Abbildung 8: Rekursion für vx Abbildung 9: Rekursion für wx

Zu beachten ist auch hierbei wieder, daß es 2 verschiedene wx Matrizen gibt, die sich nur anhand der Parameterwerte unterscheiden und ansonsten strukturell gleich sind. Wenn die Untersequenz i...j freistehend ist wird wx benutzt, erscheint sie in einem multiloop wird wxi benutzt. Um die Anforderungen bzgl. Rechenzeit und Speicherplatzbedarf nicht zu arg zu strapazieren wird auf die Verwendung von mehr als 2 gap Matrizen verzichtet. Somit ist eine lösbare Konfiguration eine, die sich mit Hilfe von max. 2 zusätzlich gap Matrizen (zu den schon bekannten vx und wx) ausdrücken lässt. Eine nicht lösbare Konfiguration würde die Involvierung von 3 oder mehr zusätzliche gap Matrizen für die Darstellung erfordern. Anzumerken ist auch, daß der Algorithmus 2 Approximationen beinhaltet. Zum einen die Beschränkung auf max. 2 zusätzliche gap Matrizen um den Algorithums polynomisch zu halten, und zum anderen die Einschränkung im nested Algorithmus von Zuker/Sankoff, wo der Algorithmus auf Berechnungen von IS mit O(2) beschränkt wird und IS mit O > 2 oder multiloops mit hilfe von Schätzwerten approximiert werden. 2.4.Coaxiale Bindungen und dangles Der Algorithmus ist in der Lage, Coaxiale Bindungen und Dangles zu behandeln. Dazu müssen Teilgleichungen der beschriebenen Rekursionen verändert werden. Bei Coaxialen Bindungen wird die Teilgleichung, die sogenannten nested bifurcations berechnet mit folgender Gleichung ergänzt: Dazu die korrespondierende diagrammatische Darstellung: In diesem Gabelungs Diagramm sind die Nucleotide der Gabelung gepaart, deshalb das Auftauchen von vx. Wenn also k und k+1 mit den nucleotiden i und j gepaart sind, fließt dafür C(k,i:k+1,j) als Energiebetrag in die Berechnung ein. Dies ist ein negativer Wert da die beiden Substrukturen vx(i,k) und vx(k+1,j) aufeinander stacken.

Für dangles muss folgende Diagrammbeschreibungen hinzugefügt werden: Dazu wiederum die korrespondierende diagrammatische Darstellung: Die dangle-bewertungsfunktionen R, L hängen von den jeweils dangelnden Basen und dem sich anschließenden Basenpaar ab. Die Werte, die diese Funktionen annehmen können wurden experimentell von der Turner-Gruppe ermittelt. 3. Ergebnisse Ziel war es, einen Algorithmus zu präsentieren der RNA-Faltungen mit Pseudoknoten vorhersagen kann. RNA-Faltungs Vorhersagen ohne Berücksichtigung von Pseudoknoten beinhalten schon einige Approximationen und Ungenauigkeiten, aufgrund von fehlendem Wissen in den Bereichen (z.b. Energiewerte von Multiloops oder Pseudoknoten). Da in dem beschriebenen Algorithmus der Konfigurationsspielraum deutlich größer ist, ist ein Anstieg der Ungenauigkeit warscheinlich. Diese Ungenauigkeiten schlagen besonders stark bei langen RNA Sequenzen zu Buche. Auf kürzeren RNA Sequenzen ist der Algorithmus allerdings erstaunlich genau wie die folgenden Ergebnisse zeigen. So falten sich die meisten trnas in eine sogen. Cloverleaf oder T-struktur. Von 24 getesteten trnas wurden 15 korrekt vorhergesagt. Bei den restlichen 9 wurden bei der Vorhersage 1 (= 6 Sequenzen) oder 2 (= 3 Sequenzen) der Helikalregionen falsch platziert. Als Vergleich: MFOLD hat von 19 getesteten trnas 14 korrekt vorhergesagt. Die Performanz der beiden Algorithmen ist also durchaus vergleichbar in diesem Sektor. HIV-1-RT-ligand RNA Pseudoknoten RNA Sequenzen die aus HIV-1 isoliert wurden, scheinen Pseudoknotenstrukturen aufzuweisen. Diese Oligonukleotide haben zwischen 34 und 47 Basen, und falten sich zu einem einfachen Pseudoknoten. Von 63 getesten RNA Sequenzen konnte der Algorithmus 54 korrekt vorhersagen. MFOLD konnte wie erwartet nur 1

korrektes Ergebniss vorhersagen. Virale RNAs Auch bei Testsequenzen aus dem Bereich der viralen RNAs war der Algorithmus erfreulich genau. So wurde ein bekannter Pseudoknoten im tabaco mosaic virus (TMV) erfolgreich berechnet. Auch bei Sequenzen aus der Gruppe der TYMV trna-ähnlicher Strukturen wurde der bekannte Pseudoknoten bei 6 von 7 Sequenzen erfolgreich vorhergesagt. 4. Diskussion Es wurde erfolgreich ein Algorithmus zur Vorhersage von RNA-Faltungen inclusive Pseudoknoten vorgestellt. Dieser Algorithmus arbeitet, wie MFOLD, mit Hilfe der Aussagen der Turner'schen thermodynamischen Gesetze. Durch diese thermodynamischen Grundsätze ist es möglich, das Problem in Polynomischer Komplexität zu lösen. Der Algorithmus wird mit Hilfe der elementaren sekundären Interaktionen der beteiligten Basen beschrieben, was im besonderen die IS sind. Dieses ist eine weiterführende Generalisierung der Ergebnisse, zu denen Sankoff 1985 kam. Die Berechnung einer optimalen Faltung würde eine Erhöhung des Grades der IS erfordern, was aufgrund der nicht mehr polynomischen Komplexität nicht sinnvoll wäre. Aus diesem Grund wurde der Grad der IS auf 0(2) beschränkt. Ein Beispiel für Zeit- und Speicher Aufwand: Eine RNA Sequenz mit 100 basen wurde von dem Algorithmus in über 4h Rechenzeit bewältigt. Dabei wurden 22,5 Mb Speicher benötigt. Die Berechnungen wurden auf einem SGI R10K Origin200 durchgeführt. Quellen: A Dynamic Programming Algorithm for RNA Structure Prediction Including Pseudoknots by Elena Rivas and Sean R. Eddy.