Ejemplo n.º 1
0
    def from_dict(cls, data):
        kwargs = {}

        par_data = []
        key0 = next(iter(data))

        if key0 in ["spatial", "temporal", "spectral"]:
            data = data[key0]

        if data["type"] not in cls.tag:
            raise ValueError(
                f"Invalid model type {data['type']} for class {cls.__name__}"
            )

        input_names = [_["name"] for _ in data["parameters"]]

        for par in cls.default_parameters:
            par_dict = par.to_dict()
            try:
                index = input_names.index(par_dict["name"])
                par_dict.update(data["parameters"][index])
            except ValueError:
                log.warning(
                    f"Parameter '{par_dict['name']}' not defined in YAML file. Using default value: {par_dict['value']} {par_dict['unit']}"
                )
            par_data.append(par_dict)

        parameters = Parameters.from_dict(par_data)

        # TODO: this is a special case for spatial models, maybe better move to `SpatialModel` base class
        if "frame" in data:
            kwargs["frame"] = data["frame"]

        return cls.from_parameters(parameters, **kwargs)
Ejemplo n.º 2
0
    def from_dict(cls, data):
        kwargs = {}

        par_data = []

        input_names = [_["name"] for _ in data["parameters"]]

        for par in cls.default_parameters:
            par_dict = par.to_dict()
            try:
                index = input_names.index(par_dict["name"])
                par_dict.update(data["parameters"][index])
            except ValueError:
                log.warning(
                    f"Parameter {par_dict['name']} not defined. Using default value: {par_dict['value']} {par_dict['unit']}"
                )
            par_data.append(par_dict)

        parameters = Parameters.from_dict(par_data)

        # TODO: this is a special case for spatial models, maybe better move to `SpatialModel` base class
        if "frame" in data:
            kwargs["frame"] = data["frame"]

        return cls.from_parameters(parameters, **kwargs)
Ejemplo n.º 3
0
    def from_dict(cls, data):
        if "filename" in data:
            bkg_map = Map.read(data["filename"])
        elif "map" in data:
            bkg_map = data["map"]
        else:
            # TODO: for now create a fake map for serialization,
            # uptdated in MapDataset.from_dict()
            axis = MapAxis.from_edges(np.logspace(-1, 1, 2),
                                      unit=u.TeV,
                                      name="energy")
            geom = WcsGeom.create(skydir=(0, 0),
                                  npix=(1, 1),
                                  frame="galactic",
                                  axes=[axis])
            bkg_map = Map.from_geom(geom)

        parameters = Parameters.from_dict(data["parameters"])

        return cls.from_parameters(
            parameters=parameters,
            map=bkg_map,
            name=data["name"],
            datasets_names=data.get("datasets_names"),
            filename=data.get("filename"),
        )
Ejemplo n.º 4
0
 def from_dict(cls, data):
     init = cls.read(data["filename"],
                     normalize=data.get("normalize", True))
     init.parameters = Parameters.from_dict(data)
     for parameter in init.parameters.parameters:
         setattr(init, parameter.name, parameter)
     return init
Ejemplo n.º 5
0
    def from_dict(cls, data):
        kwargs = {}
        parameters = Parameters.from_dict(data["parameters"])

        # TODO: this is a special case for spatial models, maybe better move to `SpatialModel` base class
        if "frame" in data:
            kwargs["frame"] = data["frame"]

        return cls.from_parameters(parameters, **kwargs)
Ejemplo n.º 6
0
    def from_dict(cls, data):
        m = Map.read(data["filename"])

        if m.unit == "":
            m.unit = "sr-1"

        parameters = Parameters.from_dict(data["parameters"])
        return cls.from_parameters(parameters=parameters,
                                   map=m,
                                   filename=data["filename"],
                                   normalize=data.get("normalize", True))
Ejemplo n.º 7
0
    def from_dict(cls, data):
        if "filename" in data:
            map = Map.read(data["filename"])
        elif "map" in data:
            map = data["map"]
        else:
            raise ValueError("Requires either filename or `Map` object")

        init = cls(map=map, name=data["name"])
        init.parameters = Parameters.from_dict(data)
        for parameter in init.parameters.parameters:
            setattr(init, parameter.name, parameter)
        return init
Ejemplo n.º 8
0
    def from_dict(cls, data):
        m = Map.read(data["filename"])

        if not m.unit.is_equivalent("sr-1"):
            m.unit = "sr-1"
            log.warning(
                "Spatial template unit is not equivalent to sr^-1, unit changed to sr^-1"
            )

        parameters = Parameters.from_dict(data["parameters"])
        return cls.from_parameters(
            parameters=parameters,
            map=m,
            filename=data["filename"],
            normalize=data.get("normalize", True),
        )
Ejemplo n.º 9
0
    def from_dict(cls, data):
        kwargs = {}

        par_data = []

        for par, par_yaml in zip(cls.default_parameters, data["parameters"]):
            par_dict = par.to_dict()
            par_dict.update(par_yaml)
            par_data.append(par_dict)

        parameters = Parameters.from_dict(par_data)

        # TODO: this is a special case for spatial models, maybe better move to `SpatialModel` base class
        if "frame" in data:
            kwargs["frame"] = data["frame"]

        return cls.from_parameters(parameters, **kwargs)
Ejemplo n.º 10
0
    def from_dict(cls, data):
        parameters = Parameters.from_dict(data["parameters"])

        filename = data["filename"]

        map_ = cls.read(filename).map

        apply_irf = data.get("apply_irf", cls._apply_irf_default)
        datasets_names = data.get("datasets_names")
        name = data.get("name")

        return cls.from_parameters(parameters=parameters,
                                   map=map_,
                                   apply_irf=apply_irf,
                                   datasets_names=datasets_names,
                                   filename=filename,
                                   name=name)
Ejemplo n.º 11
0
def test_parameters_s():
    pars = Parameters([
        Parameter("", 20, scale_method="scale10"),
        Parameter("", 20, scale_method=None),
    ])
    pars_dict = pars.to_dict()
    pars.autoscale()
    assert_allclose(pars[0].factor, 2)
    assert_allclose(pars[0].scale, 10)

    assert pars_dict[0]["scale_method"] == "scale10"
    assert pars_dict[1]["scale_method"] is None
    pars = Parameters.from_dict(pars_dict)
    pars.autoscale()
    assert_allclose(pars[0].factor, 2)
    assert_allclose(pars[0].scale, 10)
    assert pars[1].scale_method is None
    pars.autoscale()
    assert_allclose(pars[1].factor, 20)
    assert_allclose(pars[1].scale, 1)
Ejemplo n.º 12
0
 def from_dict(cls, data):
     init = cls.read(data["filename"])
     init.parameters = Parameters.from_dict(data)
     for parameter in init.parameters.parameters:
         setattr(init, parameter.name, parameter)
     return init
Ejemplo n.º 13
0
 def from_dict(cls, data):
     parameters = Parameters.from_dict(data["parameters"])
     return cls.from_parameters(parameters)