15. 常量和单位转换 MDAnalysis.units

MDAnalysis轨迹的基本单位是 Å ( 萨恩斯特伦 )用于 长度ps ( 皮科秒 )用于 time 。默认情况下,无论MD码如何存储轨迹数据,所有位置都以ä为单位,所有时间均以ps为单位。默认情况下,MDAnalysis在读取轨迹时自动转换为MDAnalysis单位,并在写入时转换回来。这使得编写与特定MD代码如何存储轨迹数据的细节无关的脚本成为可能。表中列出了其他基本单位 中编码的MDAnalysis中的基本单位 MDANALYSIS_BASE_UNITS

中编码的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'\) )就是这样

\[X‘/b’=f_{b,b‘}X/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

返回:

转换后的值。

返回类型:

float

抛出:

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 by get_conversion_factor() NOTE: any observable with a unit (i.e. one with an entry in the unit attribute) needs an entry in conversion_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. 参考文献和脚注

[Jorgensen1998] (1,2,3)

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.

脚注