hydration¶
This module from DNPLab implements the process of calculating parameters that describe hydration dynamics using ODNP data as described in various studies from Songi Han and John Franck. The calculations follow:
J.M. Franck et al.; Progress in Nuclear Magnetic Resonance Spectroscopy 74 (2013) 33–56 http://dx.doi.org/10.1016/j.pnmrs.2013.06.001
J.M. Franck, S. Han; Methods in Enzymology, Chapter 5, Volume 615, (2019) 131-175 https://doi.org/10.1016/bs.mie.2018.09.024
To use the dnpHydration module first create a dictionary with the necessary inputs and add it to a workspace as 'hydration_inputs'. For example, start by defining the inputs dictionary,
import dnplab
import numpy as np
Enhancements = # list of signal enhancements
Enhancement_powers = # list of powers in Watts corresponding to Enhancements
T1s = # list of T1 values in seconds
T1_powers = # list of powers in Watts corresponding to T1s
inputs = {
'E_array' : np.array(Enhancements),
'E_powers' : np.array(Enhancement_powers),
'T1_array' : np.array(T1s),
'T1_powers' : np.array(T1_powers),
'T10': 2.0, # T1 measured with power=0
'T100': 2.5, # T1 measured with SL=0 and power=0
'spin_C': 100, # spin concentration in micromolar
'field': 350, # magnetic field in mT
'smax_model': 'tethered', # choice of smax model
'interpolate_method': 'second_order' # choice of interpolation method
}
Now you can either create a workspace and add the dictionary under the key 'hydration_inputs',
workspace = dnplab.create_workspace('hydration_inputs', inputs)
Or add to an existing workspace,
workspace.add('hydration_inputs', inputs)
In rare cases the bulk water or second order T1 interpolation constants may need to be altered. This is not necessary for the dnpHydration module to operate, but if needed this can be done by adding the dictionary 'hydration_constants' to the workspace. For example,
constants = {
'ksigma_bulk': 95.4, # bulk ksigma value
'krho_bulk': 353.4, # bulk krho value
'klow_bulk': 366, # bulk klow value
'tcorr_bulk': 54, # bulk tcorr value
'D_H2O': 2.3e-9, # bulk water diffusivity
'D_SL': 4.1e-10, # diffusivity of spin probe in bulk water
'delta_T1_water': 1 # change in water proton T1 due to microwaves
'T1_water': 2.5, # T1 of bulk water protons
'macro_C': 100, # concentration of macromolecule in uM
}
workspace.add('hydration_constants', constants)
Next, pass the workspace to dnpHydration to perform calculations using,
hydration_results = dnplab.dnpHydration.hydration(workspace)
Or for in-place operation simply use,
dnplab.dnpHydration.hydration(workspace)
If returned, hydration_results is a dictionary that has the elements listed in the table below. If only in-place operation, the workspace will now contain a 'hydration_results' dictionary. Note: even if the dictionary is returned, the 'hydration_results' dictionary is still added to the workspace
key |
type |
description |
---|---|---|
uncorrected_Ep |
numpy array |
fit to Equation 12 by varying coupling factor and p1/2 |
uncorrected_xi |
float |
coupling factor from uncorrected_Ep fit (unitless) |
interpolated_T1 |
numpy array |
interpolation of T1 measurements |
ksigma_array |
numpy array |
left side of Equation 42 |
ksigma_fit |
numpy array |
fit to Equation 42 by varying κσ and p1/2 |
ksigma |
float |
cross-relaxivity, κσ, (s-1 M-1) |
ksigma_stdd |
float |
standard deviation in κσ (s-1 M-1) |
ksigma_bulk_ratio |
float |
ratio of κσ to bulk value (κσ,bulk = 95.4 s-1 M-1). |
krho |
float |
self-relaxivity, κρ, (s-1 M-1) |
krho_bulk_ratio |
float |
ratio of κρ to bulk value (κρ,bulk = 353.4 s-1 M-1) |
klow |
float |
[(5/3)κρ - (7/3)κσ] (s-1 M-1) |
klow_bulk_ratio |
float |
ratio of κlow to bulk value (κlow,bulk = 366 s-1 M-1) |
coupling_factor |
float |
κσ / κρ (unitless) |
tcorr |
float |
translational correlation time, τcorr (ps), see Equations. 21-23 |
tcorr_bulk_ratio |
float |
ratio of τcorr to bulk value (τcorr,bulk = 54 ps) |
Dlocal |
float |
local diffusivity, Dlocal, (m2/s), see Equations 18-20 |
If needed, access the results individually as follows,
interpolated_t1 = hydration_results['interpolated_T1']
ksigma_array = hydration_results['ksigma_array']
ksigma = hydration_results['ksigma']
coupling_factor = hydration_results['coupling_factor']
etc.
Or,
interpolated_t1 = workspace['hydration_results']['interpolated_T1']
ksigma_array = workspace['hydration_results']['ksigma_array']
ksigma = workspace['hydration_results']['ksigma']
coupling_factor = workspace['hydration_results']['coupling_factor']
etc.
For explanation of 'smax_model' see https://doi.org/10.1039/c0cp02126a. For explanations of 'interpolate_method' options or any of the equations used to calculate the hydration parameters refer to http://dx.doi.org/10.1016/j.pnmrs.2013.06.001 and https://doi.org/10.1016/bs.mie.2018.09.024.