Source code for dddm.priors

from immutabledict import immutabledict
import dddm
import numpy as np

export, __all__ = dddm.exporter()


[docs]@export def get_priors(priors_from="Evans_2019"): """ :return: dictionary of priors, type and values """ if priors_from == "Pato_2010": priors = {'log_mass': {'range': [0.1, 3], 'prior_type': 'flat'}, 'log_cross_section': {'range': [-46, -42], 'prior_type': 'flat'}, 'density': {'range': [0.001, 0.9], 'prior_type': 'gauss', 'mean': 0.4, 'std': 0.1}, 'v_0': {'range': [80, 380], 'prior_type': 'gauss', 'mean': 230, 'std': 30}, 'v_esc': {'range': [379, 709], 'prior_type': 'gauss', 'mean': 544, 'std': 33}, 'k': {'range': [0.5, 3.5], 'prior_type': 'flat'}} elif priors_from == "Evans_2019": # https://arxiv.org/abs/1901.02016 priors = {'log_mass': {'range': [0.1, 3], 'prior_type': 'flat'}, 'log_cross_section': {'range': [-46, -42], 'prior_type': 'flat'}, 'density': {'range': [0.001, 0.9], 'prior_type': 'gauss', 'mean': 0.55, 'std': 0.17}, 'v_0': {'range': [80, 380], 'prior_type': 'gauss', 'mean': 233, 'std': 3}, 'v_esc': {'range': [379, 709], 'prior_type': 'gauss', 'mean': 528, 'std': 24.5}} elif priors_from == "migdal_wide": priors = {'log_mass': {'range': [-1.5, 1.5], 'prior_type': 'flat'}, 'log_cross_section': {'range': [-48, -37], 'prior_type': 'flat'}, # see Evans_2019_constraint 'density': {'range': [0.001, 0.9], 'prior_type': 'gauss', 'mean': 0.55, 'std': 0.17}, 'v_0': {'range': [80, 380], 'prior_type': 'gauss', 'mean': 233, 'std': 20}, 'v_esc': {'range': [379, 709], 'prior_type': 'gauss', 'mean': 528, 'std': 24.5}, 'k': {'range': [0.5, 3.5], 'prior_type': 'flat'}} elif priors_from == "low_mass": priors = {'log_mass': {'range': [-1.5, 1.5], 'prior_type': 'flat'}, 'log_cross_section': {'range': [-48, -37], 'prior_type': 'flat'}, # see Evans_2019_constraint 'density': {'range': [0.0001, 1], 'prior_type': 'gauss', 'mean': 0.55, 'std': 0.17}, 'v_0': {'range': [133, 333], 'prior_type': 'gauss', 'mean': 233, 'std': 20}, 'v_esc': {'range': [405.5, 650.5], 'prior_type': 'gauss', 'mean': 528, 'std': 24.5}} elif priors_from == "low_mass_fixed": priors = {'log_mass': {'range': [-2, 2], 'prior_type': 'flat'}, 'log_cross_section': {'range': [-53, -27], 'prior_type': 'flat'}, # see Evans_2019_constraint 'density': {'range': [0.0001, 1], 'prior_type': 'gauss', 'mean': 0.55, 'std': 0.17}, 'v_0': {'range': [133, 333], 'prior_type': 'gauss', 'mean': 233, 'std': 20}, 'v_esc': {'range': [405.5, 650.5], 'prior_type': 'gauss', 'mean': 528, 'std': 24.5}} elif priors_from == "migdal_extremely_wide": priors = {'log_mass': {'range': [-2, 3], 'prior_type': 'flat'}, 'log_cross_section': {'range': [-50, -30], 'prior_type': 'flat'}, 'density': {'range': [0.001, 0.9], 'prior_type': 'gauss', 'mean': 0.55, 'std': 0.5}, 'v_0': {'range': [80, 380], 'prior_type': 'gauss', 'mean': 233, 'std': 90}, 'v_esc': {'range': [379, 709], 'prior_type': 'gauss', 'mean': 528, 'std': 99}, 'k': {'range': [0.5, 3.5], 'prior_type': 'flat'} } else: raise NotImplementedError( f"Taking priors from {priors_from} is not implemented") for key in priors.keys(): param = priors[key] if param['prior_type'] == 'flat': param['param'] = param['range'] param['dist'] = flat_prior_distribution elif param['prior_type'] == 'gauss': param['param'] = param['mean'], param['std'] param['dist'] = gauss_prior_distribution return immutabledict(priors)
def flat_prior_distribution(_range): return np.random.uniform(_range[0], _range[1]) def gauss_prior_distribution(_param): mu, sigma = _param return np.random.normal(mu, sigma)