Source code for yt.frontends.eagle.data_structures

import numpy as np

import yt.units
from yt.fields.field_info_container import FieldInfoContainer
from yt.frontends.gadget.data_structures import GadgetHDF5Dataset
from yt.frontends.owls.fields import OWLSFieldInfo
from yt.utilities.on_demand_imports import _h5py as h5py

from .fields import EagleNetworkFieldInfo


[docs] class EagleDataset(GadgetHDF5Dataset): _load_requirements = ["h5py"] _particle_mass_name = "Mass" _field_info_class: type[FieldInfoContainer] = OWLSFieldInfo _time_readin_ = "Time" 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 analytic solution for flat LCDM universe a = hvals["ExpansionFactor"] H0 = hvals["H(z)"] / hvals["E(z)"] a_eq = (self.omega_matter / self.omega_lambda) ** (1.0 / 3) t1 = 2.0 / (3.0 * np.sqrt(self.omega_lambda)) t2 = (a / a_eq) ** (3.0 / 2) t3 = np.sqrt(1.0 + (a / a_eq) ** 3) t = t1 * np.log(t2 + t3) / H0 self.current_time = t * 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 = [ "Config", "Constants", "HashTable", "Header", "Parameters", "RuntimePars", "Units", ] veto_groups = [ "SUBFIND", "PartType0/ChemistryAbundances", "PartType0/ChemicalAbundances", ] valid = True try: fileh = h5py.File(filename, 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 pass return valid
[docs] class EagleNetworkDataset(EagleDataset): _load_requirements = ["h5py"] _particle_mass_name = "Mass" _field_info_class = EagleNetworkFieldInfo _time_readin = "Time" @classmethod def _is_valid(cls, filename: str, *args, **kwargs) -> bool: if cls._missing_load_requirements(): return False try: fileh = h5py.File(filename, mode="r") if ( "Constants" in fileh["/"].keys() and "Header" in fileh["/"].keys() and "SUBFIND" not in fileh["/"].keys() and ( "ChemistryAbundances" in fileh["PartType0"].keys() or "ChemicalAbundances" in fileh["PartType0"].keys() ) ): fileh.close() return True fileh.close() except Exception: pass return False