## ----style, echo = FALSE, results = 'asis', message=FALSE---------------------
BiocStyle::markdown()

## ----setup, message = FALSE, echo = FALSE-------------------------------------
library("PSMatch")
library("Spectra")

## ----load_data----------------------------------------------------------------
data("psmBoekweg")
data("spBoekweg")
psmBoekweg
spBoekweg

## ----merge--------------------------------------------------------------------
psmBoekweg$pkey <- paste0(
    basename(psmBoekweg$filename),
    sub("^.+scan=", "::", psmBoekweg$scannr)
)
spBoekweg$pkey <- paste0(
    basename(spBoekweg$dataOrigin),
    sub("^.+scan=", "::", spBoekweg$spectrumId)
)

sp <- joinSpectraData(spBoekweg, psmBoekweg, by.x = "pkey")
sp

## ----add_mods-----------------------------------------------------------------
seq_var <- psmVariables(psmBoekweg)[["peptide"]]
fdr_var <- psmVariables(psmBoekweg)[["fdr"]]

## In our case, carbamidomethylation is already present
sp[[seq_var]][!is.na(sp[[seq_var]])][30]

## There is no need to apply `PTMods::addFixedModifications()`:
## sp[["sequence"]] <- addFixedModifications(sp[[seq_var]])

## For converting the annotation style, use `PTMods::convertAnnotation()`
sp[["sequence"]] <- convertAnnotation(sp[[seq_var]], convertToStyle = "name")
sp[["sequence"]][!is.na(sp[["sequence"]])][30]

## ----subset_psms--------------------------------------------------------------
sp_psms <- sp[!is.na(sp[["sequence"]]) & sp$msLevel == 2L]

## ----checkAB------------------------------------------------------------------
ab <- checkABpresence(sp_psms[1:100])
table(ab)

## ----checkXY------------------------------------------------------------------
xy <- checkXYpresence(sp_psms[1:100])
table(xy)

## ----checkOverlap-------------------------------------------------------------
## Pre-compute label fragments once to reuse across checks
frags <- labelFragments(sp_psms[1:20], type = c("a", "b", "c", "x", "y", "z"))

overlap <- checkOverlap(sp_psms[1:20],
    peptideVariable = "sequence",
    fragments = frags,
    strippedSeq = PTMods::getCanonicalSequence(sp_psms[["sequence"]][1:20])
)

table(overlap)

## ----overlapPlot--------------------------------------------------------------
sp_psms[115]$sequence
checkOverlap(sp_psms[115])
plotSpectraPTM(sp_psms[115])

## ----checkShift---------------------------------------------------------------
shifts <- checkShiftConsistency(sp_psms[1:50])
## NA for unmodified sequences, numeric for modified ones
table(is.na(shifts))
summary(shifts[!is.na(shifts)])

## ----ex-checkShift------------------------------------------------------------
sp_psms[40]$sequence
checkShiftConsistency(sp_psms[40])
plotSpectraPTM(sp_psms[40])

## ----checkParentIon-----------------------------------------------------------
parent <- checkParentIonIntensity(sp_psms[1:50])
summary(parent)

## ----checkPurity--------------------------------------------------------------
checkPrecursorPurity(sp[1:6])

## ----validatePSM--------------------------------------------------------------
(res <- validatePSM(sp[1:40],
                    peptideVariable = seq_var,
                    fdr = fdr_var)
)

## ----merge_results, eval = FALSE----------------------------------------------
# ## Example: join with the PSM data.frame by spectrum ID
# psm_df <- as.data.frame(psmBoekweg)
# combined <- merge(psm_df, res,
#     by.x = "scannr", by.y = "spectrumId",
#     all.x = FALSE
# )

## ----si-----------------------------------------------------------------------
sessionInfo()

