BioJava - BioJava

BioJava
BioJava-logo-full.png
Auteur(s) original(aux) Andreas Prlić
Développeur(s) Amr ALHOSSARY, Andreas Prlic, Dmytro Guzenko, Hannes Brandstätter-Müller, Thomas Down, Michael L Heuer, Peter Troshin, JianJiong Gao, Aleix Lafita, Peter Rose, Spencer Bliven
Première version 2002 ; il y a 19 ans ( 2002 )
Version stable
5.2.1 / 5 février 2019 ; il y a 2 ans ( 2019-02-05 )
Dépôt github .com / BioJava
Écrit en Java
Plate-forme Navigateur Web avec Java SE
Disponible en Anglais
Taper Bioinformatique
Licence Licence GPL 2.1 inférieure
Site Internet BioJava .org

BioJava est un projet logiciel open source dédié à fournir des outils Java pour traiter les données biologiques . BioJava est un ensemble de fonctions de bibliothèque écrites dans le langage de programmation Java pour la manipulation de séquences, de structures de protéines, d'analyseurs de fichiers, d' interopérabilité CORBA ( Common Object Request Broker Architecture ), de système d'annotation distribué (DAS), d'accès à AceDB , de programmation dynamique et de statistiques simples. routines. BioJava prend en charge une vaste gamme de données, allant des séquences d'ADN et de protéines au niveau des structures protéiques 3D. Les bibliothèques BioJava sont utiles pour automatiser de nombreuses tâches bioinformatiques quotidiennes et banales , telles que l'analyse d'un fichier de banque de données de protéines (PDB), l'interaction avec Jmol et bien d'autres. Cette interface de programmation d'applications (API) fournit divers analyseurs de fichiers, modèles de données et algorithmes pour faciliter le travail avec les formats de données standard et permet un développement et une analyse rapides des applications.

Les projets supplémentaires de BioJava incluent rcsb-sequenceviewer, biojava-http, biojava-spark et rcsb-viewers.

Caractéristiques

BioJava fournit des modules logiciels pour de nombreuses tâches typiques de la programmation bioinformatique. Ceux-ci inclus:

  • Accès nucléotidique et peptidique des données de séquence à partir de locaux et distants les bases de données
  • Transformer les formats des enregistrements de base de données/fichiers
  • Analyse et manipulation de la structure des protéines
  • Manipulation de séquences individuelles
  • Recherche de séquences similaires
  • Création et manipulation d' alignements de séquences

Histoire et éditions

Le projet BioJava est né du travail de Thomas Down et Matthew Pocock pour créer une API pour simplifier le développement d'outils bioinformatiques basés sur Java. BioJava est un projet open source actif qui a été développé sur plus de 12 ans et par plus de 60 développeurs. BioJava est l'un des nombreux projets Bio* conçus pour réduire la duplication de code. Des exemples de tels projets qui relèvent de Bio* en dehors de BioJava sont BioPython , BioPerl , BioRuby , EMBOSS etc.

En octobre 2012, le premier article sur BioJava a été publié. Ce document a détaillé les modules, les fonctionnalités et le but de BioJava.

En novembre 2018, Google Scholar comptait plus de 130 citations.

L'article le plus récent sur BioJava a été écrit en février 2017. Cet article a détaillé un nouvel outil nommé BioJava-ModFinder. Cet outil peut être utilisé pour l'identification et la cartographie ultérieure des modifications de protéines en 3D dans la banque de données protéiques ( PBD ). Le package a également été intégré à l' application Web RCSB PDB et a ajouté des annotations de modification de protéines au diagramme de séquence et à l'affichage de la structure. Plus de 30 000 structures avec des modifications de protéines ont été identifiées à l'aide de BioJava-ModFinder et peuvent être trouvées sur le site Web du RCSB PDB.

En 2008, la première note d'application de BioJava a été publiée. Il a été migré de son référentiel CVS d'origine vers le hub Git en avril 2013. Le projet a été déplacé vers un référentiel séparé, BioJava-legacy, et est toujours maintenu pour des modifications mineures et des corrections de bogues.

La version 3 est sortie en décembre 2010. Il s'agissait d'une mise à jour majeure des versions précédentes. Le but de cette version était de réécrire BioJava afin qu'il puisse être modularisé en petits composants réutilisables. Cela a permis aux développeurs de contribuer plus facilement et de réduire les dépendances. La nouvelle approche vue dans BioJava 3 a été calquée sur Apache Commons .

La version 4 est sortie en janvier 2015. Cette version a apporté de nombreuses nouvelles fonctionnalités et améliorations aux packages biojava-core, biojava-structure, biojava-structure-gui, biojava-phylo, ainsi que d'autres. BioJava 4.2.0 a été la première version disponible en utilisant Maven à partir de Maven Central.

La version 5 est sortie en mars 2018. Cela représente une étape importante pour le projet. BioJava 5.0.0 est la première version basée sur Java 8 qui introduit l'utilisation de fonctions lambda et d'appels d'API de streaming. Des changements majeurs ont également été apportés au module de structure biojava. De plus, les modèles de données précédents pour les structures macromoléculaires ont été adaptés pour représenter plus étroitement le modèle de données mmCIF . C'était la première sortie en plus de deux ans. Certaines des autres améliorations incluent des optimisations dans le module biojava-structure pour améliorer la détection de symétrie et une prise en charge supplémentaire des formats MMTF. Les autres améliorations générales incluent les mises à jour Javadoc, les versions de dépendances et tous les tests sont désormais Junit4. La version contient 1 170 commits de 19 contributeurs.

Modules

Au cours de la période 2014-2015, de grandes parties de la base de code d'origine ont été réécrites. BioJava 3 s'écarte clairement de la série de la version 1. Il se compose désormais de plusieurs modules indépendants construits à l'aide d'un outil d'automatisation appelé Apache Maven . Ces modules fournissent des outils de pointe pour la comparaison de la structure des protéines, les alignements de séquences par paires et multiples, le travail avec des séquences d'ADN et de protéines, l'analyse des propriétés des acides aminés, la détection de modifications de protéines, la prédiction de régions désordonnées dans les protéines et des analyseurs pour un fichier commun. formats utilisant un modèle de données biologiquement significatif. Le code d'origine a été déplacé dans un projet hérité BioJava distinct, qui est toujours disponible pour la compatibilité descendante.

BioJava 5 a introduit de nouvelles fonctionnalités dans deux modules, l'alignement biojava et la structure biojava.

Les sections suivantes décriront plusieurs des nouveaux modules et mettront en évidence certaines des nouvelles fonctionnalités incluses dans la dernière version de BioJava.

Mise en page du module BioJava 5.png

Module de base

Ce module fournit des classes Java pour modéliser des séquences d' acides aminés ou de nucléotides . Les cours ont été conçus de manière à ce que les noms soient familiers et aient un sens pour les biologistes et fournissent également une représentation concrète des étapes pour passer d'une séquence de gènes à une séquence de protéines pour les informaticiens et les programmeurs.

Un changement majeur entre le projet BioJava hérité et BioJava3 réside dans la manière dont le framework a été conçu pour exploiter les nouvelles innovations de Java. Une séquence est définie comme une interface générique permettant au reste des modules de créer n'importe quel utilitaire qui opère sur toutes les séquences. Des classes spécifiques pour des séquences communes telles que l'ADN et les protéines ont été définies afin d'améliorer la convivialité pour les biologistes. Le moteur de traduction exploite vraiment ce travail en permettant des conversions entre les séquences d'ADN, d'ARN et d'acides aminés. Ce moteur peut gérer des détails tels que le choix de la table de codons, la conversion des codons de départ en méthionine, la suppression des codons d'arrêt, la spécification du cadre de lecture et la gestion des séquences ambiguës.

Une attention particulière a été portée à la conception du stockage des séquences afin de minimiser les besoins en espace. Des modèles de conception spéciaux tels que le modèle Proxy ont permis aux développeurs de créer le cadre de telle sorte que les séquences puissent être stockées en mémoire, récupérées à la demande à partir d'un service Web tel qu'UniProt ou lues à partir d'un fichier FASTA selon les besoins. Les deux dernières approches économisent de la mémoire en ne chargeant pas les données de séquence tant qu'elles ne sont pas référencées dans l'application. Ce concept peut être étendu pour gérer de très grands ensembles de données génomiques, tels que NCBI GenBank ou une base de données propriétaire.

Modules de structure protéique

Cette fenêtre montre deux protéines avec les ID "4hhb.A" et "4hhb.B" alignées l'une contre l'autre. Le code est donné sur le côté gauche. Ceci est produit à l'aide des bibliothèques BioJava qui utilisent à leur tour la visionneuse Jmol. L'algorithme rigide FATCAT est utilisé ici pour effectuer l'alignement.

Les modules de structure protéique fournissent des outils pour représenter et manipuler des structures biomoléculaires 3D. Ils se concentrent sur la comparaison de la structure des protéines.

Les algorithmes suivants ont été implémentés et inclus dans BioJava.

  • Algorithme FATCAT pour un alignement flexible et rigide du corps.
  • L'algorithme d'extension combinatoire (CE) standard.
  • Une nouvelle version de CE qui peut détecter les permutations circulaires dans les protéines.

Ces algorithmes sont utilisés pour fournir l'outil de comparaison des protéines de la banque de données de protéines RCSB (PDB) ainsi que des comparaisons systématiques de toutes les protéines de la PDB sur une base hebdomadaire.

Les analyseurs pour les formats de fichiers PDB et mmCIF permettent le chargement de données de structure dans un modèle de données réutilisable. Cette fonctionnalité est utilisée par le projet SIFTS pour établir une correspondance entre les séquences UniProt et les structures PDB. Les informations du RCSB PDB peuvent être récupérées dynamiquement sans qu'il soit nécessaire de télécharger manuellement les données. Pour la visualisation, une interface vers la visionneuse 3D Jmol est fournie.

Modules Génome et Séquençage

Ce module est axé sur la création d'objets de séquence de gènes à partir du module de base. Ceci est réalisé en prenant en charge l'analyse des formats de fichiers standard populaires suivants générés par les applications open source de prédiction de gènes :

  • Fichiers GTF générés par GeneMark
  • Fichiers GFF2 générés par GeneID
  • Fichiers GFF3 générés par Glimmer

Ensuite, les objets de séquence de gènes sont écrits au format GFF3 et importés dans GMOD. Ces formats de fichiers sont bien définis, mais ce qui est écrit dans le fichier est très flexible.

Pour fournir un support d'entrée-sortie pour plusieurs variantes courantes du format de fichier FASTQ des séquenceurs de prochaine génération, un module de séquençage séparé est fourni. Pour des exemples d'utilisation de ce module, veuillez consulter ce lien .

Module d'alignement

Ce module contient plusieurs classes et méthodes qui permettent aux utilisateurs d'effectuer un alignement de séquences par paires et multiples. Les séquences peuvent être alignées à la fois de manière simple et multithread. BioJava implémente l' algorithme Needleman-Wunsch pour des alignements globaux optimaux et l' algorithme de Smith et Waterman pour les alignements locaux. Les sorties des alignements locaux et globaux sont disponibles dans des formats standard. En plus de ces deux algorithmes, il existe une implémentation de l'algorithme de Guan-Uberbacher qui effectue très efficacement l'alignement global des séquences car il n'utilise que la mémoire linéaire.

Pour l' alignement de séquences multiples , n'importe laquelle des méthodes décrites ci-dessus peut être utilisée pour effectuer progressivement un alignement de séquences multiples.

Module de recherche de mod

Un exemple d'application utilisant le module ModFinder et le module de structure des protéines. Les modifications protéiques sont cartographiées sur la séquence et la structure de la ferredoxine I (PDB ID 1GAO). Deux amas fer-soufre possibles sont indiqués sur la séquence protéique (3Fe–4S (F3S) : triangles/lignes oranges ; 4Fe–4S (SF4) : losanges/lignes violets). Le cluster 4Fe-4S est affiché dans la fenêtre de structure Jmol au-dessus de l'affichage de la séquence

Le module ModFinder fournit de nouvelles méthodes pour identifier et classer les modifications des protéines dans les structures 3D des protéines. Plus de 400 types différents de modifications de protéines telles que la phosphorylation , la glycosylation , la chélation des liaisons disulfure , etc. ont été collectés et organisés sur la base d'annotations dans PSI-MOD, RESID et RCSB PDB. Le module fournit également une API pour détecter les modifications pré-, co- et post-traductionnelles des protéines au sein des structures protéiques. Ce module peut également identifier la phosphorylation et imprimer toutes les modifications pré-chargées d'une structure.

Module des propriétés des acides aminés

Ce module tente de fournir des propriétés physico-chimiques précises des protéines. Les propriétés qui peuvent être calculées à l'aide de ce module sont les suivantes :

Les poids moléculaires précis des acides aminés courants marqués par des isotopes sont inclus dans ce module. Il existe également une flexibilité pour définir de nouvelles molécules d'acides aminés avec leurs poids moléculaires en utilisant de simples fichiers de configuration XML . Cela peut être utile lorsque la masse précise est d'une grande importance, comme les expériences de spectrométrie de masse .

Module sur les troubles protéiques

L'objectif de ce module est de fournir aux utilisateurs des moyens de trouver des troubles dans les molécules de protéines. BioJava inclut une implémentation Java du prédicteur RONN . Le BioJava 3.0.5 utilise la prise en charge de Java pour le multithreading pour améliorer les performances jusqu'à 3,2 fois, sur une machine quadricœur moderne, par rapport à l'implémentation C héritée.

Il y a deux façons d'utiliser ce module :

  • Utilisation des appels de fonction de bibliothèque
  • Utilisation de la ligne de commande

Certaines fonctionnalités de ce module incluent :

  • Calcul de la probabilité de désordre pour chaque résidu dans une séquence
  • Calcul de la probabilité de désordre pour chaque résidu de la séquence pour toutes les protéines à partir d'un fichier d'entrée FASTA
  • Obtenez les régions désordonnées de la protéine pour une seule séquence protéique ou pour toutes les protéines à partir d'un fichier d'entrée FASTA

Module d'accès aux services Web

Conformément aux tendances actuelles de la bioinformatique, les outils Web gagnent en popularité. Le module de service Web permet d'accéder à des services de bioinformatique à l'aide de protocoles REST . Actuellement, deux services sont implémentés : NCBI Blast via Blast URLAPI (anciennement appelé QBlast) et le service Web HMMER.

Comparaisons avec d'autres alternatives

Le besoin de logiciels personnalisés dans le domaine de la bioinformatique a été abordé par plusieurs groupes et individus. Semblable à BioJava, les projets de logiciels open source tels que BioPerl , BioPython et BioRuby fournissent tous des kits d'outils avec de multiples fonctionnalités qui facilitent la création de pipelines ou d'analyses personnalisés.

Comme leurs noms l'indiquent, les projets mentionnés ci-dessus utilisent différents langages de programmation. Toutes ces API proposent des outils similaires alors sur quels critères fonder son choix ? Pour les programmeurs expérimentés dans un seul de ces langages, le choix est simple. Cependant, pour un bioinformaticien expérimenté qui connaît tous ces langages et souhaite choisir le meilleur langage pour un travail, le choix peut être fait sur la base des directives suivantes données par une revue de logiciel effectuée sur les kits d'outils Bio*.

En général, pour les petits programmes (<500 lignes) qui ne seront utilisés que par un individu ou un petit groupe, il est difficile de battre Perl et BioPerl . Ces contraintes couvrent probablement les besoins de 90 pour cent de la programmation bioinformatique personnelle.

Pour les débutants et pour écrire des programmes plus volumineux dans le domaine Bio, en particulier ceux qui doivent être partagés et pris en charge par d'autres, la clarté et la brièveté de Python le rendent très attrayant.

Pour ceux qui pourraient se tourner vers une carrière en bioinformatique et qui souhaitent apprendre un seul langage, Java a le support de programmation général le plus large, un très bon support dans le domaine Bio avec BioJava, et est maintenant le langage de facto des affaires (le nouveau COBOL, pour le meilleur ou pour le pire).

Outre ces projets Bio*, il existe un autre projet appelé STRAP qui utilise Java et vise des objectifs similaires. La boîte à outils STRAP, similaire à BioJava, est également une boîte à outils Java pour la conception de programmes et de scripts bioinformatiques. Les similitudes et les différences entre BioJava et STRAP sont les suivantes :

Similitudes

  • Les deux fournissent des collections complètes de méthodes pour les séquences de protéines.
  • Les deux sont utilisés par les programmeurs Java pour coder des algorithmes bioinformatiques.
  • Les deux implémentations et définitions distinctes à l'aide d'interfaces Java.
  • Les deux sont des projets open source.
  • Les deux peuvent lire et écrire de nombreux formats de fichiers de séquence.

Différences

  • BioJava est applicable aux séquences nucléotidiques et peptidiques et peut être appliqué à des génomes entiers. STRAP ne peut pas gérer des séquences simples aussi longtemps qu'un chromosome entier. Au lieu de cela, STRAP manipule des séquences peptidiques et des structures 3D de la taille de protéines individuelles. Néanmoins, il peut contenir un grand nombre de séquences et de structures en mémoire. STRAP est conçu pour les séquences protéiques mais peut lire les fichiers de nucléotides codants, qui sont ensuite traduits en séquences peptidiques.
  • STRAP est très rapide car l'interface utilisateur graphique doit être très réactive. BioJava est utilisé là où la vitesse est moins critique.
  • BioJava est bien conçu en termes de sécurité de type, d'ontologie et de conception d'objets. BioJava utilise des objets pour les séquences, les annotations et les positions de séquence. Même les acides aminés ou les nucléotides simples sont des références d'objet. Pour améliorer la vitesse, STRAP évite les instanciations d'objets fréquentes et l'invocation de méthodes d'objet non finales.
    • Dans BioJava, les séquences peptidiques et les séquences nucléotidiques sont des listes de symboles. Les symboles peuvent être récupérés les uns après les autres avec un itérateur ou des sous-séquences peuvent être obtenues. Les avantages sont que la séquence entière ne réside pas nécessairement dans la mémoire et que les programmes sont moins sujets aux erreurs de programmation. Les objets symboles sont des éléments immuables d'un alphabet. Dans STRAP, cependant, des tableaux d'octets simples sont utilisés pour les séquences et des tableaux flottants pour les coordonnées. Outre la vitesse, la faible consommation de mémoire est un avantage important des types de données de base. Les classes dans Strap exposent des données internes. Par conséquent, les programmeurs peuvent commettre des erreurs de programmation telles que la manipulation de tableaux d'octets directement au lieu d'utiliser les méthodes setter. Un autre inconvénient est qu'aucune vérification n'est effectuée dans STRAP si les caractères des séquences sont valides par rapport à un alphabet sous-jacent.
    • Dans les séquences BioJava, les positions sont réalisées par la classe Location . Discontinus Lieu objets sont composés de plusieurs contigus RangeLocation objets ou PointLocation objets. Cependant, pour la classe StrapProtein , les positions de résidus uniques sont indiquées par des nombres entiers compris entre 0 et countResidues()-1 . Les positions multiples sont données par des tableaux booléens. Vrai à un indice donné signifie sélectionné alors que faux signifie non sélectionné.
  • BioJava lève des exceptions lorsque des méthodes sont invoquées avec des paramètres invalides. STRAP évite la création fastidieuse d'objets jetables. Au lieu de cela, les erreurs dans les méthodes sont indiquées par les valeurs de retour NaN, -1 ou null. Du point de vue de la conception du programme, les objets jetables sont cependant plus agréables.
  • Dans BioJava, un objet Séquence est soit une séquence peptidique, soit une séquence nucléotidique. Une StrapProtein peut contenir les deux en même temps si une séquence nucléotidique codante a été lue et traduite en protéine. La séquence nucléotidique et la séquence peptidique sont toutes deux contenues dans le même objet StrapProtein. Les régions codantes ou non codantes peuvent être modifiées et la séquence peptidique est modifiée en conséquence.

Projets utilisant BioJava

Les projets suivants utilisent BioJava.

  • Metabolic Pathway Builder : Suite logicielle dédiée à l'exploration des connexions entre les gènes, les protéines, les réactions et les voies métaboliques
  • DengueInfo : un portail d'informations sur le génome de la Dengue qui utilise BioJava dans le middleware et communique avec une base de données biosql.
  • Dazzle : Un serveur DAS basé sur BioJava.
  • BioSense : Un plug-in pour la suite InforSense, une plate-forme logicielle d'analyse d'IDBS qui unit BioJava.
  • Bioclipse : Un plan de travail gratuit et open source pour la chimio et la bioinformatique avec de puissantes capacités d'édition et de visualisation pour les molécules, les séquences, les protéines, les spectres, etc.
  • PROMPT : Un framework et une application open source gratuits pour la comparaison et la cartographie d'ensembles de protéines. Utilise BioJava pour gérer la plupart des formats de données d'entrée.
  • Cytoscape : Une plateforme logicielle open source de bioinformatique pour visualiser les réseaux d'interaction moléculaire.
  • BioWeka : Une application open source d'exploration de données biologiques.
  • Geneious : Une boîte à outils de biologie moléculaire.
  • MassSieve : Une application open source pour analyser les données de protéomique de masse.
  • STRAP : Un outil pour l'alignement de séquences multiples et l'alignement de structures à base de séquences.
  • Jstacs : Un framework Java pour l'analyse statistique et la classification de séquences biologiques
  • jLSTM : "Long Short-Term Memory" pour la classification des protéines
  • LaJolla : un outil d'alignement structurel open source pour l'ARN et les protéines utilisant une structure d'index pour un alignement rapide de milliers de structures ; comprend une interface de ligne de commande facile à utiliser.
  • GenBeans : Une plateforme client riche pour la bioinformatique principalement axée sur la biologie moléculaire et l'analyse de séquences.
  • JEnsembl : Une API Java compatible avec les versions des systèmes de données Ensembl.
  • MUSI : Un système intégré pour identifier la spécificité multiple à partir de très grands ensembles de données de peptides ou d'acides nucléiques.
  • Bioshell : Une bibliothèque utilitaire pour la bioinformatique structurelle

Voir également

Les références

Liens externes