Alternative m-value calculations
The following functions can be used to compute m-values from the variation of the SASA per residue type, which allow the use of external tools to compute the SASA. This is used mostly for testing purposes. The functions allow the use of SASAs obtained directly from the Auton & Bolen server, or from Gromacs SASA calculations. The creamer_delta_sasa function uses the same random coil models of the server and same atom radii, providing the same results for unfolding m-values.
PDBTools.mvalue_delta_sasa — Function
mvalue_delta_sasa(; model=MoeserHorinek, cosolvent="urea", atoms:AbstractVector{<:PDBTools.Atom}, sasas, type=1)Calculates the m-value (transfer free energy of a protein in 1M solution) using the Tanford transfer model, as implemented by Moeser and Horinek [1] or by Auton and Bolen [2,3].
Arguments
model: The model to be used. Must beMoeserHorinekorAutonBolen.MoeserHorinekis only implemented forcosolvent="urea", and should be more precise in that case. Other solvents are available forAutonBolen.cosolvent::AbstractString.atoms::AbstractVector{<:PDBTools.Atom}: Vector containing the atoms of the structure.sasas::AbstractDict{String, AbstractDict{Symbol, Float64}}: A dictionary containing the change in solvent accessible surface area (SASA) upon denaturation for each amino acid type. This data can be obtained from thecreamer_delta_sasafunction, the m-value server, or calculated using GROMACS:- The
creamer_delta_sasafunction provides estimated variations in SASA of a protein, using the Creamer unfolded model. - The output of the server can be parsed using the
parse_mvalue_server_sasafunction defined in this module. - Compute the SASA with
delta_sasa_per_restype, a SASA calculation utility implemented in PDBTools.jl. - SASA values can be calculated using GROMACS with the
gmx_delta_sasa_per_restypefunction defined in this module.
- The
type::Int: Specifies which SASA value to use from the provided data, because the server provides minimum, average, and maximum values, according to different denatured models for the protein. The recommended value is2for comparison with experimental data. Normally, GROMACS calculations will provide a single value, sotype=1should be used in that case.
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"Returns
A named tuple with the following fields:
tot: Total transfer free energy (kcal/mol).bb: Contribution from the backbone (kcal/mol).sc: Contribution from the side chains (kcal/mol).restype: A dictionary with the transfer free energy contributions per residue type (kcal/mol).
Each entry in the dictionary is a named tuple with bb and sc fields representing the backbone and side chain contributions, respectively.
Example calls
using PDBTools
using PDBTools: mvalue_delta_sasa,
delta_sasa_per_restype,
creamer_delta_sasa,
parse_mvalue_server_sasa,
gmx_delta_sasa_per_restype,
protein = read_pdb("protein.pdb")
# Using SASA values calculated with PDBTools.jl
sasas=delta_sasa_per_restype(native=read_pdb("native.pdb"), desnat=read_pdb("desnat.pdb"))
mvalue_delta_sasa(; model=AutonBolen, cosolvent="TMAO", atoms=protein, sasas=sasas)
# Using SASA values computed for the Creamer denatured states
sasas_from_creamer=creamer_delta_sasa(protein)
mvalue_delta_sasa(; model=MoeserHorinek, cosolvent="urea", atoms=protein, sasas=sasas_from_creamer, type=2)
# Using SASA values from the m-value server
sasas_from_server=parse_mvalue_server_sasa(server_output)
mvalue_delta_sasa(; model=MoeserHorinek, cosolvent="urea", atoms=protein, sasas=sasas_from_server, type=2)
# Using SASA values calculated with GROMACS
sasas_gmx=gmx_delta_sasa_per_restype(native_pdb="native.pdb", desnat_pdb="desnat.pdb")
mvalue_delta_sasa(; model=AutonBolen, cosolvent="TMAO", atoms=protein, sasas=sasas_gmx)References
- https://doi.org/10.1021/acs.jpcb.7b02138
- https://doi.org/10.1016/s0076-6879(07)28023-1
- https://www.pnas.org/doi/10.1073/pnas.0706251104
PDBTools.creamer_delta_sasa — Function
creamer_delta_sasa(atoms::AbstractVector{<:Atom}; sasa_parameterization=:originalComputes, for a vector of protein atoms, the predicted changes in SASA upon denaturation, using the Creamer model. Returns a dictionary that can be directly used as input to the mvalue_delta_sasa function. The output is in kcal mol⁻¹.
Three estimates are provided: 1) low-denaturation, 2) mean denaturation, 3) high denaturation. Usually the experimental data is better reproduced with the mean denaturation SASA estimate.
The optional sasa_parameterization keyword defines which denatured SASA parameterization will be used, with the published Creamer SASAs (:original - default) or the recomputed parameters based on the CATH S20 classification (:cath_s20).
Example
julia> using PDBTools
julia> using PDBTools: mvalue_delta_sasa, creamer_delta_sasa
julia> prot = read_pdb(PDBTools.TESTPDB, "protein");
julia> creamer_sasas = creamer_delta_sasa(prot)
OrderedCollections.OrderedDict{String, OrderedCollections.OrderedDict} with 19 entries:
"ALA" => OrderedDict(:sc=>(186.517, 246.017, 305.517), :bb=>(22.1491, 78.4992, 134.849))
"CYS" => OrderedDict(:sc=>(172.186, 212.386, 252.586), :bb=>(5.23014, 37.8301, 70.4301))
"ASP" => OrderedDict(:sc=>(89.46, 136.26, 183.06), :bb=>(11.6685, 59.0685, 106.469))
"TYR" => OrderedDict(:sc=>(836.652, 932.501, 1028.35), :bb=>(118.904, 190.004, 261.104))
"THR" => OrderedDict(:sc=>(133.49, 175.19, 216.89), :bb=>(66.3468, 99.0468, 131.747))
⋮ => ⋮
julia> m = mvalue_delta_sasa(;
model=AutonBolen,
cosolvent="tmao",
atoms=prot,
sasas=creamer_sasas,
type=2, # mean denatured state surface areas
);
julia> println("total = ", m.tot, "\nbackbone = ", m.bb, "\nsidechain = ", m.sc)
total = 2.0265626662789282
backbone = 3.2160695348676667
sidechain = -1.1895068685887384Reference:
Creamer TP, Srinivasan R, Rose GD. Modeling unfolded states of proteins and peptides. II. Backbone solvent accessibility. Biochemistry. 1997;36:2832–2835. doi: 10.1021/bi962819o.
PDBTools.delta_sasa_per_restype — Function
delta_sasa_per_restype(;
native::AbstractVector{<:PDBTools.Atom},
desnat::AbstractVector{<:PDBTools.Atom}
)Calculates the change in solvent accessible surface area (SASA) upon denaturation for each amino acid type using PDBTools. Returns a dictionary that can be directly used as input to the mvalue function.
Arguments
native: Vector of PDBTools.Atom objects for the native structure.desnat: Vector of PDBTools.Atom objects for the denatured structure.
Returns
A dictionary where each key is an amino acid three-letter code (e.g., "ALA", "PHE"), and the value is another dictionary with two keys: :sc for side chain SASA values and :bb for backbone SASA values. Each of these keys maps to a tuple containing a single Float64 value representing the change in SASA upon denaturation in Ų.
Optional arguments
n_dots::Int=500: Sets the precision of the SASA calculation (greater is better).backbone::Function = at -> name(at) in ("N", "CA", "C", "O"): Define what is a backbone atom.sidechain::Function = at -> !(name(at) in ("N", "CA", "C", "O")): Define what is a sidechain atom.ignore_hydrogen::Bool = true: By default, ignore all Hydrogen atoms of the structure.unitcell=nothing: By default, do not use periodic boundary conditions. To use PBCs, define A unitcell by providing either a 3x3 matrix or, for orthorhombic cells, a vector of length 3 of cell sides.
PDBTools.parse_mvalue_server_sasa — Function
parse_mvalue_server_sasa(string::AbstractString)Parses the SASA output from the m-value calculator server (http://best.bio.jhu.edu/mvalue/), into a dictionary that can be directly used as input to the mvalue function.
The input string should contain lines formatted as follows, and correspond to the SASA values for each amino acid type:
sasa_from_server = """
ALA 8 ( 11.1) 79.1 [ 147.1] | ( -13.0) 51.4 [ 115.8]
PHE 3 ( 166.9) 197.1 [ 230.2] | ( 29.4) 56.4 [ 83.4]
LEU 7 ( 475.2) 532.2 [ 589.3] | ( 89.3) 145.3 [ 201.3]
...
LYS 6 ( 171.5) 220.4 [ 269.3] | ( -4.5) 42.0 [ 88.5]
ARG 1 ( 110.2) 124.4 [ 138.6] | ( 17.1) 25.0 [ 33.0]
CYS 0 ( 0.0) 0.0 [ 0.0] | ( 0.0) 0.0 [ 0.0]
"""This data can be found in the output of the server, under the title "Sidechain and Backbone changes in Accessible Surface Area".
The function returns a dictionary where each key is an amino acid three-letter code (e.g., "ALA", "PHE"), and the value is another dictionary with two keys: :sc for side chain SASA values and :bb for backbone SASA values. Each of these keys maps to a tuple containing three Float64 values representing the minimum, average, and maximum SASA values in Ų.
PDBTools.gmx_delta_sasa_per_restype — Function
gmx_delta_sasa_per_restype(; native_pdb::AbstractString, desnat_pdb::AbstractString)Calculates the change in solvent accessible surface area (SASA) upon denaturation for each amino acid type using GROMACS. Returns a dictionary that can be directly used as input to the mvalue function.
This function requires GROMACS (gmx sasa executable) to be installed and accessible from the command line. The path to the gmx executable can be provided with the gmx keyword.
Arguments
native_pdb::AbstractString: Path to the PDB file of the native protein structure.desnat_pdb::AbstractString: Path to the PDB file of the denatured protein structure.
Optional arguments
gmx: the path to thegmxGROMACS exectuable (by default it expectsgmxto be on the path).n_dots::Int: sets the precision of the SASA grid (greater is better).backbone::Function = at -> name(at) in ("N", "CA", "C", "O"): Define what is a backbone atom.sidechain::Function = at -> !(name(at) in ("N", "CA", "C", "O")): Define what is a sidechain atom.ignore_hydrogen::Bool=true: By default, ignore all hydrogen atoms.
Returns
A dictionary where each key is an amino acid three-letter code (e.g., "ALA", "PHE"), and the value is another dictionary with two keys: :sc for side chain SASA values and :bb for backbone SASA values. Each of these keys maps to a tuple containing a single Float64 value representing the change in SASA upon denaturation in Ų.