Documentation page for diffsph¶
Indices and tables¶
diffsph is a Python package that computes diffuse fluxes from Milky-Way satellite dwarf spheroidal (dSph) galaxies. It allows users to obtain
- \(J\) factor maps (relevant for gamma-ray astronomy) 
 
- (radio frequency) synchtrotron-radiation emission profiles 
 
- bounds on e.~g. Dark Matter annihilation cross sections from radio astronomical observations 
 
Installation¶
Use Git or checkout with SVN using the web URL https://github.com/mertio1/diffsph.git , e. g.:
git clone https://github.com/mertio1/diffsph.git
or:
svn co https://github.com/mertio1/diffsph.git
Otherwise download the zip file from the repository https://github.com/mertio1/diffsph
For global installations, while in the diffsph’s main folder type:
python setup.py bdist_wheel
and:
pip install .
Architecture¶
The main functionalities and algorithmic structure of the code are captured by the diagram below
 
Users can both compute diffuse emission fluxes with the pyflux (diffsph.pyflux) module and 2\(\sigma\) limits on e. g. annihilation cross sections or decay rates of dark matter particles by using the limits (diffsph.limits) module. Details about the methods used to perform these computations are given in Ref. [1] .
Examples¶
pyflux module¶
In order to get familiar with the code, use the following set of commands to generate the figure below:
from diffsph import pyflux as pf
import matplotlib.pyplot as plt
%matplotlib inline
# Angle grid in arcmin
theta_grid = [15 * i / 50 for i in range(0, 50)]
# List of satellite galaxies
dsph_list = ['Ursa Major II', 'Fornax', 'Ursa Minor', 'Sextans']
# diffsph's computations at nu = 150 MHz and for the given model
Inu = [[pf.synch_brightness(th, nu = .150, galaxy = gal, rad_temp = 'HDZ',
                                 hyp = 'wimp', ref = '1408.0002', sv = 3e-26,
                                 mchi = 10, channel = 'mumu', high_res = True,
                                 accuracy = .1)
             for th in theta_grid]
            for gal in dsph_list]
# Plots
plt.plot(theta_grid, Inu[0], "k", label = dsph_list[0])
plt.plot(theta_grid, Inu[1], "--k", label = dsph_list[1])
plt.plot(theta_grid, Inu[2], ":k", label = dsph_list[2])
plt.plot(theta_grid, Inu[3], "-.k", label = dsph_list[3])
plt.legend()
plt.xlabel('$\\theta$ (arcmin)', size = 'large');
plt.ylabel('$I_\\nu$ (Jy/sr)', size = 'large');
plt.title('Brightness profiles with diffsph');
plt.text(7.5, 630, '$\chi\chi\, \\to\, \mu^+\mu^-$',
         horizontalalignment = 'center', size = 'large');
 
limits module¶
The following example shows how to obtain limits on the decay rate of dark matter particles using non-detection (noise level) in the field of Draco. It can take just a few minutes to compute them all in a modern laptop:
from diffsph import limits as lims
import matplotlib.pyplot as plt
%matplotlib inline
# DM mass grid in GeV
mass_grid = [10 ** (5 * i / 50) for i in range(0, 50)]
# List of decay channels
ch_list = ['WW', 'ZZ', 'hh', 'nunu', 'ee_MC', 'mumu', 'tautau', 'qq', 'cc', 'bb', 'tt']
# diffsph's computations at nu = 150 MHz and for the given image
rates = [[lims.decay_rate_limest(nu = .15, rms_noise = 100, beam_size = 20,
                                 galaxy = 'Draco', rad_temp = 'HDZ', mchi = mch,
                                 channel = ch, high_res = True, accuracy = .1,
                                 ref = '1408.0002')
          for mch in mass_grid]
         for ch in ch_list]
# Plots
[plt.loglog(mass_grid, rates[i], label = ch_list[i], ls = '--') for i in range(0, 3)]
[plt.loglog(mass_grid, rates[i], label = ch_list[i], ls = ':') for i in range(3, 7)]
[plt.loglog(mass_grid, rates[i], label = ch_list[i]) for i in range(7, len(ch_list))]
plt.ylim([1e-25, 1e-20]);
plt.xlim([3, 1e5]);
plt.legend(loc = 'lower right', ncols = 2)
plt.xlabel('$m_\chi$ (GeV)', size = 'large');
plt.ylabel('$\Gamma_{dec}$ (s${}^{-1}$)', size = 'large');
plt.title('diffsph 2$\sigma$ limit estimates on DM decay rates');
plt.text(5, 4e-21, 'Draco', size = 'large');
 
References