6.1. 轨迹读者和作者 MDAnalysis.coordinates
坐标子模块包含读取、写入和存储坐标信息的代码,或者单个帧(例如, GRO
格式)或轨迹(例如 DCD
格式);请参阅 支持的坐标格式表 适用于所有格式。
MDAnalysis调用读取坐标轨迹并使数据可用的类 《读者》 。同样,写出坐标的类也称为 “作家” 。读取器和写入器为底层坐标数据提供公共接口。通过面向对象的接口对坐标访问进行抽象是MDAnalysis的关键功能之一。
6.1.1. 读者
所有读取器都基于 ProtoReader
类,该类定义公共 轨迹API 并且允许其他代码以相同的方式与所有轨迹格式接口,而与轨迹格式本身的细节无关。
这个 Universe
包含API入口点属性 Universe.trajectory
这指向了实际的 ProtoReader
对象;所有读取器都可以通过这个入口点以相同的方式访问(“Duck tying”)。
有三种类型的基本阅读器作为每种特定格式的起点。它们是:
ReaderBase
一个标准的多帧读取器,允许在单个文件上迭代以提供多个数据帧。这由TRR和DCD等格式使用。
SingleFrameReaderBase
一种简化的阅读器,它读取只包含单帧信息的文件。它与GRO和CRD等格式一起使用
ChainReader
一种高级阅读器,旨在读取一系列文件,以无缝地迭代每个文件中的所有帧。该阅读器还可以在不同格式的文件序列上提供此功能。
正常情况下,不需要明确选择读卡器。这是在创建 Universe
并为文件类型选择适当的读取器(通常按文件扩展名,但此选择可以用 format
参数为 Universe
)。
如果有其他模拟数据可用,则可使用将其添加到轨迹并与其一起读取 add_auxiliary()
如中所述 辅助API 。
6.1.2. 作家
为了 写坐标 ,提供了出厂功能 (MDAnalysis.coordinates.core.writer()
,它也可以通过以下方式提供 MDAnalysis.Writer()
),它返回一个 作家 适用于所需的文件格式(由文件名后缀指示)。此外,一条弹道 ProtoReader
也可以有一种方法 Writer()
这将返回一个适当的 WriterBase
以获取轨迹的文件格式。
类比于 MDAnalysis.coordinates.core.writer()
,还有一个 MDAnalysis.coordinates.core.reader()
可用于返回轨迹的函数 ProtoReader
实例,尽管这通常是不需要的,因为 Universe
类可以自动选择适当的读取器。
典型的方法是从旧的轨迹生成新的轨迹,例如,仅保留蛋白质:
u = MDAnalysis.Universe(PDB, XTC)
protein = u.select_atoms("protein")
with MDAnalysis.Writer("protein.xtc", protein.n_atoms) as W:
for ts in u.trajectory:
W.write(protein)
使用 with()
语句将在写入最后一帧后自动关闭轨迹。
6.1.3. 时间步长
读者和作家都使用时间步长作为他们的工作对象。一个 Timestep
表示轨迹中给定帧的所有数据。对象中的数据 Timestep
通常通过 AtomGroup
但也有可能直接操纵时间步长。
海流 Timestep
可以通过 ts
附加到活动对象的轨迹的属性 Universe
**
ts = u.trajectory.ts
ts.positions # returns a numpy array of positions
由于各个模拟包的不同,大多数单独的格式在每个时间步长中的可用数据略有不同,但所有格式都共享广泛的基本数据集,详细信息请参见 Timestep API
6.1.4. 支持的坐标格式
下表列出了MDAnalysis理解的坐标文件格式。重点是在流行的分子动力学代码中使用的格式。默认情况下,MDAnalysis通过查看扩展来确定格式。因此,DCD文件始终必须以“.dcd”结尾才能被识别,除非使用 格式化 关键字至 Universe
或 load_new()
。使用压缩后的文件也可以识别许多文件 gzip 或 bzip2 例如“.xyz.bz2”。
名字 |
分机 |
IO |
备注 |
---|---|---|---|
查尔姆,NAMD |
DCD |
读/写 |
标准CHARMM二进制轨迹;自动检测字符顺序。固定原子可能无法正确处理(需要测试)。模块 |
LAMMPS |
DCD |
读/写 |
CHARMM风格的二进制轨迹;自动检测字符顺序。单位适用于LAMMPS。模块 |
LAMMPS [1] |
数据 |
R |
从.data文件读取的单帧坐标 |
LAMMPS [1] |
Lammps转储 |
R |
Atom风格的ASCII轨迹 |
格罗麦克斯 |
XTC |
读/写 |
压缩(有损)XTC轨迹格式。模块 |
格罗麦克斯 |
TRR |
读/写 |
全精度TRR轨迹。对坐标和速度进行处理。模块 |
格罗麦克斯 |
TNG |
R |
变精度的弹道。坐标、速度和力与任何 additional tng block data 已请求阅读。使用 PyTNG package 用于文件读取。模块 |
XYZ [1] |
XYZ |
读/写 |
通用空格分隔XYZ格式;可以压缩(gzip或bzip2)。模块 |
TXYZ [1] |
Txyz,圆弧 |
R |
Tinker XYZ格式。模块 |
HOOMD [1] |
政府物料供应处 |
R |
HOOMD GSD格式(使用 |
GAMESS |
GM,注销,注销 |
R |
通用半格式化游戏S输出日志;可以压缩(gzip或bzip2)。模块 |
AMBER |
TRJ,MDCRD |
R |
格式化(ASCII)轨迹;自动检测周期框的存在( 实验性的 )。模块 |
AMBER |
Inpcrd,restrt |
R |
格式化(ASCII)坐标/重新启动文件模块 |
AMBER |
北卡罗来纳州NCDF |
读/写 |
完全支持二进制(NetCDF)轨迹,可选 netcdf4-python 模块(坐标和速度)。模块 |
布鲁克海文 [1] |
PDB/ENT |
读/写 |
默认情况下读取宽松的PDB格式(如MD模拟中使用的);支持多个帧(模型),但需要 多帧 关键字。模块 |
XPDB |
PDB |
R |
扩展的PDB格式(可以使用5位余数)。要使用,请明确指定格式“xpbd”: |
PDBQT [1] |
PDBQT |
读/写 |
具有ATOM类型的AutoDock使用的文件格式 t 和部分收费 q 。模块: |
PQR [1] |
PQR |
读/写 |
带有电荷和半径信息的类似PDB但以空格分隔的文件。模块 |
GROMOS96 |
GRO |
读/写 |
基本GROMOS96格式(以及速度)。只会读取出现的第一个帧。模块 |
CHARMM卡 [1] |
CRD |
读/写 |
CHARMM的“CARD”坐标输出;处理标准或扩展格式。模块 |
DESRES [1] |
DMS |
R |
DESRES分子结构文件格式阅读器。模块 |
IBISCO/YASP |
TRZ |
读/写 |
二进制IBIsCO或YASP轨迹模块 |
MOL2 |
钼2 |
读/写 |
基于文本的Tripos分子结构格式 |
DL_Poly [1] |
配置 |
R |
DL_POLY ASCII配置文件 |
DL_Poly [1] |
历史 |
R |
DL_POLY ASCII历史文件 |
MMTF [1] |
MMTF |
R |
大分子传输格式 |
NAMD |
Coor,Namdbin |
读/写 |
坐标的NAMD二进制文件格式 |
FHIAIMS |
在……里面 |
读/写 |
FHI-AIMS坐标文件格式 |
H5MD |
H5md |
R |
H5MD 坐标的文件格式 |
chemfiles 类库 |
CHEMFILES |
读/写 |
接口到 chemfiles ,请参阅 list of chemfiles file formats 和 |
6.1.5. 轨迹API
这个 轨迹API 定义必须如何构造类以允许读取和写入坐标文件。通过遵循该API,可以无缝地增强MDAnalysis的I/O功能。实际的底层I/O代码可以用C或PYTHON或两者的混合编写。
通常,每种格式都驻留在其自己的模块中,该模块由格式说明符命名(按照约定使用大写)。
Reader和Writer类派生自 MDAnalysis.coordinates.base
。
6.1.5.1. 登记处
在不同的地方,MDAnalysis试图自动选择适当的格式(例如,通过查看文件扩展名)。为了使其能够选择正确的格式,所有I/O类必须是子类 MDAnalysis.coordinates.base.ReaderBase
, MDAnalysis.coordinates.base.SingleFrameReaderBase
,或 MDAnalysis.coordinates.base.WriterBase
并将 format
属性,该属性包含定义预期后缀的字符串。要为I/O类分配多个后缀,可以给出一个后缀列表。
除此之外,读取器还可以定义 _format_hint
方法,该方法返回它是否可以处理给定对象的布尔值。例如, MDAnalysis.coordinates.memory.MemoryReader
将自身标识为能够读取NumPy数组。此功能用于 MDAnalysis.core._get_readers.get_reader_for()
在弄清楚如何读取对象(通常是提供给mda.宇宙)时。
若要定义编写器可以写入多个轨迹帧,请设置 multiframe 属性为 True
。默认值为 False
。为作家下定义 不 支持单帧写入 singleframe 属性可以设置为 False
。这是 True
默认情况下,即我们假设所有的编写者也可以制作单个帧。
6.1.5.2. TimeStep类
TimeStep实例保存当前帧的数据。每当读取轨迹的新帧时,它都会被更新。
TimeStep类派生自 MDAnalysis.coordinates.timestep.Timestep
,这是主要的实现示例(直接用于DCDReader)。
有关此格式的详细讨论请参阅 Issue 250
6.1.5.2.1. 方法:
__init__(n_atoms, positions=True, velocities=False, forces=False)
定义此时间步长将包含的原子数,以及它是否将包含速度和力信息
__eq__
将时间步长与另一个时间步长进行比较
__getitem__(atoms)
原子的位置;可以是切片或数字数组,然后返回坐标数组
__len__()
框中的坐标(原子数)数
__iter__()
所有坐标上的迭代器
copy()
实例的深层副本
_init_unitcell
该挂钩返回此特定文件格式的单位单元表示形式的空数据结构;从内部调用
__init__()
要进行初始化Timestep._unitcell
。
6.1.5.2.2. 属性
n_atoms
框架中的原子数
frame
当前帧编号(从0开始)
_frame
轨迹的本地帧编号。这可能不同于
frame
因为这将始终在迭代时从0开始按顺序计数,而_frame
是直接从弹道上取出来的。time
当前系统时间,单位为ps。该值可以从设置为TimeStep属性的时间计算,也可以从 frame * dt 。任何一种方法都允许对时间应用偏移量。
dt
不同帧之间系统时间的变化。可以将其设置为属性,但默认为1.0 ps。
data
包含当前时间步长的所有其他信息的词典。
positions
此时间步中所有位置的Numy数组,否则将引发
NoDataError
velocities
如果存在,则返回一个稀疏的速度数组,否则引发
NoDataError
forces
如果存在,则返回力的稀疏数组,否则引发
NoDataError
has_positions
位置数据是否可用的布尔值
has_velocities
速度数据是否可用的布尔值
has_forces
力数据是否可用的布尔值
dimensions
系统框尺寸 (x, y, z, alpha, beta, gamma )还附带一个setter,它接受MDAnalysis框,以便您可以执行以下操作::
Timestep.dimensions = [A, B, C, alpha, beta, gamma],然后自动转换为基础表示形式并将其存储在
Timestep._unitcell
。volume
系统箱体积(作为箱向量的行列式导出
dimensions
)aux
任何添加的辅助数据的代表值的命名空间。
6.1.5.2.3. 私有属性
这些属性由底层轨迹读取器直接设置。通常情况下,用户不应该直接访问它们,而是应该使用上面的属性。
_pos
原始坐标,a
numpy.float32
数组;X = _pos[:,0], Y = _pos[:,1], Z = _pos[:,2]
_velocities
原始速度,a
numpy.float32
包含速度的数组(与_pos
)_forces
力,类似于上面的速度。
_unitcell
原生单位单元格描述;格式取决于基本轨迹格式。用户应使用
dimensions
属性以规范格式访问数据,而不是访问Timestep._unitcell
直接去吧。该方法
Timestep._init_unitcell()
是初始化此属性的挂钩。
6.1.5.3. 弹道读取器类
轨迹读取器源自 MDAnalysis.coordinates.base.ReaderBase
(或来自 MDAnalysis.coordinates.base.ProtoReader
如果他们不需要 Reader.__del__()
方法)。一个特例是 SingleFrame readers 用于仅包含单个坐标框架的格式。这些读取器派生自 ProtoReader
名为 MDAnalysis.coordinates.base.SingleFrameReaderBase
。
通常,许多方法和属性都会被覆盖,但下面列出的方法和属性 must 将会得到实施。
参见
请参阅 读者 在……里面 MDAnalysis.coordinates.base
以了解实施细节。
6.1.5.3.1. 方法:
这个 MDAnalysis.coordinates.DCD.DCDReader
类是主要的实现示例。
必选方法
以下方法必须在Reader类中实现。
__init__(filename, **kwargs)
打开 文件名 ;其他 科瓦格人 根据需要进行处理,阅读器可以自由忽略它们。通常,当MDAnalysis从以下位置创建读取器
MDAnalysis.Universe
它提供了尽可能多的信息 kwargs ;目前提供的数据如下:
- n_atoms :提供的拓扑中的原子数。这是
对于所有读卡器不是必需的,如果不是必需的,可以忽略。
__iter__()
允许从头到尾迭代::
for ts in trajectory: print(ts.frame)在开始迭代之前,阅读器会自动将轨迹回放到初始帧之前(通常通过重新打开文件)。 Multi frame readers (见 读者 )也将使轨迹倒带 after 迭代,以便将当前轨迹帧设置为第一个轨迹帧。 Single frame readers 不要在迭代后显式回放,而只是停留在轨迹中的一个帧上。
close()
关闭文件并停止I/O
next()
前进到下一个时间步长或提升
IOError
当移过最后一帧时rewind()
重新定位到第一帧
__entry__()
一种录入方法 Context Manager (返回SELF)
__exit__()
的退出方法。 Context Manager ,应该打电话给
close()
。
备注
一个 __del__()
还应提供方法,以确保弹道正确闭合。但是,某些类型的阅读器可能会忽略这一要求。其中包括 SingleFrameReaderBase
(文件读取在上下文管理器中完成,不需要手动关闭)和 ChainReader
(它是一个读者的集合,每个读者都已经有了自己的 __del__
方法)。
可选方法
并非所有轨迹格式都支持以下方法,要么是因为数据不可用,要么是因为这些方法尚未实施。代码应该优雅地处理缺少的方法。
__len__()
轨迹中的帧数
__getitem__(arg)
前进到时间步长 arg = frame 然后返回
Timestep
;或如果 arg 是一个切片,然后在轨迹的该部分返回一个迭代数。第一个功能允许用户随机访问轨迹中的帧:
universe.trajectory[314]会将帧314加载到当前
Timestep
。使用切片允许对轨迹的部分进行迭代::
for ts in universe.trajectory[1000:2000]: process_frame(ts) # do some analysis on ts或跳过帧:
for ts in universe.trajectory[1000::100]: process_frame(ts) # do some analysis on ts最后一个示例从第1000帧开始读取轨迹,并每隔100帧读取一次,直到最后。
还可以提供索引序列或布尔值掩码来索引轨迹。
该项目的表现
__getitem__()
方法取决于底层轨迹读取器以及它是否可以实现对帧的随机访问。MDAnalysis中的所有读取器都应支持随机访问。对于外部定制读取器,这可能不容易(或可靠地)实现,因此仅限于顺序迭代。如果读取器不能提供对帧的随机访问,则它应该引发
TypeError
关于索引。有可能部分地实现__getitem__
(如上所示MDAnalysis.coordinates.base.ProtoReader.__getitem__
其中切片完整的轨迹相当于MDAnalysis.coordinates.base.ProtoReader.__iter__
(它始终被实现)和其他切片引发TypeError
。使用片、索引序列或布尔值掩码编制索引时,返回值是
FrameIteratorSliced
或FrameIteratorIndices
。看见 FrameIterators 了解更多详细信息。parse_n_atoms(filename, **kwargs)
提供轨迹文件中的原子数量,以便使用Reader提供极小的拓扑。必须实现为静态方法或类方法。
Writer(filename, **kwargs)
返回一个
WriterBase
其被设置为与正被读取的轨迹相同的参数(例如,时间步长、长度等),这便于复制和简单的即时操纵。如果未定义编写器,则一个
NotImplementedError
都被养大了。这个 科瓦格人 可用于定制Writer,因为它们通常被传递给Writer的init方法,并填充了合理的默认值;实际的关键字参数取决于Writer。
timeseries(atomGroup, [start[,stop[,skip[,format]]]])
返回坐标数据的子集
6.1.5.3.2. 属性
filename
轨迹的文件名
n_atoms
一帧中的原子数(坐标集)(常量)
n_frames
帧总数(如果已知)--
None
如果不知道ts
这个
Timestep
对象;通常为每种轨迹格式定制并派生自timestep.Timestep
。units
带关键字的词典 time , 长度 , 速度 , 力 和适当的单位(例如‘AKMA’和‘Angstrom’代表Charmm dcd,‘ps’和‘nm’代表Gromacs轨迹,
None
和‘Angstrom’的PDB)。任何未使用的字段都应设置为None
。format
标识文件格式的字符串,例如“DCD”、“PDB”、“CRD”、“XTC”、“TRR”;这通常是大写的文件扩展名。
dt
帧之间的时间(PS);动态计算的托管属性(只读)
skip_timestep * delta
并将时间转换为MDAnalysis基本单位(默认情况下为皮秒)totaltime
轨迹的总长度=
n_frames * dt
time
当前时间点的时间,以MDAnalysis时间单位(PS)表示
frame
当前时间步长的帧编号(从0开始)
aux_list
任何添加的辅助数据的名称列表。
_auxs
百科全书
AuxReader
任何添加的辅助数据的实例。
可选属性
delta
积分器时间步长(以本地单位表示);因此,目标帧的“长度”为
skip_timestep*delta
时间单位compressed
标识压缩的字符串(例如“gz”或“bz2”)或
None
。fixed
Bool,表示是否有固定的原子(例如dcd)
periodic
布尔表示如果包含周期边界条件的框信息,则将单元格信息存储在属性中 dimensions
skip_timestep
帧之间的积分步数+1(即对MD模拟进行采样的步长)
6.1.5.4. 轨迹编写器类
轨迹编写器源自 MDAnalysis.coordinates.base.WriterBase
。它们用于将多个帧写入轨迹文件。每一次 write()
方法,则会将另一帧追加到轨迹。
通常,许多方法和属性都会被覆盖。
签名::
with TrajectoryWriter(filename, n_atoms, **kwargs) as w:
w.write(Universe) # write a whole universe
或:
w.write(AtomGroup) # write a selection of Atoms from Universe
参见
请参阅 作家 在……里面 MDAnalysis.coordinates.base
以了解实施细节。
6.1.5.4.1. 方法:
__init__(filename, n_atoms, **kwargs)
设置阅读器。这 may 打开文件 文件名 和 may 立即向其写入内容(如标头),但允许编写器将I/O延迟到第一次调用
write()
。任何
**kwargs
必须以静默方式忽略未由编写器处理的。
write(obj)
将时间步长数据写入 obj
convert_dimensions_to_unitcell(timestep)
从TimeStep中获取尺寸并将其转换为格式的原生单位单元表示
close()
关闭文件并完成I/O
__del__()
确保调用Close()
6.1.5.4.2. 属性
filename
轨迹文件的名称
units
带关键字的词典 time , 长度 , 速度 , 力 和适当的单位(例如‘AKMA’和‘Angstrom’代表Charmm dcd,‘ps’和‘nm’代表Gromacs轨迹,
None
和‘Angstrom’的PDB)。任何未使用的字段都应设置为None
。format
标识文件格式的字符串,例如“DCD”、“PDB”、“CRD”、“XTC”、“TRR”
Optional
ts
Timestep
实例
6.1.5.5. 单帧编写器类
单帧写入器是轨迹写入器的特例,因为它只将单个坐标帧写入文件,例如PDB或GRO文件。与只包含坐标的轨迹格式不同, 单帧 格式包含更多信息(例如原子和残基的名称和数字),因此可以以有意义的方式编写原子选择。
签名::
W = FrameWriter(filename, **kwargs)
W.write(AtomGroup)
W.write(Universe)
毯子 科瓦格人 是必需的,以便可以传递与轨迹编写器相同类型的参数(文件名和n_ATOM)。这样,简单的 writer()
工厂功能可用于所有写入器。
6.1.5.5.1. 方法:
备注
轨迹编写器和帧编写器的使用方式几乎完全相同,但帧编写器无法处理RAW Timestep
物体。