Source code for popsynth.aux_samplers.viewing_angle_sampler

import numpy as np

from popsynth.auxiliary_sampler import AuxiliaryParameter, NonObservedAuxSampler


[docs]class ViewingAngleSampler(NonObservedAuxSampler): _auxiliary_sampler_name = "ViewingAngleSampler" max_angle = AuxiliaryParameter(default=90, vmin=0, vmax=180)
[docs] def __init__(self): """ A viewing angle sampler that samples from 0 to ``max_angle``. Unlike other samplers, it assumes that this is NOT an observed property :param max_angle: The maximum angle to which to sample in degrees :type max_angle: :class:`AuxiliaryParameter` """ super(ViewingAngleSampler, self).__init__( name="va", )
[docs] def true_sampler(self, size: int) -> None: """ Sample the viewing angle by inverse CDF :param size: Number of samples :type size: int """ theta_inverse = np.random.uniform( 0.0, 1 - np.cos(np.deg2rad(self.max_angle)), size=size ) self._true_values = np.arccos(1.0 - theta_inverse)
def _compute_probability(self): return np.sin(self._true_values) / ( 1 - np.cos(np.deg2rad(self.max_angle)) )