Protein transfer free energy and m-values
These function compute the transfer free energies of proteins from water to different solvent, using the Tanford additive transfer models.
m-values are the transfer free-energy difference, here in kcal/mol, between two structures from water to a 1M solution of a cosolvent. Estimates of m-values for denaturation events can be computed using the Creamer estimates for denatued accessible surface areas.
PDBTools.transfer_free_energy — Function
transfer_free_energy(::Type{MTRecord}, atoms::AbstractVector{<:Atom}, cosolvent::AbstractString; kargs...)Compute transfer free energies from a fixed (native) structure using the Record surface-type model and atom-resolved SASAs.
transfer_free_energy(::Type{MTRecord}, sasa_ats::SASA{CreamerUnitedAtomRadii}, cosolvent::AbstractString; kargs...)Compute fixed-state transfer free energies using Record interaction potentials and atom-resolved coarse-grained surface classes.
transfer_free_energy(atoms::AbstractVector{<:PDBTools.Atom}, cosolvent::AbstractString; kargs...)Calculates the transfer free energy (in 1M solution, in kcal/mol) using the Tanford transfer model, as implemented by Moeser and Horinek [1] or by Auton and Bolen [2,3].
Positional Arguments
atoms:: Atoms of the system (a vector of PDBTools.Atom objects)cosolvent::AbstractString: The cosolvent to consider.
Available models and cosolvents for each model:
- `Accessibility`: "betaine", "glycerol", "proline", "sarcosine", "sorbitol", "sucrose", "tmao", "trehalose", "urea"
- `AutonBolen`: "betaine", "glycerol", "proline", "sarcosine", "sorbitol", "sucrose", "tmao", "trehalose", "urea", "urea-app", "urea-mh"
- `MoeserHorinek`: "betaine", "glycerol", "proline", "sarcosine", "sorbitol", "sucrose", "tmao", "trehalose", "urea"
- `MoeserHorinekApp`: "betaine", "glycerol", "proline", "sarcosine", "sorbitol", "sucrose", "tmao", "trehalose", "urea"
- `MTRecord`: "betaine", "urea"Keyword Arguments (optional)
model::Type{<:MValueModel}=AutonBolen: The model to use for the calculation.sel::Union{String,Function}=all: Selection of atoms to consider in the calculation. Can be a selection string or a function that takes anAtomand returns aBool.backbone::Function = PDBTools.isbackbone: Function to identify backbone atoms.sidechain::Function = PDBTools.issidechain: Function to identify side chain atoms.parallel:Bool = true: Set parallelization, requires starting Julia multithreaded.unitcell=nothing: if periodic boundary conditions are used, provide a 3x3 matrix with the unitcell, or alternatively a vector of length 3 with the sides, for orthorhombic cells.
Returns
A TransferFreeEnergy object, with fields:
ntatoms::Int: Number of atoms considered.tot::Float32: Total m-value (kcal/mol/M).bb::Float32: Backbone contribution to the m-value (kcal/mol/M).sc::Float32: Side chain contribution to the m-value (kcal/mol/M).residue_contributions_bb::Vector{Float32}: Backbone contributions of each residue to the m-value.residue_contributions_sc::Vector{Float32}: Side-chain contributions of each residue to the m-value.cosolvent::String: The cosolvent considered.
Example
using PDBTools
prot = read_pdb("native.pdb")
transfer_free_energy(prot, "urea")References
- https://doi.org/10.1021/jp409934q
- https://doi.org/10.1016/s0076-6879(07)28023-1
- https://www.pnas.org/doi/10.1073/pnas.0706251104
transfer_free_energy(
sasa_ats::SASA{CreamerUnitedAtomRadii},
cosolvent::AbstractString;
model::Type{<:MValueModel}=AutonBolen,
backbone::F1=isbackbone,
sel::Union{String,Function}=all,
sidechain::F2=issidechain,
parallel::Bool=true,
)Compute transfer free energies from precomputed solvent accessible surface areas. The SASAs must have been computed with CreamerUnitedAtomRadii radii.
PDBTools.mvalue — Function
mvalue(m::CreamerDenaturedModel, cosolvent::AbstractString; model=AutonBolen)Computes an estimate of the effect of a cosolvent on the m-value of denaturation of a protein.
Example
julia> using PDBTools
julia> prot = read_pdb(PDBTools.TESTPDB, "protein");
julia> m = mvalue(CreamerDenaturedModel(prot), "urea")
MValue{AutonBolen} - 104 residues - cosolvent: "urea"
Total m-value: -1.290518 kcal mol⁻¹
Backbone contributions: -1.3936301 kcal mol⁻¹
Side-chain contributions: 0.10311211 kcal mol⁻¹
mvalue(m::MTRecordDenaturedModel, cosolvent::AbstractString; alpha=1.0)Compute Record-model m-values from coarse-grained surface interaction potentials, using Eq. 4 (Guinn et al. 2011) and the atom-resolved ΔASA between the native and fully-extended chains wrapped in m (that is, ASA of the extended chain minus ASA of the native chain, for each atom), following the original Record model.
The optional alpha keyword scales the extended-chain (denatured-state) ASA of each atom before taking the difference with the native-state ASA. The default, alpha=1.0, uses the extended-chain ASA as computed, with no adjustment; this reproduces the urea benchmarks of Guinn et al. (Table S3) well. There is no equivalent extended-chain validation set for betaine in the paper, so alpha is exposed to allow empirically fitting the denatured-state ASA scale to experimental betaine data, if needed.
mvalue(
initial_state::AbstractVector{<:Atom},
final_state::AbstractVector{<:Atom},
cosolvent::AbstractString;
sel::Union{String,Function}=all,
model::Type{<:MValueModel}=AutonBolen,
backbone::Function = isbackbone,
sidechain::Function = issidechain,
parallel:Bool = true,
unitcell=nothing,
sasa_particles::Function = sasa_particles with Creamer united atom radii and no hydrogens.
)Calculates the m-value (transfer free energy of a protein in 1M solution, in kcal/mol) using the Tanford transfer model, as implemented by Moeser and Horinek [1] or by Auton and Bolen [2,3].
Positional Arguments
initial_state: Structure of the initial state, as a vector of Atom objects.final_state: Structure of the final state, as a vector of Atom objects (e. g. the denatured sate).cosolvent::AbstractString: The cosolvent to consider (case insensitive).
Available models and cosolvents for each model:
- `Accessibility`: "betaine", "glycerol", "proline", "sarcosine", "sorbitol", "sucrose", "tmao", "trehalose", "urea"
- `AutonBolen`: "betaine", "glycerol", "proline", "sarcosine", "sorbitol", "sucrose", "tmao", "trehalose", "urea", "urea-app", "urea-mh"
- `MoeserHorinek`: "betaine", "glycerol", "proline", "sarcosine", "sorbitol", "sucrose", "tmao", "trehalose", "urea"
- `MoeserHorinekApp`: "betaine", "glycerol", "proline", "sarcosine", "sorbitol", "sucrose", "tmao", "trehalose", "urea"
- `MTRecord`: "betaine", "urea"Keyword Arguments
sel::Union{String,Function}=all: Selection of atoms to consider in the calculation. Can be a selection string or a function that takes anAtomand returns aBool.model::Type{<:MValueModel}=AutonBolen.backbone::Function = PDBTools.isbackbone: Function to identify backbone atoms.sidechain::Function = PDBTools.issidechain: Function to identify side chain atoms.parallel:Bool = true: Set parallelization, requires starting Julia multithreaded.unitcell=nothing: if periodic boundary conditions are used, provide a 3x3 matrix with the unitcell, or alternatively a vector of length 3 with the sides, for orthorhombic cells.
Returns
A MValue object, with fields:
ntatoms::Int: Number of atoms considered.tot::Float32: Total m-value (kcal/mol/M).bb::Float32: Backbone contribution to the m-value (kcal/mol/M).sc::Float32: Side chain contribution to the m-value (kcal/mol/M).residue_contributions_bb::Vector{Float32}: Backbone contributions of each residue to the m-value.residue_contributions_sc::Vector{Float32}: Side-chain contributions of each residue to the m-value.cosolvent::AbstractString: The cosolvent considered.
Example
using PDBTools
initial_state = read_pdb("native.pdb")
final_state = read_pdb("desnat.pdb")
mvalue(inital_state, final_state; model=AutonBolen, cosolvent="TMAO")References
- https://doi.org/10.1021/jp409934q
- https://doi.org/10.1016/s0076-6879(07)28023-1
- https://www.pnas.org/doi/10.1073/pnas.0706251104
mvalue(
sasa_initial::SASA{CreamerUnitedAtomRadii},
sasa_final::SASA{CreamerUnitedAtomRadii},
cosolvent::AbstractString;
sel::Union{String,Function}=all,
model::Type{<:MValueModel}=AutonBolen,
backbone::F1=isbackbone,
sidechain::F2=issidechain,
parallel::Bool=true,
) where {F1<:Function,F2<:Function}Compute m-values from precomputed solvent accessible surface areas. The SASAs must have been computed with CreamerUnitedAtomRadii radii.
Here we implement four additive transfer models: the established Auton/Bolen model, the universal-backbone Moeser/Horinek model, and the Accessibility model, which explicitly accounts for the mutual shielding between backbone and side-chain groups (see this section). (1, 2, 3). Typically, these models are used to obtain the effect of cosolvent on the structural stability of proteins, but the current implementation allows the practical use of these functions to compute m-values of more general transformations, as described in the examples.
The transfer free energy of a protein from water to a 1M solution of a cosolvent can be estimated with the transfer_free_energy function:
using PDBTools
native_state = read_pdb(PDBTools.MJC_NATIVE, "protein")
tfe = transfer_free_energy(native_state, "urea")TransferFreeEnergy{AutonBolen} - 69 residues to 1M "urea".
Total transfer free energy: -0.73953044 kcal mol⁻¹
Backbone contributions: -0.98496306 kcal mol⁻¹
Side-chain contributions: 0.24543259 kcal mol⁻¹The resulting TransferFreeEnegy object contains the information of the contribution of each residue to the transfer free energy obtained, split into backbone and side-chain contributions:
tfe.residue_contributions_bb[1]-0.086069845f0tfe.residue_contributions_sc[1]0.011580416f0When multiple protein conformations are of interest, the mvalue methods provide a direct way to compute the variations in transfer free energies associated to the states involved, as shown in the following examples.
Combining transfer free energies
TransferFreeEnergy objects (total, backbone, side-chain, and per-residue contributions) can be scaled and combined directly with *, +, and -. Adding or subtracting two of them requires both to share the same model type and cosolvent, or an ArgumentError is thrown:
Base.:+ — Method
+(t1::TransferFreeEnergy, t2::TransferFreeEnergy)Adds two TransferFreeEnergy objects computed for the same model and cosolvent, element-wise (total, backbone, side-chain, and per-residue contributions). Throws an ArgumentError if t1 and t2 have different numbers of residues or cosolvents.
This is convenient for models whose m-value is naturally defined as a difference (or scaled difference) of transfer free energies of two independent structures, instead of a per-residue comparison of a single pair of states. The MTRecord model, for example, computes its m-value this way, from the transfer free energies of the native structure and of its fully-extended chain:
tfe_native = transfer_free_energy(native_state, "urea"; model=MTRecord)
tfe_extended = transfer_free_energy(extended_chain(native_state), "urea"; model=MTRecord)
tfe_extended - tfe_nativeTransferFreeEnergy{MTRecord} - 69 residues to 1M "urea".
Total transfer free energy: -0.9539838 kcal mol⁻¹
Backbone contributions: -0.34699118 kcal mol⁻¹
Side-chain contributions: -0.6069926 kcal mol⁻¹Save and load TFE/m-value data
TransferFreeEnergy or MValue objects can be saved to a json file with save and restored with load:
MolSimToolkitShared.save — Method
save(filename::AbstractString, tfe::TransferFreeEnergy)Save TransferFreeEnergy object data to filename (json format). Load with load(TransferFreeEnergy, filename).
MolSimToolkitShared.load — Method
load(TransferFreeEnergy, filename::AbstractString)Creates a TransferFreeEnergy object from the data saved to filename, with the save(filename, tfe) function.
outfile = tempname() * ".json"
save(outfile, tfe)
tfe_loaded = load(TransferFreeEnergy, outfile)TransferFreeEnergy{AutonBolen} - 69 residues to 1M "urea".
Total transfer free energy: -0.73953044 kcal mol⁻¹
Backbone contributions: -0.98496306 kcal mol⁻¹
Side-chain contributions: 0.24543259 kcal mol⁻¹The saved file includes the transfer model name (for example, AutonBolen or MoeserHorinek), which is used when loading to reconstruct the original parametric type:
typeof(tfe)TransferFreeEnergy{AutonBolen}typeof(tfe_loaded)TransferFreeEnergy{AutonBolen}The same interface can be used for MValue objects:
MolSimToolkitShared.save — Method
save(filename::AbstractString, m::MValue)Save MValue object data to filename (json format). Load with load(MValue, filename).
MolSimToolkitShared.load — Method
load(MValue, filename::String)Creates an MValue object from the data saved to filename, with the save(filename, m) function.
desnat_state = read_pdb(PDBTools.MJC_DESNAT, "protein")
m = mvalue(native_state, desnat_state, "urea")
save(outfile, m)
m_loaded = load(MValue, outfile)MValue{AutonBolen} - 69 residues - cosolvent: "urea"
Total m-value: -1.3340737 kcal mol⁻¹
Backbone contributions: -1.4051082 kcal mol⁻¹
Side-chain contributions: 0.07103452 kcal mol⁻¹