Source code for mesh2hrtf.Output2HRTF.remove_outputs

import os
import shutil
import glob


[docs]def remove_outputs(paths, boundary=False, grid=False, hrtf=False, vtk=False, reports=False): """ Remove output data from Mesh2HRTF project folder. Use this function to delete output that is no longer needed and is taking too much disk space. Parameters ---------- paths : str, tuple of strings Paths under which Mesh2HRTF project folers are searched. Can contain `*` remove data from multiple project folders, e.g., `path/*left` will remove data from all folders in `path` that end with `left`. boundary : bool, optional Remove raw pressure and velocity simulated on the boundary, i.e., the mesh. This data is saved in `project_folder/NumCalc/source_*/be.out/be.*/*Boundary` grid : bool, optional Remove raw pressure and velocity simulated on the evaluation grid.This data is saved in `project_folder/NumCalc/source_*/be.out/be.*/*EvalGrid` hrtf : bool, optional Remove HRTFs saved in SOFA files saved in `project_folder/Output2HRTF/HRTF_*.sofa`. vtk : bool, optional Remove vtk exports generated with :py:func:`~mesh2hrtf.export_vtk` and saved in `project_folder/Output2HRTF/vtk`. reports : bool, optional Remove project reports saved in `project_folder/Output2HRTF/report_*`. """ # check input if isinstance(paths, str): paths = (paths, ) if not isinstance(paths, (tuple, list)): raise ValueError( "paths must be a string or a tuple of strings") # loop paths and contained folders for pp, path in enumerate(paths): folders = glob.glob(path) for ff, folder in enumerate(folders): print(f"Purging path {pp+1}/{len(paths)} folder {ff+1}/{folders}") print(os.path.basename(folder)) # check if the directories exist ---------------------------------- has_numcalc = os.path.isdir(os.path.join(folder, "NumCalc")) if has_numcalc: numcalc = glob.glob(os.path.join( folder, "NumCalc", "source_*")) has_output = os.path.isdir(os.path.join(folder, "Output2HRTF")) if has_output: output = glob.glob(os.path.join(folder, "Output2HRTF", "*")) # data in source*/be.out/be.* folders ----------------------------- # delete entire be.out folders if boundary and grid and has_numcalc: for nc in numcalc: shutil.rmtree(os.path.join(nc, "be.out")) # delete only the boundary data elif boundary and has_numcalc: for nc in numcalc: for be in glob.glob(os.path.join(nc, "be.out", "be.*")): os.remove(os.path.join(be, "pBoundary")) os.remove(os.path.join(be, "vBoundary")) # delete only the grid data elif grid and has_numcalc: for nc in numcalc: for be in glob.glob(os.path.join(nc, "be.out", "be.*")): os.remove(os.path.join(be, "pEvalGrid")) os.remove(os.path.join(be, "vEvalGrid")) # data in Output2HRTF --------------------------------------------- if has_output: for oo in output: base = os.path.basename(oo) # remove compressed boundary data if base.startswith("HRTF_") and base.endswith(".sofa") \ and hrtf: os.remove(oo) # remove compressed boundary data if base.endswith("vtk") and os.path.isdir(oo) \ and vtk: shutil.rmtree(oo) # remove compressed boundary data if base.startswith("report_") and reports: os.remove(oo)