Get disulfide bonds#

Identifying disulfide bridges between sulfur atoms in protein structures.

Disulfide bonds are covalent links that typically form between the sulfur atoms of cysteine residues in proteins, playing a key role in stabilizing tertiary and quaternary structures. The function molsysmt.build.get_disulfide_bonds() identifies candidate sulfur atom pairs within a maximum distance threshold. A candidate does not establish that a covalent bond is recorded in the topology.

Added in version 1.0.0.

Basic usage#

Let’s show how this function works using a protein structure loaded from PDB ID 5XJH:

import molsysmt as msm
molsys = msm.convert('5XJH')

We now apply the function to retrieve disulfide bonds based on the default maximum sulfur–sulfur distance:

msm.build.get_disulfide_bonds(molsys)
[[1782, 1907]]

The default threshold for S–S bond detection is retrieved from a predefined dictionary of typical bond lengths:

msm.element.bond.max_expected_bond_length['protein']['S']['S']
2.05 angstrom

Let’s check how many sulfur atoms are present in the system using molsysmt.basic.get():

msm.get(molsys, element='atom', selection='atom_type=="S"', n_atoms=True)
12

Next, we find pairs of sulfur atoms that are mutual nearest neighbors using molsysmt.structure.get_neighbors():

msm.structure.get_neighbors(molsys, selection='atom_type=="S"', n_neighbors=1, output_type='pairs', mutual_only=True, output_indices='atom')
([[[724, 911], [1251, 1519], [1653, 1692], [1782, 1907]]],
 [<Quantity([0.68968444 0.21195179 0.33566942 0.20483012], 'nanometer')>])

By slightly increasing the maximum bond length threshold to 2.15 angstroms, an additional disulfide candidate is identified:

msm.build.get_disulfide_bonds(molsys, max_bond_length='2.15 angstroms')
[[1251, 1519], [1782, 1907]]

Per-structure candidates and distances#

The canonical analysis API returns candidate atom pairs and their measured distances for each requested structure. The order of both lists follows structure_indices:

pairs_by_structure, distances_by_structure = msm.interactions.disulfides.get_disulfide_candidates(
    molsys, structure_indices=[0], max_bond_length='2.15 angstroms'
)
pairs_by_structure[0], distances_by_structure[0]