Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
20 commits
Select commit Hold shift + click to select a range
ae61b28
Merge pull request #112 from UMCUGenetics/hotfix/v2.7.1
mraves2 Apr 7, 2026
26b4dcb
Merge pull request #115 from UMCUGenetics/develop
mraves2 Apr 30, 2026
191b123
Revert "DIMS v3.4 bug fixes from Develop to main"
ALuesink Apr 30, 2026
ef47cee
Merge pull request #116 from UMCUGenetics/revert-115-develop
mraves2 Apr 30, 2026
60669b4
Merge pull request #119 from UMCUGenetics/develop
mraves2 Apr 30, 2026
53174c9
changed sd in DIMS/preprocessing/fill_missing_functions.R
mraves2 Apr 30, 2026
e3f16cb
removed duplicate ppmdev column in DIMS/preprocessing/collect_filled_…
mraves2 Apr 30, 2026
068c867
modified DIMS/preprocessing/peak_finding_functions.R for regions with…
mraves2 Apr 30, 2026
1db057f
modified unit tests to match altered functions in DIMS/peak_finding a…
mraves2 Apr 30, 2026
04e3616
Merge pull request #121 from UMCUGenetics/hotfix/v2.7.2
mraves2 Apr 30, 2026
aed04cf
changed break to next for proceeding to next step in for loop
mraves2 Jun 1, 2026
12d6865
Merge pull request #122 from UMCUGenetics/hotfix/v2.7.3
mraves2 Jun 1, 2026
1b5ce4d
Fixed error double/triple boxes in dIEM plots
ALuesink Jun 12, 2026
92b4cce
Fixed the unit tests for changed code
ALuesink Jun 12, 2026
dcdd971
Merge pull request #124 from UMCUGenetics/hotfix/v2.7.4
ALuesink Jun 15, 2026
4c69cba
fixed square for Z > 20 in DIMS/export/generate_violin_plots_functions.R
mraves2 Jun 18, 2026
e9c4a42
fixed calculation of Z-scores for ratios in DIMS/export/generate_viol…
mraves2 Jun 18, 2026
b4fc29f
fix for research data without Z-scores in DIMS
mraves2 Jun 23, 2026
a9bfa3e
fixed unit test fixture for DIMS/GenerateViolinPlots
mraves2 Jun 23, 2026
d5cc850
Merge pull request #126 from UMCUGenetics/hotfix/v2.7.5
mraves2 Jun 23, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions DIMS/CollectFilled.R
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,8 @@ for (scanmode in scanmodes) {
# calculate Z-scores
if (z_score == 1) {
outlist_stats <- calculate_zscores_peakgrouplist(outlist_total)
} else {
outlist_stats <- outlist_total
}
# calculate ppm deviation
outlist_withppm <- calculate_ppm_deviation(outlist_stats)
Expand Down
8 changes: 5 additions & 3 deletions DIMS/GenerateQCOutput.R
Original file line number Diff line number Diff line change
Expand Up @@ -37,9 +37,11 @@ dir.create(paste0(outdir, "/plots"), showWarnings = FALSE)
control_label <- "C"

#### CHECK NUMBER OF CONTROLS ####
file_name <- "Check_number_of_controls.txt"
min_num_controls <- 25
check_number_of_controls(outlist, min_num_controls, file_name)
if (any(grepl("nr_ctrls", colnames(outlist)))) {
file_name <- "Check_number_of_controls.txt"
min_num_controls <- 25
check_number_of_controls(outlist, min_num_controls, file_name)
}

#### INTERNAL STANDARDS ####
is_list <- outlist[grep("Internal standard", outlist[, "relevance"], fixed = TRUE), ]
Expand Down
2 changes: 1 addition & 1 deletion DIMS/PeakFinding.R
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,7 @@ for (scanmode in scanmodes) {
techreps_scanmode <- techreps_passed[grep(scanmode, techreps_passed[, 3]), ]
# if techrep is ok, it will be found. If not, skip this techrep.
if (length(grep(techrepl_name, techreps_scanmode)) == 0) {
break
next
}

# put mz and intensities into dataframe
Expand Down
36 changes: 27 additions & 9 deletions DIMS/export/generate_violin_plots_functions.R
Original file line number Diff line number Diff line change
Expand Up @@ -67,6 +67,12 @@ add_zscores_ratios_to_df <- function(outlist, metabolites_ratios_df, all_sample_
#'
#' @returns zscore_ratios_df: dataframe containing Z-scores for all ratios for all samples
calculate_zscore_ratios <- function(metabolites_ratios_df, intensities_zscores_df, intensity_col_names) {
# remove Z-score columns from intensity_col_names
if (any(grepl("_Zscore", intensity_col_names))) {
intensity_col_names <- intensity_col_names[-grep("_Zscore", intensity_col_names)]
}

# create empty data frame for results
zscore_ratios_df <- data.frame(matrix(
ncol = ncol(intensities_zscores_df),
nrow = nrow(metabolites_ratios_df)
Expand Down Expand Up @@ -665,14 +671,20 @@ create_pdf_violin_plots <- function(pdf_dir, patient_id, metab_perpage, top_meta
for (metab_class in names(metab_perpage)) {
# extract list of metabolites to plot on a page
metab_zscores_df <- metab_perpage[[metab_class]]
# extract original data for patient of interest (pt_name) before cut-offs
patient_zscore_df <- metab_zscores_df %>% filter(Sample == patient_id)

# Remove patient column and change Z-score. If under -5 to -5 and if above 20 to 20.
# copy Z-scores to Z_score_original for displaying values
metab_zscores_df$Z_score_original <- metab_zscores_df$Z_score
# Cap Z-scores under -5 to -5 and above 20 to 20
metab_zscores_df <- metab_zscores_df %>%
filter(Sample != patient_id) %>%
mutate(Z_score = pmin(pmax(Z_score, -5), 20))

# extract original data for patient of interest (pt_name)
patient_zscore_df <- metab_zscores_df %>%
filter(Sample == patient_id)

# Remove patient of interest and retain only other patient data
metab_zscores_df <- metab_zscores_df %>%
filter(Sample != patient_id)

# subtitle per page
sub_perpage <- gsub("_", " ", metab_class)
# for IEM plots, put subtitle on two lines
Expand Down Expand Up @@ -713,9 +725,15 @@ create_violin_plot <- function(metab_zscores_df, patient_zscore_df, sub_perpage,
colors_plot <- c("#22E4AC", "#00B0F0", "#504FFF", "#A704FD", "#F36265", "#DA0641")

y_order <- attr(metab_zscores_df, "y_order")
metab_zscores_df$HMDB_name <- rev(factor(metab_zscores_df$HMDB_name, levels = rev(y_order)))
patient_zscore_df$HMDB_name <- rev(factor(patient_zscore_df$HMDB_name, levels = rev(y_order)))


metab_zscores_df <- metab_zscores_df %>%
mutate(HMDB_name = factor(HMDB_name, levels = y_order)) %>%
arrange(HMDB_name)

patient_zscore_df <- patient_zscore_df %>%
mutate(HMDB_name = factor(HMDB_name, levels = y_order)) %>%
arrange(HMDB_name)

ggplot_object <- ggplot(metab_zscores_df, aes(x = Z_score, y = HMDB_name)) +
# Make violin plots
geom_violin(scale = "width", na.rm = TRUE) +
Expand All @@ -727,7 +745,7 @@ create_violin_plot <- function(metab_zscores_df, patient_zscore_df, sub_perpage,
# Add the Z-score at the right side of the plot
geom_text(
data = patient_zscore_df,
aes(16, label = paste0("Z=", round(Z_score, 2))),
aes(16, label = paste0("Z=", round(Z_score_original, 2))),
hjust = "left", vjust = +0.2, size = 3, na.rm = TRUE
) +
# Set colour for the Z-score of the selected patient
Expand Down
8 changes: 6 additions & 2 deletions DIMS/preprocessing/collect_filled_functions.R
Original file line number Diff line number Diff line change
Expand Up @@ -129,9 +129,13 @@ order_columns_peakgrouplist <- function(peakgroup_list) {

original_colnames <- colnames(peakgroup_list)
mass_columns <- c(grep("mzm", original_colnames), grep("nrsamples", original_colnames))
descriptive_columns <- grep("assi_HMDB", original_colnames):grep("avg.int", original_colnames)
if (any(grepl("avg.int", original_colnames))) {
descriptive_columns <- grep("assi_HMDB", original_colnames):grep("avg.int", original_colnames)
} else {
descriptive_columns <- grep("assi_HMDB", original_colnames):grep("ppmdev", original_colnames)
}
intensity_columns <- c((grep("nrsamples", original_colnames) + 1):(grep("assi_HMDB", original_colnames) - 1))
# if no Z-scores have been calculated, the following two variables will be empty without consequences for outlist_total
# if no Z-scores have been calculated, the following two variables will be empty without consequences for peakgroup_list
control_columns <- grep ("ctrls", original_colnames)
zscore_columns <- grep("_Zscore", original_colnames)
# create peak group list with columns in correct order
Expand Down
4 changes: 2 additions & 2 deletions DIMS/preprocessing/sum_intensities_adducts.R
Original file line number Diff line number Diff line change
Expand Up @@ -32,8 +32,8 @@ sum_intensities_adducts <- function(peakgroup_list, hmdb_part, adducts, z_score)
int_cols_pats <- grep("P", colnames(peakgroup_list)[1:which(colnames(peakgroup_list) == "avg.ctrls")])
int_cols <- c(int_cols_ctrls, int_cols_pats)
} else {
int_cols_start <- which(colnames(peakgroup_list) == "nrsamples") + 1
int_cols_end <- which(colnames(peakgroup_list) == "assi_HMDB") - 1
int_cols_start <- which(colnames(peakgroup_list) == "ppmdev") + 1
int_cols_end <- ncol(peakgroup_list)
int_cols <- c(int_cols_start:int_cols_end)
}

Expand Down
4 changes: 2 additions & 2 deletions DIMS/tests/testthat/_snaps/generate_violin_plots.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,8 @@
content_pdf_violinplots
Output
[1] "Top deviating metabolites for patient: P2025M1\n Metabolite Z.score\n Increased\n metab1 2.45\n Decreased\n metab11 −1.51\n"
[2] " Results for patient P2025M1\n test acyl carnitines\n metab1 Z=2.34\nMetabolites\n metab3 Z=0.31\n −5 0 5 10 15 20\n Z−scores\n"
[3] " Results for patient P2025M1\n test crea gua\n metab4 Z=−0.46\nMetabolites\n metab11 Z=0.84\n −5 0 5 10 15 20\n Z−scores\n"
[2] " Results for patient P2025M1\n test acyl carnitines\n metab1 Z=0.31\nMetabolites\n metab3 Z=2.34\n −5 0 5 10 15 20\n Z−scores\n"
[3] " Results for patient P2025M1\n test crea gua\n metab4 Z=0.84\nMetabolites\n metab11 Z=−0.46\n −5 0 5 10 15 20\n Z−scores\n"
[4] " Unit test Generate Violin Plots\nUnit test Generate Violin Plots\n"

# save_prob_scores_to_excel: Saving the probability score dataframe as an Excel file
Expand Down
Loading
Loading