Source code for km3astro.random

"""Random sampling utilities.
"""
import numpy as np

from km3astro.time import np_to_astrotime


[docs]def random_azimuth(n=1, unit="rad"): """Draw azimuth, uniformly distributed.""" n = int(n) # the method does not cast floats azi = 2 * np.pi * np.random.random_sample(size=n) if unit == "rad": return azi elif unit == "deg": return azi / np.pi * 180 else: raise KeyError("Unknown unit '{}'".format(unit))
[docs]def random_zenith(n=1, unit="rad"): """Draw zenith, uniformly distributed in cos(zen).""" n = int(n) # the method does not cast floats coszen = 2 * np.random.random_sample(size=n) - 1 zen = np.arccos(coszen) if unit == "rad": return zen elif unit == "deg": return zen / np.pi * 180 else: raise KeyError("Unknown unit '{}'".format(unit))
[docs]def second_from_interval(start, stop, n=1, **randargs): """Sample random times from an interval (in seconds).""" n = int(n) sec = np.timedelta64(1, "s") n_seconds = (stop - start) / sec samples = np.random.randint(low=0, high=n_seconds, size=n, **randargs) * sec return start + samples
[docs]def equidistant_from_interval(start, stop, step=np.timedelta64(2, "m")): """Draw equidistant samples (fixed stepsize) from interval.""" start = np.datetime64(start) stop = np.datetime64(stop) duration = stop - start n_steps = np.ceil(duration / step) samples = np.arange(n_steps) * step return start + samples
[docs]def random_date(n=1, year=2015, astropy_time=False, **randargs): """Create random dates in the given year. Parameters ---------- year: int, default: 2015 n: int, default: 1 """ start = np.datetime64("{}-01-01".format(year)) stop = np.datetime64("{}-01-01".format(year + 1)) sample = second_from_interval(start, stop, n=n, **randargs) if astropy_time: return np_to_astrotime(sample) else: return sample