Appendix Ⅱ: pwdata
pwdata 是 PWMLFF 的数据预处理工具,包括如下功能:
-
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' |
PWMLFF | *.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.3.2)
# Available versions: 0.3.2, 0.3.1, 0.3.0, 0.2.16, 0.2.15
# INSTALLED: 0.3.2
# LATEST: 0.3.2
# 安装指定版本
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
下面对命令做详细说明
1. 结构互转 convert_config
该命令用于各种结构之间的互转,您可以使用 convert_config
或者它的缩写 cvt_config
参数如下所示
pwdata convert_config [-h] -i INPUT -f INPUT_FORMAT [-s SAVENAME] [-o OUTPUT_FORMAT] [-c] [-t ATOM_TYPES [ATOM_TYPES ...]]
-h
输出帮助信息,将列出 scale 命令的所有可用参数及其解释
-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
作为文件名
-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
2. 训练数据提取 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 convert_configs [-h] -i INPUT [INPUT ...] -f INPUT_FORMAT [-t ATOM_TYPES [ATOM_TYPES ...]] [-s SAVEPATH] [-o OUTPUT_FORMAT] [-c] [-p TRAIN_VALID_RATIO] [-r] [-g GAP] [-q QUERY] [-n CPU_NUMS] [-m]
-h
输出帮助信息,将列出 scale 命令的所有可用参数及其解释
-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
可选参数,输出文件的目录,如不指定,将使用当前目录
-p
可选参数,提取后的数据划分为训练集和测试集的比例,取值范围[0.0,1.0] 默认为1.0,即不划分测试集
-r
可选参数,bool类型,划分测试集时,是否采用随机划分,与-p
参数配合使用。例如'-p 0.8 -r '随机划分80%为训练集,20%为测试集,'-p 0.8' 取前80%作为训练集,后20%作为测试集
-m
可选参数,int类型,该参数仅用于输出文件格式为extxyz,设置 '-m 1'
所有结构会保存到一个xyz文件中,默认保存到一个xyz文件中。设置 '-m 0'
将按照元素类型保存到不同的xyz文件中,
-g
可选参数,int类型,该参数用于提取轨迹文件时,指定每隔多少步取一帧结构。默认值为1
-q
可选参数,str类型,该参数值在输入类型为meta
时生效,用于查询数据库操作,详细的使用参考 meta查询演示
-n
可选参数,int类型,该参数在输入类型为meta
时生效,用于设置并行查询数据库时使用的CPU核数,默认使用单核
-t
如果输入格式是 lammps/lmp
或 lammps/dump
格式,该参数用于指定结构的原子类型,可以是元素名称或者原子编号,顺序需要与输入结构中保持一致
如果输入格式是meta
,该该参数用于查找所有只存在这些元素类型
的结构。
convert_configs 案例
我们在源码的根目录下提供了 examples,您可以下载后使用这些测试例子:
例1. 将目录 examples/pwmlff_data/LiSiC 下的所有 pwmlff/npy 格式数据提取为 xyz格式,其中训练集占80%,测试集占20%,执行完毕后,在examples/test_workdir/0_1_configs_extxyz目录下会产生train.xyz 和 valid.xyz两个文件。
pwdata convert_configs -i examples/pwmlff_data/LiSiC -s examples/test_workdir/0_1_configs_extxyz -o extxyz -p 0.8
例2. 将PWmat 轨迹文件 50_LiGePS_movement 和 lisi_50_movement 每隔5步提取一帧,随机划分80%结构做为训练集20%作为测试集,存在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 -p 0.8 -r -g 5
例3. 将examples/deepmd_data/alloy目录下的所有 deepmd/npy 格式文件提取为pwmlff/npy格式,不划分测试集
pwdata convert_configs -i examples/deepmd_data/alloy -s ./test_workdir/7_0_configs_PWdata
例4. 将 examples/xyz_data 目录下的所有后缀为 xyz 的文件提取为pwmlff/npy格式,随机划分80%和20%作为训练和测试集,保存在examples/test_workdir/5_0_configs_PWdata目录
pwdata convert_configs -i examples/xyz_data -s examples/test_workdir/5_0_configs_PWdata -p 0.8 -r -g 1
例5.在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
例6. 在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
convert_configs meta 查询例子
例1. 查询只包含
Pt
和Ge
两种元素的结构,并将查询结果输出到为xyz格式。执行完成后将会在examples/test_workdir/10_1_configs_extxyz目录下生成一个train.xyz和valid.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 -p 0.8 -r -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 -p 0.8 -r -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 -p 0.8 -r -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 -p 0.8 -r -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 -p 0.8 -r -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会将输入目录下的所有可用数据源都作为输入数据。