11.2.1. 核心对象:宇宙 MDAnalysis.core.universe

这个 Universe 类将一个拓扑和一个轨迹联系在一起。MDAnalysis中的几乎所有代码都以 Universe

通常,一个 Universe 从以下文件创建:

import MDAnalysis as mda
u = mda.Universe("topology.psf", "trajectory.dcd")

为了构建新的仿真系统,还可以方便地构建一个 Universe 从现有的 AtomGroup 实例中的 Merge() 功能。

11.2.1.1. 班级

class MDAnalysis.core.universe.Universe(topology=None, *coordinates, all_coordinates=False, format=None, topology_format=None, transformations=None, guess_bonds=False, vdwradii=None, fudge_factor=0.55, lower_bound=0.1, in_memory=False, in_memory_step=1, **kwargs)[源代码]

MDAnalyse包含描述系统的所有信息。

系统始终需要一个 拓扑文件 -在最简单的情况下,只需要一列原子。这可以是CHARMM/NAMD PSF文件,也可以是具有原子信息的简单坐标文件,例如XYZ、PDB、GROMACS Gro或TPR或CHARMM CRD。看见 支持的拓扑格式表 可以读取哪种类型的拓扑。

A 轨迹文件 提供坐标;坐标的排序方式必须与拓扑中的原子列表相同。轨迹可以是单帧,如PDB、CRD或GRO文件,也可以是MD轨迹(格式为CHARMM/NAMD/LAMMPS DCD、GROMACS XTC/TRR、琥珀NC、通用XYZ格式等)。看见 支持的坐标格式表 这可以被解读为一条“轨迹”。

作为特例,当拓扑是包含原子信息的文件时 and 坐标(如XYZ、PDB、GRO或CRD,请参见 支持的坐标格式表 )然后,除非提供轨迹,否则会立即从“拓扑图”文件中加载坐标。

参数:
  • topology (str, stream, Topology, numpy.ndarray, None) -- 一种CHARMM/XploR PSF拓扑文件、PDB文件或Gromacs Gro文件;用于定义原子列表。如果文件包含键信息、部分电荷、原子质量等。然后这些数据将可供MDAnalysis使用。或者,现有的 MDAnalysis.core.topology.Topology 实例可以给定、NumPy坐标或 None 为了一个空虚的宇宙。

  • coordinates (str, stream, list of str, list of stream (optional)) -- 坐标可以作为单帧文件(如PDB、CRD或GRO文件)、单帧列表或轨迹文件(CHARMM/NAMD/LAMMPS DCD、Gromacs XTC/TRR或通用XYZ格式)提供。坐标的排序方式必须与拓扑中的原子列表相同。看见 支持的坐标格式表 可以理解为坐标的东西。或者,也可以给出流。

  • topology_format (str, None, default None) -- 提供拓扑文件的文件格式; None 从文件扩展名猜出来的。还可以传递 MDAnalysis.topology.base.TopologyReaderBase 定义要在拓扑文件上使用的自定义读取器。

  • format (str, None, default None) -- 提供坐标或轨迹文件的文件格式; None 从文件扩展名猜出来的。请注意,如果提供了文件名列表,则此关键字不起作用,因为“链接的”读取器必须猜测每个单独列表成员的文件格式。还可以传递 MDAnalysis.coordinates.base.ProtoReader 以定义要在轨迹文件上使用的自定义读取器。

  • all_coordinates (bool, default False) -- 如果设置为 True 指定如果传递了多个文件名,则在可能的情况下将它们全部用作坐标文件(使用 MDAnalysis.coordinates.chain.ChainReader )。默认行为是将第一个文件作为拓扑,将其余文件作为坐标。第一个参数将始终用于推断拓扑,而不管 all_coordinates

  • guess_bonds (bool, default False) -- 一旦宇宙被加载,尝试猜测原子之间的连接性。这将填充宇宙的.ond、.angles和.dihedrals属性。

  • vdwradii (dict, None, default None) -- 与配合使用 guess_bonds 。提供一个词典,给出猜键中使用的每种原子类型的vdwRadii。

  • fudge_factor (float, default [0.55]) -- 与配合使用 guess_bonds 。提供原子必须相互重叠才能被认为是键的因子。

  • lower_bound (float, default [0.1]) -- 与配合使用 guess_bonds 。提供最小保证金长度。

  • transformations (function or list, None, default None) -- 提供您希望在阅读后应用于轨迹的变换列表。有关转换,请参阅 MDAnalysis.transformations ,或者可以由用户创建。

  • in_memory (bool, default False) -- 读入轨迹后,将其传输到内存中的表示法,从而允许操纵坐标。

  • in_memory_step (int, default 1) -- 仅每隔n帧将数据读入内存中的表示。

  • continuous (bool, default False) -- 这个 continuous 选项由 ChainReader ,它包含将独立轨迹文件视为单个虚拟轨迹的功能。

  • **kwargs (extra arguments are passed to the topology parser.) --

trajectory

当前加载的轨迹读取器;读取器在 坐标模块

类型:

Base.ReaderBase或base.SingleFrameReaderBase

dimensions

系统尺寸(模拟单元格,如果在轨迹中设置) current time step (见 MDAnalysis.coordinates.timestep.Timestep.dimensions )。可以为当前时间步长设置单位单元格(但除非写入文件,否则更改不是永久性的)。

类型:

numpy.ndarray

atoms

所有粒子 (Atom ),如从 topology 文件

类型:

AtomGroup

residues

所有残留物 (Residue ))。

类型:

ResidueGroup

segments

所有细分市场 (Segment ))。

类型:

SegmentGroup

bonds

所有债券(如果在 topology ),由 Universe.atoms.bonds

类型:

topologyattrs.Bonds

angles

所有角度(如果在 topology ),与 Universe.atoms.angles

类型:

topologyattrs.Angles

dihedrals

所有二面角(如果在 topology ),与 Universe.atoms.dihedrals

类型:

topologyattrs.Dihedrals

impropers

所有不正确的二面角(如果在 topology ),与 Universe.atoms.impropers

类型:

topologyattrs.Impropers

示例

设置的示例 Universe ::

u = Universe(topology, trajectory)          # read system from file(s)
u = Universe(pdbfile)                       # read atoms and coordinates from PDB or GRO
u = Universe(topology, [traj1, traj2, ...]) # read from a list of trajectories
u = Universe(topology, traj1, traj2, ...)   # read from multiple trajectories

将新数据加载到宇宙中(替换旧轨迹并执行 not 追加)::

u.load_new(trajectory)                      # read from a new trajectory file

使用选择原子 select_atoms() ::

ag = u.select_atoms(...)

返回一个 AtomGroup

在 1.0.0 版本发生变更: Universal()现在会引发一个错误。使用宇宙(无)或 Universe.empty() 取而代之的是。删除了即时选择器。

在 2.0.0 版本发生变更: 宇宙现在可以(不)腌制了。 topologytrajectory 是在未腌制时保留的。

在 2.5.0 版本发生变更: 添加了用于的FUGY_FACTOR和LOWN_BIND参数 guess_bonds

add_Residue(segment=None, **attrs)[源代码]

为这个宇宙添加一个新的残余物

新的残基将不包含任何原子,但可以像往常一样分配给原子。如果宇宙包含多个段,则必须将其指定为关键字。

参数:
  • segment (MDAnalysis.Segment) -- 如果有多个段,则必须指定新残渣所属的段。

  • attrs (dict) -- 对于每个残留物属性,必须指定新残留物的值

返回类型:

A reference to the new Residue

抛出:

NoDataError -- 如果有任何信息丢失的话。这在进行任何更改之前发生(即更改被回滚)。

示例

添加一个新的Gly残基,然后在其中放置原子:

>>> import MDAnalysis as mda
>>> from MDAnalysis.tests.datafiles import PSF, DCD
>>> u = mda.Universe(PSF, DCD)
>>> newres = u.add_Residue(segment=u.segments[0], resid=42, resname='GLY', resnum=0)
>>> u.atoms[[1, 2, 3]].residues = newres
>>> u.select_atoms('resname GLY and resid 42 and resnum 0')
<AtomGroup with 3 atoms>
add_Segment(**attrs)[源代码]

给这个宇宙添加一个新的部分

参数:

attrs (dict) -- 对于作为关键字的每个分段属性,在新分段中给出值

返回类型:

A reference to the new Segment

抛出:

NoDataError -- 如果有任何属性未指定为关键字。

add_TopologyAttr(topologyattr, values=None)[源代码]

将新的拓扑属性添加到宇宙

将TopologyAttribute添加到宇宙可以使其在整个宇宙中对所有原子组等可用。

参数:
  • topologyattr (TopologyAttr or string) -- MDAnalysis TopologyAttr对象或可能的拓扑属性的名称。

  • values (np.ndarray, optional) -- 如果从字符串启动属性,则使用初始值。如果未提供,则新TopologyAttribute的值将为空或为零。

示例

例如,要将b因子添加到一个宇宙中:

>>> import MDAnalysis as mda
>>> from MDAnalysis.tests.datafiles import PSF, DCD
>>> u = mda.Universe(PSF, DCD)
>>> u.add_TopologyAttr('tempfactors')
>>> u.atoms.tempfactors
array([0., 0., 0., ..., 0., 0., 0.])

在 0.17.0 版本发生变更: 现在还可以添加带有名称字符串的TopologyAttrs属性(例如‘Charge’),还可以使用VALUES关键字提供初始值。

在 1.1.0 版本发生变更: 现在警告当向具有现有临时因子的宇宙添加双因子时,或向具有现有双因子的宇宙添加临时因子时。在2.0版中,MDAnalysis将不再将临时因素和b因素视为单独的属性。相反,它们将是相同属性的别名。

add_angles(values, types=None, guessed=False)[源代码]

为这个宇宙添加新的角度。

参数:
  • values (iterable of tuples, AtomGroups, or Angles; or TopologyGroup) -- 可迭代的:3个原子索引的元组,或具有3个原子的原子群,或角度。如果每个值都是一个角度,则忽略所有关键字。如果传递了原子组、角度或拓扑组,则它们 must 来自同一个宇宙。

  • types (iterable (optional, default None)) -- 无,或具有与相同长度的可哈希值的可迭代 values

  • guessed (bool or iterable (optional, default False)) -- Bool,或具有相同长度的可哈希值的可迭代数 values

  • versionadded: (..) -- 1.0.0:

add_bonds(values, types=None, guessed=False, order=None)[源代码]

将新的债券添加到这个宇宙。

参数:
  • values (iterable of tuples, AtomGroups, or Bonds; or TopologyGroup) -- 可迭代的:2个原子指数的元组,或具有2个原子的原子群,或键。如果每个值都是Bond,则忽略所有关键字。如果原子组、绑定或拓扑组被传递,则它们 must 来自同一个宇宙。

  • types (iterable (optional, default None)) -- 无,或具有与相同长度的可哈希值的可迭代 values

  • guessed (bool or iterable (optional, default False)) -- Bool,或具有相同长度的可哈希值的可迭代数 values

  • order (iterable (optional, default None)) -- 无,或具有与相同长度的可哈希值的可迭代 values

示例

使用原子组列表添加TIP4P水键::

import MDAnalysis as mda
from MDAnalysis.tests.datafiles import GRO
u = mda.Universe(GRO)
sol = u.select_atoms('resname SOL')
ow_hw1 = sol.select_atoms('name OW or name HW1').split('residue')
ow_hw2 = sol.select_atoms('name OW or name HW2').split('residue')
ow_mw = sol.select_atoms('name OW or name MW').split('residue')
u.add_bonds(ow_hw1 + ow_hw2 + ow_mw)

你只能添加来自同一宇宙的键。如果您想要添加来自不同领域的原子组、键或拓扑组,请首先将它们转换为索引。**

from MDAnalysis.tests.datafiles import PSF
u2 = mda.Universe(PSF)

#  assuming you have already added bonds to u
u2.add_bonds(u.bonds.to_indices())

在 1.0.0 版本加入.

add_dihedrals(values, types=None, guessed=False)[源代码]

向这个宇宙添加新的二面体。

参数:
  • values (iterable of tuples, AtomGroups, or Dihedrals; or TopologyGroup) -- 可迭代的:4个原子索引的元组,或具有4个原子的原子群,或二面体。如果每个值都是二面体,则忽略所有关键字。如果传递了原子组、二面体或拓扑组,则它们 must 来自同一个宇宙。

  • types (iterable (optional, default None)) -- 无,或具有与相同长度的可哈希值的可迭代 values

  • guessed (bool or iterable (optional, default False)) -- Bool,或具有相同长度的可哈希值的可迭代数 values

在 1.0.0 版本加入.

add_impropers(values, types=None, guessed=False)[源代码]

在这个宇宙中添加新的魔法师。

参数:
  • values (iterable of tuples, AtomGroups, or Impropers; or TopologyGroup) -- 可迭代的:4个原子索引的元组,或具有4个原子的原子组,或ImPropers。如果每个值都不正确,则忽略所有关键字。如果传递了原子组、ImPropers或TopologyGroup,则它们 must 来自同一个宇宙。

  • types (iterable (optional, default None)) -- 无,或具有与相同长度的可哈希值的可迭代 values

  • guessed (bool or iterable (optional, default False)) -- Bool,或具有相同长度的可哈希值的可迭代数 values

在 1.0.0 版本加入.

property coord

引用当前时间步长和宇宙坐标。

原始轨迹坐标是 Universe.coord.positions ,表示为 numpy.float32 数组。

因为 coord 是对一个 Timestep ,当一个人穿过轨迹时,它会改变其内容。

备注

为了访问坐标,最好使用 AtomGroup.positions() 方法;例如,宇宙的所有坐标都是Numy数组: Universe.atoms.positions()

copy()[源代码]

返回此宇宙的独立副本

del_TopologyAttr(topologyattr)[源代码]

从宇宙中移除拓扑属性

从宇宙中删除TopologyAttribute会使其对整个宇宙中的所有原子组等都不可用。

参数:

topologyattr (TopologyAttr or string) -- MDAnalysis TopologyAttr对象或可能的拓扑属性的名称。

示例

例如,要删除某个宇宙的因子,请执行以下操作:

>>> import MDAnalysis as mda
>>> from MDAnalysis.tests.datafiles import PSF, DCD
>>> u = mda.Universe(PSF, DCD)
>>> u.add_TopologyAttr('tempfactors')
>>> hasattr(u.atoms[:3], 'tempfactors')
True
>>>
>>> u.del_TopologyAttr('tempfactors')
>>> hasattr(u.atoms[:3], 'tempfactors')
False

在 2.0.0 版本加入.

delete_angles(values)[源代码]

从这个宇宙中删除角度。

参数:

values (iterable of tuples, AtomGroups, or Angles; or TopologyGroup) -- 可迭代的:3个原子索引的元组,或具有3个原子的原子群,或角度。如果传递了原子组、角度或拓扑组,则它们 must 来自同一个宇宙。

在 1.0.0 版本加入.

delete_bonds(values)[源代码]

从这个宇宙中删除邦德。

参数:

values (iterable of tuples, AtomGroups, or Bonds; or TopologyGroup) -- 可迭代的:2个原子指数的元组,或具有2个原子的原子群,或键。如果原子组、绑定或拓扑组被传递,则它们 must 来自同一个宇宙。

示例

从宇宙中删除债券::

import MDAnalysis as mda
from MDAnalysis.tests.datafiles import PSF
u = mda.Universe(PSF)

#  delete first 5 bonds
u.delete_bonds(u.bonds[:5])

如果您要删除原子组、键或拓扑组形式的键,则它们必须来自同一宇宙。如果你想删除来自另一个宇宙的债券,首先将它们转换为指数。**

from MDAnalysis.tests.datafiles import PDB
u2 = mda.Universe(PDB)

u.delete_bonds(u2.bonds.to_indices())

在 1.0.0 版本加入.

delete_dihedrals(values)[源代码]

从这个宇宙中删除二面体。

参数:

values (iterable of tuples, AtomGroups, or Dihedrals; or TopologyGroup) -- 可迭代的:4个原子索引的元组,或具有4个原子的原子群,或二面体。如果传递了原子组、二面体或拓扑组,则它们 must 来自同一个宇宙。

在 1.0.0 版本加入.

delete_impropers(values)[源代码]

从这个宇宙中删除无能。

参数:

values (iterable of tuples, AtomGroups, or Impropers; or TopologyGroup) -- 可迭代的:4个原子索引的元组,或具有4个原子的原子组,或ImPropers。如果传递了原子组、角度或拓扑组,则它们 must 来自同一个宇宙。

在 1.0.0 版本加入.

classmethod empty(n_atoms, n_residues=1, n_segments=1, n_frames=1, atom_resindex=None, residue_segindex=None, trajectory=False, velocities=False, forces=False)[源代码]

创造一个空白的宇宙

对于在不需要现有文件的情况下构建宇宙非常有用,例如用于系统构建。

如果 trajectory 设置为 True ,a MDAnalysis.coordinates.memory.MemoryReader 将依附于宇宙。

参数:
  • n_atoms (int) -- 宇宙中的原子数

  • n_residues (int, default 1) -- 宇宙中的残数,默认为1

  • n_segments (int, default 1) -- 宇宙中的分段数,默认为1

  • n_frames (int, default 1) -- 宇宙中的帧数量,默认为1

  • atom_resindex (array like, optional) -- 原子到残基的映射,例如6个原子, atom_resindex=[0, 0, 1, 1, 2, 2] 会在3个残基中各放2个原子。

  • residue_segindex (array like, optional) -- 残基到片段的映射

  • trajectory (bool, optional) -- 如果 True ,附加一个 MDAnalysis.coordinates.memory.MemoryReader 允许设置和写入坐标。

  • velocities (bool, optional) -- 将速度包括在 MDAnalysis.coordinates.memory.MemoryReader

  • forces (bool, optional) -- 将力包括在 MDAnalysis.coordinates.memory.MemoryReader

返回:

Universe 具有原子虚值和未定义坐标/速度/力的实例

返回类型:

Universe

示例

例如,要创建一个包含6个原子和2个残基、原子位置和质量属性的新宇宙:

u = mda.Universe.empty(6, 2,
                       atom_resindex=np.array([0, 0, 0, 1, 1, 1]),
                       trajectory=True,
      )
u.add_TopologyAttr('masses')

在 0.17.0 版本加入.

在 0.19.0 版本发生变更: 轨迹=True时附加的读卡器现在是内存读卡器

在 1.0.0 版本发生变更: 宇宙现在可以用0个原子来创造

classmethod from_smiles(smiles, sanitize=True, addHs=True, generate_coordinates=True, numConfs=1, rdkit_kwargs={}, **kwargs)[源代码]

使用rdkit从微笑字符串创建宇宙

参数:
  • smiles (str) -- 微笑串

  • sanitize (bool (optional, default True)) -- 切换分子的消毒

  • addHs (bool (optional, default True)) -- 在分子中加入所有必需的氢

  • generate_coordinates (bool (optional, default True)) -- 使用RDKit生成3D坐标 AllChem.EmbedMultipleConfs() 功能。需要添加氢气 addHs 参数

  • numConfs (int (optional, default 1)) -- 要为其生成坐标的帧数。在以下情况下忽略 generate_coordinates=False

  • rdkit_kwargs (dict (optional)) -- 传递给RDKit的其他参数 EmbedMultipleConfs() 功能

  • kwargs (dict) -- 宇宙创建过程中传递的参数

返回:

宇宙 --包含从输入微笑字符串派生的原子名称和拓扑信息(键);如果满足以下条件,则包括坐标 generate_coordinates 设置为 True

返回类型:

Universe

示例

要创造一个有10种乙醇构象的宇宙:

>>> from rdkit.Chem import AllChem
>>> u = mda.Universe.from_smiles('CCO', numConfs=10)
>>> u
<Universe with 9 atoms>
>>> u.trajectory
<RDKitReader with 10 frames of 9 atoms>

要使用不同的形状生成算法,如ETKDGv3,请执行以下操作:

>>> u = mda.Universe.from_smiles('CCO', rdkit_kwargs=dict(
...      params=AllChem.ETKDGv3()))
>>> u.trajectory
<RDKitReader with 1 frames of 9 atoms>

在 2.0.0 版本加入.

property kwargs

用于初始化此语义层的关键字参数

load_new(filename, format=None, in_memory=False, in_memory_step=1, **kwargs)[源代码]

加载坐标自 filename

的文件格式 filename 是从文件名后缀自动检测到的,也可以使用 format 关键字。通过提供文件名列表,可以将文件序列读取为单个虚拟轨迹。

参数:
  • filename (str or list) -- 坐标文件(单帧或轨迹) or 一个文件名列表,一个接一个地读取。

  • format (str or list or object (optional)) -- 提供坐标或轨迹文件的文件格式; None 从文件扩展名猜出来的。请注意,如果提供了文件名列表,则此关键字不起作用,因为链接的读取器必须猜测每个单独列表成员的文件格式 [None] 。还可以传递 MDAnalysis.coordinates.base.ProtoReader 以定义要在轨迹文件上使用的自定义读取器。

  • in_memory (bool (optional)) -- 直接将轨迹加载到内存中 MemoryReader 。。添加的版本::0.16.0

  • **kwargs (dict) -- 其他kwarg被传递给轨迹读取器(仅供高级使用)

返回:

universe

返回类型:

Universe

抛出:

TypeError -- 如果无法确定轨迹格式或未找到合适的轨迹读取器

在 0.8 版本发生变更: 如果提供的列表或序列 filename 仅包含单个条目,则将其视为单个坐标文件。这会导致它不会被 ChainReader 而是直接由其专门的文件格式读取器使用,该读取器通常具有比 ChainReader

在 0.17.0 版本发生变更: 现在返回一个 Universe 而不是文件/数组和检测到的文件类型的元组。

在 2.4.0 版本发生变更: 如果存在以下情况,则通过Kwargs in_memory=True

property models

这个宇宙中的模特。

MMTF格式可以为给定结构定义各种模型。拓扑(例如残基恒等式)可以在不同的模型之间改变,导致每个模型中的原子数量不同。

返回类型:

A list of AtomGroups, each representing a single model.

备注

这需要底层拓扑具有模型。否则,一个 NoDataError 都被养大了。

select_atoms(*args, **kwargs)[源代码]

选择原子。

transfer_to_memory(start=None, stop=None, step=None, verbose=False, **kwargs)[源代码]

将轨迹传输到In Memory表示法。

将当前轨迹读取器对象替换为 MDAnalysis.coordinates.memory.MemoryReader 以支持在位编辑坐标。

参数:
  • start (int, optional) -- 从第n帧开始阅读。

  • stop (int, optional) -- 读到第n帧,不包括第n帧。

  • step (int, optional) -- 每隔n帧读一遍。 [1]

  • verbose (bool, optional) -- 如果设置为True,将把加载轨迹的进度打印到内存。默认值为FALSE。

在 0.16.0 版本加入.

在 2.4.0 版本发生变更: 通过Kwargs传递到Memory Reader

11.2.1.2. 功能

MDAnalysis.core.universe.Merge(*args)[源代码]

创建新的新的 Universe 从一个或多个 AtomGroup 实例。

参数:

*args (AtomGroup) -- 一个或多个原子组。

返回:

universe

返回类型:

Universe

抛出:
  • ValueError -- 参数太少或原子组为空,并且

  • TypeError -- 参数不是 AtomGroup 实例。

备注

由此产生的 Universe 将只继承所有合并宇宙共享的公共拓扑属性。

AtomGroup 实例可以来自不同的领域,也可以直接来自 select_atoms() 打电话。

Merge 也可以与单个 AtomGroup 例如,如果用户想要对 Universe

如果有多个 AtomGroup 实例来自相同的 Universe ,则合并将首先简单地将 AtomGroup 实例。

合并不会创建完整的轨迹,而是仅创建单个结构,即使输入由一个或多个轨迹组成。但是,您可以使用 MemoryReader 要构建新宇宙的轨迹,请参见 创建子系统的内存中轨迹

示例

在这个例子中,蛋白质、配体和溶剂被外部制备在三个不同的PDB文件中。它们被加载到单独的 Universe 对象(可以对其进行进一步操作,例如重新编号、重新标记、旋转等)这个 Merge() 命令用于将它们组合在一起::

u1 = Universe("protein.pdb")
u2 = Universe("ligand.pdb")
u3 = Universe("solvent.pdb")
u = Merge(u1.select_atoms("protein"), u2.atoms, u3.atoms)
u.atoms.write("system.pdb")

然后将整个系统写出到新的PDB文件中。

在 0.9.0 版本发生变更: 引发异常而不是断言错误。

在 0.16.0 版本发生变更: 轨迹现在是一个 MemoryReader