Source code for wizard._utils._loader.nrrd

"""
_utils/_loader/nrrd.py
========================

.. module:: nrrd
   :platform: Unix
   :synopsis: Provides functions to read and write NRRD files.

Module Overview
---------------

This module includes functions for reading and writing .nrrd files, which are commonly used 
to store multi-dimensional data, particularly in the field of medical imaging.

Functions
---------

.. autofunction:: _read_nrrd
.. autofunction:: _write_nrrd

"""
import os.path

import nrrd as _nrrd
from ..._core import DataCube


[docs] def _read_nrrd(path: str) -> DataCube: """ Read a NRRD file and convert it into a DataCube. :param path: The file path to the NRRD file. :type path: str :return: A DataCube containing the data from the NRRD file. :rtype: DataCube :raises FileNotFoundError: If the specified file does not exist. :raises ValueError: If the NRRD file does not contain the expected metadata. """ if not os.path.isfile(path): raise FileNotFoundError(f'File not found or path is not valid, `{path}`.') file = _nrrd.read(filename=path) wavelengths = list(map(int, file[1]['wavelengths'].strip('[]').split())) notation = file[1]['notation'] if file[1]['notation'] != 'None' else None record = file[1]['record'] == 'True' return DataCube(cube=file[0], wavelengths=wavelengths, name=file[1]['name'], notation=notation, record=record)
[docs] def _write_nrrd(dc: DataCube, path: str) -> None: """ Write a DataCube to a NRRD file. :param dc: The DataCube to write to the NRRD file. :type dc: DataCube :param path: The file path where the NRRD file will be saved. :type path: str :return: None :raises ValueError: If the DataCube is empty or does not contain valid data. """ if dc.cube.size == 0: raise ValueError("The DataCube is empty. Cannot write to file.") header = { 'wavelengths': dc.wavelengths, 'name': dc.name, 'notation': dc.notation, 'record': dc.record } _nrrd.write(file=path, data=dc.cube, header=header)