Monosaccharide¶
Represents individual saccharide residues and their associated functions. These are the basic unit of structural representation, possesing graph node-like properties.
-
class
glypy.structure.monosaccharide.Monosaccharide(anomer=None, configuration=None, stem=None, superclass=None, ring_start=None, ring_end=None, modifications=None, links=None, substituent_links=None, composition=None, reduced=None, id=None, fast=False)[source]¶ Bases:
glypy.structure.base.SaccharideBaseRepresents a single monosaccharide molecule, and its relationships with other molcules through
Linkobjects.Linkobjects stored inlinksfor connections to otherMonosaccharideinstances, building aGlycanstructure as a graph ofMonosaccharideobjects.Linkobjects connecting theMonosaccharideinstance toSubstituentobjects are stored insubstituent_links.Both
linksandsubstituent_linksare instances ofOrderedMultiMapobjects where the key is the index of the carbon atom in the carbohydrate backbone that hosts the bond. An index ofxor-1represents an unknown location.Warning
While
Monosaccharideobjects expose theirmodifications,links, andsubstituent_linksattributes as mutable, you should treat them as read-only. The methods for altering their contents,add_substituent(),add_monosaccharide(),add_modification(),drop_substituent(),drop_monosaccharide(), anddrop_modification()are all responsible for handling these mutations for you.Linkmethods likeLink.apply(),Link.break_link(), andLink.reconnect()are used internally.Attributes
anomer: AnomerAn entry of Anomerthat corresponds to the linkage type of the carbohydrate backbone. Is an entry of a class based onEnumsuperclass: SuperClassAn entry of SuperClassthat corresponds to the number of carbons in the carbohydrate backbone of the monosaccharide. Controls the base composition of the instance and the number of positions open to be linked to or modified. Is an entry of a class based onEnumconfiguration: Configurationor {‘d’, ‘l’, ‘x’, ‘missing’, None}An entry of Configurationwhich corresponds to the optical stereomer state of the instance. Is an entry of a class based onEnum. May possess more than one value.stem: StemCorresponds to the bond conformation of the carbohydrate backbone. Is an entry of a class based on Enum. May possess more than one value.ring_start: intThe index of the carbon of the carbohydrate backbone that starts a ring. A value of -1,'x', orNonecorresponds to an unknown start. A value of0refers to a linear chain.ring_end: intThe index of the carbon of the carbohydrate backbone that ends a ring. A value of -1,'x', orNonecorresponds to an unknown ends. A value of0refers to a linear chain.reducing_end: intThe index of the carbon which hosts the reducing end. modifications: OrderedMultiMapThe mapping of sites to Modificationentries. Directly modifies the instance’scompositionlinks: OrderedMultiMapThe mapping of sites to Linkentries that refer to otherMonosaccharideinstancessubstituent_links: OrderedMultiMapThe mapping of sites to Linkentries that refer toSubstituentinstances.composition: CompositionAn instance of Compositioncorresponding to the elemental composition ofselfand its immediate modifications. If not provided, this will be inferred from field values.reduced: ReducedEndAn instance of ReducedEnd, or the value True, represents a reduced sugar. May be inferred frommodificationsif “aldi” is present-
__eq__(other)[source]¶ Test for equality between
Monosaccharideinstances. First try scalar equality of fields, and then compare descendants.
-
__getitem__(position)[source]¶ Gets the collection of alterations made to the carbohydrate backbone at
position. This queriesmodifications,links, andsubstituent_links.Returns: dict
-
__setstate__(state)[source]¶ Does some testing to upgrade outdated, but equivalent modification models.
-
_fast_reduce(value)[source]¶ Expedite adding a reducing end to this monosaccharide. Assumes that
valueis aReducedEndand that this monosaccharide is not already reduced.Parameters: value : ReducedEnd
Description
-
_flat_equality(other, lengths=True)[source]¶ Test for equality of all scalar-ish features that do not require recursively comparing links which in turn compare their connected units.
-
_match_substituents(other)[source]¶ Helper method for matching substituents in an order-independent fashion. Used by
topological_equality()
-
add_modification(modification, position, max_occupancy=0)[source]¶ Adds a modification instance to
modificationsat the site given byposition. This directly modifiescomposition, consequently changingmass()Parameters: position: int or ‘x’
The location to add the
Modificationto.modification: str or Modification
The modification to add. If passed a
str, it will be translated into an instance ofModificationmax_occupancy: int, optional
The maximum number of items acceptable at
position. defaults to1Returns: self, for chain callsRaises: IndexError
positionexceeds the bounds set bysuperclass.ValueError
positionis occupied by more thanmax_occupancyelements
-
add_monosaccharide(monosaccharide, position=-1, max_occupancy=0, child_position=-1, parent_loss=None, child_loss=None)[source]¶ Adds a
Monosaccharideand associatedLinktolinksat the site given byposition.>>> from glypy import monosaccharides >>> hexnac = monosaccharides.HexNAc >>> hex = monosaccharides.Hex >>> hexnac.add_monosaccharide(hex, 1) RES 1b:x-xx-HEX-1:5 2s:n-acetyl LIN 1:1d(2+1)2n >>> hexnac.links[1][0].child RES 1b:x-xx-HEX-1:5
Parameters: monosaccharide: Monosaccharide
The monosaccharide to add.
position: int or ‘x’
The location to add the
Monosaccharidelink tolinks. Defaults to -1child_position: int
The location to add the link to in
monosaccharide‘slinks. Defaults to -1.max_occupancy: int, optional
The maximum number of items acceptable at
position. Defaults to1parent_loss: Composition or str
The elemental composition removed from
selfchild_loss: Composition or str
The elemental composition removed from
monosaccharideReturns: self, for chain callsRaises: IndexError
positionexceeds the bounds set bysuperclass.ValueError
positionis occupied by more thanmax_occupancyelements
-
add_substituent(substituent, position=-1, max_occupancy=0, child_position=1, parent_loss=None, child_loss=None)[source]¶ Adds a
Substituentand associatedLinktosubstituent_linksat the site given byposition. This new substituent is included when calculating mass with substituents included.>>> from glypy import monosaccharides >>> hex = monosaccharides.Hex >>> hexnac = monosaccharides.HexNAc >>> hex.add_substituent("n-acetyl", 2, parent_loss="OH") RES 1b:x-xx-HEX-1:5 2s:n-acetyl LIN 1:1d(2+1)2n >>> hexnac == hex True
Parameters: substituent: str or Substituent
The substituent to add. If passed a
strit will be translated into an instance ofSubstituent.position: int or ‘x’
The location to add the
Substituentlink tosubstituent_links. Defaults to -1child_position: int
The location to add the link to in
substituentlinks. Defaults to -1. Substituent indices are currently not checked.max_occupancy: int, optional
The maximum number of items acceptable at
position. Defaults to1parent_loss: Composition or str
The elemental composition removed from
selfchild_loss: Composition or str
The elemental composition removed from
substituentReturns: self, for chain callsRaises: IndexError
positionexceeds the bounds set bysuperclass.ValueError
positionis occupied by more thanmax_occupancyelements
-
children()[source]¶ Returns an iterator over the
Monosaccharideinstancess which are considered the descendants ofselfAlias for
__iter__>>> from glypy import glycans >>> n_linked_core = glycans["N-Linked Core"] >>> ch = n_linked_core.root.children() >>> ch[0] (4, RES 1b:b-dglc-HEX-1:5 2s:n-acetyl LIN 1:1d(2+1)2n) >>>
Returns: listofposition: int
Location of the bond to the child
Monosaccharidechild:
MonosaccharideMonosaccharideatposition
-
clone(prop_id=False, fast=True, monosaccharide_type=None)[source]¶ Copies just this
Monosaccharideand its |Substituent|s, creating a separate instance with the same data. All mutable data structures are duplicated and distinct from the original.Does not copy any
linksas this would cause recursive duplication of the entireGlycangraph.Returns: Monosaccharide
-
drop_modification(position, modification)[source]¶ Remove the
modificationatpositionParameters: position: int
The position to drop the modification from
modification: Modification
The Modification to remove.
Returns: self, for chain callsRaises: IndexError:
If
positionis not a valid carbohydrate backbone positionValueError:
If
modificationis not found atposition
-
drop_monosaccharide(position, refund=True)[source]¶ Remove the glycosidic bond at
position, detatching a connectedMonosaccharideIf there is more than one glycosidic bond at
position, an error will be raised.>>> from glypy import glycans >>> n_linked_core = glycans["N-Linked Core"] >>> n_linked_core.root.drop_monosaccharide(4) RES 1b:b-dglc-HEX-1:5 2s:n-acetyl LIN 1:1d(2+1)2n >>> n_linked_core.mass() 221.08993720321
Parameters: position: int
The position to drop the modification from
refund: bool
Passed to
break_link()Returns: self, for chain callsRaises: IndexError:
If
positionis not a valid carbohydrate backbone positionValueError:
-
drop_substituent(position, substituent=None, refund=True)[source]¶ Remove the
substituentatposition.If
substituentisNone, then the first substituent found atpositionis removed.>>> from glypy import monosaccharides >>> hex = monosaccharides.Hex >>> hexnac = monosaccharides.HexNAc >>> hexnac.drop_substituent(2) RES 1b:x-xx-HEX-1:5 >>> hexnac == hex True
Parameters: position: int
The position to drop the modification from
substituent: Substituent
The
Substituentto remove. IfNone, the first substituent found atpositionwill be removedrefund: bool
Passed to
break_link()Returns: self, for chain callsRaises: IndexError:
If
positionis not a valid carbohydrate backbone positionValueError:
If
substituentis not found atposition
-
exact_ordering_equality(other, substituents=True, visited=None)[source]¶ Performs equality testing between two monosaccharides where the exact position (and ordering by sort) of links must to match between the input
MonosaccharideobjectsReturns: bool
-
is_occupied(position)[source]¶ Checks to see if a particular backbone position is occupied by a
Modification,Substituent, orLinkto anotherMonosaccharide.Parameters: position: int
The position to check for occupancy. Passing -1 checks for undetermined attachments.
Returns: int:
The number of occupants at
positionRaises: IndexError:
When the position is less than 1 or exceeds the limits of the carbohydrate backbone’s size.
-
mass(average=False, charge=0, mass_data=None, substituents=True)[source]¶ Calculates the total mass of
self.Parameters: average: bool, optional, defaults to False
Whether or not to use the average isotopic composition when calculating masses. When
average == False, masses are calculated using monoisotopic mass.charge: int, optional, defaults to 0
If charge is non-zero, m/z is calculated, where m is the theoretical mass, and z is
chargemass_data: dict, optional
If mass_data is None, standard NIST mass and isotopic abundance data are used. Otherwise the contents of mass_data are assumed to contain elemental mass and isotopic abundance information. Defaults to
None.substituents: bool, optional, defaults to True
Whether or not to include substituents’ masses.
Returns
——-
:class:`float`
-
open_attachment_sites(max_occupancy=0)[source]¶ When attaching
Monosaccharideinstances to other objects, bonds are formed between the carbohydrate backbone and the other object. If a site is already bound, the occupying object fills that space on the backbone and prevents other objects from binding there.Currently only cares about the availability of the hydroxyl group. As there is not a hydroxyl attached to the ring-ending carbon, that should not be considered an open site.
If any existing attached units have unknown positions, we can’t provide any known positions, in which case the list of open positions will be a
listof-1s of the length of open sites.Parameters: max_occupancy: int
The number of objects that may already be bound at a site before it is considered unavailable for attachment.
Returns: list:The positions open for binding
int:The number of bound but unknown locations on the backbone.
-
parents()[source]¶ Returns an iterator over the
Monosaccharideinstances which are considered the ancestors ofself.Returns: listofposition: int
Location of the bond to the parent
Monosaccharideparent:
MonosaccharideMonosaccharideatposition
-
reducing_end¶ Return the reducing end type of
selforNoneifselfis not reduced. The reducing end value can also be found inmodifications.If
Modification.aldiis present, it will be converted into an instance ofReducedEndwith default arguments.TODO: Remove Redundancy between
aldicheck and reduction.Returns: ReducedEnd or None
-
ring_type¶ The size of the ring-shape of the carbohydrate, as computed by ring_end - ring_start.
Returns: EnumValue:
The appropriate value of
RingType
-
substituents()[source]¶ Returns an iterator over all substituents attached to
selfby aLinkobject stored insubstituent_linksReturns: listofposition: int
Location of the bond to the substituent
substituent: Substituent
Substituentatposition
-
-
glypy.structure.monosaccharide._get_standard_composition(monosaccharide)[source]¶ Used to get initial composition for a given monosaccharide
SuperClassand modifications.Used during initialization of a
Monosaccharide.Parameters: monosaccharide: :class:`Monosaccharide`
The
Monosaccharideobject to read attributes fromReturns: The baseline composition from
monosaccharide.superclass+monosaccharide.modifications
-
glypy.structure.monosaccharide._traverse_debug(monosaccharide, visited=None, apply_fn=<function identity at 0x00000000081CCE48>)[source]¶ A low-level depth-first traversal method for unwrapped residue graphs when the
idattribute may be masking duplicate residuesParameters: monosaccharide: :class:`Monosaccharide`
Residue to start traversing from
visited: set or None
The collection of node ids to ignore, having already visited them. If
None, it defaults to the empty set.apply_fn: function
Function to apply to each residue before yielding them
Yields:
-
glypy.structure.monosaccharide.depth(monosaccharide, visited=None)[source]¶ Calculate the distance from
monosaccharideto its furthest grand-child node.
-
glypy.structure.monosaccharide.graph_clone(monosaccharide, visited=None)[source]¶ Low-level depth-first duplication method for unwrapped residue graphs
Parameters: residue: :class:`Monosaccharide`
The root of the graph to clone
visited: set or None
The collection of node ids to ignore, having already visited them. If
None, it defaults to the empty set.Returns: The root of a newly duplicated and identical residue graph
-
glypy.structure.monosaccharide.release(monosaccharide)[source]¶ Break all monosaccharide-monosaccharide links on
monosaccharide, returning them as a list. Breaking is done withrefund=TrueParameters: monosaccharide : Monosaccharide
Monosaccharideto break all links onReturns: list of tuple(link, (link.parent, link.child))
-
glypy.structure.monosaccharide.toggle(monosaccharide)[source]¶ A simple generator for declaratively masking and masking a residue’s links. The first iteration masks all links. The second unmasks them. Calls
release()Parameters: monosaccharide : Monosaccharide
Monosaccharideto mask links on
-
glypy.structure.monosaccharide.traverse(monosaccharide, visited=None, apply_fn=<function identity at 0x00000000081CCE48>)[source]¶ A low-level depth-first traversal method for unwrapped residue graphs
Parameters: monosaccharide: :class:`Monosaccharide`
Residue to start traversing from
visited: set or None
The collection of node ids to ignore, having already visited them. If
None, it defaults to the empty set.apply_fn: function
Function to apply to each residue before yielding them
Yields: