The hardware and bandwidth for this mirror is donated by dogado GmbH, the Webhosting and Full Service-Cloud Provider. Check out our Wordpress Tutorial.
If you wish to report a bug, or if you are interested in having us mirror your free-software or open-source project, please feel free to contact us at mirror[@]dogado.de.
# libraries
library(isoorbi) #load isoorbi R package
library(forcats) #better ordering of factor variables in plots
library(dplyr) # for mutating data frames
library(ggplot2) # for data visualization
# Read .isox test data
df <-
system.file("extdata", "testfile_dual_inlet_new.isox", package = "isoorbi") |>
orbi_read_isox() |> # reads .isox test data
orbi_simplify_isox() |> # optionally: keeps only most important columns; equivalent to simplify check box in IsoX
# check for issues
orbi_flag_satellite_peaks() |> # removes minor signals that were reported by IsoX in the same tolerance window where the peak of interest is
orbi_flag_weak_isotopocules(min_percent = 10) |> # removes signals of isotopocules that were not detected at least in min_percent scans
orbi_flag_outliers(agc_fold_cutoff = 2) |> # removes outlying scans that have more than 2 times or less than 1/2 times the average number of ions in the Orbitrap analyzer; another method: agc_window (see function documentation for more details)
orbi_define_basepeak(basepeak_def = "M0") # sets one isotopocule in the dataset as the base peak (denominator) for ratio calculation
No satellite peaks, no weak isotopocules, a few AGC fold outliers:
# define blocks
df_w_blocks <-
df |>
# general definition
orbi_define_blocks_for_dual_inlet(
ref_block_time.min = 10, # the reference block is 10 min long
sample_block_time.min = 10, # the sample block is 10 min long
startup_time.min = 5, # there is 5 min of data before the reference block starts, to stabilize spray conditions
change_over_time.min = 2, # it takes 2 min to make sure the right solution is measured after switching the valve
sample_block_name = "sample",
ref_block_name = "reference"
) |>
# fine adjustments
orbi_adjust_block(block = 1, shift_start_time.min = 2) |> # the 1st reference block is shorter by 2 min, cut from the start
orbi_adjust_block(block = 4, set_start_time.min = 38, set_end_time.min = 44) # the start and end of the 2nd reference block are manually set
# get blocks info
blocks_info <- df_w_blocks |> orbi_get_blocks_info()
blocks_info |> knitr::kable()
filename | data_group | block | sample_name | data_type | segment | start_scan.no | end_scan.no | start_time.min | end_time.min |
---|---|---|---|---|---|---|---|---|---|
20230518_05_USGS32_vs_USGS34 | 1 | 0 | reference | startup | NA | 5 | 820 | 0.031 | 4.985 |
20230518_05_USGS32_vs_USGS34 | 2 | 1 | reference | unused | NA | 825 | 1150 | 5.015 | 6.990 |
20230518_05_USGS32_vs_USGS34 | 3 | 1 | reference | data | NA | 1155 | 2465 | 7.021 | 14.982 |
20230518_05_USGS32_vs_USGS34 | 4 | 2 | sample | changeover | NA | 2470 | 2795 | 15.016 | 16.990 |
20230518_05_USGS32_vs_USGS34 | 5 | 2 | sample | data | NA | 2800 | 4110 | 17.021 | 24.982 |
20230518_05_USGS32_vs_USGS34 | 6 | 3 | reference | changeover | NA | 4115 | 4440 | 25.016 | 26.991 |
20230518_05_USGS32_vs_USGS34 | 7 | 3 | reference | data | NA | 4445 | 5755 | 27.022 | 34.984 |
20230518_05_USGS32_vs_USGS34 | 8 | 4 | sample | changeover | NA | 5760 | 6085 | 35.017 | 36.992 |
20230518_05_USGS32_vs_USGS34 | 9 | 4 | sample | unused | NA | 6090 | 6250 | 37.023 | 37.995 |
20230518_05_USGS32_vs_USGS34 | 10 | 4 | sample | data | NA | 6255 | 7235 | 38.025 | 43.982 |
20230518_05_USGS32_vs_USGS34 | 11 | 4 | sample | unused | NA | 7240 | 7400 | 44.012 | 44.984 |
20230518_05_USGS32_vs_USGS34 | 12 | 5 | reference | changeover | NA | 7405 | 7730 | 45.018 | 46.994 |
20230518_05_USGS32_vs_USGS34 | 13 | 5 | reference | data | NA | 7735 | 9045 | 47.024 | 54.985 |
20230518_05_USGS32_vs_USGS34 | 14 | 6 | sample | changeover | NA | 9050 | 9375 | 55.019 | 56.994 |
20230518_05_USGS32_vs_USGS34 | 15 | 6 | sample | data | NA | 9380 | 10690 | 57.024 | 64.985 |
20230518_05_USGS32_vs_USGS34 | 16 | 7 | reference | changeover | NA | 10695 | 11020 | 65.019 | 66.994 |
20230518_05_USGS32_vs_USGS34 | 17 | 7 | reference | data | NA | 11025 | 12335 | 67.025 | 74.985 |
# calculate summary
df_summary <-
df_w_blocks |>
# segment (optional)
orbi_segment_blocks(into_segments = 3) |>
# calculate results, including for the unused parts of the data blocks
orbi_summarize_results(
ratio_method = "sum",
include_unused_data = TRUE
)
# plot all isotopocules using a ggplot from scratch
df_summary |>
filter(data_type == "data") |>
mutate(block_seg = sprintf("%s.%s", block, segment) |> fct_inorder()) |>
# data
ggplot() +
aes(
x = block_seg,
y = ratio, ymin = ratio - ratio_sem, ymax = ratio + ratio_sem,
color = sample_name
) +
geom_pointrange() +
facet_grid(isotopocule ~ ., scales = "free_y") +
# scales
scale_color_brewer(palette = "Set1") +
theme_bw() +
labs(x = "block.segment", y = "ratio")
# make a plot for 15N
plot2 <- df_w_blocks |>
filter(isotopocule == "15N") |>
mutate(panel = "raw ratios") |>
# raw data plot
orbi_plot_raw_data(
y = ratio,
color = NULL,
add_all_blocks = TRUE,
show_outliers = FALSE
) +
# ratio summary data
geom_pointrange(
data = function(df) {
df_summary |>
filter(as.character(isotopocule) == df$isotopocule[1]) |>
mutate(panel = "summary")
},
map = aes(
x = mean_time.min, y = ratio,
ymin = ratio - ratio_sem, ymax = ratio + ratio_sem,
shape = sample_name
),
size = 0.5
) +
facet_grid(panel ~ ., switch = "y") +
theme(strip.placement = "outside") +
labs(y = NULL, title = "15N/M0")
plot2
These binaries (installable software) and packages are in development.
They may not be fully stable and should be used with caution. We make no claims about them.
Health stats visible at Monitor.