Structural Bioinformatics Library
Template C++ / Python API for developping structural bioinformatics applications.
|
Authors: F. Cazals and T. Dreyfus
BSA. Consider a complex involving two species, and , called partner's labels — see the package MolecularSystemLabelsTraits for a description of such labels. Denote and their associated molecular models. In general, each such model is represented by a collection of balls defining the partner's solvent accessible model. With these notations, the complex involving the two partners is defined by .
The Buried Surface Area (BSA for short) of the molecular model is the area of the surface of and which gets buried within .
More formally, let be the boundary of the union of balls in , and likewise for . The BSA is defined by the surface area exposed by the individual partners, minus that of the complex:
The BSA can be assigned to the individual partners, which yields an algorithms to compute it. To see how, let be the surface of restricted to the exposed surface of , that is, prosaically, the contribution of to the exposed surface of the complex.
The BSA associated with the partners verifies
so that one has
This package. Provides tools to
Illustration of BSA computation of a binary complex The molecular complex is decomposed using two labels (blue) and (red). The straight circular arcs are the surfaces of the restrictions and , while the dashed circular arcs are the buried surfaces of and . The BSA of is the sum of the BSAs of each restriction. |
In order to compute the BSA in the context of hierarchical labels (see the package MolecularSystemLabelsTraits for a description of this hierarchy), we need to extend the formulae in the section Introduction .
Remind that in this context, labels are the nodes of rooted trees. Let be a hierarchical label such that it is a root of one of these trees, and the set of primitive labels having as ancestor in the tree. The formulae in the section Introduction apply for but not for labels in , since for some couple of labels in , the associated restrictions possibly intersect : this means that we cannot sum the BSA of the restrictions to the labels in for computing the BSA of .
To overcome this difficulty, we consider only the restrictions to a label that is a root of a tree. Thus, there are two cases for computing the BSA associated to a label :
In this way, the BSA of any label remains additive. This case is illustrated on Fig. fig-bsa-example-IGAg with a IG-Ag complex.
There are two important remarks related to the computation of the BSA for any restriction of a molecular structure:
Illustration of BSA computation of a IGAg complex The immunoglobulin (IG) in red is decomposed onto its heavy (H) and light (L) chains. The antigen (Ag) is in blue. The straight circular arcs represent the exposed surface of the whole complex, and the non straight circular arcs represent the buried surface of each restriction in the whole complex. The dashed circular arcs represent the surface of each restriction that is buried in the whole complex, but exposed in its own partner. The sum of the BSA of the restrictions to H and L is the BSA of the restriction to IG. |
In the context of a molecular structure, each particle has a system's label identifying which partner, mediator or extra partner it belongs to. This information is mandatory for computing the BSA, but it may happen that in some context, the partners are not clearly identified, so that the particles has no label.
In section Main classes, one can find the two main classes provided by the package Buried_surface_area corresponding to the two possible situations. Then, each of these two main class leads to a module shown in section Modules .
The package Buried_surface_area provides two ways for computing the BSA:
With labels. When the partners can be specified using labels, one should use the class SBL::CSB::T_Buried_surface_area_with_labels< ParticleWithSystemLabelTraits , ParticleBSARecord , FT > : it is a functor (1) computing the BSA associated to a partner's label using the algorithm described in section Algorithms , and (2) storing the BSA on a per particle basis, using a type Particle_BSA_record – see below.
The three template parameters read as follows:
Without labels.
While the first version takes advantage of the knowledge on the composition of each partner for computing the BSAs of all primitive partners at the construction of the functor, the second version recompute the volume of the input partner each time the functor is called. Furthermore, there is no notion of hierarchy in the second version.
An object of the class SBL::CSB::T_Buried_surface_area_with_labels or SBL::CSB::T_Buried_surface_area_without_label may be constructed on two ways:
Once the object is constructed, it can be used as a function taking as argument:
In both cases, the functor returns the BSA of the particles in the input partner.
In addition to these two classes, two modules are available:
In this example, atoms of a molecule are loaded from a PDB file, then annotated with default radii and systems' label, and inserted in a -complex data structure. Then, the BSA data structure is created from the -complex and the BSA of each chain is then printed.
This example does the same work as the example of section Computing the BSA with partner's labels, but using the module SBL::CSB::T_Buried_surface_area_with_labels_module.
This example shows how to compute the BSA associated to selected partners in a molecular structure when atoms do not have an associated system's label. Assuming the input molecule is composed of three chains A, B and C, three predicates are defined for checking whether an atom is in a chain or another one. Then, after loading, annotating the particles and inserting them in the -complex, the BSA is computed for each chain using the three predicates.
This example generalizes the work done by the example of section Computing the BSA with a predicate by using the module SBL::CSB::T_Buried_surface_area_without_label_module. The main difference is that a generic predicate Is_in_partner is defined such that it is possible to iterate over the chains of the input molecule and to set the chain identifier of the current chain as the chain identifier of the predicate.