--- title: "MS2 fragment ions" output: BiocStyle::html_document: toc_float: true vignette: > %\VignetteIndexEntry{MS2 fragment ions} %\VignetteEngine{knitr::rmarkdown} %\VignetteEncoding{UTF-8} %\VignettePackage{PSMatch} %\VignetteDepends{mzR,mzID,BiocStyle,msdata} --- ```{r style, echo = FALSE, results = 'asis', message=FALSE} BiocStyle::markdown() ``` **Package**: `r Biocpkg("PSMatch")`
**Authors**: `r packageDescription("PSMatch")[["Author"]] `
**Last modified:** `r file.info("Fragments.Rmd")$mtime`
**Compiled**: `r date()` ```{r setup, message = FALSE, echo = FALSE} library("PSMatch") ``` # Introduction This vignette is one among several illustrating how to use the `PSMatch` package, focusing on the calculation and visualisation of MS2 fragment ions. For a general overview of the package, see the `PSMatch` package manual page (`?PSMatch`) and references therein. To illustrate this vignette, we will import and merge raw and identification data from the `r Biocpkg("msdata")`. For details about this section, please visit the [Spectra](https://rformassspectrometry.github.io/Spectra/articles/Spectra.html) package webpage. Load the raw MS data: ```{r, message = FALSE} (spf <- msdata::proteomics(pattern = "2014", full.names = TRUE)) library(Spectra) sp <- Spectra(spf) ``` Load the identification data: ```{r} (idf <- msdata::ident(pattern = "2014", full.names = TRUE)) id <- PSM(idf) |> filterPSMs() id ``` Merge both: ```{r} sp <- joinSpectraData(sp, id, by.x = "spectrumId", by.y = "spectrumID") sp ``` In this example, we are going to focus the MS2 scan with index 1158 and its parent MS1 scan (index 1148, selected automatically with the [filterPrecursorScan()](https://rformassspectrometry.github.io/Spectra/reference/MsBackend.html) function). ```{r} sp1158 <- filterPrecursorScan(sp, 1158) ``` ```{r} plotSpectra(sp1158[1], xlim = c(400, 600)) abline(v = precursorMz(sp1158)[2], col = "red", lty = "dotted") ``` # Calculating fragment ions The MS2 scan was matched to the sequence `SCALITDGR`. ```{r} sp1158$sequence ``` The `calculateFragments()` simply takes a peptide sequence as input and returns a `data.frame` with the fragment sequences, M/Z, ion type, charge, position and the peptide sequence of the parent ion. ```{r} calculateFragments(sp1158$sequence[2]) ``` The function also allows to generate fragment sequences with fixed and/or variable modifications. By default, `fixed_modifications = c(C = 57.02146)` for carbamidomethylation of cysteine. With variable modifications, multiple sets of fragments are generated. The fragments can be traced to their parent ion by checking the `peptide` column. A fragment can have multiple modifications. ```{r} calculateFragments(sp1158$sequence[2], fixed_modifications = NULL, variable_modifications = c(C = 57.02146, T = 79.966)) ``` Additional parameters can limit the maximum number of allowed modifications, the type of ions produced or the charge applied. See `?calculateFragments` for more details on those. # Visualising fragment ions We can now visualise these fragments directly on the MS spectrum. Let's first visualise the spectrum as is: ```{r} plotSpectra(sp1158[2]) ``` `plotSpectraPTM()` allows a more in depth visualisation of a PSM by providing a delta mass plot of matched fragments and a direct visualisation of matched b- and y-ion fragment sequences. Labels are automatically applied based on the `sequence` defined in the `spectraVariables` with carbamidomethylation of cysteines set as default fixed modification. ```{r} dataOrigin(sp1158)[2] <- "TMT_Erwinia" ## Reduces the mzspec text plotSpectraPTM(sp1158[2], main = "Scan 1158 with carbamidomethylation") ``` More importantly, `plotSpectraPTM()` allows to visualise and compare the matches with different modifications. For instance, there is a better match when carbamidomethylation of cysteines is applied (as above) compared to no modifications at all. ```{r} plotSpectraPTM(sp1158[2], fixed_modifications = NULL, variable_modifications = NULL, main = "Scan 1158 without modifications") ``` As glycine has the same mass as carbamidomethylation, the b7 and b8 ions are overlapping in both spectra). Both plots can be created at once using the `variable_modifications` parameter. ```{r, fig.width = 8, fig.height = 8, out.width="1000px"} plotSpectraPTM(sp1158[2], fixed_modifications = NULL, variable_modifications = c(C = 57.02146), deltaMz = FALSE) ``` For more details on what `plotSpectraPTM()` can do, run `?plotSpectraPTM`. # Session information ```{r si} sessionInfo() ```