comparison isolib.R @ 7:06f2d0d6d107 draft default tip

planemo upload for repository https://github.com/RECETOX/galaxytools/tree/master/tools/isolib commit aec90552d259748822d040248a9e1265759cc198
author recetox
date Tue, 01 Jul 2025 09:28:32 +0000
parents f0fe957df1cc
children
comparison
equal deleted inserted replaced
6:f0fe957df1cc 7:06f2d0d6d107
2 library(Spectra) 2 library(Spectra)
3 library(MsBackendMsp) 3 library(MsBackendMsp)
4 library(MetaboCoreUtils) 4 library(MetaboCoreUtils)
5 library(readr) 5 library(readr)
6 library(tidyselect) 6 library(tidyselect)
7 7 library(stringr)
8 library(dplyr)
8 9
9 isotopes <- data.frame( 10 isotopes <- data.frame(
10 element = character(), 11 element = character(),
11 abundance = numeric(), 12 abundance = numeric(),
12 isotope = character() 13 isotope = character()
31 32
32 33
33 parse_args <- function() { 34 parse_args <- function() {
34 args <- commandArgs(trailingOnly = TRUE) 35 args <- commandArgs(trailingOnly = TRUE)
35 36
36 compound_table <- read_tsv( 37 compound_table_full <- read_tsv(
37 file = args[1], 38 file = args[1],
38 col_types = "ccd", 39 col_types = cols(
39 col_select = all_of(c("name", "formula")) | any_of("rt") 40 name = col_character(),
40 ) 41 formula = col_character(),
42 rt = col_double(),
43 .default = col_guess()
44 )
45 )
46
47 # Extract selected columns
48 compound_table <- compound_table_full[, intersect(c("name", "formula", "rt"), colnames(compound_table_full)), drop = FALSE]
49
50 # Extract remaining columns
51 remaining_columns <- setdiff(colnames(compound_table_full), colnames(compound_table))
52 remaining_data <- compound_table_full[, c("name", remaining_columns), drop = FALSE]
53
41 # Handle missing or empty rel_to argument 54 # Handle missing or empty rel_to argument
42 rel_to_value <- if (length(args) >= 8 && args[8] != "") { 55 rel_to_value <- if (length(args) >= 8 && args[8] != "") {
43 if (args[8] == "none") 0 else as.numeric(args[8]) 56 if (args[8] == "none") 0 else as.numeric(args[8])
44 } else { 57 } else {
45 0 # Default value is 0 58 0 # Default value is 0
58 threshold = as.numeric(args[3]), 71 threshold = as.numeric(args[3]),
59 append_adducts = args[4], 72 append_adducts = args[4],
60 append_isotopes = args[5], 73 append_isotopes = args[5],
61 out_format = args[6], 74 out_format = args[6],
62 outfile = args[7], 75 outfile = args[7],
63 rel_to = rel_to_value 76 rel_to = rel_to_value,
77 remaining_data = remaining_data
64 ) 78 )
65 parsed 79 parsed
66 } 80 }
67 81
68 generate_isotope_spectra <- function(compound_table, 82 generate_isotope_spectra <- function(compound_table,
174 spectra <- rbind(spectra, spectra_df) 188 spectra <- rbind(spectra, spectra_df)
175 } 189 }
176 spectra 190 spectra
177 } 191 }
178 192
179 write_to_msp <- function(spectra, file) { 193 join_remaining_data <- function(df, remaining_data) {
194 if (nrow(remaining_data) > 0) {
195 df <- df %>%
196 dplyr::mutate(base_name = stringr::str_trim(stringr::str_remove(name, "\\s*\\([^)]*\\)$")))
197 df <- dplyr::left_join(df, remaining_data, by = c("base_name" = "name"))
198 df <- df %>% dplyr::select(-base_name)
199 }
200 df
201 }
202
203 write_to_msp <- function(spectra, file, remaining_data) {
204 spectra <- join_remaining_data(spectra, remaining_data)
180 sps <- Spectra::Spectra(dplyr::select(spectra, -isotopes)) 205 sps <- Spectra::Spectra(dplyr::select(spectra, -isotopes))
181 Spectra::export(sps, MsBackendMsp::MsBackendMsp(), file = file) 206 Spectra::export(sps, MsBackendMsp::MsBackendMsp(), file = file)
182 } 207 }
183 208
184 write_to_table <- function(spectra, file, append_isotopes) { 209 write_to_table <- function(spectra, file, append_isotopes, remaining_data) {
185 entries <- spectra |> 210 entries <- spectra |>
186 dplyr::rowwise() |> 211 dplyr::rowwise() |>
187 dplyr::mutate(peaks = paste(unlist(mz), collapse = ";")) |> 212 dplyr::mutate(peaks = paste(unlist(mz), collapse = ";")) |>
188 dplyr::mutate(isos = paste(unlist(isotopes), collapse = ";")) 213 dplyr::mutate(isos = paste(unlist(isotopes), collapse = ";"))
189 result <- tidyr::separate_longer_delim( 214 result <- tidyr::separate_longer_delim(
206 ) |> 231 ) |>
207 dplyr::select(-all_of(c("formula", "isotopes"))) |> 232 dplyr::select(-all_of(c("formula", "isotopes"))) |>
208 dplyr::rename(formula = full_formula) |> 233 dplyr::rename(formula = full_formula) |>
209 dplyr::relocate(formula, .after = name) 234 dplyr::relocate(formula, .after = name)
210 } 235 }
236 result <- join_remaining_data(result, remaining_data)
211 readr::write_tsv(result, file = file) 237 readr::write_tsv(result, file = file)
212 } 238 }
213 239
214 main <- function() { 240 main <- function() {
215 args <- parse_args() 241 args <- parse_args()
220 args$threshold, 246 args$threshold,
221 args$rel_to 247 args$rel_to
222 ) 248 )
223 249
224 if (args$out_format == "msp") { 250 if (args$out_format == "msp") {
225 write_to_msp(spectra, args$outfile) 251 write_to_msp(spectra, args$outfile, args$remaining_data)
226 } else if (args$out_format == "tabular") { 252 } else if (args$out_format == "tabular") {
227 write_to_table(spectra, args$outfile, args$append_isotopes) 253 write_to_table(spectra, args$outfile, args$append_isotopes, args$remaining_data)
228 } 254 }
229 } 255 }
230 256
231 # Call the main function 257 # Call the main function
232 main() 258 main()