pymatgen专题

pymatgen:分子成键图与官能团

用六种实际分子几何识别成键、杂原子和官能团原子集合,理解图标签与化学性质的区别。

更新于 2026-11-12约 4 分钟阅读按任务与环境选择适用配置
阅读本篇目录

分子XYZ保存元素和坐标,通常不直接保存化学键。做官能团或碎片分析前,先检查程序由几何识别出了哪些连接。

本例复用实际乙醇、水分子几何,并在鸢算科技集群用xTB6.7.1、GFN2、--opt tight --acc 0.1实际优化二甲醚、苯、乙腈和甲酸。后处理使用pymatgen2026.9.24,分析六个分子的成键图和官能团原子集合,不把图识别结果当作新的量化能量。

下载完整XYZ、实际数据、分析与绘图脚本。

unzip pymatgen-molecule-tools-wave712-*.zip
cd pymatgen-molecule-tools
bash results.sh
bash plot.sh

六个实际分子的成键图,数字为零起算原子编号

1. 在个人目录准备依赖#

module load pymatgen/2026.9.24
bash prepare.sh

环境为Python3.11、NumPy/SciPy、NetworkX、Matplotlib和pymatgen。几何成键使用OpenBabel3.1.0,由社区预编译包openbabel-wheel3.1.1.22提供。prepare.sh按固定wheel哈希写入当前目录的toolchain/python,不向公共Python环境安装。

之后用随包python.sh调用这个个人依赖。已有实际结构,执行下面的分析不会重新跑GFN2优化:

bash run.sh
ls analysis
ls results

2. 先看输入和原子顺序#

inputs/ethanol.xyz:

9
 energy: -11.391867310820 gnorm: 0.000299419718 xtb: 6.7.1 (edcfbbe)
C            1.17784801515601       -0.40510999568080       -0.00000000123948
C           -0.00334370518500        0.55304603376793       -0.00000000342139
O           -1.19421126728805       -0.20645321724354        0.00000000429925
H           -1.95104546120814        0.38770866536088        0.00000000693101
H            0.03869188425904        1.19716762052906        0.89093357695092
H            0.03869187939527        1.19716761632670       -0.89093358681782
H            2.11045230827543        0.15200225770504        0.00000001134330
H            1.13629716646230       -1.03862249390825        0.88157637899625
H            1.13629718013315       -1.03862248685702       -0.88157638704205

XYZ中的坐标单位Å,图和Python接口的原子编号从0开始。后续出现{2,3}这样的集合,是对应文件中的原子序号;换结构或重新排序后不能照抄。

3. 提取官能团#

bash python.sh - <<'PY'
from pymatgen.core import Molecule
from pymatgen.analysis.functional_groups import FunctionalGroupExtractor
m = Molecule.from_file('inputs/ethanol.xyz')
extractor = FunctionalGroupExtractor(m, optimize=False)
groups = extractor.get_all_functional_groups()
print('杂原子:', extractor.get_heteroatoms())
print('特殊碳:', extractor.get_special_carbon())
print('原子集合:', groups)
print(extractor.categorize_functional_groups(groups))
PY

optimize=False保留输入坐标,不在识别时自动补氢或改构型。本例乙醇的杂原子为0起算的O位点2;羟基集合为{2,3},另识别出一个甲基集合。二甲醚则有两个甲基集合,乙腈识别出含C≡N的集合,甲酸的含氧部分与连接原子组成一组。

输出中的[OH]、[CH3]等是提取子图的SMILES标签,不表示母分子实际带有相应自由基或电荷。电子态仍应由完整分子的量化计算确定。

4. 苯环为什么单独设置#

groups = extractor.get_all_functional_groups(catch_basic=False)

这行是可选参数示意;分析苯时先把m换成inputs/benzene.xyz并重新建立提取器。本例苯采用catch_basic=False,避免基本环集合与已经识别出的芳香集合重叠。原生算法可能返回重叠原子集合,不能直接把集合条数当作唯一的化学官能团数。

5. 检查实际成键#

cat reference-data/Molecule-tool-summary.csv
cat reference-data/Molecule-functional-groups.csv
cat reference-data/Molecule-bonds.csv
分子 原子数 连接边数
乙醇 9 8
水 3 2
二甲醚 9 8
苯 12 12
乙腈 6 5
甲酸 5 4

这里一条边表示一对原子连接,三键不会被计作三条独立边。图为三维结构的主轴投影,便于看连接和编号;精确键长、键角仍应从三维坐标读取。

换自己的分子时,先检查氢是否完整、坐标单位和成键结果。金属配位、离子体系或特殊键型需要适用的建图策略,不能只依赖默认距离感知。

继续阅读分子匹配与去重和碎片与开环。接口见pymatgen官能团模块。

需要根据你的体系选择资源?联系讨论计算需求。实际可用软件与权限,以当前账户和运行环境为准。

查看配图

放大后可滚动查看细节,按 Esc 关闭。

100%查看原图 ↗