snorer.HaloSpike¶
class
snorer.HaloSpike(mBH,tBH,alpha)¶
Superclass: snorer.Constants
Class for constructing dark matter halo with spike due to supermassive black hole (SMBH) in the galactic center.
mBH
: float
SMBH mass, \(M_\odot\)
tBH
: float
SMBH age, years
alpha
: str
Slope of the spike profile, only'3/2'
or'7/3'
is acceptable
mBH
: float
SMBH mass, user's input
tBH
: float
SMBH age, user's input
alpha
: obj
Slope of the spike profile
rh
: float
SMBH influence radius \(r_h\), kpc
Rs
: float
Schwarzschild radius \(R_{\rm s}\), kpc
__call__
(r,mx,sigv,rhos,rs,n)¶
After initializing snorer.HaloSpike
instance, it is callable like normal function with the following required inputs.
r
: float
Distance to GC, kpc
mx
: float
DM mass, MeV
sigv
: float
DM annihilation cross section \(\langle\sigma v\rangle\) in the unit of cm3 s−1.None
means no annihilation
rhos
: float
Charasteristic density \(\rho_s\), MeV s−3
rs
: float
Characteristic radius \(r_s\), kpc
n
: float
Slope of the DM profile outside \(R_{\rm sp}\)
out
: scalar
DM number density at \(r\), cm−3
Initializing instance and check its attributes.
>>> import snorer as sn
>>> nx = sn.HaloSpike(mBH=1e7,tBH=1e10,alpha='3/2') # initializing instance
>>> nx # print instance information
SMBH mass: 1.000e+07 M_sun
Spike slope: 3/2
Schwarzschild slope: 9.504e-10
Influence radius: 3.412e-03 kpc
>>> nx.alpha # check alpha
'3/2'
The influence radius \(r_h\) is auto generated but can be replaced by user defined number. It can be reset to the default value by giving None
.
>>> nx.rh # default value of rh
0.003411783398329804
>>> nx.rh = 2.54e-3 # replace rh with user-defined value
>>> nx.rh
2.54e-03
>>> nx.rh = None # reset it to the default value
>>> nx.rh
0.003411783398329804
Make it a callable function that can calculate DM number density at different \(r\).
import numpy as np
import matplotlib.pyplot as plt
import snorer as sn
# Get MW rhos, rs, n, mBH and rh
rhos,rs,n,mBH,rh = constant.MW_profile.values()
# Assuming BH age is 1 Gyr
tBH = 1e10
# DM mass, MeV
mx = 0.1
# Annihilation cross section
sigv_list = [3,0.03,None]
sigv_label = ['3','0.03','0']
# Initializing instances with two different alphas
nx = HaloSpike(mBH=mBH,tBH=tBH,alpha='3/2') # alpha = 3/2
# radius, kpc
r_vals = np.logspace(-5,2,100)
for i in range(3):
sigv = sigv_list[i]
nx_vals = [nx(r,mx,sigv,rhos,rs,n) for r in r_vals]
plt.plot(r_vals,nx_vals,label=sigv_label[i] + r'$\times10^{-26}\,{\rm cm^3~s^{-1}}$')
plt.xscale('log')
plt.yscale('log')
plt.xlabel(r'$r$ [kpc]')
plt.ylabel(r'$n_\chi(r)$ [cm$^{-3}$]')
plt.title(fr'$m_\chi = {mx:.1f}$ MeV')
plt.legend()
plt.show()
This class is based on the Supplementary Material of Ref. [1].
References¶
Y.-H. Lin and M.-R. Wu, Phys. Rev. Lett. 133, 111004 (2024)
- P. Gondolo and J. Silk, Phys. Rev. Lett. 83, 1719 (1999)
- J. Cline and M. Puel, JCAP 06, 004 (2023)