"""
Icons for drawing glycan structures in 2D
"""
import os
import matplotlib.pyplot as plt
import matplotlib.patches as patches
_DIR = os.path.dirname(__file__)
__loaded_icons__ = {}
__shape_table__ = {
"TNO": "TalN",
"KDO": "Kdo",
"KDM": "Kdn",
"KDN": "Kdn",
"NDG": "GlcNAc",
"NGZ": "GlcNAc",
"NAG": "GlcNAc",
"MUB": "MurNAc",
"AMU": "MurNAc",
"PSE": "Pse",
"Z0F": "Ido",
"ZCD": "Ido",
"4N2": "Ido",
"AL1": "AltN",
"6AN": "6dAltNAc",
"ADA": "GalA",
"GTK": "GalA",
"GTR": "GalA",
"TLO": "TalNAc",
"66O": "6dGul",
"4LG": "4eLeg",
"A0N": "AllN",
"QUN": "QuiNAc",
"Z9W": "QuiNAc",
"4LC": "MurNGc",
"AFD": "All",
"Z2D": "All",
"ALL": "All",
"WOO": "All",
"BM3": "ManNAc",
"BM7": "ManNAc",
"GLA": "Gal",
"GXL": "Gal",
"GAL": "Gal",
"GIV": "Gal",
"GZL": "Gal",
"DHA": "Dha",
"Z3U": "Dig",
"HSY": "Xyl",
"XYS": "Xyl",
"LXC": "Xyl",
"XYP": "Xyl",
"XYZ": "Xyl",
"T6T": "Tag",
"LXB": "GulNAc",
"TYV": "Tyv",
"95Z": "ManN",
"ABE": "Abe",
"GCU": "GlcA",
"BDP": "GlcA",
"MUR": "Mur",
"1S4": "Mur",
"A2G": "GalNAc",
"YYQ": "GalNAc",
"NGA": "GalNAc",
"IIO": "IdoN",
"PZU": "Par",
"4GL": "Gul",
"GUP": "Gul",
"GL0": "Gul",
"Z8H": "Gul",
"GUN": "GulN",
"PA1": "GlcN",
"GCS": "GlcN",
"GLC": "GLC",
"BGC": "GLC",
"Z8T": "GLC",
"IDR": "IdoA",
"LEG": "Leg",
"289": "DDmanHep",
"A5C": "Tal",
"SDY": "Tal",
"ZEE": "Tal",
"MAN": "Man",
"BMA": "Man",
"DDA": "Oli",
"RAE": "Oli",
"Z5J": "Oli",
"ACI": "Aci",
"LGU": "GulA",
"SHD": "Alt",
"Z6H": "Alt",
"3MK": "Alt",
"SIA": "Neu5Ac",
"SLB": "Neu5Ac",
"GMH": "LDmanHep",
"NEX": "Neu",
"Z9N": "Fru",
"BDF": "Fru",
"FRU": "Fru",
"LFR": "Fru",
"COL": "Col",
"MAV": "ManA",
"BEM": "ManA",
"6TT": "6dTal",
"BAC": "Bac",
"B6D": "Bac",
"X6X": "GalN",
"1GN": "GalN",
"RIB": "Rib",
"YYM": "Rib",
"Z6J": "Rib",
"0MK": "Rib",
"32O": "Rib",
"BDR": "Rib",
"RIP": "Rib",
"API": "Api",
"XXM": "Api",
"64K": "Ara",
"AHR": "Ara",
"ARA": "Ara",
"BXY": "Ara",
"ARB": "Ara",
"BXX": "Ara",
"FUB": "Ara",
"SEJ": "Ara",
"FCA": "Fuc",
"FUC": "Fuc",
"FCB": "Fuc",
"FUL": "Fuc",
"GYE": "Fuc",
"ATN": "AltNAc",
"AUA": "AllA",
"NAA": "AllNAc",
"6TN": "6dTalNAc",
"SOE": "Sor",
"UEA": "Sor",
"G6D": "Qui",
"YYK": "Qui",
"X1X": "TalA",
"X0X": "TalA",
"PSV": "Psi",
"SF6": "Psi",
"SF9": "Psi",
"TTV": "Psi",
"RAM": "Rha",
"XXR": "Rha",
"RM4": "Rha",
"6AT": "6dAlt",
"NGC": "Neu5Gc",
"NGE": "Neu5Gc",
"LDY": "Lyx",
"Z4W": "Lyx",
"HSQ": "IdoNAc",
"LXZ": "IdoNAc",
"UNF": "FucNAc",
"49T": "FucNAc",
"ATA": "AltA",
}
# {
# "GLC": "Glc",
# "NDG": "GlcNAc",
# "NGZ": "GlcNAc",
# "PA1": "GlcN",
# "GCU": "GlcA",
# "G6D": "Qui",
# "Z9W": "QuiNAc",
# "DDA": "Oli",
# "RAE": "Oli",
# "BAC": "Bac",
# "B6D": "Bac",
# "API": "Api",
# "XXM": "Api",
# "MAN": "Man",
# "BM3": "ManNAc",
# "95Z": "ManN",
# "MAV": "ManA",
# "RAM": "Rha",
# "XXR": "Rha",
# "RHN": "RhaNAc",
# "TYV": "Tyv",
# "64K": "Ara",
# "AHR": "Ara",
# "ARA": "Ara",
# "BXY": "Ara",
# "KDM": "Kdn",
# "PSE": "Pse",
# "GMH": "LDmanHep",
# "Z9N": "Fru",
# "GLA": "Gal",
# "GXL": "Gal",
# "A2G": "GalNAc",
# "YYQ": "GalNAc",
# "X6X": "GalN",
# "ADA": "GalA",
# "LDY": "Lyx",
# "LEG": "Leg",
# "KDO": "Kdo",
# "T6T": "Tag",
# "4GL": "Gul",
# "GUP": "Gul",
# "LXB": "GulNAc",
# "GUN": "GulN",
# "LGU": "GulA",
# "66O": "6dGul",
# "ABE": "Abe",
# "HSY": "Xyl",
# "XYS": "Xyl",
# "DHA": "Dha",
# "SOE": "Sor",
# "SHD": "Alt",
# "Z6H": "Alt",
# "ATN": "AltNAc",
# "AL1": "AltN",
# "AL2": "AltA",
# "6AT": "6dAlt",
# "6AN": "6dAltNAc",
# "PZU": "Par",
# "RIB": "Rib",
# "YYM": "Rib",
# "Z6J": "Rib",
# "ACI": "Aci",
# "289": "DDmanHep",
# "PSV": "Psi",
# "SF6": "Psi",
# "AFD": "All",
# "Z2D": "All",
# "NAA": "AllNAc",
# "AUA": "AllA",
# "A0N": "AllN",
# "Z3U": "Dig",
# "SIA": "Neu5Ac",
# "MUB": "MurNAc",
# "A5C": "Tal",
# "TLO": "TalNAc",
# "TNO": "TalN",
# "X1X": "TalA",
# "6TT": "6dTal",
# "6TN": "6dTalNAc",
# "COL": "Col",
# "NGC": "Neu5Gc",
# "4LG": "4eLeg",
# "4LC": "MurNGc",
# "Z0F": "Ido",
# "ZCD": "Ido",
# "HSQ": "IdoNAc",
# "LXZ": "IdoNAc",
# "IIO": "IdoN",
# "IDR": "IdoA",
# "NEX": "Neu",
# "MUR": "Mur",
# "FCA": "Fuc",
# "FUC": "Fuc",
# "UNF": "FucNAc",
# }
__base_color_mapping__ = {
"GLC": "blue",
"NDG": "blue",
"NGZ": "blue",
"PA1": "blue",
"GCU": "blue",
"G6D": "blue",
"Z9W": "blue",
"DDA": "blue",
"RAE": "blue",
"BAC": "blue",
"B6D": "blue",
"API": "blue",
"XXM": "blue",
"MAN": "green",
"BM3": "green",
"95Z": "green",
"MAV": "green",
"RAM": "green",
"XXR": "green",
"RHN": "green",
"TYV": "green",
"64K": "green",
"AHR": "green",
"ARA": "green",
"BXY": "green",
"KDM": "green",
"PSE": "green",
"GMH": "green",
"Z9N": "green",
"GLA": "yellow",
"GXL": "yellow",
"A2G": "yellow",
"YYQ": "yellow",
"X6X": "yellow",
"ADA": "yellow",
"LDY": "yellow",
"LEG": "yellow",
"KDO": "yellow",
"T6T": "yellow",
"4GL": "orange",
"GUP": "orange",
"LXB": "orange",
"GUN": "orange",
"LGU": "orange",
"66O": "orange",
"ABE": "orange",
"HSY": "orange",
"XYS": "orange",
"DHA": "orange",
"SOE": "orange",
"SHD": "pink",
"Z6H": "pink",
"ATN": "pink",
"AL1": "pink",
"AL2": "pink",
"6AT": "pink",
"6AN": "pink",
"PZU": "pink",
"RIB": "pink",
"YYM": "pink",
"Z6J": "pink",
"ACI": "pink",
"289": "pink",
"PSV": "pink",
"SF6": "pink",
"AFD": "purple",
"Z2D": "purple",
"NAA": "purple",
"AUA": "purple",
"A0N": "purple",
"Z3U": "purple",
"SIA": "purple",
"MUB": "purple",
"A5C": "lightblue",
"TLO": "lightblue",
"TNO": "lightblue",
"X1X": "lightblue",
"6TT": "lightblue",
"6TN": "lightblue",
"COL": "lightblue",
"NGC": "lightblue",
"4LG": "lightblue",
"4LC": "lightblue",
"Z0F": "brown",
"ZCD": "brown",
"HSQ": "brown",
"LXZ": "brown",
"IIO": "brown",
"IDR": "brown",
"NEX": "brown",
"MUR": "brown",
"FCA": "red",
"FUC": "red",
"UNF": "red",
}
[docs]
def get_icon_path(name: str) -> str:
"""
Get the path to an icon PNG file
Parameters
----------
name : str
Returns
-------
str
"""
return os.path.join(_DIR, name + ".png")
[docs]
def get_icon(name: str) -> "ndarray":
"""
Get an icon by name
Parameters
----------
name : str
The name of the icon
Returns
-------
"ndarray"
The icon image
"""
if name.startswith("b-"):
name = name[2:]
if not name in __shape_table__.values():
name = __shape_table__.get(name, "unknown")
if name not in __loaded_icons__:
__loaded_icons__[name] = plt.imread(get_icon_path(name))
return __loaded_icons__[name]
[docs]
def get_base_color(name: str) -> str:
"""
Get the only base color of a monosaccharide
Parameters
----------
name : str
The name of the monosaccharide
Returns
-------
str
The base color of the monosaccharide
"""
if name.startswith("b-"):
name = name[2:]
if not name in __shape_table__.values():
name = __shape_table__.get(name, "unknown")
return __base_color_mapping__.get(name, "gray")