Source code for yt.frontends.owls.data_structures

import os

import yt.units
from yt.frontends.gadget.data_structures import GadgetHDF5Dataset
from yt.utilities.definitions import sec_conversion
from yt.utilities.on_demand_imports import _h5py as h5py

from .fields import OWLSFieldInfo


[docs] class OWLSDataset(GadgetHDF5Dataset): _load_requirements = ["h5py"] _particle_mass_name = "Mass" _field_info_class = OWLSFieldInfo _time_readin = "Time_GYR" def _parse_parameter_file(self): # read values from header hvals = self._get_hvals() self.parameters = hvals # set features common to OWLS and Eagle self._set_owls_eagle() # Set time from value in header self.current_time = ( hvals[self._time_readin] * sec_conversion["Gyr"] * yt.units.s ) def _set_code_unit_attributes(self): self._set_owls_eagle_units() @classmethod def _is_valid(cls, filename: str, *args, **kwargs) -> bool: if cls._missing_load_requirements(): return False need_groups = ["Constants", "Header", "Parameters", "Units"] veto_groups = [ "SUBFIND", "FOF", "PartType0/ChemistryAbundances", "PartType0/ChemicalAbundances", "RuntimePars", "HashTable", ] valid = True valid_fname = filename # If passed arg is a directory, look for the .0 file in that dir if os.path.isdir(filename): valid_files = [] for f in os.listdir(filename): fname = os.path.join(filename, f) fext = os.path.splitext(fname)[-1] if ( (".0" in f) and (fext not in {".ewah", ".kdtree"}) and os.path.isfile(fname) ): valid_files.append(fname) if len(valid_files) == 0: valid = False elif len(valid_files) > 1: valid = False else: valid_fname = valid_files[0] try: fileh = h5py.File(valid_fname, mode="r") for ng in need_groups: if ng not in fileh["/"]: valid = False for vg in veto_groups: if vg in fileh["/"]: valid = False fileh.close() except Exception: valid = False return valid