"""
Sub-module for adding observational data to plots.
Includes the ObservationalData object and helper functions
to convert data to this new format.
"""
from velociraptor.observations.objects import (
ObservationalData,
MultiRedshiftObservationalData,
)
from velociraptor.exceptions import ObservationalDataError
from typing import Union, List, Iterable
from warnings import warn
[docs]def load_observation(filename: str):
"""
Load an observation from file filename. This should be in the
standard velociraptor format.
Deprecated in favour of :func:`load_observations`
Parameters
----------
filename: str
Filename of the observational dataset that you wish to load.
Should probably end in .hdf5. See the documentation for
:class:`velociraptor.observations.objects.ObservationalData`
for more information.
Returns
-------
velociraptor.observations.objects.ObservationalData:
Observational data instance read from file.
"""
warn(
"load_observation is deprecated and will be removed in a future version. "
"Please use load_observations that can load data from multi-redshift "
"datasets introduced in velociraptor v0.12.0.",
DeprecationWarning,
)
data = ObservationalData()
data.load(filename)
return data
[docs]def load_observations(
filenames: Union[str, Iterable[str]], redshift_bracket: List[float] = [0.0, 1000.0]
):
"""
Parameters
----------
filename: str, Iterable[str]
Filename(s) of the observational dataset that you wish to load.
Should probably end in .hdf5. See the documentation for
:class:`velociraptor.observations.objects.ObservationalData`
and :class:`velociraptor.observations.objects.MultiRedshiftObservationalData`
for more information.
redshift_bracket: str
Redshift bracket to overlap with. If any of the observations in the
file overlap with this bracket, they are returned. By default, this
bracket is 0.0 to 1000.0, so will encompass all reasonable
observations present in the file.
Returns
-------
List[velociraptor.observations.objects.ObservationalData]:
Observational data instances read from file that overlap with your
specified redshift bracket.
"""
returned_data = []
if not isinstance(filenames, list):
filenames = [filenames]
for filename in filenames:
try:
multi_z = MultiRedshiftObservationalData()
multi_z.load(filename)
returned_data += multi_z.get_datasets_overlapping_with(
redshifts=redshift_bracket
)
except ObservationalDataError:
data = ObservationalData()
data.load(filename)
# Lower and upper bounds of the requested redshift bracket to
# return datasets between
lower, upper = redshift_bracket
if (
(data.redshift_lower <= lower and lower <= data.redshift_upper)
or (data.redshift_lower <= upper and upper <= data.redshift_upper)
or (lower <= data.redshift_lower and data.redshift_upper <= upper)
):
returned_data.append(data)
return returned_data