## ----style, echo = FALSE, results = 'asis'------------------------------------ BiocStyle::markdown() ## ----env, include=FALSE, echo=FALSE, cache=FALSE------------------------------ library("knitr") opts_chunk$set(stop_on_error = 1L) suppressPackageStartupMessages(library("MetCirc")) ## ----knitr, include=FALSE, cache=FALSE---------------------------------------- library("knitr") ## ----eval=FALSE--------------------------------------------------------------- # if (!requireNamespace("BiocManager", quietly=TRUE)) # install.packages("BiocManager") # BiocManager::install("MetCirc") ## ----eval=TRUE---------------------------------------------------------------- library("MetCirc") library("MsCoreUtils") ## ----eval=TRUE,echo=c(1:2)---------------------------------------------------- ## load data from Li et al., 2015 data("sd02_deconvoluted", package = "MetCirc") ## load binnedMSP data("sd01_outputXCMS", package = "MetCirc") #data("binnedMSP", package = "MetCirc") ## load similarityMat data("similarityMat", package = "MetCirc") ## ----eval=TRUE---------------------------------------------------------------- ## load idMSMStissueproject data("idMSMStissueproject", package = "MetCirc") ## ----eval=TRUE,echo=c(1:2)---------------------------------------------------- ## load data from GNPS data("convertMsp2Spectra", package = "MetCirc") ## ----eval=TRUE---------------------------------------------------------------- ## get all MS/MS spectra id_uniq <- unique(sd02_deconvoluted[, "id"]) ## obtain precursor m/z from id_uniq prec_mz <- lapply(strsplit(as.character(id_uniq), split = " _ "), "[", 2) |> unlist() |> as.numeric() ## obtain m/z from fragments per precursor m/z mz_l <- lapply(id_uniq, function(id_i) sd02_deconvoluted[sd02_deconvoluted[, "id"] == id_i, "mz"]) ## obtain corresponding intensity values int_l <- lapply(id_uniq, function(id_i) sd02_deconvoluted[sd02_deconvoluted[, "id"] == id_i, "intensity"]) ## obtain retention time by averaging all retention time values rt <- lapply(id_uniq, function(x) sd02_deconvoluted[sd02_deconvoluted[, "id"] == x, "rt"]) |> lapply(function(i) mean(i)) |> unlist() ## create list of Spectra objects, concatenate, and add metadata sps_l <- lapply(seq_len(length(mz_l)), function(i) { spd <- S4Vectors::DataFrame( name = as.character(i), rtime = rt[i], msLevel = 2L, precursorMz = prec_mz[i]) spd$mz <- list(mz_l[[i]]) spd$intensity <- list(int_l[[i]]) Spectra::Spectra(spd)}) sps_li <- Reduce(c, sps_l) sps_li@metadata <- data.frame(show = rep(TRUE, length(sps_l))) ## ----eval=TRUE---------------------------------------------------------------- ## get all MS/MS spectra tissue <- tissue[tissue[, "id"] %in% compartmentTissue[, "mz_rt_pcgroup"], ] id_uniq <- unique(tissue[, "id"]) ## obtain precursor m/z from id_uniq prec_mz <- lapply(strsplit(as.character(id_uniq), split = "_"), "[", 1) |> unlist() |> as.numeric() ## obtain m/z from fragments per precursor m/z mz_l <- lapply(id_uniq, function(id_i) tissue[tissue[, "id"] == id_i, "mz"]) ## obtain corresponding intensity values int_l <- lapply(id_uniq, function(id_i) tissue[tissue[, "id"] == id_i, "intensity"]) ## order mz and intensity values int_l <- lapply(seq_along(int_l), function(i) int_l[[i]][order(mz_l[[i]])]) mz_l <- lapply(seq_along(mz_l), function(i) sort(mz_l[[i]])) ## obtain retention time by averaging all retention time values rt <- lapply(id_uniq, function(x) tissue[tissue[, "id"] == x, "rt"]) |> lapply(FUN = mean) |> unlist() ## create list of Spectra objects and concatenate sps_l <- lapply(seq_len(length(mz_l)), function(i) { spd <- S4Vectors::DataFrame( name = as.character(i), rtime = rt[i], msLevel = 2L, precursorMz = prec_mz[i]) spd$mz <- list(mz_l[[i]]) spd$intensity <- list(int_l[[i]]) Spectra::Spectra(spd)}) sps_tissue <- Reduce(c, sps_l) ## add metadata ## use SPL, LIM, ANT, STY for further analysis sps_tissue@metadata <- data.frame( compartmentTissue[, c("SPL", "LIM", "ANT", "STY")]) ## ----eval=TRUE---------------------------------------------------------------- sps_msp <- convertMsp2Spectra(msp2spectra) ## ----eval=TRUE---------------------------------------------------------------- ## similarity Matrix similarityMat <- Spectra::compareSpectra(sps_tissue[1:100,], FUN = MsCoreUtils::ndotproduct, ppm = 10, m = 0.5, n = 2) colnames(similarityMat) <- rownames(similarityMat) <- sps_tissue$name[1:100] ## ----cluster,eval=TRUE,fig.show='hide'---------------------------------------- ## load package amap hClustMSP <- hcluster(similarityMat, method="spearman") ## visualize clusters plot(hClustMSP, labels = FALSE, xlab="", sub="") ## ----truncateGroup1,eval=TRUE,echo=TRUE--------------------------------------- ## define three clusters cutTreeMSP <- cutree(hClustMSP, k = 3) ## extract feature identifiers that belong to module 1 module1 <- names(cutTreeMSP)[as.vector(cutTreeMSP) == "1"] ## create a new similarity matrix that contains only highly related features similarityMat_module1 <- similarityMat[module1, module1] ## ----eval=TRUE---------------------------------------------------------------- linkDf <- createLinkDf(similarityMatrix = similarityMat, sps = sps_tissue, condition = c("SPL", "LIM", "ANT", "STY"), lower = 0.5, upper = 1) ## ----eval=FALSE--------------------------------------------------------------- # selectedFeatures <- shinyCircos(similarityMat, sps = sps_tissue, # condition = c("LIM", "ANT", "STY")) ## ----circos,eval=TRUE,results='hide',message=FALSE,fig.show='hide'------------ ## order similarity matrix according to retention time condition <- c("SPL", "LIM", "ANT", "STY") simM <- orderSimilarityMatrix(similarityMatrix = similarityMat, sps = sps_tissue, type = "retentionTime", group = FALSE) groupname <- rownames(simM) inds <- MetCirc:::spectraCondition(sps_tissue, condition = condition) inds_match <- lapply(inds, function(x) {inds_match <- match(groupname, x) inds_match <- inds_match[!is.na(inds_match)]; x[inds_match]}) inds_cond <- lapply(seq_along(inds_match), function(x) { if (length(inds_match[[x]]) > 0) { paste(condition[x], inds_match[[x]], sep = "_") } else character() }) inds_cond <- unique(unlist(inds_cond)) ## create link matrix linkDf <- createLinkDf(similarityMatrix = simM, sps = sps_tissue, condition = c("SPL", "LIM", "ANT", "STY"), lower = 0.9, upper = 1) ## cut link matrix (here: only display links between groups) linkDf_cut <- cutLinkDf(linkDf = linkDf, type = "inter") ## set circlize paramters circos.par(gap.degree = 0, cell.padding = c(0, 0, 0, 0), track.margin = c(0, 0)) ## here set indSelected arbitrarily indSelected <- 14 selectedFeatures <- inds_cond[indSelected] ## actual plotting plotCircos(inds_cond, linkDf_cut, initialize = TRUE, featureNames = TRUE, cexFeatureNames = 0.2, groupSector = TRUE, groupName = FALSE, links = FALSE, highlight = TRUE) highlight(groupname = inds_cond, ind = indSelected, linkDf = linkDf_cut) ## plot without highlighting plotCircos(inds_cond, linkDf_cut, initialize = TRUE, featureNames = TRUE, cexFeatureNames = 0.2, groupSector = TRUE, groupName = FALSE, links = TRUE, highlight = FALSE) ## ----session,eval=TRUE,echo=FALSE--------------------------------------------- sessionInfo()