Hydrogen bonds
ProtoSyn aims to evaluate the stabilizing energy contribution of hydrogen bonds using a simple geometric potential. For each HydrogenBondPair
in a pre-calculated HydrogenBondNetwork
, the hydrogen bond energetic contribution is given by product of a given distance-based potential (see Available potentials) by the $cos(α)cos(β)$, where $α$ and $β$ are the angles between the donor and receptor Atom
instances (in each "side" of the interaction).
Figure 1 | A schematic representation of the geometric criteria taken into account when estimating the hydrogen bonds stabilizing interactions. Besides the inter-atomic distance, ProtoSyn also calculates the $α$ and $β$ angles, with maximum energetic reward being given to planar conformations of the dimeric system.
The Hydrogen bonds section is subdivided in the following sub-sections, for organizational purposes:
Hydrogen bond network prediction
The generate_hydrogen_bond_network
attempts to identify all donor and receptor Atom
instances in a given Pose
using rudimentary criteria. This may change in future versions of ProtoSyn.
ProtoSyn.Calculators.HydrogenBonds.HydrogenBondPair
— TypeHydrogenBondPair(charged::Atom, base::Atom)
Define a new HydrogenBondPair
. An HydrogenBondPair
is a set of two bonded Atom
instances, the charged
and base
atom. As an example, in a carbonyl group (-C=O), the carbon is the base
and the oxygen is the charged
atom. It's expected that this HydrogenBondPair
is involved in hydrogen bonding interactions.
See also
Examples
julia> ProtoSyn.Calculators.HydrogenBonds.HydrogenBondPair(pose.graph[1, 1, "C"], pose.graph[1, 1, "O"])
MET:1:O - MET:1:C
ProtoSyn.Calculators.HydrogenBonds.HydrogenBondNetwork
— TypeHydrogenBondNetwork(donors::Vector{HydrogenBondPair}, acceptors::Vector{HydrogenBondPair})
Define a new HydrogenBondNetwork
, a set of donors
HydrogenBondPair
instances (strongly electronegative Atom
instances, such as N, O or F) and acceptors
HydrogenBondPair
instances (electronegative Atom
instances with a lone electron pair).
HydrogenBondNetwork()
Define an empty HydrogenBondNetwork
.
See also
calc_hydrogen_bond_network
generate_hydrogen_bond_network
Examples
julia> ProtoSyn.Calculators.HydrogenBonds.generate_hydrogen_bond_network(pose)
Donors: 131 | Acceptors: 104
julia> ProtoSyn.Calculators.HydrogenBonds.HydrogenBondNetwork()
Donors: 0 | Acceptors: 0
ProtoSyn.Calculators.HydrogenBonds.generate_hydrogen_bond_network
— Functiongenerate_hydrogen_bond_network(pose::Pose, selection::Opt{AbstractSelection} = nothing)
Attempts to predict the HydrogenBondNetwork
of a given Pose
pose
(restricted to the selected region provided by the AbstractSelection
selection
). The following simple criteria are used:
- Donors are hydrogen (H)
Atom
instances connected to a single nitrogen (N)Atom
instance; - Acceptors are oxygen (O)
Atom
instances connected to a single carbon (C)Atom
instance.
Examples
julia> ProtoSyn.Calculators.HydrogenBonds.generate_hydrogen_bond_network(pose)
Donors: 131 | Acceptors: 104
Hydrogen bonds EnergyFunctionComponent
By default, ProtoSyn generates a new HydrogenBondNetwork
each call to the default Hydrogen bonds EnergyFunctionComponent. This may cause performance losses. If no mutation/design process is being performed, consider employing fixate_hydrogen_bond_network!
to set a static HydrogenBondNetwork
.
ProtoSyn.Calculators.HydrogenBonds.calc_hydrogen_bond_network
— Functioncalc_hydrogen_bond_network([::Type{A}], pose::Pose, selection::Opt{AbstractSelection}, update_forces::Bool; [hydrogen_bond_network::Union{HydrogenBondNetwork, Function} = HydrogenBondNetwork()], [potential::Function = (x; qi = 0.0, qj = 0.0) -> 0.0]) where {A <: ProtoSyn.AbstractAccelerationType}
Calculate the Pose
pose
hydrogen bond energy according to the given potential
function (make sure the Pose
pose
is synched, see sync!
). ProtoSyn loops through the provided HydrogenBondNetwork
hydrogen_bond_network
and applied the potential
to each pair of charged Atom
instances (based on the inter-atomic distance). Besides this component, calc_hydrogen_bond_network
adds a geometric potential based on the angle between the charged Atom
instances and each base (rewards 180º conformations). Optionally, hydrogen_bond_network
can be a Function
, in which case a new HydrogenBondNetwork
is calculated. Such a custom function should have the following signature:
my_hydrogen_bond_predictor(pose::Pose, selection::Opt{AbstractSelection} = nothing)
If provided, an AbstractSelection
selection
limits the selected Atom
instances considered for HydrogenBondNetwork
prediction (if hydrogen_bond_network
is a Function
, otherwise the provided HydrogenBondNetwork
is static and selection
has no effect). 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. Note that, depending on the potential
employed, atomic charges may be required (See assign_default_charges
, for example).
See also
get_default_hydrogen_bond_network
Examples
julia> e, f, hb_pairs = ProtoSyn.Calculators.HydrogenBonds.calc_hydrogen_bond_network(pose, nothing, false, hydrogen_bond_network = hbn, potential = potential)
(-9.329167508668307, nothing, (...))
julia> hb_pairs
122-element Vector{Tuple{Atom, Atom}}:
(Atom{/2a3d:41940/A:1/MET:1/O:19}, Atom{/2a3d:41940/A:1/TRP:4/H:39})
(Atom{/2a3d:41940/A:1/MET:1/O:19}, Atom{/2a3d:41940/A:1/ALA:5/H:63})
(Atom{/2a3d:41940/A:1/GLY:2/O:26}, Atom{/2a3d:41940/A:1/ALA:5/H:63})
(...)
ProtoSyn.Calculators.HydrogenBonds.get_default_hydrogen_bond_network
— Functionget_default_hydrogen_bond_network(;[α::T = 1.0]) where {T <: AbstractFloat}
Return the default hydrogen bond EnergyFunctionComponent
. α
sets the component weight (on an EnergyFunction
instance). This component employs the calc_hydrogen_bond_network
method, therefore defining a Pose
energy based on a given potential function multiplied by a geometric angle component for each pair defined in an HydrogenBondNetwork
. By default, this EnergyFunctionComponent
uses the generate_hydrogen_bond_network
function to predict a new HydrogenBondNetwork
each call. Consider setting efc.settings[:hydrogen_bond_network]
as an HydrogenBondNetwork
to employ a static list of interacting Atom
instances (for improved performance).
See also
Settings
hydrogen_bond_network::Union{HydrogenBondNetwork, Function}
- Defines either theHydrogenBondNetwork
predictor function or staticHydrogenBondNetwork
;potential::Function
- Define the potential to apply (calculates energy and force value from inter-atomic distance - and optionally atomic chargesqi
&qj
);
Examples
julia> ProtoSyn.Calculators.HydrogenBonds.get_default_hydrogen_bond_network()
🞧 Energy Function Component:
+---------------------------------------------------+
| Name | Hydrogen_Bonds |
| Alpha (α) | 1.0 |
| Update forces | false |
| Calculator | calc_hydrogen_bond_network |
+---------------------------------------------------+
| +----------------------------------------------------------------------------------+
├── ● Settings | Value |
| +----------------------------------------------------------------------------------+
| | potential | bump_potential_charges |
| | hydrogen_bond_network | generate_hydrogen_bond_network |
| +----------------------------------------------------------------------------------+
|
└── ○ Selection: nothing
ProtoSyn.Calculators.HydrogenBonds.fixate_hydrogen_bond_network!
— Functionfixate_hydrogen_bond_network!(efc::EnergyFunctionComponent, pose::Pose)
If the given EnergyFunctionComponent
efc
is an Hydrogen Bonds EnergyFunctionComponent
(and the :hydrogen_bond_network
setting is a Function
), calculate a new HydrogenBondNetwork
and apply it as a static list of interaction Atom
instances (improved performance).
See also
get_default_hydrogen_bond_network
Examples
julia> ProtoSyn.Calculators.HydrogenBonds.fixate_hydrogen_bond_network!(efc, pose)
Donors: 131 | Acceptors: 104