Generalized Born Solvation

The Generalized Born (GB) solvation model attempts to approximate the Poisson-Boltzmann equation, using the following equation:

\[- \frac{1}{2}\left ( \frac{1}{\varepsilon_{protein} }-\frac{1}{\varepsilon_{solvent} } \right ) \sum_{i,j}^{N}\frac{q_{i}q_{j}}{f_{GB}},\]

\[f_{GB} = \sqrt{d_{ij}^{2} + \left ( \alpha_{i}\alpha_{j} e^{-\frac{d_{ij}}{4\alpha_{i}\alpha_{j}}} \right)}\]

where $\varepsilon_{protein}$ and $\varepsilon_{solvent}$ are the dieletric constants of the protein interior and of the solvent, respectively, $qi$ and $qj$ are the atomic partial charges for each interacting point-like particle, $d_{ij}$ is the inter-atomic distance of the considered particle pair and, finally, $\alpha_{i}$ and $\alpha_{j}$ are the effective Born radii of both considered interacting particles. The Born radius of an Atom is a characterization of its burial degree in the solute, and defines the interaction amount with the solvent. Despite the GB solvation model success, accurate estimation of the Born radii in a system has been the bottleneck preventing mass adoption as the go-to implicit solvent potential.

The following section has been subdivided in several sub-section for organizational purposes:

Born Radii estimation

As previously stated, Born radii estimation is a performance-intensive task. Several approaches have been devised over the years to improve both the accuracy and calculation speed in Born radii estimation. ProtoSyn employs the work of Fogolari et al. (2020) (https://pubmed.ncbi.nlm.nih.gov/31693089/), estimating the Born radii using a machine learning model.

ProtoSyn.Calculators.GB.predict_igbr_nn_born_radiiFunction
predict_igbr_nn_born_radii(pose::Pose, selection::Opt{AbstractSelection} = nothing; dm::Opt{Matrix{T}} = nothing, models::GBModels = models_onnx) where {T <: AbstractFloat}

Returns the Born Radii for each [`Atom`](@ref) instance in the given

Pose pose (selected by the AbstractSelection selection - TrueSelection, by default), according to the IGBR neural network model (See Fogolari et al. work - https://pubmed.ncbi.nlm.nih.gov/31693089/). By default, uses the pre-trained ProtoSyn.Calculators.GB.models_onnx models, but can be set to use other models with the models argument. Optionally, a pre-calculated full distance matrix dm can be provided, otherwise will calculate one using the ProtoSyn.acceleration.active mode.

See also

calc_gb

Examples

julia> ProtoSyn.Calculators.GB.predict_igbr_nn_born_radii(pose)
1140-element Vector{Float64}:
 0.4011280834674835
 0.3859025537967682
 0.5258529782295227
 (...)
source

Generalized Born solvation EnergyFunctionComponent

With the estimated Born radii, ProtoSyn employs the above-defined equations to evaluate a system's implicit solvation status using the following methods:

ProtoSyn.Calculators.GB.calc_gbFunction
calc_gb([::A], pose::Pose, selection::Opt{AbstractSelection}, [update_forces::Bool = false]; [born_radii::Union{Vector{T}, Function} = predict_igbr_nn_born_radii], [ϵ_protein::T = 1.0], [ϵ_solvent::T = 80.0], [models::GBModels = models_onnx]) where {A}

Calculate the Pose pose solvation energy according to the Generalized Born function (make sure the Pose pose is synched, see sync!). ProtoSyn uses the Generalzied Born function as described in Simmerling et al. work (See https://www.ncbi.nlm.nih.gov/pmc/articles/PMC4361090/). The protein and solvent dieletric constants can be defined using the ϵ_protein and ϵ_solvent arguments (default is 1.0 and 80.0, respectively). The Born Radii can be statically provided in the born_radii argument. Optionally, this argument can be a Function instance, in which case the Born Radii will be re-calculated, using the provided models (uses ProtoSyn.Calculators.GB.models_onnx, by default). Custom Born Radii predictors can be defined, using the following signature:

my_born_radii_predictor(pose::Pose, selection::Opt{AbstractSelection} = nothing; dm::Opt{Matrix{T}} = nothing, models::GBModels = models_onnx)

Note the presence of pre-calculated full-distance matrix dm in the Function arguments. Even if no GBModels are used in the Born Radii prediction, calc_gb still provides them and as such the custom Function signature should expect them (or use kwargs). An optional parameter A (Type{<: AbstractAccelerationType}) can be provided, stating the acceleration type used to calculate this energetic contribution (See ProtoSyn acceleration types). Uses ProtoSyn.acceleration.active by default.

See also

get_default_gb

Examples

julia> ProtoSyn.Calculators.GB.calc_gb(pose, nothing)
(124.4289232784785, nothing)
source
ProtoSyn.Calculators.GB.get_default_gbFunction
get_default_gb(;[α::T = 1.0]) where {T <: AbstractFloat}

Return the default Generalized Born EnergyFunctionComponent. α sets the component weight (on an EnergyFunction instance). This component employs the calc_gb method, therefore defining a Pose energy based on the Generalized Born function. By default, this EnergyFunctionComponent uses the predict_igbr_nn_born_radii function to predict Born Radii every call. Define efc.settings[:born_radii] as a Vector{Float64} to use static born radii.

Settings

  • born_radii::Union{Function, Vector{T}} - Defines either the born radii predictor function or static list of born radii (where T <: AbstractFloat);
  • ϵ_protein::T - Define the protein dieletric constant (where T <: AbstractFloat);
  • ϵ_solvent::T - Define the solvent dieletric constant (where T <: AbstractFloat);
  • models::GBModels - Define the GBModels to use if :born_radii is a predictor function.

Examples

julia> ProtoSyn.Calculators.GB.get_default_gb()
🞧  Energy Function Component:
+---------------------------------------------------+
| Name           | GB_Solvation                     |
| Alpha (α)      | 1.0                              |
| Update forces  | false                            |
| Calculator     | calc_gb                          |
+---------------------------------------------------+
 |    +----------------------------------------------------------------------------------+
 ├──  ● Settings                      | Value                                            |
 |    +----------------------------------------------------------------------------------+
 |    | ϵ_solvent                     | 80.0                                             |
 |    | models                        | C: ✓ | N: ✓ | H: ✓ | O: ✓ | S: ✓                 |
 |    | ϵ_protein                     | 4.0                                              |
 |    | born_radii                    | predict_igbr_nn_born_radii                       |
 |    +----------------------------------------------------------------------------------+
 |    
 └──  ○  Selection: nothing
source
Note:

Despite using modern machine learning models (which substantially cut down the performance cost of estimating accurate born radii), this step is still costly and time-consuming. In not big changes are expected in the system (for example, only small refinement movements are introduced in the system, such as when re-packaging sidechains), consider using static born radii (calculated once and provided to calc_gb as a static Vector).

Note:

Modern implicit solvation models often employ a hybrid approach, dubbed "SASA/GB". In short, the Generalized Born model attempts to estimate the enthalpic contribution of solvating a given molecule, and the SASA model calculates the entropy contribution of "opening space" for the solvation of such a molecule. Both models act together to provide a more clear picture of the solvation potential of that system. Consider employing the get_default_sasa EnergyFunctionComponent in conjunction with the get_default_gb EnergyFunctionComponent.