15. 常量和单位转换 MDAnalysis.units
MDAnalysis轨迹的基本单位是 Å ( 萨恩斯特伦 )用于 长度 和 ps ( 皮科秒 )用于 time 。默认情况下,无论MD码如何存储轨迹数据,所有位置都以ä为单位,所有时间均以ps为单位。默认情况下,MDAnalysis在读取轨迹时自动转换为MDAnalysis单位,并在写入时转换回来。这使得编写与特定MD代码如何存储轨迹数据的细节无关的脚本成为可能。表中列出了其他基本单位 中编码的MDAnalysis中的基本单位 MDANALYSIS_BASE_UNITS 。
数量 |
单位 |
SI单位 |
---|---|---|
长度 |
奥兹 |
\(10^{{-10}}\) 我 |
时间 |
PS |
\(10^{{-12}}\) %s |
能量 |
KJ/摩尔 |
\(1.66053892103219 \times 10^{{-21}}\) J |
装药 |
\(e\) |
\(1.602176565 \times 10^{{-19}}\) 作为 |
力 |
KJ/(摩尔?) |
\(1.66053892103219 \times 10^{{-11}}\) J/m |
速度 |
?/PS |
\(100\) 米/秒 |
15.1. 实施说明
使用的所有转换 convert()
以一种简单的方式实现:换算系数 \(f_{{b,b'}}\) 从基本单位开始 \(b\) 到另一个单位 \(b'\) 是预计算并存储的(请参见 数据 )。单位数一个量的数值 \(b\) 是 \(X/b\) (例如, \(X = 1.23\,\mathrm{{ps}}\) ,数值为 \(X/\mathrm{{ps}} = 1.23\) )。 [1]
新的数值 \(X'/b'\) 数量(单位为 \(b'\) )就是这样
该函数 get_conversion_factor()
返回适当的系数 \(f_{{b,b'}}\) 。
不同单位之间的转换始终通过基本单位作为中间步骤执行:
x is in u1: from u1 to b: x' = x / factor[u1]
from b to u2: x'' = x' * factor[u2]
so f[u1,u2] = factor[u2]/factor[u1]
15.1.1. 转换
中硬编码的某些转换系数的计算示例。 units
(请参阅 数据 )。
- 密度:
基本单位是 \(\mathrm{{Å}}^{{-3}}\) ::
n/x = n/A**3 * densityUnit_factor[x]
如何计算换算系数的示例 \(f_{{\mathrm{{Å}}^{{-3}},\mathrm{{nm}}^{{-3}}}}\) 从… \(\mathrm{{Å}}^{{-3}}\) 至 \(\mathrm{{nm}}^{{-3}}\) :
\[F_{\mathm^{-3},\mathm{nm}^{-3} =\frac{1\,\mathm{nm}^{-3}}{1\,\mathm{-3}} =\frac{(10\,\mathm{ä})^{-3}}{1\,\mathm}^{-3}} =10^{-3}\]- 专注度:
如何将转换系数转换为摩尔(摩尔/l)的示例:
factor = 1 A**-3 / (N_Avogadro * (10**-9 dm)**-3)
相对于密度R0in \(g/cm^3\) ::
M(H2O) = 18 g/mol Molar mass of water factor = 1/(1e-24 * N_Avogadro / M(H2O))
从… \(\rho/\rho_0 = n/(N_A * M^{{-1}}) / \rho_0\)
哪里 \([n] = 1/Volume\) , \([\rho] = mass/Volume\)
备注
在将来,我们可能会使用 Quantities 包装或 scipy.constants
。
15.2. 功能
- MDAnalysis.units.get_conversion_factor(unit_type, u1, u2)[源代码]
以基本单位为中介生成换算系数U1->U2
F [u1 -> u2] =系数 [u2] /因数 [u1]
转换为 \(X\) (在U1中)至 \(X'\) (U2):
\(X'\) = conversion_factor * \(X\)
- MDAnalysis.units.convert(x, u1, u2)[源代码]
转换值 x 以单位计 u1 实现新的价值 u2 。
- 返回:
转换后的值。
- 返回类型:
- 抛出:
ValueError -- 单位未知,或者试图在不兼容的单位之间进行转换。
15.3. 数据
- MDAnalysis.units.MDANALYSIS_BASE_UNITS = {'charge': 'e', 'energy': 'kJ/mol', 'force': 'kJ/(mol*A)', 'length': 'A', 'speed': 'A/ps', 'time': 'ps'}
MDAnalysis中基本单位的查阅表格(按单位类型)。
- MDAnalysis.units.constants = {'Boltzmann_constant': 0.008314462159, 'N_Avogadro': 6.02214129e+23, 'calorie': 4.184, 'electric_constant': 0.00552635, 'elementary_charge': 1.602176565e-19}
物理常量的值取自 CODATA 2010 at NIST 。热化学卡路里定义在 ISO 80000-5:2007 标准版,也列在 NIST Guide to SI: Appendix B.8: Factors for Units 。
在 0.9.0 版本加入.
- MDAnalysis.units.lengthUnit_factor = {'A': 1.0, 'Angstrom': 1.0, 'angstrom': 1.0, 'femtometer': 100000.0, 'fm': 100000.0, 'nanometer': 0.1, 'nm': 0.1, 'picometer': 100.0, 'pm': 100.0, 'Å': 1.0}
的基本单位 长度 在MDAnalysis中的是Angstrom。基本单位与其他长度单位之间的换算系数 x 都被储存起来。随后进行了转换 L/x = L/Angstrom * lengthUnit_factor[x] 。 x 可以是 nm / 纳米级 或 fm 。
- MDAnalysis.units.water = {'MolarMass': 18.016, 'SPC': 0.985, 'TIP3P': 1.002, 'TIP4P': 1.001, 'exp': 0.997}
- T=298K,P=1atm时的水密度值 [Jorgensen1998] 。
型号
G厘米**-3
SPC
0.985(1)
TIP3P
1.002(1)
TIP4P
1.001(1)
EXP
0.997
摩尔质量为18.016克摩尔**-1。
- MDAnalysis.units.densityUnit_factor = {'A^{-3}': 1.0, 'Angstrom^{-3}': 1.0, 'Molar': 1660.5389210321898, 'SPC': 30.37184690488927, 'TIP3P': 29.85655608913766, 'TIP4P': 29.886382818497438, 'nanometer^{-3}': 1000.0, 'nm^{-3}': 1000.0, 'water': 30.00628806551247, 'Å^{-3}': 1.0}
的基本单位 密度 是Angstrom吗 (-3), i.e. the volume per molecule in A 3.特别是对于水,可以方便地测量相对于散装的密度,因此许多值预先存储在
water
。
- MDAnalysis.units.timeUnit_factor = {'AKMA': 20.45482949774598, 'femtosecond': 1000.0, 'fs': 1000.0, 'microsecond': 1e-06, 'millisecond': 1e-09, 'ms': 1e-09, 'nanosecond': 0.001, 'ns': 0.001, 'picosecond': 1.0, 'ps': 1.0, 's': 1e-12, 'sec': 1e-12, 'second': 1e-12, 'us': 1e-06, 'μs': 1e-06}
为 time ,基本单位是PS;特别是CHARMM的1 AKMA 时间单位=4.888821E-14秒。
- MDAnalysis.units.speedUnit_factor = {'A/AKMA': 0.04888821, 'A/fs': 1000.0, 'A/ms': 1e-09, 'A/ps': 1.0, 'A/us': 1e-06, 'Angstrom/AKMA': 0.04888821, 'Angstrom/femtosecond': 1000.0, 'Angstrom/fs': 1000.0, 'Angstrom/microsecond': 1e-06, 'Angstrom/millisecond': 1e-09, 'Angstrom/ms': 1e-09, 'Angstrom/picosecond': 1.0, 'Angstrom/ps': 1.0, 'Angstrom/us': 1e-06, 'Angstrom/μs': 1e-06, 'angstrom/femtosecond': 1000.0, 'angstrom/fs': 1000.0, 'angstrom/microsecond': 1e-06, 'angstrom/millisecond': 1e-09, 'angstrom/ms': 1e-09, 'angstrom/picosecond': 1.0, 'angstrom/us': 1e-06, 'angstrom/μs': 1e-06, 'm/s': 100.0, 'nanometer/picosecond': 0.1, 'nanometer/ps': 0.1, 'nm/ns': 100.0, 'nm/ps': 0.1, 'pm/ps': 100.0, 'Å/ps': 1.0}
为 速度 ,基本单位为埃/秒。
- MDAnalysis.units.forceUnit_factor = {'J/m': 1.66053892103219e-11, 'N': 1.66053892103219e-11, 'Newton': 1.66053892103219e-11, 'kJ/(mol*A)': 1.0, 'kJ/(mol*Angstrom)': 1.0, 'kJ/(mol*nm)': 10.0, 'kJ/(mol*Å)': 1.0, 'kcal/(mol*Angstrom)': 0.2390057361376673}
为 力 基本单位是kJ/(摩尔*埃)。
- MDAnalysis.units.chargeUnit_factor = {'Amber': 18.2223, 'As': 1.602176565e-19, 'C': 1.602176565e-19, 'e': 1.0}
Charge is measured in multiples of the electron charge e, with the value elementary_charge in
constants
. The conversion factor to Amber charge units is 18.2223.在 0.9.0 版本发生变更: 将CODATA 2010值用于 基本电荷 ,它与以前使用的值不同 e =1.602176487 x 10**(-19)C x 7.8000000e-27 C
- MDAnalysis.units.conversion_factor = {'charge': {'Amber': 18.2223, 'As': 1.602176565e-19, 'C': 1.602176565e-19, 'e': 1.0}, 'density': {'A^{-3}': 1.0, 'Angstrom^{-3}': 1.0, 'Molar': 1660.5389210321898, 'SPC': 30.37184690488927, 'TIP3P': 29.85655608913766, 'TIP4P': 29.886382818497438, 'nanometer^{-3}': 1000.0, 'nm^{-3}': 1000.0, 'water': 30.00628806551247, 'Å^{-3}': 1.0}, 'energy': {'J': 1.66053892103219e-21, 'eV': 0.01036426919046959, 'kJ/mol': 1.0, 'kcal/mol': 0.2390057361376673}, 'force': {'J/m': 1.66053892103219e-11, 'N': 1.66053892103219e-11, 'Newton': 1.66053892103219e-11, 'kJ/(mol*A)': 1.0, 'kJ/(mol*Angstrom)': 1.0, 'kJ/(mol*nm)': 10.0, 'kJ/(mol*Å)': 1.0, 'kcal/(mol*Angstrom)': 0.2390057361376673}, 'length': {'A': 1.0, 'Angstrom': 1.0, 'angstrom': 1.0, 'femtometer': 100000.0, 'fm': 100000.0, 'nanometer': 0.1, 'nm': 0.1, 'picometer': 100.0, 'pm': 100.0, 'Å': 1.0}, 'speed': {'A/AKMA': 0.04888821, 'A/fs': 1000.0, 'A/ms': 1e-09, 'A/ps': 1.0, 'A/us': 1e-06, 'Angstrom/AKMA': 0.04888821, 'Angstrom/femtosecond': 1000.0, 'Angstrom/fs': 1000.0, 'Angstrom/microsecond': 1e-06, 'Angstrom/millisecond': 1e-09, 'Angstrom/ms': 1e-09, 'Angstrom/picosecond': 1.0, 'Angstrom/ps': 1.0, 'Angstrom/us': 1e-06, 'Angstrom/μs': 1e-06, 'angstrom/femtosecond': 1000.0, 'angstrom/fs': 1000.0, 'angstrom/microsecond': 1e-06, 'angstrom/millisecond': 1e-09, 'angstrom/ms': 1e-09, 'angstrom/picosecond': 1.0, 'angstrom/us': 1e-06, 'angstrom/μs': 1e-06, 'm/s': 100.0, 'nanometer/picosecond': 0.1, 'nanometer/ps': 0.1, 'nm/ns': 100.0, 'nm/ps': 0.1, 'pm/ps': 100.0, 'Å/ps': 1.0}, 'time': {'AKMA': 20.45482949774598, 'femtosecond': 1000.0, 'fs': 1000.0, 'microsecond': 1e-06, 'millisecond': 1e-09, 'ms': 1e-09, 'nanosecond': 0.001, 'ns': 0.001, 'picosecond': 1.0, 'ps': 1.0, 's': 1e-12, 'sec': 1e-12, 'second': 1e-12, 'us': 1e-06, 'μs': 1e-06}}
conversion_factor
is used byget_conversion_factor()
NOTE: any observable with a unit (i.e. one with an entry in theunit
attribute) needs an entry inconversion_factor
- MDAnalysis.units.unit_types = {'A': 'length', 'A/AKMA': 'speed', 'A/fs': 'speed', 'A/ms': 'speed', 'A/ps': 'speed', 'A/us': 'speed', 'AKMA': 'time', 'A^{-3}': 'density', 'Amber': 'charge', 'Angstrom': 'length', 'Angstrom/AKMA': 'speed', 'Angstrom/femtosecond': 'speed', 'Angstrom/fs': 'speed', 'Angstrom/microsecond': 'speed', 'Angstrom/millisecond': 'speed', 'Angstrom/ms': 'speed', 'Angstrom/picosecond': 'speed', 'Angstrom/ps': 'speed', 'Angstrom/us': 'speed', 'Angstrom/μs': 'speed', 'Angstrom^{-3}': 'density', 'As': 'charge', 'C': 'charge', 'J': 'energy', 'J/m': 'force', 'Molar': 'density', 'N': 'force', 'Newton': 'force', 'SPC': 'density', 'TIP3P': 'density', 'TIP4P': 'density', 'angstrom': 'length', 'angstrom/femtosecond': 'speed', 'angstrom/fs': 'speed', 'angstrom/microsecond': 'speed', 'angstrom/millisecond': 'speed', 'angstrom/ms': 'speed', 'angstrom/picosecond': 'speed', 'angstrom/us': 'speed', 'angstrom/μs': 'speed', 'e': 'charge', 'eV': 'energy', 'femtometer': 'length', 'femtosecond': 'time', 'fm': 'length', 'fs': 'time', 'kJ/(mol*A)': 'force', 'kJ/(mol*Angstrom)': 'force', 'kJ/(mol*nm)': 'force', 'kJ/(mol*Å)': 'force', 'kJ/mol': 'energy', 'kcal/(mol*Angstrom)': 'force', 'kcal/mol': 'energy', 'm/s': 'speed', 'microsecond': 'time', 'millisecond': 'time', 'ms': 'time', 'nanometer': 'length', 'nanometer/picosecond': 'speed', 'nanometer/ps': 'speed', 'nanometer^{-3}': 'density', 'nanosecond': 'time', 'nm': 'length', 'nm/ns': 'speed', 'nm/ps': 'speed', 'nm^{-3}': 'density', 'ns': 'time', 'picometer': 'length', 'picosecond': 'time', 'pm': 'length', 'pm/ps': 'speed', 'ps': 'time', 's': 'time', 'sec': 'time', 'second': 'time', 'us': 'time', 'water': 'density', 'μs': 'time', 'Å': 'length', 'Å/ps': 'speed', 'Å^{-3}': 'density'}
返回已知输入单位的单位类型。注意:任何单位都必须 独一无二的 因为这个词是用来猜单位类型的。
- 类型:
生成的查找表(DICT)
15.4. 参考文献和脚注
William L. Jorgensen and Corky Jenson. Temperature dependence of tip3p, spc, and tip4p water from npt monte carlo simulations: seeking temperatures of maximum density. Journal of Computational Chemistry, 19(10):1179–1186, 1998. doi:https://doi.org/10.1002/(SICI)1096-987X(19980730)19:10<1179::AID-JCC6>3.0.CO;2-J.