Skip to contents

Project Status: Active – The project has reached a stable, usable state and is being actively developed. R-CMD-check-bioc codecov license

SpectriPy_logo
SpectriPy_logo

The SpectriPy package allows integration of Python MS packages into a Spectra-based MS analysis in R. By wrapping Python functionality into R functions, SpectriPy allows a seamless integration of Python libraries into R. For example, SpectriPy can leverage the spectral similarity, filtering, normalization etc. calculations from the Python matchms library and contains functions to convert between R’s Spectra::Spectra objects and Python’s matchms.Spectrum and spectrum_utils.spectrum.MsmsSpectrum objects. R and Python spectral objects are easily translated and available in one workflow (i.e. a quarto document), enabling the advanced user or developer to create custom functions or workflows on Spectra objects in Python and executing them in R using the reticulate R package, and vice versa.

If you use SpectriPy in your research, please cite:

SpectriPy: Enhancing Cross-Language Mass Spectrometry Data Analysis with R and Python. IN PREPARATION.

Installation

Detailed information on the installation and configuration of SpectriPy, including guidelines for first time R users can be found under the “vignettes”.

TLDR:

  • Prerequisites: R >= 4.4.0.
  • System requirement: reticulate (i.e., setup Python environment if not already available)
#' R session:

install.packages("reticulate")
reticulate::install_miniconda()
  • Package requirements: Bioconductor’s BiocManager, remotes
#' R session:

if (!require("BiocManager", quietly = TRUE))
    install.packages("BiocManager")
BiocManager::install(version = "3.20")

install.packages("remotes")
  • Package: SpectriPy
#' R session:

BiocManager::install("RforMassSpectrometry/SpectriPy")

Documentation for users

See the extensive documentation for the use of SpectriPy:

TLDR:

Example: Spectra similarity calculations using matchms

The SpectriPy package provides the compareSpectriPy() function that allows to perform spectra similarity calculations using the scoring functions from MS Python packages. For example, the CosineGreedy parameter CosineGreedyParam from the matchms Python package.

  1. We create some simple example spectra.
#' R session:

library(Spectra)
library(SpectriPy)

#' Create a Spectra object with two MS2 spectra for Caffeine.
caf <- DataFrame(
    msLevel = c(2L, 2L),
    name = "Caffeine",
    precursorMz = c(195.0877, 195.0877)
)
caf$intensity <- list(
    c(340.0, 416, 2580, 412),
    c(388.0, 3270, 85, 54, 10111))
caf$mz <- list(
    c(135.0432, 138.0632, 163.0375, 195.0880),
    c(110.0710, 138.0655, 138.1057, 138.1742, 195.0864))
caf <- Spectra(caf)

#' Create a Spectra object with two MS2 spectra for 1-Methylhistidine
mhd <- DataFrame(
    msLevel = c(2L, 2L),
    precursorMz = c(170.0924, 170.0924),
    id = c("HMDB0000001", "HMDB0000001"),
    name = c("1-Methylhistidine", "1-Methylhistidine"))
mhd$mz <- list(
    c(109.2, 124.2, 124.5, 170.16, 170.52),
    c(83.1, 96.12, 97.14, 109.14, 124.08, 125.1, 170.16))
mhd$intensity <- list(
    c(3.407, 47.494, 3.094, 100.0, 13.240),
    c(6.685, 4.381, 3.022, 16.708, 100.0, 4.565, 40.643))
mhd <- Spectra(mhd)
  1. We calculate pairwise similarities between all spectra defined above and those of caffeine using Spectra’s built-in compareSpectra() function.
#' R session:

all <- c(caf, mhd)
res_r <- compareSpectra(all, caf)
res_r
  1. We calculate the similarity using the CosineGreedy function from matchms, changing the tolerance to a value of 0.05 (instead of the default 0.1).
#' R session:

res <- compareSpectriPy(all, caf, param = CosineGreedy(tolerance = 0.05))
res

As a result compareSpectriPy() returns also a numeric matrix of similarities. Note also that the first compareSpectriPy() call takes usually a little longer because the Python setup has to be initialized.

Documentation for developers

See the developer notes.

Contributions

Contributions are highly welcome and should follow the contribution guidelines. General information on the package structure and some helpful pointers are given in the developer notes document. Also, please check the coding style guidelines and importantly, follow our code of conduct.

License

See the DESCRIPTION and LICENSE file.