Source code for yieldplotlib.load.yip_directory

"""Loader for YIP data, organizing files into a directory-based structure."""

from pathlib import Path

import astropy.io.fits as pyfits
from yippy.coronagraph import Coronagraph

from yieldplotlib.core import DirectoryNode, Node
from yieldplotlib.core.file_nodes import FitsFile


[docs] class YIPDirectory(DirectoryNode): """Loader for YIPs, organizing files into a directory-based structure.""" def __init__(self, root_directory: Path): """Initialize the loader by scanning the directory structure.""" super().__init__(root_directory) self.coronagraph = Coronagraph(root_directory)
[docs] def _create_directory_node(self, path: Path) -> Node: """Override directory node creation logic for YIP-specific directories.""" return self.create_base_directory(path)
[docs] def _create_file_node(self, path: Path) -> Node: """Override file node creation logic for YIP-specific files.""" if path.suffix == ".fits": return FitsFile(path) else: return self.create_base_file(path)
[docs] def get(self, key: str): """Search for a key (e.g., "data" or "D") in the tree structure.""" if key.endswith(".data"): if key == "offax.data": return pyfits.getdata(Path(self.coronagraph.yip_path, "offax_psf.fits")) elif key == "offax_offset_list.data": return pyfits.getdata( Path(self.coronagraph.yip_path, "offax_psf_offset_list.fits") ) elif key == "stellar_intens.data": return pyfits.getdata( Path(self.coronagraph.yip_path, "stellar_intens.fits") ) elif key == "stellar_intens_diam_list.data": return pyfits.getdata( Path(self.coronagraph.yip_path, "stellar_intens_diam_list.fits") ) elif key == "sky_trans.data": return pyfits.getdata(Path(self.coronagraph.yip_path, "sky_trans.fits")) else: return getattr(self.coronagraph, key)