"""Drones for parsing VASP calculations and related outputs."""from__future__importannotationsimportloggingimportosfrompathlibimportPathfromemmet.core.qc_tasksimportTaskDocfrompymatgen.apps.borg.hiveimportAbstractDronelogger=logging.getLogger(__name__)
[docs]classQChemDrone(AbstractDrone):""" A QChem drone to parse QChem outputs. Parameters ---------- **task_document_kwargs Additional keyword args passed to :obj: `.TaskDoc.from_directory`. """def__init__(self,**task_document_kwargs)->None:self.task_document_kwargs=task_document_kwargs
[docs]defassimilate(self,path:str|Path|None=None)->TaskDoc:""" Parse QChem output files and return the output document. Parameters ---------- path : str pr Path or None Path to the directory containing mol.qout and other output files. Returns ------- TaskDocument A QChem task document """path=pathorPath.cwd()try:doc=TaskDoc.from_directory(path,**self.task_document_kwargs)exceptException:importtracebacklogger.exception(f"Error in {Path(path).absolute()}\n{traceback.format_exc()}")raisereturndoc
[docs]defget_valid_paths(self,path:tuple[str,list[str],list[str]])->list[str]:"""Get valid paths to assimilate. Parameters ---------- path : tuple of (str, list of str, list of str) Input path as a tuple generated from ``os.walk``, i.e., (parent, subdirs, files). Returns ------- list of str A list of paths to assimilate. """parent,subdirs,_=pathtask_names=["mol.qout.*"]combined_paths=[parent+os.sep+sdirforsdirinsubdirs]valid_paths=[]forsub_dirincombined_paths:file_names=os.listdir(sub_dir)ifany(name.startswith("mol.qout.")fornameinfile_names):valid_paths.append(parent)if(notany(parent.endswith(os.sep+r)forrintask_names)andlen(list(Path(parent).glob("mol.qout*")))>0):valid_paths.append(parent)returnvalid_paths