Master 2 BBSG POO, langage Java Laurent Tichit Biojava est une API open-source Java permettant de manipuler des objets couramment utilisés en bioinformatique1. Il existe deux tutoriels en anglais2 et un autre en français3. L'API Biojava est en perpétuelle évolution. Sur vos machines, deux versions sont actuellement installées : la 1.7.1 (appelée legacy) et la 3.0.4. Biojava 1.7 nécessite l'installation de Java 5 au minimum. Biojava 3.0 nécessite quant à elle Java 6. Attention: Les librairies BioJava 1.7 et BioJava 3.0 sont architecturées différemment. Chacune possède sa propre documentation et son propre tutoriel. Pour ce TP vous aurez besoin de vous servir de façon extensive de l'API Java et de celles de BioJava4 !! Compilation: Pour compiler avec un package externe, il vous faut modifier le CLASSPATH (i.e. indiquer au compilateur d'utiliser, en plus de l'API Java, l'API Biojava). Pour cela : javac -cp /usr/share/java/biojava.jar MaClasse.java Exécution: Pour exécuter, il vous faudra ici aussi modifier le CLASSPATH (i.e. indiquer à la machine virtuelle Java le chemin vers les classes Biojava ainsi que vers les vôtres). Pour cela : java -cp /usr/share/java/biojava.jar:. MaClasse Dans les exercices suivants, nous travaillons sur les exemples des CookBooks. 1 Récupérer une séquence du NCBI Cet exercice permet de récupérer une séquence sur le site du NCBI 1. Récupérez le code du NCBIFileReader5 2. Compilez, exécutez. Nous devrions obtenir peu ou prou un fichier au format FASTA. Au passage, notez l'utilisation des classes RichSequence et SymbolList. 3. Pour regarder ce que l'on reçoit, nous allons passer en revue ce que contient notre RichSequence. Affichez l'identifiant (getURN()), le Taxon(getTaxon()), l'ensemble des annotations (getRichAnnotation()), les features (getFeatureSet())6. 2 Gene Ontology Le but de cet exercice est de manipuler le parser OBO pour afficher des données de Gene Ontology. En science de l'information, une ontologie est un vocabulaire contrôlé et hiérarchisé. Une ontologie peut donc être facilement représentée sous forme de graphe 7. Le format OBO (Open Biological and Biomedical Ontologies) est le format le plus utilisé en biologie. D'un point de vue plus général, l'ontologie est la branche de la philosophie s'intéressant à l'être, c'est-à-dire l'étude des propriétés générales de ce qui existe. L'acception informatique en découle directement. 1. Récupérez l'ontologie full de Gene Ontology au format OBO 1.2. Regardez-là. La commande Unix head -n 40 monFichier permet d'afficher les 40 premières lignes d'un fichier trop gros (pour les dernières lignes c'est la commande tail). Vous noterez que beaucoup de termes 1 2 3 4 5 6 7 Pour plus d'informations, voir le site web : http://biojava.org http://www.biojava.org/wiki/BioJava:CookBookLegacy et http://www.biojava.org/wiki/BioJava:CookBook http://www.biojava.org/wiki/BioJava:CookbookFrench http://www.biojava.org/docs/api1.8.4/ et http://www.biojava.org/docs/api/index.html http://www.biojava.org/wiki/BioJava:CookBook:ExternalSources:NCBIFetch http://biojava.org/wiki/BioJava:Tutorial:Sequences_and_Features voici une vue partielle de Gene Ontology : http://www.geneontology.org/images/diag-immunology-sm.png sont liés les uns aux autres par des relations de spécialisation (is_a) mais qu'il en existe d'autres. 2. Étudiez le code du parser OBO8. À noter : - on se sert de args[0], - on se sert d'un itérateur sur l'ensemble des termes du fichier. Un itérateur est, comme son nom l'indique, un objet qui va itérer une collection (i.e. passer en revue chaque élément de celle-ci). La méthode hasNext() retourne True tant qu'il reste des éléments à parcourir. La méthode next() retourne l'élément en cours et passe au suivant. 3. Récupérez et compilez le code du parser (vous aurez besoin de le modifier quelque peu). 4. Testez le code du parser. 5. Nous aimerions pouvoir créer un graphe de l'ontologie pour pouvoir effectuer des calculs dessus, afficher le graphe qui la représente, etc. Au passage, nous allons explorer la documentation de l'interface Ontology. Le code n'accède qu'aux termes de l'ontologie (getTerms()), pas au reste. Affichez les autres informations de l'ontologie données par getDescription(), getName() et getTriples() représentant le type de relation entre deux termes de l'ontologie. GetTriples() peut sembler étrange : cette méthode (voir doc) permet d'accéder à la structure du graphe et retourne une liste de triplets qui représentent chacun un sommet de départ (le sujet), un sommet d'arrivée (l'objet), et l'arc qui les relie (le prédicat). 6. Vous rendez-vous compte du problème ? Heureusement que les développeurs ont corrigé le problème dans la version 1.8. Récupérez la version 1.8.4 de biojava.jar sur le site et exécutez à nouveau votre code en vous servant de celle-ci. 7. Modifiez le code pour lister tous les types de relation existant dans Gene Ontology. 8. Maintenant que nous nous servons de la version 1.8.4, étudions le code de OBO2Graphviz 9. GraphViz est un outil de dessin de graphe. Cette classe produit un fichier d'entrée pour le logiciel Graphviz. On va donc produire une belle image de notre ontologie préférée. À noter : - on se sert de args[3]. Vous pouvez simplifier le code pour ne passer que 2 arguments : le nom du fichier et la racine du sous-arbre que vous voulez dessiner. La racine doit être une chaîne de la forme GO:00XXXXX. - les méthodes des chaînes split(), replace() et trim() ont le même rôle que leur équivalent Perl ou Python. - on note au passage le hack peu élégant faisant intervenir le caractère 'ä' (umlaut a). 9. Compilez et exécutez. Sous Unix, pour que la sortie de votre programme aille directement dans un fichier : monProgramme > monFichier. Ici, on fera donc : java -cp biojava.jar:. OBO2GraphViz GO:0000003 > reproduction.dot 10. Regardez le contenu du fichier .dot obtenu. C'est l'un des nombreux formats de graphe existants. 11. Créez une image grâce à Graphviz : dot -Tpng reproduction.dot > reproduction.png Graphviz possède énormément de possibilités10, 12. Affichez-la : eog reproduction.png & 13. Modifiez le code pour créer un graphe par type de relation existant et éliminer les éventuel termes obsolètes. 3 RichSequence.IOTools • • 8 9 10 11 12 Regardez la documentation de la classe Biojava org.biojavax.bio.seq.RichSequence.IOTools. Cette classe permet de créer des parsers pour différents formats de fichiers utilisés en bio-informatique, ainsi que des méthodes permettant de créer des documents dans ce format. A l'aide de cette documentation, ainsi que des deux exemples du tutoriel 11,12, créez deux exemples permettant de traduire d'un format de fichier en un autre. Pour cette question, vous rendrez les codes source Java ainsi que les deux formats de fichier d'entrée. Bien entendu, utilisez 4 formats différents. http://www.biojava.org/wiki/BioJava:CookBook:OBO:parse http://www.biojava.org/wiki/BioJava:CookBook:OBO:visualize pour plus d'informations : http://graphviz.org/ http://biojava.org/wiki/BioJava:Cookbook:SeqIO:ReadGESBiojavax http://biojava.org/wiki/BioJava:Cookbook:SeqIO:GBtoFasta