6.19. 琥珀色轨迹 MDAnalysis.coordinates.TRJ

AMBER 会写字 ASCII trajectories (“traj”)和 binary trajectories (“netcdf”)。MDAnalysis支持两种格式的读取和二进制轨迹的写入。

备注

对琥珀的支持仍在一定程度上 实验性的 并高度赞赏反馈和贡献。使用 Issue Tracker 或通过以下方式联系 MDAnalysis mailinglist

单位

琥珀色轨迹假定为以下单位:

  • 长度(埃)

  • 时间单位为PS(但见下文)

6.19.1. 二进制NetCDF轨迹

这个 AMBER netcdf 使用的格式 NetCDF (网络通用数据表单)格式。这样的二进制轨迹在MDAnalysis中由“.ncdf”后缀识别,并由 NCDFReader

双星轨迹还可以包含速度和力,并可以记录准确的时间步长。原则上,轨迹可以使用不同的单位,而不是琥珀色的默认单位?ngström和皮秒,但目前MDAnalysis仅支持这些单位,并将引发 NotImplementedError 如果检测到其他任何东西。

class MDAnalysis.coordinates.TRJ.NCDFReader(filename, n_atoms=None, mmap=None, **kwargs)[源代码]

阅读器 AMBER NETCDF format (版本1.0)。

琥珀色二进制轨迹由文件扩展名“.ncdf”自动识别。

原子的数量 (n_atoms )不需要提供,因为它可以从轨迹中读取。轨迹阅读器可以随机访问帧,因此支持直接索引(基于0的帧索引)和全功能轨迹迭代,包括切片。

速度被自动检测并读入 Timestep._velocities 属性。

力被自动检测并读入 Timestep._forces 属性。

检测周期性单元格信息并将其用于填充 Timestep.dimensions 属性。(如果轨迹中没有可用的单位单元格,则 Timestep.dimensions 会回来的 [0,0,0,0,0,0] )。

当前限制:

  • 仅处理时间单位为ps、长度单位为埃的轨迹

NCDF阅读器使用 scipy.io.netcdf 因此, scipy 必须安装。它支持 mmap 关键字参数(读取时): mmap=True 内存效率高,并将磁盘上的轨迹直接映射到内存(使用 mmap ); mmap=False 可能会消耗大量内存,因为它会将整个轨迹加载到内存中,但它可能会更快。默认为 mmap=None 然后是的默认行为 scipy.io.netcdf_file 盛行,即 True 什么时候 文件名 是一个文件名, False 什么时候 文件名 是一个类似文件的对象。

参见

NCDFWriter

在 0.10.0 版本发生变更: 增加了读取力的能力

在 0.11.0 版本发生变更: 帧标签现在从0开始,而不是从1开始。科瓦格 delta 已重命名为 dt ,为了与其他阅读器保持一致。

在 0.17.0 版本发生变更: 用途 scipy.io.netcdf 并支持 mmap 科瓦格。

在 0.20.0 版本发生变更: 现在读取所有预期的琥珀约定变量的SCALE_FACTS。时间步长变量现在遵循标准的MDAnalysis单位,长度为埃,时间为ps,速度为埃/秒,力为kJ/(摩尔*埃)。需要指出的是,在0.19.2及更早的版本中,速度通常用埃/阿克马时间单位来报告(第2323号问题)。

在 1.0.0 版本发生变更: 支持阅读 degrees 单位为 cell_angles 现已删除(问题#2327)

在 2.0.0 版本发生变更: 现在使用可拾取的 scipy.io.netcdf_file -- NCDFPicklable 。阅读 dt 如果出现以下情况,则默认为1.0 ps dt 无法从轨迹的前两帧提取。 Writer() 现在还设置了 convert_unitsvelocitiesforcesscale_factor 提供给 NCDFWriter

Writer(filename, **kwargs)[源代码]

返回的NCDFWriter filename 使用与此NCDF相同的参数。

所有值都可以通过关键字参数进行更改。

参数:
  • filename (str) -- 输出NCDF轨迹的文件名

  • n_atoms (int (optional)) -- 原子数

  • remarks (str (optional)) -- 存储在标题字段中的字符串

  • convert_units (bool (optional)) -- True :单位转换为琥珀色基本格式

  • velocities (bool (optional)) -- 将速度写入轨迹

  • forces (bool (optional)) -- 将力写入轨迹

  • scale_time (float (optional)) -- 时间单位的比例因数

  • scale_cell_lengths (float (optional)) -- 单元格长度的比例因子

  • scale_cell_angles (float (optional)) -- 单元格角度的比例因子

  • scale_coordinates (float (optional)) -- 坐标的比例因子

  • scale_velocities (float (optional)) -- 速度标度因数

  • scale_forces (float (optional)) -- 力的比例系数

返回类型:

NCDFWriter

close()[源代码]

关闭轨迹;任何进一步的访问都将引发 IOError

备注

潜在的 scipy.io.netcdf 模块可以使用以下命令打开netcdf文件 mmap 如果 mmap=True 已经设置好了。因此 any 对数组的引用 must 在可以关闭文件之前将其删除。

static parse_n_atoms(filename, **kwargs)[源代码]

读取坐标文件并推算出原子数

返回:

n_atoms --坐标文件中的原子数

返回类型:

int

抛出:

NotImplementedError -- 当原子的数量无法推断时

units = {'force': 'kcal/(mol*Angstrom)', 'length': 'Angstrom', 'time': 'ps', 'velocity': 'Angstrom/ps'}

带有以下单位的词典 time长度 (及 速度 ..用于支持它的格式)

class MDAnalysis.coordinates.TRJ.NCDFWriter(filename, n_atoms, remarks=None, convert_units=True, velocities=False, forces=False, scale_time=None, scale_cell_lengths=None, scale_cell_angles=None, scale_coordinates=None, scale_velocities=None, scale_forces=None, **kwargs)[源代码]

撰稿人 AMBER NETCDF format (版本1.0)。

琥珀色二进制轨迹由文件扩展名“.ncdf”或“.nc”自动识别。

如果在输入中检测到速度,则将其写出 Timestep 。轨迹的长度和时间总是用?ngström写成(因此,速度?

时间、速度、单元格长度、单元格角度、坐标、速度或力的比例因子变量可以传递到编写器中。如果是,它们将被写入NetCDF文件。在这种情况下,轨迹数据将被写入除以比例因子值的NetCDF文件。默认情况下,不写入比例因子变量。唯一的例外是速度,它被设置为20.455,复制了琥珀的默认行为。

如果可用,则写入单元格信息。

参数:
  • filename (str) -- 输出文件的名称

  • n_atoms (int) -- 轨迹文件中的原子数

  • convert_units (bool (optional)) -- True :单位转换为琥珀基本格式; [True]

  • velocities (bool (optional)) -- 将速度写入轨迹 [False]

  • forces (bool (optional)) -- 将力写入轨迹 [False]

  • scale_time (float (optional)) -- 时间单位的比例因数 [None]

  • scale_cell_lengths (float (optional)) -- 单元格长度的比例因子 [None]

  • scale_cell_angles (float (optional)) -- 单元格角度的比例因子 [None]

  • scale_coordinates (float (optional)) -- 坐标的比例因子 [None]

  • scale_velocities (float (optional)) -- 速度标度因数 [20.455]

  • scale_forces (float (optional)) -- 力的比例系数 [None]

备注

MDAnalysis使用 scipy.io.netcdf 访问采用netcdf 3格式的琥珀文件。虽然 scipy.io.netcdf 在读取这些文件方面速度非常快,它是 very 写入时速度较慢,文件越长,写入速度越慢。另一方面, netCDF4 包(需要安装编译后的netcdf库)写得很快,但读起来很慢。因此,我们尝试使用 netCDF4 用于写入(如果可用),否则将回退到较慢的 scipy.io.netcdf

琥珀色用户 可能很难让netCDF4与基于Conda的安装一起工作(如中所述 Issue #506 )由于Amber本身处理netcdf的方式:加载Amber环境时,尝试导入netCDF4时可能会发生以下情况:

>>> import netCDF4
Traceback (most recent call last):
  File "<string>", line 1, in <module>
  File "/scratch2/miniconda/envs/py35/lib/python3.5/site-packages/netCDF4/__init__.py", line 3, in <module>
    from ._netCDF4 import *
ImportError: /scratch2/miniconda/envs/py35/lib/python3.5/site-packages/netCDF4/_netCDF4.cpython-35m-x86_64-linux-gnu.so: undefined symbol: nc_inq_var_fletcher32

The reason for this (figured out via ldd) is that AMBER builds its own NetCDF library that it now inserts into LD_LIBRARY_PATH without the NetCDF4 API and HDF5 bindings. Since the conda version of netCDF4 was built against the full NetCDF package, the one ld tries to link to at runtime (because AMBER requires LD_LIBRARY_PATH) is missing some symbols. Removing AMBER from the environment fixes the import but is not really a convenient solution for users of AMBER.

目前还没有明显的解决方案,如果有人想要使用 netCDF4 和Amber在同一个Shell会话中。如果您需要快速写入功能, netCDF4 然后,您需要在导入MDAnalysis之前卸载琥珀环境。

抛出:

FutureWarning -- 在写作的时候。这个 NCDFWriter 当前未写入任何 scale_factor 数据变量的值。虽然没有违反琥珀NetCDF标准,但这种行为与大多数琥珀写入器不同,特别是对于通常具有 scale_factor 20.455的人。在MDAnalys2.0中, NCDFWriter 将强制执行 scale_factor 写入匹配的用户输入(手动定义或通过 NCDFReader )或由AmberTools的 sander 在默认操作下。

参见

NCDFReader

在 0.10.0 版本发生变更: 增加了书写速度和力量的能力

在 0.11.0 版本发生变更: 科瓦格 delta 已重命名为 dt ,为了与其他阅读器保持一致

在 0.17.0 版本发生变更: 使用FAST netCDF4 用于写作,但回落到缓慢 scipy.io.netcdf 如果 netCDF4 不可用。

在 0.20.1 版本发生变更: 更改 cell_angles 单位符合琥珀NetCDF公约标准 degree 而不是 degrees 使用以前版本的MDAnalysis编写(第2327期)。

在 2.0.0 版本发生变更: dtstart ,以及 step 关键字未使用,不再设置。写作 scale_factor VALUES现已实现。默认情况下,只有速度写入的比例因子为20.455(与琥珀中看到的行为相呼应)。

close()[源代码]

关闭轨迹文件。

is_periodic(ts)[源代码]

测试时间步长 ts 包含一个周期框。

参数:

ts (Timestep) -- Timestep 实例,其中包含要写入轨迹文件的坐标

返回:

返回 True 如果 ts 包含有效的模拟框

返回类型:

bool

units = {'force': 'kcal/(mol*Angstrom)', 'length': 'Angstrom', 'time': 'ps', 'velocity': 'Angstrom/ps'}

带有以下单位的词典 time长度 (及 速度 ..用于支持它的格式)

class MDAnalysis.coordinates.TRJ.NCDFPicklable(filename, mode='r', mmap=None, version=1, maskandscale=False)[源代码]

可以进行酸洗的NetCDF文件对象(只读)。

此类提供了一个类似文件的对象(由 scipy.io.netcdf_file ),与标准的Python文件对象不同,它可以进行酸洗。仅支持读取模式。

当文件被浸泡时,将保存文件中打开的文件句柄的文件名和mmap。在取消酸洗时,将按文件名打开文件,并加载mmap文件。这意味着要成功地取消选取,原始文件仍然必须可以使用其文件名进行访问。

备注

这个类子类 scipy.io.netcdf_file ,请参阅 scipy netcdf API documentation 有关参数以及类的行为方式的更多信息。

参数:
  • filename (str or file-like) -- 给定文本或字节字符串的文件名。

  • mmap (None or bool, optional) -- 是否映射 filename 在阅读时。在以下情况下为真 filename 是文件名,如果 filename 是一个类似文件的对象。

  • version ({1, 2}, optional) -- 将netcdf文件版本设置为读/写。1为经典格式,2为64位偏移量格式。默认为1(但请注意琥珀色NCDF 需要 2)。

  • maskandscale (bool, optional) -- 是否自动缩放和屏蔽数据。默认值为FALSE。

示例

f = NCDFPicklable(NCDF)
print(f.variables['coordinates'].data)
f.close()

还可以用作上下文管理器::

with NCDFPicklable(NCDF) as f:
    print(f.variables['coordinates'].data)

在 2.0.0 版本加入.

从fileobj(字符串或类似文件)初始化netcdf_file。

6.19.2. ASCII轨迹

ASCII AMBER TRJ坐标文件(定义见 AMBER TRJ format )由 TRJReader 。还可以直接读取 Bzip2gzip 压缩文件。

琥珀ASCII轨迹由后缀‘.trj’、‘.mdcrd’或‘.crdbox’(可能带有附加的‘.gz’或‘.bz2’)识别。

备注

在琥珀社区中,这些轨迹通常以后缀‘.crd’保存,但此扩展名与CHARMM CRD格式和MDAnalysis冲突 将不会正确自动检测琥珀色“.crd”轨迹 。相反,应显式提供 format="TRJ" 参数为 Universe ::

u = MDAnalysis.Universe("top.prmtop", "traj.crd", format="TRJ")

通过这种方式,琥珀 TRJReader 是使用的。

限制

  • 周期框仅存储为琥珀轨迹中的框长度A、B、C;读者总是假设这些框是正交框。

  • 轨迹不包含时间信息,因此我们只需将时间步长设置为1 ps(或者用户可以将其作为kwarg提供 dt )

  • 少于4个原子的轨迹可能无法读取(错误)。

  • 如果轨迹正好包含 one 原子,那么它总是被假定为非周期的(出于技术原因)。

  • 目前的速度是 不支持 作为ASCII轨迹。

class MDAnalysis.coordinates.TRJ.TRJReader(filename, n_atoms=None, **kwargs)[源代码]

琥珀轨迹阅读器。

读取ASCII格式的 AMBER TRJ format 。周期框信息被自动检测。

时间步长中的原子数 must 将在 n_atoms 关键字,因为它没有存储在轨迹头中并且不能可靠地自动检测。构造函数引发一个 ValueError 如果 n_atoms 保留为其缺省值 None

时间步的长度不存储在轨迹本身中,但可以通过传递 dt 构造函数的关键字参数;假定它在ps中。默认值为1 ps。

在 0.11.0 版本发生变更: 帧现在基于0,而不是基于1。科瓦格 delta 已重命名为 dt ,为了与其他阅读器保持一致

close()[源代码]

如果TRJ轨迹文件处于打开状态,请将其关闭。

property n_frames

帧的数量(通过读取整个轨迹获得)。

open_trajectory()[源代码]

打开轨迹进行读取并加载第一帧。

units = {'length': 'Angstrom', 'time': 'ps'}

带有以下单位的词典 time长度 (及 速度 ..用于支持它的格式)