# Licensed under a 3-clause BSD style license - see LICENSE.rst"""Utilities to compute J-factor maps."""importastropy.unitsasu__all__=["JFactory"]
[docs]classJFactory:"""Compute J-Factor maps. All J-Factors are computed for annihilation. The assumed dark matter profiles will be centered on the center of the map. Parameters ---------- geom : `~gammapy.maps.WcsGeom` Reference geometry profile : `~gammapy.astro.darkmatter.profiles.DMProfile` Dark matter profile distance : `~astropy.units.Quantity` Distance to convert angular scale of the map """def__init__(self,geom,profile,distance):self.geom=geomself.profile=profileself.distance=distance
[docs]defcompute_differential_jfactor(self):r"""Compute differential J-Factor. .. math:: \frac{\mathrm d J}{\mathrm d \Omega} = \int_{\mathrm{LoS}} \mathrm d r \rho(r) """# TODO: Needs to be implemented more efficientlyseparation=self.geom.separation(self.geom.center_skydir)rmin=separation.rad*self.distancermax=self.distanceval=[self.profile.integral(_,rmax)for_inrmin.flatten()]jfact=u.Quantity(val).to("GeV2 cm-5").reshape(rmin.shape)returnjfact/u.steradian
[docs]defcompute_jfactor(self):r"""Compute astrophysical J-Factor. .. math:: J(\Delta\Omega) = \int_{\Delta\Omega} \mathrm d \Omega^{\prime} \frac{\mathrm d J}{\mathrm d \Omega^{\prime}} """diff_jfact=self.compute_differential_jfactor()returndiff_jfact*self.geom.to_image().solid_angle()