From 5bd6e29d2c1bcd4554cf9c93efc76fc24c889bc0 Mon Sep 17 00:00:00 2001 From: prafols Date: Fri, 21 Feb 2020 14:50:05 +0100 Subject: [PATCH] added average spectra using just pixel IDs --- NAMESPACE | 1 + R/librMSIdata.R | 50 +++++++++++++++++++++++++++++++++++ man/ROIAverageSpectraByIds.Rd | 19 +++++++++++++ 3 files changed, 70 insertions(+) create mode 100644 man/ROIAverageSpectraByIds.Rd diff --git a/NAMESPACE b/NAMESPACE index d97ff1d..e43ff4c 100644 --- a/NAMESPACE +++ b/NAMESPACE @@ -24,6 +24,7 @@ export(PlotClusterImage) export(PlotTICImage) export(PlotValues) export(ROIAverageSpectra) +export(ROIAverageSpectraByIds) export(ReadBrukerRoiXML) export(SaveMsiData) export(SortIDsByAcquisition) diff --git a/R/librMSIdata.R b/R/librMSIdata.R index 350488f..c096ddd 100644 --- a/R/librMSIdata.R +++ b/R/librMSIdata.R @@ -1170,6 +1170,56 @@ ROIAverageSpectra <- function( img, roi_list ) return(rois_avg) } +#' ROIAverageSpectraByIds. +#' +#' Calculates the average spectrum within each roi specified by a vector of pixel ID's +#' +#' @param img an rMSI object. +#' @param Ids Identifiers of spectra to use for average calculation. +#' +#' @return the ROI average spectrum. +#' @export +#' +ROIAverageSpectraByIds <- function( img, Ids ) +{ + cat("Calculating Average Spectra of slected pixels...\n") + + roi_cubes <- getCubeRowFromIds(img, Ids) + roi_avg <- rep(0, length(img$mass)) + + pb <- txtProgressBar(min = 0, max = length(img$data), initial = 0, style = 3) + LastId <- 0 + for( ic in 1:length(img$data) ) + { + setTxtProgressBar(pb, ic) + dm <- img$data[[ic]][,] #Load the complete data cube + current_ids <- (LastId+1):(LastId+nrow(dm)) + + idCube <- which(unlist(lapply(roi_cubes, function(x){ x$cube})) == ic, arr.ind = T) + if( length(idCube) > 0 ) + { + idRows <- roi_cubes[[idCube]]$row + if(length(idRows) > 1) + { + roi_avg <- roi_avg + apply(dm[idRows,], 2, sum) + } + else + { + roi_avg <- roi_avg + dm[idRows,] + } + } + + LastId <- current_ids[length(current_ids)] + } + + #And divide by the pixel count + roi_avg <- roi_avg / length(Ids) + + close(pb) + + return(roi_avg) +} + #' uuid. #' #' Generates a timecode-based 16-bytes UUID. diff --git a/man/ROIAverageSpectraByIds.Rd b/man/ROIAverageSpectraByIds.Rd new file mode 100644 index 0000000..0212a2d --- /dev/null +++ b/man/ROIAverageSpectraByIds.Rd @@ -0,0 +1,19 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/librMSIdata.R +\name{ROIAverageSpectraByIds} +\alias{ROIAverageSpectraByIds} +\title{ROIAverageSpectraByIds.} +\usage{ +ROIAverageSpectraByIds(img, Ids) +} +\arguments{ +\item{img}{an rMSI object.} + +\item{Ids}{Identifiers of spectra to use for average calculation.} +} +\value{ +the ROI average spectrum. +} +\description{ +Calculates the average spectrum within each roi specified by a vector of pixel ID's +}