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
, defaultNone
) -- 提供拓扑文件的文件格式;None
从文件扩展名猜出来的。还可以传递MDAnalysis.topology.base.TopologyReaderBase
定义要在拓扑文件上使用的自定义读取器。format (str,
None
, defaultNone
) -- 提供坐标或轨迹文件的文件格式;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
, defaultNone
) -- 与配合使用 guess_bonds 。提供一个词典,给出猜键中使用的每种原子类型的vdwRadii。fudge_factor (float, default [0.55]) -- 与配合使用 guess_bonds 。提供原子必须相互重叠才能被认为是键的因子。
lower_bound (float, default [0.1]) -- 与配合使用 guess_bonds 。提供最小保证金长度。
transformations (function or list,
None
, defaultNone
) -- 提供您希望在阅读后应用于轨迹的变换列表。有关转换,请参阅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.) --
- dimensions
系统尺寸(模拟单元格,如果在轨迹中设置) current time step (见
MDAnalysis.coordinates.timestep.Timestep.dimensions
)。可以为当前时间步长设置单位单元格(但除非写入文件,否则更改不是永久性的)。- 类型:
- bonds
所有债券(如果在 topology ),由
Universe.atoms.bonds
- angles
所有角度(如果在 topology ),与
Universe.atoms.angles
- dihedrals
所有二面角(如果在 topology ),与
Universe.atoms.dihedrals
- impropers
所有不正确的二面角(如果在 topology ),与
Universe.atoms.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 版本发生变更: 宇宙现在可以(不)腌制了。
topology
和trajectory
是在未腌制时保留的。在 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()
。
- 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
,aMDAnalysis.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
具有原子虚值和未定义坐标/速度/力的实例- 返回类型:
示例
例如,要创建一个包含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
- 返回类型:
示例
要创造一个有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 关键字。通过提供文件名列表,可以将文件序列读取为单个虚拟轨迹。
- 参数:
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
- 返回类型:
- 抛出:
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
都被养大了。
- transfer_to_memory(start=None, stop=None, step=None, verbose=False, **kwargs)[源代码]
将轨迹传输到In Memory表示法。
将当前轨迹读取器对象替换为
MDAnalysis.coordinates.memory.MemoryReader
以支持在位编辑坐标。- 参数:
在 0.16.0 版本加入.
在 2.4.0 版本发生变更: 通过Kwargs传递到Memory Reader
11.2.1.2. 功能
- MDAnalysis.core.universe.Merge(*args)[源代码]
创建新的新的
Universe
从一个或多个AtomGroup
实例。- 参数:
*args (
AtomGroup
) -- 一个或多个原子组。- 返回:
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
。