compomics-utilities: an open-source Java library for computational proteomics
© Barsnes et al; licensee BioMed Central Ltd. 2011
Received: 8 October 2010
Accepted: 8 March 2011
Published: 8 March 2011
The growing interest in the field of proteomics has increased the demand for software tools and applications that process and analyze the resulting data. And even though the purpose of these tools can vary significantly, they usually share a basic set of features, including the handling of protein and peptide sequences, the visualization of (and interaction with) spectra and chromatograms, and the parsing of results from various proteomics search engines. Developers typically spend considerable time and effort implementing these support structures, which detracts from working on the novel aspects of their tool.
In order to simplify the development of proteomics tools, we have implemented an open-source support library for computational proteomics, called compomics-utilities. The library contains a broad set of features required for reading, parsing, and analyzing proteomics data. compomics-utilities is already used by a long list of existing software, ensuring library stability and continued support and development.
As a user-friendly, well-documented and open-source library, compomics-utilities greatly simplifies the implementation of the basic features needed in most proteomics tools. Implemented in 100% Java, compomics-utilities is fully portable across platforms and architectures. Our library thus allows the developers to focus on the novel aspects of their tools, rather than on the basic functions, which can contribute substantially to faster development, and better tools for proteomics.
Proteomics has become an increasingly interesting field in the last decade, allowing the identification, quantification and characterization of proteins and peptides . With this increased interest comes an increasing demand for high-performance bioinformatics solutions that help address the various data processing and data interpretation challenges in the field. And while these tools can vary substantially in purpose, a basic set of features are common to most of them. These include the handling of (FASTA) sequence databases and the heterogeneous headers they employ, protein and peptide sequences, the visualization of (and user interaction with) mass spectra and chromatograms, the parsing of various proteomics search engine results, and the storage of all relevant information in relational database systems. Developers typically have to spend considerable time and effort on implementing these basic support structures, shifting their focus away from the novel aspects of their tool. In order to provide such basic functionality in ready-made form, several groups have developed and released code libraries that can be reused. In the field of proteomics, ProteomeCommons released a Java-based I/O framework  for reading and converting certain file formats, C++ users can make use of the OpenMS  or Proteowizard  libraries, while Perl users can make use of InSilicoSpectro .
Despite the availability of the above packages however, no reasonably comprehensive, fully cross-platform library exists for the widely popular Java platform. Indeed, the ProteomeCommons I/O framework is the only Java library, and that contains only file access code, and none of the basic processing or end-user oriented visualization that takes up a considerable amount of time in developing user-friendly software. We have therefore been working steadily for several years on a general-purpose, highly reliably Java library for our own wide-ranging collection of user-oriented tools, including ms_lims  and DBToolkit  for storing and interacting with protein identification data; icelogo  for visualizing protein consensus sequences; Peptizer  for automating manual validation of MS/MS search results; Rover  for visualizing and validating quantitative proteomics data; MascotDatfile , OMSSA Parser  and XTandem Parser  for parsing results from Mascot , OMSSA  and X!Tandem  result files, respectively; jmzML  for parsing and visualizing mzML files ; and Fragmentation Analyzer  for analyzing MS/MS fragmentation data. By consistently building on this key library, and reusing it throughout all our distributed development, we have ensured a uniform way of presenting key user-interface elements, while substantially cutting back on development time through the reuse of shared functionality. Furthermore, this broad reliance on a single core library implicitly allows any improvement or addition to the compomics-utilities library to be directly available to all the tools using the library.
Given that the compomics-utilities library is already used in numerous software projects, it provides a broad range of functionalities and has been extensively tested and documented over the past several years. The result is a highly robust and simple to use codebase, aimed at component-based development rather than simply providing an amalgamate of methods. The library is here made available to the bioinformatics community as a whole, allowing anyone interested to benefit from its various production-grade features.
Compomics-utilities has been developed in 100% pure Java, is completely platform independent and only requires Java 1.5 (or newer) to work. In addition to the library itself, several demonstration applications showing how the library can be used have also been implemented. The platform independent Java binaries, additional documentation, the full source code of both demos and the library itself, along with real-life example code snippets are freely available at http://compomics-utilities.googlecode.com compomics-utilities is released under the permissive Apache2 open source license (http://www.apache.org/licenses/LICENSE-2.0.html) allowing for broad reuse of the code in other settings, including commercial ones.
Results and Discussion
The compomics-utilities library contains a large amount of functionality, which is summarized in [Additional file 1]. Because it is impossible to describe in detail all functionality offered by compomics-utilities, we highlight three very different yet broadly applicable aspects of the library in the next sections: (i) interactive spectrum and chromatogram visualization; (ii) automatic generation of data access code; and (iii) the abstract modelling of typical proteomics (meta-)data and results. Together these examples illustrate how the compomics-utilities library can be used to support user interaction, back-end database development, and heterogeneous proteomics data handling. More comprehensive and detailed information on the various functionalities of compomics-utilities, along with short code examples and full source code, is available on the project web page (http://compomics-utilities.googlecode.com), where a cross-platform binary (including demos) can also be downloaded.
Spectrum and chromatogram visualization
Automatic generation of data access code
Since relational database access (for storage, update and retrieval) is a vital part of any type of user-oriented, high data volume application, compomics-utilities also comes with a highly robust code generator that automatically creates table-specific data access components in fully documented Java code. These generated components provide programmatic access to a single table in a relational database, wrapping the INSERT, UPDATE, SELECT and DELETE statements through the implementation of four key interfaces: Persistable, Updateable, Retrievable, and Deleteable. These four methods thus define the core behavior of the generated class and completely omit the use of SQL in the user's own code. The use of these four interfaces furthermore abstracts the actual nature of the data element or table being persisted, updated, accessed or deleted, allowing highly complex hierarchical structures to be stored in just a few (recursive) statements. This cuts back quite substantially on development time, while simultaneously providing a unified and highly robust way of handling data access from an application. This latter point is particularly relevant, since data access is a key part of such an application, and any bugs or errors introduced in this code will have wide-ranging repercussions. For this reason, the ms_lims data management system relies entirely on such generated components for all its communications with the back-end database. In order to generate code for an existing database table, it is sufficient to specify the database access credentials, the table name, and the desired output package for the generated class. The generator auto-detects all relevant table characteristics, including column types, (autogenerated) primary keys, and special auditing columns such as 'creationdate' and 'modificationdate'. The generated classes are transaction aware, and also handle peculiar column types like BLOB and CLOB transparently.
Abstract modelling of proteomics (meta-)data
This framework thus makes it possible to have abstract access to information from the major parts of a proteomics workflow, saving development time, ensuring compatibility between tools, and reducing the complexity of (typically error-prone) data processing.
By providing the basic building blocks of any proteomics informatics tool as a production-grade and permissively licensed open-source 100% pure Java API, the compomics-utilities library greatly simplifies the development of Java-based bioinformatics applications within the field of proteomics. Because compomics-utilities has been developed over several years, and is used in a large variety of production applications, it is thoroughly tested and reliable. Additionally, all code is well-documented and open-source, and is specifically engineered to be straightforward to incorporate into other projects. Finally, the fact that the library is already in active use in such a broad range of published software, helps ensure that the library will be both maintained as well as extended and expanded over time.
Availability and requirements
Project name: compomics-utilities
Project home page: http://compomics-utilities.googlecode.com
Operating system(s): Platform independent
Programming language: Java
Other requirements: Java 1.5 or newer
License: Apache License 2.0 (http://www.apache.org/licenses/LICENSE-2.0.html)
Any restrictions to use by non-academics: none
List of abbreviations
the Open Mass Spectrometry Search Algorithm
Tandem Mass Spectrometry
Structured Query Language
LM would like to thank Joël Vandekerckhove for his support. LM acknowledges the support of Ghent University (Multidisciplinary Research Partnership "Bioinformatics: from nucleotides to networks").
HB and FSB are partly supported by the National Program for Research in Functional Genomics (FUGE), funded by the Norwegian Research Council, and the Western Norway Regional Health Authority, and are also supported by a grant from the Meltzer foundation.
The financial support by the Ministerium für Innovation, Wissenschaft, Forschung und Technologie des Landes Nordrhein-Westfalen and by the Bundesministerium für Bildung und Forschung is gratefully acknowledged.
- Aebersold R, Mann M: Mass spectrometry-based proteomics. Nature 2003, 422: 198–207. 10.1038/nature01511View ArticlePubMedGoogle Scholar
- Falkner JA, Falkner JW, Andrews PC: ProteomeCommons.org IO Framework: reading and writing multiple proteomics data formats. Bioinformatics 2007, 23(2):262–3. 10.1093/bioinformatics/btl573View ArticlePubMedGoogle Scholar
- Sturm M, Bertsch A, Gröpl C, Hildebrandt A, Hussong R, Lange E, Pfeifer N, Schulz-Trieglaff O, Zerck A, Reinert KOK: OpenMS - an open-source software framework for mass spectrometry. BMC Bioinformatics 2008., 9(163):Google Scholar
- Kessner D, Chambers M, Burke R, Agus D, Mallick P: ProteoWizard: open source software for rapid proteomics tools development. Bioinformatics 2008, 24(21):2534–6. 10.1093/bioinformatics/btn323PubMed CentralView ArticlePubMedGoogle Scholar
- Colinge J, Masselot A, Carbonell P, Appel RD: InSilicoSpectro: an open-source proteomics library. J Proteome Res 2006, 5(3):619–24. 10.1021/pr0504236View ArticlePubMedGoogle Scholar
- Helsens K, Colaert N, Barsnes H, Muth T, Flikka K, Staes A, Timmerman E, Wortelkamp S, Sickmann A, Vandekerckhove J, Gevaert K, Martens L: ms_lims, a simple yet powerful open source LIMS for mass spectrometry-driven proteomics. Proteomics 2010, 10(6):1261–4. 10.1002/pmic.200900409View ArticlePubMedGoogle Scholar
- Martens L, Vandekerckhove J, Gevaert K: DBToolkit: processing protein databases for peptide-centric proteomics. Bioinformatics 2005, 21(17):3584–5. 10.1093/bioinformatics/bti588View ArticlePubMedGoogle Scholar
- Colaert N, Helsens K, Martens L, Vandekerckhove J, Gevaert K: Improved visualization of protein consensus sequences by iceLogo. Nat Methods 2009, 6(11):786–7. 10.1038/nmeth1109-786View ArticlePubMedGoogle Scholar
- Helsens K, Timmerman E, Vandekerckhove J, Gevaert K, Martens L: Peptizer, a tool for assessing false positive Peptide identifications and manually validating selected results. Mol Cell Proteomics 2008, 7(12):2364–72. 10.1074/mcp.M800082-MCP200View ArticlePubMedGoogle Scholar
- Colaert N, Helsens K, Impens F, Vandekerckhove J, Gevaert K: Rover: a tool to visualize and validate quantitative proteomics data from different sources. Proteomics 2010, 10(6):1226–9. 10.1002/pmic.200900379View ArticlePubMedGoogle Scholar
- Helsens K, Martens L, Vandekerckhove J, Gevaert K: MascotDatfile: An open-source library to fully parse and analyse MASCOT MS/MS search results. Proteomics 2007, 7: 364–366. 10.1002/pmic.200600682View ArticlePubMedGoogle Scholar
- Barsnes H, Huber S, Sickmann A, Eidhammer I, Martens L: OMSSA Parser: an open-source library to parse and extract data from OMSSA MS/MS search results. Proteomics 2009, 9(14):3772–4. 10.1002/pmic.200900037View ArticlePubMedGoogle Scholar
- Muth T, Vaudel M, Barsnes H, Martens L, Sickmann A: XTandem Parser: An open-source library to parse and analyse X!Tandem MS/MS search results. Proteomics 2010, 10(7):1522–4. 10.1002/pmic.200900759View ArticlePubMedGoogle Scholar
- Perkins DN, Pappin DJ, Creasy DM, Cottrell JS: Probability-based protein identification by searching sequence databases using mass spectrometry data. Electrophoresis 1999, 20(18):3551–67. 10.1002/(SICI)1522-2683(19991201)20:18<3551::AID-ELPS3551>3.0.CO;2-2View ArticlePubMedGoogle Scholar
- Geer LY, Markey SP, Kowalak JA, Wagner L, Xu M, Maynard DM, Yang X, Shi W, Bryant SH: Open mass spectrometry search algorithm. J Proteome Res 2004, 3(5):958–64. 10.1021/pr0499491View ArticlePubMedGoogle Scholar
- Fenyo D, Beavis RC: A method for assessing the statistical significance of mass spectrometry-based protein identifications using general scoring schemes. Anal Chem 2003, 75(4):768–74. 10.1021/ac0258709View ArticlePubMedGoogle Scholar
- Côté RG, Reisinger F, Martens L: jmzML, an open-source Java API for mzML, the PSI standard for MS data. Proteomics 2010, 10(7):1332–5.View ArticlePubMedGoogle Scholar
- Martens L, Chambers M, Sturm M, Kessner D, Levander F, Shofstahl J, Tang WH, Rompp A, Neumann S, Pizarro AD, Montecchi-Palazzi L, Tasman N, Coleman M, Reisinger F, Souda P, Hermjakob H, Binz PA, Deutsch EW: mzML - a Community Standard for Mass Spectrometry Data. Mol Cell Proteomics 2010, in press.Google Scholar
- Barsnes H, Eidhammer I, Martens L: FragmentationAnalyzer: An open-source tool to analyze MS/MS fragmentation data. Proteomics 2010, 10(5):1087–90.PubMedGoogle Scholar
This article is published under license to BioMed Central Ltd. This is an Open Access article distributed under the terms of the Creative Commons Attribution License (http://creativecommons.org/licenses/by/2.0), which permits unrestricted use, distribution, and reproduction in any medium, provided the original work is properly cited.