BioJava
From Wikipedia, the free encyclopedia
BioJava is an open-source software project dedicated to providing Java tools for processing biological data.[1][2][3] BioJava is a set of library functions written in the programming language Java for manipulating sequences, protein structures, file parsers, Common Object Request Broker Architecture (CORBA) interoperability, Distributed Annotation System (DAS), access to AceDB, dynamic programming, and simple statistical routines. BioJava supports a range of data, starting from DNA and protein sequences to the level of 3D protein structures. The BioJava libraries are useful for automating many daily and mundane bioinformatics tasks such as to parsing a Protein Data Bank (PDB) file, interacting with Jmol and many more.[4] This application programming interface (API) provides various file parsers, data models and algorithms to facilitate working with the standard data formats and enables rapid application development and analysis.
| BioJava | |
|---|---|
| Original author | Andreas Prlić |
| Developers | Amr ALHOSSARY, Andreas Prlic, Dmytro Guzenko, Hannes Brandstätter-Müller, Jose Manuel Duarte, Thomas Down, Michael L Heuer, Peter Troshin, JianJiong Gao, Aleix Lafita, Peter Rose, Spencer Bliven |
| Initial release | 2002 |
| Stable release | 6.0.3
/ December 19, 2021 |
| Written in | Java |
| Platform | Web browser with Java SE |
| Available in | English |
| Type | Bioinformatics |
| License | Lesser GPL 2.1 |
| Website | biojava |
| Repository | github |
Additional projects from BioJava include rcsb-sequenceviewer, biojava-http, biojava-spark, and rcsb-viewers.
Features
BioJava provides software modules for many of the typical tasks of bioinformatics programming. These include:
- Accessing nucleotide and peptide sequence data from local and remote databases
- Transforming formats of database/ file records
- Protein structure parsing and manipulation
- Manipulating individual sequences
- Searching for similar sequences
- Creating and manipulating sequence alignments
History and publications
The BioJava project grew out of work by Thomas Down and Matthew Pocock to create an API to simplify development of Java-based Bioinformatics tools. BioJava is an active open source project that has been developed over more than 12 years and by more than 60 developers. BioJava is one of a number of Bio* projects designed to reduce code duplication.[5] Examples of such projects that fall under Bio* apart from BioJava are BioPython,[6] BioPerl,[7] BioRuby,[8] EMBOSS[9] etc.
In October 2012, the first paper on BioJava was published.[10] This paper detailed BioJava's modules, functionalities, and purpose.
As of November 2018 Google Scholar counts more than 130 citations.[11]
The most recent paper on BioJava was written in February 2017.[12] This paper detailed a new tool named BioJava-ModFinder. This tool can be used for identification and subsequent mapping of protein modifications to 3D in the Protein Data Bank (PBD). The package was also integrated with the RCSB PDB web application and added protein modification annotations to the sequence diagram and structure display. More than 30,000 structures with protein modifications were identified by using BioJava-ModFinder and can be found on the RCSB PDB website.
In the year 2008, BioJava's first Application note was published.[2] It was migrated from its original CVS repository to GitHub in April 2013.[13] The project has been moved to a separate repository, BioJava-legacy, and is still maintained for minor changes and bug fixes.[14]
Version 3 was released in December 2010. It was a major update to the prior versions. The aim of this release was to rewrite BioJava so that it could be modularized into small, reusable components. This allowed developers to contribute more easily and reduced dependencies. The new approach seen in BioJava 3 was modeled after the Apache Commons.
Version 4 was released in January 2015. This version brought many new features and improvements to the packages biojava-core, biojava-structure, biojava-structure-gui, biojava-phylo, as well as others. BioJava 4.2.0 was the first release to be available using Maven from the Maven Central.
Version 5 was released in March 2018. This represents a major milestone for the project. BioJava 5.0.0 is the first released based on Java 8 which introduces the use of lambda functions and streaming API calls. There were also major changes to biojava-structure module. Also, the previous data models for macro-molecular structures have been adapted to more closely represent the mmCIF data model. This was the first release in over two years. Some of the other improvements include optimizations in the biojava-structure module to improve symmetry detection and added support for MMTF formats. Other general improvements include Javadoc updates, dependency versions, and all tests are now Junit4. The release contains 1,170 commits from 19 contributors.
Modules
During 2014-2015, large parts of the original code base were rewritten. BioJava 3 is a clear departure from the version 1 series. It now consists of several independent modules built using an automation tool called Apache Maven.[15] These modules provide state-of-the-art tools for protein structure comparison, pairwise and multiple sequence alignments, working with DNA and protein sequences, analysis of amino acid properties, detecting protein modifications, predicting disordered regions in proteins, and parsers for common file formats using a biologically meaningful data model. The original code has been moved into a separate BioJava legacy project, which is still available for backward compatibility.[16]
BioJava 5 introduced new features to two modules, biojava-alignment and biojava-structure.
The following sections will describe several of the new modules and highlight some of the new features that are included in the latest version of BioJava.

Core Module
This module provides Java classes to model amino acid or nucleotide sequences. The classes were designed so that the names are familiar and make sense to biologists and also provide a concrete representation of the steps in going from a gene sequence to a protein sequence for computer scientists and programmers.
A major change between the legacy BioJava project and BioJava3 lies in the way framework has been designed to exploit then-new innovations in Java. A sequence is defined as a generic interface allowing the rest of the modules to create any utility that operates on all sequences. Specific classes for common sequences such as DNA and proteins have been defined in order to improve usability for biologists. The translation engine really leverages this work by allowing conversions between DNA, RNA and amino acid sequences. This engine can handle details such as choosing the codon table, converting start codons to methionine, trimming stop codons, specifying the reading frame and handing ambiguous sequences.
Special attention has been paid to designing the storage of sequences to minimize space needs. Special design patterns such as the Proxy pattern allowed the developers to create the framework such that sequences can be stored in memory, fetched on demand from a web service such as UniProt, or read from a FASTA file as needed. The latter two approaches save memory by not loading sequence data until it is referenced in the application. This concept can be extended to handle very large genomic datasets, such as NCBI GenBank or a proprietary database.
Protein structure modules

The protein structure modules provide tools to represent and manipulate 3D biomolecular structures. They focus on protein structure comparison.
The following algorithms have been implemented and included in BioJava.
- FATCAT algorithm for flexible and rigid body alignment.[17]
- The standard Combinatorial Extension (CE) algorithm.[18]
- A new version of CE that can detect circular permutations in proteins.[19]
These algorithms are used to provide the RCSB Protein Data Bank (PDB)[20] Protein Comparison Tool as well as systematic comparisons of all proteins in the PDB on a weekly basis.[21]
Parsers for PDB[22] and mmCIF[23] file formats allow the loading of structure data into a reusable data model. This feature is used by the SIFTS project to map between UniProt sequences and PDB structures.[24] Information from the RCSB PDB can be dynamically fetched without the need to manually download data. For visualization, an interface to the 3D viewer Jmol is provided.[4]
Genome and Sequencing modules
This module is focused on the creation of gene sequence objects from the core module. This is realized by supporting the parsing of the following popular standard file formats generated by open source gene prediction applications:
- GTF files generated by GeneMark[25]
- GFF2 files generated by GeneID[26]
- GFF3 files generated by Glimmer[27]
Then the gene sequence objects are written out as a GFF3 format and is imported into GMOD.[28] These file formats are well defined but what gets written in the file is very flexible.
For providing input-output support for several common variants of the FASTQ file format from the next generation sequencers,[29] a separate sequencing module is provided. For samples on how to use this module please go to this link.
Alignment module
This module contains several classes and methods that allow users to perform pairwise and multiple sequence alignment. Sequences can be aligned in both a single and multi-threaded fashion. BioJava implements the Needleman-Wunsch[30] algorithm for optimal global alignments and the Smith and Waterman's[31] algorithm for local alignments. The outputs of both local and global alignments are available in standard formats. In addition to these two algorithms, there is an implementation of Guan–Uberbacher algorithm[32] which performs global sequence alignment very efficiently since it only uses linear memory.
For Multiple Sequence Alignment, any of the methods discussed above can be used to progressively perform a multiple sequence alignment.
ModFinder module

The ModFinder module provides new methods to identify and classify protein modifications in protein 3D structures. Over 400 different types of protein modifications such as phosphorylation, glycosylation, disulfide bonds metal chelation etc. were collected and curated based on annotations in PSI-MOD,[34] RESID[35] and RCSB PDB.[36] The module also provides an API for detecting pre-, co-, and post-translational protein modifications within protein structures. This module can also identify phosphorylation and print all pre-loaded modifications from a structure.
Amino acid properties module
This module attempts to provide accurate physio-chemical properties of proteins. The properties that can calculated using this module are as follows:
- Molecular mass
- Extinction coefficient
- Instability index
- Aliphatic index
- Grand average of hydropathy
- Isoelectric point
- Amino acid composition
The precise molecular weights for common isotopically labelled amino acids are included in this module. There also exists flexibility to define new amino acid molecules with their molecular weights using simple XML configuration files. This can be useful where the precise mass is of high importance such as mass spectrometry experiments.
Protein disorder module
The goal of this module is to provide users ways to find disorders in protein molecules. BioJava includes a Java implementation of the RONN predictor. The BioJava 3.0.5 makes use of Java's support for multithreading to improve performance by up to 3.2 times,[37] on a modern quad-core machine, as compared to the legacy C implementation.
There are two ways to use this module:
- Using library function calls
- Using command line
Some features of this module include:
- Calculating the probability of disorder for every residue in a sequence
- Calculating the probability of disorder for every residue in the sequence for all proteins from a FASTA input file
- Get the disordered regions of the protein for a single protein sequence or for all the proteins from a FASTA input file
Web service access module
As per the current trends in bioinformatics, web based tools are gaining popularity. The web service module allows bioinformatics services to be accessed using REST protocols. Currently, two services are implemented: NCBI Blast through the Blast URLAPI (previously known as QBlast) and the HMMER web service.[38]
Comparisons with other alternatives
The need for customized software in the field of bioinformatics has been addressed by several groups and individuals. Collectively referred to as Bio* tool-kits together with BioJava, open-source software projects such as BioPerl, BioPython, and BioRuby all provide tool-kits with multiple functionality that make it easier to create customized pipelines or analysis.[5]
Projects using BioJava
The following projects make use of BioJava.
- Metabolic Pathway Builder: Software suite dedicated to the exploration of connections among genes, proteins, reactions and metabolic pathways
- DengueInfo Archived 2006-12-08 at the Wayback Machine: a Dengue genome information portal that uses BioJava in the middleware and talks to a biosql database.
- Dazzle: A BioJava based DAS server.
- BioSense: A plug-in for the InforSense Suite, an analytics software platform by IDBS that unitizes BioJava.
- Bioclipse: A free, open source, workbench for chemo- and bioinformatics with powerful editing and visualizing abilities for molecules, sequences, proteins, spectra, etc.
- PROMPT: A free, open source framework and application for the comparison and mapping of protein sets. Uses BioJava for handling most input data formats.
- Cytoscape: An open source bioinformatics software platform to visualize molecular interaction networks.
- BioWeka: An open source biological data mining application.
- Geneious: A molecular biology toolkit.
- MassSieve: An open source application to analyze mass spec proteomics data.
- STRAP: A tool for multiple sequence alignment and sequence-based structure alignment.
- Jstacs: A Java framework for statistical analysis and classification of biological sequences
- jLSTM: "Long Short-Term Memory" for protein classification
- LaJolla: An open source structural alignment tool for RNA and proteins using an index structure for fast alignment of thousands of structures; includes an easy-to-use command line interface.
- GenBeans: A rich client platform for bioinformatics primarily focused on molecular biology and sequence analysis.
- JEnsembl: A version-aware Java API to Ensembl data systems.[39]
- MUSI: An integrated system to identify multiple specificity from very large peptide or nucleic acid data sets.[40]
- Bioshell: A utility library for structural bioinformatics[41]