Title
Rusteomics
Abstract
The proteomics community created some exceptional toolboxes over the past years, like OpenMS, Pyteomics or mzR. Most of these toolboxes implement general computational tasks, like reading and preprocessing data. However, most of them do not rely on a mutual code base or the same internal data representation, which makes interoperability only possible by using (PSI) standard formats. Reading/writing them without a common implementation may introduce another layer of errors.
The aim of Rusteomics is to build a collaborative community-driven toolbox, which provides read and write access to the most common file formats, as well as low-level and well established algorithms like (deisotoping, deconvolution, MS/MS spectra annotation, etc.).
While similar solutions exist in various programming languages, this project will be the opportunity to tailor these new components to be highly compatible with scientific (scripting) languages like Python / R. Moreover, the reimplementation in Rust should bring some major benefits: The modern compiler and building system makes Rust-based projects easier to maintain than C++-based projects, while providing the same performance.
During this hackathon, we will refine the goals/organization of the project, and start the development of a tool that can be used to generate spectral libraries (MSP format writer).
Project Plan
- Define goals of the project and establish short- & long-term goals - 0.25 day
- Define the project organization (coding rules, licensing, ...) - 0.25 day
- Implementation of an MGF writer (1 day)
- Implement and MSP-writer by extending the MGF writer to add spectra annotations, the annotation functionality will be provided by David Bouyssié. The MSP-writer is a current community demand and will help the development of new search engines. (1 day)
- Investigate mzIdent (.mzid) to MSP
Technical Details
The base implementation of Rusteomics will be written in Rust, while the language bindings may relay on the targeted language.
mzio
-crate
reader
- && writer
-module
Contains reader and writer classes for proteomic specific files. The readers
-module should contain a sub-module called vendor
which contains read support for vendor formats like the Mascot .dat
-format. It may be necessary to add write capabilities for some vendor formats to exchange data with these related tools.
entities
- or models
-module
Contains internal representation of different data types, e.g. a spectrum or a amino acid sequence. Defining this representation is a crucial task to be able to handle mandatory and optional data for each supported format.
These data structures are created by the use of io.reader.*
and should be used to create files with io.writer.*
.
mzcore
-crate
chemistry
-module
Here, some constants and functionality are implemented to deal with molecules, e.g. amino acids representation (name, mass, one letter code, chemical representation etc.), losses, maybe atom representation, etc.
function
- or algorithms
-module
This module will contain all processing and analytic functions used in proteomicsprotomics:
- sequence digestion
- decoy generation
- deisotoping
- false discovery rate calculation
- ...
Additional crates
In addition to the proteomics related crates, researchers of other omic-fields (Transcriptomics, Metabolomics, ...) are welcome to contribute crates of their own to make Rusteomics truly usable for 'multi-omics' studies.
Language bindings
Each crate repository will contain several sub folders, each containing a specific language binding, e.g. for mzcore
mzcore
|- mzcore-rs (the rust implementation)
|- mzcore-r (R-binding)
|- mzcore-python (Python-binding)
|- ...
R-bindings
Most popular languages for statistical analyses. based on rextendr
Python-bindings
Offers support for multiple famous toolkits for Deep Learning (Keras, PyTorch), Machine Learning (scikit), data handling (Pandas, Numpy) and web development (Django, Flask). based on pyo3
CPP-bindings
Still one of the fastest languages used in different proteomic-software, e.g. OpenMS. based on rust-bindgen
OR rust-diplomat https://github.com/rust-diplomat/diplomat/
Java-bindings
Java interoperability will give the opportunity to be compatible with several programming languages running on the JVM (Groovy, Clojure, Jython, Kotlin, Scala). based on JNI, JNR or the new Foreign-Memory Access API
C#-bindings
One of the main languages for Microsoft based systems and used in many projects, also in vendor software, Rusteomics may benefit from C# bindings as well. Bindings can be created by DNNE or netcorehost
Contact Information
- Dirk Winkelhardt, Ruhr-University Bochum, Medical Faculty, Medical Proteome Center & Proteoin Diagnostic Center (PRODI), [email protected]
- Dominik Lux, Ruhr-University Bochum, Medical Faculty, Medical Proteome Center & Proteoin Diagnostic Center (PRODI), [email protected]
- David Bouyssié, IPBS, CNRS, University of Toulouse, UPS, Toulouse, France. [email protected]