10.5. EDR辅助阅读器 MDAnalysis.auxiliary.EDR

在 2.4.0 版本加入.

10.5.1. 背景

EDR files 是跟在 XDR 协议。它们是由GROMACS在模拟期间编写的,包含关于系统的时间序列非轨迹数据,如能量、温度或压力。

pyedr 是一个Python包,它读取EDR二进制文件并将其作为NumPy数组的字典返回给人类可读的形式。EDR辅助读取器使用它来解析EDR文件。因此,具有字符串键和NumPy数组值的字典被加载到 EDRReader 。它基本上是基于Python的C++代码版本 GROMACS.

此模块中的类基于 pyedr 包裹。Pyedr是一个可选的依赖项,必须安装才能使用此读卡器。使用未安装pyedr的读卡器会引发 ImportError 。变量 HAS_PYEDR 指示此模块是否有可用的pyedr。

EDR辅助读取器从pyedr获取输出,并使该数据在MDAnalysis中可用。通常的工作流程首先创建一个EDRReader,然后将文件传递给它以进行读取:

import MDAnalysis as mda
aux = mda.auxiliary.EDR.EDRReader(some_edr_file)

新创建的 aux 对象包含在EDR文件中找到的所有数据。它存储在 data_dict 字典,它将GROMACS提供给每个数据条目的名称映射到保存相关数据的NumPy数组。这些由GROMACS指定的名称存储在 terms 属性。除了数字数据,新的 EDRReader 还将每个条目的单位存储在 data_dict ITS中的词典 unit_dict 字典。

警告

单位将转换为 MDAnalysis base units 除非另有说明,否则自动执行。但是,并非所有单位类型都在MDAnalysis中定义了基本单位。(比照 MDAnalysis.units.MDANALYSIS_BASE_UNITS )。例如,当前未定义压力单位,因此不会进行转换。这可能会导致单位之间的不一致!可以通过传递以下命令关闭转换 convert_units=False 创建EDRReader时:

aux = mda.auxiliary.EDR.EDRReader(some_edr_file, convert_units=False)

10.5.2. EDRReader的独立使用

这个 EDRReader 可用于单独访问存储在EDR文件中的数据,而无需将数据与轨迹帧相关联。例如,这对于打印很有用。可以以词典的形式返回单个术语、术语列表或所有术语的数据。此词典中始终返回“time”,以便更轻松地绘制::

temp = aux.get_data("Temperature")
plt.plot(temp["Time"], temp["Temperature"])

some_terms = aux.get_data(["Potential", "Kinetic En.", "Box-X"])
plt.plot(some_terms["Time"], some_terms["Potential"])

all_terms = aux.get_data()
plt.plot(all_terms["Time"], all_terms["Pressure"])

10.5.3. 将EDR数据添加到轨迹

与其他辅助阅读器一样, EDRReader 通过将其关联到适当的时间点,可以将其数据附加到轨迹。一般来说,要将EDR数据添加到轨迹中,需要提供两个参数。

备注

以下内容将随着MDAnalys3.0的发布而发生变化。从那时起,这两个论点的顺序将颠倒过来。

第一个参数是 aux_spec 字典。使用它,用户可以指定要从EDR文件中添加哪些条目,并为其指定一个更方便的名称,以便在MDAnalysis中使用(因为GROMACS会创建类似“#Surf*SurfTen”或“‘Constr.rmsd’”的名称,这可能不太方便使用。)此词典可能如下所示::

aux_spec = {"epot": "Potential",
            "surf_tension": "#Surf*SurfTen"}

如下所示提供时,这将引导 EDRReader 获取它在其 data_dict 字典并将其附加到下面的轨迹时间步长 u.trajectory.ts.aux.epot (表面张力也是如此)。

需要的第二个参数是EDR数据本身的来源。此处是EDR文件的路径或先前创建的 EDRReader 对象可以被提供。

示例:

import MDAnalysis as mda
from MDAnalysisTests.datafiles import AUX_EDR, AUX_EDR_TPR, AUX_EDR_XTC
import matplotlib.pyplot as plt

A Universe 和一个 EDRReader 对象并打印EDR文件中的可用数据:

In [1]: u = mda.Universe(AUX_EDR_TPR, AUX_EDR_XTC)
In [2]: aux = mda.auxiliary.EDR.EDRReader(AUX_EDR)
In [3]: aux.terms
Out[3]: ['Time', 'Bond', 'Angle', ...]

数据与轨迹相关联,使用 aux_spec 字典以指定要在哪个名称下添加哪些数据。使用此方法可以添加任意数量的术语。然后,可以在 ts.aux 通过属性和字典语法实现的命名空间::

In [4]: u.trajectory.add_auxiliary({"epot": "Potential",
                                    "angle": "Angle"}, aux)
In [5]: u.trajectory.ts.aux.epot
Out[5]: -525164.0625
In [6]: u.trajectory.ts.aux.Angle
Out[6]: 3764.52734375
In [7]: u.trajectory.ts.aux["epot"]
Out[7]: -525164.0625

备注

一些GROMACS-提供 terms 留出空间。除非提供不带空格的属性名称,否则无法通过属性语法访问这些术语。在这种情况下,只有字典语法可以工作。

此外,还可以将EDR文件中的所有数据添加到轨迹。要做到这一点, aux_spec 省略了字典,并且数据源(如上所述的第二个参数)被显式提供为 auxdata 。以这种方式添加数据时,中的术语 terms 成为中使用的名称 ts.aux **

In [7]: u.trajectory.add_auxiliary(auxdata=aux)
In [8]: u.trajectory.ts.aux["#Surf*SurfTen"]
Out[8]: -1857.519287109375

10.5.4. 班级

class MDAnalysis.auxiliary.EDR.EDRReader(filename: str, convert_units: bool = True, **kwargs)[源代码]

从.edr文件中读取数据的辅助读取器。

EDR files 是由GROMACS在模拟期间创建的。它们是二进制文件,包含时间序列能量数据和与模拟相关的其他数据。

.edr文件的默认读取器。文件中的所有数据将在初始化时被读取和存储。

参数:
  • filename (str) -- 包含辅助数据的文件的位置。

  • convert_units (bool, optional) -- 如果为True(默认),则EDR文件中的单位将自动转换为MDAnalysis基本单位。如果为False,则按原样从文件中获取单位。如果未在MDAnalysis中定义基本单位,则不会进行任何转换。单位类型在 MDAnalysis.units.MDANALYSIS_BASE_UNITS 将在默认情况下自动转换。

  • **kwargs -- 其他AuxReader选项。

_auxdata

辅助数据文件所在的路径

类型:

pathlib.PosixPath

data_dict

包含辅助数据的字典,将GROMACS为EDR文件中的条目指定的名称映射到包含此数据的NumPy数组

类型:

DICT

unit_dict

包含辅助数据单位的字典,将 data_selector 读取器的名称(即EDR文件中数据集的名称)到其单位。

类型:

DICT

_n_steps

AUXDATA可用的步骤数

类型:

集成

terms

中提供的辅助数据条目的名称 data_dict 。这些是在EDR文件中设置的GROMACS名称。

类型:

列表

备注

假定该文件的大小使得读取和存储全部内容是可行的。当内存使用量超过1 GB时,会发出警告。此警告限制可通过 memory_limit 科瓦格。

get_data(data_selector: str | List[str] | None = None) Dict[str, ndarray][源代码]

属性中包含的辅助数据。 EDRReader 。返回所有数据或指定为 data_selector 以字符串或以下任一项列表形式 EDRReader.termsTime 始终返回以便于打印。

参数:

data_selector (str, List[str], None) -- 要从辅助读取器的数据字典中提取的密钥。如果 None 中找到的所有数据 data_dict

返回:

data_dict --词典映射 data_selector 辅助数据的NumPy数组的键。

返回类型:

dict

抛出:

KeyError -- 如果传递了无效的DATA_SELECTOR键。

read_all_times() ndarray[源代码]

获取每一步的时间列表。

返回:

每一步的时间。

返回类型:

NumPy array of float

每个步骤的实际数据由EDRStep的实例存储。

class MDAnalysis.auxiliary.EDR.EDRStep(time_selector: str = 'Time', data_selector: str | None = None, **kwargs)[源代码]

AuxStep 为.edr文件格式初始化。

扩展基本AuxStep类以允许从每个步骤读取的完整数据集中选择时间和感兴趣的数据字段(通过字典键)。

参数:
  • time_selector (str, optional) -- 链接到时间值的字典键的名称(假定为ps)。缺省值为“time”

  • data_selector (str | list of str | None, optional) -- 链接到要存储在中的EDR文件中的感兴趣数据的字典键列表 data 。默认值为 None

  • **kwargs -- 其他辅助步骤选项。