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 Genexpression- Musters(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 C# Höhere Programmiersprache, PROMOT Höhere Programmiersprache, BioC#