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 [16] , [109], [68] . 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:

  • A (ARG): NH1 and NH2
  • L (LYS): NZ
  • H (HIS): ND1 and NE2

Method 1, from [16] : 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 [109] : 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:

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/Models/PDB_file_loader.hpp>
#include <SBL/CSB/Disulfide_bonds_finder.hpp>
typedef Particle_traits::Molecular_system Molecular_system;
int main(int argc, char *argv[])
{
if(argc < 2)
return -1;
//Loads a PDB file.
File_loader loader;
loader.set_loaded_water(false);
loader.add_input_file_name(argv[1]);
loader.load(true, std::cout);
finder.add_residues(loader.get_geometric_model(0).residues_begin(),
loader.get_geometric_model(0).residues_end());
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();
}
Definition: Disulfide_bonds_finder.hpp:65
void add_residues(InputIterator begin, InputIterator end)
Definition: Disulfide_bonds_finder.hpp:181
void find_disulfide_bonds(unsigned verbose=2, std::ostream &log=std::cout)
Definition: Disulfide_bonds_finder.hpp:201
Traits class defining atoms traits (biophysical and geometric properties). Traits class defining atom...
Definition: Atom_with_flat_info_traits.hpp:600
ESBTL::Molecular_system< SystemItems, typename Geometric_kernel::Point_3 > Molecular_system
Representation of a molecular system using the ESBTL library.
Definition: Atom_with_flat_info_traits.hpp:613
static void set_loaded_water(bool b)
Checks that water molecules are loaded.
Definition: PDB_file_loader.hpp:707
bool load(unsigned verbose, std::ostream &out)
Loads the data.
Definition: PDB_file_loader.hpp:778
static void add_input_file_name(const std::string &file_name)
Add manually the name of an input PDB file.
Definition: PDB_file_loader.hpp:596
const Molecular_geometric_model & get_geometric_model(unsigned i, unsigned n) const
Definition: PDB_file_loader.hpp:621

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/Models/PDB_file_loader.hpp>
#include <SBL/CSB/Salt_bridges_finder.hpp>
typedef Particle_traits::Molecular_system Molecular_system;
int main(int argc, char *argv[])
{
if(argc < 2)
return -1;
//Loads a PDB file.
File_loader loader;
loader.set_loaded_water(false);
loader.add_input_file_name(argv[1]);
loader.load(true, std::cout);
finder.add_residues(loader.get_geometric_model(0).residues_begin(),
loader.get_geometric_model(0).residues_end());
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();
}
Definition: Salt_bridges_finder.hpp:64
void add_residues(InputIterator begin, InputIterator end)
Definition: Salt_bridges_finder.hpp:216
void find_salt_bridges(void)
Definition: Salt_bridges_finder.hpp:236