CFG到EXTXYZ格式转换器
本模块用于将MTP结构CFG文件转换为EXTXYZ格式,支持能量、应力等物理信息的提取和转换。
模块概述
该模块提供了一组函数,用于:
解析包含多个CFG结构的文件
提取原子结构、晶格、能量、应力等信息
将解析的数据写入EXTXYZ格式文件
支持原子类型到元素符号的映射
主要函数说明
parse_cfg_file(file_path)
解析包含多个CFG结构的文件。
参数:
- file_path: CFG文件路径(字符串)
返回: - 包含所有配置信息的字典列表,每个字典代表一个结构
返回值结构:
- size: 原子数量(整数)
- supercell: 超胞晶格向量(3×3浮点数列表)
- volume: 晶胞体积(浮点数)
- atoms: 原子信息列表(字典列表)
- energy: 能量值(浮点数,可选)
- stress: 应力张量(字典,可选)
作用: 读取CFG格式文件,提取其中的结构信息,支持容错处理和数据验证。
write_extxyz(configs, output_file, type_map=None, float_fmt=”.9f”)
将解析后的配置写入EXTXYZ文件。
参数:
- configs: parse_cfg_file()返回的配置列表
- output_file: 输出文件路径(字符串)
- type_map: 原子类型到元素符号的映射字典(可选)
- float_fmt: 浮点数格式字符串(默认”.9f”)
返回: - 无返回值
作用: 将解析的CFG结构数据写入标准的EXTXYZ格式文件,包含晶格、能量、应力等物理量。
原子类型映射(type_map)
type_map 参数用于将CFG中的整数原子类型映射为元素符号:
# 示例:将类型0映射为Ni,类型1映射为Cr
type_map = {0: 'Ni', 1: 'Cr', 2: 'Fe'}
如果没有提供type_map,模块会:
1. 从命令行参数自动创建映射
2. 或使用默认映射 {0: 'X'}
3. 或自动检测原子类型并使用 Elem0, Elem1 等默认名称
输入文件格式(CFG)
CFG文件格式示例:
BEGIN_CFG
Size
2
Supercell
1.0 0.0 0.0
0.0 1.0 0.0
0.0 0.0 1.0
AtomData: id type cartes_x cartes_y cartes_z fx fy fz
1 0 0.0 0.0 0.0 0.0 0.0 0.0
2 0 0.5 0.5 0.5 0.0 0.0 0.0
Energy
-10.5
PlusStress
0.0 0.0 0.0 0.0 0.0 0.0
END_CFG
支持的关键字:
- BEGIN_CFG / END_CFG: 结构块标记
- Size: 原子数量
- Supercell: 晶格向量
- AtomData: 原子坐标和力
- Energy: 体系能量
- PlusStress: 应力张量
输出文件格式(EXTXYZ)
EXTXYZ格式示例:
2
Lattice="1.000000000 0.000000000 0.000000000 0.000000000 1.000000000 0.000000000 0.000000000 0.000000000 1.000000000" Properties=species:S:1:pos:R:3:forces:R:3 stress="0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000" free_energy=-10.500000000 energy=-10.500000000 pbc="T T T"
Ni 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000
Ni 0.500000000 0.500000000 0.500000000 0.000000000 0.000000000 0.000000000
使用示例
# 命令行使用
python cfg2extxyz.py train.cfg Ni Cr Fe
# Python代码中使用
from cfg2extxyz import parse_cfg_file, write_extxyz
# 解析CFG文件
configs = parse_cfg_file("train.cfg")
# 设置原子类型映射
type_map = {0: 'Ni', 1: 'Cr', 2: 'Fe'}
# 写入EXTXYZ文件
write_extxyz(configs, "output.extxyz", type_map=type_map)
错误处理
模块包含完善的错误处理和日志记录: - 文件不存在时会抛出FileNotFoundError - 格式错误时会记录警告并尝试继续处理 - 缺少必要信息时会使用默认值或跳过该结构 - 所有操作都有详细的日志输出
注意事项
CFG文件中每个结构必须用BEGIN_CFG和END_CFG包围
原子类型编号从0开始,需要正确映射到元素符号
如果没有力信息,会使用零向量作为默认值
浮点数精度可通过float_fmt参数控制