Source code for popsynth.aux_samplers.sky_sampler

import numpy as np

from popsynth.auxiliary_sampler import NonObservedAuxSampler
from popsynth.utils.spherical_geometry import sample_theta_phi


[docs]class SkySampler(object): _auxiliary_sampler_name = "SkySampler"
[docs] def __init__( self, ra_sampler: NonObservedAuxSampler = None, dec_sampler: NonObservedAuxSampler = None, ): """ A sky sampler that samples angular positions in ra and dec. If no samplers are provided, then loads default samplers that sample uniformly on the unit sphere. RA and dec are in radians. :param ra_sampler: Right ascension (RA) sampler :type ra_sampler: :class:`NonObservedAuxSampler` :param dec_sampler: Declination (Dec) sampler :type dec_sampler: :class:`NonObservedAuxSampler` """ self._ra_sampler = ra_sampler self._dec_sampler = dec_sampler self._setup_sky()
def _setup_sky(self): if self._ra_sampler is None: self._ra_sampler = RASampler() if self._dec_sampler is None: self._dec_sampler = DecSampler() @property def ra_sampler(self): return self._ra_sampler @property def dec_sampler(self): return self._dec_sampler
[docs]class RASampler(NonObservedAuxSampler): _auxiliary_sampler_name = "RASampler"
[docs] def __init__(self): """ Samples the right ascension (RA) uniformly on the unit sphere. RA is in radians. """ super(RASampler, self).__init__(name="ra")
[docs] def true_sampler(self, size): self._true_values = np.random.uniform(0, 2 * np.pi, size=size)
[docs]class DecSampler(NonObservedAuxSampler): _auxiliary_sampler_name = "DecSampler"
[docs] def __init__(self): """ Samples the declination (Dec) uniformly on the unit sphere. Dec is in radians. """ super(DecSampler, self).__init__(name="dec")
[docs] def true_sampler(self, size): self._true_values = np.arccos(1 - 2 * np.random.uniform(0.0, 1.0, size=size))