Programmiersprachen in der Bioinformatik Bioinformatik • In der Biologie immer größere Datenmengen (z.B. Genome, Proteinsequenzen) • Sequenzanalyse, Strukturvorhersage • Informationen in Datenbanken abrufbar machen • Nur mit Hilfe von Computertechnik möglich • „Sinnvolle“ (schnell, relativ unkompliziert) Verwendung von Computern für individuelle Probleme nur durch individuelle Programme • Diese müssen eigens erstellt werden • (Unter Anderem) Aufgabe der Bioinformatiker • Mittels Programmiersprachen Übersicht Programmiersprachen in der Bioinformatik • Java, C/C++, Perl, Python und andere • Jede Sprache hat ihre eigenen Vorzüge und Nachteile. • Es gibt nicht DIE Programmiersprache. • Es werden wahrscheinlich immer verschiedene höhere Programmiersprachen koexistieren Verwandtschaft der Programmiersprachen Java • Grundlagen allen bekannt (Objektorientierung etc.) • Verwendung in der Bioinformatik – Bioinformatiker schreiben Programme für bestimmte Probleme/Aufgaben – Diese werden in der Regel von Biologen genutzt – Java bietet gute Möglichkeiten der GUI-Erstellung – So können auch Wissenschaftler ohne computertechnisches Wissen die Programme einfach nutzen Biojava • Open Source Projekt, Version 3.0 • Java Framework für die Verarbeitung biologischer Daten • Im Grunde Sammlung von wichtigen Methoden: z.B. Reader/Writer für geläufige Dateiformate (Fasta, PDB, etc.), Suchalgorithmen oder Sequenzalignments, Strukturalignments berechnen und vieles mehr • www.biojava.org (CookBook 3.0) Java basierte Programme in der Bioinformatik • TIGR MultiExperiment Viewer (MEV) – Vielzahl an Experimenten zur Analyse eines GenexpressionMusters(Open-Source) • WebMol – Analysiert Molekularstrukturinformationen – Verwendet Java3D zur Visualisierung und Manipulation von komplexen Proteinstrukturen. • Apollo – Ermöglicht die Visualisierung und manuelle Annotation und die Erstellung von möglichen Genstrukturen – Wurde verwendet für die Annotation des Fruchtfliegengenoms und Teilen des menschlichen Genoms verwendet C • Entstehung C: – Anfang der 1970er Jahre im Zusammenhang mit dem BS Unix bei AT&T Bell Laboratories: Dennis Ritchie – Unmittelbarer Vorgänger ist B (K. Thompson, 1970, ebenfalls bei Unix-Entwicklung) – Wird auch als Kreuzung von Assembler und Pascal bezeichnet: ähnlich strukturiertes Programmieren wie in Pascal, fast so maschinennah wie Assembler C – C ist "universell" einsetzbar - FORTRAN z.B. nur für wissenschaftlich-technische Berechnungen – Hat sich aufgrund seines eng begrenzten Sprachumfangs durchgesetzt. PL/I oder ALGOL68 dagegen nicht, weil zu komplex – Trotzdem sehr große Flexibilität – Das alles führt dazu, dass C im Grunde Spielraum besitzt für alles zwischen hochportablem Code und sehr maschinennahem, nicht portablem Code ("höherer Assembler") Beispielcode C C++ • Mitte der 1980er Jahre ebenfalls bei AT&T Bell Labs: B. Stroustrup. • Erweiterung von C um die Möglichkeit der objektorientierten Programmierung und einige Verbesserungen bezüglich des Sprachumfangs von C • C ist (nicht exakte) Teilmenge von C++ Bio++ • Ist eine C++ Bibliothek für Sequenzanalyse, Phylogenetik, Populationsgenetik und molekulare Evolution • http://biopp.univ-montp2.fr/ • Momentan Version 2.0.2 Beispielcode C++ Eigenschaften von C/C++ • Große Verbreitung • Gute Standardisierung (Sprache und Laufzeitsystem) Software relativ leicht portierbar • Programme sind laufzeiteffektiv • Compiler für alle relevanten Plattformen • Viele gute Programmiersysteme (Java: Eclipse, etc.; C/C++: Code::Blocks, C-Free, Eclipse, etc.) • CASE-Tool Unterstützung (Computer Aided Software Engineering) • Strukturiertes Programmieren ebenso möglich wie unstrukturiertes Python • Objektorientiert • Von Guido van Rossum entwickelt • Mehrere Programmierparadigmen unterstützt • Open source Anwender/Anwendungen • Google • Ubuntu • Bit Torrent • NASA: u.a. Mission Control Center Module • Große Standardbibliothek • Programm anderer Sprachen als Modul • Schnell und leicht eigene Module schreiben Syntax • • • • • Ziel: möglichst einfach und übersichtlich Keine Konstanten- und Variablendeklaration Einrückung als Blockbegrenzung Kein Semikolon Kein Datentyp BOOLEAN >>> len("GATTACA") 7 >>> "GAT" + "TACA" GATTACA' >>> "A" * 10 'AAAAAAAAAA' >>> "G" in "GATTACA" True >>> "GAT" in "GATTACA" True >>> "AGT" in "GATTACA" False >>> "GATTACA".find("ATT") 1 >>> "GATTACA".count("T") 2 >>> >>> "GATTACA".lower() 'gattaca' >>> "gattaca".upper() 'GATTACA' >>> "GATTACA".replace("G", "U") 'UATTACA' >>> "GATTACA".replace("C", "U") 'GATTAUA' >>> "GATTACA".replace("AT", "**") 'G**TACA' >>> "GATTACA".startswith("G") True >>> "GATTACA".startswith("g") False >>> >>> seq = raw_input("Enter a DNA sequence: ") Enter a DNA sequence: ATGTATTGCATATCGT >>> seq.count("A") 4 >>> print "There are", seq.count("T"), "thymines" There are 7 thymines >>> "ATA" in seq True >>> substr = raw_input("Enter a subsequence to find: ") Enter a subsequence to find: GCA >>> substr in seq True Biopython • Tools zu biologischen Berechnungen • Werkzeuge für Operationen auf Sequenzen • Schnittstellen für andere biologischen Module Perl • Practical Extraction and Report Language • Von Larry Wall 1987 entwickelt • Plattformunabhängige, interpretierende Programmiersprache • Mehrere Programmierparadigmen unterstützt • „glue“-language Prinzipien • Mehrere Wege – „There is more than one way to do it“ • Einfach und Möglich – „Perl makes easy jobs easy and hard jobs possible“ Syntax • Variablen – Skalare Datentypen: $zahl = 50; $zahl = 0,01; $zahl = 1e-2; $name = ‘Günther‘ Syntax – Arrays: @array = (1, 2, “drei“, $vier) – Hash-Tabellen werden mit % gekennzeichnet Wichtige Module • CGI: CGISchnittstelle für WebServer • LWP: Bibliothek für Internetzugriffe • MySQL: Schnittstell zu MySQLDatenbank Laufzeitvergleich Laufzeit für Algorithmus für globales Alignment Input: 2 Sequenzen: 3216bp und 3217bp Laufzeitvergleich Laufzeit für Neighbor-Joining Input: 76 DNA-Sequenzen Speicherbedarf Andere Programmiersprachen in der Bioinformatik • Ruby – Skriptsprache, BioRuby • FORTRAN – Höhere Programmiersprache, PROMOT • C# – Höhere Programmiersprache, BioC#