[BUG] multi dirs including with OUTCAR(single-point calc mode) can not be converted into deepmd_data together by dpdata
Bug summary
I have one dir containing with multi single point calculation files,I wish I could use one command to convert such files into one deepmd format file with dpdata ,however it gives me a error report after I run this command dpdata ./Datasets/dataset00/ -i vasp/outcar -o deepmd/npy -O deepmd_dataset00 -m
### dpdata Version
0.2.25
### Input Files, Running Commands, Error Log, etc.
(ovito) [ime001@master DeepMD]$ tree -d -L 3
.
└── Datasets
└── dataset00
├── Bond_calc
└── heating
4 directories
(ovito) [ime001@master DeepMD]$ dpdata ./Datasets/dataset00/ -i vasp/outcar -o deepmd/npy -O deepmd_dataset00 -m
Traceback (most recent call last):
File "/vol02/hdd1/ime001/software/anaconda3/envs/ovito/bin/dpdata", line 8, in <module>
sys.exit(dpdata_cli())
^^^^^^^^^^^^
File "/vol02/hdd1/ime001/software/anaconda3/envs/ovito/lib/python3.11/site-packages/dpdata/cli.py", line 56, in dpdata_cli
convert(**vars(parsed_args))
File "/vol02/hdd1/ime001/software/anaconda3/envs/ovito/lib/python3.11/site-packages/dpdata/cli.py", line 92, in convert
s = MultiSystems.from_file(
^^^^^^^^^^^^^^^^^^^^^^^
File "/vol02/hdd1/ime001/software/anaconda3/envs/ovito/lib/python3.11/site-packages/dpdata/system.py", line 1469, in from_file
multi_systems.load_systems_from_file(file_name=file_name, fmt=fmt, **kwargs)
File "/vol02/hdd1/ime001/software/anaconda3/envs/ovito/lib/python3.11/site-packages/dpdata/system.py", line 1493, in load_systems_from_file
return self.from_fmt_obj(load_format(fmt), file_name, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/vol02/hdd1/ime001/software/anaconda3/envs/ovito/lib/python3.11/site-packages/dpdata/system.py", line 1382, in from_fmt_obj
for dd in fmtobj.from_multi_systems(directory, **kwargs):
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/vol02/hdd1/ime001/software/anaconda3/envs/ovito/lib/python3.11/site-packages/dpdata/format.py", line 317, in from_multi_systems
raise NotImplementedError(
NotImplementedError: VASPOutcarFormat doesn't support MultiSystems.from
Steps to Reproduce
You can unzip issue_reported.zip file and cd into such dir and use command such like this as dpdata . -i vasp/outcar -o deepmd/npy -O deepmd_data -m ,then it can also give you the same error information.
Further Information, Files, and Links
No response
This is not supported.
you may convert all the OUTCARs by a python script like
import os
import dpdata
def find_outcar_files(root_dir):
"""
Recursively find all files named OUTCAR in the root directory.
Parameters:
root_dir (str): The root directory to start searching from.
Returns:
list: A list of paths to the OUTCAR files.
"""
outcar_files = []
for dirpath, _, filenames in os.walk(root_dir):
for filename in filenames:
if filename == 'OUTCAR':
full_path = os.path.join(dirpath, filename)
outcar_files.append(full_path)
return outcar_files
def convert_outcar_to_multisystem(outcar_files):
"""
Convert OUTCAR files to dpdata's MultiSystem data structure.
Parameters:
outcar_files (list): List of paths to the OUTCAR files.
Returns:
MultiSystem: MultiSystem objects.
"""
multisystem = dpdata.MultiSystems()
for outcar_file in outcar_files:
try:
# Initialize the MultiSystem from OUTCAR file
system = dpdata.LabeledSystem(outcar_file, fmt='vasp/OUTCAR')
multisystem.append(system)
print(f"Converted {outcar_file} to MultiSystem.")
except Exception as e:
print(f"Failed to convert {outcar_file}: {e}")
return multisystem
def main():
root_directory = './' # Change this to your root directory path
outcar_files = find_outcar_files(root_directory)
print(outcar_files)
multisystems = convert_outcar_to_multisystem(outcar_files)
print(multisystems)
multisystems.to('deepmd/npy', "tmp.output" )
main()
Got this! Thank you ALL! Using this script ,I can also obtain a multi-systems dataset.