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_sasaFunction
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 be MoeserHorinek or AutonBolen. MoeserHorinek is only implemented for cosolvent="urea", and should be more precise in that case. Other solvents are available for AutonBolen.

  • 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 the creamer_delta_sasa function, the m-value server, or calculated using GROMACS:

    • The creamer_delta_sasa function 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_sasa function 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_restype function defined in this module.
  • 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 is 2 for comparison with experimental data. Normally, GROMACS calculations will provide a single value, so type=1 should 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

  1. https://doi.org/10.1021/acs.jpcb.7b02138
  2. https://doi.org/10.1016/s0076-6879(07)28023-1
  3. https://www.pnas.org/doi/10.1073/pnas.0706251104
source
PDBTools.creamer_delta_sasaFunction
creamer_delta_sasa(atoms::AbstractVector{<:Atom}; sasa_parameterization=:original

Computes, 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.1895068685887384

Reference:

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.

source
PDBTools.delta_sasa_per_restypeFunction
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.
source
PDBTools.parse_mvalue_server_sasaFunction
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 Ų.

source
PDBTools.gmx_delta_sasa_per_restypeFunction
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.

Note

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 the gmx GROMACS exectuable (by default it expects gmx to 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 Ų.

source