def write(self, path, prefix="", overwrite=False, write_covariance=True): """Serialize datasets to YAML and FITS files. Parameters ---------- path : `pathlib.Path` path to write files prefix : str common prefix of file names overwrite : bool overwrite datasets FITS files write_covariance : bool save covariance or not """ path = make_path(path).resolve() datasets_dictlist = [] for dataset in self._datasets: filename = f"{prefix}_data_{dataset.name}.fits" dataset.write(path / filename, overwrite) datasets_dictlist.append(dataset.to_dict(filename=filename)) datasets_dict = {"datasets": datasets_dictlist} write_yaml(datasets_dict, path / f"{prefix}_datasets.yaml", sort_keys=False) self.models.write( path / f"{prefix}_models.yaml", overwrite=overwrite, write_covariance=write_covariance, )
def write( self, filename, filename_models=None, overwrite=False, write_covariance=True ): """Serialize datasets to YAML and FITS files. Parameters ---------- filename : str or `Path` File path or name of datasets yaml file filename_models : str or `Path` File path or name of models yaml file overwrite : bool overwrite datasets FITS files write_covariance : bool save covariance or not """ path = make_path(filename) data = {"datasets": []} for dataset in self._datasets: d = dataset.to_dict() filename = d["filename"] dataset.write(path.parent / filename, overwrite=overwrite) data["datasets"].append(d) write_yaml(data, path, sort_keys=False) if filename_models: self.models.write( filename_models, overwrite=overwrite, write_covariance=write_covariance, )
def test_absorption_io(tmp_path): dominguez = Absorption.read_builtin("dominguez") model = AbsorbedSpectralModel( spectral_model=Model.create("PowerLawSpectralModel"), absorption=dominguez, parameter=0.5, parameter_name="redshift", ) assert len(model.parameters) == 5 model_dict = model.to_dict() parnames = [_["name"] for _ in model_dict["parameters"]] assert parnames == ["redshift", "alpha_norm"] new_model = AbsorbedSpectralModel.from_dict(model_dict) assert new_model.parameter == 0.5 assert new_model.parameter_name == "redshift" assert new_model.alpha_norm.name == "alpha_norm" assert new_model.alpha_norm.value == 1 assert new_model.spectral_model.tag == "PowerLawSpectralModel" assert_allclose(new_model.absorption.energy, dominguez.energy) assert_allclose(new_model.absorption.param, dominguez.param) assert len(new_model.parameters) == 5 test_absorption = Absorption( u.Quantity(range(3), "keV"), u.Quantity(range(2), ""), u.Quantity(np.ones((2, 3)), ""), ) model = AbsorbedSpectralModel( spectral_model=Model.create("PowerLawSpectralModel"), absorption=test_absorption, parameter=0.5, parameter_name="redshift", ) model_dict = model.to_dict() new_model = AbsorbedSpectralModel.from_dict(model_dict) assert_allclose(new_model.absorption.energy, test_absorption.energy) assert_allclose(new_model.absorption.param, test_absorption.param) write_yaml(model_dict, tmp_path / "tmp.yaml") read_yaml(tmp_path / "tmp.yaml")
def test_absorption_io(tmp_path): dominguez = EBLAbsorptionNormSpectralModel.read_builtin("dominguez", redshift=0.5) assert len(dominguez.parameters) == 2 model_dict = dominguez.to_dict() parnames = [_["name"] for _ in model_dict["parameters"]] assert parnames == [ "alpha_norm", "redshift", ] new_model = EBLAbsorptionNormSpectralModel.from_dict(model_dict) assert new_model.redshift.value == 0.5 assert new_model.alpha_norm.name == "alpha_norm" assert new_model.alpha_norm.value == 1 assert_allclose(new_model.energy, dominguez.energy) assert_allclose(new_model.param, dominguez.param) assert len(new_model.parameters) == 2 model = EBLAbsorptionNormSpectralModel( u.Quantity(range(3), "keV"), u.Quantity(range(2), ""), u.Quantity(np.ones((2, 3)), ""), redshift=0.5, alpha_norm=1, ) model_dict = model.to_dict() new_model = EBLAbsorptionNormSpectralModel.from_dict(model_dict) assert_allclose(new_model.energy, model.energy) assert_allclose(new_model.param, model.param) assert_allclose(new_model.data, model.data) write_yaml(model_dict, tmp_path / "tmp.yaml") read_yaml(tmp_path / "tmp.yaml")
def write(self, path, prefix="", overwrite=False): """Serialize datasets to YAML and FITS files. Parameters ---------- path : `pathlib.Path` path to write files prefix : str common prefix of file names overwrite : bool overwrite datasets FITS files """ from .io import datasets_to_dict path = make_path(path) datasets_dict, components_dict = datasets_to_dict( self, path, prefix, overwrite) write_yaml(datasets_dict, path / f"{prefix}_datasets.yaml", sort_keys=False) write_yaml(components_dict, path / f"{prefix}_models.yaml", sort_keys=False)
def to_yaml(self, filename): """Write to YAML file.""" from gammapy.modeling.serialize import models_to_dict components_dict = models_to_dict(self.skymodels) write_yaml(components_dict, filename, sort_keys=False)
def to_yaml(self, filename, selection="all"): """Write to yaml file.""" from ..utils.serialization import models_to_dict components_dict = models_to_dict(self.models, selection) write_yaml(components_dict, filename)