The goal of glyanno is to enhance the level of information and resolution for glycans through a hierarchical annotation approach. Starting from a molecule mass, glyanno calculates possible glycan compositions. Given a glycan composition, glyanno further deduces possible glycan structures. For glycan structures with generic monosaccharides (e.g., “Hex”, “HexNAc”), glyanno refines them into specific types (e.g., “Glc”, “Gal”). For structures lacking linkage information (e.g., “Gal(??-?)GalNAc(??-”), glyanno infers the most likely linkages (e.g., “Gal(b1-3)GalNAc(a1-”).
The glyanno package is not a core glycoverse package. You need to install it individually even if you have installed the meta-package glycoverse.
You can install the latest release of glyanno from r-universe (recommended):
# install.packages("pak")
pak::repo_add(glycoverse = "https://glycoverse.r-universe.dev")
pak::pkg_install("glyanno")Or from GitHub:
pak::pkg_install("glycoverse/glyanno@*release")Or install the development version (NOT recommended):
pak::pkg_install("glycoverse/glyanno")Note: Tips and troubleshooting for the meta-package glycoverse are also applicable here: Installation of glycoverse.
Glyanno enhances the precision of glycan structures, enabling the use of
rough mass spectrometry results for detailed structural analysis. For
instance, the glyenzy package requires fully determined glycan
structures. Users can leverage glyanno to make educated guesses from
incomplete data, thereby enabling downstream analysis with glyenzy and
other tools that demand high-resolution structural information.
library(glyanno)
library(glyrepr)
#> Warning: 程序包'glyrepr'是用R版本4.5.2 来建造的
library(glydb)
#> Warning: 程序包'glydb'是用R版本4.5.2 来建造的
mz_to_comp(406.1325, charge = 1, adduct = "Na+")
#> # A tibble: 4 × 2
#> mz composition
#> <dbl> <comp>
#> 1 406. Gal(1)GalNAc(1)
#> 2 406. Gal(1)GlcNAc(1)
#> 3 406. Glc(1)GlcNAc(1)
#> 4 406. Man(1)GlcNAc(1)comp_to_struc("Gal(1)GalNAc(1)")
#> # A tibble: 19 × 2
#> composition structure
#> <comp> <struct>
#> 1 Gal(1)GalNAc(1) Gal(b1-3)GalNAc(a1-
#> 2 Gal(1)GalNAc(1) Gal(b1-3)GalNAc(b1-
#> 3 Gal(1)GalNAc(1) GalNAc(a1-3)Gal(a1-
#> 4 Gal(1)GalNAc(1) Gal(a1-3)GalNAc(b1-
#> 5 Gal(1)GalNAc(1) Gal(b1-4)GalNAc(b1-
#> 6 Gal(1)GalNAc(1) GalNAc(a1-4)Gal(b1-
#> 7 Gal(1)GalNAc(1) GalNAc(a1-2)Gal(b1-
#> 8 Gal(1)GalNAc(1) GalNAc(b1-2)Gal(a1-
#> 9 Gal(1)GalNAc(1) GalNAc(b1-4)Gal(b1-
#> 10 Gal(1)GalNAc(1) Gal(a1-6)GalNAc(a1-
#> 11 Gal(1)GalNAc(1) Gal(b1-6)GalNAc(a1-
#> 12 Gal(1)GalNAc(1) GalNAc(a1-3)Gal(b1-
#> 13 Gal(1)GalNAc(1) GalNAc(b1-3)Gal(b1-
#> 14 Gal(1)GalNAc(1) Gal(b1-6)GalNAc(b1-
#> 15 Gal(1)GalNAc(1) GalNAc(b1-3)Gal(a1-
#> 16 Gal(1)GalNAc(1) GalNAc(b1-4)Gal(a1-
#> 17 Gal(1)GalNAc(1) Gal(a1-3)GalNAc(a1-
#> 18 Gal(1)GalNAc(1) GalNAc(b1-2)Gal(b1-
#> 19 Gal(1)GalNAc(1) Gal(b1-4)GalNAc(a1-# Use custom db to narrow down the search space
my_db <- glydb_structures(species = "Homo sapiens", glycan_type = "O-GalNAc")
comp_to_struc("Gal(1)GalNAc(1)", db = my_db)
#> # A tibble: 2 × 2
#> composition structure
#> <comp> <struct>
#> 1 Gal(1)GalNAc(1) Gal(b1-3)GalNAc(a1-
#> 2 Gal(1)GalNAc(1) Gal(a1-3)GalNAc(a1-# Use `return_best` to pick the most likely match
# Core 1 is more likely than Core 5
comp_to_struc("Gal(1)GalNAc(1)", db = my_db, return_best = TRUE)
#> # A tibble: 1 × 2
#> composition structure
#> <comp> <struct>
#> 1 Gal(1)GalNAc(1) Gal(b1-3)GalNAc(a1-