IMP logo
IMP Reference Guide  2.9.0
The Integrative Modeling Platform
estimates.h
Go to the documentation of this file.
1 /**
2  * \file IMP/atom/estimates.h
3  * \brief Estimates of various physical quantities.
4  *
5  * Copyright 2007-2018 IMP Inventors. All rights reserved.
6  */
7 
8 #ifndef IMPATOM_ESTIMATES_H
9 #define IMPATOM_ESTIMATES_H
10 
11 #include <IMP/atom/atom_config.h>
12 #include "Residue.h"
13 #include <IMP/base_types.h>
14 
15 IMPATOM_BEGIN_NAMESPACE
16 /** @name Estimator Functions
17 
18  These functions allow you to estimate physical quantities
19  relating to biomolecules.
20 */
21 //!@{
22 
23 /*! Several protein density value references that have been proposed
24  * in the literature.
25  * - ALBER et al. (structure 2005) Estimated value 0.625 (1/1.60) Da/A3
26  * - HARPAZ et al. (1994) Computed value 0.826446=1/1.21 Da/A3
27  * - ANDERSSON and Hovmuller (1998) Computed value 1.22 g/cm3 ~ 0.7347 Da/A3
28  * - TSAI et al. (1999) Computed value 1.40 g/cm3 ~ 0.84309 Da/A3
29  * - QUILLIN and Matthews (2000) Computed value 1.43 g/cm3 ~ 0.86116 Da/A3
30  * - SQUIRE and Himmel (1979),
31  * Gekko and Noguchi (1979) Experimental value 1.37 g/cm3 ~ 0.82503 Da/A3
32  */
34  ALBER,
35  HARPAZ,
36  ANDERSSON,
37  TSAI,
38  QUILLIN,
39  SQUIRE
40 };
41 
42 //! returns the protein density value (in Da/A^3)
43 //! associated with a given reference
44 IMPATOMEXPORT double get_protein_density_from_reference(
45  ProteinDensityReference densityReference);
46 
47 //! Estimate the volume of a protein from its mass
48 /**
49  * \param[in] m the mass for which we want to output the corresponding volume
50  * \param[in] ref the protein density reference used in the computation.
51  * As a default ref is the estimate published in Alber et. al, Structure 2005.
52 */
53 IMPATOMEXPORT double get_volume_from_mass(double m,
54  ProteinDensityReference ref = ALBER);
55 
56 //! Estimate the mass of a protein from its volume
57 /**
58  * \param[in] v the volume for which we want to output the corresponding mass
59  * \param[in] ref the protein density reference used in the computation.
60  * As a default ref is the estimate published in Alber et. al, Structure 2005.
61 */
62 IMPATOMEXPORT double get_mass_from_volume(double v,
63  ProteinDensityReference ref = ALBER);
64 
65 //! Estimate the mass of a protein from the number of amino acids
66 /** We use an estimate of 110 Daltons per residue, following Chimera.
67 
68  The mass is in Daltons.
69  */
70 IMPATOMEXPORT double get_mass_from_number_of_residues(unsigned int num_aa);
71 
72 //! Return an estimate for the volume of a given residue
73 /** The volume estimates are taken from
74  Pontius J, Richelle J, Wodak SJ.,
75  \external{https://www.ncbi.nlm.nih.gov/pubmed/8950272,
76  Deviations from standard atomic volumes as a quality measure for
77  protein crystal structures}, J Mol Biol. 1996 Nov 22;264(1):121-36.
78 
79 
80  \throw ValueException if a non-standard residue type is passed
81  */
82 IMPATOMEXPORT double get_volume_from_residue_type(ResidueType rt);
83 
84 //!@}
85 
86 /** Compute the concentration in molarity from the passed values*/
87 inline double get_molarity(double n, double volume) {
88  double v = volume;
89  // n*10^27/(v *6.02e23)
90  return n * 1e4 / (v * 6.02);
91 }
92 
93 /** Compute the concentration in molarity from the passed values*/
94 inline double get_kd(double na, double nb, double nab, double volume) {
95  return get_molarity(na, volume) * get_molarity(nb, volume) /
96  get_molarity(nab, volume);
97 }
98 
99 /** Return the prediction diffusion coefficient in Angstrom squared per
100  femtosecond given a radius in angstrom.
101  See
102  \external{http://en.wikipedia.org/wiki/Einstein_relation_(kinetic_theory),
103  wikipedia} for a reference and
104  \external{http://en.wikipedia.org/wiki/Viscosity,Wikipedia on Viscosity}
105  for the values of the viscosity of water used.*/
106 IMPATOMEXPORT double get_einstein_diffusion_coefficient(double r);
107 
108 /** Return the prediction diffusion coefficient in radians squared per
109  femtosecond given a radius in angstrom.*/
110 IMPATOMEXPORT double get_einstein_rotational_diffusion_coefficient(double r);
111 
112 /** Return the standard deviation for the Brownian step in Angstroms given the
113  diffusion coefficient D in A^2/fs and the time step t in fs.*/
114 IMPATOMEXPORT double get_diffusion_length(double D, double t);
115 
116 /** Return the scale for diffusion in Angstroms given the specified force,
117  the diffusion coefficient D and the time step t.
118 
119  @param D diffusion coefficient in Angstrom^2/femtosecond
120  @param force applied force in kcal/mol/A
121  @param t time step in femtoseconds
122  @param temp temperature in Kelvin
123 */
124 IMPATOMEXPORT double get_diffusion_length(double D, double force, double t,
125  double temp = 273);
126 
127 /** Get the standard deviation of the diffusion angle change in radians given
128  the rigid body diffusion coefficient in A^2/fs and the time step dtfs in fs.*/
129 IMPATOMEXPORT double get_diffusion_angle(double D, double dtfs);
130 
131 /** Estimate the diffusion coefficient of a particle in A^2/fs from a list of
132  displacements each taken after the given time step dt. Removes any non-random
133  motion component (under the simplifying assumption it is constant over time)
134 
135  @param displacements displacement vectors in Angstroms
136  @param dt time step in femtoseconds
137 
138  @note The units of displacements and dt params could be actually
139  arbitrary. The units of thE returned value will simply change to
140  e.g. cm^2/sec if displacements and dt are specified in cm and
141  seconds, resp.
142 
143 */
144 IMPATOMEXPORT double get_diffusion_coefficient(
145  const algebra::Vector3Ds &displacements, double dt);
146 
147 /** Estimate the diffusion coefficient of a particle in A^2/fs from a list of
148  displacements each taken after the given time step dt. Removes any non-random
149  motion component (under the simplifying assumption it is constant over time)
150 
151  @param displacements displacement vectors in Angstroms
152  @param dts corresponding time steps in femtoseconds, expected to sum to more than zero
153 
154  @note The units of displacements and dt params could be actually
155  arbitrary. The units of thE returned value will simply change to
156  e.g. cm^2/sec if displacements and dts are specified in cm and
157  seconds, resp.
158 */
159 IMPATOMEXPORT
160 double get_diffusion_coefficient(const algebra::Vector3Ds &displacements,
161  const Floats &dts);
162 
163 /** Estimate the rotational diffusion coefficient of a particle in Rad^2/fs
164  from a list of rotational orientations taken at consecutive time steps dt
165  (in fs). It is assumed that the mean angular rotation is zero (as it is otherwise
166  complicated to compute from a list of orientations - may require parameter
167  estimation of the folded-normal distribution)
168 */
169 IMPATOMEXPORT double get_rotational_diffusion_coefficient(
170  const algebra::Rotation3Ds &orientations, double dt);
171 
172 /**\name Energy conversions
173 
174  Convert energy from kcal/mol to femtojoules
175  @{
176 */
177 IMPATOMEXPORT double get_energy_in_femto_joules(double energy_in_kcal_per_mol);
178 
179 //! Convert force from kcal/mol/A to femtonewtons
180 IMPATOMEXPORT double get_force_in_femto_newtons(
181  double force_in_kcal_per_mol_per_angstrom);
182 
183 //! Convert spring constant from kcal/mol/A^2 to femtonewton/A
185  double k_in_kcal_per_mol_per_angstrom_square);
186 
187 
188 
189 IMPATOM_END_NAMESPACE
190 
191 #endif /* IMPATOM_ESTIMATES_H */
double get_volume_from_residue_type(ResidueType rt)
Return an estimate for the volume of a given residue.
Basic types used by IMP.
double get_einstein_rotational_diffusion_coefficient(double r)
double get_protein_density_from_reference(ProteinDensityReference densityReference)
double get_spring_constant_in_femto_newtons_per_angstrom(double k_in_kcal_per_mol_per_angstrom_square)
Convert spring constant from kcal/mol/A^2 to femtonewton/A.
double get_mass_from_number_of_residues(unsigned int num_aa)
Estimate the mass of a protein from the number of amino acids.
double get_mass_from_volume(double v, ProteinDensityReference ref=ALBER)
Estimate the mass of a protein from its volume.
ProteinDensityReference
Definition: estimates.h:33
double get_kd(double na, double nb, double nab, double volume)
Definition: estimates.h:94
double get_diffusion_angle(double D, double dtfs)
double get_volume_from_mass(double m, ProteinDensityReference ref=ALBER)
Estimate the volume of a protein from its mass.
double get_rotational_diffusion_coefficient(const algebra::Rotation3Ds &orientations, double dt)
A decorator for Residues.
double get_molarity(double n, double volume)
Definition: estimates.h:87
double get_force_in_femto_newtons(double force_in_kcal_per_mol_per_angstrom)
Convert force from kcal/mol/A to femtonewtons.
double get_diffusion_coefficient(const algebra::Vector3Ds &displacements, const Floats &dts)
double get_diffusion_length(double D, double force, double t, double temp=273)
double get_einstein_diffusion_coefficient(double r)