class

Chem::Residue

Inherits Comparable / Chem::AtomCollection / Reference / Object

Constructors

new(chain : Chain, number : Int32, insertion_code : Char | Nil, name : String)
Source
new(chain : Chain, number : Int32, name : String) : self
Source

Instance methods

<=>(other : self) : Int32

The comparison operator.

Returns -1, 0 or 1 depending on whether self precedes rhs, equals to rhs or comes after rhs. The comparison is done based on chain id, residue number, and insertion code if present.

residues = Structure.read &quot;peptide.pdb&quot;
residues[0] # =&gt; &lt;Residue A:TRP1&gt;
residues[1] # =&gt; &lt;Residue A:GLY1A&gt;
residues[2] # =&gt; &lt;Residue A:SER1B&gt;
residues[3] # =&gt; &lt;Residue A:ASN1C&gt;
residues[4] # =&gt; &lt;Residue A:VAL2&gt;
residues[5] # =&gt; &lt;Residue B:THR1&gt;
residues[6] # =&gt; &lt;Residue B:ASN2&gt;

residues[0] &lt;=&gt; residues[1] # =&gt; -1
residues[1] &lt;=&gt; residues[1] # =&gt; 0
residues[2] &lt;=&gt; residues[1] # =&gt; 1
residues[0] &lt;=&gt; residues[5] # =&gt; -1
residues[5] &lt;=&gt; residues[6] # =&gt; -1
Source
==(rhs : self) : Bool

Returns true if this residue is the same as rhs, else false.

NOTE: overrides the equality operator included by Comparable, which uses the &lt;=&gt; operator thus returning true for two different residues that have the same chain id, number and insertion code.

Source
[](atom_t : Templates::Atom) : Atom

Returns the atom that matches atom_t.

Atom must match both atom template's name and element, otherwise it raises IndexError.

residue = Structure.read(&quot;peptide.pdb&quot;).residues[0]
residue[Templates::Atom(&quot;CA&quot;)]               # =&gt; &lt;Atom A:TRP1:CA(2)
residue[Templates::Atom(&quot;CA&quot;, element: &quot;N&quot;)] # raises IndexError
residue[Templates::Atom(&quot;CX&quot;)]               # raises IndexError
Source
[](*args, **options)
Source
[](*args, **options, &)
Source
[]?(atom_t : Templates::Atom) : Atom | Nil

Returns the atom that matches atom_t.

Atom must match both atom template's name and element, otherwise it returns nil.

residue = Structure.read(&quot;peptide.pdb&quot;).residues[0]
residue[Templates::Atom(&quot;CA&quot;)]               # =&gt; &lt;Atom A:TRP1:CA(2)
residue[Templates::Atom(&quot;CA&quot;, element: &quot;N&quot;)] # =&gt; nil
residue[Templates::Atom(&quot;CX&quot;)]               # =&gt; nil
Source
[]?(*args, **options)
Source
[]?(*args, **options, &)
Source
bonded?(other : self, bond_t : Templates::Bond, strict : Bool = true) : Bool

Returns true if self is bonded to other through bond_t, otherwise false.

# Covalent ligand (JG7) is bonded to CYS sidechain
residues = Structure.read(&quot;ala-cys-thr-jg7.pdb&quot;).residues
bond_t = Templates::Bond.new &quot;C&quot;, &quot;N&quot;
residues[0].bonded?(residues[1], bond_t) # =&gt; true
residues[1].bonded?(residues[2], bond_t) # =&gt; true
residues[2].bonded?(residues[3], bond_t) # =&gt; false
residues[1].bonded?(residues[3], bond_t) # =&gt; false

Bond check follows the directionality of bond_t, that is, the left and right atoms are looked up in self and other, respectively:

residues[0].bonded?(residues[1], bond_t) # =&gt; true
residues[1].bonded?(residues[0], bond_t) # =&gt; false

Note that bond order is taken into account, e.g.:

bond_t = Templates::Bond.new &quot;C&quot;, &quot;N&quot;, order: 2
residues[0].bonded?(residues[1], bond_t) # =&gt; false

If strict is false, it uses elements only instead to look for bonded atoms, and bond order is ignored.

bond_t = Templates::Bond.new &quot;C&quot;, &quot;NX&quot;, order: 2
residues[0].bonded?(residues[1], bond_t)                # =&gt; false
residues[0].bonded?(residues[1], bond_t, strict: false) # =&gt; true
Source
bonded?(other : self, lhs : Templates::Atom | String, rhs : Templates::Atom | String, order : BondOrder | Nil = nil) : Bool

Returns true if self is bonded to other through a bond between lhs and rhs, otherwise false.

# Covalent ligand (JG7) is bonded to CYS sidechain
residues = Structure.read(&quot;ala-cys-thr-jg7.pdb&quot;).residues

One can use atom names, atom template, or elements:

a, b = Templates::Atom.new(&quot;C&quot;), Templates::Atom.new(&quot;N&quot;)
residues[0].bonded? residues[1], &quot;C&quot;, &quot;N&quot;            # =&gt; true
residues[0].bonded? residues[1], a, b                # =&gt; true
residues[0].bonded? residues[1], a, PeriodicTable::N # =&gt; true
residues[0].bonded? residues[1], PeriodicTable::C, b # =&gt; true
residues[1].bonded? residues[2], a, b                # =&gt; true
residues[1].bonded? residues[3], a, b                # =&gt; false
residues[2].bonded? residues[3], a, b                # =&gt; false

Note that lhs and rhs are looked up in self and other, respectively, i.e., the arguments are not interchangeable:

residues[0].bonded? residues[1], &quot;C&quot;, &quot;N&quot; # =&gt; true
residues[0].bonded? residues[1], &quot;N&quot;, &quot;C&quot; # =&gt; false

When atom names or atom template are specified, this method returns false if missing:

missing_atom_t = Templates::Atom.new(&quot;OZ5&quot;)
residues[0].bonded? residues[1], &quot;CX1&quot;, &quot;N&quot;             # =&gt; false
residues[0].bonded? residues[1], missing_atom_t, &quot;N&quot;    # =&gt; false
residues[0].bonded? residues[1], &quot;C&quot;, PeriodicTable::Mg # =&gt; false

When elements are specified, all atoms of that element are tested:

residues[1].bonded? residues[2], &quot;C&quot;, PeriodicTable::N  # =&gt; true
residues[1].bonded? residues[2], &quot;SG&quot;, PeriodicTable::C # =&gt; true

If order is specified, it also check for bond order, otherwise it is ignored:

residues[0].bonded? residues[1], &quot;C&quot;, &quot;N&quot;    # =&gt; true
residues[0].bonded? residues[1], &quot;C&quot;, &quot;N&quot;, 1 # =&gt; true
residues[0].bonded? residues[1], &quot;C&quot;, &quot;N&quot;, 2 # =&gt; false
Source
bonded?(other : self, lhs : Templates::Atom | String, rhs : Element, order : BondOrder | Nil = nil) : Bool

Returns true if self is bonded to other through a bond between lhs and rhs, otherwise false.

# Covalent ligand (JG7) is bonded to CYS sidechain
residues = Structure.read(&quot;ala-cys-thr-jg7.pdb&quot;).residues

One can use atom names, atom template, or elements:

a, b = Templates::Atom.new(&quot;C&quot;), Templates::Atom.new(&quot;N&quot;)
residues[0].bonded? residues[1], &quot;C&quot;, &quot;N&quot;            # =&gt; true
residues[0].bonded? residues[1], a, b                # =&gt; true
residues[0].bonded? residues[1], a, PeriodicTable::N # =&gt; true
residues[0].bonded? residues[1], PeriodicTable::C, b # =&gt; true
residues[1].bonded? residues[2], a, b                # =&gt; true
residues[1].bonded? residues[3], a, b                # =&gt; false
residues[2].bonded? residues[3], a, b                # =&gt; false

Note that lhs and rhs are looked up in self and other, respectively, i.e., the arguments are not interchangeable:

residues[0].bonded? residues[1], &quot;C&quot;, &quot;N&quot; # =&gt; true
residues[0].bonded? residues[1], &quot;N&quot;, &quot;C&quot; # =&gt; false

When atom names or atom template are specified, this method returns false if missing:

missing_atom_t = Templates::Atom.new(&quot;OZ5&quot;)
residues[0].bonded? residues[1], &quot;CX1&quot;, &quot;N&quot;             # =&gt; false
residues[0].bonded? residues[1], missing_atom_t, &quot;N&quot;    # =&gt; false
residues[0].bonded? residues[1], &quot;C&quot;, PeriodicTable::Mg # =&gt; false

When elements are specified, all atoms of that element are tested:

residues[1].bonded? residues[2], &quot;C&quot;, PeriodicTable::N  # =&gt; true
residues[1].bonded? residues[2], &quot;SG&quot;, PeriodicTable::C # =&gt; true

If order is specified, it also check for bond order, otherwise it is ignored:

residues[0].bonded? residues[1], &quot;C&quot;, &quot;N&quot;    # =&gt; true
residues[0].bonded? residues[1], &quot;C&quot;, &quot;N&quot;, 1 # =&gt; true
residues[0].bonded? residues[1], &quot;C&quot;, &quot;N&quot;, 2 # =&gt; false
Source
bonded?(other : self, lhs : Element, rhs : Templates::Atom | String, order : BondOrder | Nil = nil) : Bool

Returns true if self is bonded to other through a bond between lhs and rhs, otherwise false.

# Covalent ligand (JG7) is bonded to CYS sidechain
residues = Structure.read(&quot;ala-cys-thr-jg7.pdb&quot;).residues

One can use atom names, atom template, or elements:

a, b = Templates::Atom.new(&quot;C&quot;), Templates::Atom.new(&quot;N&quot;)
residues[0].bonded? residues[1], &quot;C&quot;, &quot;N&quot;            # =&gt; true
residues[0].bonded? residues[1], a, b                # =&gt; true
residues[0].bonded? residues[1], a, PeriodicTable::N # =&gt; true
residues[0].bonded? residues[1], PeriodicTable::C, b # =&gt; true
residues[1].bonded? residues[2], a, b                # =&gt; true
residues[1].bonded? residues[3], a, b                # =&gt; false
residues[2].bonded? residues[3], a, b                # =&gt; false

Note that lhs and rhs are looked up in self and other, respectively, i.e., the arguments are not interchangeable:

residues[0].bonded? residues[1], &quot;C&quot;, &quot;N&quot; # =&gt; true
residues[0].bonded? residues[1], &quot;N&quot;, &quot;C&quot; # =&gt; false

When atom names or atom template are specified, this method returns false if missing:

missing_atom_t = Templates::Atom.new(&quot;OZ5&quot;)
residues[0].bonded? residues[1], &quot;CX1&quot;, &quot;N&quot;             # =&gt; false
residues[0].bonded? residues[1], missing_atom_t, &quot;N&quot;    # =&gt; false
residues[0].bonded? residues[1], &quot;C&quot;, PeriodicTable::Mg # =&gt; false

When elements are specified, all atoms of that element are tested:

residues[1].bonded? residues[2], &quot;C&quot;, PeriodicTable::N  # =&gt; true
residues[1].bonded? residues[2], &quot;SG&quot;, PeriodicTable::C # =&gt; true

If order is specified, it also check for bond order, otherwise it is ignored:

residues[0].bonded? residues[1], &quot;C&quot;, &quot;N&quot;    # =&gt; true
residues[0].bonded? residues[1], &quot;C&quot;, &quot;N&quot;, 1 # =&gt; true
residues[0].bonded? residues[1], &quot;C&quot;, &quot;N&quot;, 2 # =&gt; false
Source
bonded?(other : self, lhs : Element, rhs : Element, order : BondOrder | Nil = nil) : Bool

Returns true if self is bonded to other through a bond between lhs and rhs, otherwise false.

# Covalent ligand (JG7) is bonded to CYS sidechain
residues = Structure.read(&quot;ala-cys-thr-jg7.pdb&quot;).residues

One can use atom names, atom template, or elements:

a, b = Templates::Atom.new(&quot;C&quot;), Templates::Atom.new(&quot;N&quot;)
residues[0].bonded? residues[1], &quot;C&quot;, &quot;N&quot;            # =&gt; true
residues[0].bonded? residues[1], a, b                # =&gt; true
residues[0].bonded? residues[1], a, PeriodicTable::N # =&gt; true
residues[0].bonded? residues[1], PeriodicTable::C, b # =&gt; true
residues[1].bonded? residues[2], a, b                # =&gt; true
residues[1].bonded? residues[3], a, b                # =&gt; false
residues[2].bonded? residues[3], a, b                # =&gt; false

Note that lhs and rhs are looked up in self and other, respectively, i.e., the arguments are not interchangeable:

residues[0].bonded? residues[1], &quot;C&quot;, &quot;N&quot; # =&gt; true
residues[0].bonded? residues[1], &quot;N&quot;, &quot;C&quot; # =&gt; false

When atom names or atom template are specified, this method returns false if missing:

missing_atom_t = Templates::Atom.new(&quot;OZ5&quot;)
residues[0].bonded? residues[1], &quot;CX1&quot;, &quot;N&quot;             # =&gt; false
residues[0].bonded? residues[1], missing_atom_t, &quot;N&quot;    # =&gt; false
residues[0].bonded? residues[1], &quot;C&quot;, PeriodicTable::Mg # =&gt; false

When elements are specified, all atoms of that element are tested:

residues[1].bonded? residues[2], &quot;C&quot;, PeriodicTable::N  # =&gt; true
residues[1].bonded? residues[2], &quot;SG&quot;, PeriodicTable::C # =&gt; true

If order is specified, it also check for bond order, otherwise it is ignored:

residues[0].bonded? residues[1], &quot;C&quot;, &quot;N&quot;    # =&gt; true
residues[0].bonded? residues[1], &quot;C&quot;, &quot;N&quot;, 1 # =&gt; true
residues[0].bonded? residues[1], &quot;C&quot;, &quot;N&quot;, 2 # =&gt; false
Source
bonded?(other : self) : Bool

Returns true if self is bonded to other, otherwise false. Residues may be bonded by any two atoms.

# Covalent ligand (JG7) is bonded to CYS sidechain
residues = Structure.read(&quot;ala-cys-thr-jg7.pdb&quot;).residues
residues[0].bonded?(residues[1]) # =&gt; true
residues[1].bonded?(residues[2]) # =&gt; true
residues[2].bonded?(residues[3]) # =&gt; false
residues[1].bonded?(residues[3]) # =&gt; true
Source
bonded_residues(bond_t : Templates::Bond, forward_only : Bool = true, strict : Bool = true) : Array(Residue)

Returns residues bonded through bond_t. Residues are ordered by their chain id, residue number and insertion code if present (refer to #&lt;=&gt;).

# Covalent ligand (JG7) is bonded to CYS sidechain
residues = Structure.read(&quot;ala-cys-thr-jg7.pdb&quot;).residues
bond_t = Templates::Bond.new(&quot;C&quot;, &quot;N&quot;)
residues[0].bonded_residues(bond_t).map(&amp;.name) # =&gt; [&quot;CYS&quot;]
residues[1].bonded_residues(bond_t).map(&amp;.name) # =&gt; [&quot;THR&quot;]
residues[2].bonded_residues(bond_t).map(&amp;.name) # =&gt; []
residues[3].bonded_residues(bond_t).map(&amp;.name) # =&gt; []

If forward_only is false, then bond directionality is ignored:

residues[0].bonded_residues(bond_t, forward_only: false).map(&amp;.name) # =&gt; [&quot;CYS&quot;]
residues[1].bonded_residues(bond_t, forward_only: false).map(&amp;.name) # =&gt; [&quot;ALA&quot;, &quot;THR&quot;]
residues[2].bonded_residues(bond_t, forward_only: false).map(&amp;.name) # =&gt; [&quot;CYS&quot;]
residues[3].bonded_residues(bond_t, forward_only: false).map(&amp;.name) # =&gt; []

If strict is false, bond search checks elements only, and bond order is ignored (fuzzy search). In the following example, using strict: false makes that any C-N bond is accepted regardless of atom names or bond order:

bond_t = Templates::Bond.new &quot;C&quot;, &quot;NX&quot;, order: 2
residues[0].bonded_residues(bond_t, strict: false).map(&amp;.name) # =&gt; [&quot;CYS&quot;]
residues[1].bonded_residues(bond_t, strict: false).map(&amp;.name) # =&gt; [&quot;THR&quot;]
residues[2].bonded_residues(bond_t, strict: false).map(&amp;.name) # =&gt; []
residues[3].bonded_residues(bond_t, strict: false).map(&amp;.name) # =&gt; []
Source
bonded_residues

Returns bonded residues. Residues may be bonded through any atom. Residues are ordered by their chain id, residue number and insertion code if present (refer to #&lt;=&gt;).

# Covalent ligand (JG7) is bonded to CYS sidechain
residues = Structure.read(&quot;ala-cys-thr-jg7.pdb&quot;).residues
residues[0].bonded_residues.map(&amp;.name) # =&gt; [&quot;CYS&quot;]
residues[1].bonded_residues.map(&amp;.name) # =&gt; [&quot;ALA&quot;, &quot;THR&quot;, &quot;JG7&quot;]
residues[2].bonded_residues.map(&amp;.name) # =&gt; [&quot;CYS&quot;]
residues[3].bonded_residues.map(&amp;.name) # =&gt; [&quot;CYS&quot;]
Source
chain
Source
chain=(new_chain : Chain) : Chain
Source
cis?
Source
clear
Source
code(default : Char = 'X') : Char

Returns a single-letter code associated with the residue's template. If the residue has no associated template or it doesn't have a code, the method returns default.

Source
delete(atom : Atom) : Atom | Nil
Source
dextro?

Returns true is residue is dextrorotatory, otherwise false.

A residue is considered to be dextrorotatory if the improper angle C-CA-C-CB is negative.

Note that this method returns false if the residue doesn't have any of such atoms, therefore it's not always equal to the inverse of #levo?.

Source
dig(name : String) : Atom
Source
dig?(name : String) : Atom | Nil
Source
dna?

Returns true if the residue is a DNA residue, else false.

Source
each_atom
Source
each_atom
Source
each_bonded_residue(bond_t : Templates::Bond, forward_only : Bool = true, strict : Bool = true, & : Residue -> ) : Nil

Yields each residue bonded through bond_t.

If forward_only is false, then bond directionality is ignored.

If strict is false, bond search checks elements only, and bond order is ignored (fuzzy search).

See #bonded_residues(bond_t, forward_only, strict) for examples.

Source
each_bonded_residue

Yields each bonded residue. Residues may be bonded through any atom.

See #bonded_residues for examples.

Source
has_backbone?
Source
het?

Returns true if the residue is a non-standard (HET) residue, else false.

Source
hlxparams
Source
includes?(atom : Atom) : Bool

Returns true if the residue contains atom, else false.

The check is done by name first, and then by atom equality.

Source
insertion_code
Source
insertion_code=(insertion_code : Char | Nil) : Char | Nil
Source
ion?

Returns true if the residue is a ion residue, else false.

Source
levo?

Returns true is residue is levorotatory, otherwise false.

A residue is considered to be levorotatory if the improper angle C-CA-C-CB is positive.

Note that this method returns false if the residue doesn't have any of such atoms, therefore it's not always equal to the inverse of #dextro?.

Source
membrane?

Returns true if the residue is a membrane residue, else false.

Source
n_atoms
Source
name
Source
name=(str : String) : String
Source
number
Source
number=(number : Int32) : Int32
Source
omega
Source
omega?
Source
other?

Returns true if the residue is an unknown residue, else false.

Source
phi?
Source
polymer?
Source
pred(strict : Bool = true, use_numbering : Bool = true) : Residue

Returns the preceding residue if exists, else raises Error. Refer to #pred? for details.

Source
pred?(strict : Bool = true, use_numbering : Bool = true) : Residue | Nil

Returns the preceding residue if exists, otherwise nil.

It uses the link bond type of the associated residue template, if present, to search for the previous residue. Thus, link bond determines the direction, e.g., C(i-1)-N(i). Be aware that atom types must match exactly to find a residue unless strict is false.

Otherwise, it returns a bonded residue whose number and insertion code come just before those of self. This fallback can be disabled by setting use_numbering to false.

Note that when multiple residues can be connected to the same residue (e.g., branched polymers), it returns the last residue among them.

Source
protein?

Returns true if the residue is a protein residue, else false.

Source
psi?
Source
ramachandran_angles
Source
sec=(sec : Protein::SecondaryStructure)
Source
solvent?

Returns true if the residue is a solvent residue, else false.

Source
spec(io : IO) : Nil

Writes the residue specification to the given IO.

Residue specification is a short string representation encoding residue information including chain, name, number, and insertion code.

Source
spec

Returns the residue specification.

Residue specification is a short string representation encoding residue information including chain, name, number, and insertion code.

Source
structure(*args, **options)
Source
structure(*args, **options, &)
Source
succ(strict : Bool = true, use_numbering : Bool = true) : Residue

Returns the following residue if exists, else raises Error. Refer to #succ? for details.

Source
succ?(strict : Bool = true, use_numbering : Bool = true) : Residue | Nil

Returns the following residue if exists, otherwise nil.

It uses the link bond type of the associated residue template, if present, to search for the next residue. Thus, link bond determines the direction, e.g., C(i)-N(i+1). Be aware that atom types must match exactly to find a residue unless strict is false.

Otherwise, it returns a bonded residue whose number and insertion code come just after those of self. This fallback can be disabled by setting use_numbering to false.

Note that when multiple residues can be connected to the same residue (e.g., branched polymers), it returns the first residue among them.

Source
template

Returns associated residue template if registered, otherwise nil.

The template is fetched by the residue name.

Source
to_s(io : IO)

Appends a short String representation of this object which includes its class name and its object address.

class Person
  def initialize(@name : String, @age : Int32)
  end
end

Person.new(&quot;John&quot;, 32).to_s # =&gt; #&lt;Person:0x10a199f20&gt;
Source
trans?
Source
type
Source
type=(type : ResidueType)
Source
water?

Returns true if the residue is a water residue, else false. This is done by checking if the associated residue template (if any) correspond to the water template.

Source