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).

ProtoSyn Hydrogen Bonds

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.HydrogenBondPairType
HydrogenBondPair(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

HydrogenBondNetwork

Examples

julia> ProtoSyn.Calculators.HydrogenBonds.HydrogenBondPair(pose.graph[1, 1, "C"], pose.graph[1, 1, "O"])
MET:1:O - MET:1:C
source
ProtoSyn.Calculators.HydrogenBonds.HydrogenBondNetworkType
HydrogenBondNetwork(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
source
ProtoSyn.Calculators.HydrogenBonds.generate_hydrogen_bond_networkFunction
generate_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
source

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_networkFunction
calc_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})
(...)
source
ProtoSyn.Calculators.HydrogenBonds.get_default_hydrogen_bond_networkFunction
get_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

fixate_hydrogen_bond_network!

Settings

  • hydrogen_bond_network::Union{HydrogenBondNetwork, Function} - Defines either the HydrogenBondNetwork predictor function or static HydrogenBondNetwork;
  • potential::Function - Define the potential to apply (calculates energy and force value from inter-atomic distance - and optionally atomic charges qi & 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
source
ProtoSyn.Calculators.HydrogenBonds.fixate_hydrogen_bond_network!Function
fixate_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
source