Electrostatics

The following section goes into detail on how ProtoSyn aims to evaluate electrostatic interactions, divided in the following topics:

Adding charges

The first step in any eletrostatic energy calculation is the attribution of charges to each point-like particle (i.e.: each Atom instance). Users are free to manually define each Atom's charge (by setting the corresponting pose.state[atom].δ field). More automation purposes, ProtoSyn makes available several methods to automatically set-up charges in a Pose:

ProtoSyn.Calculators.Electrostatics.assign_default_charges!Function
assign_default_charges!(pose::Pose, res_lib::LGrammar, [selection::Opt{AbstractSelection}]; [supress_warn::Bool = false])

Assign default charges to Pose pose from the given LGrammar res_lib entry, by Atom name. If an AbstractSelection selection is provided, only apply charges to the selected Atom instances. For non-canonical aminoacids and ligands (any Residue without an entry on ProtoSyn.three_2_one dictionary) and any Residue whose template have different Atom names, a warning is shown. Set supress_warn to an AbstractSelection (or a boolean true) to ignore these warnings for the selected Atom instances (or all atoms, if true, is set to false, by default).

Note:

Consider setting default atom names (from the same LGrammar), for example, using the assign_default_atom_names! method.

See also

assign_acc2_eem_charges_from_file!

Examples

julia> ProtoSyn.Calculators.Electrostatics.assign_default_charges!(pose, ProtoSyn.Peptides.grammar)
1143-element Vector{Float64}:
 -0.025115728872692304
 -0.025115728872692304
 -0.025115728872692304
 (...)
source
ProtoSyn.Calculators.Electrostatics.assign_acc2_eem_charges_from_file!Function
assign_acc2_eem_charges_from_file!(pose::Pose, filename::String, [selection::Opt{AbstractSelection}])

Open and load ACC2 charges from a file filename, apply them to the given Pose pose. If an AbstractSelection selection is provided, the loaded charge are only applied to the selected Atom instances (note that both the number of loaded charge values and number of selected atoms must match). For more information on ACC2 charges, check https://acc2.ncbr.muni.cz/

See also

assign_default_charges!

Examples

julia> ProtoSyn.Calculators.Electrostatics.assign_acc2_eem_charges_from_file!(pose, "charges.txt", aid"1:30")
30-element Vector{Float64}:
  0.26429
 -0.1422
 -0.17175
 (...)
source

Coulomb EnergyFunctionComponent

As long as a Pose has charges attributed, the default Electrostatics coulomb EnergyFunctionComponent can be applied.

ProtoSyn.Calculators.Electrostatics.calc_coulombFunction
calc_coulomb([::A], pose::Pose, selection::Opt{AbstractSelection}, update_forces::Bool = false; [mask::MaskMap = nothing], [vlist::Opt{VerletList} = nothing], [potential::Function = (x) -> 0.0]) where {A}

Calculate the Pose pose Coulomb energy according to the given potential function, based on the cartesian coordinates (make sure the Pose pose is synched, see sync!). By default, the potential returns 0.0 for each atom-pair. This function iterates over all Atom instances in the provided Pose pose (See Counters and Iterators), unless an AbstractSelection selection is provided, limiting the selected Atom instances. If the update_forces flag is set to true (false, by default), also return the calculated forces based on this potential. Note that this function assumes Atom.id entries are synched between the Graph and State (See Indexation). An optional parameter 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. This function makes use of the apply_potential! framework. As such, an optional mask and VerletList vlist can be provided to limit the calculation. Make sure the Pose pose has charges assigned (see assign_acc2_eem_charges_from_file! and assign_default_charges!).

See also

get_default_coulomb

Examples

julia> ProtoSyn.Calculators.Electrostatics.calc_coulomb(pose, nothing, false)
(0.0, [0.0 0.0 … 0.0 0.0; 0.0 0.0 … 0.0 0.0; 0.0 0.0 … 0.0 0.0])

julia> ProtoSyn.Calculators.Electrostatics.calc_coulomb(pose, nothing, false, mask = ProtoSyn.Calculators.get_intra_residue_mask, potential = ProtoSyn.Calculators.get_bump_potential_charges(c = 0.0, r = 20.0))
(-2.6046789109428206, nothing)
source
ProtoSyn.Calculators.Electrostatics.get_default_coulombFunction
get_default_coulomb(;[α::T = 1.0]) where {T <: AbstractFloat}

Return the default Coulomb EnergyFunctionComponent. α sets the component weight (on an EnergyFunction instance). This component employs the calc_coulomb method, therefore defining a Pose energy based on a given potential. By default, this EnergyFunctionComponent uses the get_bump_potential_charges potential, with an intra-residue mask (see get_intra_residue_mask).

Settings

  • mask::Function - Defines which atom-pairs to mask out of the result;
  • vlist::VerletList - If defined, the apply_potential! method will only calculate the given atom-pairs in the VerletList;
  • potential::Function - Which potential to apply to each atom-pair;

Examples

julia> ProtoSyn.Calculators.Electrostatics.get_default_coulomb()
🞧  Energy Function Component:
+---------------------------------------------------+
| Name           | Coulomb                          |
| Alpha (α)      | 1.0                              |
| Update forces  | true                             |
| Calculator     | calc_coulomb                     |
+---------------------------------------------------+
 |    +----------------------------------------------------------------------------------+
 ├──  ● Settings                      | Value                                            |
 |    +----------------------------------------------------------------------------------+
 |    | potential                     | bump_potential_charges                           |
 |    | vlist                         | nothing                                          |
 |    | mask                          | get_intra_residue_mask                           |
 |    +----------------------------------------------------------------------------------+
 |    
 └──  ○  Selection: nothing
source