Structural Bioinformatics Library
Template C++ / Python API for developping structural bioinformatics applications.
User Manual

Pointwise_interactions

Authors: F. Cazals and R. Tetley

Introduction

This package provides elementary methods to detect selected pointwise interactions within molecules, such as:

  • Salt bridges
  • Disulfide bonds

Salt bridges

This topic has a long history in structural biology [17] , [121], [74] . The difficulty in defining such interactions owes to (i) the dynamic nature of interactions, (ii) the charged status of atoms, (iii) the environment of residues, (iv) the multiplicity of H bonds (presence of bifurcated H bonds), etc.

Practically, we provide two methods to identify salt bridges. To describe them, recall that atoms of interest for acidic residues are:

  • D (ASP): OD2
  • E (GLU): OD2

Likewise, for basic residues:

  • R (ARG): NH1 and NH2
  • K (LYS): NZ
  • H (HIS): ND1 and NE2

Method 1, from [17] : based on inter atomic distances. The aforementioned atoms (one on the acidic residue, one on the basic residue) are identified. For two of them, if the minimum distance found is less than a threshold, the pair is termed a salt bridge.

Method 2, from [121] : based on distances between the center of masses of the charged groups. For both the basic and acidic residue, the center of mass of their charged groups are computed. If the distance between these is less than a user defined threshold (typically 4 $\AA$), the pair is termed a salt bridge.

To display salt bridges under VMD: make a selection with the proper atom types, as defined above, and use the Drawing method: DynamicBonds with the appropriate distance cutoff.


To display salt bridges under Pymol: Create a selection with the proper residues. Then using the Action [A] button for your selection (displayed on the righthand side of the GUI), navigate the menus: [A]->find->polar contacts->within selection.


Disulfide bonds

Disulfide bonds are defined as follows:

  • Two sulfer atoms from CYS amino acids, at distance less than 2.1 $AA$, see disulfide.
To display SS bonds under VMD make a selection with Selected atoms: resname CYS and name SG, and <Drawing method: DynamicBonds with distance cutoff : 2.1 $AA$.


To display SS bonds under Pymol: the Show menu has an option disulfide.


Algorithms

The following algorithms are used for proteins:

  • The detection of salt bridges merely requires running two loops on all amino-acids, so as to find the possibly interactions D/E (Aspartate/Glutamate) and A/L/H (Arginine/Lysine/Histidine).
  • The detection of disulfide bonds proceeds in two steps. First, all CYS a.a. are sought. Second, for each of them, it is checked whether the sulfer atom (SG) has another SG atom within 2.1 $AA$, see disulfide.

Implementation and functionalities

Design

We provide to main classes to search for Pointwise interactions:

  • SBL::CSB::T_Salt_bridges_finder < ParticleTraits >: for finding salt bridges in a given structure.
  • SBL::CSB::T_Disulfide_bonds_finder < ParticleTraits >: for finding disulfide bonds in a given structure.

The template parameter has the following requirements:

  • ParticleTraits should define anything inherent to the strucutre. That is, residues, atoms, but also their geometric representations. See the ParticleTraits package for a complete description.

Functionality

The two classes provide a member function for finding salt bridges (or disulfide bonds).

  • SBL::CSB::T_Salt_bridges_finder< ParticleTraits >: By default, this class uses Method 1 described above. Alternatively, by using the option –use-center-of-mass, the user can specify that the algorithm should instead use Method 2 (based on the center of mass of charged atoms).

  • SBL::CSB::T_Disulfide_bonds_finder< ParticleTraits >: This class simply scans all the cysteins of the structure and check if their S atoms are within a threshold distance of each other (2.1 Angstroms by default).

The output of both classes is a serialized list of the pairs of residues which form salt bridges or disulfide bonds.

Examples

Disulfide bonds finder

The following example show how to compute the set of disulfide bonds from an input PDB file.

#include <SBL/Models/Atom_with_flat_info_traits.hpp>
#include <SBL/IO/Molecular_system_loader.hpp>
#include <SBL/CSB/Disulfide_bonds_finder.hpp>
typedef Particle_traits::Molecular_system Molecular_system;
typedef SBL::CSB::T_Disulfide_bonds_finder<Particle_traits> Disulfide_bonds_finder;
int main(int argc, char *argv[])
{
if(argc < 2)
return -1;
//Loads a PDB file.
File_loader loader;
loader.set_loaded_water(false);
loader.set_loaded_file_paths({argv[1]});
bool b = loader.load(true, std::cout);
if(!b) {
return -1;
}
if(loader.get_molecular_systems().size() < 1) {
return -1;
}
std::shared_ptr<File_loader::Molecular_system> ms = loader.get_molecular_systems()[0];
if(ms->models().size() < 1) {
return -1;
}
File_loader::Molecular_system::Model& model = (ms->models().begin())->second;
Disulfide_bonds_finder finder;
finder.add_residues(model.residues_begin(),
model.residues_end());
finder.find_disulfide_bonds();
std::ofstream out("pointwise-interactions.xml");
{//to make sur the archive closes
boost::archive::xml_oarchive ar(out);
ar & boost::serialization::make_nvp("Disulfide_bonds_finder", finder);
}// to make sure the archive closes
out.close();
}
Class for loading molecular systems.
Definition Molecular_system_loader.hpp:51
bool load(unsigned verbose, std::ostream &out) override
Load function.
Definition Molecular_system_loader.hpp:343
const std::vector< std::shared_ptr< Molecular_system > > & get_molecular_systems(void) const
Retrieves the molecular systems loaded from the PDB / mmCIF file(s). This function returns a constant...
Definition Molecular_system_loader.hpp:958
SBL::CSB::Molecular_system< SBL::CSB::Default_system_items, typename Geometric_kernel::Point_3 > Molecular_system
Definition Atom_with_flat_info_traits.hpp:612
Traits class defining atoms traits (biophysical and geometric properties). Traits class defining atom...
Definition Atom_with_flat_info_traits.hpp:599

Salt bridges finder

The following example show how to compute the set of salt bridges from an input PDB file.

#include <SBL/Models/Atom_with_flat_info_traits.hpp>
#include <SBL/IO/Molecular_system_loader.hpp>
#include <SBL/CSB/Salt_bridges_finder.hpp>
typedef Particle_traits::Molecular_system Molecular_system;
typedef SBL::CSB::T_Salt_bridges_finder<Particle_traits> Salt_bridges_finder;
int main(int argc, char *argv[])
{
if(argc < 2)
return -1;
//Loads a PDB file.
File_loader loader;
loader.set_loaded_water(false);
loader.set_loaded_file_paths({argv[1]});
bool b = loader.load(true, std::cout);
if(!b) {
return -1;
}
if(loader.get_molecular_systems().size() < 1) {
return -1;
}
std::shared_ptr<File_loader::Molecular_system> ms = loader.get_molecular_systems()[0];
if(ms->models().size() < 1) {
return -1;
}
File_loader::Molecular_system::Model& model = (ms->models().begin())->second;
Salt_bridges_finder finder;
finder.add_residues(model.residues_begin(),
model.residues_end());
finder.find_salt_bridges();
std::ofstream out("pointwise-interactions.xml");
{//to make sur the archive closes
boost::archive::xml_oarchive ar(out);
ar & boost::serialization::make_nvp("Salt_bridges_finder", finder);
}// to make sure the archive closes
out.close();
}