Note
Go to the end to download the full example code.
CUBE .mat to CSV#
Example code showing how to use caf.mat for converting CUBE .mat files to CSVs.
##### IMPORTS #####
# Built-Ins
import argparse
import logging
import pathlib
# Third Party
import caf.toolkit as ctk
# Local Imports
from caf.mat.cube import CUBEMatConverter
from caf.mat.omx import OMXFile
##### CONSTANTS #####
_NAME = "caf.mat.cube_mat_to_csv"
LOG = logging.getLogger(_NAME)
##### CLASSES & FUNCTIONS #####
def mat_to_csv(
converter: CUBEMatConverter, mat_path: pathlib.Path, output_folder: pathlib.Path
) -> None:
"""Convert CUBE .mat file to multiple CSVs (one per level).
Parameters
----------
converter : CUBEMatConverter
Instance of CUBE .mat converter.
mat_path : pathlib.Path
Path to existing CUBE .mat file.
output_folder : pathlib.Path
Folder to save outputs to.
"""
LOG.info("Converting %s to CSVs", mat_path.name)
omx_path = converter.to_omx(mat_path, output_folder / mat_path.stem)
with OMXFile(omx_path) as omx:
omx.to_csvs(output_folder / f"{mat_path.stem}.csv", "square")
def parse_args() -> tuple[pathlib.Path, pathlib.Path]:
"""Parse command-line arguments and return them
Returns
-------
pathlib.Path
Path to CUBE Voyager executable.
pathlib.Path
Folder containing CUBE matrices for conversion.
"""
parser = argparse.ArgumentParser(
description="Converts CUBE .mat files to CSVs",
formatter_class=argparse.ArgumentDefaultsHelpFormatter,
)
parser.add_argument(
"voyager_path", help="Path to CUBE Voyager executable", type=pathlib.Path
)
parser.add_argument(
"matrix_folder",
help="Folder containing CUBE matrices for conversion",
type=pathlib.Path,
)
args = parser.parse_args()
return args.voyager_path, args.matrix_folder
def main() -> None:
"""Convert CUBE .mat to CSVs."""
voyager_path, matrix_folder = parse_args()
converter = CUBEMatConverter(voyager_path)
if not matrix_folder.is_dir():
raise NotADirectoryError(matrix_folder)
output_folder = matrix_folder / "CSVs"
output_folder.mkdir(exist_ok=True)
log_file = output_folder / f"{_NAME}.log"
details = ctk.ToolDetails(_NAME, "0.1.0")
with ctk.LogHelper("caf.mat", details, log_file=log_file):
# Find all .mat files inside given folder and convert each to CSVs separately
for path in matrix_folder.glob("*.mat"):
mat_to_csv(converter, path, output_folder)
if __name__ == "__main__":
main()