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什么时候 文件名 是一个类似文件的对象。参见
在 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_units , velocities , forces 和 scale_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)) -- 力的比例系数
- 返回类型:
- close()[源代码]
关闭轨迹;任何进一步的访问都将引发
IOError。备注
潜在的
scipy.io.netcdf模块可以使用以下命令打开netcdf文件mmap如果mmap=True已经设置好了。因此 any 对数组的引用 must 在可以关闭文件之前将其删除。
- static parse_n_atoms(filename, **kwargs)[源代码]
读取坐标文件并推算出原子数
- 返回:
n_atoms --坐标文件中的原子数
- 返回类型:
- 抛出:
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_PATHwithout the NetCDF4 API and HDF5 bindings. Since the conda version ofnetCDF4was built against the full NetCDF package, the one ld tries to link to at runtime (because AMBER requiresLD_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 在默认操作下。
参见
在 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 版本发生变更:
dt,start,以及step关键字未使用,不再设置。写作scale_factorVALUES现已实现。默认情况下,只有速度写入的比例因子为20.455(与琥珀中看到的行为相呼应)。- is_periodic(ts)[源代码]
测试时间步长
ts包含一个周期框。- 参数:
ts (
Timestep) --Timestep实例,其中包含要写入轨迹文件的坐标- 返回:
返回
True如果 ts 包含有效的模拟框- 返回类型:
- 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 有关参数以及类的行为方式的更多信息。- 参数:
示例
f = NCDFPicklable(NCDF) print(f.variables['coordinates'].data) f.close()
还可以用作上下文管理器::
with NCDFPicklable(NCDF) as f: print(f.variables['coordinates'].data)
参见
MDAnalysis.lib.picklable_file_io.FileIOPicklable,MDAnalysis.lib.picklable_file_io.BufferIOPicklable,MDAnalysis.lib.picklable_file_io.TextIOPicklable,MDAnalysis.lib.picklable_file_io.GzipPicklable,MDAnalysis.lib.picklable_file_io.BZ2Picklable在 2.0.0 版本加入.
从fileobj(字符串或类似文件)初始化netcdf_file。
6.19.2. ASCII轨迹
ASCII AMBER TRJ坐标文件(定义见 AMBER TRJ format )由 TRJReader 。还可以直接读取 Bzip2 或 gzip 压缩文件。
琥珀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 ,为了与其他阅读器保持一致
- property n_frames
帧的数量(通过读取整个轨迹获得)。
- units = {'length': 'Angstrom', 'time': 'ps'}
带有以下单位的词典 time 和 长度 (及 速度 , 力 ..用于支持它的格式)