Skip to content

Commit

Permalink
add inv_k0 and ri slots and get k0 function
Browse files Browse the repository at this point in the history
  • Loading branch information
lalo-caballero committed May 16, 2024
1 parent 50a6a54 commit 806ee72
Show file tree
Hide file tree
Showing 6 changed files with 85 additions and 0 deletions.
16 changes: 16 additions & 0 deletions R/aaa-class-GCIMSDataset.R
Original file line number Diff line number Diff line change
Expand Up @@ -79,6 +79,10 @@ GCIMSDataset <- R6::R6Class("GCIMSDataset",
dt_ref = NULL, # numeric or NULL
#' @field rt_ref A numeric retention time of reference
rt_ref = NULL, # numeric or NULL
#' @field inv_k0_ref A numeric inverse reduced mobility reference
inv_k0_ref = NULL,
#' @field ri_ref A numeric retention index reference
ri_ref = NULL,
#' @field userData A list to store arbitrary data in the dataset
userData = list(), # list
# Methods:
Expand Down Expand Up @@ -297,6 +301,18 @@ GCIMSDataset <- R6::R6Class("GCIMSDataset",
invisible(self)
},
#' @description
#' Sets an action to extract the reference inverse reduced mobility
#' @return GCIMSDataset with inverse reduced mobility calculated
extract_inv_k0 = function() {
delayed_op <- DelayedOperation(
name = "extract_inv_k0",
fun_extract = .extract_inv_k0,
fun_aggregate = .extract_inv_k0_fun_aggregate
)
self$appendDelayedOp(delayed_op)
self
},
#' @description
#' Whether the dataset is saved on disk or stored in RAM
#' @return `TRUE` if on disk, `FALSE` otherwise
is_on_disk = function() {
Expand Down
4 changes: 4 additions & 0 deletions R/aaa-class-GCIMSSample.R
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,8 @@
#'
#' @slot drift_time numeric. (required)
#' @slot retention_time numeric. (required)
#' @slot inverse_reduced_mobility 1/K0 (calculated from drift_time)
#' @slot retention_index numeric. (calculated from retention_time and references)
#' @slot data matrix A matrix with drift time in the rows and retention time
#' in columns. (required)
#' @slot gc_column character. (optional) The type of chromatographic column used
Expand Down Expand Up @@ -51,6 +53,8 @@ methods::setClass(
slots = c(
drift_time = "numeric",
retention_time = "numeric",
inverse_reduced_mobility = "numericOrNULL",
retention_index = "numericOrNULL",
data = "matrix", # [dt, rt]
gc_column = "character",
drift_gas = "character",
Expand Down
31 changes: 31 additions & 0 deletions R/inv_k0.R
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
get_inv_k0 <- function(drift_time,
drift_tube_length_cm,
pressure_ims,
voltage_ims,
ims_temp_k){
k0 <- (0.0027315 * (drift_tube_length_cm ^ 2) * pressure_ims) /
(voltage_ims * (drift_time / 1000) * ims_temp_k)
inv_k0 <- 1 / k0
}


.extract_inv_k0 <- function(object) {
inv_k0 <- object@inverse_reduced_mobility
data.frame(
inv_k0_min = inv_k0[1],
inv_k0_max = inv_k0[length(inv_k0)],
inv_k0_step = stats::median(diff(inv_k0))
)
}

.extract_inv_k0_fun_aggregate <- function(object, extracted_objects) {
inv_k0_samples <- dplyr::bind_rows(extracted_objects, .id = "SampleID")

max_inv_k0_min <- max(inv_k0_samples$inv_k0_min)
min_inv_k0_max <- min(inv_k0_samples$inv_k0_max)
min_inv_k0_step <- min(inv_k0_samples$inv_k0_step)
max_inv_k0_length <- floor(round((min_inv_k0_max - max_inv_k0_min)/min_inv_k0_step, digits = 8)) + 1L
inv_k0_ref <- seq(from = max_inv_k0_min, to = min_inv_k0_max, length.out = max_inv_k0_length)

object$inv_k0_ref <- inv_k0_ref
}
12 changes: 12 additions & 0 deletions R/utils-io-mea.R
Original file line number Diff line number Diff line change
Expand Up @@ -202,9 +202,21 @@ read_mea <- function(filename) {
description <- tools::file_path_sans_ext(basename(filename), compression = TRUE)
}

#Calculate inv_k0
ims_temp_k <- params$`Temp 1 setpoint`$value + 273.15
pressure_ims <- mean(as.numeric(strsplit(strsplit(params$`Pressure Ambient`$value, "\"")[[1]][2]," ")[[1]]))
drift_tube_length_cm <- drift_tube_length / 10
inv_k0 <- get_inv_k0(drift_time,
drift_tube_length_cm,
pressure_ims,
params$`nom Drift Potential Difference`$value,
ims_temp_k)

GCIMSSample(
drift_time = drift_time,
retention_time = ret_time,
inverse_reduced_mobility = inv_k0,
retention_index = NULL,
data = data,
gc_column = gc_column,
drift_tube_length = drift_tube_length,
Expand Down
18 changes: 18 additions & 0 deletions man/GCIMSDataset.Rd

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

4 changes: 4 additions & 0 deletions man/GCIMSSample-class.Rd

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

0 comments on commit 806ee72

Please sign in to comment.