wimpydd is hosted by Hepforge, IPPP Durham

Halo Function

WimPyDD provides the routine streamed_halo_function that calculates the \(v_k\), \(\delta\eta_k^{(0,1)}\) quantities needed by the diff_rate and wimp_dd_rate. The simple call:

 >>> vmin,delta_eta0=WD.streamed_halo_function()

samples linearly the \(\delta\eta_k^{(0)}\)'s in units of (km/s)\(^{-1}\) for a Maxwellian velocity distribution with cut at the escape velocity in the Earth's rest frame: \[ f(\vec{v},t)=N\left(\frac{3}{ 2\pi v_{rms}^2}\right )^{3/2} e^{-\frac{3|\vec{v}+\vec{v}_{E,Gal}|^2}{2 v_{rms}^2}}\Theta(v_{esc,Gal}-|\vec{v}+\vec{v}_{E,Gal}(t)|)\] where,
\[ N= \left [ erf(z)-\frac{2}{\sqrt{\pi}}z e^{-z^2}\right ]^{-1}\] with \(v_{esc,Gal}\) the escape velocity in the Galactic rest frame and \(z^2=3 v_{esc,Gal}^2/(2 v_{rms}^2)\). By default hydrothermal equilibrium between the WIMP gas pressure and gravity is assumed, \(v_{rms}\) = \(\sqrt{3/2}|\vec{v}_{rot,Gal}|\) with \(\vec{v}_{rot,Gal}\) the galactic rotational velocity (the value of \(v_{rms}\) can be modified using the argument vrms). Moreover \(\vec{v}_{E,Gal}\) = \(\vec{v}_{rot,Gal}\)+ \(\vec{v}_{Sun,rot}\) + \(\vec{v}_{E,Sun}\), with \(\vec{v}_{Sun,rot}\) the peculiar velocity of the solar system with respect to the Galactic rotational curve and \(\vec{v}_{Sun,rot}\) the velocity of the Earth around the Sun. The routine assumes the default values \(v_{esc,Gal}\) = 550 km/s, \(\vec{v}_{rot,Gal}\) = \((0,220,0)\) km/s, \(\vec{v}_{Sun,rot}\) = \((9,12,7)\) km/s (in the Galactic reference frame where the \(z\) axis is in the direction perpendicular to the galactic plane, the \(x\) axis points toward the galactic center and the velocity of the solar system points in the \(y\) direction). Such values can be changed by using the arguments v_esc_gal, v_rot_gal and v_sun_rot, respectively. For \(\vec{v}_{E,Sun}\) the expression in J. D. Lewin, P.F. Smith is used.

To calculate \(\delta\eta^{(1)}\) the argument yearly_modulation=True must be used, and to get \(\eta^{(0,1)}_k\) instead of \(\delta\eta^{(0,1)}_k\) use delta_eta=False.

The routine can also be used for a user-defined velocity distribution. This requires to pass the argument velocity_distribution_gal. For instance, parameterizing the velocity distribution with non-isotropic velocity dispersions: \[f(\vec{u})=N e^{-\frac{1}{2}\left(\frac{u^2_x}{\sigma^2_x}+\frac{u^2_y}{\sigma^2_y}+\frac{u^2_z}{\sigma^2_z} \right)} \] with:

def func(u,sigma_x,sigma_y,sigma_z):
    return np.exp(-0.5*(u[0]**2/sigma_x**2+

the time-averaged \(\delta \eta_k^{(0)}\)'s for \(\sigma_x\)=120 km/s, \(\sigma_y\)=150 km/s and \(\sigma_z\)=170 km/s can be calculated by:

 >>> vmin,delta_eta_0=WD.streamed_halo_function(velocity_distribution_gal=func,
     sigma_x=120, sigma_y=150, sigma_z=170)

The user-define velocity distribution func must be a function of a three--dimensional array u containing the WIMP velocity in the galactic rest frame. The parameters of func are passed with the keyworded variable-length argument list **args (the argument vrms for the Maxwellian distribution is just a particular case of this). All the other parameters of the routine work in the same way as for a Maxwellian.

Both for a Maxwellian and for a user-defined velocity distribution the full expressions: \[ \eta^{(0)}(v)= \frac{1}{T_0}\int_0^{T_0} \eta(v,t),\]
\[\eta^{(1)}(v)= \frac{2}{T_0}\int_0^{T_0} \cos\left[\omega(t-t_0)\right] \eta(v,t),\,\,\,\,\omega=\frac{2\pi}{T_0}, \] (discretized as sums over the days of the year) can be used by setting full_year_sample=True. This can be particularly time consuming when the numerical integration of a user-defined velocity distribution is required for each day of the year. By default full_year_sample=False; in this case \(\eta^{(0)}\) is approximated by setting \(\vec{v}_{E,Sun}\rightarrow\)0, in \(\eta(v)\), while \(\eta^{(1)}\) is approximated by using a linear expansion in the parameter \(|\vec{v}_{E,Sun}|/|\vec{v}_{E,Gal}|\) for the Maxwellian (see for instance appendix A of F. Donato, N. Fornengo, S. Scopel, Astropart. Phys. 9 (1998) 247–260. ), and by calculating \([\eta_0(t=t_0)-\eta_0(t=t_0+T/2)]/2\) for a user-defined velocity distribution. Also \(t_0\) can be changed by using the argument modulation_phase in days. Finally, day_of_the_year allows to calculate the halo function on a specific day of the year.

In the case when velocity_distribution_gal is used and the routine calculates numerical integrals the output is saved in the folder WimPyDD/Halo_functions for later use to speed-up successive evaluations of the same halo function, unless recalculate=True.

Summary of streamed_halo_function routine

 >>> WD.streamed_halo_function(velocity_distribution_gal=None, 
     vmin=None, delta_eta=True,full_year_sampling=False, 
     day_of_the_year=None, outputfile=None,recalculate=False,
  • velocity_distribution_gal: WIMP velocity distribution in the Galactic rest frame. If velocity_distribution_gal=None the halo functions are calculated using analytical expressions for a standard Maxwellian velocity distribution truncated at v_esc_gal
  • v_rot_gal: galactic rotational velocity at the Sun's position in km/s
  • v_sun_rot: peculiar velocity of the Sun with respect to the rotation curve in km/s
  • v_esc_gal: escape velocity in km/s
  • n_vmin_bin: number of sampled velocity values
  • yearly_modulation: If True calculates yearly modulation amplitudes.
  • vmin: array with velocity values to be sampled (by default set to n_vmin_bin values from 0 to the escape velocity).
  • delta_eta: If True calculates \(\delta\eta\)'s otherwise provides the halo functions \(\eta\)'s
  • full_year_sampling: If True calculates time averages and cosince transforms of the halo functions sampling it for each day of the year.
  • day_of_the_year: allows to calculate the halo function at a particular day of the year in days. By default it is set to modulation_phase-T/4
  • outputfile: If velocity_distribution_gal=!None sets the outputfile name where the halo functions are saved. The output file is saved in the folder WimPyDD/Halo_functions. If outputfile=None the name of the outputfile is set automatically created using the velocity_distribution_gal.__name__ attribute (i.e. the name of the user defined velocity distribution).
  • modulation_phase: set by default to 152.5 days (2nd of June)
  • **args: keyworded variable-length argument list with the arguments of the user defined velocity distribution


Maxwellian velocity distribution function

  • \(\eta^0\) halo function:
  •   >>> vmin,eta0=WD.streamed_halo_function(delta_eta=False)
  • \(\delta\eta^0\) halo function:
  •   >>> vmin,delta_eta0=WD.streamed_halo_function()
  • \(\eta^1\) halo function:
  •   >>> vmin,eta1=WD.streamed_halo_function(delta_eta=False,yearly_modulation=True)
  • \(\delta\eta^1\) halo function:
  •   >>> vmin,delta_eta1=WD.streamed_halo_function(yearly_modulation=True)

User defined velocity distribution function

  • \(\eta^0\) halo function:
  •   >>> vmin,eta0=WD.streamed_halo_function(delta_eta=False)
  • \(\eta^1\) halo function:
  •   >>> vmin,eta1=WD.streamed_halo_function(delta_eta=False,yearly_modulation=True)