materialsproject / emmet

Be a master builder of databases of material properties. Avoid the Kragle.
https://materialsproject.github.io/emmet/
Other
51 stars 63 forks source link

Bug: Q-Chem's `TaskDoc.from_directory` does not work with a custom directory #929

Closed Andrew-S-Rosen closed 5 months ago

Andrew-S-Rosen commented 5 months ago

Problem

When supplying a custom directory to Q-Chem's TaskDoc.from_directory, the files cannot be parsed due to duplication of the base path.

from emmet.core.qc_tasks import TaskDoc

td = TaskDoc.from_directory('freq')

freq.zip

Traceback:

File ~/software/miniconda/envs/quacc/lib/python3.10/site-packages/emmet/core/qc_tasks.py:318, in TaskDoc.from_directory(cls, dir_name, store_additional_json, additional_fields, **qchem_calculation_kwargs)
    316         continue
    317     else:
--> 318         calc_doc = Calculation.from_qchem_files(
    319             dir_name, task_name, **files, **qchem_calculation_kwargs
    320         )
    321         calcs_reversed.append(calc_doc)
    322         # all_qchem_objects.append(qchem_objects)
    323
    324 # Lists need to be reversed so that newest calc is the first calc, all_qchem_objects are also reversed to match

File ~/software/miniconda/envs/quacc/lib/python3.10/site-packages/emmet/core/qchem/calculation.py:380, in Calculation.from_qchem_files(cls, dir_name, task_name, qcinput_file, qcoutput_file, store_energy_trajectory, qcinput_kwargs, qcoutput_kwargs)
    377 output_file_paths = _find_qchem_files(dir_name)
    379 qcinput_kwargs = qcinput_kwargs if qcinput_kwargs else {}
--> 380 qcinput = QCInput.from_file(qcinput_file, **qcinput_kwargs)
    382 qcoutput_kwargs = qcoutput_kwargs if qcoutput_kwargs else {}
    383 qcoutput = QCOutput(qcoutput_file, **qcoutput_kwargs)

File ~/software/miniconda/envs/quacc/lib/python3.10/site-packages/pymatgen/io/qchem/inputs.py:396, in QCInput.from_file(cls, filename)
    385 @classmethod
    386 def from_file(cls, filename: str | Path) -> QCInput:
    387     """
    388     Create QcInput from file.
    389
   (...)
    394         QcInput
    395     """
--> 396     with zopen(filename, "rt") as f:
    397         return cls.from_str(f.read())

File ~/software/miniconda/envs/quacc/lib/python3.10/site-packages/monty/io.py:45, in zopen(filename, *args, **kwargs)
     43 if ext in (".XZ", ".LZMA"):
     44     return lzma.open(filename, *args, **kwargs)
---> 45 return open(filename, *args, **kwargs)

FileNotFoundError: [Errno 2] No such file or directory: 'freq/freq/mol.qin'

Proposed Solution

N/A

Alternatives

CC @rdguha1995