Source code for gammapy_plugin.utils.gammapy_parser

import logging

import numpy as np
from astromodels.core.parameter import Parameter
from gammapy.modeling.models.core import ModelBase

__all__ = ["parameter_to_gammapy_dict", "parse_gammapy_model"]

log = logging.getLogger(__name__)


[docs] def parameter_to_gammapy_dict(para: Parameter) -> dict: """Converts a astromodel parameter to a dict able to be read in as a gammapy parameter. :param para: astromodel paramter :type para: Parameter :return: dict """ para_dict = {} para_dict["value"] = para.value para_dict["unit"] = para.unit val = np.nan if para.min_value is not None: val = para.min_value para_dict["min"] = val val = np.nan if para.max_value is not None: val = para.max_value para_dict["max"] = val para_dict["frozen"] = not para.free para_dict["prior"] = "" return para_dict
[docs] def parse_gammapy_model(gp_model: ModelBase, dataset_name: str = "empty") -> dict: """Returns dict of astromodels parameters with all parameters from the passed gammapy model. :param gp_model: gammapy model :param dataset_name: name of the dataset the model is associated to defaults to empty :type gp_model: ModelBase :type dataset_name: str """ tp = gp_model.parameters.to_dict() parameters = {} for i in range(len(tp)): ttp = tp[i] norm = False if ttp["name"] in ["norm", "amplitude"]: # TODO check if this covers all cases norm = True min_v = ttp["min"] max_v = ttp["max"] if np.isnan(min_v): min_v = None if np.isnan(max_v): max_v = None parameters[dataset_name + "." + str(gp_model.name) + "." + ttp["name"]] = ( Parameter( name=dataset_name + "_" + str(gp_model.name) + "_" + ttp["name"], value=ttp["value"], min_value=min_v, max_value=max_v, is_normalization=norm, free=not ttp["frozen"], unit=ttp["unit"], desc=f"Gammapy Model Parameter {ttp['name']}", ) ) log.debug("Created parameter") log.debug( parameters[dataset_name + "." + str(gp_model.name) + "." + ttp["name"]] ) return parameters