MDAnalysis中文教程-AtomGroup
AtomGroup
Universe包含分子系统的所有粒子。MDAnalysis将粒子称为Atom,无论它是否真是(例如,它可能是联合原子粒子或者粗粒化珠子)。Atoms被AtomGroup分组,Universe的主组可以通过Universe.atoms获取。
创建一个AtomGroup
原子选择语言
AtomGroup实例通常使用Universe.select_atoms或者操纵另一个AtomGroup来创建,例如切片。详见 Atom selection language篇。
1 | import MDAnalysis as mda |
索引和切片
AtomGroup可以像Python的列表一样索引和切片,例如:
1 | print(u.atoms[0]) |
单索引返回Atom,复杂索引和切片都返回一个AtomGroup。
支持布尔索引
分组操作符和集合方法
MDAnalysis 支持多种比较AtomGroup或构建新AtomGroup的方法:组操作符(例如 concatenate()、subtract())和集合方法(例如 union()、difference())。组操作符与集合方法实现的效果类似。然而,一个关键的区别在于,concatenate() 和 subtract() 会保留原子的顺序以及任何重复项。而 union() 和 difference() 则返回一个原子组,其中每个原子都是唯一的,并按照其拓扑索引排序。
1 | ag1 = u.atoms[1:6] |
可用的操作符
不像集合操作和原子选择语句,拼接和减法保留了原子的顺序,包括重复原子。
- len(s):组中原子数
- s == t:组s和组t是否相同,元素和顺序都相同
- s.concatenate(t):组s和组t的拼接,等价于:s+t
- s.substract(t):组s中存在但组t中不存在的原子,等价于:s-t
可用集合操作
这些方法每个都创建去重原子并排序的集合
- s.isdisjoint(t):True如果s和t没有共同的原子
- s.issubset(t):True如果s是t的子集
- s.is_strict_subset(t):True如果s是t的真子集
- s.issuperset(t):True如果s是t的超集
- s.is_strict_superset(t):True如果s是t的真超集
- s.union(t):s和t的并集,等价于:s|t
- s.intersection(t):s和t的交集,等价于:s&t
- s.difference(t):s中存在但t中不存在的原子,等价于:s-t
- s.symmetric_difference(t):s和t的对称差,等价于:s^t == s-t + t-s
分组和分割
AtomGroup可以从另一个组通过性质分割原子构建。
AtomGroup.split可以通过分割另一组的连接级别(原子、残基、分子、片段)创建AtomGroup列表。
1 | ag1 = u.atoms[:100] |
AtomGroup也可以根据(多重)拓扑属性值分割,产生一个字典。
1 | u.atoms.groupby('masses') |
从原子构建
AtomGroup也可以从原子列表构建,例如:
1 | atom1 = u.atoms[4] |
一个快捷操作是就简单地将一个Atom加入到AtomGroup中:ag += atom3
另一个可选的方式是提供原子的索引列表和所属Universe:mda.AtomGroup([0, 1, 2], u)
顺序和唯一性
以下创建AtomGroup的方法会产生有序、去重的原子列表:
- 原子选择语句
- 切片
- 集合
- AtomGroup.split和AtompGroup.groupby
以下方法回产生一个用户定义顺序的、包含重复元素的AtomGroup
- 索引列表
- AtomGroup.concatenate 和 AtomGroup.subtract
- 直接从Atoms构建
空AtomGroup
MDAnalysis可以使用空AtomGroup,例如:u.atoms[[]],等价于mda.AtomGroup([], u)
每种创建AtomGroup的方法都可以创建空的AtomGroup。这允许分析方法跳过空AtomGroup而不是报错。
动态更新AtomGroup
正常的 AtomGroup 是静态的,其中的原子不会随着轨迹系的变化而改变。有几种方法需要动态更新 AtomGroups。这些通常是使用原子选择语言创建的。详见selections篇。
方法
MDAnalysis 中的大多数分析功能都是在分析模块中实现的,但许多有趣的方法可以直接从AtomGroup访问。例如,可以从 AtomGroups 创建 Bonds、Angles、Dihedrals 和 ImproperDihedrals。如果存在所需的拓扑属性,则许多分析方法也可用于AtomGroup、ResidueGroup和SegmentGroup。