Example #1
0
    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,
        )
Example #2
0
    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,
            )
Example #3
0
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")
Example #4
0
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")
Example #5
0
    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)
Example #6
0
    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)
Example #7
0
    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)