pwdata 数据转换工具
pwdata 数据转换工具介绍
当前手册页使用 pwdata >= 0.5.6
pwdata 是 MatPL 的数据预处理工具,包括如下功能:
-
atom.config(PWmat)、POSCAR(VASP)、lmp.init(Lammps)、cp2k.init(CP2K)之间的文件互转; -
对这些结构做扩胞、晶格缩放、晶格或原子位置微扰;
-
提取各种轨迹文件
MOVEMENT(PWmat)、OUTCAR(VASP)、lammps dump file(Lammps)、cp2k md file(CP2K)或常用训练数据pwmlff/npy、extxyz、deepmd/npy、deepmd/raw、meta OMAT24 开源数据集之后转换为pwmlff/npy或者extxyz格式文件。 对于meta数据集, 增加了cpu并行和查询操作,以快速从超过一亿结构的数据库中查找自己想要的结构。
支持的数据类型
| Software | file | multi-Image | label | format |
|---|---|---|---|---|
| PWmat | MOVEMENT | True | True | 'pwmat/movement' |
| PWmat | OUT.MLMD | False | True | 'pwmat/movement' |
| PWmat | atom.config | False | False | 'pwmat/config' |
| VASP | OUTCAR | True | True | 'vasp/outcar' |
| VASP | poscar | False | False | 'vasp/poscar' |
| LAMMPS | lmp.init | False | False | 'lammps/lmp' |
| LAMMPS | dump | True | False | 'lammps/dump' |
| CP2K | stdout, xyz, pdb | True | True | 'cp2k/md' |
| CP2K | stdout | False | True | 'cp2k/scf' |
| MatPL | *.npy | True | True | 'pwmlff/npy' |
| DeepMD (read) | *.npy, *.raw | True | True | 'deepmd/npy', 'deepmd/raw' |
| * (extended xyz) | *.xyz | True | True | 'extxyz' |
| Meta (read) | *aselmdb | True | True | 'meta' |
安装方式
pip命令安装:
pip install pwdata
#安装pwdata,如果已安装,则升级到最新版本
pip install pwdata --upgrade
# 列出所有可安装版本
pip index versions pwdata
# 输出结果示例:
# pwdata (0.5.6)
# Available versions: 0.5.6, 0.5.5, 0.5.4, 0.5.3, 0.4.7, 0.4.0
# 安装指定版本
pip install pwdata==n.m.o
pwdata 命令行调用方式
pwdata 支持 命令行操作 以及 源码接入 两种方式。
命令列表:
pwdata 命令列表如下,您可以通过 '-h' 选项获取该命令列表的详细解释以及所有支持参数。这里 pwdata -h 用于输出所有可用命令,以及该命令的使用例子。
pwdata -h
pwdata convert_config or cvt_config -h
pwdata convert_configs or cvt_configs -h
pwdata scale_cell or scale -h
pwdata super_cell or super -h
pwdata perturb -h
pwdata count -h
pwdata convert_config 结构互转
该命令用于各种结构之间的互转,您可以使用 convert_config 或者它的缩写 cvt_config
参数如下所示
pwdata convert_config [-h] -i INPUT -f INPUT_FORMAT -o OUTPUT_FORMAT [-s SAVENAME] [-c] [-t ATOM_TYPES [ATOM_TYPES ...]]
-h
输出帮助信息,将列出命令的所有可用参数及其解释
-i
必选参数,输入文件的文件路径,支持绝对路径或者相对路径
-f
可选参数,输入文件的格式,如不指定将根据输入文件自动推测输入格式,支持的格式有 ['pwmat/config','vasp/poscar', 'lammps/lmp', 'cp2k/scf']
-o
必选参数,输出文件的格式,支持的格式有['pwmat/config','vasp/poscar', 'lammps/lmp']
-s
输出文件的名称,与 -o 配合使用。如果未指定,对于 pwmat/config 格式将使用 atom.config 作为文件名,对于 vasp/poscar 格式使用 POSCAR,对于 lammps/lmp 格式使用 lammps.lmp 作为文件名
-c
是否使用分数坐标,如果指定了 -c 参数,在保存结构时将使用笛卡尔坐标,否则使用分数坐标。注意,pwmat/config 只支持分数坐标,此时该参数将失效
-t
输入结构的原子类型,该参数用于当输入结构是 lammps/lmp或 lammps/dump 格式时指定结构的原子类型,可以是元素名称或者原子编号,顺序需要与输入结构中保持一致。对于其他格式的输入文件,该参数失效
我们在源码的根目录下提供了 examples,您可以下载后使用这些测试例子:
# convert_config 案例:atom.config 转 poscar
# 执行完毕后将在examples/test_workdir目录下生成结构文件 cvtcnf_atom.POSCAR
pwdata cvt_config -i examples/pwmat_data/LiGePS_atom.config -s examples/test_workdir/cvtcnf_atom.POSCAR -o vasp/poscar
pwdata convert_configs 训练数据转换
提取各种轨迹文件 MOVEMENT(PWmat)、OUTCAR(VASP)、lammps dump file(Lammps)、cp2k md file(CP2K) 或常用训练数据 pwmlff/npy、extxyz、deepmd/npy、deepmd/raw、meta OMAT24 开源数据集为 pwmlff/npy 或者 extxyz 格式文件。您可以使用 convert_configs 或者它的缩写 cvt_configs.
参数如下所示
pwdata [-h] -i INPUT [INPUT ...] [-f INPUT_FORMAT] [-s SAVEPATH] [-o OUTPUT_FORMAT] [-r]
[-m MERGE] [-g GAP] [-q QUERY] [-n CPU_NUMS] [-t ATOM_TYPES [ATOM_TYPES ...]]
-h
输出帮助信息,将列出命令的所有可用参数及其解释
-i
必选参数,输入文件的文件路径,支持绝对路径或者相对路径。该参数为列表形式,支持输入多个文件路径或者目录。pwdata对 pwmlff/npy、extxyz、deepmd/npy、deepmd/raw、meta OMAT24 开源数据集实现了目录自动查询,您只需要指定数据源根目录即可。
例如对于examples/pwmlff_data/LiSiC,该目录下存在'C2, C448, C448Li75, C64Si32, Li1Si24, Li3Si8, Li8, Li88Si20, Si1, Si217'这些子目录, 输入'-i examples/pwmlff_data' 即可。
此外,如果您的文件或者目录较多(如meta数据库这类非常多的子文件),您也可以将这些路径写入一个json文件中,如下所示,命令中指定-i jsonfile 即可。
{
"datapath" : [
"/share/public/PWMLFF_test_data/eqv2-models/datasets/decompress/Omat24/train/rattled-1000-subsampled",
"/share/public/PWMLFF_test_data/eqv2-models/datasets/decompress/Omat24/train/rattled-300",
"/share/public/PWMLFF_test_data/eqv2-models/datasets/decompress/Omat24/train/rattled-300-subsampled"
]
}
-f
可选参数,输入文件的格式,pwdata实现了对输入数据的格式自动推理,不需要显式指定输入格式。支持的格式有 ['pwmat/movement', 'vasp/outcar', 'lammps/dump', 'cp2k/md', 'pwmlff/npy', 'deepmd/npy', 'deepmd/raw', 'extxyz', 'meta']
-o
可选参数,输出文件的格式,支持的格式有['pwmlff/npy','extxyz'],默认格式为'pwmlff/npy'
-s
可选参数,输出文件的目录,如不指定,将使用当前目录
-m
可选参数,int类型,该参数仅用于输出文件格式为extxyz,设置 '-m 1' 所有结构会保存到一个xyz文件中,默认保存到一个xyz文件中。设置 '-m 0' 将按照元素类型保存到不同的xyz文件中,
-g
可选参数,int类型,该参数用于提取轨迹文件时,指定每隔 多少步取一帧结构。默认值为1
-q
可选参数,str类型,该参数值在输入类型为meta时生效,用于查询数据库操作,对于 -q 指定的参数,建议用请用引号包裹,避免特殊字符如H>4,shell会把>符号解释为重定向符号,详细的使用参考 meta查询演示。
-n
可选参数,int类型,该参数在输入类型为meta时生效,用于设置并行查询数据库时使用的CPU核数,默认使用单核
-t
如果输入格式是 lammps/lmp或 lammps/dump 格式,该参数用于指定结构的原子类型,可以是元素名称或者原子编号,顺序需要与输入结构中保持一致
如果输入格式是meta,该该参数用于查找所有只存在这些元素类型的结构。
pwdata convert_configs 案例
我们在源码的根目录下提供了 examples,您可以下载后使用这些测试例子:
例1. 将PWmat 轨 迹文件 50_LiGePS_movement 和 lisi_50_movement 每隔5步提取一帧,存在examples/test_workdir/3_1_configs_extxyz目录下
pwdata convert_configs -i examples/pwmat_data/50_LiGePS_movement examples/pwmat_data/lisi_50_movement -s examples/test_workdir/3_1_configs_extxyz -o extxyz -g 5
例2. 将examples/deepmd_data/alloy目录下的所有 deepmd/npy 格式文件提取为pwmlff/npy格式
pwdata convert_configs -i examples/deepmd_data/alloy -s ./test_workdir/7_0_configs_PWdata
例3. 将 examples/xyz_data 目录下的所有后缀为 xyz 的文件提取为pwmlff/npy格式,保存在examples/test_workdir/5_0_configs_PWdata目录
pwdata convert_configs -i examples/xyz_data -s examples/test_workdir/5_0_configs_PWdata -g 1
例4.在examples/meta_data/alex_val 目录下所有后缀为.aselmdb的 meta数据库中,查询元素类型为Pt和Ge的结构,将查询到的所有结构保存到./test_workdir/10_1_configs_extxyz目录下
pwdata convert_configs -i examples/meta_data/alex_val -s ./test_workdir/10_1_configs_extxyz -t Pt Ge
例5. 在meta_data['data_path']中列出的所有目录或者文件下的所有后缀为.aselmdb的 meta数据库中,查询元素类型为Pt和Ge的结构,把查询到的所有结构保存到./test_workdir/ 10_1_configs_extxyz目录下
pwdata convert_configs -i examples/meta_data.json -s ./test_workdir/10_1_configs_extxyz -o extxyz -t Pt Ge
pwdata convert_configs meta 查询例子
例1. 查询只包含 Pt和Ge 两种元素的结构,并将查询结果输出到为xyz格式。
pwdata convert_configs -i examples/meta_data/alex_val/alex_go_aao_001.aselmdb examples/meta_data/alex_val/alex_go_aao_002.aselmdb -s examples/test_workdir/10_1_configs_extxyz -o extxyz -t Pt Ge
例2. 使用-q 参数查询,查询包含了Cu元素的所有结构
pwdata convert_configs -i examples/meta_data/alex_val/alex_go_aao_001.aselmdb examples/meta_data/alex_val/alex_go_aao_002.aselmdb -s examples/test_workdir/10_1_configs_extxyz -o extxyz -q 'Cu'
例3. 使用-q 参数查询,查询结构中H原子数目少于3个的所有结构
pwdata convert_configs -i examples/meta_data/alex_val/alex_go_aao_001.aselmdb examples/meta_data/alex_val/alex_go_aao_002.aselmdb -s examples/test_workdir/10_1_configs_extxyz -o extxyz -q 'H<3'
例4. 使用-q 参数查询,查询结构中,包含Cu原子并且H原子数目少于3个的所有结构
pwdata convert_configs -i examples/meta_data/alex_val/alex_go_aao_001.aselmdb examples/meta_data/alex_val/alex_go_aao_002.aselmdb -s examples/test_workdir/10_1_configs_extxyz -o extxyz -q 'Cu,H<3'
例5. 使 用-q 参数查询,查询结构中,至少包含2个H原子且至少包含1个O原子的所有结构
pwdata convert_configs -i examples/meta_data/alex_val/alex_go_aao_001.aselmdb examples/meta_data/alex_val/alex_go_aao_002.aselmdb -s examples/test_workdir/10_1_configs_extxyz -o extxyz -q 'H2O'
一些其他查询语句
| ---query string---| -------------------------Function Explanation---------------------------- |
| v3 | has ‘v3’ key |
| abc=bla-bla | has key ‘abc’ with value ‘bla-bla’ |
| v3,abc=bla-bla | both of the above |
| calculator=nwchem | calculations done with NWChem |
| 2.2<bandgap<3.0 | ‘bandgap’ key has value between 2.2 and 3.0 |
| natoms>=10 | 10 or more atoms |
| id=2345 | specific id |
| age<1h | not older than 1 hour |
| age>1y | older than 1 year |
| pbc=TTT | Periodic boundary conditions along all three axes |
| pbc=TTF | Periodic boundary conditions along the first two axes (F=False, T=True) |
https://databases.fysik.dtu.dk/ase/ase/db/db.html#id7
pwdata 使用了输入格式的自动推测,以及数据目录自动查询,指定 pwmlff/npy、extxyz、deepmd/npy、deepmd/raw、meta OMAT24 开源数据集 这些数据源的根目录即可自动读取。
注意:pwdata在自动查找数据源时,如您未显式指定数据源格式,pwdata会将输入目录下的所有可用数据源都作为输入数据。
pwdata scale_cell 晶格缩放
该命令用于对结构的晶格做缩放,您可以使用 scale_cell 或者它的缩写 scale
参数如下所示
pwdata scale_cell [-h] -r SCALE_FACTOR [SCALE_FACTOR ...] -i INPUT -f INPUT_FORMAT [-s SAVENAME] [-o OUTPUT_FORMAT] [-c] [-t ATOM_TYPES [ATOM_TYPES ...]]
-h
输出帮助信息,将列出命令的所有可用参数及其解释
-r
必选参数,晶格的缩放因子,, factor 取值范围 (0.0, 1.0),浮点类型的列表,用空格隔开。例如 '-r 0.97 0.98 0.99' 表示对输入结构分别做0.97、0.98、0.99的晶格缩放,必选参数
-i
必选参数,输入文件的文件路径,支持绝对路径或者相对路径,必选参数
-f
可选参数,如不显式指定,将根据输入文件自动推测。输入文件的格式,支持的格式有 ['pwmat/config','vasp/poscar', 'lammps/lmp', 'cp2k/scf'],必选参数
-o
可选参数,输出文件的格式,支持的格式有['pwmat/config','vasp/poscar', 'lammps/lmp'],如果未指定该参数,将会使用输入结构的格式,此时如果输入的文件格式是cp2k/scf,那么将使用pwmat/config格式
-s
可选参数,输出文件的名称,与 -o 配合使用,并将缩放因子作为前缀。如果未指定,对于 pwmat/config 格式将使用 atom.config 作为文件名,对于 vasp/poscar 格式使用 POSCAR ,对于 lammps/lmp 格式使用 lammps.lmp 作为文件名。例如 '-o pwmat/config -s atom.config -r 0.99' 缩放后的新文件名称为 '0.99_atom.config'
-c
可选参数,是否使用分数坐标,如果指定了 -c 参数,在保存结构时将使用笛卡尔坐标,否则使用分数坐标。注意,PWmat只支持分数坐标,此时该参数将失效
-t
输入结构的原子类型,该参数用于当输入结构是 lammps/lmp或 lammps/dump 格式时指定结构的原子类型,可以是元素名称或者原子编号,顺序需要与输入结构中保持一致。对于其他格式的输入文件,该参数失效